Function at 0x404790
Capabilities:
Enumerate pe sections
Resolve function by parsing pe exports

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0xe0
mov ebx, dword [esp + 0xf4]
mov dword [esp + 4], eax
mov dword [esp + 0x38], edx
cmp ebx, 9
jbe 0x4047ec
mov eax, ecx
movzx ecx, word [ecx]
movzx edx, word [eax + 4]
movzx edi, word [eax + 2]
mov ebp, edx
mov word [esp + 0xc], dx
mov dword [esp], edx
lea edx, [ecx + edi]
add edx, ebp
mov ebp, ebx
mov word [esp + 8], di
sub ebp, edx
mov dword [esp + 0x14], ebp
lea edx, [ebp - 6]
mov ebp, dword [esp + 0xf8]
mov ebp, dword [ebp]
mov dword [esp + 0x18], ebp
cmp ebx, edx
jae 0x404800
mov edx, 0xffffffec
add esp, 0xe0
mov eax, edx
pop ebx
pop esi
pop edi
pop ebp
ret
test ecx, ecx
je 0x404928
lea ebx, [eax + 0xa]
lea ebp, [eax + 6]
mov dword [esp + 0x48], ebx
movzx ebx, byte [eax + ecx + 5]
mov dword [esp + 0x44], ebp
cmp ecx, 3
ja 0x4048e0
mov dword [esp + 0x98], ebp
movzx ebp, byte [eax + 6]
mov dword [esp + 0x90], ebp
cmp cx, 2
je 0x40484b
cmp cx, 3
jne 0x40485b
movzx esi, byte [eax + 8]
shl esi, 0x10
add ebp, esi
movzx eax, byte [eax + 7]
shl eax, 8
add eax, ebp
mov dword [esp + 0x90], eax
test bl, bl
je 0x4047ec
mov eax, 5
bsr ebx, ebx
sub eax, ecx
shl eax, 3
sub eax, ebx
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x44]
mov dword [esp + 0x3c], eax
mov eax, dword [esp + 0x10]
mov dword [esp + 0x94], eax
test edi, edi
je 0x404928
add ecx, dword [esp + 0x44]
lea ebx, [ecx + 4]
mov dword [esp + 0x58], ecx
movzx eax, byte [ecx + edi - 1]
mov dword [esp + 0x4c], ebx
cmp edi, 3
jbe 0x404938
lea ebx, [ecx + edi - 4]
mov ecx, dword [ebx]
mov dword [esp + 0x34], ebx
mov dword [esp + 0xac], ebx
mov dword [esp + 0xa4], ecx
test al, al
je 0x404910
bsr eax, eax
mov ecx, 8
sub ecx, eax
mov ebp, ecx
jmp 0x404987
lea eax, [ebp + ecx - 4]
mov dword [esp + 0x3c], eax
mov dword [esp + 0x98], eax
mov eax, dword [eax]
mov dword [esp + 0x90], eax
test bl, bl
je 0x404910
bsr ebx, ebx
mov eax, 8
sub eax, ebx
mov dword [esp + 0x10], eax
jmp 0x40487a
add esp, 0xe0
mov edx, 0xffffffff
pop ebx
mov eax, edx
pop esi
pop edi
pop ebp
ret
mov edx, 0xffffffb8
jmp 0x4047f1
mov ebx, dword [esp + 0x58]
movzx esi, word [esp + 8]
movzx ecx, byte [ebx]
mov dword [esp + 0xac], ebx
mov dword [esp + 0xa4], ecx
cmp si, 2
je 0x405129
cmp si, 3
je 0x405120
test al, al
je 0x4047ec
mov ecx, 5
bsr eax, eax
sub ecx, edi
shl ecx, 3
sub ecx, eax
mov eax, dword [esp + 0x58]
mov ebp, ecx
mov dword [esp + 0x34], eax
mov eax, dword [esp]
mov dword [esp + 0xa8], ebp
test eax, eax
je 0x404928
add edi, dword [esp + 0x58]
mov ebx, dword [esp]
lea eax, [edi + 4]
mov dword [esp + 0x6c], edi
mov dword [esp + 0x50], eax
movzx eax, byte [edi + ebx - 1]
cmp ebx, 3
ja 0x405148
movzx ecx, byte [edi]
movzx esi, word [esp + 0xc]
mov dword [esp + 0xc0], edi
mov dword [esp + 0xb8], ecx
cmp si, 2
je 0x4049e0
cmp si, 3
jne 0x4049f4
movzx ebx, byte [edi + 2]
shl ebx, 0x10
add ecx, ebx
mov edi, dword [esp + 0x6c]
movzx ebx, byte [edi + 1]
shl ebx, 8
add ebx, ecx
mov dword [esp + 0xb8], ebx
test al, al
je 0x4047ec
bsr eax, eax
mov ecx, 5
sub ecx, dword [esp]
shl ecx, 3
sub ecx, eax
mov eax, dword [esp + 0x6c]
mov dword [esp + 0x1c], ecx
mov dword [esp + 0x40], eax
mov eax, ecx
mov dword [esp + 0xbc], eax
test edx, edx
je 0x404928
mov eax, dword [esp]
add eax, dword [esp + 0x6c]
lea edi, [eax + 4]
mov dword [esp + 0x78], eax
mov dword [esp + 0x54], edi
mov edi, dword [esp + 0x14]
movzx ebx, byte [eax + edi - 7]
cmp edx, 3
jbe 0x405920
lea eax, [eax + edi - 0xa]
mov dword [esp + 0x2c], eax
mov dword [esp + 0xd4], eax
mov eax, dword [eax]
mov dword [esp + 0xcc], eax
test bl, bl
je 0x404910
movzx eax, bl
mov ecx, 8
bsr eax, eax
sub ecx, eax
mov dword [esp + 8], ecx
mov dword [esp + 0xd0], ecx
cmp edx, 0xffffff88
ja 0x4047f1
mov edi, dword [esp + 4]
mov esi, dword [esp + 0x38]
mov eax, edi
add eax, esi
lea edx, [eax - 3]
mov dword [esp + 0x8c], eax
mov eax, dword [esp + 0xf8]
mov dword [esp + 0x70], edx
add eax, 4
mov dword [esp], eax
lea eax, [esi + 3]
shr eax, 2
lea esi, [edi + eax]
mov edi, eax
lea ebx, [esi + eax]
mov eax, dword [esp + 0x18]
mov dword [esp + 0x80], esi
add edi, ebx
mov dword [esp + 0x84], ebx
shr eax, 0x10
mov dword [esp + 0x88], edi
movzx eax, al
mov dword [esp + 0x7c], eax
cmp edx, edi
jbe 0x405dbe
mov edx, dword [esp + 0x90]
mov dword [esp + 0x14], ebx
neg eax
mov dword [esp + 0xc], esi
and eax, 0x1f
mov dword [esp + 0x30], edx
mov edx, dword [esp + 0xa4]
mov byte [esp + 0x77], 0
mov dword [esp + 0x20], edx
mov edx, dword [esp + 0xb8]
mov byte [esp + 0x75], 0
mov dword [esp + 0x24], edx
mov edx, dword [esp + 0xcc]
mov byte [esp + 0x76], 0
mov dword [esp + 0x28], edx
mov byte [esp + 0x74], 0
mov dword [esp + 0x18], edi
mov edi, dword [esp + 0x1c]
lea esi, [esi]
movzx ecx, byte [esp + 0x10]
mov edx, dword [esp + 0x30]
mov ebx, dword [esp]
shl edx, cl
mov ecx, eax
shr edx, cl
lea ecx, [ebx + edx*2]
movzx edx, byte [ecx]
movzx esi, byte [ecx + 1]
mov ecx, dword [esp + 4]
add esi, dword [esp + 0x10]
mov byte [ecx], dl
mov edx, dword [esp + 0x20]
mov ecx, ebp
shl edx, cl
mov ecx, eax
shr edx, cl
lea ecx, [ebx + edx*2]
movzx edx, byte [ecx]
movzx ecx, byte [ecx + 1]
add ebp, ecx
mov ecx, dword [esp + 0xc]
mov byte [ecx], dl
mov edx, dword [esp + 0x24]
mov ecx, edi
shl edx, cl
mov ecx, eax
shr edx, cl
lea ecx, [ebx + edx*2]
movzx ebx, byte [ecx + 1]
movzx edx, byte [ecx]
movzx ecx, byte [esp + 8]
add ebx, edi
mov edi, dword [esp + 0x14]
mov byte [edi], dl
mov edx, dword [esp + 0x28]
mov edi, dword [esp]
shl edx, cl
mov ecx, eax
shr edx, cl
lea edx, [edi + edx*2]
mov edi, dword [esp + 0x18]
movzx ecx, byte [edx]
movzx edx, byte [edx + 1]
add edx, dword [esp + 8]
mov byte [edi], cl
mov ecx, dword [esp + 4]
mov edi, dword [esp + 0x30]
mov dword [esp + 0x68], ecx
add ecx, 2
mov dword [esp + 4], ecx
mov ecx, esi
shl edi, cl
mov ecx, eax
shr edi, cl
mov ecx, dword [esp]
lea ecx, [ecx + edi*2]
movzx edi, byte [ecx]
movzx ecx, byte [ecx + 1]
add esi, ecx
mov ecx, edi
mov edi, dword [esp]
mov dword [esp + 0x10], esi
mov esi, dword [esp + 4]
mov byte [esi - 1], cl
mov esi, dword [esp + 0xc]
mov ecx, ebp
mov dword [esp + 0x64], esi
add esi, 2
mov dword [esp + 0xc], esi
mov esi, dword [esp + 0x20]
shl esi, cl
mov ecx, eax
shr esi, cl
lea esi, [edi + esi*2]
movzx ecx, byte [esi]
movzx esi, byte [esi + 1]
add ebp, esi
mov esi, dword [esp + 0xc]
mov byte [esi - 1], cl
mov ecx, dword [esp + 0x14]
mov esi, dword [esp + 0x24]
mov dword [esp + 0x60], ecx
add ecx, 2
mov dword [esp + 0x14], ecx
mov ecx, ebx
shl esi, cl
mov ecx, eax
shr esi, cl
lea ecx, [edi + esi*2]
movzx esi, byte [ecx]
movzx ecx, byte [ecx + 1]
lea edi, [ecx + ebx]
mov ecx, dword [esp + 0x14]
mov ebx, esi
mov esi, dword [esp]
mov byte [ecx - 1], bl
mov ebx, dword [esp + 0x18]
mov ecx, edx
mov dword [esp + 0x5c], ebx
add ebx, 2
mov dword [esp + 0x18], ebx
mov ebx, dword [esp + 0x28]
shl ebx, cl
mov ecx, eax
shr ebx, cl
lea ecx, [esi + ebx*2]
mov esi, dword [esp + 0x18]
movzx ebx, byte [ecx]
movzx ecx, byte [ecx + 1]
add edx, ecx
mov byte [esi - 1], bl
mov ebx, dword [esp + 0x3c]
mov dword [esp + 8], edx
cmp dword [esp + 0x48], ebx
ja 0x405910
mov esi, dword [esp + 0x10]
mov byte [esp + 0x77], 1
mov edx, esi
and esi, 7
shr edx, 3
mov dword [esp + 0x10], esi
sub ebx, edx
xor edx, edx
mov esi, dword [ebx]
mov dword [esp + 0x30], esi
mov esi, dword [esp + 0x34]
cmp dword [esp + 0x4c], esi
ja 0x405900
mov ecx, ebp
mov byte [esp + 0x75], 1
and ebp, 7
shr ecx, 3
sub esi, ecx
mov dword [esp + 0x34], esi
mov esi, dword [esi]
mov dword [esp + 0x20], esi
mov esi, dword [esp + 0x40]
cmp dword [esp + 0x50], esi
ja 0x4058f0
mov ecx, edi
mov byte [esp + 0x76], 1
and edi, 7
shr ecx, 3
sub esi, ecx
mov dword [esp + 0x40], esi
mov esi, dword [esi]
mov dword [esp + 0x24], esi
mov ecx, dword [esp + 0x2c]
cmp dword [esp + 0x54], ecx
ja 0x405850
mov esi, dword [esp + 8]
mov ecx, esi
and esi, 7
shr ecx, 3
sub dword [esp + 0x2c], ecx
mov ecx, dword [esp + 0x2c]
test edx, edx
mov edx, dword [esp + 0x18]
mov dword [esp + 8], esi
mov ecx, dword [ecx]
mov dword [esp + 0x28], ecx
sete cl
cmp dword [esp + 0x70], edx
seta dl
and cl, dl
mov byte [esp + 0x74], cl
je 0x405e36
mov edx, dword [esp + 0x3c]
cmp dword [esp + 0x48], edx
mov dword [esp + 0x3c], ebx
jbe 0x404b48
mov esi, dword [esp + 0x10]
mov edx, dword [esp + 0x30]
mov dword [esp + 0x1c], edi
mov ebx, dword [esp]
mov ecx, esi
shl edx, cl
mov ecx, eax
shr edx, cl
lea ecx, [ebx + edx*2]
movzx edi, byte [ecx + 1]
movzx edx, byte [ecx]
mov ecx, ebp
add edi, esi
mov esi, dword [esp + 4]
mov byte [esi], dl
mov edx, dword [esp + 0x20]
shl edx, cl
mov ecx, eax
shr edx, cl
lea ecx, [ebx + edx*2]
movzx esi, byte [ecx + 1]
movzx edx, byte [ecx]
movzx ecx, byte [esp + 0x1c]
add esi, ebp
mov ebp, dword [esp + 0xc]
mov byte [ebp], dl
mov ebp, dword [esp + 0x24]
shl ebp, cl
mov ecx, eax
mov edx, ebp
mov ebp, ebx
shr edx, cl
lea ecx, [ebx + edx*2]
movzx edx, byte [ecx]
movzx ebx, byte [ecx + 1]
mov ecx, dword [esp + 0x14]
add ebx, dword [esp + 0x1c]
mov byte [ecx], dl
movzx ecx, byte [esp + 8]
mov edx, dword [esp + 0x28]
shl edx, cl
mov ecx, eax
shr edx, cl
lea edx, [ebp + edx*2]
mov ebp, dword [esp + 0x18]
movzx ecx, byte [edx]
movzx edx, byte [edx + 1]
add edx, dword [esp + 8]
mov byte [ebp], cl
mov ecx, dword [esp + 0x68]
mov ebp, dword [esp + 0x30]
add ecx, 4
mov dword [esp + 4], ecx
mov ecx, edi
shl ebp, cl
mov ecx, eax
shr ebp, cl
mov ecx, dword [esp]
lea ecx, [ecx + ebp*2]
movzx ebp, byte [ecx]
movzx ecx, byte [ecx + 1]
add edi, ecx
mov ecx, ebp
mov ebp, dword [esp]
mov dword [esp + 0x10], edi
mov edi, dword [esp + 4]
mov byte [edi - 1], cl
mov edi, dword [esp + 0x64]
mov ecx, esi
add edi, 4
mov dword [esp + 0xc], edi
mov edi, dword [esp + 0x20]
shl edi, cl
mov ecx, eax
shr edi, cl
lea ecx, [ebp + edi*2]
movzx edi, byte [ecx]
movzx ecx, byte [ecx + 1]
lea ebp, [ecx + esi]
mov esi, dword [esp + 0xc]
mov ecx, edi
mov edi, dword [esp + 0x60]
mov byte [esi - 1], cl
mov esi, dword [esp + 0x24]
mov ecx, ebx
add edi, 4
mov dword [esp + 0x14], edi
mov edi, dword [esp]
shl esi, cl
mov ecx, eax
shr esi, cl
lea ecx, [edi + esi*2]
movzx esi, byte [ecx]
movzx ecx, byte [ecx + 1]
add ebx, ecx
mov ecx, dword [esp + 0x14]
mov dword [esp + 0x1c], ebx
mov ebx, esi
mov esi, dword [esp + 0x5c]
mov byte [ecx - 1], bl
mov ebx, dword [esp + 0x28]
mov ecx, edx
add esi, 4
shl ebx, cl
mov ecx, eax
mov dword [esp + 0x18], esi
shr ebx, cl
lea eax, [edi + ebx*2]
mov edi, dword [esp + 0x34]
movzx ecx, byte [eax]
movzx eax, byte [eax + 1]
add eax, edx
mov byte [esi - 1], cl
mov dword [esp + 8], eax
cmp dword [esp + 0x4c], edi
ja 0x404eef
mov eax, ebp
movzx ecx, byte [esp + 0x74]
and ebp, 7
shr eax, 3
sub edi, eax
mov byte [esp + 0x75], cl
mov eax, dword [edi]
mov dword [esp + 0x34], edi
mov dword [esp + 0x20], eax
mov ebx, dword [esp + 0x40]
cmp dword [esp + 0x50], ebx
ja 0x404f1e
mov edi, dword [esp + 0x1c]
mov eax, edi
and edi, 7
shr eax, 3
mov dword [esp + 0x1c], edi
sub ebx, eax
mov eax, dword [ebx]
mov dword [esp + 0x40], ebx
mov dword [esp + 0x24], eax
movzx eax, byte [esp + 0x74]
mov byte [esp + 0x76], al
mov ebx, dword [esp + 0x2c]
cmp dword [esp + 0x54], ebx
ja 0x405858
mov esi, dword [esp + 8]
mov eax, esi
and esi, 7
shr eax, 3
mov dword [esp + 8], esi
sub ebx, eax
mov eax, dword [ebx]
mov dword [esp + 0x2c], ebx
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0x10]
cmp byte [esp + 0x77], 0
mov dword [esp + 0xa8], ebp
mov dword [esp + 0x94], eax
mov eax, dword [esp + 0x1c]
mov dword [esp + 0xbc], eax
mov eax, dword [esp + 8]
mov dword [esp + 0xd0], eax
je 0x404f8d
mov eax, dword [esp + 0x3c]
mov dword [esp + 0x98], eax
mov eax, dword [esp + 0x30]
mov dword [esp + 0x90], eax
cmp byte [esp + 0x75], 0
je 0x404faa
mov eax, dword [esp + 0x34]
mov dword [esp + 0xac], eax
mov eax, dword [esp + 0x20]
mov dword [esp + 0xa4], eax
cmp byte [esp + 0x76], 0
je 0x404fc7
mov eax, dword [esp + 0x40]
mov dword [esp + 0xc0], eax
mov eax, dword [esp + 0x24]
mov dword [esp + 0xb8], eax
mov eax, dword [esp + 0x2c]
mov dword [esp + 0xd4], eax
mov eax, dword [esp + 0x28]
mov dword [esp + 0xcc], eax
mov edi, dword [esp + 0xc]
cmp dword [esp + 0x84], edi
setb dl
mov edi, dword [esp + 4]
cmp dword [esp + 0x80], edi
setb al
or al, dl
jne 0x4047ec
mov edi, dword [esp + 0x14]
cmp dword [esp + 0x88], edi
jb 0x4047ec
mov eax, dword [esp + 0x98]
cmp dword [esp + 0x10], 0x20
mov dword [esp + 0x24], eax
mov dword [esp + 0x20], eax
ja 0x4051ad
mov ecx, dword [esp + 0x7c]
mov eax, dword [esp + 0x24]
mov edi, dword [esp + 0x90]
mov edx, dword [esp + 0x10]
neg ecx
mov dword [esp + 0x20], eax
xor eax, eax
mov esi, ecx
mov dword [esp + 0x28], edi
and esi, 0x1f
jmp 0x4050e6
cmp dword [esp + 0x44], ecx
je 0x405ca8
mov ebx, edx
shr ebx, 3
sub ecx, ebx
cmp dword [esp + 0x44], ecx
ja 0x405a30
mov eax, dword [esp + 0x80]
mov edi, dword [ecx]
mov dword [esp + 0x20], ecx
sub eax, 3
cmp dword [esp + 4], eax
setb al
shl ebx, 3
sub edx, ebx
test al, al
je 0x405a47
mov ecx, edx
mov ebx, edi
shl ebx, cl
mov ecx, esi
shr ebx, cl
mov ecx, dword [esp]
lea ebx, [ecx + ebx*2]
movzx ecx, byte [ebx]
movzx ebx, byte [ebx + 1]
add ebx, edx
mov edx, dword [esp + 4]
mov byte [edx], cl
add edx, 2
mov ecx, ebx
mov dword [esp + 4], edx
mov edx, edi
shl edx, cl
mov ecx, esi
shr edx, cl
mov ecx, dword [esp]
lea edx, [ecx + edx*2]
movzx ecx, byte [edx]
movzx edx, byte [edx + 1]
add edx, ebx
mov ebx, dword [esp + 4]
mov byte [ebx - 1], cl
cmp edx, 0x20
ja 0x4059a8
mov ecx, dword [esp + 0x20]
cmp dword [esp + 0x48], ecx
ja 0x405058
mov eax, edx
and edx, 7
shr eax, 3
sub dword [esp + 0x20], eax
mov eax, dword [esp + 0x20]
mov edi, dword [eax]
mov eax, dword [esp + 0x80]
sub eax, 3
cmp dword [esp + 4], eax
setb al
jmp 0x40508f
movzx ebx, byte [ebx + 2]
shl ebx, 0x10
add ecx, ebx
mov esi, dword [esp + 0x58]
movzx ebx, byte [esi + 1]
shl ebx, 8
add ebx, ecx
mov dword [esp + 0xa4], ebx
jmp 0x404966
lea edi, [edi + ebx - 4]
mov ecx, dword [edi]
mov dword [esp + 0x40], edi
mov dword [esp + 0xc0], edi
mov dword [esp + 0xb8], ecx
test al, al
je 0x404910
bsr eax, eax
mov ecx, 8
sub ecx, eax
mov dword [esp + 0x1c], ecx
mov eax, ecx
jmp 0x404a1a
mov edi, dword [esp + 0x20]
mov esi, eax
mov eax, edi
sub eax, dword [esp + 0x44]
sub edi, eax
lea edx, [eax*8]
mov eax, esi
mov dword [esp + 0x20], edi
mov edi, dword [edi]
sub eax, edx
mov dword [esp + 0x94], eax
mov dword [esp + 0x90], edi
mov edi, dword [esp + 4]
cmp dword [esp + 0x80], edi
jbe 0x405204
mov ebx, dword [esp + 0x7c]
mov esi, dword [esp + 0x90]
mov eax, edi
mov edx, dword [esp + 0x94]
neg ebx
and ebx, 0x1f
mov ecx, edx
mov edi, esi
add eax, 1
shl edi, cl
mov ecx, ebx
shr edi, cl
mov ecx, dword [esp]
lea ecx, [ecx + edi*2]
movzx edi, byte [ecx]
movzx ecx, byte [ecx + 1]
add edx, ecx
mov ecx, edi
mov byte [eax - 1], cl
cmp dword [esp + 0x80], eax
jne 0x4051d3
mov dword [esp + 0x94], edx
mov eax, dword [esp + 0xac]
mov dword [esp + 0x10], eax
mov dword [esp + 4], eax
cmp ebp, 0x20
ja 0x40532d
mov ecx, dword [esp + 0x7c]
mov eax, dword [esp + 0xa4]
mov edx, ebp
neg ecx
mov dword [esp + 0x24], eax
mov edi, eax
xor eax, eax
mov esi, ecx
and esi, 0x1f
jmp 0x4052ce
cmp dword [esp + 0x58], ecx
je 0x405c78
mov ebx, edx
shr ebx, 3
sub ecx, ebx
cmp dword [esp + 0x58], ecx
ja 0x405b50
mov eax, dword [esp + 0x84]
mov edi, dword [ecx]
mov dword [esp + 4], ecx
sub eax, 3
cmp dword [esp + 0xc], eax
setb al
shl ebx, 3
sub edx, ebx
test al, al
je 0x405b67
mov ecx, edx
mov ebx, edi
shl ebx, cl
mov ecx, esi
shr ebx, cl
mov ecx, dword [esp]
lea ebx, [ecx + ebx*2]
movzx ecx, byte [ebx]
movzx ebx, byte [ebx + 1]
add ebx, edx
mov edx, dword [esp + 0xc]
mov byte [edx], cl
add edx, 2
mov ecx, ebx
mov dword [esp + 0xc], edx
mov edx, edi
shl edx, cl
mov ecx, esi
shr edx, cl
mov ecx, dword [esp]
lea edx, [ecx + edx*2]
movzx ecx, byte [edx]
movzx edx, byte [edx + 1]
add edx, ebx
mov ebx, dword [esp + 0xc]
mov byte [ebx - 1], cl
cmp edx, 0x20
ja 0x405990
mov ecx, dword [esp + 4]
cmp dword [esp + 0x4c], ecx
ja 0x405240
mov eax, edx
and edx, 7
shr eax, 3
sub dword [esp + 4], eax
mov eax, dword [esp + 4]
mov edi, dword [eax]
mov eax, dword [esp + 0x84]
sub eax, 3
cmp dword [esp + 0xc], eax
setb al
jmp 0x405277
mov edi, dword [esp + 4]
mov eax, edi
sub eax, dword [esp + 0x58]
sub edi, eax
shl eax, 3
mov dword [esp + 4], edi
mov edi, dword [edi]
sub ebp, eax
mov dword [esp + 0xa8], ebp
mov dword [esp + 0xa4], edi
mov edi, dword [esp + 0xc]
cmp dword [esp + 0x84], edi
jbe 0x405385
mov ebx, dword [esp + 0x7c]
mov esi, dword [esp + 0xa4]
mov eax, edi
mov edx, dword [esp + 0xa8]
mov ebp, dword [esp]
neg ebx
and ebx, 0x1f
mov ecx, edx
mov edi, esi
add eax, 1
shl edi, cl
mov ecx, ebx
shr edi, cl
lea ecx, [ebp + edi*2]
movzx edi, byte [ecx]
movzx ecx, byte [ecx + 1]
add edx, ecx
mov ecx, edi
mov byte [eax - 1], cl
cmp dword [esp + 0x84], eax
jne 0x405356
mov dword [esp + 0xa8], edx
mov eax, dword [esp + 0xc0]
mov ecx, dword [esp + 0x1c]
mov dword [esp + 0xc], eax
mov ebp, eax
cmp ecx, 0x20
ja 0x40555a
mov ebx, dword [esp + 0x7c]
mov edi, dword [esp + 0xb8]
xor eax, eax
neg ebx
mov dword [esp + 0x10], edi
mov edx, edi
mov edi, dword [esp + 0x14]
mov esi, ebx
and esi, 0x1f
jmp 0x40544f
cmp dword [esp + 0x6c], ebp
je 0x405d00
mov eax, ecx
mov ebx, ebp
shr eax, 3
sub ebx, eax
cmp dword [esp + 0x6c], ebx
ja 0x405a10
lea edx, [eax*8]
mov eax, ecx
mov ecx, dword [esp + 0x88]
sub eax, edx
mov edx, dword [ebx]
sub ecx, 3
cmp edi, ecx
jae 0x405e52
mov ebp, ebx
mov ecx, eax
mov ebx, edx
add edi, 2
shl ebx, cl
mov ecx, esi
shr ebx, cl
mov ecx, dword [esp]
lea ebx, [ecx + ebx*2]
movzx ecx, byte [ebx]
movzx ebx, byte [ebx + 1]
add eax, ebx
mov byte [edi - 2], cl
mov ebx, edx
mov ecx, eax
shl ebx, cl
mov ecx, esi
shr ebx, cl
mov ecx, dword [esp]
lea ecx, [ecx + ebx*2]
movzx ebx, byte [ecx]
movzx ecx, byte [ecx + 1]
add ecx, eax
mov byte [edi - 1], bl
mov eax, 1
cmp ecx, 0x20
ja 0x405548
cmp ebp, dword [esp + 0x50]
jb 0x4053c8
mov eax, ecx
mov ebx, dword [esp + 0x88]
shr eax, 3
sub ebp, eax
mov eax, ecx
lea ecx, [ebx - 3]
mov edx, dword [ebp]
and eax, 7
cmp edi, ecx
jb 0x405406
mov dword [esp + 0x14], edi
mov dword [esp + 0xbc], eax
mov dword [esp + 0xb8], edx
mov dword [esp + 0xc], ebp
mov dword [esp + 0x1c], eax
cmp dword [esp + 0x1c], 0x20
ja 0x405da3
mov ecx, dword [esp + 0x7c]
mov ebp, dword [esp + 0xc]
xor eax, eax
mov esi, dword [esp + 0x1c]
neg ecx
mov edi, ecx
and edi, 0x1f
jmp 0x405522
cmp dword [esp + 0x6c], ebp
je 0x405ce0
mov edx, esi
mov ecx, ebp
shr edx, 3
sub ecx, edx
cmp dword [esp + 0x6c], ecx
ja 0x4059e8
mov ebx, dword [esp + 0x14]
cmp dword [esp + 0x88], ebx
mov ebp, ecx
seta al
shl edx, 3
sub esi, edx
mov edx, dword [ecx]
test al, al
je 0x4059f8
mov ecx, esi
mov ebx, edx
add dword [esp + 0x14], 1
shl ebx, cl
mov ecx, edi
shr ebx, cl
mov ecx, dword [esp]
lea ebx, [ecx + ebx*2]
movzx ecx, byte [ebx]
movzx ebx, byte [ebx + 1]
add esi, ebx
mov ebx, dword [esp + 0x14]
mov byte [ebx - 1], cl
cmp esi, 0x20
ja 0x4059f8
cmp dword [esp + 0x50], ebp
ja 0x4054b8
mov eax, esi
mov ebx, dword [esp + 0x14]
and esi, 7
shr eax, 3
sub ebp, eax
cmp dword [esp + 0x88], ebx
mov edx, dword [ebp]
seta al
jmp 0x4054ec
mov dword [esp + 0x14], edi
mov dword [esp + 0xbc], ecx
mov dword [esp + 0xb8], edx
mov edi, dword [esp + 0x14]
cmp dword [esp + 0x88], edi
jbe 0x4055b1
mov ebx, dword [esp + 0x7c]
mov esi, dword [esp + 0xb8]
mov eax, edi
mov edx, dword [esp + 0xbc]
neg ebx
and ebx, 0x1f
mov ecx, edx
mov edi, esi
add eax, 1
shl edi, cl
mov ecx, ebx
shr edi, cl
mov ecx, dword [esp]
lea ecx, [ecx + edi*2]
movzx edi, byte [ecx]
movzx ecx, byte [ecx + 1]
add edx, ecx
mov ecx, edi
mov byte [eax - 1], cl
cmp dword [esp + 0x88], eax
jne 0x405580
mov dword [esp + 0xbc], edx
mov eax, dword [esp + 0xd4]
mov ecx, dword [esp + 8]
mov dword [esp + 0x10], eax
mov edi, eax
cmp ecx, 0x20
ja 0x405786
mov ebx, dword [esp + 0x7c]
mov eax, dword [esp + 0xcc]
mov dword [esp + 0xc], ebp
mov ebp, dword [esp + 0x18]
neg ebx
mov dword [esp + 0x14], eax
mov edx, eax
xor eax, eax
and ebx, 0x1f
jmp 0x405671
cmp dword [esp + 0x78], edi
je 0x405d58
mov eax, ecx
mov esi, edi
shr eax, 3
sub esi, eax
cmp dword [esp + 0x78], esi
ja 0x405b30
lea edx, [eax*8]
mov eax, ecx
sub eax, edx
mov edx, dword [esi]
cmp dword [esp + 0x70], ebp
jbe 0x405e43
mov edi, esi
mov ecx, eax
mov esi, edx
add ebp, 2
shl esi, cl
mov ecx, ebx
shr esi, cl
mov ecx, dword [esp]
lea esi, [ecx + esi*2]
movzx ecx, byte [esi]
movzx esi, byte [esi + 1]
add eax, esi
mov byte [ebp - 2], cl
mov esi, edx
mov ecx, eax
shl esi, cl
mov ecx, ebx
shr esi, cl
mov ecx, dword [esp]
lea ecx, [ecx + esi*2]
movzx esi, byte [ecx]
movzx ecx, byte [ecx + 1]
add ecx, eax
mov eax, esi
mov byte [ebp - 1], al
mov eax, 1
cmp ecx, 0x20
ja 0x405770
cmp dword [esp + 0x54], edi
ja 0x4055f0
mov eax, ecx
shr eax, 3
sub edi, eax
mov eax, ecx
mov edx, dword [edi]
and eax, 7
cmp dword [esp + 0x70], ebp
ja 0x405626
mov dword [esp + 0x18], ebp
mov ebp, dword [esp + 0xc]
mov dword [esp + 0xd0], eax
mov dword [esp + 0xcc], edx
mov dword [esp + 0x10], edi
mov dword [esp + 8], eax
cmp dword [esp + 8], 0x20
ja 0x405d9a
mov ecx, dword [esp + 0x7c]
mov edi, dword [esp + 0x10]
xor eax, eax
mov esi, dword [esp + 8]
neg ecx
and ecx, 0x1f
mov dword [esp + 0xc], ecx
jmp 0x405745
cmp dword [esp + 0x78], edi
je 0x405c40
mov edx, esi
mov ecx, edi
shr edx, 3
sub ecx, edx
cmp dword [esp + 0x78], ecx
ja 0x4059c0
mov edi, dword [esp + 0x18]
cmp dword [esp + 0x8c], edi
mov edi, ecx
seta al
shl edx, 3
sub esi, edx
mov edx, dword [ecx]
test al, al
je 0x4059cf
mov ecx, esi
mov ebx, edx
add dword [esp + 0x18], 1
shl ebx, cl
movzx ecx, byte [esp + 0xc]
shr ebx, cl
mov ecx, dword [esp]
lea ebx, [ecx + ebx*2]
movzx ecx, byte [ebx]
movzx ebx, byte [ebx + 1]
add esi, ebx
mov ebx, dword [esp + 0x18]
mov byte [ebx - 1], cl
cmp esi, 0x20
ja 0x4059cf
cmp edi, dword [esp + 0x54]
jb 0x4056d8
mov eax, esi
mov ebx, dword [esp + 0x18]
and esi, 7
shr eax, 3
sub edi, eax
cmp dword [esp + 0x8c], ebx
mov edx, dword [edi]
seta al
jmp 0x40570c
mov dword [esp + 0xd0], ecx
mov dword [esp + 0xcc], edx
mov dword [esp + 0x18], ebp
mov ebp, dword [esp + 0xc]
mov esi, dword [esp + 0x18]
cmp dword [esp + 0x8c], esi
jbe 0x4057e5
mov ebx, dword [esp + 0x7c]
mov dword [esp + 8], ebp
mov eax, esi
mov edx, dword [esp + 0xd0]
mov esi, dword [esp + 0xcc]
neg ebx
and ebx, 0x1f
mov ecx, edx
mov ebp, esi
add eax, 1
shl ebp, cl
mov ecx, ebx
shr ebp, cl
mov ecx, dword [esp]
lea ecx, [ecx + ebp*2]
movzx ebp, byte [ecx]
movzx ecx, byte [ecx + 1]
add edx, ecx
mov ecx, ebp
mov byte [eax - 1], cl
cmp dword [esp + 0x8c], eax
jne 0x4057b0
mov dword [esp + 0xd0], edx
mov ebp, dword [esp + 8]
mov ebx, dword [esp + 0x20]
xor eax, eax
cmp dword [esp + 0x44], ebx
je 0x405e24
mov ebx, dword [esp + 4]
cmp dword [esp + 0x58], ebx
je 0x405e12
xor eax, eax
cmp dword [esp + 0x6c], ebp
jne 0x4047ec
cmp dword [esp + 0xbc], 0x20
jne 0x4047ec
cmp dword [esp + 0x78], edi
jne 0x4047ec
cmp dword [esp + 0xd0], 0x20
jne 0x4047ec
test eax, eax
je 0x4047ec
mov edx, dword [esp + 0x38]
jmp 0x4047f1
mov dword [esp + 0x3c], ebx
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x10]
cmp byte [esp + 0x77], 0
mov dword [esp + 0xa8], ebp
mov dword [esp + 0x94], eax
mov eax, dword [esp + 0x1c]
mov dword [esp + 0xbc], eax
mov eax, dword [esp + 8]
mov dword [esp + 0xd0], eax
je 0x40589d
mov eax, dword [esp + 0x3c]
mov dword [esp + 0x98], eax
mov eax, dword [esp + 0x30]
mov dword [esp + 0x90], eax
cmp byte [esp + 0x75], 0
je 0x4058ba
mov eax, dword [esp + 0x34]
mov dword [esp + 0xac], eax
mov eax, dword [esp + 0x20]
mov dword [esp + 0xa4], eax
cmp byte [esp + 0x76], 0
je 0x4058d7
mov eax, dword [esp + 0x40]
mov dword [esp + 0xc0], eax
mov eax, dword [esp + 0x24]
mov dword [esp + 0xb8], eax
cmp byte [esp + 0x74], 0
jne 0x404fc7
jmp 0x404fdd
mov edx, 3
jmp 0x404d19
mov edx, 3
jmp 0x404cf2
mov edx, 3
jmp 0x404ccb
movzx ecx, byte [eax]
mov dword [esp + 0xd4], eax
mov dword [esp + 0xcc], ecx
cmp edx, 2
je 0x405944
cmp edx, 3
jne 0x405958
movzx eax, byte [eax + 2]
shl eax, 0x10
add ecx, eax
mov eax, dword [esp + 0x78]
movzx eax, byte [eax + 1]
shl eax, 8
add eax, ecx
mov dword [esp + 0xcc], eax
test bl, bl
je 0x4047ec
movzx eax, bl
mov ecx, 5
bsr eax, eax
sub ecx, edx
shl ecx, 3
sub ecx, eax
mov eax, dword [esp + 0x78]
mov dword [esp + 8], ecx
mov dword [esp + 0xd0], ecx
mov dword [esp + 0x2c], eax
jmp 0x404a8e
mov dword [esp + 0xa8], edx
mov dword [esp + 0xa4], edi
jmp 0x40532d
mov dword [esp + 0x94], edx
mov dword [esp + 0x90], edi
jmp 0x4051ad
mov eax, edi
sub eax, dword [esp + 0x78]
sub edi, eax
shl eax, 3
mov edx, dword [edi]
sub esi, eax
mov dword [esp + 0xd0], esi
mov dword [esp + 0xcc], edx
jmp 0x405786
mov eax, ebp
sub eax, dword [esp + 0x6c]
sub ebp, eax
shl eax, 3
mov edx, dword [ebp]
sub esi, eax
mov dword [esp + 0xbc], esi
mov dword [esp + 0xb8], edx
jmp 0x40555a
mov edx, ebp
sub edx, dword [esp + 0x6c]
mov eax, ecx
mov dword [esp + 0x14], edi
sub ebp, edx
shl edx, 3
sub eax, edx
mov edx, dword [ebp]
jmp 0x40547a
mov edi, dword [esp + 0x20]
mov eax, edi
sub eax, dword [esp + 0x44]
sub edi, eax
shl eax, 3
mov dword [esp + 0x20], edi
mov edi, dword [edi]
sub edx, eax
mov eax, dword [esp + 0x20]
mov dword [esp + 0x94], edx
mov dword [esp + 0x90], edi
mov dword [esp + 0x24], eax
mov dword [esp + 0x10], edx
cmp dword [esp + 0x10], 0x20
ja 0x405d44
mov eax, dword [esp + 0x24]
xor edx, edx
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0x7c]
neg eax
and eax, 0x1f
mov esi, eax
mov eax, dword [esp + 0x10]
jmp 0x405afa
cmp dword [esp + 0x44], ecx
je 0x405d38
mov ebx, eax
shr ebx, 3
sub ecx, ebx
cmp dword [esp + 0x44], ecx
ja 0x405180
mov edx, dword [esp + 4]
cmp dword [esp + 0x80], edx
mov dword [esp + 0x20], ecx
seta dl
mov edi, dword [ecx]
shl ebx, 3
sub eax, ebx
test dl, dl
je 0x40519f
mov ecx, eax
mov ebx, edi
add dword [esp + 4], 1
shl ebx, cl
mov ecx, esi
shr ebx, cl
mov ecx, dword [esp]
lea ebx, [ecx + ebx*2]
movzx ecx, byte [ebx]
movzx ebx, byte [ebx + 1]
add eax, ebx
mov ebx, dword [esp + 4]
mov byte [ebx - 1], cl
cmp eax, 0x20
ja 0x40519f
mov ecx, dword [esp + 0x20]
cmp dword [esp + 0x48], ecx
ja 0x405a90
mov edx, eax
and eax, 7
shr edx, 3
sub dword [esp + 0x20], edx
mov edi, dword [esp + 0x20]
mov edx, dword [esp + 4]
cmp dword [esp + 0x80], edx
mov edi, dword [edi]
seta dl
jmp 0x405ac4
mov edx, edi
sub edx, dword [esp + 0x78]
mov eax, ecx
mov dword [esp + 0x18], ebp
sub edi, edx
shl edx, 3
mov ebp, dword [esp + 0xc]
sub eax, edx
mov edx, dword [edi]
jmp 0x405697
mov edi, dword [esp + 4]
mov eax, edi
sub eax, dword [esp + 0x58]
sub edi, eax
shl eax, 3
mov dword [esp + 4], edi
mov edi, dword [edi]
sub edx, eax
mov eax, dword [esp + 4]
mov dword [esp + 0xa8], edx
mov ebp, edx
mov dword [esp + 0xa4], edi
mov dword [esp + 0x10], eax
cmp ebp, 0x20
ja 0x405c68
mov edx, dword [esp + 0x7c]
mov eax, dword [esp + 0x10]
mov esi, dword [esp + 0x4c]
neg edx
mov dword [esp + 4], eax
xor eax, eax
and edx, 0x1f
jmp 0x405c16
mov ecx, dword [esp + 4]
cmp dword [esp + 0x58], ecx
je 0x405c60
mov ebx, ebp
shr ebx, 3
sub ecx, ebx
cmp dword [esp + 0x58], ecx
ja 0x405308
mov edi, dword [esp + 0xc]
cmp dword [esp + 0x84], edi
mov dword [esp + 4], ecx
seta al
mov edi, dword [ecx]
shl ebx, 3
sub ebp, ebx
test al, al
je 0x40531f
mov ecx, ebp
mov ebx, edi
add dword [esp + 0xc], 1
shl ebx, cl
mov ecx, edx
shr ebx, cl
mov ecx, dword [esp]
lea ebx, [ecx + ebx*2]
movzx ecx, byte [ebx]
movzx ebx, byte [ebx + 1]
add ebp, ebx
mov ebx, dword [esp + 0xc]
mov byte [ebx - 1], cl
cmp ebp, 0x20
ja 0x40531f
cmp esi, dword [esp + 4]
ja 0x405ba8
mov eax, ebp
mov ebx, dword [esp + 0xc]
and ebp, 7
shr eax, 3
sub dword [esp + 4], eax
mov eax, dword [esp + 4]
cmp dword [esp + 0x84], ebx
mov edi, dword [eax]
seta al
jmp 0x405be0
mov dword [esp + 8], esi
test al, al
je 0x405d9a
mov dword [esp + 0xd0], esi
mov dword [esp + 0xcc], edx
jmp 0x405786
test al, al
jne 0x40531f
mov eax, dword [esp + 0x10]
mov dword [esp + 4], eax
jmp 0x40532d
test al, al
je 0x405db5
mov eax, dword [esp + 0x58]
mov dword [esp + 0xa8], edx
mov ebp, edx
mov dword [esp + 0xa4], edi
mov dword [esp + 0xac], eax
mov dword [esp + 0x10], eax
jmp 0x405b7f
test al, al
je 0x405dac
mov eax, dword [esp + 0x44]
mov dword [esp + 0x94], edx
mov dword [esp + 0x90], edi
mov dword [esp + 0x98], eax
mov dword [esp + 0x10], edx
mov dword [esp + 0x24], eax
jmp 0x405a61
mov dword [esp + 0x1c], esi
test al, al
je 0x405da3
mov dword [esp + 0xbc], esi
mov dword [esp + 0xb8], edx
jmp 0x40555a
mov dword [esp + 0x14], edi
mov edi, dword [esp + 0x10]
test al, al
je 0x405d8a
mov eax, dword [esp + 0x6c]
mov dword [esp + 0xbc], ecx
mov dword [esp + 0xb8], edx
mov dword [esp + 0xc0], eax
mov dword [esp + 0x1c], ecx
mov dword [esp + 0xc], eax
jmp 0x405490
mov dword [esp + 0x10], eax
test dl, dl
jne 0x40519f
mov eax, dword [esp + 0x24]
mov dword [esp + 0x20], eax
jmp 0x4051ad
mov dword [esp + 0x18], ebp
mov ebp, dword [esp + 0xc]
test al, al
je 0x405d91
mov eax, dword [esp + 0x78]
mov dword [esp + 0xd0], ecx
mov dword [esp + 0xcc], edx
mov dword [esp + 0xd4], eax
mov dword [esp + 8], ecx
mov dword [esp + 0x10], eax
jmp 0x4056ad
mov edx, edi
jmp 0x40549b
mov edx, dword [esp + 0x14]
jmp 0x4056b8
mov edi, dword [esp + 0x10]
jmp 0x405786
mov ebp, dword [esp + 0xc]
jmp 0x40555a
mov edi, dword [esp + 0x28]
jmp 0x405a6c
mov edi, dword [esp + 0x24]
jmp 0x405b88
cmp dword [esp + 4], esi
seta dl
cmp esi, ebx
seta al
or al, dl
jne 0x4047ec
mov eax, dword [esp + 0x88]
cmp ebx, eax
ja 0x4047ec
mov eax, dword [esp + 0x98]
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x80]
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x88]
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x84]
mov dword [esp + 0x14], eax
jmp 0x40502c
xor edx, edx
cmp dword [esp + 0xa8], 0x20
cmovne eax, edx
jmp 0x405805
xor eax, eax
cmp dword [esp + 0x94], 0x20
sete al
jmp 0x4057f5
mov dword [esp + 0x3c], ebx
mov dword [esp + 0x1c], edi
jmp 0x404f48
mov dword [esp + 0x18], ebp
mov edi, esi
mov ebp, dword [esp + 0xc]
jmp 0x405697
mov dword [esp + 0x14], edi
mov ebp, ebx
jmp 0x40547a