Function at 0x100aa970
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0x38
push esi
push edi
mov edi, dword [ebp + 8]
mov esi, ecx
mov ecx, dword [edi]
mov eax, ecx
and eax, 0x3f00000
cmp eax, 0x300000
jne 0x100aa99e
and ecx, 0xfd3fffff
or ecx, 0x1300000
mov dword [edi], ecx
lea eax, [esi + 0x2b98]
push eax
lea ecx, [esi + 0xa80]
mov dword [esp + 0x1c], eax
push edi
mov dword [esp + 0x34], ecx
call fcn.10026ff0
mov byte [esp + 0x13], al
test al, al
jne 0x100aa9ef
mov ecx, dword [esi + 0xa40]
test dword [ecx], 0x200
jne 0x100aa9fd
mov ecx, dword [esi + 0x2c08]
mov eax, dword [esi + 0x2c0c]
xor ecx, dword [edi]
xor eax, dword [edi + 4]
and ecx, 0x3fffffff
and eax, 0x1f78001c
or ecx, eax
je 0x100aa9fd
mov ecx, esi
call fcn.10097240
mov ecx, esi
call fcn.10097330
and dword [edi + 4], 0xffd7ffff
lea eax, [esi + 0x2c08]
mov ecx, dword [edi]
mov dword [esp + 0x28], eax
mov eax, dword [eax]
xor eax, ecx
test eax, 0x3ffffff
je 0x100aaa45
mov eax, ecx
shr eax, 0x14
and eax, 0x3f
push eax
mov eax, ecx
and ecx, 0x3fff
shr eax, 0xe
and eax, 0x3f
push eax
push ecx
lea ecx, [esi + 0xa60]
call fcn.100639d0
mov dword [esi + 0x2cb8], eax
cmp byte [esp + 0x13], 0
movq xmm0, qword [edi]
movq qword [esi + 0x2c08], xmm0
je 0x100aabc4
mov edx, dword [edi + 4]
mov ecx, edx
mov eax, edx
and ecx, 0x800000
shr edx, 0x13
shr eax, 5
and edx, 0xf
and eax, 0x3fff
shl edx, 7
mov dword [esp + 0x1c], ecx
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x24], edx
test ecx, ecx
jne 0x100aab49
or ecx, 0x8000
mov dword [esp + 0x30], 0
and eax, 0xc0c1c000
mov dword [esp + 0x34], 0
add ecx, ecx
or ecx, eax
mov eax, dword [edx + 0x10762144]
or ecx, dword [esp + 0x14]
mov dword [esp + 0x38], eax
mov eax, dword [edx + 0x10762148]
mov dword [esp + 0x1c], ecx
xor ecx, ecx
cmp word [edx + 0x1076213c], 0x10
mov dword [esp + 0x3c], eax
mov eax, dword [edi]
setne cl
shr eax, 0x14
and eax, 0x3f
shl eax, 7
lea ecx, [ecx*2 + 2]
mov edx, ecx
shr edx, 1
cmp word [eax + 0x1076213c], 4
cmovne edx, ecx
xor edi, edi
mov dword [esp + 0x14], edx
mov eax, dword [esi]
lea ecx, [esp + 0x30]
push 1
push ecx
lea ecx, [esp + 0x24]
push ecx
mov ecx, esi
call dword [eax + 0x14]
mov ecx, dword [esp + 0x1c]
inc edi
lea eax, [ecx + 1]
xor eax, ecx
and eax, 0x3fff
xor ecx, eax
mov dword [esp + 0x1c], ecx
cmp edi, dword [esp + 0x14]
jl 0x100aab01
mov edi, dword [esp + 0x18]
mov ecx, dword [esp + 0x2c]
push edi
push dword [esp + 0x2c]
call fcn.100270a0
pop edi
pop esi
mov esp, ebp
pop ebp
ret 4
mov edx, dword [esi + 0x2b98]
lea edi, [esi + 0x2b98]
mov ecx, edx
and eax, 0xc0c0c000
and ecx, 0x3f
shl ecx, 0xf
or ecx, dword [esp + 0x1c]
add ecx, ecx
or ecx, eax
mov eax, dword [esp + 0x24]
or ecx, dword [esp + 0x14]
mov dword [esp + 0x1c], ecx
mov ecx, edx
shr ecx, 6
movzx eax, word [eax + 0x10762140]
and ecx, 0x3f
add eax, ecx
shr edx, 0xc
and edx, 0x3ff
mov dword [esp + 0x30], ecx
mov dword [esp + 0x38], eax
lea ecx, [esp + 0x30]
push 1
push ecx
lea eax, [edx + 1]
mov dword [esp + 0x3c], edx
mov dword [esp + 0x44], eax
lea ecx, [esp + 0x24]
mov eax, dword [esi]
push ecx
mov ecx, esi
call dword [eax + 0x14]
mov ecx, dword [esp + 0x2c]
push edi
push dword [esp + 0x2c]
call fcn.100270a0
pop edi
pop esi
mov esp, ebp
pop ebp
ret 4