Function at 0x14003bd10
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.1400bc3f0
sub rsp, rax
lea rbp, [rsp + 0x40]
mov rax, rcx
mov rcx, qword [0x1401030e0]
mov qword [rbp + 0x18], rcx
test rcx, rcx
jne 0x14003bd6a
cmp dword [0x1401032f0], 1
mov rcx, rax
sete dl
xor r12d, r12d
xor dl, 1
mov dword [0x1401032f0], r12d
call fcn.1400354c0
jmp 0x14003c890
mov rdi, qword [0x140103198]
lea r15, [0x140000000]
mov r13, qword [0x1401031a0]
xor r12d, r12d
mov r14, qword [0x1401031a8]
mov eax, r12d
mov dword [rbp + 0x8588], eax
mov byte [rbp + 0x8578], al
mov dword [0x1401032f0], r12d
mov dword [0x140103334], 1
mov word [0x140103338], r12w
mov dword [0x14010334c], 0x3fff
movzx eax, word [rdi]
mov qword [rbp + 8], r13
mov qword [rbp + 0x10], r14
test ax, ax
je 0x14003bea8
lea rsi, [rdi + 2]
movzx ebx, ax
test ebx, 0xffffff80
jne 0x14003bdf1
mov edx, 2
mov ecx, ebx
call fcn.1400a9cf4
test eax, eax
je 0x14003bdf1
and ebx, 0xffffffdf
movzx eax, bx
add eax, 0xffffffd6
cmp eax, 0x2c
ja case.0x14003be16.51
cdqe
movzx eax, byte [r15 + rax + 0x3c8cc]
mov ecx, dword [r15 + rax*4 + 0x3c8a4]
add rcx, r15
jmp rcx
mov byte [0x140103334], r12b
jmp case.0x14003be16.51
mov byte [0x140103335], 1
jmp case.0x14003be16.51
mov byte [0x140103336], 1
jmp case.0x14003be16.51
mov byte [0x140103337], 1
jmp case.0x14003be16.51
mov rcx, rsi
call fcn.1400aad18
mov dword [0x14010334c], eax
cmp eax, 0x3fff
jle case.0x14003be16.51
mov dword [0x14010334c], 0x3fff
jmp case.0x14003be16.51
mov rcx, rsi
call fcn.140015520
mulsd xmm0, qword [0x1400e9298]
cvttsd2si eax, xmm0
mov dword [rbp + 0x8588], eax
jmp case.0x14003be16.51
mov byte [0x140103338], 1
jmp case.0x14003be16.51
mov byte [0x140103339], 1
jmp case.0x14003be16.51
mov al, 1
mov byte [rbp + 0x8578], al
movzx eax, word [rdi + 2]
add rdi, 2
add rsi, 2
test ax, ax
jne 0x14003bdd3
xor edx, edx
lea rcx, [rbp + 0x120]
mov r8d, 0x100
call fcn.1400a60e0
xor edx, edx
lea rcx, [rbp + 0x320]
mov r8d, 0x200
call fcn.1400a60e0
mov rbx, r12
mov word [rbp + 0x8582], r12w
mov r15, r13
mov qword [rbp], rbx
mov edx, 0x7d
cmp word [r13], r12w
je 0x14003c029
movzx r13d, byte [rbp + 0x8578]
lea rsi, [0x1400fb210]
mov word [rbp + 0x8580], r12w
movzx eax, word [r15]
cmp eax, 0x7b
je 0x14003c0b7
cmp eax, 0x7d
je 0x14003c00c
test r13b, r13b
je 0x14003bf30
inc rbx
mov qword [rbp], rbx
jmp 0x14003c00c
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 0x14003c007
cmp word [rbp + 0x8582], r12w
jne 0x14003bf7c
mov r8, rax
lea rdx, [rbp + 0x8578]
call fcn.1400145f0
movzx ebx, al
mov edx, 0x7d
jmp 0x14003c206
movzx ebx, cx
test ebx, 0xffffff80
jne 0x14003bf9a
mov edx, 2
mov ecx, ebx
call fcn.1400a9cf4
test eax, eax
je 0x14003bf9a
and ebx, 0xffffffdf
cmp bx, 0x56
jne 0x14003bfd0
movzx ecx, word [rbp + 0x8582]
call fcn.14000ad40
cmp ax, 0x4b
jne 0x14003bfd0
xor edx, edx
lea rcx, [rbp + 0x8584]
lea r8d, [rdx + 0x10]
call fcn.1400ab190
mov ebx, eax
mov edx, 0x7d
jmp 0x14003c206
lea r14, str.Numpad0
mov rdi, r12
mov rbx, r14
nop dword [rax]
mov rcx, qword [rbx]
lea rdx, [rbp + 0x8580]
call fcn.1400a7150
test eax, eax
je 0x14003c0a4
inc rdi
add rbx, 0x10
cmp rbx, rsi
jl 0x14003bfe0
mov rbx, qword [rbp]
mov edx, 0x7d
add r15, 2
lea rsi, [0x1400fb210]
cmp word [r15], r12w
jne 0x14003bf01
mov r13, qword [rbp + 8]
mov r14, qword [rbp + 0x10]
lea r15, [0x1400e70b8]
mov qword [0x140103308], r15
test rbx, rbx
je 0x14003c2b1
lea rax, [rbx*2 + 2]
lea rcx, [rax + 0xf]
cmp rcx, rax
ja 0x14003c05b
movabs rcx, 0xffffffffffffff0
and rcx, 0xfffffffffffffff0
mov rax, rcx
call fcn.1400bc3f0
sub rsp, rcx
lea rbx, [rsp + 0x40]
mov qword [0x140103308], rbx
cmp word [r13], r12w
je 0x14003c2ad
movzx eax, word [r13]
cmp eax, 0x7b
je 0x14003c25d
cmp eax, 0x7d
je 0x14003c299
mov word [rbx], ax
add rbx, 2
jmp 0x14003c299
add rdi, rdi
mov edx, 0x7d
movzx ebx, byte [r14 + rdi*8 + 8]
jmp 0x14003c206
lea rsi, [r15 + 2]
mov rcx, rsi
call fcn.1400a56c8
mov r14, rax
test rax, rax
je 0x14003c007
mov rcx, rax
sub rcx, r15
sar rcx, 1
sub rcx, 1
jne 0x14003c0ef
add r14, 2
cmp word [r14], 0x7d
jne 0x14003c007
jmp 0x14003c0f5
cmp rcx, 1
jne 0x14003c110
test r13b, r13b
je 0x14003c106
inc rbx
mov qword [rbp], rbx
jmp 0x14003c007
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 0x14003c132
xor bl, bl
jmp 0x14003c1e2
cmp word [rsi + 2], r12w
jne 0x14003c150
mov r8, rax
lea rdx, [rbp + 0x8578]
call fcn.1400145f0
movzx ebx, al
jmp 0x14003c1de
movzx ebx, cx
test ebx, 0xffffff80
jne 0x14003c16e
mov edx, 2
mov ecx, ebx
call fcn.1400a9cf4
test eax, eax
je 0x14003c16e
and ebx, 0xffffffdf
cmp bx, 0x56
jne 0x14003c197
movzx ecx, word [rsi + 2]
call fcn.14000ad40
cmp ax, 0x4b
jne 0x14003c197
xor edx, edx
lea rcx, [rsi + 4]
lea r8d, [rdx + 0x10]
call fcn.1400ab190
movzx ebx, al
jmp 0x14003c1de
mov rdi, r12
lea rbx, str.Numpad0
lea r15, [0x1400fb210]
nop dword [rax + rax]
mov rcx, qword [rbx]
mov rdx, rsi
call fcn.1400a7150
test eax, eax
je 0x14003c1cf
inc rdi
add rbx, 0x10
cmp rbx, r15
jl 0x14003c1b0
xor bl, bl
jmp 0x14003c1e2
add rdi, rdi
lea rax, str.Numpad0
movzx ebx, byte [rax + rdi*8 + 8]
test bl, bl
jne 0x14003c1fa
mov rcx, rsi
call fcn.1400143d0
test ax, ax
je 0x14003c1fa
movzx eax, ax
mov byte [rbp + rax + 0x320], 1
mov edx, 0x7d
mov r15, r14
mov word [r14], dx
test bl, bl
je 0x14003c243
movzx ecx, word [rbp + 0x8580]
movzx ebx, bl
or byte [rbp + rbx + 0x120], 1
test cx, cx
je 0x14003c243
call qword [sym.imp.USER32.dll_IsCharAlphaW]
test eax, eax
jne 0x14003c003
test byte [rbp + 0x8578], 0x30
lea edx, [rax + 0x7d]
je 0x14003c24c
or byte [rbp + rbx + 0x120], 2
mov rbx, qword [rbp]
jmp 0x14003c00c
or byte [rbp + rbx + 0x120], 4
mov rbx, qword [rbp]
jmp 0x14003c00c
lea rdi, [r13 + 2]
mov rcx, rdi
call fcn.1400a56c8
mov rdx, rax
test rax, rax
je 0x14003c299
cmp rax, rdi
jne 0x14003c283
cmp word [rax + 2], 0x7d
lea rcx, [rax + 2]
cmove rdx, rcx
lea rax, [r13 + 4]
cmp rdx, rax
jne 0x14003c296
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 0x14003c081
mov word [rbx], r12w
mov dword [0x140103320], r12d
cmp word [r14], r12w
je 0x14003c495
cmp qword [0x140103318], r12
jne 0x14003c309
mov ecx, 0x2000
call fcn.1400a72c8
mov qword [0x140103318], rax
test rax, rax
jne 0x14003c2ff
mov rcx, qword [rbp + 0x8570]
lea rdx, str.Out_of_memory.
mov r9, r15
xor r8d, r8d
call fcn.140035680
jmp 0x14003c890
mov dword [0x140103324], 0x400
mov rdi, qword [rbp + 0x8570]
mov edx, 3
mov rcx, rdi
call fcn.140025330
mov ecx, dword [0x140103330]
inc rax
cmp rax, rcx
jbe 0x14003c38b
mov rcx, qword [0x140103328]
mov edx, 0x1000
cmp rax, rdx
cmova edx, eax
mov dword [0x140103330], edx
test rcx, rcx
je 0x14003c353
call fcn.1400ab1f0
mov edx, dword [0x140103330]
lea ecx, [rdx + rdx]
call fcn.1400a72c8
mov qword [0x140103328], rax
mov rdx, rax
test rax, rax
jne 0x14003c392
mov dword [0x140103330], r12d
mov r9, r15
lea rdx, str.Out_of_memory.
xor r8d, r8d
mov rcx, rdi
call fcn.140035680
jmp 0x14003c890
mov rdx, qword [0x140103328]
mov ecx, dword [0x140103320]
mov rax, qword [0x140103318]
mov qword [rax + rcx*8], rdx
mov rbx, qword [0x140103328]
cmp word [r14], r12w
je 0x14003c472
mov esi, 0x2c
nop dword [rax]
movzx eax, word [r14]
cmp ax, si
je 0x14003c3d5
mov word [rbx], ax
add rbx, 2
jmp 0x14003c464
cmp word [r14 + 2], si
jne 0x14003c3e9
mov word [rbx], si
add rbx, 2
add r14, 2
jmp 0x14003c464
mov word [rbx], r12w
mov ecx, dword [0x140103320]
mov r8, qword [0x140103318]
mov rax, qword [r8 + rcx*8]
cmp word [rax], r12w
je 0x14003c427
inc ecx
mov dword [0x140103320], ecx
add rbx, 2
mov eax, ecx
mov qword [r8 + rcx*8], rbx
mov word [rbx], r12w
mov ecx, dword [0x140103320]
mov r8, qword [0x140103318]
cmp word [r14 + 2], r12w
je 0x14003c464
mov eax, dword [0x140103324]
cmp ecx, eax
jb 0x14003c464
lea edx, [rax + 0x400]
mov rcx, r8
shl rdx, 3
call fcn.1400ab024
test rax, rax
je 0x14003c371
add dword [0x140103324], 0x400
mov qword [0x140103318], rax
add r14, 2
cmp word [r14], r12w
jne 0x14003c3c0
mov word [rbx], r12w
mov edx, dword [0x140103320]
mov rax, qword [0x140103318]
mov rcx, qword [rax + rdx*8]
cmp word [rcx], r12w
je 0x14003c495
inc edx
mov dword [0x140103320], edx
cmp byte [0x1400feb00], r12b
je 0x14003c4e2
mov rcx, qword [0x1400feeb0]
mov edx, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
call qword [sym.imp.USER32.dll_KillTimer]
movzx ecx, byte [0x1400feb00]
test eax, eax
cmovne ecx, r12d
mov byte [0x1400feb00], cl
mov ecx, reloc.OLEAUT32.dll_SafeArrayGetDim
call qword [sym.imp.USER32.dll_GetQueueStatus]
shr eax, 0x10
test al, 0x10
je 0x14003c4e2
mov edx, 1
or ecx, 0xffffffff
call fcn.1400016e0
xor edx, edx
lea rcx, [rbp + 0x520]
mov r8d, 0x8000
call fcn.1400a60e0
or byte [0x1400ffc76], 1
lea rax, [rbp + 0x520]
cmp qword [0x1400feed8], r12
mov qword [0x140103340], rax
lea rax, [rbp + 0x120]
mov qword [0x1401032f8], rax
lea rax, [rbp + 0x320]
mov qword [0x140103300], rax
mov dword [0x140103348], r12d
mov dword [0x1401032f0], 1
mov byte [0x1400feec4], 1
jne 0x14003c554
movzx edx, word [0x140101d40]
call fcn.140009610
mov eax, dword [rbp + 0x8588]
test eax, eax
jle 0x14003c5a0
cmp byte [0x1400feb00], r12b
jne 0x14003c5a0
mov ecx, 0xa
lea r9, [0x140004260]
cmp eax, ecx
cmovl eax, ecx
lea edx, [rcx + 2]
mov r8d, eax
mov rcx, qword [0x1400feeb0]
call qword [sym.imp.USER32.dll_SetTimer]
test rax, rax
setne byte [0x1400feb00]
nop word [rax + rax]
mov edx, 1
mov ecx, 0x8000012f
call fcn.1400016e0
mov ecx, dword [0x1401032f0]
cmp ecx, 1
je 0x14003c5a0
sub ecx, 2
je 0x14003c7ff
sub ecx, 1
je 0x14003c7f6
sub ecx, 1
je 0x14003c601
xor r9d, r9d
mov byte [rsp + 0x20], 1
or r8, 0xffffffffffffffff
cmp ecx, 1
mov rcx, qword [0x1400fee90]
je 0x14003c5f5
lea rdx, str.NewInput
jmp 0x14003c819
lea rdx, [0x1400e5f10]
jmp 0x14003c819
movups xmm0, xmmword [str.EndKey:]
xor edx, edx
lea rcx, [rbp + 0x30]
mov r8d, 0xf0
movaps xmmword [rbp + 0x20], xmm0
call fcn.1400a60e0
movzx eax, word [0x140103314]
test ax, ax
je 0x14003c63b
mov word [rbp + 0x2e], ax
lea rdx, [rbp + 0x20]
mov word [rbp + 0x30], r12w
jmp 0x14003c806
cmp byte [0x140103317], r12b
je 0x14003c6e3
xor edx, edx
lea rcx, [rbp + 0x220]
mov r8d, 0x100
call fcn.1400a60e0
or byte [rbp + 0x230], 0x80
call qword [sym.imp.USER32.dll_GetForegroundWindow]
test rax, rax
je 0x14003c67b
xor edx, edx
mov rcx, rax
call qword [sym.imp.USER32.dll_GetWindowThreadProcessId]
jmp 0x14003c67e
mov eax, r12d
mov ecx, eax
call qword [sym.imp.USER32.dll_GetKeyboardLayout]
cmp dword [0x1400feb04], r12d
mov edi, r12d
movzx ecx, byte [0x140103310]
mov rbx, rax
setne dil
xor edx, edx
call fcn.1400149d0
movzx ecx, byte [0x140103310]
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 0x14003c806
cmp byte [0x140103316], r12b
mov ecx, r12d
je 0x14003c749
movzx edx, word [0x140103312]
lea rax, [0x1400faa78]
lea r8, [0x1400fab48]
cmp word [rax], dx
je 0x14003c732
inc ecx
add rax, 0x10
cmp rax, r8
jl 0x14003c704
movzx r9d, dx
lea r8, str.sc_03X
mov edx, 0x79
lea rcx, [rbp + 0x2e]
call fcn.140087260
jmp 0x14003c7d9
movsxd rdx, ecx
lea rax, [0x140000000]
add rdx, rdx
mov rdx, qword [rax + rdx*8 + 0xfaa70]
jmp 0x14003c7c2
movzx ebx, byte [0x140103310]
lea rax, [0x1400fab48]
lea rdx, [0x1400fb218]
nop
cmp byte [rax], bl
je 0x14003c7b1
inc ecx
add rax, 0x10
cmp rax, rdx
jl 0x14003c760
movzx ecx, bl
call fcn.140014240
mov word [rbp + 0x2e], ax
test ax, ax
je 0x14003c787
mov word [rbp + 0x30], r12w
jmp 0x14003c7d9
test bl, bl
je 0x14003c7a6
movzx r9d, bl
lea r8, str.vk_02X
mov edx, 0x79
lea rcx, [rbp + 0x2e]
call fcn.140087260
jmp 0x14003c7d9
mov word [rbp + 0x2e], r12w
lea rdx, [rbp + 0x20]
jmp 0x14003c806
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.1400b0214
mov word [rbp + 0x11e], r12w
movzx eax, word [rbp + 0x2e]
sub ax, 0x61
cmp ax, 0x19
ja 0x14003c7f0
mov eax, 0xffe0
add word [rbp + 0x2e], ax
lea rdx, [rbp + 0x20]
jmp 0x14003c806
lea rdx, str.Match
jmp 0x14003c806
lea rdx, str.Timeout
mov rcx, qword [0x1400fee90]
xor r9d, r9d
or r8, 0xffffffffffffffff
mov byte [rsp + 0x20], 1
call fcn.14008a770
cmp byte [0x1400feb00], r12b
mov dword [0x1401032f0], r12d
je 0x14003c874
mov rcx, qword [0x1400feeb0]
mov edx, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
call qword [sym.imp.USER32.dll_KillTimer]
movzx r8d, byte [0x1400feb00]
mov ecx, reloc.OLEAUT32.dll_SafeArrayGetDim
test eax, eax
cmovne r8d, r12d
mov byte [0x1400feb00], r8b
call qword [sym.imp.USER32.dll_GetQueueStatus]
shr eax, 0x10
test al, 0x10
je 0x14003c874
mov edx, 1
or ecx, 0xffffffff
call fcn.1400016e0
mov rcx, qword [rbp + 0x18]
lea rdx, [rbp + 0x520]
xor r9d, r9d
mov byte [rsp + 0x20], 1
or r8, 0xffffffffffffffff
call fcn.14008a770
lea rsp, [rbp + 0x8528]
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbx
pop rbp
ret