axidio-styleguide-library1-v2 0.3.15 → 0.3.17
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/horizontal-bars-with-scroll-zoom/horizontal-bars-with-scroll-zoom.component.mjs +37 -30
- package/fesm2022/axidio-styleguide-library1-v2.mjs +36 -29
- package/fesm2022/axidio-styleguide-library1-v2.mjs.map +1 -1
- package/lib/horizontal-bars-with-scroll-zoom/horizontal-bars-with-scroll-zoom.component.d.ts +1 -0
- package/package.json +1 -1
package/esm2022/lib/horizontal-bars-with-scroll-zoom/horizontal-bars-with-scroll-zoom.component.mjs
CHANGED
|
@@ -118,7 +118,7 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
118
118
|
const leftAxisWidth = 80;
|
|
119
119
|
const rightAxisWidth = this.CONSTANTS.RIGHT_SVG_WIDTH;
|
|
120
120
|
const availableWidth = containerWidth - leftAxisWidth - rightAxisWidth;
|
|
121
|
-
let width = availableWidth
|
|
121
|
+
let width = availableWidth;
|
|
122
122
|
let height = containerHeight * (this.chartConfiguration.svgHeight / 100) - margin.top - margin.bottom;
|
|
123
123
|
if (dataLength > this.CONSTANTS.ZOOM_THRESHOLD && this.isZoomedOut) {
|
|
124
124
|
const minWidth = dataLength * 25;
|
|
@@ -191,7 +191,6 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
191
191
|
.style('position', 'relative')
|
|
192
192
|
.style('width', '100%')
|
|
193
193
|
.style('height', `${totalHeight}px`); // Include X-label space
|
|
194
|
-
// Left Y-axis - Fixed
|
|
195
194
|
const leftAxisContainer = chartWrapper
|
|
196
195
|
.append('div')
|
|
197
196
|
.attr('class', 'left-axis-container')
|
|
@@ -199,7 +198,7 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
199
198
|
.style('left', '0')
|
|
200
199
|
.style('top', '0')
|
|
201
200
|
.style('width', '80px')
|
|
202
|
-
.style('height', `${dimensions.height + margin.top + margin.bottom}px`)
|
|
201
|
+
.style('height', `${dimensions.height + margin.top + margin.bottom}px`)
|
|
203
202
|
.style('background-color', 'var(--card-bg)')
|
|
204
203
|
.style('z-index', '10');
|
|
205
204
|
const svgYAxisLeft = leftAxisContainer
|
|
@@ -207,7 +206,7 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
207
206
|
.attr('width', '80')
|
|
208
207
|
.attr('height', dimensions.height + margin.top + margin.bottom)
|
|
209
208
|
.append('g')
|
|
210
|
-
.attr('transform', `translate(
|
|
209
|
+
.attr('transform', `translate(70,${margin.top})`);
|
|
211
210
|
// Right Y-axis - Fixed
|
|
212
211
|
const rightAxisContainer = chartWrapper
|
|
213
212
|
.append('div')
|
|
@@ -230,11 +229,11 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
230
229
|
.append('div')
|
|
231
230
|
.attr('class', 'scrollable-chart-container')
|
|
232
231
|
.style('position', 'absolute')
|
|
233
|
-
.style('left', '80px')
|
|
232
|
+
.style('left', '80px') // Exactly where left container ends
|
|
234
233
|
.style('right', `${this.CONSTANTS.RIGHT_SVG_WIDTH}px`)
|
|
235
234
|
.style('top', '0')
|
|
236
235
|
.style('width', 'auto')
|
|
237
|
-
.style('height', `${dimensions.height + margin.top + margin.bottom}px`)
|
|
236
|
+
.style('height', `${dimensions.height + margin.top + margin.bottom}px`)
|
|
238
237
|
.style('overflow-x', 'auto')
|
|
239
238
|
.style('overflow-y', 'hidden');
|
|
240
239
|
const innerContainer = scrollableContainer
|
|
@@ -274,11 +273,11 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
274
273
|
// X-scale starts from 0 (no left spacing for grid alignment)
|
|
275
274
|
const xScale = d3
|
|
276
275
|
.scaleBand()
|
|
277
|
-
.rangeRound([0, dimensions.requiredSvgWidth])
|
|
276
|
+
.rangeRound([0, dimensions.requiredSvgWidth])
|
|
278
277
|
.domain(data.map(d => d.name).reverse())
|
|
279
278
|
.paddingInner(paddingRatio)
|
|
280
|
-
.paddingOuter(0.
|
|
281
|
-
.align(0);
|
|
279
|
+
.paddingOuter(0.1) // Small padding for visual spacing
|
|
280
|
+
.align(0.5);
|
|
282
281
|
const xScaleFromOrigin = d3
|
|
283
282
|
.scaleBand()
|
|
284
283
|
.rangeRound([width, 0])
|
|
@@ -548,6 +547,30 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
548
547
|
}
|
|
549
548
|
return `${baseClass} lib-axis-waterfall-label`;
|
|
550
549
|
}
|
|
550
|
+
renderGridsFromLeftAxis(svgYAxisLeft, scales, dimensions) {
|
|
551
|
+
if (this.chartConfiguration.yAxisGrid) {
|
|
552
|
+
// Calculate how far the grid lines need to extend
|
|
553
|
+
// They start from the left Y-axis (at x=80) and go to the full width
|
|
554
|
+
const gridWidth = dimensions.requiredSvgWidth + 80 + this.CONSTANTS.RIGHT_SVG_WIDTH;
|
|
555
|
+
svgYAxisLeft
|
|
556
|
+
.append('g')
|
|
557
|
+
.attr('class', 'grid horizontal-grid-from-left')
|
|
558
|
+
.attr('transform', 'translate(0,0)')
|
|
559
|
+
.call(d3
|
|
560
|
+
.axisLeft(scales.yScale)
|
|
561
|
+
.ticks(this.chartConfiguration.numberOfYTicks)
|
|
562
|
+
.tickSize(-gridWidth) // Negative to extend right
|
|
563
|
+
.tickFormat(''))
|
|
564
|
+
.style('color', 'var(--chart-grid-color)')
|
|
565
|
+
.style('opacity', '1')
|
|
566
|
+
.call((g) => {
|
|
567
|
+
g.select('.domain').remove();
|
|
568
|
+
g.selectAll('.tick line')
|
|
569
|
+
.style('stroke', 'var(--chart-grid-color)')
|
|
570
|
+
.style('stroke-width', '1px');
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
}
|
|
551
574
|
applyConfigurationFlags() {
|
|
552
575
|
if (this.chartConfiguration.isHeaderVisible !== undefined) {
|
|
553
576
|
this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
|
|
@@ -582,6 +605,7 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
582
605
|
data.sort((a, b) => b.total - a.total);
|
|
583
606
|
const scales = this.createScales(data, layers, lineData, dimensions);
|
|
584
607
|
const axes = this.createAxes(scales);
|
|
608
|
+
this.renderGridsFromLeftAxis(svgYAxisLeft, scales, dimensions);
|
|
585
609
|
this.renderGrids(svg, scales, dimensions);
|
|
586
610
|
const rect = this.renderBars(svg, layers, scales, metaData, dimensions);
|
|
587
611
|
this.renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, data);
|
|
@@ -601,23 +625,6 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
601
625
|
.style('color', '#999999')
|
|
602
626
|
.call((g) => g.select('.domain').remove());
|
|
603
627
|
}
|
|
604
|
-
if (this.chartConfiguration.yAxisGrid) {
|
|
605
|
-
const gridWidth = dimensions.requiredSvgWidth;
|
|
606
|
-
svg
|
|
607
|
-
.append('g')
|
|
608
|
-
.attr('class', 'grid horizontal-grid')
|
|
609
|
-
.attr('transform', 'translate(0,0)')
|
|
610
|
-
.call(d3
|
|
611
|
-
.axisLeft(scales.yScale)
|
|
612
|
-
.ticks(this.chartConfiguration.numberOfYTicks)
|
|
613
|
-
.tickSize(-gridWidth)
|
|
614
|
-
.tickFormat(''))
|
|
615
|
-
.style('color', 'var(--chart-grid-color)')
|
|
616
|
-
.style('opacity', '1')
|
|
617
|
-
.call((g) => {
|
|
618
|
-
g.select('.domain').remove();
|
|
619
|
-
});
|
|
620
|
-
}
|
|
621
628
|
if (this.chartConfiguration.xAxisGrid) {
|
|
622
629
|
for (let j = 0; j < this.chartConfiguration.xAxisGrid.length; j++) {
|
|
623
630
|
svg
|
|
@@ -673,7 +680,7 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
673
680
|
textElement.text(text.substring(0, 10) + '...');
|
|
674
681
|
}
|
|
675
682
|
});
|
|
676
|
-
// Ensure X-axis line
|
|
683
|
+
// Ensure X-axis line starts exactly at x=0
|
|
677
684
|
xAxisGroup
|
|
678
685
|
.select('.domain')
|
|
679
686
|
.style('stroke', 'var(--chart-axis-color)')
|
|
@@ -1027,11 +1034,11 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
1027
1034
|
this.isZoomOutSelected(isZoomOut);
|
|
1028
1035
|
}
|
|
1029
1036
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalBarsWithScrollZoomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1030
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HorizontalBarsWithScrollZoomComponent, selector: "lib-horizontal-bars-with-scroll-zoom", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "containerElt", first: true, predicate: ["verticalstackedchartcontainer"], descendants: true, static: true }, { propertyName: "verticalstackedcontainerElt", first: true, predicate: ["verticalstackedcontainer"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<meta http-equiv=\"CACHE-CONTROL\" content=\"NO-CACHE\" />\r\n<meta http-equiv=\"EXPIRES\" content=\"Sat, 01 Jun 2004 11:12:01 GMT\" />\r\n<div\r\n #verticalstackedcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"verticalstackedchartcontainer\"\r\n #verticalstackedchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:12px}.lib-axis-group-label{font-size:12px;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:11px;line-height:13px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1;padding:4px 8px;box-sizing:border-box}.title-top-text{color:var(--font-color)!important;font-size:12px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:14px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:11px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}.lib-xaxis-labels-texts-drilldown,.lib-xaxis-labels-texts-drilldown-alt,.lib-xaxis-labels-texts-weeklycharts{font-size:12px}.lib-display-hidden{display:none!important}.chart-wrapper-main{position:relative;width:100%;box-sizing:border-box}.left-axis-container,.right-axis-container{pointer-events:none;overflow:hidden;-webkit-user-select:none;user-select:none}.scrollable-chart-container{-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.scrollable-chart-container::-webkit-scrollbar{height:8px}.scrollable-chart-container::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb:hover{background:#555}.inner-chart-container{position:relative}.grid line{stroke-width:1;shape-rendering:crispEdges}.horizontal-grid line{stroke-opacity:.7}.vertical-grid line{stroke-opacity:.7}.lib-y-axis-hidden{opacity:0!important;pointer-events:none}.lib-stacked-x-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}.lib-stacked-y-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-y-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}@media (max-width: 1024px){.scrollable-chart-container::-webkit-scrollbar{height:6px}.lib-stacked-x-axis-text text{font-size:10px}}@media (max-width: 768px){.scrollable-chart-container::-webkit-scrollbar{height:4px}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ResizedDirective, selector: "[resized]", outputs: ["resized"] }, { kind: "component", type: i3.ChartHeaderV2Component, selector: "lib-chart-header-v2", inputs: ["chartData", "chartConfiguration"], outputs: ["clickEvent", "zoomInZoomOutClick"] }, { kind: "component", type: i4.ChartHeaderV3Component, selector: "lib-chart-header-v3", inputs: ["chartData", "chartConfiguration"], outputs: ["compareByFilterSelection", "zoomInZoomOutClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
1037
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HorizontalBarsWithScrollZoomComponent, selector: "lib-horizontal-bars-with-scroll-zoom", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "containerElt", first: true, predicate: ["verticalstackedchartcontainer"], descendants: true, static: true }, { propertyName: "verticalstackedcontainerElt", first: true, predicate: ["verticalstackedcontainer"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<meta http-equiv=\"CACHE-CONTROL\" content=\"NO-CACHE\" />\r\n<meta http-equiv=\"EXPIRES\" content=\"Sat, 01 Jun 2004 11:12:01 GMT\" />\r\n<div\r\n #verticalstackedcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"verticalstackedchartcontainer\"\r\n #verticalstackedchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:12px}.lib-axis-group-label{font-size:12px;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:11px;line-height:13px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1;padding:4px 8px;box-sizing:border-box}.title-top-text{color:var(--font-color)!important;font-size:12px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:14px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:11px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}.lib-xaxis-labels-texts-drilldown,.lib-xaxis-labels-texts-drilldown-alt,.lib-xaxis-labels-texts-weeklycharts{font-size:12px}.lib-display-hidden{display:none!important}.chart-wrapper-main{position:relative;width:100%;box-sizing:border-box}.left-axis-container,.right-axis-container{pointer-events:none;overflow:hidden;-webkit-user-select:none;user-select:none}.scrollable-chart-container{-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.scrollable-chart-container::-webkit-scrollbar{height:8px}.scrollable-chart-container::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb:hover{background:#555}.inner-chart-container{position:relative}.grid line{stroke-width:1;shape-rendering:crispEdges}.horizontal-grid line{stroke-opacity:.7}.vertical-grid line{stroke-opacity:.7}.lib-y-axis-hidden{opacity:0!important;pointer-events:none}.lib-stacked-x-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}.lib-stacked-y-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-y-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}@media (max-width: 1024px){.scrollable-chart-container::-webkit-scrollbar{height:6px}.lib-stacked-x-axis-text text{font-size:10px}}@media (max-width: 768px){.scrollable-chart-container::-webkit-scrollbar{height:4px}}.left-axis-container svg{pointer-events:none;overflow:visible!important}.horizontal-grid-from-left line{pointer-events:none}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ResizedDirective, selector: "[resized]", outputs: ["resized"] }, { kind: "component", type: i3.ChartHeaderV2Component, selector: "lib-chart-header-v2", inputs: ["chartData", "chartConfiguration"], outputs: ["clickEvent", "zoomInZoomOutClick"] }, { kind: "component", type: i4.ChartHeaderV3Component, selector: "lib-chart-header-v3", inputs: ["chartData", "chartConfiguration"], outputs: ["compareByFilterSelection", "zoomInZoomOutClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
1031
1038
|
}
|
|
1032
1039
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalBarsWithScrollZoomComponent, decorators: [{
|
|
1033
1040
|
type: Component,
|
|
1034
|
-
args: [{ selector: 'lib-horizontal-bars-with-scroll-zoom', encapsulation: ViewEncapsulation.None, template: "<meta http-equiv=\"CACHE-CONTROL\" content=\"NO-CACHE\" />\r\n<meta http-equiv=\"EXPIRES\" content=\"Sat, 01 Jun 2004 11:12:01 GMT\" />\r\n<div\r\n #verticalstackedcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"verticalstackedchartcontainer\"\r\n #verticalstackedchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:12px}.lib-axis-group-label{font-size:12px;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:11px;line-height:13px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1;padding:4px 8px;box-sizing:border-box}.title-top-text{color:var(--font-color)!important;font-size:12px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:14px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:11px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}.lib-xaxis-labels-texts-drilldown,.lib-xaxis-labels-texts-drilldown-alt,.lib-xaxis-labels-texts-weeklycharts{font-size:12px}.lib-display-hidden{display:none!important}.chart-wrapper-main{position:relative;width:100%;box-sizing:border-box}.left-axis-container,.right-axis-container{pointer-events:none;overflow:hidden;-webkit-user-select:none;user-select:none}.scrollable-chart-container{-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.scrollable-chart-container::-webkit-scrollbar{height:8px}.scrollable-chart-container::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb:hover{background:#555}.inner-chart-container{position:relative}.grid line{stroke-width:1;shape-rendering:crispEdges}.horizontal-grid line{stroke-opacity:.7}.vertical-grid line{stroke-opacity:.7}.lib-y-axis-hidden{opacity:0!important;pointer-events:none}.lib-stacked-x-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}.lib-stacked-y-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-y-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}@media (max-width: 1024px){.scrollable-chart-container::-webkit-scrollbar{height:6px}.lib-stacked-x-axis-text text{font-size:10px}}@media (max-width: 768px){.scrollable-chart-container::-webkit-scrollbar{height:4px}}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
|
|
1041
|
+
args: [{ selector: 'lib-horizontal-bars-with-scroll-zoom', encapsulation: ViewEncapsulation.None, template: "<meta http-equiv=\"CACHE-CONTROL\" content=\"NO-CACHE\" />\r\n<meta http-equiv=\"EXPIRES\" content=\"Sat, 01 Jun 2004 11:12:01 GMT\" />\r\n<div\r\n #verticalstackedcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"verticalstackedchartcontainer\"\r\n #verticalstackedchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:12px}.lib-axis-group-label{font-size:12px;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:11px;line-height:13px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1;padding:4px 8px;box-sizing:border-box}.title-top-text{color:var(--font-color)!important;font-size:12px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:14px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:11px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}.lib-xaxis-labels-texts-drilldown,.lib-xaxis-labels-texts-drilldown-alt,.lib-xaxis-labels-texts-weeklycharts{font-size:12px}.lib-display-hidden{display:none!important}.chart-wrapper-main{position:relative;width:100%;box-sizing:border-box}.left-axis-container,.right-axis-container{pointer-events:none;overflow:hidden;-webkit-user-select:none;user-select:none}.scrollable-chart-container{-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.scrollable-chart-container::-webkit-scrollbar{height:8px}.scrollable-chart-container::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb:hover{background:#555}.inner-chart-container{position:relative}.grid line{stroke-width:1;shape-rendering:crispEdges}.horizontal-grid line{stroke-opacity:.7}.vertical-grid line{stroke-opacity:.7}.lib-y-axis-hidden{opacity:0!important;pointer-events:none}.lib-stacked-x-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}.lib-stacked-y-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-y-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}@media (max-width: 1024px){.scrollable-chart-container::-webkit-scrollbar{height:6px}.lib-stacked-x-axis-text text{font-size:10px}}@media (max-width: 768px){.scrollable-chart-container::-webkit-scrollbar{height:4px}}.left-axis-container svg{pointer-events:none;overflow:visible!important}.horizontal-grid-from-left line{pointer-events:none}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
|
|
1035
1042
|
}], ctorParameters: () => [], propDecorators: { containerElt: [{
|
|
1036
1043
|
type: ViewChild,
|
|
1037
1044
|
args: ['verticalstackedchartcontainer', { static: true }]
|
|
@@ -1047,4 +1054,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1047
1054
|
}], headerMenuclickEvent: [{
|
|
1048
1055
|
type: Output
|
|
1049
1056
|
}] } });
|
|
1050
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQW1EbEQsTUFBTSxPQUFPLHFDQUNYLFNBQVEsaUJBQWlCO0lBZ0Z6QjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBdEVBLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFekQsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUMzQixhQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxD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QXFDLDRqQkNsRWxELG9uQ0ErQkE7OzRGRG1DYSxxQ0FBcUM7a0JBVGpELFNBQVM7K0JBQ0Usc0NBQXNDLGlCQU1qQyxpQkFBaUIsQ0FBQyxJQUFJO3dEQU9yQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMsK0JBQStCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk1RCwyQkFBMkI7c0JBRDFCLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUc5QyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIE9uQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG4vLyBUeXBlc1xyXG5pbnRlcmZhY2UgQ2hhcnREYXRhIHtcclxuICBkYXRhOiBhbnlbXTtcclxuICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YTtcclxuICBsaW5lRGF0YT86IGFueVtdO1xyXG4gIHRhcmdldExpbmVEYXRhPzogVGFyZ2V0TGluZURhdGE7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDaGFydE1ldGFEYXRhIHtcclxuICB1bml0Pzogc3RyaW5nO1xyXG4gIGlzQ0M/OiBib29sZWFuO1xyXG4gIGJhcldpdGhvdXRDbGljaz86IHN0cmluZ1tdO1xyXG4gIGNvbG9yczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICBrZXlMaXN0OiBzdHJpbmdbXTtcclxuICBkYXRhVHlwZT86IHN0cmluZztcclxuICBoYXNEcmlsbERvd24/OiBib29sZWFuO1xyXG4gIGhvdmVyQ29sb3I/OiBzdHJpbmc7XHJcbiAgeUxhYmVsPzogc3RyaW5nO1xyXG4gIHhMYWJlbD86IHN0cmluZztcclxuICBsaW5leUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGFyZ2V0TGluZURhdGEge1xyXG4gIHRhcmdldDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgdGFyZ2V0TmFtZT86IHN0cmluZztcclxuICBiYXJBYm92ZVRhcmdldENvbG9yPzogc3RyaW5nO1xyXG4gIGJhckFib3ZlVGFyZ2V0SG92ZXJDb2xvcj86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIERpbWVuc2lvbnMge1xyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcclxuICBjb250YWluZXJIZWlnaHQ6IG51bWJlcjtcclxuICBiYXJXaWR0aDogbnVtYmVyO1xyXG4gIGJhclBhZGRpbmc6IG51bWJlcjtcclxuICByZXF1aXJlZFN2Z1dpZHRoOiBudW1iZXI7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEJhcnNXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgXHJcbiAgQFZpZXdDaGlsZCgndmVydGljYWxzdGFja2VkY2hhcnRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdmVydGljYWxzdGFja2VkY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBDaGFydERhdGEgfCBhbnkgO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBpc1RvcENhcHRpb25WaXNpYmxlID0gdHJ1ZTtcclxuICB1bmlxdWVJZCA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIGlzQ0MgPSBmYWxzZTtcclxuICBpc1pvb21lZE91dCA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQ09OU1RBTlRTID0ge1xyXG4gICAgUklHSFRfU1ZHX1dJRFRIOiA2MCxcclxuICAgIExFRlRfUklHSFRfU1BBQ0VTOiA1MCxcclxuICAgIFNIT1JUX1RJQ0tfTEVOR1RIOiA0LFxyXG4gICAgTE9OR19USUNLX0xFTkdUSDogMTYsXHJcbiAgICBTSE9SVF9USUNLX0xFTkdUSF9CRzogNSxcclxuICAgIExPTkdfVElDS19MRU5HVEhfQkc6IDMwLFxyXG4gICAgREVTS1RPUF9CQVJfV0lEVEg6IDQwLCAgICAgIC8vIERlc2t0b3AgYmFyIHdpZHRoXHJcbiAgICBNT0JJTEVfQkFSX1dJRFRIOiAyNSwgICAgICAgLy8gTW9iaWxlL1RhYmxldCBiYXIgd2lkdGggKHJlZHVjZWQpXHJcbiAgICBCQVJfR0FQOiAzMCwgICAgICAgICAgICAgICAgLy8gR2FwIGJldHdlZW4gYmFycyAoaW5jcmVhc2VkIGZvciBiZXR0ZXIgc2VwYXJhdGlvbilcclxuICAgIFpPT01fVEhSRVNIT0xEOiAzMCxcclxuICAgIFpPT01fSU5fVEhSRVNIT0xEOiA4LFxyXG4gIH07XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uID0ge1xyXG4gICAgbWFyZ2luOiB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogNDAgfSxcclxuICAgIHN2Z0hlaWdodDogNzAsXHJcbiAgICBsZWdlbmRIZWlnaHQ6ICcxMCUnLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsYWJlbEZvcm1hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHhBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBsaW5lR3JhcGhDb2xvcjogJyNGNkQyODMnLFxyXG4gICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICBzaG93TGVnZW5kOiBmYWxzZSxcclxuICAgIGZvckNvbXBhcmlzb246IHRydWUsXHJcbiAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICAgIHlBeGlzR3JpZDogZmFsc2UsXHJcbiAgICAvLyBPcHRpb25hbCBjb25maWdzIHdpdGggdW5kZWZpbmVkIGRlZmF1bHRzXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc1RvcENhcHRpb25WaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzRGFzaGVkOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzQ29sb3I6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIHNob3dUb3RhbE9uVG9wOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZW5kRm9ybWF0dGVySGFzUHJpb3JpdHk6IHVuZGVmaW5lZCxcclxuICAgIHNob3dBbmdsZWRMYWJlbHM6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBzaG93WGF4aXNUb3A6IHVuZGVmaW5lZCxcclxuICAgIHhBeGlzR3JpZDogdW5kZWZpbmVkLFxyXG4gICAgeExhYmVsc09uU2FtZUxpbmU6IHVuZGVmaW5lZCxcclxuICAgIGhpZGVYYXhpc1RpY2s6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHVuZGVmaW5lZCxcclxuICAgIGlzVGFyZ2V0TGluZTogdW5kZWZpbmVkLFxyXG4gICAgZGlzcGxheVRpdGxlT25Ub3A6IHVuZGVmaW5lZCxcclxuICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNUaXRsZUhpZGRlbjogdW5kZWZpbmVkLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5yZW1vdmVFeGlzdGluZ0NoYXJ0KCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVTdGFja2VkQ2hhcnQoKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVFeGlzdGluZ0NoYXJ0KCk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVFeGlzdGluZ0NoYXJ0KCkge1xyXG4gICAgZDMuc2VsZWN0KCcjJyArIHRoaXMudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXJnZUNvbmZpZ3VyYXRpb25zKCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltrZXldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGtleSxcclxuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVNZXRhRGF0YShtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSk6IENoYXJ0TWV0YURhdGEge1xyXG4gICAgaWYgKCFtZXRhRGF0YS51bml0KSBtZXRhRGF0YS51bml0ID0gJyc7XHJcbiAgICBpZiAobWV0YURhdGEuaXNDQykgdGhpcy5pc0NDID0gbWV0YURhdGEuaXNDQztcclxuICAgIFxyXG4gICAgaWYgKG1ldGFEYXRhLmJhcldpdGhvdXRDbGljaz8ubGVuZ3RoKSB7XHJcbiAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljayA9IG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5tYXAoZWwgPT4gZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgPSBbXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIG1ldGFEYXRhO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlRGltZW5zaW9ucyhcclxuICBjaGFydENvbnRhaW5lcjogYW55LFxyXG4gIHZlcnRpY2FsQ29udGFpbmVyOiBhbnksXHJcbiAgbWFyZ2luOiBhbnksXHJcbiAgZGF0YUxlbmd0aDogbnVtYmVyXHJcbik6IERpbWVuc2lvbnMge1xyXG4gIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY2hhcnRDb250YWluZXIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHZlcnRpY2FsQ29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgXHJcbiAgY29uc3QgbGVmdEF4aXNXaWR0aCA9IDgwO1xyXG4gIGNvbnN0IHJpZ2h0QXhpc1dpZHRoID0gdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIO1xyXG4gIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmVyV2lkdGggLSBsZWZ0QXhpc1dpZHRoIC0gcmlnaHRBeGlzV2lkdGg7XHJcbiAgXHJcbiAgbGV0IHdpZHRoID0gYXZhaWxhYmxlV2lkdGggLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcclxuICBsZXQgaGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0ICogKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAvIDEwMCkgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTtcclxuXHJcbiAgaWYgKGRhdGFMZW5ndGggPiB0aGlzLkNPTlNUQU5UUy5aT09NX1RIUkVTSE9MRCAmJiB0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICBjb25zdCBtaW5XaWR0aCA9IGRhdGFMZW5ndGggKiAyNTtcclxuICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIG1pbldpZHRoKTtcclxuICB9XHJcblxyXG4gIGlmIChkYXRhTGVuZ3RoID4gdGhpcy5DT05TVEFOVFMuWk9PTV9JTl9USFJFU0hPTEQgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHdpZHRoID0gZGF0YUxlbmd0aCAqIDEzMDtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4pIHtcclxuICAgIGhlaWdodCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAhPT0gODBcclxuICAgICAgPyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcclxuICAgICAgOiBjb250YWluZXJIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgaGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b20gLSAxMzA7XHJcbiAgfVxyXG5cclxuICBjb25zdCBpc01vYmlsZU9yVGFibGV0ID0gd2luZG93LmlubmVyV2lkdGggPCAxMDI0O1xyXG4gIGxldCBiYXJXaWR0aDogbnVtYmVyO1xyXG4gIGxldCBiYXJQYWRkaW5nOiBudW1iZXI7XHJcbiAgXHJcbiAgaWYgKGlzTW9iaWxlT3JUYWJsZXQpIHtcclxuICAgIGlmIChkYXRhTGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGJhcldpZHRoID0gNjA7XHJcbiAgICAgIGJhclBhZGRpbmcgPSAwO1xyXG4gICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID09PSAyKSB7XHJcbiAgICAgIGJhcldpZHRoID0gNTA7XHJcbiAgICAgIGJhclBhZGRpbmcgPSA0NTtcclxuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMykge1xyXG4gICAgICBiYXJXaWR0aCA9IDQ1O1xyXG4gICAgICBiYXJQYWRkaW5nID0gNDA7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPD0gNSkge1xyXG4gICAgICBiYXJXaWR0aCA9IDM1O1xyXG4gICAgICBiYXJQYWRkaW5nID0gMzA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiYXJXaWR0aCA9IDI1O1xyXG4gICAgICBiYXJQYWRkaW5nID0gMjU7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGJhcldpZHRoID0gdGhpcy5DT05TVEFOVFMuREVTS1RPUF9CQVJfV0lEVEg7XHJcbiAgICBiYXJQYWRkaW5nID0gdGhpcy5DT05TVEFOVFMuQkFSX0dBUDtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgdG90YWxCYXJzV2lkdGggPSBiYXJXaWR0aCAqIGRhdGFMZW5ndGg7XHJcbiAgY29uc3QgdG90YWxHYXBzID0gYmFyUGFkZGluZyAqIChkYXRhTGVuZ3RoIC0gMSk7XHJcbiAgY29uc3QgbWluUmVxdWlyZWRXaWR0aCA9IHRvdGFsQmFyc1dpZHRoICsgdG90YWxHYXBzICsgKHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMik7XHJcbiAgY29uc3QgcmVxdWlyZWRTdmdXaWR0aCA9IE1hdGgubWF4KGF2YWlsYWJsZVdpZHRoLCBtaW5SZXF1aXJlZFdpZHRoKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHdpZHRoLFxyXG4gICAgaGVpZ2h0LFxyXG4gICAgY29udGFpbmVyV2lkdGgsXHJcbiAgICBjb250YWluZXJIZWlnaHQsXHJcbiAgICBiYXJXaWR0aCxcclxuICAgIGJhclBhZGRpbmcsXHJcbiAgICByZXF1aXJlZFN2Z1dpZHRoLFxyXG4gIH07XHJcbn1cclxuXHJcbnByaXZhdGUgY3JlYXRlU3ZnQ29udGFpbmVycyhcclxuICBjaGFydENvbnRhaW5lcjogYW55LFxyXG4gIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgbWFyZ2luOiBhbnksXHJcbiAgaGFzWExhYmVsOiBib29sZWFuICAvLyBBZGQgdGhpcyBwYXJhbWV0ZXJcclxuKSB7XHJcbiAgLy8gQ2FsY3VsYXRlIHRvdGFsIGhlaWdodCBpbmNsdWRpbmcgc3BhY2UgZm9yIFgtYXhpcyBsYWJlbCBpZiBwcmVzZW50XHJcbiAgY29uc3QgeExhYmVsU3BhY2UgPSBoYXNYTGFiZWwgPyAzMCA6IDA7XHJcbiAgY29uc3QgdG90YWxIZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgeExhYmVsU3BhY2U7XHJcblxyXG4gIC8vIE1haW4gd3JhcHBlclxyXG4gIGNvbnN0IGNoYXJ0V3JhcHBlciA9IGNoYXJ0Q29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLmF0dHIoJ2lkJywgdGhpcy51bmlxdWVJZClcclxuICAgIC5hdHRyKCdjbGFzcycsICdjaGFydC13cmFwcGVyLW1haW4nKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHt0b3RhbEhlaWdodH1weGApOyAgLy8gSW5jbHVkZSBYLWxhYmVsIHNwYWNlXHJcblxyXG4gIC8vIExlZnQgWS1heGlzIC0gRml4ZWRcclxuICBjb25zdCBsZWZ0QXhpc0NvbnRhaW5lciA9IGNoYXJ0V3JhcHBlclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsZWZ0LWF4aXMtY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgLnN0eWxlKCd0b3AnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgJzgwcHgnKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHtkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tfXB4YCkgIC8vIEV4Y2x1ZGUgWC1sYWJlbCBzcGFjZVxyXG4gICAgLnN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ3ZhcigtLWNhcmQtYmcpJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsICcxMCcpO1xyXG5cclxuICBjb25zdCBzdmdZQXhpc0xlZnQgPSBsZWZ0QXhpc0NvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnc3ZnJylcclxuICAgIC5hdHRyKCd3aWR0aCcsICc4MCcpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSlcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdCArIDEwfSwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAvLyBSaWdodCBZLWF4aXMgLSBGaXhlZFxyXG4gIGNvbnN0IHJpZ2h0QXhpc0NvbnRhaW5lciA9IGNoYXJ0V3JhcHBlclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdyaWdodC1heGlzLWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgncmlnaHQnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3RvcCcsICcwJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCBgJHt0aGlzLkNPTlNUQU5UUy5SSUdIVF9TVkdfV0lEVEh9cHhgKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHtkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tfXB4YCkgIC8vIEV4Y2x1ZGUgWC1sYWJlbCBzcGFjZVxyXG4gICAgLnN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ3ZhcigtLWNhcmQtYmcpJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsICcxMCcpO1xyXG5cclxuICBjb25zdCBzdmdZQXhpc1JpZ2h0ID0gcmlnaHRBeGlzQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgLy8gU2Nyb2xsYWJsZSBtaWRkbGUgYXJlYVxyXG4gIGNvbnN0IHNjcm9sbGFibGVDb250YWluZXIgPSBjaGFydFdyYXBwZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnc2Nyb2xsYWJsZS1jaGFydC1jb250YWluZXInKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ2xlZnQnLCAnODBweCcpXHJcbiAgICAuc3R5bGUoJ3JpZ2h0JywgYCR7dGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIfXB4YClcclxuICAgIC5zdHlsZSgndG9wJywgJzAnKVxyXG4gICAgLnN0eWxlKCd3aWR0aCcsICdhdXRvJylcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7ZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbX1weGApICAvLyBFeGNsdWRlIFgtbGFiZWwgc3BhY2VcclxuICAgIC5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJylcclxuICAgIC5zdHlsZSgnb3ZlcmZsb3cteScsICdoaWRkZW4nKTtcclxuXHJcbiAgY29uc3QgaW5uZXJDb250YWluZXIgPSBzY3JvbGxhYmxlQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2lubmVyLWNoYXJ0LWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ21pbi13aWR0aCcsICcxMDAlJyk7XHJcblxyXG4gIGNvbnN0IHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgZGltZW5zaW9ucy5yZXF1aXJlZFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAzMClcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAvLyBGaXhlZCBib3R0b20gY29udGFpbmVyIGZvciBYLWF4aXMgbGFiZWxcclxuICBjb25zdCBib3R0b21MYWJlbENvbnRhaW5lciA9IGNoYXJ0V3JhcHBlclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdib3R0b20tbGFiZWwtY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgLnN0eWxlKCdsZWZ0JywgJzgwcHgnKVxyXG4gICAgLnN0eWxlKCdyaWdodCcsIGAke3RoaXMuQ09OU1RBTlRTLlJJR0hUX1NWR19XSURUSH1weGApXHJcbiAgICAuc3R5bGUoJ2JvdHRvbScsICcwJylcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7eExhYmVsU3BhY2V9cHhgKVxyXG4gICAgLnN0eWxlKCdkaXNwbGF5JywgJ2ZsZXgnKVxyXG4gICAgLnN0eWxlKCdqdXN0aWZ5LWNvbnRlbnQnLCAnY2VudGVyJylcclxuICAgIC5zdHlsZSgnYWxpZ24taXRlbXMnLCAnY2VudGVyJylcclxuICAgIC5zdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsICd2YXIoLS1jYXJkLWJnKScpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCAnMTAnKTtcclxuXHJcbiAgcmV0dXJuIHsgc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGlubmVyQ29udGFpbmVyLCBib3R0b21MYWJlbENvbnRhaW5lciB9O1xyXG59XHJcblxyXG5wcml2YXRlIGNyZWF0ZVNjYWxlcyhcclxuICBkYXRhOiBhbnlbXSxcclxuICBsYXllcnM6IGFueVtdLFxyXG4gIGxpbmVEYXRhOiBhbnlbXSxcclxuICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbikge1xyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgYmFyV2lkdGgsIGJhclBhZGRpbmcgfSA9IGRpbWVuc2lvbnM7XHJcbiAgXHJcbiAgLy8gQ2FsY3VsYXRlIGJhciBwb3NpdGlvbmluZ1xyXG4gIGNvbnN0IHRvdGFsQmFyc1dpZHRoID0gZGF0YS5sZW5ndGggKiBiYXJXaWR0aDtcclxuICBjb25zdCB0b3RhbFNwYWNpbmcgPSAoZGF0YS5sZW5ndGggLSAxKSAqIGJhclBhZGRpbmc7XHJcbiAgY29uc3QgcmVxdWlyZWRXaWR0aCA9IHRvdGFsQmFyc1dpZHRoICsgdG90YWxTcGFjaW5nICsgKHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMik7XHJcbiAgY29uc3QgZWZmZWN0aXZlV2lkdGggPSBNYXRoLm1heCh3aWR0aCwgcmVxdWlyZWRXaWR0aCk7XHJcbiAgXHJcbiAgY29uc3QgcGFkZGluZ1JhdGlvID0gYmFyUGFkZGluZyAvIChiYXJXaWR0aCArIGJhclBhZGRpbmcpO1xyXG4gIFxyXG4gIC8vIFgtc2NhbGUgc3RhcnRzIGZyb20gMCAobm8gbGVmdCBzcGFjaW5nIGZvciBncmlkIGFsaWdubWVudClcclxuICBjb25zdCB4U2NhbGUgPSBkM1xyXG4gICAgLnNjYWxlQmFuZCgpXHJcbiAgICAucmFuZ2VSb3VuZChbMCwgZGltZW5zaW9ucy5yZXF1aXJlZFN2Z1dpZHRoXSkgIC8vIEZ1bGwgd2lkdGggZnJvbSAwXHJcbiAgICAuZG9tYWluKGRhdGEubWFwKGQgPT4gZC5uYW1lKS5yZXZlcnNlKCkpXHJcbiAgICAucGFkZGluZ0lubmVyKHBhZGRpbmdSYXRpbylcclxuICAgIC5wYWRkaW5nT3V0ZXIoMC4wNSlcclxuICAgIC5hbGlnbigwKTtcclxuXHJcbiAgY29uc3QgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAuc2NhbGVCYW5kKClcclxuICAgIC5yYW5nZVJvdW5kKFt3aWR0aCwgMF0pXHJcbiAgICAuZG9tYWluKGRhdGEubWFwKGQgPT4gZC5uYW1lKS5yZXZlcnNlKCkpO1xyXG5cclxuICBjb25zdCB5U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG4gIFxyXG4gIGxldCBtYXhWYWx1ZSA9IGQzLm1heChsYXllcnMsIChkOiBhbnkpID0+IGQzLm1heChkLCAoZDogYW55KSA9PiBkWzFdKSk7XHJcbiAgXHJcbiAgaWYgKG1heFZhbHVlID09PSAwKSB7XHJcbiAgICBtYXhWYWx1ZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhIFxyXG4gICAgICA/IE51bWJlcih0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpICsgMjAgXHJcbiAgICAgIDogMTAwO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgbWF4VmFsdWUgKj0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmIG1heFZhbHVlIDwgTnVtYmVyKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IE51bWJlcih0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG4gICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSA8IDEwICYmIHRhcmdldCA8IDEwID8gdGFyZ2V0ICsgMyA6IHRhcmdldCArIDIwO1xyXG4gIH1cclxuXHJcbiAgeVNjYWxlLmRvbWFpbihbMCwgbWF4VmFsdWVdKS5uaWNlKCk7XHJcblxyXG4gIGxldCBsaW5lWXNjYWxlID0gbnVsbDtcclxuICBpZiAobGluZURhdGEpIHtcclxuICAgIGxpbmVZc2NhbGUgPSBkM1xyXG4gICAgICAuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFswLCBkMy5tYXgobGluZURhdGEsIGQgPT4gK2QudmFsdWUpXSlcclxuICAgICAgLnJhbmdlKFtoZWlnaHQsIDBdKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB7IHhTY2FsZSwgeFNjYWxlRnJvbU9yaWdpbiwgeVNjYWxlLCBsaW5lWXNjYWxlIH07XHJcbn1cclxuXHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQXhlcyhzY2FsZXM6IGFueSkge1xyXG4gICAgY29uc3QgeEF4aXMgPSBkM1xyXG4gICAgICAuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgICBjb25zdCB5QXhpcyA9IGQzXHJcbiAgICAgIC5heGlzTGVmdChzY2FsZXMueVNjYWxlKVxyXG4gICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja0Zvcm1hdCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICAgIGxldCB5TGluZUF4aXMgPSBudWxsO1xyXG4gICAgaWYgKHNjYWxlcy5saW5lWXNjYWxlKSB7XHJcbiAgICAgIHlMaW5lQXhpcyA9IGQzXHJcbiAgICAgICAgLmF4aXNSaWdodChzY2FsZXMubGluZVlzY2FsZSlcclxuICAgICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUxpbmVBeGlzTGFiZWxGb21hdHRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgeEF4aXMsIHlBeGlzLCB5TGluZUF4aXMgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQmFycyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgbGF5ZXJzOiBhbnlbXSxcclxuICAgIHNjYWxlczogYW55LFxyXG4gICAgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbiAgKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCcubGF5ZXInKVxyXG4gICAgICAuZGF0YShsYXllcnMpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGF5ZXInKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogYW55KSA9PiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldKTtcclxuXHJcbiAgICBjb25zdCByZWN0ID0gbGF5ZXJcclxuICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5kYXRhKChkOiBhbnkpID0+IGQpXHJcbiAgICAgIC5lbnRlcigpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kUmVjdGFuZ2xlcyhyZWN0LCBzY2FsZXMsIG1ldGFEYXRhLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMuYWRkSW50ZXJhY3Rpb25zKHJlY3QsIHN2ZywgbWV0YURhdGEsIHNjYWxlcyk7XHJcbiAgICBcclxuICAgIHJldHVybiByZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRSZWN0YW5nbGVzKFxyXG4gIHJlY3Q6IGFueSxcclxuICBzY2FsZXM6IGFueSxcclxuICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSxcclxuICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbikge1xyXG4gIGNvbnN0IHsgYmFyV2lkdGgsIGJhclBhZGRpbmcgfSA9IGRpbWVuc2lvbnM7XHJcbiAgY29uc3QgeyB4U2NhbGUsIHlTY2FsZSB9ID0gc2NhbGVzO1xyXG5cclxuICByZWN0XHJcbiAgICAuYXBwZW5kKCdyZWN0JylcclxuICAgIC5vbignY2xpY2snLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5jaGFydERhdGEubGluZURhdGEgfHwgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZm9yQ29tcGFyaXNvbikge1xyXG4gICAgICAgIGlmICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrPy5pbmNsdWRlcyhkLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ3knLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghaXNOYU4oZFswXSkgJiYgIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0geVNjYWxlKGRbMF0pIC0geVNjYWxlKGRbMV0pO1xyXG4gICAgICAgIHJldHVybiBhY3R1YWxIZWlnaHQgPCAzID8geVNjYWxlKGRbMF0pIC0gMyA6IHlTY2FsZShkWzFdKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pXHJcbiAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeFBvc2l0aW9uID0geFNjYWxlKGQuZGF0YS5uYW1lKTtcclxuICAgICAgY29uc3QgYmFuZHdpZHRoID0geFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgICBcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSkge1xyXG4gICAgICAgIHJldHVybiB4UG9zaXRpb24gKyAoYmFuZHdpZHRoIC0gYmFyV2lkdGgpIC8gMjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA8PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIHhQb3NpdGlvbiArIGJhbmR3aWR0aCAvIDIgLSAzNTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjYWxjdWxhdGVkV2lkdGggPSBiYW5kd2lkdGggKiAwLjg7XHJcbiAgICAgIHJldHVybiB4UG9zaXRpb24gKyAoYmFuZHdpZHRoIC0gY2FsY3VsYXRlZFdpZHRoKSAvIDI7XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFpc05hTihkWzBdKSAmJiAhaXNOYU4oZFsxXSkpIHtcclxuICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSB5U2NhbGUoZFswXSkgLSB5U2NhbGUoZFsxXSk7XHJcbiAgICAgICAgcmV0dXJuIGFjdHVhbEhlaWdodCA8IDMgPyAzIDogYWN0dWFsSGVpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSlcclxuICAgIC5hdHRyKCd3aWR0aCcsIChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSkgcmV0dXJuIGJhcldpZHRoO1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA8PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIDcwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB4U2NhbGUuYmFuZHdpZHRoKCkgKiAwLjg7XHJcbiAgICB9KVxyXG4gICAgLnN0eWxlKCdjdXJzb3InLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgICBpZiAobWV0YURhdGEuYmFyV2l0aG91dENsaWNrPy5pbmNsdWRlcyhkLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgcmV0dXJuICdkZWZhdWx0JztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJ2RlZmF1bHQnO1xyXG4gICAgfSlcclxuICAgIC5zdHlsZSgnZmlsbCcsIChkOiBhbnkpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxufVxyXG5cclxuICBwcml2YXRlIGdldEJhckNvbG9yKGQ6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICAhaXNOYU4oZFswXSkgJiZcclxuICAgICAgIWlzTmFOKGRbMV0pICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgIHBhcnNlRmxvYXQoZFsxXSkgLSBwYXJzZUZsb2F0KGRbMF0pID49IHBhcnNlRmxvYXQoU3RyaW5nKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmJhckFib3ZlVGFyZ2V0Q29sb3IgfHwgbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRJbnRlcmFjdGlvbnMocmVjdDogYW55LCBzdmc6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIHNjYWxlczogYW55KSB7XHJcbiAgICByZWN0XHJcbiAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAub24oJ21vdXNlZW50ZXInLCAoZDogYW55KSA9PiB0aGlzLmhhbmRsZU1vdXNlT3ZlcihkLCBzdmcsIG1ldGFEYXRhLCBzY2FsZXMpKVxyXG4gICAgICAub24oJ21vdXNlb3V0JywgKGQ6IGFueSkgPT4gdGhpcy5oYW5kbGVNb3VzZU91dChzdmcsIG1ldGFEYXRhKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU1vdXNlT3ZlcihkOiBhbnksIHN2ZzogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSwgc2NhbGVzOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHJldHVybjtcclxuXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhID09PSBkKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogYW55KSA9PiB0aGlzLmdldEhvdmVyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICB0aGlzLmRpc3BsYXlUb29sdGlwKGQsIHN2ZywgbWV0YURhdGEsIHNjYWxlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhvdmVyQ29sb3IoZDogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSk6IHN0cmluZyB7XHJcbiAgICBpZiAoXHJcbiAgICAgICFpc05hTihkWzBdKSAmJlxyXG4gICAgICAhaXNOYU4oZFsxXSkgJiZcclxuICAgICAgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgcGFyc2VGbG9hdChkWzFdKSAtIHBhcnNlRmxvYXQoZFswXSkgPj0gcGFyc2VGbG9hdChTdHJpbmcodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuYmFyQWJvdmVUYXJnZXRIb3ZlckNvbG9yIHx8XHJcbiAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5iYXJBYm92ZVRhcmdldENvbG9yIHx8XHJcbiAgICAgICAgICAgICBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1ldGFEYXRhLmhvdmVyQ29sb3IgfHwgbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzcGxheVRvb2x0aXAoZDogYW55LCBzdmc6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIHNjYWxlczogYW55KSB7XHJcbiAgICBjb25zdCB7IHhTY2FsZSwgeVNjYWxlIH0gPSBzY2FsZXM7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGRbMV0gLSBkWzBdO1xyXG4gICAgXHJcbiAgICBpZiAoaXNOYU4odmFsdWUpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYmFuZHdpZHRoID0geFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgXHJcbiAgICAvLyBGaXhlZCB0b29sdGlwIHdpZHRoIGZvciBhbGwgcmVzb2x1dGlvbnNcclxuICAgIGNvbnN0IHdpZHRoID0gL3dlZWsvaS50ZXN0KGQuZGF0YS5uYW1lKSAmJiAvXFxkezR9LVxcZHsyfS1cXGR7Mn0vLnRlc3QoZC5kYXRhLm5hbWUpXHJcbiAgICAgID8gJzI1MHB4J1xyXG4gICAgICA6IGJhbmR3aWR0aCArIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMiA+IDE4MFxyXG4gICAgICAgID8gJzE4MHB4J1xyXG4gICAgICAgIDogYmFuZHdpZHRoICsgdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoJ3gnLCB0aGlzLmNhbGN1bGF0ZVRvb2x0aXBYKGQsIHhTY2FsZSwgd2lkdGgpKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgICAuYXR0cigneScsIHlTY2FsZShkWzFdKSAtIDUxKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCB3aWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKVxyXG4gICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAndGl0bGUnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgLmh0bWwodGhpcy5nZW5lcmF0ZVRvb2x0aXBIdG1sKGQsIG1ldGFEYXRhLCB2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sdGlwWChkOiBhbnksIHhTY2FsZTogYW55LCB3aWR0aDogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGJhbmR3aWR0aCA9IHhTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgIGNvbnN0IG51bWVyaWNXaWR0aCA9IHR5cGVvZiB3aWR0aCA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh3aWR0aCkgOiB3aWR0aDtcclxuICAgIFxyXG4gICAgaWYgKGJhbmR3aWR0aCArIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMiA+IDE4MCkge1xyXG4gICAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKSAtIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICtcclxuICAgICAgICAgICAgIChiYW5kd2lkdGggKyB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIgLSAxODApIC8gMjtcclxuICAgIH1cclxuICAgIHJldHVybiB4U2NhbGUoZC5kYXRhLm5hbWUpIC0gdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlVG9vbHRpcEh0bWwoZDogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSwgdmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IDApIHJldHVybiAnPHNwYW4gY2xhc3M9XCJ0aXRsZS10b3AtdGV4dFwiPjA8L3NwYW4+JztcclxuXHJcbiAgICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gICAgY29uc3QgbmFtZSA9IGQuZGF0YS5uYW1lID8gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke2QuZGF0YS5uYW1lfTwvc3Bhbj5gIDogJyc7XHJcbiAgICBjb25zdCB2YWx1ZVRleHQgPSBtZXRhRGF0YS51bml0XHJcbiAgICAgID8gYCR7bWV0YURhdGEudW5pdH0ke3ZhbHVlfSAke2RhdGFUeXBlfWBcclxuICAgICAgOiBgJHt2YWx1ZX0gJHtkYXRhVHlwZX1gO1xyXG5cclxuICAgIHJldHVybiBgJHtuYW1lfTxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4ke3ZhbHVlVGV4dH08L3NwYW4+YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTW91c2VPdXQoc3ZnOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSByZXR1cm47XHJcblxyXG4gICAgc3ZnLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsIChkOiBhbnkpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJy5saWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJBeGlzTGFiZWxzKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBzdmdZQXhpc0xlZnQ6IGFueSxcclxuICAgIGJvdHRvbUxhYmVsQ29udGFpbmVyOiBhbnksXHJcbiAgICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgICBtYXJnaW46IGFueVxyXG4gICkge1xyXG4gICAgaWYgKG1ldGFEYXRhLnlMYWJlbCkge1xyXG4gICAgICB0aGlzLmFkZFlBeGlzTGFiZWwoc3ZnWUF4aXNMZWZ0LCBtZXRhRGF0YS55TGFiZWwsIGRpbWVuc2lvbnMuaGVpZ2h0LCBtYXJnaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgdGhpcy5hZGRYQXhpc0xhYmVsKGJvdHRvbUxhYmVsQ29udGFpbmVyLCBtZXRhRGF0YS54TGFiZWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRZQXhpc0xhYmVsKHN2Z1lBeGlzTGVmdDogYW55LCBsYWJlbDogc3RyaW5nLCBoZWlnaHQ6IG51bWJlciwgbWFyZ2luOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzcmlhID0gdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24/LmlzUmlhO1xyXG4gICAgY29uc3QgaXNBY3JvbnltID0gdGhpcy5pc0Fjcm9ueW1MYWJlbChsYWJlbCk7XHJcbiAgICBjb25zdCB5UG9zaXRpb24gPSBpc3JpYSA/IC1tYXJnaW4ubGVmdCAvIDIgLSAzMCA6IC1tYXJnaW4ubGVmdCAvIDIgLSA0MDtcclxuXHJcbiAgICBzdmdZQXhpc0xlZnQuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwsIC5saWIteWxhYmVsLWRyaWxsZG93bmNoYXJ0cywgLmxpYi15bGFiZWwtd2Vla2x5Q2hhcnRzJykucmVtb3ZlKCk7XHJcblxyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCB0aGlzLmdldFlBeGlzTGFiZWxDbGFzcygpKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgLmF0dHIoJ3knLCB5UG9zaXRpb24pXHJcbiAgICAgIC5hdHRyKCd4JywgLWhlaWdodCAvIDIpXHJcbiAgICAgIC5hdHRyKCdkeScsICcxZW0nKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC50ZXh0KGlzQWNyb255bSA/IGxhYmVsLnRvVXBwZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICB9XHJcblxyXG5wcml2YXRlIGFkZFhBeGlzTGFiZWwoYm90dG9tTGFiZWxDb250YWluZXI6IGFueSwgbGFiZWw6IHN0cmluZykge1xyXG4gIGNvbnN0IGlzQWNyb255bSA9IHRoaXMuaXNBY3JvbnltTGFiZWwobGFiZWwpO1xyXG5cclxuICBib3R0b21MYWJlbENvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ3RleHQtYWxpZ24nLCAnY2VudGVyJylcclxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEycHgnKVxyXG4gICAgLnN0eWxlKCdmb250LXdlaWdodCcsICc2MDAnKVxyXG4gICAgLnN0eWxlKCdmb250LWZhbWlseScsICdzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8nKVxyXG4gICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKVxyXG4gICAgLnRleHQoaXNBY3JvbnltID8gbGFiZWwudG9VcHBlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG59XHJcblxyXG4gIHByaXZhdGUgaXNBY3JvbnltTGFiZWwobGFiZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2xlYW5MYWJlbCA9IGxhYmVsLnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJyk7XHJcbiAgICByZXR1cm4gKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgICAgICAgKGxhYmVsID09PSBsYWJlbC50b1VwcGVyQ2FzZSgpICYmIC9bQS1aXS8udGVzdChsYWJlbCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRZQXhpc0xhYmVsQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLXlsYWJlbC1kcmlsbGRvd25jaGFydHNgO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLXlsYWJlbC13ZWVrbHlDaGFydHNgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0WEF4aXNMYWJlbENsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgYmFzZUNsYXNzID0gJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJztcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi14bGFiZWwtZHJpbGxkb3duY2hhcnRzYDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi14bGFiZWwtd2Vla2x5Q2hhcnRzYDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q29uZmlndXJhdGlvbkZsYWdzKCkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVG9wQ2FwdGlvblZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzVG9wQ2FwdGlvblZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RvcENhcHRpb25WaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpIHtcclxuICAgIC8vIFVzZSBmaXhlZCBjb25maWd1cmF0aW9uIGZvciBhbGwgcmVzb2x1dGlvbnNcclxuICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbiA9IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDQwLCBsZWZ0OiA0MCB9O1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MgPSA1O1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ID0gNzA7XHJcbiAgICBcclxuICAgIHRoaXMubWVyZ2VDb25maWd1cmF0aW9ucygpO1xyXG4gICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25GbGFncygpO1xyXG5cclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gICAgY29uc3QgbWV0YURhdGEgPSB0aGlzLnByZXBhcmVNZXRhRGF0YSh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YSk7XHJcbiAgICBjb25zdCBsaW5lRGF0YSA9IHRoaXMuY2hhcnREYXRhLmxpbmVEYXRhO1xyXG4gICAgY29uc3QgY29sb3JzID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAgY29uc3Qga2V5TGlzdCA9IG1ldGFEYXRhLmtleUxpc3Q7XHJcblxyXG4gICAgY29uc3QgY2hhcnRDb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy52ZXJ0aWNhbHN0YWNrZWRjb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICBcclxuICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmNhbGN1bGF0ZURpbWVuc2lvbnMoXHJcbiAgICAgIGNoYXJ0Q29udGFpbmVyLFxyXG4gICAgICB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIsXHJcbiAgICAgIG1hcmdpbixcclxuICAgICAgZGF0YS5sZW5ndGhcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaGFzWExhYmVsID0gISFtZXRhRGF0YS54TGFiZWw7XHJcblxyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgYm90dG9tTGFiZWxDb250YWluZXIgfSA9IHRoaXMuY3JlYXRlU3ZnQ29udGFpbmVycyhcclxuICAgICAgY2hhcnRDb250YWluZXIsXHJcbiAgICAgIGRpbWVuc2lvbnMsXHJcbiAgICAgIG1hcmdpbixcclxuICAgICAgaGFzWExhYmVsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHN0YWNrOiBhbnkgPSBkMy5zdGFjaygpLmtleXMoa2V5TGlzdCkub2Zmc2V0KGQzLnN0YWNrT2Zmc2V0Tm9uZSk7XHJcbiAgICBjb25zdCBsYXllcnM6IGFueSA9IHN0YWNrKGRhdGEpO1xyXG4gICAgZGF0YS5zb3J0KChhLCBiKSA9PiBiLnRvdGFsIC0gYS50b3RhbCk7XHJcblxyXG4gICAgY29uc3Qgc2NhbGVzID0gdGhpcy5jcmVhdGVTY2FsZXMoZGF0YSwgbGF5ZXJzLCBsaW5lRGF0YSwgZGltZW5zaW9ucyk7XHJcbiAgICBjb25zdCBheGVzID0gdGhpcy5jcmVhdGVBeGVzKHNjYWxlcyk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJHcmlkcyhzdmcsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5yZW5kZXJCYXJzKHN2ZywgbGF5ZXJzLCBzY2FsZXMsIG1ldGFEYXRhLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyQXhlcyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zLCBkYXRhKTtcclxuICAgIHRoaXMucmVuZGVyQXhpc0xhYmVscyhzdmcsIHN2Z1lBeGlzTGVmdCxib3R0b21MYWJlbENvbnRhaW5lciwgbWV0YURhdGEsIGRpbWVuc2lvbnMsIG1hcmdpbik7XHJcbiAgICB0aGlzLnJlbmRlclRhcmdldExpbmUoc3ZnLCBzdmdZQXhpc1JpZ2h0LCBzY2FsZXMsIGRpbWVuc2lvbnMsIG1ldGFEYXRhKTtcclxuICAgIHRoaXMucmVuZGVyRGF0YUxhYmVscyhyZWN0LCBzY2FsZXMsIG1ldGFEYXRhLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyTGluZUNoYXJ0KHN2ZywgbGluZURhdGEsIHNjYWxlcywgY29sb3JzLCBtZXRhRGF0YSk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJHcmlkcyhzdmc6IGFueSwgc2NhbGVzOiBhbnksIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYZ3JpZEJldHdlZW5MYWJlbHMpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQgdmVydGljYWwtZ3JpZCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7c2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDJ9LCR7ZGltZW5zaW9ucy5oZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSkudGlja1NpemUoLWRpbWVuc2lvbnMuaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAnIzk5OTk5OScpXHJcbiAgICAgIC5jYWxsKChnOiBhbnkpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzR3JpZCkge1xyXG4gICAgY29uc3QgZ3JpZFdpZHRoID0gZGltZW5zaW9ucy5yZXF1aXJlZFN2Z1dpZHRoO1xyXG4gICAgXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkIGhvcml6b250YWwtZ3JpZCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbChcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLmF4aXNMZWZ0KHNjYWxlcy55U2NhbGUpXHJcbiAgICAgICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAudGlja1NpemUoLWdyaWRXaWR0aClcclxuICAgICAgICAgIC50aWNrRm9ybWF0KCcnKVxyXG4gICAgICApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKVxyXG4gICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMScpXHJcbiAgICAgIC5jYWxsKChnOiBhbnkpID0+IHtcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWQpIHtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNHcmlkLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsIGB4JHtqICsgMn0gYXhpcyR7aiArIDJ9YClcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7ZGltZW5zaW9ucy5oZWlnaHQgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWRbal19KWApXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKS50aWNrU2l6ZSgwKS50aWNrcyg1KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQXhlcyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgc3ZnWUF4aXNMZWZ0OiBhbnksXHJcbiAgICBzdmdZQXhpc1JpZ2h0OiBhbnksXHJcbiAgICBheGVzOiBhbnksXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgICBkYXRhOiBhbnlbXVxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dYYXhpc1RvcCkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWxpbmUtYXhpcy10ZXh0IGxpYi1saW5lLXgtYXhpcy10ZXh0IHgtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSkudGlja1NpemUoMCkpO1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcueC1heGlzID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyU3RhbmRhcmRBeGVzKHN2ZywgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zLCBkYXRhKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICB0aGlzLnJlbmRlckRyaWxsZG93bkF4ZXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGF4ZXMsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbmRlck11bHRpQ2hhcnRBeGVzKHN2ZywgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5QXhpc1N0eWxpbmcoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQpO1xyXG4gICAgdGhpcy5hcHBseUF4aXNDb25maWd1cmF0aW9ucyhzdmcsIHNjYWxlcywgZGltZW5zaW9ucywgZGF0YSk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJTdGFuZGFyZEF4ZXMoXHJcbiAgc3ZnOiBhbnksXHJcbiAgYXhlczogYW55LFxyXG4gIHNjYWxlczogYW55LFxyXG4gIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgZGF0YTogYW55W11cclxuKSB7XHJcbiAgY29uc3QgaXNNb2JpbGVPclRhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDtcclxuICBcclxuICAvLyBYLWF4aXMgd2l0aCBsYWJlbHNcclxuICBjb25zdCB4QXhpc0dyb3VwID0gc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC14LWF4aXMtdGV4dCcpXHJcbiAgICAuY2FsbChheGVzLnhBeGlzKTtcclxuXHJcbiAgLy8gU3R5bGUgWC1heGlzIGxhYmVsc1xyXG4gIHhBeGlzR3JvdXBcclxuICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgaXNNb2JpbGVPclRhYmxldCA/ICcxMHB4JyA6ICcxMnB4JylcclxuICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAuZWFjaChmdW5jdGlvbih0aGlzOiBTVkdUZXh0RWxlbWVudCwgZDogYW55KSB7XHJcbiAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gZDMuc2VsZWN0KHRoaXMpO1xyXG4gICAgICBjb25zdCB0ZXh0ID0gdGV4dEVsZW1lbnQudGV4dCgpO1xyXG4gICAgICAgIFxyXG4gICAgICBpZiAoaXNNb2JpbGVPclRhYmxldCAmJiB0ZXh0Lmxlbmd0aCA+IDEyKSB7XHJcbiAgICAgICAgdGV4dEVsZW1lbnQudGV4dCh0ZXh0LnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAvLyBFbnN1cmUgWC1heGlzIGxpbmUgaXMgdmlzaWJsZVxyXG4gIHhBeGlzR3JvdXBcclxuICAgIC5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JylcclxuICAgIC5hdHRyKCdkJywgYE0wLDAuNUgke2RpbWVuc2lvbnMucmVxdWlyZWRTdmdXaWR0aH1gKTtcclxuXHJcbiAgLy8gWS1heGlzXHJcbiAgc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCcpXHJcbiAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAuY2FsbChheGVzLnlBeGlzKVxyXG4gICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxufVxyXG5cclxuICBwcml2YXRlIHJlbmRlckRyaWxsZG93bkF4ZXMoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIHN2Z1lBeGlzTGVmdDogYW55LFxyXG4gICAgc3ZnWUF4aXNSaWdodDogYW55LFxyXG4gICAgYXhlczogYW55LFxyXG4gICAgc2NhbGVzOiBhbnksXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbiAgKSB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0IG11bHRpY2hhcnQxJylcclxuICAgICAgLmNhbGwoYXhlcy54QXhpcylcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5jYWxsKGF4ZXMueUF4aXMpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuY2FsbChheGVzLnlBeGlzKVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJNdWx0aUNoYXJ0QXhlcyhzdmc6IGFueSwgYXhlczogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogRGltZW5zaW9ucykge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7ZGltZW5zaW9ucy5oZWlnaHR9KWApXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC14LWF4aXMtdGV4dCBtdWx0aWNoYXJ0JylcclxuICAgICAgLmNhbGwoYXhlcy54QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0IHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmNhbGwoYXhlcy55QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUF4aXNTdHlsaW5nKHN2ZzogYW55LCBzdmdZQXhpc0xlZnQ6IGFueSwgc3ZnWUF4aXNSaWdodDogYW55KSB7XHJcbiAgICBjb25zdCBzdHlsZUF4aXNEb21haW4gPSAoY29udGFpbmVyOiBhbnkpID0+IHtcclxuICAgICAgY29udGFpbmVyLnNlbGVjdEFsbCgnLmRvbWFpbicpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG4gICAgfTtcclxuXHJcbiAgICBzdHlsZUF4aXNEb21haW4oc3ZnKTtcclxuICAgIHN0eWxlQXhpc0RvbWFpbihzdmdZQXhpc0xlZnQpO1xyXG4gICAgc3R5bGVBeGlzRG9tYWluKHN2Z1lBeGlzUmlnaHQpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yKScpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzQ29sb3IpIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcubXVsdGljaGFydCcpLnN0eWxlKFxyXG4gICAgICAgICdjb2xvcicsXHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0NvbG9yIHx8ICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKSdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlBeGlzQ29uZmlndXJhdGlvbnMoc3ZnOiBhbnksIHNjYWxlczogYW55LCBkaW1lbnNpb25zOiBEaW1lbnNpb25zLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcubXVsdGljaGFydCA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5tdWx0aWNoYXJ0ID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJDdXN0b21YQXhpcyhzdmcsIHNjYWxlcywgZGltZW5zaW9ucywgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlbikge1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlbikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1pvb21lZE91dCAmJiBkYXRhLmxlbmd0aCA+IDkpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnZW5kJylcclxuICAgICAgICAuYXR0cigneCcsICctNScpXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgbnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckN1c3RvbVhBeGlzKHN2ZzogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogRGltZW5zaW9ucywgZGF0YTogYW55W10pIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2RpbWVuc2lvbnMuaGVpZ2h0fSlgKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJyMwMDAnKVxyXG4gICAgICAuY2FsbChkMy5heGlzQm90dG9tKHNjYWxlcy54U2NhbGUpLnRpY2tTaXplKDApKVxyXG4gICAgICAuY2FsbCgoZzogYW55KSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuXHJcbiAgICB0aGlzLnN0eWxlQ3VzdG9tWEF4aXNUaWNrcyhzdmcsIGRhdGEpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgICB0aGlzLmFwcGx5WExhYmVsc09uU2FtZUxpbmUoc3ZnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3R5bGVDdXN0b21YQXhpc1RpY2tzKHN2ZzogYW55LCBkYXRhOiBhbnlbXSkge1xyXG4gICAgbGV0IGFsdGVybmF0ZVRleHQgPSBmYWxzZTtcclxuXHJcbiAgICBzdmcuc2VsZWN0QWxsKCcueDEuYXhpczEgLnRpY2sgbGluZScpLmF0dHIoJ3kyJywgKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaGlkZVhheGlzVGljaykgcmV0dXJuIDA7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoYWx0ZXJuYXRlVGV4dCAmJiAhdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNOb0FsdGVybmF0ZVhheGlzVGV4dCkge1xyXG4gICAgICAgIGFsdGVybmF0ZVRleHQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5DT05TVEFOVFMuTE9OR19USUNLX0xFTkdUSF9CRyAtIDc7XHJcbiAgICAgIH1cclxuICAgICAgYWx0ZXJuYXRlVGV4dCA9IHRydWU7XHJcbiAgICAgIHJldHVybiB0aGlzLkNPTlNUQU5UUy5TSE9SVF9USUNLX0xFTkdUSF9CRyAtIDQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBhbHRlcm5hdGVUZXh0ID0gZmFsc2U7XHJcbiAgICBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoID4gOCBcclxuICAgICAgICAgICAgPyAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24tYWx0J1xyXG4gICAgICAgICAgICA6ICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnbGliLXhheGlzLWxhYmVscy10ZXh0cy13ZWVrbHljaGFydHMnO1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cigneScsICgpID0+IHtcclxuICAgICAgICBpZiAoYWx0ZXJuYXRlVGV4dCkge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlVGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuQ09OU1RBTlRTLkxPTkdfVElDS19MRU5HVEhfQkc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFsdGVybmF0ZVRleHQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLkNPTlNUQU5UUy5TSE9SVF9USUNLX0xFTkdUSF9CRztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5WExhYmVsc09uU2FtZUxpbmUoc3ZnOiBhbnkpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLmF0dHIoJ3knLCB0aGlzLkNPTlNUQU5UUy5TSE9SVF9USUNLX0xFTkdUSF9CRylcclxuICAgICAgLnRleHQoKGQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBkLnRyaW0oKTtcclxuICAgICAgICBjb25zdCBzcGFjZUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCcgJyk7XHJcbiAgICAgICAgcmV0dXJuIHNwYWNlSW5kZXggPiAtMSBcclxuICAgICAgICAgID8gdHJpbW1lZC5zdWJzdHJpbmcoMCwgc3BhY2VJbmRleCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgOiB0cmltbWVkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljaycpXHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigneScsIHRoaXMuQ09OU1RBTlRTLkxPTkdfVElDS19MRU5HVEhfQkcpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgJ2N1cnJlbnRDb2xvcicpXHJcbiAgICAgIC50ZXh0KChkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBjb25zdCB0cmltbWVkID0gZC50cmltKCk7XHJcbiAgICAgICAgY29uc3Qgc3BhY2VJbmRleCA9IHRyaW1tZWQuaW5kZXhPZignICcpO1xyXG4gICAgICAgIHJldHVybiBzcGFjZUluZGV4ID4gLTEgXHJcbiAgICAgICAgICA/IHRyaW1tZWQuc3Vic3RyaW5nKHNwYWNlSW5kZXgpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgIDogJyc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJEYXRhTGFiZWxzKHJlY3Q6IGFueSwgc2NhbGVzOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLCBkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNDQyAmJiAhdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUpIHtcclxuICAgICAgcmVjdC5hcHBlbmQoJ3N2Zzp0aXRsZScpLnRleHQoKGQ6IGFueSkgPT4gZFsxXSAtIGRbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93VG90YWxPblRvcCkge1xyXG4gICAgICB0aGlzLnJlbmRlclRvcExhYmVscyhyZWN0LCBzY2FsZXMsIG1ldGFEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc2hvd0FuZ2xlZExhYmVscykge1xyXG4gICAgICB0aGlzLnJlbmRlckFuZ2xlZExhYmVscyhyZWN0LCBzY2FsZXMsIG1ldGFEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVG9wTGFiZWxzKHJlY3Q6IGFueSwgc2NhbGVzOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKSB7XHJcbiAgICBjb25zdCBmb3JtYXRGcm9tQmFja2VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXJcclxuICAgICAgPyBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIodGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlcilcclxuICAgICAgOiAoZDogYW55KSA9PiBkO1xyXG4gICAgY29uc3QgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG5cclxuICAgIHJlY3RcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCd4JywgKGQ6IGFueSkgPT4gc2NhbGVzLnhTY2FsZShkLmRhdGEubmFtZSkgKyBzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLWxhYmVscy1vbnRvcC13ZWtseWNoYXJ0cycpXHJcbiAgICAgIC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gc2NhbGVzLnlTY2FsZShkWzFdKSAtIDMpXHJcbiAgICAgIC50ZXh0KChkOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRbMV0gLSBkWzBdO1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IDApIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHZhbHVlIDw9IDk5OSBcclxuICAgICAgICAgID8gZm9ybWF0RnJvbUJhY2tlbmQodmFsdWUpXHJcbiAgICAgICAgICA6IGZvcm1hdEZvckh1Z2VOdW1iZXJzKHZhbHVlKTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbWV0YURhdGEudW5pdCA/IG1ldGFEYXRhLnVuaXQgKyBmb3JtYXR0ZWRWYWx1ZSA6IGZvcm1hdHRlZFZhbHVlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQW5nbGVkTGFiZWxzKHJlY3Q6IGFueSwgc2NhbGVzOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKSB7XHJcbiAgICBjb25zdCBmb3JtYXRGcm9tQmFja2VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXJcclxuICAgICAgPyBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIodGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlcilcclxuICAgICAgOiAoZDogYW55KSA9PiBkO1xyXG4gICAgY29uc3QgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gICAgY29uc3QgdGVtcE9iamVjdEhvbGRlcjogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG5cclxuICAgIHJlY3RcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCd4JywgMClcclxuICAgICAgLmF0dHIoJ3knLCAwKVxyXG4gICAgICAuYXR0cignZmlsbCcsIChkOiBhbnkpID0+IG1ldGFEYXRhLmNvbG9yc1tkLmtleV0pXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtYW5nbGVkLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgIC50ZXh0KChkOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRbMV0gLSBkWzBdO1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdmFsdWUgPD0gOTk5XHJcbiAgICAgICAgICA/IGZvcm1hdEZyb21CYWNrZW5kKHZhbHVlKVxyXG4gICAgICAgICAgOiBmb3JtYXRGb3JIdWdlTnVtYmVycyh2YWx1ZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIG1ldGFEYXRhLnVuaXQgPyBtZXRhRGF0YS51bml0ICsgZm9ybWF0dGVkVmFsdWUgOiBmb3JtYXR0ZWRWYWx1ZTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRbMV0gLSBkWzBdO1xyXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkgcmV0dXJuICdyb3RhdGUoMCknO1xyXG5cclxuICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICAgIGxldCBpbmNyZW1lbnRlciA9IDE7XHJcbiAgICAgICAgbWV0YURhdGEua2V5TGlzdC5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICBpZiAoZC5kYXRhW2tleV0pIHtcclxuICAgICAgICAgICAgdG90YWwgKz0gZC5kYXRhW2tleV07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbmNyZW1lbnRlciA9IDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdID0gKHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdIHx8IDApICsgaW5jcmVtZW50ZXI7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXTtcclxuICAgICAgICBjb25zdCB4UG9zID0gc2NhbGVzLnhTY2FsZShkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgY29uc3QgYmFuZHdpZHRoID0gc2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgICAgICBjb25zdCB5UG9zID0gc2NhbGVzLnlTY2FsZSh0b3RhbCkgLSAzO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eFBvcyArIGJhbmR3aWR0aCAvIDN9LCR7eVBvc30pIHJvdGF0ZSgyNzApYDtcclxuICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4UG9zICsgYmFuZHdpZHRoIC8gMiArIDJ9LCR7eVBvc30pIHJvdGF0ZSgyNzApYDtcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eFBvcyArIChiYW5kd2lkdGggKiAzKSAvIDR9LCR7eVBvc30pIHJvdGF0ZSgyNzApYDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUYXJnZXRMaW5lKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBzdmdZQXhpc1JpZ2h0OiBhbnksXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YVxyXG4gICkge1xyXG4gICAgaWYgKCF0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlZFRhcmdldCA9IHRoaXMucGFyc2VUYXJnZXRWYWx1ZSh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG4gICAgY29uc3QgeVplcm8gPSBzY2FsZXMueVNjYWxlKHBhcnNlZFRhcmdldCk7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAuYXR0cigneDEnLCAwKVxyXG4gICAgICAuYXR0cigneDInLCBkaW1lbnNpb25zLndpZHRoKVxyXG4gICAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlclRhcmdldExhYmVsKHN2Z1lBeGlzUmlnaHQsIHlaZXJvLCBtZXRhRGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlVGFyZ2V0VmFsdWUodGFyZ2V0OiBzdHJpbmcgfCBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdChTdHJpbmcodGFyZ2V0KSk7XHJcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIDA7XHJcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwYXJzZWQpID8gcGFyc2VJbnQoU3RyaW5nKHRhcmdldCkpIDogcGFyc2VkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUYXJnZXRMYWJlbChzdmdZQXhpc1JpZ2h0OiBhbnksIHlaZXJvOiBudW1iZXIsIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKSB7XHJcbiAgICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldE5hbWUgfHwgJ3RhcmdldCc7XHJcblxyXG4gICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke3laZXJvIC0gMTN9KWApXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIHRoaXMuQ09OU1RBTlRTLlJJR0hUX1NWR19XSURUSClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLmh0bWwoYDxkaXY+JHt0YXJnZXROYW1lfTwvZGl2PjxkaXY+JHt0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXR9JHtkYXRhVHlwZX08L2Rpdj5gKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZUNoYXJ0KHN2ZzogYW55LCBsaW5lRGF0YTogYW55W10sIHNjYWxlczogYW55LCBjb2xvcnM6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpIHtcclxuICAgIGlmICghbGluZURhdGEgfHwgIWNvbG9ycykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGRhdGFHcm91cCA9IGQzXHJcbiAgICAgIC5uZXN0KClcclxuICAgICAgLmtleSgoZDogYW55KSA9PiBkLmNhdGVnb3J5KVxyXG4gICAgICAuZW50cmllcyhsaW5lRGF0YSk7XHJcblxyXG4gICAgY29uc3QgbGluZUdlbiA9IGQzXHJcbiAgICAgIC5saW5lKClcclxuICAgICAgLngoKGQ6IGFueSkgPT4gc2NhbGVzLnhTY2FsZShkLm5hbWUpICsgc2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgIC55KChkOiBhbnkpID0+IHNjYWxlcy5saW5lWXNjYWxlKGQudmFsdWUpKTtcclxuXHJcbiAgICBkYXRhR3JvdXAuZm9yRWFjaCgoZ3JvdXA6IGFueSkgPT4ge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgICAuZGF0dW0oZ3JvdXAudmFsdWVzKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxyXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCAoZDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZFswXT8uY2F0ZWdvcnkgXHJcbiAgICAgICAgICAgID8gY29sb3JzW2RbMF0uY2F0ZWdvcnldXHJcbiAgICAgICAgICAgIDogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMi41KVxyXG4gICAgICAgIC5hdHRyKCdkJywgbGluZUdlbik7XHJcblxyXG4gICAgICB0aGlzLnJlbmRlckxpbmVEb3RzKHN2ZywgZ3JvdXAudmFsdWVzLCBzY2FsZXMsIGNvbG9ycyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTGluZURvdHMoc3ZnOiBhbnksIHZhbHVlczogYW55W10sIHNjYWxlczogYW55LCBjb2xvcnM6IGFueSkge1xyXG4gICAgY29uc3QgZG90ID0gc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJy5saW5lLWRvdHMnKVxyXG4gICAgICAuZGF0YSh2YWx1ZXMpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAub24oJ2NsaWNrJywgKGQ6IGFueSkgPT4gdGhpcy5oYW5kbGVDbGljayhkKSk7XHJcblxyXG4gICAgZG90XHJcbiAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBkLmNhdGVnb3J5IFxyXG4gICAgICAgICAgPyBjb2xvcnNbZC5jYXRlZ29yeV1cclxuICAgICAgICAgIDogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCdzdHJva2UnLCAnbm9uZScpXHJcbiAgICAgIC5hdHRyKCdjeCcsIChkOiBhbnkpID0+IHNjYWxlcy54U2NhbGUoZC5uYW1lKSArIHNjYWxlcy54U2NhbGUuYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAuYXR0cignY3knLCAoZDogYW55KSA9PiBzY2FsZXMubGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgLmF0dHIoJ3InLCAzKVxyXG4gICAgICAuc3R5bGUoJ2N1cnNvcicsICdwb2ludGVyJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKSB7XHJcbiAgICAgIGRvdFxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdkb3RzJylcclxuICAgICAgICAuYXR0cignZmlsbCcsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJy44NWVtJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnKVxyXG4gICAgICAgIC5hdHRyKCd4JywgKGQ6IGFueSkgPT4gc2NhbGVzLnhTY2FsZShkLm5hbWUpICsgc2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgICAgLmF0dHIoJ3knLCAoZDogYW55KSA9PiBzY2FsZXMubGluZVlzY2FsZShkLnZhbHVlKSlcclxuICAgICAgICAuYXR0cignZHknLCAnLTFlbScpXHJcbiAgICAgICAgLnRleHQoKGQ6IGFueSkgPT4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGE/Lm1ldGFEYXRhPy5oYXNEcmlsbERvd24gfHwgZD8udG9nZ2xlRnJvbSkge1xyXG4gICAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUhlYWRlck1lbnVDbGljayhpZDogYW55KSB7XHJcbiAgICB0aGlzLmhlYWRlck1lbnVjbGlja0V2ZW50LmVtaXQoaWQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVpvb21pblpvb21vdXRDbGljayh7IGlzWm9vbU91dCwgZXZlbnQgfTogeyBpc1pvb21PdXQ6IGJvb2xlYW47IGV2ZW50OiBhbnkgfSkge1xyXG4gICAgdGhpcy5pc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQpO1xyXG4gIH1cclxufSIsIjxtZXRhIGh0dHAtZXF1aXY9XCJDQUNIRS1DT05UUk9MXCIgY29udGVudD1cIk5PLUNBQ0hFXCIgLz5cclxuPG1ldGEgaHR0cC1lcXVpdj1cIkVYUElSRVNcIiBjb250ZW50PVwiU2F0LCAwMSBKdW4gMjAwNCAxMToxMjowMSBHTVRcIiAvPlxyXG48ZGl2XHJcbiAgI3ZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcblxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYzXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKT1cImhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgKHpvb21Jblpvb21PdXRDbGljayk9XCJoYW5kbGVab29taW5ab29tb3V0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cInZlcnRpY2Fsc3RhY2tlZGNoYXJ0Y29udGFpbmVyXCJcclxuICAgICN2ZXJ0aWNhbHN0YWNrZWRjaGFydGNvbnRhaW5lclxyXG4gICAgY2xhc3M9XCJsaWItY2hhcnQtc3ZnXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
1057
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQW1EbEQsTUFBTSxPQUFPLHFDQUNYLFNBQVEsaUJBQWlCO0lBZ0Z6QjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBdEVBLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFekQsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUMzQixhQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxD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LENBQUM7SUFDckMsQ0FBQztJQUVELDhCQUE4QixDQUFDLEtBQVU7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELHdCQUF3QixDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBc0M7UUFDL0UsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7K0dBbHZDVSxxQ0FBcUM7bUdBQXJDLHFDQUFxQyw0akJDbEVsRCxvbkNBK0JBOzs0RkRtQ2EscUNBQXFDO2tCQVRqRCxTQUFTOytCQUNFLHNDQUFzQyxpQkFNakMsaUJBQWlCLENBQUMsSUFBSTt3REFPckMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLCtCQUErQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJNUQsMkJBQTJCO3NCQUQxQixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHOUMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBPbkNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFVuaXF1ZUlkIH0gZnJvbSAnLi4vdW5pcXVlLWlkJztcclxuaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gJy4uL2NoYXJ0LWhlbHBlcic7XHJcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcclxuaW1wb3J0IHsgUmVzaXplZEV2ZW50IH0gZnJvbSAnYW5ndWxhci1yZXNpemUtZXZlbnQnO1xyXG5pbXBvcnQgSGVhZGVyQ29uZmlnSGVscGVyIGZyb20gJy4uL2hlYWRlci1jb25maWcnO1xyXG5cclxuLy8gVHlwZXNcclxuaW50ZXJmYWNlIENoYXJ0RGF0YSB7XHJcbiAgZGF0YTogYW55W107XHJcbiAgbWV0YURhdGE6IENoYXJ0TWV0YURhdGE7XHJcbiAgbGluZURhdGE/OiBhbnlbXTtcclxuICB0YXJnZXRMaW5lRGF0YT86IFRhcmdldExpbmVEYXRhO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ2hhcnRNZXRhRGF0YSB7XHJcbiAgdW5pdD86IHN0cmluZztcclxuICBpc0NDPzogYm9vbGVhbjtcclxuICBiYXJXaXRob3V0Q2xpY2s/OiBzdHJpbmdbXTtcclxuICBjb2xvcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XHJcbiAga2V5TGlzdDogc3RyaW5nW107XHJcbiAgZGF0YVR5cGU/OiBzdHJpbmc7XHJcbiAgaGFzRHJpbGxEb3duPzogYm9vbGVhbjtcclxuICBob3ZlckNvbG9yPzogc3RyaW5nO1xyXG4gIHlMYWJlbD86IHN0cmluZztcclxuICB4TGFiZWw/OiBzdHJpbmc7XHJcbiAgbGluZXlMYWJlbD86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFRhcmdldExpbmVEYXRhIHtcclxuICB0YXJnZXQ6IHN0cmluZyB8IG51bWJlcjtcclxuICBjb2xvcjogc3RyaW5nO1xyXG4gIHRhcmdldE5hbWU/OiBzdHJpbmc7XHJcbiAgYmFyQWJvdmVUYXJnZXRDb2xvcj86IHN0cmluZztcclxuICBiYXJBYm92ZVRhcmdldEhvdmVyQ29sb3I/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBEaW1lbnNpb25zIHtcclxuICB3aWR0aDogbnVtYmVyO1xyXG4gIGhlaWdodDogbnVtYmVyO1xyXG4gIGNvbnRhaW5lcldpZHRoOiBudW1iZXI7XHJcbiAgY29udGFpbmVySGVpZ2h0OiBudW1iZXI7XHJcbiAgYmFyV2lkdGg6IG51bWJlcjtcclxuICBiYXJQYWRkaW5nOiBudW1iZXI7XHJcbiAgcmVxdWlyZWRTdmdXaWR0aDogbnVtYmVyO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5sZXNzJyxcclxuICAgICcuLi9jb21tb24tc3R5bGVzLmxlc3MnLFxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvcml6b250YWxCYXJzV2l0aFNjcm9sbFpvb21Db21wb25lbnRcclxuICBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkXHJcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIFxyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnRpY2Fsc3RhY2tlZGNoYXJ0Y29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBjb250YWluZXJFbHQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCd2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGNoYXJ0RGF0YTogQ2hhcnREYXRhIHwgYW55IDtcclxuICBASW5wdXQoKSBjdXN0b21DaGFydENvbmZpZ3VyYXRpb246IGFueTtcclxuICBAT3V0cHV0KCkgY2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBoZWFkZXJNZW51Y2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBjaGFydENvbmZpZ3VyYXRpb246IGFueSA9IHt9O1xyXG4gIGlzSGVhZGVyVmlzaWJsZSA9IHRydWU7XHJcbiAgaXNUb3BDYXB0aW9uVmlzaWJsZSA9IHRydWU7XHJcbiAgdW5pcXVlSWQgPSB0aGlzLmdldFVuaXF1ZUlkKCk7XHJcbiAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSBmYWxzZTtcclxuICBpc0NDID0gZmFsc2U7XHJcbiAgaXNab29tZWRPdXQgPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IENPTlNUQU5UUyA9IHtcclxuICAgIFJJR0hUX1NWR19XSURUSDogNjAsXHJcbiAgICBMRUZUX1JJR0hUX1NQQUNFUzogNTAsXHJcbiAgICBTSE9SVF9USUNLX0xFTkdUSDogNCxcclxuICAgIExPTkdfVElDS19MRU5HVEg6IDE2LFxyXG4gICAgU0hPUlRfVElDS19MRU5HVEhfQkc6IDUsXHJcbiAgICBMT05HX1RJQ0tfTEVOR1RIX0JHOiAzMCxcclxuICAgIERFU0tUT1BfQkFSX1dJRFRIOiA0MCwgICAgICAvLyBEZXNrdG9wIGJhciB3aWR0aFxyXG4gICAgTU9CSUxFX0JBUl9XSURUSDogMjUsICAgICAgIC8vIE1vYmlsZS9UYWJsZXQgYmFyIHdpZHRoIChyZWR1Y2VkKVxyXG4gICAgQkFSX0dBUDogMzAsICAgICAgICAgICAgICAgIC8vIEdhcCBiZXR3ZWVuIGJhcnMgKGluY3JlYXNlZCBmb3IgYmV0dGVyIHNlcGFyYXRpb24pXHJcbiAgICBaT09NX1RIUkVTSE9MRDogMzAsXHJcbiAgICBaT09NX0lOX1RIUkVTSE9MRDogOCxcclxuICB9O1xyXG5cclxuICBkZWZhdWx0Q29uZmlndXJhdGlvbiA9IHtcclxuICAgIG1hcmdpbjogeyB0b3A6IDIwLCByaWdodDogMjAsIGJvdHRvbTogMjAsIGxlZnQ6IDQwIH0sXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbGVnZW5kSGVpZ2h0OiAnMTAlJyxcclxuICAgIG51bWJlck9mWVRpY2tzOiA1LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB4QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB5QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd0xlZ2VuZDogZmFsc2UsXHJcbiAgICBmb3JDb21wYXJpc29uOiB0cnVlLFxyXG4gICAgaGVhZGVyTWVudU9wdGlvbnM6IEhlYWRlckNvbmZpZ0hlbHBlci5oZWFkZXJDb25maWcuaGVhZGVyTWVudU9wdGlvbnMsXHJcbiAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgLy8gT3B0aW9uYWwgY29uZmlncyB3aXRoIHVuZGVmaW5lZCBkZWZhdWx0c1xyXG4gICAgaXNIZWFkZXJWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogdW5kZWZpbmVkLFxyXG4gICAgaXNUb3BDYXB0aW9uVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNNdWx0aUNoYXJ0R3JpZExpbmU6IHVuZGVmaW5lZCxcclxuICAgIGlzRnVsbFNjcmVlbjogdW5kZWZpbmVkLFxyXG4gICAgY3VzdG9tWXNjYWxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzTGFiZWxIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0hpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0Rhc2hlZDogdW5kZWZpbmVkLFxyXG4gICAgaXNYYXhpc0NvbG9yOiB1bmRlZmluZWQsXHJcbiAgICB0ZXh0Rm9ybWF0dGVyOiB1bmRlZmluZWQsXHJcbiAgICBzaG93VG90YWxPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgYmFja2VuZEZvcm1hdHRlckhhc1ByaW9yaXR5OiB1bmRlZmluZWQsXHJcbiAgICBzaG93QW5nbGVkTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBpc05vQWx0ZXJuYXRlWGF4aXNUZXh0OiB1bmRlZmluZWQsXHJcbiAgICBpc1hncmlkQmV0d2VlbkxhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgc2hvd1hheGlzVG9wOiB1bmRlZmluZWQsXHJcbiAgICB4QXhpc0dyaWQ6IHVuZGVmaW5lZCxcclxuICAgIHhMYWJlbHNPblNhbWVMaW5lOiB1bmRlZmluZWQsXHJcbiAgICBoaWRlWGF4aXNUaWNrOiB1bmRlZmluZWQsXHJcbiAgICBpc0RyaWxsZG93bkNoYXJ0OiB1bmRlZmluZWQsXHJcbiAgICBpc1RhcmdldExpbmU6IHVuZGVmaW5lZCxcclxuICAgIGRpc3BsYXlUaXRsZU9uVG9wOiB1bmRlZmluZWQsXHJcbiAgICBpc1RvZ2dsZVZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVGl0bGVIaWRkZW46IHVuZGVmaW5lZCxcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIHRoaXMucmVtb3ZlRXhpc3RpbmdDaGFydCgpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplU3RhY2tlZENoYXJ0KCk7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlRXhpc3RpbmdDaGFydCgpO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVTdGFja2VkQ2hhcnQoKTtcclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIGlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc1pvb21lZE91dCA9IGlzWm9vbU91dDtcclxuICAgIHRoaXMubmdPbkNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRXhpc3RpbmdDaGFydCgpIHtcclxuICAgIGQzLnNlbGVjdCgnIycgKyB0aGlzLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVyZ2VDb25maWd1cmF0aW9ucygpIHtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25ba2V5XSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBrZXksXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlTWV0YURhdGEobWV0YURhdGE6IENoYXJ0TWV0YURhdGEpOiBDaGFydE1ldGFEYXRhIHtcclxuICAgIGlmICghbWV0YURhdGEudW5pdCkgbWV0YURhdGEudW5pdCA9ICcnO1xyXG4gICAgaWYgKG1ldGFEYXRhLmlzQ0MpIHRoaXMuaXNDQyA9IG1ldGFEYXRhLmlzQ0M7XHJcbiAgICBcclxuICAgIGlmIChtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2s/Lmxlbmd0aCkge1xyXG4gICAgICBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgPSBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subWFwKGVsID0+IGVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWV0YURhdGEuYmFyV2l0aG91dENsaWNrID0gW107XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBtZXRhRGF0YTtcclxuICB9XHJcblxyXG5wcml2YXRlIGNhbGN1bGF0ZURpbWVuc2lvbnMoXHJcbiAgY2hhcnRDb250YWluZXI6IGFueSxcclxuICB2ZXJ0aWNhbENvbnRhaW5lcjogYW55LFxyXG4gIG1hcmdpbjogYW55LFxyXG4gIGRhdGFMZW5ndGg6IG51bWJlclxyXG4pOiBEaW1lbnNpb25zIHtcclxuICBjb25zdCBjb250YWluZXJXaWR0aCA9IGNoYXJ0Q29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB2ZXJ0aWNhbENvbnRhaW5lci5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gIFxyXG4gIGNvbnN0IGxlZnRBeGlzV2lkdGggPSA4MDtcclxuICBjb25zdCByaWdodEF4aXNXaWR0aCA9IHRoaXMuQ09OU1RBTlRTLlJJR0hUX1NWR19XSURUSDtcclxuICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5lcldpZHRoIC0gbGVmdEF4aXNXaWR0aCAtIHJpZ2h0QXhpc1dpZHRoO1xyXG4gIFxyXG4gIGxldCB3aWR0aCA9IGF2YWlsYWJsZVdpZHRoO1xyXG4gIGxldCBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgKiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IC8gMTAwKSAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tO1xyXG5cclxuICBpZiAoZGF0YUxlbmd0aCA+IHRoaXMuQ09OU1RBTlRTLlpPT01fVEhSRVNIT0xEICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIGNvbnN0IG1pbldpZHRoID0gZGF0YUxlbmd0aCAqIDI1O1xyXG4gICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgbWluV2lkdGgpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGRhdGFMZW5ndGggPiB0aGlzLkNPTlNUQU5UUy5aT09NX0lOX1RIUkVTSE9MRCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgd2lkdGggPSBkYXRhTGVuZ3RoICogMTMwO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbikge1xyXG4gICAgaGVpZ2h0ID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ICE9PSA4MFxyXG4gICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFxyXG4gICAgICA6IGNvbnRhaW5lckhlaWdodDtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbSAtIDEzMDtcclxuICB9XHJcblxyXG4gIGNvbnN0IGlzTW9iaWxlT3JUYWJsZXQgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQ7XHJcbiAgbGV0IGJhcldpZHRoOiBudW1iZXI7XHJcbiAgbGV0IGJhclBhZGRpbmc6IG51bWJlcjtcclxuICBcclxuICBpZiAoaXNNb2JpbGVPclRhYmxldCkge1xyXG4gICAgaWYgKGRhdGFMZW5ndGggPT09IDEpIHtcclxuICAgICAgYmFyV2lkdGggPSA2MDtcclxuICAgICAgYmFyUGFkZGluZyA9IDA7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDIpIHtcclxuICAgICAgYmFyV2lkdGggPSA1MDtcclxuICAgICAgYmFyUGFkZGluZyA9IDQ1O1xyXG4gICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID09PSAzKSB7XHJcbiAgICAgIGJhcldpZHRoID0gNDU7XHJcbiAgICAgIGJhclBhZGRpbmcgPSA0MDtcclxuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA8PSA1KSB7XHJcbiAgICAgIGJhcldpZHRoID0gMzU7XHJcbiAgICAgIGJhclBhZGRpbmcgPSAzMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJhcldpZHRoID0gMjU7XHJcbiAgICAgIGJhclBhZGRpbmcgPSAyNTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgYmFyV2lkdGggPSB0aGlzLkNPTlNUQU5UUy5ERVNLVE9QX0JBUl9XSURUSDtcclxuICAgIGJhclBhZGRpbmcgPSB0aGlzLkNPTlNUQU5UUy5CQVJfR0FQO1xyXG4gIH1cclxuICBcclxuICBjb25zdCB0b3RhbEJhcnNXaWR0aCA9IGJhcldpZHRoICogZGF0YUxlbmd0aDtcclxuICBjb25zdCB0b3RhbEdhcHMgPSBiYXJQYWRkaW5nICogKGRhdGFMZW5ndGggLSAxKTtcclxuICBjb25zdCBtaW5SZXF1aXJlZFdpZHRoID0gdG90YWxCYXJzV2lkdGggKyB0b3RhbEdhcHMgKyAodGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyKTtcclxuICBjb25zdCByZXF1aXJlZFN2Z1dpZHRoID0gTWF0aC5tYXgoYXZhaWxhYmxlV2lkdGgsIG1pblJlcXVpcmVkV2lkdGgpO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgd2lkdGgsXHJcbiAgICBoZWlnaHQsXHJcbiAgICBjb250YWluZXJXaWR0aCxcclxuICAgIGNvbnRhaW5lckhlaWdodCxcclxuICAgIGJhcldpZHRoLFxyXG4gICAgYmFyUGFkZGluZyxcclxuICAgIHJlcXVpcmVkU3ZnV2lkdGgsXHJcbiAgfTtcclxufVxyXG5cclxucHJpdmF0ZSBjcmVhdGVTdmdDb250YWluZXJzKFxyXG4gIGNoYXJ0Q29udGFpbmVyOiBhbnksXHJcbiAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcclxuICBtYXJnaW46IGFueSxcclxuICBoYXNYTGFiZWw6IGJvb2xlYW4gIC8vIEFkZCB0aGlzIHBhcmFtZXRlclxyXG4pIHtcclxuICAvLyBDYWxjdWxhdGUgdG90YWwgaGVpZ2h0IGluY2x1ZGluZyBzcGFjZSBmb3IgWC1heGlzIGxhYmVsIGlmIHByZXNlbnRcclxuICBjb25zdCB4TGFiZWxTcGFjZSA9IGhhc1hMYWJlbCA/IDMwIDogMDtcclxuICBjb25zdCB0b3RhbEhlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyB4TGFiZWxTcGFjZTtcclxuXHJcbiAgLy8gTWFpbiB3cmFwcGVyXHJcbiAgY29uc3QgY2hhcnRXcmFwcGVyID0gY2hhcnRDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignaWQnLCB0aGlzLnVuaXF1ZUlkKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2NoYXJ0LXdyYXBwZXItbWFpbicpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ2hlaWdodCcsIGAke3RvdGFsSGVpZ2h0fXB4YCk7ICAvLyBJbmNsdWRlIFgtbGFiZWwgc3BhY2VcclxuXHJcbmNvbnN0IGxlZnRBeGlzQ29udGFpbmVyID0gY2hhcnRXcmFwcGVyXHJcbiAgLmFwcGVuZCgnZGl2JylcclxuICAuYXR0cignY2xhc3MnLCAnbGVmdC1heGlzLWNvbnRhaW5lcicpXHJcbiAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gIC5zdHlsZSgndG9wJywgJzAnKVxyXG4gIC5zdHlsZSgnd2lkdGgnLCAnODBweCcpXHJcbiAgLnN0eWxlKCdoZWlnaHQnLCBgJHtkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tfXB4YClcclxuICAuc3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCAndmFyKC0tY2FyZC1iZyknKVxyXG4gIC5zdHlsZSgnei1pbmRleCcsICcxMCcpO1xyXG5cclxuY29uc3Qgc3ZnWUF4aXNMZWZ0ID0gbGVmdEF4aXNDb250YWluZXJcclxuICAuYXBwZW5kKCdzdmcnKVxyXG4gIC5hdHRyKCd3aWR0aCcsICc4MCcpXHJcbiAgLmF0dHIoJ2hlaWdodCcsIGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgLmFwcGVuZCgnZycpXHJcbiAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoNzAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgLy8gUmlnaHQgWS1heGlzIC0gRml4ZWRcclxuICBjb25zdCByaWdodEF4aXNDb250YWluZXIgPSBjaGFydFdyYXBwZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAncmlnaHQtYXhpcy1jb250YWluZXInKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ3JpZ2h0JywgJzAnKVxyXG4gICAgLnN0eWxlKCd0b3AnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgYCR7dGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIfXB4YClcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7ZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbX1weGApICAvLyBFeGNsdWRlIFgtbGFiZWwgc3BhY2VcclxuICAgIC5zdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsICd2YXIoLS1jYXJkLWJnKScpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCAnMTAnKTtcclxuXHJcbiAgY29uc3Qgc3ZnWUF4aXNSaWdodCA9IHJpZ2h0QXhpc0NvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnc3ZnJylcclxuICAgIC5hdHRyKCd3aWR0aCcsIHRoaXMuQ09OU1RBTlRTLlJJR0hUX1NWR19XSURUSClcclxuICAgIC5hdHRyKCdoZWlnaHQnLCBkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tKVxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIC8vIFNjcm9sbGFibGUgbWlkZGxlIGFyZWFcclxuY29uc3Qgc2Nyb2xsYWJsZUNvbnRhaW5lciA9IGNoYXJ0V3JhcHBlclxyXG4gIC5hcHBlbmQoJ2RpdicpXHJcbiAgLmF0dHIoJ2NsYXNzJywgJ3Njcm9sbGFibGUtY2hhcnQtY29udGFpbmVyJylcclxuICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAuc3R5bGUoJ2xlZnQnLCAnODBweCcpICAvLyBFeGFjdGx5IHdoZXJlIGxlZnQgY29udGFpbmVyIGVuZHNcclxuICAuc3R5bGUoJ3JpZ2h0JywgYCR7dGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIfXB4YClcclxuICAuc3R5bGUoJ3RvcCcsICcwJylcclxuICAuc3R5bGUoJ3dpZHRoJywgJ2F1dG8nKVxyXG4gIC5zdHlsZSgnaGVpZ2h0JywgYCR7ZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbX1weGApXHJcbiAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKVxyXG4gIC5zdHlsZSgnb3ZlcmZsb3cteScsICdoaWRkZW4nKTtcclxuXHJcblxyXG5jb25zdCBpbm5lckNvbnRhaW5lciA9IHNjcm9sbGFibGVDb250YWluZXJcclxuICAuYXBwZW5kKCdkaXYnKVxyXG4gIC5hdHRyKCdjbGFzcycsICdpbm5lci1jaGFydC1jb250YWluZXInKVxyXG4gIC5zdHlsZSgnbWluLXdpZHRoJywgJzEwMCUnKTtcclxuXHJcbmNvbnN0IHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgLmFwcGVuZCgnc3ZnJylcclxuICAuYXR0cignd2lkdGgnLCBkaW1lbnNpb25zLnJlcXVpcmVkU3ZnV2lkdGgpXHJcbiAgLmF0dHIoJ2hlaWdodCcsIGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAzMClcclxuICAuYXBwZW5kKCdnJylcclxuICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7bWFyZ2luLnRvcH0pYCk7XHJcblxyXG4gIC8vIEZpeGVkIGJvdHRvbSBjb250YWluZXIgZm9yIFgtYXhpcyBsYWJlbFxyXG4gIGNvbnN0IGJvdHRvbUxhYmVsQ29udGFpbmVyID0gY2hhcnRXcmFwcGVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2JvdHRvbS1sYWJlbC1jb250YWluZXInKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ2xlZnQnLCAnODBweCcpXHJcbiAgICAuc3R5bGUoJ3JpZ2h0JywgYCR7dGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIfXB4YClcclxuICAgIC5zdHlsZSgnYm90dG9tJywgJzAnKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHt4TGFiZWxTcGFjZX1weGApXHJcbiAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnZmxleCcpXHJcbiAgICAuc3R5bGUoJ2p1c3RpZnktY29udGVudCcsICdjZW50ZXInKVxyXG4gICAgLnN0eWxlKCdhbGlnbi1pdGVtcycsICdjZW50ZXInKVxyXG4gICAgLnN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ3ZhcigtLWNhcmQtYmcpJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsICcxMCcpO1xyXG5cclxuICByZXR1cm4geyBzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgaW5uZXJDb250YWluZXIsIGJvdHRvbUxhYmVsQ29udGFpbmVyIH07XHJcbn1cclxuXHJcbnByaXZhdGUgY3JlYXRlU2NhbGVzKFxyXG4gIGRhdGE6IGFueVtdLFxyXG4gIGxheWVyczogYW55W10sXHJcbiAgbGluZURhdGE6IGFueVtdLFxyXG4gIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNcclxuKSB7XHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBiYXJXaWR0aCwgYmFyUGFkZGluZyB9ID0gZGltZW5zaW9ucztcclxuICBcclxuICAvLyBDYWxjdWxhdGUgYmFyIHBvc2l0aW9uaW5nXHJcbiAgY29uc3QgdG90YWxCYXJzV2lkdGggPSBkYXRhLmxlbmd0aCAqIGJhcldpZHRoO1xyXG4gIGNvbnN0IHRvdGFsU3BhY2luZyA9IChkYXRhLmxlbmd0aCAtIDEpICogYmFyUGFkZGluZztcclxuICBjb25zdCByZXF1aXJlZFdpZHRoID0gdG90YWxCYXJzV2lkdGggKyB0b3RhbFNwYWNpbmcgKyAodGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyKTtcclxuICBjb25zdCBlZmZlY3RpdmVXaWR0aCA9IE1hdGgubWF4KHdpZHRoLCByZXF1aXJlZFdpZHRoKTtcclxuICBcclxuICBjb25zdCBwYWRkaW5nUmF0aW8gPSBiYXJQYWRkaW5nIC8gKGJhcldpZHRoICsgYmFyUGFkZGluZyk7XHJcbiAgXHJcbiAgLy8gWC1zY2FsZSBzdGFydHMgZnJvbSAwIChubyBsZWZ0IHNwYWNpbmcgZm9yIGdyaWQgYWxpZ25tZW50KVxyXG5jb25zdCB4U2NhbGUgPSBkM1xyXG4gIC5zY2FsZUJhbmQoKVxyXG4gIC5yYW5nZVJvdW5kKFswLCBkaW1lbnNpb25zLnJlcXVpcmVkU3ZnV2lkdGhdKVxyXG4gIC5kb21haW4oZGF0YS5tYXAoZCA9PiBkLm5hbWUpLnJldmVyc2UoKSlcclxuICAucGFkZGluZ0lubmVyKHBhZGRpbmdSYXRpbylcclxuICAucGFkZGluZ091dGVyKDAuMSkgIC8vIFNtYWxsIHBhZGRpbmcgZm9yIHZpc3VhbCBzcGFjaW5nXHJcbiAgLmFsaWduKDAuNSk7XHJcblxyXG4gIGNvbnN0IHhTY2FsZUZyb21PcmlnaW4gPSBkM1xyXG4gICAgLnNjYWxlQmFuZCgpXHJcbiAgICAucmFuZ2VSb3VuZChbd2lkdGgsIDBdKVxyXG4gICAgLmRvbWFpbihkYXRhLm1hcChkID0+IGQubmFtZSkucmV2ZXJzZSgpKTtcclxuXHJcbiAgY29uc3QgeVNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZVJvdW5kKFtoZWlnaHQsIDBdKTtcclxuICBcclxuICBsZXQgbWF4VmFsdWUgPSBkMy5tYXgobGF5ZXJzLCAoZDogYW55KSA9PiBkMy5tYXgoZCwgKGQ6IGFueSkgPT4gZFsxXSkpO1xyXG4gIFxyXG4gIGlmIChtYXhWYWx1ZSA9PT0gMCkge1xyXG4gICAgbWF4VmFsdWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSBcclxuICAgICAgPyBOdW1iZXIodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSArIDIwIFxyXG4gICAgICA6IDEwMDtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgIG1heFZhbHVlICo9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJiBtYXhWYWx1ZSA8IE51bWJlcih0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBOdW1iZXIodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KTtcclxuICAgIG1heFZhbHVlID0gbWF4VmFsdWUgPCAxMCAmJiB0YXJnZXQgPCAxMCA/IHRhcmdldCArIDMgOiB0YXJnZXQgKyAyMDtcclxuICB9XHJcblxyXG4gIHlTY2FsZS5kb21haW4oWzAsIG1heFZhbHVlXSkubmljZSgpO1xyXG5cclxuICBsZXQgbGluZVlzY2FsZSA9IG51bGw7XHJcbiAgaWYgKGxpbmVEYXRhKSB7XHJcbiAgICBsaW5lWXNjYWxlID0gZDNcclxuICAgICAgLnNjYWxlTGluZWFyKClcclxuICAgICAgLmRvbWFpbihbMCwgZDMubWF4KGxpbmVEYXRhLCBkID0+ICtkLnZhbHVlKV0pXHJcbiAgICAgIC5yYW5nZShbaGVpZ2h0LCAwXSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyB4U2NhbGUsIHhTY2FsZUZyb21PcmlnaW4sIHlTY2FsZSwgbGluZVlzY2FsZSB9O1xyXG59XHJcblxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUF4ZXMoc2NhbGVzOiBhbnkpIHtcclxuICAgIGNvbnN0IHhBeGlzID0gZDNcclxuICAgICAgLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSlcclxuICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgIC50aWNrRm9ybWF0KHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzTGFiZWxGb21hdHRlcik7XHJcblxyXG4gICAgY29uc3QgeUF4aXMgPSBkM1xyXG4gICAgICAuYXhpc0xlZnQoc2NhbGVzLnlTY2FsZSlcclxuICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgICBsZXQgeUxpbmVBeGlzID0gbnVsbDtcclxuICAgIGlmIChzY2FsZXMubGluZVlzY2FsZSkge1xyXG4gICAgICB5TGluZUF4aXMgPSBkM1xyXG4gICAgICAgIC5heGlzUmlnaHQoc2NhbGVzLmxpbmVZc2NhbGUpXHJcbiAgICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgIC50aWNrRm9ybWF0KHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlMaW5lQXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IHhBeGlzLCB5QXhpcywgeUxpbmVBeGlzIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckJhcnMoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIGxheWVyczogYW55W10sXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLFxyXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9uc1xyXG4gICkge1xyXG4gICAgY29uc3QgbGF5ZXIgPSBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnLmxheWVyJylcclxuICAgICAgLmRhdGEobGF5ZXJzKVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xheWVyJylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgKGQ6IGFueSkgPT4gbWV0YURhdGEuY29sb3JzW2Qua2V5XSk7XHJcblxyXG4gICAgY29uc3QgcmVjdCA9IGxheWVyXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAuZGF0YSgoZDogYW55KSA9PiBkKVxyXG4gICAgICAuZW50ZXIoKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFJlY3RhbmdsZXMocmVjdCwgc2NhbGVzLCBtZXRhRGF0YSwgZGltZW5zaW9ucyk7XHJcbiAgICB0aGlzLmFkZEludGVyYWN0aW9ucyhyZWN0LCBzdmcsIG1ldGFEYXRhLCBzY2FsZXMpO1xyXG4gICAgXHJcbiAgICByZXR1cm4gcmVjdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwZW5kUmVjdGFuZ2xlcyhcclxuICByZWN0OiBhbnksXHJcbiAgc2NhbGVzOiBhbnksXHJcbiAgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsXHJcbiAgZGltZW5zaW9uczogRGltZW5zaW9uc1xyXG4pIHtcclxuICBjb25zdCB7IGJhcldpZHRoLCBiYXJQYWRkaW5nIH0gPSBkaW1lbnNpb25zO1xyXG4gIGNvbnN0IHsgeFNjYWxlLCB5U2NhbGUgfSA9IHNjYWxlcztcclxuXHJcbiAgcmVjdFxyXG4gICAgLmFwcGVuZCgncmVjdCcpXHJcbiAgICAub24oJ2NsaWNrJywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuY2hhcnREYXRhLmxpbmVEYXRhIHx8IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmZvckNvbXBhcmlzb24pIHtcclxuICAgICAgICBpZiAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljaz8uaW5jbHVkZXMoZC5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soZC5kYXRhLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC5hdHRyKCd5JywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWlzTmFOKGRbMF0pICYmICFpc05hTihkWzFdKSkge1xyXG4gICAgICAgIGNvbnN0IGFjdHVhbEhlaWdodCA9IHlTY2FsZShkWzBdKSAtIHlTY2FsZShkWzFdKTtcclxuICAgICAgICByZXR1cm4gYWN0dWFsSGVpZ2h0IDwgMyA/IHlTY2FsZShkWzBdKSAtIDMgOiB5U2NhbGUoZFsxXSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ3gnLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHhQb3NpdGlvbiA9IHhTY2FsZShkLmRhdGEubmFtZSk7XHJcbiAgICAgIGNvbnN0IGJhbmR3aWR0aCA9IHhTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgICAgXHJcbiAgICAgIGlmICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUpIHtcclxuICAgICAgICByZXR1cm4geFBvc2l0aW9uICsgKGJhbmR3aWR0aCAtIGJhcldpZHRoKSAvIDI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiYgdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPD0gMykge1xyXG4gICAgICAgIHJldHVybiB4UG9zaXRpb24gKyBiYW5kd2lkdGggLyAyIC0gMzU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY2FsY3VsYXRlZFdpZHRoID0gYmFuZHdpZHRoICogMC44O1xyXG4gICAgICByZXR1cm4geFBvc2l0aW9uICsgKGJhbmR3aWR0aCAtIGNhbGN1bGF0ZWRXaWR0aCkgLyAyO1xyXG4gICAgfSlcclxuICAgIC5hdHRyKCdoZWlnaHQnLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghaXNOYU4oZFswXSkgJiYgIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0geVNjYWxlKGRbMF0pIC0geVNjYWxlKGRbMV0pO1xyXG4gICAgICAgIHJldHVybiBhY3R1YWxIZWlnaHQgPCAzID8gMyA6IGFjdHVhbEhlaWdodDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pXHJcbiAgICAuYXR0cignd2lkdGgnLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUpIHJldHVybiBiYXJXaWR0aDtcclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiYgdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPD0gMykge1xyXG4gICAgICAgIHJldHVybiA3MDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4geFNjYWxlLmJhbmR3aWR0aCgpICogMC44O1xyXG4gICAgfSlcclxuICAgIC5zdHlsZSgnY3Vyc29yJywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICAgICAgaWYgKG1ldGFEYXRhLmJhcldpdGhvdXRDbGljaz8uaW5jbHVkZXMoZC5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgIHJldHVybiAnZGVmYXVsdCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAncG9pbnRlcic7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICdkZWZhdWx0JztcclxuICAgIH0pXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogYW55KSA9PiB0aGlzLmdldEJhckNvbG9yKGQsIG1ldGFEYXRhKSk7XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCYXJDb2xvcihkOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKTogc3RyaW5nIHtcclxuICAgIGlmIChcclxuICAgICAgIWlzTmFOKGRbMF0pICYmXHJcbiAgICAgICFpc05hTihkWzFdKSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICBwYXJzZUZsb2F0KGRbMV0pIC0gcGFyc2VGbG9hdChkWzBdKSA+PSBwYXJzZUZsb2F0KFN0cmluZyh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5iYXJBYm92ZVRhcmdldENvbG9yIHx8IG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkSW50ZXJhY3Rpb25zKHJlY3Q6IGFueSwgc3ZnOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLCBzY2FsZXM6IGFueSkge1xyXG4gICAgcmVjdFxyXG4gICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLm9uKCdtb3VzZWVudGVyJywgKGQ6IGFueSkgPT4gdGhpcy5oYW5kbGVNb3VzZU92ZXIoZCwgc3ZnLCBtZXRhRGF0YSwgc2NhbGVzKSlcclxuICAgICAgLm9uKCdtb3VzZW91dCcsIChkOiBhbnkpID0+IHRoaXMuaGFuZGxlTW91c2VPdXQoc3ZnLCBtZXRhRGF0YSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVNb3VzZU92ZXIoZDogYW55LCBzdmc6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIHNjYWxlczogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSByZXR1cm47XHJcblxyXG4gICAgc3ZnLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5maWx0ZXIoKGRhdGE6IGFueSkgPT4gZGF0YSA9PT0gZClcclxuICAgICAgLnN0eWxlKCdmaWxsJywgKGQ6IGFueSkgPT4gdGhpcy5nZXRIb3ZlckNvbG9yKGQsIG1ldGFEYXRhKSk7XHJcblxyXG4gICAgdGhpcy5kaXNwbGF5VG9vbHRpcChkLCBzdmcsIG1ldGFEYXRhLCBzY2FsZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIb3ZlckNvbG9yKGQ6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICAhaXNOYU4oZFswXSkgJiZcclxuICAgICAgIWlzTmFOKGRbMV0pICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgIHBhcnNlRmxvYXQoZFsxXSkgLSBwYXJzZUZsb2F0KGRbMF0pID49IHBhcnNlRmxvYXQoU3RyaW5nKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmJhckFib3ZlVGFyZ2V0SG92ZXJDb2xvciB8fFxyXG4gICAgICAgICAgICAgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuYmFyQWJvdmVUYXJnZXRDb2xvciB8fFxyXG4gICAgICAgICAgICAgbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRhRGF0YS5ob3ZlckNvbG9yIHx8IG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3BsYXlUb29sdGlwKGQ6IGFueSwgc3ZnOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLCBzY2FsZXM6IGFueSkge1xyXG4gICAgY29uc3QgeyB4U2NhbGUsIHlTY2FsZSB9ID0gc2NhbGVzO1xyXG4gICAgY29uc3QgdmFsdWUgPSBkWzFdIC0gZFswXTtcclxuICAgIFxyXG4gICAgaWYgKGlzTmFOKHZhbHVlKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJhbmR3aWR0aCA9IHhTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgIFxyXG4gICAgLy8gRml4ZWQgdG9vbHRpcCB3aWR0aCBmb3IgYWxsIHJlc29sdXRpb25zXHJcbiAgICBjb25zdCB3aWR0aCA9IC93ZWVrL2kudGVzdChkLmRhdGEubmFtZSkgJiYgL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KGQuZGF0YS5uYW1lKVxyXG4gICAgICA/ICcyNTBweCdcclxuICAgICAgOiBiYW5kd2lkdGggKyB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIgPiAxODBcclxuICAgICAgICA/ICcxODBweCdcclxuICAgICAgICA6IGJhbmR3aWR0aCArIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMjtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKCd4JywgdGhpcy5jYWxjdWxhdGVUb29sdGlwWChkLCB4U2NhbGUsIHdpZHRoKSlcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJylcclxuICAgICAgLmF0dHIoJ3knLCB5U2NhbGUoZFsxXSkgLSA1MSlcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCA0MClcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RpdGxlJylcclxuICAgICAgLnN0eWxlKCd6LWluZGV4JywgOTkpXHJcbiAgICAgIC5odG1sKHRoaXMuZ2VuZXJhdGVUb29sdGlwSHRtbChkLCBtZXRhRGF0YSwgdmFsdWUpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlVG9vbHRpcFgoZDogYW55LCB4U2NhbGU6IGFueSwgd2lkdGg6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBiYW5kd2lkdGggPSB4U2NhbGUuYmFuZHdpZHRoKCk7XHJcbiAgICBjb25zdCBudW1lcmljV2lkdGggPSB0eXBlb2Ygd2lkdGggPT09ICdzdHJpbmcnID8gcGFyc2VJbnQod2lkdGgpIDogd2lkdGg7XHJcbiAgICBcclxuICAgIGlmIChiYW5kd2lkdGggKyB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIgPiAxODApIHtcclxuICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgLSB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyArXHJcbiAgICAgICAgICAgICAoYmFuZHdpZHRoICsgdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyIC0gMTgwKSAvIDI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKSAtIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVRvb2x0aXBIdG1sKGQ6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSAwKSByZXR1cm4gJzxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4wPC9zcGFuPic7XHJcblxyXG4gICAgY29uc3QgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICAgIGNvbnN0IG5hbWUgPSBkLmRhdGEubmFtZSA/IGA8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JHtkLmRhdGEubmFtZX08L3NwYW4+YCA6ICcnO1xyXG4gICAgY29uc3QgdmFsdWVUZXh0ID0gbWV0YURhdGEudW5pdFxyXG4gICAgICA/IGAke21ldGFEYXRhLnVuaXR9JHt2YWx1ZX0gJHtkYXRhVHlwZX1gXHJcbiAgICAgIDogYCR7dmFsdWV9ICR7ZGF0YVR5cGV9YDtcclxuXHJcbiAgICByZXR1cm4gYCR7bmFtZX08c3BhbiBjbGFzcz1cInRpdGxlLXRvcC10ZXh0XCI+JHt2YWx1ZVRleHR9PC9zcGFuPmA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU1vdXNlT3V0KHN2ZzogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSkge1xyXG4gICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkgcmV0dXJuO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogYW55KSA9PiB0aGlzLmdldEJhckNvbG9yKGQsIG1ldGFEYXRhKSk7XHJcbiAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQXhpc0xhYmVscyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgc3ZnWUF4aXNMZWZ0OiBhbnksXHJcbiAgICBib3R0b21MYWJlbENvbnRhaW5lcjogYW55LFxyXG4gICAgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxyXG4gICAgbWFyZ2luOiBhbnlcclxuICApIHtcclxuICAgIGlmIChtZXRhRGF0YS55TGFiZWwpIHtcclxuICAgICAgdGhpcy5hZGRZQXhpc0xhYmVsKHN2Z1lBeGlzTGVmdCwgbWV0YURhdGEueUxhYmVsLCBkaW1lbnNpb25zLmhlaWdodCwgbWFyZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWV0YURhdGEueExhYmVsKSB7XHJcbiAgICAgIHRoaXMuYWRkWEF4aXNMYWJlbChib3R0b21MYWJlbENvbnRhaW5lciwgbWV0YURhdGEueExhYmVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkWUF4aXNMYWJlbChzdmdZQXhpc0xlZnQ6IGFueSwgbGFiZWw6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIsIG1hcmdpbjogYW55KSB7XHJcbiAgICBjb25zdCBpc3JpYSA9IHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uPy5pc1JpYTtcclxuICAgIGNvbnN0IGlzQWNyb255bSA9IHRoaXMuaXNBY3JvbnltTGFiZWwobGFiZWwpO1xyXG4gICAgY29uc3QgeVBvc2l0aW9uID0gaXNyaWEgPyAtbWFyZ2luLmxlZnQgLyAyIC0gMzAgOiAtbWFyZ2luLmxlZnQgLyAyIC0gNDA7XHJcblxyXG4gICAgc3ZnWUF4aXNMZWZ0LnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsLCAubGliLXlsYWJlbC1kcmlsbGRvd25jaGFydHMsIC5saWIteWxhYmVsLXdlZWtseUNoYXJ0cycpLnJlbW92ZSgpO1xyXG5cclxuICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgdGhpcy5nZXRZQXhpc0xhYmVsQ2xhc3MoKSlcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoLTkwKScpXHJcbiAgICAgIC5hdHRyKCd5JywgeVBvc2l0aW9uKVxyXG4gICAgICAuYXR0cigneCcsIC1oZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cignZHknLCAnMWVtJylcclxuICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAudGV4dChpc0Fjcm9ueW0gPyBsYWJlbC50b1VwcGVyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKSlcclxuICAgICAgLnN0eWxlKCd0ZXh0LXRyYW5zZm9ybScsIGlzQWNyb255bSA/ICdub25lJyA6ICdjYXBpdGFsaXplJyk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSBhZGRYQXhpc0xhYmVsKGJvdHRvbUxhYmVsQ29udGFpbmVyOiBhbnksIGxhYmVsOiBzdHJpbmcpIHtcclxuICBjb25zdCBpc0Fjcm9ueW0gPSB0aGlzLmlzQWNyb255bUxhYmVsKGxhYmVsKTtcclxuXHJcbiAgYm90dG9tTGFiZWxDb250YWluZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgLnN0eWxlKCd0ZXh0LWFsaWduJywgJ2NlbnRlcicpXHJcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcclxuICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnNjAwJylcclxuICAgIC5zdHlsZSgnZm9udC1mYW1pbHknLCAnc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvJylcclxuICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgLnN0eWxlKCd0ZXh0LXRyYW5zZm9ybScsIGlzQWNyb255bSA/ICdub25lJyA6ICdjYXBpdGFsaXplJylcclxuICAgIC50ZXh0KGlzQWNyb255bSA/IGxhYmVsLnRvVXBwZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpKTtcclxufVxyXG5cclxuICBwcml2YXRlIGlzQWNyb255bUxhYmVsKGxhYmVsOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGNsZWFuTGFiZWwgPSBsYWJlbC5yZXBsYWNlKC9bXkEtWmEtel0vZywgJycpO1xyXG4gICAgcmV0dXJuIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fFxyXG4gICAgICAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0WUF4aXNMYWJlbENsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgYmFzZUNsYXNzID0gJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJztcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi15bGFiZWwtZHJpbGxkb3duY2hhcnRzYDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi15bGFiZWwtd2Vla2x5Q2hhcnRzYDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFhBeGlzTGFiZWxDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0c2A7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBsaWIteGxhYmVsLXdlZWtseUNoYXJ0c2A7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBsaWItYXhpcy13YXRlcmZhbGwtbGFiZWxgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJHcmlkc0Zyb21MZWZ0QXhpcyhcclxuICBzdmdZQXhpc0xlZnQ6IGFueSxcclxuICBzY2FsZXM6IGFueSxcclxuICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbikge1xyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgIC8vIENhbGN1bGF0ZSBob3cgZmFyIHRoZSBncmlkIGxpbmVzIG5lZWQgdG8gZXh0ZW5kXHJcbiAgICAvLyBUaGV5IHN0YXJ0IGZyb20gdGhlIGxlZnQgWS1heGlzIChhdCB4PTgwKSBhbmQgZ28gdG8gdGhlIGZ1bGwgd2lkdGhcclxuICAgIGNvbnN0IGdyaWRXaWR0aCA9IGRpbWVuc2lvbnMucmVxdWlyZWRTdmdXaWR0aCArIDgwICsgdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIO1xyXG4gICAgXHJcbiAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkIGhvcml6b250YWwtZ3JpZC1mcm9tLWxlZnQnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoXHJcbiAgICAgICAgZDNcclxuICAgICAgICAgIC5heGlzTGVmdChzY2FsZXMueVNjYWxlKVxyXG4gICAgICAgICAgLnRpY2tzKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgICAgLnRpY2tTaXplKC1ncmlkV2lkdGgpICAvLyBOZWdhdGl2ZSB0byBleHRlbmQgcmlnaHRcclxuICAgICAgICAgIC50aWNrRm9ybWF0KCcnKVxyXG4gICAgICApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKVxyXG4gICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMScpXHJcbiAgICAgIC5jYWxsKChnOiBhbnkpID0+IHtcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpO1xyXG4gICAgICAgIGcuc2VsZWN0QWxsKCcudGljayBsaW5lJylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUNvbmZpZ3VyYXRpb25GbGFncygpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RvcENhcHRpb25WaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RvcENhcHRpb25WaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUb3BDYXB0aW9uVmlzaWJsZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVTdGFja2VkQ2hhcnQoKSB7XHJcbiAgICAvLyBVc2UgZml4ZWQgY29uZmlndXJhdGlvbiBmb3IgYWxsIHJlc29sdXRpb25zXHJcbiAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4gPSB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiA0MCwgbGVmdDogNDAgfTtcclxuICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzID0gNTtcclxuICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCA9IDcwO1xyXG4gICAgXHJcbiAgICB0aGlzLm1lcmdlQ29uZmlndXJhdGlvbnMoKTtcclxuICAgIHRoaXMuYXBwbHlDb25maWd1cmF0aW9uRmxhZ3MoKTtcclxuXHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jaGFydERhdGEuZGF0YTtcclxuICAgIGNvbnN0IG1ldGFEYXRhID0gdGhpcy5wcmVwYXJlTWV0YURhdGEodGhpcy5jaGFydERhdGEubWV0YURhdGEpO1xyXG4gICAgY29uc3QgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuICAgIGNvbnN0IGNvbG9ycyA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIGNvbnN0IGtleUxpc3QgPSBtZXRhRGF0YS5rZXlMaXN0O1xyXG5cclxuICAgIGNvbnN0IGNoYXJ0Q29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgY29uc3QgdmVydGljYWxzdGFja2VkY29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMudmVydGljYWxzdGFja2VkY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgXHJcbiAgICBjb25zdCBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcbiAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKFxyXG4gICAgICBjaGFydENvbnRhaW5lcixcclxuICAgICAgdmVydGljYWxzdGFja2VkY29udGFpbmVyLFxyXG4gICAgICBtYXJnaW4sXHJcbiAgICAgIGRhdGEubGVuZ3RoXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGhhc1hMYWJlbCA9ICEhbWV0YURhdGEueExhYmVsO1xyXG5cclxuICAgIGNvbnN0IHsgc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGJvdHRvbUxhYmVsQ29udGFpbmVyIH0gPSB0aGlzLmNyZWF0ZVN2Z0NvbnRhaW5lcnMoXHJcbiAgICAgIGNoYXJ0Q29udGFpbmVyLFxyXG4gICAgICBkaW1lbnNpb25zLFxyXG4gICAgICBtYXJnaW4sXHJcbiAgICAgIGhhc1hMYWJlbFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzdGFjazogYW55ID0gZDMuc3RhY2soKS5rZXlzKGtleUxpc3QpLm9mZnNldChkMy5zdGFja09mZnNldE5vbmUpO1xyXG4gICAgY29uc3QgbGF5ZXJzOiBhbnkgPSBzdGFjayhkYXRhKTtcclxuICAgIGRhdGEuc29ydCgoYSwgYikgPT4gYi50b3RhbCAtIGEudG90YWwpO1xyXG5cclxuICAgIGNvbnN0IHNjYWxlcyA9IHRoaXMuY3JlYXRlU2NhbGVzKGRhdGEsIGxheWVycywgbGluZURhdGEsIGRpbWVuc2lvbnMpO1xyXG4gICAgY29uc3QgYXhlcyA9IHRoaXMuY3JlYXRlQXhlcyhzY2FsZXMpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyR3JpZHNGcm9tTGVmdEF4aXMoc3ZnWUF4aXNMZWZ0LCBzY2FsZXMsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5yZW5kZXJHcmlkcyhzdmcsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5yZW5kZXJCYXJzKHN2ZywgbGF5ZXJzLCBzY2FsZXMsIG1ldGFEYXRhLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyQXhlcyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zLCBkYXRhKTtcclxuICAgIHRoaXMucmVuZGVyQXhpc0xhYmVscyhzdmcsIHN2Z1lBeGlzTGVmdCxib3R0b21MYWJlbENvbnRhaW5lciwgbWV0YURhdGEsIGRpbWVuc2lvbnMsIG1hcmdpbik7XHJcbiAgICB0aGlzLnJlbmRlclRhcmdldExpbmUoc3ZnLCBzdmdZQXhpc1JpZ2h0LCBzY2FsZXMsIGRpbWVuc2lvbnMsIG1ldGFEYXRhKTtcclxuICAgIHRoaXMucmVuZGVyRGF0YUxhYmVscyhyZWN0LCBzY2FsZXMsIG1ldGFEYXRhLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyTGluZUNoYXJ0KHN2ZywgbGluZURhdGEsIHNjYWxlcywgY29sb3JzLCBtZXRhRGF0YSk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJHcmlkcyhzdmc6IGFueSwgc2NhbGVzOiBhbnksIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYZ3JpZEJldHdlZW5MYWJlbHMpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQgdmVydGljYWwtZ3JpZCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7c2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDJ9LCR7ZGltZW5zaW9ucy5oZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSkudGlja1NpemUoLWRpbWVuc2lvbnMuaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAnIzk5OTk5OScpXHJcbiAgICAgIC5jYWxsKChnOiBhbnkpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzR3JpZCkge1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWQubGVuZ3RoOyBqKyspIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgYHgke2ogKyAyfSBheGlzJHtqICsgMn1gKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodCAqIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzR3JpZFtqXX0pYClcclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHNjYWxlcy54U2NhbGUpLnRpY2tTaXplKDApLnRpY2tzKDUpLnRpY2tGb3JtYXQoJycpKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJBeGVzKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBzdmdZQXhpc0xlZnQ6IGFueSxcclxuICAgIHN2Z1lBeGlzUmlnaHQ6IGFueSxcclxuICAgIGF4ZXM6IGFueSxcclxuICAgIHNjYWxlczogYW55LFxyXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcclxuICAgIGRhdGE6IGFueVtdXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc2hvd1hheGlzVG9wKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItbGluZS1heGlzLXRleHQgbGliLWxpbmUteC1heGlzLXRleHQgeC1heGlzJylcclxuICAgICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKS50aWNrU2l6ZSgwKSk7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy54LWF4aXMgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJTdGFuZGFyZEF4ZXMoc3ZnLCBheGVzLCBzY2FsZXMsIGRpbWVuc2lvbnMsIGRhdGEpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyRHJpbGxkb3duQXhlcyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyTXVsdGlDaGFydEF4ZXMoc3ZnLCBheGVzLCBzY2FsZXMsIGRpbWVuc2lvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXBwbHlBeGlzU3R5bGluZyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCk7XHJcbiAgICB0aGlzLmFwcGx5QXhpc0NvbmZpZ3VyYXRpb25zKHN2Zywgc2NhbGVzLCBkaW1lbnNpb25zLCBkYXRhKTtcclxuICB9XHJcblxyXG5wcml2YXRlIHJlbmRlclN0YW5kYXJkQXhlcyhcclxuICBzdmc6IGFueSxcclxuICBheGVzOiBhbnksXHJcbiAgc2NhbGVzOiBhbnksXHJcbiAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcclxuICBkYXRhOiBhbnlbXVxyXG4pIHtcclxuICBjb25zdCBpc01vYmlsZU9yVGFibGV0ID0gd2luZG93LmlubmVyV2lkdGggPCAxMDI0O1xyXG4gIFxyXG4gIC8vIFgtYXhpcyB3aXRoIGxhYmVsc1xyXG4gIGNvbnN0IHhBeGlzR3JvdXAgPSBzdmdcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2RpbWVuc2lvbnMuaGVpZ2h0fSlgKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0JylcclxuICAgIC5jYWxsKGF4ZXMueEF4aXMpO1xyXG5cclxuICAvLyBTdHlsZSBYLWF4aXMgbGFiZWxzXHJcbiAgeEF4aXNHcm91cFxyXG4gICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgLnN0eWxlKCdmb250LXNpemUnLCBpc01vYmlsZU9yVGFibGV0ID8gJzEwcHgnIDogJzEycHgnKVxyXG4gICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAuYXR0cignZHknLCAnMWVtJylcclxuICAgIC5lYWNoKGZ1bmN0aW9uKHRoaXM6IFNWR1RleHRFbGVtZW50LCBkOiBhbnkpIHtcclxuICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSBkMy5zZWxlY3QodGhpcyk7XHJcbiAgICAgIGNvbnN0IHRleHQgPSB0ZXh0RWxlbWVudC50ZXh0KCk7XHJcbiAgICAgICAgXHJcbiAgICAgIGlmIChpc01vYmlsZU9yVGFibGV0ICYmIHRleHQubGVuZ3RoID4gMTIpIHtcclxuICAgICAgICB0ZXh0RWxlbWVudC50ZXh0KHRleHQuc3Vic3RyaW5nKDAsIDEwKSArICcuLi4nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4vLyBFbnN1cmUgWC1heGlzIGxpbmUgc3RhcnRzIGV4YWN0bHkgYXQgeD0wXHJcbiAgeEF4aXNHcm91cFxyXG4gICAgLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yKScpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKVxyXG4gICAgLmF0dHIoJ2QnLCBgTTAsMC41SCR7ZGltZW5zaW9ucy5yZXF1aXJlZFN2Z1dpZHRofWApO1xyXG5cclxuICAvLyBZLWF4aXNcclxuICBzdmdcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0JylcclxuICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgIC5jYWxsKGF4ZXMueUF4aXMpXHJcbiAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG59XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyRHJpbGxkb3duQXhlcyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgc3ZnWUF4aXNMZWZ0OiBhbnksXHJcbiAgICBzdmdZQXhpc1JpZ2h0OiBhbnksXHJcbiAgICBheGVzOiBhbnksXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNcclxuICApIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2RpbWVuc2lvbnMuaGVpZ2h0fSlgKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteC1heGlzLXRleHQgbXVsdGljaGFydDEnKVxyXG4gICAgICAuY2FsbChheGVzLnhBeGlzKVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG5cclxuICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmNhbGwoYXhlcy55QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5jYWxsKGF4ZXMueUF4aXMpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlck11bHRpQ2hhcnRBeGVzKHN2ZzogYW55LCBheGVzOiBhbnksIHNjYWxlczogYW55LCBkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0IG11bHRpY2hhcnQnKVxyXG4gICAgICAuY2FsbChheGVzLnhBeGlzKVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuY2FsbChheGVzLnlBeGlzKVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5QXhpc1N0eWxpbmcoc3ZnOiBhbnksIHN2Z1lBeGlzTGVmdDogYW55LCBzdmdZQXhpc1JpZ2h0OiBhbnkpIHtcclxuICAgIGNvbnN0IHN0eWxlQXhpc0RvbWFpbiA9IChjb250YWluZXI6IGFueSkgPT4ge1xyXG4gICAgICBjb250YWluZXIuc2VsZWN0QWxsKCcuZG9tYWluJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yKScpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHN0eWxlQXhpc0RvbWFpbihzdmcpO1xyXG4gICAgc3R5bGVBeGlzRG9tYWluKHN2Z1lBeGlzTGVmdCk7XHJcbiAgICBzdHlsZUF4aXNEb21haW4oc3ZnWUF4aXNSaWdodCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWQpIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNDb2xvcikge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5tdWx0aWNoYXJ0Jykuc3R5bGUoXHJcbiAgICAgICAgJ2NvbG9yJyxcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzQ29sb3IgfHwgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUF4aXNDb25maWd1cmF0aW9ucyhzdmc6IGFueSwgc2NhbGVzOiBhbnksIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsIGRhdGE6IGFueVtdKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5tdWx0aWNoYXJ0ID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLm11bHRpY2hhcnQgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlbmRlckN1c3RvbVhBeGlzKHN2Zywgc2NhbGVzLCBkaW1lbnNpb25zLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuKSB7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzSGlkZGVuKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzWm9vbWVkT3V0ICYmIGRhdGEubGVuZ3RoID4gOSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdlbmQnKVxyXG4gICAgICAgIC5hdHRyKCd4JywgJy01JylcclxuICAgICAgICAuYXR0cignZHknLCBudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQ3VzdG9tWEF4aXMoc3ZnOiBhbnksIHNjYWxlczogYW55LCBkaW1lbnNpb25zOiBEaW1lbnNpb25zLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7ZGltZW5zaW9ucy5oZWlnaHR9KWApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAnIzAwMCcpXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSkudGlja1NpemUoMCkpXHJcbiAgICAgIC5jYWxsKChnOiBhbnkpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG5cclxuICAgIHRoaXMuc3R5bGVDdXN0b21YQXhpc1RpY2tzKHN2ZywgZGF0YSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhMYWJlbHNPblNhbWVMaW5lKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlYTGFiZWxzT25TYW1lTGluZShzdmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdHlsZUN1c3RvbVhBeGlzVGlja3Moc3ZnOiBhbnksIGRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgYWx0ZXJuYXRlVGV4dCA9IGZhbHNlO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJy54MS5heGlzMSAudGljayBsaW5lJykuYXR0cigneTInLCAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5oaWRlWGF4aXNUaWNrKSByZXR1cm4gMDtcclxuICAgICAgXHJcbiAgICAgIGlmIChhbHRlcm5hdGVUZXh0ICYmICF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0KSB7XHJcbiAgICAgICAgYWx0ZXJuYXRlVGV4dCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLkNPTlNUQU5UUy5MT05HX1RJQ0tfTEVOR1RIX0JHIC0gNztcclxuICAgICAgfVxyXG4gICAgICBhbHRlcm5hdGVUZXh0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIHRoaXMuQ09OU1RBTlRTLlNIT1JUX1RJQ0tfTEVOR1RIX0JHIC0gNDtcclxuICAgIH0pO1xyXG5cclxuICAgIGFsdGVybmF0ZVRleHQgPSBmYWxzZTtcclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGggPiA4IFxyXG4gICAgICAgICAgICA/ICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bi1hbHQnXHJcbiAgICAgICAgICAgIDogJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cyc7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd5JywgKCkgPT4ge1xyXG4gICAgICAgIGlmIChhbHRlcm5hdGVUZXh0KSB7XHJcbiAgICAgICAgICBhbHRlcm5hdGVUZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5DT05TVEFOVFMuTE9OR19USUNLX0xFTkdUSF9CRztcclxuICAgICAgICB9XHJcbiAgICAgICAgYWx0ZXJuYXRlVGV4dCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQ09OU1RBTlRTLlNIT1JUX1RJQ0tfTEVOR1RIX0JHO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlYTGFiZWxzT25TYW1lTGluZShzdmc6IGFueSkge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAuYXR0cigneScsIHRoaXMuQ09OU1RBTlRTLlNIT1JUX1RJQ0tfTEVOR1RIX0JHKVxyXG4gICAgICAudGV4dCgoZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IGQudHJpbSgpO1xyXG4gICAgICAgIGNvbnN0IHNwYWNlSW5kZXggPSB0cmltbWVkLmluZGV4T2YoJyAnKTtcclxuICAgICAgICByZXR1cm4gc3BhY2VJbmRleCA+IC0xIFxyXG4gICAgICAgICAgPyB0cmltbWVkLnN1YnN0cmluZygwLCBzcGFjZUluZGV4KS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICA6IHRyaW1tZWQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgIC5hdHRyKCd5JywgdGhpcy5DT05TVEFOVFMuTE9OR19USUNLX0xFTkdUSF9CRylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAnY3VycmVudENvbG9yJylcclxuICAgICAgLnRleHQoKGQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBkLnRyaW0oKTtcclxuICAgICAgICBjb25zdCBzcGFjZUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCcgJyk7XHJcbiAgICAgICAgcmV0dXJuIHNwYWNlSW5kZXggPiAtMSBcclxuICAgICAgICAgID8gdHJpbW1lZC5zdWJzdHJpbmcoc3BhY2VJbmRleCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgOiAnJztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckRhdGFMYWJlbHMocmVjdDogYW55LCBzY2FsZXM6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcclxuICAgIGlmICghdGhpcy5pc0NDICYmICF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSkge1xyXG4gICAgICByZWN0LmFwcGVuZCgnc3ZnOnRpdGxlJykudGV4dCgoZDogYW55KSA9PiBkWzFdIC0gZFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dUb3RhbE9uVG9wKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVG9wTGFiZWxzKHJlY3QsIHNjYWxlcywgbWV0YURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93QW5nbGVkTGFiZWxzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQW5nbGVkTGFiZWxzKHJlY3QsIHNjYWxlcywgbWV0YURhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUb3BMYWJlbHMocmVjdDogYW55LCBzY2FsZXM6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpIHtcclxuICAgIGNvbnN0IGZvcm1hdEZyb21CYWNrZW5kID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlclxyXG4gICAgICA/IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcih0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyKVxyXG4gICAgICA6IChkOiBhbnkpID0+IGQ7XHJcbiAgICBjb25zdCBmb3JtYXRGb3JIdWdlTnVtYmVycyA9IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcignLjJzJyk7XHJcblxyXG4gICAgcmVjdFxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ3gnLCAoZDogYW55KSA9PiBzY2FsZXMueFNjYWxlKGQuZGF0YS5uYW1lKSArIHNjYWxlcy54U2NhbGUuYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stbGFiZWxzLW9udG9wLXdla2x5Y2hhcnRzJylcclxuICAgICAgLmF0dHIoJ3knLCAoZDogYW55KSA9PiBzY2FsZXMueVNjYWxlKGRbMV0pIC0gMylcclxuICAgICAgLnRleHQoKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZFsxXSAtIGRbMF07XHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdmFsdWUgPD0gOTk5IFxyXG4gICAgICAgICAgPyBmb3JtYXRGcm9tQmFja2VuZCh2YWx1ZSlcclxuICAgICAgICAgIDogZm9ybWF0Rm9ySHVnZU51bWJlcnModmFsdWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBtZXRhRGF0YS51bml0ID8gbWV0YURhdGEudW5pdCArIGZvcm1hdHRlZFZhbHVlIDogZm9ybWF0dGVkVmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJBbmdsZWRMYWJlbHMocmVjdDogYW55LCBzY2FsZXM6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpIHtcclxuICAgIGNvbnN0IGZvcm1hdEZyb21CYWNrZW5kID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlclxyXG4gICAgICA/IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcih0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyKVxyXG4gICAgICA6IChkOiBhbnkpID0+IGQ7XHJcbiAgICBjb25zdCBmb3JtYXRGb3JIdWdlTnVtYmVycyA9IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcignLjJzJyk7XHJcbiAgICBjb25zdCB0ZW1wT2JqZWN0SG9sZGVyOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcblxyXG4gICAgcmVjdFxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ3gnLCAwKVxyXG4gICAgICAuYXR0cigneScsIDApXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgKGQ6IGFueSkgPT4gbWV0YURhdGEuY29sb3JzW2Qua2V5XSlcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kYXRhLWxhYmVscy1hbmdsZWQtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgLnRleHQoKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZFsxXSAtIGRbMF07XHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA8PSA5OTlcclxuICAgICAgICAgID8gZm9ybWF0RnJvbUJhY2tlbmQodmFsdWUpXHJcbiAgICAgICAgICA6IGZvcm1hdEZvckh1Z2VOdW1iZXJzKHZhbHVlKTtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbWV0YURhdGEudW5pdCA/IG1ldGFEYXRhLnVuaXQgKyBmb3JtYXR0ZWRWYWx1ZSA6IGZvcm1hdHRlZFZhbHVlO1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZFsxXSAtIGRbMF07XHJcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSByZXR1cm4gJ3JvdGF0ZSgwKSc7XHJcblxyXG4gICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgbGV0IGluY3JlbWVudGVyID0gMTtcclxuICAgICAgICBtZXRhRGF0YS5rZXlMaXN0LmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgIGlmIChkLmRhdGFba2V5XSkge1xyXG4gICAgICAgICAgICB0b3RhbCArPSBkLmRhdGFba2V5XTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGluY3JlbWVudGVyID0gMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0gPSAodGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0gfHwgMCkgKyBpbmNyZW1lbnRlcjtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdO1xyXG4gICAgICAgIGNvbnN0IHhQb3MgPSBzY2FsZXMueFNjYWxlKGQuZGF0YS5uYW1lKTtcclxuICAgICAgICBjb25zdCBiYW5kd2lkdGggPSBzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgICAgIGNvbnN0IHlQb3MgPSBzY2FsZXMueVNjYWxlKHRvdGFsKSAtIDM7XHJcblxyXG4gICAgICAgIHN3aXRjaCAocG9zaXRpb24pIHtcclxuICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4UG9zICsgYmFuZHdpZHRoIC8gM30sJHt5UG9zfSkgcm90YXRlKDI3MClgO1xyXG4gICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3hQb3MgKyBiYW5kd2lkdGggLyAyICsgMn0sJHt5UG9zfSkgcm90YXRlKDI3MClgO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4UG9zICsgKGJhbmR3aWR0aCAqIDMpIC8gNH0sJHt5UG9zfSkgcm90YXRlKDI3MClgO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRhcmdldExpbmUoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIHN2Z1lBeGlzUmlnaHQ6IGFueSxcclxuICAgIHNjYWxlczogYW55LFxyXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcclxuICAgIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhXHJcbiAgKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcGFyc2VkVGFyZ2V0ID0gdGhpcy5wYXJzZVRhcmdldFZhbHVlKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCk7XHJcbiAgICBjb25zdCB5WmVybyA9IHNjYWxlcy55U2NhbGUocGFyc2VkVGFyZ2V0KTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgIC5hdHRyKCd4MicsIGRpbWVuc2lvbnMud2lkdGgpXHJcbiAgICAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuY29sb3IpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyVGFyZ2V0TGFiZWwoc3ZnWUF4aXNSaWdodCwgeVplcm8sIG1ldGFEYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VUYXJnZXRWYWx1ZSh0YXJnZXQ6IHN0cmluZyB8IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZsb2F0KFN0cmluZyh0YXJnZXQpKTtcclxuICAgIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gMDtcclxuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlZCkgPyBwYXJzZUludChTdHJpbmcodGFyZ2V0KSkgOiBwYXJzZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRhcmdldExhYmVsKHN2Z1lBeGlzUmlnaHQ6IGFueSwgeVplcm86IG51bWJlciwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpIHtcclxuICAgIGNvbnN0IGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgfHwgJyc7XHJcbiAgICBjb25zdCB0YXJnZXROYW1lID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZSB8fCAndGFyZ2V0JztcclxuXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7eVplcm8gLSAxM30pYClcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgNTApXHJcbiAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd0YXJnZXQtZGlzcGxheScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuaHRtbChgPGRpdj4ke3RhcmdldE5hbWV9PC9kaXY+PGRpdj4ke3RoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldH0ke2RhdGFUeXBlfTwvZGl2PmApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJMaW5lQ2hhcnQoc3ZnOiBhbnksIGxpbmVEYXRhOiBhbnlbXSwgc2NhbGVzOiBhbnksIGNvbG9yczogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSkge1xyXG4gICAgaWYgKCFsaW5lRGF0YSB8fCAhY29sb3JzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZGF0YUdyb3VwID0gZDNcclxuICAgICAgLm5lc3QoKVxyXG4gICAgICAua2V5KChkOiBhbnkpID0+IGQuY2F0ZWdvcnkpXHJcbiAgICAgIC5lbnRyaWVzKGxpbmVEYXRhKTtcclxuXHJcbiAgICBjb25zdCBsaW5lR2VuID0gZDNcclxuICAgICAgLmxpbmUoKVxyXG4gICAgICAueCgoZDogYW55KSA9PiBzY2FsZXMueFNjYWxlKGQubmFtZSkgKyBzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLnkoKGQ6IGFueSkgPT4gc2NhbGVzLmxpbmVZc2NhbGUoZC52YWx1ZSkpO1xyXG5cclxuICAgIGRhdGFHcm91cC5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAgIC5kYXR1bShncm91cC52YWx1ZXMpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXHJcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIChkOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiBkWzBdPy5jYXRlZ29yeSBcclxuICAgICAgICAgICAgPyBjb2xvcnNbZFswXS5jYXRlZ29yeV1cclxuICAgICAgICAgICAgOiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAyLjUpXHJcbiAgICAgICAgLmF0dHIoJ2QnLCBsaW5lR2VuKTtcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyTGluZURvdHMoc3ZnLCBncm91cC52YWx1ZXMsIHNjYWxlcywgY29sb3JzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJMaW5lRG90cyhzdmc6IGFueSwgdmFsdWVzOiBhbnlbXSwgc2NhbGVzOiBhbnksIGNvbG9yczogYW55KSB7XHJcbiAgICBjb25zdCBkb3QgPSBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnLmxpbmUtZG90cycpXHJcbiAgICAgIC5kYXRhKHZhbHVlcylcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5vbignY2xpY2snLCAoZDogYW55KSA9PiB0aGlzLmhhbmRsZUNsaWNrKGQpKTtcclxuXHJcbiAgICBkb3RcclxuICAgICAgLmFwcGVuZCgnY2lyY2xlJylcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAoZDogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGQuY2F0ZWdvcnkgXHJcbiAgICAgICAgICA/IGNvbG9yc1tkLmNhdGVnb3J5XVxyXG4gICAgICAgICAgOiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcjtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3N0cm9rZScsICdub25lJylcclxuICAgICAgLmF0dHIoJ2N4JywgKGQ6IGFueSkgPT4gc2NhbGVzLnhTY2FsZShkLm5hbWUpICsgc2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgIC5hdHRyKCdjeScsIChkOiBhbnkpID0+IHNjYWxlcy5saW5lWXNjYWxlKGQudmFsdWUpKVxyXG4gICAgICAuYXR0cigncicsIDMpXHJcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKTtcclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpIHtcclxuICAgICAgZG90XHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2RvdHMnKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnLjg1ZW0nKVxyXG4gICAgICAgIC5zdHlsZSgnZm9udC13ZWlnaHQnLCAnYm9sZCcpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAoZDogYW55KSA9PiBzY2FsZXMueFNjYWxlKGQubmFtZSkgKyBzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgICAuYXR0cigneScsIChkOiBhbnkpID0+IHNjYWxlcy5saW5lWXNjYWxlKGQudmFsdWUpKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICctMWVtJylcclxuICAgICAgICAudGV4dCgoZDogYW55KSA9PiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sYWJlbEZvcm1hdHRlcihkLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDbGljayhkOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YT8ubWV0YURhdGE/Lmhhc0RyaWxsRG93biB8fCBkPy50b2dnbGVGcm9tKSB7XHJcbiAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkOiBhbnkpIHtcclxuICAgIHRoaXMuaGVhZGVyTWVudWNsaWNrRXZlbnQuZW1pdChpZCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKHsgaXNab29tT3V0LCBldmVudCB9OiB7IGlzWm9vbU91dDogYm9vbGVhbjsgZXZlbnQ6IGFueSB9KSB7XHJcbiAgICB0aGlzLmlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCk7XHJcbiAgfVxyXG59IiwiPG1ldGEgaHR0cC1lcXVpdj1cIkNBQ0hFLUNPTlRST0xcIiBjb250ZW50PVwiTk8tQ0FDSEVcIiAvPlxyXG48bWV0YSBodHRwLWVxdWl2PVwiRVhQSVJFU1wiIGNvbnRlbnQ9XCJTYXQsIDAxIEp1biAyMDA0IDExOjEyOjAxIEdNVFwiIC8+XHJcbjxkaXZcclxuICAjdmVydGljYWxzdGFja2VkY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2FyZC1iZyk7XCJcclxuXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYyXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcblxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XCJcclxuICAgIGlkPVwidmVydGljYWxzdGFja2VkY2hhcnRjb250YWluZXJcIlxyXG4gICAgI3ZlcnRpY2Fsc3RhY2tlZGNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmdcIlxyXG4gID48L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|