Function at 0x401c00
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff8
sub esp, 0x268
mov eax, dword [ebp + 0x18]
mov dword [esp + 0x24], eax
mov ecx, dword [ebp + 0x14]
mov ebx, dword [ebp + 0x10]
mov dword [esp + 0x48], 0
mov esi, ebx
jmp 0x401c36
mov ecx, edi
mov byte [ebx], al
inc ebx
inc ecx
mov dword [esp + 0x1c], esi
test cl, 3
mov dword [esp + 0x18], ebx
mov edi, ecx
je 0x401c50
movzx eax, byte [ecx]
jmp 0x401c6e
mov eax, dword [ecx]
mov esi, eax
not esi
and esi, 0x80808080
mov ecx, eax
xor ecx, 0x25252525
add ecx, 0xfefefeff
test ecx, esi
je 0x401cbd
cmp al, 0x25
je 0x401d38
mov ebx, dword [esp + 0x18]
mov esi, dword [esp + 0x1c]
test al, al
je 0x4042cf
cmp dword [ebp + 8], 0
je 0x401c30
mov ecx, ebx
sub ecx, esi
cmp ecx, 0x1ff
jl 0x401c30
add dword [esp + 0x48], ecx
push ecx
push dword [ebp + 0xc]
push esi
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x4042f2
mov ebx, eax
mov ecx, edi
movzx eax, byte [edi]
mov esi, ebx
jmp 0x401c32
mov ecx, dword [esp + 0x1c]
not ecx
mov edx, ebx
jmp 0x401d06
mov esi, dword [esp + 0x18]
mov dword [esi], eax
add esi, 4
mov dword [esp + 0x18], esi
mov eax, dword [edi + 4]
add edi, 4
mov esi, eax
not esi
and esi, 0x80808080
mov ebx, eax
xor ebx, 0x25252525
add ebx, 0xfefefeff
add edx, 4
test ebx, esi
jne 0x401c6e
lea ebx, [eax - 0x1010101]
test esi, ebx
jne 0x401c76
cmp dword [ebp + 8], 0
je 0x401cd0
mov esi, edx
xor esi, dword [esp + 0x1c]
mov ebx, edx
and ebx, ecx
add ebx, ebx
sub esi, ebx
add esi, 0x200
cmp esi, 4
jge 0x401cd0
jmp 0x401c6e
add edi, 2
mov dword [esp + 4], 0
mov ecx, edi
mov ebx, dword [esp + 0x18]
jmp 0x401d55
movzx eax, byte [ecx - 1]
lea esi, [eax - 0x20]
cmp esi, 0x3f
ja 0x401db4
mov edx, 2
jmp dword [esi*4 + 0x445564]
dec ecx
cmp al, 0x2a
mov esi, dword [esp + 0x1c]
jne 0x401dd1
mov eax, dword [esp + 0x24]
mov edi, dword [eax]
add eax, 4
mov dword [esp + 0x24], eax
movzx eax, byte [ecx + 1]
inc ecx
jmp 0x401e04
mov edx, eax
add dl, 0xd0
xor edi, edi
cmp dl, 9
ja 0x401e04
xor edi, edi
nop
movzx eax, al
lea edx, [edi + edi*4]
lea edi, [eax + edx*2]
mov eax, edi
xor eax, 0x30
and edi, 0xffffffcf
add edi, edi
sub edi, eax
movzx eax, byte [ecx + 1]
inc ecx
mov edx, eax
add dl, 0xd0
cmp dl, 0xa
jb 0x401de0
mov dword [esp + 8], 0xffffffff
cmp al, 0x2e
mov dword [esp + 0x30], edi
jne 0x401e73
movzx eax, byte [ecx + 1]
cmp al, 0x2a
jne 0x401e36
mov eax, dword [esp + 0x24]
mov edx, dword [eax]
mov dword [esp + 8], edx
add eax, 4
mov dword [esp + 0x24], eax
movzx eax, byte [ecx + 2]
add ecx, 2
jmp 0x401e73
inc ecx
mov edx, eax
add dl, 0xd0
mov dword [esp + 8], 0
cmp dl, 9
ja 0x401e73
xor edi, edi
nop
nop
nop
nop
nop
lea edx, [edi + edi*4]
movzx eax, al
lea edi, [eax + edx*2]
add edi, 0xffffffd0
movzx eax, byte [ecx + 1]
inc ecx
mov edx, eax
add dl, 0xd0
cmp dl, 0xa
jb 0x401e50
mov dword [esp + 8], edi
mov edi, dword [esp + 0x30]
movzx edx, al
add edx, 0xffffffb7
cmp edx, 0x31
ja case.default.0x401e7e
jmp dword [edx*4 + 0x445664]
mov dword [esp + 0x4c], ecx
movzx ecx, al
add ecx, 0xffffffbf
cmp ecx, 0x37
ja 0x40268c
jmp dword [ecx*4 + 0x44572c]
mov byte [esp + 0x263], al
mov dword [esp + 0x20], 1
mov byte [esp + 0x40], 0
mov byte [esp + 0x34], 0
mov dword [esp + 0x3c], 0
mov dword [esp + 0xc], 0
lea eax, [esp + 0x263]
mov dword [esp], eax
mov dword [esp + 4], 0
xor edx, edx
xor ecx, ecx
xor edi, edi
jmp 0x403636
mov dword [esp + 0x10], edx
mov eax, dword [esp + 0x20]
cmp ecx, eax
jg 0x403644
mov ecx, eax
mov dword [esp + 0x18], eax
movsx eax, byte [esp + 0x40]
mov edx, ecx
xor edx, eax
movsx esi, byte [esp + 0x34]
add esi, dword [esp + 0x10]
add esi, edx
mov dword [esp + 8], ecx
and ecx, eax
lea edx, [esi + ecx*2]
cmp edi, edx
jg 0x40366b
mov edi, edx
sub edi, edx
mov ecx, dword [esp + 0x18]
sub dword [esp + 8], ecx
mov ecx, dword [esp + 4]
test cl, 1
mov esi, dword [esp + 0x1c]
jne 0x403694
test cl, 0x10
mov edx, dword [esp]
jne 0x403699
mov dword [esp + 4], 0
jmp 0x4036a9
mov edx, dword [esp]
jmp 0x4036a9
mov ecx, dword [esp + 8]
cmp edi, ecx
jg 0x4036a3
mov edi, ecx
mov dword [esp + 8], edi
xor edi, edi
mov ecx, edi
add ecx, dword [esp + 8]
je 0x403b5c
test byte [esp + 4], 1
jne 0x4037fd
test edi, edi
jg 0x4036e2
jmp 0x4037fd
mov ecx, dword [esp + 0x18]
mov edi, dword [esp + 0x30]
sub edi, ecx
test edi, edi
jle 0x4037f8
mov ecx, edi
cmp dword [ebp + 8], 0
je 0x4036fb
mov eax, esi
sub eax, ebx
add eax, 0x200
mov ecx, edi
cmp edi, eax
jl 0x4036fb
mov ecx, eax
mov dword [esp + 0x30], edi
test ecx, ecx
mov dword [esp + 0x18], ecx
mov dword [esp + 0x1c], esi
je 0x403750
mov eax, ebx
and eax, 3
je 0x403750
mov esi, ebx
not esi
and esi, 3
lea edi, [ecx - 1]
cmp esi, edi
jb 0x403722
mov esi, edi
lea eax, [esi + 1]
push eax
push 0x20
push ebx
call fcn.0040d860
mov eax, edi
add esp, 0xc
add ebx, esi
inc ebx
sub eax, esi
mov esi, dword [esp + 0x1c]
mov edx, dword [esp]
mov ecx, dword [esp + 0x18]
cmp eax, 4
jge 0x403757
jmp 0x403798
mov eax, ecx
cmp eax, 4
jl 0x403798
mov ecx, eax
mov edx, eax
cmp eax, 7
jl 0x403765
mov eax, 7
neg eax
mov edi, edx
lea esi, [edx + eax]
add esi, 3
and esi, 0xfffffffc
lea eax, [esi + 4]
push eax
push 0x20
push ebx
call fcn.0040d860
mov eax, edi
add esp, 0xc
add ebx, esi
add ebx, 4
sub eax, esi
add eax, 0xfffffffc
mov esi, dword [esp + 0x1c]
mov edx, dword [esp]
mov ecx, dword [esp + 0x18]
test eax, eax
je 0x4037b8
push eax
push 0x20
push ebx
mov edi, esi
mov esi, eax
call fcn.0040d860
mov ecx, dword [esp + 0x24]
mov edx, dword [esp + 0xc]
add esp, 0xc
add ebx, esi
mov esi, edi
cmp dword [ebp + 8], 0
je 0x4036d4
mov eax, ebx
sub eax, esi
lea ecx, [eax + 1]
cmp ecx, 0x200
jl 0x4036d0
add dword [esp + 0x48], eax
push eax
push dword [ebp + 0xc]
push esi
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x4042f2
mov ebx, eax
mov esi, eax
mov edx, dword [esp]
jmp 0x4036d0
movzx eax, byte [esp + 0x40]
lea ecx, [esp + 0x41]
mov dword [esp + 0x14], ecx
test al, al
mov dword [esp + 0x30], edi
jne 0x40386c
mov dword [esp + 0x1c], esi
mov eax, dword [esp + 0xc]
mov ecx, eax
shr ecx, 0x18
mov dword [esp + 0x18], ecx
xor esi, esi
test byte [esp + 4], 0x40
je 0x403840
and eax, 0xffffff
add eax, dword [esp + 8]
mov esi, dword [esp + 0x18]
lea ecx, [esi + 1]
xor edx, edx
div ecx
sub esi, edx
mov edx, dword [esp]
cmp dword [esp + 8], 0
jle 0x404239
mov eax, dword [esp + 8]
jmp 0x4039a0
mov edx, dword [esp]
movzx eax, byte [esp + 0x40]
test al, al
je 0x40380d
movsx ecx, al
mov eax, ecx
cmp dword [ebp + 8], 0
je 0x403890
mov eax, ebx
not eax
and eax, esi
mov edx, esi
not edx
and edx, ebx
sub eax, edx
add eax, 0x200
cmp eax, ecx
jl 0x403890
mov eax, ecx
sub cl, al
mov byte [esp + 0x40], cl
test eax, eax
je 0x40393b
mov ecx, eax
and ecx, 3
je 0x403980
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], esi
xor edx, edx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov esi, dword [esp + 0x14]
lea edi, [esi + 1]
mov dword [esp + 0x14], edi
movzx eax, byte [esi]
mov byte [ebx + edx], al
inc edx
cmp ecx, edx
jne 0x4038c0
add ebx, edx
mov eax, dword [esp + 0x18]
mov ecx, eax
sub ecx, edx
mov esi, dword [esp + 0x1c]
mov edi, dword [esp + 0x30]
cmp eax, 4
jb 0x40393b
nop
nop
nop
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx], al
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx + 1], al
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx + 2], al
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx + 3], al
add ebx, 4
add ecx, 0xfffffffc
jne 0x4038f0
cmp dword [ebp + 8], 0
je 0x403860
mov eax, ebx
sub eax, esi
cmp eax, 0x1ff
jl 0x403860
add dword [esp + 0x48], eax
push eax
push dword [ebp + 0xc]
push esi
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x4042f2
mov ebx, eax
mov esi, eax
jmp 0x403860
mov ecx, eax
cmp eax, 4
jae 0x4038f0
jmp 0x40393b
mov eax, dword [esp + 8]
sub eax, dword [esp + 0xc]
test eax, eax
jle 0x403b53
mov dword [esp + 8], eax
mov ecx, eax
cmp dword [ebp + 8], 0
je 0x4039c7
mov eax, dword [esp + 0x1c]
sub eax, ebx
add eax, 0x200
mov ecx, dword [esp + 8]
mov edi, ecx
cmp ecx, eax
jl 0x4039c3
mov ecx, eax
mov edi, dword [esp + 0x30]
test byte [esp + 4], 0x40
mov dword [esp + 0xc], ecx
jne 0x403a59
test ecx, ecx
je 0x403a12
mov eax, ebx
and eax, 3
je 0x403a12
mov edi, ebx
not edi
and edi, 3
dec ecx
cmp edi, ecx
jb 0x4039ef
mov edi, ecx
lea eax, [edi + 1]
push eax
push 0x30
push ebx
mov dword [esp + 0x38], ecx
call fcn.0040d860
mov ecx, dword [esp + 0x38]
add esp, 0xc
add ebx, edi
inc ebx
sub ecx, edi
mov edx, dword [esp]
mov edi, dword [esp + 0x30]
cmp ecx, 4
jl 0x403a59
mov edx, ecx
mov eax, ecx
mov edi, ecx
cmp ecx, 7
jl 0x403a27
mov eax, 7
neg eax
mov dword [esp + 0x2c], edi
add edi, eax
add edi, 3
and edi, 0xfffffffc
lea eax, [edi + 4]
push eax
push 0x30
push ebx
call fcn.0040d860
mov ecx, dword [esp + 0x38]
add esp, 0xc
add ebx, edi
add ebx, 4
sub ecx, edi
add ecx, 0xfffffffc
mov edi, dword [esp + 0x30]
mov edx, dword [esp]
test ecx, ecx
je 0x403aa0
test cl, 1
jne 0x403a70
mov eax, ecx
cmp ecx, 1
jne 0x403afe
jmp 0x403aa0
mov al, 0x30
test byte [esp + 4], 0x40
je 0x403a8d
cmp esi, dword [esp + 0x18]
jne 0x403a8c
movzx eax, byte [0x448001]
xor al, 0xb9
xor esi, esi
jmp 0x403a8d
inc esi
mov byte [ebx], al
inc ebx
lea eax, [ecx - 1]
cmp ecx, 1
jne 0x403afe
nop
nop
nop
nop
nop
nop
nop
nop
cmp dword [ebp + 8], 0
je 0x403990
mov eax, ebx
mov ecx, dword [esp + 0x1c]
sub eax, ecx
cmp eax, 0x1ff
jl 0x403990
add dword [esp + 0x48], eax
push eax
push dword [ebp + 0xc]
push ecx
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x4042f2
mov ebx, eax
mov dword [esp + 0x1c], eax
mov edx, dword [esp]
jmp 0x403990
mov edx, dword [esp]
mov byte [ebx + 1], cl
add ebx, 2
add eax, 0xfffffffe
je 0x403aa0
mov cl, 0x30
test byte [esp + 4], 0x40
je 0x403b21
cmp esi, dword [esp + 0x18]
jne 0x403b20
movzx edx, byte [0x448001]
xor dl, 0xb9
xor esi, esi
jmp 0x403b23
inc esi
mov dl, 0x30
mov byte [ebx], dl
test byte [esp + 4], 0x40
je 0x403af0
cmp esi, dword [esp + 0x18]
mov edx, dword [esp]
jne 0x403b50
movzx ecx, byte [0x448001]
xor cl, 0xb9
xor esi, esi
jmp 0x403af3
inc esi
jmp 0x403af3
movzx eax, byte [esp + 0x40]
mov esi, dword [esp + 0x1c]
lea ecx, [esp + 0x41]
mov dword [esp + 0x14], ecx
test al, al
je 0x403cad
mov dword [esp + 0x30], edi
jmp 0x403b94
mov ebx, eax
mov esi, eax
mov edx, dword [esp]
movzx eax, byte [esp + 0x40]
test al, al
je 0x403cad
movsx ecx, al
mov eax, ecx
cmp dword [ebp + 8], 0
je 0x403bae
mov eax, esi
sub eax, ebx
add eax, 0x200
cmp eax, ecx
jl 0x403bae
mov eax, ecx
sub cl, al
mov byte [esp + 0x40], cl
test eax, eax
je 0x403c5b
mov ecx, eax
and ecx, 3
je 0x403ca0
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], esi
xor edx, edx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov esi, dword [esp + 0x14]
lea edi, [esi + 1]
mov dword [esp + 0x14], edi
movzx eax, byte [esi]
mov byte [ebx + edx], al
inc edx
cmp ecx, edx
jne 0x403be0
add ebx, edx
mov eax, dword [esp + 0x18]
mov ecx, eax
sub ecx, edx
mov esi, dword [esp + 0x1c]
mov edi, dword [esp + 0x30]
cmp eax, 4
jb 0x403c5b
nop
nop
nop
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx], al
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx + 1], al
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx + 2], al
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx + 3], al
add ebx, 4
add ecx, 0xfffffffc
jne 0x403c10
cmp dword [ebp + 8], 0
je 0x403b84
mov eax, ebx
sub eax, esi
lea ecx, [eax + 1]
cmp ecx, 0x200
jl 0x403b84
add dword [esp + 0x48], eax
push eax
push dword [ebp + 0xc]
push esi
call dword [ebp + 8]
add esp, 0xc
test eax, eax
jne 0x403b80
jmp 0x4042f2
mov ecx, eax
cmp eax, 4
jae 0x403c10
jmp 0x403c5b
mov dword [esp + 0x1c], esi
mov esi, dword [esp + 0x20]
test esi, esi
mov dword [esp + 0x30], edi
jne 0x403f31
mov edx, dword [esp + 0x10]
test edx, edx
mov esi, dword [esp + 0x1c]
jne 0x403e0e
lea eax, [esp + 0x35]
mov dword [esp + 0x14], eax
nop
nop
nop
nop
nop
nop
nop
movzx ecx, byte [esp + 0x34]
test cl, cl
je 0x4040ed
movsx eax, cl
mov edx, esi
sub edx, ebx
add edx, 0x200
cmp edx, eax
jl 0x403d00
mov edx, eax
cmp dword [ebp + 8], 0
je 0x403d08
mov eax, edx
movzx ecx, cl
sub ecx, eax
mov byte [esp + 0x34], cl
test eax, eax
je 0x403dab
mov ecx, eax
and ecx, 3
je 0x403df0
mov dword [esp + 0x1c], esi
xor edx, edx
nop
nop
nop
nop
nop
nop
mov esi, dword [esp + 0x14]
lea edi, [esi + 1]
mov dword [esp + 0x14], edi
mov edi, ebx
movzx ebx, byte [esi]
mov byte [edi + edx], bl
mov ebx, edi
inc edx
cmp ecx, edx
jne 0x403d30
add ebx, edx
mov ecx, eax
sub ecx, edx
mov esi, dword [esp + 0x1c]
mov edi, dword [esp + 0x30]
cmp eax, 4
jb 0x403dab
nop
nop
nop
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx], al
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx + 1], al
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx + 2], al
mov eax, dword [esp + 0x14]
lea edx, [eax + 1]
mov dword [esp + 0x14], edx
movzx eax, byte [eax]
mov byte [ebx + 3], al
add ebx, 4
add ecx, 0xfffffffc
jne 0x403d60
cmp dword [ebp + 8], 0
je 0x403ce0
mov eax, ebx
sub eax, esi
cmp eax, 0x1ff
jl 0x403ce0
add dword [esp + 0x48], eax
push eax
push dword [ebp + 0xc]
push esi
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x4042f2
mov ebx, eax
mov esi, eax
jmp 0x403ce0
mov ecx, eax
cmp eax, 4
jae 0x403d60
jmp 0x403dab
mov edx, dword [esp + 0x10]
sub edx, dword [esp + 0x18]
je 0x403cd1
mov ecx, esi
sub ecx, ebx
add ecx, 0x200
mov eax, edx
mov dword [esp + 0x10], edx
cmp edx, ecx
jl 0x403e24
mov eax, ecx
mov edx, dword [esp + 0x10]
cmp dword [ebp + 8], 0
je 0x403e30
mov edx, eax
test edx, edx
mov dword [esp + 0x18], edx
mov dword [esp + 0x1c], esi
je 0x403e90
mov eax, ebx
and eax, 3
je 0x403e90
mov ecx, ebx
not ebx
and ebx, 3
lea esi, [edx - 1]
cmp ebx, esi
jb 0x403e53
mov ebx, esi
lea eax, [ebx + 1]
push eax
push 0x30
mov edi, ecx
push ecx
call fcn.0040d860
add esp, 0xc
lea ecx, [ebx + edi]
inc ecx
sub esi, ebx
mov edi, dword [esp + 0x1c]
cmp esi, 4
jge 0x403e9b
test esi, esi
je 0x403ed6
push esi
push 0x30
mov ebx, ecx
push ecx
call fcn.0040d860
add esp, 0xc
add ebx, esi
jmp 0x403ed8
mov edi, esi
mov ecx, ebx
mov esi, edx
cmp esi, 4
jl 0x403e73
mov eax, esi
cmp esi, 7
jl 0x403ea7
mov eax, 7
neg eax
lea edi, [esi + eax]
add edi, 3
and edi, 0xfffffffc
lea eax, [edi + 4]
push eax
push 0x30
mov ebx, ecx
push ecx
call fcn.0040d860
add esp, 0xc
lea ecx, [edi + ebx]
add ecx, 4
sub esi, edi
add esi, 0xfffffffc
mov edi, dword [esp + 0x1c]
test esi, esi
jne 0x403e77
mov ebx, ecx
mov esi, edi
cmp dword [ebp + 8], 0
mov edi, dword [esp + 0x30]
je 0x403e00
mov eax, ebx
sub eax, esi
cmp eax, 0x1ff
jl 0x403e00
add dword [esp + 0x48], eax
push eax
push dword [ebp + 0xc]
push esi
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x4042f2
mov ebx, eax
mov esi, eax
jmp 0x403e00
mov edx, edi
mov edi, esi
mov esi, dword [esp + 0x18]
sub esi, dword [esp]
je 0x403cc1
mov ecx, dword [esp + 0x1c]
sub ecx, ebx
add ecx, 0x200
mov eax, esi
cmp esi, ecx
jl 0x403f45
mov eax, ecx
mov ecx, esi
cmp dword [ebp + 8], 0
je 0x403f4f
mov ecx, eax
cmp ecx, 4
mov dword [esp + 0x18], esi
mov dword [esp], ecx
jl 0x403fb0
lea eax, [ecx - 4]
mov dword [esp + 0xc], eax
shr eax, 2
inc eax
and eax, 7
je 0x403fb4
mov esi, edi
shl eax, 2
mov edi, edx
xor edx, edx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov ecx, dword [edi + edx]
mov dword [ebx + edx], ecx
add edx, 4
cmp eax, edx
jne 0x403f80
add ebx, edx
mov ecx, dword [esp]
sub ecx, edx
add edi, edx
mov eax, ecx
mov edx, edi
mov edi, esi
mov esi, dword [esp + 0x18]
cmp dword [esp + 0xc], 0x1c
jae 0x403fc0
jmp 0x404001
mov eax, ecx
jmp 0x404001
cmp dword [esp + 0xc], 0x1c
jb 0x404001
nop
nop
nop
nop
nop
mov eax, dword [edx]
mov dword [ebx], eax
mov eax, dword [edx + 4]
mov dword [ebx + 4], eax
mov eax, dword [edx + 8]
mov dword [ebx + 8], eax
mov eax, dword [edx + 0xc]
mov dword [ebx + 0xc], eax
mov eax, dword [edx + 0x10]
mov dword [ebx + 0x10], eax
mov eax, dword [edx + 0x14]
mov dword [ebx + 0x14], eax
mov eax, dword [edx + 0x18]
mov dword [ebx + 0x18], eax
mov eax, dword [edx + 0x1c]
mov dword [ebx + 0x1c], eax
add ebx, 0x20
add edx, 0x20
lea eax, [ecx - 0x20]
add ecx, 0xffffffdc
cmp ecx, 0xfffffff8
mov ecx, eax
jb 0x403fc0
test eax, eax
je 0x404091
mov ecx, eax
and ecx, 7
je 0x4040e0
mov esi, edx
xor edx, edx
nop
nop
nop
nop
nop
nop
nop
nop
mov edi, ebx
movzx ebx, byte [esi + edx]
mov byte [edi + edx], bl
mov ebx, edi
inc edx
cmp ecx, edx
jne 0x404020
add ebx, edx
mov ecx, eax
sub ecx, edx
add esi, edx
mov edi, dword [esp + 0x30]
mov edx, esi
mov esi, dword [esp + 0x18]
cmp eax, 8
jb 0x404091
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx eax, byte [edx]
mov byte [ebx], al
movzx eax, byte [edx + 1]
mov byte [ebx + 1], al
movzx eax, byte [edx + 2]
mov byte [ebx + 2], al
movzx eax, byte [edx + 3]
mov byte [ebx + 3], al
movzx eax, byte [edx + 4]
mov byte [ebx + 4], al
movzx eax, byte [edx + 5]
mov byte [ebx + 5], al
movzx eax, byte [edx + 6]
mov byte [ebx + 6], al
movzx eax, byte [edx + 7]
add edx, 8
mov byte [ebx + 7], al
add ebx, 8
add ecx, 0xfffffff8
jne 0x404050
cmp dword [ebp + 8], 0
je 0x403f28
mov esi, edi
mov edi, edx
mov eax, ebx
mov edx, dword [esp + 0x1c]
sub eax, edx
lea ecx, [eax + 1]
cmp ecx, 0x200
jl 0x403f20
add dword [esp + 0x48], eax
push eax
push dword [ebp + 0xc]
push edx
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x4042f2
mov ebx, eax
mov dword [esp + 0x1c], eax
jmp 0x403f20
mov ecx, eax
cmp eax, 8
jae 0x404050
jmp 0x404091
test byte [esp + 4], 1
je 0x404246
test edi, edi
mov ecx, dword [esp + 0x4c]
jle 0x40424a
jne 0x40411c
jmp 0x40424a
sub edi, edx
mov ecx, dword [esp + 0x4c]
je 0x40424a
mov edx, edi
cmp dword [ebp + 8], 0
je 0x404135
mov eax, esi
sub eax, ebx
add eax, 0x200
mov edx, edi
cmp edi, eax
jl 0x404135
mov edx, eax
test edx, edx
mov dword [esp + 4], edx
mov dword [esp + 0x1c], esi
mov dword [esp + 0x30], edi
je 0x4041a0
mov eax, ebx
and eax, 3
je 0x4041a0
mov ecx, ebx
not ebx
and ebx, 3
lea esi, [edx - 1]
cmp ebx, esi
jb 0x40415c
mov ebx, esi
lea eax, [ebx + 1]
push eax
push 0x20
mov edi, ecx
push ecx
call fcn.0040d860
add esp, 0xc
lea ecx, [ebx + edi]
inc ecx
sub esi, ebx
mov edi, dword [esp + 0x1c]
cmp esi, 4
jge 0x4041ab
test esi, esi
je 0x4041e6
push esi
push 0x20
mov ebx, ecx
push ecx
call fcn.0040d860
add esp, 0xc
add ebx, esi
jmp 0x4041e8
mov edi, esi
mov ecx, ebx
mov esi, edx
cmp esi, 4
jl 0x40417c
mov eax, esi
cmp esi, 7
jl 0x4041b7
mov eax, 7
neg eax
lea edi, [esi + eax]
add edi, 3
and edi, 0xfffffffc
lea eax, [edi + 4]
push eax
push 0x20
mov ebx, ecx
push ecx
call fcn.0040d860
add esp, 0xc
lea ecx, [edi + ebx]
add ecx, 4
sub esi, edi
add esi, 0xfffffffc
mov edi, dword [esp + 0x1c]
test esi, esi
jne 0x404180
mov ebx, ecx
mov esi, edi
mov edx, dword [esp + 4]
cmp dword [ebp + 8], 0
mov edi, dword [esp + 0x30]
je 0x404110
mov ecx, ebx
xor ecx, esi
mov eax, esi
not eax
and eax, ebx
add eax, eax
sub eax, ecx
cmp eax, 0x1ff
jl 0x404110
add dword [esp + 0x48], eax
push eax
push dword [ebp + 0xc]
push esi
call dword [ebp + 8]
add esp, 0xc
test eax, eax
je 0x4042f2
mov ebx, eax
mov esi, eax
mov edx, dword [esp + 4]
jmp 0x404110
lea eax, [esp + 0x41]
mov dword [esp + 0x14], eax
jmp 0x403cb1
mov ecx, dword [esp + 0x4c]
inc ecx
jmp 0x401c36
cmp dword [ebp + 8], 0
je 0x4042f8
mov eax, ebx
sub eax, esi
test eax, eax
jle 0x4042fb
add dword [esp + 0x48], eax
push eax
push dword [ebp + 0xc]
push esi
call dword [ebp + 8]
add esp, 0xc
mov ebx, eax
mov esi, eax
jmp 0x4042fb
xor ebx, ebx
xor esi, esi
jmp 0x4042fb
mov byte [ebx], 0
mov eax, dword [esp + 0x48]
add eax, ebx
sub eax, esi
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret
mov edx, dword [esp + 0x38]
push esp
and al, 0x38
mov word [edi], 0
mov eax, dword [esp + 4]
mov eax, dword [eax + 0x10]
shr eax, 1
mov dword [edx], eax
mov edi, dword [esp + 0x44]
test ecx, ecx
je 0x44573b
mov eax, dword [esp + 4]
mov eax, dword [eax + 4]
mov dword [ecx], eax
test edi, edi
je 0x4457a3
mov eax, dword [esp + 0x40]
test eax, eax
je 0x44579a
mov edx, dword [edi]
mov ecx, dword [esp + 4]
mov ecx, dword [ecx + 0xc]
cmp edx, ecx
jb 0x445756
mov edx, ecx
mov ecx, dword [esp + 4]
mov ebp, dword [ecx + 8]
add ebp, ecx
mov ecx, edx
shr ecx, 2
mov ebx, edx
and ebx, 0xfffffffc
mov edi, eax
add eax, ebx
add ebx, ebp
xchg esi, ebp
rep movsd dword es:[edi], dword [esi]
xchg esi, ebp
mov ecx, edx
shr ecx, 1
and ecx, 1
mov ebp, ebx
mov edi, eax
xchg esi, ebp
rep movsw word es:[edi], word [esi]
xchg esi, ebp
test dl, 1
mov edi, dword [esp + 0x44]
jl 0x4457b1
inc esp
je 0x44579a
and edx, 2
movzx ecx, byte [ebx + edx]
mov byte [eax + edx], cl
mov eax, dword [esp + 4]
mov eax, dword [eax + 0xc]
mov dword [edi], eax
push dword [esp + 4]
call 0x43e520
add esp, 4
mov eax, esi
add esp, 0x18
pop esi
pop edi
pop ebx
pop ebp
ret