Function at 0x509710
Capabilities:
Encode data using xor
Hash data using fnv

Disassembly:
sub esp, 0x14
push ebx
mov ebx, ecx
xor al, al
push ebp
push esi
push edi
cmp dword [ebx + 0xfc], 0
mov edi, dword [esp + 0x28]
mov dword [esp + 0x18], ebx
mov byte [esp + 0x17], al
je 0x509874
cmp dword [edi + 0x14], 8
mov esi, edi
mov eax, dword [edi + 0x10]
jb 0x509741
mov esi, dword [edi]
lea ebx, [eax + eax]
xor ecx, ecx
mov edx, 0x811c9dc5
test ebx, ebx
je 0x509761
nop
movzx eax, byte [ecx + esi]
inc ecx
xor eax, edx
imul edx, eax, 0x1000193
cmp ecx, ebx
jb 0x509750
mov ebp, dword [esp + 0x18]
mov eax, dword [ebp + 0x10c]
mov ecx, dword [ebp + 0x100]
and eax, edx
mov ebp, dword [ebp + 0xf8]
mov edx, dword [ecx + eax*8]
lea eax, [eax*8 + 4]
add eax, ecx
mov dword [esp + 0x28], edx
mov esi, edx
mov dword [esp + 0x1c], eax
nop
cmp edx, ebp
jne 0x509798
mov eax, ebp
jmp 0x50979c
mov eax, dword [eax]
mov eax, dword [eax]
cmp esi, eax
je 0x509806
cmp dword [edi + 0x14], 8
lea ebx, [esi + 8]
mov edx, edi
jb 0x5097ad
mov edx, dword [edi]
cmp dword [ebx + 0x14], 8
mov ecx, ebx
mov eax, dword [ebx + 0x10]
mov dword [esp + 0x20], eax
jb 0x5097be
mov ecx, dword [ebx]
cmp eax, dword [edi + 0x10]
jne 0x5097d0
push eax
call fcn.00406f00
add esp, 4
test eax, eax
je 0x5097dc
mov esi, dword [esi]
mov edx, dword [esp + 0x28]
mov eax, dword [esp + 0x1c]
jmp 0x509790
cmp dword [ebx + 0x14], 8
jb 0x5097e4
mov ebx, dword [ebx]
cmp dword [edi + 0x14], 8
mov ecx, edi
jb 0x5097ee
mov ecx, dword [edi]
mov eax, dword [edi + 0x10]
cmp eax, dword [esp + 0x20]
jne 0x509806
push eax
mov edx, ebx
call fcn.00406f00
add esp, 4
test eax, eax
je 0x509808
mov esi, ebp
mov ebx, dword [esp + 0x18]
cmp esi, ebp
je 0x509874
mov ebp, dword [esp + 0x34]
cmp dword [edi + 0x14], 8
lea ecx, [esi + 8]
mov edx, edi
jb 0x509821
mov edx, dword [edi]
cmp dword [ecx + 0x14], 8
mov eax, dword [ecx + 0x10]
jb 0x50982c
mov ecx, dword [ecx]
cmp eax, dword [edi + 0x10]
jne 0x509869
push eax
call fcn.00406f00
add esp, 4
test eax, eax
jne 0x509869
push ebp
push dword [esp + 0x34]
lea eax, [esi + 0x20]
push ecx
push eax
push edi
mov ecx, ebx
call fcn.00507f50
mov esi, dword [esi]
mov byte [esp + 0x17], 1
cmp esi, dword [ebx + 0xf8]
jne 0x509814
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x14
ret 0x10
cmp byte [esp + 0x17], 0
jne 0x509a03
cmp dword [ebx + 0x11c], 0
je 0x5099bf
cmp dword [edi + 0x14], 8
mov esi, edi
mov eax, dword [edi + 0x10]
jb 0x50988e
mov esi, dword [edi]
lea ebx, [eax + eax]
xor ecx, ecx
mov edx, 0x811c9dc5
test ebx, ebx
je 0x5098b1
nop dword [eax]
movzx eax, byte [ecx + esi]
inc ecx
xor eax, edx
imul edx, eax, 0x1000193
cmp ecx, ebx
jb 0x5098a0
mov ebp, dword [esp + 0x18]
mov eax, dword [ebp + 0x12c]
mov ecx, dword [ebp + 0x120]
and eax, edx
mov ebp, dword [ebp + 0x118]
mov edx, dword [ecx + eax*8]
lea eax, [eax*8 + 4]
add eax, ecx
mov dword [esp + 0x28], edx
mov esi, edx
mov dword [esp + 0x20], eax
nop
cmp edx, ebp
jne 0x5098e8
mov eax, ebp
jmp 0x5098ec
mov eax, dword [eax]
mov eax, dword [eax]
cmp esi, eax
je 0x509956
cmp dword [edi + 0x14], 8
lea ebx, [esi + 8]
mov edx, edi
jb 0x5098fd
mov edx, dword [edi]
cmp dword [ebx + 0x14], 8
mov ecx, ebx
mov eax, dword [ebx + 0x10]
mov dword [esp + 0x1c], eax
jb 0x50990e
mov ecx, dword [ebx]
cmp eax, dword [edi + 0x10]
jne 0x509920
push eax
call fcn.00406f00
add esp, 4
test eax, eax
je 0x50992c
mov esi, dword [esi]
mov edx, dword [esp + 0x28]
mov eax, dword [esp + 0x20]
jmp 0x5098e0
cmp dword [ebx + 0x14], 8
jb 0x509934
mov ebx, dword [ebx]
cmp dword [edi + 0x14], 8
mov ecx, edi
jb 0x50993e
mov ecx, dword [edi]
mov eax, dword [edi + 0x10]
cmp eax, dword [esp + 0x1c]
jne 0x509956
push eax
mov edx, ebx
call fcn.00406f00
add esp, 4
test eax, eax
je 0x509958
mov esi, ebp
mov ebx, dword [esp + 0x18]
cmp esi, ebp
je 0x5099bf
cmp dword [edi + 0x14], 8
lea ecx, [esi + 8]
mov edx, edi
jb 0x50996d
mov edx, dword [edi]
cmp dword [ecx + 0x14], 8
mov eax, dword [ecx + 0x10]
jb 0x509978
mov ecx, dword [ecx]
cmp eax, dword [edi + 0x10]
jne 0x5099b8
push eax
call fcn.00406f00
add esp, 4
test eax, eax
jne 0x5099b8
push dword [esp + 0x34]
lea eax, [esi + 0x20]
push dword [esp + 0x34]
push ecx
push eax
push edi
mov ecx, ebx
call fcn.00507f50
mov esi, dword [esi]
mov byte [esp + 0x17], 1
cmp esi, dword [ebx + 0x118]
jne 0x509960
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x14
ret 0x10
cmp byte [esp + 0x17], 0
jne 0x509a03
cmp byte [esp + 0x34], 0
jne 0x509a03
mov eax, dword [edi + 0x10]
test eax, eax
je 0x509a03
cmp dword [edi + 0x14], 8
mov ecx, edi
jb 0x5099d7
mov ecx, dword [edi]
cmp eax, 0xd
jne 0x5099ee
push eax
mov edx, str.ExecuteAction
call fcn.00406f00
add esp, 4
test eax, eax
je 0x509a03
push 1
push dword [ebx + 0xc4]
mov ecx, edi
push dword [ebx + 0xc0]
call fcn.00506350
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x14
ret 0x10