Function at 0x5ae6d0
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
push ebx
push edi
push esi
push eax
mov ebx, dword [esp + 0x20]
mov edi, dword [esp + 0x1c]
mov ecx, dword [esp + 0x18]
movzx esi, cx
shr ecx, 0x10
cmp ebx, 1
jne 0x5ae3be
movzx eax, byte [edi]
lea edx, [esi + eax]
cmp edx, 0xfff0
jbe 0x5ae3a3
lea edx, [esi + eax]
add edx, 0xffff000f
add ecx, edx
mov eax, ecx
shl eax, 0x10
cmp ecx, 0xfff0
jbe 0x5ae3b7
add eax, 0xf0000
or eax, edx
jmp 0x5ae6c4
test edi, edi
je 0x5ae456
cmp ebx, 0x10
jae 0x5ae460
test ebx, ebx
je 0x5ae43a
lea eax, [ebx - 1]
mov ebp, ebx
and ebp, 3
je 0x5ae406
mov dword [esp], eax
xor edx, edx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx eax, byte [edi + edx]
add esi, eax
add ecx, esi
add edx, 1
cmp ebp, edx
jne 0x5ae3f0
add edi, edx
sub ebx, edx
mov eax, dword [esp]
cmp eax, 3
jb 0x5ae43a
xor eax, eax
nop
nop
nop
movzx edx, byte [edi + eax]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 1]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 2]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 3]
add esi, edx
add ecx, esi
add eax, 4
cmp ebx, eax
jne 0x5ae410
cmp esi, 0xfff0
jbe 0x5ae448
add esi, 0xffff000f
mov edx, 0x80078071
mov eax, ecx
mul edx
jmp 0x5ae6b2
mov eax, 1
jmp 0x5ae6c4
cmp ebx, 0x15b0
jb 0x5ae5a0
mov ebp, 0x80078071
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
add ebx, 0xffffea50
mov eax, 0xffffea50
nop
nop
nop
nop
nop
movzx edx, byte [edi + eax + 0x15b0]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b1]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b2]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b3]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b4]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b5]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b6]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b7]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15b8]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15b9]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15ba]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15bb]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15bc]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15bd]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 0x15be]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 0x15bf]
add esi, edx
add ecx, esi
add eax, 0x10
jne 0x5ae490
mov eax, esi
mul ebp
add edi, 0x15b0
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
mov eax, ecx
mul ebp
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
cmp ebx, 0x15af
ja 0x5ae480
test ebx, ebx
je 0x5ae6bd
cmp ebx, 0x10
jb 0x5ae632
nop
nop
nop
nop
nop
nop
add ebx, 0xfffffff0
movzx eax, byte [edi]
add eax, esi
add ecx, eax
movzx edx, byte [edi + 1]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 2]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 3]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 4]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 5]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 6]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 7]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 8]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 9]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 0xa]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 0xb]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 0xc]
add eax, edx
add ecx, eax
movzx edx, byte [edi + 0xd]
add edx, eax
add ecx, edx
movzx eax, byte [edi + 0xe]
add eax, edx
add ecx, eax
movzx esi, byte [edi + 0xf]
add esi, eax
add ecx, esi
add edi, 0x10
cmp ebx, 0xf
ja 0x5ae5a0
test ebx, ebx
je 0x5ae69a
lea eax, [ebx - 1]
mov ebp, ebx
and ebp, 3
je 0x5ae666
mov dword [esp], eax
xor edx, edx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx eax, byte [edi + edx]
add esi, eax
add ecx, esi
add edx, 1
cmp ebp, edx
jne 0x5ae650
add edi, edx
sub ebx, edx
mov eax, dword [esp]
cmp eax, 3
jb 0x5ae69a
xor eax, eax
nop
nop
nop
movzx edx, byte [edi + eax]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 1]
add esi, edx
add ecx, esi
movzx edx, byte [edi + eax + 2]
add edx, esi
add ecx, edx
movzx esi, byte [edi + eax + 3]
add esi, edx
add ecx, esi
add eax, 4
cmp ebx, eax
jne 0x5ae670
mov edi, 0x80078071
mov eax, esi
mul edi
shr edx, 0xf
imul ebx, edx, 0xfff1
mov eax, ecx
mul edi
sub esi, ebx
shr edx, 0xf
imul eax, edx, 0xfff1
sub ecx, eax
shl ecx, 0x10
or ecx, esi
mov eax, ecx
add esp, 4
pop esi
pop edi
pop ebx
pop ebp
ret
jmp 0x5ae370