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

Disassembly:
push rbx
sub rsp, 0xc0
mov rdx, qword [rcx + 0x400]
mov rbx, rcx
movzx eax, byte [rdx + 1]
mov dword [rcx + 0x120], eax
movzx eax, byte [rdx + 2]
xor edx, edx
mov dword [rcx + 0x124], eax
call fcn.140018190
test eax, eax
jne 0x140007d8c
mov rcx, qword [rbx + 0x78]
lea edx, [rax + 4]
mov qword [rsp + 0xd8], rbp
mov r8d, 0x2710
mov qword [rsp + 0xb8], rsi
mov qword [rsp + 0xb0], rdi
mov qword [rsp + 0xa8], r12
mov qword [rsp + 0xa0], r13
mov qword [rsp + 0x98], r14
mov qword [rsp + 0x90], r15
movaps xmmword [rsp + 0x80], xmm6
movaps xmmword [rsp + 0x70], xmm7
movaps xmmword [rsp + 0x60], xmm8
call qword [rbx + 0x68]
mov qword [rsp + 0xd0], rax
mov rsi, rax
lea rdi, str.out_of_memory
test rax, rax
jne 0x1400078ec
mov qword [rbx + 0x38], rdi
mov rcx, qword [rbx + 0x78]
mov r12d, 1
mov edx, r12d
mov r8d, 0x2710
call qword [rbx + 0x68]
mov qword [rsp + 0xe0], rax
mov r14, rax
test rax, rax
jne 0x140007916
mov qword [rbx + 0x38], rdi
xorps xmm0, xmm0
xor edx, edx
mov r8d, 0x2710
mov rcx, r14
movups xmmword [rsp + 0x20], xmm0
movups xmmword [rsp + 0x30], xmm0
movups xmmword [rsp + 0x40], xmm0
movups xmmword [rsp + 0x50], xmm0
call sub.VCRUNTIME140.dll_memset
xor ebp, ebp
lea rdx, [0x140027a98]
mov dword [rsi], ebp
lea r9, [0x140028454]
mov dword [0x140027a94], 0x9f73f7fc
mov r8d, r12d
mov dword [0x140027a90], 0x270
nop word [rax + rax]
mov ecx, dword [rdx - 4]
shr ecx, 0x1e
xor ecx, dword [rdx - 4]
imul eax, ecx, 0x6c078965
add eax, r8d
inc r8d
mov dword [rdx], eax
add rdx, 4
cmp rdx, r9
jl 0x140007970
mov eax, dword [rbx + 0x120]
test eax, eax
je 0x1400079b5
mov rcx, qword [rbx + 0x130]
mov r8d, eax
shl r8, 2
xor edx, edx
call sub.VCRUNTIME140.dll_memset
mov dword [rbx + 0x128], ebp
mov eax, dword [rbx + 0x124]
test eax, eax
je 0x1400079d7
mov rcx, qword [rbx + 0x138]
xor edx, edx
shl eax, 8
mov r8d, eax
shl r8, 2
call sub.VCRUNTIME140.dll_memset
movsd xmm7, qword [0x1400241a0]
lea r13, [rsi + 4]
movsd xmm8, qword [0x1400241c0]
inc r14
movsd xmm6, qword [0x1400241c8]
mov r15, r13
mov qword [rsp + 0xe8], r14
mov edi, r12d
call fcn.140009070
mov r11d, eax
xorps xmm0, xmm0
cvtsi2sd xmm0, r11
mulsd xmm0, xmm7
call fcn.140009070
xor edx, edx
div edi
mov esi, edx
call fcn.140009070
xor edx, edx
movzx eax, al
div edi
mov r8d, r12d
cmp edx, r12d
cmova r8d, edx
comisd xmm0, xmm8
jae 0x140007a53
mov rcx, qword [rsp + 0xd0]
mov eax, edi
sub eax, r8d
mov esi, dword [rcx + rax*4]
jmp 0x140007a6f
comisd xmm0, xmm6
jae 0x140007a6f
mov rcx, qword [rsp + 0xd0]
lea eax, [rdi - 1]
mov esi, dword [rcx + rsi*4]
add esi, r8d
cmp esi, eax
cmovae esi, eax
mov r9d, edi
mov r8d, edi
add r9, qword [rsp + 0xe0]
mov edx, esi
mov rcx, rbx
call fcn.14001c050
test eax, eax
jne 0x140007d41
mov dword [r15], esi
inc edi
movzx eax, byte [r14]
add r15, 4
inc r14
inc dword [rsp + rax*4 + 0x20]
cmp edi, 0x2710
jb 0x140007a05
mov rax, qword [rbx + 0x1f0]
mov ecx, ebp
test rax, rax
je 0x140007acc
nop dword [rax]
add ecx, dword [rax + 8]
mov rax, qword [rax + 0x10]
test rax, rax
jne 0x140007ac0
mov edx, ecx
mov r8d, r12d
mov rcx, qword [rbx + 0x78]
call qword [rbx + 0x68]
mov r14, rax
test rax, rax
jne 0x140007aeb
lea rax, str.out_of_memory
mov qword [rbx + 0x38], rax
mov rdi, qword [rbx + 0x1f0]
mov esi, ebp
test rdi, rdi
je 0x140007b1d
nop dword [rax]
mov r8d, dword [rdi + 8]
mov rdx, qword [rdi]
mov ecx, esi
add rcx, r14
call sub.VCRUNTIME140.dll_memcpy
add esi, dword [rdi + 8]
mov rdi, qword [rdi + 0x10]
test rdi, rdi
jne 0x140007b00
mov eax, dword [rbx + 0x120]
add rsi, r14
mov rdi, r14
test eax, eax
je 0x140007b48
mov rcx, qword [rbx + 0x130]
mov r8d, eax
shl r8, 2
xor edx, edx
call sub.VCRUNTIME140.dll_memset
mov dword [rbx + 0x128], ebp
mov eax, dword [rbx + 0x124]
test eax, eax
je 0x140007b6a
mov rcx, qword [rbx + 0x138]
xor edx, edx
shl eax, 8
mov r8d, eax
shl r8, 2
call sub.VCRUNTIME140.dll_memset
mov r10, qword [rsp + 0xe8]
nop dword [rax]
nop word [rax + rax]
mov eax, dword [rbx + 0x120]
movzx r9d, byte [r10]
add eax, 2
cmp r9d, eax
jae 0x140007bf1
mov r8d, ebp
cmp rdi, rsi
je 0x140007caa
test r8d, 0xfe000000
jne 0x140007c9e
movzx edx, byte [rdi]
mov eax, r8d
shl eax, 7
mov ecx, edx
and ecx, 0x7f
inc rdi
mov r8d, ecx
or r8d, eax
test dl, dl
js 0x140007b95
mov eax, r9d
test r9d, r9d
je 0x140007c15
cmp eax, 1
je 0x140007be6
mov rax, qword [rbx + 0x130]
lea ecx, [r9 - 2]
mov ecx, dword [rax + rcx*4]
add r8d, ecx
jmp 0x140007c15
mov eax, r12d
sub eax, r8d
mov r8d, eax
jmp 0x140007c15
cmp rdi, rsi
je 0x140007d31
sub r9d, eax
movzx eax, byte [rdi]
shl r9d, 8
add r9d, eax
mov rax, qword [rbx + 0x138]
inc rdi
mov r8d, dword [rax + r9*4]
cmp dword [rbx + 0x120], ebp
jbe 0x140007c44
mov ecx, dword [rbx + 0x128]
xor edx, edx
mov rax, qword [rbx + 0x130]
mov dword [rax + rcx*4], r8d
mov eax, dword [rbx + 0x128]
inc eax
div dword [rbx + 0x120]
mov dword [rbx + 0x128], edx
mov ecx, dword [rbx + 0x124]
test ecx, ecx
je 0x140007c63
xor edx, edx
shl ecx, 8
mov eax, r8d
div ecx
mov rax, qword [rbx + 0x138]
mov dword [rax + rdx*4], r8d
cmp r8d, dword [r13]
jne 0x140007d1f
inc r12d
inc r10
add r13, 4
cmp r12d, 0x2710
jb 0x140007b80
cmp rdi, rsi
je 0x140007cb6
lea rax, str.address_bytes_not_used
mov qword [rbx + 0x38], rax
mov eax, 0xffffbad2
jmp 0x140007d41
lea rax, str.overflow_in_read_intger
jmp 0x140007d38
lea rax, str.end_of_input_in_read_integer
jmp 0x140007d38
mov edx, dword [rbx + 0x124]
add edx, 2
add edx, dword [rbx + 0x120]
je 0x140007cd4
cmp dword [rsp + rbp*4 + 0x20], 0
je 0x140007d0d
inc ebp
cmp ebp, edx
jb 0x140007cc7
mov rax, qword [rsp + 0xe0]
test rax, rax
je 0x140007ceb
mov rcx, qword [rbx + 0x78]
mov rdx, rax
call qword [rbx + 0x70]
mov rdx, qword [rsp + 0xd0]
mov rcx, qword [rbx + 0x78]
call qword [rbx + 0x70]
test r14, r14
je 0x140007d09
mov rcx, qword [rbx + 0x78]
mov rdx, r14
call qword [rbx + 0x70]
xor eax, eax
jmp 0x140007d41
lea rax, str.address_mode_not_used
mov qword [rbx + 0x38], rax
mov eax, 0xffffbad2
jmp 0x140007d41
lea rax, str.incorrect_decoded_address
mov qword [rbx + 0x38], rax
mov eax, 0xffffbad2
jmp 0x140007d41
lea rax, str.address_underflow
mov qword [rbx + 0x38], rax
mov eax, 0xffffbad0
movaps xmm7, xmmword [rsp + 0x70]
movaps xmm6, xmmword [rsp + 0x80]
mov r15, qword [rsp + 0x90]
mov r14, qword [rsp + 0x98]
mov r13, qword [rsp + 0xa0]
mov r12, qword [rsp + 0xa8]
mov rdi, qword [rsp + 0xb0]
mov rsi, qword [rsp + 0xb8]
mov rbp, qword [rsp + 0xd8]
movaps xmm8, xmmword [rsp + 0x60]
add rsp, 0xc0
pop rbx
ret