Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_000178
T

162 lines
22 KiB
Plaintext

import Document from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-document.js?v=e4f18c29";
import Paragraph from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-paragraph.js?v=e4f18c29";
import Text from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-text.js?v=e4f18c29";
import Underline from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-underline.js?v=e4f18c29";
import Bold from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-bold.js?v=e4f18c29";
import Italic from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-italic.js?v=e4f18c29";
import Strike from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-strike.js?v=e4f18c29";
import Link from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-link.js?v=e4f18c29";
import HardBreak from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-hard-break.js?v=e4f18c29";
import History from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-history.js?v=e4f18c29";
import Placeholder from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_extension-placeholder.js?v=e4f18c29";
import { Node, Extension } from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_core.js?v=e4f18c29";
import { TextSelection } from "/_nuxt/node_modules/.cache/vite/client/deps/@tiptap_pm_state.js?v=e4f18c29";
import { VALID_HTTP_URL } from "/_nuxt/lib/common/helpers/validation.ts";
import { getMentionExtension } from "/_nuxt/lib/core/tiptap/mentionExtension.ts";
import { LegacyEmailMention } from "/_nuxt/lib/core/tiptap/emailMentionExtension.ts";
import { EditorInstanceStateStorage } from "/_nuxt/lib/core/tiptap/editorStateExtension.ts";
const InlineDoc = Node.create({
name: "doc",
topNode: true,
content: "block"
});
const EnterKeypressTrackerExtension = Extension.create({
name: "enterKeypressTracker",
addStorage() {
return {
/**
* Bizarre, but the TipTap extension storage is globally shared between all instances of
* the extension. This is why I have to store callbacks separately per editor instance
*/
editorCallbacks: /* @__PURE__ */ new WeakMap(),
subscribe(editor, cb) {
const storage = editor.storage.enterKeypressTracker;
const editorCallbacks = storage.editorCallbacks.get(editor) || [];
const idx = editorCallbacks.indexOf(cb);
if (idx !== -1) return;
editorCallbacks.push(cb);
storage.editorCallbacks.set(editor, editorCallbacks);
},
unsubscribe(editor, cb) {
const storage = editor.storage.enterKeypressTracker;
const editorCallbacks = storage.editorCallbacks.get(editor) || [];
const idx = editorCallbacks.indexOf(cb);
if (idx === -1) return;
editorCallbacks.splice(idx, 1);
storage.editorCallbacks.set(editor, editorCallbacks);
}
};
},
addKeyboardShortcuts() {
return {
Enter: () => {
const { storage, editor } = this;
const callbacks = storage.editorCallbacks.get(editor) || [];
if (!callbacks?.length) return false;
for (const cb of callbacks) {
cb();
}
return true;
}
};
}
});
const UtilitiesExtension = Extension.create({
name: "speckleUtilities",
/**
* Various utility functions that aren't TipTap commands
*/
addStorage() {
return {
/**
* Get currently selected text or null if no selection
*/
getSelectedText: (editor) => {
const { from, to, empty } = editor.state.selection;
if (empty) {
return null;
}
return editor.state.doc.textBetween(from, to, " ");
},
/**
* Get full text of the selected link node
* @param {import('@tiptap/core').Editor} editor
*/
getLinkText: (editor) => {
const { $from: pos } = editor.state.selection;
if (!pos) return null;
const isLinkInclusive = editor.schema.mark("link").type.spec.inclusive || false;
let parentChildIdx = pos.index();
if (isLinkInclusive) {
parentChildIdx = Math.max(0, pos.textOffset ? pos.index() : pos.index() - 1);
}
const parent = pos.parent;
const textNode = parent.child(parentChildIdx);
if (!textNode.marks.find((m) => m.type.name === "link")) return null;
return textNode.textContent;
}
};
},
/**
* Only add "commands" here (they should mutate the state of the editor and be transactional)
*/
addCommands() {
return {
/**
* Insert new link or update the one currently selected with a new title & URL
*/
addOrUpdateLink: (url, title) => (cmdProps) => {
const { chain } = cmdProps;
const cmdChain = chain().focus();
cmdChain.extendMarkRange("link");
cmdChain.insertContent(title);
cmdChain.command((cmdProps2) => {
const { tr } = cmdProps2;
const selection = tr.selection;
const $anchor = tr.selection.$anchor;
const $head = tr.doc.resolve(selection.anchor - title.length);
const newSelection = new TextSelection($anchor, $head);
tr.setSelection(newSelection);
return true;
});
cmdChain.setLink({ href: url });
cmdChain.command((cmdProps2) => {
const { tr } = cmdProps2;
const newSelection = new TextSelection(tr.selection.$to);
tr.setSelection(newSelection);
return true;
});
return cmdChain.run();
}
};
}
});
export function getEditorExtensions(schemaOptions, extensionOptions) {
const { multiLine = true } = schemaOptions || {};
const { placeholder, projectId } = extensionOptions || {};
return [
...multiLine ? [Document] : [InlineDoc, EnterKeypressTrackerExtension.configure()],
HardBreak,
UtilitiesExtension,
Text,
Paragraph,
Bold,
Underline,
Italic,
Strike,
Link.configure({
// Only allow http protocol links (no JS)
validate: (href) => VALID_HTTP_URL.test(href),
// Open on click would be too annoying during editing
openOnClick: false,
autolink: true
}),
EditorInstanceStateStorage.configure({ projectId, test: (/* @__PURE__ */ new Date()).toISOString() }),
getMentionExtension(),
LegacyEmailMention,
History,
...placeholder ? [Placeholder.configure({ placeholder })] : []
];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRpcHRhcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRG9jdW1lbnQgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tZG9jdW1lbnQnXHJcbmltcG9ydCBQYXJhZ3JhcGggZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tcGFyYWdyYXBoJ1xyXG5pbXBvcnQgVGV4dCBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10ZXh0J1xyXG5pbXBvcnQgVW5kZXJsaW5lIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSdcclxuaW1wb3J0IEJvbGQgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYm9sZCdcclxuaW1wb3J0IEl0YWxpYyBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pdGFsaWMnXHJcbmltcG9ydCBTdHJpa2UgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3RyaWtlJ1xyXG5pbXBvcnQgTGluayBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saW5rJ1xyXG5pbXBvcnQgSGFyZEJyZWFrIGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhhcmQtYnJlYWsnXHJcbmltcG9ydCBIaXN0b3J5IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhpc3RvcnknXHJcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1wbGFjZWhvbGRlcidcclxuaW1wb3J0IHsgTm9kZSwgRXh0ZW5zaW9uIH0gZnJvbSAnQHRpcHRhcC9jb3JlJ1xyXG5pbXBvcnQgdHlwZSB7IENvbW1hbmRQcm9wcywgRWRpdG9yIH0gZnJvbSAnQHRpcHRhcC9jb3JlJ1xyXG5pbXBvcnQgeyBUZXh0U2VsZWN0aW9uIH0gZnJvbSAnQHRpcHRhcC9wbS9zdGF0ZSdcclxuXHJcbmltcG9ydCB7IFZBTElEX0hUVFBfVVJMIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3ZhbGlkYXRpb24nXHJcbmltcG9ydCB0eXBlIHsgTnVsbGFibGUgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQnXHJcbmltcG9ydCB7IGdldE1lbnRpb25FeHRlbnNpb24gfSBmcm9tICd+fi9saWIvY29yZS90aXB0YXAvbWVudGlvbkV4dGVuc2lvbidcclxuaW1wb3J0IHsgTGVnYWN5RW1haWxNZW50aW9uIH0gZnJvbSAnfi9saWIvY29yZS90aXB0YXAvZW1haWxNZW50aW9uRXh0ZW5zaW9uJ1xyXG5pbXBvcnQgeyBFZGl0b3JJbnN0YW5jZVN0YXRlU3RvcmFnZSB9IGZyb20gJ34vbGliL2NvcmUvdGlwdGFwL2VkaXRvclN0YXRlRXh0ZW5zaW9uJ1xyXG5cclxuZGVjbGFyZSBtb2R1bGUgJ0B0aXB0YXAvY29yZScge1xyXG4gIGludGVyZmFjZSBDb21tYW5kczxSZXR1cm5UeXBlPiB7XHJcbiAgICBzcGVja2xlVXRpbGl0aWVzOiB7XHJcbiAgICAgIGFkZE9yVXBkYXRlTGluazogKHVybDogc3RyaW5nLCB0aXRsZTogc3RyaW5nKSA9PiBSZXR1cm5UeXBlXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUaXB0YXBFZGl0b3JTY2hlbWFPcHRpb25zID0ge1xyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGRvY3VtZW50IHN1cHBvcnRzIG11bHRpLWxpbmUgaW5wdXRcclxuICAgKi9cclxuICBtdWx0aUxpbmU/OiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFRpcHRhcEVkaXRvckV4dGVuc2lvbk9wdGlvbnMgPSB7XHJcbiAgLyoqXHJcbiAgICogUGxhY2Vob2xkZXIgdG8gc2hvdywgaWYgYW55XHJcbiAgICovXHJcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgc2V0LCB3aWxsIGJlIHVzZWQgdG8gaW52aXRlIHVzZXJzIHRvIHRoaXMgcHJvamVjdCB3aGVuIHRoZSByZWxldmFudCBDVEEgaXMgdHJpZ2dlcmVkIChlLmcuIGVtYWlsIG1lbnRpb25zKVxyXG4gICAqL1xyXG4gIHByb2plY3RJZD86IHN0cmluZ1xyXG59XHJcblxyXG4vKipcclxuICogRG9jdW1lbnQgbm9kZSB0aGF0IG9ubHkgc3VwcG9ydHMgaW5saW5lIGNvbnRlbnQgKG5vIHBhcmFncmFwaHMgb3IgbGluZSBicmVha3MpXHJcbiAqL1xyXG5jb25zdCBJbmxpbmVEb2MgPSBOb2RlLmNyZWF0ZSh7XHJcbiAgbmFtZTogJ2RvYycsXHJcbiAgdG9wTm9kZTogdHJ1ZSxcclxuICBjb250ZW50OiAnYmxvY2snXHJcbn0pXHJcblxyXG5leHBvcnQgdHlwZSBFbnRlcktleXByZXNzVHJhY2tlckV4dGVuc2lvblN0b3JhZ2UgPSB7XHJcbiAgZWRpdG9yQ2FsbGJhY2tzOiBXZWFrTWFwPEVkaXRvciwgQXJyYXk8KCkgPT4gdm9pZD4+XHJcbiAgc3Vic2NyaWJlOiAoZWRpdG9yOiBFZGl0b3IsIGNiOiAoKSA9PiB2b2lkKSA9PiB2b2lkXHJcbiAgdW5zdWJzY3JpYmU6IChlZGl0b3I6IEVkaXRvciwgY2I6ICgpID0+IHZvaWQpID0+IHZvaWRcclxufVxyXG5cclxuLyoqXHJcbiAqIFVzZWQgdG8gdHJhY2sgRW50ZXIgZXZlbnRzIGZvciBzdWJtaXR0aW5nIG9uIGVudGVyIGV0Yy5cclxuICovXHJcbmNvbnN0IEVudGVyS2V5cHJlc3NUcmFja2VyRXh0ZW5zaW9uID0gRXh0ZW5zaW9uLmNyZWF0ZTxcclxuICB1bmtub3duLFxyXG4gIEVudGVyS2V5cHJlc3NUcmFja2VyRXh0ZW5zaW9uU3RvcmFnZVxyXG4+KHtcclxuICBuYW1lOiAnZW50ZXJLZXlwcmVzc1RyYWNrZXInLFxyXG5cclxuICBhZGRTdG9yYWdlKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJpemFycmUsIGJ1dCB0aGUgVGlwVGFwIGV4dGVuc2lvbiBzdG9yYWdlIGlzIGdsb2JhbGx5IHNoYXJlZCBiZXR3ZWVuIGFsbCBpbnN0YW5jZXMgb2ZcclxuICAgICAgICogdGhlIGV4dGVuc2lvbi4gVGhpcyBpcyB3aHkgSSBoYXZlIHRvIHN0b3JlIGNhbGxiYWNrcyBzZXBhcmF0ZWx5IHBlciBlZGl0b3IgaW5zdGFuY2VcclxuICAgICAgICovXHJcbiAgICAgIGVkaXRvckNhbGxiYWNrczogbmV3IFdlYWtNYXAoKSxcclxuICAgICAgc3Vic2NyaWJlKGVkaXRvciwgY2IpIHtcclxuICAgICAgICBjb25zdCBzdG9yYWdlID0gZWRpdG9yLnN0b3JhZ2VcclxuICAgICAgICAgIC5lbnRlcktleXByZXNzVHJhY2tlciBhcyBFbnRlcktleXByZXNzVHJhY2tlckV4dGVuc2lvblN0b3JhZ2VcclxuICAgICAgICBjb25zdCBlZGl0b3JDYWxsYmFja3MgPSBzdG9yYWdlLmVkaXRvckNhbGxiYWNrcy5nZXQoZWRpdG9yKSB8fCBbXVxyXG5cclxuICAgICAgICBjb25zdCBpZHggPSBlZGl0b3JDYWxsYmFja3MuaW5kZXhPZihjYilcclxuICAgICAgICBpZiAoaWR4ICE9PSAtMSkgcmV0dXJuXHJcblxyXG4gICAgICAgIGVkaXRvckNhbGxiYWNrcy5wdXNoKGNiKVxyXG4gICAgICAgIHN0b3JhZ2UuZWRpdG9yQ2FsbGJhY2tzLnNldChlZGl0b3IsIGVkaXRvckNhbGxiYWNrcylcclxuICAgICAgfSxcclxuICAgICAgdW5zdWJzY3JpYmUoZWRpdG9yLCBjYikge1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSBlZGl0b3Iuc3RvcmFnZVxyXG4gICAgICAgICAgLmVudGVyS2V5cHJlc3NUcmFja2VyIGFzIEVudGVyS2V5cHJlc3NUcmFja2VyRXh0ZW5zaW9uU3RvcmFnZVxyXG4gICAgICAgIGNvbnN0IGVkaXRvckNhbGxiYWNrcyA9IHN0b3JhZ2UuZWRpdG9yQ2FsbGJhY2tzLmdldChlZGl0b3IpIHx8IFtdXHJcblxyXG4gICAgICAgIGNvbnN0IGlkeCA9IGVkaXRvckNhbGxiYWNrcy5pbmRleE9mKGNiKVxyXG4gICAgICAgIGlmIChpZHggPT09IC0xKSByZXR1cm5cclxuXHJcbiAgICAgICAgZWRpdG9yQ2FsbGJhY2tzLnNwbGljZShpZHgsIDEpXHJcbiAgICAgICAgc3RvcmFnZS5lZGl0b3JDYWxsYmFja3Muc2V0KGVkaXRvciwgZWRpdG9yQ2FsbGJhY2tzKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgYWRkS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBFbnRlcjogKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgc3RvcmFnZSwgZWRpdG9yIH0gPSB0aGlzXHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gc3RvcmFnZS5lZGl0b3JDYWxsYmFja3MuZ2V0KGVkaXRvcikgfHwgW11cclxuXHJcbiAgICAgICAgaWYgKCFjYWxsYmFja3M/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY2Igb2YgY2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICBjYigpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59KVxyXG5cclxuZXhwb3J0IHR5cGUgU3BlY2tsZVV0aWxpdGllc0V4dGVuc2lvblN0b3JhZ2UgPSB7XHJcbiAgZ2V0U2VsZWN0ZWRUZXh0OiAoZWRpdG9yOiBFZGl0b3IpID0+IE51bGxhYmxlPHN0cmluZz5cclxuICBnZXRMaW5rVGV4dDogKGVkaXRvcjogRWRpdG9yKSA9PiBOdWxsYWJsZTxzdHJpbmc+XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWYXJpb3VzIHVzZWZ1bCB1dGlsaXR5IGNvbW1hbmRzXHJcbiAqL1xyXG5jb25zdCBVdGlsaXRpZXNFeHRlbnNpb24gPSBFeHRlbnNpb24uY3JlYXRlPHVua25vd24sIFNwZWNrbGVVdGlsaXRpZXNFeHRlbnNpb25TdG9yYWdlPih7XHJcbiAgbmFtZTogJ3NwZWNrbGVVdGlsaXRpZXMnLFxyXG5cclxuICAvKipcclxuICAgKiBWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQgYXJlbid0IFRpcFRhcCBjb21tYW5kc1xyXG4gICAqL1xyXG4gIGFkZFN0b3JhZ2UoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvKipcclxuICAgICAgICogR2V0IGN1cnJlbnRseSBzZWxlY3RlZCB0ZXh0IG9yIG51bGwgaWYgbm8gc2VsZWN0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBnZXRTZWxlY3RlZFRleHQ6IChlZGl0b3IpID0+IHtcclxuICAgICAgICBjb25zdCB7IGZyb20sIHRvLCBlbXB0eSB9ID0gZWRpdG9yLnN0YXRlLnNlbGVjdGlvblxyXG5cclxuICAgICAgICBpZiAoZW1wdHkpIHtcclxuICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZWRpdG9yLnN0YXRlLmRvYy50ZXh0QmV0d2Vlbihmcm9tLCB0bywgJyAnKVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdldCBmdWxsIHRleHQgb2YgdGhlIHNlbGVjdGVkIGxpbmsgbm9kZVxyXG4gICAgICAgKiBAcGFyYW0ge2ltcG9ydCgnQHRpcHRhcC9jb3JlJykuRWRpdG9yfSBlZGl0b3JcclxuICAgICAgICovXHJcbiAgICAgIGdldExpbmtUZXh0OiAoZWRpdG9yKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyAkZnJvbTogcG9zIH0gPSBlZGl0b3Iuc3RhdGUuc2VsZWN0aW9uXHJcbiAgICAgICAgaWYgKCFwb3MpIHJldHVybiBudWxsXHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIGxpbmsgbWFyayBpcyBpbmNsdXNpdmUsIGFzIHRoaXMgY2hhbmdlcyB0aGUgY2hpbGQgaWR4IHJlc29sdXRpb24gYWxnb1xyXG4gICAgICAgIGNvbnN0IGlzTGlua0luY2x1c2l2ZSA9IGVkaXRvci5zY2hlbWEubWFyaygnbGluaycpLnR5cGUuc3BlYy5pbmNsdXNpdmUgfHwgZmFsc2VcclxuXHJcbiAgICAgICAgLy8gUmVzb2x2ZSBsaW5rIG5vZGUncyBpbmRleCB1c2luZyBwYXJlbnRcclxuICAgICAgICBsZXQgcGFyZW50Q2hpbGRJZHggPSBwb3MuaW5kZXgoKVxyXG4gICAgICAgIGlmIChpc0xpbmtJbmNsdXNpdmUpIHtcclxuICAgICAgICAgIC8vIFNpbmNlIGxpbmsgaXMgaW5jbHVzaXZlLCBpZiB0ZXh0T2Zmc2V0IGlzIDAgKHRoZSBjdXJzb3IgaXMgYXQgdGhlIGVuZCBvZiB0aGUgbGluaykgd2UgbmVlZFxyXG4gICAgICAgICAgLy8gdG8gZGVjcmVhc2UgaW5kZXggYnkgMSB0byBnZXQgdGhlIGFjdHVhbCBsaW5rLCBub3QgdGhlIG5leHQgbm9kZVxyXG4gICAgICAgICAgLy8gRXhjZXB0IGlmIHRoZSBjdXJzb3IgaXMgYXQgdGhlIHZlcnkgYmVnaW5uaW5nICh3aGljaCBpcyB3aHkgd2UgY2xhbXAgaXQpXHJcbiAgICAgICAgICBwYXJlbnRDaGlsZElkeCA9IE1hdGgubWF4KDAsIHBvcy50ZXh0T2Zmc2V0ID8gcG9zLmluZGV4KCkgOiBwb3MuaW5kZXgoKSAtIDEpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBwb3MucGFyZW50XHJcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBwYXJlbnQuY2hpbGQocGFyZW50Q2hpbGRJZHgpXHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIGFjdHVhbGx5IGEgbGlua1xyXG4gICAgICAgIGlmICghdGV4dE5vZGUubWFya3MuZmluZCgobSkgPT4gbS50eXBlLm5hbWUgPT09ICdsaW5rJykpIHJldHVybiBudWxsXHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZS50ZXh0Q29udGVudFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICogT25seSBhZGQgXCJjb21tYW5kc1wiIGhlcmUgKHRoZXkgc2hvdWxkIG11dGF0ZSB0aGUgc3RhdGUgb2YgdGhlIGVkaXRvciBhbmQgYmUgdHJhbnNhY3Rpb25hbClcclxuICAgKi9cclxuICBhZGRDb21tYW5kcygpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBJbnNlcnQgbmV3IGxpbmsgb3IgdXBkYXRlIHRoZSBvbmUgY3VycmVudGx5IHNlbGVjdGVkIHdpdGggYSBuZXcgdGl0bGUgJiBVUkxcclxuICAgICAgICovXHJcbiAgICAgIGFkZE9yVXBkYXRlTGluazogKHVybDogc3RyaW5nLCB0aXRsZTogc3RyaW5nKSA9PiAoY21kUHJvcHM6IENvbW1hbmRQcm9wcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgY2hhaW4gfSA9IGNtZFByb3BzXHJcbiAgICAgICAgY29uc3QgY21kQ2hhaW4gPSBjaGFpbigpLmZvY3VzKClcclxuXHJcbiAgICAgICAgLy8gQ2hhbmdlIHNlbGVjdGlvbiB0byBlbnRpcmUgbGluaywgaWYgcGFydCBvZiBpdCBpcyBzZWxlY3RlZFxyXG4gICAgICAgIGNtZENoYWluLmV4dGVuZE1hcmtSYW5nZSgnbGluaycpXHJcblxyXG4gICAgICAgIC8vIEluc2VydCAoJiByZXBsYWNlIG9sZCwgaWYgc2VsZWN0aW9uIGlzbnQgZW1wdHkpIG5ldyB0aXRsZVxyXG4gICAgICAgIGNtZENoYWluLmluc2VydENvbnRlbnQodGl0bGUpXHJcblxyXG4gICAgICAgIC8vIFNlbGVjdCBuZXdseSBjcmVhdGVkIHRleHRcclxuICAgICAgICBjbWRDaGFpbi5jb21tYW5kKChjbWRQcm9wcykgPT4ge1xyXG4gICAgICAgICAgY29uc3QgeyB0ciB9ID0gY21kUHJvcHNcclxuXHJcbiAgICAgICAgICAvLyBTZWxlY3QgdGhlIG5ld2x5IGFkZGVkIHRleHRcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRyLnNlbGVjdGlvblxyXG4gICAgICAgICAgY29uc3QgJGFuY2hvciA9IHRyLnNlbGVjdGlvbi4kYW5jaG9yIC8vIGluc2VydENvbnRlbnQoKSBtb3ZlcyBzZWxlY3Rpb24gdG8gdGhlIGVuZCBvZiB0aGUgbmV3IHRleHRcclxuICAgICAgICAgIGNvbnN0ICRoZWFkID0gdHIuZG9jLnJlc29sdmUoc2VsZWN0aW9uLmFuY2hvciAtIHRpdGxlLmxlbmd0aClcclxuXHJcbiAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBuZXcgVGV4dFNlbGVjdGlvbigkYW5jaG9yLCAkaGVhZClcclxuICAgICAgICAgIHRyLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pXHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIC8vIFNldCBpdCB0byBiZSBhIGxpbmtcclxuICAgICAgICBjbWRDaGFpbi5zZXRMaW5rKHsgaHJlZjogdXJsIH0pXHJcblxyXG4gICAgICAgIC8vIENvbGxhcHNlIHNlbGVjdGlvbiB0byBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBsaW5rXHJcbiAgICAgICAgY21kQ2hhaW4uY29tbWFuZCgoY21kUHJvcHMpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHsgdHIgfSA9IGNtZFByb3BzXHJcblxyXG4gICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IFRleHRTZWxlY3Rpb24odHIuc2VsZWN0aW9uLiR0bylcclxuICAgICAgICAgIHRyLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pXHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIC8vIFJ1biBjaGFpblxyXG4gICAgICAgIHJldHVybiBjbWRDaGFpbi5ydW4oKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59KVxyXG5cclxuLyoqXHJcbiAqIEdldCBUaXBUYXAgZWRpdG9yIGV4dGVuc2lvbnMgdGhhdCBzaG91bGQgYmUgbG9hZGVkIGluIHRoZSBlZGl0b3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGl0b3JFeHRlbnNpb25zKFxyXG4gIHNjaGVtYU9wdGlvbnM/OiBUaXB0YXBFZGl0b3JTY2hlbWFPcHRpb25zLFxyXG4gIGV4dGVuc2lvbk9wdGlvbnM/OiBUaXB0YXBFZGl0b3JFeHRlbnNpb25PcHRpb25zXHJcbikge1xyXG4gIGNvbnN0IHsgbXVsdGlMaW5lID0gdHJ1ZSB9ID0gc2NoZW1hT3B0aW9ucyB8fCB7fVxyXG4gIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHByb2plY3RJZCB9ID0gZXh0ZW5zaW9uT3B0aW9ucyB8fCB7fVxyXG4gIHJldHVybiBbXHJcbiAgICAuLi4obXVsdGlMaW5lXHJcbiAgICAgID8gW0RvY3VtZW50XVxyXG4gICAgICA6IFtJbmxpbmVEb2MsIEVudGVyS2V5cHJlc3NUcmFja2VyRXh0ZW5zaW9uLmNvbmZpZ3VyZSgpXSksXHJcbiAgICBIYXJkQnJlYWssXHJcbiAgICBVdGlsaXRpZXNFeHRlbnNpb24sXHJcbiAgICBUZXh0LFxyXG4gICAgUGFyYWdyYXBoLFxyXG4gICAgQm9sZCxcclxuICAgIFVuZGVybGluZSxcclxuICAgIEl0YWxpYyxcclxuICAgIFN0cmlrZSxcclxuICAgIExpbmsuY29uZmlndXJlKHtcclxuICAgICAgLy8gT25seSBhbGxvdyBodHRwIHByb3RvY29sIGxpbmtzIChubyBKUylcclxuICAgICAgdmFsaWRhdGU6IChocmVmKSA9PiBWQUxJRF9IVFRQX1VSTC50ZXN0KGhyZWYpLFxyXG4gICAgICAvLyBPcGVuIG9uIGNsaWNrIHdvdWxkIGJlIHRvbyBhbm5veWluZyBkdXJpbmcgZWRpdGluZ1xyXG4gICAgICBvcGVuT25DbGljazogZmFsc2UsXHJcbiAgICAgIGF1dG9saW5rOiB0cnVlXHJcbiAgICB9KSxcclxuICAgIEVkaXRvckluc3RhbmNlU3RhdGVTdG9yYWdlLmNvbmZpZ3VyZSh7IHByb2plY3RJZCwgdGVzdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pLFxyXG4gICAgZ2V0TWVudGlvbkV4dGVuc2lvbigpLFxyXG4gICAgTGVnYWN5RW1haWxNZW50aW9uLFxyXG4gICAgSGlzdG9yeSxcclxuICAgIC4uLihwbGFjZWhvbGRlciA/IFtQbGFjZWhvbGRlci5jb25maWd1cmUoeyBwbGFjZWhvbGRlciB9KV0gOiBbXSlcclxuICBdXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLGNBQWM7QUFDckIsT0FBTyxlQUFl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