Function at 0x100fa770
Capabilities:
Get thread local storage value

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x60
mov eax, dword [0x10411900]
test eax, eax
jne 0x100fa78a
mov ecx, 0x10411900
call fcn.100f2930
push eax
call sub.KERNEL32.dll_TlsGetValue
cmp eax, 2
jb 0x100fa79f
cmp dword [eax], 1
jne 0x100fa79f
add eax, 4
jmp 0x100fa7ac
call fcn.100f2a80
test eax, eax
je 0x100fa9a2
mov ecx, eax
call fcn.100f2b50
mov esi, eax
mov dword [esp + 8], eax
xor ecx, ecx
mov eax, 2
lock cmpxchg dword [esi + 0x18], ecx
je 0x100fa918
mov ebp, esi
add ebp, 0x18
mov ecx, dword [ebp + 4]
call fcn.100f4af0
mov eax, dword [0x10551f14]
test eax, eax
jne 0x100fa932
mov dword [esp], 0
lea eax, [ebp + 4]
mov dword [esp + 4], eax
mov al, byte [esi + 0x20]
test al, al
jne 0x100fa9bb
mov ecx, 1
xor eax, eax
lock cmpxchg dword [ebp], ecx
jne 0x100fa877
mov ecx, dword [esi + 0x1c]
xor eax, eax
lock cmpxchg dword [esi + 0x28], ecx
je 0x100fa824
cmp eax, ecx
jne 0x100fa957
mov edi, dword [ebp + 4]
mov ebx, dword [ebp + 0xc]
mov edx, dword [0x10551f84]
test edx, edx
jne 0x100fa853
mov ecx, str.SleepConditionVariableSRW
mov edx, 0x19
call fcn.100f2fc0
test eax, eax
mov ecx, 0x100fab90
cmove edx, ecx
mov dword [0x10551f84], edx
push 0
push 0xffffffffffffffff
push edi
push ebx
call edx
movzx eax, byte [esi + 0x20]
test al, al
jne 0x100fa970
mov eax, 2
xor ecx, ecx
lock cmpxchg dword [ebp], ecx
jne 0x100fa810
jmp 0x100fa892
cmp eax, 2
jne 0x100fa9df
xor eax, eax
xchg dword [ebp], eax
cmp eax, 2
mov dword [esp + 0xc], eax
jne 0x100fa9f3
cmp byte [esp], 0
jne 0x100fa8a5
mov eax, dword [0x10551f14]
test eax, eax
jne 0x100fa941
mov eax, dword [esp + 4]
mov esi, dword [eax]
mov eax, dword [0x10551f24]
test eax, eax
je 0x100fa8c9
cmp eax, 0x100f3390
jne 0x100fa8ee
mov eax, dword [esi]
mov byte [eax + 0x18], 0
push eax
call sub.KERNEL32.dll_LeaveCriticalSection
jmp 0x100fa918
mov ecx, 0x103a03b9
mov edx, 0x17
call fcn.100f2fc0
test eax, eax
mov eax, 0x100f3390
cmovne eax, edx
mov dword [0x10551f24], eax
cmp eax, 0x100f3390
je 0x100fa8bb
mov eax, dword [0x10551f3c]
test eax, eax
jne 0x100fa915
mov ecx, str.ReleaseSRWLockExclusive
mov edx, 0x17
call fcn.100f2fc0
test eax, eax
mov eax, 0x100f51d0
cmovne eax, edx
mov dword [0x10551f3c], eax
push esi
call eax
mov eax, dword [esp + 8]
lock dec dword [eax]
jne 0x100fa92a
lea ecx, [esp + 8]
call fcn.100f2f00
add esp, 0x60
pop esi
pop edi
pop ebx
pop ebp
ret
call fcn.100faaa0
xor al, 1
mov dword [esp], eax
jmp 0x100fa7ec
call fcn.100faaa0
test al, al
jne 0x100fa8a5
mov byte [esi + 0x20], 1
jmp 0x100fa8a5
mov ecx, str.attempted_to_use_a_condition_variable_with_two_mutexes
mov edx, 0x36
push 0x103a13a4
call fcn.100f33b0
add esp, 4
ud2
mov eax, dword [esp + 4]
mov ecx, 0x103c93eb
mov edx, 0x2b
mov dword [esp + 0x18], eax
mov eax, dword [esp]
mov byte [esp + 0x1c], al
lea eax, [esp + 0x18]
push 0x103a13d0
push 0x103a1308
push eax
call fcn.1000aa20
add esp, 0xc
ud2
mov ecx, 0x103a02cf
mov edx, 0x5e
push 0x103a0330
call fcn.1000a9c0
add esp, 4
ud2
mov eax, dword [esp + 4]
mov ecx, 0x103c93eb
mov edx, 0x2b
mov dword [esp + 0x18], eax
mov eax, dword [esp]
mov byte [esp + 0x1c], al
lea eax, [esp + 0x18]
push 0x103a1318
jmp 0x100fa992
mov ecx, 0x103a1328
mov edx, 0x17
push 0x103a1340
jmp 0x100fa966
lea edx, [esp + 0x10]
lea ecx, [esp + 0x14]
lea eax, [esp + 0xc]
mov dword [esp + 0x48], 0x103a3108
mov dword [esp + 0x4c], 3
mov dword [esp + 0x50], 0
mov dword [esp + 0x18], 0x103a1354
mov dword [esp + 0x1c], 1
mov dword [esp + 0x20], 0
mov dword [esp + 0x28], str.formatter_errorfailed_to_write_whole_buffer
mov dword [esp + 0x14], 0x103a1350
mov dword [esp + 0x2c], 0
mov dword [esp + 0x30], edx
mov dword [esp + 0x34], 0x100b9ba0
mov dword [esp + 0x38], ecx
lea ecx, [esp + 0x30]
lea edx, [esp + 0x18]
mov dword [esp + 0x3c], 0x100b9ba0
mov dword [esp + 0x10], eax
mov dword [esp + 0x40], edx
mov dword [esp + 0x58], ecx
lea ecx, [esp + 0x48]
mov edx, 0x103a135c
mov dword [esp + 0x44], 0x1000b4a0
mov dword [esp + 0x5c], 3
call fcn.100f94f0
ud2