Function at 0x140105420
Capabilities:
Allocate thread local storage
Create thread
Get thread local storage value
Set thread local storage value

Disassembly:
mov qword [rsp + 8], rbx
push rsi
push rdi
push r12
push r14
push r15
sub rsp, 0x70
movzx ebx, cl
mov r14d, 1
cmp dword [0x14038a270], 0xffffffff
jne 0x14010549c
mov rax, qword [0x140395820]
test rax, rax
jne 0x14010545a
lock cmpxchg qword [0x140395820], r14
je 0x140105466
lea rcx, [0x140395820]
call fcn.140107e90
cmp dword [0x14038a270], 0xffffffff
je 0x14010548e
xor r15d, r15d
mov rax, r14
lock cmpxchg qword [0x140395820], r15
je 0x14010549f
lea rcx, [0x140395820]
call fcn.140108480
jmp 0x14010549f
call qword [sym.imp.KERNEL32.dll_TlsAlloc]
mov dword [0x14038a270], eax
jmp 0x14010546f
xor r15d, r15d
mov ecx, dword [0x14038a270]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov rsi, rax
test rax, rax
jne 0x14010555c
test bl, bl
je 0x14010555c
mov ecx, 0x98
call fcn.1402200d8
mov qword [rsp + 0xb0], rax
mov edx, r14d
mov rcx, rax
call fcn.1400ed640
mov rsi, rax
mov qword [rsp + 0x50], rax
mov rdx, rax
mov ecx, dword [0x14038a270]
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
nop
mov ecx, 0x10
call fcn.1402200d8
mov qword [rsp + 0xb0], rax
mov rdx, rsi
mov rcx, rax
call fcn.1400ed470
nop
mov qword [rsp + 0xb0], rax
mov rax, qword [rsp + 0xb0]
nop
nop
mov qword [rsi + 0x60], rax
mov rcx, rsi
call fcn.1400ee140
mov byte [rsi + 0x92], 1
call qword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
mov eax, eax
mov qword [rsi + 0x68], rax
mov rax, qword [0x1403956b0]
nop
test rax, rax
jne 0x140105574
mov rax, qword [rsi + 0x60]
nop
mov qword [0x1403956b0], rax
mov rax, rsi
mov rbx, qword [rsp + 0xa0]
add rsp, 0x70
pop r15
pop r14
pop r12
pop rdi
pop rsi
ret
mov qword [rsp + 0xa8], 0xffffffffffffffff
call qword [sym.imp.KERNEL32.dll_GetCurrentProcess]
mov rdi, rax
call qword [sym.imp.KERNEL32.dll_GetCurrentThread]
mov rbx, rax
call qword [sym.imp.KERNEL32.dll_GetCurrentProcess]
mov dword [rsp + 0x30], 2
mov dword [rsp + 0x28], r15d
mov dword [rsp + 0x20], r15d
lea r9, [rsp + 0xa8]
mov r8, rdi
mov rdx, rbx
mov rcx, rax
call qword [sym.imp.KERNEL32.dll_DuplicateHandle]
mov rdi, qword [rsi + 0x60]
nop
mov rbx, qword [rsp + 0xa8]
lea r12, [0x140395810]
mov qword [rsp + 0x58], r12
mov rax, qword [0x140395810]
test rax, rax
jne 0x1401055f1
lock cmpxchg qword [0x140395810], r14
je 0x1401055f9
mov rcx, r12
call fcn.140107e90
mov byte [rsp + 0x60], 1
call qword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
cmp eax, dword [0x140395818]
jne 0x140105635
mov rcx, rbx
call qword [sym.imp.KERNEL32.dll_CloseHandle]
nop
mov rax, r14
lock cmpxchg qword [0x140395810], r15
je 0x14010555c
mov rcx, r12
call fcn.140108480
jmp 0x14010555c
mov qword [rsp + 0xb8], rbx
lea r8, [rsp + 0xb8]
mov rdx, qword [0x140395840]
lea rcx, [0x140395830]
call fcn.1400976b0
mov rax, qword [0x140395830]
test rax, rax
je 0x14010566b
mov eax, dword [rax]
cmp eax, 1
jle 0x14010567f
xor r9d, r9d
xor r8d, r8d
xor edx, edx
lea rcx, [0x140395830]
call fcn.1400a0b50
mov qword [rsp + 0x40], rdi
lea r8, [rsp + 0x40]
mov rdx, qword [0x140395858]
lea rcx, [0x140395848]
call fcn.1400976b0
mov rax, qword [0x140395848]
test rax, rax
je 0x1401056af
mov eax, dword [rax]
cmp eax, 1
jle 0x1401056c3
xor r9d, r9d
xor r8d, r8d
xor edx, edx
lea rcx, [0x140395848]
call fcn.1400a0b50
cmp dword [0x140395818], 0
jne 0x140105732
cmp qword [0x140395860], 0
jne 0x140105705
xor r9d, r9d
xor r8d, r8d
xor edx, edx
xor ecx, ecx
call qword [sym.imp.KERNEL32.dll_CreateEventW]
mov qword [0x140395860], rax
mov qword [rsp + 0x48], rax
lea r8, [rsp + 0x48]
xor edx, edx
lea rcx, [0x140395830]
call fcn.1400976b0
lea rax, [0x140395818]
mov qword [rsp + 0x28], rax
mov dword [rsp + 0x20], r15d
xor r9d, r9d
lea r8, [0x140105970]
xor edx, edx
xor ecx, ecx
call qword [sym.imp.KERNEL32.dll_CreateThread]
mov rcx, rax
jmp 0x14010560f
mov rcx, qword [0x140395860]
call qword [sym.imp.KERNEL32.dll_SetEvent]
jmp 0x140105616