Function at 0x410bc4
Capabilities:
Log keystrokes via polling

Disassembly:
push ecx
push esi
mov esi, ecx
movzx ecx, word [esp + 0x18]
push edi
cmp byte [esi + 0xd4], 0
jne 0x410fc0
mov eax, dword [esp + 0x18]
cmp eax, 0x24
ja 0x410c3f
je 0x410c33
cmp eax, 8
je 0x410fb1
cmp eax, 0xd
je 0x410cf2
cmp eax, 0x1b
je 0x410c27
cmp eax, 0x20
je 0x410cf2
cmp eax, 0x23
jne 0x41102d
mov eax, dword [esi + 0xc8]
dec eax
add eax, dword [esi + 0xcc]
mov dword [esi + 0xd0], eax
jmp case.default.0x410d35
and dword [0xd93d88], 0
jmp case.default.0x410d35
and dword [esi + 0xd0], 0
jmp case.default.0x410d35
sub eax, 0x25
je 0x410fb1
sub eax, 1
je 0x410f27
sub eax, 1
je 0x410cf2
sub eax, 1
jne 0x41102d
and dword [esp + 0x18], eax
test ecx, ecx
je 0x410cb7
mov eax, dword [esi + 0xc8]
dec eax
add eax, dword [esi + 0xcc]
mov dword [esp + 8], eax
mov edi, dword [esi + 0xd0]
cmp edi, eax
je 0x410cb7
inc edi
mov dword [esi + 0xd0], edi
cmp edi, eax
jge 0x410ca1
push edi
mov ecx, esi
call fcn.0041139d
test al, al
mov eax, dword [esp + 8]
je 0x410c86
mov edx, dword [esp + 0x18]
movzx eax, word [esp + 0x1c]
inc edx
cmp edx, eax
mov dword [esp + 0x18], edx
mov eax, dword [esp + 8]
jl 0x410c7c
mov eax, dword [esi + 0xc8]
add eax, dword [esi + 0xcc]
mov edi, dword [esi + 0xd0]
cmp edi, eax
jl 0x410ce9
lea edi, [eax - 1]
jmp 0x410ce3
push edi
mov ecx, esi
call fcn.0041139d
test al, al
jne case.default.0x410d35
dec edi
mov dword [esi + 0xd0], edi
test edi, edi
jg 0x410cd2
jmp case.default.0x410d35
mov eax, dword [esi + 0xd0]
cmp eax, dword [esi + 0xc8]
jge 0x410d0e
mov eax, dword [esi + eax*4 + 4]
mov dword [0xdd2050], eax
jmp case.default.0x410d35
mov ecx, esi
call fcn.00410ba3
mov edi, eax
push 7
pop eax
mov edx, dword [edi + 0x898]
add edx, dword [0x554e84]
mov ecx, dword [edi + 0x880]
dec ecx
cmp ecx, eax
ja case.default.0x410d35
jmp dword [ecx*4 + 0x411354]
mov eax, dword [edi + 0x88c]
mov dword [0xd93d88], eax
push 0xa
pop esi
cmp eax, 9
je 0x410d61
cmp eax, esi
je 0x410d61
cmp eax, 0xb
je 0x410d61
cmp eax, 0xc
jne case.default.0x410d35
and dword [0xd93dc8], 0
xor eax, eax
and dword [0xd93dcc], 0
inc eax
or dword [0xd93dd8], 0xffffffff
push 0xdd4758
mov byte [0x554e6f], al
mov dword [0xd93dc4], eax
call fcn.004905ea
pop ecx
mov edi, 0xfe
mov ecx, edi
sub ecx, eax
mov eax, 0x176ff
cmp ecx, eax
jbe 0x410da7
mov dword [0xd93dd0], eax
jmp 0x410dba
push 0xdd4758
call fcn.004905ea
sub edi, eax
pop ecx
mov dword [0xd93dd0], edi
mov eax, dword [0xd93d88]
cmp eax, 9
je 0x410dd4
cmp eax, esi
je 0x410dd4
mov eax, str._sfile.shape
mov ecx, 0xdd4b68
jmp 0x410dde
mov eax, str._sfile.wave
mov ecx, 0xdd4960
push ecx
push eax
mov edi, 0xd93de0
push edi
call fcn.00411519
mov eax, dword [0xd93d88]
add esp, 0xc
cmp eax, 9
je 0x410dfd
cmp eax, 0xb
jne 0x410e00
push 9
pop esi
push 0x200
push 0xdab4e0
push esi
call fcn.0046f468
xor eax, eax
push edi
mov word [0xdab8e0], ax
call fcn.004905ea
add esp, 0x10
mov dword [0xd93dd4], eax
jmp case.default.0x410d35
cmp byte [edx], 0
sete al
mov byte [edx], al
jmp case.default.0x410d35
mov byte [esi + 0xd4], 1
mov eax, dword [edx]
mov dword [edi + 0x89c], eax
jmp case.default.0x410d35
mov byte [esi + 0xd4], 1
movss xmm0, dword [edx]
mulss xmm0, dword [0x4bfbec]
cvttss2si eax, xmm0
jmp 0x410e41
push ecx
mov ecx, edx
mov byte [esi + 0xd4], 1
mov dword [esp], 0xbf800000
call fcn.0046d0b6
fmul dword [0x4bfbec]
fstp dword [esp + 0x18]
cvttss2si eax, dword [esp + 0x18]
jmp 0x410e41
and dword [0xd93dc8], 0
mov ecx, 0x1ffe
or dword [0xd93dd8], 0xffffffff
mov esi, 0xd93de0
mov dword [0xd93d88], eax
xor eax, eax
inc eax
mov dword [0xd93dc4], eax
mov dword [0xd93dcc], eax
mov eax, dword [edi + 0x88c]
test eax, eax
push edx
cmovne ecx, eax
mov eax, 0x176f0
cmp ecx, eax
push esi
cmovb eax, ecx
mov dword [0xd93dd0], eax
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
push edi
push 0xb
call fcn.0046f448
pop ecx
push eax
push 0xdab4e0
call fcn.00411519
add esp, 0xc
lea eax, [edi + 0x80]
push eax
push 0xdab8e0
call dword [sym.imp.KERNEL32.dll_lstrcpyW]
push esi
call fcn.00492770
pop ecx
mov dword [0xd93dd4], eax
mov ecx, dword [edi + 0x8a0]
cmp ecx, eax
jge case.default.0x410d35
mov dword [0xd93dd4], ecx
jmp case.default.0x410d35
and dword [esp + 0x18], 0
test ecx, ecx
je 0x410f63
mov edi, dword [esi + 0xd0]
test edi, edi
je 0x410f63
dec edi
mov dword [esi + 0xd0], edi
test edi, edi
jle 0x410f51
push edi
mov ecx, esi
call fcn.0041139d
test al, al
je 0x410f3a
mov edx, dword [esp + 0x18]
movzx eax, word [esp + 0x1c]
inc edx
mov dword [esp + 0x18], edx
cmp edx, eax
jl 0x410f30
mov edi, dword [esi + 0xd0]
test edi, edi
jns 0x410f76
and dword [esi + 0xd0], 0
xor edi, edi
mov eax, dword [esi + 0xc8]
dec eax
add eax, dword [esi + 0xcc]
mov dword [esp + 0x18], eax
cmp edi, eax
jge case.default.0x410d35
push edi
mov ecx, esi
call fcn.0041139d
test al, al
jne case.default.0x410d35
inc edi
mov dword [esi + 0xd0], edi
cmp edi, dword [esp + 0x18]
jl 0x410f8f
jmp case.default.0x410d35
mov eax, dword [esi]
test eax, eax
je 0x410c27
jmp 0x410d04
movss xmm0, dword [0x4bc5a0]
mov edx, dword [esi + 0xc8]
mov ecx, dword [esi + 0xd0]
mov eax, dword [esi + 0x44]
movss dword [esp + 0x1c], xmm0
mov dword [esp + 8], eax
cmp edx, ecx
jge 0x410ff6
sub ecx, edx
mov eax, dword [eax + 0x8a8]
sub ecx, 1
jne 0x410fe7
mov dword [esp + 8], eax
mov edi, dword [eax + 0x898]
mov ecx, dword [esp + 0x18]
add edi, dword [0x554e84]
sub ecx, 0xd
je 0x411345
sub ecx, 0xe
je 0x4112d0
sub ecx, 6
je 0x411035
sub ecx, 1
je 0x411035
sub ecx, 4
je 0x411043
dec ecx
sub ecx, 1
je 0x411043
xor eax, eax
inc eax
jmp 0x41134e
movss xmm0, dword [0x4bfbe8]
movss dword [esp + 0x1c], xmm0
push 0x10
call dword [sym.imp.USER32.dll_GetKeyState]
test ax, ax
jns 0x41106e
cmp dword [esp + 0x18], 0x26
je 0x41105e
cmp dword [esp + 0x18], 0x28
jne 0x41106e
movss xmm1, dword [esp + 0x1c]
mulss xmm1, dword [0x4bfbd0]
jmp 0x411074
movss xmm1, dword [esp + 0x1c]
cmp dword [esp + 0x18], 0x28
je 0x411086
cmp dword [esp + 0x18], 0x22
je 0x411086
xor cl, cl
jmp 0x411088
mov cl, 1
mov esi, dword [esp + 8]
mov eax, dword [esi + 0x880]
dec eax
sub eax, 1
je 0x411279
sub eax, 1
je 0x41121c
sub eax, 1
je 0x4111dd
sub eax, 1
je 0x411162
sub eax, 1
jne case.default.0x410d35
cvtps2pd xmm0, xmm1
sub esp, 0x10
movsd qword [esp + 8], xmm0
test cl, cl
je 0x4110da
movsd xmm0, qword [0x4bfbd8]
jmp 0x4110e2
movsd xmm0, qword [0x4bfbe0]
movsd qword [esp], xmm0
call fcn.00492e10
fstp dword [esp + 0x28]
movss xmm0, dword [esp + 0x28]
add esp, 0x10
mulss xmm0, dword [edi]
mov byte [edi + 4], 0
push ecx
mov ecx, edi
movss dword [edi], xmm0
mov dword [esp], 0xbf800000
call fcn.0046d0b6
movss xmm0, dword [esi + 0x884]
fstp dword [esp + 0x18]
comiss xmm0, dword [esp + 0x18]
jbe 0x41112f
movss dword [edi], xmm0
mov byte [edi + 4], 0
push ecx
mov ecx, edi
mov dword [esp], 0xbf800000
call fcn.0046d0b6
fstp dword [esp + 0x18]
movss xmm0, dword [esp + 0x18]
movss xmm1, dword [esi + 0x888]
comiss xmm0, xmm1
jbe case.default.0x410d35
movss dword [edi], xmm1
jmp 0x41130e
movss xmm0, dword [esi + 0x888]
subss xmm0, dword [esi + 0x884]
mulss xmm0, dword [0x4bfbcc]
mulss xmm0, xmm1
test cl, cl
je 0x411189
xorps xmm0, xmmword [0x4bfbf0]
addss xmm0, dword [edi]
push ecx
mov ecx, edi
mov byte [edi + 4], 0
mov dword [esp], 0xbf800000
movss dword [edi], xmm0
call fcn.0046d0b6
movss xmm0, dword [esi + 0x884]
fstp dword [esp + 0x18]
comiss xmm0, dword [esp + 0x18]
jbe 0x4111bf
movss dword [edi], xmm0
mov byte [edi + 4], 0
push ecx
mov ecx, edi
mov dword [esp], 0xbf800000
call fcn.0046d0b6
fstp dword [esp + 0x18]
movss xmm0, dword [esp + 0x18]
jmp 0x411148
cvtps2pd xmm0, xmm1
sub esp, 0x10
movsd qword [esp + 8], xmm0
test cl, cl
je 0x4111f7
movsd xmm0, qword [0x4bfbd8]
jmp 0x4111ff
movsd xmm0, qword [0x4bfbe0]
movsd qword [esp], xmm0
call fcn.00492e10
fstp dword [esp + 0x28]
movss xmm0, dword [esp + 0x28]
add esp, 0x10
mulss xmm0, dword [edi]
jmp 0x411247
movss xmm0, dword [esi + 0x888]
subss xmm0, dword [esi + 0x884]
mulss xmm0, dword [0x4bfbcc]
mulss xmm0, xmm1
test cl, cl
je 0x411243
xorps xmm0, xmmword [0x4bfbf0]
addss xmm0, dword [edi]
movss dword [edi], xmm0
movss xmm1, dword [esi + 0x884]
comiss xmm1, xmm0
jbe 0x41125f
movss dword [edi], xmm1
movaps xmm0, xmm1
movss xmm1, dword [esi + 0x888]
comiss xmm0, xmm1
jbe case.default.0x410d35
movss dword [edi], xmm1
jmp case.default.0x410d35
movss xmm0, dword [0x4bc5a0]
maxss xmm0, xmm1
test cl, cl
je 0x411290
xorps xmm0, xmmword [0x4bfbf0]
cvttss2si eax, xmm0
add dword [edi], eax
mov eax, dword [edi]
movss xmm1, dword [esi + 0x884]
movd xmm0, eax
cvtdq2ps xmm0, xmm0
comiss xmm1, xmm0
jbe 0x4112b2
cvttss2si eax, xmm1
mov dword [edi], eax
movss xmm1, dword [esi + 0x888]
movd xmm0, eax
cvtdq2ps xmm0, xmm0
comiss xmm0, xmm1
jbe case.default.0x410d35
cvttss2si eax, xmm1
jmp 0x411341
mov ecx, dword [eax + 0x880]
dec ecx
sub ecx, 1
je 0x411334
sub ecx, 1
je 0x411314
sub ecx, 1
je 0x411314
sub ecx, 1
je 0x4112f0
sub ecx, 1
jne case.default.0x410d35
mov byte [esi + 0xd4], 0
movd xmm0, dword [eax + 0x89c]
cvtdq2ps xmm0, xmm0
mulss xmm0, dword [0x4bfbc8]
movss dword [edi], xmm0
mov byte [edi + 4], 0
jmp case.default.0x410d35
mov byte [esi + 0xd4], 0
movd xmm0, dword [eax + 0x89c]
cvtdq2ps xmm0, xmm0
mulss xmm0, dword [0x4bfbc8]
movss dword [edi], xmm0
jmp case.default.0x410d35
mov byte [esi + 0xd4], 0
mov eax, dword [eax + 0x89c]
mov dword [edi], eax
jmp case.default.0x410d35
mov byte [esi + 0xd4], 0
xor eax, eax
pop edi
pop esi
pop ecx
ret 0x10