@jax-data-science/sci-image-visualizer 0.13.0 → 0.14.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/lib/contracts/channel-histogram-api.contract.mjs +19 -1
- package/esm2022/lib/contracts/display-types.mjs +7 -1
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +1 -1
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-image-2d-scene.mjs +17 -2
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +88 -10
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +62 -13
- package/esm2022/lib/implementations/napari-js/napari-spatial-encoding.mjs +21 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +5 -1
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +4 -1
- package/esm2022/lib/implementations/napari-js/spatial-tiles/categorical-lookup.mjs +26 -3
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +3 -2
- package/esm2022/lib/implementations/napari-js/spatial-tiles/density-layer.mjs +20 -4
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-hover.mjs +4 -2
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-jobs.mjs +4 -2
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +42 -15
- package/esm2022/lib/implementations/osd/openseadragon-visualizer.service.mjs +3 -1
- package/esm2022/lib/spatial/lod.mjs +6 -3
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +8 -3
- package/esm2022/lib/spatial/spatial-gene-filter.mjs +138 -0
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +42 -1
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +4 -3
- package/esm2022/lib/spatial-controls/spatial-gene-style/spatial-gene-style.component.mjs +66 -0
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +106 -26
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +110 -8
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +41 -9
- package/esm2022/lib/store/visualizer-store.service.mjs +50 -1
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DURPqs5a.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DvFp1jNH.mjs} +1064 -318
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DvFp1jNH.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-D0IQ6PjZ.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-D7lSUAM1.mjs} +2 -2
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-D0IQ6PjZ.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-D7lSUAM1.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +1 -1
- package/lib/contracts/channel-histogram-api.contract.d.ts +14 -0
- package/lib/contracts/display-types.d.ts +27 -0
- package/lib/contracts/image.contract.d.ts +2 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +7 -0
- package/lib/contracts/visualizer.contract.d.ts +3 -0
- package/lib/implementations/napari-js/napari-image-2d-scene.d.ts +7 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +13 -2
- package/lib/implementations/napari-js/napari-spatial-encoding.d.ts +5 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +4 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +2 -0
- package/lib/implementations/napari-js/spatial-tiles/categorical-lookup.d.ts +6 -1
- package/lib/implementations/napari-js/spatial-tiles/transcript-hover.d.ts +4 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +3 -1
- package/lib/spatial/lod.d.ts +3 -1
- package/lib/spatial/spatial-controls.facade.d.ts +3 -0
- package/lib/spatial/spatial-gene-filter.d.ts +44 -0
- package/lib/spatial/spatial-tile-merge.d.ts +17 -0
- package/lib/spatial-controls/spatial-gene-style/spatial-gene-style.component.d.ts +30 -0
- package/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.d.ts +39 -7
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +33 -1
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +13 -1
- package/lib/store/visualizer-store.service.d.ts +13 -0
- package/package.json +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DURPqs5a.mjs.map +0 -1
|
@@ -3,6 +3,7 @@ import { NO_CATEGORY, isCategoricalColumn, } from '../../../contracts/spatial-da
|
|
|
3
3
|
import { DEFAULT_CATEGORICAL_PALETTE, MISSING_COLOR, contrastWindow, parseHex, resolveCategoryColors, } from '../../../spatial/spatial-encoding';
|
|
4
4
|
import { POLYGON_LEVEL_MIN_CELL_PX, cellTypeColumnFor, cellsShown, polygonLevelFor, tileId, tilesInRect, typicalCellDiameter, } from '../../../spatial/lod';
|
|
5
5
|
import { filterRings, mergePolygonTiles } from '../../../spatial/spatial-tile-merge';
|
|
6
|
+
import { geneFilterKey } from '../../../spatial/spatial-gene-filter';
|
|
6
7
|
import { ContrastWindowCache } from '../napari-spatial-encoding';
|
|
7
8
|
const MAX_CELL_TILES = 48;
|
|
8
9
|
/**
|
|
@@ -198,7 +199,7 @@ export class CellLayers {
|
|
|
198
199
|
*/
|
|
199
200
|
async cellGeometry(dataset, view, rect, level, hidden, ctx) {
|
|
200
201
|
const tiled = dataset.polygonTiles;
|
|
201
|
-
const hiddenKey = view.hiddenGroups.join('\u0001')
|
|
202
|
+
const hiddenKey = `${view.hiddenGroups.join('\u0001')}|${geneFilterKey(view)}`;
|
|
202
203
|
let rings;
|
|
203
204
|
let nuclei = null;
|
|
204
205
|
let geometryKey;
|
|
@@ -271,4 +272,4 @@ function categoryRgba(meta) {
|
|
|
271
272
|
const hex = meta && meta.kind === 'categorical' ? resolveCategoryColors(meta) : [DEFAULT_CATEGORICAL_PALETTE[0]];
|
|
272
273
|
return hex.map((h) => rgba01(parseHex(h)));
|
|
273
274
|
}
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1sYXllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvc3BhdGlhbC10aWxlcy9jZWxsLWxheWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTTVDLE9BQU8sRUFDTCxXQUFXLEVBS1gsbUJBQW1CLEdBQ3BCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixhQUFhLEVBQ2IsY0FBYyxFQUNkLFFBQVEsRUFDUixxQkFBcUIsR0FDdEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsZUFBZSxFQUNmLE1BQU0sRUFDTixXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBS2pFLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQW9CMUI7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBY3JCLFlBQ21CLElBQXFCLEVBQ3JCLE1BQXFDLEVBQ3JDLE1BQXlCLEVBQ3pCLElBQW9CO1FBSHBCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQStCO1FBQ3JDLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBQ3pCLFNBQUksR0FBSixJQUFJLENBQWdCO1FBakIvQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUM5QiwwRUFBMEU7UUFDbEUsaUJBQVksR0FBOEIsSUFBSSxDQUFDO1FBQy9DLG9CQUFlLEdBQWtCLElBQUksQ0FBQztRQUN0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cG9ydCB7IGNvbG9ybWFwRnJvbUx1dCB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgdHlwZSB7IENvbG9ybWFwLCBSR0JBIH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHR5cGUgeyBSZ2IgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvY29sb3JtYXAtbHV0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbERhdGFQb3J0IH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB7XG4gIE5PX0NBVEVHT1JZLFxuICBTcGF0aWFsQ29sdW1uLFxuICBTcGF0aWFsRGF0YXNldCxcbiAgU3BhdGlhbFBvbHlnb25UaWxlLFxuICBTcGF0aWFsUG9seWdvbnMsXG4gIGlzQ2F0ZWdvcmljYWxDb2x1bW4sXG59IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9DQVRFR09SSUNBTF9QQUxFVFRFLFxuICBNSVNTSU5HX0NPTE9SLFxuICBjb250cmFzdFdpbmRvdyxcbiAgcGFyc2VIZXgsXG4gIHJlc29sdmVDYXRlZ29yeUNvbG9ycyxcbn0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB7IFNwYXRpYWxTZWxlY3Rpb25NYXNrIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXNlbGVjdGlvbic7XG5pbXBvcnQge1xuICBEYXRhUmVjdCxcbiAgUE9MWUdPTl9MRVZFTF9NSU5fQ0VMTF9QWCxcbiAgY2VsbFR5cGVDb2x1bW5Gb3IsXG4gIGNlbGxzU2hvd24sXG4gIHBvbHlnb25MZXZlbEZvcixcbiAgdGlsZUlkLFxuICB0aWxlc0luUmVjdCxcbiAgdHlwaWNhbENlbGxEaWFtZXRlcixcbn0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9sb2QnO1xuaW1wb3J0IHsgZmlsdGVyUmluZ3MsIG1lcmdlUG9seWdvblRpbGVzIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXRpbGUtbWVyZ2UnO1xuaW1wb3J0IHsgQ29udHJhc3RXaW5kb3dDYWNoZSB9IGZyb20gJy4uL25hcGFyaS1zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxMb29rdXAsIEhpZGRlbkNvZGVzIH0gZnJvbSAnLi9jYXRlZ29yaWNhbC1sb29rdXAnO1xuaW1wb3J0IHR5cGUgeyBPcmRlcmVkTGF5ZXJHcm91cHMsIFRpbGVHcm91cCB9IGZyb20gJy4vbGF5ZXItZ3JvdXBzJztcbmltcG9ydCB0eXBlIHsgUGxhbkNvbnRleHQgfSBmcm9tICcuL3BsYW4tY29udGV4dCc7XG5cbmNvbnN0IE1BWF9DRUxMX1RJTEVTID0gNDg7XG5cbi8qKiBUaGUgY2VsbHMnIGNvbG91cnMgYXMgYSBzaGFwZXMgbGF5ZXIgdGFrZXMgdGhlbTogcGVyLXNoYXBlIFJHQkEsIHZhbHVlcyBvdmVyIGEgY29sb3JtYXAsIG9yXG4gKiAgb25lIGNvbG91ci4gKi9cbmludGVyZmFjZSBDZWxsQ29sb3JzIHtcbiAgdmFsdWVzPzogRmxvYXQzMkFycmF5O1xuICBjb2xvcm1hcD86IENvbG9ybWFwO1xuICBjb250cmFzdExpbWl0cz86IFtudW1iZXIsIG51bWJlcl07XG4gIGNvbG9yPzogUkdCQTtcbiAgZmFjZUNvbG9yPzogRmxvYXQzMkFycmF5O1xufVxuXG4vKiogV2hhdCB0aGUgY2VsbCBsYXllcnMgbmVlZCBmcm9tIHRoZSBzZXJ2aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZWxsTGF5ZXJzSG9zdCB7XG4gIC8qKiBUaGUgY29udGludW91cyBMVVQgdGhlIHZpZXcgaXMgdXNpbmcgKHNvIGNlbGxzIGNvbG91cmVkIGJ5IGEgZ2VuZSBtYXRjaCB0aGUgbWFya2VycykuICovXG4gIGNvbnRpbnVvdXNMdXQodmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IFJnYltdO1xuICAvKiogT3V0bGluZXMgYXBwZWFyZWQgb3IgZGlzYXBwZWFyZWQ6IHRoZSBtYXJrZXJzJyB2aXNpYmlsaXR5IGZvbGxvd3MuICovXG4gIHBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duOiBib29sZWFuKTogdm9pZDtcbn1cblxuLyoqXG4gKiBUaGUgY2VsbCBvdXRsaW5lcyBvZiB0aGUgMkQgc3BhdGlhbCB2aWV3LCBhdCB0aGUgcG9seWdvbiBsZXZlbCB0aGUgem9vbSBjYWxscyBmb3I6IGEgZmlsbCxcbiAqIGFuIG91dGxpbmUgb3IgYm90aCAocGx1cyBudWNsZXVzIG91dGxpbmVzIGZvciB0aGUgXCJib3RoXCIgY2VsbCBzZXQpLCBjb2xvdXJlZCBieSB0aGUgdmlldydzXG4gKiBjZWxsLWNvbG91ciBtb2RlLCB3aXRoIHN3aXRjaGVkLW9mZiBncm91cHMgbGVmdCBvdXQgb2YgdGhlIGdlb21ldHJ5LlxuICpcbiAqIEdlb21ldHJ5IGFuZCBzdHlsZSBhcmUga2V5ZWQgYXBhcnQsIHNvIGEgcmVjb2xvdXIgKGEgbmV3IGNlbGwtdHlwZSBjb2x1bW4sIGEgc2VsZWN0aW9uKVxuICogcmV3cml0ZXMgdGhlIHBlci1zaGFwZSB2YWx1ZXMgb2YgdGhlIGV4aXN0aW5nIGxheWVycyBhbmQgbmV2ZXIgcmUtZXhwYW5kcyB0aGUgcmluZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsTGF5ZXJzIHtcbiAgcHJpdmF0ZSBwb2x5Z29uc1Nob3duID0gZmFsc2U7XG4gIC8qKiBSaW5ncyBjdXJyZW50bHkgZHJhd24gYW5kIHRoZSAoZGF0YXNldCwgc2V0LCB0aWxlcykgdGhleSBjYW1lIGZyb20uICovXG4gIHByaXZhdGUgY3VycmVudFJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjZWxsR2VvbWV0cnlLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnROdWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNlbGxTdHlsZUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBTZWxlY3Rpb24gaWRlbnRpdHkg4oaSIHJldmlzaW9uLCBzbyBhIGNoYW5nZSBrZXkgY2FuIG5hbWUgYSBzZWxlY3Rpb24gY2hlYXBseS4gKi9cbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNlbGVjdGlvblJldmlzaW9uID0gMDtcbiAgLyoqIENvbnRpbnVvdXMgY29sb3VyaW5ncycgd2luZG93cywgcGVyICh2ZWN0b3IsIGNsaXAsIGxvZyk6IGBjb250cmFzdFdpbmRvd2Agc29ydHMgZXZlcnlcbiAgICogIHZhbHVlLCBhbmQgYSBzZWxlY3Rpb24gb3Igb3BhY2l0eSBjaGFuZ2UgcmVjb2xvdXJzIHdpdGggdGhlIHZlY3RvciB1bmNoYW5nZWQgKFNQQVRJQUwtMTIpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyYXN0V2luZG93cyA9IG5ldyBDb250cmFzdFdpbmRvd0NhY2hlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0OiBTcGF0aWFsRGF0YVBvcnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBncm91cHM6IE9yZGVyZWRMYXllckdyb3VwczxUaWxlR3JvdXA+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9va3VwOiBDYXRlZ29yaWNhbExvb2t1cCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IENlbGxMYXllcnNIb3N0LFxuICApIHt9XG5cbiAgLyoqIFRydWUgd2hpbGUgb3V0bGluZXMgYXJlIG9uIHNjcmVlbiDigJQgdGhlIHNlcnZpY2UgaGlkZXMgaXRzIGRvdHMgdGhlbi4gKi9cbiAgZ2V0IG91dGxpbmVzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucG9seWdvbnNTaG93bjtcbiAgfVxuXG4gIC8qKiBUaGUgdmlld2VyIHdlbnQgYXdheSAoaXRzIGxheWVycyB3aXRoIGl0KTogdGhlIG91dGxpbmVzIGFyZSBubyBsb25nZXIgc2hvd24uICovXG4gIGRldGFjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UG9seWdvbnNTaG93bihmYWxzZSk7XG4gIH1cblxuICAvKiogRHJhdyB0aGUgY2VsbHMgY292ZXJpbmcgYHJlY3RgIGF0IHRoZSBsZXZlbCBgcHhQZXJVbml0YCBjYWxscyBmb3IsIG9yIGRyb3AgdGhlbS4gKi9cbiAgYXN5bmMgcGxhbihcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gICAgcmVjdDogRGF0YVJlY3QsXG4gICAgcHhQZXJVbml0OiBudW1iZXIsXG4gICAgY3R4OiBQbGFuQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGlsZWQgPSBkYXRhc2V0LnBvbHlnb25UaWxlcztcbiAgICBjb25zdCB3aG9sZSA9ICF0aWxlZCAmJiBkYXRhc2V0LnBvbHlnb25zICYmIHRoaXMucG9ydC5nZXRQb2x5Z29ucztcbiAgICBpZiAoIWNlbGxzU2hvd24oZGF0YXNldCwgdmlldykgfHwgKCF0aWxlZCAmJiAhd2hvbGUpKSB7XG4gICAgICB0aGlzLmRyb3AoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlhbWV0ZXIgPSB0eXBpY2FsQ2VsbERpYW1ldGVyKGRhdGFzZXQub2JzZXJ2YXRpb25zLnJhZGl1cyk7XG4gICAgLy8gV2hvbGUtZGF0YXNldCByaW5ncyBoYXZlIG9uZSBsZXZlbCBhbmQgbm8gY29hcnNlciBmYWxsYmFjaywgc28gdGhleSBhcmUgZHJhd24gYXNcbiAgICAvLyBzb29uIGFzIGEgY2VsbCBpcyBiaWcgZW5vdWdoIHRvIHJlYWQgYXMgYSBzaGFwZSByYXRoZXIgdGhhbiBhIGRvdC5cbiAgICBjb25zdCBsZXZlbCA9IHRpbGVkXG4gICAgICA/IHBvbHlnb25MZXZlbEZvcihweFBlclVuaXQsIGRpYW1ldGVyLCB0aWxlZC5sZXZlbHMubGVuZ3RoKVxuICAgICAgOiBweFBlclVuaXQgKiBkaWFtZXRlciA+PSBQT0xZR09OX0xFVkVMX01JTl9DRUxMX1BYWzJdXG4gICAgICAgID8gMFxuICAgICAgICA6IC0xO1xuICAgIGlmIChsZXZlbCA8IDApIHtcbiAgICAgIHRoaXMuZHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdyb3VwcyBzd2l0Y2hlZCBvZmYgaW4gdGhlIGxpc3Q6IHRoZWlyIGNlbGxzIGFyZSBsZWZ0IG91dCBvZiB0aGUgZ2VvbWV0cnkuXG4gICAgY29uc3QgaGlkZGVuID0gYXdhaXQgdGhpcy5sb29rdXAuaGlkZGVuQ29kZXMoZGF0YXNldCwgdmlldyk7XG4gICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG4gICAgY29uc3QgbGFiZWwgPSB2aWV3LmNlbGxTZXQgPT09ICdib3RoJyA/ICdDZWxscyBhbmQgbnVjbGVpJyA6IHZpZXcuY2VsbFNldCA9PT0gJ251Y2xldXMnID8gJ051Y2xlaScgOiAnQ2VsbHMnO1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gYXdhaXQgY3R4LnRyYWNrKGxhYmVsLCB0aGlzLmNlbGxHZW9tZXRyeShkYXRhc2V0LCB2aWV3LCByZWN0LCBsZXZlbCwgaGlkZGVuLCBjdHgpKTtcbiAgICBpZiAoIWdlb21ldHJ5KSByZXR1cm47XG4gICAgY29uc3QgeyByaW5ncywgbnVjbGVpLCBnZW9tZXRyeUtleSB9ID0gZ2VvbWV0cnk7XG5cbiAgICBjb25zdCBnZW9tZXRyeUNoYW5nZWQgPSBnZW9tZXRyeUtleSAhPT0gdGhpcy5jZWxsR2VvbWV0cnlLZXk7XG4gICAgY29uc3Qgc3R5bGVLZXkgPSBbXG4gICAgICBnZW9tZXRyeUtleSxcbiAgICAgIHZpZXcuY2VsbENvbG9yTW9kZSxcbiAgICAgIHZpZXcuY2VsbENvbG9yR2VuZSxcbiAgICAgIHZpZXcuY2VsbFNpbmdsZUNvbG9yLFxuICAgICAgY2VsbFR5cGVDb2x1bW5Gb3IoZGF0YXNldCwgdmlldyksXG4gICAgICB0aGlzLnNlbGVjdGlvblJldihzZWxlY3Rpb24pLFxuICAgICAgdmlldy5sb2dTY2FsZSxcbiAgICAgIHZpZXcucGVyY2VudGlsZUNsaXAuam9pbigpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkodmlldy5jb250aW51b3VzQ29sb3JtYXApLFxuICAgICAgdmlldy5jZWxsRHJhdyxcbiAgICAgIHZpZXcuY2VsbE9wYWNpdHksXG4gICAgXS5qb2luKCd8Jyk7XG4gICAgY29uc3QgcHJlc2VudCA9IChbJ2NlbGxGaWxsJywgJ2NlbGxPdXRsaW5lJywgJ251Y2xldXNPdXRsaW5lJ10gYXMgY29uc3QpLnNvbWUoKGcpID0+IHRoaXMuZ3JvdXBzLnNob3duKGcpKTtcbiAgICBpZiAoIWdlb21ldHJ5Q2hhbmdlZCAmJiBzdHlsZUtleSA9PT0gdGhpcy5jZWxsU3R5bGVLZXkgJiYgcHJlc2VudCkge1xuICAgICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xvcnMgPSBhd2FpdCB0aGlzLmNlbGxDb2xvcnMoZGF0YXNldCwgdmlldywgc2VsZWN0aW9uLCByaW5ncy5vYnNlcnZhdGlvbik7XG4gICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG5cbiAgICB0aGlzLmN1cnJlbnRSaW5ncyA9IHJpbmdzO1xuICAgIHRoaXMuY3VycmVudE51Y2xlaSA9IG51Y2xlaTtcbiAgICAvLyBBIGdlb21ldHJ5IG1pc3NpbmcgYSBmYWlsZWQgdGlsZSBpcyBkcmF3biBidXQgbm90IHJlbWVtYmVyZWQsIHNvIHRoZSByZXRyeSByZWZldGNoZXMgaXQuXG4gICAgdGhpcy5jZWxsR2VvbWV0cnlLZXkgPSBjdHguaW5jb21wbGV0ZSA/IG51bGwgOiBnZW9tZXRyeUtleTtcbiAgICB0aGlzLmNlbGxTdHlsZUtleSA9IHN0eWxlS2V5O1xuICAgIHRoaXMuZHJhd0NlbGxzKGRhdGFzZXQsIHZpZXcsIGdlb21ldHJ5LCBjb2xvcnMsIGdlb21ldHJ5Q2hhbmdlZCk7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjZWxsIGxheWVyczogdGhlIGZpbGwgYW5kIHRoZSBvdXRsaW5lIHRoZSB2aWV3J3MgZHJhdyBtb2RlIGFza3MgZm9yLCBhbmQgd2l0aCBcImJvdGhcIiB0aGVcbiAgICogbnVjbGV1cyBvdXRsaW5lcyBvdmVyIHRoZW0uIEEgZ2VvbWV0cnkgY2hhbmdlIGJ1aWxkcyBuZXcgbGF5ZXJzOyBhIHN0eWxlIGNoYW5nZSByZXN0eWxlcyB0aGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBkcmF3Q2VsbHMoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICB7IHJpbmdzLCBudWNsZWkgfTogeyByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlOyBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgfSxcbiAgICBjb2xvcnM6IENlbGxDb2xvcnMsXG4gICAgZ2VvbWV0cnlDaGFuZ2VkOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCByZWYgPSBkYXRhc2V0LmltYWdlUmVmO1xuICAgIGNvbnN0IGNvbW1vbiA9IHsgc2NhbGU6IHJlZj8uc2NhbGUgPz8gWzEsIDFdLCB0cmFuc2xhdGU6IHJlZj8udHJhbnNsYXRlID8/IFswLCAwXSB9IGFzIGNvbnN0O1xuICAgIGNvbnN0IGZpbGwgPSB2aWV3LmNlbGxEcmF3ICE9PSAnb3V0bGluZSc7XG4gICAgY29uc3Qgb3V0bGluZSA9IHZpZXcuY2VsbERyYXcgIT09ICdmaWxsJztcblxuICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcygnY2VsbEZpbGwnLCBmaWxsLCBnZW9tZXRyeUNoYW5nZWQsIHJpbmdzLCB7XG4gICAgICBuYW1lOiAnY2VsbHMnLFxuICAgICAgZHJhdzogJ2ZpbGwnLFxuICAgICAgb3BhY2l0eTogdmlldy5jZWxsT3BhY2l0eSxcbiAgICAgIC4uLmNvbG9ycyxcbiAgICAgIC4uLmNvbW1vbixcbiAgICB9KTtcbiAgICB0aGlzLmdyb3Vwcy51cHNlcnRTaGFwZXMoXG4gICAgICAnY2VsbE91dGxpbmUnLFxuICAgICAgb3V0bGluZSxcbiAgICAgIGdlb21ldHJ5Q2hhbmdlZCxcbiAgICAgIHJpbmdzLFxuICAgICAgZmlsbFxuICAgICAgICA/IC8vIE92ZXIgYSBmaWxsLCBhIGRhcmsgb3V0bGluZSBzZXBhcmF0ZXMgbmVpZ2hib3VycyBvZiB0aGUgc2FtZSB0eXBlLlxuICAgICAgICAgIHsgbmFtZTogJ2NlbGwgb3V0bGluZXMnLCBkcmF3OiAnb3V0bGluZScsIGNvbG9yOiBbMC4wOCwgMC4wOCwgMC4xLCAxXSwgb3BhY2l0eTogMC43LCAuLi5jb21tb24gfVxuICAgICAgICA6IHsgbmFtZTogJ2NlbGwgb3V0bGluZXMnLCBkcmF3OiAnb3V0bGluZScsIG9wYWNpdHk6IDEsIC4uLmNvbG9ycywgLi4uY29tbW9uIH0sXG4gICAgKTtcbiAgICAvLyBcIkJvdGhcIjogbnVjbGVpIG91dGxpbmVkIG92ZXIgdGhlIGNlbGxzLCBsaWdodCBzbyB0aGV5IHJlYWQgYWdhaW5zdCBhbnkgZmlsbC5cbiAgICBpZiAobnVjbGVpKSB7XG4gICAgICB0aGlzLmdyb3Vwcy51cHNlcnRTaGFwZXMoJ251Y2xldXNPdXRsaW5lJywgdHJ1ZSwgZ2VvbWV0cnlDaGFuZ2VkLCBudWNsZWksIHtcbiAgICAgICAgbmFtZTogJ251Y2xldXMgb3V0bGluZXMnLFxuICAgICAgICBkcmF3OiAnb3V0bGluZScsXG4gICAgICAgIGNvbG9yOiBbMC45NSwgMC45NSwgMC45OCwgMV0sXG4gICAgICAgIG9wYWNpdHk6IDAuOCxcbiAgICAgICAgLi4uY29tbW9uLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ251Y2xldXNPdXRsaW5lJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3Rpb25SZXYoc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayk6IG51bWJlciB7XG4gICAgaWYgKHNlbGVjdGlvbiAhPT0gdGhpcy5sYXN0U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gICAgICB0aGlzLnNlbGVjdGlvblJldmlzaW9uKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJldmlzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByaW5ncycgY29sb3VycyBieSB0aGVpciBvd25lcnMsIGJ5IHRoZSB2aWV3J3MgY2VsbC1jb2xvdXIgbW9kZSAoWGVuaXVtIEV4cGxvcmVyJ3MgXCJDZWxsXG4gICAqIENvbG9yXCIpOiBvbmUgUkdCQSBwZXIgc2hhcGUgZm9yIGEgZ3JvdXBpbmcsIHZhbHVlcyArIGNvbG9ybWFwIGZvciBhIG1lYXN1cmVtZW50LCBvbmUgY29sb3VyXG4gICAqIGZvciBcInNpbmdsZVwiLiBBIHNlbGVjdGlvbiBtdXRlcyB3aGF0IGl0IGxlYXZlcyBvdXQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNlbGxDb2xvcnMoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICBzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrLFxuICAgIG93bmVyczogVWludDMyQXJyYXksXG4gICk6IFByb21pc2U8Q2VsbENvbG9ycz4ge1xuICAgIGNvbnN0IG11dGVkID0gc2VsZWN0aW9uLmNvdW50ID4gMCA/IHNlbGVjdGlvbi5tYXNrIDogbnVsbDtcbiAgICBjb25zdCBtb2RlID0gdmlldy5jZWxsQ29sb3JNb2RlO1xuXG4gICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBjb25zdCBbciwgZywgYl0gPSBwYXJzZUhleCh2aWV3LmNlbGxTaW5nbGVDb2xvcik7XG4gICAgICByZXR1cm4geyBjb2xvcjogW3IgLyAyNTUsIGcgLyAyNTUsIGIgLyAyNTUsIDFdIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29udGludW91cyA9IGFzeW5jIChyYXc6IEZsb2F0MzJBcnJheSwgbG9nOiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBuZXcgRmxvYXQzMkFycmF5KG93bmVycy5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvd25lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdiA9IHJhd1tvd25lcnNbaV1dID8/IE5hTjtcbiAgICAgICAgdmFsdWVzW2ldID0gbG9nID8gTWF0aC5sb2cxcChNYXRoLm1heCgwLCB2KSkgOiB2O1xuICAgICAgfVxuICAgICAgY29uc3QgW2NsaXBMbywgY2xpcEhpXSA9IHZpZXcucGVyY2VudGlsZUNsaXA7XG4gICAgICAvLyBLZXllZCBieSB0aGUgU09VUkNFIHZlY3RvciAodGhlIGxvZyBjb3B5IHdvdWxkIGJlIG5ldyBvbiBldmVyeSBjYWxsKSwgYXMgdGhlIDNEIGNsb3VkJ3MuXG4gICAgICBjb25zdCBbbG8sIGhpXSA9IHRoaXMuY29udHJhc3RXaW5kb3dzLmdldChyYXcsIGNsaXBMbywgY2xpcEhpLCBsb2csICgpID0+XG4gICAgICAgIGNvbnRyYXN0V2luZG93KGxvZyA/IHJhdy5tYXAoKHYpID0+IE1hdGgubG9nMXAoTWF0aC5tYXgoMCwgdikpKSA6IHJhdywgY2xpcExvLCBjbGlwSGkpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgY29sb3JtYXA6IGNvbG9ybWFwRnJvbUx1dCgnc3BhdGlhbC1jb250aW51b3VzJywgdGhpcy5ob3N0LmNvbnRpbnVvdXNMdXQodmlldykpLFxuICAgICAgICBjb250cmFzdExpbWl0czogW2xvLCBoaV0gYXMgW251bWJlciwgbnVtYmVyXSxcbiAgICAgIH07XG4gICAgfTtcbiAgICBpZiAobW9kZSA9PT0gJ2dlbmUnICYmIHZpZXcuY2VsbENvbG9yR2VuZSkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVvdXMoYXdhaXQgdGhpcy5wb3J0LmdldEZlYXR1cmVWZWN0b3Iodmlldy5jZWxsQ29sb3JHZW5lKSwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSAndHJhbnNjcmlwdERlbnNpdHknICYmIGRhdGFzZXQuY29sdW1ucy5zb21lKChjKSA9PiBjLm5hbWUgPT09ICd0cmFuc2NyaXB0X2RlbnNpdHknKSkge1xuICAgICAgY29uc3QgY29sdW1uID0gYXdhaXQgdGhpcy5wb3J0LmdldENvbHVtbigndHJhbnNjcmlwdF9kZW5zaXR5Jyk7XG4gICAgICBpZiAoIWlzQ2F0ZWdvcmljYWxDb2x1bW4oY29sdW1uKSkgcmV0dXJuIGNvbnRpbnVvdXMoY29sdW1uLnZhbHVlcywgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPVxuICAgICAgbW9kZSA9PT0gJ3NlZ21lbnRhdGlvbicgJiYgZGF0YXNldC5jb2x1bW5zLnNvbWUoKGMpID0+IGMubmFtZSA9PT0gJ3NlZ21lbnRhdGlvbl9tZXRob2QnKVxuICAgICAgICA/ICdzZWdtZW50YXRpb25fbWV0aG9kJ1xuICAgICAgICA6IGNlbGxUeXBlQ29sdW1uRm9yKGRhdGFzZXQsIHZpZXcpO1xuICAgIGNvbnN0IGNvZGVzID0gbmFtZSA/IGF3YWl0IHRoaXMubG9va3VwLmNvZGVzKG5hbWUpIDogbnVsbDtcbiAgICBjb25zdCBwYWxldHRlID0gY2F0ZWdvcnlSZ2JhKGNvZGVzPy5tZXRhID8/IG51bGwpO1xuICAgIGNvbnN0IG1pc3NpbmcgPSByZ2JhMDEoTUlTU0lOR19DT0xPUik7XG4gICAgLy8gT25lIFJHQkEgcGVyIHNoYXBlIChuYXBhcmkgU2hhcGVzJyBgZmFjZV9jb2xvcmApOiBhbnkgbnVtYmVyIG9mIGNhdGVnb3JpZXMga2VlcHMgaXRzIG93blxuICAgIC8vIGNvbG91ciwgd2hlcmUgYSBjb2xvcm1hcCBiYW5kIHBlciBjYXRlZ29yeSByYW4gb3V0IG9mIExVVCBlbnRyaWVzIHBhc3QgfjEyNy5cbiAgICBjb25zdCBmYWNlQ29sb3IgPSBuZXcgRmxvYXQzMkFycmF5KG93bmVycy5sZW5ndGggKiA0KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG93bmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbyA9IG93bmVyc1tpXTtcbiAgICAgIGNvbnN0IGNvZGUgPSAhY29kZXMgfHwgKG11dGVkICYmICFtdXRlZFtvXSkgPyBOT19DQVRFR09SWSA6IGNvZGVzLmNvZGVzW29dO1xuICAgICAgZmFjZUNvbG9yLnNldChwYWxldHRlW2NvZGVdID8/IG1pc3NpbmcsIGkgKiA0KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZmFjZUNvbG9yIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNlbGwgcmluZ3MgKGFuZCwgZm9yIFwiYm90aFwiLCB0aGUgbnVjbGV1cyByaW5ncykgY292ZXJpbmcgYHJlY3RgIGF0IGBsZXZlbGAsIG1pbnVzXG4gICAqIHRoZSBoaWRkZW4gZ3JvdXBzIOKAlCByZXVzZWQgd2hlbiBub3RoaW5nIHRoYXQgZGVjaWRlcyB0aGVtIGNoYW5nZWQuIE51bGwgd2hlbiB0aGVcbiAgICogdmlldyB3ZW50IHN0YWxlIG9yIHRoZSBkYXRhc2V0IGhhcyBubyBzZXQgdG8gZHJhdy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2VsbEdlb21ldHJ5KFxuICAgIGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0LFxuICAgIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsXG4gICAgcmVjdDogRGF0YVJlY3QsXG4gICAgbGV2ZWw6IG51bWJlcixcbiAgICBoaWRkZW46IEhpZGRlbkNvZGVzIHwgbnVsbCxcbiAgICBjdHg6IFBsYW5Db250ZXh0LFxuICApOiBQcm9taXNlPHsgcmluZ3M6IFNwYXRpYWxQb2x5Z29uVGlsZTsgbnVjbGVpOiBTcGF0aWFsUG9seWdvblRpbGUgfCBudWxsOyBnZW9tZXRyeUtleTogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgY29uc3QgdGlsZWQgPSBkYXRhc2V0LnBvbHlnb25UaWxlcztcbiAgICBjb25zdCBoaWRkZW5LZXkgPSB2aWV3LmhpZGRlbkdyb3Vwcy5qb2luKCdcXHUwMDAxJyk7XG4gICAgbGV0IHJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGU7XG4gICAgbGV0IG51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGdlb21ldHJ5S2V5OiBzdHJpbmc7XG4gICAgaWYgKHRpbGVkKSB7XG4gICAgICBjb25zdCBib3RoID0gdmlldy5jZWxsU2V0ID09PSAnYm90aCc7XG4gICAgICBjb25zdCBzZXQgPVxuICAgICAgICAhYm90aCAmJiB2aWV3LmNlbGxTZXQgJiYgdGlsZWQuc2V0cy5zb21lKChzKSA9PiBzLm5hbWUgPT09IHZpZXcuY2VsbFNldClcbiAgICAgICAgICA/IHZpZXcuY2VsbFNldFxuICAgICAgICAgIDogKHRpbGVkLmRlZmF1bHRTZXQgPz8gdGlsZWQuc2V0c1swXT8ubmFtZSk7XG4gICAgICBpZiAoIXNldCkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBudWNsZXVzU2V0ID0gYm90aCA/IHRpbGVkLnNldHMuZmluZCgocykgPT4gcy5uYW1lICE9PSBzZXQpPy5uYW1lIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qga2V5cyA9IHRpbGVzSW5SZWN0KHJlY3QsIGxldmVsLCB0aWxlZC5sZXZlbHMsIHRpbGVkLmJvdW5kcywgTUFYX0NFTExfVElMRVMpO1xuICAgICAgZ2VvbWV0cnlLZXkgPSBgJHtkYXRhc2V0LmlkfXwke3NldH18JHtudWNsZXVzU2V0ID8/ICcnfXwke2hpZGRlbktleX18JHtrZXlzLm1hcCh0aWxlSWQpLmpvaW4oJywnKX1gO1xuICAgICAgaWYgKGdlb21ldHJ5S2V5ID09PSB0aGlzLmNlbGxHZW9tZXRyeUtleSAmJiB0aGlzLmN1cnJlbnRSaW5ncykge1xuICAgICAgICByaW5ncyA9IHRoaXMuY3VycmVudFJpbmdzO1xuICAgICAgICBudWNsZWkgPSB0aGlzLmN1cnJlbnROdWNsZWk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbdGlsZXMsIG51Y2xldXNUaWxlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgY3R4LmZldGNoQWxsKGtleXMsIChrKSA9PiB0aGlzLnBvcnQuZ2V0UG9seWdvblRpbGUhKHNldCwgay5sZXZlbCwgay5neCwgay5neSkpLFxuICAgICAgICAgIG51Y2xldXNTZXRcbiAgICAgICAgICAgID8gY3R4LmZldGNoQWxsKGtleXMsIChrKSA9PiB0aGlzLnBvcnQuZ2V0UG9seWdvblRpbGUhKG51Y2xldXNTZXQsIGsubGV2ZWwsIGsuZ3gsIGsuZ3kpKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUobnVsbCksXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybiBudWxsO1xuICAgICAgICByaW5ncyA9IGZpbHRlclJpbmdzKG1lcmdlUG9seWdvblRpbGVzKHRpbGVzKSwgaGlkZGVuKTtcbiAgICAgICAgbnVjbGVpID0gbnVjbGV1c1RpbGVzID8gZmlsdGVyUmluZ3MobWVyZ2VQb2x5Z29uVGlsZXMobnVjbGV1c1RpbGVzKSwgaGlkZGVuKSA6IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlb21ldHJ5S2V5ID0gYCR7ZGF0YXNldC5pZH18d2hvbGV8JHtoaWRkZW5LZXl9YDtcbiAgICAgIGlmIChnZW9tZXRyeUtleSA9PT0gdGhpcy5jZWxsR2VvbWV0cnlLZXkgJiYgdGhpcy5jdXJyZW50UmluZ3MpIHtcbiAgICAgICAgcmluZ3MgPSB0aGlzLmN1cnJlbnRSaW5ncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBvbHlzOiBTcGF0aWFsUG9seWdvbnMgPSBhd2FpdCB0aGlzLnBvcnQuZ2V0UG9seWdvbnMhKCk7XG4gICAgICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIFdob2xlLWRhdGFzZXQgcmluZ3MgYXJlIGluZGV4LWFsaWduZWQgd2l0aCB0aGUgb2JzZXJ2YXRpb25zLlxuICAgICAgICByaW5ncyA9IGZpbHRlclJpbmdzKFxuICAgICAgICAgIHsgLi4ucG9seXMsIG9ic2VydmF0aW9uOiBVaW50MzJBcnJheS5mcm9tKHsgbGVuZ3RoOiBwb2x5cy5jb3VudCB9LCAoX3YsIGkpID0+IGkpIH0sXG4gICAgICAgICAgaGlkZGVuLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyByaW5ncywgbnVjbGVpLCBnZW9tZXRyeUtleSB9O1xuICB9XG5cbiAgLyoqIFJlbW92ZSB0aGUgY2VsbCBsYXllcnMgYW5kIGZvcmdldCB3aGF0IHRoZXkgc2hvd2VkLiAqL1xuICBkcm9wKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ2NlbGxGaWxsJyk7XG4gICAgdGhpcy5ncm91cHMuZHJvcCgnY2VsbE91dGxpbmUnKTtcbiAgICB0aGlzLmdyb3Vwcy5kcm9wKCdudWNsZXVzT3V0bGluZScpO1xuICAgIHRoaXMuY3VycmVudE51Y2xlaSA9IG51bGw7XG4gICAgdGhpcy5jZWxsR2VvbWV0cnlLZXkgPSBudWxsO1xuICAgIHRoaXMuY2VsbFN0eWxlS2V5ID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSaW5ncyA9IG51bGw7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9seWdvbnNTaG93bihzaG93bjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChzaG93biA9PT0gdGhpcy5wb2x5Z29uc1Nob3duKSByZXR1cm47XG4gICAgdGhpcy5wb2x5Z29uc1Nob3duID0gc2hvd247XG4gICAgdGhpcy5ob3N0LnBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duKTtcbiAgfVxufVxuXG4vKiogQW4gOC1iaXQgUkdCIGFzIGFuIG9wYXF1ZSAwLi4xIFJHQkEuICovXG5mdW5jdGlvbiByZ2JhMDEoW3IsIGcsIGJdOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiBSR0JBIHtcbiAgcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1LCAxXTtcbn1cblxuLyoqIEEgZ3JvdXBpbmcncyBjYXRlZ29yeSBjb2xvdXJzLCBhcyAwLi4xIFJHQkEgYnkgY2F0ZWdvcnkgY29kZSAob25lIGRlZmF1bHQgd2l0aG91dCBhIGdyb3VwaW5nKS4gKi9cbmZ1bmN0aW9uIGNhdGVnb3J5UmdiYShtZXRhOiBTcGF0aWFsQ29sdW1uWydtZXRhJ10gfCBudWxsKTogUkdCQVtdIHtcbiAgY29uc3QgaGV4ID0gbWV0YSAmJiBtZXRhLmtpbmQgPT09ICdjYXRlZ29yaWNhbCcgPyByZXNvbHZlQ2F0ZWdvcnlDb2xvcnMobWV0YSkgOiBbREVGQVVMVF9DQVRFR09SSUNBTF9QQUxFVFRFWzBdXTtcbiAgcmV0dXJuIGhleC5tYXAoKGgpID0+IHJnYmEwMShwYXJzZUhleChoKSkpO1xufVxuIl19
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1sYXllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvc3BhdGlhbC10aWxlcy9jZWxsLWxheWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTTVDLE9BQU8sRUFDTCxXQUFXLEVBS1gsbUJBQW1CLEdBQ3BCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixhQUFhLEVBQ2IsY0FBYyxFQUNkLFFBQVEsRUFDUixxQkFBcUIsR0FDdEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsZUFBZSxFQUNmLE1BQU0sRUFDTixXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUtqRSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFvQjFCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQWNyQixZQUNtQixJQUFxQixFQUNyQixNQUFxQyxFQUNyQyxNQUF5QixFQUN6QixJQUFvQjtRQUhwQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUErQjtRQUNyQyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQWpCL0Isa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDOUIsMEVBQTBFO1FBQ2xFLGlCQUFZLEdBQThC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TUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbG9ybWFwRnJvbUx1dCB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgdHlwZSB7IENvbG9ybWFwLCBSR0JBIH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHR5cGUgeyBSZ2IgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvY29sb3JtYXAtbHV0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbERhdGFQb3J0IH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB7XG4gIE5PX0NBVEVHT1JZLFxuICBTcGF0aWFsQ29sdW1uLFxuICBTcGF0aWFsRGF0YXNldCxcbiAgU3BhdGlhbFBvbHlnb25UaWxlLFxuICBTcGF0aWFsUG9seWdvbnMsXG4gIGlzQ2F0ZWdvcmljYWxDb2x1bW4sXG59IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9DQVRFR09SSUNBTF9QQUxFVFRFLFxuICBNSVNTSU5HX0NPTE9SLFxuICBjb250cmFzdFdpbmRvdyxcbiAgcGFyc2VIZXgsXG4gIHJlc29sdmVDYXRlZ29yeUNvbG9ycyxcbn0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB7IFNwYXRpYWxTZWxlY3Rpb25NYXNrIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXNlbGVjdGlvbic7XG5pbXBvcnQge1xuICBEYXRhUmVjdCxcbiAgUE9MWUdPTl9MRVZFTF9NSU5fQ0VMTF9QWCxcbiAgY2VsbFR5cGVDb2x1bW5Gb3IsXG4gIGNlbGxzU2hvd24sXG4gIHBvbHlnb25MZXZlbEZvcixcbiAgdGlsZUlkLFxuICB0aWxlc0luUmVjdCxcbiAgdHlwaWNhbENlbGxEaWFtZXRlcixcbn0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9sb2QnO1xuaW1wb3J0IHsgZmlsdGVyUmluZ3MsIG1lcmdlUG9seWdvblRpbGVzIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXRpbGUtbWVyZ2UnO1xuaW1wb3J0IHsgZ2VuZUZpbHRlcktleSB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1nZW5lLWZpbHRlcic7XG5pbXBvcnQgeyBDb250cmFzdFdpbmRvd0NhY2hlIH0gZnJvbSAnLi4vbmFwYXJpLXNwYXRpYWwtZW5jb2RpbmcnO1xuaW1wb3J0IHR5cGUgeyBDYXRlZ29yaWNhbExvb2t1cCwgSGlkZGVuQ29kZXMgfSBmcm9tICcuL2NhdGVnb3JpY2FsLWxvb2t1cCc7XG5pbXBvcnQgdHlwZSB7IE9yZGVyZWRMYXllckdyb3VwcywgVGlsZUdyb3VwIH0gZnJvbSAnLi9sYXllci1ncm91cHMnO1xuaW1wb3J0IHR5cGUgeyBQbGFuQ29udGV4dCB9IGZyb20gJy4vcGxhbi1jb250ZXh0JztcblxuY29uc3QgTUFYX0NFTExfVElMRVMgPSA0ODtcblxuLyoqIFRoZSBjZWxscycgY29sb3VycyBhcyBhIHNoYXBlcyBsYXllciB0YWtlcyB0aGVtOiBwZXItc2hhcGUgUkdCQSwgdmFsdWVzIG92ZXIgYSBjb2xvcm1hcCwgb3JcbiAqICBvbmUgY29sb3VyLiAqL1xuaW50ZXJmYWNlIENlbGxDb2xvcnMge1xuICB2YWx1ZXM/OiBGbG9hdDMyQXJyYXk7XG4gIGNvbG9ybWFwPzogQ29sb3JtYXA7XG4gIGNvbnRyYXN0TGltaXRzPzogW251bWJlciwgbnVtYmVyXTtcbiAgY29sb3I/OiBSR0JBO1xuICBmYWNlQ29sb3I/OiBGbG9hdDMyQXJyYXk7XG59XG5cbi8qKiBXaGF0IHRoZSBjZWxsIGxheWVycyBuZWVkIGZyb20gdGhlIHNlcnZpY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxMYXllcnNIb3N0IHtcbiAgLyoqIFRoZSBjb250aW51b3VzIExVVCB0aGUgdmlldyBpcyB1c2luZyAoc28gY2VsbHMgY29sb3VyZWQgYnkgYSBnZW5lIG1hdGNoIHRoZSBtYXJrZXJzKS4gKi9cbiAgY29udGludW91c0x1dCh2aWV3OiBTcGF0aWFsVmlld1N0YXRlKTogUmdiW107XG4gIC8qKiBPdXRsaW5lcyBhcHBlYXJlZCBvciBkaXNhcHBlYXJlZDogdGhlIG1hcmtlcnMnIHZpc2liaWxpdHkgZm9sbG93cy4gKi9cbiAgcG9seWdvbnNTaG93bkNoYW5nZWQoc2hvd246IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBjZWxsIG91dGxpbmVzIG9mIHRoZSAyRCBzcGF0aWFsIHZpZXcsIGF0IHRoZSBwb2x5Z29uIGxldmVsIHRoZSB6b29tIGNhbGxzIGZvcjogYSBmaWxsLFxuICogYW4gb3V0bGluZSBvciBib3RoIChwbHVzIG51Y2xldXMgb3V0bGluZXMgZm9yIHRoZSBcImJvdGhcIiBjZWxsIHNldCksIGNvbG91cmVkIGJ5IHRoZSB2aWV3J3NcbiAqIGNlbGwtY29sb3VyIG1vZGUsIHdpdGggc3dpdGNoZWQtb2ZmIGdyb3VwcyBsZWZ0IG91dCBvZiB0aGUgZ2VvbWV0cnkuXG4gKlxuICogR2VvbWV0cnkgYW5kIHN0eWxlIGFyZSBrZXllZCBhcGFydCwgc28gYSByZWNvbG91ciAoYSBuZXcgY2VsbC10eXBlIGNvbHVtbiwgYSBzZWxlY3Rpb24pXG4gKiByZXdyaXRlcyB0aGUgcGVyLXNoYXBlIHZhbHVlcyBvZiB0aGUgZXhpc3RpbmcgbGF5ZXJzIGFuZCBuZXZlciByZS1leHBhbmRzIHRoZSByaW5ncy5cbiAqL1xuZXhwb3J0IGNsYXNzIENlbGxMYXllcnMge1xuICBwcml2YXRlIHBvbHlnb25zU2hvd24gPSBmYWxzZTtcbiAgLyoqIFJpbmdzIGN1cnJlbnRseSBkcmF3biBhbmQgdGhlIChkYXRhc2V0LCBzZXQsIHRpbGVzKSB0aGV5IGNhbWUgZnJvbS4gKi9cbiAgcHJpdmF0ZSBjdXJyZW50UmluZ3M6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNlbGxHZW9tZXRyeUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudE51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2VsbFN0eWxlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqIFNlbGVjdGlvbiBpZGVudGl0eSDihpIgcmV2aXNpb24sIHNvIGEgY2hhbmdlIGtleSBjYW4gbmFtZSBhIHNlbGVjdGlvbiBjaGVhcGx5LiAqL1xuICBwcml2YXRlIGxhc3RTZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2VsZWN0aW9uUmV2aXNpb24gPSAwO1xuICAvKiogQ29udGludW91cyBjb2xvdXJpbmdzJyB3aW5kb3dzLCBwZXIgKHZlY3RvciwgY2xpcCwgbG9nKTogYGNvbnRyYXN0V2luZG93YCBzb3J0cyBldmVyeVxuICAgKiAgdmFsdWUsIGFuZCBhIHNlbGVjdGlvbiBvciBvcGFjaXR5IGNoYW5nZSByZWNvbG91cnMgd2l0aCB0aGUgdmVjdG9yIHVuY2hhbmdlZCAoU1BBVElBTC0xMikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29udHJhc3RXaW5kb3dzID0gbmV3IENvbnRyYXN0V2luZG93Q2FjaGUoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwczogT3JkZXJlZExheWVyR3JvdXBzPFRpbGVHcm91cD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb29rdXA6IENhdGVnb3JpY2FsTG9va3VwLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaG9zdDogQ2VsbExheWVyc0hvc3QsXG4gICkge31cblxuICAvKiogVHJ1ZSB3aGlsZSBvdXRsaW5lcyBhcmUgb24gc2NyZWVuIOKAlCB0aGUgc2VydmljZSBoaWRlcyBpdHMgZG90cyB0aGVuLiAqL1xuICBnZXQgb3V0bGluZXNTaG93bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wb2x5Z29uc1Nob3duO1xuICB9XG5cbiAgLyoqIFRoZSB2aWV3ZXIgd2VudCBhd2F5IChpdHMgbGF5ZXJzIHdpdGggaXQpOiB0aGUgb3V0bGluZXMgYXJlIG5vIGxvbmdlciBzaG93bi4gKi9cbiAgZGV0YWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBEcmF3IHRoZSBjZWxscyBjb3ZlcmluZyBgcmVjdGAgYXQgdGhlIGxldmVsIGBweFBlclVuaXRgIGNhbGxzIGZvciwgb3IgZHJvcCB0aGVtLiAqL1xuICBhc3luYyBwbGFuKFxuICAgIGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0LFxuICAgIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsXG4gICAgc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uTWFzayxcbiAgICByZWN0OiBEYXRhUmVjdCxcbiAgICBweFBlclVuaXQ6IG51bWJlcixcbiAgICBjdHg6IFBsYW5Db250ZXh0LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aWxlZCA9IGRhdGFzZXQucG9seWdvblRpbGVzO1xuICAgIGNvbnN0IHdob2xlID0gIXRpbGVkICYmIGRhdGFzZXQucG9seWdvbnMgJiYgdGhpcy5wb3J0LmdldFBvbHlnb25zO1xuICAgIGlmICghY2VsbHNTaG93bihkYXRhc2V0LCB2aWV3KSB8fCAoIXRpbGVkICYmICF3aG9sZSkpIHtcbiAgICAgIHRoaXMuZHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaWFtZXRlciA9IHR5cGljYWxDZWxsRGlhbWV0ZXIoZGF0YXNldC5vYnNlcnZhdGlvbnMucmFkaXVzKTtcbiAgICAvLyBXaG9sZS1kYXRhc2V0IHJpbmdzIGhhdmUgb25lIGxldmVsIGFuZCBubyBjb2Fyc2VyIGZhbGxiYWNrLCBzbyB0aGV5IGFyZSBkcmF3biBhc1xuICAgIC8vIHNvb24gYXMgYSBjZWxsIGlzIGJpZyBlbm91Z2ggdG8gcmVhZCBhcyBhIHNoYXBlIHJhdGhlciB0aGFuIGEgZG90LlxuICAgIGNvbnN0IGxldmVsID0gdGlsZWRcbiAgICAgID8gcG9seWdvbkxldmVsRm9yKHB4UGVyVW5pdCwgZGlhbWV0ZXIsIHRpbGVkLmxldmVscy5sZW5ndGgpXG4gICAgICA6IHB4UGVyVW5pdCAqIGRpYW1ldGVyID49IFBPTFlHT05fTEVWRUxfTUlOX0NFTExfUFhbMl1cbiAgICAgICAgPyAwXG4gICAgICAgIDogLTE7XG4gICAgaWYgKGxldmVsIDwgMCkge1xuICAgICAgdGhpcy5kcm9wKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR3JvdXBzIHN3aXRjaGVkIG9mZiBpbiB0aGUgbGlzdDogdGhlaXIgY2VsbHMgYXJlIGxlZnQgb3V0IG9mIHRoZSBnZW9tZXRyeS5cbiAgICBjb25zdCBoaWRkZW4gPSBhd2FpdCB0aGlzLmxvb2t1cC5oaWRkZW5Db2RlcyhkYXRhc2V0LCB2aWV3KTtcbiAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcbiAgICBjb25zdCBsYWJlbCA9IHZpZXcuY2VsbFNldCA9PT0gJ2JvdGgnID8gJ0NlbGxzIGFuZCBudWNsZWknIDogdmlldy5jZWxsU2V0ID09PSAnbnVjbGV1cycgPyAnTnVjbGVpJyA6ICdDZWxscyc7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBhd2FpdCBjdHgudHJhY2sobGFiZWwsIHRoaXMuY2VsbEdlb21ldHJ5KGRhdGFzZXQsIHZpZXcsIHJlY3QsIGxldmVsLCBoaWRkZW4sIGN0eCkpO1xuICAgIGlmICghZ2VvbWV0cnkpIHJldHVybjtcbiAgICBjb25zdCB7IHJpbmdzLCBudWNsZWksIGdlb21ldHJ5S2V5IH0gPSBnZW9tZXRyeTtcblxuICAgIGNvbnN0IGdlb21ldHJ5Q2hhbmdlZCA9IGdlb21ldHJ5S2V5ICE9PSB0aGlzLmNlbGxHZW9tZXRyeUtleTtcbiAgICBjb25zdCBzdHlsZUtleSA9IFtcbiAgICAgIGdlb21ldHJ5S2V5LFxuICAgICAgdmlldy5jZWxsQ29sb3JNb2RlLFxuICAgICAgdmlldy5jZWxsQ29sb3JHZW5lLFxuICAgICAgdmlldy5jZWxsU2luZ2xlQ29sb3IsXG4gICAgICBjZWxsVHlwZUNvbHVtbkZvcihkYXRhc2V0LCB2aWV3KSxcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmV2KHNlbGVjdGlvbiksXG4gICAgICB2aWV3LmxvZ1NjYWxlLFxuICAgICAgdmlldy5wZXJjZW50aWxlQ2xpcC5qb2luKCksXG4gICAgICBKU09OLnN0cmluZ2lmeSh2aWV3LmNvbnRpbnVvdXNDb2xvcm1hcCksXG4gICAgICB2aWV3LmNlbGxEcmF3LFxuICAgICAgdmlldy5jZWxsT3BhY2l0eSxcbiAgICBdLmpvaW4oJ3wnKTtcbiAgICBjb25zdCBwcmVzZW50ID0gKFsnY2VsbEZpbGwnLCAnY2VsbE91dGxpbmUnLCAnbnVjbGV1c091dGxpbmUnXSBhcyBjb25zdCkuc29tZSgoZykgPT4gdGhpcy5ncm91cHMuc2hvd24oZykpO1xuICAgIGlmICghZ2VvbWV0cnlDaGFuZ2VkICYmIHN0eWxlS2V5ID09PSB0aGlzLmNlbGxTdHlsZUtleSAmJiBwcmVzZW50KSB7XG4gICAgICB0aGlzLnNldFBvbHlnb25zU2hvd24odHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbG9ycyA9IGF3YWl0IHRoaXMuY2VsbENvbG9ycyhkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb24sIHJpbmdzLm9ic2VydmF0aW9uKTtcbiAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcblxuICAgIHRoaXMuY3VycmVudFJpbmdzID0gcmluZ3M7XG4gICAgdGhpcy5jdXJyZW50TnVjbGVpID0gbnVjbGVpO1xuICAgIC8vIEEgZ2VvbWV0cnkgbWlzc2luZyBhIGZhaWxlZCB0aWxlIGlzIGRyYXduIGJ1dCBub3QgcmVtZW1iZXJlZCwgc28gdGhlIHJldHJ5IHJlZmV0Y2hlcyBpdC5cbiAgICB0aGlzLmNlbGxHZW9tZXRyeUtleSA9IGN0eC5pbmNvbXBsZXRlID8gbnVsbCA6IGdlb21ldHJ5S2V5O1xuICAgIHRoaXMuY2VsbFN0eWxlS2V5ID0gc3R5bGVLZXk7XG4gICAgdGhpcy5kcmF3Q2VsbHMoZGF0YXNldCwgdmlldywgZ2VvbWV0cnksIGNvbG9ycywgZ2VvbWV0cnlDaGFuZ2VkKTtcbiAgICB0aGlzLnNldFBvbHlnb25zU2hvd24odHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNlbGwgbGF5ZXJzOiB0aGUgZmlsbCBhbmQgdGhlIG91dGxpbmUgdGhlIHZpZXcncyBkcmF3IG1vZGUgYXNrcyBmb3IsIGFuZCB3aXRoIFwiYm90aFwiIHRoZVxuICAgKiBudWNsZXVzIG91dGxpbmVzIG92ZXIgdGhlbS4gQSBnZW9tZXRyeSBjaGFuZ2UgYnVpbGRzIG5ldyBsYXllcnM7IGEgc3R5bGUgY2hhbmdlIHJlc3R5bGVzIHRoZW0uXG4gICAqL1xuICBwcml2YXRlIGRyYXdDZWxscyhcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHsgcmluZ3MsIG51Y2xlaSB9OiB7IHJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGU7IG51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCB9LFxuICAgIGNvbG9yczogQ2VsbENvbG9ycyxcbiAgICBnZW9tZXRyeUNoYW5nZWQ6IGJvb2xlYW4sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHJlZiA9IGRhdGFzZXQuaW1hZ2VSZWY7XG4gICAgY29uc3QgY29tbW9uID0geyBzY2FsZTogcmVmPy5zY2FsZSA/PyBbMSwgMV0sIHRyYW5zbGF0ZTogcmVmPy50cmFuc2xhdGUgPz8gWzAsIDBdIH0gYXMgY29uc3Q7XG4gICAgY29uc3QgZmlsbCA9IHZpZXcuY2VsbERyYXcgIT09ICdvdXRsaW5lJztcbiAgICBjb25zdCBvdXRsaW5lID0gdmlldy5jZWxsRHJhdyAhPT0gJ2ZpbGwnO1xuXG4gICAgdGhpcy5ncm91cHMudXBzZXJ0U2hhcGVzKCdjZWxsRmlsbCcsIGZpbGwsIGdlb21ldHJ5Q2hhbmdlZCwgcmluZ3MsIHtcbiAgICAgIG5hbWU6ICdjZWxscycsXG4gICAgICBkcmF3OiAnZmlsbCcsXG4gICAgICBvcGFjaXR5OiB2aWV3LmNlbGxPcGFjaXR5LFxuICAgICAgLi4uY29sb3JzLFxuICAgICAgLi4uY29tbW9uLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcyhcbiAgICAgICdjZWxsT3V0bGluZScsXG4gICAgICBvdXRsaW5lLFxuICAgICAgZ2VvbWV0cnlDaGFuZ2VkLFxuICAgICAgcmluZ3MsXG4gICAgICBmaWxsXG4gICAgICAgID8gLy8gT3ZlciBhIGZpbGwsIGEgZGFyayBvdXRsaW5lIHNlcGFyYXRlcyBuZWlnaGJvdXJzIG9mIHRoZSBzYW1lIHR5cGUuXG4gICAgICAgICAgeyBuYW1lOiAnY2VsbCBvdXRsaW5lcycsIGRyYXc6ICdvdXRsaW5lJywgY29sb3I6IFswLjA4LCAwLjA4LCAwLjEsIDFdLCBvcGFjaXR5OiAwLjcsIC4uLmNvbW1vbiB9XG4gICAgICAgIDogeyBuYW1lOiAnY2VsbCBvdXRsaW5lcycsIGRyYXc6ICdvdXRsaW5lJywgb3BhY2l0eTogMSwgLi4uY29sb3JzLCAuLi5jb21tb24gfSxcbiAgICApO1xuICAgIC8vIFwiQm90aFwiOiBudWNsZWkgb3V0bGluZWQgb3ZlciB0aGUgY2VsbHMsIGxpZ2h0IHNvIHRoZXkgcmVhZCBhZ2FpbnN0IGFueSBmaWxsLlxuICAgIGlmIChudWNsZWkpIHtcbiAgICAgIHRoaXMuZ3JvdXBzLnVwc2VydFNoYXBlcygnbnVjbGV1c091dGxpbmUnLCB0cnVlLCBnZW9tZXRyeUNoYW5nZWQsIG51Y2xlaSwge1xuICAgICAgICBuYW1lOiAnbnVjbGV1cyBvdXRsaW5lcycsXG4gICAgICAgIGRyYXc6ICdvdXRsaW5lJyxcbiAgICAgICAgY29sb3I6IFswLjk1LCAwLjk1LCAwLjk4LCAxXSxcbiAgICAgICAgb3BhY2l0eTogMC44LFxuICAgICAgICAuLi5jb21tb24sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncm91cHMuZHJvcCgnbnVjbGV1c091dGxpbmUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdGlvblJldihzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrKTogbnVtYmVyIHtcbiAgICBpZiAoc2VsZWN0aW9uICE9PSB0aGlzLmxhc3RTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmV2aXNpb24rKztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uUmV2aXNpb247XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJpbmdzJyBjb2xvdXJzIGJ5IHRoZWlyIG93bmVycywgYnkgdGhlIHZpZXcncyBjZWxsLWNvbG91ciBtb2RlIChYZW5pdW0gRXhwbG9yZXIncyBcIkNlbGxcbiAgICogQ29sb3JcIik6IG9uZSBSR0JBIHBlciBzaGFwZSBmb3IgYSBncm91cGluZywgdmFsdWVzICsgY29sb3JtYXAgZm9yIGEgbWVhc3VyZW1lbnQsIG9uZSBjb2xvdXJcbiAgICogZm9yIFwic2luZ2xlXCIuIEEgc2VsZWN0aW9uIG11dGVzIHdoYXQgaXQgbGVhdmVzIG91dC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY2VsbENvbG9ycyhcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gICAgb3duZXJzOiBVaW50MzJBcnJheSxcbiAgKTogUHJvbWlzZTxDZWxsQ29sb3JzPiB7XG4gICAgY29uc3QgbXV0ZWQgPSBzZWxlY3Rpb24uY291bnQgPiAwID8gc2VsZWN0aW9uLm1hc2sgOiBudWxsO1xuICAgIGNvbnN0IG1vZGUgPSB2aWV3LmNlbGxDb2xvck1vZGU7XG5cbiAgICBpZiAobW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIGNvbnN0IFtyLCBnLCBiXSA9IHBhcnNlSGV4KHZpZXcuY2VsbFNpbmdsZUNvbG9yKTtcbiAgICAgIHJldHVybiB7IGNvbG9yOiBbciAvIDI1NSwgZyAvIDI1NSwgYiAvIDI1NSwgMV0gfTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250aW51b3VzID0gYXN5bmMgKHJhdzogRmxvYXQzMkFycmF5LCBsb2c6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkob3duZXJzLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG93bmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB2ID0gcmF3W293bmVyc1tpXV0gPz8gTmFOO1xuICAgICAgICB2YWx1ZXNbaV0gPSBsb2cgPyBNYXRoLmxvZzFwKE1hdGgubWF4KDAsIHYpKSA6IHY7XG4gICAgICB9XG4gICAgICBjb25zdCBbY2xpcExvLCBjbGlwSGldID0gdmlldy5wZXJjZW50aWxlQ2xpcDtcbiAgICAgIC8vIEtleWVkIGJ5IHRoZSBTT1VSQ0UgdmVjdG9yICh0aGUgbG9nIGNvcHkgd291bGQgYmUgbmV3IG9uIGV2ZXJ5IGNhbGwpLCBhcyB0aGUgM0QgY2xvdWQncy5cbiAgICAgIGNvbnN0IFtsbywgaGldID0gdGhpcy5jb250cmFzdFdpbmRvd3MuZ2V0KHJhdywgY2xpcExvLCBjbGlwSGksIGxvZywgKCkgPT5cbiAgICAgICAgY29udHJhc3RXaW5kb3cobG9nID8gcmF3Lm1hcCgodikgPT4gTWF0aC5sb2cxcChNYXRoLm1heCgwLCB2KSkpIDogcmF3LCBjbGlwTG8sIGNsaXBIaSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBjb2xvcm1hcDogY29sb3JtYXBGcm9tTHV0KCdzcGF0aWFsLWNvbnRpbnVvdXMnLCB0aGlzLmhvc3QuY29udGludW91c0x1dCh2aWV3KSksXG4gICAgICAgIGNvbnRyYXN0TGltaXRzOiBbbG8sIGhpXSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgfTtcbiAgICB9O1xuICAgIGlmIChtb2RlID09PSAnZ2VuZScgJiYgdmlldy5jZWxsQ29sb3JHZW5lKSB7XG4gICAgICByZXR1cm4gY29udGludW91cyhhd2FpdCB0aGlzLnBvcnQuZ2V0RmVhdHVyZVZlY3Rvcih2aWV3LmNlbGxDb2xvckdlbmUpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKG1vZGUgPT09ICd0cmFuc2NyaXB0RGVuc2l0eScgJiYgZGF0YXNldC5jb2x1bW5zLnNvbWUoKGMpID0+IGMubmFtZSA9PT0gJ3RyYW5zY3JpcHRfZGVuc2l0eScpKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBhd2FpdCB0aGlzLnBvcnQuZ2V0Q29sdW1uKCd0cmFuc2NyaXB0X2RlbnNpdHknKTtcbiAgICAgIGlmICghaXNDYXRlZ29yaWNhbENvbHVtbihjb2x1bW4pKSByZXR1cm4gY29udGludW91cyhjb2x1bW4udmFsdWVzLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9XG4gICAgICBtb2RlID09PSAnc2VnbWVudGF0aW9uJyAmJiBkYXRhc2V0LmNvbHVtbnMuc29tZSgoYykgPT4gYy5uYW1lID09PSAnc2VnbWVudGF0aW9uX21ldGhvZCcpXG4gICAgICAgID8gJ3NlZ21lbnRhdGlvbl9tZXRob2QnXG4gICAgICAgIDogY2VsbFR5cGVDb2x1bW5Gb3IoZGF0YXNldCwgdmlldyk7XG4gICAgY29uc3QgY29kZXMgPSBuYW1lID8gYXdhaXQgdGhpcy5sb29rdXAuY29kZXMobmFtZSkgOiBudWxsO1xuICAgIGNvbnN0IHBhbGV0dGUgPSBjYXRlZ29yeVJnYmEoY29kZXM/Lm1ldGEgPz8gbnVsbCk7XG4gICAgY29uc3QgbWlzc2luZyA9IHJnYmEwMShNSVNTSU5HX0NPTE9SKTtcbiAgICAvLyBPbmUgUkdCQSBwZXIgc2hhcGUgKG5hcGFyaSBTaGFwZXMnIGBmYWNlX2NvbG9yYCk6IGFueSBudW1iZXIgb2YgY2F0ZWdvcmllcyBrZWVwcyBpdHMgb3duXG4gICAgLy8gY29sb3VyLCB3aGVyZSBhIGNvbG9ybWFwIGJhbmQgcGVyIGNhdGVnb3J5IHJhbiBvdXQgb2YgTFVUIGVudHJpZXMgcGFzdCB+MTI3LlxuICAgIGNvbnN0IGZhY2VDb2xvciA9IG5ldyBGbG9hdDMyQXJyYXkob3duZXJzLmxlbmd0aCAqIDQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3duZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBvID0gb3duZXJzW2ldO1xuICAgICAgY29uc3QgY29kZSA9ICFjb2RlcyB8fCAobXV0ZWQgJiYgIW11dGVkW29dKSA/IE5PX0NBVEVHT1JZIDogY29kZXMuY29kZXNbb107XG4gICAgICBmYWNlQ29sb3Iuc2V0KHBhbGV0dGVbY29kZV0gPz8gbWlzc2luZywgaSAqIDQpO1xuICAgIH1cbiAgICByZXR1cm4geyBmYWNlQ29sb3IgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY2VsbCByaW5ncyAoYW5kLCBmb3IgXCJib3RoXCIsIHRoZSBudWNsZXVzIHJpbmdzKSBjb3ZlcmluZyBgcmVjdGAgYXQgYGxldmVsYCwgbWludXNcbiAgICogdGhlIGhpZGRlbiBncm91cHMg4oCUIHJldXNlZCB3aGVuIG5vdGhpbmcgdGhhdCBkZWNpZGVzIHRoZW0gY2hhbmdlZC4gTnVsbCB3aGVuIHRoZVxuICAgKiB2aWV3IHdlbnQgc3RhbGUgb3IgdGhlIGRhdGFzZXQgaGFzIG5vIHNldCB0byBkcmF3LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjZWxsR2VvbWV0cnkoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICByZWN0OiBEYXRhUmVjdCxcbiAgICBsZXZlbDogbnVtYmVyLFxuICAgIGhpZGRlbjogSGlkZGVuQ29kZXMgfCBudWxsLFxuICAgIGN0eDogUGxhbkNvbnRleHQsXG4gICk6IFByb21pc2U8eyByaW5nczogU3BhdGlhbFBvbHlnb25UaWxlOyBudWNsZWk6IFNwYXRpYWxQb2x5Z29uVGlsZSB8IG51bGw7IGdlb21ldHJ5S2V5OiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgICBjb25zdCB0aWxlZCA9IGRhdGFzZXQucG9seWdvblRpbGVzO1xuICAgIGNvbnN0IGhpZGRlbktleSA9IGAke3ZpZXcuaGlkZGVuR3JvdXBzLmpvaW4oJ1xcdTAwMDEnKX18JHtnZW5lRmlsdGVyS2V5KHZpZXcpfWA7XG4gICAgbGV0IHJpbmdzOiBTcGF0aWFsUG9seWdvblRpbGU7XG4gICAgbGV0IG51Y2xlaTogU3BhdGlhbFBvbHlnb25UaWxlIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGdlb21ldHJ5S2V5OiBzdHJpbmc7XG4gICAgaWYgKHRpbGVkKSB7XG4gICAgICBjb25zdCBib3RoID0gdmlldy5jZWxsU2V0ID09PSAnYm90aCc7XG4gICAgICBjb25zdCBzZXQgPVxuICAgICAgICAhYm90aCAmJiB2aWV3LmNlbGxTZXQgJiYgdGlsZWQuc2V0cy5zb21lKChzKSA9PiBzLm5hbWUgPT09IHZpZXcuY2VsbFNldClcbiAgICAgICAgICA/IHZpZXcuY2VsbFNldFxuICAgICAgICAgIDogKHRpbGVkLmRlZmF1bHRTZXQgPz8gdGlsZWQuc2V0c1swXT8ubmFtZSk7XG4gICAgICBpZiAoIXNldCkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBudWNsZXVzU2V0ID0gYm90aCA/IHRpbGVkLnNldHMuZmluZCgocykgPT4gcy5uYW1lICE9PSBzZXQpPy5uYW1lIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qga2V5cyA9IHRpbGVzSW5SZWN0KHJlY3QsIGxldmVsLCB0aWxlZC5sZXZlbHMsIHRpbGVkLmJvdW5kcywgTUFYX0NFTExfVElMRVMpO1xuICAgICAgZ2VvbWV0cnlLZXkgPSBgJHtkYXRhc2V0LmlkfXwke3NldH18JHtudWNsZXVzU2V0ID8/ICcnfXwke2hpZGRlbktleX18JHtrZXlzLm1hcCh0aWxlSWQpLmpvaW4oJywnKX1gO1xuICAgICAgaWYgKGdlb21ldHJ5S2V5ID09PSB0aGlzLmNlbGxHZW9tZXRyeUtleSAmJiB0aGlzLmN1cnJlbnRSaW5ncykge1xuICAgICAgICByaW5ncyA9IHRoaXMuY3VycmVudFJpbmdzO1xuICAgICAgICBudWNsZWkgPSB0aGlzLmN1cnJlbnROdWNsZWk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbdGlsZXMsIG51Y2xldXNUaWxlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgY3R4LmZldGNoQWxsKGtleXMsIChrKSA9PiB0aGlzLnBvcnQuZ2V0UG9seWdvblRpbGUhKHNldCwgay5sZXZlbCwgay5neCwgay5neSkpLFxuICAgICAgICAgIG51Y2xldXNTZXRcbiAgICAgICAgICAgID8gY3R4LmZldGNoQWxsKGtleXMsIChrKSA9PiB0aGlzLnBvcnQuZ2V0UG9seWdvblRpbGUhKG51Y2xldXNTZXQsIGsubGV2ZWwsIGsuZ3gsIGsuZ3kpKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUobnVsbCksXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybiBudWxsO1xuICAgICAgICByaW5ncyA9IGZpbHRlclJpbmdzKG1lcmdlUG9seWdvblRpbGVzKHRpbGVzKSwgaGlkZGVuKTtcbiAgICAgICAgbnVjbGVpID0gbnVjbGV1c1RpbGVzID8gZmlsdGVyUmluZ3MobWVyZ2VQb2x5Z29uVGlsZXMobnVjbGV1c1RpbGVzKSwgaGlkZGVuKSA6IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlb21ldHJ5S2V5ID0gYCR7ZGF0YXNldC5pZH18d2hvbGV8JHtoaWRkZW5LZXl9YDtcbiAgICAgIGlmIChnZW9tZXRyeUtleSA9PT0gdGhpcy5jZWxsR2VvbWV0cnlLZXkgJiYgdGhpcy5jdXJyZW50UmluZ3MpIHtcbiAgICAgICAgcmluZ3MgPSB0aGlzLmN1cnJlbnRSaW5ncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBvbHlzOiBTcGF0aWFsUG9seWdvbnMgPSBhd2FpdCB0aGlzLnBvcnQuZ2V0UG9seWdvbnMhKCk7XG4gICAgICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIFdob2xlLWRhdGFzZXQgcmluZ3MgYXJlIGluZGV4LWFsaWduZWQgd2l0aCB0aGUgb2JzZXJ2YXRpb25zLlxuICAgICAgICByaW5ncyA9IGZpbHRlclJpbmdzKFxuICAgICAgICAgIHsgLi4ucG9seXMsIG9ic2VydmF0aW9uOiBVaW50MzJBcnJheS5mcm9tKHsgbGVuZ3RoOiBwb2x5cy5jb3VudCB9LCAoX3YsIGkpID0+IGkpIH0sXG4gICAgICAgICAgaGlkZGVuLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyByaW5ncywgbnVjbGVpLCBnZW9tZXRyeUtleSB9O1xuICB9XG5cbiAgLyoqIFJlbW92ZSB0aGUgY2VsbCBsYXllcnMgYW5kIGZvcmdldCB3aGF0IHRoZXkgc2hvd2VkLiAqL1xuICBkcm9wKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ2NlbGxGaWxsJyk7XG4gICAgdGhpcy5ncm91cHMuZHJvcCgnY2VsbE91dGxpbmUnKTtcbiAgICB0aGlzLmdyb3Vwcy5kcm9wKCdudWNsZXVzT3V0bGluZScpO1xuICAgIHRoaXMuY3VycmVudE51Y2xlaSA9IG51bGw7XG4gICAgdGhpcy5jZWxsR2VvbWV0cnlLZXkgPSBudWxsO1xuICAgIHRoaXMuY2VsbFN0eWxlS2V5ID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRSaW5ncyA9IG51bGw7XG4gICAgdGhpcy5zZXRQb2x5Z29uc1Nob3duKGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9seWdvbnNTaG93bihzaG93bjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChzaG93biA9PT0gdGhpcy5wb2x5Z29uc1Nob3duKSByZXR1cm47XG4gICAgdGhpcy5wb2x5Z29uc1Nob3duID0gc2hvd247XG4gICAgdGhpcy5ob3N0LnBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duKTtcbiAgfVxufVxuXG4vKiogQW4gOC1iaXQgUkdCIGFzIGFuIG9wYXF1ZSAwLi4xIFJHQkEuICovXG5mdW5jdGlvbiByZ2JhMDEoW3IsIGcsIGJdOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiBSR0JBIHtcbiAgcmV0dXJuIFtyIC8gMjU1LCBnIC8gMjU1LCBiIC8gMjU1LCAxXTtcbn1cblxuLyoqIEEgZ3JvdXBpbmcncyBjYXRlZ29yeSBjb2xvdXJzLCBhcyAwLi4xIFJHQkEgYnkgY2F0ZWdvcnkgY29kZSAob25lIGRlZmF1bHQgd2l0aG91dCBhIGdyb3VwaW5nKS4gKi9cbmZ1bmN0aW9uIGNhdGVnb3J5UmdiYShtZXRhOiBTcGF0aWFsQ29sdW1uWydtZXRhJ10gfCBudWxsKTogUkdCQVtdIHtcbiAgY29uc3QgaGV4ID0gbWV0YSAmJiBtZXRhLmtpbmQgPT09ICdjYXRlZ29yaWNhbCcgPyByZXNvbHZlQ2F0ZWdvcnlDb2xvcnMobWV0YSkgOiBbREVGQVVMVF9DQVRFR09SSUNBTF9QQUxFVFRFWzBdXTtcbiAgcmV0dXJuIGhleC5tYXAoKGgpID0+IHJnYmEwMShwYXJzZUhleChoKSkpO1xufVxuIl19
|
|
@@ -4,6 +4,8 @@ import { ALL_GENES } from '../../../contracts/ports/spatial-data.port';
|
|
|
4
4
|
import { lutFor } from '../../../spatial/spatial-encoding';
|
|
5
5
|
import { visibleArea, visibleDataRect } from '../../../spatial/lod';
|
|
6
6
|
import { densityAutoRange } from '../../../spatial/density-raster';
|
|
7
|
+
import { allGenesHidden } from '../../../spatial/spatial-tile-merge';
|
|
8
|
+
import { hasGeneFilter } from '../../../spatial/spatial-gene-filter';
|
|
7
9
|
/**
|
|
8
10
|
* The transcript density image of the 2D spatial view: the visible genes' summed density
|
|
9
11
|
* raster, one scalar layer in the `density` group, windowed and coloured on the GPU.
|
|
@@ -27,8 +29,20 @@ export class DensityLayer {
|
|
|
27
29
|
/** Draw the view's density, or drop it; an unchanged (genes, bin, window, colormap) is a no-op. */
|
|
28
30
|
async plan(dataset, view, ctx) {
|
|
29
31
|
const hiddenGenes = new Set(view.transcriptHiddenGenes);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
// Every gene's density is one raster: hiding a gene of it hides nothing, hiding all hides it.
|
|
33
|
+
const genes = view.transcriptAllGenes
|
|
34
|
+
? allGenesHidden(view)
|
|
35
|
+
? []
|
|
36
|
+
: [ALL_GENES]
|
|
37
|
+
: view.transcriptGenes.filter((g) => !hiddenGenes.has(g));
|
|
38
|
+
// The raster sums every cell's transcripts and carries no cells, so it cannot follow the
|
|
39
|
+
// observation gene filter: drawn, it would show the transcripts of the cells it hides. Not
|
|
40
|
+
// drawn while it is on (the Transcripts panel says so).
|
|
41
|
+
if (!dataset.density ||
|
|
42
|
+
!this.port.getDensity ||
|
|
43
|
+
view.transcriptMode !== 'density' ||
|
|
44
|
+
!genes.length ||
|
|
45
|
+
hasGeneFilter(view)) {
|
|
32
46
|
this.groups.drop('density');
|
|
33
47
|
this.stats = null;
|
|
34
48
|
this.raster = null;
|
|
@@ -136,9 +150,11 @@ export class TranscriptEstimator {
|
|
|
136
150
|
const b = counts.bounds;
|
|
137
151
|
const share = Math.min(1, visibleArea(inView, b) / Math.max(1, (b[2] - b[0]) * (b[3] - b[1])));
|
|
138
152
|
const selected = view.transcriptAllGenes
|
|
139
|
-
?
|
|
153
|
+
? allGenesHidden(view)
|
|
154
|
+
? 0
|
|
155
|
+
: counts.total
|
|
140
156
|
: genes.reduce((sum, g) => sum + (counts.counts[g] ?? 0), 0);
|
|
141
157
|
this.changed({ points: Math.round(selected * share), max: view.transcriptBudget });
|
|
142
158
|
}
|
|
143
159
|
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVuc2l0eS1sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9zcGF0aWFsLXRpbGVzL2RlbnNpdHktbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBd0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUc3RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQW1CbkU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBUXZCLFlBQ21CLElBQXFCLEVBQ3JCLE1BQXFDLEVBQ3JDLE9BQXNDO1FBRnRDLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQStCO1FBQ3JDLFlBQU8sR0FBUCxPQUFPLENBQStCO1FBVnpELHdGQUF3RjtRQUN4RixVQUFLLEdBQXdCLElBQUksQ0FBQztRQUNsQywwRkFBMEY7UUFDbEYsV0FBTSxHQUEwRSxJQUFJLENBQUM7UUFDN0Ysc0ZBQXNGO1FBQzlFLGdCQUFXLEdBQWtCLElBQUksQ0FBQztJQU12QyxDQUFDO0lBRUosbUdBQW1HO0lBQ25HLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBdUIsRUFBRSxJQUFzQixFQUFFLEdBQWdCO1FBQzFFLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFB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RUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2xvcm1hcEZyb21MdXQgfSBmcm9tICduYXBhcmktanMnO1xuaW1wb3J0IHR5cGUgeyBJbWFnZUxheWVyLCBWaWV3ZXIgfSBmcm9tICduYXBhcmktanMnO1xuaW1wb3J0IHsgSU5GRVJOT19MVVQgfSBmcm9tICduYXBhcmktanMvY29sb3JtYXBzJztcblxuaW1wb3J0IHsgQUxMX0dFTkVTLCB0eXBlIFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxWaWV3U3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxEYXRhc2V0LCBTcGF0aWFsVHJhbnNjcmlwdENvdW50cyB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHsgbHV0Rm9yIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWVuY29kaW5nJztcbmltcG9ydCB7IHZpc2libGVBcmVhLCB2aXNpYmxlRGF0YVJlY3QgfSBmcm9tICcuLi8uLi8uLi9zcGF0aWFsL2xvZCc7XG5pbXBvcnQgeyBkZW5zaXR5QXV0b1JhbmdlIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9kZW5zaXR5LXJhc3Rlcic7XG5pbXBvcnQgdHlwZSB7IE9yZGVyZWRMYXllckdyb3VwcywgVGlsZUdyb3VwIH0gZnJvbSAnLi9sYXllci1ncm91cHMnO1xuaW1wb3J0IHR5cGUgeyBQbGFuQ29udGV4dCB9IGZyb20gJy4vcGxhbi1jb250ZXh0JztcblxuLyoqIFRoZSBkZW5zaXR5IHdpbmRvdyBpbiB1c2UgYW5kIHRoZSBkZW5zZXN0IGJpbiAodHJhbnNjcmlwdHMgcGVyIHVuaXQgYXJlYSkuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbnNpdHlTdGF0cyB7XG4gIGxvOiBudW1iZXI7XG4gIGhpOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xufVxuXG4vKiogWGVuaXVtIEV4cGxvcmVyJ3MgXCJFc3RpbWF0ZWQgVHJhbnNjcmlwdCBQb2ludHNcIi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdEVzdGltYXRlIHtcbiAgLyoqIFRyYW5zY3JpcHRzIG9mIHRoZSB2aXNpYmxlIGdlbmVzIGVzdGltYXRlZCB0byBiZSBpbiB2aWV3LiAqL1xuICBwb2ludHM6IG51bWJlcjtcbiAgLyoqIFRoZSBtYXJrZXIgYnVkZ2V0LiAqL1xuICBtYXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNjcmlwdCBkZW5zaXR5IGltYWdlIG9mIHRoZSAyRCBzcGF0aWFsIHZpZXc6IHRoZSB2aXNpYmxlIGdlbmVzJyBzdW1tZWQgZGVuc2l0eVxuICogcmFzdGVyLCBvbmUgc2NhbGFyIGxheWVyIGluIHRoZSBgZGVuc2l0eWAgZ3JvdXAsIHdpbmRvd2VkIGFuZCBjb2xvdXJlZCBvbiB0aGUgR1BVLlxuICpcbiAqIEJpbnMgYXQgb3IgYmVsb3cgdGhlIHdpbmRvdydzIGxvdyBlbmQgYXJlIHRyYW5zcGFyZW50IChgdHJhbnNwYXJlbnRCZWxvd2ApLCBzbyBhIHdpbmRvdyxcbiAqIGNvbG9ybWFwIG9yIG9wYWNpdHkgY2hhbmdlIGlzIGEgdW5pZm9ybSBvciBMVVQgdXBkYXRlIG9mIHRoZSBzYW1lIGxheWVyOiBvbmx5IG5ldyBnZW5lcyBvciBhXG4gKiBuZXcgYmluIHNpemUgZmV0Y2ggYW5kIHVwbG9hZCBhIHJhc3Rlci5cbiAqL1xuZXhwb3J0IGNsYXNzIERlbnNpdHlMYXllciB7XG4gIC8qKiBUaGUgZGVuc2l0eSB3aW5kb3cgaW4gdXNlIGFuZCB0aGUgZGVuc2VzdCBiaW4sIGZvciB0aGUgcGFuZWwncyB0aHJlc2hvbGQgY29udHJvbC4gKi9cbiAgc3RhdHM6IERlbnNpdHlTdGF0cyB8IG51bGwgPSBudWxsO1xuICAvKiogVGhlIGRyYXduIHJhc3RlciBpbiB0cmFuc2NyaXB0cyBwZXIgdW5pdCBhcmVhLCBpdHMgZGVuc2VzdCBiaW4gYW5kIGl0cyBhdXRvIHdpbmRvdy4gKi9cbiAgcHJpdmF0ZSByYXN0ZXI6IHsgcGVyQXJlYTogRmxvYXQzMkFycmF5OyBtYXg6IG51bWJlcjsgYXV0bzogW251bWJlciwgbnVtYmVyXSB9IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBUaGUgY29sb3JtYXAgdGhlIGxheWVyIHdhcyBnaXZlbiwgc28gYW4gdW5jaGFuZ2VkIG9uZSBkb2VzIG5vdCByZWJ1aWxkIGl0cyBMVVQuICovXG4gIHByaXZhdGUgY29sb3JtYXBLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9ydDogU3BhdGlhbERhdGFQb3J0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBzOiBPcmRlcmVkTGF5ZXJHcm91cHM8VGlsZUdyb3VwPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZWQ6IChzdGF0czogRGVuc2l0eVN0YXRzKSA9PiB2b2lkLFxuICApIHt9XG5cbiAgLyoqIERyYXcgdGhlIHZpZXcncyBkZW5zaXR5LCBvciBkcm9wIGl0OyBhbiB1bmNoYW5nZWQgKGdlbmVzLCBiaW4sIHdpbmRvdywgY29sb3JtYXApIGlzIGEgbm8tb3AuICovXG4gIGFzeW5jIHBsYW4oZGF0YXNldDogU3BhdGlhbERhdGFzZXQsIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsIGN0eDogUGxhbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoaWRkZW5HZW5lcyA9IG5ldyBTZXQodmlldy50cmFuc2NyaXB0SGlkZGVuR2VuZXMpO1xuICAgIGNvbnN0IGdlbmVzID0gdmlldy50cmFuc2NyaXB0QWxsR2VuZXMgPyBbQUxMX0dFTkVTXSA6IHZpZXcudHJhbnNjcmlwdEdlbmVzLmZpbHRlcigoZykgPT4gIWhpZGRlbkdlbmVzLmhhcyhnKSk7XG4gICAgaWYgKCFkYXRhc2V0LmRlbnNpdHkgfHwgIXRoaXMucG9ydC5nZXREZW5zaXR5IHx8IHZpZXcudHJhbnNjcmlwdE1vZGUgIT09ICdkZW5zaXR5JyB8fCAhZ2VuZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmdyb3Vwcy5kcm9wKCdkZW5zaXR5Jyk7XG4gICAgICB0aGlzLnN0YXRzID0gbnVsbDtcbiAgICAgIHRoaXMucmFzdGVyID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVGhlIHJhc3RlcidzIGtleTogd2hhdCBpdCBpcyBhIHJhc3RlciBPRi4gV2luZG93LCBjb2xvcm1hcCBhbmQgb3BhY2l0eSBhcmUgdGhlIGxheWVyJ3Mgc3R5bGUuXG4gICAgY29uc3Qga2V5ID0gW2RhdGFzZXQuaWQsIGdlbmVzLmpvaW4oJywnKSwgdmlldy5kZW5zaXR5QmluXS5qb2luKCd8Jyk7XG4gICAgLy8gYHNob3duYCwgbm90IGBoYXNgOiBhIHN0aXRjaGVkIHNsaWNlIHJlLXJlbmRlciBjbGVhcnMgdGhlIGxheWVyIGxpc3QsIGFuZCB0aGUga2V5IGFsb25lXG4gICAgLy8gd291bGQgY2FsbCB0aGUgY2xlYXJlZCBsYXllciBkcmF3bi5cbiAgICBpZiAoa2V5ICE9PSB0aGlzLmdyb3Vwcy5rZXkoJ2RlbnNpdHknKSB8fCAhdGhpcy5ncm91cHMuc2hvd24oJ2RlbnNpdHknKSB8fCAhdGhpcy5yYXN0ZXIpIHtcbiAgICAgIGNvbnN0IHJhc3RlciA9IGF3YWl0IGN0eC50cmFjaygnVHJhbnNjcmlwdCBkZW5zaXR5JywgdGhpcy5wb3J0LmdldERlbnNpdHkoZ2VuZXMsIHZpZXcuZGVuc2l0eUJpbikpO1xuICAgICAgaWYgKGN0eC5zdGFsZSgpKSByZXR1cm47XG5cbiAgICAgIC8vIEJpbnMgZHJhd24gYXMgc3F1YXJlcywgYXMgWGVuaXVtIEV4cGxvcmVyIGRvZXM7IHRoZSB3aW5kb3cgaXMgaW4gdHJhbnNjcmlwdHMvwrVtwrIuXG4gICAgICBjb25zdCBtZXRhID0gcmFzdGVyLm1ldGE7XG4gICAgICBjb25zdCBhcmVhID0gbWV0YS5ncmlkU2l6ZVswXSAqIG1ldGEuZ3JpZFNpemVbMV07XG4gICAgICBjb25zdCBwZXJBcmVhID0gcmFzdGVyLnZhbHVlcy5tYXAoKHYpID0+IHYgLyBhcmVhKTtcbiAgICAgIHRoaXMucmFzdGVyID0ge1xuICAgICAgICBwZXJBcmVhLFxuICAgICAgICBtYXg6IHBlckFyZWEucmVkdWNlKChtLCB2KSA9PiAodiA+IG0gPyB2IDogbSksIDApLFxuICAgICAgICBhdXRvOiBkZW5zaXR5QXV0b1JhbmdlKHBlckFyZWEpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlZiA9IGRhdGFzZXQuaW1hZ2VSZWY7XG4gICAgICBjb25zdCBzeCA9IHJlZj8uc2NhbGU/LlswXSA/PyAxO1xuICAgICAgY29uc3Qgc3kgPSByZWY/LnNjYWxlPy5bMV0gPz8gMTtcbiAgICAgIGNvbnN0IGxheWVyOiBJbWFnZUxheWVyID0gdGhpcy5ncm91cHMudmlld2VyIS5hZGRJbWFnZShcbiAgICAgICAgeyBraW5kOiAndHlwZWQnLCB3aWR0aDogbWV0YS5jb2xzLCBoZWlnaHQ6IG1ldGEucm93cywgY2hhbm5lbHM6IDEsIGR0eXBlOiAnZmxvYXQzMicsIGRhdGE6IHBlckFyZWEgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGBkZW5zaXR5IMK3ICR7dmlldy50cmFuc2NyaXB0QWxsR2VuZXMgPyAnYWxsIGdlbmVzJyA6IGdlbmVzLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICBzY2FsZTogW21ldGEuZ3JpZFNpemVbMF0gKiBzeCwgbWV0YS5ncmlkU2l6ZVsxXSAqIHN5XSxcbiAgICAgICAgICB0cmFuc2xhdGU6IFtcbiAgICAgICAgICAgIG1ldGEub3JpZ2luWzBdICogc3ggKyAocmVmPy50cmFuc2xhdGU/LlswXSA/PyAwKSxcbiAgICAgICAgICAgIG1ldGEub3JpZ2luWzFdICogc3kgKyAocmVmPy50cmFuc2xhdGU/LlsxXSA/PyAwKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIC8vIFhlbml1bSBFeHBsb3JlcidzIFwic2NhbGUgdGhyZXNob2xkXCI6IGVtcHR5IHRpc3N1ZSBzaG93cyB0aGUgaW1hZ2UgdW5kZXIgaXQuXG4gICAgICAgICAgdHJhbnNwYXJlbnRCZWxvdzogdHJ1ZSxcbiAgICAgICAgICBibGVuZGluZzogJ3RyYW5zbHVjZW50JyxcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uOiAnbmVhcmVzdCcsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5jb2xvcm1hcEtleSA9IG51bGw7XG4gICAgICB0aGlzLmdyb3Vwcy5zZXRLZXkoJ2RlbnNpdHknLCBrZXkpO1xuICAgICAgdGhpcy5ncm91cHMucmVwbGFjZSgnZGVuc2l0eScsIGxheWVyKTtcbiAgICB9XG4gICAgdGhpcy5yZXN0eWxlKHRoaXMuZ3JvdXBzLmxheWVyKCdkZW5zaXR5JykgYXMgSW1hZ2VMYXllciwgdmlldyk7XG4gIH1cblxuICAvKiogV2luZG93LCBjb2xvdXIgYW5kIG9wYWNpdHkgb250byB0aGUgZHJhd24gbGF5ZXI6IHVuaWZvcm1zIGFuZCBhIExVVCwgbm8gcmUtdXBsb2FkLiAqL1xuICBwcml2YXRlIHJlc3R5bGUobGF5ZXI6IEltYWdlTGF5ZXIsIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCByYXN0ZXIgPSB0aGlzLnJhc3RlciE7XG4gICAgY29uc3QgW2xvLCBoaV0gPSB2aWV3LmRlbnNpdHlSYW5nZSA/PyByYXN0ZXIuYXV0bztcbiAgICBsYXllci5jb250cmFzdExpbWl0cyA9IFtsbywgaGldO1xuICAgIGxheWVyLm9wYWNpdHkgPSB2aWV3LmRlbnNpdHlPcGFjaXR5O1xuICAgIGNvbnN0IGNvbG9ybWFwS2V5ID0gSlNPTi5zdHJpbmdpZnkodmlldy5kZW5zaXR5Q29sb3JtYXAgPz8gbnVsbCk7XG4gICAgaWYgKGNvbG9ybWFwS2V5ICE9PSB0aGlzLmNvbG9ybWFwS2V5KSB7XG4gICAgICB0aGlzLmNvbG9ybWFwS2V5ID0gY29sb3JtYXBLZXk7XG4gICAgICBsYXllci5jb2xvcm1hcCA9IGNvbG9ybWFwRnJvbUx1dCgndHJhbnNjcmlwdC1kZW5zaXR5JywgbHV0Rm9yKHZpZXcuZGVuc2l0eUNvbG9ybWFwID8/IElORkVSTk9fTFVUKSk7XG4gICAgfVxuICAgIHRoaXMuZ3JvdXBzLnZpZXdlciEucmVxdWVzdFJlbmRlcigpO1xuICAgIGNvbnN0IHN0YXRzID0geyBsbywgaGksIG1heDogcmFzdGVyLm1heCB9O1xuICAgIGlmICh0aGlzLnN0YXRzPy5sbyA9PT0gbG8gJiYgdGhpcy5zdGF0cy5oaSA9PT0gaGkgJiYgdGhpcy5zdGF0cy5tYXggPT09IHJhc3Rlci5tYXgpIHJldHVybjtcbiAgICB0aGlzLnN0YXRzID0gc3RhdHM7XG4gICAgdGhpcy5jaGFuZ2VkKHN0YXRzKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zY3JpcHRzIGluIHZpZXcgZm9yIHRoZSB2aXNpYmxlIGdlbmVzLCBhZ2FpbnN0IHRoZSBtYXJrZXIgYnVkZ2V0IOKAlCBpdCB0ZWxscyB0aGUgdXNlclxuICogd2hldGhlciB0aGUgYnVkZ2V0IHdpbGwgZm9yY2UgZ3JvdXBpbmcuIENhY2hlcyB0aGUgcGVyLWdlbmUgZGF0YXNldCB0b3RhbHMgZm9yIHRoZSBsYXRlc3RcbiAqIGdlbmUgc2V0LlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNjcmlwdEVzdGltYXRvciB7XG4gIC8qKiBQZXItZ2VuZSBkYXRhc2V0IHRvdGFscyBmb3IgdGhlIGluLXZpZXcgZXN0aW1hdGUsIGZvciB0aGUgbGF0ZXN0IGdlbmUgc2V0LiAqL1xuICBwcml2YXRlIGNvdW50c0NhY2hlOiB7IGtleTogc3RyaW5nOyBjb3VudHM6IFByb21pc2U8U3BhdGlhbFRyYW5zY3JpcHRDb3VudHM+IH0gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZWQ6IChlc3RpbWF0ZTogVHJhbnNjcmlwdEVzdGltYXRlIHwgbnVsbCkgPT4gdm9pZCxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBUcmFuc2NyaXB0cyBpbiB2aWV3IGZvciB0aGUgdmlzaWJsZSBnZW5lczogZWFjaCBnZW5lJ3MgZGF0YXNldCB0b3RhbCB0aW1lcyB0aGUgc2hhcmVcbiAgICogb2YgdGhlIHRpc3N1ZSBvbiBzY3JlZW4uIEFuIGVzdGltYXRlIOKAlCBleHByZXNzaW9uIGlzIG5vdCB1bmlmb3JtIOKAlCB3aGljaCBpcyBhbHNvIHdoYXRcbiAgICogWGVuaXVtIEV4cGxvcmVyIHNob3dzOyBpdCB0ZWxscyB0aGUgdXNlciB3aGV0aGVyIHRoZSBidWRnZXQgd2lsbCBmb3JjZSBncm91cGluZy5cbiAgICovXG4gIGFzeW5jIHBsYW4oXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICB2aWV3ZXI6IFZpZXdlcixcbiAgICB3OiBudW1iZXIsXG4gICAgaDogbnVtYmVyLFxuICAgIGN0eDogUGxhbkNvbnRleHQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbGVzID0gZGF0YXNldC50cmFuc2NyaXB0VGlsZXM7XG4gICAgaWYgKCF0aWxlcyB8fCAhdGhpcy5wb3J0LmdldFRyYW5zY3JpcHRDb3VudHMgfHwgdmlldy50cmFuc2NyaXB0TW9kZSA9PT0gJ29mZicpIHtcbiAgICAgIHRoaXMuY2hhbmdlZChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZGVuR2VuZXMgPSBuZXcgU2V0KHZpZXcudHJhbnNjcmlwdEhpZGRlbkdlbmVzKTtcbiAgICBjb25zdCBnZW5lcyA9IHZpZXcudHJhbnNjcmlwdEFsbEdlbmVzID8gW10gOiB2aWV3LnRyYW5zY3JpcHRHZW5lcy5maWx0ZXIoKGcpID0+ICFoaWRkZW5HZW5lcy5oYXMoZykpO1xuICAgIGNvbnN0IGtleSA9IGAke2RhdGFzZXQuaWR9fCR7Z2VuZXMuam9pbignLCcpfWA7XG4gICAgaWYgKHRoaXMuY291bnRzQ2FjaGU/LmtleSAhPT0ga2V5KSB7XG4gICAgICB0aGlzLmNvdW50c0NhY2hlID0geyBrZXksIGNvdW50czogdGhpcy5wb3J0LmdldFRyYW5zY3JpcHRDb3VudHMoZ2VuZXMpIH07XG4gICAgfVxuICAgIGxldCBjb3VudHM6IFNwYXRpYWxUcmFuc2NyaXB0Q291bnRzO1xuICAgIHRyeSB7XG4gICAgICBjb3VudHMgPSBhd2FpdCB0aGlzLmNvdW50c0NhY2hlLmNvdW50cztcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuY291bnRzQ2FjaGUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcbiAgICBjb25zdCBpblZpZXcgPSB2aXNpYmxlRGF0YVJlY3Qodmlld2VyLmNhbWVyYS5jZW50ZXIsIHZpZXdlci5jYW1lcmEuem9vbSwgdywgaCwgZGF0YXNldC5pbWFnZVJlZiwgMCk7XG4gICAgaWYgKCFpblZpZXcpIHJldHVybjtcbiAgICBjb25zdCBiID0gY291bnRzLmJvdW5kcztcbiAgICBjb25zdCBzaGFyZSA9IE1hdGgubWluKDEsIHZpc2libGVBcmVhKGluVmlldywgYikgLyBNYXRoLm1heCgxLCAoYlsyXSAtIGJbMF0pICogKGJbM10gLSBiWzFdKSkpO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdmlldy50cmFuc2NyaXB0QWxsR2VuZXNcbiAgICAgID8gY291bnRzLnRvdGFsXG4gICAgICA6IGdlbmVzLnJlZHVjZSgoc3VtLCBnKSA9PiBzdW0gKyAoY291bnRzLmNvdW50c1tnXSA/PyAwKSwgMCk7XG4gICAgdGhpcy5jaGFuZ2VkKHsgcG9pbnRzOiBNYXRoLnJvdW5kKHNlbGVjdGVkICogc2hhcmUpLCBtYXg6IHZpZXcudHJhbnNjcmlwdEJ1ZGdldCB9KTtcbiAgfVxufVxuIl19
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVuc2l0eS1sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9zcGF0aWFsLXRpbGVzL2RlbnNpdHktbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBd0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUc3RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBaUJyRTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFRdkIsWUFDbUIsSUFBcUIsRUFDckIsTUFBcUMsRUFDckMsT0FBc0M7UUFGdEMsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBK0I7UUFDckMsWUFBTyxHQUFQLE9BQU8sQ0FBK0I7UUFWekQsd0ZBQXdGO1FBQ3hGLFVBQUssR0FBd0IsSUFBSSxDQUFDO1FBQ2xDLDBGQUEwRjtRQUNsRixXQUFNLEdBQTBFLElBQUksQ0FBQztRQUM3RixzRkFBc0Y7UUFDOUUsZ0JBQVcsR0FBa0IsSUFBSSxDQUFDO0lBTXZDLENBQUM7SUFFSixtR0FBbUc7SUFDbkcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUF1QixFQUFFLElBQXNCLEVBQUUsR0FBZ0I7UUFDMUUsTUFBTSxX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LGtCQUFrQjtZQUN0QyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ2hCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbG9ybWFwRnJvbUx1dCB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgdHlwZSB7IEltYWdlTGF5ZXIsIFZpZXdlciB9IGZyb20gJ25hcGFyaS1qcyc7XG5pbXBvcnQgeyBJTkZFUk5PX0xVVCB9IGZyb20gJ25hcGFyaS1qcy9jb2xvcm1hcHMnO1xuXG5pbXBvcnQgeyBBTExfR0VORVMsIHR5cGUgU3BhdGlhbERhdGFQb3J0IH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB0eXBlIHsgU3BhdGlhbERhdGFzZXQsIFNwYXRpYWxUcmFuc2NyaXB0Q291bnRzIH0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgeyBsdXRGb3IgfSBmcm9tICcuLi8uLi8uLi9zcGF0aWFsL3NwYXRpYWwtZW5jb2RpbmcnO1xuaW1wb3J0IHsgdmlzaWJsZUFyZWEsIHZpc2libGVEYXRhUmVjdCB9IGZyb20gJy4uLy4uLy4uL3NwYXRpYWwvbG9kJztcbmltcG9ydCB7IGRlbnNpdHlBdXRvUmFuZ2UgfSBmcm9tICcuLi8uLi8uLi9zcGF0aWFsL2RlbnNpdHktcmFzdGVyJztcbmltcG9ydCB7IGFsbEdlbmVzSGlkZGVuIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXRpbGUtbWVyZ2UnO1xuaW1wb3J0IHR5cGUgeyBPcmRlcmVkTGF5ZXJHcm91cHMsIFRpbGVHcm91cCB9IGZyb20gJy4vbGF5ZXItZ3JvdXBzJztcbmltcG9ydCB0eXBlIHsgUGxhbkNvbnRleHQgfSBmcm9tICcuL3BsYW4tY29udGV4dCc7XG5pbXBvcnQgeyBoYXNHZW5lRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWdlbmUtZmlsdGVyJztcblxuLyoqIFRoZSBkZW5zaXR5IHdpbmRvdyBpbiB1c2UgYW5kIHRoZSBkZW5zZXN0IGJpbiAodHJhbnNjcmlwdHMgcGVyIHVuaXQgYXJlYSkuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbnNpdHlTdGF0cyB7XG4gIGxvOiBudW1iZXI7XG4gIGhpOiBudW1iZXI7XG4gIG1heDogbnVtYmVyO1xufVxuXG4vKiogWGVuaXVtIEV4cGxvcmVyJ3MgXCJFc3RpbWF0ZWQgVHJhbnNjcmlwdCBQb2ludHNcIi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdEVzdGltYXRlIHtcbiAgLyoqIFRyYW5zY3JpcHRzIG9mIHRoZSB2aXNpYmxlIGdlbmVzIGVzdGltYXRlZCB0byBiZSBpbiB2aWV3LiAqL1xuICBwb2ludHM6IG51bWJlcjtcbiAgLyoqIFRoZSBtYXJrZXIgYnVkZ2V0LiAqL1xuICBtYXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNjcmlwdCBkZW5zaXR5IGltYWdlIG9mIHRoZSAyRCBzcGF0aWFsIHZpZXc6IHRoZSB2aXNpYmxlIGdlbmVzJyBzdW1tZWQgZGVuc2l0eVxuICogcmFzdGVyLCBvbmUgc2NhbGFyIGxheWVyIGluIHRoZSBgZGVuc2l0eWAgZ3JvdXAsIHdpbmRvd2VkIGFuZCBjb2xvdXJlZCBvbiB0aGUgR1BVLlxuICpcbiAqIEJpbnMgYXQgb3IgYmVsb3cgdGhlIHdpbmRvdydzIGxvdyBlbmQgYXJlIHRyYW5zcGFyZW50IChgdHJhbnNwYXJlbnRCZWxvd2ApLCBzbyBhIHdpbmRvdyxcbiAqIGNvbG9ybWFwIG9yIG9wYWNpdHkgY2hhbmdlIGlzIGEgdW5pZm9ybSBvciBMVVQgdXBkYXRlIG9mIHRoZSBzYW1lIGxheWVyOiBvbmx5IG5ldyBnZW5lcyBvciBhXG4gKiBuZXcgYmluIHNpemUgZmV0Y2ggYW5kIHVwbG9hZCBhIHJhc3Rlci5cbiAqL1xuZXhwb3J0IGNsYXNzIERlbnNpdHlMYXllciB7XG4gIC8qKiBUaGUgZGVuc2l0eSB3aW5kb3cgaW4gdXNlIGFuZCB0aGUgZGVuc2VzdCBiaW4sIGZvciB0aGUgcGFuZWwncyB0aHJlc2hvbGQgY29udHJvbC4gKi9cbiAgc3RhdHM6IERlbnNpdHlTdGF0cyB8IG51bGwgPSBudWxsO1xuICAvKiogVGhlIGRyYXduIHJhc3RlciBpbiB0cmFuc2NyaXB0cyBwZXIgdW5pdCBhcmVhLCBpdHMgZGVuc2VzdCBiaW4gYW5kIGl0cyBhdXRvIHdpbmRvdy4gKi9cbiAgcHJpdmF0ZSByYXN0ZXI6IHsgcGVyQXJlYTogRmxvYXQzMkFycmF5OyBtYXg6IG51bWJlcjsgYXV0bzogW251bWJlciwgbnVtYmVyXSB9IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBUaGUgY29sb3JtYXAgdGhlIGxheWVyIHdhcyBnaXZlbiwgc28gYW4gdW5jaGFuZ2VkIG9uZSBkb2VzIG5vdCByZWJ1aWxkIGl0cyBMVVQuICovXG4gIHByaXZhdGUgY29sb3JtYXBLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9ydDogU3BhdGlhbERhdGFQb3J0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBzOiBPcmRlcmVkTGF5ZXJHcm91cHM8VGlsZUdyb3VwPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZWQ6IChzdGF0czogRGVuc2l0eVN0YXRzKSA9PiB2b2lkLFxuICApIHt9XG5cbiAgLyoqIERyYXcgdGhlIHZpZXcncyBkZW5zaXR5LCBvciBkcm9wIGl0OyBhbiB1bmNoYW5nZWQgKGdlbmVzLCBiaW4sIHdpbmRvdywgY29sb3JtYXApIGlzIGEgbm8tb3AuICovXG4gIGFzeW5jIHBsYW4oZGF0YXNldDogU3BhdGlhbERhdGFzZXQsIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsIGN0eDogUGxhbkNvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoaWRkZW5HZW5lcyA9IG5ldyBTZXQodmlldy50cmFuc2NyaXB0SGlkZGVuR2VuZXMpO1xuICAgIC8vIEV2ZXJ5IGdlbmUncyBkZW5zaXR5IGlzIG9uZSByYXN0ZXI6IGhpZGluZyBhIGdlbmUgb2YgaXQgaGlkZXMgbm90aGluZywgaGlkaW5nIGFsbCBoaWRlcyBpdC5cbiAgICBjb25zdCBnZW5lcyA9IHZpZXcudHJhbnNjcmlwdEFsbEdlbmVzXG4gICAgICA/IGFsbEdlbmVzSGlkZGVuKHZpZXcpXG4gICAgICAgID8gW11cbiAgICAgICAgOiBbQUxMX0dFTkVTXVxuICAgICAgOiB2aWV3LnRyYW5zY3JpcHRHZW5lcy5maWx0ZXIoKGcpID0+ICFoaWRkZW5HZW5lcy5oYXMoZykpO1xuICAgIC8vIFRoZSByYXN0ZXIgc3VtcyBldmVyeSBjZWxsJ3MgdHJhbnNjcmlwdHMgYW5kIGNhcnJpZXMgbm8gY2VsbHMsIHNvIGl0IGNhbm5vdCBmb2xsb3cgdGhlXG4gICAgLy8gb2JzZXJ2YXRpb24gZ2VuZSBmaWx0ZXI6IGRyYXduLCBpdCB3b3VsZCBzaG93IHRoZSB0cmFuc2NyaXB0cyBvZiB0aGUgY2VsbHMgaXQgaGlkZXMuIE5vdFxuICAgIC8vIGRyYXduIHdoaWxlIGl0IGlzIG9uICh0aGUgVHJhbnNjcmlwdHMgcGFuZWwgc2F5cyBzbykuXG4gICAgaWYgKFxuICAgICAgIWRhdGFzZXQuZGVuc2l0eSB8fFxuICAgICAgIXRoaXMucG9ydC5nZXREZW5zaXR5IHx8XG4gICAgICB2aWV3LnRyYW5zY3JpcHRNb2RlICE9PSAnZGVuc2l0eScgfHxcbiAgICAgICFnZW5lcy5sZW5ndGggfHxcbiAgICAgIGhhc0dlbmVGaWx0ZXIodmlldylcbiAgICApIHtcbiAgICAgIHRoaXMuZ3JvdXBzLmRyb3AoJ2RlbnNpdHknKTtcbiAgICAgIHRoaXMuc3RhdHMgPSBudWxsO1xuICAgICAgdGhpcy5yYXN0ZXIgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgcmFzdGVyJ3Mga2V5OiB3aGF0IGl0IGlzIGEgcmFzdGVyIE9GLiBXaW5kb3csIGNvbG9ybWFwIGFuZCBvcGFjaXR5IGFyZSB0aGUgbGF5ZXIncyBzdHlsZS5cbiAgICBjb25zdCBrZXkgPSBbZGF0YXNldC5pZCwgZ2VuZXMuam9pbignLCcpLCB2aWV3LmRlbnNpdHlCaW5dLmpvaW4oJ3wnKTtcbiAgICAvLyBgc2hvd25gLCBub3QgYGhhc2A6IGEgc3RpdGNoZWQgc2xpY2UgcmUtcmVuZGVyIGNsZWFycyB0aGUgbGF5ZXIgbGlzdCwgYW5kIHRoZSBrZXkgYWxvbmVcbiAgICAvLyB3b3VsZCBjYWxsIHRoZSBjbGVhcmVkIGxheWVyIGRyYXduLlxuICAgIGlmIChrZXkgIT09IHRoaXMuZ3JvdXBzLmtleSgnZGVuc2l0eScpIHx8ICF0aGlzLmdyb3Vwcy5zaG93bignZGVuc2l0eScpIHx8ICF0aGlzLnJhc3Rlcikge1xuICAgICAgY29uc3QgcmFzdGVyID0gYXdhaXQgY3R4LnRyYWNrKCdUcmFuc2NyaXB0IGRlbnNpdHknLCB0aGlzLnBvcnQuZ2V0RGVuc2l0eShnZW5lcywgdmlldy5kZW5zaXR5QmluKSk7XG4gICAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcblxuICAgICAgLy8gQmlucyBkcmF3biBhcyBzcXVhcmVzLCBhcyBYZW5pdW0gRXhwbG9yZXIgZG9lczsgdGhlIHdpbmRvdyBpcyBpbiB0cmFuc2NyaXB0cy/CtW3Csi5cbiAgICAgIGNvbnN0IG1ldGEgPSByYXN0ZXIubWV0YTtcbiAgICAgIGNvbnN0IGFyZWEgPSBtZXRhLmdyaWRTaXplWzBdICogbWV0YS5ncmlkU2l6ZVsxXTtcbiAgICAgIGNvbnN0IHBlckFyZWEgPSByYXN0ZXIudmFsdWVzLm1hcCgodikgPT4gdiAvIGFyZWEpO1xuICAgICAgdGhpcy5yYXN0ZXIgPSB7XG4gICAgICAgIHBlckFyZWEsXG4gICAgICAgIG1heDogcGVyQXJlYS5yZWR1Y2UoKG0sIHYpID0+ICh2ID4gbSA/IHYgOiBtKSwgMCksXG4gICAgICAgIGF1dG86IGRlbnNpdHlBdXRvUmFuZ2UocGVyQXJlYSksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVmID0gZGF0YXNldC5pbWFnZVJlZjtcbiAgICAgIGNvbnN0IHN4ID0gcmVmPy5zY2FsZT8uWzBdID8/IDE7XG4gICAgICBjb25zdCBzeSA9IHJlZj8uc2NhbGU/LlsxXSA/PyAxO1xuICAgICAgY29uc3QgbGF5ZXI6IEltYWdlTGF5ZXIgPSB0aGlzLmdyb3Vwcy52aWV3ZXIhLmFkZEltYWdlKFxuICAgICAgICB7IGtpbmQ6ICd0eXBlZCcsIHdpZHRoOiBtZXRhLmNvbHMsIGhlaWdodDogbWV0YS5yb3dzLCBjaGFubmVsczogMSwgZHR5cGU6ICdmbG9hdDMyJywgZGF0YTogcGVyQXJlYSB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogYGRlbnNpdHkgwrcgJHt2aWV3LnRyYW5zY3JpcHRBbGxHZW5lcyA/ICdhbGwgZ2VuZXMnIDogZ2VuZXMuam9pbignLCAnKX1gLFxuICAgICAgICAgIHNjYWxlOiBbbWV0YS5ncmlkU2l6ZVswXSAqIHN4LCBtZXRhLmdyaWRTaXplWzFdICogc3ldLFxuICAgICAgICAgIHRyYW5zbGF0ZTogW1xuICAgICAgICAgICAgbWV0YS5vcmlnaW5bMF0gKiBzeCArIChyZWY/LnRyYW5zbGF0ZT8uWzBdID8/IDApLFxuICAgICAgICAgICAgbWV0YS5vcmlnaW5bMV0gKiBzeSArIChyZWY/LnRyYW5zbGF0ZT8uWzFdID8/IDApLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgLy8gWGVuaXVtIEV4cGxvcmVyJ3MgXCJzY2FsZSB0aHJlc2hvbGRcIjogZW1wdHkgdGlzc3VlIHNob3dzIHRoZSBpbWFnZSB1bmRlciBpdC5cbiAgICAgICAgICB0cmFuc3BhcmVudEJlbG93OiB0cnVlLFxuICAgICAgICAgIGJsZW5kaW5nOiAndHJhbnNsdWNlbnQnLFxuICAgICAgICAgIGludGVycG9sYXRpb246ICduZWFyZXN0JyxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbG9ybWFwS2V5ID0gbnVsbDtcbiAgICAgIHRoaXMuZ3JvdXBzLnNldEtleSgnZGVuc2l0eScsIGtleSk7XG4gICAgICB0aGlzLmdyb3Vwcy5yZXBsYWNlKCdkZW5zaXR5JywgbGF5ZXIpO1xuICAgIH1cbiAgICB0aGlzLnJlc3R5bGUodGhpcy5ncm91cHMubGF5ZXIoJ2RlbnNpdHknKSBhcyBJbWFnZUxheWVyLCB2aWV3KTtcbiAgfVxuXG4gIC8qKiBXaW5kb3csIGNvbG91ciBhbmQgb3BhY2l0eSBvbnRvIHRoZSBkcmF3biBsYXllcjogdW5pZm9ybXMgYW5kIGEgTFVULCBubyByZS11cGxvYWQuICovXG4gIHByaXZhdGUgcmVzdHlsZShsYXllcjogSW1hZ2VMYXllciwgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHJhc3RlciA9IHRoaXMucmFzdGVyITtcbiAgICBjb25zdCBbbG8sIGhpXSA9IHZpZXcuZGVuc2l0eVJhbmdlID8/IHJhc3Rlci5hdXRvO1xuICAgIGxheWVyLmNvbnRyYXN0TGltaXRzID0gW2xvLCBoaV07XG4gICAgbGF5ZXIub3BhY2l0eSA9IHZpZXcuZGVuc2l0eU9wYWNpdHk7XG4gICAgY29uc3QgY29sb3JtYXBLZXkgPSBKU09OLnN0cmluZ2lmeSh2aWV3LmRlbnNpdHlDb2xvcm1hcCA/PyBudWxsKTtcbiAgICBpZiAoY29sb3JtYXBLZXkgIT09IHRoaXMuY29sb3JtYXBLZXkpIHtcbiAgICAgIHRoaXMuY29sb3JtYXBLZXkgPSBjb2xvcm1hcEtleTtcbiAgICAgIGxheWVyLmNvbG9ybWFwID0gY29sb3JtYXBGcm9tTHV0KCd0cmFuc2NyaXB0LWRlbnNpdHknLCBsdXRGb3Iodmlldy5kZW5zaXR5Q29sb3JtYXAgPz8gSU5GRVJOT19MVVQpKTtcbiAgICB9XG4gICAgdGhpcy5ncm91cHMudmlld2VyIS5yZXF1ZXN0UmVuZGVyKCk7XG4gICAgY29uc3Qgc3RhdHMgPSB7IGxvLCBoaSwgbWF4OiByYXN0ZXIubWF4IH07XG4gICAgaWYgKHRoaXMuc3RhdHM/LmxvID09PSBsbyAmJiB0aGlzLnN0YXRzLmhpID09PSBoaSAmJiB0aGlzLnN0YXRzLm1heCA9PT0gcmFzdGVyLm1heCkgcmV0dXJuO1xuICAgIHRoaXMuc3RhdHMgPSBzdGF0cztcbiAgICB0aGlzLmNoYW5nZWQoc3RhdHMpO1xuICB9XG59XG5cbi8qKlxuICogVHJhbnNjcmlwdHMgaW4gdmlldyBmb3IgdGhlIHZpc2libGUgZ2VuZXMsIGFnYWluc3QgdGhlIG1hcmtlciBidWRnZXQg4oCUIGl0IHRlbGxzIHRoZSB1c2VyXG4gKiB3aGV0aGVyIHRoZSBidWRnZXQgd2lsbCBmb3JjZSBncm91cGluZy4gQ2FjaGVzIHRoZSBwZXItZ2VuZSBkYXRhc2V0IHRvdGFscyBmb3IgdGhlIGxhdGVzdFxuICogZ2VuZSBzZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2NyaXB0RXN0aW1hdG9yIHtcbiAgLyoqIFBlci1nZW5lIGRhdGFzZXQgdG90YWxzIGZvciB0aGUgaW4tdmlldyBlc3RpbWF0ZSwgZm9yIHRoZSBsYXRlc3QgZ2VuZSBzZXQuICovXG4gIHByaXZhdGUgY291bnRzQ2FjaGU6IHsga2V5OiBzdHJpbmc7IGNvdW50czogUHJvbWlzZTxTcGF0aWFsVHJhbnNjcmlwdENvdW50cz4gfSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9ydDogU3BhdGlhbERhdGFQb3J0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlZDogKGVzdGltYXRlOiBUcmFuc2NyaXB0RXN0aW1hdGUgfCBudWxsKSA9PiB2b2lkLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFRyYW5zY3JpcHRzIGluIHZpZXcgZm9yIHRoZSB2aXNpYmxlIGdlbmVzOiBlYWNoIGdlbmUncyBkYXRhc2V0IHRvdGFsIHRpbWVzIHRoZSBzaGFyZVxuICAgKiBvZiB0aGUgdGlzc3VlIG9uIHNjcmVlbi4gQW4gZXN0aW1hdGUg4oCUIGV4cHJlc3Npb24gaXMgbm90IHVuaWZvcm0g4oCUIHdoaWNoIGlzIGFsc28gd2hhdFxuICAgKiBYZW5pdW0gRXhwbG9yZXIgc2hvd3M7IGl0IHRlbGxzIHRoZSB1c2VyIHdoZXRoZXIgdGhlIGJ1ZGdldCB3aWxsIGZvcmNlIGdyb3VwaW5nLlxuICAgKi9cbiAgYXN5bmMgcGxhbihcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCxcbiAgICB2aWV3OiBTcGF0aWFsVmlld1N0YXRlLFxuICAgIHZpZXdlcjogVmlld2VyLFxuICAgIHc6IG51bWJlcixcbiAgICBoOiBudW1iZXIsXG4gICAgY3R4OiBQbGFuQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGlsZXMgPSBkYXRhc2V0LnRyYW5zY3JpcHRUaWxlcztcbiAgICBpZiAoIXRpbGVzIHx8ICF0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdENvdW50cyB8fCB2aWV3LnRyYW5zY3JpcHRNb2RlID09PSAnb2ZmJykge1xuICAgICAgdGhpcy5jaGFuZ2VkKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRkZW5HZW5lcyA9IG5ldyBTZXQodmlldy50cmFuc2NyaXB0SGlkZGVuR2VuZXMpO1xuICAgIGNvbnN0IGdlbmVzID0gdmlldy50cmFuc2NyaXB0QWxsR2VuZXMgPyBbXSA6IHZpZXcudHJhbnNjcmlwdEdlbmVzLmZpbHRlcigoZykgPT4gIWhpZGRlbkdlbmVzLmhhcyhnKSk7XG4gICAgY29uc3Qga2V5ID0gYCR7ZGF0YXNldC5pZH18JHtnZW5lcy5qb2luKCcsJyl9YDtcbiAgICBpZiAodGhpcy5jb3VudHNDYWNoZT8ua2V5ICE9PSBrZXkpIHtcbiAgICAgIHRoaXMuY291bnRzQ2FjaGUgPSB7IGtleSwgY291bnRzOiB0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdENvdW50cyhnZW5lcykgfTtcbiAgICB9XG4gICAgbGV0IGNvdW50czogU3BhdGlhbFRyYW5zY3JpcHRDb3VudHM7XG4gICAgdHJ5IHtcbiAgICAgIGNvdW50cyA9IGF3YWl0IHRoaXMuY291bnRzQ2FjaGUuY291bnRzO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5jb3VudHNDYWNoZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuO1xuICAgIGNvbnN0IGluVmlldyA9IHZpc2libGVEYXRhUmVjdCh2aWV3ZXIuY2FtZXJhLmNlbnRlciwgdmlld2VyLmNhbWVyYS56b29tLCB3LCBoLCBkYXRhc2V0LmltYWdlUmVmLCAwKTtcbiAgICBpZiAoIWluVmlldykgcmV0dXJuO1xuICAgIGNvbnN0IGIgPSBjb3VudHMuYm91bmRzO1xuICAgIGNvbnN0IHNoYXJlID0gTWF0aC5taW4oMSwgdmlzaWJsZUFyZWEoaW5WaWV3LCBiKSAvIE1hdGgubWF4KDEsIChiWzJdIC0gYlswXSkgKiAoYlszXSAtIGJbMV0pKSk7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB2aWV3LnRyYW5zY3JpcHRBbGxHZW5lc1xuICAgICAgPyBhbGxHZW5lc0hpZGRlbih2aWV3KVxuICAgICAgICA/IDBcbiAgICAgICAgOiBjb3VudHMudG90YWxcbiAgICAgIDogZ2VuZXMucmVkdWNlKChzdW0sIGcpID0+IHN1bSArIChjb3VudHMuY291bnRzW2ddID8/IDApLCAwKTtcbiAgICB0aGlzLmNoYW5nZWQoeyBwb2ludHM6IE1hdGgucm91bmQoc2VsZWN0ZWQgKiBzaGFyZSksIG1heDogdmlldy50cmFuc2NyaXB0QnVkZ2V0IH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -147,7 +147,9 @@ export class TranscriptHover {
|
|
|
147
147
|
return lines;
|
|
148
148
|
}
|
|
149
149
|
if (d.kind === 'individual') {
|
|
150
|
-
|
|
150
|
+
// Named by its code when the dataset lists its genes; else by the server's summary of
|
|
151
|
+
// the spot, which can name a neighbour's gene.
|
|
152
|
+
const gene = d.genes[t.gene[i]] || s?.topGenes?.[0]?.name;
|
|
151
153
|
return [
|
|
152
154
|
gene ? `${gene} transcript` : 'Transcript',
|
|
153
155
|
cellLine(obs, 'in cell'),
|
|
@@ -179,4 +181,4 @@ export class TranscriptHover {
|
|
|
179
181
|
: [`${gene} transcript`, cellLine(obs, 'in cell')];
|
|
180
182
|
}
|
|
181
183
|
}
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNjcmlwdC1ob3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9zcGF0aWFsLXRpbGVzL3RyYW5zY3JpcHQtaG92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUNMLFdBQVcsRUFDWCxjQUFjLEdBR2YsTUFBTSw2Q0FBNkMsQ0FBQztBQVlyRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFZMUIsa0dBQWtHO0lBQ2xHLFlBQ21CLElBQXFCLEVBQ3JCLFVBQXlCO1FBRHpCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWU7UUFkNUMscUZBQXFGO1FBQzdFLFVBQUssR0FBNEIsSUFBSSxDQUFDO1FBQzlDLDZEQUE2RDtRQUNyRCxVQUFLLEdBQTRCLElBQUksQ0FBQztRQUM5Qyw0RkFBNEY7UUFDcEYsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQzdDLGlEQUFpRDtRQUNoQyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDN0MsUUFBRyxHQUFrQixJQUFJLENBQUM7UUFDMUIsVUFBSyxHQUF5QyxJQUFJLENBQUM7SUFNeEQsQ0FBQztJQUVKLG9HQUFvRztJQUNwRyxRQUFRLENBQUMsS0FBdUIsRUFBRSxjQUE2QjtRQUM3RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsUUFBUSxDQUFDLEtBQThCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcs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QUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDMUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzFELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQzthQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FB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QUFjLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM5RixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksYUFBYSxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBvaW50c0xheWVyIH0gZnJvbSAnbmFwYXJpLWpzJztcblxuaW1wb3J0IHR5cGUgeyBTcGF0aWFsRGF0YVBvcnQgfSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvcG9ydHMvc3BhdGlhbC1kYXRhLnBvcnQnO1xuaW1wb3J0IHtcbiAgTk9fQ0FURUdPUlksXG4gIE5PX09CU0VSVkFUSU9OLFxuICBTcGF0aWFsVHJhbnNjcmlwdFN1bW1hcnksXG4gIFNwYXRpYWxUcmFuc2NyaXB0VGlsZSxcbn0gZnJvbSAnLi4vLi4vLi4vY29udHJhY3RzL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3JpY2FsQ29kZXMgfSBmcm9tICcuL2NhdGVnb3JpY2FsLWxvb2t1cCc7XG5cbi8qKiBXaGF0IG9uZSB0cmFuc2NyaXB0IGVudHJ5IGlzIOKAlCBkZWNpZGVzIHdoYXQgaG92ZXJpbmcgaXQgc2F5cy4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zY3JpcHRLaW5kID0gJ2dlbmVzJyB8ICdpbmRpdmlkdWFsJyB8ICdiaW5zJztcblxuLyoqIEEgYmluIGdyaWQ6IGl0cyBzaXplIGFuZCBvcmlnaW4sIHNvIGEgaG92ZXJlZCBiaW4ncyBzcXVhcmUgY2FuIGJlIHJlY292ZXJlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNjcmlwdEJpbiB7XG4gIHNpemU6IG51bWJlcjtcbiAgb3JpZ2luOiBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG4vKipcbiAqIFRvb2x0aXBzIGZvciB0aGUgdHJhbnNjcmlwdCBtYXJrZXJzIG9mIHRoZSAyRCBzcGF0aWFsIHZpZXcuXG4gKlxuICogUmVhZHMgb25seSB3aGF0IHRoZSB0cmFuc2NyaXB0IGxheWVyIGxhc3QgZHJldyDigJQgaGFuZGVkIG92ZXIgb25lIHdheSB0aHJvdWdoXG4gKiB7QGxpbmsgc2V0RHJhd259IC8ge0BsaW5rIHNldFR5cGVzfSDigJQgYW5kIGFza3MgdGhlIHNlcnZlciBmb3IgdGhlIHNsb3dlciBkZXRhaWxzIChkaXN0aW5jdFxuICogZ2VuZXMgaW4gYSBncm91cCwgaXRzIHRvcCBnZW5lcyBhbmQgY2VsbHMsIHRoZSBjZWxsJ3MgZGlzcGxheSBpZCkgb25jZSB0aGUgcG9pbnRlciBoYXNcbiAqIHJlc3RlZCBvbiBhIG1hcmtlciwgY2FjaGluZyB0aGVtIHVudGlsIHRoZSBuZXh0IGRyYXcuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2NyaXB0SG92ZXIge1xuICAvKiogV2hhdCB0aGUgdHJhbnNjcmlwdCBsYXllciBjdXJyZW50bHkgc2hvd3MgKHdyaXR0ZW4gYnkgZHJhd2luZywgcmVhZCBieSBob3ZlcikuICovXG4gIHByaXZhdGUgZHJhd246IERyYXduVHJhbnNjcmlwdHMgfCBudWxsID0gbnVsbDtcbiAgLyoqIFRoZSBjZWxsLXR5cGUgY29sdW1uLCB0byBuYW1lIHRoZSBjZWxsIGEgbWFya2VyIGlzIGluLiAqL1xuICBwcml2YXRlIHR5cGVzOiBDYXRlZ29yaWNhbENvZGVzIHwgbnVsbCA9IG51bGw7XG4gIC8qKiDCtW0gcGVyIG9ic2VydmF0aW9uIHVuaXQgb2YgdGhlIGRyYXduIGRhdGFzZXQsIGZvciBkZXNjcmliaW5nIGEgZ3JvdXBlZCBtYXJrZXIncyBhcmVhLiAqL1xuICBwcml2YXRlIG1pY3JvbnNQZXJVbml0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIERldGFpbHMgYWxyZWFkeSBmZXRjaGVkLCBieSBob3ZlcmVkIGVudHJ5LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuICBwcml2YXRlIGtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIGBsYXllclNob3duYCBzYXlzIHdoZXRoZXIgdGhlIHRyYW5zY3JpcHQgbGF5ZXIgaXMgb24gc2NyZWVuIG5vdyAoaXQgbWF5IGhhdmUgYmVlbiBkcm9wcGVkKS4gKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0OiBTcGF0aWFsRGF0YVBvcnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYXllclNob3duOiAoKSA9PiBib29sZWFuLFxuICApIHt9XG5cbiAgLyoqIFRoZSB0cmFuc2NyaXB0IGxheWVyIHdhcyByZWRyYXduOiBob3ZlciBuYW1lcyB0aGVzZSBlbnRyaWVzIG5vdyAoY2FjaGVkIGRldGFpbHMgYXJlIGRyb3BwZWQpLiAqL1xuICBzZXREcmF3bihkcmF3bjogRHJhd25UcmFuc2NyaXB0cywgbWljcm9uc1BlclVuaXQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXduID0gZHJhd247XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgIHRoaXMubWljcm9uc1BlclVuaXQgPSBtaWNyb25zUGVyVW5pdDtcbiAgfVxuXG4gIC8qKiBUaGUgY2VsbC10eXBlIGNvbHVtbiB0aGUgZHJhd24gZW50cmllcycgY2VsbHMgYXJlIG5hbWVkIGJ5LCBvciBudWxsLiAqL1xuICBzZXRUeXBlcyh0eXBlczogQ2F0ZWdvcmljYWxDb2RlcyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gIH1cblxuICAvKiogTm90aGluZyBpcyBkcmF3biBhbnkgbW9yZS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3biA9IG51bGw7XG4gIH1cblxuICAvKiogU3RvcCBhIHBlbmRpbmcgZGV0YWlscyByZXF1ZXN0IGFuZCBmb3JnZXQgd2hhdCB3YXMgZHJhd24uICovXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICB0aGlzLnRpbWVyID0gbnVsbDtcbiAgICB0aGlzLmRyYXduID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb29sdGlwIGxpbmVzIGZvciB0aGUgdHJhbnNjcmlwdCBtYXJrZXIgdW5kZXIgd29ybGQgcG9pbnQgYCh3eCwgd3kpYCwgb3IgbnVsbC5cbiAgICpcbiAgICogVGhlIG1hcmtlciBpcyBuYXBhcmktanMncyBwaWNrIG9uIHRoZSBkcmF3biBsYXllcjogaGl0IGFueXdoZXJlIG9uIGl0LCBvciB3aXRoaW5cbiAgICogYHJhZGl1c1dvcmxkYCBvZiBpdHMgY2VudHJlIHdoZW4gaXQgaXMgc21hbGxlciB0aGFuIHRoYXQsIHRoZSBORUFSRVNUIGNlbnRyZSB3aW5uaW5nXG4gICAqIGFtb25nIHNldmVyYWwgKGFuIGV4YWN0IHRpZSwgc3VjaCBhcyB0d28gZ2VuZXMnIGdyb3VwcyBvbiBvbmUgYmluIGNlbnRyZSwgZ29lcyB0byB0aGUgb25lXG4gICAqIGRyYXduIG9uIHRvcCkuIFJldHVybnMgd2hhdCBpcyBrbm93biBhdCBvbmNlIChnZW5lLCBjb3VudCwgY2VsbCB0eXBlKTsgYW55dGhpbmcgdGhhdCBuZWVkc1xuICAgKiB0aGUgc2VydmVyIOKAlCBkaXN0aW5jdCBnZW5lcyBpbiBhIGdyb3VwLCBpdHMgdG9wIGdlbmVzIGFuZCBjZWxscywgdGhlIGNlbGwncyBkaXNwbGF5IGlkIOKAlFxuICAgKiBhcnJpdmVzIHRocm91Z2ggYG9uRGV0YWlsc2Agb25jZSB0aGUgcG9pbnRlciBoYXMgcmVzdGVkIG9uIHRoZSBtYXJrZXIgYnJpZWZseS5cbiAgICovXG4gIGhvdmVyQXQod3g6IG51bWJlciwgd3k6IG51bWJlciwgcmFkaXVzV29ybGQ6IG51bWJlciwgb25EZXRhaWxzOiAobGluZXM6IHN0cmluZ1tdKSA9PiB2b2lkKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICBjb25zdCBkID0gdGhpcy5kcmF3bjtcbiAgICBpZiAoIWQgfHwgIXRoaXMubGF5ZXJTaG93bigpIHx8ICFkLm1lcmdlZC5jb3VudCkge1xuICAgICAgdGhpcy5rZXkgPSBudWxsO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGkgPSBkLmxheWVyLnBpY2sod3gsIHd5LCB7IHRvbGVyYW5jZTogcmFkaXVzV29ybGQsIHRpZUJyZWFrOiAnbmVhcmVzdCcgfSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLmtleSA9IG51bGw7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gYCR7ZC5raW5kfXwke2QubWVyZ2VkLnhbaV19fCR7ZC5tZXJnZWQueVtpXX18JHtkLm1lcmdlZC5nZW5lW2ldfWA7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuICAgIGlmIChrZXkgIT09IHRoaXMua2V5KSB7XG4gICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgIGlmICh0aGlzLnRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMuZmV0Y2hEZXRhaWxzKGQsIGksIGtleSwgb25EZXRhaWxzKSwgMTUwKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpYmUoZCwgaSwgbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoRGV0YWlscyhcbiAgICBkOiBEcmF3blRyYW5zY3JpcHRzLFxuICAgIGk6IG51bWJlcixcbiAgICBrZXk6IHN0cmluZyxcbiAgICBvbkRldGFpbHM6IChsaW5lczogc3RyaW5nW10pID0+IHZvaWQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5wb3J0LmdldFRyYW5zY3JpcHRTdW1tYXJ5IHx8IHRoaXMua2V5ICE9PSBrZXkpIHJldHVybjtcbiAgICBjb25zdCBvYnMgPSBkLm1lcmdlZC5vYnNlcnZhdGlvbltpXTtcbiAgICBjb25zdCBjZWxscyA9IG9icyA9PT0gTk9fT0JTRVJWQVRJT04gPyBbXSA6IFtvYnNdO1xuICAgIGxldCBib3g6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkO1xuICAgIGlmICgoZC5raW5kID09PSAnYmlucycgfHwgZC5raW5kID09PSAnZ2VuZXMnKSAmJiBkLmJpbikge1xuICAgICAgY29uc3QgeyBzaXplLCBvcmlnaW4gfSA9IGQuYmluO1xuICAgICAgY29uc3QgYnggPSBNYXRoLmZsb29yKChkLm1lcmdlZC54W2ldIC0gb3JpZ2luWzBdKSAvIHNpemUpO1xuICAgICAgY29uc3QgYnkgPSBNYXRoLmZsb29yKChkLm1lcmdlZC55W2ldIC0gb3JpZ2luWzFdKSAvIHNpemUpO1xuICAgICAgY29uc3QgeDAgPSBvcmlnaW5bMF0gKyBieCAqIHNpemU7XG4gICAgICBjb25zdCB5MCA9IG9yaWdpblsxXSArIGJ5ICogc2l6ZTtcbiAgICAgIGJveCA9IFt4MCwgeTAsIHgwICsgc2l6ZSwgeTAgKyBzaXplXTtcbiAgICB9IGVsc2UgaWYgKGQua2luZCA9PT0gJ2luZGl2aWR1YWwnKSB7XG4gICAgICBjb25zdCBlID0gMC4wMjtcbiAgICAgIGJveCA9IFtkLm1lcmdlZC54W2ldIC0gZSwgZC5tZXJnZWQueVtpXSAtIGUsIGQubWVyZ2VkLnhbaV0gKyBlLCBkLm1lcmdlZC55W2ldICsgZV07XG4gICAgfVxuICAgIGNvbnN0IGdlbmVzID0gZC5ncm91cEdlbmVzICYmIGQuZW50cnlHcm91cCA/IGQuZ3JvdXBHZW5lc1tkLmVudHJ5R3JvdXBbaV1dIDogdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgdGhpcy5wb3J0LmdldFRyYW5zY3JpcHRTdW1tYXJ5KHsgYm94LCBjZWxscywgLi4uKGdlbmVzID8geyBnZW5lcyB9IDoge30pIH0pO1xuICAgICAgY29uc3QgbGluZXMgPSB0aGlzLmRlc2NyaWJlKGQsIGksIHN1bW1hcnkpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCBsaW5lcyk7XG4gICAgICBpZiAodGhpcy5rZXkgPT09IGtleSkgb25EZXRhaWxzKGxpbmVzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW25hcGFyaS1qc10gdHJhbnNjcmlwdCBkZXRhaWxzIHVuYXZhaWxhYmxlJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIHRvb2x0aXAgdGV4dCBmb3IgZW50cnkgYGlgLCB3aXRoIHRoZSBzZXJ2ZXIncyBkZXRhaWxzIHdoZW4gdGhleSBoYXZlIGFycml2ZWQuICovXG4gIHByaXZhdGUgZGVzY3JpYmUoZDogRHJhd25UcmFuc2NyaXB0cywgaTogbnVtYmVyLCBzOiBTcGF0aWFsVHJhbnNjcmlwdFN1bW1hcnkgfCBudWxsKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHQgPSBkLm1lcmdlZDtcbiAgICBjb25zdCBuID0gdC53ZWlnaHRbaV07XG4gICAgY29uc3Qgb2JzID0gdC5vYnNlcnZhdGlvbltpXTtcbiAgICBjb25zdCBmbXQgPSAodjogbnVtYmVyKSA9PiB2LnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgY29uc3QgdHlwZU9mID0gKG86IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdHlwZXMgPSB0aGlzLnR5cGVzO1xuICAgICAgaWYgKCF0eXBlcyB8fCBvID09PSBOT19PQlNFUlZBVElPTiB8fCB0eXBlcy5tZXRhLmtpbmQgIT09ICdjYXRlZ29yaWNhbCcpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgYyA9IHR5cGVzLmNvZGVzW29dO1xuICAgICAgcmV0dXJuIGMgPT09IE5PX0NBVEVHT1JZID8gbnVsbCA6ICh0eXBlcy5tZXRhLmNhdGVnb3JpZXNbY10gPz8gbnVsbCk7XG4gICAgfTtcbiAgICBjb25zdCBjZWxsTGluZSA9IChvOiBudW1iZXIsIHByZWZpeDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobyA9PT0gTk9fT0JTRVJWQVRJT04pIHJldHVybiAnb3V0c2lkZSBhbnkgY2VsbCc7XG4gICAgICBjb25zdCBpZCA9IHM/LmNlbGxJZHM/LltvXSA/PyBgIyR7b31gO1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVPZihvKTtcbiAgICAgIHJldHVybiBgJHtwcmVmaXh9ICR7aWR9JHt0eXBlID8gYCDCtyAke3R5cGV9YCA6ICcnfWA7XG4gICAgfTtcblxuICAgIGlmIChkLmtpbmQgPT09ICdiaW5zJykge1xuICAgICAgY29uc3QgbGluZXMgPSBbYCR7Zm10KG4pfSB0cmFuc2NyaXB0cyDCtyBhbGwgZ2VuZXNgXTtcbiAgICAgIGlmIChkLmJpbikgbGluZXMucHVzaChgJHtkLmJpbi5zaXplLnRvRml4ZWQoMSl9IMOXICR7ZC5iaW4uc2l6ZS50b0ZpeGVkKDEpfSDCtW0gYXJlYWApO1xuICAgICAgaWYgKHM/LnRyYW5zY3JpcHRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGluZXMucHVzaChcbiAgICAgICAgICBgJHtmbXQocy5nZW5lcyA/PyAwKX0gZGlzdGluY3QgZ2VuZXMgwrcgJHtmbXQocy5jZWxscyA/PyAwKX0gY2VsbCR7cy5jZWxscyA9PT0gMSA/ICcnIDogJ3MnfWAgK1xuICAgICAgICAgICAgKHMudW5hc3NpZ25lZCA/IGAgwrcgJHtmbXQocy51bmFzc2lnbmVkKX0gb3V0c2lkZSBjZWxsc2AgOiAnJyksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzLnRvcEdlbmVzPy5sZW5ndGgpIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgICAgYHRvcCBnZW5lczogJHtzLnRvcEdlbmVzXG4gICAgICAgICAgICAgIC5zbGljZSgwLCA1KVxuICAgICAgICAgICAgICAubWFwKChnKSA9PiBgJHtnLm5hbWV9ICR7Zm10KGcuY291bnQpfWApXG4gICAgICAgICAgICAgIC5qb2luKCcsICcpfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGluZXMucHVzaChjZWxsTGluZShvYnMsICdtb3N0bHkgY2VsbCcpKTtcbiAgICAgIGlmICghcyAmJiB0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdFN1bW1hcnkpIGxpbmVzLnB1c2goJ2xvYWRpbmcgZGV0YWlsc+KApicpO1xuICAgICAgcmV0dXJuIGxpbmVzO1xuICAgIH1cbiAgICBpZiAoZC5raW5kID09PSAnaW5kaXZpZHVhbCcpIHtcbiAgICAgIGNvbnN0IGdlbmUgPSBzPy50b3BHZW5lcz8uWzBdPy5uYW1lO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgZ2VuZSA/IGAke2dlbmV9IHRyYW5zY3JpcHRgIDogJ1RyYW5zY3JpcHQnLFxuICAgICAgICBjZWxsTGluZShvYnMsICdpbiBjZWxsJyksXG4gICAgICAgIC4uLighcyAmJiB0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdFN1bW1hcnkgPyBbJ2xvYWRpbmcgZGV0YWlsc+KApiddIDogW10pLFxuICAgICAgXTtcbiAgICB9XG4gICAgY29uc3QgZ2VuZSA9IGQuZ2VuZXNbdC5nZW5lW2ldXSA/PyAndHJhbnNjcmlwdCc7XG4gICAgaWYgKGQuYmluKSB7XG4gICAgICBjb25zdCB1bSA9IGQuYmluLnNpemUgKiAodGhpcy5taWNyb25zUGVyVW5pdCA/PyAxKTtcbiAgICAgIGNvbnN0IGdyb3VwID0gZC5lbnRyeUdyb3VwICYmIGQuZ3JvdXBOYW1lcyA/IGQuZ3JvdXBOYW1lc1tkLmVudHJ5R3JvdXBbaV1dIDogZ2VuZTtcbiAgICAgIGNvbnN0IHRvcCA9IHM/LnRvcEdlbmVzPy5sZW5ndGhcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBzLnRvcEdlbmVzXG4gICAgICAgICAgICAgIC5zbGljZSgwLCA2KVxuICAgICAgICAgICAgICAubWFwKChnKSA9PiBgJHtnLm5hbWV9ICR7Zm10KGcuY291bnQpfWApXG4gICAgICAgICAgICAgIC5qb2luKCcsICcpLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGAke2dyb3VwfSDCtyAke2ZtdChuKX0gdHJhbnNjcmlwdCR7biA9PT0gMSA/ICcnIDogJ3MnfWAsXG4gICAgICAgIC4uLihkLmdyb3VwR2VuZXMgPyB0b3AgOiBncm91cCAhPT0gZ2VuZSA/IFtgbW9zdGx5ICR7Z2VuZX1gXSA6IFtdKSxcbiAgICAgICAgYCR7dW0udG9GaXhlZCgxKX0gw5cgJHt1bS50b0ZpeGVkKDEpfSDCtW0gYXJlYSDCtyB6b29tIGluIHRvIHNwbGl0YCxcbiAgICAgICAgLi4uKG9icyA9PT0gTk9fT0JTRVJWQVRJT04gJiYgZC5ncm91cEdlbmVzID8gW10gOiBbY2VsbExpbmUob2JzLCAnbW9zdGx5IGNlbGwnKV0pLFxuICAgICAgICAuLi4oIXMgJiYgZC5ncm91cEdlbmVzICYmIHRoaXMucG9ydC5nZXRUcmFuc2NyaXB0U3VtbWFyeSA/IFsnbG9hZGluZyBkZXRhaWxz4oCmJ10gOiBbXSksXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gbiA+IDFcbiAgICAgID8gW2Ake2dlbmV9IMK3ICR7Zm10KG4pfSB0cmFuc2NyaXB0c2AsICdncm91cGVkOiB6b29tIGluIHRvIHNwbGl0JywgY2VsbExpbmUob2JzLCAnbmVhciBjZWxsJyldXG4gICAgICA6IFtgJHtnZW5lfSB0cmFuc2NyaXB0YCwgY2VsbExpbmUob2JzLCAnaW4gY2VsbCcpXTtcbiAgfVxufVxuXG4vKiogV2hhdCB0aGUgdHJhbnNjcmlwdCBsYXllciBjdXJyZW50bHkgc2hvd3Mg4oCUIHdoYXQgaG92ZXJpbmcgbmVlZHMgdG8gbmFtZSBhIG1hcmtlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd25UcmFuc2NyaXB0cyB7XG4gIGtpbmQ6IFRyYW5zY3JpcHRLaW5kO1xuICBiaW4/OiBUcmFuc2NyaXB0QmluO1xuICBtZXJnZWQ6IFNwYXRpYWxUcmFuc2NyaXB0VGlsZTtcbiAgLyoqIFRoZSBsYXllciB0aGUgZW50cmllcyBhcmUgZHJhd24gaW4sIG9uZSBtYXJrZXIgcGVyIGVudHJ5IGluIHRoZSBzYW1lIG9yZGVyLiAqL1xuICBsYXllcjogUG9pbnRzTGF5ZXI7XG4gIGdlbmVzOiBzdHJpbmdbXTtcbiAgLyoqIEZvciBhIGdyb3VwZWQgZ2VuZSBzZWxlY3Rpb246IGVhY2ggZW50cnkncyBncm91cCwgYW5kIHRoZSBncm91cHMnIG5hbWVzLiAqL1xuICBlbnRyeUdyb3VwPzogSW50MzJBcnJheTtcbiAgZ3JvdXBOYW1lcz86IHN0cmluZ1tdO1xuICAvKiogRWFjaCBncm91cCdzIGdlbmVzLCB3aGVuIHRoZSBtYXJrZXJzIGNhbWUgZnJvbSB0aGUgZGVuc2l0eSBncmlkcyAoZm9yIHRoZSBob3ZlcikuICovXG4gIGdyb3VwR2VuZXM/OiBzdHJpbmdbXVtdO1xufVxuIl19
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNjcmlwdC1ob3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvaW1wbGVtZW50YXRpb25zL25hcGFyaS1qcy9zcGF0aWFsLXRpbGVzL3RyYW5zY3JpcHQtaG92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUNMLFdBQVcsRUFDWCxjQUFjLEdBR2YsTUFBTSw2Q0FBNkMsQ0FBQztBQVlyRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFZMUIsa0dBQWtHO0lBQ2xHLFlBQ21CLElBQXFCLEVBQ3JCLFVBQXlCO1FBRHpCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWU7UUFkNUMscUZBQXFGO1FBQzdFLFVBQUssR0FBNEIsSUFBSSxDQUFDO1FBQzlDLDZEQUE2RDtRQUNyRCxVQUFLLEdBQTRCLElBQUksQ0FBQztRQUM5Qyw0RkFBNEY7UUFDcEYsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQzdDLGlEQUFpRDtRQUNoQyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDN0MsUUFBRyxHQUFrQixJQUFJLENBQUM7UUFDMUIsVUFBSyxHQUF5QyxJQUFJLENBQUM7SUFNeEQsQ0FBQztJQUVKLG9HQUFvRztJQUNwRyxRQUFRLENBQUMsS0FBdUIsRUFBRSxjQUE2QjtRQUM3RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsUUFBUSxDQUFDLEtBQThCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcs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QUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDMUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzFELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQzthQUFNLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDZixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3ZGLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUc7Z0JBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUVELHdGQUF3RjtJQUNoRixRQUFRLENBQUMsQ0FBbUIsRUFBRSxDQUFTLEVBQUUsQ0FBa0M7UUFDakYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM5QyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO1lBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssY0FBYyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDckYsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixPQUFPLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxNQUFjLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsS0FBSyxjQUFjO2dCQUFFLE9BQU8sa0JBQWtCLENBQUM7WUFDcEQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLENBQUMsR0FBRztnQkFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLEVBQUUsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxLQUFLLENBQUMsSUFBSSxDQUNSLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7b0JBQzFGLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2hFLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUN2QixLQUFLLENBQUMsSUFBSSxDQUNSLGNBQWMsQ0FBQyxDQUFDLFFBQVE7eUJBQ3JCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3lCQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt5QkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2hCLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CO2dCQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN6RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDNUIsc0ZBQXNGO1lBQ3RGLCtDQUErQztZQUMvQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQzFELE9BQU87Z0JBQ0wsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxZQUFZO2dCQUMxQyxRQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQztnQkFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3RFLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDO1FBQ2hELElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNsRixNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU07Z0JBQzdCLENBQUMsQ0FBQztvQkFDRSxDQUFDLENBQUMsUUFBUTt5QkFDUCxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7eUJBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ2Q7Z0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLE9BQU87Z0JBQ0wsR0FBRyxLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO2dCQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsNkJBQTZCO2dCQUNoRSxHQUFHLENBQUMsR0FBRyxLQUFLLGNBQWMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUN0RixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDVixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSwyQkFBMkIsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzlGLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxhQUFhLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUG9pbnRzTGF5ZXIgfSBmcm9tICduYXBhcmktanMnO1xuXG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQge1xuICBOT19DQVRFR09SWSxcbiAgTk9fT0JTRVJWQVRJT04sXG4gIFNwYXRpYWxUcmFuc2NyaXB0U3VtbWFyeSxcbiAgU3BhdGlhbFRyYW5zY3JpcHRUaWxlLFxufSBmcm9tICcuLi8uLi8uLi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxDb2RlcyB9IGZyb20gJy4vY2F0ZWdvcmljYWwtbG9va3VwJztcblxuLyoqIFdoYXQgb25lIHRyYW5zY3JpcHQgZW50cnkgaXMg4oCUIGRlY2lkZXMgd2hhdCBob3ZlcmluZyBpdCBzYXlzLiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNjcmlwdEtpbmQgPSAnZ2VuZXMnIHwgJ2luZGl2aWR1YWwnIHwgJ2JpbnMnO1xuXG4vKiogQSBiaW4gZ3JpZDogaXRzIHNpemUgYW5kIG9yaWdpbiwgc28gYSBob3ZlcmVkIGJpbidzIHNxdWFyZSBjYW4gYmUgcmVjb3ZlcmVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2NyaXB0QmluIHtcbiAgc2l6ZTogbnVtYmVyO1xuICBvcmlnaW46IFtudW1iZXIsIG51bWJlcl07XG59XG5cbi8qKlxuICogVG9vbHRpcHMgZm9yIHRoZSB0cmFuc2NyaXB0IG1hcmtlcnMgb2YgdGhlIDJEIHNwYXRpYWwgdmlldy5cbiAqXG4gKiBSZWFkcyBvbmx5IHdoYXQgdGhlIHRyYW5zY3JpcHQgbGF5ZXIgbGFzdCBkcmV3IOKAlCBoYW5kZWQgb3ZlciBvbmUgd2F5IHRocm91Z2hcbiAqIHtAbGluayBzZXREcmF3bn0gLyB7QGxpbmsgc2V0VHlwZXN9IOKAlCBhbmQgYXNrcyB0aGUgc2VydmVyIGZvciB0aGUgc2xvd2VyIGRldGFpbHMgKGRpc3RpbmN0XG4gKiBnZW5lcyBpbiBhIGdyb3VwLCBpdHMgdG9wIGdlbmVzIGFuZCBjZWxscywgdGhlIGNlbGwncyBkaXNwbGF5IGlkKSBvbmNlIHRoZSBwb2ludGVyIGhhc1xuICogcmVzdGVkIG9uIGEgbWFya2VyLCBjYWNoaW5nIHRoZW0gdW50aWwgdGhlIG5leHQgZHJhdy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zY3JpcHRIb3ZlciB7XG4gIC8qKiBXaGF0IHRoZSB0cmFuc2NyaXB0IGxheWVyIGN1cnJlbnRseSBzaG93cyAod3JpdHRlbiBieSBkcmF3aW5nLCByZWFkIGJ5IGhvdmVyKS4gKi9cbiAgcHJpdmF0ZSBkcmF3bjogRHJhd25UcmFuc2NyaXB0cyB8IG51bGwgPSBudWxsO1xuICAvKiogVGhlIGNlbGwtdHlwZSBjb2x1bW4sIHRvIG5hbWUgdGhlIGNlbGwgYSBtYXJrZXIgaXMgaW4uICovXG4gIHByaXZhdGUgdHlwZXM6IENhdGVnb3JpY2FsQ29kZXMgfCBudWxsID0gbnVsbDtcbiAgLyoqIMK1bSBwZXIgb2JzZXJ2YXRpb24gdW5pdCBvZiB0aGUgZHJhd24gZGF0YXNldCwgZm9yIGRlc2NyaWJpbmcgYSBncm91cGVkIG1hcmtlcidzIGFyZWEuICovXG4gIHByaXZhdGUgbWljcm9uc1BlclVuaXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAvKiogRGV0YWlscyBhbHJlYWR5IGZldGNoZWQsIGJ5IGhvdmVyZWQgZW50cnkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIHByaXZhdGUga2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICAvKiogYGxheWVyU2hvd25gIHNheXMgd2hldGhlciB0aGUgdHJhbnNjcmlwdCBsYXllciBpcyBvbiBzY3JlZW4gbm93IChpdCBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQpLiAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxheWVyU2hvd246ICgpID0+IGJvb2xlYW4sXG4gICkge31cblxuICAvKiogVGhlIHRyYW5zY3JpcHQgbGF5ZXIgd2FzIHJlZHJhd246IGhvdmVyIG5hbWVzIHRoZXNlIGVudHJpZXMgbm93IChjYWNoZWQgZGV0YWlscyBhcmUgZHJvcHBlZCkuICovXG4gIHNldERyYXduKGRyYXduOiBEcmF3blRyYW5zY3JpcHRzLCBtaWNyb25zUGVyVW5pdDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZHJhd24gPSBkcmF3bjtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5taWNyb25zUGVyVW5pdCA9IG1pY3JvbnNQZXJVbml0O1xuICB9XG5cbiAgLyoqIFRoZSBjZWxsLXR5cGUgY29sdW1uIHRoZSBkcmF3biBlbnRyaWVzJyBjZWxscyBhcmUgbmFtZWQgYnksIG9yIG51bGwuICovXG4gIHNldFR5cGVzKHR5cGVzOiBDYXRlZ29yaWNhbENvZGVzIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudHlwZXMgPSB0eXBlcztcbiAgfVxuXG4gIC8qKiBOb3RoaW5nIGlzIGRyYXduIGFueSBtb3JlLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXduID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBTdG9wIGEgcGVuZGluZyBkZXRhaWxzIHJlcXVlc3QgYW5kIGZvcmdldCB3aGF0IHdhcyBkcmF3bi4gKi9cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aW1lcikgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgIHRoaXMuZHJhd24gPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvb2x0aXAgbGluZXMgZm9yIHRoZSB0cmFuc2NyaXB0IG1hcmtlciB1bmRlciB3b3JsZCBwb2ludCBgKHd4LCB3eSlgLCBvciBudWxsLlxuICAgKlxuICAgKiBUaGUgbWFya2VyIGlzIG5hcGFyaS1qcydzIHBpY2sgb24gdGhlIGRyYXduIGxheWVyOiBoaXQgYW55d2hlcmUgb24gaXQsIG9yIHdpdGhpblxuICAgKiBgcmFkaXVzV29ybGRgIG9mIGl0cyBjZW50cmUgd2hlbiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhhdCwgdGhlIE5FQVJFU1QgY2VudHJlIHdpbm5pbmdcbiAgICogYW1vbmcgc2V2ZXJhbCAoYW4gZXhhY3QgdGllLCBzdWNoIGFzIHR3byBnZW5lcycgZ3JvdXBzIG9uIG9uZSBiaW4gY2VudHJlLCBnb2VzIHRvIHRoZSBvbmVcbiAgICogZHJhd24gb24gdG9wKS4gUmV0dXJucyB3aGF0IGlzIGtub3duIGF0IG9uY2UgKGdlbmUsIGNvdW50LCBjZWxsIHR5cGUpOyBhbnl0aGluZyB0aGF0IG5lZWRzXG4gICAqIHRoZSBzZXJ2ZXIg4oCUIGRpc3RpbmN0IGdlbmVzIGluIGEgZ3JvdXAsIGl0cyB0b3AgZ2VuZXMgYW5kIGNlbGxzLCB0aGUgY2VsbCdzIGRpc3BsYXkgaWQg4oCUXG4gICAqIGFycml2ZXMgdGhyb3VnaCBgb25EZXRhaWxzYCBvbmNlIHRoZSBwb2ludGVyIGhhcyByZXN0ZWQgb24gdGhlIG1hcmtlciBicmllZmx5LlxuICAgKi9cbiAgaG92ZXJBdCh3eDogbnVtYmVyLCB3eTogbnVtYmVyLCByYWRpdXNXb3JsZDogbnVtYmVyLCBvbkRldGFpbHM6IChsaW5lczogc3RyaW5nW10pID0+IHZvaWQpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgIGNvbnN0IGQgPSB0aGlzLmRyYXduO1xuICAgIGlmICghZCB8fCAhdGhpcy5sYXllclNob3duKCkgfHwgIWQubWVyZ2VkLmNvdW50KSB7XG4gICAgICB0aGlzLmtleSA9IG51bGw7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaSA9IGQubGF5ZXIucGljayh3eCwgd3ksIHsgdG9sZXJhbmNlOiByYWRpdXNXb3JsZCwgdGllQnJlYWs6ICduZWFyZXN0JyB9KTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIHRoaXMua2V5ID0gbnVsbDtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBgJHtkLmtpbmR9fCR7ZC5tZXJnZWQueFtpXX18JHtkLm1lcmdlZC55W2ldfXwke2QubWVyZ2VkLmdlbmVbaV19YDtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG4gICAgaWYgKGtleSAhPT0gdGhpcy5rZXkpIHtcbiAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgICAgaWYgKHRoaXMudGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHZvaWQgdGhpcy5mZXRjaERldGFpbHMoZCwgaSwga2V5LCBvbkRldGFpbHMpLCAxNTApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZXNjcmliZShkLCBpLCBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hEZXRhaWxzKFxuICAgIGQ6IERyYXduVHJhbnNjcmlwdHMsXG4gICAgaTogbnVtYmVyLFxuICAgIGtleTogc3RyaW5nLFxuICAgIG9uRGV0YWlsczogKGxpbmVzOiBzdHJpbmdbXSkgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdFN1bW1hcnkgfHwgdGhpcy5rZXkgIT09IGtleSkgcmV0dXJuO1xuICAgIGNvbnN0IG9icyA9IGQubWVyZ2VkLm9ic2VydmF0aW9uW2ldO1xuICAgIGNvbnN0IGNlbGxzID0gb2JzID09PSBOT19PQlNFUlZBVElPTiA/IFtdIDogW29ic107XG4gICAgbGV0IGJveDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQ7XG4gICAgaWYgKChkLmtpbmQgPT09ICdiaW5zJyB8fCBkLmtpbmQgPT09ICdnZW5lcycpICYmIGQuYmluKSB7XG4gICAgICBjb25zdCB7IHNpemUsIG9yaWdpbiB9ID0gZC5iaW47XG4gICAgICBjb25zdCBieCA9IE1hdGguZmxvb3IoKGQubWVyZ2VkLnhbaV0gLSBvcmlnaW5bMF0pIC8gc2l6ZSk7XG4gICAgICBjb25zdCBieSA9IE1hdGguZmxvb3IoKGQubWVyZ2VkLnlbaV0gLSBvcmlnaW5bMV0pIC8gc2l6ZSk7XG4gICAgICBjb25zdCB4MCA9IG9yaWdpblswXSArIGJ4ICogc2l6ZTtcbiAgICAgIGNvbnN0IHkwID0gb3JpZ2luWzFdICsgYnkgKiBzaXplO1xuICAgICAgYm94ID0gW3gwLCB5MCwgeDAgKyBzaXplLCB5MCArIHNpemVdO1xuICAgIH0gZWxzZSBpZiAoZC5raW5kID09PSAnaW5kaXZpZHVhbCcpIHtcbiAgICAgIGNvbnN0IGUgPSAwLjAyO1xuICAgICAgYm94ID0gW2QubWVyZ2VkLnhbaV0gLSBlLCBkLm1lcmdlZC55W2ldIC0gZSwgZC5tZXJnZWQueFtpXSArIGUsIGQubWVyZ2VkLnlbaV0gKyBlXTtcbiAgICB9XG4gICAgY29uc3QgZ2VuZXMgPSBkLmdyb3VwR2VuZXMgJiYgZC5lbnRyeUdyb3VwID8gZC5ncm91cEdlbmVzW2QuZW50cnlHcm91cFtpXV0gOiB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCB0aGlzLnBvcnQuZ2V0VHJhbnNjcmlwdFN1bW1hcnkoeyBib3gsIGNlbGxzLCAuLi4oZ2VuZXMgPyB7IGdlbmVzIH0gOiB7fSkgfSk7XG4gICAgICBjb25zdCBsaW5lcyA9IHRoaXMuZGVzY3JpYmUoZCwgaSwgc3VtbWFyeSk7XG4gICAgICB0aGlzLmNhY2hlLnNldChrZXksIGxpbmVzKTtcbiAgICAgIGlmICh0aGlzLmtleSA9PT0ga2V5KSBvbkRldGFpbHMobGluZXMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbbmFwYXJpLWpzXSB0cmFuc2NyaXB0IGRldGFpbHMgdW5hdmFpbGFibGUnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgdG9vbHRpcCB0ZXh0IGZvciBlbnRyeSBgaWAsIHdpdGggdGhlIHNlcnZlcidzIGRldGFpbHMgd2hlbiB0aGV5IGhhdmUgYXJyaXZlZC4gKi9cbiAgcHJpdmF0ZSBkZXNjcmliZShkOiBEcmF3blRyYW5zY3JpcHRzLCBpOiBudW1iZXIsIHM6IFNwYXRpYWxUcmFuc2NyaXB0U3VtbWFyeSB8IG51bGwpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdCA9IGQubWVyZ2VkO1xuICAgIGNvbnN0IG4gPSB0LndlaWdodFtpXTtcbiAgICBjb25zdCBvYnMgPSB0Lm9ic2VydmF0aW9uW2ldO1xuICAgIGNvbnN0IGZtdCA9ICh2OiBudW1iZXIpID0+IHYudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICBjb25zdCB0eXBlT2YgPSAobzogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB0eXBlcyA9IHRoaXMudHlwZXM7XG4gICAgICBpZiAoIXR5cGVzIHx8IG8gPT09IE5PX09CU0VSVkFUSU9OIHx8IHR5cGVzLm1ldGEua2luZCAhPT0gJ2NhdGVnb3JpY2FsJykgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBjID0gdHlwZXMuY29kZXNbb107XG4gICAgICByZXR1cm4gYyA9PT0gTk9fQ0FURUdPUlkgPyBudWxsIDogKHR5cGVzLm1ldGEuY2F0ZWdvcmllc1tjXSA/PyBudWxsKTtcbiAgICB9O1xuICAgIGNvbnN0IGNlbGxMaW5lID0gKG86IG51bWJlciwgcHJlZml4OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChvID09PSBOT19PQlNFUlZBVElPTikgcmV0dXJuICdvdXRzaWRlIGFueSBjZWxsJztcbiAgICAgIGNvbnN0IGlkID0gcz8uY2VsbElkcz8uW29dID8/IGAjJHtvfWA7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZU9mKG8pO1xuICAgICAgcmV0dXJuIGAke3ByZWZpeH0gJHtpZH0ke3R5cGUgPyBgIMK3ICR7dHlwZX1gIDogJyd9YDtcbiAgICB9O1xuXG4gICAgaWYgKGQua2luZCA9PT0gJ2JpbnMnKSB7XG4gICAgICBjb25zdCBsaW5lcyA9IFtgJHtmbXQobil9IHRyYW5zY3JpcHRzIMK3IGFsbCBnZW5lc2BdO1xuICAgICAgaWYgKGQuYmluKSBsaW5lcy5wdXNoKGAke2QuYmluLnNpemUudG9GaXhlZCgxKX0gw5cgJHtkLmJpbi5zaXplLnRvRml4ZWQoMSl9IMK1bSBhcmVhYCk7XG4gICAgICBpZiAocz8udHJhbnNjcmlwdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgIGAke2ZtdChzLmdlbmVzID8/IDApfSBkaXN0aW5jdCBnZW5lcyDCtyAke2ZtdChzLmNlbGxzID8/IDApfSBjZWxsJHtzLmNlbGxzID09PSAxID8gJycgOiAncyd9YCArXG4gICAgICAgICAgICAocy51bmFzc2lnbmVkID8gYCDCtyAke2ZtdChzLnVuYXNzaWduZWQpfSBvdXRzaWRlIGNlbGxzYCA6ICcnKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHMudG9wR2VuZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICAgICBgdG9wIGdlbmVzOiAke3MudG9wR2VuZXNcbiAgICAgICAgICAgICAgLnNsaWNlKDAsIDUpXG4gICAgICAgICAgICAgIC5tYXAoKGcpID0+IGAke2cubmFtZX0gJHtmbXQoZy5jb3VudCl9YClcbiAgICAgICAgICAgICAgLmpvaW4oJywgJyl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaW5lcy5wdXNoKGNlbGxMaW5lKG9icywgJ21vc3RseSBjZWxsJykpO1xuICAgICAgaWYgKCFzICYmIHRoaXMucG9ydC5nZXRUcmFuc2NyaXB0U3VtbWFyeSkgbGluZXMucHVzaCgnbG9hZGluZyBkZXRhaWxz4oCmJyk7XG4gICAgICByZXR1cm4gbGluZXM7XG4gICAgfVxuICAgIGlmIChkLmtpbmQgPT09ICdpbmRpdmlkdWFsJykge1xuICAgICAgLy8gTmFtZWQgYnkgaXRzIGNvZGUgd2hlbiB0aGUgZGF0YXNldCBsaXN0cyBpdHMgZ2VuZXM7IGVsc2UgYnkgdGhlIHNlcnZlcidzIHN1bW1hcnkgb2ZcbiAgICAgIC8vIHRoZSBzcG90LCB3aGljaCBjYW4gbmFtZSBhIG5laWdoYm91cidzIGdlbmUuXG4gICAgICBjb25zdCBnZW5lID0gZC5nZW5lc1t0LmdlbmVbaV1dIHx8IHM/LnRvcEdlbmVzPy5bMF0/Lm5hbWU7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBnZW5lID8gYCR7Z2VuZX0gdHJhbnNjcmlwdGAgOiAnVHJhbnNjcmlwdCcsXG4gICAgICAgIGNlbGxMaW5lKG9icywgJ2luIGNlbGwnKSxcbiAgICAgICAgLi4uKCFzICYmIHRoaXMucG9ydC5nZXRUcmFuc2NyaXB0U3VtbWFyeSA/IFsnbG9hZGluZyBkZXRhaWxz4oCmJ10gOiBbXSksXG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBnZW5lID0gZC5nZW5lc1t0LmdlbmVbaV1dID8/ICd0cmFuc2NyaXB0JztcbiAgICBpZiAoZC5iaW4pIHtcbiAgICAgIGNvbnN0IHVtID0gZC5iaW4uc2l6ZSAqICh0aGlzLm1pY3JvbnNQZXJVbml0ID8/IDEpO1xuICAgICAgY29uc3QgZ3JvdXAgPSBkLmVudHJ5R3JvdXAgJiYgZC5ncm91cE5hbWVzID8gZC5ncm91cE5hbWVzW2QuZW50cnlHcm91cFtpXV0gOiBnZW5lO1xuICAgICAgY29uc3QgdG9wID0gcz8udG9wR2VuZXM/Lmxlbmd0aFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHMudG9wR2VuZXNcbiAgICAgICAgICAgICAgLnNsaWNlKDAsIDYpXG4gICAgICAgICAgICAgIC5tYXAoKGcpID0+IGAke2cubmFtZX0gJHtmbXQoZy5jb3VudCl9YClcbiAgICAgICAgICAgICAgLmpvaW4oJywgJyksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYCR7Z3JvdXB9IMK3ICR7Zm10KG4pfSB0cmFuc2NyaXB0JHtuID09PSAxID8gJycgOiAncyd9YCxcbiAgICAgICAgLi4uKGQuZ3JvdXBHZW5lcyA/IHRvcCA6IGdyb3VwICE9PSBnZW5lID8gW2Btb3N0bHkgJHtnZW5lfWBdIDogW10pLFxuICAgICAgICBgJHt1bS50b0ZpeGVkKDEpfSDDlyAke3VtLnRvRml4ZWQoMSl9IMK1bSBhcmVhIMK3IHpvb20gaW4gdG8gc3BsaXRgLFxuICAgICAgICAuLi4ob2JzID09PSBOT19PQlNFUlZBVElPTiAmJiBkLmdyb3VwR2VuZXMgPyBbXSA6IFtjZWxsTGluZShvYnMsICdtb3N0bHkgY2VsbCcpXSksXG4gICAgICAgIC4uLighcyAmJiBkLmdyb3VwR2VuZXMgJiYgdGhpcy5wb3J0LmdldFRyYW5zY3JpcHRTdW1tYXJ5ID8gWydsb2FkaW5nIGRldGFpbHPigKYnXSA6IFtdKSxcbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBuID4gMVxuICAgICAgPyBbYCR7Z2VuZX0gwrcgJHtmbXQobil9IHRyYW5zY3JpcHRzYCwgJ2dyb3VwZWQ6IHpvb20gaW4gdG8gc3BsaXQnLCBjZWxsTGluZShvYnMsICduZWFyIGNlbGwnKV1cbiAgICAgIDogW2Ake2dlbmV9IHRyYW5zY3JpcHRgLCBjZWxsTGluZShvYnMsICdpbiBjZWxsJyldO1xuICB9XG59XG5cbi8qKiBXaGF0IHRoZSB0cmFuc2NyaXB0IGxheWVyIGN1cnJlbnRseSBzaG93cyDigJQgd2hhdCBob3ZlcmluZyBuZWVkcyB0byBuYW1lIGEgbWFya2VyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmF3blRyYW5zY3JpcHRzIHtcbiAga2luZDogVHJhbnNjcmlwdEtpbmQ7XG4gIGJpbj86IFRyYW5zY3JpcHRCaW47XG4gIG1lcmdlZDogU3BhdGlhbFRyYW5zY3JpcHRUaWxlO1xuICAvKiogVGhlIGxheWVyIHRoZSBlbnRyaWVzIGFyZSBkcmF3biBpbiwgb25lIG1hcmtlciBwZXIgZW50cnkgaW4gdGhlIHNhbWUgb3JkZXIuICovXG4gIGxheWVyOiBQb2ludHNMYXllcjtcbiAgLyoqXG4gICAqIFRoZSBnZW5lcyB0aGUgZW50cmllcycgYGdlbmVgIGNvZGVzIGluZGV4OiB0aGUgc2VsZWN0aW9uJ3MsIG9yIGZvciBldmVyeSBnZW5lJ3MgaW5kaXZpZHVhbFxuICAgKiB0cmFuc2NyaXB0cyB0aGUgZGF0YXNldCdzIGdlbmUgbGlzdCAoYHRyYW5zY3JpcHRUaWxlcy5nZW5lc2A7IGVtcHR5IHdpdGhvdXQgb25lKS5cbiAgICovXG4gIGdlbmVzOiBzdHJpbmdbXTtcbiAgLyoqIEZvciBhIGdyb3VwZWQgZ2VuZSBzZWxlY3Rpb246IGVhY2ggZW50cnkncyBncm91cCwgYW5kIHRoZSBncm91cHMnIG5hbWVzLiAqL1xuICBlbnRyeUdyb3VwPzogSW50MzJBcnJheTtcbiAgZ3JvdXBOYW1lcz86IHN0cmluZ1tdO1xuICAvKiogRWFjaCBncm91cCdzIGdlbmVzLCB3aGVuIHRoZSBtYXJrZXJzIGNhbWUgZnJvbSB0aGUgZGVuc2l0eSBncmlkcyAoZm9yIHRoZSBob3ZlcikuICovXG4gIGdyb3VwR2VuZXM/OiBzdHJpbmdbXVtdO1xufVxuIl19
|