Function at 0x40a100
Capabilities:
Encode data using xor
Hash data with crc32

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x491fa2
mov eax, dword fs:[0]
push eax
sub esp, 0x518
mov eax, dword [0x4c100c]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov edi, edx
mov ebx, ecx
mov dword [ebp - 0x498], ebx
mov dword [ebp - 0x49c], ebx
push 0x400
lea eax, [ebp - 0x490]
mov dword [ebp - 0x4d0], ebx
push 0
push eax
mov dword [ebp - 0x494], 0
call fcn.00479200
add esp, 0xc
lea ecx, [ebp - 0x4cc]
call fcn.00405e70
mov dword [ebp - 4], 1
lea ecx, [ebp - 0x4f8]
call fcn.004079c0
mov byte [ebp - 4], 2
mov eax, dword [edi + 0x14]
mov dword [ebp - 0x49c], eax
cmp eax, 1
jge 0x40a230
mov ecx, ebx
call fcn.00405e70
mov byte [ebp - 4], 3
mov dword [ebx], vtable.CWString.0
cmp word [0x4a49e4], 0
je 0x40a20e
mov ecx, ebx
call fcn.00448aa0
mov ecx, eax
mov edx, dword [ecx + 0x14]
cmp edx, 2
jb 0x40a1d6
mov eax, dword [ecx + 0xc]
movzx eax, word [eax + edx - 2]
test ax, ax
jne 0x40a1d6
lea eax, [edx - 2]
mov dword [ecx + 0x14], eax
mov eax, dword [ebx + 0x20]
mov esi, dword [ebx + 0x24]
sub eax, esi
cmp eax, 2
jl 0x40a1f7
mov eax, dword [ebx + 0x1c]
movzx ecx, word [0x4a49e4]
mov word [esi + eax], cx
add dword [ebx + 0x24], 2
jmp 0x40a20e
lea eax, [esi + 2]
push eax
lea ecx, [ebx + 0x10]
call fcn.00446eb0
mov cx, word [0x4a49e4]
mov word [eax + esi], cx
mov byte [ebp - 4], 2
mov dword [ebp - 0x494], 1
mov byte [ebp - 4], 4
lea ecx, [ebp - 0x4ec]
call fcn.00408030
jmp 0x40a4de
xor esi, esi
mov ecx, esi
mov eax, esi
shr ecx, 1
mov edx, ecx
xor edx, 0xedb88320
and al, 1
cmove edx, ecx
mov eax, edx
sar eax, 1
and eax, 0x7fffffff
mov ecx, eax
xor ecx, 0xedb88320
and dl, 1
cmove ecx, eax
mov eax, ecx
sar eax, 1
and eax, 0x7fffffff
mov edx, eax
xor edx, 0xedb88320
and cl, 1
cmove edx, eax
mov eax, edx
sar eax, 1
and eax, 0x7fffffff
mov ecx, eax
xor ecx, 0xedb88320
and dl, 1
cmove ecx, eax
mov eax, ecx
sar eax, 1
and eax, 0x7fffffff
mov edx, eax
xor edx, 0xedb88320
and cl, 1
cmove edx, eax
mov eax, edx
sar eax, 1
and eax, 0x7fffffff
mov ecx, eax
xor ecx, 0xedb88320
and dl, 1
cmove ecx, eax
mov eax, ecx
sar eax, 1
and eax, 0x7fffffff
mov edx, eax
xor edx, 0xedb88320
and cl, 1
cmove edx, eax
mov ecx, edx
sar ecx, 1
and ecx, 0x7fffffff
mov eax, ecx
xor eax, 0xedb88320
and dl, 1
cmove eax, ecx
mov dword [ebp + esi*4 - 0x490], eax
inc esi
cmp esi, 0x100
jl 0x40a232
mov ebx, dword [ebp - 0x49c]
xor eax, eax
mov ecx, dword [edi + 0xc]
lea esi, [eax + 1]
mov edx, dword [edi + 0x14]
add ecx, eax
cmp esi, edx
jle 0x40a33f
sub edx, eax
xorps xmm0, xmm0
mov eax, 0
movlpd qword [ebp - 0x4a0], xmm0
cmovns eax, edx
push eax
push ecx
lea eax, [ebp - 0x4a0]
push eax
call fcn.00478c80
mov al, byte [ebp - 0x4a0]
add esp, 0xc
jmp 0x40a341
mov al, byte [ecx]
movsx eax, al
test eax, eax
je 0x40a35d
push eax
lea eax, [ebp - 0x4ec]
push 0x4a9c28
push eax
call fcn.0040e040
add esp, 0xc
mov eax, esi
cmp eax, ebx
jl 0x40a302
mov edx, dword [ebp - 0x4d8]
xor esi, esi
mov ebx, dword [ebp - 0x498]
mov edi, edx
shr edi, 2
or ecx, 0xffffffff
test edi, edi
je 0x40a3ba
or ecx, ecx
nop
mov eax, dword [ebp - 0x4e0]
test edx, edx
mov dword [ebp - 0x498], 0
cmove eax, dword [ebp - 0x498]
movzx edx, cl
sar ecx, 8
and ecx, 0xffffff
xor edx, dword [eax + esi*4]
inc esi
xor ecx, dword [ebp + edx*4 - 0x490]
mov edx, dword [ebp - 0x4d8]
cmp esi, edi
jl 0x40a380
mov byte [ebp - 4], 7
lea eax, [ebp - 0x90]
push ecx
push eax
not ecx
xor edx, edx
call fcn.0042ed30
add esp, 8
lea ecx, [ebp - 0x524]
mov edx, eax
call fcn.00405e70
mov byte [ebp - 4], 8
lea ecx, [ebp - 0x524]
push edx
mov dword [ebp - method.CWString.virtual_0], vtable.CWString.0
call fcn.00449060
mov byte [ebp - 4], 7
lea ecx, [ebp - 0x4cc]
mov eax, dword [ebp - 0x4cc]
mov dword [ebp - 0x494], 2
call dword [eax + 0x44]
mov eax, dword [ebp - 0x520]
lea ecx, [ebp - 0x4bc]
mov dword [ebp - 0x4c8], eax
mov eax, dword [ebp - 0x51c]
mov dword [ebp - 0x4c4], eax
mov eax, dword [ebp - 0x518]
mov dword [ebp - 0x4c0], eax
mov eax, dword [ebp - 0x4bc]
call dword [eax + 0x44]
lea eax, [ebp - 0x514]
push eax
lea ecx, [ebp - 0x4bc]
call fcn.004059c0
mov edi, 2
mov dword [ebp - 0x494], edi
and edi, 0xfffffffd
mov dword [ebp - 0x494], edi
mov byte [ebp - 4], 2
lea ecx, [ebp - 0x524]
call fcn.00405340
mov ecx, ebx
call fcn.00405e70
mov byte [ebp - 4], 0xe
lea ecx, [ebx + 0x10]
mov eax, dword [ebp - 0x4c8]
mov dword [ebx + 4], eax
mov eax, dword [ebp - 0x4c4]
mov dword [ebx + 8], eax
mov eax, dword [ebp - 0x4c0]
mov dword [ebx], vtable.CWString.0
mov dword [ebx + 0xc], eax
mov eax, dword [ebx + 0x10]
call dword [eax + 0x44]
lea eax, [ebp - 0x4bc]
push eax
lea ecx, [ebx + 0x10]
call fcn.004059c0
mov byte [ebp - 4], 2
or edi, 1
mov dword [ebp - 0x494], edi
mov byte [ebp - 4], 0xf
lea ecx, [ebp - 0x4ec]
call fcn.00408030
mov byte [ebp - 4], 1
mov dword [ebp - method.CWString.virtual_0], vtable.CVolObject.0
mov byte [ebp - 4], 0
lea ecx, [ebp - 0x4cc]
call fcn.00405340
mov eax, ebx
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.00477369
mov esp, ebp
pop ebp
ret 4