Function at 0x57f5d0
Capabilities:
Resolve function by parsing pe exports

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x80
mov eax, ecx
mov esi, dword [esp + 0x9c]
movzx ecx, byte [esi + 8]
mov edi, 1
shl edi, cl
mov ebp, edx
cmp eax, 8
lea ecx, [edx + eax - 7]
mov dword [esp + 0x50], ecx
cmovae edx, ecx
mov dword [esp + 0x7c], edx
cmp dword [esi + 4], 9
mov ecx, 0x40
mov ebx, 0x200
cmovl ebx, ecx
lea edx, [ebp + eax]
mov ecx, dword [esp + 0xac]
mov eax, dword [esp + 0xa8]
mov eax, dword [eax]
mov dword [esp], eax
lea eax, [ebp + 8]
cmp eax, edx
mov eax, edx
jae 0x5804c1
mov edx, dword [esp + 0x94]
add edi, 0xfffffff0
mov esi, dword [esi + 0x10]
mov dword [esp + 0x74], esi
lea esi, [ebx + ebp]
mov dword [esp + 0x2c], esi
mov dword [esp + 0x78], ebx
lea esi, [ebx*4]
mov dword [esp + 0x70], esi
lea edx, [edx + eax - 1]
mov dword [esp + 0x48], edx
mov dword [esp + 0x28], ecx
mov dword [esp + 0x4c], edi
mov dword [esp + 0x54], eax
jmp 0x57f69a
mov dword [esp], ebp
lea eax, [ebx + 8]
mov ebp, ebx
mov ecx, dword [esp + 0x54]
cmp eax, ecx
mov eax, ecx
mov edi, dword [esp + 0x4c]
jae 0x5804c7
mov dword [esp + 0xc], ebp
sub eax, ebp
mov dword [esp + 0x3c], eax
cmp ebp, edi
cmovb edi, ebp
mov dword [esp + 0x1c], edi
mov ebx, dword [esp + 0x98]
and ebp, ebx
mov edi, dword [esp + 0x94]
lea esi, [edi + ebp]
mov eax, dword [edi + ebp]
mov ecx, eax
mov edx, 0xbd1e35a7
imul ecx, edx
mov edx, 0xbd000000
mul edx
add edx, ecx
mov eax, dword [edi + ebp + 4]
mov ecx, edi
mov edi, 0xbd000000
imul eax, edi
add eax, edx
shr eax, 0x10
mov dword [esp + 8], eax
mov eax, dword [esp + 0xa4]
mov edx, dword [eax]
mov eax, ebx
mov edi, dword [esp + 0xc]
mov ebx, edi
sub ebx, edx
mov dword [esp + 0x38], ebp
movzx ecx, byte [ecx + ebp]
mov dword [esp + 0x30], 0x424
cmp ebx, edi
mov byte [esp + 4], cl
jae 0x57f7f0
mov ebp, ebx
and ebp, eax
mov eax, dword [esp + 0x94]
cmp cl, byte [eax + ebp]
jne 0x57f7f0
mov dword [esp + 0x18], edx
add ebp, eax
mov eax, dword [esp + 0x3c]
lea edx, [esi + eax]
lea ecx, [esi + eax]
add ecx, 0xfffffffc
xor ebx, ebx
cmp ecx, esi
jae 0x57f750
mov ecx, esi
jmp 0x57f769
mov edi, dword [esi + ebx]
cmp edi, dword [ebp + ebx]
jne 0x57f766
lea edi, [esi + ebx]
add edi, 4
add ebx, 4
cmp edi, ecx
jbe 0x57f750
lea ecx, [esi + ebx]
mov edi, dword [esp + 8]
cmp ecx, edx
jae 0x57f792
sub edx, ecx
lea eax, [edx + ebx]
mov dword [esp + 0x14], eax
nop word [eax + eax]
movzx eax, byte [ebp + ebx]
cmp al, byte [ecx]
jne 0x57f792
inc ecx
inc ebx
dec edx
jne 0x57f780
mov ebx, dword [esp + 0x14]
mov eax, dword [esp]
mov dword [esp + 0x20], 0
cmp ebx, 4
mov dword [esp], eax
jb 0x57ffc2
imul ecx, ebx, 0x87
add ecx, 0x3cf
mov edx, 0
cmp ecx, 0x425
jb 0x57f7fe
mov eax, dword [esp + 0x38]
add eax, ebx
mov edx, dword [esp + 0x94]
movzx eax, byte [edx + eax]
mov byte [esp + 4], al
mov dword [esp + 0x20], ebx
mov edx, dword [esp + 0x18]
mov dword [esp + 0x30], ecx
jmp 0x57f7fe
mov dword [esp + 0x20], 0
xor edx, edx
mov edi, dword [esp + 8]
mov dword [esp + 0x44], edx
mov eax, dword [esp + 0xa0]
mov ecx, dword [eax + 0x2c]
mov dword [esp + 0x68], edi
lea eax, [edi + 8]
movzx edx, ax
mov eax, edx
mov dword [esp + 0x40], edx
mov dword [esp + 0x6c], edx
mov eax, dword [esp + 0xc]
mov ebp, eax
shr eax, 1
and eax, 4
mov eax, dword [esp + eax + 0x68]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x3c]
lea edx, [esi + eax]
mov dword [esp + 0x24], edx
lea eax, [esi + eax - 4]
mov dword [esp + 0x10], eax
mov dword [esp + 0x18], ecx
mov edi, dword [ecx + edi*4]
mov eax, edi
and eax, dword [esp + 0x98]
mov edx, dword [esp + 0x20]
add edx, eax
mov ebx, dword [esp + 0x94]
movzx ecx, byte [esp + 4]
cmp cl, byte [ebx + edx]
jne 0x57f930
mov ecx, ebp
cmp ebp, edi
mov ebp, dword [esp + 0x20]
je 0x57f947
sub ecx, edi
cmp ecx, dword [esp + 0x1c]
ja 0x57f947
mov dword [esp + 8], ecx
add eax, ebx
mov edi, dword [esp + 0x10]
xor edx, edx
cmp edi, esi
jae 0x57f8a0
mov ecx, esi
jmp 0x57f8b8
mov ecx, dword [esi + edx]
cmp ecx, dword [eax + edx]
jne 0x57f8b5
lea ecx, [esi + edx]
add ecx, 4
add edx, 4
cmp ecx, edi
jbe 0x57f8a0
lea ecx, [esi + edx]
mov ebx, dword [esp]
mov edi, dword [esp + 0x24]
cmp ecx, edi
jae 0x57f8e6
mov ebp, edi
sub ebp, ecx
lea edi, [edx + ebp]
nop word [eax + eax]
movzx ebx, byte [eax + edx]
cmp bl, byte [ecx]
jne 0x57f8df
inc ecx
inc edx
dec ebp
jne 0x57f8d0
mov edx, edi
mov ebx, dword [esp]
mov ebp, dword [esp + 0x20]
mov dword [esp], ebx
cmp edx, 4
jb 0x57f940
imul eax, edx, 0x87
mov edi, dword [esp + 8]
bsr ecx, edi
imul ecx, ecx, 0xffffffe2
add eax, ecx
add eax, 0x3c0
cmp dword [esp + 0x30], eax
mov ebx, dword [esp + 0x94]
jae 0x57f947
mov ecx, dword [esp + 0x38]
add ecx, edx
movzx ecx, byte [ebx + ecx]
mov byte [esp + 4], cl
mov ebp, edx
mov dword [esp + 0x44], edi
mov dword [esp + 0x30], eax
jmp 0x57f947
mov ebp, dword [esp + 0x20]
jmp 0x57f947
mov ebx, dword [esp + 0x94]
mov eax, dword [esp + 0x18]
mov ecx, dword [esp + 0x40]
mov ecx, dword [eax + ecx*4]
mov edi, ecx
and edi, dword [esp + 0x98]
lea eax, [edi + ebp]
movzx edx, byte [esp + 4]
cmp dl, byte [ebx + eax]
jne 0x57fa20
mov edx, ebx
mov eax, dword [esp + 0xc]
cmp eax, ecx
mov ebx, dword [esp + 0x10]
je 0x57fa20
sub eax, ecx
cmp eax, dword [esp + 0x1c]
ja 0x57fa20
add edi, edx
xor edx, edx
cmp ebx, esi
jb 0x57f9b7
nop word cs:[eax + eax]
mov ecx, dword [esi + edx]
cmp ecx, dword [edi + edx]
jne 0x57f9b5
lea ecx, [esi + edx]
add ecx, 4
add edx, 4
cmp ecx, ebx
jbe 0x57f9a0
add esi, edx
mov ebx, dword [esp + 0x24]
cmp esi, ebx
jae 0x57f9e3
mov ecx, ebp
sub ebx, esi
lea ebp, [ebx + edx]
mov dword [esp + 4], ebp
mov ebp, ebx
nop dword [eax]
movzx ebx, byte [edi + edx]
cmp bl, byte [esi]
jne 0x57f9e1
inc esi
inc edx
dec ebp
jne 0x57f9d0
mov edx, dword [esp + 4]
mov ebp, ecx
mov ecx, dword [esp]
mov dword [esp], ecx
cmp edx, 4
jb 0x57fa20
imul ecx, edx, 0x87
bsr esi, eax
imul esi, esi, 0xffffffe2
add ecx, esi
add ecx, 0x3c0
cmp dword [esp + 0x30], ecx
jae 0x57fa20
mov ebp, edx
mov dword [esp + 0x44], eax
mov dword [esp + 0x30], ecx
nop word cs:[eax + eax]
mov edi, dword [esp + 0xc]
mov eax, dword [esp + 0x18]
mov ecx, dword [esp + 0x14]
mov dword [eax + ecx*4], edi
cmp dword [esp + 0x30], 0x425
jb 0x57ff00
mov eax, dword [esp + 0xa0]
mov eax, dword [eax + 0x2c]
mov dword [esp + 0x40], eax
mov eax, dword [esp + 0xa4]
mov eax, dword [eax]
mov dword [esp + 0x58], eax
mov dword [esp + 0x5c], 0
mov eax, dword [esp + 0x9c]
nop word [eax + eax]
mov edx, dword [esp + 0x3c]
dec edx
mov dword [esp + 0x20], ebp
lea ecx, [ebp - 1]
cmp ecx, edx
mov dword [esp + 0x3c], edx
cmovae ecx, edx
cmp dword [eax + 4], 5
mov eax, 0
cmovge ecx, eax
mov dword [esp + 0xc], edi
lea ebx, [edi + 1]
mov eax, dword [esp + 0x4c]
cmp ebx, eax
cmovb eax, ebx
mov dword [esp + 0x64], eax
mov esi, ebx
mov ebp, dword [esp + 0x98]
and esi, ebp
mov dword [esp + 4], ecx
lea eax, [ecx + esi]
mov edi, dword [esp + 0x94]
movzx eax, byte [edi + eax]
mov byte [esp + 0x18], al
mov eax, dword [edi + esi]
mov ecx, eax
mov edx, 0xbd000000
mul edx
mov eax, 0xbd1e35a7
imul ecx, eax
add edx, ecx
mov ecx, dword [edi + esi + 4]
mov eax, 0xbd000000
imul ecx, eax
add ecx, edx
shr ecx, 0x10
mov edx, ebx
sub edx, dword [esp + 0x58]
mov eax, ebp
lea ebp, [edi + esi]
mov dword [esp + 8], 0x424
mov dword [esp + 0x14], ebx
cmp edx, ebx
mov dword [esp + 0x24], esi
mov dword [esp + 0x38], ecx
jae 0x57fb50
and edx, eax
mov eax, dword [esp + 4]
add eax, edx
movzx ebx, byte [esp + 0x18]
cmp bl, byte [edi + eax]
jne 0x57fb50
add edx, edi
mov dword [esp + 0x10], edx
mov eax, dword [esp + 0x3c]
lea edx, [eax + ebp]
mov dword [esp + 0x1c], edx
add eax, ebp
add eax, 0xfffffffc
cmp eax, ebp
jae 0x57fe41
mov ebx, edi
xor edx, edx
mov eax, ebp
mov edi, dword [esp + 0x10]
jmp 0x57fe70
xor ecx, ecx
mov esi, dword [esp + 0x14]
mov ebx, edi
mov dword [esp + 0x10], ecx
mov edx, dword [esp + 0x38]
mov dword [esp + 0x68], edx
lea eax, [edx + 8]
movzx eax, ax
mov dword [esp + 0x2c], eax
mov dword [esp + 0x6c], eax
mov eax, esi
shr eax, 1
and eax, 4
mov eax, dword [esp + eax + 0x68]
mov dword [esp + 0x34], eax
mov eax, dword [esp + 0x3c]
lea ecx, [eax + ebp]
mov dword [esp + 0x1c], ecx
mov edi, esi
mov esi, ebx
lea eax, [ebp + eax - 4]
mov dword [esp + 0x60], eax
mov eax, dword [esp + 0x40]
mov eax, dword [eax + edx*4]
mov edx, eax
and edx, dword [esp + 0x98]
mov ecx, dword [esp + 4]
add ecx, edx
movzx ebx, byte [esp + 0x18]
cmp bl, byte [esi + ecx]
jne 0x57fbe0
cmp edi, eax
je 0x57fbe0
mov ebx, edi
sub ebx, eax
cmp ebx, dword [esp + 0x64]
ja 0x57fbe0
add edx, dword [esp + 0x94]
mov ecx, dword [esp + 0x60]
xor esi, esi
cmp ecx, ebp
jae 0x57fbf0
mov eax, ebp
mov edi, dword [esp + 8]
jmp 0x57fc19
mov edx, dword [esp + 4]
mov edi, dword [esp + 0x2c]
jmp 0x57fcc0
mov edi, dword [esp + 8]
nop word cs:[eax + eax]
mov eax, dword [ebp + esi]
cmp eax, dword [edx + esi]
jne 0x57fc16
lea eax, [esi + ebp]
add eax, 4
add esi, 4
cmp eax, ecx
jbe 0x57fc00
lea eax, [esi + ebp]
mov ecx, dword [esp + 0x1c]
cmp eax, ecx
jae 0x57fc70
sub ecx, eax
add ecx, esi
mov dword [esp + 0x38], ecx
mov ecx, dword [esp + 0x48]
mov edi, dword [esp + 0x24]
add edi, ecx
sub edi, eax
nop word cs:[eax + eax]
movzx ecx, byte [edx + esi]
cmp cl, byte [eax]
jne 0x57fc55
inc eax
inc esi
dec edi
cmp dword [esp + 0xc], edi
jne 0x57fc40
mov esi, dword [esp + 0x38]
mov edx, dword [esp + 4]
mov edi, dword [esp + 8]
cmp esi, 4
jae 0x57fc79
mov edi, dword [esp + 0x2c]
jmp 0x57fcc0
mov edx, dword [esp + 4]
cmp esi, 4
jb 0x57fc62
imul eax, esi, 0x87
bsr ecx, ebx
imul ecx, ecx, 0xffffffe2
add eax, ecx
add eax, 0x3c0
cmp edi, eax
mov edi, dword [esp + 0x2c]
jae 0x57fcc0
mov ecx, dword [esp + 0x24]
add ecx, esi
mov edx, dword [esp + 0x94]
movzx ecx, byte [edx + ecx]
mov byte [esp + 0x18], cl
mov edx, esi
mov dword [esp + 0x10], ebx
mov dword [esp + 8], eax
nop word cs:[eax + eax]
mov eax, dword [esp + 0x40]
mov eax, dword [eax + edi*4]
mov edi, eax
and edi, dword [esp + 0x98]
mov dword [esp + 4], edx
lea ecx, [edi + edx]
mov edx, dword [esp + 0x94]
movzx ebx, byte [esp + 0x18]
cmp bl, byte [edx + ecx]
jne 0x57fd20
mov edx, dword [esp + 0x14]
cmp edx, eax
mov ebx, dword [esp + 0x60]
je 0x57fd20
mov ecx, edx
sub ecx, eax
cmp ecx, dword [esp + 0x64]
mov edx, dword [esp + 0xc]
ja 0x57fef0
add edi, dword [esp + 0x94]
cmp ebx, ebp
mov dword [esp + 0x18], ecx
jae 0x57fd40
xor esi, esi
mov ecx, dword [esp + 0x24]
jmp 0x57fd68
mov ecx, dword [esp]
mov edx, dword [esp + 0xc]
mov edi, dword [esp + 8]
mov ebp, dword [esp + 0x34]
jmp 0x57fde0
xor esi, esi
mov ecx, dword [esp + 0x24]
nop word cs:[eax + eax]
mov eax, dword [ebp + esi]
cmp eax, dword [edi + esi]
jne 0x57fd66
lea eax, [esi + ebp]
add eax, 4
add esi, 4
cmp eax, ebx
jbe 0x57fd50
add ebp, esi
mov eax, dword [esp + 0x1c]
cmp ebp, eax
jae 0x57fd94
sub eax, ebp
add eax, esi
mov dword [esp + 0x1c], eax
add ecx, dword [esp + 0x48]
sub ecx, ebp
nop
movzx eax, byte [edi + esi]
cmp al, byte [ebp]
jne 0x57fd94
inc ebp
inc esi
dec ecx
cmp edx, ecx
jne 0x57fd80
mov esi, dword [esp + 0x1c]
mov ecx, dword [esp]
mov edi, dword [esp + 8]
mov ebp, dword [esp + 0x34]
cmp esi, 4
jb 0x57fde0
imul eax, esi, 0x87
mov edx, ecx
mov ebx, dword [esp + 0x18]
bsr ecx, ebx
imul ecx, ecx, 0xffffffe2
add eax, ecx
add eax, 0x3c0
mov ecx, edx
mov edx, dword [esp + 0xc]
cmp edi, eax
jae 0x57fde0
mov dword [esp + 4], esi
mov dword [esp + 0x10], ebx
mov edi, eax
nop word cs:[eax + eax]
mov ebx, edx
mov esi, dword [esp + 0x14]
mov eax, dword [esp + 0x40]
mov dword [eax + ebp*4], esi
mov eax, dword [esp + 0x30]
add eax, 0xaf
cmp edi, eax
jb 0x57ffb0
inc ecx
mov dword [esp], ecx
mov ecx, dword [esp + 0x5c]
cmp ecx, 2
mov eax, dword [esp + 0x9c]
ja 0x58004b
add ebx, 9
inc ecx
mov dword [esp + 0x5c], ecx
mov edx, dword [esp + 4]
mov ebp, edx
mov ecx, dword [esp + 0x10]
mov dword [esp + 0x44], ecx
mov dword [esp + 0x30], edi
cmp ebx, dword [esp + 0x54]
mov edi, esi
jb 0x57fa70
jmp 0x580053
xor edx, edx
mov edi, dword [esp + 0x10]
nop word [eax + eax]
mov ebx, dword [ebp + edx]
cmp ebx, dword [edi + edx]
jne 0x57fe66
lea ebx, [edx + ebp]
add ebx, 4
add edx, 4
cmp ebx, eax
jbe 0x57fe50
lea eax, [edx + ebp]
mov ebx, dword [esp + 0x94]
mov ecx, dword [esp + 0x1c]
cmp eax, ecx
jae 0x57feac
sub ecx, eax
add ecx, edx
mov dword [esp + 0x1c], ecx
mov ecx, dword [esp + 0x48]
mov esi, dword [esp + 0x24]
lea ebx, [ecx + esi]
sub ebx, eax
nop dword [eax]
movzx ecx, byte [edi + edx]
cmp cl, byte [eax]
jne 0x57fea5
inc eax
inc edx
dec ebx
cmp dword [esp + 0xc], ebx
jne 0x57fe90
mov edx, dword [esp + 0x1c]
mov ebx, dword [esp + 0x94]
mov esi, dword [esp + 0x14]
xor ecx, ecx
cmp edx, 4
jb 0x57fb58
imul eax, edx, 0x87
add eax, 0x3cf
cmp eax, 0x425
jb 0x57fb58
mov ecx, dword [esp + 0x24]
add ecx, edx
movzx ecx, byte [ebx + ecx]
mov byte [esp + 0x18], cl
mov dword [esp + 4], edx
mov ecx, dword [esp + 0x58]
mov dword [esp + 8], eax
jmp 0x57fb58
mov ecx, dword [esp]
jmp 0x57fd27
mov ebp, dword [esp]
inc ebp
lea ebx, [edi + 1]
mov edx, dword [esp + 0x2c]
cmp ebx, edx
jbe 0x57f680
mov eax, dword [esp + 0x70]
add eax, edx
cmp ebx, eax
jbe 0x57ffc9
add edi, 0x11
mov eax, dword [esp + 0x50]
cmp edi, eax
cmovae edi, eax
cmp ebx, edi
jae 0x57f680
mov eax, dword [esp + 0xa0]
mov eax, dword [eax + 0x2c]
mov dword [esp + 4], eax
mov dword [esp + 0xc], edi
nop word [eax + eax]
mov edi, ebx
and edi, dword [esp + 0x98]
mov eax, dword [esp + 0x94]
mov esi, dword [eax + edi]
mov eax, esi
mov ecx, 0xbd000000
mul ecx
mov eax, 0xbd1e35a7
imul esi, eax
add edx, esi
mov eax, dword [esp + 0x94]
mov eax, dword [eax + edi + 4]
imul eax, ecx
add eax, edx
shr eax, 0x10
mov edx, ebx
and edx, 8
add edx, eax
movzx eax, dx
mov edx, dword [esp + 4]
mov dword [edx + eax*4], ebx
add ebp, 4
add ebx, 4
cmp ebx, dword [esp + 0xc]
jb 0x57ff50
jmp 0x57f680
mov dword [esp], ecx
mov edx, dword [esp + 0x20]
mov ecx, dword [esp + 0x44]
mov esi, ebx
jmp 0x580053
xor edx, edx
jmp 0x57f7fe
add edi, 9
mov eax, dword [esp + 0x50]
cmp edi, eax
cmovae edi, eax
cmp ebx, edi
jae 0x57f680
mov eax, dword [esp + 0xa0]
mov eax, dword [eax + 0x2c]
mov dword [esp + 4], eax
mov dword [esp + 0xc], edi
nop
mov edi, ebx
and edi, dword [esp + 0x98]
mov eax, dword [esp + 0x94]
mov esi, dword [eax + edi]
mov eax, esi
mov ecx, 0xbd000000
mul ecx
mov eax, 0xbd1e35a7
imul esi, eax
add edx, esi
mov eax, dword [esp + 0x94]
mov eax, dword [eax + edi + 4]
imul eax, ecx
add eax, edx
shr eax, 0x10
mov edx, ebx
and edx, 8
add edx, eax
movzx eax, dx
mov edx, dword [esp + 4]
mov dword [edx + eax*4], ebx
add ebp, 2
add ebx, 2
cmp ebx, dword [esp + 0xc]
jb 0x57fff0
jmp 0x57f680
mov edx, dword [esp + 4]
mov ecx, dword [esp + 0x10]
mov ebp, dword [esp]
mov eax, dword [esp + 0x74]
mov dword [esp + 0x14], esi
add esi, eax
mov eax, dword [esp + 0x4c]
cmp esi, eax
cmovae esi, eax
cmp ecx, esi
mov dword [esp + 4], edx
mov ebx, edx
mov dword [esp + 0x10], ecx
jbe 0x5800b0
lea edi, [ecx + 0xf]
cmp ecx, esi
ja 0x5800fb
test edi, edi
mov edx, dword [esp + 0x28]
je 0x580100
mov eax, dword [esp + 0xa4]
mov esi, edx
mov edx, ecx
mov ecx, eax
mov eax, dword [eax + 8]
mov dword [ecx + 0xc], eax
movsd xmm0, qword [ecx]
movsd qword [ecx + 4], xmm0
mov dword [ecx], edx
mov edx, esi
jmp 0x580100
mov eax, dword [esp + 0xa4]
mov eax, dword [eax]
xor edi, edi
cmp eax, ecx
mov edx, dword [esp + 0x28]
je 0x580100
mov ecx, dword [esp + 0xa4]
mov edx, dword [ecx + 4]
mov edi, 1
mov ecx, dword [esp + 0x10]
cmp edx, ecx
je 0x58007a
mov edi, edx
add ecx, 3
mov edx, ecx
sub edx, eax
cmp edx, 6
ja 0x580469
shl edx, 2
mov edi, 0x9750468
mov ecx, edx
jmp 0x580478
mov edx, dword [esp + 0x28]
nop
mov dword [edx], ebp
mov dword [edx + 4], ebx
mov ecx, dword [esp + 0x9c]
mov eax, dword [ecx + 0x38]
lea esi, [eax + 0x10]
cmp esi, edi
jbe 0x580120
mov word [edx + 0xe], di
xor esi, esi
jmp 0x58018c
mov ebx, dword [ecx + 0x34]
mov ecx, ebx
add cl, 2
mov edx, 1
shl edx, cl
sub edi, eax
mov dword [esp + 0xc], esi
lea esi, [edi + edx]
add esi, 0xfffffff0
bsr edx, esi
mov edi, 0xffffffff
mov ecx, ebx
shl edi, cl
xor edx, 0xffffffe0
add edx, 0x1f
not edi
and edi, esi
xor eax, eax
bt esi, edx
setb al
lea ebp, [eax + 2]
mov ecx, edx
shl ebp, cl
add edi, dword [esp + 0xc]
sub edx, ebx
lea eax, [eax + edx*2]
add eax, 0xfffe
mov ecx, ebx
shl eax, cl
add edi, eax
shl edx, 0xa
or edi, edx
sub esi, ebp
mov ebp, dword [esp]
mov eax, dword [esp + 0x28]
mov word [eax + 0xe], di
mov edx, dword [esp + 0x28]
shr esi, cl
mov dword [edx + 8], esi
cmp ebp, 5
mov dword [esp], ebp
mov ebx, edx
ja 0x5801a0
mov edx, ebp
jmp 0x580200
cmp ebp, 0x81
ja 0x5801be
lea eax, [ebp - 2]
bsr edx, eax
xor edx, 0xffffffe0
lea ecx, [edx + 0x1f]
shr eax, cl
lea edx, [eax + edx*2]
add edx, 0x40
jmp 0x580200
cmp ebp, 0x841
ja 0x5801d7
lea eax, [ebp - 0x42]
bsr edx, eax
xor edx, 0xffe0
add edx, 0x2a
jmp 0x580200
mov dx, 0x15
cmp ebp, 0x1842
jb 0x580200
xor edx, edx
cmp dword [esp], 0x5842
setb dl
xor edx, 0x17
nop word cs:[eax + eax]
mov eax, dword [esp + 4]
cmp eax, 9
ja 0x580210
lea ecx, [eax - 2]
jmp 0x580250
cmp eax, 0x85
ja 0x58022d
add eax, 0xfffffffa
bsr esi, eax
xor esi, 0xffffffe0
lea ecx, [esi + 0x1f]
shr eax, cl
lea ecx, [eax + esi*2]
add ecx, 0x42
jmp 0x580250
mov cx, 0x17
cmp eax, 0x845
ja 0x580250
mov eax, dword [esp + 4]
add eax, 0xffffffba
bsr ecx, eax
xor ecx, 0xffe0
add ecx, 0x2c
nop dword [eax + eax]
mov eax, ecx
and eax, 7
mov esi, edx
and esi, 7
lea eax, [eax + esi*8]
movzx esi, ax
test edi, 0x3ff
jne 0x580280
cmp dx, 7
ja 0x580280
cmp cx, 0xf
ja 0x580280
lea eax, [esi + 0x40]
cmp cx, 8
cmovae esi, eax
jmp 0x5802ae
movzx eax, cx
shr eax, 3
movzx ecx, dx
shr ecx, 3
lea ecx, [ecx + ecx*2]
add ecx, eax
movzx eax, cx
lea ecx, [eax + eax]
mov edx, 0x520d40
shr edx, cl
shl eax, 6
and edx, 0xc0
add edx, eax
add esi, edx
add esi, 0x40
mov ecx, dword [esp]
mov word [ebx + 0xc], si
mov eax, dword [esp + 0xb4]
add dword [eax], ecx
mov ecx, dword [esp + 4]
mov edx, dword [esp + 0x14]
lea ebx, [edx + ecx]
mov ebp, dword [esp + 0x7c]
cmp ebx, ebp
cmovb ebp, ebx
lea edi, [edx + 2]
mov eax, ecx
shr eax, 2
mov esi, dword [esp + 0x10]
cmp esi, eax
jae 0x5802f5
shl esi, 2
mov eax, ebx
sub eax, esi
cmp edi, eax
cmova eax, edi
cmp ebp, eax
cmovb eax, ebp
mov edi, eax
mov eax, dword [esp + 0x78]
lea esi, [eax + ecx*2]
add esi, edx
add dword [esp + 0x28], 0x10
mov dword [esp], 0
mov eax, ebp
sub eax, edi
mov dword [esp + 0x2c], esi
jbe 0x57f683
mov ecx, dword [esp + 0xa0]
mov edx, dword [ecx + 0x2c]
lea ecx, [edi + 1]
test al, 1
jne 0x580335
mov esi, edx
cmp ebp, ecx
je 0x57f683
jmp 0x5803a4
mov dword [esp + 4], ecx
mov ecx, edi
and ecx, dword [esp + 0x98]
mov eax, dword [esp + 0x94]
mov esi, dword [eax + ecx]
mov eax, esi
mov dword [esp + 0x18], edx
mov edx, 0xbd1e35a7
imul eax, edx
mov dword [esp + 0x14], eax
mov eax, esi
mov esi, 0xbd000000
mul esi
add edx, dword [esp + 0x14]
mov eax, dword [esp + 0x94]
mov eax, dword [eax + ecx + 4]
imul eax, esi
mov dword [esp], 0
add eax, edx
shr eax, 0x10
mov ecx, edi
and ecx, 8
add ecx, eax
movzx eax, cx
mov ecx, dword [esp + 4]
mov esi, dword [esp + 0x18]
mov dword [esi + eax*4], edi
mov edi, ecx
cmp ebp, ecx
je 0x57f683
mov dword [esp + 4], ebx
mov dword [esp + 0xc], ebp
nop dword [eax]
mov ebp, edi
mov ebx, dword [esp + 0x98]
and ebp, ebx
mov eax, dword [esp + 0x94]
mov ecx, dword [eax + ebp]
mov eax, ecx
mov ebx, 0xbd000000
mul ebx
mov eax, 0xbd1e35a7
imul ecx, eax
add edx, ecx
mov eax, dword [esp + 0x94]
mov eax, dword [eax + ebp + 4]
imul eax, ebx
add eax, edx
shr eax, 0x10
mov ecx, edi
and ecx, 8
add ecx, eax
movzx eax, cx
mov dword [esi + eax*4], edi
lea ecx, [edi + 1]
mov ebp, ecx
and ebp, dword [esp + 0x98]
mov eax, dword [esp + 0x94]
mov eax, dword [eax + ebp]
mov ebx, esi
mov esi, eax
mov edx, 0xbd1e35a7
imul esi, edx
mov edx, 0xbd000000
mul edx
add edx, esi
mov esi, ebx
mov eax, dword [esp + 0x94]
mov eax, dword [eax + ebp + 4]
mov ebp, dword [esp + 0xc]
mov ebx, 0xbd000000
imul eax, ebx
add eax, edx
shr eax, 0x10
mov edx, ecx
and edx, 8
add edx, eax
movzx eax, dx
mov dword [esi + eax*4], ecx
add edi, 2
cmp edi, ebp
jne 0x5803b0
mov dword [esp], 0
mov ebx, dword [esp + 4]
jmp 0x57f683
sub ecx, edi
cmp ecx, 6
ja 0x58048a
shl ecx, 2
mov edi, 0xfdb1ace
shr edi, cl
and edi, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [esp + 0x10]
jmp 0x58007a
mov edi, 2
mov eax, dword [esp + 0xa4]
mov ecx, dword [esp + 0x10]
cmp dword [eax + 8], ecx
mov ebx, dword [esp + 4]
je 0x58007a
mov edi, 3
mov eax, dword [esp + 0xa4]
cmp dword [eax + 0xc], ecx
jne 0x580077
jmp 0x58007a
mov dword [esp + 0x28], ecx
mov ebx, ebp
mov ecx, dword [esp]
add ecx, eax
sub ecx, ebx
mov eax, dword [esp + 0xa8]
mov dword [eax], ecx
mov ecx, dword [esp + 0x28]
sub ecx, dword [esp + 0xac]
sar ecx, 4
mov eax, dword [esp + 0xb0]
add dword [eax], ecx
add esp, 0x80
pop esi
pop edi
pop ebx
pop ebp
ret