@flogeez/angular-tiptap-editor 3.8.0 → 3.9.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/CHANGELOG.md +25 -0
- package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +30 -20
- package/esm2022/lib/components/editor/ate-block-controls.component.mjs +67 -18
- package/esm2022/lib/components/slash-commands/ate-slash-commands.component.mjs +5 -7
- package/esm2022/lib/extensions/ate-block-controls.extension.mjs +222 -4
- package/esm2022/lib/services/ate-image.service.mjs +83 -36
- package/fesm2022/flogeez-angular-tiptap-editor.mjs +550 -231
- package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
- package/lib/components/editor/angular-tiptap-editor.component.d.ts +7 -0
- package/lib/components/editor/ate-block-controls.component.d.ts +9 -0
- package/lib/extensions/ate-block-controls.extension.d.ts +10 -0
- package/lib/services/ate-image.service.d.ts +15 -1
- package/package.json +1 -1
- package/src/lib/styles/index.css +13 -0
- package/styles/index.css +13 -0
|
@@ -3,7 +3,13 @@ import tippy, { sticky } from "tippy.js";
|
|
|
3
3
|
import { AteEditorI18n } from "../../services/ate-editor-i18n.service";
|
|
4
4
|
import { AteTooltipDirective } from "../../directives/ate-tooltip.directive";
|
|
5
5
|
import { AteIconComponent } from "../ui/ate-icon.component";
|
|
6
|
+
import { ATE_BLOCK_DRAG_MIME, ateMultiBlockSelection, endAteBlockDrag, } from "../../extensions/ate-block-controls.extension";
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
8
|
+
// Glides from block to block; the strong ease-out covers most of the way at once, so it never trails the pointer
|
|
9
|
+
const BLOCK_CONTROLS_MOVE_TRANSITION = "transform 200ms cubic-bezier(0.23, 1, 0.32, 1)";
|
|
10
|
+
function prefersReducedMotion() {
|
|
11
|
+
return typeof matchMedia === "function" && matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
12
|
+
}
|
|
7
13
|
/**
|
|
8
14
|
* Component providing Notion-like block controls (Plus button and Drag Handle).
|
|
9
15
|
*/
|
|
@@ -18,23 +24,37 @@ export class AteBlockControlsComponent {
|
|
|
18
24
|
this.lastValidRect = null;
|
|
19
25
|
this.tippyInstance = null;
|
|
20
26
|
this.updateTimeout = null;
|
|
27
|
+
this.glideFrame = null;
|
|
28
|
+
/** While scrolling, the controls follow their block every frame: a glide would make them trail behind it */
|
|
29
|
+
this.onScroll = () => {
|
|
30
|
+
if (this.tippyInstance?.state.isVisible) {
|
|
31
|
+
this.withoutGlide();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
21
34
|
effect(() => {
|
|
22
35
|
const data = this.hoveredData();
|
|
23
36
|
const interacting = this.isInteracting();
|
|
24
37
|
if (data) {
|
|
25
38
|
this.lastValidData = data;
|
|
26
|
-
|
|
39
|
+
if (data.element.isConnected) {
|
|
40
|
+
this.lastValidRect = data.element.getBoundingClientRect();
|
|
41
|
+
}
|
|
27
42
|
}
|
|
28
43
|
this.updateMenu(!!data || interacting);
|
|
29
44
|
});
|
|
30
45
|
}
|
|
31
46
|
ngAfterViewInit() {
|
|
32
47
|
this.initTippy();
|
|
48
|
+
window.addEventListener("scroll", this.onScroll, { capture: true, passive: true });
|
|
33
49
|
}
|
|
34
50
|
ngOnDestroy() {
|
|
51
|
+
window.removeEventListener("scroll", this.onScroll, { capture: true });
|
|
35
52
|
if (this.updateTimeout) {
|
|
36
53
|
clearTimeout(this.updateTimeout);
|
|
37
54
|
}
|
|
55
|
+
if (this.glideFrame !== null) {
|
|
56
|
+
cancelAnimationFrame(this.glideFrame);
|
|
57
|
+
}
|
|
38
58
|
if (this.tippyInstance) {
|
|
39
59
|
this.tippyInstance.destroy();
|
|
40
60
|
this.tippyInstance = null;
|
|
@@ -58,7 +78,8 @@ export class AteBlockControlsComponent {
|
|
|
58
78
|
zIndex: 99,
|
|
59
79
|
plugins: [sticky],
|
|
60
80
|
sticky: "reference",
|
|
61
|
-
|
|
81
|
+
// The glide keeps the handle visibly the same one moving with the pointer (see withoutGlide for when it is skipped)
|
|
82
|
+
moveTransition: prefersReducedMotion() ? "" : BLOCK_CONTROLS_MOVE_TRANSITION,
|
|
62
83
|
getReferenceClientRect: () => this.getSelectionRect(),
|
|
63
84
|
popperOptions: {
|
|
64
85
|
modifiers: [
|
|
@@ -87,8 +108,33 @@ export class AteBlockControlsComponent {
|
|
|
87
108
|
}
|
|
88
109
|
}, delay);
|
|
89
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Moves the controls without gliding until the position settles (two frames after the last call).
|
|
113
|
+
* Tippy only skips the move transition on its very first show: the controls are never unmounted
|
|
114
|
+
* afterwards, so they would otherwise glide in from wherever they were last shown.
|
|
115
|
+
*/
|
|
116
|
+
withoutGlide() {
|
|
117
|
+
const popper = this.tippyInstance?.popper;
|
|
118
|
+
if (!popper) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
popper.style.transition = "none";
|
|
122
|
+
if (this.glideFrame !== null) {
|
|
123
|
+
cancelAnimationFrame(this.glideFrame);
|
|
124
|
+
}
|
|
125
|
+
this.glideFrame = requestAnimationFrame(() => {
|
|
126
|
+
this.glideFrame = requestAnimationFrame(() => {
|
|
127
|
+
this.glideFrame = null;
|
|
128
|
+
popper.style.transition = this.tippyInstance?.props.moveTransition ?? "";
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
90
132
|
showTippy() {
|
|
91
133
|
if (this.tippyInstance) {
|
|
134
|
+
// Appearing: show the controls in place, the glide is only for moving between blocks
|
|
135
|
+
if (!this.tippyInstance.state.isVisible) {
|
|
136
|
+
this.withoutGlide();
|
|
137
|
+
}
|
|
92
138
|
this.tippyInstance.setProps({
|
|
93
139
|
getReferenceClientRect: () => this.getSelectionRect(),
|
|
94
140
|
});
|
|
@@ -102,8 +148,10 @@ export class AteBlockControlsComponent {
|
|
|
102
148
|
}
|
|
103
149
|
getSelectionRect() {
|
|
104
150
|
const data = this.hoveredData();
|
|
105
|
-
|
|
106
|
-
|
|
151
|
+
// A block removed by an edit is detached: its rect is (0, 0), which would send the controls to the editor's corner
|
|
152
|
+
if (data?.element?.isConnected) {
|
|
153
|
+
this.lastValidRect = data.element.getBoundingClientRect();
|
|
154
|
+
return this.lastValidRect;
|
|
107
155
|
}
|
|
108
156
|
return this.lastValidRect || new DOMRect(-9999, -9999, 0, 0);
|
|
109
157
|
}
|
|
@@ -128,7 +176,7 @@ export class AteBlockControlsComponent {
|
|
|
128
176
|
event.stopPropagation();
|
|
129
177
|
const ed = this.editor();
|
|
130
178
|
const data = this.hoveredData() || this.lastValidData;
|
|
131
|
-
if (ed && data) {
|
|
179
|
+
if (ed && data && !ateMultiBlockSelection(ed.state, data.pos)) {
|
|
132
180
|
// Force whole-node selection. This is crucial for atomic nodes like tables and images.
|
|
133
181
|
ed.commands.setNodeSelection(data.pos);
|
|
134
182
|
}
|
|
@@ -167,32 +215,33 @@ export class AteBlockControlsComponent {
|
|
|
167
215
|
}
|
|
168
216
|
const { element, pos } = data;
|
|
169
217
|
const view = ed.view;
|
|
170
|
-
// 1.
|
|
218
|
+
// 1. Select the grabbed block, unless it belongs to a multi-block selection that is dragged as a whole
|
|
171
219
|
view.focus();
|
|
172
|
-
ed.
|
|
220
|
+
if (!ateMultiBlockSelection(ed.state, pos)) {
|
|
221
|
+
ed.commands.setNodeSelection(pos);
|
|
222
|
+
}
|
|
173
223
|
// 2. Browser Drag Image & metadata
|
|
174
224
|
event.dataTransfer.setDragImage(element, 0, 10);
|
|
175
225
|
event.dataTransfer.effectAllowed = "move";
|
|
176
|
-
event.dataTransfer.setData(
|
|
177
|
-
// 3.
|
|
178
|
-
view.dragging = {
|
|
179
|
-
slice: ed.state.selection.content(),
|
|
180
|
-
move: true,
|
|
181
|
-
};
|
|
182
|
-
// 4. Dispatch virtual dragstart
|
|
226
|
+
event.dataTransfer.setData(ATE_BLOCK_DRAG_MIME, "1");
|
|
227
|
+
// 3. Dispatch virtual dragstart, handled by the block drag plugin of AteBlockControlsExtension
|
|
183
228
|
const pmEvent = new DragEvent("dragstart", {
|
|
184
229
|
dataTransfer: event.dataTransfer,
|
|
185
230
|
bubbles: true,
|
|
186
231
|
cancelable: true,
|
|
187
232
|
});
|
|
188
233
|
element.dispatchEvent(pmEvent);
|
|
189
|
-
//
|
|
234
|
+
// 4. Cleanup UI
|
|
190
235
|
setTimeout(() => {
|
|
191
236
|
this.hideTippy();
|
|
192
237
|
this.isInteracting.set(false);
|
|
193
238
|
}, 0);
|
|
194
239
|
}
|
|
195
240
|
onDragEnd() {
|
|
241
|
+
const ed = this.editor();
|
|
242
|
+
if (!ed.isDestroyed) {
|
|
243
|
+
endAteBlockDrag(ed.view);
|
|
244
|
+
}
|
|
196
245
|
this.isInteracting.set(false);
|
|
197
246
|
}
|
|
198
247
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteBlockControlsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -222,7 +271,7 @@ export class AteBlockControlsComponent {
|
|
|
222
271
|
<ate-icon name="blockDrag" />
|
|
223
272
|
</div>
|
|
224
273
|
</div>
|
|
225
|
-
`, isInline: true, styles: [".ate-block-controls{display:flex;align-items:center;gap:2px;padding:4px;pointer-events:auto;will-change:transform}.ate-control-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;border:none;background:transparent;color:var(--ate-text-secondary);cursor:pointer
|
|
274
|
+
`, isInline: true, styles: [".ate-block-controls{display:flex;align-items:center;gap:2px;padding:4px;pointer-events:auto;will-change:transform}.ate-control-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;border:none;background:transparent;color:var(--ate-text-secondary);cursor:pointer}@media (hover: hover) and (pointer: fine){.ate-control-btn{transition:background-color .12s ease-out,color .12s ease-out}.ate-control-btn:hover{background:var(--ate-surface-tertiary);color:var(--ate-text)}}.ate-control-btn .ate-icon{font-size:18px}@media (max-width: 768px){:host{display:none!important}}\n"], dependencies: [{ kind: "directive", type: AteTooltipDirective, selector: "[ateTooltip]", inputs: ["ateTooltip", "ateTooltipPlacement", "ateTooltipDelay", "ateTooltipDisabled"] }, { kind: "component", type: AteIconComponent, selector: "ate-icon", inputs: ["name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
226
275
|
}
|
|
227
276
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteBlockControlsComponent, decorators: [{
|
|
228
277
|
type: Component,
|
|
@@ -252,6 +301,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
252
301
|
<ate-icon name="blockDrag" />
|
|
253
302
|
</div>
|
|
254
303
|
</div>
|
|
255
|
-
`, styles: [".ate-block-controls{display:flex;align-items:center;gap:2px;padding:4px;pointer-events:auto;will-change:transform}.ate-control-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;border:none;background:transparent;color:var(--ate-text-secondary);cursor:pointer
|
|
304
|
+
`, styles: [".ate-block-controls{display:flex;align-items:center;gap:2px;padding:4px;pointer-events:auto;will-change:transform}.ate-control-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;border:none;background:transparent;color:var(--ate-text-secondary);cursor:pointer}@media (hover: hover) and (pointer: fine){.ate-control-btn{transition:background-color .12s ease-out,color .12s ease-out}.ate-control-btn:hover{background:var(--ate-surface-tertiary);color:var(--ate-text)}}.ate-control-btn .ate-icon{font-size:18px}@media (max-width: 768px){:host{display:none!important}}\n"] }]
|
|
256
305
|
}], ctorParameters: () => [] });
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWJsb2NrLWNvbnRyb2xzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvZWRpdG9yL2F0ZS1ibG9jay1jb250cm9scy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUdULE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxFQUNOLHVCQUF1QixHQUV4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssRUFBRSxFQUE2QixNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUU1RDs7R0FFRztBQTJFSCxNQUFNLE9BQU8seUJBQXlCO0lBY3BDO1FBYm1CLFNBQUksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEQsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxnQkFBVyxHQUFHLEtBQUssQ0FBNkQsSUFBSSxDQUFDLENBQUM7UUFFdEYsWUFBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQTZCLFNBQVMsQ0FBQyxDQUFDO1FBRTFELGtCQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLGtCQUFhLEdBQStELElBQUksQ0FBQztRQUNqRixrQkFBYSxHQUFtQixJQUFJLENBQUM7UUFDckMsa0JBQWEsR0FBeUIsSUFBSSxDQUFDO1FBQzNDLGtCQUFhLEdBQXlDLElBQUksQ0FBQztRQUdqRSxNQUFNLENBQUMsR0FBRyxFQUFF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WUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLGlGQUFpRjtRQUNoRixJQUF5QyxDQUFDLFFBQVEsR0FBRztZQUNwRCxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQ25DLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQztRQUVGLGdDQUFnQztRQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUU7WUFDekMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvQixnQkFBZ0I7UUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7K0dBdk5VLHlCQUF5QjttR0FBekIseUJBQXlCLGtkQXJFMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJULGdsQkE1QlMsbUJBQW1CLGlKQUFFLGdCQUFnQjs7NEZBdUVwQyx5QkFBeUI7a0JBMUVyQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFDL0IsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICB2aWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgZWZmZWN0LFxuICBzaWduYWwsXG4gIGluamVjdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIEFmdGVyVmlld0luaXQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgdGlwcHksIHsgSW5zdGFuY2UgYXMgVGlwcHlJbnN0YW5jZSwgc3RpY2t5IH0gZnJvbSBcInRpcHB5LmpzXCI7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tIFwiQHRpcHRhcC9jb3JlXCI7XG5pbXBvcnQgeyBOb2RlIGFzIFBNTm9kZSB9IGZyb20gXCJAdGlwdGFwL3BtL21vZGVsXCI7XG5pbXBvcnQgeyBBdGVFZGl0b3JJMThuIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1lZGl0b3ItaTE4bi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBdGVUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvYXRlLXRvb2x0aXAuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBBdGVJY29uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3VpL2F0ZS1pY29uLmNvbXBvbmVudFwiO1xuXG4vKipcbiAqIENvbXBvbmVudCBwcm92aWRpbmcgTm90aW9uLWxpa2UgYmxvY2sgY29udHJvbHMgKFBsdXMgYnV0dG9uIGFuZCBEcmFnIEhhbmRsZSkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhdGUtYmxvY2stY29udHJvbHNcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0F0ZVRvb2x0aXBEaXJlY3RpdmUsIEF0ZUljb25Db21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICAjbWVudVJlZlxuICAgICAgY2xhc3M9XCJhdGUtYmxvY2stY29udHJvbHNcIlxuICAgICAgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKClcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIlxuICAgICAgKG1vdXNlZG93bik9XCJvbkNvbnRhaW5lck1vdXNlRG93bigkZXZlbnQpXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYXRlLWNvbnRyb2wtYnRuIGF0ZS1ibG9jay1hZGRcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uQnV0dG9uTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwiYWRkQmxvY2soJGV2ZW50KVwiXG4gICAgICAgIFthdGVUb29sdGlwXT1cImkxOG4uZWRpdG9yKCkuYmxvY2tBZGRcIlxuICAgICAgICBhdGVUb29sdGlwUGxhY2VtZW50PVwidG9wXCI+XG4gICAgICAgIDxhdGUtaWNvbiBuYW1lPVwiYmxvY2tBZGRcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYXRlLWNvbnRyb2wtYnRuIGF0ZS1ibG9jay1kcmFnXCJcbiAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25EcmFnSGFuZGxlTW91c2VEb3duKCRldmVudClcIlxuICAgICAgICAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgICAgICAoZHJhZ2VuZCk9XCJvbkRyYWdFbmQoKVwiXG4gICAgICAgIFthdGVUb29sdGlwXT1cImkxOG4uZWRpdG9yKCkuYmxvY2tEcmFnXCJcbiAgICAgICAgYXRlVG9vbHRpcFBsYWNlbWVudD1cInRvcFwiPlxuICAgICAgICA8YXRlLWljb24gbmFtZT1cImJsb2NrRHJhZ1wiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLmF0ZS1ibG9jay1jb250cm9scyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICBwYWRkaW5nOiA0cHg7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xuICAgICAgfVxuXG4gICAgICAuYXRlLWNvbnRyb2wtYnRuIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS10ZXh0LXNlY29uZGFyeSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udHJvbC1idG46aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZS10ZXJ0aWFyeSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGV4dCk7XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udHJvbC1idG4gLmF0ZS1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEF0ZUJsb2NrQ29udHJvbHNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaTE4biA9IGluamVjdChBdGVFZGl0b3JJMThuKTtcblxuICBlZGl0b3IgPSBpbnB1dC5yZXF1aXJlZDxFZGl0b3I+KCk7XG4gIGhvdmVyZWREYXRhID0gaW5wdXQ8eyBub2RlOiBQTU5vZGU7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBwb3M6IG51bWJlciB9IHwgbnVsbD4obnVsbCk7XG5cbiAgbWVudVJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oXCJtZW51UmVmXCIpO1xuXG4gIHByb3RlY3RlZCBpc0ludGVyYWN0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBsYXN0VmFsaWREYXRhOiB7IG5vZGU6IFBNTm9kZTsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IHBvczogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0VmFsaWRSZWN0OiBET01SZWN0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGlwcHlJbnN0YW5jZTogVGlwcHlJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVwZGF0ZVRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhvdmVyZWREYXRhKCk7XG4gICAgICBjb25zdCBpbnRlcmFjdGluZyA9IHRoaXMuaXNJbnRlcmFjdGluZygpO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLmxhc3RWYWxpZERhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLmxhc3RWYWxpZFJlY3QgPSBkYXRhLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlTWVudSghIWRhdGEgfHwgaW50ZXJhY3RpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdFRpcHB5KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy51cGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy51cGRhdGVUaW1lb3V0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGlwcHlJbnN0YW5jZSkge1xuICAgICAgdGhpcy50aXBweUluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0VGlwcHkoKSB7XG4gICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMubWVudVJlZigpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFuYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50aXBweUluc3RhbmNlID0gdGlwcHkoZG9jdW1lbnQuYm9keSwge1xuICAgICAgY29udGVudDogbmF0aXZlRWxlbWVudCxcbiAgICAgIHRyaWdnZXI6IFwibWFudWFsXCIsXG4gICAgICBwbGFjZW1lbnQ6IFwibGVmdFwiLFxuICAgICAgdGhlbWU6IFwiYXRlLWJsb2NrLWNvbnRyb2xzXCIsXG4gICAgICBhcHBlbmRUbzogKCkgPT4gKHRoaXMuZWRpdG9yKCk/Lm9wdGlvbnM/LmVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpIHx8IGRvY3VtZW50LmJvZHksXG4gICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgIGFycm93OiBmYWxzZSxcbiAgICAgIG9mZnNldDogWzAsIDhdLFxuICAgICAgekluZGV4OiA5OSxcbiAgICAgIHBsdWdpbnM6IFtzdGlja3ldLFxuICAgICAgc3RpY2t5OiBcInJlZmVyZW5jZVwiLFxuICAgICAgbW92ZVRyYW5zaXRpb246IFwidHJhbnNmb3JtIDAuMnMgZWFzZS1vdXRcIixcbiAgICAgIGdldFJlZmVyZW5jZUNsaWVudFJlY3Q6ICgpID0+IHRoaXMuZ2V0U2VsZWN0aW9uUmVjdCgpLFxuICAgICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInByZXZlbnRPdmVyZmxvd1wiLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBib3VuZGFyeTogKHRoaXMuZWRpdG9yKCk/Lm9wdGlvbnM/LmVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpIHx8IGRvY3VtZW50LmJvZHksXG4gICAgICAgICAgICAgIHBhZGRpbmc6IDgsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNZW51KHNob3c6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy51cGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy51cGRhdGVUaW1lb3V0KTtcbiAgICB9XG4gICAgY29uc3QgZGVsYXkgPSBzaG93ID8gMCA6IDQwMDtcbiAgICB0aGlzLnVwZGF0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChzaG93KSB7XG4gICAgICAgIHRoaXMuc2hvd1RpcHB5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhpZGVUaXBweSgpO1xuICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RpcHB5KCkge1xuICAgIGlmICh0aGlzLnRpcHB5SW5zdGFuY2UpIHtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5zZXRQcm9wcyh7XG4gICAgICAgIGdldFJlZmVyZW5jZUNsaWVudFJlY3Q6ICgpID0+IHRoaXMuZ2V0U2VsZWN0aW9uUmVjdCgpLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2Uuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGlkZVRpcHB5KCkge1xuICAgIGlmICh0aGlzLnRpcHB5SW5zdGFuY2UpIHtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3Rpb25SZWN0KCk6IERPTVJlY3Qge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhvdmVyZWREYXRhKCk7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5lbGVtZW50KSB7XG4gICAgICByZXR1cm4gZGF0YS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sYXN0VmFsaWRSZWN0IHx8IG5ldyBET01SZWN0KC05OTk5LCAtOTk5OSwgMCwgMCk7XG4gIH1cblxuICBvbk1vdXNlRW50ZXIoKSB7XG4gICAgdGhpcy5pc0ludGVyYWN0aW5nLnNldCh0cnVlKTtcbiAgfVxuXG4gIG9uTW91c2VMZWF2ZSgpIHtcbiAgICB0aGlzLmlzSW50ZXJhY3Rpbmcuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIG9uQ29udGFpbmVyTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBvbkJ1dHRvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0aW9uIHN0cmF0ZWd5IHRvIGF2b2lkIHBhcnRpYWwgbm9kZSBkcmFnZ2luZyAoZ2hvc3QgdGFibGUgaXNzdWUpLlxuICAgKi9cbiAgb25EcmFnSGFuZGxlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZWQgPSB0aGlzLmVkaXRvcigpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhvdmVyZWREYXRhKCkgfHwgdGhpcy5sYXN0VmFsaWREYXRhO1xuICAgIGlmIChlZCAmJiBkYXRhKSB7XG4gICAgICAvLyBGb3JjZSB3aG9sZS1ub2RlIHNlbGVjdGlvbi4gVGhpcyBpcyBjcnVjaWFsIGZvciBhdG9taWMgbm9kZXMgbGlrZSB0YWJsZXMgYW5kIGltYWdlcy5cbiAgICAgIGVkLmNvbW1hbmRzLnNldE5vZGVTZWxlY3Rpb24oZGF0YS5wb3MpO1xuICAgIH1cbiAgfVxuXG4gIGFkZEJsb2NrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZWQgPSB0aGlzLmVkaXRvcigpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhvdmVyZWREYXRhKCkgfHwgdGhpcy5sYXN0VmFsaWREYXRhO1xuICAgIGlmICghZWQgfHwgIWRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBvcywgbm9kZSB9ID0gZGF0YTtcbiAgICBpZiAobm9kZS5jb250ZW50LnNpemUgPT09IDApIHtcbiAgICAgIGVkLmNoYWluKClcbiAgICAgICAgLmZvY3VzKClcbiAgICAgICAgLnNldFRleHRTZWxlY3Rpb24ocG9zICsgMSlcbiAgICAgICAgLmluc2VydENvbnRlbnQoXCIvXCIpXG4gICAgICAgIC5ydW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV4dFBvcyA9IHBvcyArIG5vZGUubm9kZVNpemU7XG4gICAgICBlZC5jaGFpbigpXG4gICAgICAgIC5mb2N1cygpXG4gICAgICAgIC5pbnNlcnRDb250ZW50QXQobmV4dFBvcywgeyB0eXBlOiBcInBhcmFncmFwaFwiLCBjb250ZW50OiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogXCIvXCIgfV0gfSlcbiAgICAgICAgLnNldFRleHRTZWxlY3Rpb24obmV4dFBvcyArIDIpXG4gICAgICAgIC5ydW4oKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzSW50ZXJhY3Rpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmhpZGVUaXBweSgpO1xuICB9XG5cbiAgb25EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGNvbnN0IGVkID0gdGhpcy5lZGl0b3IoKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ob3ZlcmVkRGF0YSgpIHx8IHRoaXMubGFzdFZhbGlkRGF0YTtcbiAgICBpZiAoIWVkIHx8ICFkYXRhIHx8ICFldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGVsZW1lbnQsIHBvcyB9ID0gZGF0YTtcbiAgICBjb25zdCB2aWV3ID0gZWQudmlldztcblxuICAgIC8vIDEuIEZvcmNlIHRoZSBlZGl0b3IgdG8gZm9jdXMgYW5kIHNlbGVjdCB0aGUgRU5USVJFIG5vZGVcbiAgICB2aWV3LmZvY3VzKCk7XG4gICAgZWQuY29tbWFuZHMuc2V0Tm9kZVNlbGVjdGlvbihwb3MpO1xuXG4gICAgLy8gMi4gQnJvd3NlciBEcmFnIEltYWdlICYgbWV0YWRhdGFcbiAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGVsZW1lbnQsIDAsIDEwKTtcbiAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IFwibW92ZVwiO1xuICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKFwidGV4dC9wbGFpblwiLCBcIlwiKTtcblxuICAgIC8vIDMuIFBSTy1IQUNLOiBJbmRpY2F0ZSB0aGlzIGlzIGEgbW92ZSBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gKHRoZSB3aG9sZSBub2RlKVxuICAgICh2aWV3IGFzIHVua25vd24gYXMgeyBkcmFnZ2luZzogdW5rbm93biB9KS5kcmFnZ2luZyA9IHtcbiAgICAgIHNsaWNlOiBlZC5zdGF0ZS5zZWxlY3Rpb24uY29udGVudCgpLFxuICAgICAgbW92ZTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgLy8gNC4gRGlzcGF0Y2ggdmlydHVhbCBkcmFnc3RhcnRcbiAgICBjb25zdCBwbUV2ZW50ID0gbmV3IERyYWdFdmVudChcImRyYWdzdGFydFwiLCB7XG4gICAgICBkYXRhVHJhbnNmZXI6IGV2ZW50LmRhdGFUcmFuc2ZlcixcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChwbUV2ZW50KTtcblxuICAgIC8vIDUuIENsZWFudXAgVUlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGlkZVRpcHB5KCk7XG4gICAgICB0aGlzLmlzSW50ZXJhY3Rpbmcuc2V0KGZhbHNlKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIG9uRHJhZ0VuZCgpIHtcbiAgICB0aGlzLmlzSW50ZXJhY3Rpbmcuc2V0KGZhbHNlKTtcbiAgfVxufVxuIl19
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWJsb2NrLWNvbnRyb2xzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvZWRpdG9yL2F0ZS1ibG9jay1jb250cm9scy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUdULE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxFQUNOLHVCQUF1QixHQUV4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssRUFBRSxFQUE2QixNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLGVBQWUsR0FDaEIsTUFBTSwrQ0FBK0MsQ0FBQzs7QUFFdkQsaUhBQWlIO0FBQ2pILE1BQU0sOEJBQThCLEdBQUcsZ0RBQWdELENBQUM7QUFFeEYsU0FBUyxvQkFBb0I7SUFDM0IsT0FBTyxPQUFPLFVBQVUsS0FBSyxVQUFVLElBQUksVUFBVSxDQUFDLGtDQUFrQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3BHLENBQUM7QUFFRDs7R0FFRztBQW1GSCxNQUFNLE9BQU8seUJBQXlCO0lBZXBDO1FBZG1CLFNBQUksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEQsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxnQkFBVyxHQUFHLEtBQUssQ0FBNkQsSUFBSSxDQUFDLENBQUM7UUFFdEYsWUFBTyxH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QyxPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFL0IsZ0JBQWdCO1FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELFNBQVM7UUFDUCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDOytHQW5RVSx5QkFBeUI7bUdBQXpCLHlCQUF5QixrZEE3RTFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCVCxpckJBNUJTLG1CQUFtQixpSkFBRSxnQkFBZ0I7OzRGQStFcEMseUJBQXlCO2tCQWxGckMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsbUJBQy9CLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgdmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIGVmZmVjdCxcbiAgc2lnbmFsLFxuICBpbmplY3QsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHRpcHB5LCB7IEluc3RhbmNlIGFzIFRpcHB5SW5zdGFuY2UsIHN0aWNreSB9IGZyb20gXCJ0aXBweS5qc1wiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgTm9kZSBhcyBQTU5vZGUgfSBmcm9tIFwiQHRpcHRhcC9wbS9tb2RlbFwiO1xuaW1wb3J0IHsgQXRlRWRpdG9ySTE4biB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtZWRpdG9yLWkxOG4uc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmVzL2F0ZS10b29sdGlwLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgQXRlSWNvbkNvbXBvbmVudCB9IGZyb20gXCIuLi91aS9hdGUtaWNvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7XG4gIEFURV9CTE9DS19EUkFHX01JTUUsXG4gIGF0ZU11bHRpQmxvY2tTZWxlY3Rpb24sXG4gIGVuZEF0ZUJsb2NrRHJhZyxcbn0gZnJvbSBcIi4uLy4uL2V4dGVuc2lvbnMvYXRlLWJsb2NrLWNvbnRyb2xzLmV4dGVuc2lvblwiO1xuXG4vLyBHbGlkZXMgZnJvbSBibG9jayB0byBibG9jazsgdGhlIHN0cm9uZyBlYXNlLW91dCBjb3ZlcnMgbW9zdCBvZiB0aGUgd2F5IGF0IG9uY2UsIHNvIGl0IG5ldmVyIHRyYWlscyB0aGUgcG9pbnRlclxuY29uc3QgQkxPQ0tfQ09OVFJPTFNfTU9WRV9UUkFOU0lUSU9OID0gXCJ0cmFuc2Zvcm0gMjAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpXCI7XG5cbmZ1bmN0aW9uIHByZWZlcnNSZWR1Y2VkTW90aW9uKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1hdGNoTWVkaWEgPT09IFwiZnVuY3Rpb25cIiAmJiBtYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSlcIikubWF0Y2hlcztcbn1cblxuLyoqXG4gKiBDb21wb25lbnQgcHJvdmlkaW5nIE5vdGlvbi1saWtlIGJsb2NrIGNvbnRyb2xzIChQbHVzIGJ1dHRvbiBhbmQgRHJhZyBIYW5kbGUpLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXRlLWJsb2NrLWNvbnRyb2xzXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtBdGVUb29sdGlwRGlyZWN0aXZlLCBBdGVJY29uQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgI21lbnVSZWZcbiAgICAgIGNsYXNzPVwiYXRlLWJsb2NrLWNvbnRyb2xzXCJcbiAgICAgIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcigpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25Db250YWluZXJNb3VzZURvd24oJGV2ZW50KVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImF0ZS1jb250cm9sLWJ0biBhdGUtYmxvY2stYWRkXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkJ1dHRvbk1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZEJsb2NrKCRldmVudClcIlxuICAgICAgICBbYXRlVG9vbHRpcF09XCJpMThuLmVkaXRvcigpLmJsb2NrQWRkXCJcbiAgICAgICAgYXRlVG9vbHRpcFBsYWNlbWVudD1cInRvcFwiPlxuICAgICAgICA8YXRlLWljb24gbmFtZT1cImJsb2NrQWRkXCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImF0ZS1jb250cm9sLWJ0biBhdGUtYmxvY2stZHJhZ1wiXG4gICAgICAgIGRyYWdnYWJsZT1cInRydWVcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uRHJhZ0hhbmRsZU1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdlbmQpPVwib25EcmFnRW5kKClcIlxuICAgICAgICBbYXRlVG9vbHRpcF09XCJpMThuLmVkaXRvcigpLmJsb2NrRHJhZ1wiXG4gICAgICAgIGF0ZVRvb2x0aXBQbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgPGF0ZS1pY29uIG5hbWU9XCJibG9ja0RyYWdcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5hdGUtYmxvY2stY29udHJvbHMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDJweDtcbiAgICAgICAgcGFkZGluZzogNHB4O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcbiAgICAgIH1cblxuICAgICAgLmF0ZS1jb250cm9sLWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGV4dC1zZWNvbmRhcnkpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC8qIEhvdmVyZWQgZG96ZW5zIG9mIHRpbWVzIGEgbWludXRlOiBhIGZsYXNoIGF0IG1vc3QsIGFuZCBvbmx5IHdpdGggYSByZWFsIHBvaW50ZXIgKi9cbiAgICAgIEBtZWRpYSAoaG92ZXI6IGhvdmVyKSBhbmQgKHBvaW50ZXI6IGZpbmUpIHtcbiAgICAgICAgLmF0ZS1jb250cm9sLWJ0biB7XG4gICAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZS1vdXQsXG4gICAgICAgICAgICBjb2xvciAxMjBtcyBlYXNlLW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hdGUtY29udHJvbC1idG46aG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1zdXJmYWNlLXRlcnRpYXJ5KTtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5hdGUtY29udHJvbC1idG4gLmF0ZS1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEF0ZUJsb2NrQ29udHJvbHNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaTE4biA9IGluamVjdChBdGVFZGl0b3JJMThuKTtcblxuICBlZGl0b3IgPSBpbnB1dC5yZXF1aXJlZDxFZGl0b3I+KCk7XG4gIGhvdmVyZWREYXRhID0gaW5wdXQ8eyBub2RlOiBQTU5vZGU7IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyBwb3M6IG51bWJlciB9IHwgbnVsbD4obnVsbCk7XG5cbiAgbWVudVJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oXCJtZW51UmVmXCIpO1xuXG4gIHByb3RlY3RlZCBpc0ludGVyYWN0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBsYXN0VmFsaWREYXRhOiB7IG5vZGU6IFBNTm9kZTsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IHBvczogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0VmFsaWRSZWN0OiBET01SZWN0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGlwcHlJbnN0YW5jZTogVGlwcHlJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHVwZGF0ZVRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZ2xpZGVGcmFtZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhvdmVyZWREYXRhKCk7XG4gICAgICBjb25zdCBpbnRlcmFjdGluZyA9IHRoaXMuaXNJbnRlcmFjdGluZygpO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLmxhc3RWYWxpZERhdGEgPSBkYXRhO1xuICAgICAgICBpZiAoZGF0YS5lbGVtZW50LmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgdGhpcy5sYXN0VmFsaWRSZWN0ID0gZGF0YS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlTWVudSghIWRhdGEgfHwgaW50ZXJhY3RpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdFRpcHB5KCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vblNjcm9sbCwgeyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vblNjcm9sbCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIGlmICh0aGlzLnVwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnVwZGF0ZVRpbWVvdXQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nbGlkZUZyYW1lICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmdsaWRlRnJhbWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy50aXBweUluc3RhbmNlKSB7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgdGhpcy50aXBweUluc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRUaXBweSgpIHtcbiAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5tZW51UmVmKCkubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIW5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRpcHB5SW5zdGFuY2UgPSB0aXBweShkb2N1bWVudC5ib2R5LCB7XG4gICAgICBjb250ZW50OiBuYXRpdmVFbGVtZW50LFxuICAgICAgdHJpZ2dlcjogXCJtYW51YWxcIixcbiAgICAgIHBsYWNlbWVudDogXCJsZWZ0XCIsXG4gICAgICB0aGVtZTogXCJhdGUtYmxvY2stY29udHJvbHNcIixcbiAgICAgIGFwcGVuZFRvOiAoKSA9PiAodGhpcy5lZGl0b3IoKT8ub3B0aW9ucz8uZWxlbWVudCBhcyBIVE1MRWxlbWVudCkgfHwgZG9jdW1lbnQuYm9keSxcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgYXJyb3c6IGZhbHNlLFxuICAgICAgb2Zmc2V0OiBbMCwgOF0sXG4gICAgICB6SW5kZXg6IDk5LFxuICAgICAgcGx1Z2luczogW3N0aWNreV0sXG4gICAgICBzdGlja3k6IFwicmVmZXJlbmNlXCIsXG4gICAgICAvLyBUaGUgZ2xpZGUga2VlcHMgdGhlIGhhbmRsZSB2aXNpYmx5IHRoZSBzYW1lIG9uZSBtb3Zpbmcgd2l0aCB0aGUgcG9pbnRlciAoc2VlIHdpdGhvdXRHbGlkZSBmb3Igd2hlbiBpdCBpcyBza2lwcGVkKVxuICAgICAgbW92ZVRyYW5zaXRpb246IHByZWZlcnNSZWR1Y2VkTW90aW9uKCkgPyBcIlwiIDogQkxPQ0tfQ09OVFJPTFNfTU9WRV9UUkFOU0lUSU9OLFxuICAgICAgZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdDogKCkgPT4gdGhpcy5nZXRTZWxlY3Rpb25SZWN0KCksXG4gICAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwicHJldmVudE92ZXJmbG93XCIsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIGJvdW5kYXJ5OiAodGhpcy5lZGl0b3IoKT8ub3B0aW9ucz8uZWxlbWVudCBhcyBIVE1MRWxlbWVudCkgfHwgZG9jdW1lbnQuYm9keSxcbiAgICAgICAgICAgICAgcGFkZGluZzogOCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnUoc2hvdzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnVwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnVwZGF0ZVRpbWVvdXQpO1xuICAgIH1cbiAgICBjb25zdCBkZWxheSA9IHNob3cgPyAwIDogNDAwO1xuICAgIHRoaXMudXBkYXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgdGhpcy5zaG93VGlwcHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlkZVRpcHB5KCk7XG4gICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICB9XG5cbiAgLyoqIFdoaWxlIHNjcm9sbGluZywgdGhlIGNvbnRyb2xzIGZvbGxvdyB0aGVpciBibG9jayBldmVyeSBmcmFtZTogYSBnbGlkZSB3b3VsZCBtYWtlIHRoZW0gdHJhaWwgYmVoaW5kIGl0ICovXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMudGlwcHlJbnN0YW5jZT8uc3RhdGUuaXNWaXNpYmxlKSB7XG4gICAgICB0aGlzLndpdGhvdXRHbGlkZSgpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTW92ZXMgdGhlIGNvbnRyb2xzIHdpdGhvdXQgZ2xpZGluZyB1bnRpbCB0aGUgcG9zaXRpb24gc2V0dGxlcyAodHdvIGZyYW1lcyBhZnRlciB0aGUgbGFzdCBjYWxsKS5cbiAgICogVGlwcHkgb25seSBza2lwcyB0aGUgbW92ZSB0cmFuc2l0aW9uIG9uIGl0cyB2ZXJ5IGZpcnN0IHNob3c6IHRoZSBjb250cm9scyBhcmUgbmV2ZXIgdW5tb3VudGVkXG4gICAqIGFmdGVyd2FyZHMsIHNvIHRoZXkgd291bGQgb3RoZXJ3aXNlIGdsaWRlIGluIGZyb20gd2hlcmV2ZXIgdGhleSB3ZXJlIGxhc3Qgc2hvd24uXG4gICAqL1xuICBwcml2YXRlIHdpdGhvdXRHbGlkZSgpIHtcbiAgICBjb25zdCBwb3BwZXIgPSB0aGlzLnRpcHB5SW5zdGFuY2U/LnBvcHBlcjtcbiAgICBpZiAoIXBvcHBlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwb3BwZXIuc3R5bGUudHJhbnNpdGlvbiA9IFwibm9uZVwiO1xuICAgIGlmICh0aGlzLmdsaWRlRnJhbWUgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuZ2xpZGVGcmFtZSk7XG4gICAgfVxuICAgIHRoaXMuZ2xpZGVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLmdsaWRlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLmdsaWRlRnJhbWUgPSBudWxsO1xuICAgICAgICBwb3BwZXIuc3R5bGUudHJhbnNpdGlvbiA9IHRoaXMudGlwcHlJbnN0YW5jZT8ucHJvcHMubW92ZVRyYW5zaXRpb24gPz8gXCJcIjtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93VGlwcHkoKSB7XG4gICAgaWYgKHRoaXMudGlwcHlJbnN0YW5jZSkge1xuICAgICAgLy8gQXBwZWFyaW5nOiBzaG93IHRoZSBjb250cm9scyBpbiBwbGFjZSwgdGhlIGdsaWRlIGlzIG9ubHkgZm9yIG1vdmluZyBiZXR3ZWVuIGJsb2Nrc1xuICAgICAgaWYgKCF0aGlzLnRpcHB5SW5zdGFuY2Uuc3RhdGUuaXNWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMud2l0aG91dEdsaWRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2Uuc2V0UHJvcHMoe1xuICAgICAgICBnZXRSZWZlcmVuY2VDbGllbnRSZWN0OiAoKSA9PiB0aGlzLmdldFNlbGVjdGlvblJlY3QoKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50aXBweUluc3RhbmNlLnNob3coKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhpZGVUaXBweSgpIHtcbiAgICBpZiAodGhpcy50aXBweUluc3RhbmNlKSB7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2UuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0aW9uUmVjdCgpOiBET01SZWN0IHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ob3ZlcmVkRGF0YSgpO1xuICAgIC8vIEEgYmxvY2sgcmVtb3ZlZCBieSBhbiBlZGl0IGlzIGRldGFjaGVkOiBpdHMgcmVjdCBpcyAoMCwgMCksIHdoaWNoIHdvdWxkIHNlbmQgdGhlIGNvbnRyb2xzIHRvIHRoZSBlZGl0b3IncyBjb3JuZXJcbiAgICBpZiAoZGF0YT8uZWxlbWVudD8uaXNDb25uZWN0ZWQpIHtcbiAgICAgIHRoaXMubGFzdFZhbGlkUmVjdCA9IGRhdGEuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiB0aGlzLmxhc3RWYWxpZFJlY3Q7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxhc3RWYWxpZFJlY3QgfHwgbmV3IERPTVJlY3QoLTk5OTksIC05OTk5LCAwLCAwKTtcbiAgfVxuXG4gIG9uTW91c2VFbnRlcigpIHtcbiAgICB0aGlzLmlzSW50ZXJhY3Rpbmcuc2V0KHRydWUpO1xuICB9XG5cbiAgb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuaXNJbnRlcmFjdGluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgb25Db250YWluZXJNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQnV0dG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gc3RyYXRlZ3kgdG8gYXZvaWQgcGFydGlhbCBub2RlIGRyYWdnaW5nIChnaG9zdCB0YWJsZSBpc3N1ZSkuXG4gICAqL1xuICBvbkRyYWdIYW5kbGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBlZCA9IHRoaXMuZWRpdG9yKCk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuaG92ZXJlZERhdGEoKSB8fCB0aGlzLmxhc3RWYWxpZERhdGE7XG4gICAgaWYgKGVkICYmIGRhdGEgJiYgIWF0ZU11bHRpQmxvY2tTZWxlY3Rpb24oZWQuc3RhdGUsIGRhdGEucG9zKSkge1xuICAgICAgLy8gRm9yY2Ugd2hvbGUtbm9kZSBzZWxlY3Rpb24uIFRoaXMgaXMgY3J1Y2lhbCBmb3IgYXRvbWljIG5vZGVzIGxpa2UgdGFibGVzIGFuZCBpbWFnZXMuXG4gICAgICBlZC5jb21tYW5kcy5zZXROb2RlU2VsZWN0aW9uKGRhdGEucG9zKTtcbiAgICB9XG4gIH1cblxuICBhZGRCbG9jayhldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGVkID0gdGhpcy5lZGl0b3IoKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ob3ZlcmVkRGF0YSgpIHx8IHRoaXMubGFzdFZhbGlkRGF0YTtcbiAgICBpZiAoIWVkIHx8ICFkYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBwb3MsIG5vZGUgfSA9IGRhdGE7XG4gICAgaWYgKG5vZGUuY29udGVudC5zaXplID09PSAwKSB7XG4gICAgICBlZC5jaGFpbigpXG4gICAgICAgIC5mb2N1cygpXG4gICAgICAgIC5zZXRUZXh0U2VsZWN0aW9uKHBvcyArIDEpXG4gICAgICAgIC5pbnNlcnRDb250ZW50KFwiL1wiKVxuICAgICAgICAucnVuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5leHRQb3MgPSBwb3MgKyBub2RlLm5vZGVTaXplO1xuICAgICAgZWQuY2hhaW4oKVxuICAgICAgICAuZm9jdXMoKVxuICAgICAgICAuaW5zZXJ0Q29udGVudEF0KG5leHRQb3MsIHsgdHlwZTogXCJwYXJhZ3JhcGhcIiwgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IFwiL1wiIH1dIH0pXG4gICAgICAgIC5zZXRUZXh0U2VsZWN0aW9uKG5leHRQb3MgKyAyKVxuICAgICAgICAucnVuKCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0ludGVyYWN0aW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5oaWRlVGlwcHkoKTtcbiAgfVxuXG4gIG9uRHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBjb25zdCBlZCA9IHRoaXMuZWRpdG9yKCk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuaG92ZXJlZERhdGEoKSB8fCB0aGlzLmxhc3RWYWxpZERhdGE7XG4gICAgaWYgKCFlZCB8fCAhZGF0YSB8fCAhZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBlbGVtZW50LCBwb3MgfSA9IGRhdGE7XG4gICAgY29uc3QgdmlldyA9IGVkLnZpZXc7XG5cbiAgICAvLyAxLiBTZWxlY3QgdGhlIGdyYWJiZWQgYmxvY2ssIHVubGVzcyBpdCBiZWxvbmdzIHRvIGEgbXVsdGktYmxvY2sgc2VsZWN0aW9uIHRoYXQgaXMgZHJhZ2dlZCBhcyBhIHdob2xlXG4gICAgdmlldy5mb2N1cygpO1xuICAgIGlmICghYXRlTXVsdGlCbG9ja1NlbGVjdGlvbihlZC5zdGF0ZSwgcG9zKSkge1xuICAgICAgZWQuY29tbWFuZHMuc2V0Tm9kZVNlbGVjdGlvbihwb3MpO1xuICAgIH1cblxuICAgIC8vIDIuIEJyb3dzZXIgRHJhZyBJbWFnZSAmIG1ldGFkYXRhXG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShlbGVtZW50LCAwLCAxMCk7XG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBcIm1vdmVcIjtcbiAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShBVEVfQkxPQ0tfRFJBR19NSU1FLCBcIjFcIik7XG5cbiAgICAvLyAzLiBEaXNwYXRjaCB2aXJ0dWFsIGRyYWdzdGFydCwgaGFuZGxlZCBieSB0aGUgYmxvY2sgZHJhZyBwbHVnaW4gb2YgQXRlQmxvY2tDb250cm9sc0V4dGVuc2lvblxuICAgIGNvbnN0IHBtRXZlbnQgPSBuZXcgRHJhZ0V2ZW50KFwiZHJhZ3N0YXJ0XCIsIHtcbiAgICAgIGRhdGFUcmFuc2ZlcjogZXZlbnQuZGF0YVRyYW5zZmVyLFxuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KHBtRXZlbnQpO1xuXG4gICAgLy8gNC4gQ2xlYW51cCBVSVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oaWRlVGlwcHkoKTtcbiAgICAgIHRoaXMuaXNJbnRlcmFjdGluZy5zZXQoZmFsc2UpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgb25EcmFnRW5kKCkge1xuICAgIGNvbnN0IGVkID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoIWVkLmlzRGVzdHJveWVkKSB7XG4gICAgICBlbmRBdGVCbG9ja0RyYWcoZWQudmlldyk7XG4gICAgfVxuICAgIHRoaXMuaXNJbnRlcmFjdGluZy5zZXQoZmFsc2UpO1xuICB9XG59XG4iXX0=
|
|
@@ -223,12 +223,10 @@ export class AteSlashCommandsComponent {
|
|
|
223
223
|
// Hide menu immediately
|
|
224
224
|
this.hideTippy();
|
|
225
225
|
this.isActive = false;
|
|
226
|
-
// Give focus back to editor and execute command
|
|
227
|
-
//
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
command.command(ed);
|
|
231
|
-
}, 10);
|
|
226
|
+
// Give focus back to editor and execute command right away: ProseMirror updates the DOM synchronously
|
|
227
|
+
// on dispatch, and any delay lets keys typed in the meantime land in the paragraph the "/" was typed in
|
|
228
|
+
ed.commands.focus();
|
|
229
|
+
command.command(ed);
|
|
232
230
|
}
|
|
233
231
|
addKeyboardPlugin(ed) {
|
|
234
232
|
// Add a ProseMirror plugin to intercept keyboard events
|
|
@@ -350,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
350
348
|
</div>
|
|
351
349
|
`, styles: [".slash-commands-menu{background:var(--ate-menu-bg);border:1px solid var(--ate-menu-border);border-radius:var(--ate-menu-border-radius, 12px);box-shadow:var(--ate-menu-shadow);padding:var(--ate-menu-padding);max-height:320px;overflow-y:auto;min-width:280px;outline:none;animation:slashMenuFadeIn .2s cubic-bezier(0,0,.2,1);scrollbar-width:thin;scrollbar-color:var(--ate-scrollbar-thumb) var(--ate-scrollbar-track)}.slash-commands-menu::-webkit-scrollbar{width:var(--ate-scrollbar-width)}.slash-commands-menu::-webkit-scrollbar-track{background:var(--ate-scrollbar-track)}.slash-commands-menu::-webkit-scrollbar-thumb{background:var(--ate-scrollbar-thumb);border:3px solid transparent;background-clip:content-box;border-radius:10px}.slash-commands-menu::-webkit-scrollbar-thumb:hover{background:var(--ate-scrollbar-thumb-hover);background-clip:content-box}@keyframes slashMenuFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.slash-command-item{display:flex;align-items:center;gap:12px;padding:var(--ate-menu-padding);border-radius:var(--ate-menu-border-radius, 8px);cursor:pointer;transition:all .15s ease;border:var(--ate-border-width, 1px) solid transparent;outline:none;margin-bottom:2px}.slash-command-item:last-child{margin-bottom:0}.slash-command-item:hover{background:var(--ate-surface-secondary)}.slash-command-item.selected{background:var(--ate-primary-light);border-color:var(--ate-primary-light-alpha)}.slash-command-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:var(--ate-surface-tertiary);border-radius:var(--ate-sub-border-radius, 8px);color:var(--ate-primary);flex-shrink:0;transition:all .15s ease}.slash-command-item.selected .slash-command-icon{background:var(--ate-primary);color:var(--ate-primary-contrast, #ffffff)}.slash-command-icon .ate-icon{font-size:18px}.slash-command-content{flex:1;min-width:0}.slash-command-title{font-weight:500;color:var(--ate-text);font-size:14px;margin-bottom:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.slash-command-description{color:var(--ate-text-secondary);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
352
350
|
}], ctorParameters: () => [] });
|
|
353
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLXNsYXNoLWNvbW1hbmRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvc2xhc2gtY29tbWFuZHMvYXRlLXNsYXNoLWNvbW1hbmRzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLHVCQUF1QixHQUV4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssRUFBRSxFQUE2QixNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFjLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFFNUQsNkZBQTZGO0FBbUo3RixNQUFNLE9BQU8seUJBQXlCO0lBbURwQztRQWxEUyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ2xDLFdBQU0sR0FBRyxLQUFLLENBQXFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlELFlBQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUE2QixTQUFTLENBQUMsQ0FBQztRQUU1RCxr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Q0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1NBQ3BELENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0FsV1UseUJBQXlCO21HQUF6Qix5QkFBeUIsbWNBNUkxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JULHV0RUFyQlMsZ0JBQWdCOzs0RkErSWYseUJBQXlCO2tCQWpKckMsU0FBUzsrQkFDRSxvQkFBb0IsV0FDckIsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUNmLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgdmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIGVmZmVjdCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQWZ0ZXJWaWV3SW5pdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB0aXBweSwgeyBJbnN0YW5jZSBhcyBUaXBweUluc3RhbmNlLCBzdGlja3kgfSBmcm9tIFwidGlwcHkuanNcIjtcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcbmltcG9ydCB7IEF0ZUVkaXRvckkxOG4gfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWVkaXRvci1pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IEF0ZUVkaXRvckNvbW1hbmRzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtZWRpdG9yLWNvbW1hbmRzLnNlcnZpY2VcIjtcbmltcG9ydCB7IGNyZWF0ZURlZmF1bHRTbGFzaENvbW1hbmRzIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hdGUtc2xhc2gtY29tbWFuZHMuY29uZmlnXCI7XG5pbXBvcnQgeyBBdGVTbGFzaENvbW1hbmRJdGVtLCBBdGVDdXN0b21TbGFzaENvbW1hbmRzIH0gZnJvbSBcIi4uLy4uL21vZGVscy9hdGUtc2xhc2gtY29tbWFuZC5tb2RlbFwiO1xuaW1wb3J0IHsgUGx1Z2luLCBQbHVnaW5LZXkgfSBmcm9tIFwiQHRpcHRhcC9wbS9zdGF0ZVwiO1xuaW1wb3J0IHsgRWRpdG9yVmlldywgRGVjb3JhdGlvbiwgRGVjb3JhdGlvblNldCB9IGZyb20gXCJAdGlwdGFwL3BtL3ZpZXdcIjtcbmltcG9ydCB7IEF0ZUljb25Db21wb25lbnQgfSBmcm9tIFwiLi4vdWkvYXRlLWljb24uY29tcG9uZW50XCI7XG5cbi8vIERlZmF1bHQgY29tbWFuZCBkZWZpbml0aW9ucyBhcmUgbm93IGNlbnRyYWxpemVkIGluIHNyYy9saWIvY29uZmlnL3NsYXNoLWNvbW1hbmRzLmNvbmZpZy50c1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXRlLXNsYXNoLWNvbW1hbmRzXCIsXG4gIGltcG9ydHM6IFtBdGVJY29uQ29tcG9uZW50XSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiAjbWVudVJlZiBjbGFzcz1cInNsYXNoLWNvbW1hbmRzLW1lbnVcIj5cbiAgICAgIEBmb3IgKGNvbW1hbmQgb2YgZmlsdGVyZWRDb21tYW5kcygpOyB0cmFjayBjb21tYW5kLnRpdGxlKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInNsYXNoLWNvbW1hbmQtaXRlbVwiXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIiRpbmRleCA9PT0gc2VsZWN0ZWRJbmRleCgpXCJcbiAgICAgICAgICAobW91c2Vkb3duKT1cImV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4LnNldCgkaW5kZXgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNsYXNoLWNvbW1hbmQtaWNvblwiPlxuICAgICAgICAgICAgPGF0ZS1pY29uIFtuYW1lXT1cImNvbW1hbmQuaWNvblwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNsYXNoLWNvbW1hbmQtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNsYXNoLWNvbW1hbmQtdGl0bGVcIj57eyBjb21tYW5kLnRpdGxlIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xhc2gtY29tbWFuZC1kZXNjcmlwdGlvblwiPnt7IGNvbW1hbmQuZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5zbGFzaC1jb21tYW5kcy1tZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLW1lbnUtYmcpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdGUtbWVudS1ib3JkZXIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtbWVudS1ib3JkZXItcmFkaXVzLCAxMnB4KTtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tYXRlLW1lbnUtc2hhZG93KTtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tYXRlLW1lbnUtcGFkZGluZyk7XG4gICAgICAgIG1heC1oZWlnaHQ6IDMyMHB4O1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICBtaW4td2lkdGg6IDI4MHB4O1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBhbmltYXRpb246IHNsYXNoTWVudUZhZGVJbiAwLjJzIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xuICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgICAgIHNjcm9sbGJhci1jb2xvcjogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYikgdmFyKC0tYXRlLXNjcm9sbGJhci10cmFjayk7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kcy1tZW51Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgIHdpZHRoOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXdpZHRoKTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmRzLW1lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXNjcm9sbGJhci10cmFjayk7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kcy1tZW51Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1zY3JvbGxiYXItdGh1bWIpO1xuICAgICAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmRzLW1lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYi1ob3Zlcik7XG4gICAgICAgIGJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3g7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgc2xhc2hNZW51RmFkZUluIHtcbiAgICAgICAgZnJvbSB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTtcbiAgICAgICAgfVxuICAgICAgICB0byB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtaXRlbSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tYXRlLW1lbnUtcGFkZGluZyk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1tZW51LWJvcmRlci1yYWRpdXMsIDhweCk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgICAgIGJvcmRlcjogdmFyKC0tYXRlLWJvcmRlci13aWR0aCwgMXB4KSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pdGVtOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pdGVtOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5KTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtaXRlbS5zZWxlY3RlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0KTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeS1saWdodC1hbHBoYSk7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kLWljb24ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2UtdGVydGlhcnkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtc3ViLWJvcmRlci1yYWRpdXMsIDhweCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtaXRlbS5zZWxlY3RlZCAuc2xhc2gtY29tbWFuZC1pY29uIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXByaW1hcnktY29udHJhc3QsICNmZmZmZmYpO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pY29uIC5hdGUtaWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtY29udGVudCB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtdGl0bGUge1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXRleHQpO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDFweDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kLWRlc2NyaXB0aW9uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS10ZXh0LXNlY29uZGFyeSk7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQXRlU2xhc2hDb21tYW5kc0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IGkxOG5TZXJ2aWNlID0gaW5qZWN0KEF0ZUVkaXRvckkxOG4pO1xuICBlZGl0b3IgPSBpbnB1dC5yZXF1aXJlZDxFZGl0b3I+KCk7XG4gIGNvbmZpZyA9IGlucHV0PEF0ZUN1c3RvbVNsYXNoQ29tbWFuZHMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgbWVudVJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oXCJtZW51UmVmXCIpO1xuXG4gIHByaXZhdGUgdGlwcHlJbnN0YW5jZTogVGlwcHlJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGVkaXRvckNvbW1hbmRzID0gaW5qZWN0KEF0ZUVkaXRvckNvbW1hbmRzU2VydmljZSk7XG5cbiAgLy8gTG9jYWwgc3RhdGVcbiAgcHJpdmF0ZSBpc0FjdGl2ZSA9IGZhbHNlO1xuICBwcml2YXRlIGN1cnJlbnRRdWVyeSA9IHNpZ25hbChcIlwiKTtcbiAgcHJpdmF0ZSBzbGFzaFJhbmdlOiB7IGZyb206IG51bWJlcjsgdG86IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gU2lnbmFsIGZvciBzZWxlY3RlZCBpbmRleFxuICBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuXG4gIC8vIFRvb2xiYXIgaW50ZXJhY3Rpb24gc3RhdGUgKGZyb20gY2VudHJhbGl6ZWQgc2VydmljZSlcbiAgcHJpdmF0ZSByZWFkb25seSBpc1Rvb2xiYXJJbnRlcmFjdGluZyA9IHRoaXMuZWRpdG9yQ29tbWFuZHMuaXNUb29sYmFySW50ZXJhY3Rpbmc7XG5cbiAgZmlsdGVyUGxhY2Vob2xkZXJUZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmkxOG5TZXJ2aWNlLnNsYXNoQ29tbWFuZHMoKS5maWx0ZXJQbGFjZWhvbGRlciB8fCBcIkZpbHRlci4uLlwiO1xuICB9KTtcblxuICBjb21tYW5kcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgIGlmIChjb25maWcgJiYgY29uZmlnLmNvbW1hbmRzKSB7XG4gICAgICByZXR1cm4gY29uZmlnLmNvbW1hbmRzO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIGRlZmF1bHQgbmF0aXZlIGNvbW1hbmRzXG4gICAgcmV0dXJuIGNyZWF0ZURlZmF1bHRTbGFzaENvbW1hbmRzKHRoaXMuaTE4blNlcnZpY2UsIHRoaXMuZWRpdG9yQ29tbWFuZHMpO1xuICB9KTtcblxuICBmaWx0ZXJlZENvbW1hbmRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnkoKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGNvbW1hbmRzID0gdGhpcy5jb21tYW5kcygpO1xuXG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgcmV0dXJuIGNvbW1hbmRzO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kcy5maWx0ZXIoXG4gICAgICBjb21tYW5kID0+XG4gICAgICAgIGNvbW1hbmQudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkgfHxcbiAgICAgICAgY29tbWFuZC5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fFxuICAgICAgICBjb21tYW5kLmtleXdvcmRzLnNvbWUoa2V5d29yZCA9PiBrZXl3b3JkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpKVxuICAgICk7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgZWQgPSB0aGlzLmVkaXRvcigpO1xuICAgICAgICBpZiAoIWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgb2xkIGxpc3RlbmVyc1xuICAgICAgICBlZC5vZmYoXCJzZWxlY3Rpb25VcGRhdGVcIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgICAgZWQub2ZmKFwidHJhbnNhY3Rpb25cIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgICAgZWQub2ZmKFwiZm9jdXNcIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgICAgZWQub2ZmKFwiYmx1clwiLCB0aGlzLmhhbmRsZUJsdXIpO1xuXG4gICAgICAgIC8vIEFkZCBuZXcgbGlzdGVuZXJzXG4gICAgICAgIGVkLm9uKFwic2VsZWN0aW9uVXBkYXRlXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICAgIGVkLm9uKFwidHJhbnNhY3Rpb25cIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgICAgZWQub24oXCJmb2N1c1wiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgICBlZC5vbihcImJsdXJcIiwgdGhpcy5oYW5kbGVCbHVyKTtcblxuICAgICAgICAvLyBVc2UgUHJvc2VNaXJyb3IgcGx1Z2luIHN5c3RlbSB0byBpbnRlcmNlcHQga2V5c1xuICAgICAgICB0aGlzLmFkZEtleWJvYXJkUGx1Z2luKGVkKTtcblxuICAgICAgICAvLyB1cGRhdGVNZW51KCkgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIGVkaXRvciBpcyByZWFkeVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5pbml0VGlwcHkoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNvbnN0IGVkID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoZWQpIHtcbiAgICAgIGVkLm9mZihcInNlbGVjdGlvblVwZGF0ZVwiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgZWQub2ZmKFwidHJhbnNhY3Rpb25cIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgIGVkLm9mZihcImZvY3VzXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICBlZC5vZmYoXCJibHVyXCIsIHRoaXMuaGFuZGxlQmx1cik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGlwcHlJbnN0YW5jZSkge1xuICAgICAgdGhpcy50aXBweUluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0VGlwcHkoKSB7XG4gICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMubWVudVJlZigpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFuYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGlwcHlJbnN0YW5jZSkge1xuICAgICAgdGhpcy50aXBweUluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpcHB5SW5zdGFuY2UgPSB0aXBweShkb2N1bWVudC5ib2R5LCB7XG4gICAgICBjb250ZW50OiBuYXRpdmVFbGVtZW50LFxuICAgICAgdHJpZ2dlcjogXCJtYW51YWxcIixcbiAgICAgIHBsYWNlbWVudDogXCJib3R0b20tc3RhcnRcIixcbiAgICAgIHRoZW1lOiBcInNsYXNoLW1lbnVcIixcbiAgICAgIGFwcGVuZFRvOiBfcmVmID0+IHtcbiAgICAgICAgLy8gQWx3YXlzIHRyeSB0byBjbGltYiB1cCB0byBlZGl0b3IgaG9zdCB0byBpbmhlcml0IENTUyB2YXJpYWJsZXNcbiAgICAgICAgY29uc3QgaG9zdCA9ICh0aGlzLmVkaXRvcigpLm9wdGlvbnMuZWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcbiAgICAgICAgICBcImFuZ3VsYXItdGlwdGFwLWVkaXRvclwiXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBob3N0IHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICB9LFxuICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICBhcnJvdzogZmFsc2UsXG4gICAgICBvZmZzZXQ6IFswLCA4XSxcbiAgICAgIGhpZGVPbkNsaWNrOiB0cnVlLFxuICAgICAgcGx1Z2luczogW3N0aWNreV0sXG4gICAgICBzdGlja3k6IGZhbHNlLFxuICAgICAgZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdDogKCkgPT4gdGhpcy5nZXRTbGFzaFJlY3QoKSxcbiAgICAgIC8vIEltcHJvdmUgcG9zaXRpb25pbmcgd2l0aCBzY3JvbGxcbiAgICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJwcmV2ZW50T3ZlcmZsb3dcIixcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgYm91bmRhcnk6ICh0aGlzLmVkaXRvcigpLm9wdGlvbnMuZWxlbWVudCBhcyBIVE1MRWxlbWVudCkgfHwgZG9jdW1lbnQuYm9keSxcbiAgICAgICAgICAgICAgcGFkZGluZzogOCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImZsaXBcIixcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBbXCJ0b3Atc3RhcnRcIiwgXCJib3R0b20tZW5kXCIsIFwidG9wLWVuZFwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImhpZGVcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWwgY2hlY2sgYWZ0ZXIgVGlwcHkgaXMgaW5pdGlhbGl6ZWRcbiAgICB0aGlzLnVwZGF0ZU1lbnUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2xhc2hSZWN0KCk6IERPTVJlY3Qge1xuICAgIGNvbnN0IGVkID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoIWVkIHx8ICF0aGlzLnNsYXNoUmFuZ2UpIHtcbiAgICAgIHJldHVybiBuZXcgRE9NUmVjdCgtOTk5OSwgLTk5OTksIDAsIDApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgUHJvc2VNaXJyb3IgY29vcmRpbmF0ZXMgZm9yIGJldHRlciBwcmVjaXNpb25cbiAgICAgIGNvbnN0IGNvb3JkcyA9IGVkLnZpZXcuY29vcmRzQXRQb3ModGhpcy5zbGFzaFJhbmdlLmZyb20pO1xuICAgICAgcmV0dXJuIG5ldyBET01SZWN0KGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wLCAwLCBjb29yZHMuYm90dG9tIC0gY29vcmRzLnRvcCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkVycm9yIGNhbGN1bGF0aW5nIGNvb3JkaW5hdGVzOlwiLCBlcnJvcik7XG4gICAgICAvLyBGYWxsYmFjayB0byB3aW5kb3cuZ2V0U2VsZWN0aW9uXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93LmdldFNlbGVjdGlvbigpIDogbnVsbDtcbiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgRE9NUmVjdCgtOTk5OSwgLTk5OTksIDAsIDApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIHJldHVybiByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVNZW51ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVkID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoIWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBmcm9tIH0gPSBlZC5zdGF0ZS5zZWxlY3Rpb247XG5cbiAgICAvLyBDaGVjayBpZiAnLycgd2FzIHR5cGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIG9yIGFmdGVyIGEgc3BhY2VcbiAgICBjb25zdCB0ZXh0QmVmb3JlID0gZWQuc3RhdGUuZG9jLnRleHRCZXR3ZWVuKE1hdGgubWF4KDAsIGZyb20gLSAyMCksIGZyb20sIFwiXFxuXCIpO1xuICAgIGNvbnN0IHNsYXNoTWF0Y2ggPSB0ZXh0QmVmb3JlLm1hdGNoKC8oPzpefFxccylcXC8oW14vXFxzXSopJC8pO1xuXG4gICAgaWYgKHNsYXNoTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gc2xhc2hNYXRjaFsxXSB8fCBcIlwiO1xuICAgICAgY29uc3Qgd2FzQWN0aXZlID0gdGhpcy5pc0FjdGl2ZTtcblxuICAgICAgdGhpcy5jdXJyZW50UXVlcnkuc2V0KHF1ZXJ5KTtcbiAgICAgIHRoaXMuc2xhc2hSYW5nZSA9IHtcbiAgICAgICAgZnJvbTogZnJvbSAtIHNsYXNoTWF0Y2hbMF0ubGVuZ3RoICsgc2xhc2hNYXRjaFswXS5pbmRleE9mKFwiL1wiKSxcbiAgICAgICAgdG86IGZyb20sXG4gICAgICB9O1xuXG4gICAgICAvLyBSZXNldCBpbmRleCBpZiBtZW51IGp1c3QgYmVjYW1lIGFjdGl2ZVxuICAgICAgaWYgKCF3YXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LnNldCgwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICAgIGlmICh0aGlzLmlzVG9vbGJhckludGVyYWN0aW5nKCkpIHtcbiAgICAgICAgdGhpcy5oaWRlVGlwcHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd1RpcHB5KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZVRpcHB5KCk7XG4gICAgfVxuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmhpZGVUaXBweSgpLCAxMDApO1xuICB9O1xuXG4gIHByaXZhdGUgc2Nyb2xsVG9TZWxlY3RlZCgpIHtcbiAgICAvLyBTY3JvbGwgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRcbiAgICBjb25zdCBtZW51RWwgPSB0aGlzLm1lbnVSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAobWVudUVsKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBtZW51RWwucXVlcnlTZWxlY3RvcihcIi5zbGFzaC1jb21tYW5kLWl0ZW0uc2VsZWN0ZWRcIikgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgIHNlbGVjdGVkSXRlbS5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiBcIm5lYXJlc3RcIiwgYmVoYXZpb3I6IFwic21vb3RoXCIgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93VGlwcHkoKSB7XG4gICAgaWYgKHRoaXMudGlwcHlJbnN0YW5jZSAmJiB0aGlzLmZpbHRlcmVkQ29tbWFuZHMoKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2Uuc2V0UHJvcHMoeyBzdGlja3k6IFwicmVmZXJlbmNlXCIgfSk7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2Uuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGlkZVRpcHB5KCkge1xuICAgIGlmICh0aGlzLnRpcHB5SW5zdGFuY2UpIHtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5zZXRQcm9wcyh7IHN0aWNreTogZmFsc2UgfSk7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2UuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQ6IEF0ZVNsYXNoQ29tbWFuZEl0ZW0pIHtcbiAgICBjb25zdCBlZCA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKCFlZCB8fCAhdGhpcy5zbGFzaFJhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHNsYXNoIHRleHQgKFwiL1wiKVxuICAgIGNvbnN0IHsgdHIgfSA9IGVkLnN0YXRlO1xuICAgIHRyLmRlbGV0ZSh0aGlzLnNsYXNoUmFuZ2UuZnJvbSwgdGhpcy5zbGFzaFJhbmdlLnRvKTtcbiAgICBlZC52aWV3LmRpc3BhdGNoKHRyKTtcblxuICAgIC8vIEhpZGUgbWVudSBpbW1lZGlhdGVseVxuICAgIHRoaXMuaGlkZVRpcHB5KCk7XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLy8gR2l2ZSBmb2N1cyBiYWNrIHRvIGVkaXRvciBhbmQgZXhlY3V0ZSBjb21tYW5kXG4gICAgLy8gVXNlIGEgbWljcm8tZGVsYXkgdG8gZW5zdXJlIFByb3NlTWlycm9yIERPTSBpcyBzdGFibGUgYWZ0ZXIgcmVtb3ZpbmcgXCIvXCJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGVkLmNvbW1hbmRzLmZvY3VzKCk7XG4gICAgICBjb21tYW5kLmNvbW1hbmQoZWQpO1xuICAgIH0sIDEwKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkS2V5Ym9hcmRQbHVnaW4oZWQ6IEVkaXRvcikge1xuICAgIC8vIEFkZCBhIFByb3NlTWlycm9yIHBsdWdpbiB0byBpbnRlcmNlcHQga2V5Ym9hcmQgZXZlbnRzXG4gICAgY29uc3Qga2V5Ym9hcmRQbHVnaW4gPSBuZXcgUGx1Z2luKHtcbiAgICAgIGtleTogbmV3IFBsdWdpbktleShcInNsYXNoLWNvbW1hbmRzLWtleWJvYXJkXCIpLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgZGVjb3JhdGlvbnM6IHN0YXRlID0+IHtcbiAgICAgICAgICBjb25zdCB7IGZyb20gfSA9IHN0YXRlLnNlbGVjdGlvbjtcbiAgICAgICAgICBjb25zdCB0ZXh0QmVmb3JlID0gc3RhdGUuZG9jLnRleHRCZXR3ZWVuKE1hdGgubWF4KDAsIGZyb20gLSAyMCksIGZyb20sIFwiXFxuXCIpO1xuICAgICAgICAgIGNvbnN0IHNsYXNoTWF0Y2ggPSB0ZXh0QmVmb3JlLm1hdGNoKC8oPzpefFxccylcXC8oW14vXFxzXSopJC8pO1xuXG4gICAgICAgICAgaWYgKCFzbGFzaE1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gRGVjb3JhdGlvblNldC5lbXB0eTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzbGFzaFBvcyA9IGZyb20gLSBzbGFzaE1hdGNoWzBdLmxlbmd0aCArIHNsYXNoTWF0Y2hbMF0uaW5kZXhPZihcIi9cIik7XG4gICAgICAgICAgY29uc3QgcXVlcnkgPSBzbGFzaE1hdGNoWzFdIHx8IFwiXCI7XG4gICAgICAgICAgY29uc3QgaXNFbXB0eSA9ICFxdWVyeTtcbiAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9IHRoaXMuZmlsdGVyUGxhY2Vob2xkZXJUZXh0KCk7XG4gICAgICAgICAgY29uc3QgZGVjb3JhdGlvbklkID0gYGlkXyR7c2xhc2hQb3N9XyR7ZnJvbX1gO1xuXG4gICAgICAgICAgcmV0dXJuIERlY29yYXRpb25TZXQuY3JlYXRlKHN0YXRlLmRvYywgW1xuICAgICAgICAgICAgRGVjb3JhdGlvbi5pbmxpbmUoc2xhc2hQb3MsIGZyb20sIHtcbiAgICAgICAgICAgICAgXCJkYXRhLWRlY29yYXRpb24taWRcIjogZGVjb3JhdGlvbklkLFxuICAgICAgICAgICAgICBcImRhdGEtZGVjb3JhdGlvbi1jb250ZW50XCI6IHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICBjbGFzczogYGF0ZS1zbGFzaC1kZWNvcmF0aW9uICR7aXNFbXB0eSA/IFwiaXMtZW1wdHlcIiA6IFwiXCJ9YCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVLZXlEb3duOiAodmlldzogRWRpdG9yVmlldywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBPbmx5IGhhbmRsZSBpZiBtZW51IGlzIGFjdGl2ZVxuICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSB8fCB0aGlzLmZpbHRlcmVkQ29tbWFuZHMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSBcIkFycm93RG93blwiOiB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXgoKSArIDEpICUgdGhpcy5maWx0ZXJlZENvbW1hbmRzKCkubGVuZ3RoO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KG5leHRJbmRleCk7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3RlZCgpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJBcnJvd1VwXCI6IHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgY29uc3QgcHJldkluZGV4ID1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXgoKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmZpbHRlcmVkQ29tbWFuZHMoKS5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJbmRleCgpIC0gMTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LnNldChwcmV2SW5kZXgpO1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiRW50ZXJcIjoge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvbW1hbmQgPSB0aGlzLmZpbHRlcmVkQ29tbWFuZHMoKVt0aGlzLnNlbGVjdGVkSW5kZXgoKV07XG4gICAgICAgICAgICAgIGlmIChzZWxlY3RlZENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVDb21tYW5kKHNlbGVjdGVkQ29tbWFuZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiRXNjYXBlXCI6IHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmhpZGVUaXBweSgpO1xuICAgICAgICAgICAgICAvLyBSZW1vdmUgdHlwZWQgXCIvXCJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2xhc2hSYW5nZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdHIgfSA9IHZpZXcuc3RhdGU7XG4gICAgICAgICAgICAgICAgdHIuZGVsZXRlKHRoaXMuc2xhc2hSYW5nZS5mcm9tLCB0aGlzLnNsYXNoUmFuZ2UudG8pO1xuICAgICAgICAgICAgICAgIHZpZXcuZGlzcGF0Y2godHIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgcGx1Z2luIHRvIGVkaXRvclxuICAgIGVkLnZpZXcudXBkYXRlU3RhdGUoXG4gICAgICBlZC52aWV3LnN0YXRlLnJlY29uZmlndXJlKHtcbiAgICAgICAgcGx1Z2luczogW2tleWJvYXJkUGx1Z2luLCAuLi5lZC52aWV3LnN0YXRlLnBsdWdpbnNdLFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLXNsYXNoLWNvbW1hbmRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvc2xhc2gtY29tbWFuZHMvYXRlLXNsYXNoLWNvbW1hbmRzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLHVCQUF1QixHQUV4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssRUFBRSxFQUE2QixNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFjLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFFNUQsNkZBQTZGO0FBbUo3RixNQUFNLE9BQU8seUJBQXlCO0lBbURwQztRQWxEUyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ2xDLFdBQU0sR0FBRyxLQUFLLENBQXFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlELFlBQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUE2QixTQUFTLENBQUMsQ0FBQztRQUU1RCxr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OytHQWhXVSx5QkFBeUI7bUdBQXpCLHlCQUF5QixtY0E1STFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQsdXRFQXJCUyxnQkFBZ0I7OzRGQStJZix5QkFBeUI7a0JBakpyQyxTQUFTOytCQUNFLG9CQUFvQixXQUNyQixDQUFDLGdCQUFnQixDQUFDLGNBQ2YsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICB2aWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgZWZmZWN0LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHRpcHB5LCB7IEluc3RhbmNlIGFzIFRpcHB5SW5zdGFuY2UsIHN0aWNreSB9IGZyb20gXCJ0aXBweS5qc1wiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9ySTE4biB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdGUtZWRpdG9yLWkxOG4uc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yQ29tbWFuZHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1lZGl0b3ItY29tbWFuZHMuc2VydmljZVwiO1xuaW1wb3J0IHsgY3JlYXRlRGVmYXVsdFNsYXNoQ29tbWFuZHMgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F0ZS1zbGFzaC1jb21tYW5kcy5jb25maWdcIjtcbmltcG9ydCB7IEF0ZVNsYXNoQ29tbWFuZEl0ZW0sIEF0ZUN1c3RvbVNsYXNoQ29tbWFuZHMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1zbGFzaC1jb21tYW5kLm1vZGVsXCI7XG5pbXBvcnQgeyBQbHVnaW4sIFBsdWdpbktleSB9IGZyb20gXCJAdGlwdGFwL3BtL3N0YXRlXCI7XG5pbXBvcnQgeyBFZGl0b3JWaWV3LCBEZWNvcmF0aW9uLCBEZWNvcmF0aW9uU2V0IH0gZnJvbSBcIkB0aXB0YXAvcG0vdmlld1wiO1xuaW1wb3J0IHsgQXRlSWNvbkNvbXBvbmVudCB9IGZyb20gXCIuLi91aS9hdGUtaWNvbi5jb21wb25lbnRcIjtcblxuLy8gRGVmYXVsdCBjb21tYW5kIGRlZmluaXRpb25zIGFyZSBub3cgY2VudHJhbGl6ZWQgaW4gc3JjL2xpYi9jb25maWcvc2xhc2gtY29tbWFuZHMuY29uZmlnLnRzXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhdGUtc2xhc2gtY29tbWFuZHNcIixcbiAgaW1wb3J0czogW0F0ZUljb25Db21wb25lbnRdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICNtZW51UmVmIGNsYXNzPVwic2xhc2gtY29tbWFuZHMtbWVudVwiPlxuICAgICAgQGZvciAoY29tbWFuZCBvZiBmaWx0ZXJlZENvbW1hbmRzKCk7IHRyYWNrIGNvbW1hbmQudGl0bGUpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2xhc2gtY29tbWFuZC1pdGVtXCJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiJGluZGV4ID09PSBzZWxlY3RlZEluZGV4KClcIlxuICAgICAgICAgIChtb3VzZWRvd24pPVwiZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXguc2V0KCRpbmRleClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xhc2gtY29tbWFuZC1pY29uXCI+XG4gICAgICAgICAgICA8YXRlLWljb24gW25hbWVdPVwiY29tbWFuZC5pY29uXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xhc2gtY29tbWFuZC1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xhc2gtY29tbWFuZC10aXRsZVwiPnt7IGNvbW1hbmQudGl0bGUgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbGFzaC1jb21tYW5kLWRlc2NyaXB0aW9uXCI+e3sgY29tbWFuZC5kZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnNsYXNoLWNvbW1hbmRzLW1lbnUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtbWVudS1iZyk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWF0ZS1tZW51LWJvcmRlcik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1tZW51LWJvcmRlci1yYWRpdXMsIDEycHgpO1xuICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1hdGUtbWVudS1zaGFkb3cpO1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1hdGUtbWVudS1wYWRkaW5nKTtcbiAgICAgICAgbWF4LWhlaWdodDogMzIwcHg7XG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICAgIG1pbi13aWR0aDogMjgwcHg7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIGFuaW1hdGlvbjogc2xhc2hNZW51RmFkZUluIDAuMnMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7XG4gICAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcbiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXRodW1iKSB2YXIoLS1hdGUtc2Nyb2xsYmFyLXRyYWNrKTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmRzLW1lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgd2lkdGg6IHZhcigtLWF0ZS1zY3JvbGxiYXItd2lkdGgpO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZHMtbWVudTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXRyYWNrKTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmRzLW1lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYik7XG4gICAgICAgIGJvcmRlcjogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IGNvbnRlbnQtYm94O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZHMtbWVudTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXRodW1iLWhvdmVyKTtcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBzbGFzaE1lbnVGYWRlSW4ge1xuICAgICAgICBmcm9tIHtcbiAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpO1xuICAgICAgICB9XG4gICAgICAgIHRvIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pdGVtIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1hdGUtbWVudS1wYWRkaW5nKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYXRlLW1lbnUtYm9yZGVyLXJhZGl1cywgOHB4KTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgICAgYm9yZGVyOiB2YXIoLS1hdGUtYm9yZGVyLXdpZHRoLCAxcHgpIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kLWl0ZW06bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kLWl0ZW06aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZS1zZWNvbmRhcnkpO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pdGVtLnNlbGVjdGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnktbGlnaHQpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0LWFscGhhKTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtaWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMzJweDtcbiAgICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtc3VyZmFjZS10ZXJ0aWFyeSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1zdWItYm9yZGVyLXJhZGl1cywgOHB4KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWF0ZS1wcmltYXJ5KTtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pdGVtLnNlbGVjdGVkIC5zbGFzaC1jb21tYW5kLWljb24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeS1jb250cmFzdCwgI2ZmZmZmZik7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kLWljb24gLmF0ZS1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1jb250ZW50IHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC10aXRsZSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGV4dCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMXB4O1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtZGVzY3JpcHRpb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXRleHQtc2Vjb25kYXJ5KTtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBdGVTbGFzaENvbW1hbmRzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgaTE4blNlcnZpY2UgPSBpbmplY3QoQXRlRWRpdG9ySTE4bik7XG4gIGVkaXRvciA9IGlucHV0LnJlcXVpcmVkPEVkaXRvcj4oKTtcbiAgY29uZmlnID0gaW5wdXQ8QXRlQ3VzdG9tU2xhc2hDb21tYW5kcyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBtZW51UmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PihcIm1lbnVSZWZcIik7XG5cbiAgcHJpdmF0ZSB0aXBweUluc3RhbmNlOiBUaXBweUluc3RhbmNlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZWRpdG9yQ29tbWFuZHMgPSBpbmplY3QoQXRlRWRpdG9yQ29tbWFuZHNTZXJ2aWNlKTtcblxuICAvLyBMb2NhbCBzdGF0ZVxuICBwcml2YXRlIGlzQWN0aXZlID0gZmFsc2U7XG4gIHByaXZhdGUgY3VycmVudFF1ZXJ5ID0gc2lnbmFsKFwiXCIpO1xuICBwcml2YXRlIHNsYXNoUmFuZ2U6IHsgZnJvbTogbnVtYmVyOyB0bzogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcblxuICAvLyBTaWduYWwgZm9yIHNlbGVjdGVkIGluZGV4XG4gIHNlbGVjdGVkSW5kZXggPSBzaWduYWwoMCk7XG5cbiAgLy8gVG9vbGJhciBpbnRlcmFjdGlvbiBzdGF0ZSAoZnJvbSBjZW50cmFsaXplZCBzZXJ2aWNlKVxuICBwcml2YXRlIHJlYWRvbmx5IGlzVG9vbGJhckludGVyYWN0aW5nID0gdGhpcy5lZGl0b3JDb21tYW5kcy5pc1Rvb2xiYXJJbnRlcmFjdGluZztcblxuICBmaWx0ZXJQbGFjZWhvbGRlclRleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaTE4blNlcnZpY2Uuc2xhc2hDb21tYW5kcygpLmZpbHRlclBsYWNlaG9sZGVyIHx8IFwiRmlsdGVyLi4uXCI7XG4gIH0pO1xuXG4gIGNvbW1hbmRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcuY29tbWFuZHMpIHtcbiAgICAgIHJldHVybiBjb25maWcuY29tbWFuZHM7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gZGVmYXVsdCBuYXRpdmUgY29tbWFuZHNcbiAgICByZXR1cm4gY3JlYXRlRGVmYXVsdFNsYXNoQ29tbWFuZHModGhpcy5pMThuU2VydmljZSwgdGhpcy5lZGl0b3JDb21tYW5kcyk7XG4gIH0pO1xuXG4gIGZpbHRlcmVkQ29tbWFuZHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmN1cnJlbnRRdWVyeSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgY29tbWFuZHMgPSB0aGlzLmNvbW1hbmRzKCk7XG5cbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICByZXR1cm4gY29tbWFuZHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbW1hbmRzLmZpbHRlcihcbiAgICAgIGNvbW1hbmQgPT5cbiAgICAgICAgY29tbWFuZC50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fFxuICAgICAgICBjb21tYW5kLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpIHx8XG4gICAgICAgIGNvbW1hbmQua2V5d29yZHMuc29tZShrZXl3b3JkID0+IGtleXdvcmQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpXG4gICAgKTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBlZCA9IHRoaXMuZWRpdG9yKCk7XG4gICAgICAgIGlmICghZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGVhbiB1cCBvbGQgbGlzdGVuZXJzXG4gICAgICAgIGVkLm9mZihcInNlbGVjdGlvblVwZGF0ZVwiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgICBlZC5vZmYoXCJ0cmFuc2FjdGlvblwiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgICBlZC5vZmYoXCJmb2N1c1wiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgICBlZC5vZmYoXCJibHVyXCIsIHRoaXMuaGFuZGxlQmx1cik7XG5cbiAgICAgICAgLy8gQWRkIG5ldyBsaXN0ZW5lcnNcbiAgICAgICAgZWQub24oXCJzZWxlY3Rpb25VcGRhdGVcIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgICAgZWQub24oXCJ0cmFuc2FjdGlvblwiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgICBlZC5vbihcImZvY3VzXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICAgIGVkLm9uKFwiYmx1clwiLCB0aGlzLmhhbmRsZUJsdXIpO1xuXG4gICAgICAgIC8vIFVzZSBQcm9zZU1pcnJvciBwbHVnaW4gc3lzdGVtIHRvIGludGVyY2VwdCBrZXlzXG4gICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRQbHVnaW4oZWQpO1xuXG4gICAgICAgIC8vIHVwZGF0ZU1lbnUoKSB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gZWRpdG9yIGlzIHJlYWR5XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmluaXRUaXBweSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY29uc3QgZWQgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmIChlZCkge1xuICAgICAgZWQub2ZmKFwic2VsZWN0aW9uVXBkYXRlXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICBlZC5vZmYoXCJ0cmFuc2FjdGlvblwiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgZWQub2ZmKFwiZm9jdXNcIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgIGVkLm9mZihcImJsdXJcIiwgdGhpcy5oYW5kbGVCbHVyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aXBweUluc3RhbmNlKSB7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgdGhpcy50aXBweUluc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRUaXBweSgpIHtcbiAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5tZW51UmVmKCkubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIW5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aXBweUluc3RhbmNlKSB7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2UuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMudGlwcHlJbnN0YW5jZSA9IHRpcHB5KGRvY3VtZW50LmJvZHksIHtcbiAgICAgIGNvbnRlbnQ6IG5hdGl2ZUVsZW1lbnQsXG4gICAgICB0cmlnZ2VyOiBcIm1hbnVhbFwiLFxuICAgICAgcGxhY2VtZW50OiBcImJvdHRvbS1zdGFydFwiLFxuICAgICAgdGhlbWU6IFwic2xhc2gtbWVudVwiLFxuICAgICAgYXBwZW5kVG86IF9yZWYgPT4ge1xuICAgICAgICAvLyBBbHdheXMgdHJ5IHRvIGNsaW1iIHVwIHRvIGVkaXRvciBob3N0IHRvIGluaGVyaXQgQ1NTIHZhcmlhYmxlc1xuICAgICAgICBjb25zdCBob3N0ID0gKHRoaXMuZWRpdG9yKCkub3B0aW9ucy5lbGVtZW50IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFxuICAgICAgICAgIFwiYW5ndWxhci10aXB0YXAtZWRpdG9yXCJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGhvc3QgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIH0sXG4gICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgIGFycm93OiBmYWxzZSxcbiAgICAgIG9mZnNldDogWzAsIDhdLFxuICAgICAgaGlkZU9uQ2xpY2s6IHRydWUsXG4gICAgICBwbHVnaW5zOiBbc3RpY2t5XSxcbiAgICAgIHN0aWNreTogZmFsc2UsXG4gICAgICBnZXRSZWZlcmVuY2VDbGllbnRSZWN0OiAoKSA9PiB0aGlzLmdldFNsYXNoUmVjdCgpLFxuICAgICAgLy8gSW1wcm92ZSBwb3NpdGlvbmluZyB3aXRoIHNjcm9sbFxuICAgICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInByZXZlbnRPdmVyZmxvd1wiLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBib3VuZGFyeTogKHRoaXMuZWRpdG9yKCkub3B0aW9ucy5lbGVtZW50IGFzIEhUTUxFbGVtZW50KSB8fCBkb2N1bWVudC5ib2R5LFxuICAgICAgICAgICAgICBwYWRkaW5nOiA4LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZmxpcFwiLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IFtcInRvcC1zdGFydFwiLCBcImJvdHRvbS1lbmRcIiwgXCJ0b3AtZW5kXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiaGlkZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbCBjaGVjayBhZnRlciBUaXBweSBpcyBpbml0aWFsaXplZFxuICAgIHRoaXMudXBkYXRlTWVudSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTbGFzaFJlY3QoKTogRE9NUmVjdCB7XG4gICAgY29uc3QgZWQgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmICghZWQgfHwgIXRoaXMuc2xhc2hSYW5nZSkge1xuICAgICAgcmV0dXJuIG5ldyBET01SZWN0KC05OTk5LCAtOTk5OSwgMCwgMCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBQcm9zZU1pcnJvciBjb29yZGluYXRlcyBmb3IgYmV0dGVyIHByZWNpc2lvblxuICAgICAgY29uc3QgY29vcmRzID0gZWQudmlldy5jb29yZHNBdFBvcyh0aGlzLnNsYXNoUmFuZ2UuZnJvbSk7XG4gICAgICByZXR1cm4gbmV3IERPTVJlY3QoY29vcmRzLmxlZnQsIGNvb3Jkcy50b3AsIDAsIGNvb3Jkcy5ib3R0b20gLSBjb29yZHMudG9wKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKFwiRXJyb3IgY2FsY3VsYXRpbmcgY29vcmRpbmF0ZXM6XCIsIGVycm9yKTtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHdpbmRvdy5nZXRTZWxlY3Rpb25cbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkgOiBudWxsO1xuICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBET01SZWN0KC05OTk5LCAtOTk5OSwgMCwgMCk7XG4gICAgICB9XG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgICAgcmV0dXJuIHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU1lbnUgPSAoKSA9PiB7XG4gICAgY29uc3QgZWQgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmICghZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGZyb20gfSA9IGVkLnN0YXRlLnNlbGVjdGlvbjtcblxuICAgIC8vIENoZWNrIGlmICcvJyB3YXMgdHlwZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgb3IgYWZ0ZXIgYSBzcGFjZVxuICAgIGNvbnN0IHRleHRCZWZvcmUgPSBlZC5zdGF0ZS5kb2MudGV4dEJldHdlZW4oTWF0aC5tYXgoMCwgZnJvbSAtIDIwKSwgZnJvbSwgXCJcXG5cIik7XG4gICAgY29uc3Qgc2xhc2hNYXRjaCA9IHRleHRCZWZvcmUubWF0Y2goLyg/Ol58XFxzKVxcLyhbXi9cXHNdKikkLyk7XG5cbiAgICBpZiAoc2xhc2hNYXRjaCkge1xuICAgICAgY29uc3QgcXVlcnkgPSBzbGFzaE1hdGNoWzFdIHx8IFwiXCI7XG4gICAgICBjb25zdCB3YXNBY3RpdmUgPSB0aGlzLmlzQWN0aXZlO1xuXG4gICAgICB0aGlzLmN1cnJlbnRRdWVyeS5zZXQocXVlcnkpO1xuICAgICAgdGhpcy5zbGFzaFJhbmdlID0ge1xuICAgICAgICBmcm9tOiBmcm9tIC0gc2xhc2hNYXRjaFswXS5sZW5ndGggKyBzbGFzaE1hdGNoWzBdLmluZGV4T2YoXCIvXCIpLFxuICAgICAgICB0bzogZnJvbSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFJlc2V0IGluZGV4IGlmIG1lbnUganVzdCBiZWNhbWUgYWN0aXZlXG4gICAgICBpZiAoIXdhc0FjdGl2ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KDApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuaXNUb29sYmFySW50ZXJhY3RpbmcoKSkge1xuICAgICAgICB0aGlzLmhpZGVUaXBweSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93VGlwcHkoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5oaWRlVGlwcHkoKTtcbiAgICB9XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGlkZVRpcHB5KCksIDEwMCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb1NlbGVjdGVkKCkge1xuICAgIC8vIFNjcm9sbCB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudFxuICAgIGNvbnN0IG1lbnVFbCA9IHRoaXMubWVudVJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChtZW51RWwpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IG1lbnVFbC5xdWVyeVNlbGVjdG9yKFwiLnNsYXNoLWNvbW1hbmQtaXRlbS5zZWxlY3RlZFwiKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6IFwibmVhcmVzdFwiLCBiZWhhdmlvcjogXCJzbW9vdGhcIiB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dUaXBweSgpIHtcbiAgICBpZiAodGhpcy50aXBweUluc3RhbmNlICYmIHRoaXMuZmlsdGVyZWRDb21tYW5kcygpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5zZXRQcm9wcyh7IHN0aWNreTogXCJyZWZlcmVuY2VcIiB9KTtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5zaG93KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoaWRlVGlwcHkoKSB7XG4gICAgaWYgKHRoaXMudGlwcHlJbnN0YW5jZSkge1xuICAgICAgdGhpcy50aXBweUluc3RhbmNlLnNldFByb3BzKHsgc3RpY2t5OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgZXhlY3V0ZUNvbW1hbmQoY29tbWFuZDogQXRlU2xhc2hDb21tYW5kSXRlbSkge1xuICAgIGNvbnN0IGVkID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoIWVkIHx8ICF0aGlzLnNsYXNoUmFuZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgc2xhc2ggdGV4dCAoXCIvXCIpXG4gICAgY29uc3QgeyB0ciB9ID0gZWQuc3RhdGU7XG4gICAgdHIuZGVsZXRlKHRoaXMuc2xhc2hSYW5nZS5mcm9tLCB0aGlzLnNsYXNoUmFuZ2UudG8pO1xuICAgIGVkLnZpZXcuZGlzcGF0Y2godHIpO1xuXG4gICAgLy8gSGlkZSBtZW51IGltbWVkaWF0ZWx5XG4gICAgdGhpcy5oaWRlVGlwcHkoKTtcbiAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cbiAgICAvLyBHaXZlIGZvY3VzIGJhY2sgdG8gZWRpdG9yIGFuZCBleGVjdXRlIGNvbW1hbmQgcmlnaHQgYXdheTogUHJvc2VNaXJyb3IgdXBkYXRlcyB0aGUgRE9NIHN5bmNocm9ub3VzbHlcbiAgICAvLyBvbiBkaXNwYXRjaCwgYW5kIGFueSBkZWxheSBsZXRzIGtleXMgdHlwZWQgaW4gdGhlIG1lYW50aW1lIGxhbmQgaW4gdGhlIHBhcmFncmFwaCB0aGUgXCIvXCIgd2FzIHR5cGVkIGluXG4gICAgZWQuY29tbWFuZHMuZm9jdXMoKTtcbiAgICBjb21tYW5kLmNvbW1hbmQoZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRLZXlib2FyZFBsdWdpbihlZDogRWRpdG9yKSB7XG4gICAgLy8gQWRkIGEgUHJvc2VNaXJyb3IgcGx1Z2luIHRvIGludGVyY2VwdCBrZXlib2FyZCBldmVudHNcbiAgICBjb25zdCBrZXlib2FyZFBsdWdpbiA9IG5ldyBQbHVnaW4oe1xuICAgICAga2V5OiBuZXcgUGx1Z2luS2V5KFwic2xhc2gtY29tbWFuZHMta2V5Ym9hcmRcIiksXG4gICAgICBwcm9wczoge1xuICAgICAgICBkZWNvcmF0aW9uczogc3RhdGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZnJvbSB9ID0gc3RhdGUuc2VsZWN0aW9uO1xuICAgICAgICAgIGNvbnN0IHRleHRCZWZvcmUgPSBzdGF0ZS5kb2MudGV4dEJldHdlZW4oTWF0aC5tYXgoMCwgZnJvbSAtIDIwKSwgZnJvbSwgXCJcXG5cIik7XG4gICAgICAgICAgY29uc3Qgc2xhc2hNYXRjaCA9IHRleHRCZWZvcmUubWF0Y2goLyg/Ol58XFxzKVxcLyhbXi9cXHNdKikkLyk7XG5cbiAgICAgICAgICBpZiAoIXNsYXNoTWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBEZWNvcmF0aW9uU2V0LmVtcHR5O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNsYXNoUG9zID0gZnJvbSAtIHNsYXNoTWF0Y2hbMF0ubGVuZ3RoICsgc2xhc2hNYXRjaFswXS5pbmRleE9mKFwiL1wiKTtcbiAgICAgICAgICBjb25zdCBxdWVyeSA9IHNsYXNoTWF0Y2hbMV0gfHwgXCJcIjtcbiAgICAgICAgICBjb25zdCBpc0VtcHR5ID0gIXF1ZXJ5O1xuICAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5maWx0ZXJQbGFjZWhvbGRlclRleHQoKTtcbiAgICAgICAgICBjb25zdCBkZWNvcmF0aW9uSWQgPSBgaWRfJHtzbGFzaFBvc31fJHtmcm9tfWA7XG5cbiAgICAgICAgICByZXR1cm4gRGVjb3JhdGlvblNldC5jcmVhdGUoc3RhdGUuZG9jLCBbXG4gICAgICAgICAgICBEZWNvcmF0aW9uLmlubGluZShzbGFzaFBvcywgZnJvbSwge1xuICAgICAgICAgICAgICBcImRhdGEtZGVjb3JhdGlvbi1pZFwiOiBkZWNvcmF0aW9uSWQsXG4gICAgICAgICAgICAgIFwiZGF0YS1kZWNvcmF0aW9uLWNvbnRlbnRcIjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIGNsYXNzOiBgYXRlLXNsYXNoLWRlY29yYXRpb24gJHtpc0VtcHR5ID8gXCJpcy1lbXB0eVwiIDogXCJcIn1gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZUtleURvd246ICh2aWV3OiBFZGl0b3JWaWV3LCBldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIC8vIE9ubHkgaGFuZGxlIGlmIG1lbnUgaXMgYWN0aXZlXG4gICAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlIHx8IHRoaXMuZmlsdGVyZWRDb21tYW5kcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCI6IHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dEluZGV4ID0gKHRoaXMuc2VsZWN0ZWRJbmRleCgpICsgMSkgJSB0aGlzLmZpbHRlcmVkQ29tbWFuZHMoKS5sZW5ndGg7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5zZXQobmV4dEluZGV4KTtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1NlbGVjdGVkKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIkFycm93VXBcIjoge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBjb25zdCBwcmV2SW5kZXggPVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCgpID09PSAwXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuZmlsdGVyZWRDb21tYW5kcygpLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEluZGV4KCkgLSAxO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KHByZXZJbmRleCk7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3RlZCgpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJFbnRlclwiOiB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ29tbWFuZCA9IHRoaXMuZmlsdGVyZWRDb21tYW5kcygpW3RoaXMuc2VsZWN0ZWRJbmRleCgpXTtcbiAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUNvbW1hbmQoc2VsZWN0ZWRDb21tYW5kKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJFc2NhcGVcIjoge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuaGlkZVRpcHB5KCk7XG4gICAgICAgICAgICAgIC8vIFJlbW92ZSB0eXBlZCBcIi9cIlxuICAgICAgICAgICAgICBpZiAodGhpcy5zbGFzaFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ciB9ID0gdmlldy5zdGF0ZTtcbiAgICAgICAgICAgICAgICB0ci5kZWxldGUodGhpcy5zbGFzaFJhbmdlLmZyb20sIHRoaXMuc2xhc2hSYW5nZS50byk7XG4gICAgICAgICAgICAgICAgdmlldy5kaXNwYXRjaCh0cik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEFkZCBwbHVnaW4gdG8gZWRpdG9yXG4gICAgZWQudmlldy51cGRhdGVTdGF0ZShcbiAgICAgIGVkLnZpZXcuc3RhdGUucmVjb25maWd1cmUoe1xuICAgICAgICBwbHVnaW5zOiBba2V5Ym9hcmRQbHVnaW4sIC4uLmVkLnZpZXcuc3RhdGUucGx1Z2luc10sXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|