Function at 0x6c286150
Capabilities:
Compute adler32 checksum

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x28
mov eax, ecx
mov rbx, rdx
mov dword [rsp + 0x80], r8d
shr eax, 0x10
cmp r8d, 1
movzx r15d, cx
mov dword [rsp + 0xc], eax
je 0x6c28649f
test rdx, rdx
je 0x6c2864d7
cmp dword [rsp + 0x80], 0xf
ja 0x6c28620f
mov eax, dword [rsp + 0x80]
mov edx, dword [rsp + 0x80]
sub eax, 1
test edx, edx
je 0x6c2861ca
lea rdx, [rbx + rax + 1]
mov eax, dword [rsp + 0xc]
add rbx, 1
movzx ecx, byte [rbx - 1]
add r15d, ecx
add eax, r15d
cmp rbx, rdx
jne 0x6c2861b3
mov dword [rsp + 0xc], eax
lea eax, [r15 - 0xfff1]
cmp r15d, 0xfff1
mov edx, 0x80078071
mov edi, dword [rsp + 0xc]
cmovae r15d, eax
mov eax, dword [rsp + 0xc]
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub edi, eax
mov eax, edi
shl eax, 0x10
or eax, r15d
add rsp, 0x28
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
cmp dword [rsp + 0x80], 0x15af
jbe 0x6c2864e1
mov eax, dword [rsp + 0x80]
sub eax, 0x15b0
mov dword [rsp + 0x18], eax
lea rax, [rbx + 0x15b0]
mov qword [rsp + 0x10], rax
nop dword [rax]
movzx eax, byte [rbx]
movzx r14d, byte [rbx + 1]
add rbx, 0x10
movzx r13d, byte [rbx - 0xe]
movzx r12d, byte [rbx - 0xd]
movzx ebp, byte [rbx - 0xc]
movzx edi, byte [rbx - 0xb]
movzx esi, byte [rbx - 0xa]
movzx r11d, byte [rbx - 9]
add eax, r15d
movzx r10d, byte [rbx - 6]
movzx r9d, byte [rbx - 5]
add r14d, eax
movzx r8d, byte [rbx - 4]
movzx r15d, byte [rbx - 1]
add r13d, r14d
add eax, r14d
add r12d, r13d
add eax, r13d
add ebp, r12d
add eax, r12d
add edi, ebp
add eax, ebp
add esi, edi
add edi, eax
lea edx, [r11 + rsi]
movzx r11d, byte [rbx - 8]
add esi, edi
mov dword [rsp + 4], edx
add esi, dword [rsp + 4]
add r11d, edx
movzx edx, byte [rbx - 2]
mov ecx, r11d
movzx r11d, byte [rbx - 7]
mov dword [rsp + 8], ecx
add esi, dword [rsp + 8]
add r11d, ecx
movzx ecx, byte [rbx - 3]
add r10d, r11d
add r11d, esi
add r9d, r10d
add r10d, r11d
add r8d, r9d
add r9d, r10d
add ecx, r8d
add r8d, r9d
add edx, ecx
add ecx, r8d
add r15d, edx
add edx, ecx
add edx, r15d
add dword [rsp + 0xc], edx
cmp rbx, qword [rsp + 0x10]
jne 0x6c286240
mov eax, 0x80078071
mov edi, dword [rsp + 0xc]
mul r15d
shr edx, 0xf
imul eax, edx, 0xfff1
sub r15d, eax
mov eax, 0x80078071
mul edi
shr edx, 0xf
imul eax, edx, 0xfff1
sub edi, eax
cmp dword [rsp + 0x18], 0x15af
mov eax, dword [rsp + 0x18]
mov dword [rsp + 0xc], edi
jbe 0x6c286348
mov dword [rsp + 0x80], eax
jmp 0x6c286220
test eax, eax
je 0x6c286490
cmp eax, 0xf
jbe 0x6c2864f1
mov eax, dword [rsp + 0x18]
sub eax, 0x10
shr eax, 4
mov dword [rsp + 0x1c], eax
add rax, 1
shl rax, 4
add rax, rbx
mov qword [rsp + 0x10], rax
movzx eax, byte [rbx]
movzx r14d, byte [rbx + 1]
add rbx, 0x10
movzx r13d, byte [rbx - 0xe]
movzx r12d, byte [rbx - 0xd]
movzx ebp, byte [rbx - 0xc]
movzx edi, byte [rbx - 0xb]
movzx esi, byte [rbx - 0xa]
movzx r11d, byte [rbx - 9]
add eax, r15d
movzx r10d, byte [rbx - 8]
movzx r9d, byte [rbx - 7]
add r14d, eax
movzx r8d, byte [rbx - 6]
movzx edx, byte [rbx - 5]
add r13d, r14d
add eax, r14d
movzx r15d, byte [rbx - 1]
add r12d, r13d
add eax, r13d
add ebp, r12d
add eax, r12d
add edi, ebp
add eax, ebp
add esi, edi
add eax, edi
add r11d, esi
add eax, esi
add r10d, r11d
add eax, r11d
add r9d, r10d
add eax, r10d
add r8d, r9d
add eax, r9d
lea ecx, [rdx + r8]
movzx edx, byte [rbx - 4]
add eax, r8d
mov dword [rsp + 4], ecx
add eax, dword [rsp + 4]
add edx, ecx
movzx ecx, byte [rbx - 3]
mov dword [rsp + 8], edx
add eax, dword [rsp + 8]
add ecx, edx
movzx edx, byte [rbx - 2]
add eax, ecx
add edx, ecx
add r15d, edx
add eax, edx
add eax, r15d
add dword [rsp + 0xc], eax
cmp rbx, qword [rsp + 0x10]
jne 0x6c286377
mov eax, dword [rsp + 0x1c]
mov edi, dword [rsp + 0x18]
neg eax
shl eax, 4
lea eax, [rdi + rax - 0x11]
and edi, 0xf
je 0x6c286465
lea rdx, [rbx + rax + 1]
mov eax, dword [rsp + 0xc]
add rbx, 1
movzx ecx, byte [rbx - 1]
add r15d, ecx
add eax, r15d
cmp rbx, rdx
jne 0x6c28644e
mov dword [rsp + 0xc], eax
mov eax, r15d
mov ecx, 0x80078071
mul ecx
mov eax, edx
shr eax, 0xf
imul eax, eax, 0xfff1
sub r15d, eax
mov eax, dword [rsp + 0xc]
mul ecx
shr edx, 0xf
imul eax, edx, 0xfff1
sub dword [rsp + 0xc], eax
mov eax, dword [rsp + 0xc]
shl eax, 0x10
or eax, r15d
jmp 0x6c2861fe
movzx eax, byte [rdx]
add r15d, eax
lea eax, [r15 - 0xfff1]
cmp r15d, 0xfff1
cmovae r15d, eax
mov eax, dword [rsp + 0xc]
add eax, r15d
lea edx, [rax - 0xfff1]
cmp eax, 0xfff1
cmovae eax, edx
shl eax, 0x10
or eax, r15d
jmp 0x6c2861fe
mov eax, 1
jmp 0x6c2861fe
mov eax, dword [rsp + 0x80]
mov dword [rsp + 0x18], eax
jmp 0x6c286359
mov eax, dword [rsp + 0x80]
sub eax, 0x15b1
jmp 0x6c286445