axidio-styleguide-library1-v2 0.3.14 → 0.3.16

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.
@@ -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 - margin.left - margin.right;
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`) // Exclude X-label space
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(${margin.left + 10},${margin.top})`);
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`) // Exclude X-label space
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,10 +273,10 @@ 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]) // Full width from 0
276
+ .rangeRound([0, dimensions.requiredSvgWidth])
278
277
  .domain(data.map(d => d.name).reverse())
279
278
  .paddingInner(paddingRatio)
280
- .paddingOuter(0)
279
+ .paddingOuter(0.1) // Small padding for visual spacing
281
280
  .align(0.5);
282
281
  const xScaleFromOrigin = d3
283
282
  .scaleBand()
@@ -602,12 +601,11 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
602
601
  .call((g) => g.select('.domain').remove());
603
602
  }
604
603
  if (this.chartConfiguration.yAxisGrid) {
605
- // Grid lines start from x=0 (no gap with Y-axis)
606
604
  const gridWidth = dimensions.requiredSvgWidth;
607
605
  svg
608
606
  .append('g')
609
607
  .attr('class', 'grid horizontal-grid')
610
- .attr('transform', 'translate(0,0)') // Start from x=0
608
+ .attr('transform', 'translate(0,0)')
611
609
  .call(d3
612
610
  .axisLeft(scales.yScale)
613
611
  .ticks(this.chartConfiguration.numberOfYTicks)
@@ -617,9 +615,6 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
617
615
  .style('opacity', '1')
618
616
  .call((g) => {
619
617
  g.select('.domain').remove();
620
- g.selectAll('line')
621
- .attr('x1', 0)
622
- .attr('x2', -gridWidth);
623
618
  });
624
619
  }
625
620
  if (this.chartConfiguration.xAxisGrid) {
@@ -677,12 +672,12 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
677
672
  textElement.text(text.substring(0, 10) + '...');
678
673
  }
679
674
  });
680
- // Ensure X-axis line is visible
675
+ // Ensure X-axis line starts exactly at x=0
681
676
  xAxisGroup
682
677
  .select('.domain')
683
678
  .style('stroke', 'var(--chart-axis-color)')
684
679
  .style('stroke-width', '1px')
685
- .attr('d', `M0,0H${dimensions.requiredSvgWidth}`);
680
+ .attr('d', `M0,0.5H${dimensions.requiredSvgWidth}`);
686
681
  // Y-axis
687
682
  svg
688
683
  .append('g')
@@ -1051,4 +1046,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1051
1046
  }], headerMenuclickEvent: [{
1052
1047
  type: Output
1053
1048
  }] } });
1054
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQW1EbEQsTUFBTSxPQUFPLHFDQUNYLFNBQVEsaUJBQWlCO0lBZ0Z6QjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBdEVBLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFekQsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUMzQixhQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxD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LENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsd0JBQXdCLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFzQztRQUMvRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQzsrR0ExdUNVLHFDQUFxQzttR0FBckMscUNBQXFDLDRqQkNsRWxELG9uQ0ErQkE7OzRGRG1DYSxxQ0FBcUM7a0JBVGpELFNBQVM7K0JBQ0Usc0NBQXNDLGlCQU1qQyxpQkFBaUIsQ0FBQyxJQUFJO3dEQU9yQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMsK0JBQStCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk1RCwyQkFBMkI7c0JBRDFCLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUc5QyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIE9uQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG4vLyBUeXBlc1xyXG5pbnRlcmZhY2UgQ2hhcnREYXRhIHtcclxuICBkYXRhOiBhbnlbXTtcclxuICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YTtcclxuICBsaW5lRGF0YT86IGFueVtdO1xyXG4gIHRhcmdldExpbmVEYXRhPzogVGFyZ2V0TGluZURhdGE7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDaGFydE1ldGFEYXRhIHtcclxuICB1bml0Pzogc3RyaW5nO1xyXG4gIGlzQ0M/OiBib29sZWFuO1xyXG4gIGJhcldpdGhvdXRDbGljaz86IHN0cmluZ1tdO1xyXG4gIGNvbG9yczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICBrZXlMaXN0OiBzdHJpbmdbXTtcclxuICBkYXRhVHlwZT86IHN0cmluZztcclxuICBoYXNEcmlsbERvd24/OiBib29sZWFuO1xyXG4gIGhvdmVyQ29sb3I/OiBzdHJpbmc7XHJcbiAgeUxhYmVsPzogc3RyaW5nO1xyXG4gIHhMYWJlbD86IHN0cmluZztcclxuICBsaW5leUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGFyZ2V0TGluZURhdGEge1xyXG4gIHRhcmdldDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgdGFyZ2V0TmFtZT86IHN0cmluZztcclxuICBiYXJBYm92ZVRhcmdldENvbG9yPzogc3RyaW5nO1xyXG4gIGJhckFib3ZlVGFyZ2V0SG92ZXJDb2xvcj86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIERpbWVuc2lvbnMge1xyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcclxuICBjb250YWluZXJIZWlnaHQ6IG51bWJlcjtcclxuICBiYXJXaWR0aDogbnVtYmVyO1xyXG4gIGJhclBhZGRpbmc6IG51bWJlcjtcclxuICByZXF1aXJlZFN2Z1dpZHRoOiBudW1iZXI7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEJhcnNXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgXHJcbiAgQFZpZXdDaGlsZCgndmVydGljYWxzdGFja2VkY2hhcnRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdmVydGljYWxzdGFja2VkY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBDaGFydERhdGEgfCBhbnkgO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBpc1RvcENhcHRpb25WaXNpYmxlID0gdHJ1ZTtcclxuICB1bmlxdWVJZCA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIGlzQ0MgPSBmYWxzZTtcclxuICBpc1pvb21lZE91dCA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQ09OU1RBTlRTID0ge1xyXG4gICAgUklHSFRfU1ZHX1dJRFRIOiA2MCxcclxuICAgIExFRlRfUklHSFRfU1BBQ0VTOiA1MCxcclxuICAgIFNIT1JUX1RJQ0tfTEVOR1RIOiA0LFxyXG4gICAgTE9OR19USUNLX0xFTkdUSDogMTYsXHJcbiAgICBTSE9SVF9USUNLX0xFTkdUSF9CRzogNSxcclxuICAgIExPTkdfVElDS19MRU5HVEhfQkc6IDMwLFxyXG4gICAgREVTS1RPUF9CQVJfV0lEVEg6IDQwLCAgICAgIC8vIERlc2t0b3AgYmFyIHdpZHRoXHJcbiAgICBNT0JJTEVfQkFSX1dJRFRIOiAyNSwgICAgICAgLy8gTW9iaWxlL1RhYmxldCBiYXIgd2lkdGggKHJlZHVjZWQpXHJcbiAgICBCQVJfR0FQOiAzMCwgICAgICAgICAgICAgICAgLy8gR2FwIGJldHdlZW4gYmFycyAoaW5jcmVhc2VkIGZvciBiZXR0ZXIgc2VwYXJhdGlvbilcclxuICAgIFpPT01fVEhSRVNIT0xEOiAzMCxcclxuICAgIFpPT01fSU5fVEhSRVNIT0xEOiA4LFxyXG4gIH07XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uID0ge1xyXG4gICAgbWFyZ2luOiB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogNDAgfSxcclxuICAgIHN2Z0hlaWdodDogNzAsXHJcbiAgICBsZWdlbmRIZWlnaHQ6ICcxMCUnLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsYWJlbEZvcm1hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHhBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBsaW5lR3JhcGhDb2xvcjogJyNGNkQyODMnLFxyXG4gICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICBzaG93TGVnZW5kOiBmYWxzZSxcclxuICAgIGZvckNvbXBhcmlzb246IHRydWUsXHJcbiAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICAgIHlBeGlzR3JpZDogZmFsc2UsXHJcbiAgICAvLyBPcHRpb25hbCBjb25maWdzIHdpdGggdW5kZWZpbmVkIGRlZmF1bHRzXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc1RvcENhcHRpb25WaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzRGFzaGVkOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzQ29sb3I6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIHNob3dUb3RhbE9uVG9wOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZW5kRm9ybWF0dGVySGFzUHJpb3JpdHk6IHVuZGVmaW5lZCxcclxuICAgIHNob3dBbmdsZWRMYWJlbHM6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBzaG93WGF4aXNUb3A6IHVuZGVmaW5lZCxcclxuICAgIHhBeGlzR3JpZDogdW5kZWZpbmVkLFxyXG4gICAgeExhYmVsc09uU2FtZUxpbmU6IHVuZGVmaW5lZCxcclxuICAgIGhpZGVYYXhpc1RpY2s6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHVuZGVmaW5lZCxcclxuICAgIGlzVGFyZ2V0TGluZTogdW5kZWZpbmVkLFxyXG4gICAgZGlzcGxheVRpdGxlT25Ub3A6IHVuZGVmaW5lZCxcclxuICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNUaXRsZUhpZGRlbjogdW5kZWZpbmVkLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5yZW1vdmVFeGlzdGluZ0NoYXJ0KCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVTdGFja2VkQ2hhcnQoKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVFeGlzdGluZ0NoYXJ0KCk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVFeGlzdGluZ0NoYXJ0KCkge1xyXG4gICAgZDMuc2VsZWN0KCcjJyArIHRoaXMudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXJnZUNvbmZpZ3VyYXRpb25zKCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltrZXldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGtleSxcclxuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVNZXRhRGF0YShtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSk6IENoYXJ0TWV0YURhdGEge1xyXG4gICAgaWYgKCFtZXRhRGF0YS51bml0KSBtZXRhRGF0YS51bml0ID0gJyc7XHJcbiAgICBpZiAobWV0YURhdGEuaXNDQykgdGhpcy5pc0NDID0gbWV0YURhdGEuaXNDQztcclxuICAgIFxyXG4gICAgaWYgKG1ldGFEYXRhLmJhcldpdGhvdXRDbGljaz8ubGVuZ3RoKSB7XHJcbiAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljayA9IG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5tYXAoZWwgPT4gZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgPSBbXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIG1ldGFEYXRhO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlRGltZW5zaW9ucyhcclxuICBjaGFydENvbnRhaW5lcjogYW55LFxyXG4gIHZlcnRpY2FsQ29udGFpbmVyOiBhbnksXHJcbiAgbWFyZ2luOiBhbnksXHJcbiAgZGF0YUxlbmd0aDogbnVtYmVyXHJcbik6IERpbWVuc2lvbnMge1xyXG4gIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY2hhcnRDb250YWluZXIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHZlcnRpY2FsQ29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgXHJcbiAgY29uc3QgbGVmdEF4aXNXaWR0aCA9IDgwO1xyXG4gIGNvbnN0IHJpZ2h0QXhpc1dpZHRoID0gdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIO1xyXG4gIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmVyV2lkdGggLSBsZWZ0QXhpc1dpZHRoIC0gcmlnaHRBeGlzV2lkdGg7XHJcbiAgXHJcbiAgbGV0IHdpZHRoID0gYXZhaWxhYmxlV2lkdGggLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcclxuICBsZXQgaGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0ICogKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAvIDEwMCkgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbTtcclxuXHJcbiAgaWYgKGRhdGFMZW5ndGggPiB0aGlzLkNPTlNUQU5UUy5aT09NX1RIUkVTSE9MRCAmJiB0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICBjb25zdCBtaW5XaWR0aCA9IGRhdGFMZW5ndGggKiAyNTtcclxuICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIG1pbldpZHRoKTtcclxuICB9XHJcblxyXG4gIGlmIChkYXRhTGVuZ3RoID4gdGhpcy5DT05TVEFOVFMuWk9PTV9JTl9USFJFU0hPTEQgJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIHdpZHRoID0gZGF0YUxlbmd0aCAqIDEzMDtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4pIHtcclxuICAgIGhlaWdodCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAhPT0gODBcclxuICAgICAgPyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcclxuICAgICAgOiBjb250YWluZXJIZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgaGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b20gLSAxMzA7XHJcbiAgfVxyXG5cclxuICBjb25zdCBpc01vYmlsZU9yVGFibGV0ID0gd2luZG93LmlubmVyV2lkdGggPCAxMDI0O1xyXG4gIGxldCBiYXJXaWR0aDogbnVtYmVyO1xyXG4gIGxldCBiYXJQYWRkaW5nOiBudW1iZXI7XHJcbiAgXHJcbiAgaWYgKGlzTW9iaWxlT3JUYWJsZXQpIHtcclxuICAgIGlmIChkYXRhTGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGJhcldpZHRoID0gNjA7XHJcbiAgICAgIGJhclBhZGRpbmcgPSAwO1xyXG4gICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoID09PSAyKSB7XHJcbiAgICAgIGJhcldpZHRoID0gNTA7XHJcbiAgICAgIGJhclBhZGRpbmcgPSA0NTtcclxuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMykge1xyXG4gICAgICBiYXJXaWR0aCA9IDQ1O1xyXG4gICAgICBiYXJQYWRkaW5nID0gNDA7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPD0gNSkge1xyXG4gICAgICBiYXJXaWR0aCA9IDM1O1xyXG4gICAgICBiYXJQYWRkaW5nID0gMzA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiYXJXaWR0aCA9IDI1O1xyXG4gICAgICBiYXJQYWRkaW5nID0gMjU7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGJhcldpZHRoID0gdGhpcy5DT05TVEFOVFMuREVTS1RPUF9CQVJfV0lEVEg7XHJcbiAgICBiYXJQYWRkaW5nID0gdGhpcy5DT05TVEFOVFMuQkFSX0dBUDtcclxuICB9XHJcbiAgXHJcbiAgY29uc3QgdG90YWxCYXJzV2lkdGggPSBiYXJXaWR0aCAqIGRhdGFMZW5ndGg7XHJcbiAgY29uc3QgdG90YWxHYXBzID0gYmFyUGFkZGluZyAqIChkYXRhTGVuZ3RoIC0gMSk7XHJcbiAgY29uc3QgbWluUmVxdWlyZWRXaWR0aCA9IHRvdGFsQmFyc1dpZHRoICsgdG90YWxHYXBzICsgKHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMik7XHJcbiAgY29uc3QgcmVxdWlyZWRTdmdXaWR0aCA9IE1hdGgubWF4KGF2YWlsYWJsZVdpZHRoLCBtaW5SZXF1aXJlZFdpZHRoKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHdpZHRoLFxyXG4gICAgaGVpZ2h0LFxyXG4gICAgY29udGFpbmVyV2lkdGgsXHJcbiAgICBjb250YWluZXJIZWlnaHQsXHJcbiAgICBiYXJXaWR0aCxcclxuICAgIGJhclBhZGRpbmcsXHJcbiAgICByZXF1aXJlZFN2Z1dpZHRoLFxyXG4gIH07XHJcbn1cclxuXHJcbnByaXZhdGUgY3JlYXRlU3ZnQ29udGFpbmVycyhcclxuICBjaGFydENvbnRhaW5lcjogYW55LFxyXG4gIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgbWFyZ2luOiBhbnksXHJcbiAgaGFzWExhYmVsOiBib29sZWFuICAvLyBBZGQgdGhpcyBwYXJhbWV0ZXJcclxuKSB7XHJcbiAgLy8gQ2FsY3VsYXRlIHRvdGFsIGhlaWdodCBpbmNsdWRpbmcgc3BhY2UgZm9yIFgtYXhpcyBsYWJlbCBpZiBwcmVzZW50XHJcbiAgY29uc3QgeExhYmVsU3BhY2UgPSBoYXNYTGFiZWwgPyAzMCA6IDA7XHJcbiAgY29uc3QgdG90YWxIZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgeExhYmVsU3BhY2U7XHJcblxyXG4gIC8vIE1haW4gd3JhcHBlclxyXG4gIGNvbnN0IGNoYXJ0V3JhcHBlciA9IGNoYXJ0Q29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLmF0dHIoJ2lkJywgdGhpcy51bmlxdWVJZClcclxuICAgIC5hdHRyKCdjbGFzcycsICdjaGFydC13cmFwcGVyLW1haW4nKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHt0b3RhbEhlaWdodH1weGApOyAgLy8gSW5jbHVkZSBYLWxhYmVsIHNwYWNlXHJcblxyXG4gIC8vIExlZnQgWS1heGlzIC0gRml4ZWRcclxuICBjb25zdCBsZWZ0QXhpc0NvbnRhaW5lciA9IGNoYXJ0V3JhcHBlclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsZWZ0LWF4aXMtY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgLnN0eWxlKCd0b3AnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3dpZHRoJywgJzgwcHgnKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHtkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tfXB4YCkgIC8vIEV4Y2x1ZGUgWC1sYWJlbCBzcGFjZVxyXG4gICAgLnN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ3ZhcigtLWNhcmQtYmcpJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsICcxMCcpO1xyXG5cclxuICBjb25zdCBzdmdZQXhpc0xlZnQgPSBsZWZ0QXhpc0NvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnc3ZnJylcclxuICAgIC5hdHRyKCd3aWR0aCcsICc4MCcpXHJcbiAgICAuYXR0cignaGVpZ2h0JywgZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSlcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHttYXJnaW4ubGVmdCArIDEwfSwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAvLyBSaWdodCBZLWF4aXMgLSBGaXhlZFxyXG4gIGNvbnN0IHJpZ2h0QXhpc0NvbnRhaW5lciA9IGNoYXJ0V3JhcHBlclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdyaWdodC1heGlzLWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgncmlnaHQnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3RvcCcsICcwJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCBgJHt0aGlzLkNPTlNUQU5UUy5SSUdIVF9TVkdfV0lEVEh9cHhgKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHtkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tfXB4YCkgIC8vIEV4Y2x1ZGUgWC1sYWJlbCBzcGFjZVxyXG4gICAgLnN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ3ZhcigtLWNhcmQtYmcpJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsICcxMCcpO1xyXG5cclxuICBjb25zdCBzdmdZQXhpc1JpZ2h0ID0gcmlnaHRBeGlzQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgLy8gU2Nyb2xsYWJsZSBtaWRkbGUgYXJlYVxyXG4gIGNvbnN0IHNjcm9sbGFibGVDb250YWluZXIgPSBjaGFydFdyYXBwZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnc2Nyb2xsYWJsZS1jaGFydC1jb250YWluZXInKVxyXG4gICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAuc3R5bGUoJ2xlZnQnLCAnODBweCcpXHJcbiAgICAuc3R5bGUoJ3JpZ2h0JywgYCR7dGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIfXB4YClcclxuICAgIC5zdHlsZSgndG9wJywgJzAnKVxyXG4gICAgLnN0eWxlKCd3aWR0aCcsICdhdXRvJylcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7ZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbX1weGApICAvLyBFeGNsdWRlIFgtbGFiZWwgc3BhY2VcclxuICAgIC5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJylcclxuICAgIC5zdHlsZSgnb3ZlcmZsb3cteScsICdoaWRkZW4nKTtcclxuXHJcbiAgY29uc3QgaW5uZXJDb250YWluZXIgPSBzY3JvbGxhYmxlQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2lubmVyLWNoYXJ0LWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ21pbi13aWR0aCcsICcxMDAlJyk7XHJcblxyXG4gIGNvbnN0IHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgZGltZW5zaW9ucy5yZXF1aXJlZFN2Z1dpZHRoKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAzMClcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAvLyBGaXhlZCBib3R0b20gY29udGFpbmVyIGZvciBYLWF4aXMgbGFiZWxcclxuICBjb25zdCBib3R0b21MYWJlbENvbnRhaW5lciA9IGNoYXJ0V3JhcHBlclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdib3R0b20tbGFiZWwtY29udGFpbmVyJylcclxuICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgLnN0eWxlKCdsZWZ0JywgJzgwcHgnKVxyXG4gICAgLnN0eWxlKCdyaWdodCcsIGAke3RoaXMuQ09OU1RBTlRTLlJJR0hUX1NWR19XSURUSH1weGApXHJcbiAgICAuc3R5bGUoJ2JvdHRvbScsICcwJylcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7eExhYmVsU3BhY2V9cHhgKVxyXG4gICAgLnN0eWxlKCdkaXNwbGF5JywgJ2ZsZXgnKVxyXG4gICAgLnN0eWxlKCdqdXN0aWZ5LWNvbnRlbnQnLCAnY2VudGVyJylcclxuICAgIC5zdHlsZSgnYWxpZ24taXRlbXMnLCAnY2VudGVyJylcclxuICAgIC5zdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsICd2YXIoLS1jYXJkLWJnKScpXHJcbiAgICAuc3R5bGUoJ3otaW5kZXgnLCAnMTAnKTtcclxuXHJcbiAgcmV0dXJuIHsgc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGlubmVyQ29udGFpbmVyLCBib3R0b21MYWJlbENvbnRhaW5lciB9O1xyXG59XHJcblxyXG5wcml2YXRlIGNyZWF0ZVNjYWxlcyhcclxuICBkYXRhOiBhbnlbXSxcclxuICBsYXllcnM6IGFueVtdLFxyXG4gIGxpbmVEYXRhOiBhbnlbXSxcclxuICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbikge1xyXG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgYmFyV2lkdGgsIGJhclBhZGRpbmcgfSA9IGRpbWVuc2lvbnM7XHJcbiAgXHJcbiAgLy8gQ2FsY3VsYXRlIGJhciBwb3NpdGlvbmluZ1xyXG4gIGNvbnN0IHRvdGFsQmFyc1dpZHRoID0gZGF0YS5sZW5ndGggKiBiYXJXaWR0aDtcclxuICBjb25zdCB0b3RhbFNwYWNpbmcgPSAoZGF0YS5sZW5ndGggLSAxKSAqIGJhclBhZGRpbmc7XHJcbiAgY29uc3QgcmVxdWlyZWRXaWR0aCA9IHRvdGFsQmFyc1dpZHRoICsgdG90YWxTcGFjaW5nICsgKHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMik7XHJcbiAgY29uc3QgZWZmZWN0aXZlV2lkdGggPSBNYXRoLm1heCh3aWR0aCwgcmVxdWlyZWRXaWR0aCk7XHJcbiAgXHJcbiAgY29uc3QgcGFkZGluZ1JhdGlvID0gYmFyUGFkZGluZyAvIChiYXJXaWR0aCArIGJhclBhZGRpbmcpO1xyXG4gIFxyXG4gIC8vIFgtc2NhbGUgc3RhcnRzIGZyb20gMCAobm8gbGVmdCBzcGFjaW5nIGZvciBncmlkIGFsaWdubWVudClcclxuICBjb25zdCB4U2NhbGUgPSBkM1xyXG4gICAgLnNjYWxlQmFuZCgpXHJcbiAgICAucmFuZ2VSb3VuZChbMCwgZGltZW5zaW9ucy5yZXF1aXJlZFN2Z1dpZHRoXSkgIC8vIEZ1bGwgd2lkdGggZnJvbSAwXHJcbiAgICAuZG9tYWluKGRhdGEubWFwKGQgPT4gZC5uYW1lKS5yZXZlcnNlKCkpXHJcbiAgICAucGFkZGluZ0lubmVyKHBhZGRpbmdSYXRpbylcclxuICAgIC5wYWRkaW5nT3V0ZXIoMClcclxuICAgIC5hbGlnbigwLjUpO1xyXG5cclxuICBjb25zdCB4U2NhbGVGcm9tT3JpZ2luID0gZDNcclxuICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgLnJhbmdlUm91bmQoW3dpZHRoLCAwXSlcclxuICAgIC5kb21haW4oZGF0YS5tYXAoZCA9PiBkLm5hbWUpLnJldmVyc2UoKSk7XHJcblxyXG4gIGNvbnN0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSk7XHJcbiAgXHJcbiAgbGV0IG1heFZhbHVlID0gZDMubWF4KGxheWVycywgKGQ6IGFueSkgPT4gZDMubWF4KGQsIChkOiBhbnkpID0+IGRbMV0pKTtcclxuICBcclxuICBpZiAobWF4VmFsdWUgPT09IDApIHtcclxuICAgIG1heFZhbHVlID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgXHJcbiAgICAgID8gTnVtYmVyKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkgKyAyMCBcclxuICAgICAgOiAxMDA7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlKSB7XHJcbiAgICBtYXhWYWx1ZSAqPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiYgbWF4VmFsdWUgPCBOdW1iZXIodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gTnVtYmVyKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCk7XHJcbiAgICBtYXhWYWx1ZSA9IG1heFZhbHVlIDwgMTAgJiYgdGFyZ2V0IDwgMTAgPyB0YXJnZXQgKyAzIDogdGFyZ2V0ICsgMjA7XHJcbiAgfVxyXG5cclxuICB5U2NhbGUuZG9tYWluKFswLCBtYXhWYWx1ZV0pLm5pY2UoKTtcclxuXHJcbiAgbGV0IGxpbmVZc2NhbGUgPSBudWxsO1xyXG4gIGlmIChsaW5lRGF0YSkge1xyXG4gICAgbGluZVlzY2FsZSA9IGQzXHJcbiAgICAgIC5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5kb21haW4oWzAsIGQzLm1heChsaW5lRGF0YSwgZCA9PiArZC52YWx1ZSldKVxyXG4gICAgICAucmFuZ2UoW2hlaWdodCwgMF0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHsgeFNjYWxlLCB4U2NhbGVGcm9tT3JpZ2luLCB5U2NhbGUsIGxpbmVZc2NhbGUgfTtcclxufVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVBeGVzKHNjYWxlczogYW55KSB7XHJcbiAgICBjb25zdCB4QXhpcyA9IGQzXHJcbiAgICAgIC5heGlzQm90dG9tKHNjYWxlcy54U2NhbGUpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja0Zvcm1hdCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICAgIGNvbnN0IHlBeGlzID0gZDNcclxuICAgICAgLmF4aXNMZWZ0KHNjYWxlcy55U2NhbGUpXHJcbiAgICAgIC50aWNrcyh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgIC50aWNrRm9ybWF0KHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlcik7XHJcblxyXG4gICAgbGV0IHlMaW5lQXhpcyA9IG51bGw7XHJcbiAgICBpZiAoc2NhbGVzLmxpbmVZc2NhbGUpIHtcclxuICAgICAgeUxpbmVBeGlzID0gZDNcclxuICAgICAgICAuYXhpc1JpZ2h0KHNjYWxlcy5saW5lWXNjYWxlKVxyXG4gICAgICAgIC50aWNrcyh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAudGlja1NpemUoMClcclxuICAgICAgICAudGlja0Zvcm1hdCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55TGluZUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyB4QXhpcywgeUF4aXMsIHlMaW5lQXhpcyB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJCYXJzKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBsYXllcnM6IGFueVtdLFxyXG4gICAgc2NhbGVzOiBhbnksXHJcbiAgICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNcclxuICApIHtcclxuICAgIGNvbnN0IGxheWVyID0gc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJy5sYXllcicpXHJcbiAgICAgIC5kYXRhKGxheWVycylcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsYXllcicpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsIChkOiBhbnkpID0+IG1ldGFEYXRhLmNvbG9yc1tkLmtleV0pO1xyXG5cclxuICAgIGNvbnN0IHJlY3QgPSBsYXllclxyXG4gICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLmRhdGEoKGQ6IGFueSkgPT4gZClcclxuICAgICAgLmVudGVyKCk7XHJcblxyXG4gICAgdGhpcy5hcHBlbmRSZWN0YW5nbGVzKHJlY3QsIHNjYWxlcywgbWV0YURhdGEsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5hZGRJbnRlcmFjdGlvbnMocmVjdCwgc3ZnLCBtZXRhRGF0YSwgc2NhbGVzKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGVuZFJlY3RhbmdsZXMoXHJcbiAgcmVjdDogYW55LFxyXG4gIHNjYWxlczogYW55LFxyXG4gIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLFxyXG4gIGRpbWVuc2lvbnM6IERpbWVuc2lvbnNcclxuKSB7XHJcbiAgY29uc3QgeyBiYXJXaWR0aCwgYmFyUGFkZGluZyB9ID0gZGltZW5zaW9ucztcclxuICBjb25zdCB7IHhTY2FsZSwgeVNjYWxlIH0gPSBzY2FsZXM7XHJcblxyXG4gIHJlY3RcclxuICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgLm9uKCdjbGljaycsIChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YSB8fCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5mb3JDb21wYXJpc29uKSB7XHJcbiAgICAgICAgaWYgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2s/LmluY2x1ZGVzKGQuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGQuZGF0YS5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICAuYXR0cigneScsIChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFpc05hTihkWzBdKSAmJiAhaXNOYU4oZFsxXSkpIHtcclxuICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSB5U2NhbGUoZFswXSkgLSB5U2NhbGUoZFsxXSk7XHJcbiAgICAgICAgcmV0dXJuIGFjdHVhbEhlaWdodCA8IDMgPyB5U2NhbGUoZFswXSkgLSAzIDogeVNjYWxlKGRbMV0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSlcclxuICAgIC5hdHRyKCd4JywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB4UG9zaXRpb24gPSB4U2NhbGUoZC5kYXRhLm5hbWUpO1xyXG4gICAgICBjb25zdCBiYW5kd2lkdGggPSB4U2NhbGUuYmFuZHdpZHRoKCk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lKSB7XHJcbiAgICAgICAgcmV0dXJuIHhQb3NpdGlvbiArIChiYW5kd2lkdGggLSBiYXJXaWR0aCkgLyAyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0ICYmIHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoIDw9IDMpIHtcclxuICAgICAgICByZXR1cm4geFBvc2l0aW9uICsgYmFuZHdpZHRoIC8gMiAtIDM1O1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRXaWR0aCA9IGJhbmR3aWR0aCAqIDAuODtcclxuICAgICAgcmV0dXJuIHhQb3NpdGlvbiArIChiYW5kd2lkdGggLSBjYWxjdWxhdGVkV2lkdGgpIC8gMjtcclxuICAgIH0pXHJcbiAgICAuYXR0cignaGVpZ2h0JywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWlzTmFOKGRbMF0pICYmICFpc05hTihkWzFdKSkge1xyXG4gICAgICAgIGNvbnN0IGFjdHVhbEhlaWdodCA9IHlTY2FsZShkWzBdKSAtIHlTY2FsZShkWzFdKTtcclxuICAgICAgICByZXR1cm4gYWN0dWFsSGVpZ2h0IDwgMyA/IDMgOiBhY3R1YWxIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lKSByZXR1cm4gYmFyV2lkdGg7XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0ICYmIHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoIDw9IDMpIHtcclxuICAgICAgICByZXR1cm4gNzA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHhTY2FsZS5iYW5kd2lkdGgoKSAqIDAuODtcclxuICAgIH0pXHJcbiAgICAuc3R5bGUoJ2N1cnNvcicsIChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICAgIGlmIChtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2s/LmluY2x1ZGVzKGQuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICByZXR1cm4gJ2RlZmF1bHQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ3BvaW50ZXInO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAnZGVmYXVsdCc7XHJcbiAgICB9KVxyXG4gICAgLnN0eWxlKCdmaWxsJywgKGQ6IGFueSkgPT4gdGhpcy5nZXRCYXJDb2xvcihkLCBtZXRhRGF0YSkpO1xyXG59XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFyQ29sb3IoZDogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSk6IHN0cmluZyB7XHJcbiAgICBpZiAoXHJcbiAgICAgICFpc05hTihkWzBdKSAmJlxyXG4gICAgICAhaXNOYU4oZFsxXSkgJiZcclxuICAgICAgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgcGFyc2VGbG9hdChkWzFdKSAtIHBhcnNlRmxvYXQoZFswXSkgPj0gcGFyc2VGbG9hdChTdHJpbmcodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuYmFyQWJvdmVUYXJnZXRDb2xvciB8fCBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEludGVyYWN0aW9ucyhyZWN0OiBhbnksIHN2ZzogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSwgc2NhbGVzOiBhbnkpIHtcclxuICAgIHJlY3RcclxuICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5vbignbW91c2VlbnRlcicsIChkOiBhbnkpID0+IHRoaXMuaGFuZGxlTW91c2VPdmVyKGQsIHN2ZywgbWV0YURhdGEsIHNjYWxlcykpXHJcbiAgICAgIC5vbignbW91c2VvdXQnLCAoZDogYW55KSA9PiB0aGlzLmhhbmRsZU1vdXNlT3V0KHN2ZywgbWV0YURhdGEpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTW91c2VPdmVyKGQ6IGFueSwgc3ZnOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLCBzY2FsZXM6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkgcmV0dXJuO1xyXG5cclxuICAgIHN2Zy5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAuZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEgPT09IGQpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsIChkOiBhbnkpID0+IHRoaXMuZ2V0SG92ZXJDb2xvcihkLCBtZXRhRGF0YSkpO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheVRvb2x0aXAoZCwgc3ZnLCBtZXRhRGF0YSwgc2NhbGVzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SG92ZXJDb2xvcihkOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKTogc3RyaW5nIHtcclxuICAgIGlmIChcclxuICAgICAgIWlzTmFOKGRbMF0pICYmXHJcbiAgICAgICFpc05hTihkWzFdKSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICBwYXJzZUZsb2F0KGRbMV0pIC0gcGFyc2VGbG9hdChkWzBdKSA+PSBwYXJzZUZsb2F0KFN0cmluZyh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5iYXJBYm92ZVRhcmdldEhvdmVyQ29sb3IgfHxcclxuICAgICAgICAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmJhckFib3ZlVGFyZ2V0Q29sb3IgfHxcclxuICAgICAgICAgICAgIG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWV0YURhdGEuaG92ZXJDb2xvciB8fCBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwbGF5VG9vbHRpcChkOiBhbnksIHN2ZzogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSwgc2NhbGVzOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgeFNjYWxlLCB5U2NhbGUgfSA9IHNjYWxlcztcclxuICAgIGNvbnN0IHZhbHVlID0gZFsxXSAtIGRbMF07XHJcbiAgICBcclxuICAgIGlmIChpc05hTih2YWx1ZSkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBiYW5kd2lkdGggPSB4U2NhbGUuYmFuZHdpZHRoKCk7XHJcbiAgICBcclxuICAgIC8vIEZpeGVkIHRvb2x0aXAgd2lkdGggZm9yIGFsbCByZXNvbHV0aW9uc1xyXG4gICAgY29uc3Qgd2lkdGggPSAvd2Vlay9pLnRlc3QoZC5kYXRhLm5hbWUpICYmIC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8udGVzdChkLmRhdGEubmFtZSlcclxuICAgICAgPyAnMjUwcHgnXHJcbiAgICAgIDogYmFuZHdpZHRoICsgdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyID4gMTgwXHJcbiAgICAgICAgPyAnMTgwcHgnXHJcbiAgICAgICAgOiBiYW5kd2lkdGggKyB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDI7XHJcblxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAuYXR0cigneCcsIHRoaXMuY2FsY3VsYXRlVG9vbHRpcFgoZCwgeFNjYWxlLCB3aWR0aCkpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpXHJcbiAgICAgIC5hdHRyKCd5JywgeVNjYWxlKGRbMV0pIC0gNTEpXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIHdpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgNDApXHJcbiAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAgIC5zdHlsZSgnei1pbmRleCcsIDk5KVxyXG4gICAgICAuaHRtbCh0aGlzLmdlbmVyYXRlVG9vbHRpcEh0bWwoZCwgbWV0YURhdGEsIHZhbHVlKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVRvb2x0aXBYKGQ6IGFueSwgeFNjYWxlOiBhbnksIHdpZHRoOiBzdHJpbmcgfCBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgYmFuZHdpZHRoID0geFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgY29uc3QgbnVtZXJpY1dpZHRoID0gdHlwZW9mIHdpZHRoID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KHdpZHRoKSA6IHdpZHRoO1xyXG4gICAgXHJcbiAgICBpZiAoYmFuZHdpZHRoICsgdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyID4gMTgwKSB7XHJcbiAgICAgIHJldHVybiB4U2NhbGUoZC5kYXRhLm5hbWUpIC0gdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgK1xyXG4gICAgICAgICAgICAgKGJhbmR3aWR0aCArIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMiAtIDE4MCkgLyAyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgLSB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVUb29sdGlwSHRtbChkOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLCB2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gMCkgcmV0dXJuICc8c3BhbiBjbGFzcz1cInRpdGxlLXRvcC10ZXh0XCI+MDwvc3Bhbj4nO1xyXG5cclxuICAgIGNvbnN0IGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgfHwgJyc7XHJcbiAgICBjb25zdCBuYW1lID0gZC5kYXRhLm5hbWUgPyBgPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItbmFtZVwiPiR7ZC5kYXRhLm5hbWV9PC9zcGFuPmAgOiAnJztcclxuICAgIGNvbnN0IHZhbHVlVGV4dCA9IG1ldGFEYXRhLnVuaXRcclxuICAgICAgPyBgJHttZXRhRGF0YS51bml0fSR7dmFsdWV9ICR7ZGF0YVR5cGV9YFxyXG4gICAgICA6IGAke3ZhbHVlfSAke2RhdGFUeXBlfWA7XHJcblxyXG4gICAgcmV0dXJuIGAke25hbWV9PHNwYW4gY2xhc3M9XCJ0aXRsZS10b3AtdGV4dFwiPiR7dmFsdWVUZXh0fTwvc3Bhbj5gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVNb3VzZU91dChzdmc6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpIHtcclxuICAgIGlmICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHJldHVybjtcclxuXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgKGQ6IGFueSkgPT4gdGhpcy5nZXRCYXJDb2xvcihkLCBtZXRhRGF0YSkpO1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckF4aXNMYWJlbHMoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIHN2Z1lBeGlzTGVmdDogYW55LFxyXG4gICAgYm90dG9tTGFiZWxDb250YWluZXI6IGFueSxcclxuICAgIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhLFxyXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcclxuICAgIG1hcmdpbjogYW55XHJcbiAgKSB7XHJcbiAgICBpZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgICAgIHRoaXMuYWRkWUF4aXNMYWJlbChzdmdZQXhpc0xlZnQsIG1ldGFEYXRhLnlMYWJlbCwgZGltZW5zaW9ucy5oZWlnaHQsIG1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgICB0aGlzLmFkZFhBeGlzTGFiZWwoYm90dG9tTGFiZWxDb250YWluZXIsIG1ldGFEYXRhLnhMYWJlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFlBeGlzTGFiZWwoc3ZnWUF4aXNMZWZ0OiBhbnksIGxhYmVsOiBzdHJpbmcsIGhlaWdodDogbnVtYmVyLCBtYXJnaW46IGFueSkge1xyXG4gICAgY29uc3QgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbj8uaXNSaWE7XHJcbiAgICBjb25zdCBpc0Fjcm9ueW0gPSB0aGlzLmlzQWNyb255bUxhYmVsKGxhYmVsKTtcclxuICAgIGNvbnN0IHlQb3NpdGlvbiA9IGlzcmlhID8gLW1hcmdpbi5sZWZ0IC8gMiAtIDMwIDogLW1hcmdpbi5sZWZ0IC8gMiAtIDQwO1xyXG5cclxuICAgIHN2Z1lBeGlzTGVmdC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCwgLmxpYi15bGFiZWwtZHJpbGxkb3duY2hhcnRzLCAubGliLXlsYWJlbC13ZWVrbHlDaGFydHMnKS5yZW1vdmUoKTtcclxuXHJcbiAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsIHRoaXMuZ2V0WUF4aXNMYWJlbENsYXNzKCkpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAuYXR0cigneScsIHlQb3NpdGlvbilcclxuICAgICAgLmF0dHIoJ3gnLCAtaGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgLnRleHQoaXNBY3JvbnltID8gbGFiZWwudG9VcHBlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0Fjcm9ueW0gPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgYWRkWEF4aXNMYWJlbChib3R0b21MYWJlbENvbnRhaW5lcjogYW55LCBsYWJlbDogc3RyaW5nKSB7XHJcbiAgY29uc3QgaXNBY3JvbnltID0gdGhpcy5pc0Fjcm9ueW1MYWJlbChsYWJlbCk7XHJcblxyXG4gIGJvdHRvbUxhYmVsQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgIC5zdHlsZSgndGV4dC1hbGlnbicsICdjZW50ZXInKVxyXG4gICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTJweCcpXHJcbiAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJzYwMCcpXHJcbiAgICAuc3R5bGUoJ2ZvbnQtZmFtaWx5JywgJ3N5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bycpXHJcbiAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0Fjcm9ueW0gPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpXHJcbiAgICAudGV4dChpc0Fjcm9ueW0gPyBsYWJlbC50b1VwcGVyQ2FzZSgpIDogbGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSBpc0Fjcm9ueW1MYWJlbChsYWJlbDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjbGVhbkxhYmVsID0gbGFiZWwucmVwbGFjZSgvW15BLVphLXpdL2csICcnKTtcclxuICAgIHJldHVybiAobGFiZWwubGVuZ3RoIDw9IDQgJiYgL15bQS1aXSskLy50ZXN0KGxhYmVsKSkgfHxcclxuICAgICAgICAgICAobGFiZWwgPT09IGxhYmVsLnRvVXBwZXJDYXNlKCkgJiYgL1tBLVpdLy50ZXN0KGxhYmVsKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFlBeGlzTGFiZWxDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBsaWIteWxhYmVsLWRyaWxsZG93bmNoYXJ0c2A7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBsaWIteWxhYmVsLXdlZWtseUNoYXJ0c2A7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7YmFzZUNsYXNzfSBsaWItYXhpcy13YXRlcmZhbGwtbGFiZWxgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRYQXhpc0xhYmVsQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLXhsYWJlbC1kcmlsbGRvd25jaGFydHNgO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLXhsYWJlbC13ZWVrbHlDaGFydHNgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlDb25maWd1cmF0aW9uRmxhZ3MoKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUb3BDYXB0aW9uVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNUb3BDYXB0aW9uVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVG9wQ2FwdGlvblZpc2libGU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUcmFuc3BhcmVudEJhY2tncm91bmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUcmFuc3BhcmVudEJhY2tncm91bmQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplU3RhY2tlZENoYXJ0KCkge1xyXG4gICAgLy8gVXNlIGZpeGVkIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCByZXNvbHV0aW9uc1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luID0geyB0b3A6IDIwLCByaWdodDogMjAsIGJvdHRvbTogNDAsIGxlZnQ6IDQwIH07XHJcbiAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcyA9IDU7XHJcbiAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgPSA3MDtcclxuICAgIFxyXG4gICAgdGhpcy5tZXJnZUNvbmZpZ3VyYXRpb25zKCk7XHJcbiAgICB0aGlzLmFwcGx5Q29uZmlndXJhdGlvbkZsYWdzKCk7XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2hhcnREYXRhLmRhdGE7XHJcbiAgICBjb25zdCBtZXRhRGF0YSA9IHRoaXMucHJlcGFyZU1ldGFEYXRhKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhKTtcclxuICAgIGNvbnN0IGxpbmVEYXRhID0gdGhpcy5jaGFydERhdGEubGluZURhdGE7XHJcbiAgICBjb25zdCBjb2xvcnMgPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgICBjb25zdCBrZXlMaXN0ID0gbWV0YURhdGEua2V5TGlzdDtcclxuXHJcbiAgICBjb25zdCBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLnZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIFxyXG4gICAgY29uc3QgbWFyZ2luID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luO1xyXG4gICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuY2FsY3VsYXRlRGltZW5zaW9ucyhcclxuICAgICAgY2hhcnRDb250YWluZXIsXHJcbiAgICAgIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcixcclxuICAgICAgbWFyZ2luLFxyXG4gICAgICBkYXRhLmxlbmd0aFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBoYXNYTGFiZWwgPSAhIW1ldGFEYXRhLnhMYWJlbDtcclxuXHJcbiAgICBjb25zdCB7IHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBib3R0b21MYWJlbENvbnRhaW5lciB9ID0gdGhpcy5jcmVhdGVTdmdDb250YWluZXJzKFxyXG4gICAgICBjaGFydENvbnRhaW5lcixcclxuICAgICAgZGltZW5zaW9ucyxcclxuICAgICAgbWFyZ2luLFxyXG4gICAgICBoYXNYTGFiZWxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc3RhY2s6IGFueSA9IGQzLnN0YWNrKCkua2V5cyhrZXlMaXN0KS5vZmZzZXQoZDMuc3RhY2tPZmZzZXROb25lKTtcclxuICAgIGNvbnN0IGxheWVyczogYW55ID0gc3RhY2soZGF0YSk7XHJcbiAgICBkYXRhLnNvcnQoKGEsIGIpID0+IGIudG90YWwgLSBhLnRvdGFsKTtcclxuXHJcbiAgICBjb25zdCBzY2FsZXMgPSB0aGlzLmNyZWF0ZVNjYWxlcyhkYXRhLCBsYXllcnMsIGxpbmVEYXRhLCBkaW1lbnNpb25zKTtcclxuICAgIGNvbnN0IGF4ZXMgPSB0aGlzLmNyZWF0ZUF4ZXMoc2NhbGVzKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlckdyaWRzKHN2Zywgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIGNvbnN0IHJlY3QgPSB0aGlzLnJlbmRlckJhcnMoc3ZnLCBsYXllcnMsIHNjYWxlcywgbWV0YURhdGEsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5yZW5kZXJBeGVzKHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBheGVzLCBzY2FsZXMsIGRpbWVuc2lvbnMsIGRhdGEpO1xyXG4gICAgdGhpcy5yZW5kZXJBeGlzTGFiZWxzKHN2Zywgc3ZnWUF4aXNMZWZ0LGJvdHRvbUxhYmVsQ29udGFpbmVyLCBtZXRhRGF0YSwgZGltZW5zaW9ucywgbWFyZ2luKTtcclxuICAgIHRoaXMucmVuZGVyVGFyZ2V0TGluZShzdmcsIHN2Z1lBeGlzUmlnaHQsIHNjYWxlcywgZGltZW5zaW9ucywgbWV0YURhdGEpO1xyXG4gICAgdGhpcy5yZW5kZXJEYXRhTGFiZWxzKHJlY3QsIHNjYWxlcywgbWV0YURhdGEsIGRpbWVuc2lvbnMpO1xyXG4gICAgdGhpcy5yZW5kZXJMaW5lQ2hhcnQoc3ZnLCBsaW5lRGF0YSwgc2NhbGVzLCBjb2xvcnMsIG1ldGFEYXRhKTtcclxuICB9XHJcblxyXG5wcml2YXRlIHJlbmRlckdyaWRzKHN2ZzogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogRGltZW5zaW9ucykge1xyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hncmlkQmV0d2VlbkxhYmVscykge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnZ3JpZCB2ZXJ0aWNhbC1ncmlkJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpIC8gMn0sJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKS50aWNrU2l6ZSgtZGltZW5zaW9ucy5oZWlnaHQpLnRpY2tGb3JtYXQoJycpKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICcjOTk5OTk5JylcclxuICAgICAgLmNhbGwoKGc6IGFueSkgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSB7XHJcbiAgICAvLyBHcmlkIGxpbmVzIHN0YXJ0IGZyb20geD0wIChubyBnYXAgd2l0aCBZLWF4aXMpXHJcbiAgICBjb25zdCBncmlkV2lkdGggPSBkaW1lbnNpb25zLnJlcXVpcmVkU3ZnV2lkdGg7XHJcbiAgICBcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQgaG9yaXpvbnRhbC1ncmlkJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpICAvLyBTdGFydCBmcm9tIHg9MFxyXG4gICAgICAuY2FsbChcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLmF4aXNMZWZ0KHNjYWxlcy55U2NhbGUpXHJcbiAgICAgICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAudGlja1NpemUoLWdyaWRXaWR0aClcclxuICAgICAgICAgIC50aWNrRm9ybWF0KCcnKVxyXG4gICAgICApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKVxyXG4gICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMScpXHJcbiAgICAgIC5jYWxsKChnOiBhbnkpID0+IHtcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpO1xyXG4gICAgICAgIGcuc2VsZWN0QWxsKCdsaW5lJylcclxuICAgICAgICAuYXR0cigneDEnLCAwKVxyXG4gICAgICAgIC5hdHRyKCd4MicsIC1ncmlkV2lkdGgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWQpIHtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNHcmlkLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsIGB4JHtqICsgMn0gYXhpcyR7aiArIDJ9YClcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7ZGltZW5zaW9ucy5oZWlnaHQgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWRbal19KWApXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKS50aWNrU2l6ZSgwKS50aWNrcyg1KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQXhlcyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgc3ZnWUF4aXNMZWZ0OiBhbnksXHJcbiAgICBzdmdZQXhpc1JpZ2h0OiBhbnksXHJcbiAgICBheGVzOiBhbnksXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgICBkYXRhOiBhbnlbXVxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dYYXhpc1RvcCkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWxpbmUtYXhpcy10ZXh0IGxpYi1saW5lLXgtYXhpcy10ZXh0IHgtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSkudGlja1NpemUoMCkpO1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcueC1heGlzID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyU3RhbmRhcmRBeGVzKHN2ZywgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zLCBkYXRhKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICB0aGlzLnJlbmRlckRyaWxsZG93bkF4ZXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGF4ZXMsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbmRlck11bHRpQ2hhcnRBeGVzKHN2ZywgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5QXhpc1N0eWxpbmcoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQpO1xyXG4gICAgdGhpcy5hcHBseUF4aXNDb25maWd1cmF0aW9ucyhzdmcsIHNjYWxlcywgZGltZW5zaW9ucywgZGF0YSk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJTdGFuZGFyZEF4ZXMoXHJcbiAgc3ZnOiBhbnksXHJcbiAgYXhlczogYW55LFxyXG4gIHNjYWxlczogYW55LFxyXG4gIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgZGF0YTogYW55W11cclxuKSB7XHJcbiAgY29uc3QgaXNNb2JpbGVPclRhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDtcclxuICBcclxuICAvLyBYLWF4aXMgd2l0aCBsYWJlbHNcclxuICBjb25zdCB4QXhpc0dyb3VwID0gc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC14LWF4aXMtdGV4dCcpXHJcbiAgICAuY2FsbChheGVzLnhBeGlzKTtcclxuXHJcbiAgLy8gU3R5bGUgWC1heGlzIGxhYmVsc1xyXG4gIHhBeGlzR3JvdXBcclxuICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgaXNNb2JpbGVPclRhYmxldCA/ICcxMHB4JyA6ICcxMnB4JylcclxuICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAuZWFjaChmdW5jdGlvbih0aGlzOiBTVkdUZXh0RWxlbWVudCwgZDogYW55KSB7XHJcbiAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gZDMuc2VsZWN0KHRoaXMpO1xyXG4gICAgICBjb25zdCB0ZXh0ID0gdGV4dEVsZW1lbnQudGV4dCgpO1xyXG4gICAgICAgIFxyXG4gICAgICBpZiAoaXNNb2JpbGVPclRhYmxldCAmJiB0ZXh0Lmxlbmd0aCA+IDEyKSB7XHJcbiAgICAgICAgdGV4dEVsZW1lbnQudGV4dCh0ZXh0LnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAvLyBFbnN1cmUgWC1heGlzIGxpbmUgaXMgdmlzaWJsZVxyXG4gIHhBeGlzR3JvdXBcclxuICAgIC5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JylcclxuICAgIC5hdHRyKCdkJywgYE0wLDBIJHtkaW1lbnNpb25zLnJlcXVpcmVkU3ZnV2lkdGh9YCk7XHJcblxyXG4gIC8vIFktYXhpc1xyXG4gIHN2Z1xyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLmNhbGwoYXhlcy55QXhpcylcclxuICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbn1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJEcmlsbGRvd25BeGVzKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBzdmdZQXhpc0xlZnQ6IGFueSxcclxuICAgIHN2Z1lBeGlzUmlnaHQ6IGFueSxcclxuICAgIGF4ZXM6IGFueSxcclxuICAgIHNjYWxlczogYW55LFxyXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9uc1xyXG4gICkge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7ZGltZW5zaW9ucy5oZWlnaHR9KWApXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC14LWF4aXMtdGV4dCBtdWx0aWNoYXJ0MScpXHJcbiAgICAgIC5jYWxsKGF4ZXMueEF4aXMpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcblxyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuY2FsbChheGVzLnlBeGlzKVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcblxyXG4gICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmNhbGwoYXhlcy55QXhpcylcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyTXVsdGlDaGFydEF4ZXMoc3ZnOiBhbnksIGF4ZXM6IGFueSwgc2NhbGVzOiBhbnksIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwke2RpbWVuc2lvbnMuaGVpZ2h0fSlgKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteC1heGlzLXRleHQgbXVsdGljaGFydCcpXHJcbiAgICAgIC5jYWxsKGF4ZXMueEF4aXMpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5jYWxsKGF4ZXMueUF4aXMpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlBeGlzU3R5bGluZyhzdmc6IGFueSwgc3ZnWUF4aXNMZWZ0OiBhbnksIHN2Z1lBeGlzUmlnaHQ6IGFueSkge1xyXG4gICAgY29uc3Qgc3R5bGVBeGlzRG9tYWluID0gKGNvbnRhaW5lcjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnRhaW5lci5zZWxlY3RBbGwoJy5kb21haW4nKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IpJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuICAgIH07XHJcblxyXG4gICAgc3R5bGVBeGlzRG9tYWluKHN2Zyk7XHJcbiAgICBzdHlsZUF4aXNEb21haW4oc3ZnWUF4aXNMZWZ0KTtcclxuICAgIHN0eWxlQXhpc0RvbWFpbihzdmdZQXhpc1JpZ2h0KTtcclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0Rhc2hlZCkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0NvbG9yKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLm11bHRpY2hhcnQnKS5zdHlsZShcclxuICAgICAgICAnY29sb3InLFxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNDb2xvciB8fCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5QXhpc0NvbmZpZ3VyYXRpb25zKHN2ZzogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogRGltZW5zaW9ucywgZGF0YTogYW55W10pIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLm11bHRpY2hhcnQgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW4pIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcubXVsdGljaGFydCA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQ3VzdG9tWEF4aXMoc3ZnLCBzY2FsZXMsIGRpbWVuc2lvbnMsIGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW4pIHtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNIaWRkZW4pIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNab29tZWRPdXQgJiYgZGF0YS5sZW5ndGggPiA5KSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJy5saWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoLTkwKScpXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAnLTUnKVxyXG4gICAgICAgIC5hdHRyKCdkeScsIG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJDdXN0b21YQXhpcyhzdmc6IGFueSwgc2NhbGVzOiBhbnksIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsIGRhdGE6IGFueVtdKSB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICcjMDAwJylcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKS50aWNrU2l6ZSgwKSlcclxuICAgICAgLmNhbGwoKGc6IGFueSkgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdmaWxsJywgJ25vbmUnKSk7XHJcblxyXG4gICAgdGhpcy5zdHlsZUN1c3RvbVhBeGlzVGlja3Moc3ZnLCBkYXRhKTtcclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueExhYmVsc09uU2FtZUxpbmUpIHtcclxuICAgICAgdGhpcy5hcHBseVhMYWJlbHNPblNhbWVMaW5lKHN2Zyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0eWxlQ3VzdG9tWEF4aXNUaWNrcyhzdmc6IGFueSwgZGF0YTogYW55W10pIHtcclxuICAgIGxldCBhbHRlcm5hdGVUZXh0ID0gZmFsc2U7XHJcblxyXG4gICAgc3ZnLnNlbGVjdEFsbCgnLngxLmF4aXMxIC50aWNrIGxpbmUnKS5hdHRyKCd5MicsICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmhpZGVYYXhpc1RpY2spIHJldHVybiAwO1xyXG4gICAgICBcclxuICAgICAgaWYgKGFsdGVybmF0ZVRleHQgJiYgIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTm9BbHRlcm5hdGVYYXhpc1RleHQpIHtcclxuICAgICAgICBhbHRlcm5hdGVUZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQ09OU1RBTlRTLkxPTkdfVElDS19MRU5HVEhfQkcgLSA3O1xyXG4gICAgICB9XHJcbiAgICAgIGFsdGVybmF0ZVRleHQgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gdGhpcy5DT05TVEFOVFMuU0hPUlRfVElDS19MRU5HVEhfQkcgLSA0O1xyXG4gICAgfSk7XHJcblxyXG4gICAgYWx0ZXJuYXRlVGV4dCA9IGZhbHNlO1xyXG4gICAgc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCA+IDggXHJcbiAgICAgICAgICAgID8gJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duLWFsdCdcclxuICAgICAgICAgICAgOiAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtd2Vla2x5Y2hhcnRzJztcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3knLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGFsdGVybmF0ZVRleHQpIHtcclxuICAgICAgICAgIGFsdGVybmF0ZVRleHQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLkNPTlNUQU5UUy5MT05HX1RJQ0tfTEVOR1RIX0JHO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbHRlcm5hdGVUZXh0ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5DT05TVEFOVFMuU0hPUlRfVElDS19MRU5HVEhfQkc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseVhMYWJlbHNPblNhbWVMaW5lKHN2ZzogYW55KSB7XHJcbiAgICBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgIC5hdHRyKCd5JywgdGhpcy5DT05TVEFOVFMuU0hPUlRfVElDS19MRU5HVEhfQkcpXHJcbiAgICAgIC50ZXh0KChkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBjb25zdCB0cmltbWVkID0gZC50cmltKCk7XHJcbiAgICAgICAgY29uc3Qgc3BhY2VJbmRleCA9IHRyaW1tZWQuaW5kZXhPZignICcpO1xyXG4gICAgICAgIHJldHVybiBzcGFjZUluZGV4ID4gLTEgXHJcbiAgICAgICAgICA/IHRyaW1tZWQuc3Vic3RyaW5nKDAsIHNwYWNlSW5kZXgpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgIDogdHJpbW1lZC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2snKVxyXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLmF0dHIoJ3knLCB0aGlzLkNPTlNUQU5UUy5MT05HX1RJQ0tfTEVOR1RIX0JHKVxyXG4gICAgICAuYXR0cignZmlsbCcsICdjdXJyZW50Q29sb3InKVxyXG4gICAgICAudGV4dCgoZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IGQudHJpbSgpO1xyXG4gICAgICAgIGNvbnN0IHNwYWNlSW5kZXggPSB0cmltbWVkLmluZGV4T2YoJyAnKTtcclxuICAgICAgICByZXR1cm4gc3BhY2VJbmRleCA+IC0xIFxyXG4gICAgICAgICAgPyB0cmltbWVkLnN1YnN0cmluZyhzcGFjZUluZGV4KS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICA6ICcnO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyRGF0YUxhYmVscyhyZWN0OiBhbnksIHNjYWxlczogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSwgZGltZW5zaW9uczogRGltZW5zaW9ucykge1xyXG4gICAgaWYgKCF0aGlzLmlzQ0MgJiYgIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lKSB7XHJcbiAgICAgIHJlY3QuYXBwZW5kKCdzdmc6dGl0bGUnKS50ZXh0KChkOiBhbnkpID0+IGRbMV0gLSBkWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc2hvd1RvdGFsT25Ub3ApIHtcclxuICAgICAgdGhpcy5yZW5kZXJUb3BMYWJlbHMocmVjdCwgc2NhbGVzLCBtZXRhRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dBbmdsZWRMYWJlbHMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJBbmdsZWRMYWJlbHMocmVjdCwgc2NhbGVzLCBtZXRhRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRvcExhYmVscyhyZWN0OiBhbnksIHNjYWxlczogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSkge1xyXG4gICAgY29uc3QgZm9ybWF0RnJvbUJhY2tlbmQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyXHJcbiAgICAgID8gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIpXHJcbiAgICAgIDogKGQ6IGFueSkgPT4gZDtcclxuICAgIGNvbnN0IGZvcm1hdEZvckh1Z2VOdW1iZXJzID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKCcuMnMnKTtcclxuXHJcbiAgICByZWN0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHNjYWxlcy54U2NhbGUoZC5kYXRhLm5hbWUpICsgc2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDIpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay1sYWJlbHMtb250b3Atd2VrbHljaGFydHMnKVxyXG4gICAgICAuYXR0cigneScsIChkOiBhbnkpID0+IHNjYWxlcy55U2NhbGUoZFsxXSkgLSAzKVxyXG4gICAgICAudGV4dCgoZDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkWzFdIC0gZFswXTtcclxuICAgICAgICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSAwKSByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA8PSA5OTkgXHJcbiAgICAgICAgICA/IGZvcm1hdEZyb21CYWNrZW5kKHZhbHVlKVxyXG4gICAgICAgICAgOiBmb3JtYXRGb3JIdWdlTnVtYmVycyh2YWx1ZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIG1ldGFEYXRhLnVuaXQgPyBtZXRhRGF0YS51bml0ICsgZm9ybWF0dGVkVmFsdWUgOiBmb3JtYXR0ZWRWYWx1ZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckFuZ2xlZExhYmVscyhyZWN0OiBhbnksIHNjYWxlczogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSkge1xyXG4gICAgY29uc3QgZm9ybWF0RnJvbUJhY2tlbmQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyXHJcbiAgICAgID8gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIpXHJcbiAgICAgIDogKGQ6IGFueSkgPT4gZDtcclxuICAgIGNvbnN0IGZvcm1hdEZvckh1Z2VOdW1iZXJzID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKCcuMnMnKTtcclxuICAgIGNvbnN0IHRlbXBPYmplY3RIb2xkZXI6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcclxuXHJcbiAgICByZWN0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgIC5hdHRyKCd5JywgMClcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCAoZDogYW55KSA9PiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRhdGEtbGFiZWxzLWFuZ2xlZC13ZWVrbHljaGFydHMnKVxyXG4gICAgICAudGV4dCgoZDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkWzFdIC0gZFswXTtcclxuICAgICAgICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlIDw9IDApIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHZhbHVlIDw9IDk5OVxyXG4gICAgICAgICAgPyBmb3JtYXRGcm9tQmFja2VuZCh2YWx1ZSlcclxuICAgICAgICAgIDogZm9ybWF0Rm9ySHVnZU51bWJlcnModmFsdWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBtZXRhRGF0YS51bml0ID8gbWV0YURhdGEudW5pdCArIGZvcm1hdHRlZFZhbHVlIDogZm9ybWF0dGVkVmFsdWU7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAoZDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkWzFdIC0gZFswXTtcclxuICAgICAgICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlIDw9IDApIHJldHVybiAncm90YXRlKDApJztcclxuXHJcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICBsZXQgaW5jcmVtZW50ZXIgPSAxO1xyXG4gICAgICAgIG1ldGFEYXRhLmtleUxpc3QuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgaWYgKGQuZGF0YVtrZXldKSB7XHJcbiAgICAgICAgICAgIHRvdGFsICs9IGQuZGF0YVtrZXldO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5jcmVtZW50ZXIgPSAyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXSA9ICh0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXSB8fCAwKSArIGluY3JlbWVudGVyO1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV07XHJcbiAgICAgICAgY29uc3QgeFBvcyA9IHNjYWxlcy54U2NhbGUoZC5kYXRhLm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGJhbmR3aWR0aCA9IHNjYWxlcy54U2NhbGUuYmFuZHdpZHRoKCk7XHJcbiAgICAgICAgY29uc3QgeVBvcyA9IHNjYWxlcy55U2NhbGUodG90YWwpIC0gMztcclxuXHJcbiAgICAgICAgc3dpdGNoIChwb3NpdGlvbikge1xyXG4gICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3hQb3MgKyBiYW5kd2lkdGggLyAzfSwke3lQb3N9KSByb3RhdGUoMjcwKWA7XHJcbiAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCR7eFBvcyArIGJhbmR3aWR0aCAvIDIgKyAyfSwke3lQb3N9KSByb3RhdGUoMjcwKWA7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3hQb3MgKyAoYmFuZHdpZHRoICogMykgLyA0fSwke3lQb3N9KSByb3RhdGUoMjcwKWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVGFyZ2V0TGluZShcclxuICAgIHN2ZzogYW55LFxyXG4gICAgc3ZnWUF4aXNSaWdodDogYW55LFxyXG4gICAgc2NhbGVzOiBhbnksXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxyXG4gICAgbWV0YURhdGE6IENoYXJ0TWV0YURhdGFcclxuICApIHtcclxuICAgIGlmICghdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBwYXJzZWRUYXJnZXQgPSB0aGlzLnBhcnNlVGFyZ2V0VmFsdWUodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KTtcclxuICAgIGNvbnN0IHlaZXJvID0gc2NhbGVzLnlTY2FsZShwYXJzZWRUYXJnZXQpO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdsaW5lJylcclxuICAgICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgLmF0dHIoJ3gyJywgZGltZW5zaW9ucy53aWR0aClcclxuICAgICAgLmF0dHIoJ3kxJywgeVplcm8pXHJcbiAgICAgIC5hdHRyKCd5MicsIHlaZXJvKVxyXG4gICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgLnN0eWxlKCdzdHJva2UnLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcik7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJUYXJnZXRMYWJlbChzdmdZQXhpc1JpZ2h0LCB5WmVybywgbWV0YURhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZVRhcmdldFZhbHVlKHRhcmdldDogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQoU3RyaW5nKHRhcmdldCkpO1xyXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiAwO1xyXG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIocGFyc2VkKSA/IHBhcnNlSW50KFN0cmluZyh0YXJnZXQpKSA6IHBhcnNlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVGFyZ2V0TGFiZWwoc3ZnWUF4aXNSaWdodDogYW55LCB5WmVybzogbnVtYmVyLCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSkge1xyXG4gICAgY29uc3QgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSB8fCAnJztcclxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lIHx8ICd0YXJnZXQnO1xyXG5cclxuICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHt5WmVybyAtIDEzfSlgKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCB0aGlzLkNPTlNUQU5UUy5SSUdIVF9TVkdfV0lEVEgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCA1MClcclxuICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC5odG1sKGA8ZGl2PiR7dGFyZ2V0TmFtZX08L2Rpdj48ZGl2PiR7dGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0fSR7ZGF0YVR5cGV9PC9kaXY+YCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxpbmVDaGFydChzdmc6IGFueSwgbGluZURhdGE6IGFueVtdLCBzY2FsZXM6IGFueSwgY29sb3JzOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKSB7XHJcbiAgICBpZiAoIWxpbmVEYXRhIHx8ICFjb2xvcnMpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBkYXRhR3JvdXAgPSBkM1xyXG4gICAgICAubmVzdCgpXHJcbiAgICAgIC5rZXkoKGQ6IGFueSkgPT4gZC5jYXRlZ29yeSlcclxuICAgICAgLmVudHJpZXMobGluZURhdGEpO1xyXG5cclxuICAgIGNvbnN0IGxpbmVHZW4gPSBkM1xyXG4gICAgICAubGluZSgpXHJcbiAgICAgIC54KChkOiBhbnkpID0+IHNjYWxlcy54U2NhbGUoZC5uYW1lKSArIHNjYWxlcy54U2NhbGUuYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAueSgoZDogYW55KSA9PiBzY2FsZXMubGluZVlzY2FsZShkLnZhbHVlKSk7XHJcblxyXG4gICAgZGF0YUdyb3VwLmZvckVhY2goKGdyb3VwOiBhbnkpID0+IHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgICAgLmRhdHVtKGdyb3VwLnZhbHVlcylcclxuICAgICAgICAuYXR0cignZmlsbCcsICdub25lJylcclxuICAgICAgICAuYXR0cignc3Ryb2tlJywgKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGRbMF0/LmNhdGVnb3J5IFxyXG4gICAgICAgICAgICA/IGNvbG9yc1tkWzBdLmNhdGVnb3J5XVxyXG4gICAgICAgICAgICA6IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDIuNSlcclxuICAgICAgICAuYXR0cignZCcsIGxpbmVHZW4pO1xyXG5cclxuICAgICAgdGhpcy5yZW5kZXJMaW5lRG90cyhzdmcsIGdyb3VwLnZhbHVlcywgc2NhbGVzLCBjb2xvcnMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckxpbmVEb3RzKHN2ZzogYW55LCB2YWx1ZXM6IGFueVtdLCBzY2FsZXM6IGFueSwgY29sb3JzOiBhbnkpIHtcclxuICAgIGNvbnN0IGRvdCA9IHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCcubGluZS1kb3RzJylcclxuICAgICAgLmRhdGEodmFsdWVzKVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLm9uKCdjbGljaycsIChkOiBhbnkpID0+IHRoaXMuaGFuZGxlQ2xpY2soZCkpO1xyXG5cclxuICAgIGRvdFxyXG4gICAgICAuYXBwZW5kKCdjaXJjbGUnKVxyXG4gICAgICAuYXR0cignZmlsbCcsIChkOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gZC5jYXRlZ29yeSBcclxuICAgICAgICAgID8gY29sb3JzW2QuY2F0ZWdvcnldXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yO1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAuYXR0cignY3gnLCAoZDogYW55KSA9PiBzY2FsZXMueFNjYWxlKGQubmFtZSkgKyBzY2FsZXMueFNjYWxlLmJhbmR3aWR0aCgpIC8gMilcclxuICAgICAgLmF0dHIoJ2N5JywgKGQ6IGFueSkgPT4gc2NhbGVzLmxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAgIC5hdHRyKCdyJywgMylcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICBkb3RcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90cycpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcuODVlbScpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICdib2xkJylcclxuICAgICAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHNjYWxlcy54U2NhbGUoZC5uYW1lKSArIHNjYWxlcy54U2NhbGUuYmFuZHdpZHRoKCkgLyAyKVxyXG4gICAgICAgIC5hdHRyKCd5JywgKGQ6IGFueSkgPT4gc2NhbGVzLmxpbmVZc2NhbGUoZC52YWx1ZSkpXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgJy0xZW0nKVxyXG4gICAgICAgIC50ZXh0KChkOiBhbnkpID0+IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxhYmVsRm9ybWF0dGVyKGQudmFsdWUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhPy5tZXRhRGF0YT8uaGFzRHJpbGxEb3duIHx8IGQ/LnRvZ2dsZUZyb20pIHtcclxuICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVIZWFkZXJNZW51Q2xpY2soaWQ6IGFueSkge1xyXG4gICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVab29taW5ab29tb3V0Q2xpY2soeyBpc1pvb21PdXQsIGV2ZW50IH06IHsgaXNab29tT3V0OiBib29sZWFuOyBldmVudDogYW55IH0pIHtcclxuICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0KTtcclxuICB9XHJcbn0iLCI8bWV0YSBodHRwLWVxdWl2PVwiQ0FDSEUtQ09OVFJPTFwiIGNvbnRlbnQ9XCJOTy1DQUNIRVwiIC8+XHJcbjxtZXRhIGh0dHAtZXF1aXY9XCJFWFBJUkVTXCIgY29udGVudD1cIlNhdCwgMDEgSnVuIDIwMDQgMTE6MTI6MDEgR01UXCIgLz5cclxuPGRpdlxyXG4gICN2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXJcclxuICBjbGFzcz1cImxpYi1jaGFydC13cmFwcGVyXCJcclxuICBbbmdDbGFzc109XCJ7ICdsaWItbm8tYmFja2dyb3VuZCc6IGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kIH1cIlxyXG4gICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnKTtcIlxyXG5cclxuICAocmVzaXplZCk9XCJvblJlc2l6ZWQoJGV2ZW50KVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFsdFwiICpuZ0lmPVwiIWlzSGVhZGVyVmlzaWJsZVwiPlxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjJcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjbGlja0V2ZW50KT1cImhhbmRsZUNsaWNrKCRldmVudClcIlxyXG4gICAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mj5cclxuXHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12M1xyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbik9XCJoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAgICh6b29tSW5ab29tT3V0Q2xpY2spPVwiaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKCRldmVudClcIlxyXG4gICAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mz5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcIlxyXG4gICAgaWQ9XCJ2ZXJ0aWNhbHN0YWNrZWRjaGFydGNvbnRhaW5lclwiXHJcbiAgICAjdmVydGljYWxzdGFja2VkY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2Z1wiXHJcbiAgPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19
1049
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQW1EbEQsTUFBTSxPQUFPLHFDQUNYLFNBQVEsaUJBQWlCO0lBZ0Z6QjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBdEVBLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFekQsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUMzQixhQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxD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QUFZO3NCQURYLFNBQVM7dUJBQUMsK0JBQStCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk1RCwyQkFBMkI7c0JBRDFCLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUc5QyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIE9uQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG4vLyBUeXBlc1xyXG5pbnRlcmZhY2UgQ2hhcnREYXRhIHtcclxuICBkYXRhOiBhbnlbXTtcclxuICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YTtcclxuICBsaW5lRGF0YT86IGFueVtdO1xyXG4gIHRhcmdldExpbmVEYXRhPzogVGFyZ2V0TGluZURhdGE7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDaGFydE1ldGFEYXRhIHtcclxuICB1bml0Pzogc3RyaW5nO1xyXG4gIGlzQ0M/OiBib29sZWFuO1xyXG4gIGJhcldpdGhvdXRDbGljaz86IHN0cmluZ1tdO1xyXG4gIGNvbG9yczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICBrZXlMaXN0OiBzdHJpbmdbXTtcclxuICBkYXRhVHlwZT86IHN0cmluZztcclxuICBoYXNEcmlsbERvd24/OiBib29sZWFuO1xyXG4gIGhvdmVyQ29sb3I/OiBzdHJpbmc7XHJcbiAgeUxhYmVsPzogc3RyaW5nO1xyXG4gIHhMYWJlbD86IHN0cmluZztcclxuICBsaW5leUxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGFyZ2V0TGluZURhdGEge1xyXG4gIHRhcmdldDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgdGFyZ2V0TmFtZT86IHN0cmluZztcclxuICBiYXJBYm92ZVRhcmdldENvbG9yPzogc3RyaW5nO1xyXG4gIGJhckFib3ZlVGFyZ2V0SG92ZXJDb2xvcj86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIERpbWVuc2lvbnMge1xyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcclxuICBjb250YWluZXJIZWlnaHQ6IG51bWJlcjtcclxuICBiYXJXaWR0aDogbnVtYmVyO1xyXG4gIGJhclBhZGRpbmc6IG51bWJlcjtcclxuICByZXF1aXJlZFN2Z1dpZHRoOiBudW1iZXI7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEJhcnNXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgXHJcbiAgQFZpZXdDaGlsZCgndmVydGljYWxzdGFja2VkY2hhcnRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdmVydGljYWxzdGFja2VkY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBDaGFydERhdGEgfCBhbnkgO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgaXNIZWFkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBpc1RvcENhcHRpb25WaXNpYmxlID0gdHJ1ZTtcclxuICB1bmlxdWVJZCA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IGZhbHNlO1xyXG4gIGlzQ0MgPSBmYWxzZTtcclxuICBpc1pvb21lZE91dCA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQ09OU1RBTlRTID0ge1xyXG4gICAgUklHSFRfU1ZHX1dJRFRIOiA2MCxcclxuICAgIExFRlRfUklHSFRfU1BBQ0VTOiA1MCxcclxuICAgIFNIT1JUX1RJQ0tfTEVOR1RIOiA0LFxyXG4gICAgTE9OR19USUNLX0xFTkdUSDogMTYsXHJcbiAgICBTSE9SVF9USUNLX0xFTkdUSF9CRzogNSxcclxuICAgIExPTkdfVElDS19MRU5HVEhfQkc6IDMwLFxyXG4gICAgREVTS1RPUF9CQVJfV0lEVEg6IDQwLCAgICAgIC8vIERlc2t0b3AgYmFyIHdpZHRoXHJcbiAgICBNT0JJTEVfQkFSX1dJRFRIOiAyNSwgICAgICAgLy8gTW9iaWxlL1RhYmxldCBiYXIgd2lkdGggKHJlZHVjZWQpXHJcbiAgICBCQVJfR0FQOiAzMCwgICAgICAgICAgICAgICAgLy8gR2FwIGJldHdlZW4gYmFycyAoaW5jcmVhc2VkIGZvciBiZXR0ZXIgc2VwYXJhdGlvbilcclxuICAgIFpPT01fVEhSRVNIT0xEOiAzMCxcclxuICAgIFpPT01fSU5fVEhSRVNIT0xEOiA4LFxyXG4gIH07XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uID0ge1xyXG4gICAgbWFyZ2luOiB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogNDAgfSxcclxuICAgIHN2Z0hlaWdodDogNzAsXHJcbiAgICBsZWdlbmRIZWlnaHQ6ICcxMCUnLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsYWJlbEZvcm1hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHhBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBsaW5lR3JhcGhDb2xvcjogJyNGNkQyODMnLFxyXG4gICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICBzaG93TGVnZW5kOiBmYWxzZSxcclxuICAgIGZvckNvbXBhcmlzb246IHRydWUsXHJcbiAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICAgIHlBeGlzR3JpZDogZmFsc2UsXHJcbiAgICAvLyBPcHRpb25hbCBjb25maWdzIHdpdGggdW5kZWZpbmVkIGRlZmF1bHRzXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc1RvcENhcHRpb25WaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzRGFzaGVkOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzQ29sb3I6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIHNob3dUb3RhbE9uVG9wOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZW5kRm9ybWF0dGVySGFzUHJpb3JpdHk6IHVuZGVmaW5lZCxcclxuICAgIHNob3dBbmdsZWRMYWJlbHM6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBzaG93WGF4aXNUb3A6IHVuZGVmaW5lZCxcclxuICAgIHhBeGlzR3JpZDogdW5kZWZpbmVkLFxyXG4gICAgeExhYmVsc09uU2FtZUxpbmU6IHVuZGVmaW5lZCxcclxuICAgIGhpZGVYYXhpc1RpY2s6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHVuZGVmaW5lZCxcclxuICAgIGlzVGFyZ2V0TGluZTogdW5kZWZpbmVkLFxyXG4gICAgZGlzcGxheVRpdGxlT25Ub3A6IHVuZGVmaW5lZCxcclxuICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNUaXRsZUhpZGRlbjogdW5kZWZpbmVkLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5yZW1vdmVFeGlzdGluZ0NoYXJ0KCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVTdGFja2VkQ2hhcnQoKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVFeGlzdGluZ0NoYXJ0KCk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVFeGlzdGluZ0NoYXJ0KCkge1xyXG4gICAgZDMuc2VsZWN0KCcjJyArIHRoaXMudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXJnZUNvbmZpZ3VyYXRpb25zKCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltrZXldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGtleSxcclxuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVNZXRhRGF0YShtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSk6IENoYXJ0TWV0YURhdGEge1xyXG4gICAgaWYgKCFtZXRhRGF0YS51bml0KSBtZXRhRGF0YS51bml0ID0gJyc7XHJcbiAgICBpZiAobWV0YURhdGEuaXNDQykgdGhpcy5pc0NDID0gbWV0YURhdGEuaXNDQztcclxuICAgIFxyXG4gICAgaWYgKG1ldGFEYXRhLmJhcldpdGhvdXRDbGljaz8ubGVuZ3RoKSB7XHJcbiAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljayA9IG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5tYXAoZWwgPT4gZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgPSBbXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIG1ldGFEYXRhO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgY2FsY3VsYXRlRGltZW5zaW9ucyhcclxuICBjaGFydENvbnRhaW5lcjogYW55LFxyXG4gIHZlcnRpY2FsQ29udGFpbmVyOiBhbnksXHJcbiAgbWFyZ2luOiBhbnksXHJcbiAgZGF0YUxlbmd0aDogbnVtYmVyXHJcbik6IERpbWVuc2lvbnMge1xyXG4gIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY2hhcnRDb250YWluZXIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHZlcnRpY2FsQ29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgXHJcbiAgY29uc3QgbGVmdEF4aXNXaWR0aCA9IDgwO1xyXG4gIGNvbnN0IHJpZ2h0QXhpc1dpZHRoID0gdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIO1xyXG4gIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmVyV2lkdGggLSBsZWZ0QXhpc1dpZHRoIC0gcmlnaHRBeGlzV2lkdGg7XHJcbiAgXHJcbiAgbGV0IHdpZHRoID0gYXZhaWxhYmxlV2lkdGg7XHJcbiAgbGV0IGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAqICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgLyAxMDApIC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b207XHJcblxyXG4gIGlmIChkYXRhTGVuZ3RoID4gdGhpcy5DT05TVEFOVFMuWk9PTV9USFJFU0hPTEQgJiYgdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgY29uc3QgbWluV2lkdGggPSBkYXRhTGVuZ3RoICogMjU7XHJcbiAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBtaW5XaWR0aCk7XHJcbiAgfVxyXG5cclxuICBpZiAoZGF0YUxlbmd0aCA+IHRoaXMuQ09OU1RBTlRTLlpPT01fSU5fVEhSRVNIT0xEICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICB3aWR0aCA9IGRhdGFMZW5ndGggKiAxMzA7XHJcbiAgfVxyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuKSB7XHJcbiAgICBoZWlnaHQgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgIT09IDgwXHJcbiAgICAgID8gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XHJcbiAgICAgIDogY29udGFpbmVySGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgIGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tIC0gMTMwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgaXNNb2JpbGVPclRhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDtcclxuICBsZXQgYmFyV2lkdGg6IG51bWJlcjtcclxuICBsZXQgYmFyUGFkZGluZzogbnVtYmVyO1xyXG4gIFxyXG4gIGlmIChpc01vYmlsZU9yVGFibGV0KSB7XHJcbiAgICBpZiAoZGF0YUxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBiYXJXaWR0aCA9IDYwO1xyXG4gICAgICBiYXJQYWRkaW5nID0gMDtcclxuICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA9PT0gMikge1xyXG4gICAgICBiYXJXaWR0aCA9IDUwO1xyXG4gICAgICBiYXJQYWRkaW5nID0gNDU7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGFMZW5ndGggPT09IDMpIHtcclxuICAgICAgYmFyV2lkdGggPSA0NTtcclxuICAgICAgYmFyUGFkZGluZyA9IDQwO1xyXG4gICAgfSBlbHNlIGlmIChkYXRhTGVuZ3RoIDw9IDUpIHtcclxuICAgICAgYmFyV2lkdGggPSAzNTtcclxuICAgICAgYmFyUGFkZGluZyA9IDMwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYmFyV2lkdGggPSAyNTtcclxuICAgICAgYmFyUGFkZGluZyA9IDI1O1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBiYXJXaWR0aCA9IHRoaXMuQ09OU1RBTlRTLkRFU0tUT1BfQkFSX1dJRFRIO1xyXG4gICAgYmFyUGFkZGluZyA9IHRoaXMuQ09OU1RBTlRTLkJBUl9HQVA7XHJcbiAgfVxyXG4gIFxyXG4gIGNvbnN0IHRvdGFsQmFyc1dpZHRoID0gYmFyV2lkdGggKiBkYXRhTGVuZ3RoO1xyXG4gIGNvbnN0IHRvdGFsR2FwcyA9IGJhclBhZGRpbmcgKiAoZGF0YUxlbmd0aCAtIDEpO1xyXG4gIGNvbnN0IG1pblJlcXVpcmVkV2lkdGggPSB0b3RhbEJhcnNXaWR0aCArIHRvdGFsR2FwcyArICh0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIpO1xyXG4gIGNvbnN0IHJlcXVpcmVkU3ZnV2lkdGggPSBNYXRoLm1heChhdmFpbGFibGVXaWR0aCwgbWluUmVxdWlyZWRXaWR0aCk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICB3aWR0aCxcclxuICAgIGhlaWdodCxcclxuICAgIGNvbnRhaW5lcldpZHRoLFxyXG4gICAgY29udGFpbmVySGVpZ2h0LFxyXG4gICAgYmFyV2lkdGgsXHJcbiAgICBiYXJQYWRkaW5nLFxyXG4gICAgcmVxdWlyZWRTdmdXaWR0aCxcclxuICB9O1xyXG59XHJcblxyXG5wcml2YXRlIGNyZWF0ZVN2Z0NvbnRhaW5lcnMoXHJcbiAgY2hhcnRDb250YWluZXI6IGFueSxcclxuICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxyXG4gIG1hcmdpbjogYW55LFxyXG4gIGhhc1hMYWJlbDogYm9vbGVhbiAgLy8gQWRkIHRoaXMgcGFyYW1ldGVyXHJcbikge1xyXG4gIC8vIENhbGN1bGF0ZSB0b3RhbCBoZWlnaHQgaW5jbHVkaW5nIHNwYWNlIGZvciBYLWF4aXMgbGFiZWwgaWYgcHJlc2VudFxyXG4gIGNvbnN0IHhMYWJlbFNwYWNlID0gaGFzWExhYmVsID8gMzAgOiAwO1xyXG4gIGNvbnN0IHRvdGFsSGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIHhMYWJlbFNwYWNlO1xyXG5cclxuICAvLyBNYWluIHdyYXBwZXJcclxuICBjb25zdCBjaGFydFdyYXBwZXIgPSBjaGFydENvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdpZCcsIHRoaXMudW5pcXVlSWQpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnY2hhcnQtd3JhcHBlci1tYWluJylcclxuICAgIC5zdHlsZSgncG9zaXRpb24nLCAncmVsYXRpdmUnKVxyXG4gICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgIC5zdHlsZSgnaGVpZ2h0JywgYCR7dG90YWxIZWlnaHR9cHhgKTsgIC8vIEluY2x1ZGUgWC1sYWJlbCBzcGFjZVxyXG5cclxuY29uc3QgbGVmdEF4aXNDb250YWluZXIgPSBjaGFydFdyYXBwZXJcclxuICAuYXBwZW5kKCdkaXYnKVxyXG4gIC5hdHRyKCdjbGFzcycsICdsZWZ0LWF4aXMtY29udGFpbmVyJylcclxuICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAuc3R5bGUoJ2xlZnQnLCAnMCcpXHJcbiAgLnN0eWxlKCd0b3AnLCAnMCcpXHJcbiAgLnN0eWxlKCd3aWR0aCcsICc4MHB4JylcclxuICAuc3R5bGUoJ2hlaWdodCcsIGAke2RpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b219cHhgKVxyXG4gIC5zdHlsZSgnYmFja2dyb3VuZC1jb2xvcicsICd2YXIoLS1jYXJkLWJnKScpXHJcbiAgLnN0eWxlKCd6LWluZGV4JywgJzEwJyk7XHJcblxyXG5jb25zdCBzdmdZQXhpc0xlZnQgPSBsZWZ0QXhpc0NvbnRhaW5lclxyXG4gIC5hcHBlbmQoJ3N2ZycpXHJcbiAgLmF0dHIoJ3dpZHRoJywgJzgwJylcclxuICAuYXR0cignaGVpZ2h0JywgZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSlcclxuICAuYXBwZW5kKCdnJylcclxuICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSg3MCwke21hcmdpbi50b3B9KWApO1xyXG5cclxuICAvLyBSaWdodCBZLWF4aXMgLSBGaXhlZFxyXG4gIGNvbnN0IHJpZ2h0QXhpc0NvbnRhaW5lciA9IGNoYXJ0V3JhcHBlclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdyaWdodC1heGlzLWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgncmlnaHQnLCAnMCcpXHJcbiAgICAuc3R5bGUoJ3RvcCcsICcwJylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCBgJHt0aGlzLkNPTlNUQU5UUy5SSUdIVF9TVkdfV0lEVEh9cHhgKVxyXG4gICAgLnN0eWxlKCdoZWlnaHQnLCBgJHtkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tfXB4YCkgIC8vIEV4Y2x1ZGUgWC1sYWJlbCBzcGFjZVxyXG4gICAgLnN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ3ZhcigtLWNhcmQtYmcpJylcclxuICAgIC5zdHlsZSgnei1pbmRleCcsICcxMCcpO1xyXG5cclxuICBjb25zdCBzdmdZQXhpc1JpZ2h0ID0gcmlnaHRBeGlzQ29udGFpbmVyXHJcbiAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgLmF0dHIoJ3dpZHRoJywgdGhpcy5DT05TVEFOVFMuUklHSFRfU1ZHX1dJRFRIKVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIGRpbWVuc2lvbnMuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgLy8gU2Nyb2xsYWJsZSBtaWRkbGUgYXJlYVxyXG5jb25zdCBzY3JvbGxhYmxlQ29udGFpbmVyID0gY2hhcnRXcmFwcGVyXHJcbiAgLmFwcGVuZCgnZGl2JylcclxuICAuYXR0cignY2xhc3MnLCAnc2Nyb2xsYWJsZS1jaGFydC1jb250YWluZXInKVxyXG4gIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gIC5zdHlsZSgnbGVmdCcsICc4MHB4JykgIC8vIEV4YWN0bHkgd2hlcmUgbGVmdCBjb250YWluZXIgZW5kc1xyXG4gIC5zdHlsZSgncmlnaHQnLCBgJHt0aGlzLkNPTlNUQU5UUy5SSUdIVF9TVkdfV0lEVEh9cHhgKVxyXG4gIC5zdHlsZSgndG9wJywgJzAnKVxyXG4gIC5zdHlsZSgnd2lkdGgnLCAnYXV0bycpXHJcbiAgLnN0eWxlKCdoZWlnaHQnLCBgJHtkaW1lbnNpb25zLmhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tfXB4YClcclxuICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpXHJcbiAgLnN0eWxlKCdvdmVyZmxvdy15JywgJ2hpZGRlbicpO1xyXG5cclxuXHJcbmNvbnN0IGlubmVyQ29udGFpbmVyID0gc2Nyb2xsYWJsZUNvbnRhaW5lclxyXG4gIC5hcHBlbmQoJ2RpdicpXHJcbiAgLmF0dHIoJ2NsYXNzJywgJ2lubmVyLWNoYXJ0LWNvbnRhaW5lcicpXHJcbiAgLnN0eWxlKCdtaW4td2lkdGgnLCAnMTAwJScpO1xyXG5cclxuY29uc3Qgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAuYXBwZW5kKCdzdmcnKVxyXG4gIC5hdHRyKCd3aWR0aCcsIGRpbWVuc2lvbnMucmVxdWlyZWRTdmdXaWR0aClcclxuICAuYXR0cignaGVpZ2h0JywgZGltZW5zaW9ucy5oZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDMwKVxyXG4gIC5hcHBlbmQoJ2cnKVxyXG4gIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHttYXJnaW4udG9wfSlgKTtcclxuXHJcbiAgLy8gRml4ZWQgYm90dG9tIGNvbnRhaW5lciBmb3IgWC1heGlzIGxhYmVsXHJcbiAgY29uc3QgYm90dG9tTGFiZWxDb250YWluZXIgPSBjaGFydFdyYXBwZXJcclxuICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnYm90dG9tLWxhYmVsLWNvbnRhaW5lcicpXHJcbiAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgIC5zdHlsZSgnbGVmdCcsICc4MHB4JylcclxuICAgIC5zdHlsZSgncmlnaHQnLCBgJHt0aGlzLkNPTlNUQU5UUy5SSUdIVF9TVkdfV0lEVEh9cHhgKVxyXG4gICAgLnN0eWxlKCdib3R0b20nLCAnMCcpXHJcbiAgICAuc3R5bGUoJ2hlaWdodCcsIGAke3hMYWJlbFNwYWNlfXB4YClcclxuICAgIC5zdHlsZSgnZGlzcGxheScsICdmbGV4JylcclxuICAgIC5zdHlsZSgnanVzdGlmeS1jb250ZW50JywgJ2NlbnRlcicpXHJcbiAgICAuc3R5bGUoJ2FsaWduLWl0ZW1zJywgJ2NlbnRlcicpXHJcbiAgICAuc3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCAndmFyKC0tY2FyZC1iZyknKVxyXG4gICAgLnN0eWxlKCd6LWluZGV4JywgJzEwJyk7XHJcblxyXG4gIHJldHVybiB7IHN2Zywgc3ZnWUF4aXNMZWZ0LCBzdmdZQXhpc1JpZ2h0LCBpbm5lckNvbnRhaW5lciwgYm90dG9tTGFiZWxDb250YWluZXIgfTtcclxufVxyXG5cclxucHJpdmF0ZSBjcmVhdGVTY2FsZXMoXHJcbiAgZGF0YTogYW55W10sXHJcbiAgbGF5ZXJzOiBhbnlbXSxcclxuICBsaW5lRGF0YTogYW55W10sXHJcbiAgZGltZW5zaW9uczogRGltZW5zaW9uc1xyXG4pIHtcclxuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGJhcldpZHRoLCBiYXJQYWRkaW5nIH0gPSBkaW1lbnNpb25zO1xyXG4gIFxyXG4gIC8vIENhbGN1bGF0ZSBiYXIgcG9zaXRpb25pbmdcclxuICBjb25zdCB0b3RhbEJhcnNXaWR0aCA9IGRhdGEubGVuZ3RoICogYmFyV2lkdGg7XHJcbiAgY29uc3QgdG90YWxTcGFjaW5nID0gKGRhdGEubGVuZ3RoIC0gMSkgKiBiYXJQYWRkaW5nO1xyXG4gIGNvbnN0IHJlcXVpcmVkV2lkdGggPSB0b3RhbEJhcnNXaWR0aCArIHRvdGFsU3BhY2luZyArICh0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIpO1xyXG4gIGNvbnN0IGVmZmVjdGl2ZVdpZHRoID0gTWF0aC5tYXgod2lkdGgsIHJlcXVpcmVkV2lkdGgpO1xyXG4gIFxyXG4gIGNvbnN0IHBhZGRpbmdSYXRpbyA9IGJhclBhZGRpbmcgLyAoYmFyV2lkdGggKyBiYXJQYWRkaW5nKTtcclxuICBcclxuICAvLyBYLXNjYWxlIHN0YXJ0cyBmcm9tIDAgKG5vIGxlZnQgc3BhY2luZyBmb3IgZ3JpZCBhbGlnbm1lbnQpXHJcbmNvbnN0IHhTY2FsZSA9IGQzXHJcbiAgLnNjYWxlQmFuZCgpXHJcbiAgLnJhbmdlUm91bmQoWzAsIGRpbWVuc2lvbnMucmVxdWlyZWRTdmdXaWR0aF0pXHJcbiAgLmRvbWFpbihkYXRhLm1hcChkID0+IGQubmFtZSkucmV2ZXJzZSgpKVxyXG4gIC5wYWRkaW5nSW5uZXIocGFkZGluZ1JhdGlvKVxyXG4gIC5wYWRkaW5nT3V0ZXIoMC4xKSAgLy8gU21hbGwgcGFkZGluZyBmb3IgdmlzdWFsIHNwYWNpbmdcclxuICAuYWxpZ24oMC41KTtcclxuXHJcbiAgY29uc3QgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAuc2NhbGVCYW5kKClcclxuICAgIC5yYW5nZVJvdW5kKFt3aWR0aCwgMF0pXHJcbiAgICAuZG9tYWluKGRhdGEubWFwKGQgPT4gZC5uYW1lKS5yZXZlcnNlKCkpO1xyXG5cclxuICBjb25zdCB5U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlUm91bmQoW2hlaWdodCwgMF0pO1xyXG4gIFxyXG4gIGxldCBtYXhWYWx1ZSA9IGQzLm1heChsYXllcnMsIChkOiBhbnkpID0+IGQzLm1heChkLCAoZDogYW55KSA9PiBkWzFdKSk7XHJcbiAgXHJcbiAgaWYgKG1heFZhbHVlID09PSAwKSB7XHJcbiAgICBtYXhWYWx1ZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhIFxyXG4gICAgICA/IE51bWJlcih0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpICsgMjAgXHJcbiAgICAgIDogMTAwO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgbWF4VmFsdWUgKj0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmIG1heFZhbHVlIDwgTnVtYmVyKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IE51bWJlcih0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG4gICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSA8IDEwICYmIHRhcmdldCA8IDEwID8gdGFyZ2V0ICsgMyA6IHRhcmdldCArIDIwO1xyXG4gIH1cclxuXHJcbiAgeVNjYWxlLmRvbWFpbihbMCwgbWF4VmFsdWVdKS5uaWNlKCk7XHJcblxyXG4gIGxldCBsaW5lWXNjYWxlID0gbnVsbDtcclxuICBpZiAobGluZURhdGEpIHtcclxuICAgIGxpbmVZc2NhbGUgPSBkM1xyXG4gICAgICAuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFswLCBkMy5tYXgobGluZURhdGEsIGQgPT4gK2QudmFsdWUpXSlcclxuICAgICAgLnJhbmdlKFtoZWlnaHQsIDBdKTtcclxuICB9XHJcblxyXG4gIHJldHVybiB7IHhTY2FsZSwgeFNjYWxlRnJvbU9yaWdpbiwgeVNjYWxlLCBsaW5lWXNjYWxlIH07XHJcbn1cclxuXHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQXhlcyhzY2FsZXM6IGFueSkge1xyXG4gICAgY29uc3QgeEF4aXMgPSBkM1xyXG4gICAgICAuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgICBjb25zdCB5QXhpcyA9IGQzXHJcbiAgICAgIC5heGlzTGVmdChzY2FsZXMueVNjYWxlKVxyXG4gICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja0Zvcm1hdCh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICAgIGxldCB5TGluZUF4aXMgPSBudWxsO1xyXG4gICAgaWYgKHNjYWxlcy5saW5lWXNjYWxlKSB7XHJcbiAgICAgIHlMaW5lQXhpcyA9IGQzXHJcbiAgICAgICAgLmF4aXNSaWdodChzY2FsZXMubGluZVlzY2FsZSlcclxuICAgICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgLnRpY2tGb3JtYXQodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUxpbmVBeGlzTGFiZWxGb21hdHRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgeEF4aXMsIHlBeGlzLCB5TGluZUF4aXMgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQmFycyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgbGF5ZXJzOiBhbnlbXSxcclxuICAgIHNjYWxlczogYW55LFxyXG4gICAgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbiAgKSB7XHJcbiAgICBjb25zdCBsYXllciA9IHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCcubGF5ZXInKVxyXG4gICAgICAuZGF0YShsYXllcnMpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGF5ZXInKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogYW55KSA9PiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldKTtcclxuXHJcbiAgICBjb25zdCByZWN0ID0gbGF5ZXJcclxuICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5kYXRhKChkOiBhbnkpID0+IGQpXHJcbiAgICAgIC5lbnRlcigpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kUmVjdGFuZ2xlcyhyZWN0LCBzY2FsZXMsIG1ldGFEYXRhLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMuYWRkSW50ZXJhY3Rpb25zKHJlY3QsIHN2ZywgbWV0YURhdGEsIHNjYWxlcyk7XHJcbiAgICBcclxuICAgIHJldHVybiByZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRSZWN0YW5nbGVzKFxyXG4gIHJlY3Q6IGFueSxcclxuICBzY2FsZXM6IGFueSxcclxuICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSxcclxuICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbikge1xyXG4gIGNvbnN0IHsgYmFyV2lkdGgsIGJhclBhZGRpbmcgfSA9IGRpbWVuc2lvbnM7XHJcbiAgY29uc3QgeyB4U2NhbGUsIHlTY2FsZSB9ID0gc2NhbGVzO1xyXG5cclxuICByZWN0XHJcbiAgICAuYXBwZW5kKCdyZWN0JylcclxuICAgIC5vbignY2xpY2snLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5jaGFydERhdGEubGluZURhdGEgfHwgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZm9yQ29tcGFyaXNvbikge1xyXG4gICAgICAgIGlmICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrPy5pbmNsdWRlcyhkLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ3knLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghaXNOYU4oZFswXSkgJiYgIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0geVNjYWxlKGRbMF0pIC0geVNjYWxlKGRbMV0pO1xyXG4gICAgICAgIHJldHVybiBhY3R1YWxIZWlnaHQgPCAzID8geVNjYWxlKGRbMF0pIC0gMyA6IHlTY2FsZShkWzFdKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pXHJcbiAgICAuYXR0cigneCcsIChkOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeFBvc2l0aW9uID0geFNjYWxlKGQuZGF0YS5uYW1lKTtcclxuICAgICAgY29uc3QgYmFuZHdpZHRoID0geFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgICBcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSkge1xyXG4gICAgICAgIHJldHVybiB4UG9zaXRpb24gKyAoYmFuZHdpZHRoIC0gYmFyV2lkdGgpIC8gMjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA8PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIHhQb3NpdGlvbiArIGJhbmR3aWR0aCAvIDIgLSAzNTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjYWxjdWxhdGVkV2lkdGggPSBiYW5kd2lkdGggKiAwLjg7XHJcbiAgICAgIHJldHVybiB4UG9zaXRpb24gKyAoYmFuZHdpZHRoIC0gY2FsY3VsYXRlZFdpZHRoKSAvIDI7XHJcbiAgICB9KVxyXG4gICAgLmF0dHIoJ2hlaWdodCcsIChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFpc05hTihkWzBdKSAmJiAhaXNOYU4oZFsxXSkpIHtcclxuICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSB5U2NhbGUoZFswXSkgLSB5U2NhbGUoZFsxXSk7XHJcbiAgICAgICAgcmV0dXJuIGFjdHVhbEhlaWdodCA8IDMgPyAzIDogYWN0dWFsSGVpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSlcclxuICAgIC5hdHRyKCd3aWR0aCcsIChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSkgcmV0dXJuIGJhcldpZHRoO1xyXG4gICAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA8PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIDcwO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB4U2NhbGUuYmFuZHdpZHRoKCkgKiAwLjg7XHJcbiAgICB9KVxyXG4gICAgLnN0eWxlKCdjdXJzb3InLCAoZDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgICBpZiAobWV0YURhdGEuYmFyV2l0aG91dENsaWNrPy5pbmNsdWRlcyhkLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgcmV0dXJuICdkZWZhdWx0JztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdwb2ludGVyJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJ2RlZmF1bHQnO1xyXG4gICAgfSlcclxuICAgIC5zdHlsZSgnZmlsbCcsIChkOiBhbnkpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxufVxyXG5cclxuICBwcml2YXRlIGdldEJhckNvbG9yKGQ6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEpOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICAhaXNOYU4oZFswXSkgJiZcclxuICAgICAgIWlzTmFOKGRbMV0pICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgIHBhcnNlRmxvYXQoZFsxXSkgLSBwYXJzZUZsb2F0KGRbMF0pID49IHBhcnNlRmxvYXQoU3RyaW5nKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmJhckFib3ZlVGFyZ2V0Q29sb3IgfHwgbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRJbnRlcmFjdGlvbnMocmVjdDogYW55LCBzdmc6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIHNjYWxlczogYW55KSB7XHJcbiAgICByZWN0XHJcbiAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAub24oJ21vdXNlZW50ZXInLCAoZDogYW55KSA9PiB0aGlzLmhhbmRsZU1vdXNlT3ZlcihkLCBzdmcsIG1ldGFEYXRhLCBzY2FsZXMpKVxyXG4gICAgICAub24oJ21vdXNlb3V0JywgKGQ6IGFueSkgPT4gdGhpcy5oYW5kbGVNb3VzZU91dChzdmcsIG1ldGFEYXRhKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU1vdXNlT3ZlcihkOiBhbnksIHN2ZzogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSwgc2NhbGVzOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHJldHVybjtcclxuXHJcbiAgICBzdmcuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhID09PSBkKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAoZDogYW55KSA9PiB0aGlzLmdldEhvdmVyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxuXHJcbiAgICB0aGlzLmRpc3BsYXlUb29sdGlwKGQsIHN2ZywgbWV0YURhdGEsIHNjYWxlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEhvdmVyQ29sb3IoZDogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSk6IHN0cmluZyB7XHJcbiAgICBpZiAoXHJcbiAgICAgICFpc05hTihkWzBdKSAmJlxyXG4gICAgICAhaXNOYU4oZFsxXSkgJiZcclxuICAgICAgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgcGFyc2VGbG9hdChkWzFdKSAtIHBhcnNlRmxvYXQoZFswXSkgPj0gcGFyc2VGbG9hdChTdHJpbmcodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuYmFyQWJvdmVUYXJnZXRIb3ZlckNvbG9yIHx8XHJcbiAgICAgICAgICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5iYXJBYm92ZVRhcmdldENvbG9yIHx8XHJcbiAgICAgICAgICAgICBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1ldGFEYXRhLmhvdmVyQ29sb3IgfHwgbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzcGxheVRvb2x0aXAoZDogYW55LCBzdmc6IGFueSwgbWV0YURhdGE6IENoYXJ0TWV0YURhdGEsIHNjYWxlczogYW55KSB7XHJcbiAgICBjb25zdCB7IHhTY2FsZSwgeVNjYWxlIH0gPSBzY2FsZXM7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGRbMV0gLSBkWzBdO1xyXG4gICAgXHJcbiAgICBpZiAoaXNOYU4odmFsdWUpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYmFuZHdpZHRoID0geFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgXHJcbiAgICAvLyBGaXhlZCB0b29sdGlwIHdpZHRoIGZvciBhbGwgcmVzb2x1dGlvbnNcclxuICAgIGNvbnN0IHdpZHRoID0gL3dlZWsvaS50ZXN0KGQuZGF0YS5uYW1lKSAmJiAvXFxkezR9LVxcZHsyfS1cXGR7Mn0vLnRlc3QoZC5kYXRhLm5hbWUpXHJcbiAgICAgID8gJzI1MHB4J1xyXG4gICAgICA6IGJhbmR3aWR0aCArIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMiA+IDE4MFxyXG4gICAgICAgID8gJzE4MHB4J1xyXG4gICAgICAgIDogYmFuZHdpZHRoICsgdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVMgKiAyO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgLmF0dHIoJ3gnLCB0aGlzLmNhbGN1bGF0ZVRvb2x0aXBYKGQsIHhTY2FsZSwgd2lkdGgpKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgICAuYXR0cigneScsIHlTY2FsZShkWzFdKSAtIDUxKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCB3aWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKVxyXG4gICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAndGl0bGUnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgLmh0bWwodGhpcy5nZW5lcmF0ZVRvb2x0aXBIdG1sKGQsIG1ldGFEYXRhLCB2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb29sdGlwWChkOiBhbnksIHhTY2FsZTogYW55LCB3aWR0aDogc3RyaW5nIHwgbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGJhbmR3aWR0aCA9IHhTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgIGNvbnN0IG51bWVyaWNXaWR0aCA9IHR5cGVvZiB3aWR0aCA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh3aWR0aCkgOiB3aWR0aDtcclxuICAgIFxyXG4gICAgaWYgKGJhbmR3aWR0aCArIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICogMiA+IDE4MCkge1xyXG4gICAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKSAtIHRoaXMuQ09OU1RBTlRTLkxFRlRfUklHSFRfU1BBQ0VTICtcclxuICAgICAgICAgICAgIChiYW5kd2lkdGggKyB0aGlzLkNPTlNUQU5UUy5MRUZUX1JJR0hUX1NQQUNFUyAqIDIgLSAxODApIC8gMjtcclxuICAgIH1cclxuICAgIHJldHVybiB4U2NhbGUoZC5kYXRhLm5hbWUpIC0gdGhpcy5DT05TVEFOVFMuTEVGVF9SSUdIVF9TUEFDRVM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlVG9vbHRpcEh0bWwoZDogYW55LCBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSwgdmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IDApIHJldHVybiAnPHNwYW4gY2xhc3M9XCJ0aXRsZS10b3AtdGV4dFwiPjA8L3NwYW4+JztcclxuXHJcbiAgICBjb25zdCBkYXRhVHlwZSA9IG1ldGFEYXRhLmRhdGFUeXBlIHx8ICcnO1xyXG4gICAgY29uc3QgbmFtZSA9IGQuZGF0YS5uYW1lID8gYDxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4ke2QuZGF0YS5uYW1lfTwvc3Bhbj5gIDogJyc7XHJcbiAgICBjb25zdCB2YWx1ZVRleHQgPSBtZXRhRGF0YS51bml0XHJcbiAgICAgID8gYCR7bWV0YURhdGEudW5pdH0ke3ZhbHVlfSAke2RhdGFUeXBlfWBcclxuICAgICAgOiBgJHt2YWx1ZX0gJHtkYXRhVHlwZX1gO1xyXG5cclxuICAgIHJldHVybiBgJHtuYW1lfTxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4ke3ZhbHVlVGV4dH08L3NwYW4+YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTW91c2VPdXQoc3ZnOiBhbnksIG1ldGFEYXRhOiBDaGFydE1ldGFEYXRhKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmRpc3BsYXlUaXRsZU9uVG9wKSByZXR1cm47XHJcblxyXG4gICAgc3ZnLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsIChkOiBhbnkpID0+IHRoaXMuZ2V0QmFyQ29sb3IoZCwgbWV0YURhdGEpKTtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJy5saWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJBeGlzTGFiZWxzKFxyXG4gICAgc3ZnOiBhbnksXHJcbiAgICBzdmdZQXhpc0xlZnQ6IGFueSxcclxuICAgIGJvdHRvbUxhYmVsQ29udGFpbmVyOiBhbnksXHJcbiAgICBtZXRhRGF0YTogQ2hhcnRNZXRhRGF0YSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgICBtYXJnaW46IGFueVxyXG4gICkge1xyXG4gICAgaWYgKG1ldGFEYXRhLnlMYWJlbCkge1xyXG4gICAgICB0aGlzLmFkZFlBeGlzTGFiZWwoc3ZnWUF4aXNMZWZ0LCBtZXRhRGF0YS55TGFiZWwsIGRpbWVuc2lvbnMuaGVpZ2h0LCBtYXJnaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgdGhpcy5hZGRYQXhpc0xhYmVsKGJvdHRvbUxhYmVsQ29udGFpbmVyLCBtZXRhRGF0YS54TGFiZWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRZQXhpc0xhYmVsKHN2Z1lBeGlzTGVmdDogYW55LCBsYWJlbDogc3RyaW5nLCBoZWlnaHQ6IG51bWJlciwgbWFyZ2luOiBhbnkpIHtcclxuICAgIGNvbnN0IGlzcmlhID0gdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24/LmlzUmlhO1xyXG4gICAgY29uc3QgaXNBY3JvbnltID0gdGhpcy5pc0Fjcm9ueW1MYWJlbChsYWJlbCk7XHJcbiAgICBjb25zdCB5UG9zaXRpb24gPSBpc3JpYSA/IC1tYXJnaW4ubGVmdCAvIDIgLSAzMCA6IC1tYXJnaW4ubGVmdCAvIDIgLSA0MDtcclxuXHJcbiAgICBzdmdZQXhpc0xlZnQuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwsIC5saWIteWxhYmVsLWRyaWxsZG93bmNoYXJ0cywgLmxpYi15bGFiZWwtd2Vla2x5Q2hhcnRzJykucmVtb3ZlKCk7XHJcblxyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCB0aGlzLmdldFlBeGlzTGFiZWxDbGFzcygpKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgLmF0dHIoJ3knLCB5UG9zaXRpb24pXHJcbiAgICAgIC5hdHRyKCd4JywgLWhlaWdodCAvIDIpXHJcbiAgICAgIC5hdHRyKCdkeScsICcxZW0nKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC50ZXh0KGlzQWNyb255bSA/IGxhYmVsLnRvVXBwZXJDYXNlKCkgOiBsYWJlbC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICB9XHJcblxyXG5wcml2YXRlIGFkZFhBeGlzTGFiZWwoYm90dG9tTGFiZWxDb250YWluZXI6IGFueSwgbGFiZWw6IHN0cmluZykge1xyXG4gIGNvbnN0IGlzQWNyb255bSA9IHRoaXMuaXNBY3JvbnltTGFiZWwobGFiZWwpO1xyXG5cclxuICBib3R0b21MYWJlbENvbnRhaW5lclxyXG4gICAgLmFwcGVuZCgnZGl2JylcclxuICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAuc3R5bGUoJ3RleHQtYWxpZ24nLCAnY2VudGVyJylcclxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEycHgnKVxyXG4gICAgLnN0eWxlKCdmb250LXdlaWdodCcsICc2MDAnKVxyXG4gICAgLnN0eWxlKCdmb250LWZhbWlseScsICdzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8nKVxyXG4gICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3JvbnltID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKVxyXG4gICAgLnRleHQoaXNBY3JvbnltID8gbGFiZWwudG9VcHBlckNhc2UoKSA6IGxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG59XHJcblxyXG4gIHByaXZhdGUgaXNBY3JvbnltTGFiZWwobGFiZWw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2xlYW5MYWJlbCA9IGxhYmVsLnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJyk7XHJcbiAgICByZXR1cm4gKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgICAgICAgKGxhYmVsID09PSBsYWJlbC50b1VwcGVyQ2FzZSgpICYmIC9bQS1aXS8udGVzdChsYWJlbCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRZQXhpc0xhYmVsQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLXlsYWJlbC1kcmlsbGRvd25jaGFydHNgO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLXlsYWJlbC13ZWVrbHlDaGFydHNgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke2Jhc2VDbGFzc30gbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsYDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0WEF4aXNMYWJlbENsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgYmFzZUNsYXNzID0gJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJztcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi14bGFiZWwtZHJpbGxkb3duY2hhcnRzYDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi14bGFiZWwtd2Vla2x5Q2hhcnRzYDtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtiYXNlQ2xhc3N9IGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q29uZmlndXJhdGlvbkZsYWdzKCkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVG9wQ2FwdGlvblZpc2libGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzVG9wQ2FwdGlvblZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RvcENhcHRpb25WaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpIHtcclxuICAgIC8vIFVzZSBmaXhlZCBjb25maWd1cmF0aW9uIGZvciBhbGwgcmVzb2x1dGlvbnNcclxuICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbiA9IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDQwLCBsZWZ0OiA0MCB9O1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MgPSA1O1xyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ID0gNzA7XHJcbiAgICBcclxuICAgIHRoaXMubWVyZ2VDb25maWd1cmF0aW9ucygpO1xyXG4gICAgdGhpcy5hcHBseUNvbmZpZ3VyYXRpb25GbGFncygpO1xyXG5cclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gICAgY29uc3QgbWV0YURhdGEgPSB0aGlzLnByZXBhcmVNZXRhRGF0YSh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YSk7XHJcbiAgICBjb25zdCBsaW5lRGF0YSA9IHRoaXMuY2hhcnREYXRhLmxpbmVEYXRhO1xyXG4gICAgY29uc3QgY29sb3JzID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAgY29uc3Qga2V5TGlzdCA9IG1ldGFEYXRhLmtleUxpc3Q7XHJcblxyXG4gICAgY29uc3QgY2hhcnRDb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy52ZXJ0aWNhbHN0YWNrZWRjb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICBcclxuICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmNhbGN1bGF0ZURpbWVuc2lvbnMoXHJcbiAgICAgIGNoYXJ0Q29udGFpbmVyLFxyXG4gICAgICB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIsXHJcbiAgICAgIG1hcmdpbixcclxuICAgICAgZGF0YS5sZW5ndGhcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaGFzWExhYmVsID0gISFtZXRhRGF0YS54TGFiZWw7XHJcblxyXG4gICAgY29uc3QgeyBzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgYm90dG9tTGFiZWxDb250YWluZXIgfSA9IHRoaXMuY3JlYXRlU3ZnQ29udGFpbmVycyhcclxuICAgICAgY2hhcnRDb250YWluZXIsXHJcbiAgICAgIGRpbWVuc2lvbnMsXHJcbiAgICAgIG1hcmdpbixcclxuICAgICAgaGFzWExhYmVsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHN0YWNrOiBhbnkgPSBkMy5zdGFjaygpLmtleXMoa2V5TGlzdCkub2Zmc2V0KGQzLnN0YWNrT2Zmc2V0Tm9uZSk7XHJcbiAgICBjb25zdCBsYXllcnM6IGFueSA9IHN0YWNrKGRhdGEpO1xyXG4gICAgZGF0YS5zb3J0KChhLCBiKSA9PiBiLnRvdGFsIC0gYS50b3RhbCk7XHJcblxyXG4gICAgY29uc3Qgc2NhbGVzID0gdGhpcy5jcmVhdGVTY2FsZXMoZGF0YSwgbGF5ZXJzLCBsaW5lRGF0YSwgZGltZW5zaW9ucyk7XHJcbiAgICBjb25zdCBheGVzID0gdGhpcy5jcmVhdGVBeGVzKHNjYWxlcyk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJHcmlkcyhzdmcsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5yZW5kZXJCYXJzKHN2ZywgbGF5ZXJzLCBzY2FsZXMsIG1ldGFEYXRhLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyQXhlcyhzdmcsIHN2Z1lBeGlzTGVmdCwgc3ZnWUF4aXNSaWdodCwgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zLCBkYXRhKTtcclxuICAgIHRoaXMucmVuZGVyQXhpc0xhYmVscyhzdmcsIHN2Z1lBeGlzTGVmdCxib3R0b21MYWJlbENvbnRhaW5lciwgbWV0YURhdGEsIGRpbWVuc2lvbnMsIG1hcmdpbik7XHJcbiAgICB0aGlzLnJlbmRlclRhcmdldExpbmUoc3ZnLCBzdmdZQXhpc1JpZ2h0LCBzY2FsZXMsIGRpbWVuc2lvbnMsIG1ldGFEYXRhKTtcclxuICAgIHRoaXMucmVuZGVyRGF0YUxhYmVscyhyZWN0LCBzY2FsZXMsIG1ldGFEYXRhLCBkaW1lbnNpb25zKTtcclxuICAgIHRoaXMucmVuZGVyTGluZUNoYXJ0KHN2ZywgbGluZURhdGEsIHNjYWxlcywgY29sb3JzLCBtZXRhRGF0YSk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJHcmlkcyhzdmc6IGFueSwgc2NhbGVzOiBhbnksIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYZ3JpZEJldHdlZW5MYWJlbHMpIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQgdmVydGljYWwtZ3JpZCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7c2NhbGVzLnhTY2FsZS5iYW5kd2lkdGgoKSAvIDJ9LCR7ZGltZW5zaW9ucy5oZWlnaHR9KWApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSkudGlja1NpemUoLWRpbWVuc2lvbnMuaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAnIzk5OTk5OScpXHJcbiAgICAgIC5jYWxsKChnOiBhbnkpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzR3JpZCkge1xyXG4gICAgY29uc3QgZ3JpZFdpZHRoID0gZGltZW5zaW9ucy5yZXF1aXJlZFN2Z1dpZHRoO1xyXG4gICAgXHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkIGhvcml6b250YWwtZ3JpZCcpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbChcclxuICAgICAgICBkM1xyXG4gICAgICAgICAgLmF4aXNMZWZ0KHNjYWxlcy55U2NhbGUpXHJcbiAgICAgICAgICAudGlja3ModGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAudGlja1NpemUoLWdyaWRXaWR0aClcclxuICAgICAgICAgIC50aWNrRm9ybWF0KCcnKVxyXG4gICAgICApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKVxyXG4gICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMScpXHJcbiAgICAgIC5jYWxsKChnOiBhbnkpID0+IHtcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWQpIHtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNHcmlkLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsIGB4JHtqICsgMn0gYXhpcyR7aiArIDJ9YClcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7ZGltZW5zaW9ucy5oZWlnaHQgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWRbal19KWApXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbShzY2FsZXMueFNjYWxlKS50aWNrU2l6ZSgwKS50aWNrcyg1KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQXhlcyhcclxuICAgIHN2ZzogYW55LFxyXG4gICAgc3ZnWUF4aXNMZWZ0OiBhbnksXHJcbiAgICBzdmdZQXhpc1JpZ2h0OiBhbnksXHJcbiAgICBheGVzOiBhbnksXHJcbiAgICBzY2FsZXM6IGFueSxcclxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgICBkYXRhOiBhbnlbXVxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dYYXhpc1RvcCkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWxpbmUtYXhpcy10ZXh0IGxpYi1saW5lLXgtYXhpcy10ZXh0IHgtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oc2NhbGVzLnhTY2FsZSkudGlja1NpemUoMCkpO1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcueC1heGlzID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyU3RhbmRhcmRBeGVzKHN2ZywgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zLCBkYXRhKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICB0aGlzLnJlbmRlckRyaWxsZG93bkF4ZXMoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQsIGF4ZXMsIHNjYWxlcywgZGltZW5zaW9ucyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbmRlck11bHRpQ2hhcnRBeGVzKHN2ZywgYXhlcywgc2NhbGVzLCBkaW1lbnNpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGx5QXhpc1N0eWxpbmcoc3ZnLCBzdmdZQXhpc0xlZnQsIHN2Z1lBeGlzUmlnaHQpO1xyXG4gICAgdGhpcy5hcHBseUF4aXNDb25maWd1cmF0aW9ucyhzdmcsIHNjYWxlcywgZGltZW5zaW9ucywgZGF0YSk7XHJcbiAgfVxyXG5cclxucHJpdmF0ZSByZW5kZXJTdGFuZGFyZEF4ZXMoXHJcbiAgc3ZnOiBhbnksXHJcbiAgYXhlczogYW55LFxyXG4gIHNjYWxlczogYW55LFxyXG4gIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXHJcbiAgZGF0YTogYW55W11cclxuKSB7XHJcbiAgY29uc3QgaXNNb2JpbGVPclRhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDtcclxuICBcclxuICAvLyBYLWF4aXMgd2l0aCBsYWJlbHNcclxuICBjb25zdCB4QXhpc0dyb3VwID0gc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC14LWF4aXMtdGV4dCcpXHJcbiAgICAuY2FsbChheGVzLnhBeGlzKTtcclxuXHJcbiAgLy8gU3R5bGUgWC1heGlzIGxhYmVsc1xyXG4gIHhBeGlzR3JvdXBcclxuICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5zdHlsZSgnZm9udC1zaXplJywgaXNNb2JpbGVPclRhYmxldCA/ICcxMHB4JyA6ICcxMnB4JylcclxuICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAuZWFjaChmdW5jdGlvbih0aGlzOiBTVkdUZXh0RWxlbWVudCwgZDogYW55KSB7XHJcbiAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gZDMuc2VsZWN0KHRoaXMpO1xyXG4gICAgICBjb25zdCB0ZXh0ID0gdGV4dEVsZW1lbnQudGV4dCgpO1xyXG4gICAgICAgIFxyXG4gICAgICBpZiAoaXNNb2JpbGVPclRhYmxldCAmJiB0ZXh0Lmxlbmd0aCA+IDEyKSB7XHJcbiAgICAgICAgdGV4dEVsZW1lbnQudGV4dCh0ZXh0LnN1YnN0cmluZygwLCAxMCkgKyAnLi4uJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuLy8gRW5zdXJlIFgtYXhpcyBsaW5lIHN0YXJ0cyBleGFjdGx5IGF0IHg9MFxyXG4gIHhBeGlzR3JvdXBcclxuICAgIC5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4JylcclxuICAgIC5hdHRyKCdkJywgYE0wLDAuNUgke2RpbWVuc2lvbnMucmVxdWlyZWRTdmdXaWR0aH1gKTtcclxuXHJcbiAgLy8gWS1heGlzXHJcbiAgc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCcpXHJcbiAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAuY2FsbChheGVzLnlBeGlzKVxyXG4gICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxufVxyXG5cclxuICBwcml2YXRlIHJlbmRlckRyaWxsZG93bkF4ZXMoXHJcbiAgICBzdmc6IGFueSxcclxuICAgIHN2Z1lBeGlzTGVmdDogYW55LFxyXG4gICAgc3ZnWUF4aXNSaWdodDogYW55LFxyXG4gICAgYXhlczogYW55LFxyXG4gICAgc2NhbGVzOiBhbnksXHJcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zXHJcbiAgKSB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsJHtkaW1lbnNpb25zLmhlaWdodH0pYClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0IG11bHRpY2hhcnQxJylcclxuICAgICAgLmNhbGwoYXhlcy54QXhpcylcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuXHJcbiAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5jYWxsKGF4ZXMueUF4aXMpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuXHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuY2FsbChheGVzLnlBeGlzKVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJNdWx0aUNoYXJ0QXhlcyhzdmc6IGFueSwgYXhlczogYW55LCBzY2FsZXM6IGFueSwgZGltZW5zaW9uczogRGltZW5zaW9ucykge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCR7ZGltZW5zaW9ucy5oZWlnaHR9KWApXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC14LWF4aXMtdGV4dCBtdWx0aWNoYXJ0JylcclxuICAgICAgLmNhbGwoYXhlcy54QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0IHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmNhbGwoYXhlcy55QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUF4aXNTdHlsaW5nKHN2ZzogYW55LCBzdmdZQXhpc0xlZnQ6IGFueSwgc3ZnWUF4aXNSaWdodDogYW55KSB7XHJcbiAgICBjb25zdCBzdHlsZUF4aXNEb21haW4gPSAoY29udGFpbmVyOiBhbnkpID0+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=