@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
157 lines • 27.1 kB
JavaScript
import { browser } from "./browser";
export const toggleBold = makeKeyMapWithCommon('Bold', 'Mod-b');
export const toggleItalic = makeKeyMapWithCommon('Italic', 'Mod-i');
export const toggleUnderline = makeKeyMapWithCommon('Underline', 'Mod-u');
export const toggleStrikethrough = makeKeyMapWithCommon('Strikethrough', 'Mod-Shift-s');
export const toggleCode = makeKeyMapWithCommon('Code', 'Mod-Shift-m');
export const pastePlainText = makeKeyMapWithCommon('Paste Plain Text', 'Mod-Shift-v');
export const clearFormatting = makeKeyMapWithCommon('Clear formatting', 'Mod-\\');
export const setNormalText = makeKeymap('Normal text', '', 'Cmd-Alt-0');
export const toggleHeading1 = makeKeymap('Heading 1', '', 'Cmd-Alt-1');
export const toggleHeading2 = makeKeymap('Heading 2', '', 'Cmd-Alt-2');
export const toggleHeading3 = makeKeymap('Heading 3', '', 'Cmd-Alt-3');
export const toggleHeading4 = makeKeymap('Heading 4', '', 'Cmd-Alt-4');
export const toggleHeading5 = makeKeymap('Heading 5', '', 'Cmd-Alt-5');
export const toggleOrderedList = makeKeymap('Numbered list', '', 'Cmd-Shift-7');
export const toggleBulletList = makeKeymap('Bullet list', '', 'Cmd-Shift-8');
export const toggleBlockQuote = makeKeymap('Quote', '', 'Cmd-Alt-9');
export const toggleSuperscript = makeKeyMapWithCommon('Superscript', 'Mod-+');
export const toggleSubscript = makeKeyMapWithCommon('Subscript', 'Mod--');
export const insertNewLine = makeKeyMapWithCommon('Insert new line', 'Shift-Enter');
export const shiftBackspace = makeKeyMapWithCommon('Shift Backspace', 'Shift-Backspace');
export const splitCodeBlock = makeKeyMapWithCommon('Split code block', 'Enter');
export const splitListItem = makeKeyMapWithCommon('Split list item', 'Enter');
export const insertRule = makeKeyMapWithCommon('Insert horizontal rule', 'Mod-Shift--');
export const undo = makeKeyMapWithCommon('Undo', 'Mod-z');
export const moveUp = makeKeyMapWithCommon('Move up', 'ArrowUp');
export const moveDown = makeKeyMapWithCommon('Move down', 'ArrowDown');
export const moveLeft = makeKeyMapWithCommon('Move left', 'ArrowLeft');
export const moveRight = makeKeyMapWithCommon('Move right', 'ArrowRight');
export const indentList = makeKeyMapWithCommon('Indent List', 'Tab');
export const outdentList = makeKeyMapWithCommon('Outdent List', 'Shift-Tab');
export const redo = makeKeymap('Redo', 'Ctrl-y', 'Cmd-Shift-z');
export const redoBarred = makeKeymap('Redo Barred', 'Ctrl-Shift-z', 'Cmd-y');
export const openHelp = makeKeyMapWithCommon('Open Help', 'Mod-/');
export const addLink = makeKeyMapWithCommon('Link', 'Mod-k');
export const submit = makeKeyMapWithCommon('Submit Content', 'Mod-Enter');
export const enter = makeKeyMapWithCommon('Enter', 'Enter');
export const tab = makeKeyMapWithCommon('Tab', 'Tab');
export const indent = makeKeyMapWithCommon('Indent', 'Tab');
export const outdent = makeKeyMapWithCommon('Outdent', 'Shift-Tab');
export const backspace = makeKeyMapWithCommon('Backspace', 'Backspace');
export const deleteKey = makeKeyMapWithCommon('Delete', 'Delete');
export const space = makeKeyMapWithCommon('Space', 'Space');
export const escape = makeKeyMapWithCommon('Escape', 'Escape');
export const nextCell = makeKeyMapWithCommon('Next cell', 'Tab');
export const previousCell = makeKeyMapWithCommon('Previous cell', 'Shift-Tab');
export const toggleTable = makeKeyMapWithCommon('Table', 'Shift-Alt-t');
export const addRowBefore = makeKeyMapWithCommon('Add Row Above', 'Ctrl-Alt-ArrowUp');
export const addRowAfter = makeKeyMapWithCommon('Add Row Below', 'Ctrl-Alt-ArrowDown');
export const addColumnAfter = makeKeyMapWithCommon('Add Column After', 'Ctrl-Alt-ArrowRight');
export const addColumnBefore = makeKeyMapWithCommon('Add Column Before', 'Ctrl-Alt-ArrowLeft');
export const cut = makeKeyMapWithCommon('Cut', 'Mod-x');
export const copy = makeKeyMapWithCommon('Copy', 'Mod-c');
export const paste = makeKeyMapWithCommon('Paste', 'Mod-v');
export const altPaste = makeKeyMapWithCommon('Paste', 'Mod-Shift-v');
const arrowKeysMap = {
// for reference: https://wincent.com/wiki/Unicode_representations_of_modifier_keys
ARROWLEFT: '\u2190',
ARROWRIGHT: '\u2192',
ARROWUP: '\u2191',
ARROWDOWN: '\u2193',
};
export function tooltip(keymap, description) {
if (keymap) {
let shortcut;
if (browser.mac) {
// for reference: https://wincent.com/wiki/Unicode_representations_of_modifier_keys
shortcut = keymap.mac
.replace(/Cmd/i, '\u2318')
.replace(/Shift/i, '\u21E7')
.replace(/Ctrl/i, '\u2303')
.replace(/Alt/i, '\u2325');
}
else {
shortcut = keymap.windows;
}
const keys = shortcut.split('-');
const lastKey = keys[keys.length - 1].toUpperCase();
keys[keys.length - 1] = arrowKeysMap[lastKey] || lastKey;
shortcut = keys.join(browser.mac ? '' : '+');
return description ? `${description} ${shortcut}` : shortcut;
}
}
export function findKeymapByDescription(description) {
const matches = ALL.filter(keymap => keymap.description.toUpperCase() === description.toUpperCase());
return matches[0];
}
export function findShortcutByDescription(description) {
const keymap = findKeymapByDescription(description);
if (keymap) {
return findShortcutByKeymap(keymap);
}
}
export function findShortcutByKeymap(keymap) {
if (browser.mac) {
return keymap.mac;
}
return keymap.windows;
}
const ALL = [
toggleOrderedList,
toggleBulletList,
toggleBold,
toggleItalic,
toggleUnderline,
toggleStrikethrough,
toggleCode,
setNormalText,
toggleHeading1,
toggleHeading2,
toggleHeading3,
toggleHeading4,
toggleHeading5,
toggleBlockQuote,
insertNewLine,
insertRule,
splitCodeBlock,
splitListItem,
redo,
undo,
];
function makeKeymap(description, windows, mac, common) {
return {
description: description,
windows: windows,
mac: mac,
common: common,
};
}
function makeKeyMapWithCommon(description, common) {
const windows = common.replace(/Mod/i, 'Ctrl');
const mac = common.replace(/Mod/i, 'Cmd');
return makeKeymap(description, windows, mac, common);
}
export function bindKeymapWithCommand(shortcut, cmd, keymap) {
const oldCmd = keymap[shortcut];
let newCmd = cmd;
if (keymap[shortcut]) {
newCmd = (state, dispatch, editorView) => {
return oldCmd(state, dispatch) || cmd(state, dispatch, editorView);
};
}
keymap[shortcut] = newCmd;
}
export function findKeyMapForBrowser(kayMap) {
if (kayMap) {
if (browser.mac) {
return kayMap.mac;
}
return kayMap.windows;
}
}
export const LEFT = 37;
export const RIGHT = 39;
export const UP = 38;
export const DOWN = 40;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5bWFwLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHpvZGlhYy11aS9lZGl0b3IvIiwic291cmNlcyI6WyJsaWIva2V5bWFwcy9rZXltYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVuQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDcEUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxvQkFBb0IsQ0FDbkQsZUFBZSxFQUNmLGFBQWEsQ0FDaEIsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDdEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUM5QyxrQkFBa0IsRUFDbEIsYUFBYSxDQUNoQixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUMvQyxrQkFBa0IsRUFDbEIsUUFBUSxDQUNYLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN2RSxNQUFNLENBQUMs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QUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQztLQUNMO0lBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQWM7SUFDL0MsSUFBSSxNQUFNLEVBQUU7UUFDUixJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDckI7UUFFRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDekI7QUFDTCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2QixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9jb21tYW5kXCJcclxuaW1wb3J0IHsgYnJvd3NlciB9IGZyb20gXCIuL2Jyb3dzZXJcIlxyXG5cclxuZXhwb3J0IGNvbnN0IHRvZ2dsZUJvbGQgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignQm9sZCcsICdNb2QtYicpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlSXRhbGljID0gbWFrZUtleU1hcFdpdGhDb21tb24oJ0l0YWxpYycsICdNb2QtaScpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlVW5kZXJsaW5lID0gbWFrZUtleU1hcFdpdGhDb21tb24oJ1VuZGVybGluZScsICdNb2QtdScpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlU3RyaWtldGhyb3VnaCA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKFxyXG4gICAgJ1N0cmlrZXRocm91Z2gnLFxyXG4gICAgJ01vZC1TaGlmdC1zJyxcclxuKTtcclxuZXhwb3J0IGNvbnN0IHRvZ2dsZUNvZGUgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignQ29kZScsICdNb2QtU2hpZnQtbScpO1xyXG5leHBvcnQgY29uc3QgcGFzdGVQbGFpblRleHQgPSBtYWtlS2V5TWFwV2l0aENvbW1vbihcclxuICAgICdQYXN0ZSBQbGFpbiBUZXh0JyxcclxuICAgICdNb2QtU2hpZnQtdicsXHJcbik7XHJcbmV4cG9ydCBjb25zdCBjbGVhckZvcm1hdHRpbmcgPSBtYWtlS2V5TWFwV2l0aENvbW1vbihcclxuICAgICdDbGVhciBmb3JtYXR0aW5nJyxcclxuICAgICdNb2QtXFxcXCcsXHJcbik7XHJcbmV4cG9ydCBjb25zdCBzZXROb3JtYWxUZXh0ID0gbWFrZUtleW1hcCgnTm9ybWFsIHRleHQnLCAnJywgJ0NtZC1BbHQtMCcpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlSGVhZGluZzEgPSBtYWtlS2V5bWFwKCdIZWFkaW5nIDEnLCAnJywgJ0NtZC1BbHQtMScpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlSGVhZGluZzIgPSBtYWtlS2V5bWFwKCdIZWFkaW5nIDInLCAnJywgJ0NtZC1BbHQtMicpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlSGVhZGluZzMgPSBtYWtlS2V5bWFwKCdIZWFkaW5nIDMnLCAnJywgJ0NtZC1BbHQtMycpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlSGVhZGluZzQgPSBtYWtlS2V5bWFwKCdIZWFkaW5nIDQnLCAnJywgJ0NtZC1BbHQtNCcpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlSGVhZGluZzUgPSBtYWtlS2V5bWFwKCdIZWFkaW5nIDUnLCAnJywgJ0NtZC1BbHQtNScpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlT3JkZXJlZExpc3QgPSBtYWtlS2V5bWFwKCdOdW1iZXJlZCBsaXN0JywgJycsICdDbWQtU2hpZnQtNycpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlQnVsbGV0TGlzdCA9IG1ha2VLZXltYXAoJ0J1bGxldCBsaXN0JywgJycsICdDbWQtU2hpZnQtOCcpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlQmxvY2tRdW90ZSA9IG1ha2VLZXltYXAoJ1F1b3RlJywgJycsICdDbWQtQWx0LTknKTtcclxuZXhwb3J0IGNvbnN0IHRvZ2dsZVN1cGVyc2NyaXB0ID0gbWFrZUtleU1hcFdpdGhDb21tb24oJ1N1cGVyc2NyaXB0JywgJ01vZC0rJyk7XHJcbmV4cG9ydCBjb25zdCB0b2dnbGVTdWJzY3JpcHQgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignU3Vic2NyaXB0JywgJ01vZC0tJyk7XHJcbmV4cG9ydCBjb25zdCBpbnNlcnROZXdMaW5lID0gbWFrZUtleU1hcFdpdGhDb21tb24oXHJcbiAgICAnSW5zZXJ0IG5ldyBsaW5lJyxcclxuICAgICdTaGlmdC1FbnRlcicsXHJcbik7XHJcbmV4cG9ydCBjb25zdCBzaGlmdEJhY2tzcGFjZSA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKFxyXG4gICAgJ1NoaWZ0IEJhY2tzcGFjZScsXHJcbiAgICAnU2hpZnQtQmFja3NwYWNlJyxcclxuKTtcclxuZXhwb3J0IGNvbnN0IHNwbGl0Q29kZUJsb2NrID0gbWFrZUtleU1hcFdpdGhDb21tb24oJ1NwbGl0IGNvZGUgYmxvY2snLCAnRW50ZXInKTtcclxuZXhwb3J0IGNvbnN0IHNwbGl0TGlzdEl0ZW0gPSBtYWtlS2V5TWFwV2l0aENvbW1vbignU3BsaXQgbGlzdCBpdGVtJywgJ0VudGVyJyk7XHJcbmV4cG9ydCBjb25zdCBpbnNlcnRSdWxlID0gbWFrZUtleU1hcFdpdGhDb21tb24oXHJcbiAgICAnSW5zZXJ0IGhvcml6b250YWwgcnVsZScsXHJcbiAgICAnTW9kLVNoaWZ0LS0nLFxyXG4pO1xyXG5leHBvcnQgY29uc3QgdW5kbyA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdVbmRvJywgJ01vZC16Jyk7XHJcbmV4cG9ydCBjb25zdCBtb3ZlVXAgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignTW92ZSB1cCcsICdBcnJvd1VwJyk7XHJcbmV4cG9ydCBjb25zdCBtb3ZlRG93biA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdNb3ZlIGRvd24nLCAnQXJyb3dEb3duJyk7XHJcbmV4cG9ydCBjb25zdCBtb3ZlTGVmdCA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdNb3ZlIGxlZnQnLCAnQXJyb3dMZWZ0Jyk7XHJcbmV4cG9ydCBjb25zdCBtb3ZlUmlnaHQgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignTW92ZSByaWdodCcsICdBcnJvd1JpZ2h0Jyk7XHJcbmV4cG9ydCBjb25zdCBpbmRlbnRMaXN0ID0gbWFrZUtleU1hcFdpdGhDb21tb24oJ0luZGVudCBMaXN0JywgJ1RhYicpO1xyXG5leHBvcnQgY29uc3Qgb3V0ZGVudExpc3QgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignT3V0ZGVudCBMaXN0JywgJ1NoaWZ0LVRhYicpO1xyXG5leHBvcnQgY29uc3QgcmVkbyA9IG1ha2VLZXltYXAoJ1JlZG8nLCAnQ3RybC15JywgJ0NtZC1TaGlmdC16Jyk7XHJcbmV4cG9ydCBjb25zdCByZWRvQmFycmVkID0gbWFrZUtleW1hcCgnUmVkbyBCYXJyZWQnLCAnQ3RybC1TaGlmdC16JywgJ0NtZC15Jyk7XHJcbmV4cG9ydCBjb25zdCBvcGVuSGVscCA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdPcGVuIEhlbHAnLCAnTW9kLS8nKTtcclxuZXhwb3J0IGNvbnN0IGFkZExpbmsgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignTGluaycsICdNb2QtaycpO1xyXG5leHBvcnQgY29uc3Qgc3VibWl0ID0gbWFrZUtleU1hcFdpdGhDb21tb24oJ1N1Ym1pdCBDb250ZW50JywgJ01vZC1FbnRlcicpO1xyXG5leHBvcnQgY29uc3QgZW50ZXIgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignRW50ZXInLCAnRW50ZXInKTtcclxuZXhwb3J0IGNvbnN0IHRhYiA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdUYWInLCAnVGFiJyk7XHJcbmV4cG9ydCBjb25zdCBpbmRlbnQgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignSW5kZW50JywgJ1RhYicpO1xyXG5leHBvcnQgY29uc3Qgb3V0ZGVudCA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdPdXRkZW50JywgJ1NoaWZ0LVRhYicpO1xyXG5leHBvcnQgY29uc3QgYmFja3NwYWNlID0gbWFrZUtleU1hcFdpdGhDb21tb24oJ0JhY2tzcGFjZScsICdCYWNrc3BhY2UnKTtcclxuZXhwb3J0IGNvbnN0IGRlbGV0ZUtleSA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdEZWxldGUnLCAnRGVsZXRlJyk7XHJcbmV4cG9ydCBjb25zdCBzcGFjZSA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdTcGFjZScsICdTcGFjZScpO1xyXG5leHBvcnQgY29uc3QgZXNjYXBlID0gbWFrZUtleU1hcFdpdGhDb21tb24oJ0VzY2FwZScsICdFc2NhcGUnKTtcclxuZXhwb3J0IGNvbnN0IG5leHRDZWxsID0gbWFrZUtleU1hcFdpdGhDb21tb24oJ05leHQgY2VsbCcsICdUYWInKTtcclxuZXhwb3J0IGNvbnN0IHByZXZpb3VzQ2VsbCA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdQcmV2aW91cyBjZWxsJywgJ1NoaWZ0LVRhYicpO1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlVGFibGUgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignVGFibGUnLCAnU2hpZnQtQWx0LXQnKTtcclxuZXhwb3J0IGNvbnN0IGFkZFJvd0JlZm9yZSA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKFxyXG4gICAgJ0FkZCBSb3cgQWJvdmUnLFxyXG4gICAgJ0N0cmwtQWx0LUFycm93VXAnLFxyXG4pO1xyXG5leHBvcnQgY29uc3QgYWRkUm93QWZ0ZXIgPSBtYWtlS2V5TWFwV2l0aENvbW1vbihcclxuICAgICdBZGQgUm93IEJlbG93JyxcclxuICAgICdDdHJsLUFsdC1BcnJvd0Rvd24nLFxyXG4pO1xyXG5leHBvcnQgY29uc3QgYWRkQ29sdW1uQWZ0ZXIgPSBtYWtlS2V5TWFwV2l0aENvbW1vbihcclxuICAgICdBZGQgQ29sdW1uIEFmdGVyJyxcclxuICAgICdDdHJsLUFsdC1BcnJvd1JpZ2h0JyxcclxuKTtcclxuZXhwb3J0IGNvbnN0IGFkZENvbHVtbkJlZm9yZSA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKFxyXG4gICAgJ0FkZCBDb2x1bW4gQmVmb3JlJyxcclxuICAgICdDdHJsLUFsdC1BcnJvd0xlZnQnLFxyXG4pO1xyXG5leHBvcnQgY29uc3QgY3V0ID0gbWFrZUtleU1hcFdpdGhDb21tb24oJ0N1dCcsICdNb2QteCcpO1xyXG5leHBvcnQgY29uc3QgY29weSA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdDb3B5JywgJ01vZC1jJyk7XHJcbmV4cG9ydCBjb25zdCBwYXN0ZSA9IG1ha2VLZXlNYXBXaXRoQ29tbW9uKCdQYXN0ZScsICdNb2QtdicpO1xyXG5leHBvcnQgY29uc3QgYWx0UGFzdGUgPSBtYWtlS2V5TWFwV2l0aENvbW1vbignUGFzdGUnLCAnTW9kLVNoaWZ0LXYnKTtcclxuXHJcbmNvbnN0IGFycm93S2V5c01hcCA9IHtcclxuICAgIC8vIGZvciByZWZlcmVuY2U6IGh0dHBzOi8vd2luY2VudC5jb20vd2lraS9Vbmljb2RlX3JlcHJlc2VudGF0aW9uc19vZl9tb2RpZmllcl9rZXlzXHJcbiAgICBBUlJPV0xFRlQ6ICdcXHUyMTkwJyxcclxuICAgIEFSUk9XUklHSFQ6ICdcXHUyMTkyJyxcclxuICAgIEFSUk9XVVA6ICdcXHUyMTkxJyxcclxuICAgIEFSUk9XRE9XTjogJ1xcdTIxOTMnLFxyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRvb2x0aXAoXHJcbiAgICBrZXltYXA6IEtleW1hcCB8IHVuZGVmaW5lZCxcclxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxyXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKGtleW1hcCkge1xyXG4gICAgICAgIGxldCBzaG9ydGN1dDogc3RyaW5nO1xyXG4gICAgICAgIGlmIChicm93c2VyLm1hYykge1xyXG4gICAgICAgICAgICAvLyBmb3IgcmVmZXJlbmNlOiBodHRwczovL3dpbmNlbnQuY29tL3dpa2kvVW5pY29kZV9yZXByZXNlbnRhdGlvbnNfb2ZfbW9kaWZpZXJfa2V5c1xyXG4gICAgICAgICAgICBzaG9ydGN1dCA9IGtleW1hcC5tYWNcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9DbWQvaSwgJ1xcdTIzMTgnKVxyXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1NoaWZ0L2ksICdcXHUyMUU3JylcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9DdHJsL2ksICdcXHUyMzAzJylcclxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9BbHQvaSwgJ1xcdTIzMjUnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaG9ydGN1dCA9IGtleW1hcC53aW5kb3dzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBrZXlzID0gc2hvcnRjdXQuc3BsaXQoJy0nKTtcclxuICAgICAgICBjb25zdCBsYXN0S2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAga2V5c1trZXlzLmxlbmd0aCAtIDFdID0gYXJyb3dLZXlzTWFwW2xhc3RLZXldIHx8IGxhc3RLZXk7XHJcbiAgICAgICAgc2hvcnRjdXQgPSBrZXlzLmpvaW4oYnJvd3Nlci5tYWMgPyAnJyA6ICcrJyk7XHJcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uID8gYCR7ZGVzY3JpcHRpb259ICR7c2hvcnRjdXR9YCA6IHNob3J0Y3V0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZEtleW1hcEJ5RGVzY3JpcHRpb24oXHJcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxyXG4pOiBLZXltYXAgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgbWF0Y2hlcyA9IEFMTC5maWx0ZXIoXHJcbiAgICAgICAga2V5bWFwID0+IGtleW1hcC5kZXNjcmlwdGlvbi50b1VwcGVyQ2FzZSgpID09PSBkZXNjcmlwdGlvbi50b1VwcGVyQ2FzZSgpLFxyXG4gICAgKTtcclxuICAgIHJldHVybiBtYXRjaGVzWzBdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZFNob3J0Y3V0QnlEZXNjcmlwdGlvbihcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXHJcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBrZXltYXAgPSBmaW5kS2V5bWFwQnlEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7XHJcbiAgICBpZiAoa2V5bWFwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpbmRTaG9ydGN1dEJ5S2V5bWFwKGtleW1hcCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2hvcnRjdXRCeUtleW1hcChrZXltYXA6IEtleW1hcCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoYnJvd3Nlci5tYWMpIHtcclxuICAgICAgICByZXR1cm4ga2V5bWFwLm1hYztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5bWFwLndpbmRvd3M7XHJcbn1cclxuXHJcbmNvbnN0IEFMTCA9IFtcclxuICAgIHRvZ2dsZU9yZGVyZWRMaXN0LFxyXG4gICAgdG9nZ2xlQnVsbGV0TGlzdCxcclxuICAgIHRvZ2dsZUJvbGQsXHJcbiAgICB0b2dnbGVJdGFsaWMsXHJcbiAgICB0b2dnbGVVbmRlcmxpbmUsXHJcbiAgICB0b2dnbGVTdHJpa2V0aHJvdWdoLFxyXG4gICAgdG9nZ2xlQ29kZSxcclxuICAgIHNldE5vcm1hbFRleHQsXHJcbiAgICB0b2dnbGVIZWFkaW5nMSxcclxuICAgIHRvZ2dsZUhlYWRpbmcyLFxyXG4gICAgdG9nZ2xlSGVhZGluZzMsXHJcbiAgICB0b2dnbGVIZWFkaW5nNCxcclxuICAgIHRvZ2dsZUhlYWRpbmc1LFxyXG4gICAgdG9nZ2xlQmxvY2tRdW90ZSxcclxuICAgIGluc2VydE5ld0xpbmUsXHJcbiAgICBpbnNlcnRSdWxlLFxyXG4gICAgc3BsaXRDb2RlQmxvY2ssXHJcbiAgICBzcGxpdExpc3RJdGVtLFxyXG4gICAgcmVkbyxcclxuICAgIHVuZG8sXHJcbl07XHJcblxyXG5mdW5jdGlvbiBtYWtlS2V5bWFwKFxyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcclxuICAgIHdpbmRvd3M6IHN0cmluZyxcclxuICAgIG1hYzogc3RyaW5nLFxyXG4gICAgY29tbW9uPzogc3RyaW5nLFxyXG4pOiBLZXltYXAge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXHJcbiAgICAgICAgd2luZG93czogd2luZG93cyxcclxuICAgICAgICBtYWM6IG1hYyxcclxuICAgICAgICBjb21tb246IGNvbW1vbixcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VLZXlNYXBXaXRoQ29tbW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcsIGNvbW1vbjogc3RyaW5nKTogS2V5bWFwIHtcclxuICAgIGNvbnN0IHdpbmRvd3MgPSBjb21tb24ucmVwbGFjZSgvTW9kL2ksICdDdHJsJyk7XHJcbiAgICBjb25zdCBtYWMgPSBjb21tb24ucmVwbGFjZSgvTW9kL2ksICdDbWQnKTtcclxuICAgIHJldHVybiBtYWtlS2V5bWFwKGRlc2NyaXB0aW9uLCB3aW5kb3dzLCBtYWMsIGNvbW1vbik7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgS2V5bWFwIHtcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgICB3aW5kb3dzOiBzdHJpbmc7XHJcbiAgICBtYWM6IHN0cmluZztcclxuICAgIGNvbW1vbj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJpbmRLZXltYXBXaXRoQ29tbWFuZChcclxuICAgIHNob3J0Y3V0OiBzdHJpbmcsXHJcbiAgICBjbWQ6IENvbW1hbmQsXHJcbiAgICBrZXltYXA6IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfSxcclxuKSB7XHJcbiAgICBjb25zdCBvbGRDbWQgPSBrZXltYXBbc2hvcnRjdXRdO1xyXG4gICAgbGV0IG5ld0NtZCA9IGNtZDtcclxuICAgIGlmIChrZXltYXBbc2hvcnRjdXRdKSB7XHJcbiAgICAgICAgbmV3Q21kID0gKHN0YXRlLCBkaXNwYXRjaCwgZWRpdG9yVmlldykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gb2xkQ21kKHN0YXRlLCBkaXNwYXRjaCkgfHwgY21kKHN0YXRlLCBkaXNwYXRjaCwgZWRpdG9yVmlldyk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGtleW1hcFtzaG9ydGN1dF0gPSBuZXdDbWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaW5kS2V5TWFwRm9yQnJvd3NlcihrYXlNYXA6IEtleW1hcCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoa2F5TWFwKSB7XHJcbiAgICAgICAgaWYgKGJyb3dzZXIubWFjKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBrYXlNYXAubWFjO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGtheU1hcC53aW5kb3dzO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgTEVGVCA9IDM3O1xyXG5leHBvcnQgY29uc3QgUklHSFQgPSAzOTtcclxuZXhwb3J0IGNvbnN0IFVQID0gMzg7XHJcbmV4cG9ydCBjb25zdCBET1dOID0gNDA7XHJcbiJdfQ==