Function at 0x46d6b0
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 0x46d89b
test edi, edi
je 0x46da59
cmp dword [esp + 0x54], 0xf
ja 0x46d742
mov edx, dword [esp + 0x54]
test edx, edx
je 0x46d70a
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 0x46d6f7
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 0x46d8dd
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 0x46d764
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 0x46d750
mov eax, dword [esp + 0x54]
test eax, eax
jne 0x46d8d2
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 0x46da63
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 0x46d902
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 0x46da24
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 0x46da11
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 0x46d891
mov ecx, 1
jmp 0x46d738
mov eax, dword [esp + 0x54]
sub eax, 1
jmp 0x46da09