Function at 0x40bb10
Capabilities:
Get keyboard layout

Disassembly:
sub esp, 0x214
push ebx
push ebp
mov ebp, dword [esp + 0x228]
push esi
push edi
mov esi, ecx
mov dword [esp + 0x14], 0
mov byte [esp + 0x13], 0
test ebp, ebp
je 0x40bb3d
lea eax, [ebp + 0x12]
mov dword [esp + 0x18], eax
jmp 0x40bb45
lea ecx, [esp + 0x1f]
mov dword [esp + 0x18], ecx
cmp byte [esp + 0x22c], 0
jne 0x40bb8d
mov edi, 0x49c14c
mov eax, esi
call fcn.00409380
mov edi, eax
test edi, edi
je 0x40bb8d
mov ecx, edi
mov al, byte [ecx]
cmp al, 0x20
je 0x40bb6d
cmp al, 9
jne 0x40bb70
inc ecx
jmp 0x40bb63
push 0x49ab68
push ecx
call fcn.00486ea1
add esp, 8
test eax, eax
jne 0x40bb8d
test ebp, ebp
je 0x40bb8a
mov byte [ebp + 0x16], 1
mov byte [edi], 0
push 0
call dword [sym.imp.USER32.DLL_GetKeyboardLayout]
push eax
lea edx, [esp + 0x17]
push 1
push edx
mov eax, esi
call fcn.004132e0
mov bl, al
add esp, 0xc
test bl, bl
je 0x40bcbc
cmp byte [esp + 0x22c], 0
je 0x40bc36
lea eax, [ebx + 0x64]
cmp al, 3
ja 0x40bc52
cmp byte [esp + 0x234], 0
je 0x40bbf4
mov ecx, dword [0x4acad0]
push 1
push 0
push 0xffffffffffffffff
push 0x49c150
push ecx
call fcn.00476c10
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x214
ret
push esi
push 0x49c154
mov esi, 0x200
lea edi, [esp + 0x2c]
call fcn.00473d20
mov edx, dword [esp + 0x230]
add esp, 8
push edx
mov eax, edi
push eax
mov ecx, 0x4ad268
call fcn.0042f2b0
test ebp, ebp
jne 0x40bd0f
pop edi
pop esi
lea eax, [ebp + 4]
pop ebp
pop ebx
add esp, 0x214
ret
test ebp, ebp
je 0x40bc52
push 2
push 0x49c17c
push esi
call fcn.00487920
add esp, 0xc
test eax, eax
sete cl
mov byte [ebp + 0x17], cl
lea edx, [ebx - 1]
cmp dl, 5
ja 0x40bc5f
cmp bl, 3
jne 0x40bc66
lea eax, [ebx + 0x66]
cmp al, 5
ja 0x40bc6a
mov al, 1
jmp 0x40bc6c
xor al, al
mov dl, byte [esp + 0x13]
test dl, 0x30
je 0x40bc80
lea ecx, [ebx - 0x41]
cmp cl, 0x19
ja 0x40bc80
and dl, 0xcf
test al, al
je 0x40bc8b
mov eax, dword [esp + 0x18]
mov byte [eax], 2
mov edi, dword [esp + 0x14]
cmp byte [esp + 0x22c], 0
je 0x40bdaa
test ebp, ebp
je 0x40bde2
mov word [ebp + 0xa], di
pop edi
pop esi
mov byte [ebp + 0x11], bl
pop ebp
mov eax, 1
pop ebx
add esp, 0x214
ret
mov eax, esi
call fcn.00413230
movzx edi, ax
test di, di
jne 0x40bda1
push 1
lea ebx, [esp + 0x24]
mov eax, esi
call fcn.0044ee40
movzx eax, ax
add esp, 4
mov dword [esp + 0x14], eax
test ax, ax
jne 0x40bd7c
cmp byte [esp + 0x234], al
je 0x40bd1c
mov edx, dword [0x4acad0]
push 1
push 0
push 0xffffffffffffffff
push 0x49c180
push edx
call fcn.00476c10
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x214
ret
cmp byte [esi + 1], 0
jne 0x40bd42
cmp byte [0x4ad880], 0
jne 0x40bd42
mov eax, ebp
neg eax
pop edi
sbb eax, eax
pop esi
and eax, 0xfffffffd
pop ebp
add eax, 3
pop ebx
add esp, 0x214
ret
test ebp, ebp
je 0x40bd6f
push esi
push 0x49c184
mov esi, 0x200
lea edi, [esp + 0x2c]
call fcn.00473d20
add esp, 8
push 0x49a8ad
mov eax, edi
push eax
mov ecx, 0x4ad268
call fcn.0042f2b0
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x214
ret
mov ecx, dword [esp + 0x18]
mov ebx, dword [esp + 0x20]
mov dl, byte [esp + 0x13]
mov eax, 1
add dword [0x4acb38], eax
mov byte [ecx], 4
mov byte [ebx + 0x4acb28], al
jmp 0x40bc8b
mov dl, byte [esp + 0x13]
jmp 0x40bc8f
test ebp, ebp
je 0x40bde2
mov al, dl
and al, 0xd5
xor ecx, ecx
mov byte [ebp + 0x10], bl
mov word [ebp + 8], di
test al, 0xc0
je 0x40bdc4
mov ecx, 8
test al, 0xc
je 0x40bdcb
or ecx, 1
test al, 0x30
je 0x40bdd2
or ecx, 4
test al, 3
je 0x40bdd9
or ecx, 2
or dword [ebp], ecx
and dl, 0x2a
or byte [ebp + 0xe], dl
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x214
ret