Function at 0x442980
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
mov ebp, esp
mov ecx, dword [ebp + 8]
push edi
push esi
mov esi, dword [ebp + 0xc]
push ebx
mov ebx, ecx
and ecx, 0xffff
shr ebx, 0x10
cmp dword [ebp + 0x10], 1
je 0x442aec
test esi, esi
mov edi, 1
je 0x4429f3
cmp dword [ebp + 0x10], 0xf
ja 0x4429fa
mov eax, dword [ebp + 0x10]
test eax, eax
je 0x4429cb
mov edi, dword [ebp + 0x10]
xor eax, eax
movzx edx, byte [esi + eax]
add eax, 1
add ecx, edx
add ebx, ecx
cmp edi, eax
jne 0x4429bc
cmp ecx, 0xfff1
mov eax, ebx
lea edi, [ecx - 0xfff1]
mov edx, 0x80078071
cmovb edi, ecx
mul edx
shr edx, 0xf
imul edx, edx, 0xfff1
sub ebx, edx
shl ebx, 0x10
or edi, ebx
mov eax, edi
pop ebx
pop esi
pop edi
pop ebp
ret
cmp dword [ebp + 0x10], 0x15af
jbe 0x442b27
sub dword [ebp + 0x10], 0x15b0
mov eax, esi
mov edx, 0x15b
movzx edi, byte [eax]
add ecx, edi
movzx edi, byte [eax + 1]
lea ebx, [ecx + ebx]
add ecx, edi
movzx edi, byte [eax + 2]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 3]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 4]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 5]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 6]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 7]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 8]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 9]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 0xa]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 0xb]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 0xc]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 0xd]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 0xe]
add ebx, ecx
add ecx, edi
movzx edi, byte [eax + 0xf]
add eax, 0x10
add ebx, ecx
add ecx, edi
add ebx, ecx
sub edx, 1
jne 0x442a15
mov eax, 0x80078071
add esi, 0x15b0
mul ecx
mov eax, 0x80078071
shr edx, 0xf
imul edx, edx, 0xfff1
sub ecx, edx
mul ebx
shr edx, 0xf
imul edx, edx, 0xfff1
sub ebx, edx
cmp dword [ebp + 0x10], 0x15af
ja 0x442a07
cmp dword [ebp + 0x10], 0
jne 0x442b1d
mov edi, ebx
shl edi, 0x10
or edi, ecx
mov eax, edi
pop ebx
pop esi
pop edi
pop ebp
ret
movzx eax, byte [esi]
lea ecx, [eax + ecx]
cmp ecx, 0xfff1
lea eax, [ecx - 0xfff1]
cmovae ecx, eax
lea ebx, [ecx + ebx]
cmp ebx, 0xfff1
lea edi, [ebx - 0xfff1]
cmovb edi, ebx
shl edi, 0x10
or edi, ecx
jmp 0x4429f3
cmp dword [ebp + 0x10], 0xf
jbe 0x442c02
mov edi, dword [ebp + 0x10]
mov eax, esi
movzx edx, byte [eax]
sub edi, 0x10
add ecx, edx
movzx edx, byte [eax + 1]
lea ebx, [ecx + ebx]
lea edx, [ecx + edx]
movzx ecx, byte [eax + 2]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 3]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 4]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 5]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 6]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 7]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 8]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 9]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 0xa]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 0xb]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 0xc]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 0xd]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 0xe]
add ebx, edx
add edx, ecx
movzx ecx, byte [eax + 0xf]
add eax, 0x10
add ebx, edx
lea ecx, [edx + ecx]
add ebx, ecx
cmp edi, 0xf
ja 0x442b2c
mov eax, dword [ebp + 0x10]
sub eax, 0x10
mov edx, eax
and edx, 0xfffffff0
and eax, 0xf
lea esi, [esi + edx + 0x10]
je 0x442be8
lea edx, [eax - 1]
xor eax, eax
lea edi, [edx + 1]
movzx edx, byte [esi + eax]
add eax, 1
add ecx, edx
add ebx, ecx
cmp edi, eax
jne 0x442bd9
mov esi, 0xfff1
mov eax, ecx
xor edx, edx
div esi
mov eax, ebx
mov ecx, edx
xor edx, edx
div esi
mov ebx, edx
jmp 0x442ade
mov edx, dword [ebp + 0x10]
sub edx, 1
jmp 0x442bd4