Function at 0xfa2820
Capabilities:
Compute adler32 checksum

Disassembly:
sub esp, 0xc4
mov eax, dword [esp + 0xc8]
push ebx
push ebp
push esi
mov eax, dword [eax]
mov ebp, ecx
mov esi, dword [esp + 0xdc]
add eax, edx
mov dword [esp + 0x1c], eax
mov ebx, edx
mov eax, dword [esp + 0xe0]
push edi
mov edi, esi
mov dword [esp + 0x28], edx
mov dword [esp + 0x2c], ebp
mov eax, dword [eax]
mov dword [esp + 0x14], 0xffffffff
mov dword [esp + 0x18], ebx
mov dword [esp + 0x24], edi
lea ecx, [eax + esi]
mov dword [esp + 0x44], ecx
mov ecx, dword [esp + 0xe8]
and ecx, 4
mov dword [esp + 0x34], ecx
mov ecx, dword [esp + 0xdc]
je 0xfa288a
or edx, 0xffffffff
jmp 0xfa2891
sub eax, ecx
lea edx, [esi - 1]
add edx, eax
lea eax, [edx + 1]
mov dword [esp + 0x3c], edx
test edx, eax
jne 0xfa3efc
cmp esi, ecx
jb 0xfa3efc
mov eax, dword [ebp + 0x20]
mov edx, dword [ebp + 0x38]
mov ecx, dword [ebp + 0x24]
mov esi, dword [ebp + 4]
mov dword [esp + 0x30], eax
mov eax, dword [ebp + 0x28]
mov dword [esp + 0x40], eax
mov eax, dword [ebp + 0x3c]
mov dword [esp + 0x48], eax
mov eax, dword [ebp]
mov dword [esp + 0x1c], edx
mov dword [esp + 0x10], ecx
cmp eax, 0x35
ja 0xfa3d27
movzx eax, byte [eax + 0x10002bb0]
jmp dword [eax*4 + 0x10002b28]
or ecx, 0xffffffff
mov eax, dword [esp + 0x30]
sub ebx, dword [esp + 0x28]
mov edi, dword [esp + 0x24]
sub edi, dword [esp + 0xe0]
test byte [esp + 0xe8], 9
mov dword [ebp + 0x20], eax
mov eax, dword [esp + 0x10]
mov dword [ebp + 0x24], eax
mov eax, dword [esp + 0x40]
mov dword [ebp + 0x28], eax
mov eax, dword [esp + 0x48]
mov dword [ebp + 0x3c], eax
mov eax, dword [esp + 0xd8]
mov dword [ebp + 4], esi
mov dword [ebp + 0x38], edx
mov dword [esp + 0x24], edi
mov dword [eax], ebx
mov eax, dword [esp + 0xe4]
mov dword [eax], edi
je 0xfa3eef
test ecx, ecx
js 0xfa3eef
mov esi, dword [ebp + 0x1c]
mov eax, 0x5e6ea9af
mul edi
mov ebx, edi
movzx ecx, si
shr edx, 0xb
imul eax, edx, 0x15b0
shr esi, 0x10
sub ebx, eax
mov dword [esp + 0x38], ebx
test edi, edi
je 0xfa3eca
xor edi, edi
cmp ebx, 7
jbe 0xfa3e19
mov ebp, dword [esp + 0xe0]
mov edx, 7
sub edx, ebp
movzx eax, byte [ebp]
add edi, 8
add ecx, eax
movzx eax, byte [ebp + 1]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 2]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 3]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 4]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 5]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 6]
add esi, ecx
add ecx, eax
movzx eax, byte [ebp + 7]
add ebp, 8
add esi, ecx
add ecx, eax
add esi, ecx
lea eax, [edx + ebp]
cmp eax, ebx
jb 0xfa3dc5
mov dword [esp + 0xe0], ebp
xor ebp, ebp
xor edx, edx
cmp edi, ebx
jae 0xfa3e8f
mov eax, ebx
sub eax, edi
cmp eax, 2
jb 0xfa3e70
mov edx, ebx
mov ebx, ebp
sub edx, edi
sub edx, 2
shr edx, 1
inc edx
lea edi, [edi + edx*2]
mov dword [esp + 0x4c], edi
mov edi, dword [esp + 0xe0]
movzx eax, byte [edi]
add ecx, eax
movzx eax, byte [edi + 1]
add ebp, ecx
add edi, 2
add ecx, eax
add ebx, ecx
dec edx
jne 0xfa3e44
mov dword [esp + 0x3c], ebx
mov ebx, dword [esp + 0x38]
mov edx, dword [esp + 0x3c]
mov dword [esp + 0xe0], edi
mov edi, dword [esp + 0x4c]
cmp edi, ebx
jae 0xfa3e8a
mov edi, dword [esp + 0xe0]
movzx eax, byte [edi]
add ecx, eax
add esi, ecx
inc edi
mov dword [esp + 0xe0], edi
lea eax, [edx + ebp]
add esi, eax
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
sub dword [esp + 0x24], ebx
mov ebx, 0x15b0
mov dword [esp + 0x38], ebx
jne 0xfa3db0
mov ebp, dword [esp + 0x2c]
shl esi, 0x10
add esi, ecx
mov ecx, dword [esp + 0x14]
mov dword [ebp + 0x1c], esi
test ecx, ecx
jne 0xfa3eef
test byte [esp + 0xe8], 1
je 0xfa3eef
cmp esi, dword [ebp + 0x10]
mov eax, 0xfffffffe
cmovne ecx, eax
pop edi
pop esi
pop ebp
mov eax, ecx
pop ebx
add esp, 0xc4
ret
mov eax, dword [esp + 0xe4]
pop edi
pop esi
pop ebp
mov dword [eax], 0
mov eax, dword [esp + 0xcc]
pop ebx
mov dword [eax], 0
mov eax, 0xfffffffd
add esp, 0xc4
ret