Function at 0x18008e190
Capabilities:
Check for time delay via queryperformancecounter

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0x118
movdqa xmmword [rsp + 0x100], xmm7
movaps xmmword [rsp + 0xf0], xmm6
mov rsi, qword [rcx + 0x20]
movzx eax, byte [rsi + 0x40]
test al, al
je 0x18008e1d9
mov al, 1
xchg byte [rsi + 0x41], al
xor edi, edi
test al, al
jne 0x18008f78d
xor eax, eax
xchg byte [rsi + 0x41], al
jmp 0x18008f78d
lea rbx, [rsi + 0x40]
mov r8, qword [rdx]
mov rax, qword [rcx + 0x10]
mov qword [rsp + 0x40], rax
mov rax, qword [rcx]
mov r9d, dword [rcx + 8]
movzx edx, byte [rcx + 0x18]
mov dword [rsp + 0x84], edx
mov edx, 0x3b9aca00
mov qword [rsp + 0x60], rax
mul rdx
mov qword [rsp + 0x58], r9
add rax, r9
mov qword [rsp + 0xa0], rax
adc rdx, 0
mov qword [rsp + 0xa8], rdx
mov rdi, qword [rcx + 0x28]
lea rax, [rdi + 0x10]
mov qword [rsp + 0x70], rax
mov rax, qword [rcx + 0x20]
mov qword [rsp + 0x88], rax
add rax, 0x40
mov qword [rsp + 0xb0], rax
xor r12d, r12d
xorps xmm6, xmm6
pcmpeqd xmm7, xmm7
mov qword [rsp + 0x48], rdi
mov qword [rsp + 0x90], r8
lea r14, [rsi + 0x10]
mov rax, qword [r8]
mov rcx, qword [r8 + 8]
call qword [rax]
mov rdi, rax
mov al, 1
xchg byte [rsi + 0x20], al
mov r15, rdx
test al, al
cmovne r14, r12
jne 0x18008f740
mov rax, qword [r14]
test rax, rax
je 0x18008e293
mov rcx, qword [r14 + 8]
call qword [rax + 0x18]
mov qword [r14], rdi
mov qword [r14 + 8], r15
xor eax, eax
xchg byte [r14 + 0x10], al
movzx eax, byte [rbx]
test al, al
jne 0x18008e1c0
mov rsi, qword [rsp + 0x40]
mov rcx, rsi
mov rdx, qword [rsp + 0x90]
call fcn.18010c330
mov edi, eax
test al, al
jne 0x18008f78d
mov r12, qword [rsi + 0x10]
mov r13d, dword [rsi + 0x18]
mov qword [rsp + 0x28], 0
lea rcx, [rsp + 0x28]
call qword [sym.imp.kernel32.dll_QueryPerformanceCounter]
test eax, eax
je 0x18008f7d8
mov r15, qword [rsp + 0x28]
mov rcx, qword [0x1801fe9d0]
test rcx, rcx
mov r14, qword [rsp + 0x48]
jne 0x18008e335
mov qword [rsp + 0x28], 0
lea rcx, [rsp + 0x28]
call qword [sym.imp.kernel32.dll_QueryPerformanceFrequency]
test eax, eax
je 0x18008f7d8
mov rcx, qword [rsp + 0x28]
mov qword [0x1801fe9d0], rcx
test rcx, rcx
je 0x18008f7d4
mov rax, r15
or rax, rcx
shr rax, 0x20
je 0x18008e350
mov rax, r15
xor edx, edx
div rcx
jmp 0x18008e357
mov eax, r15d
xor edx, edx
div ecx
imul r8, rax, 0x3b9aca00
imul rax, rdx, 0x3b9aca00
mov rdx, rax
or rdx, rcx
shr rdx, 0x20
mov r15d, 0
je 0x18008e390
xor edx, edx
div rcx
mov rcx, rax
jmp 0x18008e396
xor edx, edx
div ecx
mov ecx, eax
add rcx, r8
mov rax, rcx
shr rax, 9
movabs rdx, 0x44b82fa09b5a53
mul rdx
cmp r13d, 0x3b4e7ec0
jb 0x18008e3e0
mov r8, r12
inc r8
je 0x18008f7d4
lea eax, [r13 - 0x3b4e7ec0]
shr rdx, 0xb
cmp rdx, r8
jae 0x18008e3f3
jmp 0x18008e470
lea eax, [r13 + 0x4c4b40]
mov r8, r12
shr rdx, 0xb
cmp rdx, r8
jb 0x18008e470
imul r9d, edx, 0x3b9aca00
sub ecx, r9d
cmp rdx, r8
jne 0x18008e422
mov r8d, eax
shr r8d, 9
imul r8, r8, 0x44b83
shr r8, 0x27
imul r8d, r8d, 0x3b9aca00
sub eax, r8d
cmp eax, ecx
jae 0x18008e470
mov eax, dword [rsp + 0x84]
test eax, eax
je 0x18008e470
cmp eax, 1
jne 0x18008f5ab
add rdx, qword [rsp + 0x60]
jb 0x18008f7d4
add ecx, dword [rsp + 0x58]
cmp ecx, 0x3b9aca00
jb 0x18008e45c
inc rdx
je 0x18008f7d4
add ecx, 0xc4653600
mov r12, rdx
mov rdx, qword [rsp + 0x40]
jmp 0x18008e4a1
add r12, qword [rsp + 0x60]
mov rdx, qword [rsp + 0x40]
jb 0x18008f7d4
add r13d, dword [rsp + 0x58]
cmp r13d, 0x3b9aca00
jb 0x18008e49e
inc r12
je 0x18008f7d4
add r13d, 0xc4653600
mov ecx, r13d
mov eax, ecx
shr eax, 9
imul rax, rax, 0x44b83
shr rax, 0x27
imul eax, eax, 0x3b9aca00
sub ecx, eax
mov qword [rdx + 0x10], r12
mov dword [rdx + 0x18], ecx
mov byte [rdx + 0x68], 0
mov rax, qword [rdx + 8]
cmp qword [rdx], 0
mov edx, 0x120
mov r8d, 0xb8
cmove rdx, r8
mov r8d, dword [rax + rdx + 0xc8]
cmp r8d, 0x3b9aca00
je 0x18008f7d4
add rax, rdx
add rax, 0x10
mov rdx, qword [rax + 0xb0]
cmp ecx, 0x3b8b87c1
jb 0x18008e520
inc r12
je 0x18008f7d4
add ecx, 0xc474783f
jmp 0x18008e526
add ecx, 0xf423f
mov eax, ecx
shr eax, 9
imul rax, rax, 0x44b83
shr rax, 0x27
imul eax, eax, 0x3b9aca00
sub ecx, eax
mov qword [rsp + 0x28], r12
mov dword [rsp + 0x30], ecx
lea rcx, [rsp + 0x28]
call fcn.1800fb080
mov ecx, edx
mov edx, edx
imul r8, rdx, 0x431bde83
mov edx, 0x3e8
mul rdx
shr r8, 0x32
cmp ecx, 0x3b9aca00
cmove r8d, r15d
cmove rdx, r15
cmove rax, r15
add r8, rax
adc rdx, 0
mov rax, 0xfffffffffffffffd
cmovne r8, rax
mov rcx, qword [rsp + 0x40]
mov rax, qword [rcx + 0x40]
nop word cs:[rax + rax]
cmp rax, r8
ja 0x18008e5b3
cmp rax, 0xfffffffffffffffd
ja 0x18008e5b3
lock cmpxchg qword [rcx + 0x40], r8
jne 0x18008e5a0
lea rax, [r14 + 1]
cmp rax, 2
jb 0x18008f78d
mov rax, qword [r14]
lea rsi, [rsp + 0x28]
nop dword [rax]
test rax, rax
je 0x18008f78b
js 0x18008f7d4
lea rcx, [rax + 1]
lock cmpxchg qword [r14], rcx
jne 0x18008e5d0
mov rcx, qword [rsp + 0x70]
call qword [sym.imp.kernel32.dll_AcquireSRWLockExclusive]
mov rax, qword [0x1801fe9f0]
shl rax, 1
test rax, rax
jne 0x18008f6fe
movzx eax, byte [r14 + 0x18]
test al, al
jne 0x18008f75c
xor eax, eax
mov ecx, dword [r14 + 0xd8]
mov dword [rsp + 0x54], ecx
cmp ecx, 0x3b9aca00
je 0x18008f7d4
mov dword [rsp + 0x50], eax
mov rax, qword [r14 + 0xd0]
mov qword [rsp + 0x68], rax
mov qword [rsp + 0x28], 0
mov rcx, rsi
call qword [sym.imp.kernel32.dll_QueryPerformanceCounter]
test eax, eax
je 0x18008f7d8
mov rdi, qword [rsp + 0x28]
mov rcx, qword [0x1801fe9d0]
test rcx, rcx
jne 0x18008e699
mov qword [rsp + 0x28], 0
mov rcx, rsi
call qword [sym.imp.kernel32.dll_QueryPerformanceFrequency]
test eax, eax
je 0x18008f7d8
mov rcx, qword [rsp + 0x28]
mov qword [0x1801fe9d0], rcx
test rcx, rcx
je 0x18008f7d4
mov rax, rdi
or rax, rcx
shr rax, 0x20
je 0x18008e6af
mov rax, rdi
xor edx, edx
div rcx
jmp 0x18008e6b5
mov eax, edi
xor edx, edx
div ecx
imul r8, rax, 0x3b9aca00
imul rax, rdx, 0x3b9aca00
mov rdx, rax
or rdx, rcx
shr rdx, 0x20
mov r9d, dword [rsp + 0x50]
je 0x18008e6de
xor edx, edx
div rcx
mov rcx, rax
jmp 0x18008e6e4
xor edx, edx
div ecx
mov ecx, eax
add rcx, r8
mov rax, rcx
shr rax, 9
movabs rdx, 0x44b82fa09b5a53
mul rdx
shr rdx, 0xb
imul eax, edx, 0x3b9aca00
sub ecx, eax
mov qword [rsp + 0x28], rdx
mov dword [rsp + 0x30], ecx
mov rdx, qword [r14 + 0x78]
test rdx, rdx
je 0x18008f540
mov rax, qword [rsp + 0x48]
mov r8, qword [rax + 0x60]
lea r14, [r8 + 0x10]
movdqa xmm0, xmmword [r8]
pmovmskb r10d, xmm0
not r10d
jmp 0x18008e766
mov rdx, qword [rsp + 0xc8]
dec rdx
mov r9d, dword [rsp + 0x50]
mov r8, qword [rsp + 0xc0]
mov r10, qword [rsp + 0xb8]
je 0x18008f540
test r10w, r10w
je 0x18008e780
lea eax, [r10 - 1]
and eax, r10d
xor esi, esi
jmp 0x18008e7bc
xor esi, esi
nop word cs:[rax + rax]
movdqa xmm0, xmmword [r14]
pmovmskb r10d, xmm0
add r8, 0xfffffffffffffb80
add r14, 0x10
cmp r10w, 0xffff
je 0x18008e790
mov ecx, 0xfffffffe
sub ecx, r10d
not r10d
mov eax, r10d
and eax, ecx
lea r15, [rsp + 0x28]
mov qword [rsp + 0xc8], rdx
mov ecx, r10d
tzcnt ecx, ecx
mov qword [rsp + 0xb8], rax
neg rcx
lea rax, [rcx + rcx*8]
lea r12, [r8 + rax*8]
mov qword [rsp + 0xc0], r8
mov rbp, qword [r8 + rax*8 - 8]
test rbp, rbp
mov qword [rsp + 0x78], r12
je 0x18008e8d0
mov rdi, qword [r12 - 0x18]
mov rbx, rbp
neg rbx
mov r13d, 1
jmp 0x18008e838
add rdi, 0x48
lea rax, [rbx + r13]
inc rax
inc r13
cmp rax, 1
je 0x18008eeec
mov rax, qword [rdi + 0x28]
movzx eax, byte [rax + 0x10]
test al, al
jne 0x18008e8b0
cmp byte [rdi + 0x10], 2
jne 0x18008e860
mov rax, qword [rdi]
mov rax, qword [rax + 0x10]
cmp rax, 3
jne 0x18008e86d
jmp 0x18008e8b0
mov rax, qword [rdi]
mov rax, qword [rax + 0x10]
cmp rax, 1
jne 0x18008e8b0
mov rdx, qword [rdi + 0x38]
mov r8d, dword [rdi + 0x40]
mov rcx, r15
call fcn.1800fb080
cmp edx, 0x3b9aca00
cmove rax, rsi
cmp rax, qword [rsp + 0x68]
jb 0x18008e820
cmp edx, 0x3b9aca00
setne cl
cmp edx, dword [rsp + 0x54]
seta dl
cmp rax, qword [rsp + 0x68]
jne 0x18008e8b0
and cl, dl
je 0x18008e820
nop dword [rax]
mov rcx, rdi
call fcn.1800850f0
mov eax, 1
mov qword [rsp + 0x38], rax
cmp r13, rbp
jne 0x18008e8e3
jmp 0x18008ef00
xor r13d, r13d
xor eax, eax
mov qword [rsp + 0x38], rax
cmp r13, rbp
je 0x18008ef00
mov r15, qword [r12 - 0x18]
mov qword [rsp + 0x98], rbp
jmp 0x18008e94c
mov rax, r13
sub rax, qword [rsp + 0x38]
lea rax, [rax + rax*8]
mov rcx, qword [rbx + 0x40]
mov qword [r15 + rax*8 + 0x40], rcx
movdqu xmm0, xmmword [rbx]
movdqu xmm1, xmmword [rbx + 0x10]
movups xmm2, xmmword [rbx + 0x20]
movups xmm3, xmmword [rbx + 0x30]
movups xmmword [r15 + rax*8 + 0x30], xmm3
movups xmmword [r15 + rax*8 + 0x20], xmm2
movdqu xmmword [r15 + rax*8 + 0x10], xmm1
movdqu xmmword [r15 + rax*8], xmm0
nop word cs:[rax + rax]
inc r13
cmp r13, rbp
je 0x18008ef00
lea rax, [r13*8]
add rax, r13
lea rbx, [r15 + rax*8]
mov rcx, qword [r15 + rax*8 + 0x28]
movzx ecx, byte [rcx + 0x10]
test cl, cl
je 0x18008eb50
mov rdi, qword [rbx + 0x18]
test rdi, rdi
je 0x18008e9a2
mov rsi, qword [rbx + 0x20]
mov rcx, rdi
call qword [rsi]
cmp qword [rsi + 8], 0
je 0x18008e9a2
cmp qword [rsi + 0x10], 0x11
jb 0x18008e990
mov rdi, qword [rdi - 8]
mov rcx, qword [0x1801fe9b8]
xor edx, edx
mov r8, rdi
call qword [sym.imp.kernel32.dll_HeapFree]
mov rcx, qword [rbx + 0x28]
lock dec qword [rcx]
jne 0x18008e9b1
call fcn.180070220
inc qword [rsp + 0x38]
cmp byte [rbx + 0x10], 2
jne 0x18008ea60
mov rcx, qword [rbx]
lock dec qword [rcx]
jne 0x18008e9ce
call fcn.180085330
mov rdi, qword [rbx + 8]
lock dec qword [rdi + 0x1d0]
jne 0x18008eb30
mov edx, 1
lock xadd qword [rdi + 0x88], rdx
mov rbx, rdx
and rbx, 0xffffffffffffffe0
mov rcx, qword [rdi + 0x80]
mov r8, rbx
sub r8, qword [rcx + 0x2300]
jne 0x18008ebd0
movabs rax, 0x200000000
lock or qword [rcx + 0x2310], rax
mov rax, qword [rdi + 0x110]
mov r12, qword [rsp + 0x78]
mov rbp, qword [rsp + 0x98]
nop word cs:[rax + rax]
mov rcx, rax
or rcx, 2
lock cmpxchg qword [rdi + 0x110], rcx
jne 0x18008ea40
jmp 0x18008eaf2
mov rcx, qword [rbx]
lock dec qword [rcx]
jne 0x18008ea6e
call fcn.180085330
mov rdi, qword [rbx + 8]
lock dec qword [rdi + 0x1d0]
jne 0x18008eb30
mov edx, 1
lock xadd qword [rdi + 0x88], rdx
mov rbx, rdx
and rbx, 0xffffffffffffffe0
mov rcx, qword [rdi + 0x80]
mov r8, rbx
sub r8, qword [rcx + 0x2300]
jne 0x18008ed5c
movabs rax, 0x200000000
lock or qword [rcx + 0x2310], rax
mov rax, qword [rdi + 0x110]
mov r12, qword [rsp + 0x78]
mov rbp, qword [rsp + 0x98]
nop word cs:[rax + rax]
mov rcx, rax
or rcx, 2
lock cmpxchg qword [rdi + 0x110], rcx
jne 0x18008eae0
test rax, rax
jne 0x18008eb30
mov rax, qword [rdi + 0x100]
mov rcx, qword [rdi + 0x108]
mov qword [rdi + 0x100], 0
lock and qword [rdi + 0x110], 0xfffffffffffffffd
test rax, rax
je 0x18008eb30
call qword [rax + 8]
nop word cs:[rax + rax]
lock dec qword [rdi]
jne 0x18008e940
mov rcx, rdi
call fcn.180085560
jmp 0x18008e940
cmp byte [rbx + 0x10], 2
jne 0x18008eb69
mov rcx, qword [rbx]
mov rcx, qword [rcx + 0x10]
cmp rcx, 3
je 0x18008e96c
jmp 0x18008eb7a
mov rcx, qword [rbx]
mov rcx, qword [rcx + 0x10]
cmp rcx, 1
jne 0x18008e96c
mov rdx, qword [r15 + rax*8 + 0x38]
mov r8d, dword [r15 + rax*8 + 0x40]
lea rcx, [rsp + 0x28]
call fcn.1800fb080
cmp edx, 0x3b9aca00
mov ecx, 0
cmove rax, rcx
cmp rax, qword [rsp + 0x68]
jb 0x18008e8f2
cmp edx, 0x3b9aca00
setne cl
cmp edx, dword [rsp + 0x54]
seta dl
cmp rax, qword [rsp + 0x68]
jne 0x18008e96c
and cl, dl
je 0x18008e8f2
jmp 0x18008e96c
mov rax, rcx
add rax, 0x2300
shr r8, 5
and edx, 0x1f
cmp r8, rdx
seta bpl
jmp 0x18008ec08
xor ebp, ebp
pause
lea rax, [rcx + 0x2300]
cmp qword [rcx + 0x2300], rbx
je 0x18008ea0c
mov r12, rcx
mov rcx, qword [rcx + 0x2308]
test rcx, rcx
jne 0x18008ecf0
mov rsi, qword [rax]
movzx eax, byte [0x1801fea30]
mov rax, qword [0x1801fe9b8]
test rax, rax
jne 0x18008ec47
call qword [sym.imp.kernel32.dll_GetProcessHeap]
test rax, rax
je 0x18008f7c3
mov qword [0x1801fe9b8], rax
mov r8d, 0x2320
mov rcx, rax
xor edx, edx
call qword [sym.imp.kernel32.dll_HeapAlloc]
test rax, rax
je 0x18008f7c3
mov rdx, rax
add rsi, 0x20
mov qword [rax + 0x2300], rsi
movups xmmword [rax + 0x2308], xmm6
mov qword [rax + 0x2318], 0
xor eax, eax
lock cmpxchg qword [r12 + 0x2308], rdx
jne 0x18008ec94
mov rcx, rdx
jmp 0x18008ecf0
mov rcx, rax
mov rax, qword [rax + 0x2300]
add rax, 0x20
mov qword [rdx + 0x2300], rax
xor eax, eax
lock cmpxchg qword [rcx + 0x2308], rdx
je 0x18008ecf0
mov r8, rax
nop dword [rax]
pause
mov rax, qword [r8 + 0x2300]
add rax, 0x20
mov qword [rdx + 0x2300], rax
xor eax, eax
lock cmpxchg qword [r8 + 0x2308], rdx
mov r8, rax
jne 0x18008ecc0
nop word cs:[rax + rax]
mov rax, qword [r12 + 0x2310]
cmp eax, 0xffffffff
sete al
test bpl, al
je 0x18008ebf0
mov rax, r12
lock cmpxchg qword [rdi + 0x80], rcx
jne 0x18008ebf0
mfence
mov rax, qword [rdi + 0x88]
mov qword [r12 + 0x2318], rax
movabs rax, 0x100000000
lock or qword [r12 + 0x2310], rax
mov bpl, 1
pause
lea rax, [rcx + 0x2300]
cmp qword [rcx + 0x2300], rbx
jne 0x18008ec08
jmp 0x18008ea0c
mov rax, rcx
add rax, 0x2300
shr r8, 5
and edx, 0x1f
cmp r8, rdx
seta bpl
jmp 0x18008ed98
xor ebp, ebp
pause
lea rax, [rcx + 0x2300]
cmp qword [rcx + 0x2300], rbx
je 0x18008eaac
mov r12, rcx
mov rcx, qword [rcx + 0x2308]
test rcx, rcx
jne 0x18008ee80
mov rsi, qword [rax]
movzx eax, byte [0x1801fea30]
mov rax, qword [0x1801fe9b8]
test rax, rax
jne 0x18008edd7
call qword [sym.imp.kernel32.dll_GetProcessHeap]
test rax, rax
je 0x18008f7c3
mov qword [0x1801fe9b8], rax
mov r8d, 0x2320
mov rcx, rax
xor edx, edx
call qword [sym.imp.kernel32.dll_HeapAlloc]
test rax, rax
je 0x18008f7c3
mov rdx, rax
add rsi, 0x20
mov qword [rax + 0x2300], rsi
movups xmmword [rax + 0x2308], xmm6
mov qword [rax + 0x2318], 0
xor eax, eax
lock cmpxchg qword [r12 + 0x2308], rdx
jne 0x18008ee24
mov rcx, rdx
jmp 0x18008ee80
mov rcx, rax
mov rax, qword [rax + 0x2300]
add rax, 0x20
mov qword [rdx + 0x2300], rax
xor eax, eax
lock cmpxchg qword [rcx + 0x2308], rdx
je 0x18008ee80
mov r8, rax
nop dword [rax]
pause
mov rax, qword [r8 + 0x2300]
add rax, 0x20
mov qword [rdx + 0x2300], rax
xor eax, eax
lock cmpxchg qword [r8 + 0x2308], rdx
mov r8, rax
jne 0x18008ee50
nop word cs:[rax + rax]
mov rax, qword [r12 + 0x2310]
cmp eax, 0xffffffff
sete al
test bpl, al
je 0x18008ed80
mov rax, r12
lock cmpxchg qword [rdi + 0x80], rcx
jne 0x18008ed80
mfence
mov rax, qword [rdi + 0x88]
mov qword [r12 + 0x2318], rax
movabs rax, 0x100000000
lock or qword [r12 + 0x2310], rax
mov bpl, 1
pause
lea rax, [rcx + 0x2300]
cmp qword [rcx + 0x2300], rbx
jne 0x18008ed98
jmp 0x18008eaac
xor eax, eax
mov qword [rsp + 0x38], rax
nop word cs:[rax + rax]
sub rbp, qword [rsp + 0x38]
mov qword [r12 - 8], rbp
jne 0x18008e740
mov r8, qword [rsp + 0x48]
mov rax, qword [r8 + 0x60]
mov rcx, rax
sub rcx, r12
sar rcx, 3
movabs rdx, 0x8e38e38e38e38e39
imul rcx, rdx
lea rdx, [rcx - 0x10]
and rdx, qword [r8 + 0x68]
movdqu xmm0, xmmword [rax + rdx]
pcmpeqb xmm0, xmm7
psllw xmm0, 7
pmovmskb r8d, xmm0
test r8d, r8d
je 0x18008ef5c
bsr r8w, r8w
xor r8d, 0xf
jmp 0x18008ef61
mov r8w, 0x10
movdqu xmm0, xmmword [rax + rcx]
pcmpeqb xmm0, xmm7
pmovmskb r9d, xmm0
or r9d, 0x10000
tzcnt r9d, r9d
add r8d, r9d
mov r9b, 0x80
cmp r8w, 0xf
ja 0x18008ef94
mov r8, qword [rsp + 0x48]
inc qword [r8 + 0x70]
mov r9b, 0xff
mov byte [rax + rcx], r9b
mov byte [rdx + rax + 0x10], r9b
mov rax, qword [rsp + 0x48]
dec qword [rax + 0x78]
cmp byte [r12 - 0x48], 2
jb 0x18008efd7
mov rdi, qword [r12 - 0x40]
lea rcx, [rdi + 0x18]
mov rax, qword [rdi]
mov rdx, qword [rdi + 8]
mov r8, qword [rdi + 0x10]
call qword [rax + 0x10]
mov rcx, qword [0x1801fe9b8]
xor edx, edx
mov r8, rdi
call qword [sym.imp.kernel32.dll_HeapFree]
lea rcx, [r12 - 0x20]
mov rax, qword [r12 - 0x38]
mov rdx, qword [r12 - 0x30]
mov r8, qword [r12 - 0x28]
call qword [rax + 0x10]
mov rdi, qword [r12 - 0x18]
mov r13, qword [r12 - 8]
test r13, r13
je 0x18008f510
xor ebp, ebp
mov qword [rsp + 0x38], r13
jmp 0x18008f01c
inc rbp
cmp rbp, r13
je 0x18008f510
lea rax, [rbp*8]
add rax, rbp
lea rbx, [rdi + rax*8]
mov r15, qword [rdi + rax*8 + 0x18]
test r15, r15
je 0x18008f062
mov rsi, qword [rbx + 0x20]
mov rcx, r15
call qword [rsi]
cmp qword [rsi + 8], 0
je 0x18008f062
cmp qword [rsi + 0x10], 0x11
jb 0x18008f050
mov r15, qword [r15 - 8]
mov rcx, qword [0x1801fe9b8]
xor edx, edx
mov r8, r15
call qword [sym.imp.kernel32.dll_HeapFree]
mov rcx, qword [rbx + 0x28]
lock dec qword [rcx]
jne 0x18008f071
call fcn.180070220
cmp byte [rbx + 0x10], 2
jne 0x18008f110
mov rcx, qword [rbx]
lock dec qword [rcx]
jne 0x18008f089
call fcn.180085330
mov r12, qword [rbx + 8]
lock dec qword [r12 + 0x1d0]
jne 0x18008f1d0
mov edx, 1
lock xadd qword [r12 + 0x88], rdx
mov rbx, rdx
and rbx, 0xffffffffffffffe0
mov rcx, qword [r12 + 0x80]
mov r8, rbx
sub r8, qword [rcx + 0x2300]
jne 0x18008f1e8
movabs rax, 0x200000000
lock or qword [rcx + 0x2310], rax
mov rax, qword [r12 + 0x110]
nop word cs:[rax + rax]
mov rcx, rax
or rcx, 2
lock cmpxchg qword [r12 + 0x110], rcx
jne 0x18008f0f0
jmp 0x18008f193
mov rcx, qword [rbx]
lock dec qword [rcx]
jne 0x18008f11e
call fcn.180085330
mov r12, qword [rbx + 8]
lock dec qword [r12 + 0x1d0]
jne 0x18008f1d0
mov edx, 1
lock xadd qword [r12 + 0x88], rdx
mov rbx, rdx
and rbx, 0xffffffffffffffe0
mov rcx, qword [r12 + 0x80]
mov r8, rbx
sub r8, qword [rcx + 0x2300]
jne 0x18008f37b
movabs rax, 0x200000000
lock or qword [rcx + 0x2310], rax
mov rax, qword [r12 + 0x110]
nop dword [rax]
mov rcx, rax
or rcx, 2
lock cmpxchg qword [r12 + 0x110], rcx
jne 0x18008f180
test rax, rax
mov r13, qword [rsp + 0x38]
jne 0x18008f1d0
mov rax, qword [r12 + 0x100]
mov rcx, qword [r12 + 0x108]
mov qword [r12 + 0x100], 0
lock and qword [r12 + 0x110], 0xfffffffffffffffd
test rax, rax
je 0x18008f1d0
call qword [rax + 8]
nop dword [rax + rax]
lock dec qword [r12]
jne 0x18008f010
mov rcx, r12
call fcn.180085560
jmp 0x18008f010
mov rax, rcx
add rax, 0x2300
shr r8, 5
and edx, 0x1f
cmp r8, rdx
seta r15b
jmp 0x18008f229
xor r15d, r15d
pause
lea rax, [rcx + 0x2300]
cmp qword [rcx + 0x2300], rbx
je 0x18008f0ca
mov r13, rcx
mov rcx, qword [rcx + 0x2308]
test rcx, rcx
jne 0x18008f310
mov rsi, qword [rax]
movzx eax, byte [0x1801fea30]
mov rax, qword [0x1801fe9b8]
test rax, rax
jne 0x18008f268
call qword [sym.imp.kernel32.dll_GetProcessHeap]
test rax, rax
je 0x18008f7c3
mov qword [0x1801fe9b8], rax
mov r8d, 0x2320
mov rcx, rax
xor edx, edx
call qword [sym.imp.kernel32.dll_HeapAlloc]
test rax, rax
je 0x18008f7c3
mov rdx, rax
add rsi, 0x20
mov qword [rax + 0x2300], rsi
movups xmmword [rax + 0x2308], xmm6
mov qword [rax + 0x2318], 0
xor eax, eax
lock cmpxchg qword [r13 + 0x2308], rdx
jne 0x18008f2b4
mov rcx, rdx
jmp 0x18008f310
mov rcx, rax
mov rax, qword [rax + 0x2300]
add rax, 0x20
mov qword [rdx + 0x2300], rax
xor eax, eax
lock cmpxchg qword [rcx + 0x2308], rdx
je 0x18008f310
mov r8, rax
nop dword [rax]
pause
mov rax, qword [r8 + 0x2300]
add rax, 0x20
mov qword [rdx + 0x2300], rax
xor eax, eax
lock cmpxchg qword [r8 + 0x2308], rdx
mov r8, rax
jne 0x18008f2e0
nop word cs:[rax + rax]
mov rax, qword [r13 + 0x2310]
cmp eax, 0xffffffff
sete al
test r15b, al
je 0x18008f210
mov rax, r13
lock cmpxchg qword [r12 + 0x80], rcx
jne 0x18008f210
mfence
mov rax, qword [r12 + 0x88]
mov qword [r13 + 0x2318], rax
movabs rax, 0x100000000
lock or qword [r13 + 0x2310], rax
mov r15b, 1
pause
lea rax, [rcx + 0x2300]
cmp qword [rcx + 0x2300], rbx
jne 0x18008f229
jmp 0x18008f0ca
mov rax, rcx
add rax, 0x2300
shr r8, 5
and edx, 0x1f
cmp r8, rdx
seta r15b
jmp 0x18008f3b9
xor r15d, r15d
pause
lea rax, [rcx + 0x2300]
cmp qword [rcx + 0x2300], rbx
je 0x18008f15f
mov r13, rcx
mov rcx, qword [rcx + 0x2308]
test rcx, rcx
jne 0x18008f4a0
mov rsi, qword [rax]
movzx eax, byte [0x1801fea30]
mov rax, qword [0x1801fe9b8]
test rax, rax
jne 0x18008f3f8
call qword [sym.imp.kernel32.dll_GetProcessHeap]
test rax, rax
je 0x18008f7c3
mov qword [0x1801fe9b8], rax
mov r8d, 0x2320
mov rcx, rax
xor edx, edx
call qword [sym.imp.kernel32.dll_HeapAlloc]
test rax, rax
je 0x18008f7c3
mov rdx, rax
add rsi, 0x20
mov qword [rax + 0x2300], rsi
movups xmmword [rax + 0x2308], xmm6
mov qword [rax + 0x2318], 0
xor eax, eax
lock cmpxchg qword [r13 + 0x2308], rdx
jne 0x18008f444
mov rcx, rdx
jmp 0x18008f4a0
mov rcx, rax
mov rax, qword [rax + 0x2300]
add rax, 0x20
mov qword [rdx + 0x2300], rax
xor eax, eax
lock cmpxchg qword [rcx + 0x2308], rdx
je 0x18008f4a0
mov r8, rax
nop dword [rax]
pause
mov rax, qword [r8 + 0x2300]
add rax, 0x20
mov qword [rdx + 0x2300], rax
xor eax, eax
lock cmpxchg qword [r8 + 0x2308], rdx
mov r8, rax
jne 0x18008f470
nop word cs:[rax + rax]
mov rax, qword [r13 + 0x2310]
cmp eax, 0xffffffff
sete al
test r15b, al
je 0x18008f3a0
mov rax, r13
lock cmpxchg qword [r12 + 0x80], rcx
jne 0x18008f3a0
mfence
mov rax, qword [r12 + 0x88]
mov qword [r13 + 0x2318], rax
movabs rax, 0x100000000
lock or qword [r13 + 0x2310], rax
mov r15b, 1
pause
lea rax, [rcx + 0x2300]
cmp qword [rcx + 0x2300], rbx
jne 0x18008f3b9
jmp 0x18008f15f
mov rax, qword [rsp + 0x78]
cmp qword [rax - 0x10], 0
je 0x18008e740
mov rcx, qword [0x1801fe9b8]
xor edx, edx
mov r8, rdi
call qword [sym.imp.kernel32.dll_HeapFree]
jmp 0x18008e740
test r9b, r9b
mov rdi, qword [rsp + 0x48]
jne 0x18008f564
mov rax, qword [0x1801fe9f0]
movabs rcx, 0x7fffffffffffffff
test rax, rcx
jne 0x18008f72a
mov rcx, qword [rsp + 0x70]
call qword [sym.imp.kernel32.dll_ReleaseSRWLockExclusive]
lock dec qword [rdi]
jne 0x18008f57d
mov rcx, rdi
call fcn.1800849c0
mov rbx, qword [rsp + 0xb0]
movzx eax, byte [rbx]
mov rsi, qword [rsp + 0x88]
test al, al
mov r8, qword [rsp + 0x90]
mov r12d, 0
je 0x18008e260
jmp 0x18008f74b
mov rsi, rdx
add rsi, qword [rsp + 0x60]
jb 0x18008f7d4
mov rax, qword [rsp + 0x58]
lea ebx, [rax + rcx]
cmp ebx, 0x3b9aca00
jb 0x18008f5d8
inc rsi
je 0x18008f7d4
add ebx, 0xc4653600
mov qword [rsp + 0x28], rdx
mov dword [rsp + 0x30], ecx
lea rcx, [rsp + 0x28]
mov rdx, r12
mov r8d, r13d
call fcn.1800fb080
mov ecx, edx
mov r9, qword [rsp + 0xa0]
mov rdx, r9
mov r8, qword [rsp + 0xa8]
or rdx, r8
je 0x18008f7d4
mov edx, 0x3b9aca00
mul rdx
cmp ecx, 0x3b9aca00
cmove ecx, r15d
cmove rdx, r15
cmove rax, r15
add rcx, rax
adc rdx, 0
mov qword [rsp + 0xd0], r9
mov qword [rsp + 0xd8], r8
mov qword [rsp + 0xe0], rcx
mov qword [rsp + 0xe8], rdx
lea rcx, [rsp + 0xe0]
lea rdx, [rsp + 0xd0]
call fcn.18012f240
pshufd xmm1, xmm0, 0xee
movq rax, xmm1
test rax, rax
jne 0x18008f7d4
movq r8, xmm0
mov rax, r8
shr rax, 9
movabs rcx, 0x44b82fa09b5a53
mul rcx
shr rdx, 0xb
sub rsi, rdx
jb 0x18008f7d4
mov eax, ebx
shr eax, 9
imul rax, rax, 0x44b83
shr rax, 0x27
imul eax, eax, 0x3b9aca00
sub ebx, eax
imul eax, edx, 0x3b9aca00
sub r8d, eax
cmp ebx, r8d
jae 0x18008f6d6
test rsi, rsi
je 0x18008f7d4
dec rsi
add ebx, 0x3b9aca00
mov ecx, ebx
sub ecx, r8d
mov eax, ecx
shr eax, 9
imul r12, rax, 0x44b83
shr r12, 0x27
add r12, rsi
mov rdx, qword [rsp + 0x40]
jae 0x18008e4a1
jmp 0x18008f7d4
call fcn.18016fa60
movzx ecx, byte [r14 + 0x18]
test cl, cl
jne 0x18008f758
xor al, 1
mov ecx, dword [r14 + 0xd8]
mov dword [rsp + 0x54], ecx
cmp ecx, 0x3b9aca00
jne 0x18008e62f
jmp 0x18008f7d4
call fcn.18016fa60
test al, al
jne 0x18008f564
mov byte [rdi + 0x18], 1
jmp 0x18008f564
mov rcx, r15
call qword [rdi + 0x18]
jmp 0x18008e1c0
mov rsi, qword [rsp + 0x88]
jmp 0x18008e1c0
test al, al
je 0x18008f772
mov rax, qword [0x1801fe9f0]
movabs rcx, 0x7fffffffffffffff
test rax, rcx
jne 0x18008f7b3
mov rcx, qword [rsp + 0x70]
call qword [sym.imp.kernel32.dll_ReleaseSRWLockExclusive]
lock dec qword [r14]
jne 0x18008f78b
mov rcx, r14
call fcn.1800849c0
xor edi, edi
mov eax, edi
movaps xmm6, xmmword [rsp + 0xf0]
movaps xmm7, xmmword [rsp + 0x100]
add rsp, 0x118
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret
call fcn.18016fa60
test al, al
jne 0x18008f772
mov byte [r14 + 0x18], 1
jmp 0x18008f772
mov ecx, 8
mov edx, 0x2320
call fcn.180169390
ud2
ud2
call sub.kernel32.dll_GetLastError
ud2