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

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x7c
mov dword [esp], eax
mov eax, ecx
mov ecx, dword [esp + 0x90]
mov dword [esp + 0x28], edx
cmp ecx, 9
jbe 0x402f77
movzx esi, word [eax + 2]
movzx ebx, word [eax]
movzx ebp, word [eax + 4]
lea edx, [ebx + esi]
mov word [esp + 8], si
add edx, ebp
mov word [esp + 0x14], bp
mov dword [esp + 4], ebp
mov ebp, ecx
sub ebp, edx
mov dword [esp + 0x10], ebp
lea edx, [ebp - 6]
mov ebp, dword [esp + 0x94]
mov ebp, dword [ebp]
mov dword [esp + 0x38], ebp
cmp ecx, edx
jae 0x402f90
mov edx, 0xffffffec
add esp, 0x7c
mov eax, edx
pop ebx
pop esi
pop edi
pop ebp
ret
test ebx, ebx
je 0x403450
lea ebp, [eax + 6]
movzx ecx, byte [eax + ebx + 5]
mov dword [esp + 0x40], ebp
cmp ebx, 3
ja 0x403410
movzx ebp, byte [eax + 6]
mov dword [esp + 0xc], ebp
cmp bx, 2
je 0x402fce
cmp bx, 3
jne 0x402fd9
movzx edi, byte [eax + 8]
shl edi, 0x10
add ebp, edi
mov dword [esp + 0xc], ebp
movzx edi, byte [eax + 7]
shl edi, 8
add dword [esp + 0xc], edi
test cl, cl
je 0x402f77
mov edi, 5
bsr ecx, ecx
sub edi, ebx
shl edi, 3
sub edi, ecx
mov dword [esp + 0x2c], edi
mov edi, dword [esp + 0x40]
mov dword [esp + 0x20], edi
test esi, esi
je 0x403450
mov edi, dword [esp + 0x40]
add edi, ebx
mov dword [esp + 0x44], edi
movzx ecx, byte [edi + esi - 1]
cmp esi, 3
jbe 0x403460
lea edi, [edi + esi - 4]
mov dword [esp + 0x30], edi
test cl, cl
je 0x403438
mov edi, dword [edi]
bsr ecx, ecx
mov ebx, 8
sub ebx, ecx
mov dword [esp + 0x18], edi
mov ecx, dword [esp + 4]
test ecx, ecx
je 0x403450
mov edi, dword [esp + 0x44]
add edi, esi
mov esi, ecx
mov dword [esp + 0x4c], edi
movzx ecx, byte [edi + ecx - 1]
cmp esi, 3
ja 0x4034c0
mov ebp, edi
movzx esi, word [esp + 0x14]
movzx edi, byte [edi]
mov dword [esp + 0x1c], edi
cmp si, 2
je 0x403085
cmp si, 3
jne 0x403094
movzx esi, byte [ebp + 2]
shl esi, 0x10
add edi, esi
mov dword [esp + 0x1c], edi
mov esi, dword [esp + 0x4c]
movzx esi, byte [esi + 1]
shl esi, 8
add dword [esp + 0x1c], esi
test cl, cl
je 0x402f77
mov edi, dword [esp + 4]
mov esi, 5
bsr ecx, ecx
sub esi, edi
mov edi, dword [esp + 0x4c]
shl esi, 3
mov dword [esp + 0x34], edi
sub esi, ecx
test edx, edx
je 0x403450
mov ecx, dword [esp + 4]
mov edi, dword [esp + 0x4c]
add edi, ecx
mov ecx, dword [esp + 0x10]
mov dword [esp + 0x64], edi
movzx ecx, byte [edi + ecx - 7]
cmp edx, 3
jbe 0x403750
test cl, cl
je 0x403438
cmp edx, 0xffffff88
ja 0x402f7c
mov edx, dword [esp + 0x10]
lea edi, [edi + edx - 0xa]
movzx edx, cl
mov ecx, 8
mov dword [esp + 0x3c], edi
bsr edx, edx
mov edi, dword [edi]
sub ecx, edx
mov dword [esp + 0x24], edi
mov dword [esp + 8], ecx
mov ecx, dword [esp]
mov edx, dword [esp + 0x28]
add eax, 0xa
mov dword [esp + 0x50], eax
mov eax, dword [esp + 0x44]
lea edi, [ecx + edx]
add edx, 3
shr edx, 2
add eax, 4
lea ebp, [edi - 3]
mov dword [esp + 0x78], edi
add ecx, edx
mov dword [esp + 0x54], eax
mov eax, dword [esp + 0x4c]
mov dword [esp + 0x70], ecx
add ecx, edx
mov edi, dword [esp + 0x94]
add eax, 4
mov dword [esp + 0x6c], ecx
add ecx, edx
mov edx, dword [esp + 0x38]
mov dword [esp + 0x58], eax
mov eax, dword [esp + 0x64]
add edi, 4
shr edx, 0x10
mov dword [esp + 0x60], ebp
movzx edx, dl
add eax, 4
mov dword [esp + 0x74], ecx
mov dword [esp + 0x68], edx
mov dword [esp + 0x5c], eax
cmp ecx, ebp
jae 0x4040d8
mov eax, edx
mov ebp, dword [esp + 0x70]
mov dword [esp + 4], edi
neg eax
mov edi, dword [esp + 0x2c]
and eax, 0x1f
mov dword [esp + 0x48], ebp
mov ebp, esi
mov esi, ebx
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x74]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x6c]
mov dword [esp + 0x38], eax
jmp 0x403260
mov eax, edi
and edi, 7
shr eax, 3
sub ebx, eax
mov eax, dword [ebx]
mov dword [esp + 0x20], ebx
mov dword [esp + 0xc], eax
xor eax, eax
mov ebx, dword [esp + 0x30]
mov edx, dword [esp + 0x54]
cmp ebx, edx
jb 0x403650
mov edx, esi
and esi, 7
shr edx, 3
sub ebx, edx
mov edx, dword [ebx]
mov dword [esp + 0x30], ebx
mov dword [esp + 0x18], edx
mov ecx, dword [esp + 0x34]
mov edx, dword [esp + 0x58]
cmp ecx, edx
jb 0x403660
mov edx, ebp
and ebp, 7
shr edx, 3
sub ecx, edx
mov edx, dword [ecx]
mov dword [esp + 0x34], ecx
mov dword [esp + 0x1c], edx
mov ebx, dword [esp + 0x3c]
mov edx, dword [esp + 0x5c]
cmp ebx, edx
jb 0x4034e8
mov ecx, dword [esp + 8]
mov edx, ecx
and ecx, 7
shr edx, 3
mov dword [esp + 8], ecx
sub ebx, edx
mov edx, dword [ebx]
mov dword [esp + 0x3c], ebx
mov dword [esp + 0x24], edx
test eax, eax
jne 0x4034e8
mov edx, dword [esp + 0x60]
cmp dword [esp + 0x14], edx
jae 0x4034e8
mov eax, dword [esp + 0xc]
mov ecx, edi
mov ebx, dword [esp]
shl eax, cl
movzx ecx, byte [esp + 0x10]
shr eax, cl
mov ecx, dword [esp + 4]
lea eax, [ecx + eax*4]
mov ecx, esi
movzx edx, word [eax]
mov word [ebx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add edi, edx
add ebx, eax
mov eax, dword [esp + 0x18]
mov dword [esp], ebx
mov ebx, dword [esp + 0x10]
shl eax, cl
mov ecx, ebx
shr eax, cl
mov ecx, dword [esp + 4]
lea eax, [ecx + eax*4]
mov ecx, dword [esp + 0x48]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
add edx, esi
mov esi, ebx
mov dword [esp + 0x2c], edx
movzx edx, byte [eax + 3]
mov eax, dword [esp + 0x1c]
add edx, ecx
mov ecx, ebp
shl eax, cl
mov ecx, ebx
mov ebx, dword [esp + 0x38]
shr eax, cl
mov ecx, dword [esp + 4]
lea ecx, [ecx + eax*4]
movzx eax, word [ecx]
mov word [ebx], ax
movzx eax, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add eax, ebp
mov ebp, dword [esp + 0x24]
add ecx, ebx
mov ebx, dword [esp + 0x14]
mov dword [esp + 0x38], ecx
movzx ecx, byte [esp + 8]
shl ebp, cl
mov ecx, esi
shr ebp, cl
mov ecx, dword [esp + 4]
lea ecx, [ecx + ebp*4]
movzx ebp, word [ecx]
mov word [ebx], bp
movzx ebp, byte [ecx + 2]
mov ebx, dword [esp + 8]
movzx ecx, byte [ecx + 3]
add ebx, ebp
mov ebp, dword [esp + 0x14]
mov dword [esp + 8], ebx
mov ebx, dword [esp]
add ecx, ebp
mov ebp, dword [esp + 0xc]
mov dword [esp + 0x14], ecx
mov ecx, edi
shl ebp, cl
mov ecx, esi
shr ebp, cl
mov ecx, dword [esp + 4]
lea ecx, [ecx + ebp*4]
movzx ebp, word [ecx]
mov word [ebx], bp
movzx ebp, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add edi, ebp
mov ebp, dword [esp + 0x10]
lea esi, [ebx + ecx]
mov ebx, dword [esp + 0x2c]
mov dword [esp], esi
mov esi, dword [esp + 0x18]
mov ecx, ebx
shl esi, cl
mov ecx, ebp
shr esi, cl
mov ecx, dword [esp + 4]
lea ecx, [ecx + esi*4]
movzx esi, word [ecx]
mov word [edx], si
movzx esi, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add esi, ebx
mov ebx, dword [esp + 0x38]
add edx, ecx
mov ecx, eax
mov dword [esp + 0x48], edx
mov edx, dword [esp + 0x1c]
shl edx, cl
mov ecx, ebp
shr edx, cl
mov ecx, dword [esp + 4]
lea edx, [ecx + edx*4]
movzx ecx, word [edx]
mov word [ebx], cx
movzx ecx, byte [edx + 2]
lea ebp, [ecx + eax]
movzx eax, byte [edx + 3]
mov edx, ebx
add edx, eax
mov eax, dword [esp + 0x24]
mov dword [esp + 0x38], edx
mov ebx, dword [esp + 8]
mov ecx, ebx
shl eax, cl
movzx ecx, byte [esp + 0x10]
shr eax, cl
mov ecx, dword [esp + 4]
lea eax, [ecx + eax*4]
mov ecx, dword [esp + 0x14]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add edx, ebx
mov ebx, dword [esp + 0x20]
add eax, ecx
mov dword [esp + 8], edx
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x50]
cmp ebx, eax
jae 0x4031c0
mov eax, 3
jmp 0x4031d6
lea edi, [ebp + ebx - 4]
mov dword [esp + 0x20], edi
test cl, cl
je 0x403438
mov edi, dword [edi]
bsr ecx, ecx
mov dword [esp + 0xc], edi
mov edi, 8
sub edi, ecx
mov dword [esp + 0x2c], edi
jmp 0x402ff8
add esp, 0x7c
mov edx, 0xffffffff
pop ebx
mov eax, edx
pop esi
pop edi
pop ebp
ret
mov edx, 0xffffffb8
jmp 0x402f7c
mov ebp, edi
movzx ebx, word [esp + 8]
movzx edi, byte [edi]
mov dword [esp + 0x18], edi
cmp bx, 2
je 0x4034ad
cmp bx, 3
je 0x4034a0
test cl, cl
je 0x402f77
mov ebx, 5
bsr ecx, ecx
mov edi, dword [esp + 0x44]
sub ebx, esi
shl ebx, 3
mov dword [esp + 0x30], edi
sub ebx, ecx
jmp 0x403038
movzx ebx, byte [ebp + 2]
shl ebx, 0x10
add edi, ebx
mov dword [esp + 0x18], edi
mov edi, dword [esp + 0x44]
movzx ebx, byte [edi + 1]
shl ebx, 8
add dword [esp + 0x18], ebx
jmp 0x40347a
lea esi, [edi + esi - 4]
mov dword [esp + 0x34], esi
test cl, cl
je 0x403438
mov esi, dword [esi]
bsr ecx, ecx
mov dword [esp + 0x1c], esi
mov esi, 8
sub esi, ecx
jmp 0x4030b7
mov dword [esp + 0x2c], edi
mov ebx, esi
mov edi, dword [esp + 4]
mov esi, ebp
mov ebp, dword [esp + 0x48]
mov eax, dword [esp]
mov ecx, dword [esp + 0x70]
cmp ecx, eax
setb dl
cmp dword [esp + 0x6c], ebp
setb al
or al, dl
jne 0x402f77
mov edx, dword [esp + 0x38]
cmp dword [esp + 0x74], edx
jb 0x402f77
lea eax, [ecx - 2]
cmp dword [esp + 0x2c], 0x20
mov dword [esp + 0x48], eax
ja 0x4037d8
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp + 4], eax
jmp 0x403608
mov eax, dword [esp + 0x20]
cmp dword [esp + 0x40], eax
je 0x403670
mov edx, dword [esp + 0x2c]
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x40]
cmp ecx, eax
jb 0x4037b0
mov eax, dword [esp + 0x70]
mov dword [esp + 0x20], ecx
sub eax, 3
cmp dword [esp], eax
setb al
shl edx, 3
sub dword [esp + 0x2c], edx
mov edx, dword [ecx]
mov dword [esp + 0xc], edx
test al, al
je 0x4037cd
movzx ecx, byte [esp + 0x2c]
mov eax, dword [esp + 0xc]
shl eax, cl
movzx ecx, byte [esp + 4]
shr eax, cl
mov ecx, dword [esp]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
mov ecx, dword [esp + 0x2c]
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add ecx, edx
mov edx, dword [esp]
mov dword [esp], ecx
movzx ecx, byte [esp]
add edx, eax
mov eax, dword [esp + 0xc]
mov dword [esp + 0x10], edx
shl eax, cl
movzx ecx, byte [esp + 4]
shr eax, cl
lea ecx, [edi + eax*4]
movzx eax, word [ecx]
mov word [edx], ax
mov edx, dword [esp]
movzx eax, byte [ecx + 2]
add edx, eax
movzx eax, byte [ecx + 3]
mov ecx, dword [esp + 0x10]
mov dword [esp + 0x2c], edx
add ecx, eax
mov dword [esp], ecx
cmp edx, 0x20
ja 0x4037d8
mov edx, dword [esp + 0x50]
cmp dword [esp + 0x20], edx
jb 0x403548
mov ecx, dword [esp + 0x2c]
mov eax, ecx
and ecx, 7
shr eax, 3
sub dword [esp + 0x20], eax
mov eax, dword [esp + 0x20]
mov dword [esp + 0x2c], ecx
mov eax, dword [eax]
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x70]
sub eax, 3
cmp dword [esp], eax
setb al
jmp 0x40358b
mov eax, 3
jmp 0x4031fa
mov eax, 3
jmp 0x40321e
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp + 4], eax
jmp 0x403712
mov ecx, dword [esp + 0x40]
mov eax, dword [esp + 0x20]
cmp ecx, eax
je 0x4037d8
mov edx, dword [esp + 0x2c]
shr edx, 3
sub eax, edx
mov dword [esp + 0xc], eax
cmp dword [esp + 0xc], ecx
jb 0x4040b8
mov ecx, dword [esp]
cmp dword [esp + 0x48], ecx
mov ecx, dword [esp + 0xc]
setae al
shl edx, 3
sub dword [esp + 0x2c], edx
mov edx, dword [ecx]
mov dword [esp + 0x20], ecx
mov dword [esp + 0xc], edx
test al, al
je 0x4037d8
movzx ecx, byte [esp + 0x2c]
mov eax, dword [esp + 0xc]
shl eax, cl
movzx ecx, byte [esp + 4]
shr eax, cl
mov ecx, dword [esp]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add dword [esp + 0x2c], edx
mov edx, dword [esp + 0x2c]
add ecx, eax
mov dword [esp], ecx
cmp edx, 0x20
ja 0x4037d8
mov edx, dword [esp + 0x50]
cmp dword [esp + 0x20], edx
jb 0x403688
mov edx, dword [esp + 0x2c]
mov eax, edx
and edx, 7
shr eax, 3
sub dword [esp + 0x20], eax
mov eax, dword [esp + 0x20]
mov dword [esp + 0x2c], edx
mov edx, dword [esp]
mov eax, dword [eax]
cmp dword [esp + 0x48], edx
mov dword [esp + 0xc], eax
setae al
jmp 0x4036ce
movzx ebp, byte [edi]
mov dword [esp + 0x24], ebp
cmp edx, 2
je 0x40376e
cmp edx, 3
jne 0x40377d
movzx edi, byte [edi + 2]
shl edi, 0x10
add ebp, edi
mov dword [esp + 0x24], ebp
mov edi, dword [esp + 0x64]
movzx edi, byte [edi + 1]
shl edi, 8
add dword [esp + 0x24], edi
test cl, cl
je 0x402f77
mov edi, 5
bsr ecx, ecx
sub edi, edx
lea edx, [edi*8]
mov edi, dword [esp + 0x64]
sub edx, ecx
mov dword [esp + 8], edx
mov dword [esp + 0x3c], edi
jmp 0x403113
mov edx, dword [esp + 0x20]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub dword [esp + 0x2c], eax
mov eax, dword [edx]
mov dword [esp + 0x20], edx
mov dword [esp + 0xc], eax
cmp dword [esp + 0x2c], 0x20
jbe 0x403670
mov ecx, dword [esp + 0x48]
mov eax, dword [esp]
cmp ecx, eax
jb 0x403837
mov edx, dword [esp + 0x68]
mov dword [esp + 0x10], ebp
mov dword [esp], ebx
mov ebx, dword [esp + 0x2c]
neg edx
mov dword [esp + 4], esi
mov esi, ecx
and edx, 0x1f
lea esi, [esi]
mov ebp, dword [esp + 0xc]
mov ecx, ebx
shl ebp, cl
mov ecx, edx
shr ebp, cl
lea ecx, [edi + ebp*4]
movzx ebp, word [ecx]
mov word [eax], bp
movzx ebp, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add ebx, ebp
add eax, ecx
cmp esi, eax
jae 0x403800
mov esi, dword [esp + 4]
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x2c], ebx
mov ebx, dword [esp]
mov dword [esp], eax
mov edx, dword [esp + 0x70]
cmp dword [esp], edx
jae 0x403887
movzx ecx, byte [esp + 0x2c]
mov edx, dword [esp + 0xc]
shl edx, cl
mov ecx, dword [esp + 0x68]
mov eax, edx
neg ecx
shr eax, cl
mov ecx, dword [esp]
lea eax, [edi + eax*4]
movzx edx, byte [eax]
mov byte [ecx], dl
cmp byte [eax + 3], 1
je 0x404114
mov ecx, dword [esp + 0x2c]
cmp ecx, 0x1f
ja 0x403887
movzx eax, byte [eax + 2]
add ecx, eax
mov eax, 0x20
cmp ecx, eax
cmovbe eax, ecx
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x6c]
sub eax, 2
mov dword [esp + 4], eax
cmp ebx, 0x20
ja 0x403a63
mov edx, dword [esp + 0x68]
neg edx
and edx, 0x1f
mov dword [esp], edx
jmp 0x403946
mov eax, dword [esp + 0x30]
cmp dword [esp + 0x44], eax
je 0x4039a4
mov edx, ebx
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x44]
cmp ecx, eax
jb 0x403980
mov eax, dword [esp + 0x6c]
mov dword [esp + 0x30], ecx
sub eax, 3
cmp ebp, eax
setb al
shl edx, 3
sub ebx, edx
mov edx, dword [ecx]
mov dword [esp + 0x18], edx
test al, al
je 0x40399b
mov eax, dword [esp + 0x18]
mov ecx, ebx
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ebp], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add edx, ebx
mov ebx, dword [esp + 0x18]
mov ecx, edx
add eax, ebp
shl ebx, cl
movzx ecx, byte [esp]
shr ebx, cl
lea ecx, [edi + ebx*4]
movzx ebx, word [ecx]
mov word [eax], bx
movzx ebx, byte [ecx + 2]
movzx ebp, byte [ecx + 3]
add ebx, edx
add ebp, eax
cmp ebx, 0x20
ja 0x403a63
mov edx, dword [esp + 0x54]
cmp dword [esp + 0x30], edx
jb 0x4038b0
mov eax, ebx
and ebx, 7
shr eax, 3
sub dword [esp + 0x30], eax
mov ecx, dword [esp + 0x30]
mov eax, dword [ecx]
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x6c]
sub eax, 3
cmp ebp, eax
setb al
jmp 0x4038ee
mov ecx, dword [esp + 0x30]
mov edx, eax
mov eax, ecx
sub eax, edx
sub ecx, eax
shl eax, 3
sub ebx, eax
mov eax, dword [ecx]
mov dword [esp + 0x30], ecx
mov dword [esp + 0x18], eax
cmp ebx, 0x20
ja 0x403a63
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x403a1a
mov eax, dword [esp + 0x30]
cmp dword [esp + 0x44], eax
je 0x403a63
mov edx, ebx
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x44]
cmp ecx, eax
jb 0x403a48
cmp dword [esp + 4], ebp
mov dword [esp + 0x30], ecx
setae al
shl edx, 3
sub ebx, edx
mov edx, dword [ecx]
mov dword [esp + 0x18], edx
test al, al
je 0x403a63
mov eax, dword [esp + 0x18]
mov ecx, ebx
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ebp], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add ebx, edx
add ebp, eax
cmp ebx, 0x20
ja 0x403a63
mov edx, dword [esp + 0x54]
cmp dword [esp + 0x30], edx
jb 0x4039b8
mov eax, ebx
and ebx, 7
shr eax, 3
sub dword [esp + 0x30], eax
mov ecx, dword [esp + 0x30]
cmp dword [esp + 4], ebp
mov eax, dword [ecx]
mov dword [esp + 0x18], eax
setae al
jmp 0x4039ed
mov edx, dword [esp + 0x30]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub ebx, eax
mov eax, dword [edx]
mov dword [esp + 0x30], edx
mov dword [esp + 0x18], eax
mov eax, dword [esp + 4]
cmp eax, ebp
jb 0x403aa9
mov edx, dword [esp + 0x68]
mov dword [esp], esi
mov esi, eax
neg edx
and edx, 0x1f
lea esi, [esi]
mov eax, dword [esp + 0x18]
mov ecx, ebx
shl eax, cl
mov ecx, edx
shr eax, cl
lea eax, [edi + eax*4]
movzx ecx, word [eax]
mov word [ebp], cx
movzx ecx, byte [eax + 2]
movzx eax, byte [eax + 3]
add ebx, ecx
add ebp, eax
cmp esi, ebp
jae 0x403a80
mov esi, dword [esp]
mov eax, dword [esp + 0x6c]
cmp ebp, eax
jae 0x403ae9
mov eax, dword [esp + 0x18]
mov ecx, ebx
shl eax, cl
mov ecx, dword [esp + 0x68]
neg ecx
shr eax, cl
lea eax, [edi + eax*4]
movzx edx, byte [eax]
mov byte [ebp], dl
cmp byte [eax + 3], 1
je 0x404109
cmp ebx, 0x1f
ja 0x403ae9
movzx eax, byte [eax + 2]
add ebx, eax
mov eax, 0x20
cmp ebx, eax
cmova ebx, eax
mov eax, dword [esp + 0x74]
lea ebp, [eax - 2]
cmp esi, 0x20
ja 0x403cdb
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x403baf
mov eax, dword [esp + 0x34]
cmp dword [esp + 0x4c], eax
je 0x403c14
mov edx, esi
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x4c]
cmp ecx, eax
jb 0x403bf0
mov eax, dword [esp + 0x74]
mov dword [esp + 0x34], ecx
sub eax, 3
cmp dword [esp + 0x38], eax
setb al
shl edx, 3
sub esi, edx
mov edx, dword [ecx]
mov dword [esp + 0x1c], edx
test al, al
je 0x403c0b
mov eax, dword [esp + 0x1c]
mov ecx, esi
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
mov ecx, dword [esp + 0x38]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add edx, esi
mov esi, dword [esp + 0x1c]
add eax, ecx
mov ecx, edx
shl esi, cl
movzx ecx, byte [esp]
shr esi, cl
lea ecx, [edi + esi*4]
movzx esi, word [ecx]
mov word [eax], si
movzx esi, byte [ecx + 2]
add esi, edx
movzx edx, byte [ecx + 3]
add eax, edx
mov dword [esp + 0x38], eax
cmp esi, 0x20
ja 0x403cdb
mov edx, dword [esp + 0x58]
cmp dword [esp + 0x34], edx
jb 0x403b10
mov eax, esi
and esi, 7
shr eax, 3
sub dword [esp + 0x34], eax
mov edx, dword [esp + 0x34]
mov eax, dword [edx]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x74]
sub eax, 3
cmp dword [esp + 0x38], eax
setb al
jmp 0x403b50
mov ecx, dword [esp + 0x34]
mov edx, eax
mov eax, ecx
sub eax, edx
sub ecx, eax
shl eax, 3
sub esi, eax
mov eax, dword [ecx]
mov dword [esp + 0x34], ecx
mov dword [esp + 0x1c], eax
cmp esi, 0x20
ja 0x403cdb
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x403c95
mov eax, dword [esp + 0x34]
cmp dword [esp + 0x4c], eax
je 0x403cdb
mov ecx, esi
shr ecx, 3
sub eax, ecx
mov edx, ecx
mov ecx, eax
mov eax, dword [esp + 0x4c]
cmp ecx, eax
jb 0x403cc0
mov eax, dword [esp + 0x38]
mov dword [esp + 0x34], ecx
cmp ebp, eax
setae al
shl edx, 3
sub esi, edx
mov edx, dword [ecx]
mov dword [esp + 0x1c], edx
test al, al
je 0x403cdb
mov eax, dword [esp + 0x1c]
mov ecx, esi
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
mov ecx, dword [esp + 0x38]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add esi, edx
add ecx, eax
mov dword [esp + 0x38], ecx
cmp esi, 0x20
ja 0x403cdb
mov edx, dword [esp + 0x58]
cmp dword [esp + 0x34], edx
jb 0x403c28
mov eax, esi
and esi, 7
shr eax, 3
sub dword [esp + 0x34], eax
mov ecx, dword [esp + 0x34]
mov eax, dword [ecx]
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x38]
cmp ebp, eax
setae al
jmp 0x403c61
mov edx, dword [esp + 0x34]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub esi, eax
mov eax, dword [edx]
mov dword [esp + 0x34], edx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x38]
cmp ebp, eax
jb 0x403d1c
mov edx, dword [esp + 0x68]
mov dword [esp], ebx
neg edx
and edx, 0x1f
nop
mov ebx, dword [esp + 0x1c]
mov ecx, esi
shl ebx, cl
mov ecx, edx
shr ebx, cl
lea ecx, [edi + ebx*4]
movzx ebx, word [ecx]
mov word [eax], bx
movzx ebx, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add esi, ebx
add eax, ecx
cmp ebp, eax
jae 0x403cf0
mov dword [esp + 0x38], eax
mov ebx, dword [esp]
mov ebp, dword [esp + 0x38]
mov eax, dword [esp + 0x74]
cmp ebp, eax
jae 0x403d60
mov eax, dword [esp + 0x1c]
mov ecx, esi
shl eax, cl
mov ecx, dword [esp + 0x68]
neg ecx
shr eax, cl
lea eax, [edi + eax*4]
movzx edx, byte [eax]
mov byte [ebp], dl
cmp byte [eax + 3], 1
je 0x40412e
cmp esi, 0x1f
ja 0x403d60
movzx eax, byte [eax + 2]
add esi, eax
mov eax, 0x20
cmp esi, eax
cmova esi, eax
mov eax, dword [esp + 0x78]
cmp dword [esp + 8], 0x20
lea ebp, [eax - 2]
ja 0x403fad
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp + 4], eax
jmp 0x403e4c
mov ecx, dword [esp + 0x64]
mov eax, dword [esp + 0x3c]
cmp ecx, eax
je 0x403eb8
mov edx, dword [esp + 8]
shr edx, 3
sub eax, edx
mov dword [esp], eax
cmp dword [esp], ecx
jb 0x403e90
mov ecx, dword [esp + 0x60]
cmp dword [esp + 0x14], ecx
mov ecx, dword [esp]
setb al
shl edx, 3
sub dword [esp + 8], edx
mov edx, dword [ecx]
mov dword [esp + 0x3c], ecx
mov dword [esp + 0x24], edx
test al, al
je 0x403ead
movzx ecx, byte [esp + 8]
mov eax, dword [esp + 0x24]
shl eax, cl
movzx ecx, byte [esp + 4]
shr eax, cl
mov ecx, dword [esp + 0x14]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
mov ecx, dword [esp + 8]
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add ecx, edx
mov edx, dword [esp + 0x14]
mov dword [esp], ecx
movzx ecx, byte [esp]
add edx, eax
mov eax, dword [esp + 0x24]
mov dword [esp + 0xc], edx
shl eax, cl
movzx ecx, byte [esp + 4]
shr eax, cl
lea ecx, [edi + eax*4]
movzx eax, word [ecx]
mov word [edx], ax
mov edx, dword [esp]
movzx eax, byte [ecx + 2]
add edx, eax
movzx eax, byte [ecx + 3]
mov ecx, dword [esp + 0xc]
mov dword [esp + 8], edx
add ecx, eax
mov dword [esp + 0x14], ecx
cmp edx, 0x20
ja 0x403fad
mov edx, dword [esp + 0x5c]
cmp dword [esp + 0x3c], edx
jb 0x403d88
mov ecx, dword [esp + 8]
mov edx, dword [esp + 0x60]
mov eax, ecx
and ecx, 7
shr eax, 3
sub dword [esp + 0x3c], eax
mov eax, dword [esp + 0x3c]
cmp dword [esp + 0x14], edx
mov dword [esp + 8], ecx
mov eax, dword [eax]
mov dword [esp + 0x24], eax
setb al
jmp 0x403dcc
mov edx, ecx
mov ecx, dword [esp + 0x3c]
mov eax, ecx
sub eax, edx
sub ecx, eax
shl eax, 3
sub dword [esp + 8], eax
mov eax, dword [ecx]
mov dword [esp + 0x3c], ecx
mov dword [esp + 0x24], eax
cmp dword [esp + 8], 0x20
ja 0x403fad
mov eax, dword [esp + 0x68]
neg eax
and eax, 0x1f
mov dword [esp], eax
jmp 0x403f50
mov eax, dword [esp + 0x3c]
cmp dword [esp + 0x64], eax
je 0x403fad
mov edx, dword [esp + 8]
shr edx, 3
sub eax, edx
mov ecx, eax
mov eax, dword [esp + 0x64]
cmp ecx, eax
jb 0x403f90
mov eax, dword [esp + 0x14]
mov dword [esp + 0x3c], ecx
cmp ebp, eax
setae al
shl edx, 3
sub dword [esp + 8], edx
mov edx, dword [ecx]
mov dword [esp + 0x24], edx
test al, al
je 0x403fad
movzx ecx, byte [esp + 8]
mov eax, dword [esp + 0x24]
shl eax, cl
movzx ecx, byte [esp]
shr eax, cl
mov ecx, dword [esp + 0x14]
lea eax, [edi + eax*4]
movzx edx, word [eax]
mov word [ecx], dx
movzx edx, byte [eax + 2]
movzx eax, byte [eax + 3]
add dword [esp + 8], edx
mov edx, dword [esp + 8]
add ecx, eax
mov dword [esp + 0x14], ecx
cmp edx, 0x20
ja 0x403fad
mov edx, dword [esp + 0x5c]
cmp dword [esp + 0x3c], edx
jb 0x403ed0
mov edx, dword [esp + 8]
mov eax, edx
and edx, 7
shr eax, 3
sub dword [esp + 0x3c], eax
mov eax, dword [esp + 0x3c]
mov dword [esp + 8], edx
mov eax, dword [eax]
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x14]
cmp ebp, eax
setae al
jmp 0x403f0f
mov edx, dword [esp + 0x3c]
mov ecx, eax
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub dword [esp + 8], eax
mov eax, dword [edx]
mov dword [esp + 0x3c], edx
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x14]
cmp ebp, eax
jb 0x404004
mov edx, dword [esp + 0x68]
mov dword [esp + 4], esi
mov dword [esp], ebx
mov ebx, dword [esp + 8]
neg edx
and edx, 0x1f
lea esi, [esi]
mov esi, dword [esp + 0x24]
mov ecx, ebx
shl esi, cl
mov ecx, edx
shr esi, cl
lea ecx, [edi + esi*4]
movzx esi, word [ecx]
mov word [eax], si
movzx esi, byte [ecx + 2]
movzx ecx, byte [ecx + 3]
add ebx, esi
add eax, ecx
cmp ebp, eax
jae 0x403fd0
mov dword [esp + 0x14], eax
mov esi, dword [esp + 4]
mov dword [esp + 8], ebx
mov ebx, dword [esp]
mov ebp, dword [esp + 0x14]
mov eax, dword [esp + 0x78]
cmp ebp, eax
jae 0x404053
movzx ecx, byte [esp + 8]
mov eax, dword [esp + 0x24]
shl eax, cl
mov ecx, dword [esp + 0x68]
neg ecx
shr eax, cl
lea eax, [edi + eax*4]
movzx edx, byte [eax]
mov byte [ebp], dl
cmp byte [eax + 3], 1
je 0x404121
mov edi, dword [esp + 8]
cmp edi, 0x1f
ja 0x404053
movzx eax, byte [eax + 2]
add edi, eax
mov eax, 0x20
cmp edi, eax
cmovbe eax, edi
mov dword [esp + 8], eax
mov edi, dword [esp + 0x20]
xor edx, edx
cmp dword [esp + 0x40], edi
je 0x4040fa
mov ecx, dword [esp + 0x30]
xor eax, eax
cmp dword [esp + 0x44], ecx
je 0x4040ed
mov ebx, dword [esp + 0x34]
cmp dword [esp + 0x4c], ebx
jne 0x402f77
mov ebx, dword [esp + 0x3c]
cmp dword [esp + 0x64], ebx
jne 0x402f77
xor ecx, ecx
cmp esi, 0x20
sete cl
and edx, ecx
test edx, eax
je 0x402f77
cmp dword [esp + 8], 0x20
jne 0x402f77
mov edx, dword [esp + 0x28]
jmp 0x402f7c
mov edx, dword [esp + 0x20]
mov eax, edx
sub eax, ecx
sub edx, eax
shl eax, 3
sub dword [esp + 0x2c], eax
mov eax, dword [edx]
mov dword [esp + 0x20], edx
mov dword [esp + 0xc], eax
jmp 0x4037d8
mov eax, dword [esp + 0x6c]
mov ebp, dword [esp + 0x70]
mov dword [esp + 0x14], ecx
mov dword [esp + 0x38], eax
jmp 0x4034f8
xor eax, eax
cmp ebx, 0x20
sete al
jmp 0x40406f
xor edx, edx
cmp dword [esp + 0x2c], 0x20
sete dl
jmp 0x404063
movzx eax, byte [eax + 2]
add ebx, eax
jmp 0x403ae9
movzx eax, byte [eax + 2]
add dword [esp + 0x2c], eax
jmp 0x403887
movzx eax, byte [eax + 2]
add dword [esp + 8], eax
jmp 0x404053
movzx eax, byte [eax + 2]
add esi, eax
jmp 0x403d60