@jax-data-science/sci-image-visualizer 0.9.0 → 0.10.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/esm2022/index.mjs +7 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
- package/esm2022/lib/contracts/section-view.contract.mjs +2 -0
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/contracts/viz-config.mjs +1 -1
- package/esm2022/lib/geometry/loft.mjs +128 -0
- package/esm2022/lib/geometry/polylabel.mjs +156 -0
- package/esm2022/lib/geometry/reconstruct.mjs +315 -0
- package/esm2022/lib/geometry/reslice-image.mjs +57 -0
- package/esm2022/lib/geometry/section.mjs +215 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-badge.mjs +11 -7
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +20 -3
- package/esm2022/lib/implementations/napari-js/napari-region-mesh-pointer.mjs +100 -0
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +28 -5
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +9 -2
- package/esm2022/lib/implementations/napari-js/napari-tool-bridge.mjs +5 -2
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +81 -1
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +129 -0
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +115 -4
- package/esm2022/lib/implementations/napari-js/napari-volume-slice-planes.mjs +103 -0
- package/esm2022/lib/implementations/napari-js/region-overlay/region-svg-renderer.mjs +15 -3
- package/esm2022/lib/implementations/osd/osd-region-overlay-draw.mjs +18 -7
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +38 -8
- package/esm2022/lib/implementations/tile-server/tile-protocol.mjs +1 -1
- package/esm2022/lib/models/class-preset.mjs +1 -1
- package/esm2022/lib/models/polygon-factory.mjs +17 -1
- package/esm2022/lib/models/region-geojson.mjs +44 -6
- package/esm2022/lib/models/region.mjs +1 -1
- package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +156 -0
- package/esm2022/lib/region-editor/class-tree/class-tree.mjs +108 -0
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +77 -13
- package/esm2022/lib/region-editor/region-editor.component.mjs +527 -42
- package/esm2022/lib/region-editor/region-metrics.mjs +20 -2
- package/esm2022/lib/region-editor/region-persistence.service.mjs +36 -10
- package/esm2022/lib/region-editor/region-table/region-table.component.mjs +24 -8
- package/esm2022/lib/region-overlay/region-geometry.mjs +3 -3
- package/esm2022/lib/region-overlay/region-source-layer.mjs +378 -0
- package/esm2022/lib/region-overlay/region-style.mjs +97 -0
- package/esm2022/lib/region-source/http-region-source.mjs +104 -0
- package/esm2022/lib/region-source/region-source-ops.mjs +53 -0
- package/esm2022/lib/region-source/region-source-worker.mjs +10 -0
- package/esm2022/lib/region-source/region-source.mjs +67 -0
- package/esm2022/lib/region-source/region-tiles.mjs +708 -0
- package/esm2022/lib/region-source/worker-region-source.mjs +229 -0
- package/esm2022/lib/routing-visualizer.service.mjs +418 -22
- package/esm2022/lib/section-pane/section-pane.component.mjs +299 -0
- package/esm2022/lib/store/class-color.util.mjs +10 -5
- package/esm2022/lib/store/class-signatures.mjs +63 -0
- package/esm2022/lib/store/region-scope-cache.mjs +5 -1
- package/esm2022/lib/store/region-source-scope.mjs +171 -0
- package/esm2022/lib/store/region-store.service.mjs +724 -12
- package/esm2022/lib/store/visualizer-store.service.mjs +33 -6
- package/esm2022/lib/toolbar/region-tools/region-tools.component.mjs +8 -2
- package/esm2022/lib/toolbar/stack-controls/stack-controls.component.mjs +55 -15
- package/esm2022/lib/toolbar/toolbar.component.mjs +19 -5
- package/esm2022/lib/visualizer/region-load.mjs +67 -4
- package/esm2022/lib/visualizer/volume-sections.mjs +175 -0
- package/esm2022/lib/visualizer.component.mjs +128 -6
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs} +7239 -1153
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-BKQhpbHv.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs} +4 -4
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-Bkujqg7m.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-z1IN-F7w.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs +12 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-region-source-worker-CAqBjM5L.mjs.map +1 -0
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +3 -3
- package/fesm2022/region-source.worker.js +1067 -0
- package/index.d.ts +6 -0
- package/lib/contracts/image.contract.d.ts +4 -0
- package/lib/contracts/region-editor-api.contract.d.ts +84 -0
- package/lib/contracts/region-store.contract.d.ts +22 -0
- package/lib/contracts/section-view.contract.d.ts +44 -0
- package/lib/contracts/visualizer.contract.d.ts +10 -0
- package/lib/contracts/viz-config.d.ts +8 -0
- package/lib/geometry/loft.d.ts +22 -0
- package/lib/geometry/polylabel.d.ts +23 -0
- package/lib/geometry/reconstruct.d.ts +54 -0
- package/lib/geometry/reslice-image.d.ts +33 -0
- package/lib/geometry/section.d.ts +52 -0
- package/lib/implementations/napari-js/napari-loading-badge.d.ts +4 -2
- package/lib/implementations/napari-js/napari-loading-state.d.ts +8 -1
- package/lib/implementations/napari-js/napari-region-mesh-pointer.d.ts +32 -0
- package/lib/implementations/napari-js/napari-region-overlay.d.ts +6 -1
- package/lib/implementations/napari-js/napari-scene.d.ts +33 -0
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +3 -1
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +48 -0
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +66 -0
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +45 -1
- package/lib/implementations/napari-js/napari-volume-slice-planes.d.ts +43 -0
- package/lib/implementations/osd/osd-region-overlay-draw.d.ts +4 -3
- package/lib/implementations/osd/osd-region-overlay.d.ts +10 -3
- package/lib/implementations/tile-server/tile-protocol.d.ts +3 -0
- package/lib/models/class-preset.d.ts +7 -0
- package/lib/models/polygon-factory.d.ts +5 -0
- package/lib/models/region-geojson.d.ts +40 -0
- package/lib/models/region.d.ts +19 -0
- package/lib/region-editor/class-tree/class-tree.component.d.ts +78 -0
- package/lib/region-editor/class-tree/class-tree.d.ts +31 -0
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +36 -6
- package/lib/region-editor/region-editor.component.d.ts +133 -17
- package/lib/region-editor/region-metrics.d.ts +8 -0
- package/lib/region-editor/region-persistence.service.d.ts +12 -4
- package/lib/region-editor/region-table/region-table.component.d.ts +10 -4
- package/lib/region-overlay/region-geometry.d.ts +4 -3
- package/lib/region-overlay/region-source-layer.d.ts +96 -0
- package/lib/region-overlay/region-style.d.ts +52 -0
- package/lib/region-source/http-region-source.d.ts +45 -0
- package/lib/region-source/region-source-ops.d.ts +89 -0
- package/lib/region-source/region-source-worker.d.ts +7 -0
- package/lib/region-source/region-source.d.ts +82 -0
- package/lib/region-source/region-tiles.d.ts +289 -0
- package/lib/region-source/worker-region-source.d.ts +65 -0
- package/lib/routing-visualizer.service.d.ts +138 -1
- package/lib/section-pane/section-pane.component.d.ts +47 -0
- package/lib/store/class-color.util.d.ts +6 -3
- package/lib/store/class-signatures.d.ts +11 -0
- package/lib/store/region-scope-cache.d.ts +2 -0
- package/lib/store/region-source-scope.d.ts +68 -0
- package/lib/store/region-store.service.d.ts +206 -2
- package/lib/store/visualizer-store.service.d.ts +10 -0
- package/lib/toolbar/region-tools/region-tools.component.d.ts +3 -1
- package/lib/toolbar/stack-controls/stack-controls.component.d.ts +20 -9
- package/lib/toolbar/toolbar.component.d.ts +9 -2
- package/lib/visualizer/region-load.d.ts +23 -4
- package/lib/visualizer/volume-sections.d.ts +64 -0
- package/lib/visualizer.component.d.ts +31 -0
- package/package.json +2 -2
- package/src/lib/assets/slice.svg +23 -0
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-Csxlnq7I.mjs.map +0 -1
|
@@ -7,6 +7,7 @@ import { translateBounds } from '../../models/polygon-edit';
|
|
|
7
7
|
import { makePolygon } from '../../models/polygon-factory';
|
|
8
8
|
import { OPEN_PATH_TOL_PX, hitHandle, nearestEdge, regionContains, regionsInRect, topmostRegionAt, } from '../../region-overlay/region-geometry';
|
|
9
9
|
import { SvgRegionRenderer, affineFromProjection } from '../../region-overlay/svg-region-renderer';
|
|
10
|
+
import { RegionSourceLayer, SOURCE_MARQUEE_LIMIT } from '../../region-overlay/region-source-layer';
|
|
10
11
|
import { drawDraftPath, drawDraftRect, drawRegionLabel, drawSelectionBand, drawSelectionHandles, styleRegionShape, vertexMarker, } from './osd-region-overlay-draw';
|
|
11
12
|
import { EDIT_TOL_PX, ZONE_CURSOR, rectZone, resizeRect } from '../../region-overlay/region-hit-test';
|
|
12
13
|
const SVGNS = 'http://www.w3.org/2000/svg';
|
|
@@ -104,13 +105,18 @@ export class OsdRegionOverlay {
|
|
|
104
105
|
this.viewer.canvas.appendChild(this.svg);
|
|
105
106
|
this.renderer = new SvgRegionRenderer(this.svg, {
|
|
106
107
|
rectElement: 'polygon',
|
|
107
|
-
styleShape: (el, region, selected) => styleRegionShape(el, region, selected, this.store.getShapeColor()),
|
|
108
|
+
styleShape: (el, region, selected) => styleRegionShape(el, region, selected, this.store.getShapeColor(), this.store.getRegionStyle?.()),
|
|
108
109
|
// The class label, when the Region Editor's "show labels" is on.
|
|
109
110
|
decorate: (region, _i, _selected, layer) => {
|
|
110
|
-
if (this.store.getShowShapeLabel())
|
|
111
|
-
drawRegionLabel(layer, region, this.store.getShapeColor());
|
|
111
|
+
if (this.store.getShowShapeLabel() && !this.store.isLabelCovered?.(region.label)) {
|
|
112
|
+
drawRegionLabel(layer, region, this.store.getShapeColor(), this.store.getRegionStyle?.());
|
|
113
|
+
}
|
|
112
114
|
},
|
|
115
|
+
skip: (region) => this.hidden(region),
|
|
113
116
|
});
|
|
117
|
+
this.sourceLayer = this.store.getRegionSourceView$
|
|
118
|
+
? new RegionSourceLayer(this.svg, this.store.getRegionSourceView$())
|
|
119
|
+
: null;
|
|
114
120
|
this.viewer.canvas.addEventListener('pointercancel', this.pointerCancelHandler);
|
|
115
121
|
// 'update-viewport' fires on every redrawn frame, animated ones included —
|
|
116
122
|
// also listening to 'animation' rebuilt the whole SVG twice per frame.
|
|
@@ -192,6 +198,7 @@ export class OsdRegionOverlay {
|
|
|
192
198
|
this.viewer.removeHandler('rotate', this.cameraHandler);
|
|
193
199
|
if (this.tracker)
|
|
194
200
|
this.tracker.destroy();
|
|
201
|
+
this.sourceLayer?.destroy();
|
|
195
202
|
if (this.svg.parentNode)
|
|
196
203
|
this.svg.parentNode.removeChild(this.svg);
|
|
197
204
|
}
|
|
@@ -214,7 +221,9 @@ export class OsdRegionOverlay {
|
|
|
214
221
|
/** Follow the current image→element projection: the renderer rewrites one transform
|
|
215
222
|
* and re-positions its screen-space elements, or does nothing when it did not move. */
|
|
216
223
|
updateCamera() {
|
|
217
|
-
|
|
224
|
+
const affine = affineFromProjection(this.toScreen);
|
|
225
|
+
this.renderer.setCamera(affine);
|
|
226
|
+
this.sourceLayer?.setCamera(affine);
|
|
218
227
|
}
|
|
219
228
|
/** Rebuild everything: the regions (in image coordinates), their labels and the overlay. */
|
|
220
229
|
redraw() {
|
|
@@ -388,7 +397,8 @@ export class OsdRegionOverlay {
|
|
|
388
397
|
const x1 = Math.max(start.x, end.x), y1 = Math.max(start.y, end.y);
|
|
389
398
|
// Only a real drag selects; a click-sized band falls through to onClick.
|
|
390
399
|
if (this.bandDragged && (x1 - x0 > 2 || y1 - y0 > 2)) {
|
|
391
|
-
this.store.setSelectedShapeIndices(regionsInRect(this.store.getRegions(), x0, y0, x1, y1));
|
|
400
|
+
this.store.setSelectedShapeIndices(regionsInRect(this.store.getRegions(), x0, y0, x1, y1, { skip: (r) => this.hidden(r) }));
|
|
401
|
+
this.selectSourceIn(x0, y0, x1, y1);
|
|
392
402
|
}
|
|
393
403
|
this.renderOverlay();
|
|
394
404
|
}
|
|
@@ -481,7 +491,8 @@ export class OsdRegionOverlay {
|
|
|
481
491
|
this.viewer.canvas.style.cursor = ZONE_CURSOR[ez.zone];
|
|
482
492
|
return;
|
|
483
493
|
}
|
|
484
|
-
this.
|
|
494
|
+
const pt = this.toWorld(e.position);
|
|
495
|
+
this.updateCursor(this.regionIndexAt(pt) >= 0 || !!this.sourceLayer?.featureAt(pt.x, pt.y, OPEN_PATH_TOL_PX));
|
|
485
496
|
}
|
|
486
497
|
/**
|
|
487
498
|
* The move/resize zone under the cursor for the currently-selected region
|
|
@@ -600,6 +611,13 @@ export class OsdRegionOverlay {
|
|
|
600
611
|
}
|
|
601
612
|
selectAt(pt, additive = false) {
|
|
602
613
|
const idx = this.regionIndexAt(pt);
|
|
614
|
+
// Not on a region: a feature of the region source there is taken into the regions and
|
|
615
|
+
// selected (the source draws it until then).
|
|
616
|
+
const feature = idx < 0 ? this.sourceLayer?.featureAt(pt.x, pt.y, OPEN_PATH_TOL_PX) : null;
|
|
617
|
+
if (feature && this.store.selectSourceFeatures) {
|
|
618
|
+
void this.store.selectSourceFeatures([feature.id], additive);
|
|
619
|
+
return;
|
|
620
|
+
}
|
|
603
621
|
if (additive) {
|
|
604
622
|
// Shift-click on empty space keeps the current selection.
|
|
605
623
|
if (idx < 0)
|
|
@@ -617,11 +635,23 @@ export class OsdRegionOverlay {
|
|
|
617
635
|
}
|
|
618
636
|
this.store.setSelectedShapeIndices(idx >= 0 ? [idx] : []);
|
|
619
637
|
}
|
|
638
|
+
/** Take the region-source features the band meets into the regions, adding them to the selection. */
|
|
639
|
+
selectSourceIn(x0, y0, x1, y1) {
|
|
640
|
+
const features = this.sourceLayer?.featuresInRect(x0, y0, x1, y1) ?? [];
|
|
641
|
+
if (!features.length || !this.store.selectSourceFeatures)
|
|
642
|
+
return;
|
|
643
|
+
const ids = features.slice(0, SOURCE_MARQUEE_LIMIT).map((f) => f.id);
|
|
644
|
+
void this.store.selectSourceFeatures(ids, true);
|
|
645
|
+
}
|
|
620
646
|
/** Index of the topmost region under an image point, or -1. */
|
|
621
647
|
regionIndexAt(pt) {
|
|
622
|
-
const opts = { toScreen: this.toScreen, tolPx: OPEN_PATH_TOL_PX };
|
|
648
|
+
const opts = { toScreen: this.toScreen, tolPx: OPEN_PATH_TOL_PX, skip: (r) => this.hidden(r) };
|
|
623
649
|
return topmostRegionAt(this.store.getRegions(), pt.x, pt.y, opts);
|
|
624
650
|
}
|
|
651
|
+
/** Whether a region's class is hidden (not drawn, not picked). */
|
|
652
|
+
hidden(region) {
|
|
653
|
+
return !!this.store.isClassHidden?.(region.label);
|
|
654
|
+
}
|
|
625
655
|
/** Whether the element-pixel `position` lands on `region` (see `regionContains`). */
|
|
626
656
|
containsPoint(region, position) {
|
|
627
657
|
const pt = this.toWorld(position);
|
|
@@ -700,4 +730,4 @@ export class OsdRegionOverlay {
|
|
|
700
730
|
this.redraw();
|
|
701
731
|
}
|
|
702
732
|
}
|
|
703
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NkLXJlZ2lvbi1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvb3NkL29zZC1yZWdpb24tb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSS9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFdBQVcsRUFDWCxjQUFjLEVBQ2QsYUFBYSxFQUNiLGVBQWUsR0FDaEIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRyxPQUFPLEVBQ0wsYUFBYSxFQUNiLGFBQWEsRUFDYixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsWUFBWSxHQUNiLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBWSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBWWhILE1BQU0sS0FBSyxHQUFHLDRCQUE0QixDQUFDO0FBUTNDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFN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TUFBTSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIE9wZW5TZWFkcmFnb24gZnJvbSAnb3BlbnNlYWRyYWdvbic7XG5pbXBvcnQgeyBPU0QgfSBmcm9tICcuL29zZC1saWInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJlZ2lvbiwgUmVjdGFuZ2xlLCBQb2x5Z29uLCBNdWx0aVBvbHlnb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVnaW9uJztcbmltcG9ydCB7IElSZWdpb25TdG9yZSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy92aXN1YWxpemVyLmNvbnRyYWN0JztcbmltcG9ydCB7IElSZWdpb25FZGl0QXBpIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3JlZ2lvbi1zdG9yZS5jb250cmFjdCc7XG5pbXBvcnQgeyBJUmVnaW9uT3ZlcmxheSwgUmVnaW9uVG9vbE1vZGUgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcmVnaW9uLW92ZXJsYXkuY29udHJhY3QnO1xuaW1wb3J0IHsgZWxlbWVudFRvSW1hZ2UsIGltYWdlVG9FbGVtZW50IH0gZnJvbSAnLi9vc2QtY29vcmRzJztcbmltcG9ydCB7IE9zZFZpZXdlckxpa2UgfSBmcm9tICcuL29zZC12aWV3ZXItbGlrZSc7XG5pbXBvcnQgeyBPU0RfWk9PTV9QRVJfU0NST0xMIH0gZnJvbSAnLi9vc2Qtem9vbSc7XG5pbXBvcnQgeyB0cmFuc2xhdGVCb3VuZHMgfSBmcm9tICcuLi8uLi9tb2RlbHMvcG9seWdvbi1lZGl0JztcbmltcG9ydCB7IG1ha2VQb2x5Z29uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BvbHlnb24tZmFjdG9yeSc7XG5pbXBvcnQge1xuICBPUEVOX1BBVEhfVE9MX1BYLFxuICBUb1NjcmVlbixcbiAgaGl0SGFuZGxlLFxuICBuZWFyZXN0RWRnZSxcbiAgcmVnaW9uQ29udGFpbnMsXG4gIHJlZ2lvbnNJblJlY3QsXG4gIHRvcG1vc3RSZWdpb25BdCxcbn0gZnJvbSAnLi4vLi4vcmVnaW9uLW92ZXJsYXkvcmVnaW9uLWdlb21ldHJ5JztcbmltcG9ydCB7IFN2Z1JlZ2lvblJlbmRlcmVyLCBhZmZpbmVGcm9tUHJvamVjdGlvbiB9IGZyb20gJy4uLy4uL3JlZ2lvbi1vdmVybGF5L3N2Zy1yZWdpb24tcmVuZGVyZXInO1xuaW1wb3J0IHtcbiAgZHJhd0RyYWZ0UGF0aCxcbiAgZHJhd0RyYWZ0UmVjdCxcbiAgZHJhd1JlZ2lvbkxhYmVsLFxuICBkcmF3U2VsZWN0aW9uQmFuZCxcbiAgZHJhd1NlbGVjdGlvbkhhbmRsZXMsXG4gIHN0eWxlUmVnaW9uU2hhcGUsXG4gIHZlcnRleE1hcmtlcixcbn0gZnJvbSAnLi9vc2QtcmVnaW9uLW92ZXJsYXktZHJhdyc7XG5pbXBvcnQgeyBFRElUX1RPTF9QWCwgRWRpdFpvbmUsIFpPTkVfQ1VSU09SLCByZWN0Wm9uZSwgcmVzaXplUmVjdCB9IGZyb20gJy4uLy4uL3JlZ2lvbi1vdmVybGF5L3JlZ2lvbi1oaXQtdGVzdCc7XG5cbi8qKlxuICogVGhlIHNoYXJlZCByZWdpb24gc3RvcmUgYXMgdGhlIG92ZXJsYXkgbmVlZHMgaXQ6IHRoZSBjcm9zcy1iYWNrZW5kXG4gKiB7QGxpbmsgSVJlZ2lvblN0b3JlfSAocmVhZCByZWdpb25zLCBzZWxlY3Rpb24sIGNvbG91cnMpIHBsdXMgdGhlIFJlZ2lvbi1uYXRpdmVcbiAqIHtAbGluayBJUmVnaW9uRWRpdEFwaX0gKGFkZC9tb3ZlL3Jlc2l6ZS92ZXJ0ZXggZWRpdHMpLiBUaGUgc2hhcmVkIFJlZ2lvblN0b3JlXG4gKiBzYXRpc2ZpZXMgYm90aC4gVGhlIG92ZXJsYXkgZWRpdHMgdGhyb3VnaCB0aGVzZSB0eXBlZCBvcGVyYXRpb25zIG9uIHRoZVxuICogbmV1dHJhbCBSZWdpb24gbW9kZWwg4oCUIGl0IG5ldmVyIHRvdWNoZXMgYSBiYWNrZW5kJ3Mgb3duIHNoYXBlIHJlcHJlc2VudGF0aW9uXG4gKiAoZS5nLiBQbG90bHkncyBgeDAveTAveDEveTFgIC8gYE3igKZM4oCmWmAgZGljdHMpLlxuICovXG5leHBvcnQgdHlwZSBSZWdpb25FZGl0U3RvcmUgPSBJUmVnaW9uU3RvcmUgJiBJUmVnaW9uRWRpdEFwaTtcblxuY29uc3QgU1ZHTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuXG4vKiogQSByZWdpb24ncyBnZW9tZXRyeSBhdCB0aGUgc3RhcnQgb2YgYSBtb3ZlL3Jlc2l6ZSAoc2VlIGBzbmFwc2hvdGApOiBhIHJlY3RhbmdsZSdzXG4gKiAgYm94IGZvciBhIHJlc2l6ZSwgb3IgdGhlIHBvbHlnb24vbXVsdGktcG9seWdvbiBib3VuZHMgdGhlbXNlbHZlcyBmb3IgYSBtb3ZlIOKAlCB0aGVcbiAqICBzdG9yZSBpcyBjb3B5LW9uLXdyaXRlLCBzbyB0aGUgZ2VzdHVyZS1zdGFydCBpbnN0YW5jZSBuZXZlciBjaGFuZ2VzIHVuZGVyIHRoZSBkcmFnLiAqL1xudHlwZSBFZGl0U25hcHNob3QgPVxuICB7IGtpbmQ6ICdyZWN0JzsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gfCB7IGtpbmQ6ICdzaGFwZSc7IGJvdW5kczogUG9seWdvbiB8IE11bHRpUG9seWdvbiB9O1xuXG4vKipcbiAqIE9wZW5TZWFkcmFnb24gaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIElSZWdpb25PdmVybGF5fS5cbiAqXG4gKiAtIFJlbmRlcnMgdGhlIHN0b3JlJ3MgcmVnaW9ucyAocmVjdC9wb2x5Z29uKSBpbiBpbWFnZS1waXhlbCBzcGFjZSwga2VwdFxuICogICBhbGlnbmVkIG9uIGV2ZXJ5IHBhbi96b29tIHZpYSB0aGUgT1NEIHZpZXdwb3J0IEFQSS5cbiAqIC0gRHJhd3MgbmV3IHJlY3RhbmdsZSBhbmQgcG9seWdvbiByZWdpb25zIChjb21taXR0ZWQgdG8gdGhlIHNoYXJlZCBzdG9yZSkuXG4gKiAtIENsaWNrLXRvLXNlbGVjdCBpbiAnc2VsZWN0JyBtb2RlLlxuICpcbiAqIFJlYWRzL3dyaXRlcyB0aGUgc2hhcmVkIHtAbGluayBJUmVnaW9uU3RvcmV9LCBzbyByZWdpb25zIHN0YXkgaW4gc3luYyB3aXRoIHRoZVxuICogUmVnaW9uIEVkaXRvciBhbmQgdGhlIFBsb3RseSBiYWNrZW5kLiBUaGUgd2FuZCwgdmVydGV4LWVyYXNlciBhbmQgem9vbS10by1ib3hcbiAqIHRvb2xzIGFyZSBOT1QgaGFuZGxlZCBoZXJlIOKAlCB0aGV5J3JlIG93bmVkIGJ5IE9wZW5TZWFkcmFnb25WaXN1YWxpemVyU2VydmljZVxuICogKHdoaWNoIGJpbmRzIHRoZW0gdG8gT1NEIHZpYSB0aGUgc2hhcmVkIGNvb3JkaW5hdGUgdHJhbnNmb3JtICsgdmlld3BvcnQgcGl4ZWxcbiAqIHJlYWRiYWNrKSwgdGhlIHNhbWUgc2luZ2xldG9uIHRvb2wgc2VydmljZXMgdGhlIFBsb3RseSBiYWNrZW5kIHVzZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBPc2RSZWdpb25PdmVybGF5IGltcGxlbWVudHMgSVJlZ2lvbk92ZXJsYXkge1xuICBwcml2YXRlIHJlYWRvbmx5IHN2ZzogU1ZHU1ZHRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHNlbGVjdGVkOiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIG1vZGU6IFJlZ2lvblRvb2xNb2RlID0gJ25vbmUnO1xuXG4gIHByaXZhdGUgdHJhY2tlcjogT3BlblNlYWRyYWdvbi5Nb3VzZVRyYWNrZXI7XG4gIHByaXZhdGUgcmVjdFN0YXJ0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDsgLy8gaW1hZ2UgY29vcmRzXG4gIHByaXZhdGUgcmVjdEN1cnJlbnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBvbHlQb2ludHM6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfVtdID0gW107IC8vIGltYWdlIGNvb3Jkc1xuICAvKiogVHJ1ZSB3aGlsZSBkcmFnZ2luZyBhIGZyZWVoYW5kIHBhdGggKGZyZWVmb3JtIC8gcG9seWxpbmUpLiAqL1xuICBwcml2YXRlIGZyZWVoYW5kRHJhZ2dpbmcgPSBmYWxzZTtcbiAgLyoqIFRydWUgd2hpbGUgcGxhY2luZyBhIGNsaWNrLXRvLWFkZCBwb2x5Z29uICgnZHJhd3BvbHlnb24nIG1vZGUpLiAqL1xuICBwcml2YXRlIGRyYXdpbmdQb2x5Z29uID0gZmFsc2U7XG4gIC8qKiBMYXN0IGVsZW1lbnQtcGl4ZWwgcG9pbnQgYXBwZW5kZWQsIHRvIHRoaW4gdGhlIGZyZWVoYW5kIHBhdGguICovXG4gIHByaXZhdGUgbGFzdEZyZWVoYW5kUHg6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuICAvKipcbiAgICogSW4tcHJvZ3Jlc3MgZWRpdCBvZiB0aGUgc2VsZWN0ZWQgcmVnaW9uOlxuICAgKiAgLSBraW5kICdib3VuZHMnIOKAlCByZWN0YW5nbGUgcmVzaXplL21vdmUgb3Igd2hvbGUtcmVnaW9uIG1vdmUgKHVzZXMgYHpvbmVgKTtcbiAgICogIC0ga2luZCAndmVydGV4JyDigJQgZHJhZ2dpbmcgYSBzaW5nbGUgcG9seWdvbiB2ZXJ0ZXggKHVzZXMgYHZlcnRleEluZGV4YCkuXG4gICAqL1xuICBwcml2YXRlIGVkaXQ6IHtcbiAgICBraW5kOiAnYm91bmRzJyB8ICd2ZXJ0ZXgnIHwgJ2hhbmRsZSc7XG4gICAgem9uZTogRWRpdFpvbmU7XG4gICAgdmVydGV4SW5kZXg6IG51bWJlcjtcbiAgICAvKiogV2hpY2ggcmluZyB0aGUgZHJhZ2dlZCB2ZXJ0ZXggYmVsb25ncyB0bzogLTEgPSBleHRlcmlvciwgZWxzZSBhIGhvbGVcbiAgICAgKiAgaW5kZXggaW50byBgUG9seWdvbi5ob2xlc2AgKGppdC11aSM4NSkuICovXG4gICAgcmluZzogbnVtYmVyO1xuICAgIGhhbmRsZVNpZGU6ICdpbicgfCAnb3V0JztcbiAgICBpZDogbnVtYmVyO1xuICAgIHN0YXJ0SW1nOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XG4gICAgLyoqIEdlc3R1cmUtc3RhcnQgZ2VvbWV0cnk7IHNldCBmb3IgJ2JvdW5kcycgZWRpdHMgb25seS4gKi9cbiAgICBvcmlnOiBFZGl0U25hcHNob3QgfCBudWxsO1xuICB9IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZWRpdERyYWdnZWQgPSBmYWxzZTtcbiAgLyoqIFJ1YmJlci1iYW5kIChtYXJxdWVlKSBtdWx0aS1zZWxlY3QgaW4gJ3NlbGVjdCcgbW9kZTogcHJlc3Mgb24gZW1wdHkgc3BhY2VcbiAgICogIGFuZCBkcmFnIHRvIHNlbGVjdCBldmVyeSByZWdpb24gdGhlIGJhbmQgaW50ZXJzZWN0cy4gSW1hZ2UgY29vcmRzLiAqL1xuICBwcml2YXRlIGJhbmRTdGFydDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYmFuZEN1cnJlbnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJhbmREcmFnZ2VkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZWRyYXdIYW5kbGVyID0gKCkgPT4gdGhpcy5yZWRyYXcoKTtcbiAgLyoqIEEgY2FtZXJhIG1vdmUgKCd1cGRhdGUtdmlld3BvcnQnLCByYWlzZWQgb24gZXZlcnkgcmVkcmF3biBmcmFtZSwgYW5pbWF0ZWQgb25lc1xuICAgKiAgaW5jbHVkZWQ7ICdyZXNpemUnOyAncm90YXRlJykuIFRoZSByZWdpb25zIGFyZSBkcmF3biBpbiBpbWFnZSBjb29yZGluYXRlcywgc29cbiAgICogIG9ubHkgdGhlIHJlbmRlcmVyJ3MgdHJhbnNmb3JtIGFuZCBpdHMgZmV3IHNjcmVlbi1zcGFjZSBlbGVtZW50cyBmb2xsb3c7IG5vdGhpbmdcbiAgICogIGlzIHJlYnVpbHQgKE9TRC1QTE9UTFktMTEpLiBBIHRpbGUtb25seSBmcmFtZSAobG9hZGluZywgcmVjb2xvcikgbGVhdmVzIHRoZVxuICAgKiAgcHJvamVjdGlvbiwgYW5kIHNvIHRoZSBET00sIHVudG91Y2hlZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjYW1lcmFIYW5kbGVyID0gKCkgPT4gdGhpcy51cGRhdGVDYW1lcmEoKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogU3ZnUmVnaW9uUmVuZGVyZXI7XG4gIC8qKiBPU0QncyBNb3VzZVRyYWNrZXIgZHJvcHMgYSBjYW5jZWxsZWQgcG9pbnRlciAodG91Y2ggaW50ZXJydXB0ZWQsIHBvaW50ZXJcbiAgICogIGNhcHR1cmUgbG9zdCB0byB0aGUgYnJvd3Nlcikgd2l0aG91dCBjYWxsaW5nIHJlbGVhc2VIYW5kbGVyLCBzbyB0aGVcbiAgICogIGdlc3R1cmUgaXMgZW5kZWQgaGVyZSBpbnN0ZWFkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBvaW50ZXJDYW5jZWxIYW5kbGVyID0gKCkgPT4ge1xuICAgIHRoaXMuZW5kR2VzdHVyZSgpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2aWV3ZXI6IE9zZFZpZXdlckxpa2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogUmVnaW9uRWRpdFN0b3JlLFxuICApIHtcbiAgICB0aGlzLnN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdOUywgJ3N2ZycpIGFzIFNWR1NWR0VsZW1lbnQ7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLnN2Zy5zdHlsZSwge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJywgLy8gT1NEIGhhbmRsZXMgbmF2aWdhdGlvbiB1bmxlc3Mgd2UncmUgZHJhd2luZ1xuICAgIH0pO1xuICAgIHRoaXMudmlld2VyLmNhbnZhcy5hcHBlbmRDaGlsZCh0aGlzLnN2Zyk7XG4gICAgdGhpcy5yZW5kZXJlciA9IG5ldyBTdmdSZWdpb25SZW5kZXJlcih0aGlzLnN2Zywge1xuICAgICAgcmVjdEVsZW1lbnQ6ICdwb2x5Z29uJyxcbiAgICAgIHN0eWxlU2hhcGU6IChlbCwgcmVnaW9uLCBzZWxlY3RlZCkgPT4gc3R5bGVSZWdpb25TaGFwZShlbCwgcmVnaW9uLCBzZWxlY3RlZCwgdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCkpLFxuICAgICAgLy8gVGhlIGNsYXNzIGxhYmVsLCB3aGVuIHRoZSBSZWdpb24gRWRpdG9yJ3MgXCJzaG93IGxhYmVsc1wiIGlzIG9uLlxuICAgICAgZGVjb3JhdGU6IChyZWdpb24sIF9pLCBfc2VsZWN0ZWQsIGxheWVyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnN0b3JlLmdldFNob3dTaGFwZUxhYmVsKCkpIGRyYXdSZWdpb25MYWJlbChsYXllciwgcmVnaW9uLCB0aGlzLnN0b3JlLmdldFNoYXBlQ29sb3IoKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMudmlld2VyLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgdGhpcy5wb2ludGVyQ2FuY2VsSGFuZGxlcik7XG5cbiAgICAvLyAndXBkYXRlLXZpZXdwb3J0JyBmaXJlcyBvbiBldmVyeSByZWRyYXduIGZyYW1lLCBhbmltYXRlZCBvbmVzIGluY2x1ZGVkIOKAlFxuICAgIC8vIGFsc28gbGlzdGVuaW5nIHRvICdhbmltYXRpb24nIHJlYnVpbHQgdGhlIHdob2xlIFNWRyB0d2ljZSBwZXIgZnJhbWUuXG4gICAgdGhpcy52aWV3ZXIuYWRkSGFuZGxlcigndXBkYXRlLXZpZXdwb3J0JywgdGhpcy5jYW1lcmFIYW5kbGVyKTtcbiAgICB0aGlzLnZpZXdlci5hZGRIYW5kbGVyKCdyZXNpemUnLCB0aGlzLmNhbWVyYUhhbmRsZXIpO1xuICAgIHRoaXMudmlld2VyLmFkZEhhbmRsZXIoJ3JvdGF0ZScsIHRoaXMuY2FtZXJhSGFuZGxlcik7XG4gICAgLy8gS2VlcCB3aGVlbC16b29tIGFsaXZlIHdoaWxlIGEgdG9vbCBoYXMgbW91c2UtbmF2IGRpc2FibGVkIChzZWUgaGFuZGxlcikuXG4gICAgdGhpcy52aWV3ZXIuZWxlbWVudD8uYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCB0aGlzLndoZWVsWm9vbUhhbmRsZXIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG5cbiAgICB0aGlzLnRyYWNrZXIgPSBuZXcgT1NELk1vdXNlVHJhY2tlcih7XG4gICAgICBlbGVtZW50OiB0aGlzLnZpZXdlci5jYW52YXMsXG4gICAgICBwcmVzc0hhbmRsZXI6IChlOiBhbnkpID0+IHRoaXMub25QcmVzcyhlKSxcbiAgICAgIGRyYWdIYW5kbGVyOiAoZTogYW55KSA9PiB0aGlzLm9uRHJhZyhlKSxcbiAgICAgIHJlbGVhc2VIYW5kbGVyOiAoZTogYW55KSA9PiB0aGlzLm9uUmVsZWFzZShlKSxcbiAgICAgIGNsaWNrSGFuZGxlcjogKGU6IGFueSkgPT4gdGhpcy5vbkNsaWNrKGUpLFxuICAgICAgbW92ZUhhbmRsZXI6IChlOiBhbnkpID0+IHRoaXMub25Nb3ZlKGUpLFxuICAgIH0pO1xuICAgIHRoaXMudHJhY2tlci5zZXRUcmFja2luZyhmYWxzZSk7XG5cbiAgICB0aGlzLnN1YnMuYWRkKHRoaXMuc3RvcmUuZ2V0UmVnaW9uVXBkYXRlRXZlbnQoKS5zdWJzY3JpYmUodGhpcy5yZWRyYXdIYW5kbGVyKSk7XG4gICAgdGhpcy5zdWJzLmFkZChcbiAgICAgIHRoaXMuc3RvcmUuZ2V0U2VsZWN0ZWRTaGFwZUluZGljZXMkKCkuc3Vic2NyaWJlKChpZHgpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IGlkeCB8fCBbXTtcbiAgICAgICAgdGhpcy5yZWRyYXcoKTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLnJlZHJhdygpO1xuICB9XG5cbiAgLyoqIFN3aXRjaCBkcmF3aW5nL3NlbGVjdGlvbiBtb2RlOyB0b2dnbGVzIE9TRCBuYXZpZ2F0aW9uIGFjY29yZGluZ2x5LiAqL1xuICBzZXRNb2RlKG1vZGU6IFJlZ2lvblRvb2xNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnJlc2V0SW5Qcm9ncmVzcygpO1xuICAgIC8vIEFueSBhY3RpdmUgcmVnaW9uIHRvb2wgdGFrZXMgb3ZlciB0aGUgcG9pbnRlciDigJQgT1NEIHBhbi96b29tIGlzIGRpc2FibGVkXG4gICAgLy8gc28gZHJhZ2dpbmcgZHJhd3MgKGFuZCBjbGlja3Mgc2VsZWN0KSBpbnN0ZWFkIG9mIHBhbm5pbmcuIFdpdGggbm8gdG9vbCxcbiAgICAvLyBPU0QgbmF2aWdhdGVzIG5vcm1hbGx5LlxuICAgIHRoaXMudmlld2VyLnNldE1vdXNlTmF2RW5hYmxlZChtb2RlID09PSAnbm9uZScpO1xuICAgIHRoaXMudHJhY2tlci5zZXRUcmFja2luZyhtb2RlICE9PSAnbm9uZScpO1xuICAgIHRoaXMudXBkYXRlQ3Vyc29yKGZhbHNlKTtcbiAgICB0aGlzLnJlbmRlck92ZXJsYXkoKTtcbiAgfVxuXG4gIC8qKiBEcml2ZSBPU0Qgem9vbSBmcm9tIHRoZSB3aGVlbCB3aGlsZSBhbnkgdG9vbCBvd25zIHRoZSBwb2ludGVyLlxuICAgKlxuICAgKiBPU0QncyBuYXRpdmUgc2Nyb2xsLXpvb20gaXMgcGFydCBvZiBtb3VzZS1uYXYsIHNvIGBzZXRNb3VzZU5hdkVuYWJsZWQoZmFsc2UpYFxuICAgKiAodXNlZCBieSBldmVyeSByZWdpb24gdG9vbCBhbmQgYnkgdGhlIHdhbmQvYnJ1c2gvZXJhc2VyL1NBTSB0b29scykgZGlzYWJsZXNcbiAgICogaXQuIFRoZSBjb3ZlcmluZy1jYW52YXMgdG9vbHMgYWxzbyBzaXQgYWJvdmUgdGhlIE9TRCBjYW52YXMgYW5kIHN3YWxsb3cgdGhlXG4gICAqIHdoZWVsIG91dHJpZ2h0LiBUaGlzIGxpc3RlbmVyIGlzIGJvdW5kIG9uY2UgdG8gdGhlIHZpZXdlciBlbGVtZW50IOKAlCBhblxuICAgKiBhbmNlc3RvciBvZiBib3RoIHRoZSBPU0QgY2FudmFzIGFuZCB0aGUgdG9vbCBvdmVybGF5cyDigJQgYW5kIGZvcndhcmRzIHRoZVxuICAgKiB3aGVlbCB0byBhIGN1cnNvci1jZW50cmVkIHpvb20gd2hlbmV2ZXIgbW91c2UtbmF2IGlzIG9mZi4gV2hlbiBuYXYgaXMgb24gKG5vXG4gICAqIHRvb2wgYWN0aXZlKSBpdCBkb2VzIG5vdGhpbmcgYW5kIE9TRCB6b29tcyBuYXRpdmVseS4gKGppdC11aSM5NCkgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB3aGVlbFpvb21IYW5kbGVyID0gKGU6IFdoZWVsRXZlbnQpID0+IHtcbiAgICBjb25zdCB2cCA9IHRoaXMudmlld2VyPy52aWV3cG9ydDtcbiAgICBjb25zdCBlbCA9IHRoaXMudmlld2VyPy5lbGVtZW50O1xuICAgIC8vIE5hdiBvbiDihpIgbm8gdG9vbCBhY3RpdmUg4oaSIGxldCBPU0QgaGFuZGxlIHNjcm9sbC16b29tIG5hdGl2ZWx5LlxuICAgIGlmICghdnAgfHwgIWVsIHx8IGUuZGVsdGFZID09PSAwIHx8IHRoaXMudmlld2VyLmlzTW91c2VOYXZFbmFibGVkKCkpIHJldHVybjtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHJlZlBvaW50ID0gdnAucG9pbnRGcm9tUGl4ZWwobmV3IE9TRC5Qb2ludChlLmNsaWVudFggLSByZWN0LmxlZnQsIGUuY2xpZW50WSAtIHJlY3QudG9wKSk7XG4gICAgdnAuem9vbUJ5KGUuZGVsdGFZIDwgMCA/IE9TRF9aT09NX1BFUl9TQ1JPTEwgOiAxIC8gT1NEX1pPT01fUEVSX1NDUk9MTCwgcmVmUG9pbnQpO1xuICAgIHZwLmFwcGx5Q29uc3RyYWludHMoKTtcbiAgfTtcblxuICAvKiogQ3Vyc29yIGZlZWRiYWNrIHBlciBtb2RlIChjcm9zc2hhaXIgd2hpbGUgZHJhd2luZzsgcG9pbnRlciBvdmVyIGEgcmVnaW9uXG4gICAqICBpbiBzZWxlY3QgbW9kZSkuICovXG4gIHByaXZhdGUgdXBkYXRlQ3Vyc29yKG92ZXJSZWdpb246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLnZpZXdlci5jYW52YXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5tb2RlID09PSAnZHJhd3JlY3QnIHx8XG4gICAgICB0aGlzLm1vZGUgPT09ICdkcmF3Y2xvc2VkcGF0aCcgfHxcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2RyYXdvcGVucGF0aCcgfHxcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2RyYXdwb2x5Z29uJyB8fFxuICAgICAgdGhpcy5tb2RlID09PSAnYWRkcG9pbnQnIHx8XG4gICAgICB0aGlzLm1vZGUgPT09ICdkZWxldGVwb2ludCdcbiAgICApIHtcbiAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnY3Jvc3NoYWlyJztcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ21vdmUnKSB7XG4gICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gJ21vdmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnc2VsZWN0Jykge1xuICAgICAgY2FudmFzLnN0eWxlLmN1cnNvciA9IG92ZXJSZWdpb24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnJzsgLy8gT1NEIGRlZmF1bHQgKGdyYWIpXG4gICAgfVxuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHNlbGVjdGVkIHJlZ2lvbidzIHZlcnRpY2VzL2hhbmRsZXMgc2hvdWxkIGJlIGRyYXduLiBTaG93blxuICAgKiAgd2hlbmV2ZXIgYSByZWdpb24gaXMgc2VsZWN0ZWQg4oCUIGluY2x1ZGluZyBgbm9uZWAgKGRpc3BsYXkpIG1vZGUgYW5kIHdoaWxlXG4gICAqICBhbm90aGVyIHRvb2wgKHdhbmQsIGJydXNoLCBTQU3igKYpIGlzIGFjdGl2ZSDigJQgc28gYSBzZWxlY3Rpb24gYWx3YXlzIHJldmVhbHNcbiAgICogIGl0cyB2ZXJ0aWNlcy4gU3VwcHJlc3NlZCBvbmx5IHdoaWxlIGFjdGl2ZWx5IGRyYXdpbmcgYSBicmFuZC1uZXcgc2hhcGUsXG4gICAqICB3aGVyZSBzdHJheSBoYW5kbGVzIHdvdWxkIGJlIG5vaXNlLiAqL1xuICBwcml2YXRlIGdldCBzaG93c1NlbGVjdGVkVmVydGljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubW9kZSAhPT0gJ2RyYXdyZWN0JyAmJlxuICAgICAgdGhpcy5tb2RlICE9PSAnZHJhd3BvbHlnb24nICYmXG4gICAgICB0aGlzLm1vZGUgIT09ICdkcmF3Y2xvc2VkcGF0aCcgJiZcbiAgICAgIHRoaXMubW9kZSAhPT0gJ2RyYXdvcGVucGF0aCdcbiAgICApO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBDbG9zZSBhIGdlc3R1cmUgaW4gZmxpZ2h0IGZpcnN0OiBhIGRyYWcncyBvcGVuIHN0b3JlIGJhdGNoIHdvdWxkXG4gICAgLy8gb3RoZXJ3aXNlIHN1cHByZXNzIGV2ZXJ5IGxhdGVyIHJlZ2lvbi11cGRhdGUgZW1pc3Npb24gYXBwLXdpZGUuXG4gICAgdGhpcy5lbmRHZXN0dXJlKCk7XG4gICAgdGhpcy52aWV3ZXIuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB0aGlzLnBvaW50ZXJDYW5jZWxIYW5kbGVyKTtcbiAgICB0aGlzLnN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnZpZXdlci5lbGVtZW50Py5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIHRoaXMud2hlZWxab29tSGFuZGxlcik7XG4gICAgdGhpcy52aWV3ZXIucmVtb3ZlSGFuZGxlcigndXBkYXRlLXZpZXdwb3J0JywgdGhpcy5jYW1lcmFIYW5kbGVyKTtcbiAgICB0aGlzLnZpZXdlci5yZW1vdmVIYW5kbGVyKCdyZXNpemUnLCB0aGlzLmNhbWVyYUhhbmRsZXIpO1xuICAgIHRoaXMudmlld2VyLnJlbW92ZUhhbmRsZXIoJ3JvdGF0ZScsIHRoaXMuY2FtZXJhSGFuZGxlcik7XG4gICAgaWYgKHRoaXMudHJhY2tlcikgdGhpcy50cmFja2VyLmRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5zdmcucGFyZW50Tm9kZSkgdGhpcy5zdmcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnN2Zyk7XG4gIH1cblxuICAvLyDilIDilIAgY29vcmRpbmF0ZSBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogSW1hZ2UtcGl4ZWwgcG9pbnQgLT4gZWxlbWVudCBwaXhlbCBwb2ludC4gKi9cbiAgcHJpdmF0ZSB0b1B4KGltZ1g6IG51bWJlciwgaW1nWTogbnVtYmVyKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHtcbiAgICByZXR1cm4gaW1hZ2VUb0VsZW1lbnQodGhpcy52aWV3ZXIsIGltZ1gsIGltZ1kpO1xuICB9XG4gIC8qKiBFbGVtZW50IHBpeGVsIHBvaW50IChmcm9tIGEgTW91c2VUcmFja2VyIGV2ZW50KSAtPiBpbWFnZS1waXhlbCBwb2ludCwgcm91bmRlZFxuICAgKiAgdG8gd2hvbGUgcGl4ZWxzICh3aGVyZSBhIGRyYXduIHZlcnRleCBsYW5kcykuICovXG4gIHByaXZhdGUgdG9JbWFnZShwb3M6IGFueSk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG4gICAgY29uc3QgcCA9IGVsZW1lbnRUb0ltYWdlKHRoaXMudmlld2VyLCBwb3MueCwgcG9zLnkpO1xuICAgIHJldHVybiB7IHg6IE1hdGgucm91bmQocC54KSwgeTogTWF0aC5yb3VuZChwLnkpIH07XG4gIH1cbiAgLyoqIEVsZW1lbnQgcGl4ZWwgcG9pbnQgLT4gZXhhY3QgaW1hZ2UgcG9pbnQsIGZvciBoaXQgdGVzdHMuICovXG4gIHByaXZhdGUgdG9Xb3JsZChwb3M6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIGVsZW1lbnRUb0ltYWdlKHRoaXMudmlld2VyLCBwb3MueCwgcG9zLnkpO1xuICB9XG4gIC8qKiBJbWFnZSBwb2ludCAtPiBlbGVtZW50IHB4LCBhcyB0aGUgc2hhcmVkIHJlZ2lvbiBnZW9tZXRyeSB3YW50cyBpdC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0b1NjcmVlbjogVG9TY3JlZW4gPSAoeCwgeSkgPT4ge1xuICAgIGNvbnN0IHEgPSB0aGlzLnRvUHgoeCwgeSk7XG4gICAgcmV0dXJuIFtxLngsIHEueV07XG4gIH07XG5cbiAgLy8g4pSA4pSAIHJlbmRlcmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqIEZvbGxvdyB0aGUgY3VycmVudCBpbWFnZeKGkmVsZW1lbnQgcHJvamVjdGlvbjogdGhlIHJlbmRlcmVyIHJld3JpdGVzIG9uZSB0cmFuc2Zvcm1cbiAgICogIGFuZCByZS1wb3NpdGlvbnMgaXRzIHNjcmVlbi1zcGFjZSBlbGVtZW50cywgb3IgZG9lcyBub3RoaW5nIHdoZW4gaXQgZGlkIG5vdCBtb3ZlLiAqL1xuICBwcml2YXRlIHVwZGF0ZUNhbWVyYSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldENhbWVyYShhZmZpbmVGcm9tUHJvamVjdGlvbih0aGlzLnRvU2NyZWVuKSk7XG4gIH1cblxuICAvKiogUmVidWlsZCBldmVyeXRoaW5nOiB0aGUgcmVnaW9ucyAoaW4gaW1hZ2UgY29vcmRpbmF0ZXMpLCB0aGVpciBsYWJlbHMgYW5kIHRoZSBvdmVybGF5LiAqL1xuICByZWRyYXcoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDYW1lcmEoKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKSwgdGhpcy5zZWxlY3RlZCk7XG4gICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVidWlsZCB0aGUgc2NyZWVuLXNwYWNlIG92ZXJsYXkgb25seTogdGhlIHNlbGVjdGVkIHJlZ2lvbidzIGhhbmRsZXMsIHRoZSBydWJiZXIgYmFuZFxuICAgKiBhbmQgYW55IGluLXByb2dyZXNzIGRyYXdpbmcuIERyYXdpbmcgYW5kIG1hcnF1ZWUgZHJhZ3MgY2FsbCB0aGlzIHJhdGhlciB0aGFuXG4gICAqIHtAbGluayByZWRyYXd9LCBzbyB0aGUgcmVnaW9ucyBhcmUgbm90IHJlYnVpbHQgcGVyIHBvaW50ZXIgbW92ZS5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyT3ZlcmxheSgpOiB2b2lkIHtcbiAgICBjb25zdCBzaGFwZUNvbG9yID0gdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJPdmVybGF5KChsYXllcikgPT4ge1xuICAgICAgLy8gSGFuZGxlcyBvbiB0aGUgc2VsZWN0ZWQgcmVnaW9uLCBzbyB0aGUgdXNlciBjYW4gZ3JhYi9pbnNlcnQvZGVsZXRlXG4gICAgICAvLyB2ZXJ0aWNlcyDigJQgaW4gdGhlIHJlZ2lvbidzIG93biBjb2xvdXIsIHNvIHRoZXkgbWF0Y2ggdGhlIHNoYXBlLlxuICAgICAgY29uc3Qgc2VsID0gdGhpcy5zaG93c1NlbGVjdGVkVmVydGljZXMgPyB0aGlzLnNlbGVjdGVkUmVnaW9uSW5mbygpIDogbnVsbDtcbiAgICAgIGlmIChzZWwpIGRyYXdTZWxlY3Rpb25IYW5kbGVzKGxheWVyLCBzZWwucmVnaW9uLCBzZWwucmVnaW9uLmNvbG9yIHx8IHNoYXBlQ29sb3IpO1xuICAgICAgLy8gUnViYmVyLWJhbmQgKG1hcnF1ZWUpIHNlbGVjdGlvbiBwcmV2aWV3LlxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NlbGVjdCcgJiYgdGhpcy5iYW5kU3RhcnQgJiYgdGhpcy5iYW5kQ3VycmVudCkge1xuICAgICAgICBkcmF3U2VsZWN0aW9uQmFuZChsYXllciwgdGhpcy5iYW5kU3RhcnQsIHRoaXMuYmFuZEN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgLy8gSW4tcHJvZ3Jlc3MgZHJhd2luZyBwcmV2aWV3LlxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2RyYXdyZWN0JyAmJiB0aGlzLnJlY3RTdGFydCAmJiB0aGlzLnJlY3RDdXJyZW50KSB7XG4gICAgICAgIGRyYXdEcmFmdFJlY3QobGF5ZXIsIHRoaXMucmVjdFN0YXJ0LCB0aGlzLnJlY3RDdXJyZW50LCBzaGFwZUNvbG9yKTtcbiAgICAgIH1cbiAgICAgIGlmICgodGhpcy5tb2RlID09PSAnZHJhd2Nsb3NlZHBhdGgnIHx8IHRoaXMubW9kZSA9PT0gJ2RyYXdvcGVucGF0aCcpICYmIHRoaXMucG9seVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgZHJhd0RyYWZ0UGF0aChsYXllciwgdGhpcy5wb2x5UG9pbnRzLCBzaGFwZUNvbG9yKTtcbiAgICAgIH1cbiAgICAgIC8vIENsaWNrLXRvLXBsYWNlIHBvbHlnb24gcHJldmlldzogdGhlIHBvbHlsaW5lIHNvIGZhciArIGEgbWFya2VyIG9uIHRoZVxuICAgICAgLy8gZmlyc3QgdmVydGV4IChjbGljayBpdCB0byBjbG9zZSkuXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnZHJhd3BvbHlnb24nICYmIHRoaXMucG9seVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgZHJhd0RyYWZ0UGF0aChsYXllciwgdGhpcy5wb2x5UG9pbnRzLCBzaGFwZUNvbG9yKTtcbiAgICAgICAgdmVydGV4TWFya2VyKGxheWVyLCB0aGlzLnBvbHlQb2ludHNbMF0ueCwgdGhpcy5wb2x5UG9pbnRzWzBdLnksIHRydWUsIHNoYXBlQ29sb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIGludGVyYWN0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBwcml2YXRlIGdldCBpc0ZyZWVoYW5kKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdkcmF3Y2xvc2VkcGF0aCcgfHwgdGhpcy5tb2RlID09PSAnZHJhd29wZW5wYXRoJztcbiAgfVxuXG4gIHByaXZhdGUgb25QcmVzcyhlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZHJhd3JlY3QnKSB7XG4gICAgICB0aGlzLnJlY3RTdGFydCA9IHRoaXMudG9JbWFnZShlLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucmVjdEN1cnJlbnQgPSB0aGlzLnJlY3RTdGFydDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNGcmVlaGFuZCkge1xuICAgICAgLy8gRnJlZWhhbmQgZHJhdyAobWF0Y2hlcyBQbG90bHkgZHJhd2Nsb3NlZHBhdGgvZHJhd29wZW5wYXRoKTogcHJlc3MgdG9cbiAgICAgIC8vIHN0YXJ0LCBkcmFnIHRvIHRyYWNlLCByZWxlYXNlIHRvIGNvbW1pdC5cbiAgICAgIHRoaXMuZnJlZWhhbmREcmFnZ2luZyA9IHRydWU7XG4gICAgICB0aGlzLnBvbHlQb2ludHMgPSBbdGhpcy50b0ltYWdlKGUucG9zaXRpb24pXTtcbiAgICAgIHRoaXMubGFzdEZyZWVoYW5kUHggPSB7IHg6IGUucG9zaXRpb24ueCwgeTogZS5wb3NpdGlvbi55IH07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdtb3ZlJykge1xuICAgICAgLy8gV2hvbGUtcmVnaW9uIGRyYWcgKCdtb3ZlJyBtb2RlKTogcHJlc3MgaW5zaWRlIHRoZSBzZWxlY3RlZCByZWdpb25cbiAgICAgIC8vIHRvIHRyYW5zbGF0ZSBpdCwgaWdub3JpbmcgdmVydGljZXMvZWRnZXMuXG4gICAgICBjb25zdCBzZWwgPSB0aGlzLnNlbGVjdGVkUmVnaW9uSW5mbygpO1xuICAgICAgaWYgKHNlbCAmJiB0aGlzLmNvbnRhaW5zUG9pbnQoc2VsLnJlZ2lvbiwgZS5wb3NpdGlvbikpIHtcbiAgICAgICAgdGhpcy5zdGFydEVkaXQoJ2JvdW5kcycsICdtb3ZlJywgLTEsIHNlbC5yZWdpb24sIHRoaXMudG9JbWFnZShlLnBvc2l0aW9uKSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAvLyBBIGJlemllciBjb250cm9sIGhhbmRsZSB0YWtlcyB0b3AgcHJpb3JpdHkgKGl0IHNpdHMgb2ZmIHRoZSBhbmNob3IpLCB0aGVuXG4gICAgICAvLyBkcmFnZ2luZyBhIHNpbmdsZSBwb2x5Z29uIHZlcnRleCAob3ZlciBib2R5LW1vdmUvcmVzaXplKS5cbiAgICAgIGNvbnN0IGhpdCA9IHRoaXMuaGl0UG9seWdvbkhhbmRsZShlLnBvc2l0aW9uKTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgY29uc3QgcmVnaW9uID0gdGhpcy5zdG9yZS5nZXRSZWdpb25zKClbdGhpcy5zZWxlY3RlZFt0aGlzLnNlbGVjdGVkLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgaWYgKGhpdC5raW5kID09PSAnYmV6aWVyJykge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0KCdoYW5kbGUnLCAnbW92ZScsIGhpdC5pbmRleCwgcmVnaW9uLCB0aGlzLnRvSW1hZ2UoZS5wb3NpdGlvbiksIGhpdC5zaWRlLCBoaXQucmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXQoJ3ZlcnRleCcsICdtb3ZlJywgaGl0LmluZGV4LCByZWdpb24sIHRoaXMudG9JbWFnZShlLnBvc2l0aW9uKSwgJ291dCcsIGhpdC5yaW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2Ugc3RhcnQgYSBtb3ZlL3Jlc2l6ZSB3aGVuIHByZXNzaW5nIHRoZSBzZWxlY3RlZCByZWdpb24nc1xuICAgICAgLy8gYm9keS9oYW5kbGVzLlxuICAgICAgY29uc3QgZXogPSB0aGlzLmVkaXRab25lQXQoZS5wb3NpdGlvbik7XG4gICAgICBpZiAoZXopIHtcbiAgICAgICAgdGhpcy5zdGFydEVkaXQoJ2JvdW5kcycsIGV6LnpvbmUsIC0xLCB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKVtlei5pbmRleF0sIHRoaXMudG9JbWFnZShlLnBvc2l0aW9uKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXNzIG9uIGVtcHR5IHNwYWNlIC8gYSBub24tc2VsZWN0ZWQgcmVnaW9uOiBiZWdpbiBhIHJ1YmJlci1iYW5kXG4gICAgICAvLyBtdWx0aS1zZWxlY3QuIEEgcGxhaW4gY2xpY2sgKG5vIGRyYWcpIGZhbGxzIHRocm91Z2ggdG8gb25DbGljaywgd2hpY2hcbiAgICAgIC8vIHNpbmdsZS1zZWxlY3RzIG9yIGNsZWFycy5cbiAgICAgIHRoaXMuYmFuZFN0YXJ0ID0gdGhpcy50b0ltYWdlKGUucG9zaXRpb24pO1xuICAgICAgdGhpcy5iYW5kQ3VycmVudCA9IHRoaXMuYmFuZFN0YXJ0O1xuICAgICAgdGhpcy5iYW5kRHJhZ2dlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBCZWdpbiBhbiBlZGl0IGdlc3R1cmUgKG1vdmUvcmVzaXplIG9yIHNpbmdsZS12ZXJ0ZXggZHJhZykgYW5kIG9wZW4gYSBzdG9yZVxuICAgKiAgYmF0Y2ggc28gdGhlIGxpdmUgZHJhZyBlbWl0cyBvbmNlIG9uIHJlbGVhc2UuICovXG4gIHByaXZhdGUgc3RhcnRFZGl0KFxuICAgIGtpbmQ6ICdib3VuZHMnIHwgJ3ZlcnRleCcgfCAnaGFuZGxlJyxcbiAgICB6b25lOiBFZGl0Wm9uZSxcbiAgICB2ZXJ0ZXhJbmRleDogbnVtYmVyLFxuICAgIHJlZ2lvbjogUmVnaW9uLFxuICAgIHN0YXJ0SW1nOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXG4gICAgaGFuZGxlU2lkZTogJ2luJyB8ICdvdXQnID0gJ291dCcsXG4gICAgcmluZyA9IC0xLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmVkaXQgPSB7XG4gICAgICBraW5kLFxuICAgICAgem9uZSxcbiAgICAgIHZlcnRleEluZGV4LFxuICAgICAgcmluZyxcbiAgICAgIGhhbmRsZVNpZGUsXG4gICAgICBpZDogcmVnaW9uLmlkLFxuICAgICAgc3RhcnRJbWcsXG4gICAgICBvcmlnOiBraW5kID09PSAnYm91bmRzJyA/IHRoaXMuc25hcHNob3QocmVnaW9uKSA6IG51bGwsXG4gICAgfTtcbiAgICB0aGlzLmVkaXREcmFnZ2VkID0gZmFsc2U7XG4gICAgdGhpcy5zdG9yZS5iZWdpbkJhdGNoKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZyhlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZHJhd3JlY3QnICYmIHRoaXMucmVjdFN0YXJ0KSB7XG4gICAgICB0aGlzLnJlY3RDdXJyZW50ID0gdGhpcy50b0ltYWdlKGUucG9zaXRpb24pO1xuICAgICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmZyZWVoYW5kRHJhZ2dpbmcgJiYgdGhpcy5pc0ZyZWVoYW5kKSB7XG4gICAgICAvLyBUaGluIHRoZSBwYXRoOiBvbmx5IHNhbXBsZSBvbmNlIHRoZSBjdXJzb3IgaGFzIG1vdmVkIGEgZmV3IHNjcmVlbiBweC5cbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxhc3RGcmVlaGFuZFB4O1xuICAgICAgaWYgKCFsYXN0IHx8IE1hdGguaHlwb3QoZS5wb3NpdGlvbi54IC0gbGFzdC54LCBlLnBvc2l0aW9uLnkgLSBsYXN0LnkpID49IDQpIHtcbiAgICAgICAgdGhpcy5wb2x5UG9pbnRzLnB1c2godGhpcy50b0ltYWdlKGUucG9zaXRpb24pKTtcbiAgICAgICAgdGhpcy5sYXN0RnJlZWhhbmRQeCA9IHsgeDogZS5wb3NpdGlvbi54LCB5OiBlLnBvc2l0aW9uLnkgfTtcbiAgICAgICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgIHRoaXMuZWRpdERyYWdnZWQgPSB0cnVlO1xuICAgICAgdGhpcy5hcHBseUVkaXQodGhpcy50b0ltYWdlKGUucG9zaXRpb24pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYmFuZFN0YXJ0KSB7XG4gICAgICB0aGlzLmJhbmRDdXJyZW50ID0gdGhpcy50b0ltYWdlKGUucG9zaXRpb24pO1xuICAgICAgdGhpcy5iYW5kRHJhZ2dlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlck92ZXJsYXkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uUmVsZWFzZShlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZHJhd3JlY3QnICYmIHRoaXMucmVjdFN0YXJ0KSB7XG4gICAgICBjb25zdCBlbmQgPSB0aGlzLnRvSW1hZ2UoZS5wb3NpdGlvbik7XG4gICAgICBjb25zdCB4ID0gTWF0aC5taW4odGhpcy5yZWN0U3RhcnQueCwgZW5kLngpO1xuICAgICAgY29uc3QgeSA9IE1hdGgubWluKHRoaXMucmVjdFN0YXJ0LnksIGVuZC55KTtcbiAgICAgIGNvbnN0IHcgPSBNYXRoLmFicyhlbmQueCAtIHRoaXMucmVjdFN0YXJ0LngpO1xuICAgICAgY29uc3QgaCA9IE1hdGguYWJzKGVuZC55IC0gdGhpcy5yZWN0U3RhcnQueSk7XG4gICAgICB0aGlzLnJlY3RTdGFydCA9IHRoaXMucmVjdEN1cnJlbnQgPSBudWxsO1xuICAgICAgaWYgKHcgPiAyICYmIGggPiAyKSB0aGlzLmNvbW1pdFJlY3RhbmdsZSh4LCB5LCB3LCBoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZnJlZWhhbmREcmFnZ2luZykge1xuICAgICAgdGhpcy5mcmVlaGFuZERyYWdnaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmxhc3RGcmVlaGFuZFB4ID0gbnVsbDtcbiAgICAgIC8vIENsb3NlZCA9IGZyZWVmb3JtIChkcmF3Y2xvc2VkcGF0aCk7IG9wZW4gPSBwb2x5bGluZSAoZHJhd29wZW5wYXRoKS5cbiAgICAgIHRoaXMuY29tbWl0UG9seWdvbih0aGlzLm1vZGUgPT09ICdkcmF3Y2xvc2VkcGF0aCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBNb3ZlL3Jlc2l6ZSBhbHJlYWR5IGFwcGxpZWQgbGl2ZTsgZmx1c2ggdGhlIGNvYWxlc2NlZCBlZGl0cyArIGVuZCB0aGVcbiAgICAvLyBnZXN0dXJlIChrZWVwIHNlbGVjdGlvbikuXG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5zdG9yZS5lbmRCYXRjaCgpO1xuICAgICAgdGhpcy5lZGl0ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRmluaXNoIGEgcnViYmVyLWJhbmQgc2VsZWN0aW9uOiBzZWxlY3QgZXZlcnkgcmVnaW9uIHRoZSBiYW5kIGludGVyc2VjdHMuXG4gICAgaWYgKHRoaXMuYmFuZFN0YXJ0KSB7XG4gICAgICBjb25zdCBzdGFydCA9IHRoaXMuYmFuZFN0YXJ0O1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5iYW5kQ3VycmVudCA/PyBzdGFydDtcbiAgICAgIHRoaXMuYmFuZFN0YXJ0ID0gdGhpcy5iYW5kQ3VycmVudCA9IG51bGw7XG4gICAgICBjb25zdCB4MCA9IE1hdGgubWluKHN0YXJ0LngsIGVuZC54KSxcbiAgICAgICAgeTAgPSBNYXRoLm1pbihzdGFydC55LCBlbmQueSk7XG4gICAgICBjb25zdCB4MSA9IE1hdGgubWF4KHN0YXJ0LngsIGVuZC54KSxcbiAgICAgICAgeTEgPSBNYXRoLm1heChzdGFydC55LCBlbmQueSk7XG4gICAgICAvLyBPbmx5IGEgcmVhbCBkcmFnIHNlbGVjdHM7IGEgY2xpY2stc2l6ZWQgYmFuZCBmYWxscyB0aHJvdWdoIHRvIG9uQ2xpY2suXG4gICAgICBpZiAodGhpcy5iYW5kRHJhZ2dlZCAmJiAoeDEgLSB4MCA+IDIgfHwgeTEgLSB5MCA+IDIpKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRTaGFwZUluZGljZXMocmVnaW9uc0luUmVjdCh0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKSwgeDAsIHkwLCB4MSwgeTEpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVuZGVyT3ZlcmxheSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25DbGljayhlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2VsZWN0Jykge1xuICAgICAgLy8gQSBtb3ZlL3Jlc2l6ZS92ZXJ0ZXggZHJhZyBvciBhIHJ1YmJlci1iYW5kIGRyYWcgYWxzbyBlbmRzIHdpdGggYSBjbGlja1xuICAgICAgLy8gZXZlbnQg4oCUIGRvbid0IHRyZWF0IGl0IGFzIGEgcmUtc2VsZWN0aW9uLlxuICAgICAgaWYgKHRoaXMuZWRpdERyYWdnZWQpIHtcbiAgICAgICAgdGhpcy5lZGl0RHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5iYW5kRHJhZ2dlZCkge1xuICAgICAgICB0aGlzLmJhbmREcmFnZ2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFNoaWZ0IChvciBDbWQvQ3RybCkgdG9nZ2xlcyB0aGUgY2xpY2tlZCByZWdpb24gaW4vb3V0IG9mIHRoZSBjdXJyZW50XG4gICAgICAvLyBzZWxlY3Rpb247IGEgcGxhaW4gY2xpY2sgcmVwbGFjZXMgaXQuXG4gICAgICBjb25zdCBvZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgICAgIGNvbnN0IGFkZGl0aXZlID0gISFvZSAmJiAob2Uuc2hpZnRLZXkgfHwgb2UubWV0YUtleSB8fCBvZS5jdHJsS2V5KTtcbiAgICAgIHRoaXMuc2VsZWN0QXQodGhpcy50b1dvcmxkKGUucG9zaXRpb24pLCBhZGRpdGl2ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdkcmF3cG9seWdvbicpIHtcbiAgICAgIHRoaXMub25EcmF3UG9seWdvbkNsaWNrKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlID09PSAnYWRkcG9pbnQnKSB7XG4gICAgICAvLyBJbnNlcnQgYSB2ZXJ0ZXggb24gdGhlIGNsaWNrZWQgZWRnZSDigJQgZXh0ZXJpb3Igb3IgYW4gaW50ZXJpb3IgcmluZy5cbiAgICAgIGNvbnN0IHNlbCA9IHRoaXMuc2VsZWN0ZWRSZWdpb25JbmZvKCk7XG4gICAgICBjb25zdCBlZGdlID0gc2VsID8gdGhpcy5oaXRFZGdlKGUucG9zaXRpb24sIHNlbC5yZWdpb24pIDogbnVsbDtcbiAgICAgIGlmIChzZWwgJiYgZWRnZSkge1xuICAgICAgICBpZiAoZWRnZS5yaW5nIDwgMCkgdGhpcy5zdG9yZS5hZGRWZXJ0ZXgoc2VsLnJlZ2lvbi5pZCwgZWRnZS5zZWdJbmRleCwgZWRnZS54LCBlZGdlLnkpO1xuICAgICAgICBlbHNlIHRoaXMuc3RvcmUuYWRkSG9sZVZlcnRleChzZWwucmVnaW9uLmlkLCBlZGdlLnJpbmcsIGVkZ2Uuc2VnSW5kZXgsIGVkZ2UueCwgZWRnZS55KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2RlbGV0ZXBvaW50Jykge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBjbGlja2VkIHZlcnRleCDigJQgZXh0ZXJpb3Igb3IgYW4gaW50ZXJpb3IgcmluZyAoaml0LXVpIzg1KS5cbiAgICAgIGNvbnN0IHNlbCA9IHRoaXMuc2VsZWN0ZWRSZWdpb25JbmZvKCk7XG4gICAgICBjb25zdCB2aCA9IHRoaXMuaGl0UG9seWdvbkhhbmRsZShlLnBvc2l0aW9uLCBmYWxzZSk7XG4gICAgICBpZiAoc2VsICYmIHZoKSB7XG4gICAgICAgIGlmICh2aC5yaW5nIDwgMCkgdGhpcy5zdG9yZS5kZWxldGVWZXJ0ZXgoc2VsLnJlZ2lvbi5pZCwgdmguaW5kZXgpO1xuICAgICAgICBlbHNlIHRoaXMuc3RvcmUuZGVsZXRlSG9sZVZlcnRleChzZWwucmVnaW9uLmlkLCB2aC5yaW5nLCB2aC5pbmRleCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrLXRvLXBsYWNlIHBvbHlnb24gKCdkcmF3cG9seWdvbicpOiB0aGUgZmlyc3QgY2xpY2sgc3RhcnRzIHRoZVxuICAgKiBwb2x5Z29uLCBlYWNoIHN1YnNlcXVlbnQgY2xpY2sgYWRkcyBhIHZlcnRleCwgYW5kIGNsaWNraW5nIG5lYXIgdGhlIGZpcnN0XG4gICAqIHZlcnRleCAod2l0aCBhdCBsZWFzdCAzIHBsYWNlZCkgY2xvc2VzIGFuZCBjb21taXRzIGl0LlxuICAgKi9cbiAgcHJpdmF0ZSBvbkRyYXdQb2x5Z29uQ2xpY2soZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgcHQgPSB0aGlzLnRvSW1hZ2UoZS5wb3NpdGlvbik7XG4gICAgaWYgKCF0aGlzLmRyYXdpbmdQb2x5Z29uKSB7XG4gICAgICB0aGlzLnBvbHlQb2ludHMgPSBbcHRdO1xuICAgICAgdGhpcy5kcmF3aW5nUG9seWdvbiA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlck92ZXJsYXkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLnRvUHgodGhpcy5wb2x5UG9pbnRzWzBdLngsIHRoaXMucG9seVBvaW50c1swXS55KTtcbiAgICBjb25zdCBvbkZpcnN0ID0gTWF0aC5oeXBvdChlLnBvc2l0aW9uLnggLSBmaXJzdC54LCBlLnBvc2l0aW9uLnkgLSBmaXJzdC55KSA8PSBFRElUX1RPTF9QWDtcbiAgICBpZiAob25GaXJzdCAmJiB0aGlzLnBvbHlQb2ludHMubGVuZ3RoID49IDMpIHtcbiAgICAgIHRoaXMuY29tbWl0UG9seWdvbih0cnVlKTsgLy8gY2xvc2VzICsgcmVzZXRzIGluLXByb2dyZXNzIChpbmNsLiBkcmF3aW5nUG9seWdvbilcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wb2x5UG9pbnRzLnB1c2gocHQpO1xuICAgIHRoaXMucmVuZGVyT3ZlcmxheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvdmVyIGZlZWRiYWNrIGluIHNlbGVjdCBtb2RlOiBtb3ZlL3Jlc2l6ZSBjdXJzb3JzIG92ZXIgdGhlIHNlbGVjdGVkXG4gICAqIHJlZ2lvbidzIGJvZHkvZWRnZXMvY29ybmVycywgYSBwb2ludGVyIG92ZXIgYW55IG90aGVyIHJlZ2lvbi5cbiAgICovXG4gIHByaXZhdGUgb25Nb3ZlKGU6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGUgIT09ICdzZWxlY3QnKSByZXR1cm47XG4gICAgLy8gQSBncmFiYmFibGUgYmV6aWVyIGNvbnRyb2wgaGFuZGxlIG9yIHZlcnRleCBvZiB0aGUgc2VsZWN0ZWQgcG9seWdvbiB0YWtlc1xuICAgIC8vIHByaW9yaXR5LlxuICAgIGlmICh0aGlzLmhpdFBvbHlnb25IYW5kbGUoZS5wb3NpdGlvbikpIHtcbiAgICAgIHRoaXMudmlld2VyLmNhbnZhcy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV6ID0gdGhpcy5lZGl0Wm9uZUF0KGUucG9zaXRpb24pO1xuICAgIGlmIChleikge1xuICAgICAgdGhpcy52aWV3ZXIuY2FudmFzLnN0eWxlLmN1cnNvciA9IFpPTkVfQ1VSU09SW2V6LnpvbmVdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUN1cnNvcih0aGlzLnJlZ2lvbkluZGV4QXQodGhpcy50b1dvcmxkKGUucG9zaXRpb24pKSA+PSAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbW92ZS9yZXNpemUgem9uZSB1bmRlciB0aGUgY3Vyc29yIGZvciB0aGUgY3VycmVudGx5LXNlbGVjdGVkIHJlZ2lvblxuICAgKiAocmVjdGFuZ2xlcyBnZXQgZWRnZS9jb3JuZXIgaGFuZGxlcyArIGJvZHk7IHBvbHlnb25zIGdldCBib2R5LW1vdmUgb25seSksXG4gICAqIG9yIG51bGwgaWYgdGhlIGN1cnNvciBpc24ndCBvdmVyIHRoZSBzZWxlY3RlZCByZWdpb24uXG4gICAqL1xuICBwcml2YXRlIGVkaXRab25lQXQocG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSk6IHsgem9uZTogRWRpdFpvbmU7IGluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkW3RoaXMuc2VsZWN0ZWQubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgcmVnaW9uID0gdGhpcy5zdG9yZS5nZXRSZWdpb25zKClbaW5kZXhdO1xuICAgIGlmICghcmVnaW9uKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBiID0gcmVnaW9uLmJvdW5kcztcbiAgICBpZiAoYiBpbnN0YW5jZW9mIFJlY3RhbmdsZSkge1xuICAgICAgY29uc3QgYSA9IHRoaXMudG9QeChiLngsIGIueSk7XG4gICAgICBjb25zdCBjID0gdGhpcy50b1B4KGIueCArIGIud2lkdGgsIGIueSArIGIuaGVpZ2h0KTtcbiAgICAgIGNvbnN0IHpvbmUgPSByZWN0Wm9uZShwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB7XG4gICAgICAgIHgwOiBNYXRoLm1pbihhLngsIGMueCksXG4gICAgICAgIHkwOiBNYXRoLm1pbihhLnksIGMueSksXG4gICAgICAgIHgxOiBNYXRoLm1heChhLngsIGMueCksXG4gICAgICAgIHkxOiBNYXRoLm1heChhLnksIGMueSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB6b25lID8geyB6b25lLCBpbmRleCB9IDogbnVsbDtcbiAgICB9XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBQb2x5Z29uIHx8IGIgaW5zdGFuY2VvZiBNdWx0aVBvbHlnb24pIHtcbiAgICAgIC8vIFBvbHlnb25zICsgbXVsdGktcGFydCByZWdpb25zIHN1cHBvcnQgd2hvbGUtcmVnaW9uIG1vdmUgKG5vIHJlc2l6ZSB6b25lcykuXG4gICAgICByZXR1cm4gdGhpcy5jb250YWluc1BvaW50KHJlZ2lvbiwgcG9zaXRpb24pID8geyB6b25lOiAnbW92ZScsIGluZGV4IH0gOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBUaGUgY3VycmVudGx5LXNlbGVjdGVkIHJlZ2lvbiAodGhlIGxhc3Qgb25lIHNlbGVjdGVkKSwgb3IgbnVsbC4gKi9cbiAgcHJpdmF0ZSBzZWxlY3RlZFJlZ2lvbkluZm8oKTogeyByZWdpb246IFJlZ2lvbjsgaW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRbdGhpcy5zZWxlY3RlZC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCByZWdpb24gPSB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKVtpbmRleF07XG4gICAgcmV0dXJuIHJlZ2lvbiA/IHsgcmVnaW9uLCBpbmRleCB9IDogbnVsbDtcbiAgfVxuXG4gIC8qKiBUaGUgYmV6aWVyIGNvbnRyb2wgaGFuZGxlICh3aGVuIGBiZXppZXJgKSBvciB2ZXJ0ZXggb2YgdGhlIHNlbGVjdGVkIHBvbHlnb25cbiAgICogIHVuZGVyIHRoZSBjdXJzb3IgKHNjcmVlbi1waXhlbCB0b2xlcmFuY2UpLCBvciBudWxsLiBSZWN0YW5nbGVzIGhhdmUgbm9cbiAgICogIGVkaXRhYmxlIHZlcnRpY2VzICh0aGVpciBjb3JuZXJzIGFyZSByZXNpemUgem9uZXMsIHNlZSB7QGxpbmsgcmVjdFpvbmV9KS4gKi9cbiAgcHJpdmF0ZSBoaXRQb2x5Z29uSGFuZGxlKFxuICAgIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXG4gICAgYmV6aWVyID0gdHJ1ZSxcbiAgKTogeyBraW5kOiAndmVydGV4JyB8ICdiZXppZXInOyByaW5nOiBudW1iZXI7IGluZGV4OiBudW1iZXI7IHNpZGU6ICdpbicgfCAnb3V0JyB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsID0gdGhpcy5zZWxlY3RlZFJlZ2lvbkluZm8oKTtcbiAgICBpZiAoIXNlbCB8fCAhKHNlbC5yZWdpb24uYm91bmRzIGluc3RhbmNlb2YgUG9seWdvbikpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGhpdCA9IGhpdEhhbmRsZShzZWwucmVnaW9uLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnRvU2NyZWVuLCBFRElUX1RPTF9QWCwgeyBiZXppZXIgfSk7XG4gICAgaWYgKCFoaXQgfHwgaGl0LmtpbmQgPT09ICdjb3JuZXInKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4geyBraW5kOiBoaXQua2luZCwgcmluZzogaGl0LnJpbmcsIGluZGV4OiBoaXQuaW5kZXgsIHNpZGU6IGhpdC5raW5kID09PSAnYmV6aWVyJyA/IGhpdC5zaWRlIDogJ291dCcgfTtcbiAgfVxuXG4gIC8qKiBUaGUgZWRnZSBvZiBgcmVnaW9uYCdzIHBvbHlnb24gbmVhcmVzdCB0aGUgY3Vyc29yICh3aXRoaW4gdG9sZXJhbmNlKSwgd2l0aFxuICAgKiAgdGhlIGNsaWNrZWQgcG9pbnQgaW4gaW1hZ2UgY29vcmRzIGFzIHRoZSBpbnNlcnRpb24gcG9zaXRpb24sIG9yIG51bGwuICovXG4gIHByaXZhdGUgaGl0RWRnZShcbiAgICBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LFxuICAgIHJlZ2lvbjogUmVnaW9uLFxuICApOiB7IHJpbmc6IG51bWJlcjsgc2VnSW5kZXg6IG51bWJlcjsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGNvbnN0IGVkZ2UgPSBuZWFyZXN0RWRnZShyZWdpb24sIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMudG9TY3JlZW4pO1xuICAgIGlmICghZWRnZSB8fCBlZGdlLmRpc3QgPiBFRElUX1RPTF9QWCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgaW1nID0gdGhpcy50b0ltYWdlKHBvc2l0aW9uKTtcbiAgICByZXR1cm4geyByaW5nOiBlZGdlLnJpbmcsIHNlZ0luZGV4OiBlZGdlLnNlZ0luZGV4LCB4OiBpbWcueCwgeTogaW1nLnkgfTtcbiAgfVxuXG4gIC8qKiBTbmFwc2hvdCB0aGUgc2VsZWN0ZWQgcmVnaW9uJ3MgZ2VvbWV0cnkgYXQgdGhlIHN0YXJ0IG9mIGFuIGVkaXQuICovXG4gIHByaXZhdGUgc25hcHNob3QocmVnaW9uOiBSZWdpb24pOiBFZGl0U25hcHNob3Qge1xuICAgIGNvbnN0IGIgPSByZWdpb24uYm91bmRzO1xuICAgIGlmIChiIGluc3RhbmNlb2YgUG9seWdvbiB8fCBiIGluc3RhbmNlb2YgTXVsdGlQb2x5Z29uKSByZXR1cm4geyBraW5kOiAnc2hhcGUnLCBib3VuZHM6IGIgfTtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIFJlY3RhbmdsZSkgcmV0dXJuIHsga2luZDogJ3JlY3QnLCB4OiBiLngsIHk6IGIueSwgdzogYi53aWR0aCwgaDogYi5oZWlnaHQgfTtcbiAgICByZXR1cm4geyBraW5kOiAncmVjdCcsIHg6IDAsIHk6IDAsIHc6IDAsIGg6IDAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSB0aGUgaW4tcHJvZ3Jlc3MgbW92ZS9yZXNpemUgdG8gdGhlIHJlZ2lvbiwgbGl2ZSwgdGhyb3VnaCB0aGVcbiAgICogUmVnaW9uLW5hdGl2ZSBlZGl0IEFQSS4gUmVjb21wdXRlZCBhYnNvbHV0ZWx5IGZyb20gdGhlIGdlc3R1cmUtc3RhcnRcbiAgICogc25hcHNob3QgKGBvcmlnYCkgKyB0aGUgdG90YWwgZGVsdGEsIHNvIGVhY2ggZnJhbWUgaXMgaWRlbXBvdGVudC5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlFZGl0KGN1ckltZzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXQpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmVkaXQua2luZCA9PT0gJ3ZlcnRleCcpIHtcbiAgICAgIC8vIERyYWcgYSBzaW5nbGUgdmVydGV4IHRvIHRoZSBjdXJzb3IgKGFic29sdXRlIOKAlCBpZGVtcG90ZW50KS4gUm91dGUgdG8gdGhlXG4gICAgICAvLyBleHRlcmlvciBvciB0aGUgbWF0Y2hpbmcgaW50ZXJpb3IgcmluZyAoaG9sZSkg4oCUIGppdC11aSM4NS5cbiAgICAgIGlmICh0aGlzLmVkaXQucmluZyA8IDApIHtcbiAgICAgICAgdGhpcy5zdG9yZS5tb3ZlVmVydGV4KHRoaXMuZWRpdC5pZCwgdGhpcy5lZGl0LnZlcnRleEluZGV4LCBjdXJJbWcueCwgY3VySW1nLnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yZS5tb3ZlSG9sZVZlcnRleCh0aGlzLmVkaXQuaWQsIHRoaXMuZWRpdC5yaW5nLCB0aGlzLmVkaXQudmVydGV4SW5kZXgsIGN1ckltZy54LCBjdXJJbWcueSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlZHJhdygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXQua2luZCA9PT0gJ2hhbmRsZScpIHtcbiAgICAgIC8vIERyYWcgYSBiZXppZXIgY29udHJvbCBoYW5kbGUgdG8gdGhlIGN1cnNvciDigJQgZXh0ZXJpb3IgKHJpbmcgLTEpIG9yIGEgZG9udXQgaG9sZSByaW5nLlxuICAgICAgaWYgKHRoaXMuZWRpdC5yaW5nIDwgMCkge1xuICAgICAgICB0aGlzLnN0b3JlLm1vdmVCZXppZXJIYW5kbGUodGhpcy5lZGl0LmlkLCB0aGlzLmVkaXQudmVydGV4SW5kZXgsIHRoaXMuZWRpdC5oYW5kbGVTaWRlLCBjdXJJbWcueCwgY3VySW1nLnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yZS5tb3ZlSG9sZUJlemllckhhbmRsZShcbiAgICAgICAgICB0aGlzLmVkaXQuaWQsXG4gICAgICAgICAgdGhpcy5lZGl0LnJpbmcsXG4gICAgICAgICAgdGhpcy5lZGl0LnZlcnRleEluZGV4LFxuICAgICAgICAgIHRoaXMuZWRpdC5oYW5kbGVTaWRlLFxuICAgICAgICAgIGN1ckltZy54LFxuICAgICAgICAgIGN1ckltZy55LFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWRyYXcoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkeCA9IGN1ckltZy54IC0gdGhpcy5lZGl0LnN0YXJ0SW1nLng7XG4gICAgY29uc3QgZHkgPSBjdXJJbWcueSAtIHRoaXMuZWRpdC5zdGFydEltZy55O1xuXG4gICAgY29uc3QgbyA9IHRoaXMuZWRpdC5vcmlnO1xuICAgIGlmICghbykgcmV0dXJuO1xuICAgIGlmIChvLmtpbmQgPT09ICdyZWN0Jykge1xuICAgICAgY29uc3QgYm94ID0gcmVzaXplUmVjdCh7IHg6IG8ueCwgeTogby55LCB3aWR0aDogby53LCBoZWlnaHQ6IG8uaCB9LCB0aGlzLmVkaXQuem9uZSwgZHgsIGR5KTtcbiAgICAgIHRoaXMuc3RvcmUudXBkYXRlQm91bmRzKHRoaXMuZWRpdC5pZCwgT2JqZWN0LmFzc2lnbihuZXcgUmVjdGFuZ2xlKCksIGJveCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQb2x5Z29uIC8gbXVsdGktcGFydCByZWdpb246IHRyYW5zbGF0ZSBldmVyeSB2ZXJ0ZXgsIGhvbGUgYW5kIHBhcnQsIHJvdW5kZWQgdG9cbiAgICAgIC8vIHdob2xlIHBpeGVscy4gQmV6aWVyIGhhbmRsZSBvZmZzZXRzIGFyZSByZWxhdGl2ZSwgc28gdGhleSBjYXJyeSBvdmVyIHVuY2hhbmdlZC5cbiAgICAgIHRoaXMuc3RvcmUudXBkYXRlQm91bmRzKHRoaXMuZWRpdC5pZCwgdHJhbnNsYXRlQm91bmRzKG8uYm91bmRzLCBkeCwgZHksIE1hdGgucm91bmQpKTtcbiAgICB9XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0QXQocHQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSwgYWRkaXRpdmUgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMucmVnaW9uSW5kZXhBdChwdCk7XG4gICAgaWYgKGFkZGl0aXZlKSB7XG4gICAgICAvLyBTaGlmdC1jbGljayBvbiBlbXB0eSBzcGFjZSBrZWVwcyB0aGUgY3VycmVudCBzZWxlY3Rpb24uXG4gICAgICBpZiAoaWR4IDwgMCkgcmV0dXJuO1xuICAgICAgLy8gYHRoaXMuc2VsZWN0ZWRgIG1pcnJvcnMgdGhlIHN0b3JlJ3MgY3VycmVudCBzZWxlY3Rpb24gKGtlcHQgaW4gc3luYyB2aWFcbiAgICAgIC8vIHRoZSBzdWJzY3JpcHRpb24pLCBzbyBpdCdzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggd2l0aG91dCBhIHN5bmMgZ2V0dGVyLlxuICAgICAgY29uc3QgY3VyID0gdGhpcy5zZWxlY3RlZC5zbGljZSgpO1xuICAgICAgY29uc3QgYXQgPSBjdXIuaW5kZXhPZihpZHgpO1xuICAgICAgaWYgKGF0ID49IDApXG4gICAgICAgIGN1ci5zcGxpY2UoYXQsIDEpOyAvLyB0b2dnbGUgb2ZmXG4gICAgICBlbHNlIGN1ci5wdXNoKGlkeCk7IC8vIHRvZ2dsZSBvblxuICAgICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFNoYXBlSW5kaWNlcyhjdXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0b3JlLnNldFNlbGVjdGVkU2hhcGVJbmRpY2VzKGlkeCA+PSAwID8gW2lkeF0gOiBbXSk7XG4gIH1cblxuICAvKiogSW5kZXggb2YgdGhlIHRvcG1vc3QgcmVnaW9uIHVuZGVyIGFuIGltYWdlIHBvaW50LCBvciAtMS4gKi9cbiAgcHJpdmF0ZSByZWdpb25JbmRleEF0KHB0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pOiBudW1iZXIge1xuICAgIGNvbnN0IG9wdHMgPSB7IHRvU2NyZWVuOiB0aGlzLnRvU2NyZWVuLCB0b2xQeDogT1BFTl9QQVRIX1RPTF9QWCB9O1xuICAgIHJldHVybiB0b3Btb3N0UmVnaW9uQXQodGhpcy5zdG9yZS5nZXRSZWdpb25zKCksIHB0LngsIHB0LnksIG9wdHMpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGVsZW1lbnQtcGl4ZWwgYHBvc2l0aW9uYCBsYW5kcyBvbiBgcmVnaW9uYCAoc2VlIGByZWdpb25Db250YWluc2ApLiAqL1xuICBwcml2YXRlIGNvbnRhaW5zUG9pbnQocmVnaW9uOiBSZWdpb24sIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pOiBib29sZWFuIHtcbiAgICBjb25zdCBwdCA9IHRoaXMudG9Xb3JsZChwb3NpdGlvbik7XG4gICAgcmV0dXJuIHJlZ2lvbkNvbnRhaW5zKHJlZ2lvbiwgcHQueCwgcHQueSwgeyB0b1NjcmVlbjogdGhpcy50b1NjcmVlbiwgdG9sUHg6IE9QRU5fUEFUSF9UT0xfUFggfSk7XG4gIH1cblxuICAvKiogQWJhbmRvbiB3aGF0ZXZlciBwb2ludGVyIGdlc3R1cmUgaXMgaW4gcHJvZ3Jlc3MgKGRyYXdpbmcsIGVkaXQgZHJhZyxcbiAgICogIHJ1YmJlciBiYW5kKSBhbmQgY2xvc2UgaXRzIHN0b3JlIGJhdGNoLiAqL1xuICBwcml2YXRlIGVuZEdlc3R1cmUoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldEluUHJvZ3Jlc3MoKTtcbiAgICB0aGlzLmJhbmRTdGFydCA9IHRoaXMuYmFuZEN1cnJlbnQgPSBudWxsO1xuICAgIHRoaXMuYmFuZERyYWdnZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRJblByb2dyZXNzKCk6IHZvaWQge1xuICAgIHRoaXMucmVjdFN0YXJ0ID0gdGhpcy5yZWN0Q3VycmVudCA9IG51bGw7XG4gICAgdGhpcy5wb2x5UG9pbnRzID0gW107XG4gICAgdGhpcy5mcmVlaGFuZERyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3aW5nUG9seWdvbiA9IGZhbHNlO1xuICAgIHRoaXMubGFzdEZyZWVoYW5kUHggPSBudWxsO1xuICAgIC8vIENsb3NlIGFueSBvcGVuIGVkaXQgYmF0Y2ggKGUuZy4gYSBtb2RlIHN3aXRjaCBtaWQtZHJhZykgc28gdGhlIHN0b3JlJ3NcbiAgICAvLyBlbWl0IGNvYWxlc2NpbmcgZG9lc24ndCBnZXQgc3R1Y2suXG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5zdG9yZS5lbmRCYXRjaCgpO1xuICAgICAgdGhpcy5lZGl0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgY29tbWl0IHRvIHRoZSBzdG9yZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgcHJpdmF0ZSBjb21taXRSZWN0YW5nbGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcmVnaW9uID0gbmV3IFJlZ2lvbigpO1xuICAgIGNvbnN0IHJlY3QgPSBuZXcgUmVjdGFuZ2xlKCk7XG4gICAgcmVjdC54ID0geDtcbiAgICByZWN0LnkgPSB5O1xuICAgIHJlY3Qud2lkdGggPSB3O1xuICAgIHJlY3QuaGVpZ2h0ID0gaDtcbiAgICByZWdpb24uYm91bmRzID0gcmVjdDtcbiAgICByZWdpb24uY29sb3IgPSB0aGlzLnN0b3JlLmdldFNoYXBlQ29sb3IoKTtcbiAgICB0aGlzLmNvbW1pdFJlZ2lvbihyZWdpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21taXRQb2x5Z29uKGNsb3NlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvbHlQb2ludHMubGVuZ3RoIDwgKGNsb3NlZCA/IDMgOiAyKSkge1xuICAgICAgdGhpcy5yZXNldEluUHJvZ3Jlc3MoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVnaW9uID0gbmV3IFJlZ2lvbigpO1xuICAgIHJlZ2lvbi5ib3VuZHMgPSBtYWtlUG9seWdvbihcbiAgICAgIHRoaXMucG9seVBvaW50cy5tYXAoKHApID0+IHAueCksXG4gICAgICB0aGlzLnBvbHlQb2ludHMubWFwKChwKSA9PiBwLnkpLFxuICAgICAgeyBjbG9zZWQgfSxcbiAgICApO1xuICAgIHJlZ2lvbi5jb2xvciA9IHRoaXMuc3RvcmUuZ2V0U2hhcGVDb2xvcigpO1xuICAgIHRoaXMucmVzZXRJblByb2dyZXNzKCk7XG4gICAgdGhpcy5jb21taXRSZWdpb24ocmVnaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBmcmVzaGx5LWRyYXduIHJlZ2lvbiB0byB0aGUgc2hhcmVkIHN0b3JlIGFuZCByZWRyYXcgaW1tZWRpYXRlbHkuIFRoZVxuICAgKiBzdG9yZSBtaW50cyB0aGUgaWQsIHNlbGVjdHMgdGhlIG5ldyByZWdpb24gKHNvIGl0IHJlbmRlcnMgc29saWQvaGlnaGxpZ2h0ZWRcbiAgICogcmF0aGVyIHRoYW4gYXMgYSBkYXNoZWQgaW4tcHJvZ3Jlc3Mgc2hhcGUpIGFuZCBlbWl0cyB0aGUgZnVsbCByZWdpb24gbGlzdCB0b1xuICAgKiB0aGUgUmVnaW9uIEVkaXRvciDigJQgd2Ugc3RpbGwgcmVkcmF3IGxvY2FsbHkgcmF0aGVyIHRoYW4gcmVseWluZyBzb2xlbHkgb25cbiAgICogdGhlIHN0b3JlJ3MgdXBkYXRlIGV2ZW50LCB3aGljaCBjYW4gYmUgc3dhbGxvd2VkIHdoZW4gUGxvdGx5IGlzbid0IGFjdGl2ZS5cbiAgICovXG4gIHByaXZhdGUgY29tbWl0UmVnaW9uKHJlZ2lvbjogUmVnaW9uKTogdm9pZCB7XG4gICAgLy8gRGVmYXVsdCBjbGFzcy9hbm5vdGF0aW9uIG5hbWUsIG1hdGNoaW5nIHRoZSBQbG90bHkgYmFja2VuZCBhbmQgdGhlIFJlZ2lvblxuICAgIC8vIEVkaXRvcidzIFwiQWRkXCIgYWN0aW9ucyBzbyBhIGZyZXNobHkgZHJhd24gcmVnaW9uIGlzbid0IHVubGFiZWxlZC5cbiAgICBpZiAocmVnaW9uLmxhYmVsID09IG51bGwpIHJlZ2lvbi5sYWJlbCA9ICdSZWdpb24nO1xuICAgIHRoaXMuc3RvcmUuYWRkUmVnaW9uKHJlZ2lvbik7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBzZWxlY3RlZCByZWdpb24ocykgdG8vZnJvbSBhIGJlemllciBjdXJ2ZSAodG9CZXppZXIgPSB0cnVlIC9cbiAgICogdG9Qb2x5Z29uID0gZmFsc2UpLiBPbmUtc2hvdDsgdGhlIGFuY2hvcnMgYXJlIHVuY2hhbmdlZCxcbiAgICogb25seSB0aGUgc21vb3RoLWN1cnZlIHJlbmRlcmluZyBpcyB0b2dnbGVkLlxuICAgKi9cbiAgc2V0U2VsZWN0ZWRCZXppZXIoYmV6aWVyOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgcmVnaW9ucyA9IHRoaXMuc3RvcmUuZ2V0UmVnaW9ucygpO1xuICAgIGZvciAoY29uc3QgaWR4IG9mIHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IHJlZ2lvbnNbaWR4XTtcbiAgICAgIGlmIChyZWdpb24pIHRoaXMuc3RvcmUuc2V0QmV6aWVyKHJlZ2lvbi5pZCwgYmV6aWVyKTtcbiAgICB9XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfVxufVxuIl19
|
|
733
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NkLXJlZ2lvbi1vdmVybGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbXBsZW1lbnRhdGlvbnMvb3NkL29zZC1yZWdpb24tb3ZlcmxheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSS9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFdBQVcsRUFDWCxjQUFjLEVBQ2QsYUFBYSxFQUNiLGVBQWUsR0FDaEIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRyxPQUFPLEVBQ0wsYUFBYSxFQUNiLGFBQWEsRUFDYixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsWUFBWSxHQUNiLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFdBQVcsRUFBWSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBYWhILE1B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QixJQUFJLE1BQU07Z0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgT3BlblNlYWRyYWdvbiBmcm9tICdvcGVuc2VhZHJhZ29uJztcbmltcG9ydCB7IE9TRCB9IGZyb20gJy4vb3NkLWxpYic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUmVnaW9uLCBSZWN0YW5nbGUsIFBvbHlnb24sIE11bHRpUG9seWdvbiB9IGZyb20gJy4uLy4uL21vZGVscy9yZWdpb24nO1xuaW1wb3J0IHsgSVJlZ2lvblN0b3JlIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3Zpc3VhbGl6ZXIuY29udHJhY3QnO1xuaW1wb3J0IHsgSVJlZ2lvbkVkaXRBcGksIElSZWdpb25Tb3VyY2VBcGkgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcmVnaW9uLXN0b3JlLmNvbnRyYWN0JztcbmltcG9ydCB7IElSZWdpb25PdmVybGF5LCBSZWdpb25Ub29sTW9kZSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9yZWdpb24tb3ZlcmxheS5jb250cmFjdCc7XG5pbXBvcnQgeyBlbGVtZW50VG9JbWFnZSwgaW1hZ2VUb0VsZW1lbnQgfSBmcm9tICcuL29zZC1jb29yZHMnO1xuaW1wb3J0IHsgT3NkVmlld2VyTGlrZSB9IGZyb20gJy4vb3NkLXZpZXdlci1saWtlJztcbmltcG9ydCB7IE9TRF9aT09NX1BFUl9TQ1JPTEwgfSBmcm9tICcuL29zZC16b29tJztcbmltcG9ydCB7IHRyYW5zbGF0ZUJvdW5kcyB9IGZyb20gJy4uLy4uL21vZGVscy9wb2x5Z29uLWVkaXQnO1xuaW1wb3J0IHsgbWFrZVBvbHlnb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcG9seWdvbi1mYWN0b3J5JztcbmltcG9ydCB7XG4gIE9QRU5fUEFUSF9UT0xfUFgsXG4gIFRvU2NyZWVuLFxuICBoaXRIYW5kbGUsXG4gIG5lYXJlc3RFZGdlLFxuICByZWdpb25Db250YWlucyxcbiAgcmVnaW9uc0luUmVjdCxcbiAgdG9wbW9zdFJlZ2lvbkF0LFxufSBmcm9tICcuLi8uLi9yZWdpb24tb3ZlcmxheS9yZWdpb24tZ2VvbWV0cnknO1xuaW1wb3J0IHsgU3ZnUmVnaW9uUmVuZGVyZXIsIGFmZmluZUZyb21Qcm9qZWN0aW9uIH0gZnJvbSAnLi4vLi4vcmVnaW9uLW92ZXJsYXkvc3ZnLXJlZ2lvbi1yZW5kZXJlcic7XG5pbXBvcnQgeyBSZWdpb25Tb3VyY2VMYXllciwgU09VUkNFX01BUlFVRUVfTElNSVQgfSBmcm9tICcuLi8uLi9yZWdpb24tb3ZlcmxheS9yZWdpb24tc291cmNlLWxheWVyJztcbmltcG9ydCB7XG4gIGRyYXdEcmFmdFBhdGgsXG4gIGRyYXdEcmFmdFJlY3QsXG4gIGRyYXdSZWdpb25MYWJlbCxcbiAgZHJhd1NlbGVjdGlvbkJhbmQsXG4gIGRyYXdTZWxlY3Rpb25IYW5kbGVzLFxuICBzdHlsZVJlZ2lvblNoYXBlLFxuICB2ZXJ0ZXhNYXJrZXIsXG59IGZyb20gJy4vb3NkLXJlZ2lvbi1vdmVybGF5LWRyYXcnO1xuaW1wb3J0IHsgRURJVF9UT0xfUFgsIEVkaXRab25lLCBaT05FX0NVUlNPUiwgcmVjdFpvbmUsIHJlc2l6ZVJlY3QgfSBmcm9tICcuLi8uLi9yZWdpb24tb3ZlcmxheS9yZWdpb24taGl0LXRlc3QnO1xuXG4vKipcbiAqIFRoZSBzaGFyZWQgcmVnaW9uIHN0b3JlIGFzIHRoZSBvdmVybGF5IG5lZWRzIGl0OiB0aGUgY3Jvc3MtYmFja2VuZFxuICoge0BsaW5rIElSZWdpb25TdG9yZX0gKHJlYWQgcmVnaW9ucywgc2VsZWN0aW9uLCBjb2xvdXJzKSBwbHVzIHRoZSBSZWdpb24tbmF0aXZlXG4gKiB7QGxpbmsgSVJlZ2lvbkVkaXRBcGl9IChhZGQvbW92ZS9yZXNpemUvdmVydGV4IGVkaXRzKS4gVGhlIHNoYXJlZCBSZWdpb25TdG9yZVxuICogc2F0aXNmaWVzIGJvdGguIFRoZSBvdmVybGF5IGVkaXRzIHRocm91Z2ggdGhlc2UgdHlwZWQgb3BlcmF0aW9ucyBvbiB0aGVcbiAqIG5ldXRyYWwgUmVnaW9uIG1vZGVsIOKAlCBpdCBuZXZlciB0b3VjaGVzIGEgYmFja2VuZCdzIG93biBzaGFwZSByZXByZXNlbnRhdGlvblxuICogKGUuZy4gUGxvdGx5J3MgYHgwL3kwL3gxL3kxYCAvIGBN4oCmTOKAplpgIGRpY3RzKS4gV2l0aCB7QGxpbmsgSVJlZ2lvblNvdXJjZUFwaX1cbiAqIChvcHRpb25hbCkgaXQgYWxzbyBkcmF3cyBhbmQgcGlja3MgdGhlIGltYWdlJ3MgcmVnaW9uIHNvdXJjZS5cbiAqL1xuZXhwb3J0IHR5cGUgUmVnaW9uRWRpdFN0b3JlID0gSVJlZ2lvblN0b3JlICYgSVJlZ2lvbkVkaXRBcGkgJiBQYXJ0aWFsPElSZWdpb25Tb3VyY2VBcGk+O1xuXG5jb25zdCBTVkdOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbi8qKiBBIHJlZ2lvbidzIGdlb21ldHJ5IGF0IHRoZSBzdGFydCBvZiBhIG1vdmUvcmVzaXplIChzZWUgYHNuYXBzaG90YCk6IGEgcmVjdGFuZ2xlJ3NcbiAqICBib3ggZm9yIGEgcmVzaXplLCBvciB0aGUgcG9seWdvbi9tdWx0aS1wb2x5Z29uIGJvdW5kcyB0aGVtc2VsdmVzIGZvciBhIG1vdmUg4oCUIHRoZVxuICogIHN0b3JlIGlzIGNvcHktb24td3JpdGUsIHNvIHRoZSBnZXN0dXJlLXN0YXJ0IGluc3RhbmNlIG5ldmVyIGNoYW5nZXMgdW5kZXIgdGhlIGRyYWcuICovXG50eXBlIEVkaXRTbmFwc2hvdCA9XG4gIHsga2luZDogJ3JlY3QnOyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSB8IHsga2luZDogJ3NoYXBlJzsgYm91bmRzOiBQb2x5Z29uIHwgTXVsdGlQb2x5Z29uIH07XG5cbi8qKlxuICogT3BlblNlYWRyYWdvbiBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgSVJlZ2lvbk92ZXJsYXl9LlxuICpcbiAqIC0gUmVuZGVycyB0aGUgc3RvcmUncyByZWdpb25zIChyZWN0L3BvbHlnb24pIGluIGltYWdlLXBpeGVsIHNwYWNlLCBrZXB0XG4gKiAgIGFsaWduZWQgb24gZXZlcnkgcGFuL3pvb20gdmlhIHRoZSBPU0Qgdmlld3BvcnQgQVBJLlxuICogLSBEcmF3cyBuZXcgcmVjdGFuZ2xlIGFuZCBwb2x5Z29uIHJlZ2lvbnMgKGNvbW1pdHRlZCB0byB0aGUgc2hhcmVkIHN0b3JlKS5cbiAqIC0gQ2xpY2stdG8tc2VsZWN0IGluICdzZWxlY3QnIG1vZGUuXG4gKlxuICogUmVhZHMvd3JpdGVzIHRoZSBzaGFyZWQge0BsaW5rIElSZWdpb25TdG9yZX0sIHNvIHJlZ2lvbnMgc3RheSBpbiBzeW5jIHdpdGggdGhlXG4gKiBSZWdpb24gRWRpdG9yIGFuZCB0aGUgUGxvdGx5IGJhY2tlbmQuIFRoZSB3YW5kLCB2ZXJ0ZXgtZXJhc2VyIGFuZCB6b29tLXRvLWJveFxuICogdG9vbHMgYXJlIE5PVCBoYW5kbGVkIGhlcmUg4oCUIHRoZXkncmUgb3duZWQgYnkgT3BlblNlYWRyYWdvblZpc3VhbGl6ZXJTZXJ2aWNlXG4gKiAod2hpY2ggYmluZHMgdGhlbSB0byBPU0QgdmlhIHRoZSBzaGFyZWQgY29vcmRpbmF0ZSB0cmFuc2Zvcm0gKyB2aWV3cG9ydCBwaXhlbFxuICogcmVhZGJhY2spLCB0aGUgc2FtZSBzaW5nbGV0b24gdG9vbCBzZXJ2aWNlcyB0aGUgUGxvdGx5IGJhY2tlbmQgdXNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE9zZFJlZ2lvbk92ZXJsYXkgaW1wbGVtZW50cyBJUmVnaW9uT3ZlcmxheSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3ZnOiBTVkdTVkdFbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IHN1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgc2VsZWN0ZWQ6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgbW9kZTogUmVnaW9uVG9vbE1vZGUgPSAnbm9uZSc7XG5cbiAgcHJpdmF0ZSB0cmFja2VyOiBPcGVuU2VhZHJhZ29uLk1vdXNlVHJhY2tlcjtcbiAgcHJpdmF0ZSByZWN0U3RhcnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPSBudWxsOyAvLyBpbWFnZSBjb29yZHNcbiAgcHJpdmF0ZSByZWN0Q3VycmVudDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcG9seVBvaW50czogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9W10gPSBbXTsgLy8gaW1hZ2UgY29vcmRzXG4gIC8qKiBUcnVlIHdoaWxlIGRyYWdnaW5nIGEgZnJlZWhhbmQgcGF0aCAoZnJlZWZvcm0gLyBwb2x5bGluZSkuICovXG4gIHByaXZhdGUgZnJlZWhhbmREcmFnZ2luZyA9IGZhbHNlO1xuICAvKiogVHJ1ZSB3aGlsZSBwbGFjaW5nIGEgY2xpY2stdG8tYWRkIHBvbHlnb24gKCdkcmF3cG9seWdvbicgbW9kZSkuICovXG4gIHByaXZhdGUgZHJhd2luZ1BvbHlnb24gPSBmYWxzZTtcbiAgLyoqIExhc3QgZWxlbWVudC1waXhlbCBwb2ludCBhcHBlbmRlZCwgdG8gdGhpbiB0aGUgZnJlZWhhbmQgcGF0aC4gKi9cbiAgcHJpdmF0ZSBsYXN0RnJlZWhhbmRQeDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBJbi1wcm9ncmVzcyBlZGl0IG9mIHRoZSBzZWxlY3RlZCByZWdpb246XG4gICAqICAtIGtpbmQgJ2JvdW5kcycg4oCUIHJlY3RhbmdsZSByZXNpemUvbW92ZSBvciB3aG9sZS1yZWdpb24gbW92ZSAodXNlcyBgem9uZWApO1xuICAgKiAgLSBraW5kICd2ZXJ0ZXgnIOKAlCBkcmFnZ2luZyBhIHNpbmdsZSBwb2x5Z29uIHZlcnRleCAodXNlcyBgdmVydGV4SW5kZXhgKS5cbiAgICovXG4gIHByaXZhdGUgZWRpdDoge1xuICAgIGtpbmQ6ICdib3VuZHMnIHwgJ3ZlcnRleCcgfCAnaGFuZGxlJztcbiAgICB6b25lOiBFZGl0Wm9uZTtcbiAgICB2ZXJ0ZXhJbmRleDogbnVtYmVyO1xuICAgIC8qKiBXaGljaCByaW5nIHRoZSBkcmFnZ2VkIHZlcnRleCBiZWxvbmdzIHRvOiAtMSA9IGV4dGVyaW9yLCBlbHNlIGEgaG9sZVxuICAgICAqICBpbmRleCBpbnRvIGBQb2x5Z29uLmhvbGVzYCAoaml0LXVpIzg1KS4gKi9cbiAgICByaW5nOiBudW1iZXI7XG4gICAgaGFuZGxlU2lkZTogJ2luJyB8ICdvdXQnO1xuICAgIGlkOiBudW1iZXI7XG4gICAgc3RhcnRJbWc6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbiAgICAvKiogR2VzdHVyZS1zdGFydCBnZW9tZXRyeTsgc2V0IGZvciAnYm91bmRzJyBlZGl0cyBvbmx5LiAqL1xuICAgIG9yaWc6IEVkaXRTbmFwc2hvdCB8IG51bGw7XG4gIH0gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBlZGl0RHJhZ2dlZCA9IGZhbHNlO1xuICAvKiogUnViYmVyLWJhbmQgKG1hcnF1ZWUpIG11bHRpLXNlbGVjdCBpbiAnc2VsZWN0JyBtb2RlOiBwcmVzcyBvbiBlbXB0eSBzcGFjZVxuICAgKiAgYW5kIGRyYWcgdG8gc2VsZWN0IGV2ZXJ5IHJlZ2lvbiB0aGUgYmFuZCBpbnRlcnNlY3RzLiBJbWFnZSBjb29yZHMuICovXG4gIHByaXZhdGUgYmFuZFN0YXJ0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBiYW5kQ3VycmVudDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYmFuZERyYWdnZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlZHJhd0hhbmRsZXIgPSAoKSA9PiB0aGlzLnJlZHJhdygpO1xuICAvKiogQSBjYW1lcmEgbW92ZSAoJ3VwZGF0ZS12aWV3cG9ydCcsIHJhaXNlZCBvbiBldmVyeSByZWRyYXduIGZyYW1lLCBhbmltYXRlZCBvbmVzXG4gICAqICBpbmNsdWRlZDsgJ3Jlc2l6ZSc7ICdyb3RhdGUnKS4gVGhlIHJlZ2lvbnMgYXJlIGRyYXduIGluIGltYWdlIGNvb3JkaW5hdGVzLCBzb1xuICAgKiAgb25seSB0aGUgcmVuZGVyZXIncyB0cmFuc2Zvcm0gYW5kIGl0cyBmZXcgc2NyZWVuLXNwYWNlIGVsZW1lbnRzIGZvbGxvdzsgbm90aGluZ1xuICAgKiAgaXMgcmVidWlsdCAoT1NELVBMT1RMWS0xMSkuIEEgdGlsZS1vbmx5IGZyYW1lIChsb2FkaW5nLCByZWNvbG9yKSBsZWF2ZXMgdGhlXG4gICAqICBwcm9qZWN0aW9uLCBhbmQgc28gdGhlIERPTSwgdW50b3VjaGVkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhbWVyYUhhbmRsZXIgPSAoKSA9PiB0aGlzLnVwZGF0ZUNhbWVyYSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBTdmdSZWdpb25SZW5kZXJlcjtcbiAgLyoqIFRoZSBpbWFnZSdzIHJlZ2lvbiBzb3VyY2UsIGRyYXduIHVuZGVyIHRoZSByZWdpb25zIGF0IHRoZSB6b29tJ3MgbGV2ZWwgb2YgZGV0YWlsLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHNvdXJjZUxheWVyOiBSZWdpb25Tb3VyY2VMYXllciB8IG51bGw7XG4gIC8qKiBPU0QncyBNb3VzZVRyYWNrZXIgZHJvcHMgYSBjYW5jZWxsZWQgcG9pbnRlciAodG91Y2ggaW50ZXJydXB0ZWQsIHBvaW50ZXJcbiAgICogIGNhcHR1cmUgbG9zdCB0byB0aGUgYnJvd3Nlcikgd2l0aG91dCBjYWxsaW5nIHJlbGVhc2VIYW5kbGVyLCBzbyB0aGVcbiAgICogIGdlc3R1cmUgaXMgZW5kZWQgaGVyZSBpbnN0ZWFkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBvaW50ZXJDYW5jZWxIYW5kbGVyID0gKCkgPT4ge1xuICAgIHRoaXMuZW5kR2VzdHVyZSgpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2aWV3ZXI6IE9zZFZpZXdlckxpa2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogUmVnaW9uRWRpdFN0b3JlLFxuICApIHtcbiAgICB0aGlzLnN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdOUywgJ3N2ZycpIGFzIFNWR1NWR0VsZW1lbnQ7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLnN2Zy5zdHlsZSwge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJywgLy8gT1NEIGhhbmRsZXMgbmF2aWdhdGlvbiB1bmxlc3Mgd2UncmUgZHJhd2luZ1xuICAgIH0pO1xuICAgIHRoaXMudmlld2VyLmNhbnZhcy5hcHBlbmRDaGlsZCh0aGlzLnN2Zyk7XG4gICAgdGhpcy5yZW5kZXJlciA9IG5ldyBTdmdSZWdpb25SZW5kZXJlcih0aGlzLnN2Zywge1xuICAgICAgcmVjdEVsZW1lbnQ6ICdwb2x5Z29uJyxcbiAgICAgIHN0eWxlU2hhcGU6IChlbCwgcmVnaW9uLCBzZWxlY3RlZCkgPT5cbiAgICAgICAgc3R5bGVSZWdpb25TaGFwZShlbCwgcmVnaW9uLCBzZWxlY3RlZCwgdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCksIHRoaXMuc3RvcmUuZ2V0UmVnaW9uU3R5bGU/LigpKSxcbiAgICAgIC8vIFRoZSBjbGFzcyBsYWJlbCwgd2hlbiB0aGUgUmVnaW9uIEVkaXRvcidzIFwic2hvdyBsYWJlbHNcIiBpcyBvbi5cbiAgICAgIGRlY29yYXRlOiAocmVnaW9uLCBfaSwgX3NlbGVjdGVkLCBsYXllcikgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdG9yZS5nZXRTaG93U2hhcGVMYWJlbCgpICYmICF0aGlzLnN0b3JlLmlzTGFiZWxDb3ZlcmVkPy4ocmVnaW9uLmxhYmVsKSkge1xuICAgICAgICAgIGRyYXdSZWdpb25MYWJlbChsYXllciwgcmVnaW9uLCB0aGlzLnN0b3JlLmdldFNoYXBlQ29sb3IoKSwgdGhpcy5zdG9yZS5nZXRSZWdpb25TdHlsZT8uKCkpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2tpcDogKHJlZ2lvbikgPT4gdGhpcy5oaWRkZW4ocmVnaW9uKSxcbiAgICB9KTtcbiAgICB0aGlzLnNvdXJjZUxheWVyID0gdGhpcy5zdG9yZS5nZXRSZWdpb25Tb3VyY2VWaWV3JFxuICAgICAgPyBuZXcgUmVnaW9uU291cmNlTGF5ZXIodGhpcy5zdmcsIHRoaXMuc3RvcmUuZ2V0UmVnaW9uU291cmNlVmlldyQoKSlcbiAgICAgIDogbnVsbDtcbiAgICB0aGlzLnZpZXdlci5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmNhbmNlbCcsIHRoaXMucG9pbnRlckNhbmNlbEhhbmRsZXIpO1xuXG4gICAgLy8gJ3VwZGF0ZS12aWV3cG9ydCcgZmlyZXMgb24gZXZlcnkgcmVkcmF3biBmcmFtZSwgYW5pbWF0ZWQgb25lcyBpbmNsdWRlZCDigJRcbiAgICAvLyBhbHNvIGxpc3RlbmluZyB0byAnYW5pbWF0aW9uJyByZWJ1aWx0IHRoZSB3aG9sZSBTVkcgdHdpY2UgcGVyIGZyYW1lLlxuICAgIHRoaXMudmlld2VyLmFkZEhhbmRsZXIoJ3VwZGF0ZS12aWV3cG9ydCcsIHRoaXMuY2FtZXJhSGFuZGxlcik7XG4gICAgdGhpcy52aWV3ZXIuYWRkSGFuZGxlcigncmVzaXplJywgdGhpcy5jYW1lcmFIYW5kbGVyKTtcbiAgICB0aGlzLnZpZXdlci5hZGRIYW5kbGVyKCdyb3RhdGUnLCB0aGlzLmNhbWVyYUhhbmRsZXIpO1xuICAgIC8vIEtlZXAgd2hlZWwtem9vbSBhbGl2ZSB3aGlsZSBhIHRvb2wgaGFzIG1vdXNlLW5hdiBkaXNhYmxlZCAoc2VlIGhhbmRsZXIpLlxuICAgIHRoaXMudmlld2VyLmVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgdGhpcy53aGVlbFpvb21IYW5kbGVyLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuXG4gICAgdGhpcy50cmFja2VyID0gbmV3IE9TRC5Nb3VzZVRyYWNrZXIoe1xuICAgICAgZWxlbWVudDogdGhpcy52aWV3ZXIuY2FudmFzLFxuICAgICAgcHJlc3NIYW5kbGVyOiAoZTogYW55KSA9PiB0aGlzLm9uUHJlc3MoZSksXG4gICAgICBkcmFnSGFuZGxlcjogKGU6IGFueSkgPT4gdGhpcy5vbkRyYWcoZSksXG4gICAgICByZWxlYXNlSGFuZGxlcjogKGU6IGFueSkgPT4gdGhpcy5vblJlbGVhc2UoZSksXG4gICAgICBjbGlja0hhbmRsZXI6IChlOiBhbnkpID0+IHRoaXMub25DbGljayhlKSxcbiAgICAgIG1vdmVIYW5kbGVyOiAoZTogYW55KSA9PiB0aGlzLm9uTW92ZShlKSxcbiAgICB9KTtcbiAgICB0aGlzLnRyYWNrZXIuc2V0VHJhY2tpbmcoZmFsc2UpO1xuXG4gICAgdGhpcy5zdWJzLmFkZCh0aGlzLnN0b3JlLmdldFJlZ2lvblVwZGF0ZUV2ZW50KCkuc3Vic2NyaWJlKHRoaXMucmVkcmF3SGFuZGxlcikpO1xuICAgIHRoaXMuc3Vicy5hZGQoXG4gICAgICB0aGlzLnN0b3JlLmdldFNlbGVjdGVkU2hhcGVJbmRpY2VzJCgpLnN1YnNjcmliZSgoaWR4KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBpZHggfHwgW107XG4gICAgICAgIHRoaXMucmVkcmF3KCk7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfVxuXG4gIC8qKiBTd2l0Y2ggZHJhd2luZy9zZWxlY3Rpb24gbW9kZTsgdG9nZ2xlcyBPU0QgbmF2aWdhdGlvbiBhY2NvcmRpbmdseS4gKi9cbiAgc2V0TW9kZShtb2RlOiBSZWdpb25Ub29sTW9kZSk6IHZvaWQge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy5yZXNldEluUHJvZ3Jlc3MoKTtcbiAgICAvLyBBbnkgYWN0aXZlIHJlZ2lvbiB0b29sIHRha2VzIG92ZXIgdGhlIHBvaW50ZXIg4oCUIE9TRCBwYW4vem9vbSBpcyBkaXNhYmxlZFxuICAgIC8vIHNvIGRyYWdnaW5nIGRyYXdzIChhbmQgY2xpY2tzIHNlbGVjdCkgaW5zdGVhZCBvZiBwYW5uaW5nLiBXaXRoIG5vIHRvb2wsXG4gICAgLy8gT1NEIG5hdmlnYXRlcyBub3JtYWxseS5cbiAgICB0aGlzLnZpZXdlci5zZXRNb3VzZU5hdkVuYWJsZWQobW9kZSA9PT0gJ25vbmUnKTtcbiAgICB0aGlzLnRyYWNrZXIuc2V0VHJhY2tpbmcobW9kZSAhPT0gJ25vbmUnKTtcbiAgICB0aGlzLnVwZGF0ZUN1cnNvcihmYWxzZSk7XG4gICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gIH1cblxuICAvKiogRHJpdmUgT1NEIHpvb20gZnJvbSB0aGUgd2hlZWwgd2hpbGUgYW55IHRvb2wgb3ducyB0aGUgcG9pbnRlci5cbiAgICpcbiAgICogT1NEJ3MgbmF0aXZlIHNjcm9sbC16b29tIGlzIHBhcnQgb2YgbW91c2UtbmF2LCBzbyBgc2V0TW91c2VOYXZFbmFibGVkKGZhbHNlKWBcbiAgICogKHVzZWQgYnkgZXZlcnkgcmVnaW9uIHRvb2wgYW5kIGJ5IHRoZSB3YW5kL2JydXNoL2VyYXNlci9TQU0gdG9vbHMpIGRpc2FibGVzXG4gICAqIGl0LiBUaGUgY292ZXJpbmctY2FudmFzIHRvb2xzIGFsc28gc2l0IGFib3ZlIHRoZSBPU0QgY2FudmFzIGFuZCBzd2FsbG93IHRoZVxuICAgKiB3aGVlbCBvdXRyaWdodC4gVGhpcyBsaXN0ZW5lciBpcyBib3VuZCBvbmNlIHRvIHRoZSB2aWV3ZXIgZWxlbWVudCDigJQgYW5cbiAgICogYW5jZXN0b3Igb2YgYm90aCB0aGUgT1NEIGNhbnZhcyBhbmQgdGhlIHRvb2wgb3ZlcmxheXMg4oCUIGFuZCBmb3J3YXJkcyB0aGVcbiAgICogd2hlZWwgdG8gYSBjdXJzb3ItY2VudHJlZCB6b29tIHdoZW5ldmVyIG1vdXNlLW5hdiBpcyBvZmYuIFdoZW4gbmF2IGlzIG9uIChub1xuICAgKiB0b29sIGFjdGl2ZSkgaXQgZG9lcyBub3RoaW5nIGFuZCBPU0Qgem9vbXMgbmF0aXZlbHkuIChqaXQtdWkjOTQpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgd2hlZWxab29tSGFuZGxlciA9IChlOiBXaGVlbEV2ZW50KSA9PiB7XG4gICAgY29uc3QgdnAgPSB0aGlzLnZpZXdlcj8udmlld3BvcnQ7XG4gICAgY29uc3QgZWwgPSB0aGlzLnZpZXdlcj8uZWxlbWVudDtcbiAgICAvLyBOYXYgb24g4oaSIG5vIHRvb2wgYWN0aXZlIOKGkiBsZXQgT1NEIGhhbmRsZSBzY3JvbGwtem9vbSBuYXRpdmVseS5cbiAgICBpZiAoIXZwIHx8ICFlbCB8fCBlLmRlbHRhWSA9PT0gMCB8fCB0aGlzLnZpZXdlci5pc01vdXNlTmF2RW5hYmxlZCgpKSByZXR1cm47XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCByZWZQb2ludCA9IHZwLnBvaW50RnJvbVBpeGVsKG5ldyBPU0QuUG9pbnQoZS5jbGllbnRYIC0gcmVjdC5sZWZ0LCBlLmNsaWVudFkgLSByZWN0LnRvcCkpO1xuICAgIHZwLnpvb21CeShlLmRlbHRhWSA8IDAgPyBPU0RfWk9PTV9QRVJfU0NST0xMIDogMSAvIE9TRF9aT09NX1BFUl9TQ1JPTEwsIHJlZlBvaW50KTtcbiAgICB2cC5hcHBseUNvbnN0cmFpbnRzKCk7XG4gIH07XG5cbiAgLyoqIEN1cnNvciBmZWVkYmFjayBwZXIgbW9kZSAoY3Jvc3NoYWlyIHdoaWxlIGRyYXdpbmc7IHBvaW50ZXIgb3ZlciBhIHJlZ2lvblxuICAgKiAgaW4gc2VsZWN0IG1vZGUpLiAqL1xuICBwcml2YXRlIHVwZGF0ZUN1cnNvcihvdmVyUmVnaW9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY2FudmFzID0gdGhpcy52aWV3ZXIuY2FudmFzO1xuICAgIGlmIChcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2RyYXdyZWN0JyB8fFxuICAgICAgdGhpcy5tb2RlID09PSAnZHJhd2Nsb3NlZHBhdGgnIHx8XG4gICAgICB0aGlzLm1vZGUgPT09ICdkcmF3b3BlbnBhdGgnIHx8XG4gICAgICB0aGlzLm1vZGUgPT09ICdkcmF3cG9seWdvbicgfHxcbiAgICAgIHRoaXMubW9kZSA9PT0gJ2FkZHBvaW50JyB8fFxuICAgICAgdGhpcy5tb2RlID09PSAnZGVsZXRlcG9pbnQnXG4gICAgKSB7XG4gICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gJ2Nyb3NzaGFpcic7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdtb3ZlJykge1xuICAgICAgY2FudmFzLnN0eWxlLmN1cnNvciA9ICdtb3ZlJztcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSBvdmVyUmVnaW9uID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW52YXMuc3R5bGUuY3Vyc29yID0gJyc7IC8vIE9TRCBkZWZhdWx0IChncmFiKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3RlZCByZWdpb24ncyB2ZXJ0aWNlcy9oYW5kbGVzIHNob3VsZCBiZSBkcmF3bi4gU2hvd25cbiAgICogIHdoZW5ldmVyIGEgcmVnaW9uIGlzIHNlbGVjdGVkIOKAlCBpbmNsdWRpbmcgYG5vbmVgIChkaXNwbGF5KSBtb2RlIGFuZCB3aGlsZVxuICAgKiAgYW5vdGhlciB0b29sICh3YW5kLCBicnVzaCwgU0FN4oCmKSBpcyBhY3RpdmUg4oCUIHNvIGEgc2VsZWN0aW9uIGFsd2F5cyByZXZlYWxzXG4gICAqICBpdHMgdmVydGljZXMuIFN1cHByZXNzZWQgb25seSB3aGlsZSBhY3RpdmVseSBkcmF3aW5nIGEgYnJhbmQtbmV3IHNoYXBlLFxuICAgKiAgd2hlcmUgc3RyYXkgaGFuZGxlcyB3b3VsZCBiZSBub2lzZS4gKi9cbiAgcHJpdmF0ZSBnZXQgc2hvd3NTZWxlY3RlZFZlcnRpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1vZGUgIT09ICdkcmF3cmVjdCcgJiZcbiAgICAgIHRoaXMubW9kZSAhPT0gJ2RyYXdwb2x5Z29uJyAmJlxuICAgICAgdGhpcy5tb2RlICE9PSAnZHJhd2Nsb3NlZHBhdGgnICYmXG4gICAgICB0aGlzLm1vZGUgIT09ICdkcmF3b3BlbnBhdGgnXG4gICAgKTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gQ2xvc2UgYSBnZXN0dXJlIGluIGZsaWdodCBmaXJzdDogYSBkcmFnJ3Mgb3BlbiBzdG9yZSBiYXRjaCB3b3VsZFxuICAgIC8vIG90aGVyd2lzZSBzdXBwcmVzcyBldmVyeSBsYXRlciByZWdpb24tdXBkYXRlIGVtaXNzaW9uIGFwcC13aWRlLlxuICAgIHRoaXMuZW5kR2VzdHVyZSgpO1xuICAgIHRoaXMudmlld2VyLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJywgdGhpcy5wb2ludGVyQ2FuY2VsSGFuZGxlcik7XG4gICAgdGhpcy5zdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy52aWV3ZXIuZWxlbWVudD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCB0aGlzLndoZWVsWm9vbUhhbmRsZXIpO1xuICAgIHRoaXMudmlld2VyLnJlbW92ZUhhbmRsZXIoJ3VwZGF0ZS12aWV3cG9ydCcsIHRoaXMuY2FtZXJhSGFuZGxlcik7XG4gICAgdGhpcy52aWV3ZXIucmVtb3ZlSGFuZGxlcigncmVzaXplJywgdGhpcy5jYW1lcmFIYW5kbGVyKTtcbiAgICB0aGlzLnZpZXdlci5yZW1vdmVIYW5kbGVyKCdyb3RhdGUnLCB0aGlzLmNhbWVyYUhhbmRsZXIpO1xuICAgIGlmICh0aGlzLnRyYWNrZXIpIHRoaXMudHJhY2tlci5kZXN0cm95KCk7XG4gICAgdGhpcy5zb3VyY2VMYXllcj8uZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLnN2Zy5wYXJlbnROb2RlKSB0aGlzLnN2Zy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3ZnKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBjb29yZGluYXRlIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKiBJbWFnZS1waXhlbCBwb2ludCAtPiBlbGVtZW50IHBpeGVsIHBvaW50LiAqL1xuICBwcml2YXRlIHRvUHgoaW1nWDogbnVtYmVyLCBpbWdZOiBudW1iZXIpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xuICAgIHJldHVybiBpbWFnZVRvRWxlbWVudCh0aGlzLnZpZXdlciwgaW1nWCwgaW1nWSk7XG4gIH1cbiAgLyoqIEVsZW1lbnQgcGl4ZWwgcG9pbnQgKGZyb20gYSBNb3VzZVRyYWNrZXIgZXZlbnQpIC0+IGltYWdlLXBpeGVsIHBvaW50LCByb3VuZGVkXG4gICAqICB0byB3aG9sZSBwaXhlbHMgKHdoZXJlIGEgZHJhd24gdmVydGV4IGxhbmRzKS4gKi9cbiAgcHJpdmF0ZSB0b0ltYWdlKHBvczogYW55KTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHtcbiAgICBjb25zdCBwID0gZWxlbWVudFRvSW1hZ2UodGhpcy52aWV3ZXIsIHBvcy54LCBwb3MueSk7XG4gICAgcmV0dXJuIHsgeDogTWF0aC5yb3VuZChwLngpLCB5OiBNYXRoLnJvdW5kKHAueSkgfTtcbiAgfVxuICAvKiogRWxlbWVudCBwaXhlbCBwb2ludCAtPiBleGFjdCBpbWFnZSBwb2ludCwgZm9yIGhpdCB0ZXN0cy4gKi9cbiAgcHJpdmF0ZSB0b1dvcmxkKHBvczogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHtcbiAgICByZXR1cm4gZWxlbWVudFRvSW1hZ2UodGhpcy52aWV3ZXIsIHBvcy54LCBwb3MueSk7XG4gIH1cbiAgLyoqIEltYWdlIHBvaW50IC0+IGVsZW1lbnQgcHgsIGFzIHRoZSBzaGFyZWQgcmVnaW9uIGdlb21ldHJ5IHdhbnRzIGl0LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRvU2NyZWVuOiBUb1NjcmVlbiA9ICh4LCB5KSA9PiB7XG4gICAgY29uc3QgcSA9IHRoaXMudG9QeCh4LCB5KTtcbiAgICByZXR1cm4gW3EueCwgcS55XTtcbiAgfTtcblxuICAvLyDilIDilIAgcmVuZGVyaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvKiogRm9sbG93IHRoZSBjdXJyZW50IGltYWdl4oaSZWxlbWVudCBwcm9qZWN0aW9uOiB0aGUgcmVuZGVyZXIgcmV3cml0ZXMgb25lIHRyYW5zZm9ybVxuICAgKiAgYW5kIHJlLXBvc2l0aW9ucyBpdHMgc2NyZWVuLXNwYWNlIGVsZW1lbnRzLCBvciBkb2VzIG5vdGhpbmcgd2hlbiBpdCBkaWQgbm90IG1vdmUuICovXG4gIHByaXZhdGUgdXBkYXRlQ2FtZXJhKCk6IHZvaWQge1xuICAgIGNvbnN0IGFmZmluZSA9IGFmZmluZUZyb21Qcm9qZWN0aW9uKHRoaXMudG9TY3JlZW4pO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0Q2FtZXJhKGFmZmluZSk7XG4gICAgdGhpcy5zb3VyY2VMYXllcj8uc2V0Q2FtZXJhKGFmZmluZSk7XG4gIH1cblxuICAvKiogUmVidWlsZCBldmVyeXRoaW5nOiB0aGUgcmVnaW9ucyAoaW4gaW1hZ2UgY29vcmRpbmF0ZXMpLCB0aGVpciBsYWJlbHMgYW5kIHRoZSBvdmVybGF5LiAqL1xuICByZWRyYXcoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDYW1lcmEoKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKSwgdGhpcy5zZWxlY3RlZCk7XG4gICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVidWlsZCB0aGUgc2NyZWVuLXNwYWNlIG92ZXJsYXkgb25seTogdGhlIHNlbGVjdGVkIHJlZ2lvbidzIGhhbmRsZXMsIHRoZSBydWJiZXIgYmFuZFxuICAgKiBhbmQgYW55IGluLXByb2dyZXNzIGRyYXdpbmcuIERyYXdpbmcgYW5kIG1hcnF1ZWUgZHJhZ3MgY2FsbCB0aGlzIHJhdGhlciB0aGFuXG4gICAqIHtAbGluayByZWRyYXd9LCBzbyB0aGUgcmVnaW9ucyBhcmUgbm90IHJlYnVpbHQgcGVyIHBvaW50ZXIgbW92ZS5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyT3ZlcmxheSgpOiB2b2lkIHtcbiAgICBjb25zdCBzaGFwZUNvbG9yID0gdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXJPdmVybGF5KChsYXllcikgPT4ge1xuICAgICAgLy8gSGFuZGxlcyBvbiB0aGUgc2VsZWN0ZWQgcmVnaW9uLCBzbyB0aGUgdXNlciBjYW4gZ3JhYi9pbnNlcnQvZGVsZXRlXG4gICAgICAvLyB2ZXJ0aWNlcyDigJQgaW4gdGhlIHJlZ2lvbidzIG93biBjb2xvdXIsIHNvIHRoZXkgbWF0Y2ggdGhlIHNoYXBlLlxuICAgICAgY29uc3Qgc2VsID0gdGhpcy5zaG93c1NlbGVjdGVkVmVydGljZXMgPyB0aGlzLnNlbGVjdGVkUmVnaW9uSW5mbygpIDogbnVsbDtcbiAgICAgIGlmIChzZWwpIGRyYXdTZWxlY3Rpb25IYW5kbGVzKGxheWVyLCBzZWwucmVnaW9uLCBzZWwucmVnaW9uLmNvbG9yIHx8IHNoYXBlQ29sb3IpO1xuICAgICAgLy8gUnViYmVyLWJhbmQgKG1hcnF1ZWUpIHNlbGVjdGlvbiBwcmV2aWV3LlxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NlbGVjdCcgJiYgdGhpcy5iYW5kU3RhcnQgJiYgdGhpcy5iYW5kQ3VycmVudCkge1xuICAgICAgICBkcmF3U2VsZWN0aW9uQmFuZChsYXllciwgdGhpcy5iYW5kU3RhcnQsIHRoaXMuYmFuZEN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgLy8gSW4tcHJvZ3Jlc3MgZHJhd2luZyBwcmV2aWV3LlxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2RyYXdyZWN0JyAmJiB0aGlzLnJlY3RTdGFydCAmJiB0aGlzLnJlY3RDdXJyZW50KSB7XG4gICAgICAgIGRyYXdEcmFmdFJlY3QobGF5ZXIsIHRoaXMucmVjdFN0YXJ0LCB0aGlzLnJlY3RDdXJyZW50LCBzaGFwZUNvbG9yKTtcbiAgICAgIH1cbiAgICAgIGlmICgodGhpcy5tb2RlID09PSAnZHJhd2Nsb3NlZHBhdGgnIHx8IHRoaXMubW9kZSA9PT0gJ2RyYXdvcGVucGF0aCcpICYmIHRoaXMucG9seVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgZHJhd0RyYWZ0UGF0aChsYXllciwgdGhpcy5wb2x5UG9pbnRzLCBzaGFwZUNvbG9yKTtcbiAgICAgIH1cbiAgICAgIC8vIENsaWNrLXRvLXBsYWNlIHBvbHlnb24gcHJldmlldzogdGhlIHBvbHlsaW5lIHNvIGZhciArIGEgbWFya2VyIG9uIHRoZVxuICAgICAgLy8gZmlyc3QgdmVydGV4IChjbGljayBpdCB0byBjbG9zZSkuXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnZHJhd3BvbHlnb24nICYmIHRoaXMucG9seVBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgZHJhd0RyYWZ0UGF0aChsYXllciwgdGhpcy5wb2x5UG9pbnRzLCBzaGFwZUNvbG9yKTtcbiAgICAgICAgdmVydGV4TWFya2VyKGxheWVyLCB0aGlzLnBvbHlQb2ludHNbMF0ueCwgdGhpcy5wb2x5UG9pbnRzWzBdLnksIHRydWUsIHNoYXBlQ29sb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIGludGVyYWN0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICBwcml2YXRlIGdldCBpc0ZyZWVoYW5kKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdkcmF3Y2xvc2VkcGF0aCcgfHwgdGhpcy5tb2RlID09PSAnZHJhd29wZW5wYXRoJztcbiAgfVxuXG4gIHByaXZhdGUgb25QcmVzcyhlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZHJhd3JlY3QnKSB7XG4gICAgICB0aGlzLnJlY3RTdGFydCA9IHRoaXMudG9JbWFnZShlLnBvc2l0aW9uKTtcbiAgICAgIHRoaXMucmVjdEN1cnJlbnQgPSB0aGlzLnJlY3RTdGFydDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNGcmVlaGFuZCkge1xuICAgICAgLy8gRnJlZWhhbmQgZHJhdyAobWF0Y2hlcyBQbG90bHkgZHJhd2Nsb3NlZHBhdGgvZHJhd29wZW5wYXRoKTogcHJlc3MgdG9cbiAgICAgIC8vIHN0YXJ0LCBkcmFnIHRvIHRyYWNlLCByZWxlYXNlIHRvIGNvbW1pdC5cbiAgICAgIHRoaXMuZnJlZWhhbmREcmFnZ2luZyA9IHRydWU7XG4gICAgICB0aGlzLnBvbHlQb2ludHMgPSBbdGhpcy50b0ltYWdlKGUucG9zaXRpb24pXTtcbiAgICAgIHRoaXMubGFzdEZyZWVoYW5kUHggPSB7IHg6IGUucG9zaXRpb24ueCwgeTogZS5wb3NpdGlvbi55IH07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdtb3ZlJykge1xuICAgICAgLy8gV2hvbGUtcmVnaW9uIGRyYWcgKCdtb3ZlJyBtb2RlKTogcHJlc3MgaW5zaWRlIHRoZSBzZWxlY3RlZCByZWdpb25cbiAgICAgIC8vIHRvIHRyYW5zbGF0ZSBpdCwgaWdub3JpbmcgdmVydGljZXMvZWRnZXMuXG4gICAgICBjb25zdCBzZWwgPSB0aGlzLnNlbGVjdGVkUmVnaW9uSW5mbygpO1xuICAgICAgaWYgKHNlbCAmJiB0aGlzLmNvbnRhaW5zUG9pbnQoc2VsLnJlZ2lvbiwgZS5wb3NpdGlvbikpIHtcbiAgICAgICAgdGhpcy5zdGFydEVkaXQoJ2JvdW5kcycsICdtb3ZlJywgLTEsIHNlbC5yZWdpb24sIHRoaXMudG9JbWFnZShlLnBvc2l0aW9uKSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzZWxlY3QnKSB7XG4gICAgICAvLyBBIGJlemllciBjb250cm9sIGhhbmRsZSB0YWtlcyB0b3AgcHJpb3JpdHkgKGl0IHNpdHMgb2ZmIHRoZSBhbmNob3IpLCB0aGVuXG4gICAgICAvLyBkcmFnZ2luZyBhIHNpbmdsZSBwb2x5Z29uIHZlcnRleCAob3ZlciBib2R5LW1vdmUvcmVzaXplKS5cbiAgICAgIGNvbnN0IGhpdCA9IHRoaXMuaGl0UG9seWdvbkhhbmRsZShlLnBvc2l0aW9uKTtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgY29uc3QgcmVnaW9uID0gdGhpcy5zdG9yZS5nZXRSZWdpb25zKClbdGhpcy5zZWxlY3RlZFt0aGlzLnNlbGVjdGVkLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgaWYgKGhpdC5raW5kID09PSAnYmV6aWVyJykge1xuICAgICAgICAgIHRoaXMuc3RhcnRFZGl0KCdoYW5kbGUnLCAnbW92ZScsIGhpdC5pbmRleCwgcmVnaW9uLCB0aGlzLnRvSW1hZ2UoZS5wb3NpdGlvbiksIGhpdC5zaWRlLCBoaXQucmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdGFydEVkaXQoJ3ZlcnRleCcsICdtb3ZlJywgaGl0LmluZGV4LCByZWdpb24sIHRoaXMudG9JbWFnZShlLnBvc2l0aW9uKSwgJ291dCcsIGhpdC5yaW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBPdGhlcndpc2Ugc3RhcnQgYSBtb3ZlL3Jlc2l6ZSB3aGVuIHByZXNzaW5nIHRoZSBzZWxlY3RlZCByZWdpb24nc1xuICAgICAgLy8gYm9keS9oYW5kbGVzLlxuICAgICAgY29uc3QgZXogPSB0aGlzLmVkaXRab25lQXQoZS5wb3NpdGlvbik7XG4gICAgICBpZiAoZXopIHtcbiAgICAgICAgdGhpcy5zdGFydEVkaXQoJ2JvdW5kcycsIGV6LnpvbmUsIC0xLCB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKVtlei5pbmRleF0sIHRoaXMudG9JbWFnZShlLnBvc2l0aW9uKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXNzIG9uIGVtcHR5IHNwYWNlIC8gYSBub24tc2VsZWN0ZWQgcmVnaW9uOiBiZWdpbiBhIHJ1YmJlci1iYW5kXG4gICAgICAvLyBtdWx0aS1zZWxlY3QuIEEgcGxhaW4gY2xpY2sgKG5vIGRyYWcpIGZhbGxzIHRocm91Z2ggdG8gb25DbGljaywgd2hpY2hcbiAgICAgIC8vIHNpbmdsZS1zZWxlY3RzIG9yIGNsZWFycy5cbiAgICAgIHRoaXMuYmFuZFN0YXJ0ID0gdGhpcy50b0ltYWdlKGUucG9zaXRpb24pO1xuICAgICAgdGhpcy5iYW5kQ3VycmVudCA9IHRoaXMuYmFuZFN0YXJ0O1xuICAgICAgdGhpcy5iYW5kRHJhZ2dlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBCZWdpbiBhbiBlZGl0IGdlc3R1cmUgKG1vdmUvcmVzaXplIG9yIHNpbmdsZS12ZXJ0ZXggZHJhZykgYW5kIG9wZW4gYSBzdG9yZVxuICAgKiAgYmF0Y2ggc28gdGhlIGxpdmUgZHJhZyBlbWl0cyBvbmNlIG9uIHJlbGVhc2UuICovXG4gIHByaXZhdGUgc3RhcnRFZGl0KFxuICAgIGtpbmQ6ICdib3VuZHMnIHwgJ3ZlcnRleCcgfCAnaGFuZGxlJyxcbiAgICB6b25lOiBFZGl0Wm9uZSxcbiAgICB2ZXJ0ZXhJbmRleDogbnVtYmVyLFxuICAgIHJlZ2lvbjogUmVnaW9uLFxuICAgIHN0YXJ0SW1nOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXG4gICAgaGFuZGxlU2lkZTogJ2luJyB8ICdvdXQnID0gJ291dCcsXG4gICAgcmluZyA9IC0xLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLmVkaXQgPSB7XG4gICAgICBraW5kLFxuICAgICAgem9uZSxcbiAgICAgIHZlcnRleEluZGV4LFxuICAgICAgcmluZyxcbiAgICAgIGhhbmRsZVNpZGUsXG4gICAgICBpZDogcmVnaW9uLmlkLFxuICAgICAgc3RhcnRJbWcsXG4gICAgICBvcmlnOiBraW5kID09PSAnYm91bmRzJyA/IHRoaXMuc25hcHNob3QocmVnaW9uKSA6IG51bGwsXG4gICAgfTtcbiAgICB0aGlzLmVkaXREcmFnZ2VkID0gZmFsc2U7XG4gICAgdGhpcy5zdG9yZS5iZWdpbkJhdGNoKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRHJhZyhlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZHJhd3JlY3QnICYmIHRoaXMucmVjdFN0YXJ0KSB7XG4gICAgICB0aGlzLnJlY3RDdXJyZW50ID0gdGhpcy50b0ltYWdlKGUucG9zaXRpb24pO1xuICAgICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmZyZWVoYW5kRHJhZ2dpbmcgJiYgdGhpcy5pc0ZyZWVoYW5kKSB7XG4gICAgICAvLyBUaGluIHRoZSBwYXRoOiBvbmx5IHNhbXBsZSBvbmNlIHRoZSBjdXJzb3IgaGFzIG1vdmVkIGEgZmV3IHNjcmVlbiBweC5cbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxhc3RGcmVlaGFuZFB4O1xuICAgICAgaWYgKCFsYXN0IHx8IE1hdGguaHlwb3QoZS5wb3NpdGlvbi54IC0gbGFzdC54LCBlLnBvc2l0aW9uLnkgLSBsYXN0LnkpID49IDQpIHtcbiAgICAgICAgdGhpcy5wb2x5UG9pbnRzLnB1c2godGhpcy50b0ltYWdlKGUucG9zaXRpb24pKTtcbiAgICAgICAgdGhpcy5sYXN0RnJlZWhhbmRQeCA9IHsgeDogZS5wb3NpdGlvbi54LCB5OiBlLnBvc2l0aW9uLnkgfTtcbiAgICAgICAgdGhpcy5yZW5kZXJPdmVybGF5KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgIHRoaXMuZWRpdERyYWdnZWQgPSB0cnVlO1xuICAgICAgdGhpcy5hcHBseUVkaXQodGhpcy50b0ltYWdlKGUucG9zaXRpb24pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYmFuZFN0YXJ0KSB7XG4gICAgICB0aGlzLmJhbmRDdXJyZW50ID0gdGhpcy50b0ltYWdlKGUucG9zaXRpb24pO1xuICAgICAgdGhpcy5iYW5kRHJhZ2dlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlck92ZXJsYXkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uUmVsZWFzZShlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZHJhd3JlY3QnICYmIHRoaXMucmVjdFN0YXJ0KSB7XG4gICAgICBjb25zdCBlbmQgPSB0aGlzLnRvSW1hZ2UoZS5wb3NpdGlvbik7XG4gICAgICBjb25zdCB4ID0gTWF0aC5taW4odGhpcy5yZWN0U3RhcnQueCwgZW5kLngpO1xuICAgICAgY29uc3QgeSA9IE1hdGgubWluKHRoaXMucmVjdFN0YXJ0LnksIGVuZC55KTtcbiAgICAgIGNvbnN0IHcgPSBNYXRoLmFicyhlbmQueCAtIHRoaXMucmVjdFN0YXJ0LngpO1xuICAgICAgY29uc3QgaCA9IE1hdGguYWJzKGVuZC55IC0gdGhpcy5yZWN0U3RhcnQueSk7XG4gICAgICB0aGlzLnJlY3RTdGFydCA9IHRoaXMucmVjdEN1cnJlbnQgPSBudWxsO1xuICAgICAgaWYgKHcgPiAyICYmIGggPiAyKSB0aGlzLmNvbW1pdFJlY3RhbmdsZSh4LCB5LCB3LCBoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZnJlZWhhbmREcmFnZ2luZykge1xuICAgICAgdGhpcy5mcmVlaGFuZERyYWdnaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmxhc3RGcmVlaGFuZFB4ID0gbnVsbDtcbiAgICAgIC8vIENsb3NlZCA9IGZyZWVmb3JtIChkcmF3Y2xvc2VkcGF0aCk7IG9wZW4gPSBwb2x5bGluZSAoZHJhd29wZW5wYXRoKS5cbiAgICAgIHRoaXMuY29tbWl0UG9seWdvbih0aGlzLm1vZGUgPT09ICdkcmF3Y2xvc2VkcGF0aCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBNb3ZlL3Jlc2l6ZSBhbHJlYWR5IGFwcGxpZWQgbGl2ZTsgZmx1c2ggdGhlIGNvYWxlc2NlZCBlZGl0cyArIGVuZCB0aGVcbiAgICAvLyBnZXN0dXJlIChrZWVwIHNlbGVjdGlvbikuXG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5zdG9yZS5lbmRCYXRjaCgpO1xuICAgICAgdGhpcy5lZGl0ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRmluaXNoIGEgcnViYmVyLWJhbmQgc2VsZWN0aW9uOiBzZWxlY3QgZXZlcnkgcmVnaW9uIHRoZSBiYW5kIGludGVyc2VjdHMuXG4gICAgaWYgKHRoaXMuYmFuZFN0YXJ0KSB7XG4gICAgICBjb25zdCBzdGFydCA9IHRoaXMuYmFuZFN0YXJ0O1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5iYW5kQ3VycmVudCA/PyBzdGFydDtcbiAgICAgIHRoaXMuYmFuZFN0YXJ0ID0gdGhpcy5iYW5kQ3VycmVudCA9IG51bGw7XG4gICAgICBjb25zdCB4MCA9IE1hdGgubWluKHN0YXJ0LngsIGVuZC54KSxcbiAgICAgICAgeTAgPSBNYXRoLm1pbihzdGFydC55LCBlbmQueSk7XG4gICAgICBjb25zdCB4MSA9IE1hdGgubWF4KHN0YXJ0LngsIGVuZC54KSxcbiAgICAgICAgeTEgPSBNYXRoLm1heChzdGFydC55LCBlbmQueSk7XG4gICAgICAvLyBPbmx5IGEgcmVhbCBkcmFnIHNlbGVjdHM7IGEgY2xpY2stc2l6ZWQgYmFuZCBmYWxscyB0aHJvdWdoIHRvIG9uQ2xpY2suXG4gICAgICBpZiAodGhpcy5iYW5kRHJhZ2dlZCAmJiAoeDEgLSB4MCA+IDIgfHwgeTEgLSB5MCA+IDIpKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRTaGFwZUluZGljZXMoXG4gICAgICAgICAgcmVnaW9uc0luUmVjdCh0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKSwgeDAsIHkwLCB4MSwgeTEsIHsgc2tpcDogKHIpID0+IHRoaXMuaGlkZGVuKHIpIH0pLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlbGVjdFNvdXJjZUluKHgwLCB5MCwgeDEsIHkxKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVuZGVyT3ZlcmxheSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25DbGljayhlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2VsZWN0Jykge1xuICAgICAgLy8gQSBtb3ZlL3Jlc2l6ZS92ZXJ0ZXggZHJhZyBvciBhIHJ1YmJlci1iYW5kIGRyYWcgYWxzbyBlbmRzIHdpdGggYSBjbGlja1xuICAgICAgLy8gZXZlbnQg4oCUIGRvbid0IHRyZWF0IGl0IGFzIGEgcmUtc2VsZWN0aW9uLlxuICAgICAgaWYgKHRoaXMuZWRpdERyYWdnZWQpIHtcbiAgICAgICAgdGhpcy5lZGl0RHJhZ2dlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5iYW5kRHJhZ2dlZCkge1xuICAgICAgICB0aGlzLmJhbmREcmFnZ2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFNoaWZ0IChvciBDbWQvQ3RybCkgdG9nZ2xlcyB0aGUgY2xpY2tlZCByZWdpb24gaW4vb3V0IG9mIHRoZSBjdXJyZW50XG4gICAgICAvLyBzZWxlY3Rpb247IGEgcGxhaW4gY2xpY2sgcmVwbGFjZXMgaXQuXG4gICAgICBjb25zdCBvZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgICAgIGNvbnN0IGFkZGl0aXZlID0gISFvZSAmJiAob2Uuc2hpZnRLZXkgfHwgb2UubWV0YUtleSB8fCBvZS5jdHJsS2V5KTtcbiAgICAgIHRoaXMuc2VsZWN0QXQodGhpcy50b1dvcmxkKGUucG9zaXRpb24pLCBhZGRpdGl2ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdkcmF3cG9seWdvbicpIHtcbiAgICAgIHRoaXMub25EcmF3UG9seWdvbkNsaWNrKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlID09PSAnYWRkcG9pbnQnKSB7XG4gICAgICAvLyBJbnNlcnQgYSB2ZXJ0ZXggb24gdGhlIGNsaWNrZWQgZWRnZSDigJQgZXh0ZXJpb3Igb3IgYW4gaW50ZXJpb3IgcmluZy5cbiAgICAgIGNvbnN0IHNlbCA9IHRoaXMuc2VsZWN0ZWRSZWdpb25JbmZvKCk7XG4gICAgICBjb25zdCBlZGdlID0gc2VsID8gdGhpcy5oaXRFZGdlKGUucG9zaXRpb24sIHNlbC5yZWdpb24pIDogbnVsbDtcbiAgICAgIGlmIChzZWwgJiYgZWRnZSkge1xuICAgICAgICBpZiAoZWRnZS5yaW5nIDwgMCkgdGhpcy5zdG9yZS5hZGRWZXJ0ZXgoc2VsLnJlZ2lvbi5pZCwgZWRnZS5zZWdJbmRleCwgZWRnZS54LCBlZGdlLnkpO1xuICAgICAgICBlbHNlIHRoaXMuc3RvcmUuYWRkSG9sZVZlcnRleChzZWwucmVnaW9uLmlkLCBlZGdlLnJpbmcsIGVkZ2Uuc2VnSW5kZXgsIGVkZ2UueCwgZWRnZS55KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2RlbGV0ZXBvaW50Jykge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBjbGlja2VkIHZlcnRleCDigJQgZXh0ZXJpb3Igb3IgYW4gaW50ZXJpb3IgcmluZyAoaml0LXVpIzg1KS5cbiAgICAgIGNvbnN0IHNlbCA9IHRoaXMuc2VsZWN0ZWRSZWdpb25JbmZvKCk7XG4gICAgICBjb25zdCB2aCA9IHRoaXMuaGl0UG9seWdvbkhhbmRsZShlLnBvc2l0aW9uLCBmYWxzZSk7XG4gICAgICBpZiAoc2VsICYmIHZoKSB7XG4gICAgICAgIGlmICh2aC5yaW5nIDwgMCkgdGhpcy5zdG9yZS5kZWxldGVWZXJ0ZXgoc2VsLnJlZ2lvbi5pZCwgdmguaW5kZXgpO1xuICAgICAgICBlbHNlIHRoaXMuc3RvcmUuZGVsZXRlSG9sZVZlcnRleChzZWwucmVnaW9uLmlkLCB2aC5yaW5nLCB2aC5pbmRleCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrLXRvLXBsYWNlIHBvbHlnb24gKCdkcmF3cG9seWdvbicpOiB0aGUgZmlyc3QgY2xpY2sgc3RhcnRzIHRoZVxuICAgKiBwb2x5Z29uLCBlYWNoIHN1YnNlcXVlbnQgY2xpY2sgYWRkcyBhIHZlcnRleCwgYW5kIGNsaWNraW5nIG5lYXIgdGhlIGZpcnN0XG4gICAqIHZlcnRleCAod2l0aCBhdCBsZWFzdCAzIHBsYWNlZCkgY2xvc2VzIGFuZCBjb21taXRzIGl0LlxuICAgKi9cbiAgcHJpdmF0ZSBvbkRyYXdQb2x5Z29uQ2xpY2soZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgcHQgPSB0aGlzLnRvSW1hZ2UoZS5wb3NpdGlvbik7XG4gICAgaWYgKCF0aGlzLmRyYXdpbmdQb2x5Z29uKSB7XG4gICAgICB0aGlzLnBvbHlQb2ludHMgPSBbcHRdO1xuICAgICAgdGhpcy5kcmF3aW5nUG9seWdvbiA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlck92ZXJsYXkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLnRvUHgodGhpcy5wb2x5UG9pbnRzWzBdLngsIHRoaXMucG9seVBvaW50c1swXS55KTtcbiAgICBjb25zdCBvbkZpcnN0ID0gTWF0aC5oeXBvdChlLnBvc2l0aW9uLnggLSBmaXJzdC54LCBlLnBvc2l0aW9uLnkgLSBmaXJzdC55KSA8PSBFRElUX1RPTF9QWDtcbiAgICBpZiAob25GaXJzdCAmJiB0aGlzLnBvbHlQb2ludHMubGVuZ3RoID49IDMpIHtcbiAgICAgIHRoaXMuY29tbWl0UG9seWdvbih0cnVlKTsgLy8gY2xvc2VzICsgcmVzZXRzIGluLXByb2dyZXNzIChpbmNsLiBkcmF3aW5nUG9seWdvbilcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wb2x5UG9pbnRzLnB1c2gocHQpO1xuICAgIHRoaXMucmVuZGVyT3ZlcmxheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvdmVyIGZlZWRiYWNrIGluIHNlbGVjdCBtb2RlOiBtb3ZlL3Jlc2l6ZSBjdXJzb3JzIG92ZXIgdGhlIHNlbGVjdGVkXG4gICAqIHJlZ2lvbidzIGJvZHkvZWRnZXMvY29ybmVycywgYSBwb2ludGVyIG92ZXIgYW55IG90aGVyIHJlZ2lvbi5cbiAgICovXG4gIHByaXZhdGUgb25Nb3ZlKGU6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGUgIT09ICdzZWxlY3QnKSByZXR1cm47XG4gICAgLy8gQSBncmFiYmFibGUgYmV6aWVyIGNvbnRyb2wgaGFuZGxlIG9yIHZlcnRleCBvZiB0aGUgc2VsZWN0ZWQgcG9seWdvbiB0YWtlc1xuICAgIC8vIHByaW9yaXR5LlxuICAgIGlmICh0aGlzLmhpdFBvbHlnb25IYW5kbGUoZS5wb3NpdGlvbikpIHtcbiAgICAgIHRoaXMudmlld2VyLmNhbnZhcy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV6ID0gdGhpcy5lZGl0Wm9uZUF0KGUucG9zaXRpb24pO1xuICAgIGlmIChleikge1xuICAgICAgdGhpcy52aWV3ZXIuY2FudmFzLnN0eWxlLmN1cnNvciA9IFpPTkVfQ1VSU09SW2V6LnpvbmVdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwdCA9IHRoaXMudG9Xb3JsZChlLnBvc2l0aW9uKTtcbiAgICB0aGlzLnVwZGF0ZUN1cnNvcih0aGlzLnJlZ2lvbkluZGV4QXQocHQpID49IDAgfHwgISF0aGlzLnNvdXJjZUxheWVyPy5mZWF0dXJlQXQocHQueCwgcHQueSwgT1BFTl9QQVRIX1RPTF9QWCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtb3ZlL3Jlc2l6ZSB6b25lIHVuZGVyIHRoZSBjdXJzb3IgZm9yIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgcmVnaW9uXG4gICAqIChyZWN0YW5nbGVzIGdldCBlZGdlL2Nvcm5lciBoYW5kbGVzICsgYm9keTsgcG9seWdvbnMgZ2V0IGJvZHktbW92ZSBvbmx5KSxcbiAgICogb3IgbnVsbCBpZiB0aGUgY3Vyc29yIGlzbid0IG92ZXIgdGhlIHNlbGVjdGVkIHJlZ2lvbi5cbiAgICovXG4gIHByaXZhdGUgZWRpdFpvbmVBdChwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KTogeyB6b25lOiBFZGl0Wm9uZTsgaW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRbdGhpcy5zZWxlY3RlZC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCByZWdpb24gPSB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKVtpbmRleF07XG4gICAgaWYgKCFyZWdpb24pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGIgPSByZWdpb24uYm91bmRzO1xuICAgIGlmIChiIGluc3RhbmNlb2YgUmVjdGFuZ2xlKSB7XG4gICAgICBjb25zdCBhID0gdGhpcy50b1B4KGIueCwgYi55KTtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLnRvUHgoYi54ICsgYi53aWR0aCwgYi55ICsgYi5oZWlnaHQpO1xuICAgICAgY29uc3Qgem9uZSA9IHJlY3Rab25lKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHtcbiAgICAgICAgeDA6IE1hdGgubWluKGEueCwgYy54KSxcbiAgICAgICAgeTA6IE1hdGgubWluKGEueSwgYy55KSxcbiAgICAgICAgeDE6IE1hdGgubWF4KGEueCwgYy54KSxcbiAgICAgICAgeTE6IE1hdGgubWF4KGEueSwgYy55KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHpvbmUgPyB7IHpvbmUsIGluZGV4IH0gOiBudWxsO1xuICAgIH1cbiAgICBpZiAoYiBpbnN0YW5jZW9mIFBvbHlnb24gfHwgYiBpbnN0YW5jZW9mIE11bHRpUG9seWdvbikge1xuICAgICAgLy8gUG9seWdvbnMgKyBtdWx0aS1wYXJ0IHJlZ2lvbnMgc3VwcG9ydCB3aG9sZS1yZWdpb24gbW92ZSAobm8gcmVzaXplIHpvbmVzKS5cbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zUG9pbnQocmVnaW9uLCBwb3NpdGlvbikgPyB7IHpvbmU6ICdtb3ZlJywgaW5kZXggfSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIFRoZSBjdXJyZW50bHktc2VsZWN0ZWQgcmVnaW9uICh0aGUgbGFzdCBvbmUgc2VsZWN0ZWQpLCBvciBudWxsLiAqL1xuICBwcml2YXRlIHNlbGVjdGVkUmVnaW9uSW5mbygpOiB7IHJlZ2lvbjogUmVnaW9uOyBpbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFt0aGlzLnNlbGVjdGVkLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuc3RvcmUuZ2V0UmVnaW9ucygpW2luZGV4XTtcbiAgICByZXR1cm4gcmVnaW9uID8geyByZWdpb24sIGluZGV4IH0gOiBudWxsO1xuICB9XG5cbiAgLyoqIFRoZSBiZXppZXIgY29udHJvbCBoYW5kbGUgKHdoZW4gYGJlemllcmApIG9yIHZlcnRleCBvZiB0aGUgc2VsZWN0ZWQgcG9seWdvblxuICAgKiAgdW5kZXIgdGhlIGN1cnNvciAoc2NyZWVuLXBpeGVsIHRvbGVyYW5jZSksIG9yIG51bGwuIFJlY3RhbmdsZXMgaGF2ZSBub1xuICAgKiAgZWRpdGFibGUgdmVydGljZXMgKHRoZWlyIGNvcm5lcnMgYXJlIHJlc2l6ZSB6b25lcywgc2VlIHtAbGluayByZWN0Wm9uZX0pLiAqL1xuICBwcml2YXRlIGhpdFBvbHlnb25IYW5kbGUoXG4gICAgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSxcbiAgICBiZXppZXIgPSB0cnVlLFxuICApOiB7IGtpbmQ6ICd2ZXJ0ZXgnIHwgJ2Jlemllcic7IHJpbmc6IG51bWJlcjsgaW5kZXg6IG51bWJlcjsgc2lkZTogJ2luJyB8ICdvdXQnIH0gfCBudWxsIHtcbiAgICBjb25zdCBzZWwgPSB0aGlzLnNlbGVjdGVkUmVnaW9uSW5mbygpO1xuICAgIGlmICghc2VsIHx8ICEoc2VsLnJlZ2lvbi5ib3VuZHMgaW5zdGFuY2VvZiBQb2x5Z29uKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgaGl0ID0gaGl0SGFuZGxlKHNlbC5yZWdpb24sIHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMudG9TY3JlZW4sIEVESVRfVE9MX1BYLCB7IGJlemllciB9KTtcbiAgICBpZiAoIWhpdCB8fCBoaXQua2luZCA9PT0gJ2Nvcm5lcicpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB7IGtpbmQ6IGhpdC5raW5kLCByaW5nOiBoaXQucmluZywgaW5kZXg6IGhpdC5pbmRleCwgc2lkZTogaGl0LmtpbmQgPT09ICdiZXppZXInID8gaGl0LnNpZGUgOiAnb3V0JyB9O1xuICB9XG5cbiAgLyoqIFRoZSBlZGdlIG9mIGByZWdpb25gJ3MgcG9seWdvbiBuZWFyZXN0IHRoZSBjdXJzb3IgKHdpdGhpbiB0b2xlcmFuY2UpLCB3aXRoXG4gICAqICB0aGUgY2xpY2tlZCBwb2ludCBpbiBpbWFnZSBjb29yZHMgYXMgdGhlIGluc2VydGlvbiBwb3NpdGlvbiwgb3IgbnVsbC4gKi9cbiAgcHJpdmF0ZSBoaXRFZGdlKFxuICAgIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXG4gICAgcmVnaW9uOiBSZWdpb24sXG4gICk6IHsgcmluZzogbnVtYmVyOyBzZWdJbmRleDogbnVtYmVyOyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgY29uc3QgZWRnZSA9IG5lYXJlc3RFZGdlKHJlZ2lvbiwgcG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy50b1NjcmVlbik7XG4gICAgaWYgKCFlZGdlIHx8IGVkZ2UuZGlzdCA+IEVESVRfVE9MX1BYKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpbWcgPSB0aGlzLnRvSW1hZ2UocG9zaXRpb24pO1xuICAgIHJldHVybiB7IHJpbmc6IGVkZ2UucmluZywgc2VnSW5kZXg6IGVkZ2Uuc2VnSW5kZXgsIHg6IGltZy54LCB5OiBpbWcueSB9O1xuICB9XG5cbiAgLyoqIFNuYXBzaG90IHRoZSBzZWxlY3RlZCByZWdpb24ncyBnZW9tZXRyeSBhdCB0aGUgc3RhcnQgb2YgYW4gZWRpdC4gKi9cbiAgcHJpdmF0ZSBzbmFwc2hvdChyZWdpb246IFJlZ2lvbik6IEVkaXRTbmFwc2hvdCB7XG4gICAgY29uc3QgYiA9IHJlZ2lvbi5ib3VuZHM7XG4gICAgaWYgKGIgaW5zdGFuY2VvZiBQb2x5Z29uIHx8IGIgaW5zdGFuY2VvZiBNdWx0aVBvbHlnb24pIHJldHVybiB7IGtpbmQ6ICdzaGFwZScsIGJvdW5kczogYiB9O1xuICAgIGlmIChiIGluc3RhbmNlb2YgUmVjdGFuZ2xlKSByZXR1cm4geyBraW5kOiAncmVjdCcsIHg6IGIueCwgeTogYi55LCB3OiBiLndpZHRoLCBoOiBiLmhlaWdodCB9O1xuICAgIHJldHVybiB7IGtpbmQ6ICdyZWN0JywgeDogMCwgeTogMCwgdzogMCwgaDogMCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSBpbi1wcm9ncmVzcyBtb3ZlL3Jlc2l6ZSB0byB0aGUgcmVnaW9uLCBsaXZlLCB0aHJvdWdoIHRoZVxuICAgKiBSZWdpb24tbmF0aXZlIGVkaXQgQVBJLiBSZWNvbXB1dGVkIGFic29sdXRlbHkgZnJvbSB0aGUgZ2VzdHVyZS1zdGFydFxuICAgKiBzbmFwc2hvdCAoYG9yaWdgKSArIHRoZSB0b3RhbCBkZWx0YSwgc28gZWFjaCBmcmFtZSBpcyBpZGVtcG90ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUVkaXQoY3VySW1nOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZWRpdC5raW5kID09PSAndmVydGV4Jykge1xuICAgICAgLy8gRHJhZyBhIHNpbmdsZSB2ZXJ0ZXggdG8gdGhlIGN1cnNvciAoYWJzb2x1dGUg4oCUIGlkZW1wb3RlbnQpLiBSb3V0ZSB0byB0aGVcbiAgICAgIC8vIGV4dGVyaW9yIG9yIHRoZSBtYXRjaGluZyBpbnRlcmlvciByaW5nIChob2xlKSDigJQgaml0LXVpIzg1LlxuICAgICAgaWYgKHRoaXMuZWRpdC5yaW5nIDwgMCkge1xuICAgICAgICB0aGlzLnN0b3JlLm1vdmVWZXJ0ZXgodGhpcy5lZGl0LmlkLCB0aGlzLmVkaXQudmVydGV4SW5kZXgsIGN1ckltZy54LCBjdXJJbWcueSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0b3JlLm1vdmVIb2xlVmVydGV4KHRoaXMuZWRpdC5pZCwgdGhpcy5lZGl0LnJpbmcsIHRoaXMuZWRpdC52ZXJ0ZXhJbmRleCwgY3VySW1nLngsIGN1ckltZy55KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVkcmF3KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdC5raW5kID09PSAnaGFuZGxlJykge1xuICAgICAgLy8gRHJhZyBhIGJlemllciBjb250cm9sIGhhbmRsZSB0byB0aGUgY3Vyc29yIOKAlCBleHRlcmlvciAocmluZyAtMSkgb3IgYSBkb251dCBob2xlIHJpbmcuXG4gICAgICBpZiAodGhpcy5lZGl0LnJpbmcgPCAwKSB7XG4gICAgICAgIHRoaXMuc3RvcmUubW92ZUJlemllckhhbmRsZSh0aGlzLmVkaXQuaWQsIHRoaXMuZWRpdC52ZXJ0ZXhJbmRleCwgdGhpcy5lZGl0LmhhbmRsZVNpZGUsIGN1ckltZy54LCBjdXJJbWcueSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0b3JlLm1vdmVIb2xlQmV6aWVySGFuZGxlKFxuICAgICAgICAgIHRoaXMuZWRpdC5pZCxcbiAgICAgICAgICB0aGlzLmVkaXQucmluZyxcbiAgICAgICAgICB0aGlzLmVkaXQudmVydGV4SW5kZXgsXG4gICAgICAgICAgdGhpcy5lZGl0LmhhbmRsZVNpZGUsXG4gICAgICAgICAgY3VySW1nLngsXG4gICAgICAgICAgY3VySW1nLnksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlZHJhdygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGR4ID0gY3VySW1nLnggLSB0aGlzLmVkaXQuc3RhcnRJbWcueDtcbiAgICBjb25zdCBkeSA9IGN1ckltZy55IC0gdGhpcy5lZGl0LnN0YXJ0SW1nLnk7XG5cbiAgICBjb25zdCBvID0gdGhpcy5lZGl0Lm9yaWc7XG4gICAgaWYgKCFvKSByZXR1cm47XG4gICAgaWYgKG8ua2luZCA9PT0gJ3JlY3QnKSB7XG4gICAgICBjb25zdCBib3ggPSByZXNpemVSZWN0KHsgeDogby54LCB5OiBvLnksIHdpZHRoOiBvLncsIGhlaWdodDogby5oIH0sIHRoaXMuZWRpdC56b25lLCBkeCwgZHkpO1xuICAgICAgdGhpcy5zdG9yZS51cGRhdGVCb3VuZHModGhpcy5lZGl0LmlkLCBPYmplY3QuYXNzaWduKG5ldyBSZWN0YW5nbGUoKSwgYm94KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBvbHlnb24gLyBtdWx0aS1wYXJ0IHJlZ2lvbjogdHJhbnNsYXRlIGV2ZXJ5IHZlcnRleCwgaG9sZSBhbmQgcGFydCwgcm91bmRlZCB0b1xuICAgICAgLy8gd2hvbGUgcGl4ZWxzLiBCZXppZXIgaGFuZGxlIG9mZnNldHMgYXJlIHJlbGF0aXZlLCBzbyB0aGV5IGNhcnJ5IG92ZXIgdW5jaGFuZ2VkLlxuICAgICAgdGhpcy5zdG9yZS51cGRhdGVCb3VuZHModGhpcy5lZGl0LmlkLCB0cmFuc2xhdGVCb3VuZHMoby5ib3VuZHMsIGR4LCBkeSwgTWF0aC5yb3VuZCkpO1xuICAgIH1cbiAgICB0aGlzLnJlZHJhdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RBdChwdDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBhZGRpdGl2ZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5yZWdpb25JbmRleEF0KHB0KTtcbiAgICAvLyBOb3Qgb24gYSByZWdpb246IGEgZmVhdHVyZSBvZiB0aGUgcmVnaW9uIHNvdXJjZSB0aGVyZSBpcyB0YWtlbiBpbnRvIHRoZSByZWdpb25zIGFuZFxuICAgIC8vIHNlbGVjdGVkICh0aGUgc291cmNlIGRyYXdzIGl0IHVudGlsIHRoZW4pLlxuICAgIGNvbnN0IGZlYXR1cmUgPSBpZHggPCAwID8gdGhpcy5zb3VyY2VMYXllcj8uZmVhdHVyZUF0KHB0LngsIHB0LnksIE9QRU5fUEFUSF9UT0xfUFgpIDogbnVsbDtcbiAgICBpZiAoZmVhdHVyZSAmJiB0aGlzLnN0b3JlLnNlbGVjdFNvdXJjZUZlYXR1cmVzKSB7XG4gICAgICB2b2lkIHRoaXMuc3RvcmUuc2VsZWN0U291cmNlRmVhdHVyZXMoW2ZlYXR1cmUuaWRdLCBhZGRpdGl2ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhZGRpdGl2ZSkge1xuICAgICAgLy8gU2hpZnQtY2xpY2sgb24gZW1wdHkgc3BhY2Uga2VlcHMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICAgICAgaWYgKGlkeCA8IDApIHJldHVybjtcbiAgICAgIC8vIGB0aGlzLnNlbGVjdGVkYCBtaXJyb3JzIHRoZSBzdG9yZSdzIGN1cnJlbnQgc2VsZWN0aW9uIChrZXB0IGluIHN5bmMgdmlhXG4gICAgICAvLyB0aGUgc3Vic2NyaXB0aW9uKSwgc28gaXQncyB0aGUgc291cmNlIG9mIHRydXRoIHdpdGhvdXQgYSBzeW5jIGdldHRlci5cbiAgICAgIGNvbnN0IGN1ciA9IHRoaXMuc2VsZWN0ZWQuc2xpY2UoKTtcbiAgICAgIGNvbnN0IGF0ID0gY3VyLmluZGV4T2YoaWR4KTtcbiAgICAgIGlmIChhdCA+PSAwKVxuICAgICAgICBjdXIuc3BsaWNlKGF0LCAxKTsgLy8gdG9nZ2xlIG9mZlxuICAgICAgZWxzZSBjdXIucHVzaChpZHgpOyAvLyB0b2dnbGUgb25cbiAgICAgIHRoaXMuc3RvcmUuc2V0U2VsZWN0ZWRTaGFwZUluZGljZXMoY3VyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdG9yZS5zZXRTZWxlY3RlZFNoYXBlSW5kaWNlcyhpZHggPj0gMCA/IFtpZHhdIDogW10pO1xuICB9XG5cbiAgLyoqIFRha2UgdGhlIHJlZ2lvbi1zb3VyY2UgZmVhdHVyZXMgdGhlIGJhbmQgbWVldHMgaW50byB0aGUgcmVnaW9ucywgYWRkaW5nIHRoZW0gdG8gdGhlIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBzZWxlY3RTb3VyY2VJbih4MDogbnVtYmVyLCB5MDogbnVtYmVyLCB4MTogbnVtYmVyLCB5MTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLnNvdXJjZUxheWVyPy5mZWF0dXJlc0luUmVjdCh4MCwgeTAsIHgxLCB5MSkgPz8gW107XG4gICAgaWYgKCFmZWF0dXJlcy5sZW5ndGggfHwgIXRoaXMuc3RvcmUuc2VsZWN0U291cmNlRmVhdHVyZXMpIHJldHVybjtcbiAgICBjb25zdCBpZHMgPSBmZWF0dXJlcy5zbGljZSgwLCBTT1VSQ0VfTUFSUVVFRV9MSU1JVCkubWFwKChmKSA9PiBmLmlkKTtcbiAgICB2b2lkIHRoaXMuc3RvcmUuc2VsZWN0U291cmNlRmVhdHVyZXMoaWRzLCB0cnVlKTtcbiAgfVxuXG4gIC8qKiBJbmRleCBvZiB0aGUgdG9wbW9zdCByZWdpb24gdW5kZXIgYW4gaW1hZ2UgcG9pbnQsIG9yIC0xLiAqL1xuICBwcml2YXRlIHJlZ2lvbkluZGV4QXQocHQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSk6IG51bWJlciB7XG4gICAgY29uc3Qgb3B0cyA9IHsgdG9TY3JlZW46IHRoaXMudG9TY3JlZW4sIHRvbFB4OiBPUEVOX1BBVEhfVE9MX1BYLCBza2lwOiAocjogUmVnaW9uKSA9PiB0aGlzLmhpZGRlbihyKSB9O1xuICAgIHJldHVybiB0b3Btb3N0UmVnaW9uQXQodGhpcy5zdG9yZS5nZXRSZWdpb25zKCksIHB0LngsIHB0LnksIG9wdHMpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYSByZWdpb24ncyBjbGFzcyBpcyBoaWRkZW4gKG5vdCBkcmF3biwgbm90IHBpY2tlZCkuICovXG4gIHByaXZhdGUgaGlkZGVuKHJlZ2lvbjogUGljazxSZWdpb24sICdsYWJlbCc+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdG9yZS5pc0NsYXNzSGlkZGVuPy4ocmVnaW9uLmxhYmVsKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBlbGVtZW50LXBpeGVsIGBwb3NpdGlvbmAgbGFuZHMgb24gYHJlZ2lvbmAgKHNlZSBgcmVnaW9uQ29udGFpbnNgKS4gKi9cbiAgcHJpdmF0ZSBjb250YWluc1BvaW50KHJlZ2lvbjogUmVnaW9uLCBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHQgPSB0aGlzLnRvV29ybGQocG9zaXRpb24pO1xuICAgIHJldHVybiByZWdpb25Db250YWlucyhyZWdpb24sIHB0LngsIHB0LnksIHsgdG9TY3JlZW46IHRoaXMudG9TY3JlZW4sIHRvbFB4OiBPUEVOX1BBVEhfVE9MX1BYIH0pO1xuICB9XG5cbiAgLyoqIEFiYW5kb24gd2hhdGV2ZXIgcG9pbnRlciBnZXN0dXJlIGlzIGluIHByb2dyZXNzIChkcmF3aW5nLCBlZGl0IGRyYWcsXG4gICAqICBydWJiZXIgYmFuZCkgYW5kIGNsb3NlIGl0cyBzdG9yZSBiYXRjaC4gKi9cbiAgcHJpdmF0ZSBlbmRHZXN0dXJlKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRJblByb2dyZXNzKCk7XG4gICAgdGhpcy5iYW5kU3RhcnQgPSB0aGlzLmJhbmRDdXJyZW50ID0gbnVsbDtcbiAgICB0aGlzLmJhbmREcmFnZ2VkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0SW5Qcm9ncmVzcygpOiB2b2lkIHtcbiAgICB0aGlzLnJlY3RTdGFydCA9IHRoaXMucmVjdEN1cnJlbnQgPSBudWxsO1xuICAgIHRoaXMucG9seVBvaW50cyA9IFtdO1xuICAgIHRoaXMuZnJlZWhhbmREcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd2luZ1BvbHlnb24gPSBmYWxzZTtcbiAgICB0aGlzLmxhc3RGcmVlaGFuZFB4ID0gbnVsbDtcbiAgICAvLyBDbG9zZSBhbnkgb3BlbiBlZGl0IGJhdGNoIChlLmcuIGEgbW9kZSBzd2l0Y2ggbWlkLWRyYWcpIHNvIHRoZSBzdG9yZSdzXG4gICAgLy8gZW1pdCBjb2FsZXNjaW5nIGRvZXNuJ3QgZ2V0IHN0dWNrLlxuICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgIHRoaXMuc3RvcmUuZW5kQmF0Y2goKTtcbiAgICAgIHRoaXMuZWRpdCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIGNvbW1pdCB0byB0aGUgc3RvcmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHByaXZhdGUgY29tbWl0UmVjdGFuZ2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBSZWdpb24oKTtcbiAgICBjb25zdCByZWN0ID0gbmV3IFJlY3RhbmdsZSgpO1xuICAgIHJlY3QueCA9IHg7XG4gICAgcmVjdC55ID0geTtcbiAgICByZWN0LndpZHRoID0gdztcbiAgICByZWN0LmhlaWdodCA9IGg7XG4gICAgcmVnaW9uLmJvdW5kcyA9IHJlY3Q7XG4gICAgcmVnaW9uLmNvbG9yID0gdGhpcy5zdG9yZS5nZXRTaGFwZUNvbG9yKCk7XG4gICAgdGhpcy5jb21taXRSZWdpb24ocmVnaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tbWl0UG9seWdvbihjbG9zZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wb2x5UG9pbnRzLmxlbmd0aCA8IChjbG9zZWQgPyAzIDogMikpIHtcbiAgICAgIHRoaXMucmVzZXRJblByb2dyZXNzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBSZWdpb24oKTtcbiAgICByZWdpb24uYm91bmRzID0gbWFrZVBvbHlnb24oXG4gICAgICB0aGlzLnBvbHlQb2ludHMubWFwKChwKSA9PiBwLngpLFxuICAgICAgdGhpcy5wb2x5UG9pbnRzLm1hcCgocCkgPT4gcC55KSxcbiAgICAgIHsgY2xvc2VkIH0sXG4gICAgKTtcbiAgICByZWdpb24uY29sb3IgPSB0aGlzLnN0b3JlLmdldFNoYXBlQ29sb3IoKTtcbiAgICB0aGlzLnJlc2V0SW5Qcm9ncmVzcygpO1xuICAgIHRoaXMuY29tbWl0UmVnaW9uKHJlZ2lvbik7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZnJlc2hseS1kcmF3biByZWdpb24gdG8gdGhlIHNoYXJlZCBzdG9yZSBhbmQgcmVkcmF3IGltbWVkaWF0ZWx5LiBUaGVcbiAgICogc3RvcmUgbWludHMgdGhlIGlkLCBzZWxlY3RzIHRoZSBuZXcgcmVnaW9uIChzbyBpdCByZW5kZXJzIHNvbGlkL2hpZ2hsaWdodGVkXG4gICAqIHJhdGhlciB0aGFuIGFzIGEgZGFzaGVkIGluLXByb2dyZXNzIHNoYXBlKSBhbmQgZW1pdHMgdGhlIGZ1bGwgcmVnaW9uIGxpc3QgdG9cbiAgICogdGhlIFJlZ2lvbiBFZGl0b3Ig4oCUIHdlIHN0aWxsIHJlZHJhdyBsb2NhbGx5IHJhdGhlciB0aGFuIHJlbHlpbmcgc29sZWx5IG9uXG4gICAqIHRoZSBzdG9yZSdzIHVwZGF0ZSBldmVudCwgd2hpY2ggY2FuIGJlIHN3YWxsb3dlZCB3aGVuIFBsb3RseSBpc24ndCBhY3RpdmUuXG4gICAqL1xuICBwcml2YXRlIGNvbW1pdFJlZ2lvbihyZWdpb246IFJlZ2lvbik6IHZvaWQge1xuICAgIC8vIERlZmF1bHQgY2xhc3MvYW5ub3RhdGlvbiBuYW1lLCBtYXRjaGluZyB0aGUgUGxvdGx5IGJhY2tlbmQgYW5kIHRoZSBSZWdpb25cbiAgICAvLyBFZGl0b3IncyBcIkFkZFwiIGFjdGlvbnMgc28gYSBmcmVzaGx5IGRyYXduIHJlZ2lvbiBpc24ndCB1bmxhYmVsZWQuXG4gICAgaWYgKHJlZ2lvbi5sYWJlbCA9PSBudWxsKSByZWdpb24ubGFiZWwgPSAnUmVnaW9uJztcbiAgICB0aGlzLnN0b3JlLmFkZFJlZ2lvbihyZWdpb24pO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgc2VsZWN0ZWQgcmVnaW9uKHMpIHRvL2Zyb20gYSBiZXppZXIgY3VydmUgKHRvQmV6aWVyID0gdHJ1ZSAvXG4gICAqIHRvUG9seWdvbiA9IGZhbHNlKS4gT25lLXNob3Q7IHRoZSBhbmNob3JzIGFyZSB1bmNoYW5nZWQsXG4gICAqIG9ubHkgdGhlIHNtb290aC1jdXJ2ZSByZW5kZXJpbmcgaXMgdG9nZ2xlZC5cbiAgICovXG4gIHNldFNlbGVjdGVkQmV6aWVyKGJlemllcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHJlZ2lvbnMgPSB0aGlzLnN0b3JlLmdldFJlZ2lvbnMoKTtcbiAgICBmb3IgKGNvbnN0IGlkeCBvZiB0aGlzLnNlbGVjdGVkKSB7XG4gICAgICBjb25zdCByZWdpb24gPSByZWdpb25zW2lkeF07XG4gICAgICBpZiAocmVnaW9uKSB0aGlzLnN0b3JlLnNldEJlemllcihyZWdpb24uaWQsIGJlemllcik7XG4gICAgfVxuICAgIHRoaXMucmVkcmF3KCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -39,4 +39,4 @@ export function exportTiffFilename(fileName) {
|
|
|
39
39
|
const stem = (fileName || 'image').replace(/\.[^.]+$/, '');
|
|
40
40
|
return `${stem}_16bit.ome.tif`;
|
|
41
41
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1wcm90b2NvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL3RpbGUtc2VydmVyL3RpbGUtcHJvdG9jb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFzREgsdURBQXVEO0FBQ3ZELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLE9BQWU7SUFDdkQsT0FBTyxHQUFHLEdBQUcsbUJBQW1CLE9BQU8sRUFBRSxDQUFDO0FBQzVDLENBQUM7QUFFRDttREFDbUQ7QUFDbkQsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFFLENBQWE7SUFDdEUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUQsT0FBTyxHQUFHLEdBQUcsYUFBYSxPQUFPLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ2xILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQVNqRCx3RkFBd0Y7QUFDeEYsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxHQUFXLEVBQ1gsT0FBZSxFQUNmLENBQXlCLEVBQ3pCLGNBQXNCLHNCQUFzQjtJQUU1QyxPQUFPLEdBQUcsR0FBRyxrQkFBa0IsT0FBTyxZQUFZLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxNQUFNLFdBQVcsRUFBRSxDQUFDO0FBQ3pHLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsR0FBVyxFQUNYLE9BQWUsRUFDZixDQUFTLEVBQ1QsT0FBMEIsRUFDMUIsWUFBb0I7SUFFcEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsYUFBYSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRyxPQUFPLEdBQUcsR0FBRyxvQkFBb0IsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN6RCxDQUFDO0FBRUQsc0VBQXNFO0FBQ3RFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxRQUFtQztJQUNwRSxNQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBqaXQtc2VydmljZSB0aWxlIHByb3RvY29sLCBzaGFyZWQgYnkgdGhlIE9wZW5TZWFkcmFnb24gYW5kIG5hcGFyaS1qcyBiYWNrZW5kczogdGhlXG4gKiBgL3RpbGVzL2luZm9gIGRlc2NyaXB0b3IsIGFuZCB0aGUgVVJMcyBvZiBgL3RpbGVzL2luZm9gLCBgL3RpbGVgLCBgL2hpc3RvZ3JhbWAgYW5kXG4gKiBgL2V4cG9ydC90aWZmYC4gRWFjaCBVUkwgc2hhcGUgbGl2ZXMgaGVyZSBvbmNlIOKAlCB0aGUgYmFja2VuZHMgdXNlZCB0byBzdHJpbmctYnVpbGQgdGhlbVxuICogc2VwYXJhdGVseSBhbmQgaGFkIGFscmVhZHkgZHJpZnRlZCAobmFwYXJpJ3MgYC9oaXN0b2dyYW1gIGxhY2tlZCB0aGUgY2FjaGUtYnVzdGVyKS5cbiAqL1xuXG4vKiogT25lIHB5cmFtaWQgbGV2ZWwgZnJvbSBgR0VUIC90aWxlcy9pbmZvYCAocmVzIDAgPSBmdWxsIHJlc29sdXRpb24pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWxlTGV2ZWwge1xuICByZXM6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbi8qKiBUaWxlLXNvdXJjZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGBHRVQgL3RpbGVzL2luZm9gLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWxlRGVzY3JpcHRvciB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICB0aWxlU2l6ZTogbnVtYmVyO1xuICB6OiBudW1iZXI7XG4gIGNoYW5uZWxzOiBudW1iZXI7XG4gIC8qKiBUcnVlIG9ubHkgZm9yIGdlbnVpbmUgbXVsdGktY2hhbm5lbCBjb21wb3NpdGVzIChpbmRleGVkL0xVVC1iZWFyaW5nXG4gICAqICBmbHVvcmVzY2VuY2Ugc3RhY2tzKSB0aGUgY2xpZW50IHNob3VsZCBzcGxpdCBpbnRvIHBlci1jaGFubmVsIGxheWVycy4gVGhlXG4gICAqICBzZXJ2ZXIgc2V0cyBpdDsgYW4gUkdCIHBob3RvIHJlYWQgYXMgc2VwYXJhdGVkIHBsYW5lcyBoYXMgY2hhbm5lbHM+MSBidXRcbiAgICogIG11bHRpY2hhbm5lbD1mYWxzZSwgc28gaXQgc3RheXMgYSBzaW5nbGUgY29tcG9zaXRlIHRpbGUgc291cmNlLiAqL1xuICBtdWx0aWNoYW5uZWw/OiBib29sZWFuO1xuICAvKiogUmVhbCBCaW8tRm9ybWF0cyByZXNvbHV0aW9uIGxldmVscyBhdCB0aGUgZnJvbnQgb2YgYGxldmVsc2A7IHRoZSByZW1haW5pbmdcbiAgICogIGxldmVscyBhcmUgc3ludGhldGljIGNvbXBvc2l0ZWQgb3ZlcnZpZXdzIChubyBwZXItY2hhbm5lbCB0aWxlcykuICovXG4gIHJlYWxMZXZlbHM/OiBudW1iZXI7XG4gIC8qKiBQZXItY2hhbm5lbCBtZXRhZGF0YSAobmFtZS9jb2xvci9iaXREZXB0aC9taW4tbWF4QWxsb3dlZCkgZm9yIG5hdGl2ZSAxNi1iaXRcbiAgICogIHdpbmRvd2luZyArIGhpc3RvZ3JhbTsgbnVsbCBmb3IgcGxhaW4gOC1iaXQvUkdCIHNvdXJjZXMuICovXG4gIGNoYW5uZWxJbmZvPzogQXJyYXk8e1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgY29sb3I/OiBzdHJpbmc7XG4gICAgYml0RGVwdGg/OiBudW1iZXI7XG4gICAgbWluQWxsb3dlZD86IG51bWJlcjtcbiAgICBtYXhBbGxvd2VkPzogbnVtYmVyO1xuICB9PiB8IG51bGw7XG4gIGxldmVsczogVGlsZUxldmVsW107XG4gIC8qKiBQaHlzaWNhbCBwaXhlbCBzaXplIGluIMK1bSAoMCB3aGVuIHRoZSBmb3JtYXQgZG9lc24ndCByZXBvcnQgaXQpLiAqL1xuICBtcHBYPzogbnVtYmVyO1xuICBtcHBZPzogbnVtYmVyO1xuICAvKiogU3BhY2luZyBiZXR3ZWVuIHogc2xpY2VzIGluIMK1bSAoMCBvciBhYnNlbnQgd2hlbiB0aGUgZm9ybWF0IGRvZXNuJ3QgcmVwb3J0IGl0KTogd2hhdFxuICAgKiAgbGV0cyBhIHotc3RhY2sgYmUgZHJhd24gYXMgYSB2b2x1bWUgdG8gc2NhbGUuICovXG4gIG1wcFo/OiBudW1iZXI7XG59XG5cbi8qKiBUaWxlIGNvb3JkaW5hdGVzIGZvciBvbmUgYC90aWxlYCByZXF1ZXN0LiBgY2hhbm5lbCA9PSBudWxsYCAob3Igb21pdHRlZClcbiAqICByZXF1ZXN0cyB0aGUgc2VydmVyLWNvbXBvc2l0ZWQgdGlsZTsgYW4gaW5kZXggKGluY2x1ZGluZyAwKSByZXF1ZXN0cyB0aGF0XG4gKiAgc2luZ2xlIGNoYW5uZWwgYXMgZ3JheXNjYWxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWxlQ29vcmRzIHtcbiAgcmVzOiBudW1iZXI7XG4gIGNvbDogbnVtYmVyO1xuICByb3c6IG51bWJlcjtcbiAgejogbnVtYmVyO1xuICB0aWxlU2l6ZTogbnVtYmVyO1xuICBjaGFubmVsPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyoqIFRoZSBgL3RpbGVzL2luZm9gIGRlc2NyaXB0b3IgVVJMIGZvciBvbmUgc291cmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbGVzSW5mb1VybChhcGk6IHN0cmluZywgaW5mb0I2NDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2FwaX10aWxlcy9pbmZvP2luZm89JHtpbmZvQjY0fWA7XG59XG5cbi8qKiBCdWlsZCB0aGUgYC90aWxlYCByZXF1ZXN0IFVSTCDigJQgdGhlIG9uZSBwbGFjZSBpdHMgcXVlcnkgc2hhcGUgbGl2ZXMgKHRoZVxuICogIHNlcnZlciBjYWNoZXMgb24gdGhlIGV4YWN0IHBhcmFtZXRlciBvcmRlcikuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUaWxlVXJsKGFwaTogc3RyaW5nLCBpbmZvQjY0OiBzdHJpbmcsIGM6IFRpbGVDb29yZHMpOiBzdHJpbmcge1xuICBjb25zdCBjaCA9IGMuY2hhbm5lbCA9PSBudWxsID8gJycgOiBgJmNoYW5uZWw9JHtjLmNoYW5uZWx9YDtcbiAgcmV0dXJuIGAke2FwaX10aWxlP2luZm89JHtpbmZvQjY0fSZyZXM9JHtjLnJlc30mY29sPSR7Yy5jb2x9JnJvdz0ke2Mucm93fSZ6PSR7Yy56fSZ0aWxlU2l6ZT0ke2MudGlsZVNpemV9JHtjaH1gO1xufVxuXG4vKipcbiAqIFBlci1hcHAtbG9hZCBjYWNoZS1idXN0ZXIgZm9yIGAvaGlzdG9ncmFtYC4gVGhlIHNlcnZlciBtYXJrcyB0aGUgcmVzcG9uc2VcbiAqIGNhY2hlYWJsZSBmb3IgMjQgaCwgYW5kIGEgaGFyZCByZWZyZXNoIGNhbid0IGJ1c3QgYSBwb3N0LWxvYWQgWEhSLiBBIHRva2VuXG4gKiBzdGFibGUgd2l0aGluIGEgc2Vzc2lvbiAoc28gdGhlIGJhY2tlbmRzJyBpbi1zZXNzaW9uIGNhY2hlcyBzdGlsbCBkZWR1cGUpIGJ1dFxuICogbmV3IG9uIGVhY2ggZnVsbCBsb2FkIGFsd2F5cyByZWZsZWN0cyB0aGUgbGl2ZSBiYWNrZW5kIGFmdGVyIGEgcmVsb2FkLlxuICovXG5leHBvcnQgY29uc3QgSElTVE9HUkFNX0NBQ0hFX0JVU1RFUiA9IERhdGUubm93KCk7XG5cbi8qKiBXaGVyZSBvbmUgY2hhbm5lbCdzIG5hdGl2ZS1iaXQtZGVwdGggaGlzdG9ncmFtIGlzIHJlYWQuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdGl2ZUhpc3RvZ3JhbVJlcXVlc3Qge1xuICB6OiBudW1iZXI7XG4gIGNoYW5uZWw6IG51bWJlcjtcbiAgYmluczogbnVtYmVyO1xufVxuXG4vKiogVGhlIGAvaGlzdG9ncmFtYCBVUkwsIHdpdGggdGhlIGNhY2hlLWJ1c3RlciAoc2VlIHtAbGluayBISVNUT0dSQU1fQ0FDSEVfQlVTVEVSfSkuICovXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlSGlzdG9ncmFtVXJsKFxuICBhcGk6IHN0cmluZyxcbiAgaW5mb0I2NDogc3RyaW5nLFxuICByOiBOYXRpdmVIaXN0b2dyYW1SZXF1ZXN0LFxuICBjYWNoZUJ1c3RlcjogbnVtYmVyID0gSElTVE9HUkFNX0NBQ0hFX0JVU1RFUixcbik6IHN0cmluZyB7XG4gIHJldHVybiBgJHthcGl9aGlzdG9ncmFtP2luZm89JHtpbmZvQjY0fSZjaGFubmVsPSR7ci5jaGFubmVsfSZ6PSR7ci56fSZiaW5zPSR7ci5iaW5zfSZfPSR7Y2FjaGVCdXN0ZXJ9YDtcbn1cblxuLyoqXG4gKiBUaGUgYC9leHBvcnQvdGlmZmAgVVJMIGZvciBzbGljZSBgemAuIGB2aXNpYmxlYCBhcmUgdGhlIGNoYW5uZWwgaW5kaWNlcyB0b1xuICogZXhwb3J0OyB0aGUgYGNoYW5uZWxzYCBwYXJhbSBpcyBvbWl0dGVkIHdoZW4gZXZlcnkgb25lIG9mIHRoZSBgY2hhbm5lbENvdW50YFxuICogY2hhbm5lbHMgaXMgdmlzaWJsZSAob3Igbm9uZSBpcyksIHdoaWNoIGlzIHRoZSBzZXJ2ZXIgZGVmYXVsdCAoYWxsKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFRpZmZVcmwoXG4gIGFwaTogc3RyaW5nLFxuICBpbmZvQjY0OiBzdHJpbmcsXG4gIHo6IG51bWJlcixcbiAgdmlzaWJsZTogcmVhZG9ubHkgbnVtYmVyW10sXG4gIGNoYW5uZWxDb3VudDogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgY2ggPSB2aXNpYmxlLmxlbmd0aCAmJiB2aXNpYmxlLmxlbmd0aCA8IGNoYW5uZWxDb3VudCA/IGAmY2hhbm5lbHM9JHt2aXNpYmxlLmpvaW4oJywnKX1gIDogJyc7XG4gIHJldHVybiBgJHthcGl9ZXhwb3J0L3RpZmY/aW5mbz0ke2luZm9CNjR9Jno9JHt6fSR7Y2h9YDtcbn1cblxuLyoqIFRoZSBzYXZlZCBuYW1lIG9mIGEgbmF0aXZlLWJpdC1kZXB0aCBUSUZGIGV4cG9ydCBvZiBgZmlsZU5hbWVgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFRpZmZGaWxlbmFtZShmaWxlTmFtZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IHN0ZW0gPSAoZmlsZU5hbWUgfHwgJ2ltYWdlJykucmVwbGFjZSgvXFwuW14uXSskLywgJycpO1xuICByZXR1cm4gYCR7c3RlbX1fMTZiaXQub21lLnRpZmA7XG59XG4iXX0=
|
|
@@ -81,4 +81,4 @@ export function parsePresetSet(value) {
|
|
|
81
81
|
matchMode: raw.matchMode === 'normalized' ? 'normalized' : 'exact',
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtcHJlc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvY2xhc3MtcHJlc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQXdDSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQWE7SUFDaEQsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztDQUNWLENBQUM7QUFFRixtRkFBbUY7QUFDbkYsTUFBTSxlQUFlLEdBQWtCO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNsRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0lBQzdELEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNoRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDaEUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUN4RCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0lBQ3RELEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDdkQsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxF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QUFZLENBQUMsQ0FBQyxDQUFDLE9BQU87S0FDbkUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldCBhbm5vdGF0aW9uIGNsYXNzZXMgKGppdC11aSM3MCkuXG4gKlxuICogQSBjbGFzcyBpcyBhIGZsYXQgYHsgbmFtZSwgY29sb3IgfWAgcGFpciAodjE6IG5vIGhpZXJhcmNoeSwgbm8gc3BlY2lhbC1jbGFzcyBzZW1hbnRpY3MpLlxuICogVGhlIGBQcmVzZXRTZXRgIGlzIHRoZSBwZXItdXNlciwgc2VydmVyLXBlcnNpc3RlZCBzb3VyY2Ugb2YgdHJ1dGggZm9yIHJlZ2lvbiBjb2xvdXJzO1xuICogc2VlIGBjbGFzcy1jb2xvci51dGlsLnRzYCBmb3IgdGhlIGRldGVybWluaXN0aWMgY29sb3VyLXJlc29sdXRpb24gZW5naW5lLlxuICovXG5cbi8qKiBXaGVyZSBhIHByZXNldCBjbGFzcyBjYW1lIGZyb206IGFkZGVkIGJ5IHRoZSB1c2VyLCBvbmUgb2YgdGhlIGJ1aWx0LWluXG4gKiAgZGVmYXVsdHMsIG9yIGF1dG8tcHJvbW90ZWQgZnJvbSBhbiB1bmtub3duIHJlZ2lvbiBsYWJlbC4gKi9cbmV4cG9ydCB0eXBlIFByZXNldFNvdXJjZSA9ICd1c2VyJyB8ICdkZWZhdWx0JyB8ICdhdXRvJztcblxuLyoqIE9uZSBhbm5vdGF0aW9uIGNsYXNzIGFuZCBpdHMgY29sb3VyOiByZWdpb25zIHdob3NlIGBsYWJlbGAgbWF0Y2hlc1xuICogIGBuYW1lYCAocGVyIHRoZSBzZXQncyB7QGxpbmsgTWF0Y2hNb2RlfSkgZHJhdyBpbiBgY29sb3JgIHVubGVzcyB0aGVpciBjb2xvdXJcbiAqICB3YXMgb3ZlcnJpZGRlbiBieSBoYW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFzc1ByZXNldCB7XG4gIC8qKiBUaGUgY2xhc3MgbmFtZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBSZWdpb24ubGFiZWxgLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBIZXggY29sb3VyLCBgI1JSR0dCQmAuICovXG4gIGNvbG9yOiBzdHJpbmc7XG4gIC8qKiBSZXNlcnZlZCBmb3IgYSBmdXR1cmUgcGVyLWNsYXNzIG92ZXJsYXktdmlzaWJpbGl0eSB0b2dnbGUuICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuICAvKiogUHJvdmVuYW5jZTsgYCdhdXRvJ2AgPSBhZGRlZCBieSBvcHQtaW4gZmFsbGJhY2sgcHJvbW90aW9uLiAqL1xuICBzb3VyY2U/OiBQcmVzZXRTb3VyY2U7XG59XG5cbi8qKiBIb3cgYSByZWdpb24gbGFiZWwgaXMgbWF0Y2hlZCB0byBhIHByZXNldCBuYW1lOiBgJ2V4YWN0J2AgY29tcGFyZXMgdGhlXG4gKiAgc3RyaW5ncyBhcyBpczsgYCdub3JtYWxpemVkJ2AgdHJpbXMgYW5kIGxvd2VyLWNhc2VzIGJvdGggZmlyc3QuICovXG5leHBvcnQgdHlwZSBNYXRjaE1vZGUgPSAnZXhhY3QnIHwgJ25vcm1hbGl6ZWQnO1xuXG4vKipcbiAqIFRoZSBwZXItdXNlciBjbGFzcy1jb2xvdXIgY29uZmlndXJhdGlvbiAoc2VydmVyLXBlcnNpc3RlZCB0aHJvdWdoIHRoZVxuICogcHJlZmVyZW5jZXMgcG9ydCk6IHRoZSBwcmVzZXQgY2xhc3NlcywgdGhlIHBhbGV0dGUgZm9yIGxhYmVscyBvdXRzaWRlIHRoZW0sXG4gKiBhbmQgdGhlIG1hdGNoaW5nIHJ1bGVzLiBSZXNvbHZlZCBpbnRvIHJlZ2lvbiBjb2xvdXJzIGJ5IGBjbGFzcy1jb2xvci51dGlsLnRzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVzZXRTZXQge1xuICAvKiogT3JkZXJlZCBsaXN0IG9mIHByZXNldCBjbGFzc2VzLiAqL1xuICBjbGFzc2VzOiBDbGFzc1ByZXNldFtdO1xuICAvKiogQ29sb3VycyB1c2VkIGZvciBjbGFzc2VzIG5vdCBpbiBgY2xhc3Nlc2AgKGFzc2lnbmVkIGRldGVybWluaXN0aWNhbGx5KS4gKi9cbiAgZmFsbGJhY2tQYWxldHRlOiBzdHJpbmdbXTtcbiAgLyoqIE9wdC1pbiAoZGVmYXVsdCBmYWxzZSk6IGFkZCBhbiB1bmtub3duIGNsYXNzIHRvIGBjbGFzc2VzYCB0aGUgZmlyc3QgdGltZSBpdCBpcyBzZWVuLiAqL1xuICBhdXRvUHJvbW90ZTogYm9vbGVhbjtcbiAgLyoqIExhYmVsIG1hdGNoaW5nIGFnYWluc3QgYFJlZ2lvbi5sYWJlbGAgKGRlZmF1bHQgYCdleGFjdCdgKS4gKi9cbiAgbWF0Y2hNb2RlOiBNYXRjaE1vZGU7XG59XG5cbi8qKlxuICogRmFsbGJhY2sgcGFsZXR0ZSBmb3IgY2xhc3NlcyBub3QgcHJlc2VudCBpbiB0aGUgcHJlc2V0IHNldCDigJQgcmVhc29uYWJseSBkaXN0aW5jdCBodWVzLlxuICogQ29sb3VycyBhcmUgYXNzaWduZWQgYnkgYSBzdGFibGUgaGFzaCBvZiB0aGUgY2xhc3MgbmFtZSwgc28gdGhlIHNhbWUgdW5rbm93biBjbGFzcyBhbHdheXNcbiAqIGdldHMgdGhlIHNhbWUgY29sb3VyIHdpdGggbm8gc3RvcmVkIHN0YXRlLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9GQUxMQkFDS19QQUxFVFRFOiBzdHJpbmdbXSA9IFtcbiAgJyM2QzhFQkYnLFxuICAnIzgyQjM2NicsXG4gICcjQjg1NDUwJyxcbiAgJyM5NjczQTYnLFxuICAnI0Q3OUIwMCcsXG4gICcjM0M5NDhCJyxcbiAgJyNBNjRDQTYnLFxuICAnI0NDNjY3NycsXG4gICcjNDQ3N0FBJyxcbiAgJyMyMjg4MzMnLFxuXTtcblxuLyoqIFNlZWQgY2xhc3NlcyDigJQgbWlycm9ycyB0aGUgaGlzdG9yaWNhbCBoYXJkLWNvZGVkIGBjbGFzc2lmaWNhdGlvbkNvbG9yc2AgbWFwLiAqL1xuY29uc3QgREVGQVVMVF9DTEFTU0VTOiBDbGFzc1ByZXNldFtdID0gW1xuICB7IG5hbWU6ICdGcmFnbWVudGVkLWVtYnJ5bycsIGNvbG9yOiAnI0ZGOEMwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ0R5aW5nLWVtYnJ5bycsIGNvbG9yOiAnI0ZGMzMzMycsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1R3by1jZWxsLWVtYnJ5bycsIGNvbG9yOiAnIzMzQ0M2NicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ09uZS1jZWxsLWVtYnJ5bycsIGNvbG9yOiAnIzMzOTlGRicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1Vua25vd24nLCBjb2xvcjogJyM4ODg4ODgnLCBzb3VyY2U6ICdkZWZhdWx0JyB9LFxuICB7IG5hbWU6ICdUdW1vcicsIGNvbG9yOiAnI0ZGNDQ0NCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1N0cm9tYScsIGNvbG9yOiAnIzQ0QUFGRicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ0ltbXVuZSBjZWxscycsIGNvbG9yOiAnI0ZGREQwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ05lY3Jvc2lzJywgY29sb3I6ICcjQUE2NjMzJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnUmVnaW9uJywgY29sb3I6ICcjMDBGRkZGJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnSWdub3JlJywgY29sb3I6ICcjQUFBQUFBJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnUG9zaXRpdmUnLCBjb2xvcjogJyMwMENDNDQnLCBzb3VyY2U6ICdkZWZhdWx0JyB9LFxuICB7IG5hbWU6ICdOZWdhdGl2ZScsIGNvbG9yOiAnI0NDMDAwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG5dO1xuXG4vKiogQSBmcmVzaCBkZWZhdWx0IHByZXNldCBzZXQgKGRlZXAtY29waWVkIHNvIGNhbGxlcnMgY2FuIG11dGF0ZSBzYWZlbHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcmVzZXRTZXQoKTogUHJlc2V0U2V0IHtcbiAgcmV0dXJuIHtcbiAgICBjbGFzc2VzOiBERUZBVUxUX0NMQVNTRVMubWFwKChjKSA9PiAoeyAuLi5jIH0pKSxcbiAgICBmYWxsYmFja1BhbGV0dGU6IFsuLi5ERUZBVUxUX0ZBTExCQUNLX1BBTEVUVEVdLFxuICAgIGF1dG9Qcm9tb3RlOiBmYWxzZSxcbiAgICBtYXRjaE1vZGU6ICdleGFjdCcsXG4gIH07XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhlIHNldCBoYXMgbm8gdXNhYmxlIGNsYXNzZXMgKGUuZy4gdGhlIHNlcnZlciByZXR1cm5lZCBhbiBlbXB0eS9ibGFuayByZWNvcmQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlQcmVzZXRTZXQoc2V0OiBQcmVzZXRTZXQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiAhc2V0IHx8ICFBcnJheS5pc0FycmF5KHNldC5jbGFzc2VzKSB8fCBzZXQuY2xhc3Nlcy5sZW5ndGggPT09IDA7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4gdW50cnVzdGVkIHZhbHVlIChlLmcuIGFuIGltcG9ydGVkIEpTT04gZmlsZSkgYXMgYSBwcmVzZXQgc2V0LlxuICogUmV0dXJucyBhIGNsZWFuIGNvcHkg4oCUIG9ubHkgd2VsbC1mb3JtZWQgYHsgbmFtZSwgY29sb3IgfWAgY2xhc3NlcywgZGVmYXVsdHNcbiAqIGZvciBtaXNzaW5nIG9wdGlvbmFsIGZpZWxkcyDigJQgb3IgbnVsbCB3aGVuIGl0IGhhcyBubyB1c2FibGUgY2xhc3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJlc2V0U2V0KHZhbHVlOiB1bmtub3duKTogUHJlc2V0U2V0IHwgbnVsbCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJhdyA9IHZhbHVlIGFzIFBhcnRpYWw8UmVjb3JkPGtleW9mIFByZXNldFNldCwgdW5rbm93bj4+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3LmNsYXNzZXMpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgY2xhc3NlczogQ2xhc3NQcmVzZXRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGMgb2YgcmF3LmNsYXNzZXMgYXMgdW5rbm93bltdKSB7XG4gICAgY29uc3QgZW50cnkgPSBjIGFzIFBhcnRpYWw8Q2xhc3NQcmVzZXQ+IHwgbnVsbDtcbiAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5uYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZW50cnkuY29sb3IgIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICBjbGFzc2VzLnB1c2goeyAuLi5lbnRyeSwgbmFtZTogZW50cnkubmFtZSwgY29sb3I6IGVudHJ5LmNvbG9yIH0pO1xuICB9XG4gIGlmIChjbGFzc2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHBhbGV0dGUgPSBBcnJheS5pc0FycmF5KHJhdy5mYWxsYmFja1BhbGV0dGUpXG4gICAgPyAocmF3LmZhbGxiYWNrUGFsZXR0ZSBhcyB1bmtub3duW10pLmZpbHRlcigoYyk6IGMgaXMgc3RyaW5nID0+IHR5cGVvZiBjID09PSAnc3RyaW5nJylcbiAgICA6IFtdO1xuICByZXR1cm4ge1xuICAgIGNsYXNzZXMsXG4gICAgZmFsbGJhY2tQYWxldHRlOiBwYWxldHRlLmxlbmd0aCA/IHBhbGV0dGUgOiBbLi4uREVGQVVMVF9GQUxMQkFDS19QQUxFVFRFXSxcbiAgICBhdXRvUHJvbW90ZTogcmF3LmF1dG9Qcm9tb3RlID09PSB0cnVlLFxuICAgIG1hdGNoTW9kZTogcmF3Lm1hdGNoTW9kZSA9PT0gJ25vcm1hbGl6ZWQnID8gJ25vcm1hbGl6ZWQnIDogJ2V4YWN0JyxcbiAgfTtcbn1cbiJdfQ==
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3MtcHJlc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvY2xhc3MtcHJlc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQStDSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQWE7SUFDaEQsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxTQUFTO0lBQ1QsU0FBUztDQUNWLENBQUM7QUFFRixtRkFBbUY7QUFDbkYsTUFBTSxlQUFlLEdBQWtCO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNsRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0lBQzdELEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUNoRSxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDaEUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtJQUN4RCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0lBQ3RELEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7SUFDdkQsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxF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QUFZLENBQUMsQ0FBQyxDQUFDLE9BQU87S0FDbkUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByZXNldCBhbm5vdGF0aW9uIGNsYXNzZXMgKGppdC11aSM3MCkuXG4gKlxuICogQSBjbGFzcyBpcyBhIGZsYXQgYHsgbmFtZSwgY29sb3IgfWAgcGFpciAodjE6IG5vIGhpZXJhcmNoeSwgbm8gc3BlY2lhbC1jbGFzcyBzZW1hbnRpY3MpLlxuICogVGhlIGBQcmVzZXRTZXRgIGlzIHRoZSBwZXItdXNlciwgc2VydmVyLXBlcnNpc3RlZCBzb3VyY2Ugb2YgdHJ1dGggZm9yIHJlZ2lvbiBjb2xvdXJzO1xuICogc2VlIGBjbGFzcy1jb2xvci51dGlsLnRzYCBmb3IgdGhlIGRldGVybWluaXN0aWMgY29sb3VyLXJlc29sdXRpb24gZW5naW5lLlxuICovXG5cbi8qKiBXaGVyZSBhIHByZXNldCBjbGFzcyBjYW1lIGZyb206IGFkZGVkIGJ5IHRoZSB1c2VyLCBvbmUgb2YgdGhlIGJ1aWx0LWluXG4gKiAgZGVmYXVsdHMsIG9yIGF1dG8tcHJvbW90ZWQgZnJvbSBhbiB1bmtub3duIHJlZ2lvbiBsYWJlbC4gKi9cbmV4cG9ydCB0eXBlIFByZXNldFNvdXJjZSA9ICd1c2VyJyB8ICdkZWZhdWx0JyB8ICdhdXRvJztcblxuLyoqIE9uZSBhbm5vdGF0aW9uIGNsYXNzIGFuZCBpdHMgY29sb3VyOiByZWdpb25zIHdob3NlIGBsYWJlbGAgbWF0Y2hlc1xuICogIGBuYW1lYCAocGVyIHRoZSBzZXQncyB7QGxpbmsgTWF0Y2hNb2RlfSkgZHJhdyBpbiBgY29sb3JgIHVubGVzcyB0aGVpciBjb2xvdXJcbiAqICB3YXMgb3ZlcnJpZGRlbiBieSBoYW5kLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFzc1ByZXNldCB7XG4gIC8qKiBUaGUgY2xhc3MgbmFtZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBSZWdpb24ubGFiZWxgLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBIZXggY29sb3VyLCBgI1JSR0dCQmAuICovXG4gIGNvbG9yOiBzdHJpbmc7XG4gIC8qKiBSZXNlcnZlZCBmb3IgYSBmdXR1cmUgcGVyLWNsYXNzIG92ZXJsYXktdmlzaWJpbGl0eSB0b2dnbGUuICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuICAvKiogUHJvdmVuYW5jZTsgYCdhdXRvJ2AgPSBhZGRlZCBieSBvcHQtaW4gZmFsbGJhY2sgcHJvbW90aW9uLiAqL1xuICBzb3VyY2U/OiBQcmVzZXRTb3VyY2U7XG59XG5cbi8qKiBIb3cgYSByZWdpb24gbGFiZWwgaXMgbWF0Y2hlZCB0byBhIHByZXNldCBuYW1lOiBgJ2V4YWN0J2AgY29tcGFyZXMgdGhlXG4gKiAgc3RyaW5ncyBhcyBpczsgYCdub3JtYWxpemVkJ2AgdHJpbXMgYW5kIGxvd2VyLWNhc2VzIGJvdGggZmlyc3QuICovXG5leHBvcnQgdHlwZSBNYXRjaE1vZGUgPSAnZXhhY3QnIHwgJ25vcm1hbGl6ZWQnO1xuXG4vKipcbiAqIFRoZSBwZXItdXNlciBjbGFzcy1jb2xvdXIgY29uZmlndXJhdGlvbiAoc2VydmVyLXBlcnNpc3RlZCB0aHJvdWdoIHRoZVxuICogcHJlZmVyZW5jZXMgcG9ydCk6IHRoZSBwcmVzZXQgY2xhc3NlcywgdGhlIHBhbGV0dGUgZm9yIGxhYmVscyBvdXRzaWRlIHRoZW0sXG4gKiBhbmQgdGhlIG1hdGNoaW5nIHJ1bGVzLiBSZXNvbHZlZCBpbnRvIHJlZ2lvbiBjb2xvdXJzIGJ5IGBjbGFzcy1jb2xvci51dGlsLnRzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVzZXRTZXQge1xuICAvKiogT3JkZXJlZCBsaXN0IG9mIHByZXNldCBjbGFzc2VzLiAqL1xuICBjbGFzc2VzOiBDbGFzc1ByZXNldFtdO1xuICAvKiogQ29sb3VycyB1c2VkIGZvciBjbGFzc2VzIG5vdCBpbiBgY2xhc3Nlc2AgKGFzc2lnbmVkIGRldGVybWluaXN0aWNhbGx5KS4gKi9cbiAgZmFsbGJhY2tQYWxldHRlOiBzdHJpbmdbXTtcbiAgLyoqIE9wdC1pbiAoZGVmYXVsdCBmYWxzZSk6IGFkZCBhbiB1bmtub3duIGNsYXNzIHRvIGBjbGFzc2VzYCB0aGUgZmlyc3QgdGltZSBpdCBpcyBzZWVuLiAqL1xuICBhdXRvUHJvbW90ZTogYm9vbGVhbjtcbiAgLyoqIExhYmVsIG1hdGNoaW5nIGFnYWluc3QgYFJlZ2lvbi5sYWJlbGAgKGRlZmF1bHQgYCdleGFjdCdgKS4gKi9cbiAgbWF0Y2hNb2RlOiBNYXRjaE1vZGU7XG4gIC8qKlxuICAgKiBDbGFzcyBjb2xvdXJzIHRoYXQgaW1wb3J0ZWQgR2VvSlNPTiBjYXJyaWVkIGZvciBjbGFzc2VzIHdpdGggbm8gcHJlc2V0LCBrZXllZCBieSB0aGVcbiAgICogbWF0Y2ggbW9kZSdzIGtleSAoc2VlIGBwcmVzZXRLZXlgKS4gVGhleSBjb21lIGJlZm9yZSB0aGUgZmFsbGJhY2sgcGFsZXR0ZSwgc28gYW4gaW1wb3J0ZWRcbiAgICogZmlsZSBrZWVwcyBpdHMgb3duIGNvbG91cnMuIFNlc3Npb24tb25seTogbmV2ZXIgcGVyc2lzdGVkLCBhbmQgYWJzZW50IGZyb20gYSBzZXQgYSBjYWxsZXJcbiAgICogc2F2ZXMgb3IgZXhwb3J0cy5cbiAgICovXG4gIGltcG9ydGVkQ29sb3JzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG59XG5cbi8qKlxuICogRmFsbGJhY2sgcGFsZXR0ZSBmb3IgY2xhc3NlcyBub3QgcHJlc2VudCBpbiB0aGUgcHJlc2V0IHNldCDigJQgcmVhc29uYWJseSBkaXN0aW5jdCBodWVzLlxuICogQ29sb3VycyBhcmUgYXNzaWduZWQgYnkgYSBzdGFibGUgaGFzaCBvZiB0aGUgY2xhc3MgbmFtZSwgc28gdGhlIHNhbWUgdW5rbm93biBjbGFzcyBhbHdheXNcbiAqIGdldHMgdGhlIHNhbWUgY29sb3VyIHdpdGggbm8gc3RvcmVkIHN0YXRlLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9GQUxMQkFDS19QQUxFVFRFOiBzdHJpbmdbXSA9IFtcbiAgJyM2QzhFQkYnLFxuICAnIzgyQjM2NicsXG4gICcjQjg1NDUwJyxcbiAgJyM5NjczQTYnLFxuICAnI0Q3OUIwMCcsXG4gICcjM0M5NDhCJyxcbiAgJyNBNjRDQTYnLFxuICAnI0NDNjY3NycsXG4gICcjNDQ3N0FBJyxcbiAgJyMyMjg4MzMnLFxuXTtcblxuLyoqIFNlZWQgY2xhc3NlcyDigJQgbWlycm9ycyB0aGUgaGlzdG9yaWNhbCBoYXJkLWNvZGVkIGBjbGFzc2lmaWNhdGlvbkNvbG9yc2AgbWFwLiAqL1xuY29uc3QgREVGQVVMVF9DTEFTU0VTOiBDbGFzc1ByZXNldFtdID0gW1xuICB7IG5hbWU6ICdGcmFnbWVudGVkLWVtYnJ5bycsIGNvbG9yOiAnI0ZGOEMwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ0R5aW5nLWVtYnJ5bycsIGNvbG9yOiAnI0ZGMzMzMycsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1R3by1jZWxsLWVtYnJ5bycsIGNvbG9yOiAnIzMzQ0M2NicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ09uZS1jZWxsLWVtYnJ5bycsIGNvbG9yOiAnIzMzOTlGRicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1Vua25vd24nLCBjb2xvcjogJyM4ODg4ODgnLCBzb3VyY2U6ICdkZWZhdWx0JyB9LFxuICB7IG5hbWU6ICdUdW1vcicsIGNvbG9yOiAnI0ZGNDQ0NCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ1N0cm9tYScsIGNvbG9yOiAnIzQ0QUFGRicsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ0ltbXVuZSBjZWxscycsIGNvbG9yOiAnI0ZGREQwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG4gIHsgbmFtZTogJ05lY3Jvc2lzJywgY29sb3I6ICcjQUE2NjMzJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnUmVnaW9uJywgY29sb3I6ICcjMDBGRkZGJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnSWdub3JlJywgY29sb3I6ICcjQUFBQUFBJywgc291cmNlOiAnZGVmYXVsdCcgfSxcbiAgeyBuYW1lOiAnUG9zaXRpdmUnLCBjb2xvcjogJyMwMENDNDQnLCBzb3VyY2U6ICdkZWZhdWx0JyB9LFxuICB7IG5hbWU6ICdOZWdhdGl2ZScsIGNvbG9yOiAnI0NDMDAwMCcsIHNvdXJjZTogJ2RlZmF1bHQnIH0sXG5dO1xuXG4vKiogQSBmcmVzaCBkZWZhdWx0IHByZXNldCBzZXQgKGRlZXAtY29waWVkIHNvIGNhbGxlcnMgY2FuIG11dGF0ZSBzYWZlbHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcmVzZXRTZXQoKTogUHJlc2V0U2V0IHtcbiAgcmV0dXJuIHtcbiAgICBjbGFzc2VzOiBERUZBVUxUX0NMQVNTRVMubWFwKChjKSA9PiAoeyAuLi5jIH0pKSxcbiAgICBmYWxsYmFja1BhbGV0dGU6IFsuLi5ERUZBVUxUX0ZBTExCQUNLX1BBTEVUVEVdLFxuICAgIGF1dG9Qcm9tb3RlOiBmYWxzZSxcbiAgICBtYXRjaE1vZGU6ICdleGFjdCcsXG4gIH07XG59XG5cbi8qKiBUcnVlIHdoZW4gdGhlIHNldCBoYXMgbm8gdXNhYmxlIGNsYXNzZXMgKGUuZy4gdGhlIHNlcnZlciByZXR1cm5lZCBhbiBlbXB0eS9ibGFuayByZWNvcmQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHlQcmVzZXRTZXQoc2V0OiBQcmVzZXRTZXQgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiAhc2V0IHx8ICFBcnJheS5pc0FycmF5KHNldC5jbGFzc2VzKSB8fCBzZXQuY2xhc3Nlcy5sZW5ndGggPT09IDA7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4gdW50cnVzdGVkIHZhbHVlIChlLmcuIGFuIGltcG9ydGVkIEpTT04gZmlsZSkgYXMgYSBwcmVzZXQgc2V0LlxuICogUmV0dXJucyBhIGNsZWFuIGNvcHkg4oCUIG9ubHkgd2VsbC1mb3JtZWQgYHsgbmFtZSwgY29sb3IgfWAgY2xhc3NlcywgZGVmYXVsdHNcbiAqIGZvciBtaXNzaW5nIG9wdGlvbmFsIGZpZWxkcyDigJQgb3IgbnVsbCB3aGVuIGl0IGhhcyBubyB1c2FibGUgY2xhc3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJlc2V0U2V0KHZhbHVlOiB1bmtub3duKTogUHJlc2V0U2V0IHwgbnVsbCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJhdyA9IHZhbHVlIGFzIFBhcnRpYWw8UmVjb3JkPGtleW9mIFByZXNldFNldCwgdW5rbm93bj4+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3LmNsYXNzZXMpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgY2xhc3NlczogQ2xhc3NQcmVzZXRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGMgb2YgcmF3LmNsYXNzZXMgYXMgdW5rbm93bltdKSB7XG4gICAgY29uc3QgZW50cnkgPSBjIGFzIFBhcnRpYWw8Q2xhc3NQcmVzZXQ+IHwgbnVsbDtcbiAgICBpZiAoIWVudHJ5IHx8IHR5cGVvZiBlbnRyeS5uYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZW50cnkuY29sb3IgIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICBjbGFzc2VzLnB1c2goeyAuLi5lbnRyeSwgbmFtZTogZW50cnkubmFtZSwgY29sb3I6IGVudHJ5LmNvbG9yIH0pO1xuICB9XG4gIGlmIChjbGFzc2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHBhbGV0dGUgPSBBcnJheS5pc0FycmF5KHJhdy5mYWxsYmFja1BhbGV0dGUpXG4gICAgPyAocmF3LmZhbGxiYWNrUGFsZXR0ZSBhcyB1bmtub3duW10pLmZpbHRlcigoYyk6IGMgaXMgc3RyaW5nID0+IHR5cGVvZiBjID09PSAnc3RyaW5nJylcbiAgICA6IFtdO1xuICByZXR1cm4ge1xuICAgIGNsYXNzZXMsXG4gICAgZmFsbGJhY2tQYWxldHRlOiBwYWxldHRlLmxlbmd0aCA/IHBhbGV0dGUgOiBbLi4uREVGQVVMVF9GQUxMQkFDS19QQUxFVFRFXSxcbiAgICBhdXRvUHJvbW90ZTogcmF3LmF1dG9Qcm9tb3RlID09PSB0cnVlLFxuICAgIG1hdGNoTW9kZTogcmF3Lm1hdGNoTW9kZSA9PT0gJ25vcm1hbGl6ZWQnID8gJ25vcm1hbGl6ZWQnIDogJ2V4YWN0JyxcbiAgfTtcbn1cbiJdfQ==
|