Function at 0x407c00
Capabilities:
Compute adler32 checksum

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x38
mov ebp, dword [esp + 0x4c]
mov edi, dword [esp + 0x50]
mov eax, ebp
movzx ebp, bp
shr eax, 0x10
cmp dword [esp + 0x54], 1
mov dword [esp + 0x2c], eax
je 0x407deb
test edi, edi
je 0x407fa9
cmp dword [esp + 0x54], 0xf
ja 0x407c92
mov edx, dword [esp + 0x54]
test edx, edx
je 0x407c5a
mov edx, dword [esp + 0x54]
mov eax, dword [esp + 0x2c]
add edx, edi
add edi, 1
movzx ecx, byte [edi - 1]
add ebp, ecx
add eax, ebp
cmp edi, edx
jne 0x407c47
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x2c]
cmp ebp, 0xfff1
mov edx, 0x80078071
lea ecx, [ebp - 0xfff1]
cmovb ecx, ebp
mul edx
mov eax, dword [esp + 0x2c]
shr edx, 0xf
imul edx, edx, 0xfff1
sub eax, edx
shl eax, 0x10
or ecx, eax
add esp, 0x38
mov eax, ecx
pop ebx
pop esi
pop edi
pop ebp
ret
cmp dword [esp + 0x54], 0x15af
jbe 0x407e2d
sub dword [esp + 0x54], 0x15b0
lea eax, [edi + 0x15b0]
mov dword [esp + 0x30], eax
mov eax, edi
movzx edi, byte [eax]
add eax, 0x10
lea ebx, [ebp + edi]
movzx edi, byte [eax - 0xf]
mov dword [esp], ebx
add edi, ebx
mov ebx, edi
movzx edi, byte [eax - 0xe]
mov dword [esp + 4], ebx
mov esi, edi
movzx edi, byte [eax - 0xd]
add esi, ebx
mov dword [esp + 8], esi
mov ecx, edi
movzx edi, byte [eax - 0xc]
add ecx, esi
mov dword [esp + 0xc], ecx
mov edx, edi
movzx edi, byte [eax - 0xb]
add edx, ecx
mov dword [esp + 0x10], edx
mov ebp, edi
movzx edi, byte [eax - 0xa]
add ebp, edx
mov dword [esp + 0x14], ebp
add edi, ebp
movzx ebp, byte [eax - 1]
mov ebx, edi
movzx edi, byte [eax - 9]
mov dword [esp + 0x18], ebx
add edi, ebx
movzx ebx, byte [eax - 4]
mov esi, edi
movzx edi, byte [eax - 8]
mov dword [esp + 0x1c], esi
mov ecx, edi
movzx edi, byte [eax - 7]
add ecx, esi
movzx esi, byte [eax - 5]
mov dword [esp + 0x20], ecx
mov edx, edi
movzx edi, byte [eax - 6]
add edx, ecx
movzx ecx, byte [eax - 3]
mov dword [esp + 0x24], edx
add edi, edx
movzx edx, byte [eax - 2]
add esi, edi
mov dword [esp + 0x28], edi
mov edi, dword [esp + 4]
add ebx, esi
add edi, dword [esp]
add ecx, ebx
add edi, dword [esp + 8]
add edx, ecx
add edi, dword [esp + 0xc]
add ebp, edx
add edi, dword [esp + 0x10]
add edi, dword [esp + 0x14]
add edi, dword [esp + 0x18]
add edi, dword [esp + 0x1c]
add edi, dword [esp + 0x20]
add edi, dword [esp + 0x24]
add edi, dword [esp + 0x28]
add edi, esi
add edi, ebx
add ecx, edi
add edx, ecx
add edx, ebp
add dword [esp + 0x2c], edx
cmp eax, dword [esp + 0x30]
jne 0x407cb4
mov edi, eax
mov eax, 0x80078071
mul ebp
mov eax, 0x80078071
shr edx, 0xf
imul edx, edx, 0xfff1
sub ebp, edx
mul dword [esp + 0x2c]
shr edx, 0xf
imul edx, edx, 0xfff1
sub dword [esp + 0x2c], edx
cmp dword [esp + 0x54], 0x15af
ja 0x407ca0
mov eax, dword [esp + 0x54]
test eax, eax
jne 0x407e22
mov ecx, dword [esp + 0x2c]
shl ecx, 0x10
or ecx, ebp
add esp, 0x38
mov eax, ecx
pop ebx
pop esi
pop edi
pop ebp
ret
movzx eax, byte [edi]
add ebp, eax
cmp ebp, 0xfff1
lea eax, [ebp - 0xfff1]
cmovae ebp, eax
mov eax, dword [esp + 0x2c]
add eax, ebp
cmp eax, 0xfff1
lea ecx, [eax - 0xfff1]
cmovb ecx, eax
add esp, 0x38
shl ecx, 0x10
or ecx, ebp
pop ebx
mov eax, ecx
pop esi
pop edi
pop ebp
ret
cmp dword [esp + 0x54], 0xf
jbe 0x407fb3
mov eax, dword [esp + 0x54]
mov edx, edi
mov dword [esp + 0x50], edi
sub eax, 0x10
mov dword [esp + 0x34], eax
shr dword [esp + 0x34], 4
mov eax, dword [esp + 0x34]
shl eax, 4
lea eax, [edi + eax + 0x10]
mov dword [esp + 0x30], eax
movzx eax, byte [edx]
add edx, 0x10
add eax, ebp
mov esi, eax
movzx eax, byte [edx - 0xf]
mov dword [esp], esi
add eax, esi
mov edi, eax
movzx eax, byte [edx - 0xe]
mov dword [esp + 4], edi
add eax, edi
movzx edi, byte [edx - 4]
mov esi, eax
movzx eax, byte [edx - 0xd]
mov dword [esp + 8], esi
add eax, esi
mov ebx, eax
movzx eax, byte [edx - 0xc]
mov dword [esp + 0xc], ebx
mov ecx, eax
movzx eax, byte [edx - 0xb]
add ecx, ebx
movzx ebx, byte [edx - 7]
mov dword [esp + 0x10], ecx
mov ebp, eax
movzx eax, byte [edx - 0xa]
add ebp, ecx
movzx ecx, byte [edx - 6]
mov dword [esp + 0x14], ebp
add eax, ebp
mov esi, eax
movzx eax, byte [edx - 9]
mov dword [esp + 0x18], esi
add eax, esi
movzx esi, byte [edx - 8]
mov dword [esp + 0x1c], eax
add esi, eax
movzx eax, byte [edx - 5]
add ebx, esi
add ecx, ebx
add eax, ecx
lea ebp, [eax + edi]
movzx edi, byte [edx - 3]
mov dword [esp + 0x20], ebp
add edi, ebp
mov ebp, edi
movzx edi, byte [edx - 2]
mov dword [esp + 0x24], ebp
add edi, ebp
movzx ebp, byte [edx - 1]
mov dword [esp + 0x28], edi
add ebp, edi
mov edi, dword [esp + 4]
add edi, dword [esp]
add edi, dword [esp + 8]
add edi, dword [esp + 0xc]
add edi, dword [esp + 0x10]
add edi, dword [esp + 0x14]
add edi, dword [esp + 0x18]
add edi, dword [esp + 0x1c]
add esi, edi
add ebx, esi
add ecx, ebx
add eax, ecx
add eax, dword [esp + 0x20]
add eax, dword [esp + 0x24]
add eax, dword [esp + 0x28]
add eax, ebp
add dword [esp + 0x2c], eax
cmp edx, dword [esp + 0x30]
jne 0x407e52
mov esi, dword [esp + 0x34]
mov edi, dword [esp + 0x50]
mov eax, esi
add eax, 1
shl eax, 4
add edi, eax
mov eax, esi
mov esi, dword [esp + 0x54]
shl eax, 4
neg eax
lea eax, [esi + eax - 0x11]
and esi, 0xf
je 0x407f74
lea edx, [edi + eax + 1]
mov eax, dword [esp + 0x2c]
add edi, 1
movzx ecx, byte [edi - 1]
add ebp, ecx
add eax, ebp
cmp edi, edx
jne 0x407f61
mov dword [esp + 0x2c], eax
mov ecx, 0x80078071
mov eax, ebp
mul ecx
mov eax, dword [esp + 0x2c]
shr edx, 0xf
imul edx, edx, 0xfff1
sub ebp, edx
mul ecx
shr edx, 0xf
imul edx, edx, 0xfff1
sub dword [esp + 0x2c], edx
mov ecx, dword [esp + 0x2c]
shl ecx, 0x10
or ecx, ebp
jmp 0x407de1
mov ecx, 1
jmp 0x407c88
mov eax, dword [esp + 0x54]
sub eax, 1
jmp 0x407f59