@mnaoumov/obsidian-lib 10.9.0 → 10.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/codemirror/editor-mode-extension/package.json +6 -0
- package/dist/lib/cjs/__merged.cjs +42 -1
- package/dist/lib/cjs/__merged.d.cts +6 -1
- package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +180 -0
- package/dist/lib/cjs/codemirror/editor-mode-extension.d.cts +50 -0
- package/dist/lib/cjs/codemirror/index.cjs +4 -1
- package/dist/lib/cjs/codemirror/index.d.cts +1 -0
- package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +4 -7
- package/dist/lib/cjs/components/plugin-settings-component.cjs +4 -3
- package/dist/lib/cjs/components/plugin-settings-component.d.cts +2 -1
- package/dist/lib/cjs/css-class.cjs +7 -1
- package/dist/lib/cjs/css-class.d.cts +24 -0
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/i18n/i18n.cjs +38 -10
- package/dist/lib/cjs/i18n/i18n.d.cts +29 -2
- package/dist/lib/cjs/i18n/locales/en.cjs +19 -1
- package/dist/lib/cjs/i18n/locales/en.d.cts +18 -0
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +18 -0
- package/dist/lib/cjs/index.cjs +7 -1
- package/dist/lib/cjs/index.d.cts +2 -0
- package/dist/lib/cjs/link.cjs +40 -1
- package/dist/lib/cjs/link.d.cts +37 -1
- package/dist/lib/cjs/modals/code-block-builder.cjs +486 -0
- package/dist/lib/cjs/modals/code-block-builder.d.cts +321 -0
- package/dist/lib/cjs/modals/index.cjs +4 -1
- package/dist/lib/cjs/modals/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/index.cjs +4 -1
- package/dist/lib/cjs/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +189 -0
- package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +111 -0
- package/dist/lib/cjs/plugin/plugin.cjs +47 -2
- package/dist/lib/cjs/plugin/plugin.d.cts +25 -1
- package/dist/lib/cjs/reference-definition.cjs +234 -0
- package/dist/lib/cjs/reference-definition.d.cts +47 -0
- package/dist/lib/cjs/release-asset.cjs +279 -0
- package/dist/lib/cjs/release-asset.d.cts +190 -0
- package/dist/lib/cjs/workspace.cjs +3 -2
- package/dist/lib/cjs/workspace.d.cts +6 -0
- package/dist/lib/esm/__merged.d.mts +6 -1
- package/dist/lib/esm/__merged.mjs +45 -1
- package/dist/lib/esm/codemirror/editor-mode-extension.d.mts +50 -0
- package/dist/lib/esm/codemirror/editor-mode-extension.mjs +93 -0
- package/dist/lib/esm/codemirror/index.d.mts +1 -0
- package/dist/lib/esm/codemirror/index.mjs +3 -1
- package/dist/lib/esm/codemirror/inline-token-widgets.mjs +3 -9
- package/dist/lib/esm/components/plugin-settings-component.d.mts +2 -1
- package/dist/lib/esm/components/plugin-settings-component.mjs +4 -3
- package/dist/lib/esm/css-class.d.mts +24 -0
- package/dist/lib/esm/css-class.mjs +7 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/i18n/i18n.d.mts +29 -2
- package/dist/lib/esm/i18n/i18n.mjs +40 -10
- package/dist/lib/esm/i18n/locales/en.d.mts +18 -0
- package/dist/lib/esm/i18n/locales/en.mjs +19 -1
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +18 -0
- package/dist/lib/esm/index.d.mts +2 -0
- package/dist/lib/esm/index.mjs +5 -1
- package/dist/lib/esm/link.d.mts +37 -1
- package/dist/lib/esm/link.mjs +40 -1
- package/dist/lib/esm/modals/code-block-builder.d.mts +321 -0
- package/dist/lib/esm/modals/code-block-builder.mjs +408 -0
- package/dist/lib/esm/modals/index.d.mts +1 -0
- package/dist/lib/esm/modals/index.mjs +3 -1
- package/dist/lib/esm/plugin/index.d.mts +1 -0
- package/dist/lib/esm/plugin/index.mjs +3 -1
- package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +111 -0
- package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +96 -0
- package/dist/lib/esm/plugin/plugin.d.mts +25 -1
- package/dist/lib/esm/plugin/plugin.mjs +52 -2
- package/dist/lib/esm/reference-definition.d.mts +47 -0
- package/dist/lib/esm/reference-definition.mjs +146 -0
- package/dist/lib/esm/release-asset.d.mts +190 -0
- package/dist/lib/esm/release-asset.mjs +187 -0
- package/dist/lib/esm/workspace.d.mts +6 -0
- package/dist/lib/esm/workspace.mjs +3 -2
- package/dist/styles.css +31 -1
- package/modals/code-block-builder/package.json +6 -0
- package/package.json +1 -1
- package/plugin/plugin-async-cleanup/package.json +6 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return "/";
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: "android"
|
|
14
|
+
};
|
|
15
|
+
const existingProcess = globalThis.process;
|
|
16
|
+
if (!existingProcess) {
|
|
17
|
+
globalThis.process = browserProcess;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (existingProcess.versions?.node) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const existingProcessRecord = existingProcess;
|
|
24
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
25
|
+
existingProcessRecord[key] ??= value;
|
|
26
|
+
}
|
|
27
|
+
existingProcessRecord["browser"] = true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ensureBrowserProcess();
|
|
31
|
+
})();
|
|
32
|
+
(function patchObsidianRequire() {
|
|
33
|
+
const originalRequire = require;
|
|
34
|
+
if (!originalRequire || originalRequire.__isPatched) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
require = Object.assign(
|
|
38
|
+
(id) => requirePatched(id),
|
|
39
|
+
originalRequire,
|
|
40
|
+
{
|
|
41
|
+
__isPatched: true
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
function extractDefault($module) {
|
|
45
|
+
return $module && $module.__esModule && "default" in $module ? $module.default : $module;
|
|
46
|
+
}
|
|
47
|
+
const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
48
|
+
"@codemirror/autocomplete",
|
|
49
|
+
"@codemirror/collab",
|
|
50
|
+
"@codemirror/commands",
|
|
51
|
+
"@codemirror/language",
|
|
52
|
+
"@codemirror/lint",
|
|
53
|
+
"@codemirror/search",
|
|
54
|
+
"@codemirror/state",
|
|
55
|
+
"@codemirror/text",
|
|
56
|
+
"@codemirror/view",
|
|
57
|
+
"@lezer/common",
|
|
58
|
+
"@lezer/highlight",
|
|
59
|
+
"@lezer/lr",
|
|
60
|
+
"obsidian"
|
|
61
|
+
]);
|
|
62
|
+
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
|
|
63
|
+
"@codemirror/closebrackets",
|
|
64
|
+
"@codemirror/comment",
|
|
65
|
+
"@codemirror/fold",
|
|
66
|
+
"@codemirror/gutter",
|
|
67
|
+
"@codemirror/highlight",
|
|
68
|
+
"@codemirror/history",
|
|
69
|
+
"@codemirror/matchbrackets",
|
|
70
|
+
"@codemirror/panel",
|
|
71
|
+
"@codemirror/rangeset",
|
|
72
|
+
"@codemirror/rectangular-selection",
|
|
73
|
+
"@codemirror/stream-parser",
|
|
74
|
+
"@codemirror/tooltip"
|
|
75
|
+
]);
|
|
76
|
+
function requirePatched(id) {
|
|
77
|
+
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
|
|
78
|
+
return originalRequire?.(id);
|
|
79
|
+
}
|
|
80
|
+
const app = globalThis.app;
|
|
81
|
+
if (app?.isMobile) {
|
|
82
|
+
if (id === "process" || id === "node:process") {
|
|
83
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
|
|
84
|
+
return process;
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
const $module = originalRequire?.(id);
|
|
88
|
+
if ($module) {
|
|
89
|
+
return extractDefault($module);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
})();
|
|
96
|
+
|
|
97
|
+
"use strict";
|
|
98
|
+
var __defProp = Object.defineProperty;
|
|
99
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
100
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
101
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
102
|
+
var __export = (target, all) => {
|
|
103
|
+
for (var name in all)
|
|
104
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
105
|
+
};
|
|
106
|
+
var __copyProps = (to, from, except, desc) => {
|
|
107
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
108
|
+
for (let key of __getOwnPropNames(from))
|
|
109
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
110
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
111
|
+
}
|
|
112
|
+
return to;
|
|
113
|
+
};
|
|
114
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
115
|
+
var editor_mode_extension_exports = {};
|
|
116
|
+
__export(editor_mode_extension_exports, {
|
|
117
|
+
createLivePreviewOnlyExtension: () => createLivePreviewOnlyExtension,
|
|
118
|
+
createSourceModeOnlyExtension: () => createSourceModeOnlyExtension,
|
|
119
|
+
isLivePreview: () => isLivePreview
|
|
120
|
+
});
|
|
121
|
+
module.exports = __toCommonJS(editor_mode_extension_exports);
|
|
122
|
+
var import_state = require('@codemirror/state');
|
|
123
|
+
var import_view = require('@codemirror/view');
|
|
124
|
+
var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
|
|
125
|
+
var import_obsidian = require('obsidian');
|
|
126
|
+
const editorLivePreviewStateField = (0, import_object_utils.castTo)(import_obsidian.editorLivePreviewField);
|
|
127
|
+
function createLivePreviewOnlyExtension(extension) {
|
|
128
|
+
return createModeScopedExtension(extension, true);
|
|
129
|
+
}
|
|
130
|
+
function createSourceModeOnlyExtension(extension) {
|
|
131
|
+
return createModeScopedExtension(extension, false);
|
|
132
|
+
}
|
|
133
|
+
function isLivePreview(state) {
|
|
134
|
+
return state.field(editorLivePreviewStateField, false) ?? true;
|
|
135
|
+
}
|
|
136
|
+
function createModeScopedExtension(extension, isActiveInLivePreview) {
|
|
137
|
+
const compartment = new import_state.Compartment();
|
|
138
|
+
const emptyExtension = [];
|
|
139
|
+
return [
|
|
140
|
+
compartment.of(isActiveInLivePreview ? extension : emptyExtension),
|
|
141
|
+
import_state.EditorState.transactionExtender.of((transaction) => {
|
|
142
|
+
if (transaction.effects.length === 0) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
const content = getChangedContent(transaction.state);
|
|
146
|
+
return content === null ? null : { effects: compartment.reconfigure(content) };
|
|
147
|
+
}),
|
|
148
|
+
import_view.ViewPlugin.define((view) => createInitialContentCorrector(view))
|
|
149
|
+
];
|
|
150
|
+
function getChangedContent(state) {
|
|
151
|
+
const content = isLivePreview(state) === isActiveInLivePreview ? extension : emptyExtension;
|
|
152
|
+
return compartment.get(state) === content ? null : content;
|
|
153
|
+
}
|
|
154
|
+
function createInitialContentCorrector(view) {
|
|
155
|
+
let isDestroyed = false;
|
|
156
|
+
if (getChangedContent(view.state) !== null) {
|
|
157
|
+
queueMicrotask(() => {
|
|
158
|
+
if (isDestroyed) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const content = getChangedContent(view.state);
|
|
162
|
+
if (content !== null) {
|
|
163
|
+
view.dispatch({ effects: compartment.reconfigure(content) });
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
destroy() {
|
|
169
|
+
isDestroyed = true;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
175
|
+
0 && (module.exports = {
|
|
176
|
+
createLivePreviewOnlyExtension,
|
|
177
|
+
createSourceModeOnlyExtension,
|
|
178
|
+
isLivePreview
|
|
179
|
+
});
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2RlbWlycm9yL2VkaXRvci1tb2RlLWV4dGVuc2lvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogU2NvcGVzIGFuIGVkaXRvciBleHRlbnNpb24gdG8gb25lIGVkaXRvciBtb2RlOiB7QGxpbmsgY3JlYXRlTGl2ZVByZXZpZXdPbmx5RXh0ZW5zaW9ufSBrZWVwcyBpdCBpbiBMaXZlIFByZXZpZXcgb25seSxcbiAqIGFuZCB7QGxpbmsgY3JlYXRlU291cmNlTW9kZU9ubHlFeHRlbnNpb259IGluIFNvdXJjZSBtb2RlIG9ubHkuIFRoZSBleHRlbnNpb24gaXMgc3dpdGNoZWQgb24gYW5kIG9mZiBhcyBhIHdob2xlLCBzbyBpdHNcbiAqIGRlY29yYXRpb25zLCB2aWV3IHBsdWdpbnMgYW5kIHN0YXRlIGZpZWxkcyBuZWVkIG5vIG1vZGUgY2hlY2sgb2YgdGhlaXIgb3duLlxuICpcbiAqIFRoZSBtb2RlIGlzIE9ic2lkaWFuJ3MgYGVkaXRvckxpdmVQcmV2aWV3RmllbGRgLiBSZWFkIGZyb20gT2JzaWRpYW4gYDEuMTUuMWAsIGEgTWFya2Rvd24gZWRpdG9yIGdldHMgdGhlIGZpZWxkIGZyb21cbiAqIGBlZGl0b3JMaXZlUHJldmlld0ZpZWxkLmluaXQoKWAgd2hlbmV2ZXIgaXRzIHN0YXRlIGlzIGJ1aWx0LCBhbmQgYSBtb2RlIHN3aXRjaCBkaXNwYXRjaGVzIG9uZSB0cmFuc2FjdGlvbiBjYXJyeWluZyBhXG4gKiBwcml2YXRlIGVmZmVjdCB0aGF0IHNldHMgdGhlIGZpZWxkLCBiZXNpZGUgdGhlIHJlY29uZmlndXJlIG9mIGl0cyBkeW5hbWljIGV4dGVuc2lvbnMuIFNvIHRoZSBmaWVsZCBjaGFuZ2VzIG9ubHkgaW4gYVxuICogdHJhbnNhY3Rpb24gd2l0aCBlZmZlY3RzLCBvciB3aXRoIGEgbmV3IHN0YXRlLlxuICpcbiAqIEVhY2ggY2FsbCB3cmFwcyB0aGUgZXh0ZW5zaW9uIGluIGEge0BsaW5rIENvbXBhcnRtZW50fSBvZiBpdHMgb3duLCB3aGljaCBob2xkcyB0aGUgZXh0ZW5zaW9uIG9yIG5vdGhpbmcgaW4gZXZlcnlcbiAqIGVkaXRvciBzZXBhcmF0ZWx5LiBBIHRyYW5zYWN0aW9uIGV4dGVuZGVyIHJlY29uZmlndXJlcyBpdCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IGNoYW5nZXMgdGhlIG1vZGUsIHNvIG5vIHVwZGF0ZVxuICogZXZlciByZW5kZXJzIHdpdGggdGhlIHdyb25nIGNvbnRlbnQuIEEgbmV3IHN0YXRlIGNhbm5vdCBiZSByZWFkIGJlZm9yZSBpdCBleGlzdHMsIHNvIGl0IHN0YXJ0cyB3aXRoIHRoZSBjb250ZW50IHRoZVxuICogTGl2ZSBQcmV2aWV3IGRlZmF1bHQgY2FsbHMgZm9yLCBhbmQgYSB2aWV3IHBsdWdpbiBjb3JyZWN0cyBpdCBpbiBhIG1pY3JvdGFzaywgd2hpY2ggcnVucyBiZWZvcmUgdGhlIGJyb3dzZXIgcGFpbnRzLlxuICpcbiAqIE91dHNpZGUgYW4gT2JzaWRpYW4gTWFya2Rvd24gZWRpdG9yIHRoZXJlIGlzIG5vIGBlZGl0b3JMaXZlUHJldmlld0ZpZWxkYCwgYW5kIHRoZSBlZGl0b3IgY291bnRzIGFzIExpdmUgUHJldmlldy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEV4dGVuc2lvbixcbiAgU3RhdGVGaWVsZFxufSBmcm9tICdAY29kZW1pcnJvci9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvclZpZXcsXG4gIFBsdWdpblZhbHVlXG59IGZyb20gJ0Bjb2RlbWlycm9yL3ZpZXcnO1xuXG5pbXBvcnQge1xuICBDb21wYXJ0bWVudCxcbiAgRWRpdG9yU3RhdGVcbn0gZnJvbSAnQGNvZGVtaXJyb3Ivc3RhdGUnO1xuaW1wb3J0IHsgVmlld1BsdWdpbiB9IGZyb20gJ0Bjb2RlbWlycm9yL3ZpZXcnO1xuaW1wb3J0IHsgY2FzdFRvIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBlZGl0b3JMaXZlUHJldmlld0ZpZWxkIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vLyBPYnNpZGlhbi5kLnRzIHJlYWNoZXMgQGNvZGVtaXJyb3Ivc3RhdGUgdGhyb3VnaCBpdHMgQ29tbW9uSlMgZGVjbGFyYXRpb25zIGFuZCB0aGlzIG1vZHVsZSB0aHJvdWdoIHRoZSBFUyBvbmVzLCBhbmRcbi8vIFN0YXRlRmllbGQgaGFzIHByaXZhdGUgbWVtYmVycywgc28gdGhlIHR3byBkZWNsYXJhdGlvbnMgb2Ygb25lIHJ1bnRpbWUgY2xhc3MgZG8gbm90IHR5cGUtY2hlY2sgYWdhaW5zdCBlYWNoIG90aGVyLlxuY29uc3QgZWRpdG9yTGl2ZVByZXZpZXdTdGF0ZUZpZWxkID0gY2FzdFRvPFN0YXRlRmllbGQ8Ym9vbGVhbj4+KGVkaXRvckxpdmVQcmV2aWV3RmllbGQpO1xuXG4vKipcbiAqIFdyYXBzIGFuIGV4dGVuc2lvbiBzbyBpdCBpcyBhY3RpdmUgb25seSB3aGlsZSB0aGUgZWRpdG9yIGlzIGluIExpdmUgUHJldmlldywgYW5kIHN3aXRjaGVkIG9mZiBpbiBTb3VyY2UgbW9kZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHRoaXMucmVnaXN0ZXJFZGl0b3JFeHRlbnNpb24oY3JlYXRlTGl2ZVByZXZpZXdPbmx5RXh0ZW5zaW9uKG15RGVjb3JhdGlvbnNQbHVnaW4pKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBleHRlbnNpb24gLSBUaGUgZXh0ZW5zaW9uIHRvIHNjb3BlLlxuICogQHJldHVybnMgVGhlIHNjb3BlZCBleHRlbnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMaXZlUHJldmlld09ubHlFeHRlbnNpb24oZXh0ZW5zaW9uOiBFeHRlbnNpb24pOiBFeHRlbnNpb24ge1xuICByZXR1cm4gY3JlYXRlTW9kZVNjb3BlZEV4dGVuc2lvbihleHRlbnNpb24sIHRydWUpO1xufVxuXG4vKipcbiAqIFdyYXBzIGFuIGV4dGVuc2lvbiBzbyBpdCBpcyBhY3RpdmUgb25seSB3aGlsZSB0aGUgZWRpdG9yIGlzIGluIFNvdXJjZSBtb2RlLCBhbmQgc3dpdGNoZWQgb2ZmIGluIExpdmUgUHJldmlldy5cbiAqXG4gKiBPdXRzaWRlIGFuIE9ic2lkaWFuIE1hcmtkb3duIGVkaXRvciB0aGUgZWRpdG9yIGNvdW50cyBhcyBMaXZlIFByZXZpZXcsIHNvIHRoZSBleHRlbnNpb24gc3RheXMgb2ZmIHRoZXJlLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb24gLSBUaGUgZXh0ZW5zaW9uIHRvIHNjb3BlLlxuICogQHJldHVybnMgVGhlIHNjb3BlZCBleHRlbnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTb3VyY2VNb2RlT25seUV4dGVuc2lvbihleHRlbnNpb246IEV4dGVuc2lvbik6IEV4dGVuc2lvbiB7XG4gIHJldHVybiBjcmVhdGVNb2RlU2NvcGVkRXh0ZW5zaW9uKGV4dGVuc2lvbiwgZmFsc2UpO1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgYW4gZWRpdG9yIHN0YXRlIGlzIGluIExpdmUgUHJldmlldy5cbiAqXG4gKiBAcGFyYW0gc3RhdGUgLSBUaGUgZWRpdG9yIHN0YXRlLlxuICogQHJldHVybnMgYHRydWVgIGluIExpdmUgUHJldmlldyBhbmQgb3V0c2lkZSBhbiBPYnNpZGlhbiBNYXJrZG93biBlZGl0b3IsIGBmYWxzZWAgaW4gU291cmNlIG1vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xpdmVQcmV2aWV3KHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RhdGUuZmllbGQoZWRpdG9yTGl2ZVByZXZpZXdTdGF0ZUZpZWxkLCBmYWxzZSkgPz8gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW9kZVNjb3BlZEV4dGVuc2lvbihleHRlbnNpb246IEV4dGVuc2lvbiwgaXNBY3RpdmVJbkxpdmVQcmV2aWV3OiBib29sZWFuKTogRXh0ZW5zaW9uIHtcbiAgY29uc3QgY29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgY29uc3QgZW1wdHlFeHRlbnNpb246IEV4dGVuc2lvbiA9IFtdO1xuXG4gIHJldHVybiBbXG4gICAgY29tcGFydG1lbnQub2YoaXNBY3RpdmVJbkxpdmVQcmV2aWV3ID8gZXh0ZW5zaW9uIDogZW1wdHlFeHRlbnNpb24pLFxuICAgIEVkaXRvclN0YXRlLnRyYW5zYWN0aW9uRXh0ZW5kZXIub2YoKHRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICBpZiAodHJhbnNhY3Rpb24uZWZmZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBjb250ZW50ID0gZ2V0Q2hhbmdlZENvbnRlbnQodHJhbnNhY3Rpb24uc3RhdGUpO1xuICAgICAgcmV0dXJuIGNvbnRlbnQgPT09IG51bGwgPyBudWxsIDogeyBlZmZlY3RzOiBjb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShjb250ZW50KSB9O1xuICAgIH0pLFxuICAgIFZpZXdQbHVnaW4uZGVmaW5lKCh2aWV3KSA9PiBjcmVhdGVJbml0aWFsQ29udGVudENvcnJlY3Rvcih2aWV3KSlcbiAgXTtcblxuICBmdW5jdGlvbiBnZXRDaGFuZ2VkQ29udGVudChzdGF0ZTogRWRpdG9yU3RhdGUpOiBFeHRlbnNpb24gfCBudWxsIHtcbiAgICBjb25zdCBjb250ZW50ID0gaXNMaXZlUHJldmlldyhzdGF0ZSkgPT09IGlzQWN0aXZlSW5MaXZlUHJldmlldyA/IGV4dGVuc2lvbiA6IGVtcHR5RXh0ZW5zaW9uO1xuICAgIHJldHVybiBjb21wYXJ0bWVudC5nZXQoc3RhdGUpID09PSBjb250ZW50ID8gbnVsbCA6IGNvbnRlbnQ7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVJbml0aWFsQ29udGVudENvcnJlY3Rvcih2aWV3OiBFZGl0b3JWaWV3KTogUGx1Z2luVmFsdWUge1xuICAgIGxldCBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIGlmIChnZXRDaGFuZ2VkQ29udGVudCh2aWV3LnN0YXRlKSAhPT0gbnVsbCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudCA9IGdldENoYW5nZWRDb250ZW50KHZpZXcuc3RhdGUpO1xuICAgICAgICBpZiAoY29udGVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZpZXcuZGlzcGF0Y2goeyBlZmZlY3RzOiBjb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShjb250ZW50KSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTZCQSxtQkFHTztBQUNQLGtCQUEyQjtBQUMzQiwwQkFBdUI7QUFDdkIsc0JBQXVDO0FBSXZDLE1BQU0sa0NBQThCLDRCQUE0QixzQ0FBc0I7QUFhL0UsU0FBUywrQkFBK0IsV0FBaUM7QUFDOUUsU0FBTywwQkFBMEIsV0FBVyxJQUFJO0FBQ2xEO0FBVU8sU0FBUyw4QkFBOEIsV0FBaUM7QUFDN0UsU0FBTywwQkFBMEIsV0FBVyxLQUFLO0FBQ25EO0FBUU8sU0FBUyxjQUFjLE9BQTZCO0FBQ3pELFNBQU8sTUFBTSxNQUFNLDZCQUE2QixLQUFLLEtBQUs7QUFDNUQ7QUFFQSxTQUFTLDBCQUEwQixXQUFzQix1QkFBMkM7QUFDbEcsUUFBTSxjQUFjLElBQUkseUJBQVk7QUFDcEMsUUFBTSxpQkFBNEIsQ0FBQztBQUVuQyxTQUFPO0FBQUEsSUFDTCxZQUFZLEdBQUcsd0JBQXdCLFlBQVksY0FBYztBQUFBLElBQ2pFLHlCQUFZLG9CQUFvQixHQUFHLENBQUMsZ0JBQWdCO0FBQ2xELFVBQUksWUFBWSxRQUFRLFdBQVcsR0FBRztBQUNwQyxlQUFPO0FBQUEsTUFDVDtBQUNBLFlBQU0sVUFBVSxrQkFBa0IsWUFBWSxLQUFLO0FBQ25ELGFBQU8sWUFBWSxPQUFPLE9BQU8sRUFBRSxTQUFTLFlBQVksWUFBWSxPQUFPLEVBQUU7QUFBQSxJQUMvRSxDQUFDO0FBQUEsSUFDRCx1QkFBVyxPQUFPLENBQUMsU0FBUyw4QkFBOEIsSUFBSSxDQUFDO0FBQUEsRUFDakU7QUFFQSxXQUFTLGtCQUFrQixPQUFzQztBQUMvRCxVQUFNLFVBQVUsY0FBYyxLQUFLLE1BQU0sd0JBQXdCLFlBQVk7QUFDN0UsV0FBTyxZQUFZLElBQUksS0FBSyxNQUFNLFVBQVUsT0FBTztBQUFBLEVBQ3JEO0FBRUEsV0FBUyw4QkFBOEIsTUFBK0I7QUFDcEUsUUFBSSxjQUFjO0FBQ2xCLFFBQUksa0JBQWtCLEtBQUssS0FBSyxNQUFNLE1BQU07QUFDMUMscUJBQWUsTUFBTTtBQUNuQixZQUFJLGFBQWE7QUFDZjtBQUFBLFFBQ0Y7QUFDQSxjQUFNLFVBQVUsa0JBQWtCLEtBQUssS0FBSztBQUM1QyxZQUFJLFlBQVksTUFBTTtBQUNwQixlQUFLLFNBQVMsRUFBRSxTQUFTLFlBQVksWUFBWSxPQUFPLEVBQUUsQ0FBQztBQUFBLFFBQzdEO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUNBLFdBQU87QUFBQSxNQUNMLFVBQWdCO0FBQ2Qsc0JBQWM7QUFBQSxNQUNoQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Scopes an editor extension to one editor mode: {@link createLivePreviewOnlyExtension} keeps it in Live Preview only,
|
|
6
|
+
* and {@link createSourceModeOnlyExtension} in Source mode only. The extension is switched on and off as a whole, so its
|
|
7
|
+
* decorations, view plugins and state fields need no mode check of their own.
|
|
8
|
+
*
|
|
9
|
+
* The mode is Obsidian's `editorLivePreviewField`. Read from Obsidian `1.15.1`, a Markdown editor gets the field from
|
|
10
|
+
* `editorLivePreviewField.init()` whenever its state is built, and a mode switch dispatches one transaction carrying a
|
|
11
|
+
* private effect that sets the field, beside the reconfigure of its dynamic extensions. So the field changes only in a
|
|
12
|
+
* transaction with effects, or with a new state.
|
|
13
|
+
*
|
|
14
|
+
* Each call wraps the extension in a {@link Compartment} of its own, which holds the extension or nothing in every
|
|
15
|
+
* editor separately. A transaction extender reconfigures it in the same transaction that changes the mode, so no update
|
|
16
|
+
* ever renders with the wrong content. A new state cannot be read before it exists, so it starts with the content the
|
|
17
|
+
* Live Preview default calls for, and a view plugin corrects it in a microtask, which runs before the browser paints.
|
|
18
|
+
*
|
|
19
|
+
* Outside an Obsidian Markdown editor there is no `editorLivePreviewField`, and the editor counts as Live Preview.
|
|
20
|
+
*/
|
|
21
|
+
import type { Extension } from '@codemirror/state' with { 'resolution-mode': 'import' };
|
|
22
|
+
import { EditorState } from '@codemirror/state';
|
|
23
|
+
/**
|
|
24
|
+
* Wraps an extension so it is active only while the editor is in Live Preview, and switched off in Source mode.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* this.registerEditorExtension(createLivePreviewOnlyExtension(myDecorationsPlugin));
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @param extension - The extension to scope.
|
|
32
|
+
* @returns The scoped extension.
|
|
33
|
+
*/
|
|
34
|
+
export declare function createLivePreviewOnlyExtension(extension: Extension): Extension;
|
|
35
|
+
/**
|
|
36
|
+
* Wraps an extension so it is active only while the editor is in Source mode, and switched off in Live Preview.
|
|
37
|
+
*
|
|
38
|
+
* Outside an Obsidian Markdown editor the editor counts as Live Preview, so the extension stays off there.
|
|
39
|
+
*
|
|
40
|
+
* @param extension - The extension to scope.
|
|
41
|
+
* @returns The scoped extension.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createSourceModeOnlyExtension(extension: Extension): Extension;
|
|
44
|
+
/**
|
|
45
|
+
* Tells whether an editor state is in Live Preview.
|
|
46
|
+
*
|
|
47
|
+
* @param state - The editor state.
|
|
48
|
+
* @returns `true` in Live Preview and outside an Obsidian Markdown editor, `false` in Source mode.
|
|
49
|
+
*/
|
|
50
|
+
export declare function isLivePreview(state: EditorState): boolean;
|
|
@@ -97,6 +97,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
97
97
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
98
98
|
var codemirror_exports = {};
|
|
99
99
|
__export(codemirror_exports, {
|
|
100
|
+
"editor-mode-extension": () => editor_mode_extension,
|
|
100
101
|
"incremental-parse-state-field": () => incremental_parse_state_field,
|
|
101
102
|
"inline-token-widgets": () => inline_token_widgets,
|
|
102
103
|
"markdown-editor-views": () => markdown_editor_views,
|
|
@@ -105,6 +106,7 @@ __export(codemirror_exports, {
|
|
|
105
106
|
"state-field-spec": () => state_field_spec
|
|
106
107
|
});
|
|
107
108
|
module.exports = __toCommonJS(codemirror_exports);
|
|
109
|
+
var editor_mode_extension = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./editor-mode-extension.cjs')), 1);
|
|
108
110
|
var incremental_parse_state_field = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./incremental-parse-state-field.cjs')), 1);
|
|
109
111
|
var inline_token_widgets = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./inline-token-widgets.cjs')), 1);
|
|
110
112
|
var markdown_editor_views = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./markdown-editor-views.cjs')), 1);
|
|
@@ -113,6 +115,7 @@ var settings_facet = __toESM(((module) => module && module.__esModule && 'defaul
|
|
|
113
115
|
var state_field_spec = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./state-field-spec.cjs')), 1);
|
|
114
116
|
// Annotate the CommonJS export names for ESM import in node:
|
|
115
117
|
0 && (module.exports = {
|
|
118
|
+
"editor-mode-extension": null,
|
|
116
119
|
"incremental-parse-state-field": null,
|
|
117
120
|
"inline-token-widgets": null,
|
|
118
121
|
"markdown-editor-views": null,
|
|
@@ -120,4 +123,4 @@ var state_field_spec = __toESM(((module) => module && module.__esModule && 'defa
|
|
|
120
123
|
"settings-facet": null,
|
|
121
124
|
"state-field-spec": null
|
|
122
125
|
});
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2RlbWlycm9yL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBhcyAnZWRpdG9yLW1vZGUtZXh0ZW5zaW9uJyBmcm9tICcuL2VkaXRvci1tb2RlLWV4dGVuc2lvbi50cyc7XG5leHBvcnQgKiBhcyAnaW5jcmVtZW50YWwtcGFyc2Utc3RhdGUtZmllbGQnIGZyb20gJy4vaW5jcmVtZW50YWwtcGFyc2Utc3RhdGUtZmllbGQudHMnO1xuZXhwb3J0ICogYXMgJ2lubGluZS10b2tlbi13aWRnZXRzJyBmcm9tICcuL2lubGluZS10b2tlbi13aWRnZXRzLnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bi1lZGl0b3Itdmlld3MnIGZyb20gJy4vbWFya2Rvd24tZWRpdG9yLXZpZXdzLnRzJztcbmV4cG9ydCAqIGFzICdyYW5nZS1zZXQnIGZyb20gJy4vcmFuZ2Utc2V0LnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5ncy1mYWNldCcgZnJvbSAnLi9zZXR0aW5ncy1mYWNldC50cyc7XG5leHBvcnQgKiBhcyAnc3RhdGUtZmllbGQtc3BlYycgZnJvbSAnLi9zdGF0ZS1maWVsZC1zcGVjLnRzJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSxpQ0FBQUE7QUFBQSxFQUFBLHVDQUFBQztBQUFBLEVBQUEsOEJBQUFDO0FBQUEsRUFBQSwrQkFBQUM7QUFBQSxFQUFBLG1CQUFBQztBQUFBLEVBQUEsd0JBQUFDO0FBQUEsRUFBQSwwQkFBQUM7QUFBQTtBQUFBO0FBRUEsSUFBQU4sd0JBQXlDO0FBQ3pDLElBQUFDLGdDQUFpRDtBQUNqRCxJQUFBQyx1QkFBd0M7QUFDeEMsSUFBQUMsd0JBQXlDO0FBQ3pDLElBQUFDLFlBQTZCO0FBQzdCLElBQUFDLGlCQUFrQztBQUNsQyxJQUFBQyxtQkFBb0M7IiwibmFtZXMiOlsiZWRpdG9yLW1vZGUtZXh0ZW5zaW9uIiwiaW5jcmVtZW50YWwtcGFyc2Utc3RhdGUtZmllbGQiLCJpbmxpbmUtdG9rZW4td2lkZ2V0cyIsIm1hcmtkb3duLWVkaXRvci12aWV3cyIsInJhbmdlLXNldCIsInNldHRpbmdzLWZhY2V0Iiwic3RhdGUtZmllbGQtc3BlYyJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference path="../library-references.d.cts" />
|
|
2
|
+
export * as 'editor-mode-extension' from './editor-mode-extension.cjs';
|
|
2
3
|
export * as 'incremental-parse-state-field' from './incremental-parse-state-field.cjs';
|
|
3
4
|
export * as 'inline-token-widgets' from './inline-token-widgets.cjs';
|
|
4
5
|
export * as 'markdown-editor-views' from './markdown-editor-views.cjs';
|
|
@@ -123,8 +123,8 @@ var import_view = require('@codemirror/view');
|
|
|
123
123
|
var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
|
|
124
124
|
var import_obsidian = require('obsidian');
|
|
125
125
|
var import_css_class = require('../css-class.cjs');
|
|
126
|
+
var import_editor_mode_extension = require('./editor-mode-extension.cjs');
|
|
126
127
|
const editorInfoStateField = (0, import_object_utils.castTo)(import_obsidian.editorInfoField);
|
|
127
|
-
const editorLivePreviewStateField = (0, import_object_utils.castTo)(import_obsidian.editorLivePreviewField);
|
|
128
128
|
class InlineTokenWidget extends import_view.WidgetType {
|
|
129
129
|
configVersion;
|
|
130
130
|
match;
|
|
@@ -178,13 +178,13 @@ function createInlineTokenWidgetsExtension(params) {
|
|
|
178
178
|
if (isReconfigured) {
|
|
179
179
|
this.configVersion++;
|
|
180
180
|
}
|
|
181
|
-
if (update.docChanged || update.viewportChanged || update.selectionSet || isReconfigured || isLivePreview(update.startState) !== isLivePreview(update.state)) {
|
|
181
|
+
if (update.docChanged || update.viewportChanged || update.selectionSet || isReconfigured || (0, import_editor_mode_extension.isLivePreview)(update.startState) !== (0, import_editor_mode_extension.isLivePreview)(update.state)) {
|
|
182
182
|
this.decorations = this.buildDecorations(update.view);
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
buildDecorations(view) {
|
|
186
186
|
const state = view.state;
|
|
187
|
-
if (!isLivePreview(state)) {
|
|
187
|
+
if (!(0, import_editor_mode_extension.isLivePreview)(state)) {
|
|
188
188
|
return import_view.Decoration.none;
|
|
189
189
|
}
|
|
190
190
|
const sourcePath = state.field(editorInfoStateField, false)?.file?.path ?? "";
|
|
@@ -238,13 +238,10 @@ function toGlobalRegExp(regExp) {
|
|
|
238
238
|
function areMatchesEqual(a, b) {
|
|
239
239
|
return a.length === b.length && a.every((value, index) => value === b[index]);
|
|
240
240
|
}
|
|
241
|
-
function isLivePreview(state) {
|
|
242
|
-
return state.field(editorLivePreviewStateField, false) ?? true;
|
|
243
|
-
}
|
|
244
241
|
// Annotate the CommonJS export names for ESM import in node:
|
|
245
242
|
0 && (module.exports = {
|
|
246
243
|
createInlineTokenWidgetsExtension,
|
|
247
244
|
execAll,
|
|
248
245
|
toGlobalRegExp
|
|
249
246
|
});
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2RlbWlycm9yL2lubGluZS10b2tlbi13aWRnZXRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDcmVhdGVzIGFuIGVkaXRvciBleHRlbnNpb24gdGhhdCByZXBsYWNlcyBldmVyeSBtYXRjaCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIGEgd2lkZ2V0IGluIExpdmUgUHJldmlldywgYW5kXG4gKiBzaG93cyB0aGUgc291cmNlIGFnYWluIHdoaWxlIGEgc2VsZWN0aW9uIHRvdWNoZXMgaXQsIHRoZSB3YXkgT2JzaWRpYW4gdHJlYXRzIGl0cyBvd24gbGlua3MgYW5kIGZvcm1hdHRpbmcuXG4gKlxuICogT25seSB0aGUgdmlzaWJsZSByYW5nZXMgYXJlIG1hdGNoZWQsIGxpbmUgYnkgbGluZSwgc28gYSB0b2tlbiBuZXZlciBzcGFucyB0d28gbGluZXMuIFRoZSBkZWNvcmF0aW9ucyBhcmUgcmVidWlsdFxuICogd2hlbiB0aGUgZG9jdW1lbnQsIHRoZSB2aWV3cG9ydCwgdGhlIHNlbGVjdGlvbiwgdGhlIExpdmUgUHJldmlldyBtb2RlIG9yIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXM7IGFcbiAqIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGlzIHdoYXQgYSBgU2V0dGluZ3NGYWNldENvbXBvbmVudGAgZGlzcGF0Y2hlcywgc28gYSByZW5kZXIgdGhhdCByZWFkcyBhIHNldHRpbmdzIGZhY2V0XG4gKiByZS1ydW5zIHdoZW4gdGhlIHNldHRpbmdzIGRvLlxuICpcbiAqIE91dHNpZGUgYW4gT2JzaWRpYW4gTWFya2Rvd24gZWRpdG9yIHRoZXJlIGlzIG5vIGBlZGl0b3JMaXZlUHJldmlld0ZpZWxkYCwgYW5kIHRoZSB3aWRnZXRzIGFyZSBzaG93bi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvclN0YXRlLFxuICBFeHRlbnNpb24sXG4gIFJhbmdlLFxuICBTdGF0ZUZpZWxkXG59IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB0eXBlIHtcbiAgRGVjb3JhdGlvblNldCxcbiAgRWRpdG9yVmlldyxcbiAgUGx1Z2luVmFsdWUsXG4gIFZpZXdVcGRhdGVcbn0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgdHlwZSB7IE1hcmtkb3duRmlsZUluZm8gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIERlY29yYXRpb24sXG4gIFZpZXdQbHVnaW4sXG4gIFdpZGdldFR5cGVcbn0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7XG4gIGVkaXRvckluZm9GaWVsZCxcbiAgZWRpdG9yTGl2ZVByZXZpZXdGaWVsZFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcblxuLy8gT2JzaWRpYW4uZC50cyByZWFjaGVzIEBjb2RlbWlycm9yL3N0YXRlIHRocm91Z2ggaXRzIENvbW1vbkpTIGRlY2xhcmF0aW9ucyBhbmQgdGhpcyBtb2R1bGUgdGhyb3VnaCB0aGUgRVMgb25lcywgYW5kXG4vLyBTdGF0ZUZpZWxkIGhhcyBwcml2YXRlIG1lbWJlcnMsIHNvIHRoZSB0d28gZGVjbGFyYXRpb25zIG9mIG9uZSBydW50aW1lIGNsYXNzIGRvIG5vdCB0eXBlLWNoZWNrIGFnYWluc3QgZWFjaCBvdGhlci5cbmNvbnN0IGVkaXRvckluZm9TdGF0ZUZpZWxkID0gY2FzdFRvPFN0YXRlRmllbGQ8TWFya2Rvd25GaWxlSW5mbz4+KGVkaXRvckluZm9GaWVsZCk7XG5jb25zdCBlZGl0b3JMaXZlUHJldmlld1N0YXRlRmllbGQgPSBjYXN0VG88U3RhdGVGaWVsZDxib29sZWFuPj4oZWRpdG9yTGl2ZVByZXZpZXdGaWVsZCk7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZUlubGluZVRva2VuV2lkZ2V0c0V4dGVuc2lvbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSW5saW5lVG9rZW5XaWRnZXRzRXh0ZW5zaW9uUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gYSB0b2tlbiBtYXRjaGVzLiBUaGUgYGdgIGZsYWcgaXMgYWRkZWQgd2hlbiBtaXNzaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnRXhwOiBSZWdFeHA7XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSB0b2tlbiBpbnRvIHRoZSB3aWRnZXQncyBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyOiBJbmxpbmVUb2tlblJlbmRlckZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgYSBtYXRjaCBiZWNvbWVzIGEgd2lkZ2V0LCBzdWNoIGFzIHRvIHNraXAgYSBtYXRjaCBpbnNpZGUgY29kZS4gRXZlcnkgbWF0Y2ggZG9lcyBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGVjb3JhdGU/OiAocGFyYW1zOiBJbmxpbmVUb2tlblNob3VsZERlY29yYXRlUGFyYW1zKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgdG9rZW4gc2hvd3MgaXRzIHNvdXJjZSB3aGlsZSBhIHNlbGVjdGlvbiwgdGhlIGN1cnNvciBpbmNsdWRlZCwgdG91Y2hlcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXZlYWxPblNlbGVjdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBpbmxpbmUgdG9rZW4gaW50byBpdHMgY29udGFpbmVyIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSByZW5kZXIgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5saW5lVG9rZW5SZW5kZXJGdW5jdGlvbiA9IChwYXJhbXM6IElubGluZVRva2VuUmVuZGVyUGFyYW1zKSA9PiB2b2lkO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgaGFuZGVkIHRvIGFuIGlubGluZSB0b2tlbiByZW5kZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lVG9rZW5SZW5kZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSB0b2tlbiBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgbWF0Y2ggb2YgdGhlIHRva2VuJ3MgcmVndWxhciBleHByZXNzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheTtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIG5vdGUgdGhlIHRva2VuIGlzIGluLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBpdCBpcyBub3Qga25vd24uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3Igc3RhdGUsIHdoZW4gdGhlIHRva2VuIHJlbmRlcnMgaW4gYW4gZWRpdG9yLiBBYnNlbnQgaW4gUmVhZGluZyB2aWV3LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGU/OiBFZGl0b3JTdGF0ZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGhhbmRlZCB0byB7QGxpbmsgQ3JlYXRlSW5saW5lVG9rZW5XaWRnZXRzRXh0ZW5zaW9uUGFyYW1zLnNob3VsZERlY29yYXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVUb2tlblNob3VsZERlY29yYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudCBwb3NpdGlvbiB0aGUgbWF0Y2ggc3RhcnRzIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF0Y2ggb2YgdGhlIHRva2VuJ3MgcmVndWxhciBleHByZXNzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheTtcblxuICAvKipcbiAgICogVGhlIGVkaXRvciBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlOiBFZGl0b3JTdGF0ZTtcblxuICAvKipcbiAgICogVGhlIGRvY3VtZW50IHBvc2l0aW9uIHRoZSBtYXRjaCBlbmRzIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgdG86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElubGluZVRva2VuV2lkZ2V0UGFyYW1zIHtcbiAgcmVhZG9ubHkgY29uZmlnVmVyc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBtYXRjaDogUmVnRXhwRXhlY0FycmF5O1xuICByZWFkb25seSByZW5kZXI6IElubGluZVRva2VuUmVuZGVyRnVuY3Rpb247XG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhdGU6IEVkaXRvclN0YXRlO1xufVxuXG5jbGFzcyBJbmxpbmVUb2tlbldpZGdldCBleHRlbmRzIFdpZGdldFR5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1ZlcnNpb246IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXRjaDogUmVnRXhwRXhlY0FycmF5O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcjogSW5saW5lVG9rZW5SZW5kZXJGdW5jdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGU6IEVkaXRvclN0YXRlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IElubGluZVRva2VuV2lkZ2V0UGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbmZpZ1ZlcnNpb24gPSBwYXJhbXMuY29uZmlnVmVyc2lvbjtcbiAgICB0aGlzLm1hdGNoID0gcGFyYW1zLm1hdGNoO1xuICAgIHRoaXMucmVuZGVyID0gcGFyYW1zLnJlbmRlcjtcbiAgICB0aGlzLnNvdXJjZVBhdGggPSBwYXJhbXMuc291cmNlUGF0aDtcbiAgICB0aGlzLnN0YXRlID0gcGFyYW1zLnN0YXRlO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGVxKG90aGVyOiBXaWRnZXRUeXBlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgSW5saW5lVG9rZW5XaWRnZXRcbiAgICAgICYmIG90aGVyLmNvbmZpZ1ZlcnNpb24gPT09IHRoaXMuY29uZmlnVmVyc2lvblxuICAgICAgJiYgb3RoZXIucmVuZGVyID09PSB0aGlzLnJlbmRlclxuICAgICAgJiYgb3RoZXIuc291cmNlUGF0aCA9PT0gdGhpcy5zb3VyY2VQYXRoXG4gICAgICAmJiBhcmVNYXRjaGVzRXF1YWwob3RoZXIubWF0Y2gsIHRoaXMubWF0Y2gpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHRvRE9NKHZpZXc6IEVkaXRvclZpZXcpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB2aWV3LmRvbS5vd25lckRvY3VtZW50Lndpbi5jcmVhdGVTcGFuKCk7XG4gICAgY29udGFpbmVyRWwuY2xhc3NMaXN0LmFkZChDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuSW5saW5lVG9rZW4pO1xuICAgIHRoaXMucmVuZGVyKHtcbiAgICAgIGNvbnRhaW5lckVsLFxuICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICBzb3VyY2VQYXRoOiB0aGlzLnNvdXJjZVBhdGgsXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZVxuICAgIH0pO1xuICAgIHJldHVybiBjb250YWluZXJFbDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZWRpdG9yIGV4dGVuc2lvbiB0aGF0IHJlcGxhY2VzIGV2ZXJ5IG1hdGNoIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGggYSB3aWRnZXQgaW4gTGl2ZSBQcmV2aWV3LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZXh0ZW5zaW9uIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgZWRpdG9yIGV4dGVuc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlubGluZVRva2VuV2lkZ2V0c0V4dGVuc2lvbihwYXJhbXM6IENyZWF0ZUlubGluZVRva2VuV2lkZ2V0c0V4dGVuc2lvblBhcmFtcyk6IEV4dGVuc2lvbiB7XG4gIGNvbnN0IHJlZ0V4cCA9IHRvR2xvYmFsUmVnRXhwKHBhcmFtcy5yZWdFeHApO1xuICBjb25zdCBzaG91bGRSZXZlYWxPblNlbGVjdGlvbiA9IHBhcmFtcy5zaG91bGRSZXZlYWxPblNlbGVjdGlvbiA/PyB0cnVlO1xuXG4gIGNsYXNzIElubGluZVRva2VuV2lkZ2V0c1BsdWdpblZhbHVlIGltcGxlbWVudHMgUGx1Z2luVmFsdWUge1xuICAgIHB1YmxpYyBkZWNvcmF0aW9uczogRGVjb3JhdGlvblNldDtcbiAgICBwcml2YXRlIGNvbmZpZ1ZlcnNpb24gPSAwO1xuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSBkZWNvcmF0aW9ucyBvZiBhIG5ldyBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlldyAtIFRoZSBlZGl0b3Igdmlldy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IodmlldzogRWRpdG9yVmlldykge1xuICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuYnVpbGREZWNvcmF0aW9ucyh2aWV3KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWJ1aWxkcyB0aGUgZGVjb3JhdGlvbnMgd2hlbiB3aGF0IHRoZXkgZGVwZW5kIG9uIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXBkYXRlIC0gVGhlIHZpZXcgdXBkYXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUodXBkYXRlOiBWaWV3VXBkYXRlKTogdm9pZCB7XG4gICAgICBjb25zdCBpc1JlY29uZmlndXJlZCA9IHVwZGF0ZS50cmFuc2FjdGlvbnMuc29tZSgodHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLnJlY29uZmlndXJlZCk7XG4gICAgICBpZiAoaXNSZWNvbmZpZ3VyZWQpIHtcbiAgICAgICAgdGhpcy5jb25maWdWZXJzaW9uKys7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHVwZGF0ZS5kb2NDaGFuZ2VkXG4gICAgICAgIHx8IHVwZGF0ZS52aWV3cG9ydENoYW5nZWRcbiAgICAgICAgfHwgdXBkYXRlLnNlbGVjdGlvblNldFxuICAgICAgICB8fCBpc1JlY29uZmlndXJlZFxuICAgICAgICB8fCBpc0xpdmVQcmV2aWV3KHVwZGF0ZS5zdGFydFN0YXRlKSAhPT0gaXNMaXZlUHJldmlldyh1cGRhdGUuc3RhdGUpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuYnVpbGREZWNvcmF0aW9ucyh1cGRhdGUudmlldyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZERlY29yYXRpb25zKHZpZXc6IEVkaXRvclZpZXcpOiBEZWNvcmF0aW9uU2V0IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdmlldy5zdGF0ZTtcbiAgICAgIGlmICghaXNMaXZlUHJldmlldyhzdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIERlY29yYXRpb24ubm9uZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHN0YXRlLmZpZWxkKGVkaXRvckluZm9TdGF0ZUZpZWxkLCBmYWxzZSk/LmZpbGU/LnBhdGggPz8gJyc7XG4gICAgICBjb25zdCByYW5nZXM6IFJhbmdlPERlY29yYXRpb24+W10gPSBbXTtcbiAgICAgIGxldCBsYXN0TGluZU51bWJlciA9IDA7XG5cbiAgICAgIGZvciAoY29uc3QgdmlzaWJsZVJhbmdlIG9mIHZpZXcudmlzaWJsZVJhbmdlcykge1xuICAgICAgICBjb25zdCBmaXJzdExpbmVOdW1iZXIgPSBNYXRoLm1heChzdGF0ZS5kb2MubGluZUF0KHZpc2libGVSYW5nZS5mcm9tKS5udW1iZXIsIGxhc3RMaW5lTnVtYmVyICsgMSk7XG4gICAgICAgIGNvbnN0IGVuZExpbmVOdW1iZXIgPSBzdGF0ZS5kb2MubGluZUF0KHZpc2libGVSYW5nZS50bykubnVtYmVyO1xuICAgICAgICBmb3IgKGxldCBsaW5lTnVtYmVyID0gZmlyc3RMaW5lTnVtYmVyOyBsaW5lTnVtYmVyIDw9IGVuZExpbmVOdW1iZXI7IGxpbmVOdW1iZXIrKykge1xuICAgICAgICAgIGNvbnN0IGxpbmUgPSBzdGF0ZS5kb2MubGluZShsaW5lTnVtYmVyKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGV4ZWNBbGwocmVnRXhwLCBsaW5lLnRleHQpKSB7XG4gICAgICAgICAgICBjb25zdCBmcm9tID0gbGluZS5mcm9tICsgbWF0Y2guaW5kZXg7XG4gICAgICAgICAgICBjb25zdCB0byA9IGZyb20gKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmV2ZWFsT25TZWxlY3Rpb24gJiYgc3RhdGUuc2VsZWN0aW9uLnJhbmdlcy5zb21lKChyYW5nZSkgPT4gcmFuZ2UuZnJvbSA8PSB0byAmJiByYW5nZS50byA+PSBmcm9tKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJhbXMuc2hvdWxkRGVjb3JhdGUgJiYgIXBhcmFtcy5zaG91bGREZWNvcmF0ZSh7IGZyb20sIG1hdGNoLCBzdGF0ZSwgdG8gfSkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZXMucHVzaChcbiAgICAgICAgICAgICAgRGVjb3JhdGlvbi5yZXBsYWNlKHtcbiAgICAgICAgICAgICAgICB3aWRnZXQ6IG5ldyBJbmxpbmVUb2tlbldpZGdldCh7IGNvbmZpZ1ZlcnNpb246IHRoaXMuY29uZmlnVmVyc2lvbiwgbWF0Y2gsIHJlbmRlcjogcGFyYW1zLnJlbmRlciwgc291cmNlUGF0aCwgc3RhdGUgfSlcbiAgICAgICAgICAgICAgfSkucmFuZ2UoZnJvbSwgdG8pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsYXN0TGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBEZWNvcmF0aW9uLnNldChyYW5nZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBWaWV3UGx1Z2luLmZyb21DbGFzcyhJbmxpbmVUb2tlbldpZGdldHNQbHVnaW5WYWx1ZSwge1xuICAgIGRlY29yYXRpb25zOiAodmFsdWUpID0+IHZhbHVlLmRlY29yYXRpb25zXG4gIH0pO1xufVxuXG4vKipcbiAqIExpc3RzIGV2ZXJ5IG5vbi1lbXB0eSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gaW4gYSB0ZXh0LlxuICpcbiAqIEBwYXJhbSByZWdFeHAgLSBUaGUgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgbWF0Y2hlcywgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjQWxsKHJlZ0V4cDogUmVnRXhwLCB0ZXh0OiBzdHJpbmcpOiBSZWdFeHBFeGVjQXJyYXlbXSB7XG4gIGNvbnN0IG1hdGNoZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHJlZ0V4cC5sYXN0SW5kZXggPSAwO1xuICBmb3IgKGxldCBtYXRjaCA9IHJlZ0V4cC5leGVjKHRleHQpOyBtYXRjaCAhPT0gbnVsbDsgbWF0Y2ggPSByZWdFeHAuZXhlYyh0ZXh0KSkge1xuICAgIGlmIChtYXRjaFswXSA9PT0gJycpIHtcbiAgICAgIHJlZ0V4cC5sYXN0SW5kZXgrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBtYXRjaGVzLnB1c2gobWF0Y2gpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG4vKipcbiAqIENvcGllcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIHRoZSBgZ2AgZmxhZyBzZXQsIHNvIG1hdGNoaW5nIG5ldmVyIG1vdmVzIHRoZSBjYWxsZXIncyBgbGFzdEluZGV4YC5cbiAqXG4gKiBAcGFyYW0gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIEEgZ2xvYmFsIGNvcHkgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvR2xvYmFsUmVnRXhwKHJlZ0V4cDogUmVnRXhwKTogUmVnRXhwIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAocmVnRXhwLnNvdXJjZSwgcmVnRXhwLmdsb2JhbCA/IHJlZ0V4cC5mbGFncyA6IGAke3JlZ0V4cC5mbGFnc31nYCk7XG59XG5cbmZ1bmN0aW9uIGFyZU1hdGNoZXNFcXVhbChhOiBSZWdFeHBFeGVjQXJyYXksIGI6IFJlZ0V4cEV4ZWNBcnJheSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IGJbaW5kZXhdKTtcbn1cblxuZnVuY3Rpb24gaXNMaXZlUHJldmlldyhzdGF0ZTogRWRpdG9yU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN0YXRlLmZpZWxkKGVkaXRvckxpdmVQcmV2aWV3U3RhdGVGaWVsZCwgZmFsc2UpID8/IHRydWU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBNEJBLGtCQUlPO0FBQ1AsMEJBQXVCO0FBQ3ZCLHNCQUdPO0FBRVAsdUJBQXlCO0FBSXpCLE1BQU0sMkJBQXVCLDRCQUFxQywrQkFBZTtBQUNqRixNQUFNLGtDQUE4Qiw0QkFBNEIs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
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2RlbWlycm9yL2lubGluZS10b2tlbi13aWRnZXRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDcmVhdGVzIGFuIGVkaXRvciBleHRlbnNpb24gdGhhdCByZXBsYWNlcyBldmVyeSBtYXRjaCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIGEgd2lkZ2V0IGluIExpdmUgUHJldmlldywgYW5kXG4gKiBzaG93cyB0aGUgc291cmNlIGFnYWluIHdoaWxlIGEgc2VsZWN0aW9uIHRvdWNoZXMgaXQsIHRoZSB3YXkgT2JzaWRpYW4gdHJlYXRzIGl0cyBvd24gbGlua3MgYW5kIGZvcm1hdHRpbmcuXG4gKlxuICogT25seSB0aGUgdmlzaWJsZSByYW5nZXMgYXJlIG1hdGNoZWQsIGxpbmUgYnkgbGluZSwgc28gYSB0b2tlbiBuZXZlciBzcGFucyB0d28gbGluZXMuIFRoZSBkZWNvcmF0aW9ucyBhcmUgcmVidWlsdFxuICogd2hlbiB0aGUgZG9jdW1lbnQsIHRoZSB2aWV3cG9ydCwgdGhlIHNlbGVjdGlvbiwgdGhlIExpdmUgUHJldmlldyBtb2RlIG9yIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXM7IGFcbiAqIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGlzIHdoYXQgYSBgU2V0dGluZ3NGYWNldENvbXBvbmVudGAgZGlzcGF0Y2hlcywgc28gYSByZW5kZXIgdGhhdCByZWFkcyBhIHNldHRpbmdzIGZhY2V0XG4gKiByZS1ydW5zIHdoZW4gdGhlIHNldHRpbmdzIGRvLlxuICpcbiAqIE91dHNpZGUgYW4gT2JzaWRpYW4gTWFya2Rvd24gZWRpdG9yIHRoZXJlIGlzIG5vIGBlZGl0b3JMaXZlUHJldmlld0ZpZWxkYCwgYW5kIHRoZSB3aWRnZXRzIGFyZSBzaG93bi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvclN0YXRlLFxuICBFeHRlbnNpb24sXG4gIFJhbmdlLFxuICBTdGF0ZUZpZWxkXG59IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB0eXBlIHtcbiAgRGVjb3JhdGlvblNldCxcbiAgRWRpdG9yVmlldyxcbiAgUGx1Z2luVmFsdWUsXG4gIFZpZXdVcGRhdGVcbn0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgdHlwZSB7IE1hcmtkb3duRmlsZUluZm8gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIERlY29yYXRpb24sXG4gIFZpZXdQbHVnaW4sXG4gIFdpZGdldFR5cGVcbn0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgeyBjYXN0VG8gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGVkaXRvckluZm9GaWVsZCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHsgaXNMaXZlUHJldmlldyB9IGZyb20gJy4vZWRpdG9yLW1vZGUtZXh0ZW5zaW9uLnRzJztcblxuLy8gT2JzaWRpYW4uZC50cyByZWFjaGVzIEBjb2RlbWlycm9yL3N0YXRlIHRocm91Z2ggaXRzIENvbW1vbkpTIGRlY2xhcmF0aW9ucyBhbmQgdGhpcyBtb2R1bGUgdGhyb3VnaCB0aGUgRVMgb25lcywgYW5kXG4vLyBTdGF0ZUZpZWxkIGhhcyBwcml2YXRlIG1lbWJlcnMsIHNvIHRoZSB0d28gZGVjbGFyYXRpb25zIG9mIG9uZSBydW50aW1lIGNsYXNzIGRvIG5vdCB0eXBlLWNoZWNrIGFnYWluc3QgZWFjaCBvdGhlci5cbmNvbnN0IGVkaXRvckluZm9TdGF0ZUZpZWxkID0gY2FzdFRvPFN0YXRlRmllbGQ8TWFya2Rvd25GaWxlSW5mbz4+KGVkaXRvckluZm9GaWVsZCk7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGNyZWF0ZUlubGluZVRva2VuV2lkZ2V0c0V4dGVuc2lvbn0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSW5saW5lVG9rZW5XaWRnZXRzRXh0ZW5zaW9uUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gYSB0b2tlbiBtYXRjaGVzLiBUaGUgYGdgIGZsYWcgaXMgYWRkZWQgd2hlbiBtaXNzaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnRXhwOiBSZWdFeHA7XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSB0b2tlbiBpbnRvIHRoZSB3aWRnZXQncyBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyOiBJbmxpbmVUb2tlblJlbmRlckZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgYSBtYXRjaCBiZWNvbWVzIGEgd2lkZ2V0LCBzdWNoIGFzIHRvIHNraXAgYSBtYXRjaCBpbnNpZGUgY29kZS4gRXZlcnkgbWF0Y2ggZG9lcyBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGVjb3JhdGU/OiAocGFyYW1zOiBJbmxpbmVUb2tlblNob3VsZERlY29yYXRlUGFyYW1zKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgdG9rZW4gc2hvd3MgaXRzIHNvdXJjZSB3aGlsZSBhIHNlbGVjdGlvbiwgdGhlIGN1cnNvciBpbmNsdWRlZCwgdG91Y2hlcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXZlYWxPblNlbGVjdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBpbmxpbmUgdG9rZW4gaW50byBpdHMgY29udGFpbmVyIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSByZW5kZXIgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgSW5saW5lVG9rZW5SZW5kZXJGdW5jdGlvbiA9IChwYXJhbXM6IElubGluZVRva2VuUmVuZGVyUGFyYW1zKSA9PiB2b2lkO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgaGFuZGVkIHRvIGFuIGlubGluZSB0b2tlbiByZW5kZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lVG9rZW5SZW5kZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSB0b2tlbiBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgbWF0Y2ggb2YgdGhlIHRva2VuJ3MgcmVndWxhciBleHByZXNzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheTtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIG5vdGUgdGhlIHRva2VuIGlzIGluLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBpdCBpcyBub3Qga25vd24uXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlZGl0b3Igc3RhdGUsIHdoZW4gdGhlIHRva2VuIHJlbmRlcnMgaW4gYW4gZWRpdG9yLiBBYnNlbnQgaW4gUmVhZGluZyB2aWV3LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGU/OiBFZGl0b3JTdGF0ZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGhhbmRlZCB0byB7QGxpbmsgQ3JlYXRlSW5saW5lVG9rZW5XaWRnZXRzRXh0ZW5zaW9uUGFyYW1zLnNob3VsZERlY29yYXRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVUb2tlblNob3VsZERlY29yYXRlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkb2N1bWVudCBwb3NpdGlvbiB0aGUgbWF0Y2ggc3RhcnRzIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF0Y2ggb2YgdGhlIHRva2VuJ3MgcmVndWxhciBleHByZXNzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheTtcblxuICAvKipcbiAgICogVGhlIGVkaXRvciBzdGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlOiBFZGl0b3JTdGF0ZTtcblxuICAvKipcbiAgICogVGhlIGRvY3VtZW50IHBvc2l0aW9uIHRoZSBtYXRjaCBlbmRzIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgdG86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElubGluZVRva2VuV2lkZ2V0UGFyYW1zIHtcbiAgcmVhZG9ubHkgY29uZmlnVmVyc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBtYXRjaDogUmVnRXhwRXhlY0FycmF5O1xuICByZWFkb25seSByZW5kZXI6IElubGluZVRva2VuUmVuZGVyRnVuY3Rpb247XG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhdGU6IEVkaXRvclN0YXRlO1xufVxuXG5jbGFzcyBJbmxpbmVUb2tlbldpZGdldCBleHRlbmRzIFdpZGdldFR5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1ZlcnNpb246IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXRjaDogUmVnRXhwRXhlY0FycmF5O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcjogSW5saW5lVG9rZW5SZW5kZXJGdW5jdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGU6IEVkaXRvclN0YXRlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IElubGluZVRva2VuV2lkZ2V0UGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbmZpZ1ZlcnNpb24gPSBwYXJhbXMuY29uZmlnVmVyc2lvbjtcbiAgICB0aGlzLm1hdGNoID0gcGFyYW1zLm1hdGNoO1xuICAgIHRoaXMucmVuZGVyID0gcGFyYW1zLnJlbmRlcjtcbiAgICB0aGlzLnNvdXJjZVBhdGggPSBwYXJhbXMuc291cmNlUGF0aDtcbiAgICB0aGlzLnN0YXRlID0gcGFyYW1zLnN0YXRlO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGVxKG90aGVyOiBXaWRnZXRUeXBlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgSW5saW5lVG9rZW5XaWRnZXRcbiAgICAgICYmIG90aGVyLmNvbmZpZ1ZlcnNpb24gPT09IHRoaXMuY29uZmlnVmVyc2lvblxuICAgICAgJiYgb3RoZXIucmVuZGVyID09PSB0aGlzLnJlbmRlclxuICAgICAgJiYgb3RoZXIuc291cmNlUGF0aCA9PT0gdGhpcy5zb3VyY2VQYXRoXG4gICAgICAmJiBhcmVNYXRjaGVzRXF1YWwob3RoZXIubWF0Y2gsIHRoaXMubWF0Y2gpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHRvRE9NKHZpZXc6IEVkaXRvclZpZXcpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB2aWV3LmRvbS5vd25lckRvY3VtZW50Lndpbi5jcmVhdGVTcGFuKCk7XG4gICAgY29udGFpbmVyRWwuY2xhc3NMaXN0LmFkZChDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuSW5saW5lVG9rZW4pO1xuICAgIHRoaXMucmVuZGVyKHtcbiAgICAgIGNvbnRhaW5lckVsLFxuICAgICAgbWF0Y2g6IHRoaXMubWF0Y2gsXG4gICAgICBzb3VyY2VQYXRoOiB0aGlzLnNvdXJjZVBhdGgsXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZVxuICAgIH0pO1xuICAgIHJldHVybiBjb250YWluZXJFbDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZWRpdG9yIGV4dGVuc2lvbiB0aGF0IHJlcGxhY2VzIGV2ZXJ5IG1hdGNoIG9mIGEgcmVndWxhciBleHByZXNzaW9uIHdpdGggYSB3aWRnZXQgaW4gTGl2ZSBQcmV2aWV3LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZXh0ZW5zaW9uIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgZWRpdG9yIGV4dGVuc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlubGluZVRva2VuV2lkZ2V0c0V4dGVuc2lvbihwYXJhbXM6IENyZWF0ZUlubGluZVRva2VuV2lkZ2V0c0V4dGVuc2lvblBhcmFtcyk6IEV4dGVuc2lvbiB7XG4gIGNvbnN0IHJlZ0V4cCA9IHRvR2xvYmFsUmVnRXhwKHBhcmFtcy5yZWdFeHApO1xuICBjb25zdCBzaG91bGRSZXZlYWxPblNlbGVjdGlvbiA9IHBhcmFtcy5zaG91bGRSZXZlYWxPblNlbGVjdGlvbiA/PyB0cnVlO1xuXG4gIGNsYXNzIElubGluZVRva2VuV2lkZ2V0c1BsdWdpblZhbHVlIGltcGxlbWVudHMgUGx1Z2luVmFsdWUge1xuICAgIHB1YmxpYyBkZWNvcmF0aW9uczogRGVjb3JhdGlvblNldDtcbiAgICBwcml2YXRlIGNvbmZpZ1ZlcnNpb24gPSAwO1xuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSBkZWNvcmF0aW9ucyBvZiBhIG5ldyBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmlldyAtIFRoZSBlZGl0b3Igdmlldy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IodmlldzogRWRpdG9yVmlldykge1xuICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuYnVpbGREZWNvcmF0aW9ucyh2aWV3KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWJ1aWxkcyB0aGUgZGVjb3JhdGlvbnMgd2hlbiB3aGF0IHRoZXkgZGVwZW5kIG9uIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXBkYXRlIC0gVGhlIHZpZXcgdXBkYXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUodXBkYXRlOiBWaWV3VXBkYXRlKTogdm9pZCB7XG4gICAgICBjb25zdCBpc1JlY29uZmlndXJlZCA9IHVwZGF0ZS50cmFuc2FjdGlvbnMuc29tZSgodHJhbnNhY3Rpb24pID0+IHRyYW5zYWN0aW9uLnJlY29uZmlndXJlZCk7XG4gICAgICBpZiAoaXNSZWNvbmZpZ3VyZWQpIHtcbiAgICAgICAgdGhpcy5jb25maWdWZXJzaW9uKys7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHVwZGF0ZS5kb2NDaGFuZ2VkXG4gICAgICAgIHx8IHVwZGF0ZS52aWV3cG9ydENoYW5nZWRcbiAgICAgICAgfHwgdXBkYXRlLnNlbGVjdGlvblNldFxuICAgICAgICB8fCBpc1JlY29uZmlndXJlZFxuICAgICAgICB8fCBpc0xpdmVQcmV2aWV3KHVwZGF0ZS5zdGFydFN0YXRlKSAhPT0gaXNMaXZlUHJldmlldyh1cGRhdGUuc3RhdGUpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IHRoaXMuYnVpbGREZWNvcmF0aW9ucyh1cGRhdGUudmlldyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZERlY29yYXRpb25zKHZpZXc6IEVkaXRvclZpZXcpOiBEZWNvcmF0aW9uU2V0IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdmlldy5zdGF0ZTtcbiAgICAgIGlmICghaXNMaXZlUHJldmlldyhzdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIERlY29yYXRpb24ubm9uZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHN0YXRlLmZpZWxkKGVkaXRvckluZm9TdGF0ZUZpZWxkLCBmYWxzZSk/LmZpbGU/LnBhdGggPz8gJyc7XG4gICAgICBjb25zdCByYW5nZXM6IFJhbmdlPERlY29yYXRpb24+W10gPSBbXTtcbiAgICAgIGxldCBsYXN0TGluZU51bWJlciA9IDA7XG5cbiAgICAgIGZvciAoY29uc3QgdmlzaWJsZVJhbmdlIG9mIHZpZXcudmlzaWJsZVJhbmdlcykge1xuICAgICAgICBjb25zdCBmaXJzdExpbmVOdW1iZXIgPSBNYXRoLm1heChzdGF0ZS5kb2MubGluZUF0KHZpc2libGVSYW5nZS5mcm9tKS5udW1iZXIsIGxhc3RMaW5lTnVtYmVyICsgMSk7XG4gICAgICAgIGNvbnN0IGVuZExpbmVOdW1iZXIgPSBzdGF0ZS5kb2MubGluZUF0KHZpc2libGVSYW5nZS50bykubnVtYmVyO1xuICAgICAgICBmb3IgKGxldCBsaW5lTnVtYmVyID0gZmlyc3RMaW5lTnVtYmVyOyBsaW5lTnVtYmVyIDw9IGVuZExpbmVOdW1iZXI7IGxpbmVOdW1iZXIrKykge1xuICAgICAgICAgIGNvbnN0IGxpbmUgPSBzdGF0ZS5kb2MubGluZShsaW5lTnVtYmVyKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGV4ZWNBbGwocmVnRXhwLCBsaW5lLnRleHQpKSB7XG4gICAgICAgICAgICBjb25zdCBmcm9tID0gbGluZS5mcm9tICsgbWF0Y2guaW5kZXg7XG4gICAgICAgICAgICBjb25zdCB0byA9IGZyb20gKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmV2ZWFsT25TZWxlY3Rpb24gJiYgc3RhdGUuc2VsZWN0aW9uLnJhbmdlcy5zb21lKChyYW5nZSkgPT4gcmFuZ2UuZnJvbSA8PSB0byAmJiByYW5nZS50byA+PSBmcm9tKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJhbXMuc2hvdWxkRGVjb3JhdGUgJiYgIXBhcmFtcy5zaG91bGREZWNvcmF0ZSh7IGZyb20sIG1hdGNoLCBzdGF0ZSwgdG8gfSkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZXMucHVzaChcbiAgICAgICAgICAgICAgRGVjb3JhdGlvbi5yZXBsYWNlKHtcbiAgICAgICAgICAgICAgICB3aWRnZXQ6IG5ldyBJbmxpbmVUb2tlbldpZGdldCh7IGNvbmZpZ1ZlcnNpb246IHRoaXMuY29uZmlnVmVyc2lvbiwgbWF0Y2gsIHJlbmRlcjogcGFyYW1zLnJlbmRlciwgc291cmNlUGF0aCwgc3RhdGUgfSlcbiAgICAgICAgICAgICAgfSkucmFuZ2UoZnJvbSwgdG8pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsYXN0TGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBEZWNvcmF0aW9uLnNldChyYW5nZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBWaWV3UGx1Z2luLmZyb21DbGFzcyhJbmxpbmVUb2tlbldpZGdldHNQbHVnaW5WYWx1ZSwge1xuICAgIGRlY29yYXRpb25zOiAodmFsdWUpID0+IHZhbHVlLmRlY29yYXRpb25zXG4gIH0pO1xufVxuXG4vKipcbiAqIExpc3RzIGV2ZXJ5IG5vbi1lbXB0eSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gaW4gYSB0ZXh0LlxuICpcbiAqIEBwYXJhbSByZWdFeHAgLSBUaGUgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgbWF0Y2hlcywgaW4gb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjQWxsKHJlZ0V4cDogUmVnRXhwLCB0ZXh0OiBzdHJpbmcpOiBSZWdFeHBFeGVjQXJyYXlbXSB7XG4gIGNvbnN0IG1hdGNoZXM6IFJlZ0V4cEV4ZWNBcnJheVtdID0gW107XG4gIHJlZ0V4cC5sYXN0SW5kZXggPSAwO1xuICBmb3IgKGxldCBtYXRjaCA9IHJlZ0V4cC5leGVjKHRleHQpOyBtYXRjaCAhPT0gbnVsbDsgbWF0Y2ggPSByZWdFeHAuZXhlYyh0ZXh0KSkge1xuICAgIGlmIChtYXRjaFswXSA9PT0gJycpIHtcbiAgICAgIHJlZ0V4cC5sYXN0SW5kZXgrKztcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBtYXRjaGVzLnB1c2gobWF0Y2gpO1xuICB9XG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG4vKipcbiAqIENvcGllcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIHRoZSBgZ2AgZmxhZyBzZXQsIHNvIG1hdGNoaW5nIG5ldmVyIG1vdmVzIHRoZSBjYWxsZXIncyBgbGFzdEluZGV4YC5cbiAqXG4gKiBAcGFyYW0gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIEEgZ2xvYmFsIGNvcHkgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvR2xvYmFsUmVnRXhwKHJlZ0V4cDogUmVnRXhwKTogUmVnRXhwIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAocmVnRXhwLnNvdXJjZSwgcmVnRXhwLmdsb2JhbCA/IHJlZ0V4cC5mbGFncyA6IGAke3JlZ0V4cC5mbGFnc31nYCk7XG59XG5cbmZ1bmN0aW9uIGFyZU1hdGNoZXNFcXVhbChhOiBSZWdFeHBFeGVjQXJyYXksIGI6IFJlZ0V4cEV4ZWNBcnJheSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IGJbaW5kZXhdKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUE0QkEsa0JBSU87QUFDUCwwQkFBdUI7QUFDdkIsc0JBQWdDO0FBRWhDLHVCQUF5QjtBQUN6QixtQ0FBOEI7QUFJOUIsTUFBTSwyQkFBdUIsNEJBQXFDLCtCQUFlO0FBOEZqRixNQUFNLDBCQUEwQix1QkFBVztBQUFBLEVBQ3hCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBRVYsWUFBWSxRQUFpQztBQUNsRCxVQUFNO0FBQ04sU0FBSyxnQkFBZ0IsT0FBTztBQUM1QixTQUFLLFFBQVEsT0FBTztBQUNwQixTQUFLLFNBQVMsT0FBTztBQUNyQixTQUFLLGFBQWEsT0FBTztBQUN6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
|