Function at 0x409ac0
Capabilities:
Hash data with crc32

Disassembly:
mov eax, dword [esp + 0xc]
mov cx, word [eax + 2]
cmp cx, 2
push ebx
push esi
push edi
jne 0x409d50
mov ax, word [eax + 0xe]
cmp ax, 0x10
push ebp
jne 0x409bc5
mov ecx, dword [esp + 0x18]
mov eax, ecx
cdq
sub eax, edx
mov edx, eax
mov eax, dword [esp + 0x14]
sar edx, 1
sub eax, edx
cmp eax, 0xffff8000
lea esi, [eax + ecx]
jl 0x409bae
cmp eax, 0x7fff
jg 0x409bae
cmp esi, 0xffff8000
jl 0x409bae
cmp esi, 0x7fff
jg 0x409bae
mov edx, dword [esp + 0x24]
mov ecx, dword [esp + 0x20]
mov word [ecx], ax
movzx ebx, byte [ecx]
mov eax, dword [edx]
mov edi, eax
and edi, 0xff
shr eax, 8
xor edi, ebx
xor eax, dword [edi*4 + 0x4215c0]
mov dword [edx], eax
movzx ebx, byte [ecx + 1]
mov edi, eax
inc ecx
shr eax, 8
and edi, 0xff
xor edi, ebx
xor eax, dword [edi*4 + 0x4215c0]
mov dword [edx], eax
mov word [ecx + 1], si
mov esi, dword [edx]
movzx edi, byte [ecx + 1]
inc ecx
mov eax, esi
and eax, 0xff
xor eax, edi
mov eax, dword [eax*4 + 0x4215c0]
shr esi, 8
xor eax, esi
mov dword [edx], eax
movzx ecx, byte [ecx + 1]
mov esi, eax
and esi, 0xff
xor ecx, esi
mov esi, dword [ecx*4 + 0x4215c0]
shr eax, 8
xor eax, esi
mov dword [edx], eax
pop ebp
pop edi
pop esi
pop ebx
ret 0x14
push 0x423b9c
lea edx, [esp + 0x18]
push edx
mov dword [esp + 0x1c], 0xffffffff
call fcn.00415267
cmp ax, 8
jne 0x409c32
mov ebx, dword [esp + 0x18]
mov esi, dword [esp + 0x20]
mov eax, ebx
cdq
sub eax, edx
mov edx, dword [esp + 0x24]
mov ecx, eax
mov al, byte [esp + 0x14]
sar ecx, 1
sub al, cl
add al, 0x80
mov byte [esi], al
mov ecx, dword [edx]
mov edi, ecx
movzx ebp, al
and edi, 0xff
xor edi, ebp
mov ebp, dword [edi*4 + 0x4215c0]
shr ecx, 8
xor ecx, ebp
mov dword [edx], ecx
inc esi
mov cl, bl
add cl, al
mov byte [esi], cl
mov eax, dword [edx]
mov esi, eax
movzx ecx, cl
and esi, 0xff
xor esi, ecx
mov ecx, dword [esi*4 + 0x4215c0]
pop ebp
pop edi
shr eax, 8
xor eax, ecx
pop esi
mov dword [edx], eax
pop ebx
ret 0x14
cmp ax, 0x18
jne 0x409ba7
mov ecx, dword [esp + 0x18]
mov eax, ecx
cdq
sub eax, edx
mov edx, dword [esp + 0x14]
sar eax, 1
sub edx, eax
lea edi, [edx + ecx]
jns 0x409c5e
add edx, 0x800000
or edx, 0x800000
mov eax, dword [esp + 0x24]
mov ecx, dword [esp + 0x20]
mov byte [ecx], dl
mov esi, dword [eax]
mov ebx, esi
and ebx, 0xff
shr esi, 8
movzx ebp, dl
xor ebx, ebp
xor esi, dword [ebx*4 + 0x4215c0]
mov dword [eax], esi
mov ebx, edx
shr ebx, 8
mov byte [ecx + 1], bl
mov esi, dword [eax]
inc ecx
mov ebp, esi
movzx ebx, bl
and ebp, 0xff
xor ebp, ebx
mov ebx, dword [ebp*4 + 0x4215c0]
shr esi, 8
xor esi, ebx
mov dword [eax], esi
shr edx, 0x10
inc ecx
mov byte [ecx], dl
mov esi, dword [eax]
mov ebx, esi
and ebx, 0xff
movzx edx, dl
xor ebx, edx
mov ebp, dword [ebx*4 + 0x4215c0]
shr esi, 8
xor esi, ebp
inc ecx
test edi, edi
mov dword [eax], esi
jge 0x409cdf
lea edx, [edi + 0x800000]
or edx, 0x800000
jmp 0x409ce1
mov edx, edi
mov byte [ecx], dl
mov esi, dword [eax]
mov edi, esi
and edi, 0xff
movzx ebx, dl
xor edi, ebx
mov ebx, dword [edi*4 + 0x4215c0]
shr esi, 8
xor esi, ebx
mov dword [eax], esi
mov ebx, edx
shr ebx, 8
mov byte [ecx + 1], bl
mov esi, dword [eax]
inc ecx
mov edi, esi
movzx ebx, bl
and edi, 0xff
xor edi, ebx
mov ebx, dword [edi*4 + 0x4215c0]
shr esi, 8
xor esi, ebx
mov dword [eax], esi
inc ecx
shr edx, 0x10
mov byte [ecx], dl
mov ecx, dword [eax]
mov esi, ecx
movzx edx, dl
and esi, 0xff
xor esi, edx
mov edx, dword [esi*4 + 0x4215c0]
pop ebp
pop edi
shr ecx, 8
xor ecx, edx
pop esi
mov dword [eax], ecx
pop ebx
ret 0x14
cmp cx, 1
jne 0x409ba8
mov ax, word [eax + 0xe]
cmp ax, 0x10
jne 0x409db2
mov edx, dword [esp + 0x1c]
mov esi, dword [esp + 0x20]
mov ax, word [esp + 0x10]
mov word [edx], ax
mov ecx, dword [esi]
movzx edi, byte [edx]
mov eax, ecx
and eax, 0xff
xor eax, edi
mov eax, dword [eax*4 + 0x4215c0]
shr ecx, 8
xor eax, ecx
mov dword [esi], eax
movzx ecx, byte [edx + 1]
mov edx, eax
and edx, 0xff
xor ecx, edx
mov edx, dword [ecx*4 + 0x4215c0]
shr eax, 8
xor eax, edx
pop edi
mov dword [esi], eax
pop esi
pop ebx
ret 0x14
cmp ax, 8
jne 0x409dec
mov cl, byte [esp + 0x10]
mov eax, dword [esp + 0x1c]
mov edx, dword [esp + 0x20]
add cl, 0x80
mov byte [eax], cl
mov eax, dword [edx]
mov esi, eax
movzx ecx, cl
and esi, 0xff
xor esi, ecx
mov ecx, dword [esi*4 + 0x4215c0]
pop edi
shr eax, 8
xor eax, ecx
pop esi
mov dword [edx], eax
pop ebx
ret 0x14
cmp ax, 0x18
jne 0x409ba8
mov edx, dword [esp + 0x10]
test edx, edx
jge 0x409e0a
add edx, 0x800000
or edx, 0x800000
mov ecx, dword [esp + 0x20]
mov esi, dword [esp + 0x1c]
mov byte [esi], dl
mov eax, dword [ecx]
mov edi, eax
and edi, 0xff
movzx ebx, dl
xor edi, ebx
mov ebx, dword [edi*4 + 0x4215c0]
shr eax, 8
xor eax, ebx
mov dword [ecx], eax
inc esi
mov ebx, edx
shr ebx, 8
mov byte [esi], bl
mov eax, dword [ecx]
mov edi, eax
movzx ebx, bl
and edi, 0xff
xor edi, ebx
mov ebx, dword [edi*4 + 0x4215c0]
shr eax, 8
xor eax, ebx
mov dword [ecx], eax
inc esi
shr edx, 0x10
mov byte [esi], dl
mov eax, dword [ecx]
mov esi, eax
movzx edx, dl
and esi, 0xff
xor esi, edx
mov edx, dword [esi*4 + 0x4215c0]
pop edi
shr eax, 8
xor eax, edx
pop esi
mov dword [ecx], eax
pop ebx
ret 0x14