Function at 0x14003c290
Capabilities:
Get keyboard layout

Disassembly:
mov qword [rsp + 8], rcx
push rbp
push rbx
push rsi
push rdi
push r12
push r13
push r14
push r15
mov eax, 0x8568
call fcn.1400bcc10
sub rsp, rax
lea rbp, [rsp + 0x40]
mov rax, qword [0x140105130]
mov qword [rbp + 0x18], rax
test rax, rax
jne 0x14003c2e6
cmp dword [0x140105340], 1
sete al
xor r12d, r12d
test al, al
mov dword [0x140105340], r12d
sete dl
call fcn.140035720
jmp 0x14003ce10
mov rdi, qword [0x1401051e8]
lea r15, [0x140000000]
mov r13, qword [0x1401051f0]
xor r12d, r12d
mov r14, qword [0x1401051f8]
mov eax, r12d
mov dword [rbp + 0x8588], eax
mov byte [rbp + 0x8578], al
mov dword [0x140105340], r12d
mov dword [0x140105384], 1
mov word [0x140105388], r12w
mov dword [0x14010539c], 0x3fff
movzx eax, word [rdi]
mov qword [rbp + 8], r13
mov qword [rbp + 0x10], r14
test ax, ax
je 0x14003c425
lea rsi, [rdi + 2]
nop
movzx ebx, ax
test ebx, 0xffffff80
jne 0x14003c36e
mov edx, 2
mov ecx, ebx
call fcn.1400aa514
test eax, eax
je 0x14003c36e
and ebx, 0xffffffdf
movzx eax, bx
add eax, 0xffffffd6
cmp eax, 0x2c
ja case.0x14003c393.51
cdqe
movzx eax, byte [r15 + rax + 0x3ce4c]
mov ecx, dword [r15 + rax*4 + 0x3ce24]
add rcx, r15
jmp rcx
mov byte [0x140105384], r12b
jmp case.0x14003c393.51
mov byte [0x140105385], 1
jmp case.0x14003c393.51
mov byte [0x140105386], 1
jmp case.0x14003c393.51
mov byte [0x140105387], 1
jmp case.0x14003c393.51
mov rcx, rsi
call fcn.1400ab54c
mov dword [0x14010539c], eax
cmp eax, 0x3fff
jle case.0x14003c393.51
mov dword [0x14010539c], 0x3fff
jmp case.0x14003c393.51
mov rcx, rsi
call fcn.140015680
mulsd xmm0, qword [0x1400ea2f8]
cvttsd2si eax, xmm0
mov dword [rbp + 0x8588], eax
jmp case.0x14003c393.51
mov byte [0x140105388], 1
jmp case.0x14003c393.51
mov byte [0x140105389], 1
jmp case.0x14003c393.51
mov al, 1
mov byte [rbp + 0x8578], al
movzx eax, word [rdi + 2]
add rdi, 2
add rsi, 2
test ax, ax
jne 0x14003c350
xor edx, edx
lea rcx, [rbp + 0x120]
mov r8d, 0x100
call fcn.1400a6980
xor edx, edx
lea rcx, [rbp + 0x320]
mov r8d, 0x200
call fcn.1400a6980
mov rbx, r12
mov word [rbp + 0x8582], r12w
mov r15, r13
mov qword [rbp], rbx
mov edx, 0x7d
cmp word [r13], bx
je 0x14003c5a9
movzx r13d, byte [rbp + 0x8578]
lea rsi, [0x1400fd260]
nop
mov word [rbp + 0x8580], r12w
movzx eax, word [r15]
cmp eax, 0x7b
je 0x14003c637
cmp eax, 0x7d
je 0x14003c58c
test r13b, r13b
je 0x14003c4af
inc rbx
mov qword [rbp], rbx
jmp 0x14003c58c
xor ecx, ecx
mov word [rbp + 0x8580], ax
mov byte [rbp + 0x8578], r12b
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
movzx ecx, word [rbp + 0x8580]
test cx, cx
je 0x14003c587
cmp word [rbp + 0x8582], r12w
jne 0x14003c4fb
mov r8, rax
lea rdx, [rbp + 0x8578]
call fcn.140014740
movzx ebx, al
mov edx, 0x7d
jmp 0x14003c786
movzx ebx, cx
test ebx, 0xffffff80
jne 0x14003c519
mov edx, 2
mov ecx, ebx
call fcn.1400aa514
test eax, eax
je 0x14003c519
and ebx, 0xffffffdf
cmp bx, 0x56
jne 0x14003c54f
movzx ecx, word [rbp + 0x8582]
call fcn.14000aea0
cmp ax, 0x4b
jne 0x14003c54f
xor edx, edx
lea rcx, [rbp + 0x8584]
lea r8d, [rdx + 0x10]
call fcn.1400ab9b0
mov ebx, eax
mov edx, 0x7d
jmp 0x14003c786
lea r14, str.Numpad0
mov rdi, r12
mov rbx, r14
nop dword [rax]
mov rcx, qword [rbx]
lea rdx, [rbp + 0x8580]
call fcn.1400a7970
test eax, eax
je 0x14003c624
inc rdi
add rbx, 0x10
cmp rbx, rsi
jl 0x14003c560
mov rbx, qword [rbp]
mov edx, 0x7d
add r15, 2
lea rsi, [0x1400fd260]
cmp word [r15], r12w
jne 0x14003c480
mov r13, qword [rbp + 8]
mov r14, qword [rbp + 0x10]
lea r15, [0x1400e8120]
mov qword [0x140105358], r15
test rbx, rbx
je 0x14003c831
lea rax, [rbx*2 + 2]
lea rcx, [rax + 0xf]
cmp rcx, rax
ja 0x14003c5db
movabs rcx, 0xffffffffffffff0
and rcx, 0xfffffffffffffff0
mov rax, rcx
call fcn.1400bcc10
sub rsp, rcx
lea rbx, [rsp + 0x40]
mov qword [0x140105358], rbx
cmp word [r13], r12w
je 0x14003c82d
movzx eax, word [r13]
cmp eax, 0x7b
je 0x14003c7dd
cmp eax, 0x7d
je 0x14003c819
mov word [rbx], ax
add rbx, 2
jmp 0x14003c819
add rdi, rdi
mov edx, 0x7d
movzx ebx, byte [r14 + rdi*8 + 8]
jmp 0x14003c786
lea rsi, [r15 + 2]
mov rcx, rsi
call fcn.1400a5b28
mov r14, rax
test rax, rax
je 0x14003c587
mov rcx, rax
sub rcx, r15
sar rcx, 1
sub rcx, 1
jne 0x14003c66f
add r14, 2
cmp word [r14], 0x7d
jne 0x14003c587
jmp 0x14003c675
cmp rcx, 1
jne 0x14003c690
test r13b, r13b
je 0x14003c686
inc rbx
mov qword [rbp], rbx
jmp 0x14003c587
movzx eax, word [rsi]
mov word [rbp + 0x8580], ax
xor ecx, ecx
mov word [r14], r12w
mov byte [rbp + 0x8578], r12b
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
movzx ecx, word [rsi]
test cx, cx
jne 0x14003c6b2
xor bl, bl
jmp 0x14003c762
cmp word [rsi + 2], r12w
jne 0x14003c6d0
mov r8, rax
lea rdx, [rbp + 0x8578]
call fcn.140014740
movzx ebx, al
jmp 0x14003c75e
movzx ebx, cx
test ebx, 0xffffff80
jne 0x14003c6ee
mov edx, 2
mov ecx, ebx
call fcn.1400aa514
test eax, eax
je 0x14003c6ee
and ebx, 0xffffffdf
cmp bx, 0x56
jne 0x14003c717
movzx ecx, word [rsi + 2]
call fcn.14000aea0
cmp ax, 0x4b
jne 0x14003c717
xor edx, edx
lea rcx, [rsi + 4]
lea r8d, [rdx + 0x10]
call fcn.1400ab9b0
movzx ebx, al
jmp 0x14003c75e
mov rdi, r12
lea rbx, str.Numpad0
lea r15, [0x1400fd260]
nop dword [rax + rax]
mov rcx, qword [rbx]
mov rdx, rsi
call fcn.1400a7970
test eax, eax
je 0x14003c74f
inc rdi
add rbx, 0x10
cmp rbx, r15
jl 0x14003c730
xor bl, bl
jmp 0x14003c762
add rdi, rdi
lea rax, str.Numpad0
movzx ebx, byte [rax + rdi*8 + 8]
test bl, bl
jne 0x14003c77a
mov rcx, rsi
call fcn.140014520
test ax, ax
je 0x14003c77a
movzx eax, ax
mov byte [rbp + rax + 0x320], 1
mov edx, 0x7d
mov r15, r14
mov word [r14], dx
test bl, bl
je 0x14003c7c3
movzx ecx, word [rbp + 0x8580]
movzx ebx, bl
or byte [rbp + rbx + 0x120], 1
test cx, cx
je 0x14003c7c3
call qword [sym.imp.USER32.dll_IsCharAlphaW]
test eax, eax
jne 0x14003c583
test byte [rbp + 0x8578], 0x30
lea edx, [rax + 0x7d]
je 0x14003c7cc
or byte [rbp + rbx + 0x120], 2
mov rbx, qword [rbp]
jmp 0x14003c58c
or byte [rbp + rbx + 0x120], 4
mov rbx, qword [rbp]
jmp 0x14003c58c
lea rdi, [r13 + 2]
mov rcx, rdi
call fcn.1400a5b28
mov rdx, rax
test rax, rax
je 0x14003c819
cmp rax, rdi
jne 0x14003c803
cmp word [rax + 2], 0x7d
lea rcx, [rax + 2]
cmove rdx, rcx
lea rax, [r13 + 4]
cmp rdx, rax
jne 0x14003c816
movzx eax, word [rdi]
mov word [rbx], ax
add rbx, 2
mov r13, rdx
add r13, 2
mov edx, 0x7d
cmp word [r13], r12w
jne 0x14003c601
mov word [rbx], r12w
mov dword [0x140105370], r12d
cmp word [r14], r12w
je 0x14003ca15
cmp qword [0x140105368], r12
jne 0x14003c889
mov ecx, 0x2000
call fcn.1400a7ae8
mov qword [0x140105368], rax
test rax, rax
jne 0x14003c87f
mov rcx, qword [rbp + 0x8570]
lea rdx, str.Out_of_memory.
mov r9, r15
xor r8d, r8d
call fcn.1400358e0
jmp 0x14003ce10
mov dword [0x140105374], 0x400
mov rdi, qword [rbp + 0x8570]
mov edx, 3
mov rcx, rdi
call fcn.140025290
mov ecx, dword [0x140105380]
inc rax
cmp rax, rcx
jbe 0x14003c90b
mov rcx, qword [0x140105378]
mov edx, 0x1000
cmp rax, rdx
cmova edx, eax
mov dword [0x140105380], edx
test rcx, rcx
je 0x14003c8d3
call fcn.1400aba10
mov edx, dword [0x140105380]
lea ecx, [rdx + rdx]
call fcn.1400a7ae8
mov qword [0x140105378], rax
mov rdx, rax
test rax, rax
jne 0x14003c912
mov dword [0x140105380], r12d
mov r9, r15
lea rdx, str.Out_of_memory.
xor r8d, r8d
mov rcx, rdi
call fcn.1400358e0
jmp 0x14003ce10
mov rdx, qword [0x140105378]
mov ecx, dword [0x140105370]
mov rax, qword [0x140105368]
mov qword [rax + rcx*8], rdx
mov rbx, qword [0x140105378]
cmp word [r14], r12w
je 0x14003c9f2
mov esi, 0x2c
nop dword [rax]
movzx eax, word [r14]
cmp ax, si
je 0x14003c955
mov word [rbx], ax
add rbx, 2
jmp 0x14003c9e4
cmp word [r14 + 2], si
jne 0x14003c969
mov word [rbx], si
add rbx, 2
add r14, 2
jmp 0x14003c9e4
mov word [rbx], r12w
mov ecx, dword [0x140105370]
mov r8, qword [0x140105368]
mov rax, qword [r8 + rcx*8]
cmp word [rax], r12w
je 0x14003c9a7
inc ecx
mov dword [0x140105370], ecx
add rbx, 2
mov eax, ecx
mov qword [r8 + rcx*8], rbx
mov word [rbx], r12w
mov ecx, dword [0x140105370]
mov r8, qword [0x140105368]
cmp word [r14 + 2], r12w
je 0x14003c9e4
mov eax, dword [0x140105374]
cmp ecx, eax
jb 0x14003c9e4
lea edx, [rax + 0x400]
mov rcx, r8
shl rdx, 3
call fcn.1400ab858
test rax, rax
je 0x14003c8f1
add dword [0x140105374], 0x400
mov qword [0x140105368], rax
add r14, 2
cmp word [r14], r12w
jne 0x14003c940
mov word [rbx], r12w
mov edx, dword [0x140105370]
mov rax, qword [0x140105368]
mov rcx, qword [rax + rdx*8]
cmp word [rcx], r12w
je 0x14003ca15
inc edx
mov dword [0x140105370], edx
cmp byte [0x140100b50], r12b
je 0x14003ca62
mov rcx, qword [0x140100f00]
mov edx, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
call qword [sym.imp.USER32.dll_KillTimer]
movzx ecx, byte [0x140100b50]
test eax, eax
cmovne ecx, r12d
mov byte [0x140100b50], cl
mov ecx, reloc.OLEAUT32.dll_SafeArrayGetDim
call qword [sym.imp.USER32.dll_GetQueueStatus]
shr eax, 0x10
test al, 0x10
je 0x14003ca62
mov edx, 1
or ecx, 0xffffffff
call fcn.1400018c0
xor edx, edx
lea rcx, [rbp + 0x520]
mov r8d, 0x8000
call fcn.1400a6980
or byte [0x140101cc6], 1
lea rax, [rbp + 0x520]
cmp qword [0x140100f28], r12
mov qword [0x140105390], rax
lea rax, [rbp + 0x120]
mov qword [0x140105348], rax
lea rax, [rbp + 0x320]
mov qword [0x140105350], rax
mov dword [0x140105398], r12d
mov dword [0x140105340], 1
mov byte [0x140100f14], 1
jne 0x14003cad7
mov rax, qword [0x1400fee48]
movzx edx, word [rax]
call fcn.1400097a0
mov eax, dword [rbp + 0x8588]
test eax, eax
jle 0x14003cb20
cmp byte [0x140100b50], r12b
jne 0x14003cb20
mov ecx, 0xa
lea r9, [0x1400043e0]
cmp eax, ecx
cmovl eax, ecx
lea edx, [rcx + 2]
mov r8d, eax
mov rcx, qword [0x140100f00]
call qword [sym.imp.USER32.dll_SetTimer]
test rax, rax
setne byte [0x140100b50]
nop dword [rax + rax]
mov edx, 1
mov ecx, 0x8000012f
call fcn.1400018c0
mov ecx, dword [0x140105340]
cmp ecx, 1
je 0x14003cb20
sub ecx, 2
je 0x14003cd7f
sub ecx, 1
je 0x14003cd76
sub ecx, 1
je 0x14003cb81
xor r9d, r9d
mov byte [rsp + 0x20], 1
or r8, 0xffffffffffffffff
cmp ecx, 1
mov rcx, qword [0x140100ee0]
je 0x14003cb75
lea rdx, str.NewInput
jmp 0x14003cd99
lea rdx, [0x1400e6f70]
jmp 0x14003cd99
movups xmm0, xmmword [str.EndKey:]
xor edx, edx
lea rcx, [rbp + 0x30]
mov r8d, 0xf0
movaps xmmword [rbp + 0x20], xmm0
call fcn.1400a6980
movzx eax, word [0x140105364]
test ax, ax
je 0x14003cbbb
mov word [rbp + 0x2e], ax
lea rdx, [rbp + 0x20]
mov word [rbp + 0x30], r12w
jmp 0x14003cd86
cmp byte [0x140105367], r12b
je 0x14003cc63
xor edx, edx
lea rcx, [rbp + 0x220]
mov r8d, 0x100
call fcn.1400a6980
or byte [rbp + 0x230], 0x80
call qword [sym.imp.USER32.dll_GetForegroundWindow]
test rax, rax
je 0x14003cbfb
xor edx, edx
mov rcx, rax
call qword [sym.imp.USER32.dll_GetWindowThreadProcessId]
jmp 0x14003cbfe
mov eax, r12d
mov ecx, eax
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
cmp dword [0x140100b54], r12d
mov edi, r12d
movzx ecx, byte [0x140105360]
mov rbx, rax
setne dil
xor edx, edx
call fcn.140014b30
movzx ecx, byte [0x140105360]
lea r9, [rbp + 0x2e]
mov qword [rsp + 0x30], rbx
lea r8, [rbp + 0x220]
movzx edx, ax
mov dword [rsp + 0x28], edi
mov dword [rsp + 0x20], 2
call qword [sym.imp.USER32.dll_ToUnicodeEx]
movsxd rcx, eax
lea rdx, [rbp + 0x20]
mov word [rbp + rcx*2 + 0x2e], r12w
jmp 0x14003cd86
cmp byte [0x140105366], r12b
mov ecx, r12d
je 0x14003ccc9
movzx edx, word [0x140105362]
lea rax, [0x1400fcac8]
lea r8, [0x1400fcb98]
cmp word [rax], dx
je 0x14003ccb2
inc ecx
add rax, 0x10
cmp rax, r8
jl 0x14003cc84
movzx r9d, dx
lea r8, str.sc_03X
mov edx, 0x79
lea rcx, [rbp + 0x2e]
call fcn.140087720
jmp 0x14003cd59
movsxd rdx, ecx
lea rax, [0x140000000]
add rdx, rdx
mov rdx, qword [rax + rdx*8 + 0xfcac0]
jmp 0x14003cd42
movzx ebx, byte [0x140105360]
lea rax, [0x1400fcb98]
lea rdx, [0x1400fd268]
nop
cmp byte [rax], bl
je 0x14003cd31
inc ecx
add rax, 0x10
cmp rax, rdx
jl 0x14003cce0
movzx ecx, bl
call fcn.140014390
mov word [rbp + 0x2e], ax
test ax, ax
je 0x14003cd07
mov word [rbp + 0x30], r12w
jmp 0x14003cd59
test bl, bl
je 0x14003cd26
movzx r9d, bl
lea r8, str.vk_02X
mov edx, 0x79
lea rcx, [rbp + 0x2e]
call fcn.140087720
jmp 0x14003cd59
mov word [rbp + 0x2e], r12w
lea rdx, [rbp + 0x20]
jmp 0x14003cd86
movsxd rdx, ecx
lea rax, str.Numpad0
add rdx, rdx
mov rdx, qword [rax + rdx*8]
mov r8d, 0x78
lea rcx, [rbp + 0x2e]
call fcn.1400b0a34
mov word [rbp + 0x11e], r12w
movzx eax, word [rbp + 0x2e]
sub ax, 0x61
cmp ax, 0x19
ja 0x14003cd70
mov eax, 0xffe0
add word [rbp + 0x2e], ax
lea rdx, [rbp + 0x20]
jmp 0x14003cd86
lea rdx, str.Match
jmp 0x14003cd86
lea rdx, str.Timeout
mov rcx, qword [0x140100ee0]
xor r9d, r9d
or r8, 0xffffffffffffffff
mov byte [rsp + 0x20], 1
call fcn.14008ac50
cmp byte [0x140100b50], r12b
mov dword [0x140105340], r12d
je 0x14003cdf4
mov rcx, qword [0x140100f00]
mov edx, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
call qword [sym.imp.USER32.dll_KillTimer]
movzx r8d, byte [0x140100b50]
mov ecx, reloc.OLEAUT32.dll_SafeArrayGetDim
test eax, eax
cmovne r8d, r12d
mov byte [0x140100b50], r8b
call qword [sym.imp.USER32.dll_GetQueueStatus]
shr eax, 0x10
test al, 0x10
je 0x14003cdf4
mov edx, 1
or ecx, 0xffffffff
call fcn.1400018c0
mov rcx, qword [rbp + 0x18]
lea rdx, [rbp + 0x520]
xor r9d, r9d
mov byte [rsp + 0x20], 1
or r8, 0xffffffffffffffff
call fcn.14008ac50
lea rsp, [rbp + 0x8528]
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbx
pop rbp
ret