make Windows look like X11, why does this work
[fanfix.git] / src / jexer / TKeypress.java
CommitLineData
df8de03f
KL
1/**
2 * Jexer - Java Text User Interface
3 *
df8de03f
KL
4 * License: LGPLv3 or later
5 *
7b5261bc
KL
6 * This module is licensed under the GNU Lesser General Public License
7 * Version 3. Please see the file "COPYING" in this directory for more
8 * information about the GNU Lesser General Public License Version 3.
df8de03f
KL
9 *
10 * Copyright (C) 2015 Kevin Lamonte
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public License
14 * as published by the Free Software Foundation; either version 3 of
15 * the License, or (at your option) any later version.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with this program; if not, see
24 * http://www.gnu.org/licenses/, or write to the Free Software
25 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26 * 02110-1301 USA
7b5261bc
KL
27 *
28 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
29 * @version 1
df8de03f
KL
30 */
31package jexer;
32
33/**
34 * This class represents keystrokes.
35 */
b299e69c 36public final class TKeypress {
df8de03f
KL
37
38 // Various special keystrokes
39
40 /**
7b5261bc 41 * "No key".
df8de03f 42 */
7b5261bc 43 public static final int NONE = 255;
df8de03f
KL
44
45 /**
7b5261bc 46 * Function key F1.
df8de03f 47 */
7b5261bc 48 public static final int F1 = 1;
df8de03f
KL
49
50 /**
7b5261bc 51 * Function key F2.
df8de03f 52 */
7b5261bc 53 public static final int F2 = 2;
df8de03f
KL
54
55 /**
7b5261bc 56 * Function key F3.
df8de03f 57 */
7b5261bc 58 public static final int F3 = 3;
df8de03f
KL
59
60 /**
7b5261bc 61 * Function key F4.
df8de03f 62 */
7b5261bc 63 public static final int F4 = 4;
df8de03f
KL
64
65 /**
7b5261bc 66 * Function key F5.
df8de03f 67 */
7b5261bc 68 public static final int F5 = 5;
df8de03f
KL
69
70 /**
7b5261bc 71 * Function key F6.
df8de03f 72 */
7b5261bc 73 public static final int F6 = 6;
df8de03f
KL
74
75 /**
7b5261bc 76 * Function key F7.
df8de03f 77 */
7b5261bc 78 public static final int F7 = 7;
df8de03f
KL
79
80 /**
7b5261bc 81 * Function key F8.
df8de03f 82 */
7b5261bc 83 public static final int F8 = 8;
df8de03f
KL
84
85 /**
7b5261bc 86 * Function key F9.
df8de03f 87 */
7b5261bc 88 public static final int F9 = 9;
df8de03f
KL
89
90 /**
7b5261bc 91 * Function key F10.
df8de03f 92 */
7b5261bc 93 public static final int F10 = 10;
df8de03f
KL
94
95 /**
7b5261bc 96 * Function key F11.
df8de03f 97 */
7b5261bc 98 public static final int F11 = 11;
df8de03f
KL
99
100 /**
7b5261bc 101 * Function key F12.
df8de03f 102 */
7b5261bc 103 public static final int F12 = 12;
df8de03f
KL
104
105 /**
7b5261bc 106 * Home.
df8de03f 107 */
7b5261bc 108 public static final int HOME = 20;
df8de03f
KL
109
110 /**
7b5261bc 111 * End.
df8de03f 112 */
7b5261bc 113 public static final int END = 21;
df8de03f
KL
114
115 /**
7b5261bc 116 * Page up.
df8de03f 117 */
7b5261bc 118 public static final int PGUP = 22;
df8de03f
KL
119
120 /**
7b5261bc 121 * Page down.
df8de03f 122 */
7b5261bc 123 public static final int PGDN = 23;
df8de03f
KL
124
125 /**
7b5261bc 126 * Insert.
df8de03f 127 */
7b5261bc 128 public static final int INS = 24;
df8de03f
KL
129
130 /**
7b5261bc 131 * Delete.
df8de03f 132 */
7b5261bc 133 public static final int DEL = 25;
df8de03f
KL
134
135 /**
7b5261bc 136 * Right arrow.
df8de03f 137 */
7b5261bc 138 public static final int RIGHT = 30;
df8de03f
KL
139
140 /**
7b5261bc 141 * Left arrow.
df8de03f 142 */
7b5261bc 143 public static final int LEFT = 31;
df8de03f
KL
144
145 /**
7b5261bc 146 * Up arrow.
df8de03f 147 */
7b5261bc 148 public static final int UP = 32;
df8de03f
KL
149
150 /**
7b5261bc 151 * Down arrow.
df8de03f 152 */
7b5261bc 153 public static final int DOWN = 33;
df8de03f
KL
154
155 /**
7b5261bc 156 * Tab.
df8de03f 157 */
7b5261bc 158 public static final int TAB = 40;
df8de03f
KL
159
160 /**
7b5261bc 161 * Back-tab (shift-tab).
df8de03f 162 */
7b5261bc 163 public static final int BTAB = 41;
df8de03f
KL
164
165 /**
7b5261bc 166 * Enter.
df8de03f 167 */
7b5261bc 168 public static final int ENTER = 42;
df8de03f
KL
169
170 /**
7b5261bc 171 * Escape.
df8de03f 172 */
7b5261bc 173 public static final int ESC = 43;
df8de03f
KL
174
175 /**
7c870d89 176 * If true, ch is meaningless, use keyCode instead.
df8de03f 177 */
7c870d89 178 private boolean isFunctionKey;
b299e69c
KL
179
180 /**
7c870d89 181 * Getter for isFunctionKey.
b299e69c 182 *
7c870d89 183 * @return if true, ch is meaningless, use keyCode instead
b299e69c 184 */
7c870d89
KL
185 public boolean isFnKey() {
186 return isFunctionKey;
b299e69c 187 }
df8de03f
KL
188
189 /**
190 * Will be set to F1, F2, HOME, END, etc. if isKey is true.
191 */
7c870d89 192 private int keyCode;
b299e69c
KL
193
194 /**
7c870d89 195 * Getter for function key code.
b299e69c 196 *
7c870d89 197 * @return function key code int value (only valid is isKey is true)
b299e69c 198 */
7c870d89
KL
199 public int getKeyCode() {
200 return keyCode;
b299e69c 201 }
df8de03f
KL
202
203 /**
7b5261bc 204 * Keystroke modifier ALT.
df8de03f 205 */
b299e69c
KL
206 private boolean alt;
207
208 /**
209 * Getter for ALT.
210 *
211 * @return alt value
212 */
7c870d89 213 public boolean isAlt() {
b299e69c
KL
214 return alt;
215 }
df8de03f
KL
216
217 /**
7b5261bc 218 * Keystroke modifier CTRL.
df8de03f 219 */
b299e69c
KL
220 private boolean ctrl;
221
222 /**
223 * Getter for CTRL.
224 *
225 * @return ctrl value
226 */
7c870d89 227 public boolean isCtrl() {
b299e69c
KL
228 return ctrl;
229 }
df8de03f
KL
230
231 /**
7b5261bc 232 * Keystroke modifier SHIFT.
df8de03f 233 */
b299e69c
KL
234 private boolean shift;
235
236 /**
237 * Getter for SHIFT.
238 *
239 * @return shift value
240 */
7c870d89 241 public boolean isShift() {
b299e69c
KL
242 return shift;
243 }
df8de03f
KL
244
245 /**
7b5261bc 246 * The character received.
df8de03f 247 */
b299e69c
KL
248 private char ch;
249
250 /**
251 * Getter for character.
252 *
253 * @return the character (only valid if isKey is false)
254 */
7c870d89 255 public char getChar() {
b299e69c
KL
256 return ch;
257 }
df8de03f
KL
258
259 /**
b299e69c 260 * Public constructor makes an immutable instance.
df8de03f
KL
261 *
262 * @param isKey is true, this is a function key
263 * @param fnKey the function key code (only valid if isKey is true)
264 * @param ch the character (only valid if fnKey is false)
265 * @param alt if true, ALT was pressed with this keystroke
266 * @param ctrl if true, CTRL was pressed with this keystroke
267 * @param shift if true, SHIFT was pressed with this keystroke
268 */
7b5261bc 269 public TKeypress(final boolean isKey, final int fnKey, final char ch,
7c870d89
KL
270 final boolean alt, final boolean ctrl, final boolean shift) {
271
272 this.isFunctionKey = isKey;
273 this.keyCode = fnKey;
274 this.ch = ch;
275 this.alt = alt;
276 this.ctrl = ctrl;
277 this.shift = shift;
df8de03f
KL
278 }
279
4328bb42 280 /**
7b5261bc
KL
281 * Comparison check. All fields must match to return true.
282 *
283 * @param rhs another TKeypress instance
284 * @return true if all fields are equal
4328bb42
KL
285 */
286 @Override
b299e69c 287 public boolean equals(final Object rhs) {
7b5261bc
KL
288 if (!(rhs instanceof TKeypress)) {
289 return false;
290 }
291
292 TKeypress that = (TKeypress) rhs;
7c870d89
KL
293 return ((isFunctionKey == that.isFunctionKey)
294 && (keyCode == that.keyCode)
295 && (ch == that.ch)
296 && (alt == that.alt)
297 && (ctrl == that.ctrl)
298 && (shift == that.shift));
4328bb42
KL
299 }
300
e826b451
KL
301 /**
302 * Hashcode uses all fields in equals().
303 *
304 * @return the hash
305 */
306 @Override
307 public int hashCode() {
308 int A = 13;
309 int B = 23;
310 int hash = A;
7c870d89
KL
311 hash = (B * hash) + (isFunctionKey ? 1 : 0);
312 hash = (B * hash) + keyCode;
313 hash = (B * hash) + ch;
e826b451
KL
314 hash = (B * hash) + (alt ? 1 : 0);
315 hash = (B * hash) + (ctrl ? 1 : 0);
316 hash = (B * hash) + (shift ? 1 : 0);
317 return hash;
318 }
319
df8de03f 320 /**
7b5261bc
KL
321 * Make human-readable description of this TKeypress.
322 *
323 * @return displayable String
df8de03f
KL
324 */
325 @Override
b299e69c 326 public String toString() {
7c870d89
KL
327 if (isFunctionKey) {
328 switch (keyCode) {
7b5261bc
KL
329 case F1:
330 return String.format("%s%s%sF1",
7c870d89
KL
331 ctrl ? "Ctrl+" : "",
332 alt ? "Alt+" : "",
333 shift ? "Shift+" : "");
7b5261bc
KL
334 case F2:
335 return String.format("%s%s%sF2",
7c870d89
KL
336 ctrl ? "Ctrl+" : "",
337 alt ? "Alt+" : "",
338 shift ? "Shift+" : "");
7b5261bc
KL
339 case F3:
340 return String.format("%s%s%sF3",
7c870d89
KL
341 ctrl ? "Ctrl+" : "",
342 alt ? "Alt+" : "",
343 shift ? "Shift+" : "");
7b5261bc
KL
344 case F4:
345 return String.format("%s%s%sF4",
7c870d89
KL
346 ctrl ? "Ctrl+" : "",
347 alt ? "Alt+" : "",
348 shift ? "Shift+" : "");
7b5261bc
KL
349 case F5:
350 return String.format("%s%s%sF5",
7c870d89
KL
351 ctrl ? "Ctrl+" : "",
352 alt ? "Alt+" : "",
353 shift ? "Shift+" : "");
7b5261bc
KL
354 case F6:
355 return String.format("%s%s%sF6",
7c870d89
KL
356 ctrl ? "Ctrl+" : "",
357 alt ? "Alt+" : "",
358 shift ? "Shift+" : "");
7b5261bc
KL
359 case F7:
360 return String.format("%s%s%sF7",
7c870d89
KL
361 ctrl ? "Ctrl+" : "",
362 alt ? "Alt+" : "",
363 shift ? "Shift+" : "");
7b5261bc
KL
364 case F8:
365 return String.format("%s%s%sF8",
7c870d89
KL
366 ctrl ? "Ctrl+" : "",
367 alt ? "Alt+" : "",
368 shift ? "Shift+" : "");
7b5261bc
KL
369 case F9:
370 return String.format("%s%s%sF9",
7c870d89
KL
371 ctrl ? "Ctrl+" : "",
372 alt ? "Alt+" : "",
373 shift ? "Shift+" : "");
7b5261bc
KL
374 case F10:
375 return String.format("%s%s%sF10",
7c870d89
KL
376 ctrl ? "Ctrl+" : "",
377 alt ? "Alt+" : "",
378 shift ? "Shift+" : "");
7b5261bc
KL
379 case F11:
380 return String.format("%s%s%sF11",
7c870d89
KL
381 ctrl ? "Ctrl+" : "",
382 alt ? "Alt+" : "",
383 shift ? "Shift+" : "");
7b5261bc
KL
384 case F12:
385 return String.format("%s%s%sF12",
7c870d89
KL
386 ctrl ? "Ctrl+" : "",
387 alt ? "Alt+" : "",
388 shift ? "Shift+" : "");
7b5261bc
KL
389 case HOME:
390 return String.format("%s%s%sHOME",
7c870d89
KL
391 ctrl ? "Ctrl+" : "",
392 alt ? "Alt+" : "",
393 shift ? "Shift+" : "");
7b5261bc
KL
394 case END:
395 return String.format("%s%s%sEND",
7c870d89
KL
396 ctrl ? "Ctrl+" : "",
397 alt ? "Alt+" : "",
398 shift ? "Shift+" : "");
7b5261bc
KL
399 case PGUP:
400 return String.format("%s%s%sPGUP",
7c870d89
KL
401 ctrl ? "Ctrl+" : "",
402 alt ? "Alt+" : "",
403 shift ? "Shift+" : "");
7b5261bc
KL
404 case PGDN:
405 return String.format("%s%s%sPGDN",
7c870d89
KL
406 ctrl ? "Ctrl+" : "",
407 alt ? "Alt+" : "",
408 shift ? "Shift+" : "");
7b5261bc
KL
409 case INS:
410 return String.format("%s%s%sINS",
7c870d89
KL
411 ctrl ? "Ctrl+" : "",
412 alt ? "Alt+" : "",
413 shift ? "Shift+" : "");
7b5261bc
KL
414 case DEL:
415 return String.format("%s%s%sDEL",
7c870d89
KL
416 ctrl ? "Ctrl+" : "",
417 alt ? "Alt+" : "",
418 shift ? "Shift+" : "");
7b5261bc
KL
419 case RIGHT:
420 return String.format("%s%s%sRIGHT",
7c870d89
KL
421 ctrl ? "Ctrl+" : "",
422 alt ? "Alt+" : "",
423 shift ? "Shift+" : "");
7b5261bc
KL
424 case LEFT:
425 return String.format("%s%s%sLEFT",
7c870d89
KL
426 ctrl ? "Ctrl+" : "",
427 alt ? "Alt+" : "",
428 shift ? "Shift+" : "");
7b5261bc
KL
429 case UP:
430 return String.format("%s%s%sUP",
7c870d89
KL
431 ctrl ? "Ctrl+" : "",
432 alt ? "Alt+" : "",
433 shift ? "Shift+" : "");
7b5261bc
KL
434 case DOWN:
435 return String.format("%s%s%sDOWN",
7c870d89
KL
436 ctrl ? "Ctrl+" : "",
437 alt ? "Alt+" : "",
438 shift ? "Shift+" : "");
7b5261bc
KL
439 case TAB:
440 return String.format("%s%s%sTAB",
7c870d89
KL
441 ctrl ? "Ctrl+" : "",
442 alt ? "Alt+" : "",
443 shift ? "Shift+" : "");
7b5261bc
KL
444 case BTAB:
445 return String.format("%s%s%sBTAB",
7c870d89
KL
446 ctrl ? "Ctrl+" : "",
447 alt ? "Alt+" : "",
448 shift ? "Shift+" : "");
7b5261bc
KL
449 case ENTER:
450 return String.format("%s%s%sENTER",
7c870d89
KL
451 ctrl ? "Ctrl+" : "",
452 alt ? "Alt+" : "",
453 shift ? "Shift+" : "");
7b5261bc
KL
454 case ESC:
455 return String.format("%s%s%sESC",
7c870d89
KL
456 ctrl ? "Ctrl+" : "",
457 alt ? "Alt+" : "",
458 shift ? "Shift+" : "");
7b5261bc
KL
459 default:
460 return String.format("--UNKNOWN--");
461 }
462 } else {
463 if (alt && !shift && !ctrl) {
464 // Alt-X
465 return String.format("Alt+%c", Character.toUpperCase(ch));
466 } else if (!alt && shift && !ctrl) {
467 // Shift-X
468 return String.format("%c", ch);
469 } else if (!alt && !shift && ctrl) {
470 // Ctrl-X
471 return String.format("Ctrl+%c", ch);
472 } else if (alt && shift && !ctrl) {
473 // Alt-Shift-X
474 return String.format("Alt+Shift+%c", ch);
475 } else if (!alt && shift && ctrl) {
476 // Ctrl-Shift-X
477 return String.format("Ctrl+Shift+%c", ch);
478 } else if (alt && !shift && ctrl) {
479 // Ctrl-Alt-X
480 return String.format("Ctrl+Alt+%c", Character.toUpperCase(ch));
481 } else if (alt && shift && ctrl) {
482 // Ctrl-Alt-Shift-X
483 return String.format("Ctrl+Alt+Shift+%c",
7c870d89 484 Character.toUpperCase(ch));
7b5261bc
KL
485 } else {
486 // X
487 return String.format("%c", ch);
488 }
489 }
df8de03f
KL
490 }
491
492 /**
e826b451
KL
493 * Convert a keypress to lowercase. Function keys and alt/ctrl keys are
494 * not converted.
df8de03f 495 *
df8de03f
KL
496 * @return a new instance with the key converted
497 */
e826b451 498 public TKeypress toLowerCase() {
7c870d89
KL
499 TKeypress newKey = new TKeypress(isFunctionKey, keyCode, ch, alt, ctrl,
500 shift);
501 if (!isFunctionKey && (ch >= 'A') && (ch <= 'Z') && !ctrl && !alt) {
7b5261bc
KL
502 newKey.shift = false;
503 newKey.ch += 32;
504 }
505 return newKey;
df8de03f
KL
506 }
507
508 /**
e826b451
KL
509 * Convert a keypress to uppercase. Function keys and alt/ctrl keys are
510 * not converted.
df8de03f 511 *
df8de03f
KL
512 * @return a new instance with the key converted
513 */
e826b451 514 public TKeypress toUpperCase() {
7c870d89
KL
515 TKeypress newKey = new TKeypress(isFunctionKey, keyCode, ch, alt, ctrl,
516 shift);
517 if (!isFunctionKey && (ch >= 'a') && (ch <= 'z') && !ctrl && !alt) {
7b5261bc
KL
518 newKey.shift = true;
519 newKey.ch -= 32;
520 }
521 return newKey;
df8de03f
KL
522 }
523
524 // Special "no-key" keypress, used to ignore undefined keystrokes
7b5261bc 525 public static final TKeypress kbNoKey = new TKeypress(true,
7c870d89 526 TKeypress.NONE, ' ', false, false, false);
df8de03f
KL
527
528 // Normal keys
7b5261bc 529 public static final TKeypress kbF1 = new TKeypress(true,
7c870d89 530 TKeypress.F1, ' ', false, false, false);
7b5261bc 531 public static final TKeypress kbF2 = new TKeypress(true,
7c870d89 532 TKeypress.F2, ' ', false, false, false);
7b5261bc 533 public static final TKeypress kbF3 = new TKeypress(true,
7c870d89 534 TKeypress.F3, ' ', false, false, false);
7b5261bc 535 public static final TKeypress kbF4 = new TKeypress(true,
7c870d89 536 TKeypress.F4, ' ', false, false, false);
7b5261bc 537 public static final TKeypress kbF5 = new TKeypress(true,
7c870d89 538 TKeypress.F5, ' ', false, false, false);
7b5261bc 539 public static final TKeypress kbF6 = new TKeypress(true,
7c870d89 540 TKeypress.F6, ' ', false, false, false);
7b5261bc 541 public static final TKeypress kbF7 = new TKeypress(true,
7c870d89 542 TKeypress.F7, ' ', false, false, false);
7b5261bc 543 public static final TKeypress kbF8 = new TKeypress(true,
7c870d89 544 TKeypress.F8, ' ', false, false, false);
7b5261bc 545 public static final TKeypress kbF9 = new TKeypress(true,
7c870d89 546 TKeypress.F9, ' ', false, false, false);
7b5261bc 547 public static final TKeypress kbF10 = new TKeypress(true,
7c870d89 548 TKeypress.F10, ' ', false, false, false);
7b5261bc 549 public static final TKeypress kbF11 = new TKeypress(true,
7c870d89 550 TKeypress.F11, ' ', false, false, false);
7b5261bc 551 public static final TKeypress kbF12 = new TKeypress(true,
7c870d89 552 TKeypress.F12, ' ', false, false, false);
7b5261bc 553 public static final TKeypress kbAltF1 = new TKeypress(true,
7c870d89 554 TKeypress.F1, ' ', true, false, false);
7b5261bc 555 public static final TKeypress kbAltF2 = new TKeypress(true,
7c870d89 556 TKeypress.F2, ' ', true, false, false);
7b5261bc 557 public static final TKeypress kbAltF3 = new TKeypress(true,
7c870d89 558 TKeypress.F3, ' ', true, false, false);
7b5261bc 559 public static final TKeypress kbAltF4 = new TKeypress(true,
7c870d89 560 TKeypress.F4, ' ', true, false, false);
7b5261bc 561 public static final TKeypress kbAltF5 = new TKeypress(true,
7c870d89 562 TKeypress.F5, ' ', true, false, false);
7b5261bc 563 public static final TKeypress kbAltF6 = new TKeypress(true,
7c870d89 564 TKeypress.F6, ' ', true, false, false);
7b5261bc 565 public static final TKeypress kbAltF7 = new TKeypress(true,
7c870d89 566 TKeypress.F7, ' ', true, false, false);
7b5261bc 567 public static final TKeypress kbAltF8 = new TKeypress(true,
7c870d89 568 TKeypress.F8, ' ', true, false, false);
7b5261bc 569 public static final TKeypress kbAltF9 = new TKeypress(true,
7c870d89 570 TKeypress.F9, ' ', true, false, false);
7b5261bc 571 public static final TKeypress kbAltF10 = new TKeypress(true,
7c870d89 572 TKeypress.F10, ' ', true, false, false);
7b5261bc 573 public static final TKeypress kbAltF11 = new TKeypress(true,
7c870d89 574 TKeypress.F11, ' ', true, false, false);
7b5261bc 575 public static final TKeypress kbAltF12 = new TKeypress(true,
7c870d89 576 TKeypress.F12, ' ', true, false, false);
7b5261bc 577 public static final TKeypress kbCtrlF1 = new TKeypress(true,
7c870d89 578 TKeypress.F1, ' ', false, true, false);
7b5261bc 579 public static final TKeypress kbCtrlF2 = new TKeypress(true,
7c870d89 580 TKeypress.F2, ' ', false, true, false);
7b5261bc 581 public static final TKeypress kbCtrlF3 = new TKeypress(true,
7c870d89 582 TKeypress.F3, ' ', false, true, false);
7b5261bc 583 public static final TKeypress kbCtrlF4 = new TKeypress(true,
7c870d89 584 TKeypress.F4, ' ', false, true, false);
7b5261bc 585 public static final TKeypress kbCtrlF5 = new TKeypress(true,
7c870d89 586 TKeypress.F5, ' ', false, true, false);
7b5261bc 587 public static final TKeypress kbCtrlF6 = new TKeypress(true,
7c870d89 588 TKeypress.F6, ' ', false, true, false);
7b5261bc 589 public static final TKeypress kbCtrlF7 = new TKeypress(true,
7c870d89 590 TKeypress.F7, ' ', false, true, false);
7b5261bc 591 public static final TKeypress kbCtrlF8 = new TKeypress(true,
7c870d89 592 TKeypress.F8, ' ', false, true, false);
7b5261bc 593 public static final TKeypress kbCtrlF9 = new TKeypress(true,
7c870d89 594 TKeypress.F9, ' ', false, true, false);
7b5261bc 595 public static final TKeypress kbCtrlF10 = new TKeypress(true,
7c870d89 596 TKeypress.F10, ' ', false, true, false);
7b5261bc 597 public static final TKeypress kbCtrlF11 = new TKeypress(true,
7c870d89 598 TKeypress.F11, ' ', false, true, false);
7b5261bc 599 public static final TKeypress kbCtrlF12 = new TKeypress(true,
7c870d89 600 TKeypress.F12, ' ', false, true, false);
7b5261bc 601 public static final TKeypress kbShiftF1 = new TKeypress(true,
7c870d89 602 TKeypress.F1, ' ', false, false, true);
7b5261bc 603 public static final TKeypress kbShiftF2 = new TKeypress(true,
7c870d89 604 TKeypress.F2, ' ', false, false, true);
7b5261bc 605 public static final TKeypress kbShiftF3 = new TKeypress(true,
7c870d89 606 TKeypress.F3, ' ', false, false, true);
7b5261bc 607 public static final TKeypress kbShiftF4 = new TKeypress(true,
7c870d89 608 TKeypress.F4, ' ', false, false, true);
7b5261bc 609 public static final TKeypress kbShiftF5 = new TKeypress(true,
7c870d89 610 TKeypress.F5, ' ', false, false, true);
7b5261bc 611 public static final TKeypress kbShiftF6 = new TKeypress(true,
7c870d89 612 TKeypress.F6, ' ', false, false, true);
7b5261bc 613 public static final TKeypress kbShiftF7 = new TKeypress(true,
7c870d89 614 TKeypress.F7, ' ', false, false, true);
7b5261bc 615 public static final TKeypress kbShiftF8 = new TKeypress(true,
7c870d89 616 TKeypress.F8, ' ', false, false, true);
7b5261bc 617 public static final TKeypress kbShiftF9 = new TKeypress(true,
7c870d89 618 TKeypress.F9, ' ', false, false, true);
7b5261bc 619 public static final TKeypress kbShiftF10 = new TKeypress(true,
7c870d89 620 TKeypress.F10, ' ', false, false, true);
7b5261bc 621 public static final TKeypress kbShiftF11 = new TKeypress(true,
7c870d89 622 TKeypress.F11, ' ', false, false, true);
7b5261bc 623 public static final TKeypress kbShiftF12 = new TKeypress(true,
7c870d89 624 TKeypress.F12, ' ', false, false, true);
7b5261bc 625 public static final TKeypress kbEnter = new TKeypress(true,
7c870d89 626 TKeypress.ENTER, ' ', false, false, false);
7b5261bc 627 public static final TKeypress kbTab = new TKeypress(true,
7c870d89 628 TKeypress.TAB, ' ', false, false, false);
7b5261bc 629 public static final TKeypress kbEsc = new TKeypress(true,
7c870d89 630 TKeypress.ESC, ' ', false, false, false);
7b5261bc 631 public static final TKeypress kbHome = new TKeypress(true,
7c870d89 632 TKeypress.HOME, ' ', false, false, false);
7b5261bc 633 public static final TKeypress kbEnd = new TKeypress(true,
7c870d89 634 TKeypress.END, ' ', false, false, false);
7b5261bc 635 public static final TKeypress kbPgUp = new TKeypress(true,
7c870d89 636 TKeypress.PGUP, ' ', false, false, false);
7b5261bc 637 public static final TKeypress kbPgDn = new TKeypress(true,
7c870d89 638 TKeypress.PGDN, ' ', false, false, false);
7b5261bc 639 public static final TKeypress kbIns = new TKeypress(true,
7c870d89 640 TKeypress.INS, ' ', false, false, false);
7b5261bc 641 public static final TKeypress kbDel = new TKeypress(true,
7c870d89 642 TKeypress.DEL, ' ', false, false, false);
7b5261bc 643 public static final TKeypress kbUp = new TKeypress(true,
7c870d89 644 TKeypress.UP, ' ', false, false, false);
7b5261bc 645 public static final TKeypress kbDown = new TKeypress(true,
7c870d89 646 TKeypress.DOWN, ' ', false, false, false);
7b5261bc 647 public static final TKeypress kbLeft = new TKeypress(true,
7c870d89 648 TKeypress.LEFT, ' ', false, false, false);
7b5261bc 649 public static final TKeypress kbRight = new TKeypress(true,
7c870d89 650 TKeypress.RIGHT, ' ', false, false, false);
7b5261bc 651 public static final TKeypress kbAltEnter = new TKeypress(true,
7c870d89 652 TKeypress.ENTER, ' ', true, false, false);
7b5261bc 653 public static final TKeypress kbAltTab = new TKeypress(true,
7c870d89 654 TKeypress.TAB, ' ', true, false, false);
7b5261bc 655 public static final TKeypress kbAltEsc = new TKeypress(true,
7c870d89 656 TKeypress.ESC, ' ', true, false, false);
7b5261bc 657 public static final TKeypress kbAltHome = new TKeypress(true,
7c870d89 658 TKeypress.HOME, ' ', true, false, false);
7b5261bc 659 public static final TKeypress kbAltEnd = new TKeypress(true,
7c870d89 660 TKeypress.END, ' ', true, false, false);
7b5261bc 661 public static final TKeypress kbAltPgUp = new TKeypress(true,
7c870d89 662 TKeypress.PGUP, ' ', true, false, false);
7b5261bc 663 public static final TKeypress kbAltPgDn = new TKeypress(true,
7c870d89 664 TKeypress.PGDN, ' ', true, false, false);
7b5261bc 665 public static final TKeypress kbAltIns = new TKeypress(true,
7c870d89 666 TKeypress.INS, ' ', true, false, false);
7b5261bc 667 public static final TKeypress kbAltDel = new TKeypress(true,
7c870d89 668 TKeypress.DEL, ' ', true, false, false);
7b5261bc 669 public static final TKeypress kbAltUp = new TKeypress(true,
7c870d89 670 TKeypress.UP, ' ', true, false, false);
7b5261bc 671 public static final TKeypress kbAltDown = new TKeypress(true,
7c870d89 672 TKeypress.DOWN, ' ', true, false, false);
7b5261bc 673 public static final TKeypress kbAltLeft = new TKeypress(true,
7c870d89 674 TKeypress.LEFT, ' ', true, false, false);
7b5261bc 675 public static final TKeypress kbAltRight = new TKeypress(true,
7c870d89 676 TKeypress.RIGHT, ' ', true, false, false);
7b5261bc 677 public static final TKeypress kbCtrlEnter = new TKeypress(true,
7c870d89 678 TKeypress.ENTER, ' ', false, true, false);
7b5261bc 679 public static final TKeypress kbCtrlTab = new TKeypress(true,
7c870d89 680 TKeypress.TAB, ' ', false, true, false);
7b5261bc 681 public static final TKeypress kbCtrlEsc = new TKeypress(true,
7c870d89 682 TKeypress.ESC, ' ', false, true, false);
7b5261bc 683 public static final TKeypress kbCtrlHome = new TKeypress(true,
7c870d89 684 TKeypress.HOME, ' ', false, true, false);
7b5261bc 685 public static final TKeypress kbCtrlEnd = new TKeypress(true,
7c870d89 686 TKeypress.END, ' ', false, true, false);
7b5261bc 687 public static final TKeypress kbCtrlPgUp = new TKeypress(true,
7c870d89 688 TKeypress.PGUP, ' ', false, true, false);
7b5261bc 689 public static final TKeypress kbCtrlPgDn = new TKeypress(true,
7c870d89 690 TKeypress.PGDN, ' ', false, true, false);
7b5261bc 691 public static final TKeypress kbCtrlIns = new TKeypress(true,
7c870d89 692 TKeypress.INS, ' ', false, true, false);
7b5261bc 693 public static final TKeypress kbCtrlDel = new TKeypress(true,
7c870d89 694 TKeypress.DEL, ' ', false, true, false);
7b5261bc 695 public static final TKeypress kbCtrlUp = new TKeypress(true,
7c870d89 696 TKeypress.UP, ' ', false, true, false);
7b5261bc 697 public static final TKeypress kbCtrlDown = new TKeypress(true,
7c870d89 698 TKeypress.DOWN, ' ', false, true, false);
7b5261bc 699 public static final TKeypress kbCtrlLeft = new TKeypress(true,
7c870d89 700 TKeypress.LEFT, ' ', false, true, false);
7b5261bc 701 public static final TKeypress kbCtrlRight = new TKeypress(true,
7c870d89 702 TKeypress.RIGHT, ' ', false, true, false);
7b5261bc 703 public static final TKeypress kbShiftEnter = new TKeypress(true,
7c870d89 704 TKeypress.ENTER, ' ', false, false, true);
7b5261bc 705 public static final TKeypress kbShiftTab = new TKeypress(true,
7c870d89 706 TKeypress.TAB, ' ', false, false, true);
7b5261bc 707 public static final TKeypress kbBackTab = new TKeypress(true,
7c870d89 708 TKeypress.BTAB, ' ', false, false, false);
7b5261bc 709 public static final TKeypress kbShiftEsc = new TKeypress(true,
7c870d89 710 TKeypress.ESC, ' ', false, false, true);
7b5261bc 711 public static final TKeypress kbShiftHome = new TKeypress(true,
7c870d89 712 TKeypress.HOME, ' ', false, false, true);
7b5261bc 713 public static final TKeypress kbShiftEnd = new TKeypress(true,
7c870d89 714 TKeypress.END, ' ', false, false, true);
7b5261bc 715 public static final TKeypress kbShiftPgUp = new TKeypress(true,
7c870d89 716 TKeypress.PGUP, ' ', false, false, true);
7b5261bc 717 public static final TKeypress kbShiftPgDn = new TKeypress(true,
7c870d89 718 TKeypress.PGDN, ' ', false, false, true);
7b5261bc 719 public static final TKeypress kbShiftIns = new TKeypress(true,
7c870d89 720 TKeypress.INS, ' ', false, false, true);
7b5261bc 721 public static final TKeypress kbShiftDel = new TKeypress(true,
7c870d89 722 TKeypress.DEL, ' ', false, false, true);
7b5261bc 723 public static final TKeypress kbShiftUp = new TKeypress(true,
7c870d89 724 TKeypress.UP, ' ', false, false, true);
7b5261bc 725 public static final TKeypress kbShiftDown = new TKeypress(true,
7c870d89 726 TKeypress.DOWN, ' ', false, false, true);
7b5261bc 727 public static final TKeypress kbShiftLeft = new TKeypress(true,
7c870d89 728 TKeypress.LEFT, ' ', false, false, true);
7b5261bc 729 public static final TKeypress kbShiftRight = new TKeypress(true,
7c870d89 730 TKeypress.RIGHT, ' ', false, false, true);
7b5261bc 731 public static final TKeypress kbA = new TKeypress(false,
7c870d89 732 0, 'a', false, false, false);
7b5261bc 733 public static final TKeypress kbB = new TKeypress(false,
7c870d89 734 0, 'b', false, false, false);
7b5261bc 735 public static final TKeypress kbC = new TKeypress(false,
7c870d89 736 0, 'c', false, false, false);
7b5261bc 737 public static final TKeypress kbD = new TKeypress(false,
7c870d89 738 0, 'd', false, false, false);
7b5261bc 739 public static final TKeypress kbE = new TKeypress(false,
7c870d89 740 0, 'e', false, false, false);
7b5261bc 741 public static final TKeypress kbF = new TKeypress(false,
7c870d89 742 0, 'f', false, false, false);
7b5261bc 743 public static final TKeypress kbG = new TKeypress(false,
7c870d89 744 0, 'g', false, false, false);
7b5261bc 745 public static final TKeypress kbH = new TKeypress(false,
7c870d89 746 0, 'h', false, false, false);
7b5261bc 747 public static final TKeypress kbI = new TKeypress(false,
7c870d89 748 0, 'i', false, false, false);
7b5261bc 749 public static final TKeypress kbJ = new TKeypress(false,
7c870d89 750 0, 'j', false, false, false);
7b5261bc 751 public static final TKeypress kbK = new TKeypress(false,
7c870d89 752 0, 'k', false, false, false);
7b5261bc 753 public static final TKeypress kbL = new TKeypress(false,
7c870d89 754 0, 'l', false, false, false);
7b5261bc 755 public static final TKeypress kbM = new TKeypress(false,
7c870d89 756 0, 'm', false, false, false);
7b5261bc 757 public static final TKeypress kbN = new TKeypress(false,
7c870d89 758 0, 'n', false, false, false);
7b5261bc 759 public static final TKeypress kbO = new TKeypress(false,
7c870d89 760 0, 'o', false, false, false);
7b5261bc 761 public static final TKeypress kbP = new TKeypress(false,
7c870d89 762 0, 'p', false, false, false);
7b5261bc 763 public static final TKeypress kbQ = new TKeypress(false,
7c870d89 764 0, 'q', false, false, false);
7b5261bc 765 public static final TKeypress kbR = new TKeypress(false,
7c870d89 766 0, 'r', false, false, false);
7b5261bc 767 public static final TKeypress kbS = new TKeypress(false,
7c870d89 768 0, 's', false, false, false);
7b5261bc 769 public static final TKeypress kbT = new TKeypress(false,
7c870d89 770 0, 't', false, false, false);
7b5261bc 771 public static final TKeypress kbU = new TKeypress(false,
7c870d89 772 0, 'u', false, false, false);
7b5261bc 773 public static final TKeypress kbV = new TKeypress(false,
7c870d89 774 0, 'v', false, false, false);
7b5261bc 775 public static final TKeypress kbW = new TKeypress(false,
7c870d89 776 0, 'w', false, false, false);
7b5261bc 777 public static final TKeypress kbX = new TKeypress(false,
7c870d89 778 0, 'x', false, false, false);
7b5261bc 779 public static final TKeypress kbY = new TKeypress(false,
7c870d89 780 0, 'y', false, false, false);
7b5261bc 781 public static final TKeypress kbZ = new TKeypress(false,
7c870d89 782 0, 'z', false, false, false);
7b5261bc 783 public static final TKeypress kbSpace = new TKeypress(false,
7c870d89 784 0, ' ', false, false, false);
7b5261bc 785 public static final TKeypress kbAltA = new TKeypress(false,
7c870d89 786 0, 'a', true, false, false);
7b5261bc 787 public static final TKeypress kbAltB = new TKeypress(false,
7c870d89 788 0, 'b', true, false, false);
7b5261bc 789 public static final TKeypress kbAltC = new TKeypress(false,
7c870d89 790 0, 'c', true, false, false);
7b5261bc 791 public static final TKeypress kbAltD = new TKeypress(false,
7c870d89 792 0, 'd', true, false, false);
7b5261bc 793 public static final TKeypress kbAltE = new TKeypress(false,
7c870d89 794 0, 'e', true, false, false);
7b5261bc 795 public static final TKeypress kbAltF = new TKeypress(false,
7c870d89 796 0, 'f', true, false, false);
7b5261bc 797 public static final TKeypress kbAltG = new TKeypress(false,
7c870d89 798 0, 'g', true, false, false);
7b5261bc 799 public static final TKeypress kbAltH = new TKeypress(false,
7c870d89 800 0, 'h', true, false, false);
7b5261bc 801 public static final TKeypress kbAltI = new TKeypress(false,
7c870d89 802 0, 'i', true, false, false);
7b5261bc 803 public static final TKeypress kbAltJ = new TKeypress(false,
7c870d89 804 0, 'j', true, false, false);
7b5261bc 805 public static final TKeypress kbAltK = new TKeypress(false,
7c870d89 806 0, 'k', true, false, false);
7b5261bc 807 public static final TKeypress kbAltL = new TKeypress(false,
7c870d89 808 0, 'l', true, false, false);
7b5261bc 809 public static final TKeypress kbAltM = new TKeypress(false,
7c870d89 810 0, 'm', true, false, false);
7b5261bc 811 public static final TKeypress kbAltN = new TKeypress(false,
7c870d89 812 0, 'n', true, false, false);
7b5261bc 813 public static final TKeypress kbAltO = new TKeypress(false,
7c870d89 814 0, 'o', true, false, false);
7b5261bc 815 public static final TKeypress kbAltP = new TKeypress(false,
7c870d89 816 0, 'p', true, false, false);
7b5261bc 817 public static final TKeypress kbAltQ = new TKeypress(false,
7c870d89 818 0, 'q', true, false, false);
7b5261bc 819 public static final TKeypress kbAltR = new TKeypress(false,
7c870d89 820 0, 'r', true, false, false);
7b5261bc 821 public static final TKeypress kbAltS = new TKeypress(false,
7c870d89 822 0, 's', true, false, false);
7b5261bc 823 public static final TKeypress kbAltT = new TKeypress(false,
7c870d89 824 0, 't', true, false, false);
7b5261bc 825 public static final TKeypress kbAltU = new TKeypress(false,
7c870d89 826 0, 'u', true, false, false);
7b5261bc 827 public static final TKeypress kbAltV = new TKeypress(false,
7c870d89 828 0, 'v', true, false, false);
7b5261bc 829 public static final TKeypress kbAltW = new TKeypress(false,
7c870d89 830 0, 'w', true, false, false);
7b5261bc 831 public static final TKeypress kbAltX = new TKeypress(false,
7c870d89 832 0, 'x', true, false, false);
7b5261bc 833 public static final TKeypress kbAltY = new TKeypress(false,
7c870d89 834 0, 'y', true, false, false);
7b5261bc 835 public static final TKeypress kbAltZ = new TKeypress(false,
7c870d89 836 0, 'z', true, false, false);
7b5261bc 837 public static final TKeypress kbCtrlA = new TKeypress(false,
7c870d89 838 0, 'A', false, true, false);
7b5261bc 839 public static final TKeypress kbCtrlB = new TKeypress(false,
7c870d89 840 0, 'B', false, true, false);
7b5261bc 841 public static final TKeypress kbCtrlC = new TKeypress(false,
7c870d89 842 0, 'C', false, true, false);
7b5261bc 843 public static final TKeypress kbCtrlD = new TKeypress(false,
7c870d89 844 0, 'D', false, true, false);
7b5261bc 845 public static final TKeypress kbCtrlE = new TKeypress(false,
7c870d89 846 0, 'E', false, true, false);
7b5261bc 847 public static final TKeypress kbCtrlF = new TKeypress(false,
7c870d89 848 0, 'F', false, true, false);
7b5261bc 849 public static final TKeypress kbCtrlG = new TKeypress(false,
7c870d89 850 0, 'G', false, true, false);
7b5261bc 851 public static final TKeypress kbCtrlH = new TKeypress(false,
7c870d89 852 0, 'H', false, true, false);
7b5261bc 853 public static final TKeypress kbCtrlI = new TKeypress(false,
7c870d89 854 0, 'I', false, true, false);
7b5261bc 855 public static final TKeypress kbCtrlJ = new TKeypress(false,
7c870d89 856 0, 'J', false, true, false);
7b5261bc 857 public static final TKeypress kbCtrlK = new TKeypress(false,
7c870d89 858 0, 'K', false, true, false);
7b5261bc 859 public static final TKeypress kbCtrlL = new TKeypress(false,
7c870d89 860 0, 'L', false, true, false);
7b5261bc 861 public static final TKeypress kbCtrlM = new TKeypress(false,
7c870d89 862 0, 'M', false, true, false);
7b5261bc 863 public static final TKeypress kbCtrlN = new TKeypress(false,
7c870d89 864 0, 'N', false, true, false);
7b5261bc 865 public static final TKeypress kbCtrlO = new TKeypress(false,
7c870d89 866 0, 'O', false, true, false);
7b5261bc 867 public static final TKeypress kbCtrlP = new TKeypress(false,
7c870d89 868 0, 'P', false, true, false);
7b5261bc 869 public static final TKeypress kbCtrlQ = new TKeypress(false,
7c870d89 870 0, 'Q', false, true, false);
7b5261bc 871 public static final TKeypress kbCtrlR = new TKeypress(false,
7c870d89 872 0, 'R', false, true, false);
7b5261bc 873 public static final TKeypress kbCtrlS = new TKeypress(false,
7c870d89 874 0, 'S', false, true, false);
7b5261bc 875 public static final TKeypress kbCtrlT = new TKeypress(false,
7c870d89 876 0, 'T', false, true, false);
7b5261bc 877 public static final TKeypress kbCtrlU = new TKeypress(false,
7c870d89 878 0, 'U', false, true, false);
7b5261bc 879 public static final TKeypress kbCtrlV = new TKeypress(false,
7c870d89 880 0, 'V', false, true, false);
7b5261bc 881 public static final TKeypress kbCtrlW = new TKeypress(false,
7c870d89 882 0, 'W', false, true, false);
7b5261bc 883 public static final TKeypress kbCtrlX = new TKeypress(false,
7c870d89 884 0, 'X', false, true, false);
7b5261bc 885 public static final TKeypress kbCtrlY = new TKeypress(false,
7c870d89 886 0, 'Y', false, true, false);
7b5261bc 887 public static final TKeypress kbCtrlZ = new TKeypress(false,
7c870d89 888 0, 'Z', false, true, false);
7b5261bc 889 public static final TKeypress kbAltShiftA = new TKeypress(false,
7c870d89 890 0, 'A', true, false, true);
7b5261bc 891 public static final TKeypress kbAltShiftB = new TKeypress(false,
7c870d89 892 0, 'B', true, false, true);
7b5261bc 893 public static final TKeypress kbAltShiftC = new TKeypress(false,
7c870d89 894 0, 'C', true, false, true);
7b5261bc 895 public static final TKeypress kbAltShiftD = new TKeypress(false,
7c870d89 896 0, 'D', true, false, true);
7b5261bc 897 public static final TKeypress kbAltShiftE = new TKeypress(false,
7c870d89 898 0, 'E', true, false, true);
7b5261bc 899 public static final TKeypress kbAltShiftF = new TKeypress(false,
7c870d89 900 0, 'F', true, false, true);
7b5261bc 901 public static final TKeypress kbAltShiftG = new TKeypress(false,
7c870d89 902 0, 'G', true, false, true);
7b5261bc 903 public static final TKeypress kbAltShiftH = new TKeypress(false,
7c870d89 904 0, 'H', true, false, true);
7b5261bc 905 public static final TKeypress kbAltShiftI = new TKeypress(false,
7c870d89 906 0, 'I', true, false, true);
7b5261bc 907 public static final TKeypress kbAltShiftJ = new TKeypress(false,
7c870d89 908 0, 'J', true, false, true);
7b5261bc 909 public static final TKeypress kbAltShiftK = new TKeypress(false,
7c870d89 910 0, 'K', true, false, true);
7b5261bc 911 public static final TKeypress kbAltShiftL = new TKeypress(false,
7c870d89 912 0, 'L', true, false, true);
7b5261bc 913 public static final TKeypress kbAltShiftM = new TKeypress(false,
7c870d89 914 0, 'M', true, false, true);
7b5261bc 915 public static final TKeypress kbAltShiftN = new TKeypress(false,
7c870d89 916 0, 'N', true, false, true);
7b5261bc 917 public static final TKeypress kbAltShiftO = new TKeypress(false,
7c870d89 918 0, 'O', true, false, true);
7b5261bc 919 public static final TKeypress kbAltShiftP = new TKeypress(false,
7c870d89 920 0, 'P', true, false, true);
7b5261bc 921 public static final TKeypress kbAltShiftQ = new TKeypress(false,
7c870d89 922 0, 'Q', true, false, true);
7b5261bc 923 public static final TKeypress kbAltShiftR = new TKeypress(false,
7c870d89 924 0, 'R', true, false, true);
7b5261bc 925 public static final TKeypress kbAltShiftS = new TKeypress(false,
7c870d89 926 0, 'S', true, false, true);
7b5261bc 927 public static final TKeypress kbAltShiftT = new TKeypress(false,
7c870d89 928 0, 'T', true, false, true);
7b5261bc 929 public static final TKeypress kbAltShiftU = new TKeypress(false,
7c870d89 930 0, 'U', true, false, true);
7b5261bc 931 public static final TKeypress kbAltShiftV = new TKeypress(false,
7c870d89 932 0, 'V', true, false, true);
7b5261bc 933 public static final TKeypress kbAltShiftW = new TKeypress(false,
7c870d89 934 0, 'W', true, false, true);
7b5261bc 935 public static final TKeypress kbAltShiftX = new TKeypress(false,
7c870d89 936 0, 'X', true, false, true);
7b5261bc 937 public static final TKeypress kbAltShiftY = new TKeypress(false,
7c870d89 938 0, 'Y', true, false, true);
7b5261bc 939 public static final TKeypress kbAltShiftZ = new TKeypress(false,
7c870d89 940 0, 'Z', true, false, true);
7b5261bc
KL
941
942 /**
943 * Backspace as ^H.
944 */
945 public static final TKeypress kbBackspace = new TKeypress(false,
7c870d89 946 0, 'H', false, true, false);
7b5261bc
KL
947
948 /**
949 * Backspace as ^?.
950 */
951 public static final TKeypress kbBackspaceDel = new TKeypress(false,
7c870d89 952 0, (char)0x7F, false, false, false);
df8de03f
KL
953
954}