Function at 0x409710
Capabilities:
Encode data using xor
Generate random numbers using a mersenne twister

Disassembly:
push ebp
mov ebp, esp
mov eax, 0x13c8
call fcn.0046b4e0
mov eax, dword [0x533524]
xor eax, ebp
mov dword [ebp - 4], eax
mov eax, dword [ebp + 8]
mov edx, dword [ebp + 0x10]
mov dword [ebp - 0x13b4], ecx
mov ecx, dword [ebp + 0xc]
mov dword [ebp - 0x13c8], ecx
mov dword [ebp - 0x13c0], eax
mov dword [ebp - 0x13c4], edx
mov ecx, dword [ecx]
mov dword [ebp - 0x13b8], ecx
test ecx, ecx
je 0x409952
mov ecx, 0x5a4d
cmp word [eax], cx
jne 0x409952
movups xmm0, xmmword [str.abcdefghigklmnopqrstuvwxyz12345]
movups xmmword [ebp - 0x24], xmm0
movups xmm0, xmmword [0x4fad58]
movups xmmword [ebp - 0x14], xmm0
call fcn.00456f6c
mov edx, eax
mov dword [ebp - 0x28], 0xffffffff
mov dword [ebp - 0x13a8], edx
mov ecx, 1
mov eax, edx
shr eax, 0x1e
xor eax, edx
imul edx, eax, 0x6c078965
add edx, ecx
mov dword [ebp + ecx*4 - 0x13a8], edx
inc ecx
cmp ecx, 0x270
jl 0x409795
push ebx
push esi
push edi
mov dword [ebp - 0x13ac], 0x270
mov edi, 2
mov dword [ebp - 0x13b0], 0x1e
lea ebx, [edi - 1]
xor ecx, ecx
xor eax, eax
test ebx, ebx
je 0x4097eb
lea ecx, [ebp - 0x13ac]
call fcn.00409450
mov ecx, eax
or eax, 0xffffffff
xor edx, edx
div edi
mov esi, eax
mov dword [ebp - 0x13bc], edx
xor edx, edx
mov eax, ecx
div edi
cmp eax, esi
jb 0x409809
cmp dword [ebp - 0x13bc], ebx
jne 0x4097d3
xor edx, edx
mov eax, ecx
div edi
lea eax, [edi - 1]
cmp edx, eax
je 0x409826
mov al, byte [ebp + edx - 0x24]
mov cl, byte [ebp + edi - 0x25]
mov byte [ebp + edi - 0x25], al
mov byte [ebp + edx - 0x24], cl
inc edi
sub dword [ebp - 0x13b0], 1
jne 0x4097d0
mov esi, dword [ebp - 0x13b8]
lea ebx, [esi + 0x20]
push ebx
call fcn.0046b0c1
push ebx
mov edi, eax
push 0
push edi
call fcn.00478070
push esi
mov esi, dword [ebp - 0x13c0]
push esi
push edi
call fcn.00478e80
mov ecx, dword [ebp - 0x13b8]
add esp, 0x1c
movups xmm1, xmmword [ebp - 0x14]
movups xmm0, xmmword [ebp - 0x24]
pextrw eax, xmm1, 6
movups xmmword [edi + ecx + 1], xmm0
movaps xmm0, xmm1
movq qword [edi + ecx + 0x11], xmm1
psrldq xmm0, 8
movd dword [edi + ecx + 0x19], xmm0
mov word [edi + ecx + 0x1d], ax
psrldq xmm1, 0xe
movd eax, xmm1
mov byte [edi + ecx + 0x1f], al
mov eax, dword [ebp - 0x13c4]
test eax, eax
je 0x4098a9
mov dword [eax], 0x20
mov ecx, dword [esi + 0x3c]
mov edx, 0x10b
mov dword [ebp - 0x13b0], ecx
movzx eax, word [ecx + edi + 0x18]
cmp ax, dx
jne 0x4098cb
add dword [ecx + edi + 0x9c], 0x20
jmp 0x4098dd
mov edx, 0x20b
cmp ax, dx
jne 0x409945
add dword [ecx + edi + 0xac], 0x20
xor ecx, ecx
test edi, edi
je 0x409938
test ebx, ebx
je 0x409938
mov esi, dword [ebp - 0x13b0]
add esi, 0x58
mov eax, esi
shr eax, 1
push eax
push edi
push ecx
mov ecx, dword [ebp - 0x13b4]
call fcn.004095e0
mov ecx, eax
mov eax, ebx
sub eax, esi
sub eax, 4
shr eax, 1
push eax
mov eax, dword [ebp - 0x13b0]
add eax, 0x5c
add eax, edi
push eax
push ecx
mov ecx, dword [ebp - 0x13b4]
call fcn.004095e0
mov ecx, eax
test bl, 1
je 0x409938
movsx ax, byte [edi + ebx - 1]
movzx eax, ax
add ecx, eax
lea eax, [ecx + ebx]
mov ecx, dword [ebp - 0x13b0]
mov dword [ecx + edi + 0x58], eax
mov eax, dword [ebp - 0x13c8]
mov dword [eax], ebx
mov eax, edi
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.0046b078
mov esp, ebp
pop ebp
ret 0xc