Improved blocking. Added way of selective blocking

This commit is contained in:
Jesse James Isler 2022-06-24 10:07:27 +02:00
parent cc971dd1bc
commit d6b16b4f6d
2 changed files with 94 additions and 208 deletions

0
scripts/settings.js Normal file
View File

View File

@ -1,214 +1,100 @@
// Yep, that's it. Just 5 lines of code. That's my module. Not more, not less...
// Thank you for coming to my ted talk
// Fire this event, once, ANY key is pressed.
window.addEventListener("keydown", (e) => {
// Define a new setting which can be stored and retrieved
// Now. Look, if it's a keyboard combination.
// e.ctrlKey is obviously the Control key
// e.altKey is obviously the Alt Key
// e.keyCode binds directly to whatever key is currently beeing pressed
// !isNan("Something") tests, if "Something" is a number. [NaN, Not a Number ;)]
if (e.ctrlKey && !isNaN(e.keyCode) || e.altKey && !isNaN(e.keyCode) ) {
// e.stopPropagation(); disables the shortcuts in the browser...
// gonna be honest, didn't read the docs... copy, paste and pray.
// https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation
e.stopPropagation();
// e.preventDefault(); disables the shortcuts in the browser....
// gonna be honest, didn't read the docs... copy, paste and pray.
// https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault
e.preventDefault();
}
})
// This works for Chrome. It works for Mozilla... I guess? I dunno why you read this but ye :)
// Since this module is quite short, have some ascii art. (Have fun zooming lol)
//This hook allows us to only register the settings AFTER the settings are available. (Cant have a sword without a grip...)
Hooks.on("init", async function() {
const heldKeys = [];
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// @@&PJYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYJP@@@
// @@&! !&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 7&@@
// @@&7 .:.:~~^:: 7&@@
// @@&7 .~7?JJYJ7~?Y555J77?7~. 7&@@
// @@&7 ..:^~~!7?JJ??J5GBGY?!~~^^^^~~~~7JYPGBGY!^:. :^. . .. 7&@@
// @@&7 ..:^~!?Y5PPGGGBGGP555G##G5J7~^^^^^^^^^^^^^^^^^~!JPB##GY7: ...:::^^~~!!~!!!!!!!7777777??JJJY5PPG##P5PPPGBGPPPPGGBBP5555YJJ?7!~::... 7&@@
// @@&7 .::~?J5PGGBBBBBPYJJ?777?JY5PPJ7~^^^^^^^^^^^^^^^^^^^^^^^^^^~!?5B#BP??J?!~~~75GGGGBBBBGPGGGB###BBBBBGGPP5555PP5PGPYYJYYY5YYJJYYYY5YYYYY5555PGBBBBGGGGGPYJ?7!^:.... 7&@@
// @@&7 .:^!7?J5PGGGPPPP5YJ?77777!!!7?YPBBP5?!~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!75GBBGY7?5P55PPPPGGG5??77777777777!!!!!!!!!!!!7!!!!!!!!!!!7!!!!!!!!!!!!!!!!7777??JY5PG#BB#BBGBBGP5YJ?7!^. 7&@@
// @@&7 :~7JPGB#BBGP5YJ?777!!!!77777!!7J5B#B5?!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!J5GBY~^^~!7??JY55YY555Y?777!77777777777777777777777777777777777777777777777777!!!77777??JYY5PGGGP5PP5Y!:. 7&@@
// @@&7 :!J5GBBGP5J?777!!!!777777777777!7JPBB5?!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!JB#Y~^^^^^^^^^^~~7J5PPGB5J777777777777777777777777777777777777777777777777777777777777!!!!!777????YPGPY!:. 7&@@
// @@&7 .::~7YPGGPYJ?7!!!!77777777777777!!!!7?YGB57~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~?B#?^^^^^^^^^^^^^^^~!?5GBBBP?7!77777777777777777777777777777777777777777777777777777777777777777!7?J5P5J7!~. 7&@@
// @@&7 ^JPGGG5Y?77!!7777777777777777777?JYYY5PGP?~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~YG?^^^^^^^^^^^^^^^^^^^!Y5PBB5J77!77777777777777777777777777777777777777777777777777777777777777777!!77?JPY: 7&@@
// @@&7 :5BY?77!!77777777777777777777!!?P##GJ7!~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?PJ~^^^^^^^^^^^^^^^^^^^^^!?5GGP5J7!!777777777777777777777777777777777777777777777777777777777777777777!7PJ. 7&@@
// @@&7 .J#Y!7777777777777777777777777JPGY7~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?Y!^^^^^^^^^^^^^^^^^^^^^^^^~!?5PGPJ7!!7777777777777777777777777777777777777777777777777777777777777777755~ 7&@@
// @@&7 7#G77777777777777777777777!7JB#5~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~!^^^^^^^^^^^^^^^^^^^^^^^^^^^^~!?5GPY7!!77777777777777777777777777777777777777777777777777777777777777J57 7&@@
// @@&7 .Y&J!77777777777777777777!7YGBY!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~Y#&B57!777777777777777777777777777777777777777777777777777777777777?5?: 7&@@
// @@&7 :P&J7777777777777777777!75BBJ!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~?5##5?!77777777777777777777777777777777777777777777777777777777775BJ: 7&@@
// @@&7 ~B&Y77777777777777777!75##J~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~JB&G?!7777777777777777777777777777777777777777777777777777777!Y&5: 7&@@
// @@&7 7&#7777777777777777!7Y#&5!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?G#P?!77777777777777777777777777777777777777777777777777777!5&5^ 7&@@
// @@&7 ?@#77777777777777!75##5!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!5#P7!777777777777777777777777777777777777777777777777777!Y&5: 7&@@
// @@&7 :G@P77777777777!7?P##Y~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?B#J!777777777777777777777777777777777777777777777777777P&5. 7&@@
// @@&7 7&P!7777777!!?P##G?~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~5&Y!7777777777777777777777777777777777777777777777777J&#? 7&@@
// @@&7 .5#?777!!7?YPBGY!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?BP7!7777777777777777777777777777777777777777777777!Y&B~ 7&@@
// @@&7 ^P5!7?JPBBGY!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!G#Y77777777777777777777777777777777777777777777777G&Y. 7&@@
// @@&7 .:?BGGPG5?~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~P@BJ!777777777777777777777777777777777777777777!?&B~ 7&@@
// @@&7 ..:^~7J5PBBP5J!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?P&#J!77777777777777777777777777777777777777777!P@J. 7&@@
// @@&7 .:~75GB##BGPY?7!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!GB5?777777777777777777777777777777777777777!J&P: 7&@@
// @@&7 :^:^!?JYPGB##BP5J7!~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!7~^^^^^^^^^^^^^^^^^^^^7BGJ!!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~YBBJ77777777777777777777777777777777777777!P&! 7&@@
// @@&7 .:!YPB##BGPY?7~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!Y7^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~YP5!^^^^^^^^^^^^^^^^^^^!GB?JGGJ~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~5&B7!7777777777777777777777777777777777777#P: 7&@@
// @@&7 ~5G5J!~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~~^^^^^^^^^^^7G#P?~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?PGBP!^^^^^^^^^^^^^^^^^^!BP:.^?PB57^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~J&G?77777777777777777777777777777777777!P&! 7&@@
// @@&7 :!J5PP5J?7!~^^^^^^^^^^^^^^^^^^^^^^^~!!^^^^^^^^^^^^^^^^^^!5?^^^^^^^^^^^J#P5B?^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^7G#PJ#P^^^^^^^^^^^^^^^^^^J@Y.....~5#G?~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Y@P!777777777777777777777777777777777!J&Y. 7&@@
// @@&7 .!JYPBBBBGPYJJJ7!!!!~!!!7???JJYPB5!^^^^^^^^^^^^^^^^^^~G5^^^^^^^^^^^5&J7#5^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!G@P^:P&?^^^^^^^^^^^^^^^^7&B^.......^J##J~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~B&?777777777777777777777777777777777?#G: 7&@@
// @@&7 .^~7?YPGBBB#####B##BBG5Y5B&BJ~^^^^^^^^^^^^^^^^^^^^5#7^^^^^^^^^~G@J~B&7^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!B@P^..7&G^^^^^^^^^^^^^^^~G&!..........~5&#J~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~5@P777777777777777777777777777777777BB~ 7&@@
// @@&7 ...:^^^^^^^::. ^5&G7^^^^^^^^^^^^^^^^^^^^^^^!BG~^^^^^^^^~G@?.?&B~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^7#@J:...~B&7^^^^^^^^^^^^^~G@J.............^P&BJ~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~JB#Y!777777777777777777777777777777G&! 7&@@
// @@&7 :Y&#?^^^^^^^^^^^^^^^^^^^^^^^^^7B&J^^^^^^^^~G@J..Y@B!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?&&?.....:P@Y^^^^^^^^^^^^~P@Y:.........^~....J&&P7~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^7G&B777777777777777777777777777777G&? 7&@@
// @@&7 7B@5~^^^^^^^^^^^^^^^^^^^^^^^^^!GGBBJ~^^^^^^~G@?..:Y@B!^^^^^^^^^^^^^^^^^^^^^^^^^^~5@#!......:5@G~^^^^^^^^^^~P@Y.......^7Y5Y!...:JPP#G?^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!5#&J!777777777777777777777777777G&J. 7&@@
// @@&7 .J&&J^^^^^^^^^^^^^^^^^^^^^^^^^^^J&BG&@BPPPP5Y5&&J:...Y@G~^^^^^^^^^^^^^^^^^^^^^^^^7B@B7........Y@B~^^^^^^^^^!G@Y. .:~?5GPY7^.....~BY^Y#5~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~P#@5!77777777777777777777777777P#J. 7&@@
// @@&7 ^P@&Y^^^^^^^^^^^^!!^~7~^^^^^^^^~?#@&BG&@#5J?YYYG@&#BPJ7P@B!^^^^^^^^^^^^^^^^^^^^^~Y&@G~.........?&&7^^^^^^^^!B@5!?5GBG5?~:........7#Y^^YBY~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~5#@57!!77777777777777777777777PB?. 7&@@
// @@&7 ~B@#J~^^^^^^^^^^^^Y#5?!^^^^^^^^^?B@B!..!##7^^^^^?@5~!J5G#@@B7^^^^^^^^^^^^^^^^^^~?B@&5^ .........7B@Y^^^^~~7J#@@#BPJ!^............:5B7^^^JPY~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^J#&BPPY7!77777777777777777777P&P^ 7&@@
// @@&7 7#@G!^^^^^^^^^^^^^!P&G7^^^^^^^^^^^J@5....?#G?~^^^!&P.....~?G@&Y^^^^^^^^^^^^^^^^^J&@@#PYYYYYJ?7777Y#&B55PB##&@@B?~:................!GY^^^^^~7!^^^^^^^^^^^^^^^^~^^^^^^^^^^^^^^^^^!BP77JGG5J7!77777777777777!?B&J: 7&@@
// @@&7 ?&&Y~^^^^^^^^^^~!JPGB&5^^^^^^^^^^^^P@Y.....?&BY!^^^PP:......:J&@P!^^^^^^^^^^^^^!P@#?~!?YY55PG&@@@@@@@@&##GB@@@@#?:.................JBJ^^^^^^^^^^^^^^^^^^^^^^^^7!^^^^^^^^^^^^^^^^^PP77777JGBPJ7!7777777777!J#&J. 7&@@
// @@&7 .Y@#?^^^^^^^^^~?5GBP7~P&?^^^^^^^^^^^!##Y^.....7BGYJ?J##7:.......~G@#J^^^^^^^^^^~Y&&Y:. .:~?YPGGPYJ?75&P~..!B@P!!YB#5!..............:PB?^^^^^^^^^^^^^^^^^^^^^^^~Y7^^^^^^^^^^^^^^^^^YP77777!7B@@B5J7!!77777!Y&B?: 7&@@
// @@&7 :5@B!^^^^^^^~75#&G?^..:5&?^^^^^^^^^^^7&GJJ^..^?YG&@&#BGB#GGPJ!:...^Y#@5!^^^^^^!Y#@P~...^?PBG5J!^......?BJ.^P@&Y:....?&&J.............!#G!^^^^^^^^^^^^^^^^^^^^^^^~5Y~^^^^^^^^^^^^^^^^J?7777777?5#&&##GPY7!7?G&5~ 7&@@
// @@&7 :P@#!^^^^^^~JB&#Y~. :^:.P@J^^^^^^^^^^^~?!!P7:?#@G?~!JYYYJ7^~?5GBP?:..:?B&5!^~7P&#5!....^??7^...........^JYP&#5!.......~B@J............Y&J^^^^^^^^^^^^^^^^^^^^^^^^^J5~^^^^^^^^^^^^^^^^J?77777777!7Y##BB##PYPB5~. 7&@@
// @@&7 .5@B7^^^^^7P&&P!. .:. ^B@J^^^^^^^^^^^^^^~YPG@G!......:^:......^75PY^...7GB55BBJ^.......... .:.........^77?7^..........~#@?..........^GP~^^^^^^^^^^^^^^^^^^^^^^^^^?PJ~^^^^^^^^^^^^^^^?77777777777!JB#Y^^7Y5?: 7&@@
// @@&7 .Y@P~^^^!JB#BY~ :P@5^^^^^^^^^^^^^^^Y@&J:...................^~:.....~PBJ:...........:7PBGJ^.......................!##~.........?#?^^^^^^^^^^^^^^^^^^^^^^^^^^?G5!^^^^^^^^^^^^^^^J777777777777!7JPGY~. 7&@@
// @@&7 .J@G~^~?G&BY^. 7##7^^^^^^^^^^^^^^G@J...........~?5J!:.............::............~G&P?YB#P~......................5@J........^GG~^^^^^^^^^^^^^^^^^^^^^^^^^^?P57^^^^^^^^^^^^^^~5J7777777777777!!?5BBJ: 7&@@
// @@&7 7&G~~Y#&P!. :?GBJ^^^^^^^^^^^^~B@J.........:5#PYP#B7..........................Y@P7?77Y#&7.....................?&5........J#Y~^^^^^^^^^^^^^^^^^^^^^^^^^^7G5?^^^^^^^^^^^^^^!G?7777777777777777!7YBB57: 7&@@
// @@&7 ^YY75#BJ^ .!JP#Y^^^^^^^^^^^~B@5:........7&G777?G&7.........................?#YY#BJ7?#&7....................7&P:......!B#?^^^^^^^^^^^^^^^^^^^^^^^^^^^~5P57^^^^^^^^^^^^^JP7777777777777777777!7JG&#P?~: 7&@@
// @@&7 .?PGBP7. ^7P&G!^^^^^^^^^^Y@B^........7#5JB#Y7G#!........................?&55@@#Y7J##~...................J@J......:P#5~^^^^^^^^^^^^^^^^^^^^^^^^^^^^?GP7^^^^^^^^^^^^^Y577777777777777777777777?J5PBG5J7!. 7&@@
// @@&7 .7G57^ ~P@B7^^^^^^^^^~B@?........J&PY&@&Y?#B^.......................?&YY&@@BJ?P@P:.................!&B^......J#G!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~PG!^^^^^^^^^^^^^!?777777777777777777777777!!!7?J5GB! 7&@@
// @@&7 .!?~. ~5&&Y~^^^^^^^^J@B!.......Y@GJB@@B?Y&Y.......................!#PJB@@&5JY##~................!#B^......!BBJ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~GB?^^^^^^^^^^^^^??777777777777777777777777777777!J#7 7&@@
// @@&7 . :7G@B7^^^^^^^7#@#~......7&G?5&@&5J##~......................^B#YP&@&PY5B#7...............?&B~......:P#5!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^5#?^^^^^^^^^^^^^7?77777777777777777777777777777!?BY. 7&@@
// @@&7 .^J#&P!^^^^^7GG&#~......Y&5JB@#PYG#!.......................Y&5YPBG5Y5#&!.............^P&5:......:5&P7^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Y@Y^^^^^^^^^^^^^^~~!7J5Y?777777777777777777777!JB5. 7&@@
// @@&7 .!5&&J~^^^!BJ!#G^.....:P&G5PP55&B^.......................~#&P55PPB&#?:...........^Y#P~........J&G!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?@5~^^^^^^^^^^^^^^^^^^~7JYYY?7!!777777777777!JG#Y. 7&@@
// @@&7 :7P&B?^^!#P.^PY:......!PBBBBGY^.........................!5B&&#BP?:...........:JG5~.........?&B!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!&B!^^^^^^^^^^^^^^^^^^^^^~~7J55YJ7!777777!7?G&G?: 7&@@
// @@&7 .!5B5!7#G:..:.........:^^:..............................:~~^:..............:^:..........J@B!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~BB~^^^^^^^^^^^^^^^^^^^^^^^^^~7YGGPJ7!!7?YG#G7: 7&@@
// @@&7 ^?5G&B^............................................................................:5@G~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^G#~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!JPGGP5YY7^. 7&@@
// @@&7 .7&B:...........................................................................~G&J^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^5&7^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!JPGY~ 7&@@
// @@&7 .^Y&5:.................!J!:.....................................................?#G!^^^^^^^^^^^^^^^^~7??!^^^^^^^^^^^^^^^^^^^?@Y^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~?PG?^ 7&@@
// @@&7 :755G#?..................:75G57:................................................~P#J^^^^^^^^^^^^^^~!JPBY7~^^^^^^^^^^^^^^^^^^^^!&5^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^75GY~ 7&@@
// @@&7 :JBBY!JP~.....................:~~...............................................:?BP!^^^^^^^^^^^!7YGB#BBP~^^^^^^^^^^^^^^^^^^^^^^~GG~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~755!. 7&@@
// @@&7 :Y#BY!^^~5?......................................................................~5G?^^^^^~~!7?YP#&#GY557?G?^^^^^^^^^^^^^^^^^^^^^^^Y#!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?GP7: 7&@@
// @@&7 .JB57~^^^^^?BY:..................................................................^5##5JY5PGBB#&&&#GJ!:^JY!^^5P~^^^^^^^^^^^^^^^^^^^^^^J&?^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~7YY7: 7&@@
// @@&7 !GG7^^^^^^^^^!GG!.................................................................:!!!7?JJJJ7!!!~^:..~YGP!^^^!#Y^^^^^^^^^^^^^^^^^^^^^^?&5^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~7J?: 7&@@
// @@&7 .J&5~^^^^^^^^^^^~5&Y:............................................................................. .~YP57^^^^^^5&?^^^^^^^^^^^^^^^^^^^^^7&P~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~?Y! 7&@@
// @@&7 !B&J^^^^^^^^^^^^^^^?BB?:...........................................................................~JP5?~^^^^^^^^~G#7^^^^^^^^^^^^^^^^^^^^!#5^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~5? 7&@@
// @@&7 .Y@B7^^^^^^^^^^^^^^^^^~5&B?^...............:!!~^:................................................:!JPGY!^^^^^^^^^^^^!#B!^^^^^^^^^^^^^^^^^^^~#P^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!?Y! 7&@@
// @@&7 ~G@P~^^^^^^^^^^^^^^^^^^^^75#BY~.............:?5PPPP5J7!^.......................................:!YGG57~^^^^^^^^^^^^^^^J@B!^^^^^^^^^^^^^^^^^^~G5^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~!?55?: 7&@@
// @@&7 7&#?^^^^^^^^^^^^^^^^^^^^^^^^!JGBP7:..............:^~!?Y5PPJ~.................................:!YBBPJ!^^^^^^^^^^^^^^^^^^^J&P^^^^^^^^^^^^^^^^^^~GP^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~!7?5GGPYJ7^ 7&@@
// @@&7 !&B!^^^^^^^^^^^^^^^^^^^^^^^^^^^~75GGY~...................:~YGG7............................^75GG5J7~^^^^^^^^^^^^^^^^^^^^^^J&P~^^^^^^^^^^^^^^^^~GP^^^^^^^^^^^^^^^^^^^^~^^~~~~~~!77????JY5PGG5J?!:. 7&@@
// @@&7 ~G5~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~?P#GJ~...................:~~........................:!J55YJ7~^^^^^^^^^^^^^^^^^^^^^^^^^^^7#B7^^^^^^^^^^^^^^^~BP^^^^^^^^^^^^^^^^^^^^?GY???JY5555YJ?!!~^:.. 7&@@
// @@&7 ^GY^^^^^^^^^^^^^~~!~!JJ!^^^^^^^^^^^^^^~?5B&BY!:.....................................:~7YG#&B7^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!G&J^^^^^^^^^^^^^^~#P^^^^^^^^^^^^^^^^^^^^~YG! .... 7&@@
// @@&7 :55~^^^^^^^^^~7YPBBG5PPJ~^^^^^^^^^^^^^^^^^~7YB&#PJ~:............................:~7JP###BJ75J^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^J#G7^^^^^^^^^^^^?@5^^^^^^^^^^^^^^^^^^^^^^?BJ. 7&@@
// @@&7 7G!^^^^^^!JPB#BPY7^:7?~^^^^^^^^^^^^^^^^^^^^^^^!YB&&#GY!:...................:~7YG#&&BPJ!^. ^PJ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!P&G7^^^^^^^^^^5@?^^^^^^^^^^^^^^^^^^^^^^^7#G^ 7&@@
// @@&7 ?Y^^^!?PB#B5?~. :Y5!^^^^^^^^^^^^^^^^^^^^^^^^^^~?YG#&BPJ!^:........:^^!?5B#BG5J!^:......~5!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Y#@G?~^^^^^^~B#!^^^^^^^^^^^^^^^^^^^^^^^^7&G^ .. 7&@@
// @@&7 7Y7JG&#G?^. .7GP7^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~7YPB##BG5YYJJ5PGBBP5J!^:............~J~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!YB@#Y!^^^^J@P~^^^^^^^^^^^^^^^^^^^^^^^^^?&G^ :7J!:. 7&@@
// @@&7 !GBBP7: .YBY~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~7JP#G5Y?7!~^:..................~J^^^^^~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^?P&&BY7!P#?^^^^^^^^^^^^^^^^^^^^^^^^^^^?&Y. .::^~!77?JJJYJJ?7!?YYJ7^. 7&@@
// @@&7 :~^: ~GB7^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~YJ..........................:5Y!!?Y55YJ7!JY~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~JGBBB&P~^^^^^^^^^^^^^^^^^^^^^^^^^^^^JB!^?YYYY555YYYJJ?77!!~~^^^:::^7Y5J7^. 7&@@
// @@&7 .Y&G!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^YP:..........................Y&J~~^:. ^GY^^^^^^^^^^^^^^^^^^^^^^^^^~~^^^^^^^^~~7?~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^YB?77!!~^^^:::::::::::::::::::::~?5GPY7: 7&@@
// @@&7 .. ^G&Y^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~!77PB!..........................!#Y !#Y^^^^^^^^^^^^^^^^^^^^^^^^~PPYJ7~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~P5::::::::::::::::::::::::::::::::^!JPP5?~. 7&@@
// @@&7 .^!!!: !##?^^^^^^^^^^^^^^^^^^^^^^^^^~~^^^^^^^^^7P#BG#&J...........................?5~ J&J^^^^^^^^^^^^^^^^^^^^^^^^P&J7YP5Y?7~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^7B7:::::::::::::::::::::::::::::::::::^!?5PY7^. 7&@@
// @@&7 :~?YGGP5Y5555YYYYYYYYYYYYY?5&#7^^^^^^^^^^^^^^^^^^^^^^^^JB?^^^^^^~JP57^.^PB7...........................~JJ: .5&5~^^^^^^^^^^^^^^^^^^^^^^J&?::^!?Y5GGP5Y?!!~^^^^^^^^^^^^^^^^^^^^^^^^^^^PJ:::::::::::::::::::::::::::::::::::::::~?5P5?^. 7&@@
// @@&7 :~JPP5?!~~~~!!!7777??????J?J??75@G~^^^^^^^^^^^^^^^^^^^^^~75&&7^^^^^!5G?. :Y#P^........................^?YY!. .?#B?^^^^^^^^^^^^^^^^^^^^^7&J:::::::^!7JY5PPPP555YJJ?7!!!!~~~~~~~~~~~~~!5!::::::::::::::::::::::::::::::::::::::::::^~?Y5J~. 7&@@
// @@&7 :!5GGY7~::::::::::::::::::::::::::7&5^^^^^^^^^^^^^^^^^^~!?YP5?YG~^^^~?PP7. ^B#7......................:7YP5!. ^P&G?^^^^^^^^^^^^^^^^^^^!#Y::::::::::::::^^~~!!7?JJJJJYYYYYYYY5555YYJ7~:::::::::::::::::::::::::::::::::::::::::::::::~?Y5Y7: 7&@@
// @@&7 .~YGPJ!^:::::::::::::::::::::::::::::!#Y^^^^^^^^^^^^~!7?Y555J!~::YY^^^7PBP! :PB~....................~YBBY~. ^JBGY!^^^^^^^^^^^^^^^^~BY::::::::::::::::::::::::::::::::::^^^^^^^:::::::::::::::::::::::::::::::::::::::::::::::::::::^!J55?^ 7&@@
// @@&7 .^?55J!:::::::::::::::::::::::::::::::::!#Y^^^^~~~~!?J555YJ7~^:::::^P!^!5&#J: .?BY.................:7G#G?^ .!5GGJ!~^^^^^^^^^^^^^G5:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^!YPP?: 7&@@
// @@&7 .^7557~::::::::::::::::::::::::::::::::::::^YYJYYYJ??JY?7~^::::::::::^YBJ5&#Y^ .5&?..............!Y#BY~ .~?PGJ7~^^^^^^^^^^PP^:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^7YPY7^ 7&@@
// @@&7 :JPY7^::::::::::::::::::::::::::::::::::::::::~~~~^^^^:::::::::::::::^J&&#P?^ ^G&?..........^JB#P7. :JGPPGP5Y7~^^^^^^Y5^::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^!JYJ~ 7&@@
// @@&7 .^7?7^::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::?#G?: ^P&?......:!5##Y^ ^YGP55555PGBGY?7!~~YJ:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^^~!7JJ???7^ 7&@@
// @@&7 ~PJ^:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^^!GP: .Y&Y^..~?PBGJ: .?PGP5555555555PPGGGGGPYJJ?7^::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^!?J555Y?!^: 7&@@
// @@&7 .!7^:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^7YYYBG~ ~5PYYP5J!: ~5GP5555555555555555555555Y?7??7!^:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^~?5P5J7~: 7&@@
// @@&7 !J!::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^755555G#7 ^JJ~^^. :JGP555555555555555555555P57^~!7JP#GY!^:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^!JPBP?^. 7&@@
// @@&7 :JGY~::::::::::::::::::::::::::::::::::::::::::::::::::::^~!7?YGBP55555&P: .!YY??~. !GG5555555555555555555555BP~ :..::^!YGG57~^::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::^~?PBGJ!: 7&@@
// @@&7 .~5G5!:::::::::::::::::::::::::::::::::::::::^^~!!777?J5PP5?!5B5555555G@Y. !55YYYYYY~ ^YBP5555555555555555555555GG^ .~Y#&BY7~^^^:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::~7YGG5?^. 7&@@
// @@&7 .!PBP7:::::::::::::::::::::::::::::^^~!7?J5PP5J??J5PPY!: ?G555555555#&! ~YG5YYYYYYYGJ: .?BG5555555555555555555555YPB! :?P##BPYJJJ?7!~~^:::::::::::::::::::::::::::::::::::::::::::::::^!JPBPJ!: 7&@@
// @@&7 .. .!P#G7:::::::::::::::::::::^~!J5PPP5YJ7!~:.:7YPG5!: .?#P555555555P&P: !5P5YYYYYYYYYYGG7. ^5BP555555555555555555555555#J. ^JGGP7^~7?YPGPP5YJ7!~^::::::::::::::::::::::::::::::::::::^75BB5!: 7&@@
// @@&7 :75PPJ7!~:. .!5#G7^::::::::::^^!7?YPPGP5Y?~:. .?BB57^ .J&P55555555555P#J ~5P5YYYYYYYYYYYYY5GP7. .JBG5555555555555555555555555BB^ .7P#B7 .::~77JY5PGP5Y?!~^:::::::::::::::::::::::::^!JPBGJ~. 7&@@
// @@&7 :7YP##Y~:.~?JY5J!: ~YBBJ~::::~7YPGGPPY?!^:. ^G#?. 7BG5555555555555P#?. ~5G5YYYYYYYYYYYYYYYYY5GP?: ~GB55555555555555555555555555G#?. ^J?GB~ :^!?JYYYYY555YJ?7!!~^^^:::::::::~?PG57^ 7&@@
// @@&7 ^Y#&@B?^~~: .^?GBP?: :?PGYJY555J!^:. ^G#! !PP555555555555555P#?. ^YGPYYYYYYYYYYYYYYYYYYYYY5GGJ~. .?BG555555555555555555555555555#P^ .::Y&Y. ..:^~!7?J555P5YYYYJ?7!~!5GJ~. 7&@@
// @@&7 ~?YY7Y##GPY: ~?YY!. .^JGBY~. :J5Y7:. ^P&J ~PG55555555555555555PP! :YPYYYYYYYYYYYYYYYYYYYYYYYYY5PP5?^. :5#G555555555555555555555555555G#7 !#&7 ...::^~!!77?J?!: 7&@@
// @@&7 ?PPG&@5: ~YPJ~. !5P?: .::.!B&P!. .^!JG@B~ ~GG55555555555555555555J!PGJYYYYYYYYYYYYYYYYYYYYYYYYYYYY5BGY!: ^PB55555555555555555555555555555GP^ ^G@5. . 7&@@
// @@&7 7BBBG##Y: .^?GG?: ^5BJ: ^7?!^7G&G7. ..^~7YGBBP??B5. :P#55555555555555555555555PBG5YYYYYYYYYYYYYYYYYYYYYYYYY55YY55YJJ!~~!!7Y5Y5555555555555555555555555555P#J :Y&G?7!^:. 7&@@
// @@&7 7BBBBBB#B?. :?BB?. ~5G5^ .~J7:7#@G! .:^~7YGB##G5?~: ?&J .5B55555555555555555555555555PBBGP5YYYYYYYYYYYYYY555PBBBGGGGPPPGGPPP5YYY?!?P55555555555555555555555555G#~ !#P~~!7??7!^. 7&@@
// @@&7 !BBBBBBB##G!. .JBG7. ^5BY^ .?Y~:J&@5^ .:^^^!?JPG#&&BPJ!: .Y@5. .YB555555555555555555555555555555PGGBGGPPPGGGGGPP55YYJ?7!~~^::.::. .YG5555555555555555555555555#5: :BG^::::^~7???7!~:. 7&@@
// @@&7 ~B#BBBBBBB##P~. :Y#P~ ~P#Y: ~Y?.~G@B~ .~JPPPGB##BGPY7^. :Y&5. ?#55555555555555555555555555PPGGPP5YYJ?7!!~~^^:.. ^PB55555555555555555555555P&Y. :P#!::::::::^~!7?J??7~^:. 7&@@
// @@&7 :G#BBBBBBBBB##P?: ^P#Y: .7GB? :JY:.?#&J: ~P&&BP5Y7~:. :JG#Y. ^PP55555555555555555PPPGPP5Y?77!~^:. ..:^~~!77!: ^PBP555555555555555555555G&! .Y&J::::::::::::::^^~7?YY?!~:. 7&@@
// @@&7 .5&BBBBBBBBBBB#&G7. !GB?. :?BG!.75~ ^P@G~ !B#Y!^:. .?GPB5: ^PG55555555555PPPPP5YYJ7~:. .:::^~!!7?JJYYYYJ??7!~^:. .?PPY5555555555555555555#G: .J@Y^::::::::::::::::::^~7?YYY7~: 7&@@
// @@&7 J&BBBBBBBBBBBB#&#5~ :5&P^ ^5#Y.~5! 7#&?. .J&#7 ~B#J7!. .YB5555PPPPPPPYJ7!^:. ..:^^!!7JY55Y5PP555Y?77!~^^::::. ...:^~~~~~~^ .:~YGGGGGGPPGP555555555P&J J&5^:::::::::::::::::::::::^!7JYJ!^. 7&@@
// @@&7 .J&#BBBBBBBBBBBBB#&#Y^ !G#7 7BP~~Y7. ^G@5: ^P@5^ ^P#5^ !55PGB#BPJ7~:...:^~!7JY5PPPPP5YJ?77!~^^:::::^^~!!!7777777~~!??JYYJJJ?77!!!:.:~7JYPGGBB#####B##G555555555G&7 7#G~:::::::::::::::::::::::::::~!?Y5YJ7~:. 7&@@
// @@&7 7##BBBBBBBBBBBBBB##BP?. :5&Y. ^GB?~Y7. .5@G^~B&? :5&G~ .^!JG&#G5J!^::^~7JY5PPP5YJ?7!~^... ..:^~~!77???77!!~~~~77?JJYJJJ?!~^::. .:^!7JPGB#####BBBBBBBBBBBBBP55555555#B~ !#B!::::::::::::::::::::::::::::::^~!?YPGPY?!^. 7&@@
// @@&7 !##BBBBBBBBBBBBBBBB#BG5! ?#P~ :JBY~Y7. :Y@#B5^ ^PB5YPGGP5J!~~~7J55PPYJJ7~^:. .:~!7?JJJ?7~~^:...:^~7?JJJJ77~:. ..:~!?YPGBB#####BBBBBBBBBBBBBBBBBBGB55555555#G^ .Y@P^:::::::::::::::::::::::::::::::::::^~7J55P5J7^. 7&@@
// @@&7 ~B&BBBBBBBBBBBBBBBBB#BGGY^ !BB! ?BY7Y! .?&&5^ .^75BBG5?!^~7J5P55Y?!~:. .^~!?JJJ?7!~^:. .^!?JJYJ?!^:. .^~7J5PGB########BBBBBBBBBBBBBBBBBBBBBBBBGBP555555P#?. :G#7:::::::::::::::::::::::::::::::::::::::::^~!7???!~: 7&@@
// @@&7 ^B&BBBBBBBBBBBBBBBBBBBBBGG?.^G#7 ~P5JJ~ 7#@G^ .~?5PPY?77!7J5P5Y?!^. .:~!?JJJJ?7~^. .:~!?JJ?7~^. .:~7JYPGB########BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBG555555PB7. 7&5^:::::::::::::::::::::::::::::::::::::::::::::::^~YJ. 7&@@
// @@&7 ^G@BBBBBBBBBBBBBBBBBBBB#BBB5^:Y#J. ~P5J?: 7#@BY: :7YBB57^:^?YPPY?~: .::~7?JYJJ?!^:. ..:~!???7~^:...^~7J5PB##&#####BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#555555PBY^ .J@G~:::::::::::::::::::::::::::::::::::::::::::::::::JB~ 7&@@
// @@&7 .5@#BBBBBBBBBBBBBBBBBBBBBBB#B?:J&Y. ^55J7. J@@B^ .!5##5!^~?5P5J~:. .:^!7JYYJ?7~:.. ..^~!77!!^:::^!?J5GB#######BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#G55555PG7 ^B#P5?^:::::::::::::::::::::::::::::::::::::::::::::::!BY. 7&@@
// @@&7 J&#BBBBBBBBBBBBBBBBBBBBBBB###5!?B5: ^YY7~. ^B@#! ^YBBJ!!7YP5J!: :^!7????7!~:. .:^~!!!~~^^~!?J5PGB######BBBBBBBBBBBB###BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#GY5555P5: .Y#?.^5Y!:::::::::::::::::::::::::::::::::::::::::::::::JB~ 7&@@
// @@&7 !##BBBBBBBBBBBBBBBBBBBBBBBB#&&B?7GG^ ^Y?: .Y&@Y. !PBP?!7YPY!^...:~!7777!^::^~^ .:^~!7?J?7!!7J5PB######BBBBBBBBBBB#BB####BBGPG#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#BY5555PJ. ^BG^ :YG7::::::::::::::::::::::::::::::::::::::::::::::^G5. 7&@@
// @@&7 :P&BBBBBBBBBBBBBBBBBBBBBBBBB#&&#5?GG~ ~J^ .?B@G^ ~P#5!755?~. .^~~~~^:. :!?J?!:..:^!?J55555555PGBB####BBBBBBBB##BB####BBGB#P?7~^:. :P#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB##55555PY: .Y&J :YG7::::::::::::::::::::::::::::::::::::::::::::::?#? 7&@@
// @@&7 7##BBBBBBBBBBBBBBBBBBBBBBBBBB&&#PYGP~ .~~. .?G#B~.J#GJJ5J~. ... :~???!~^^!?JY5PGBBGPPPGGGBBBBBBBBB##BBBBBBBGBBY?7~^::Y#7 !Y5Y !#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB&P5555G5: 7#B7 .?BJ^::::::::::::::::::::::::::::::::::::::::::::^PG^ 7&@@
// @@&7 ^!!~!P#BBBBBBBBBBBBBBBBBBBBBBBBBBB#&#GJYP~ . .7GBGYG#YJY!. .:~7?J?7!?Y5GGBBBBBBBBBBBBBBB########BBGGB#BB#J:.5#~ 7Y5PG#P. !B##J?YBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#G5555PJ. ^P#Y~. 7BY^::::::::::::::::::::::::::::::::::::::::::::!BY. 7&@@
// @@&7 :JY????P#BGBBBBBBBBBBBBBBBBBBBBBBBBBB#&#PJ5Y^ .7GG#@B~^~. :~7JYJJY5PB###BBBBBBBBBBBBB####BBGP5J?!J#J..7B#B#! ^BP. 7######J: :~JPB###BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB##55555! .75~:~: ?&J:::::::::::::::::::::::::::::::::::::::::::::YB! 7&@@
// @@&7 ^5J:....:!?YY5PBBBBBBBBBBBBBBBBBBBBBBBBB#&BYYJ: .!5G@#~ .~7JYY55PBBB###BBBBBBBBB###BBB#GJ7Y#J. .^~!JBG: ~G#B~ Y#! .JJ7!5##BPJ!:.:!JB#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#######B#&#PY55J!~. ^Y7 :!: !G#?::::::::::::::::::::::::::::::::::::::::::::!B5: 7&@@
// @@&7 :YY:........:~?5GP55B##BBBBBBBBBBBBBBBBBBGB#GJ^ ^Y&&7 :!JJ?JPPGBBBBBBBBBBBBBBBB#G7~?B#B#5 :GG: ~B#####? :PB^ . ^BP. .^~75#BBBBBBP? !#BBBBBBBBBBBBBBBBBBBBBBBBBBBB##BG5J?!!!!!7??J5PY?YY^ 75^ :^. ^YGG7:::::::::::::::::::::::::::::::::::::::::::^YG7 7&@@
// @@&7 7P~............^JGP7!JGBBBBBBBBBBBBBBBBBBBGPB5^ J@Y. .^7JYY?7YB#BBBBBBBBBBBBBBBBBB#B^ !B##J ?#? 5BGPG#G: ::.J:.! Y#! .P#####G^.!###! 5#BBBBBBBBBBBBBBBBBBBBBBBBBB#P7^.............:!JJ?5P! .. .7B&J^::::::::::::::::::::::::::::::::::::::::::!GP^ 7&@@
// @@&7 :5J...............!PPJ:^YBBBBBBBBBBBBBBBBBBBGB#G5YJ?!!~^J5!^~!JPBBG55PGPPBBBBBBBBBBBBBBBBBBBB#Y ^G#? :BG: .::.!B#? .?^ .5^ ^BP. 7##BGG#7 ~^:..:Y#BBBBBBBBBBBBBBBBBBBBBBB#BY~..................:75GGPY: ^5&B7::::::::::::::::::::::::::::::::::::::::::JG?. 7&@@
// @@&7 ~57................!5G5^:P#BBBBBBBBBBBBBBBBBBBGGBB#####BBBB####BGGGGGGPP5BBBBBBBBBBBBBBBBBBBBBB^ :57 ^. ?#? ?GGBB#G: ~G~ .GJ Y#! ~^:.~BG7!?JYPGBBBBBBBBBBBBBBBBBBBBBBBBP57:......................^YB#&G^ !B&5~::::::::::::::::::::::::::::::::::::::::!55~ 7&@@
// @@&7 !5!.................!5PY:!#BBBBBBBBBBBBBBBBBBBBGPGGGGGGGGGGGGGGGGGGGGGGGPBBBBBBBBBBBBBBBBBBBBB#Y !:.: ?~ :GG: ~######J YB!~GB^ ~BP!!7JYPGB#########BBBBBBBBBBBBBBBBBBBBBBBG! .........................~P&@G! ^P@#Y~:::::::::::::::::::::::::::::::::::::::75?. 7&@@
// @@&7 75??^................7PP?:5#BBBBBBBBBBBBBBBBBBBGPPGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBB~ ^5^ J5 ?#? JY?7!GG^ !B#BB#PPGB########BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#&G^...........................:J#@#! :Y#&BJ~::::::::::::::::::::::::::::::::::::::~7^ 7&@@
// @@&7 !PP?:................^7YY^Y#BBBBBBBBBBBBBBBBBBBGP5GGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBB#Y JB~ J#~ .GG:.:^~!7P#GGBBBBBB###BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB##?..............................!B@B! .?5G#GJ~^:::::^^^^^^^^::::::::::::::^^~!7??J5B5^. 7&@@
// @@&7 !GG!...................~?^J#BBBBBBBBBBBBBBBBBBBPP5GGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBB^ :GB5G#5!?G#GGBB####B###BBBBBBBBBBBBBB####BBBBBBBBBBBBBBBBBBBBBBBBBBBBB##J................................~B@B! .^!JPBGY??JJJ555YYYYYJJJJJJJJJJYY5PGB##BGPYJ?^ 7&@@
// @@&7 ~PGJ:.....................Y#BBBBBBBBBBBBBBBBBBBGP5PGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBB#5?JG###B####B###BBBBBBBBBBBBBB##BB####BBGPG#BBBBBBBBBBBBBBBBBBBBBBBBBBBB&#!.................................~B@P: .7##?^:::::.:!??JJYY55P5555YJ?7!~^::. 7&@@
// @@&7 ^Y5Y!....................:5#BBBBBBBBBBBBBBBBBBBBGPPGGGGGGGGGGGGGGGGGGGGGPGBBBBBBBBBBBBBBBBBBBBBBB####BBBBBBBBBBBBBBBBB#BB#####BBB#BY?7~^:. .5#BBBBBBBBBBBBBBBBBBBBBBBBBBB&B~..................................^G&5: .757:. .. 7&@@
// @@&7 .755Y^...................^G&BBBBBBBBBBBBBBBBBBBBGBPGGGGGGGGGGGGGGGGGGGGGPBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#####BBBB5J?!~^::J#7 !YP5: ~BBBBBBBBBBBBBBBBBBBBBBBBBBB#&G:...................................!GG57: :7GB7. 7&@@
// @@&7 ^Y55J:..................!B#BBBBBBBBBBBBBBBBBBBBGBGGGGGGGGGGGGGGGGGGGGGGPBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBPJ?!~^.!5. :7JY^ :GG: !###? 5#BBBBBBBBBBBBBBBBBBBBBBBBBB&B^....................................?YYGG?: ^?PB5^ 7&@@
// @@&7 :JPG?.................:5#BBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#Y :?Y5GB~ :B##5 ?#? 5PY7. ?#BBBBBBBBBBBBBBBBBBBBBBBBBB&B^....................................^J?YGGP?^. ^?5GBP!. 7&@@
// @@&7 .^JP!..............:?GBPBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB~ :B####5 ?#BB~ :GG: ~? ^P#BBBBBBBBBBBBBBBBBBBBBBBBBBB&G^.....................................:^^75GP5J7^. ^7P#GY5J^ 7&@@
// @@&7 .?Y^.........:^!?YY?7PBBBBBBBBBBBBBBBBBBBBBBGBGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#5 ?P5JYB~ :G##5 ?#? 55: ^5##BBBBBBBBBBBBBBBBBBBBBBBBB##!.........................................:75G5?JJ?J!. .^7PB###BY~ 7&@@
// @@&7 :YJ:~7~^::.:~!77?YPB#BBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB~ ::^7B5 ?#BB~ :GG: ~#B7 ?B#BBBBBBBBBBBBBBBBBBBBBBBB#&Y...........................................:~YG5JY5GP!. .^!YB&&&##GY5P7. 7&@@
// @@&7 :JY5#&#BBGGPPGB###BBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#Y ?BB##B~ :G##5 ?#? Y##5^:?BBBBBBBBBBBBBBBBBBBBBBBBBB#&7.............................................^?5J?J5BGJ^:~!YB#&#PP5J?55!?PBY^ 7&@@
// @@&7 :JY7!?JY5PB##BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB~ :G#BB#5 ~7~^ ~BG!7YBB#BBBBBBBBBBBBBBBBBBBBBBBBBBBBB#&B~...............................................:~7?J5B#BBPYYJ7!^:.. !BP!^YBG! 7&@@
// @@&7 .:: .~5#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGG#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#5 7#BBBB?^~!?Y5PBBB###BBBB#BBBBBBBBBBBBBBBB######BB#BBB#&B!.................................................:^!7J5B&P~. ......^GB7 .?#&J: 7&@@
// @@&7 .!P#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#GGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB7~?BBBBB#########BBBBBBBBBBBBBBBB######BBBBPY?7~^:^P#BBB#@@P~......................................................~5#G?:.....:5BJ. ~G@P^ 7&@@
// @@&7 ^5B#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBG#GGGGGGGGGGGGGGGGGGGGGGGGB#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB###BBBBBBBBBBBBBBBBBBBBB###B####BG5YJ7~^Y#? ^!??. !BBBBB#&@&5!:.....................::..............................^J#B7:....YBY. ^P@G! 7&@@
// @@&7 .?B#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBG#GGGGGGGGGGGGGGGGGGGGGGGGG#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB###BBBBBG5P#P!^5#7 ^!?JP#P. !###?^7G#BBBBB##&&#GPJ!:..........::^~?P#G7:..............................!PBY:..:YB5: .J&&?. 7&@@
// @@&7 ~P##BBBBBBBBBBBBBBBBBBBBBBBBBBBBGBBGGGGGGGGGGGGGGGGGGGGGGGGB#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#BBBBB##BBBPY5##B#G: .GG: ^BP. 7######? ~?5B###BBBBBBBBBB##&&&#BGGP55YYY5GGG##GP##?...............................:JGJ:.:YB5: !B&5^ 7&@@
// @@&7 :YB#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBGBGGGGGGGGGGGGGGGGGGGGGGGGG#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB###BBBB#BBB#Y^^5B~ 7B##G. 7#J Y#! .5P5JP#BGY!:..~?5BBBBBBBBBBBBBBB##&&&&&@@&#BGP5555B##P7:..............................~7:.^YBY: ^5&G~ 7&@@
// @@&7 .?G##BBBBBBBBBBBBBBBBBBBBBBBBBBBBGBGGGGGGGGGGGGGGGGGGGGGGGGPB#BBBBBBBBBBBBBBBBBBBBBBB###BBB#BBBBBYJ5#Y:.?B#B#! ~#5 ~G#5. .GB: ^BP. .::^J#B###BPY! 7BBBBBBBBBBBBBBBBBBBBBB#BY5555555GG?Y#B?:................................~5GJ. .7B#7 7&@@
// @@&7 !5B#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGG#BBBBBBBBBBBBBBBBBB####BGGB##G!^J##B^ :BG. !B#B~ 5#~ :P5 .. 7#J Y#! .5BBBB#B7^7###7 .5#BBBBBBBBBBBBBBBBBBBB##55555555BB~ ^J##5~.............................~PGP! :JG?.^~. 7&@@
// @@&7 ~5P##BBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGB#BBBBBBBBBBBBBBBBBY7!^::.:!GB^ :G##Y J#7 ^GB^ ~#5 ^.:! ~! .GB^ ^BP. 7####B#! ?7!^ ?#BBBBBBBBBBBBBBBBBBBBB#G5555555G&? ^Y#&P!:..........................?BGY: ^??Y7 7&@@
// @@&7 ^JYB#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGG#BBBBBBBBBBBBBBBB#7 75PY. !#Y ?##B~ :BG: ..:Y:.! 5#~ :Y: !5. 7#J Y#! .??!^~BG~:^!7JYPBBBBBBBBBBBBBBBBBBBBBBB#B5555555G@5. :?B&BJ^........................JB5J: !G7 7&@@
// @@&7 :?JG&BBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGGB#BBBBBBBBBBBBBBB#P. !###7 .PB^ :G##Y J#7 .?: .5: ~#5 ?G^ !#! .PB^ ^BP::^!7JYB#BB######BBBBBBBBBBBBBBBBBBBBBBB##P5555555&G: .?G&#5!......................Y#Y~. .!PG~ 7&@@
// @@&7 !J5&BBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGGG#BBBBBBBBBBBBBBBB#7 5##P. !#Y ?##B~ :GG: !P: .G? 5#~ .GG7Y#P::J#5JYB#BB#####BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#P5555555B&! .!P#&G?^..................^#&J. 7B#7 7&@@
// @@&7 .~5&#BBBBBBBBBBBBBBBBBBBBBBBBBBBBGGPGGGGGGGGGGGGGGGGGGGGGGGGPBBBBBBBBBBBBBBBBB#G. !BB#7 .5#~ :G##5 ?#? 5G~:GG: ~BP^~5###BBBBBB###BB#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#G5555555P@5. ~YB&B5!:...............5@B^ ~P#5: 7&@@
// @@&7 !B#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBGPGGGGGGGGGGGGGGGGGGGGGGGGGG#BBBBBBBBBBBBBBBB#? 5##G: ~#5 ?BG5: :GG: !#BBB#5YPB#B#BBBBBB#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBP5555555&&! :7G##P7:............J##5. ^5BG! 7&@@
// @@&7 ~G#BBBBBBBBBBBBBBBBBBBBBBBBBBBBBGPPGGGGGGGGGGGGGGGGGGGGGGGGGBBBBBBBBBBBBBBBBB#G. !#BB~ .PB~ :::^~7G#P5GBB#BB###BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB#P5555555B@P: .!YB#P?^......^:.Y#BY: .?GBJ. 7&@@
// @@&! :5BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBG5J5GGGGGGGGGGGGGGGGGGGGGGGGPGBBBBBBBBBBBBBBBB#7 ^^:.:?B#GYY5PGB##BB###BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB5Y55555YP&#7 ^?PBPY?!~~^.:?##5~ ~P#5^ !&@@
// @@@PYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYG#B############################BGPPGBBBBBBBBBBBBBBBBBBBBBBGBB##B##############G7?JYPGB###############################################################################BBBB###BBGGPGGGGB#&GYYYYYYYYYYYYYYYYJJPBBGB##BP5PB&&PYYYYYYYYYYYYYYYG&&PYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYJP@@@
// @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//This registers the settings
game.settings.register('shortcutblocker', 'ctrlblock', {
name: 'Blocked CTRL Combos', //Kinda obvious, eh?
hint: 'Comma sepparated list of keys, which are disallowed to be used with CTRL. Example: "F5, R, W" This would allow CTRL + F5, CTRL + R and CTRL + W.', // Some descriptive text.
scope: 'client', // "world" = sync to db, "client" = local storage
config: true, // false if you dont want it to show in module config
type: String, // Number, Boolean, String, Object
default: "t, r, f5",
onChange: value => { // "value =>" means, that the value will be passed through.... I think
debounceReload()
}
}),
//SPIEL DEN SELBEN SONG NOCHMAL!
game.settings.register('shortcutblocker', 'altblock', {
name: 'Blocked ALT Combos',
hint: 'Comma sepparated list of key names. Example: "F4". That would block "ALT + F4"',
scope: 'client',
config: true,
type: String,
default: "f12",
onChange: value => {
debounceReload()
}
}),
// There probably is a smoother way of doing this, but I cannot be bothered to google for that
game.settings.register('shortcutblocker', 'shiftblock', {
name: 'Blocked SHIFT Combos',
hint: 'Comma sepparated list of keys, which are allowed to be used with SHIFT. Example: "F5, R, W" This would allow SHIFT + F5',
scope: 'client',
config: true,
type: String,
default: "f5",
onChange: value => {
debounceReload()
}
}),
// Fire this event, once, ANY key is pressed.
window.addEventListener("keydown", (e) => {
if (heldKeys.includes(e.key)) {
} else {
heldKeys.push(e.key);
//Get the current set variables
const ctrlButtons = game.settings.get('shortcutblocker', 'ctrlblock');
const altButtons = game.settings.get('shortcutblocker', 'altblock');
const shiftButtons = game.settings.get('shortcutblocker', 'shiftblock');
//Create Replace any spaces.
const shiftButtonSpaceless = shiftButtons.replace(/\s/g, '')
const altButtonSpaceless = altButtons.replace(/\s/g, '')
const ctrlButtonSpaceless = ctrlButtons.replace(/\s/g, '')
// Create the arrays
const shiftButtonArray = shiftButtonSpaceless.split(',');
const altButtonArray = altButtonSpaceless.split(',');
const ctrlButtonArray = ctrlButtonSpaceless.split(',');
// Now. Look, if it's a keyboard combination.
// e.ctrlKey is obviously the Control key
// e.altKey is obviously the Alt Key
// e.key binds directly to whatever key is currently beeing pressed
// !isNan("Something") tests, if "Something" is a number. [NaN, Not a Number ;)]
if (e.ctrlKey && ctrlButtonArray.includes(e.key) || e.altKey && altButtonArray.includes(e.key)|| e.shiftKey && shiftButtonArray.includes(e.key)){
console.log("shortcutblocke: Catched keystroke! Aborting!");
// Disables the shortcuts in the browser...
// gonna be honest, didn't read the docs... copy, paste and pray.
// https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault
e.preventDefault();
e.stopImmediatePropagation();
e.stopPropagation();
}
}
});
// This event just helps us get rid of non-held keys.
window.addEventListener("keyup", (e) => {
var index = heldKeys.indexOf(e.key);
if (index !== -1) {
heldKeys.splice(index, 1);
}
});
// This works for Chrome. It works for Mozilla... I guess? I dunno why you read this but ye :)
});