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

Disassembly:
mov rax, rsp
mov qword [rax + 0x10], rbx
mov qword [rax + 0x18], rsi
mov qword [rax + 0x20], rdi
mov qword [rax + 8], rcx
push rbp
push r12
push r13
push r14
push r15
lea rbp, [rax - 0x5f]
sub rsp, 0x90
movaps xmmword [rax - 0x38], xmm6
movaps xmmword [rax - 0x48], xmm7
movaps xmmword [rax - 0x58], xmm8
mov rdi, rdx
mov ecx, dword [0x18028ab2c]
mov rax, qword gs:[0x58]
mov r13d, 4
mov r15, qword [rax + rcx*8]
xor r14d, r14d
mov eax, dword [r15 + r13]
cmp dword [0x1802a3408], eax
jle 0x1801595ba
lea rcx, [0x1802a3408]
call fcn.1801d1cb0
cmp dword [0x1802a3408], 0xffffffff
jne 0x1801595ba
mov qword [0x1802a1f08], r14
lea rcx, [rbp + 0x67]
call fcn.1800b6ac0
mov rdx, qword [rax]
mov qword [0x1802a1f08], rdx
lea rcx, [0x1802a3408]
call fcn.1801d1c44
lea rcx, [rbp + 0x67]
call fcn.1800b6ac0
mov rax, qword [rbp + 0x67]
sub rax, qword [0x1802a1f08]
cmp rax, 0x77359400
jl 0x1801598d3
lea rcx, [rbp + 0x67]
call fcn.1800b6ac0
mov rcx, qword [rax]
mov qword [0x1802a1f08], rcx
test byte [0x18029d194], 8
je 0x180159752
mov rcx, rdi
call fcn.1800ca2d0
mov ebx, r14d
cmp dword [rax], 3
setne bl
mov byte [rbp - 0xd], r14b
mov rax, qword [rdi]
mov rcx, rdi
call qword [rax + 0x48]
movss xmm6, dword [rax]
movss xmm7, dword [rax + 4]
movss xmm8, dword [rax + 8]
mov eax, dword [0x18028cc00]
sub eax, 2
je 0x18015965e
cmp eax, 1
jne 0x180159752
movss dword [rbp - 0x29], xmm6
movss dword [rbp - 0x25], xmm7
movss dword [rbp - 0x21], xmm8
lea r9d, [rbx + 2]
lea r8, [rbp - 0x29]
lea rdx, [rbp - 9]
call fcn.1801588b0
jmp 0x18015967f
movss dword [rbp - 0x29], xmm6
movss dword [rbp - 0x25], xmm7
movss dword [rbp - 0x21], xmm8
lea r9d, [rbx + 2]
lea r8, [rbp - 0x29]
lea rdx, [rbp - 9]
call fcn.180158af0
cmp byte [rax + 0xc], r14b
je 0x180159752
movss xmm1, dword [rax + 8]
movss xmm2, dword [rax + 4]
movss xmm0, dword [rax]
mov byte [rbp - 0xd], 1
movss dword [rbp - 0x11], xmm1
movss dword [rbp - 0x15], xmm2
movss dword [rbp - 0x19], xmm0
subss xmm1, xmm8
subss xmm2, xmm7
subss xmm0, xmm6
mulss xmm0, xmm0
mulss xmm2, xmm2
addss xmm0, xmm2
mulss xmm1, xmm1
addss xmm0, xmm1
cvtps2pd xmm6, xmm0
movsd xmm1, qword [0x18025dfa8]
movsd xmm0, qword [0x18025e030]
call sub.api_ms_win_crt_math_l1_1_0.dll_pow
comisd xmm0, xmm6
jb 0x18015971c
mov rax, qword [0x180287710]
cmp rax, qword [0x180287718]
je 0x180159700
mov qword [0x180287718], rax
mov qword [0x1802876f8], r14
mov dword [0x180287728], r14d
mov byte [0x18028773d], r14b
mov al, 1
jmp 0x1801598d5
cmp dword [0x180287728], 0xb
setne al
mov byte [rsp + 0x20], al
mov r8d, 0xb
lea rdx, [rbp - 0x19]
lea rcx, [0x1802876f0]
call fcn.180167a70
test al, al
je 0x180159752
mov byte [0x180287601], 1
mov al, 1
jmp 0x1801598d5
mov byte [0x180287601], r14b
mov rbx, qword [0x180287688]
mov rdi, qword [0x180287690]
cmp rbx, rdi
je 0x1801598d3
cmp dword [0x180287728], 0xb
je 0x1801598d3
lea r12, [0x1802a1f20]
movabs rsi, 0x2aaaaaaaaaaaaaab
nop
mov eax, dword [r15 + r13]
cmp dword [0x1802a3418], eax
jle 0x180159806
lea rcx, [0x1802a3418]
call fcn.1801d1cb0
cmp dword [0x1802a3418], 0xffffffff
jne 0x180159806
call qword [sym.imp.MSVCP140.dll_unsigned_int___cdecl_std::_Random_device_void_]
mov dword [0x1802a32a4], 0xffffffff
mov dword [0x1802a1f24], eax
mov edx, 1
nop dword [rax]
mov ecx, eax
shr ecx, 0x1e
xor ecx, eax
imul eax, ecx, 0x6c078965
add eax, edx
mov dword [r12 + rdx*4 + 4], eax
inc rdx
cmp rdx, 0x270
jb 0x1801597d0
mov dword [0x1802a1f20], 0x270
lea rcx, [0x1802a3418]
call fcn.1801d1c44
sub rdi, rbx
mov rax, rsi
imul rdi
sar rdx, 1
mov rax, rdx
shr rax, 0x3f
add rdx, rax
dec edx
btc edx, 0x1f
mov rcx, r12
cmp edx, 0x7fffffff
jne 0x180159836
call fcn.18014f1d0
mov ecx, eax
jmp 0x180159880
lea edi, [rdx - 0x7fffffff]
call fcn.18014f1d0
mov esi, edi
mov ecx, eax
imul rcx, rsi
cmp ecx, edi
jae 0x180159872
mov eax, edi
neg eax
xor edx, edx
div edi
mov edi, edx
cmp ecx, edx
jae 0x180159872
nop dword [rax + rax]
mov rcx, r12
call fcn.18014f1d0
mov ecx, eax
imul rcx, rsi
cmp ecx, edi
jb 0x180159860
shr rcx, 0x20
movabs rsi, 0x2aaaaaaaaaaaaaab
lea eax, [rcx - 0x80000000]
movsxd rcx, eax
xor rcx, 0xffffffff80000000
lea rax, [rcx + rcx*2]
lea rdx, [rbx + rax*4]
mov byte [rsp + 0x20], 1
mov r8d, 0xb
lea rcx, [0x1802876f0]
call fcn.180167a70
test al, al
jne 0x180159715
inc r14d
cmp r14d, 0xa
jge 0x1801598d3
mov rdi, qword [0x180287690]
mov rbx, qword [0x180287688]
jmp 0x180159790
xor al, al
lea r11, [rsp + 0x90]
mov rbx, qword [r11 + 0x38]
mov rsi, qword [r11 + 0x40]
mov rdi, qword [r11 + 0x48]
movaps xmm6, xmmword [r11 - 0x10]
movaps xmm7, xmmword [rsp + 0x70]
movaps xmm8, xmmword [r11 - 0x30]
mov rsp, r11
pop r15
pop r14
pop r13
pop r12
pop rbp
ret