Function at 0x1400e4a10
Capabilities:
Set thread local storage value

Disassembly:
push rbp
push rsi
push r12
push r13
push r14
push r15
lea rbp, [rsp - 0xa38]
sub rsp, 0xb38
mov rax, qword [0x14021d798]
xor rax, rsp
mov qword [rbp + 0xa20], rax
xor r12d, r12d
mov rsi, rdx
mov qword [rsp + 0x48], r12
mov r14, rcx
test rcx, rcx
je 0x1400e4a54
mov r15, qword [rcx + 0x10]
jmp 0x1400e4a57
mov r15, r12
test rsi, rsi
je 0x1400e4a6c
mov qword [rdx], r12
cmp qword [rdx + 0x10], r12
jbe 0x1400e4a6c
mov rax, qword [rdx + 8]
mov byte [rax], r12b
cmp dword [0x14031fcfc], r12d
mov r13, 0xffffffffffffffff
mov qword [rsp + 0xb80], rbx
mov qword [rsp + 0xb30], rdi
jne 0x1400e4b47
mov rdi, qword [str.8080]
test r15, r15
je 0x1400e4ad4
mov rax, qword [r15]
mov rbx, r15
test rax, rax
je 0x1400e4ad4
nop word [rax + rax]
lea rdx, str.listening_ports
mov rcx, rax
call fcn.14018bfc0
test eax, eax
jne 0x1400e4ac7
mov rdi, qword [rbx + 8]
mov rax, qword [rbx + 0x10]
add rbx, 0x10
test rax, rax
jne 0x1400e4ab0
test rdi, rdi
je 0x1400e4b17
xor dl, dl
mov rax, r13
nop
inc rax
cmp byte [rdi + rax], dl
jne 0x1400e4ae0
movsxd r8, eax
test eax, eax
jle 0x1400e4b17
mov rcx, rdi
test dl, dl
je 0x1400e4aff
movzx eax, byte [rcx]
sub al, 0x72
cmp al, 1
jbe 0x1400e4b40
movzx eax, byte [rcx]
inc rcx
sub al, 0x30
cmp al, 9
mov rax, rcx
setbe dl
sub rax, rdi
cmp rax, r8
jl 0x1400e4af2
mov ecx, r12d
call fcn.1400e1df0
cmp dword [0x14031fcfc], r12d
jne 0x1400e4b47
test rsi, rsi
je 0x1400e555c
mov dword [rsi], 8
lea rax, str.Library_uninitialized
jmp 0x1400e4b7b
mov ecx, 2
jmp 0x1400e4b1a
mov edx, 0x7fb0
mov ecx, 1
call fcn.1401775d0
mov rdi, rax
test rax, rax
jne 0x1400e4ba2
test rsi, rsi
je 0x1400e555c
mov dword [rsi], 6
lea rax, str.Out_of_memory
mov dword [rsi + 4], 0x7fb0
mov r9, qword [rsi + 0x10]
lea rbx, [0x1401e16f8]
mov r8, qword [rsi + 8]
xor edx, edx
mov qword [rsp + 0x28], rax
xor ecx, ecx
mov qword [rsp + 0x20], rbx
call fcn.1400e46d0
jmp 0x1400e555c
call fcn.1400da0c0
xor rax, r15
mov qword [rdi + 0x7f98], rax
mov eax, 1
lock xadd qword [0x14031fd58], rax
inc rax
lea rdx, [rsp + 0x50]
mov dword [rdi + 0x70], eax
mov ecx, dword [0x14031fd50]
mov dword [rsp + 0x50], r13d
mov eax, dword [rdi + 0x70]
mov dword [rsp + 0x54], eax
mov qword [rsp + 0x60], r12
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
lea rcx, [rdi + 0x30]
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
lea rcx, [rdi + 0xb8]
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
lea rcx, [rdi + 0x88]
mov qword [rdi + 0xe0], r12
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
mov qword [rdi + 0xb0], r12
lea rcx, [rdi + 0x7cc8]
mov dword [rdi + 0xe8], r12d
call qword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
test r14, r14
je 0x1400e4cbc
mov rax, qword [r14]
test rax, rax
je 0x1400e4cb6
movups xmm0, xmmword [rax]
movups xmmword [rdi + 0x7cf0], xmm0
movups xmm1, xmmword [rax + 0x10]
movups xmmword [rdi + 0x7d00], xmm1
movups xmm0, xmmword [rax + 0x20]
movups xmmword [rdi + 0x7d10], xmm0
movups xmm1, xmmword [rax + 0x30]
movups xmmword [rdi + 0x7d20], xmm1
movups xmm0, xmmword [rax + 0x40]
movups xmmword [rdi + 0x7d30], xmm0
movups xmm1, xmmword [rax + 0x50]
movups xmmword [rdi + 0x7d40], xmm1
movups xmm0, xmmword [rax + 0x60]
movups xmmword [rdi + 0x7d50], xmm0
movups xmm1, xmmword [rax + 0x70]
movups xmmword [rdi + 0x7d60], xmm1
movups xmm0, xmmword [rax + 0x80]
movups xmmword [rdi + 0x7d70], xmm0
mov rax, qword [r14]
mov rax, qword [rax + 0x70]
mov qword [rsp + 0x48], rax
mov qword [rdi + 0x7d60], r12
mov rax, qword [r14 + 8]
jmp 0x1400e4cbf
mov rax, r12
mov qword [rdi + 0x7d80], rax
mov qword [rdi + 0x7f88], r12
mov qword [rdi + 0x7fa8], r12
test r15, r15
je 0x1400e4dbf
nop dword [rax]
mov r14, qword [r15]
test r14, r14
je 0x1400e4dbc
mov rcx, r14
call fcn.1400da040
movsxd r12, eax
cmp r12d, r13d
je 0x1400e4ead
mov rbx, qword [r15 + 8]
add r15, 0x10
test rbx, rbx
je 0x1400e4e6e
lea r12, [rdi + r12*8]
cmp qword [r12 + 0x7d90], 0
je 0x1400e4d55
lea rax, str.warning:__s:_duplicate_option
mov qword [rsp + 0x28], r14
mov r9d, 0x5098
mov qword [rsp + 0x20], rax
lea r8, str.mg_start2
mov rdx, rdi
xor ecx, ecx
call fcn.1400e1360
mov rcx, qword [r12 + 0x7d90]
call fcn.140180564
mov rax, r13
nop dword [rax + rax]
cmp byte [rbx + rax + 1], 0
lea rax, [rax + 1]
jne 0x1400e4d60
lea r14, [rax + 1]
mov rcx, r14
call fcn.140184ca0
mov rdx, rax
test rax, rax
je 0x1400e4dab
cmp byte [rbx], 0
mov rcx, rax
je 0x1400e4da8
sub rbx, rax
nop word [rax + rax]
cmp r14, 1
jbe 0x1400e4da8
movzx eax, byte [rbx + rcx]
dec r14
mov byte [rcx], al
inc rcx
cmp byte [rbx + rcx], 0
jne 0x1400e4d90
mov byte [rcx], 0
mov qword [r12 + 0x7d90], rdx
test r15, r15
jne 0x1400e4ce0
xor r12d, r12d
mov ebx, r12d
lea r15, str.listening_ports
mov rcx, r12
mov rax, r12
nop
lea r14, [rdi + rcx*8]
cmp qword [r14 + 0x7d90], 0
jne 0x1400e4df7
mov rcx, qword [rax + r15 + 0x10]
test rcx, rcx
je 0x1400e4df7
mov rdx, rdi
call fcn.1400e5980
mov qword [r14 + 0x7d90], rax
inc ebx
mov ecx, ebx
lea rax, [rbx + rbx*2]
lea rax, [rax*8]
cmp qword [rax + r15], 0
jne 0x1400e4dd0
mov rcx, qword [rdi + 0x7db0]
call fcn.140188e58
cmp eax, 0x400
jge 0x1400e4ef6
lea rax, str._s_too_small
mov r9d, 0x50ac
lea rbx, str.max_request_size
mov rdx, rdi
mov qword [rsp + 0x28], rbx
lea r8, str.mg_start2
xor ecx, ecx
mov qword [rsp + 0x20], rax
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
mov dword [rsi + 4], 4
mov qword [rsp + 0x28], rbx
jmp 0x1400e5523
lea rax, str._s:_option_value_cannot_be_NULL
mov qword [rsp + 0x28], r14
mov r9d, 0x5085
mov qword [rsp + 0x20], rax
lea r8, str.mg_start2
mov rdx, rdi
xor ecx, ecx
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
mov dword [rsi + 4], r12d
mov qword [rsp + 0x28], r14
jmp 0x1400e5523
lea rax, str.Invalid_option:__s
mov qword [rsp + 0x28], r14
mov r9d, 0x5074
mov qword [rsp + 0x20], rax
lea r8, str.mg_start2
mov rdx, rdi
xor ecx, ecx
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
mov dword [rsi + 4], 0xffffffff
lea rax, str.Invalid_configuration_option:__s
mov qword [rsp + 0x28], r14
jmp 0x1400e552a
mov rcx, qword [rdi + 0x7dc0]
mov dword [rdi + 0xf0], eax
call fcn.140188e58
mov r14d, eax
cmp eax, 1
jge 0x1400e4f59
lea rax, str._s_too_small
mov r9d, 0x50c4
lea rbx, str.connection_queue
mov rdx, rdi
mov qword [rsp + 0x28], rbx
lea r8, str.mg_start2
xor ecx, ecx
mov qword [rsp + 0x20], rax
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
mov dword [rsi + 4], 6
mov qword [rsp + 0x28], rbx
jmp 0x1400e5523
mov rcx, r14
mov edx, 0x48
call fcn.1401775d0
mov qword [rdi + 0x78], rax
test rax, rax
jne 0x1400e4fc6
lea rbx, str.connection_queue
mov r9d, 0x50d9
lea r15, str.Out_of_memory:_Cannot_allocate__s
mov qword [rsp + 0x28], rbx
lea r8, str.mg_start2
mov qword [rsp + 0x20], r15
mov rdx, rdi
xor ecx, ecx
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
lea eax, [r14 + r14*8]
mov qword [rsp + 0x28], rbx
shl eax, 3
mov dword [rsi + 4], eax
mov dword [rsi], 6
mov qword [rsp + 0x20], r15
jmp 0x1400e5535
mov rcx, qword [rdi + 0x7d98]
mov dword [rdi + 0xec], r14d
call fcn.140188e58
mov r15d, eax
lea ecx, [r15 - 1]
cmp ecx, 0xffff
ja 0x1400e54c5
mov dword [rsp + 0x40], r12d
call qword [sym.imp.KERNEL32.dll_GetVersion]
movzx ebx, ax
shr ebx, 8
movzx r14d, al
call qword [sym.imp.KERNEL32.dll_GetCurrentProcess]
mov rcx, rax
lea rdx, [rsp + 0x40]
call qword [sym.imp.KERNEL32.dll_IsWow64Process]
test eax, eax
je 0x1400e5032
cmp dword [rsp + 0x40], 0
lea rcx, str.__WoW64_
lea rax, [0x1401e1235]
cmovne rax, rcx
jmp 0x1400e5039
lea rax, [0x1401bc804]
mov r9d, ebx
mov qword [rsp + 0x20], rax
mov r8d, r14d
lea rdx, str.Windows__u._u_s
lea rcx, [rbp + 0x9a0]
call fcn.1400edb40
lea rax, [rbp + 0x9a0]
nop
cmp byte [rax + r13 + 1], 0
lea r13, [r13 + 1]
jne 0x1400e5060
lea rbx, [r13 + 1]
mov rcx, rbx
call fcn.140184ca0
mov r8, rax
test rax, rax
je 0x1400e50b1
cmp byte [rbp + 0x9a0], 0
mov rcx, rax
je 0x1400e50ae
lea rdx, [rbp + 0x9a0]
sub rdx, rax
cmp rbx, 1
jbe 0x1400e50ae
movzx eax, byte [rdx + rcx]
dec rbx
mov byte [rcx], al
inc rcx
cmp byte [rdx + rcx], 0
jne 0x1400e5096
mov byte [rcx], 0
lea r14, [rdi + 0x7d88]
mov qword [rdi + 0x7cb8], r8
mov rbx, qword [r14 + 0x130]
mov qword [rbp + 0x970], r12
mov qword [rbp + 0x978], r12
mov qword [rbp + 0x980], 0
mov dword [rbp + 0x988], r12d
mov qword [rbp + 0x990], r12
test rbx, rbx
je 0x1400e51bc
lea rcx, [rbp - 0x80]
mov r8d, 0x9f0
lea rdx, [0x1401b7860]
call fcn.1401726d0
lea r8, [rbp + 0x970]
mov qword [rbp + 0x860], rdi
mov rdx, rbx
mov qword [rbp + 0x868], r14
lea rcx, [rbp - 0x80]
call fcn.1400e5590
test eax, eax
jne 0x1400e51bc
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov ecx, eax
call fcn.14018a088
mov qword [rsp + 0x30], rax
lea r8, str.set_gpass_option
lea rax, str.Cannot_open__s:__s
mov qword [rsp + 0x28], rbx
mov r9d, 0x44f9
mov qword [rsp + 0x20], rax
mov rdx, rdi
xor ecx, ecx
call fcn.1400e1360
lea r14, str.Invalid_global_password_file
mov r9d, 0x517c
lea rbx, [0x1401e16f8]
mov qword [rsp + 0x28], r14
lea r8, str.mg_start2
mov qword [rsp + 0x20], rbx
mov rdx, rdi
xor ecx, ecx
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
mov qword [rsp + 0x28], r14
mov qword [rsp + 0x20], rbx
mov dword [rsi], reloc.WS2_32.dll_listen
jmp 0x1400e5535
mov rcx, rdi
call fcn.1400ec7d0
test eax, eax
jne 0x1400e5215
lea r14, str.Failed_to_setup_server_ports
mov r9d, 0x51bb
lea rbx, [0x1401e16f8]
mov qword [rsp + 0x28], r14
lea r8, str.mg_start2
mov qword [rsp + 0x20], rbx
mov rdx, rdi
xor ecx, ecx
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
mov qword [rsp + 0x28], r14
mov qword [rsp + 0x20], rbx
mov dword [rsi], 0xa
jmp 0x1400e5535
xor eax, eax
lea rdx, [rbp + 0x970]
mov qword [rbp + 0x980], rax
xorps xmm0, xmm0
mov dword [rbp + 0x988], eax
mov rcx, rdi
mov eax, reloc.WS2_32.dll_socket
movups xmmword [rbp + 0x970], xmm0
mov word [rbp + 0x970], ax
call fcn.1400d7130
cmp eax, 0xffffffff
jne 0x1400e529b
lea r14, str.Failed_to_setup_access_control_list
mov r9d, 0x51e5
lea rbx, [0x1401e16f8]
mov qword [rsp + 0x28], r14
lea r8, str.mg_start2
mov qword [rsp + 0x20], rbx
mov rdx, rdi
xor ecx, ecx
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
mov qword [rsp + 0x28], r14
mov qword [rsp + 0x20], rbx
mov dword [rsi], recv
jmp 0x1400e5535
mov rcx, r15
mov dword [rdi + 0x60], r15d
mov edx, 8
call fcn.1401775d0
mov qword [rdi + 0x68], rax
test rax, rax
jne 0x1400e530b
lea r14, str.Not_enough_memory_for_worker_thread_ID_array
mov r9d, 0x51fd
lea rbx, [0x1401e16f8]
mov qword [rsp + 0x28], r14
lea r8, str.mg_start2
mov qword [rsp + 0x20], rbx
mov rdx, rdi
xor ecx, ecx
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
mov dword [rsi], 6
mov eax, dword [rdi + 0x60]
shl eax, 3
mov qword [rsp + 0x28], r14
mov dword [rsi + 4], eax
mov qword [rsp + 0x20], rbx
jmp 0x1400e5535
mov ecx, dword [rdi + 0x60]
mov edx, 0x9f0
call fcn.1401775d0
mov qword [rdi + 0x20], rax
test rax, rax
jne 0x1400e5378
lea r14, str.Not_enough_memory_for_worker_thread_connection_array
mov r9d, 0x5216
lea rbx, [0x1401e16f8]
mov qword [rsp + 0x28], r14
lea r8, str.mg_start2
mov qword [rsp + 0x20], rbx
mov rdx, rdi
xor ecx, ecx
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
mov dword [rsi], 6
imul eax, dword [rdi + 0x60], 0x9f0
mov qword [rsp + 0x28], r14
mov qword [rsp + 0x20], rbx
mov dword [rsi + 4], eax
jmp 0x1400e5535
mov rax, qword [rdi + 0x7d58]
test rax, rax
je 0x1400e5389
mov rcx, rdi
call rax
cmp dword [rdi + 0x60], 0
mov ebx, r12d
mov rax, qword [rsp + 0x48]
mov qword [rdi + 0x7d60], rax
mov dword [rdi], 1
jbe 0x1400e5402
nop dword [rax]
nop dword [rax + rax]
mov rax, qword [rdi + 0x20]
lea r8, [0x1400edd60]
mov ecx, ebx
imul rdx, rcx, 0x9f0
mov qword [rsp + 0x28], r12
mov dword [rsp + 0x20], r12d
mov qword [rdx + rax + 0x8e0], rdi
mov rax, qword [rdi + 0x68]
mov r9, qword [rdi + 0x20]
add r9, rdx
xor edx, edx
lea r14, [rax + rcx*8]
xor ecx, ecx
call fcn.14017b274
test rax, rax
je 0x1400e5446
test r14, r14
je 0x1400e5446
inc ebx
mov qword [r14], rax
cmp ebx, dword [rdi + 0x60]
jb 0x1400e53b0
mov qword [rsp + 0x28], r12
lea r8, [0x1400df9f0]
mov r9, rdi
mov dword [rsp + 0x20], r12d
xor edx, edx
lea rbx, [rdi + 0x58]
xor ecx, ecx
call fcn.14017b274
test rax, rax
je 0x1400e5430
test rbx, rbx
je 0x1400e5430
mov qword [rbx], rax
mov ecx, dword [0x14031fd50]
xor edx, edx
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
mov rax, rdi
jmp 0x1400e555e
call qword [sym.imp.KERNEL32.dll_GetLastError]
lea r8, str.mg_start2
mov r14d, eax
mov rdx, rdi
test ebx, ebx
je 0x1400e5486
mov dword [rsp + 0x30], eax
lea ecx, [rbx + 1]
mov dword [rsp + 0x28], ecx
lea rax, str.Cannot_start_worker_thread__i:_error__ld
xor ecx, ecx
mov qword [rsp + 0x20], rax
mov r9d, 0x52b0
call fcn.1400e1360
jmp 0x1400e5402
lea rax, str.Cannot_create_threads:_error__ld
mov dword [rsp + 0x28], r14d
mov r9d, 0x52bc
mov qword [rsp + 0x20], rax
xor ecx, ecx
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
mov dword [rsi], 9
lea rax, str.Cannot_create_first_worker_thread:_error__ld
mov dword [rsi + 4], r14d
mov dword [rsp + 0x28], r14d
jmp 0x1400e5530
lea rcx, str.Too_many_worker_threads
test r15d, r15d
mov r9d, 0x50f1
lea rax, str.Invalid_number_of_worker_threads
cmovg rax, rcx
lea rbx, [0x1401e16f8]
mov ecx, 0x50f3
mov qword [rsp + 0x28], rax
cmovg r9d, ecx
mov qword [rsp + 0x20], rbx
xor ecx, ecx
lea r8, str.mg_start2
mov rdx, rdi
call fcn.1400e1360
test rsi, rsi
je 0x1400e5546
lea rax, str.num_threads
mov dword [rsi + 4], 1
mov qword [rsp + 0x28], rax
lea rax, str.Invalid_configuration_option_value:__s
mov dword [rsi], 2
mov qword [rsp + 0x20], rax
mov r9, qword [rsi + 0x10]
xor edx, edx
mov r8, qword [rsi + 8]
xor ecx, ecx
call fcn.1400e46d0
mov rcx, rdi
call fcn.1400d9830
mov ecx, dword [0x14031fd50]
xor edx, edx
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
xor eax, eax
mov rdi, qword [rsp + 0xb30]
mov rbx, qword [rsp + 0xb80]
mov rcx, qword [rbp + 0xa20]
xor rcx, rsp
call fcn.1401702b0
add rsp, 0xb38
pop r15
pop r14
pop r13
pop r12
pop rsi
pop rbp
ret