Function at 0x4a8030
Capabilities:
Compute adler32 checksum

Disassembly:
jmp 0x4a8040
mov ecx, dword [esp + 4]
push ebx
mov ebx, dword [esp + 0x10]
push esi
mov esi, ecx
and ecx, 0xffff
shr esi, 0x10
cmp ebx, 1
jne 0x4a808b
mov eax, dword [esp + 0x10]
movzx eax, byte [eax]
add ecx, eax
cmp ecx, 0xfff1
jb 0x4a8071
sub ecx, 0xfff1
add esi, ecx
cmp esi, 0xfff1
jb 0x4a8081
sub esi, 0xfff1
shl esi, 0x10
or esi, ecx
mov eax, esi
pop esi
pop ebx
ret
push edi
mov edi, dword [esp + 0x14]
test edi, edi
jne 0x4a809b
lea eax, [edi + 1]
pop edi
pop esi
pop ebx
ret
cmp ebx, 0x10
jae 0x4a80db
test ebx, ebx
je 0x4a80b1
movzx eax, byte [edi]
lea edi, [edi + 1]
add ecx, eax
add esi, ecx
dec ebx
jne 0x4a80a4
cmp ecx, 0xfff1
jb 0x4a80bf
sub ecx, 0xfff1
mov eax, 0x80078071
mul esi
pop edi
shr edx, 0xf
mov eax, edx
shl eax, 4
sub eax, edx
add eax, esi
shl eax, 0x10
pop esi
or eax, ecx
pop ebx
ret
cmp ebx, 0x15b0
jb 0x4a81c5
mov eax, 0x5e6ea9af
mul ebx
push ebp
mov ebp, edx
shr ebp, 0xb
jmp 0x4a8100
sub ebx, 0x15b0
mov edx, 0x15b
jmp 0x4a8110
movzx eax, byte [edi]
add ecx, eax
movzx eax, byte [edi + 1]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 2]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 3]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 4]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 5]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 6]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 7]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 8]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 9]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xa]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xb]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xc]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xd]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xe]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xf]
add esi, ecx
add edi, 0x10
add ecx, eax
add esi, ecx
dec edx
jne 0x4a8110
mov eax, 0x80078071
mul ecx
shr edx, 0xf
imul eax, edx, 0xffff000f
add ecx, eax
mov eax, 0x80078071
mul esi
shr edx, 0xf
imul eax, edx, 0xffff000f
add esi, eax
dec ebp
jne 0x4a8100
pop ebp
test ebx, ebx
je 0x4a82a1
cmp ebx, 0x10
jb 0x4a826c
mov edx, ebx
shr edx, 4
jmp 0x4a81e0
movzx eax, byte [edi]
sub ebx, 0x10
add ecx, eax
movzx eax, byte [edi + 1]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 2]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 3]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 4]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 5]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 6]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 7]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 8]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 9]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xa]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xb]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xc]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xd]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xe]
add esi, ecx
add ecx, eax
movzx eax, byte [edi + 0xf]
add esi, ecx
add edi, 0x10
add ecx, eax
add esi, ecx
dec edx
jne 0x4a81e0
test ebx, ebx
je 0x4a827d
movzx eax, byte [edi]
lea edi, [edi + 1]
add ecx, eax
add esi, ecx
dec ebx
jne 0x4a8270
mov eax, 0x80078071
mul ecx
mov eax, 0x80078071
shr edx, 0xf
imul edx, edx, 0xffff000f
add ecx, edx
mul esi
shr edx, 0xf
imul eax, edx, 0xffff000f
add esi, eax
shl esi, 0x10
or esi, ecx
pop edi
mov eax, esi
pop esi
pop ebx
ret