Function at 0x68f1b4e4
Capabilities:
Get thread local storage value

Disassembly:
add ebx, edi
mov eax, dword [ebx + ecx*4]
add eax, edi
push eax
call fcn.68f192c9
cmp al, bh
pop ebx
dec eax
push dword [ebp + 8]
push dword [ebp + 4]
push dword [ebp]
call fcn.68f19ac9
jle 0x68f1b509
add byte [edi], cl
test dword [edi - 0x1000000], ebx
add byte [eax], al
add bh, bh
xor eax, 0x68fabd20
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov edi, eax
xor ebx, ebx
cmp edi, ebx
mov dword [ebp - 0x10], edi
jne 0x68f1b576
push 0x14
call dword [sym.imp.GrooveNew.DLL_void____cdecl_GrooveNew_unsigned_int_]
pop ecx
mov dword [ebp - 0x20], eax
mov dword [ebp - 4], ebx
cmp eax, ebx
je 0x68f1b53e
push eax
call fcn.68f1ad95
jmp 0x68f1b540
xor eax, eax
or dword [ebp - 4], 0xffffffff
mov dword [ebp - 0x10], eax
push eax
mov eax, 0x68fabd20
call fcn.68f0fff5
cmp byte [0x68fa89ea], 0
je 0x68f1b573
lea eax, [ebp - 0x10]
push eax
call dword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
push eax
push str.Locale_Storage___threadID:__d_at_0x_x_n
call sym.GrooveUtil.DLL_void___cdecl__GrooveTrace_wchar_t_const__
add esp, 0xc
mov edi, dword [ebp - 0x10]
cmp dword [edi + 0x10], ebx
jg 0x68f1b5ab
cmp byte [ebp + 8], 0
je 0x68f1b5bf
mov eax, dword [edi + 4]
cmp eax, ebx
je 0x68f1b5b5
lea ebx, [eax - 1]
mov eax, ebx
mov ecx, edi
call fcn.68f1b988
mov eax, dword [edi]
cmp dword [eax + ebx*4], esi
mov edi, dword [ebp - 0x10]
je 0x68f1b5b5
push esi
mov eax, edi
call fcn.68f1b921
cmp eax, 0xffffffff
je 0x68f1b5c8
mov al, 1
call fcn.68f54d3a
ret 8
push esi
mov eax, edi
call fcn.68f1b82a
jmp 0x68f1b5ab
mov byte [esi + 5], 1
cmp dword [edi + 4], ebx
je 0x68f1b5b5
push esi
mov eax, edi
call fcn.68f1b82a
mov eax, dword [ebp - 0x10]
mov eax, dword [eax + 4]
mov ebx, 0x68fabd24
lea edi, [eax - 1]
push ebx
mov dword [ebp - 0x1c], edi
mov dword [ebp - 0x24], ebx
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
mov dword [ebp - 4], 1
mov ecx, dword [ebp - 0x10]
dec edi
mov eax, edi
mov dword [ebp - 0x18], ecx
call fcn.68f1b988
mov eax, dword [ebp - 0x18]
mov eax, dword [eax]
mov edi, dword [eax + edi*4]
lea eax, [esi + 8]
push edi
mov dword [ebp - 0x18], edi
mov dword [ebp - 0x20], eax
call fcn.68f1b921
cmp eax, 0xffffffff
je 0x68f1b629
or dword [ebp - 4], 0xffffffff
push ebx
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
jmp 0x68f1b5ab
push 1
push edi
push esi
call fcn.68f1b401
test al, al
jne 0x68f1b75b
cmp byte [0x68fa89ea], al
je 0x68f1b653
push dword [esi]
push dword [edi]
push str.Ordering__s_Ordering_nBefore__s_Before_n
call sym.GrooveUtil.DLL_void___cdecl__GrooveTrace_wchar_t_const__
add esp, 0xc
and dword [ebp + 0xc], 0
cmp dword [0x68fabd40], 0
jle 0x68f1b744
mov esi, dword [ebp + 0xc]
mov edi, 0x68fabd3c
call fcn.68f1b87a
mov eax, dword [eax]
test eax, eax
je 0x68f1b67d
cmp word [eax], 0
jne 0x68f1b68c
mov eax, dword [ebp - 0x18]
mov eax, dword [eax]
test eax, eax
je 0x68f1b6b2
cmp word [eax], 0
je 0x68f1b6b2
mov esi, dword [ebp + 0xc]
mov edi, 0x68fabd3c
call fcn.68f1b87a
mov eax, dword [eax]
lea ecx, [ebp - 0x1c]
push ecx
push eax
mov eax, dword [ebp - 0x18]
push dword [eax]
call sym.GrooveUtil.DLL_public:_static_bool___stdcall_raw_GCStr::Find_wchar_t_const___wchar_t_const___unsigned_long_int__
test al, al
mov byte [ebp + 0xb], 0
je 0x68f1b6b6
mov byte [ebp + 0xb], 1
mov esi, dword [ebp + 0xc]
mov edi, 0x68fabd4c
call fcn.68f1b87a
mov eax, dword [eax]
test eax, eax
je 0x68f1b6cf
cmp word [eax], 0
jne 0x68f1b6de
mov eax, dword [ebp - 0x14]
mov eax, dword [eax]
test eax, eax
je 0x68f1b700
cmp word [eax], 0
je 0x68f1b700
mov esi, dword [ebp + 0xc]
mov edi, 0x68fabd4c
call fcn.68f1b87a
mov eax, dword [eax]
lea ecx, [ebp - 0x1c]
push ecx
push eax
mov eax, dword [ebp - 0x14]
push dword [eax]
call sym.GrooveUtil.DLL_public:_static_bool___stdcall_raw_GCStr::Find_wchar_t_const___wchar_t_const___unsigned_long_int__
test al, al
je 0x68f1b702
mov al, 1
cmp byte [ebp + 0xb], 0
je 0x68f1b72c
test al, al
je 0x68f1b72c
cmp byte [0x68fa89ea], 0
jne 0x68f1b72c
mov eax, dword [ebp - 0x14]
push dword [eax]
mov eax, dword [ebp - 0x18]
push dword [eax]
push str.Ordering__s_Ordering_nBefore__s_Before_n
call sym.GrooveUtil.DLL_void___cdecl__GrooveTrace_wchar_t_const__
add esp, 0xc
inc dword [ebp + 0xc]
mov eax, dword [ebp + 0xc]
cmp eax, dword [0x68fabd40]
jl 0x68f1b664
mov esi, dword [ebp - 0x14]
mov edi, dword [ebp - 0x18]
mov eax, dword [ebp - 0x20]
push edi
call fcn.68f1b82a
push esi
lea eax, [edi + 0x18]
call fcn.68f1b82a
jmp 0x68f1b61c
mov eax, dword [edi]
mov ecx, dword [ebp + 0xc]
mov dword [ecx], eax
or dword [ebp - 4], 0xffffffff
push ebx
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
push dword [ebp - 0x1c]
mov ebx, dword [ebp - 0x10]
call fcn.68f1b894
cmp byte [ebp + 8], 0
jne 0x68f1b782
mov byte [esi + 5], 0
xor al, al
jmp 0x68f1b5ad