gamma-app-controller 2.0.17 → 2.0.18

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.
@@ -550,22 +550,20 @@ export class GammaGeoChartComponent {
550
550
  initChoroplethMap(chartConfig, tootTipColumn) {
551
551
  this.isLoader = true;
552
552
  this.map = new google.maps.Map(document.getElementById("googlemap"), {
553
- center: { lat: parseFloat(chartConfig.centerLat), lng: parseFloat(chartConfig.centerLng) },
553
+ center: {
554
+ lat: parseFloat(chartConfig.centerLat),
555
+ lng: parseFloat(chartConfig.centerLng)
556
+ },
554
557
  zoom: parseInt(chartConfig.zoom)
555
558
  });
559
+ google.maps.event.addListenerOnce(this.map.data, 'addfeature', () => {
560
+ this.applyChoroplethStyles(chartConfig);
561
+ });
556
562
  this.map.data.loadGeoJson(chartConfig.gjsonFilePath);
563
+ }
564
+ applyChoroplethStyles(chartConfig) {
557
565
  this.map.data.setStyle(feature => this.getFeatureStyle(feature, chartConfig, this.minChoroplethMapCnt, this.maxChoroplethMapCnt));
558
- const infoWindow = new google.maps.InfoWindow();
559
- this.map.data.addListener('mouseover', (event) => {
560
- const district = event.feature.getProperty('d');
561
- const key = district?.toUpperCase();
562
- const row = this.choroplethTooltipDataSource.get(key);
563
- infoWindow.setContent(this.buildInfoWindowContent(district, row, tootTipColumn));
564
- infoWindow.setPosition(event.latLng);
565
- infoWindow.open(this.map);
566
- });
567
566
  this.isLoader = false;
568
- this.map.data.addListener('mouseout', () => infoWindow.close());
569
567
  }
570
568
  buildInfoWindowContent(district, row, tootTipColumn) {
571
569
  const rows = tootTipColumn.map(c => `
@@ -691,4 +689,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
691
689
  type: Input,
692
690
  args: ["chartDataSource"]
693
691
  }] } });
694
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDOzs7O0FBeUJuRSxNQUFNLE9BQU8sc0JBQXNCO0lBcU1qQyxZQUFtQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQWpML0MsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUliLFdBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdkIseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0QsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELGlDQUE0QixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdFLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQVMxQywrQkFBMEIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN2RCx3QkFBbUIsR0FBVyxRQUFRLENBQUM7UUFDdkMsd0JBQW1CLEdBQVcsQ0FBQyxRQUFRLENBQUE7UUFDdkMsaUNBQTRCLEdBQVUsRUFB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SSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDN0YsQ0FBQzs7bUhBNzhCVSxzQkFBc0I7dUdBQXRCLHNCQUFzQix3WUNuQ25DLHFsRUE2RE07MkZEMUJPLHNCQUFzQjtrQkFwQmxDLFNBQVM7K0JBQ0UscUJBQXFCO29HQW9CUixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBeUJKLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFDRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBeUJGLGVBQWU7c0JBRGxCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbi8vIGltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuZGVjbGFyZSB2YXIgZ29vZ2xlOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtZ2FtbWEtZ2VvLWNoYXJ0XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlczogW2BcbiAgICAubG9hZGVyIHtcbiAgICAgIHdpZHRoOiA2NHB4O1xuICAgICAgaGVpZ2h0OiA2NHB4O1xuICAgICAgYm9yZGVyOiA2cHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogIzRhZGU4MDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7XG4gICAgfVxuXG4gICAgQGtleWZyYW1lcyBzcGluIHtcbiAgICAgIHRvIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgIH1cbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIEdhbW1hR2VvQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKFwiZ29vZ2xNYXBcIikgZ29vZ2xNYXA6IEVsZW1lbnRSZWY7XG4gIGNoYXJEYXRhOiBhbnk7XG4gIGNoYXJ0SGVpZ2h0OiBhbnk7XG4gIGJhY2dyb3VuZENvbG9yOiBhbnk7XG4gIG1hcENvbG9yczogYW55O1xuICBjaGFydFR5cGU6IGFueTtcbiAgdG9vdFRpcENvbHVtbjogYW55O1xuICByZWdpb246IGFueTtcbiAgcmVnaW9uQ29kZTogYW55O1xuICAvLyBoZWF0IE1hcCBzdGFydFxuICBtYXA6IGFueTtcbiAgbG9jYXRpb25zO1xuICBtYXBUWXBlOiBhbnk7XG4gIG1hcE9wdGlvbkZvckhlYXRNYXA6IHtcbiAgICB6b29tOiBudW1iZXI7XG4gIH07XG4gIGN1cnJlbnRJbmZvV2luZG93OiBhbnk7XG4gIC8vIGhlYXQgTWFwIGVuZFxuICAvL2hlYXQgb25seSBtYXAgc3RhcnQgLy9cbiAgbWFya2VycyA9IFtdO1xuICBoZWF0bWFwOiBhbnk7XG4gIGhlYXRtYXBEYXRhOiBhbnk7XG4gIHpvb21WYWx1Rm9yQWxsOiBudW1iZXI7XG4gIGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcbiAgLy9oZWF0IG9ubHkgbWFwIGVuZCAvL1xuICBAT3V0cHV0KCkgcHVibGljIGdldFRhYmxlQ29uZmlnT3V0UHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9ucmlnaHRDbGlja0NvbnRleHRTZWxlY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgc29ydEJ5OiBhbnk7XG4gIGZpbHRlcmVkT2JqZWN0czogYW55O1xuXG5cbiAgLy9jaG9yb3BsZXRoTWFwIHZhcmlhYmxlcy8vXG4gIGNob3JvcGxldGhfbWFwX2RhdGFfc291cmNlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgbWluQ2hvcm9wbGV0aE1hcENudDogbnVtYmVyID0gSW5maW5pdHk7XG4gIG1heENob3JvcGxldGhNYXBDbnQ6IG51bWJlciA9IC1JbmZpbml0eVxuICBhbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWU6IHN0cmluZztcbiAgY2hvcm9wbGV0aE1hcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBjaG9yb3BsZXRoTWFwRGF0YTogYW55O1xuICBpc1JhbmdlU2xpZGVyVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjaG9yb3BsZXRoTWFwQ2hhcnRDb25maWc6IGFueTtcbiAgaXNQbGF5aW5nID0gZmFsc2U7XG4gIHBsYXlJbnRlcnZhbDogYW55O1xuICBjaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gMDtcbiAgY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQ6IG51bWJlcjtcblxuICBASW5wdXQoXCJjaGFydERhdGFTb3VyY2VcIilcbiAgc2V0IGNoYXJ0RGF0YVNvdXJjZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICB0aGlzLnNvcnRCeSA9IHZhbHVlLmtwaUNvbmZpZz8uZGF0YUNvbmZpZz8uc29ydEJ5O1xuICAgICAgLy8gdGhpcy5pblJvYW1lckdlb0NoYXJ0Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcIm1vbnRobHlcIikge1xuICAgICAgICAgIHRoaXMubWFwVFlwZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcFR5cGU7XG4gICAgICAgICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImdlb01hcFwiKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lvbiA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnJlZ2lvbjtcbiAgICAgICAgICAgIHRoaXMucmVnaW9uQ29kZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnJlZ2lvbkNvZGU7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy5jaGFydFR5cGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydFR5cGU7XG4gICAgICAgICAgICB0aGlzLmJhY2dyb3VuZENvbG9yID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgdGhpcy5tYXBDb2xvcnMgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2xvcnM7XG4gICAgICAgICAgICAvLyBsZXQgY29uZmlnID0gdmFsdWUuY2hhcnRDb25maWc7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRhID0gW1xuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbXCJhcmd1bWVudEZpZWxkXCJdLFxuICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiY2hhcnRWYWx1ZUZpZWxkXCJdLFxuICAgICAgICAgICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiwgcm9sZTogXCJ0b29sdGlwXCIsIHA6IHsgaHRtbDogdHJ1ZSB9IH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLmNvbmNhdChcbiAgICAgICAgICAgICAgZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5nZXRUb29sdGlwKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBpdGVtW3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiYXJndW1lbnRGaWVsZFwiXV0sXG4gICAgICAgICAgICAgICAgICBpdGVtW3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiY2hhcnRWYWx1ZUZpZWxkXCJdXSxcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXAsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNoYXJEYXRhID0gZm9ybWF0dGVkRGF0YTtcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZEdvb2dsZUNoYXJ0cygpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkR29vZ2xlQ2hhcnRzKCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiYnViYmxlTWFwXCIpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7dmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuc2l6ZX1weGA7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXAgPSB7XG4gICAgICAgICAgICAgIHpvb206IHRoaXMuem9vbVZhbHVGb3JBbGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiY2hvcm9wbGV0aE1hcFwiKSB7XG4gICAgICAgICAgICBsZXQgY2hhcnRDb25maWcgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZztcblxuICAgICAgICAgICAgaWYgKGNoYXJ0Q29uZmlnLmlzRGF0YUFnZ3JlZ2F0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFnZ3JlYXRpb25EYXRhID0gdGhpcy5nZXRHcm91cERhdGFGb3JDaGFydCh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSwgY2hhcnRDb25maWdbJ2RhdGFBZ2dyZWdhdGlvbkNvbmZpZyddWydkYXRhQWdncmVnYXRlQ29sdW1lcyddLCBjaGFydENvbmZpZ1snZGF0YUFnZ3JlZ2F0aW9uQ29uZmlnJ11bJ2FnZ3JlZ2F0ZUZpZWxkcyddKTtcbiAgICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgPSBhZ2dyZWF0aW9uRGF0YTtcblxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhZ2dyZWF0aW9uRGF0YSk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgICAgICAgICB0aGlzLmNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG5cblxuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke2NoYXJ0Q29uZmlnLnNpemV9cHhgO1xuXG4gICAgICAgICAgICBsZXQgdG9vdFRpcENvbHVtbiA9IGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1xuICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5kaXNwbGF5Rm9yID09PSAnbWFwJyB8fCBjLmRpc3BsYXlGb3IgPT09ICd0b29sdGlwJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlRmllbGQgPVxuICAgICAgICAgICAgICBjaGFydENvbmZpZy5jaGFydF9jb25maWcuZmluZChjID0+IGMuZGlzcGxheUZvciA9PT0gJ21hcCcpPy5kYXRhRmllbGQ7XG5cbiAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleSA9IGRbY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0udG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBkW3ZhbHVlRmllbGRdO1xuXG4gICAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcERhdGFTb3VyY2Uuc2V0KGtleSwgdmFsKTtcbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2Uuc2V0KGtleSwgZCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250ID0gTWF0aC5taW4odGhpcy5taW5DaG9yb3BsZXRoTWFwQ250LCBkW3ZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgdGhpcy5tYXhDaG9yb3BsZXRoTWFwQ250ID0gTWF0aC5tYXgodGhpcy5tYXhDaG9yb3BsZXRoTWFwQ250LCBkW3ZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY2hhcnRDb25maWcuaXNWYWx1ZUZpZWxkUmFuZ2VTbGlkZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzID0gWy4uLm5ldyBTZXQodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubWFwKGQgPT4gZFtjaGFydENvbmZpZy5zbGlkZXJWYWx1ZUZpZWxkXSkpXTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUgPSB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXNbMF07XG4gICAgICAgICAgICAgIHRoaXMuaXNSYW5nZVNsaWRlclZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNob3JvcGxldGhNYXBEYXRhKHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlLCBjaGFydENvbmZpZyk7XG4gICAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcENoYXJ0Q29uZmlnID0gY2hhcnRDb25maWc7XG4gICAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQgPSBjaGFydENvbmZpZy5zbGlkZVNwZWVkO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuaW5pdENob3JvcGxldGhNYXAoY2hhcnRDb25maWcsIHRvb3RUaXBDb2x1bW4pO1xuXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMudG9vdFRpcENvbHVtbiA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZztcbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgIHRoaXMuem9vbVZhbHVGb3JBbGwgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnpvb21cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXAgPSB7XG4gICAgICAgICAgICAgIHpvb206IHRoaXMuem9vbVZhbHVGb3JBbGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJkYWlseVwiKSB7XG4gICAgICAgICAgdGhpcy5tYXBUWXBlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcubWFwVHlwZTtcbiAgICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgIC5maWx0ZXIocmVjb3JkID0+IHJlY29yZFt0aGlzLnNvcnRCeV0pXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbW9tZW50KGJbdGhpcy5zb3J0QnldKS5kaWZmKG1vbWVudChhW3RoaXMuc29ydEJ5XSkpKTtcbiAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmVjb3JkID0gc29ydGVkRGF0YVswXTtcblxuICAgICAgICAgIGlmICh2YWx1ZS5lbmREYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YVt0aGlzLnNvcnRCeV0gPT09IHZhbHVlLmVuZERhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YVt0aGlzLnNvcnRCeV0gPT09IG1vc3RSZWNlbnRSZWNvcmRbdGhpcy5zb3J0QnldKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5tYXBUWXBlID09IFwiYnViYmxlTWFwXCIpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gdGhpcy5maWx0ZXJlZE9iamVjdHM7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7dmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuc2l6ZX1weGA7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXAgPSB7XG4gICAgICAgICAgICAgIHpvb206IHRoaXMuem9vbVZhbHVGb3JBbGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH1cblxuXG4gICAgfVxuXG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImdlb01hcFwiKSB7XG4gICAgICB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImhlYXRNYXBcIikge1xuICAgICAgaWYgKHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaGVhdE1hcENhdGVnb3J5ID09IFwiaGVhdE1hcE9ubHlcIikge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZEdvb2dsZUhlYXRPbmx5TWFwcyh0aGlzLmxvY2F0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaGVhdE1hcENhdGVnb3J5ID09IFwiaGVhdE1hcE1hcmtlclwiKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTWFwKCk7XG4gICAgICAgIHRoaXMuYWRkTWFya2VycygpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUhlYXRXaXRoTWFya2VyTWFwKHRoaXMubG9jYXRpb25zKTtcblxuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJjaG9yb3BsZXRoTWFwXCIpIHtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmluaXRpYWxpemVNYXAoKTtcbiAgICAgIHRoaXMuYWRkQnViYmxlTWFya2VycygpO1xuICAgIH1cbiAgfVxuXG5cbiAgZ2V0R3JvdXBEYXRhRm9yQ2hhcnQoZGF0YSwgYWdncmVnYXRpb25Db25maWcsIGdyb3VwQnlDb2x1bW5zKSB7XG4gICAgY29uc3QgZ3JvdXBNYXAgPSB7fTtcblxuICAgIGRhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBLZXkgPSBncm91cEJ5Q29sdW1ucy5tYXAoY29sID0+IHJvd1tjb2xdKS5qb2luKFwifHxcIik7XG5cbiAgICAgIGlmICghZ3JvdXBNYXBbZ3JvdXBLZXldKSB7XG4gICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XSA9IHt9O1xuXG4gICAgICAgIGdyb3VwQnlDb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bY29sXSA9IHJvd1tjb2xdO1xuICAgICAgICB9KTtcblxuICAgICAgICBhZ2dyZWdhdGlvbkNvbmZpZy5mb3JFYWNoKCh7IGFnZ3JlZ2F0ZURhdGFGaWVsZCwgYWdncmVnYXRlRnVuY3Rpb25UeXBlIH0pID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcInN1bVwiOlxuICAgICAgICAgICAgY2FzZSBcImF2Z1wiOlxuICAgICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9IEluZmluaXR5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtYXhcIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSAtSW5maW5pdHk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNvdW50XCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSA9PT0gXCJhdmdcIikge1xuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF0gPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IGFnZ3JlZ2F0aW9uc1xuICAgICAgYWdncmVnYXRpb25Db25maWcuZm9yRWFjaCgoeyBhZ2dyZWdhdGVEYXRhRmllbGQsIGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93W2FnZ3JlZ2F0ZURhdGFGaWVsZF07XG5cbiAgICAgICAgc3dpdGNoIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwic3VtXCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSArPSB2YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImF2Z1wiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gdmFsdWU7XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYCR7YWdncmVnYXRlRGF0YUZpZWxkfV9fY291bnRgXSArPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibWluXCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9XG4gICAgICAgICAgICAgIE1hdGgubWluKGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJtYXhcIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID1cbiAgICAgICAgICAgICAgTWF0aC5tYXgoZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0sIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImNvdW50XCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSArPSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gRmluYWxpemUgYXZlcmFnZXNcbiAgICBPYmplY3QudmFsdWVzKGdyb3VwTWFwKS5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgIGFnZ3JlZ2F0aW9uQ29uZmlnLmZvckVhY2goKHsgYWdncmVnYXRlRGF0YUZpZWxkLCBhZ2dyZWdhdGVGdW5jdGlvblR5cGUgfSkgPT4ge1xuICAgICAgICBpZiAoYWdncmVnYXRlRnVuY3Rpb25UeXBlID09PSBcImF2Z1wiKSB7XG4gICAgICAgICAgZ3JvdXBbYWdncmVnYXRlRGF0YUZpZWxkXSA9XG4gICAgICAgICAgICBncm91cFthZ2dyZWdhdGVEYXRhRmllbGRdIC8gZ3JvdXBbYCR7YWdncmVnYXRlRGF0YUZpZWxkfV9fY291bnRgXTtcbiAgICAgICAgICBkZWxldGUgZ3JvdXBbYCR7YWdncmVnYXRlRGF0YUZpZWxkfV9fY291bnRgXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhncm91cE1hcCk7XG4gIH1cblxuICBsb2FkR29vZ2xlQ2hhcnRzKCkge1xuICAgIGdvb2dsZS5jaGFydHMubG9hZChcImN1cnJlbnRcIiwge1xuICAgICAgcGFja2FnZXM6IFt0aGlzLmNoYXJ0VHlwZV0sXG4gICAgfSk7XG4gICAgZ29vZ2xlLmNoYXJ0cy5zZXRPbkxvYWRDYWxsYmFjayh0aGlzLmRyYXdDaGFydC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIGRyYXdDaGFydCgpIHtcbiAgICBjb25zdCBkYXRhID0gZ29vZ2xlLnZpc3VhbGl6YXRpb24uYXJyYXlUb0RhdGFUYWJsZSh0aGlzLmNoYXJEYXRhKTtcblxuICAgIC8vIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgLy8gICByZWdpb246ICdVU0EnLFxuICAgIC8vICAgZGlzcGxheU1vZGU6ICdtYXJrZXJzJyxcbiAgICAvLyAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNncm91bmRDb2xvcixcbiAgICAvLyAgIHRvb2x0aXA6IHsgaXNIdG1sOiB0cnVlIH0sXG4gICAgLy8gICBjb2xvckF4aXM6IHsgY29sb3JzOiB0aGlzLm1hcENvbG9ycyB9XG4gICAgLy8gfTtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25Db25maWcoKTtcblxuICAgIGNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkdlb0NoYXJ0KFxuICAgICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50XG4gICAgKTtcbiAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jaGFydEhlaWdodDtcbiAgICBjaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0VG9vbHRpcChkYXRhKSB7XG4gICAgbGV0IHRvb2xUaXBEYXRhID0gXCJcIjtcbiAgICB0aGlzLnRvb3RUaXBDb2x1bW4uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBcIjxkaXYgY2xhc3M9J2lubGluZSc+PGI+XCIgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgXCI6PC9iPjwvZGl2PiBcIiArXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnJvdW5kT2ZmVGlsbFR3byhkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSwgMikgK1xuICAgICAgICAgIFwiPGJyIC8+XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIFwiPGRpdiBjbGFzcz0naW5saW5lJz48Yj5cIiArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBcIjo8L2I+PC9kaXY+IFwiICtcbiAgICAgICAgICBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSArXG4gICAgICAgICAgXCI8YnIgLz5cIjtcbiAgICAgIH1cblxuXG4gICAgfSk7XG4gICAgcmV0dXJuIHRvb2xUaXBEYXRhO1xuICB9XG5cbiAgZ2V0T3B0aW9uQ29uZmlnKCkge1xuICAgIGlmICh0aGlzLnJlZ2lvbiA9PSAnY2l0eScpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb25Db2RlLFxuICAgICAgICBkaXNwbGF5TW9kZTogJ21hcmtlcnMnLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFjZ3JvdW5kQ29sb3IsXG4gICAgICAgIHRvb2x0aXA6IHsgaXNIdG1sOiB0cnVlIH0sXG4gICAgICAgIGNvbG9yQXhpczogeyBjb2xvcnM6IHRoaXMubWFwQ29sb3JzIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2dyb3VuZENvbG9yLFxuICAgICAgICB0b29sdGlwOiB7IGlzSHRtbDogdHJ1ZSB9LFxuICAgICAgICBjb2xvckF4aXM6IHsgY29sb3JzOiB0aGlzLm1hcENvbG9ycyB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICB9XG5cblxuICAvLyAgR2VvIE1hcCBlbmQgLy9cblxuICAvLyBIZWF0IE1hcCBzdGFydCAvL1xuICBpbml0aWFsaXplTWFwKCk6IHZvaWQge1xuICAgIGNvbnN0IG1hcE9wdGlvbnMgPSB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXA7XG4gICAgLy8ge1xuICAgIC8vICAgY2VudGVyOiB7IGxhdDogMzcuMDkwMiwgbG5nOiAtOTUuNzEyOSB9LCAvLyBDZW50ZXIgb2YgdGhlIFVTQVxuICAgIC8vICAgem9vbTogNSxcbiAgICAvLyB9O1xuXG4gICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImJ1YmJsZU1hcFwiKSB7XG4gICAgICBtYXBPcHRpb25zW1wic3R5bGVzXCJdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgZmVhdHVyZVR5cGU6IFwiYWxsXCIsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBzYXR1cmF0aW9uOiAtMTAwIH0sXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogNzAgfSxcbiAgICAgICAgICAgIHsgdmlzaWJpbGl0eTogXCJzaW1wbGlmaWVkXCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmVhdHVyZVR5cGU6IFwiYWRtaW5pc3RyYXRpdmUuY291bnRyeVwiLFxuICAgICAgICAgIGVsZW1lbnRUeXBlOiBcImxhYmVsc1wiLFxuICAgICAgICAgIHN0eWxlcnM6IFtcbiAgICAgICAgICAgIHsgbGlnaHRuZXNzOiAtMzAgfSwgLy8gRGFya2VuIGxhYmVscyBmdXJ0aGVyXG4gICAgICAgICAgICB7IHZpc2liaWxpdHk6IFwib25cIiB9LFxuICAgICAgICAgICAgeyBmb250V2VpZ2h0OiBcImJvbGRcIiB9LCAvLyBNYWtlIGxhYmVscyBib2xkXG4gICAgICAgICAgICB7IGZvbnRTaXplOiBcIjEycHhcIiB9LCAvLyBJbmNyZWFzZSBmb250IHNpemVcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmVhdHVyZVR5cGU6IFwiYWRtaW5pc3RyYXRpdmUuY291bnRyeVwiLFxuICAgICAgICAgIGVsZW1lbnRUeXBlOiBcImdlb21ldHJ5LnN0cm9rZVwiLFxuICAgICAgICAgIHN0eWxlcnM6IFtcbiAgICAgICAgICAgIHsgbGlnaHRuZXNzOiAtNDAgfSwgLy8gRGFya2VuIGJvcmRlcnMgc2lnbmlmaWNhbnRseVxuICAgICAgICAgICAgeyB3ZWlnaHQ6IDEuNSB9LCAvLyBJbmNyZWFzZSBib3JkZXIgdGhpY2tuZXNzXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlOiBcImFkbWluaXN0cmF0aXZlLmNvdW50cnlcIixcbiAgICAgICAgICBlbGVtZW50VHlwZTogXCJnZW9tZXRyeS5maWxsXCIsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBsaWdodG5lc3M6IDkwIH0sIC8vIEtlZXAgZmlsbCB2ZXJ5IGxpZ2h0XG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgdGhpcy5tYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKFxuICAgICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZWdpb25zX2RpdlwiKSAsXG4gICAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBtYXBPcHRpb25zXG4gICAgKTtcbiAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jaGFydEhlaWdodDtcbiAgfVxuXG4gIC8vIEFkZCBtYXJrZXJzIHRvIHRoZSBtYXBcbiAgYWRkTWFya2VycygpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4ge1xuICAgICAgY29uc3QgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbGF0OiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICAgIGxuZzogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTG9uZ2l0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIGljb246IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaWNvbiA/IHtcbiAgICAgICAgICB1cmw6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaWNvbiwgLy8gUmVwbGFjZSB3aXRoIHlvdXIgaWNvbiBwYXRoXG4gICAgICAgICAgc2NhbGVkU2l6ZToge1xuICAgICAgICAgICAgd2lkdGg6IDMyLFxuICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICB9LFxuICAgICAgICB9IDogJycsXG4gICAgICAgIC8vIHRvb2x0aXBUZXh0OlxuICAgICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgICAvLyB0aXRsZTogYCR7bG9jYXRpb24uY2l0eX06ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudH1gLFxuICAgICAgICB0aXRsZTogYCR7bG9jYXRpb24uY2l0eX06ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudH1gLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobWFya2VyLmdldFBvc2l0aW9uKCkpO1xuICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG4gICAgICBsZXQgc3RyaW5nV2l0aG91dFF1b3RlcyA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG4gICAgICBjb25zdCBpbmZvV0luZG93RGF0YSA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG5cbiAgICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgIC8vIGNvbnRlbnQ6IGluZm9XSW5kb3dEYXRhLFxuICAgICAgICBjb250ZW50OiBgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPlxuICAgICAgICAke2luZm9XSW5kb3dEYXRhfVxuICAgICAgPC9kaXY+YCxcbiAgICAgIH0pO1xuICAgICAgLy8ge1xuICAgICAgLy8gICBjb250ZW50OiBgPGRpdiBzdHlsZT1cIiAgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTtjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMjBweDtcIj48aDQ+JHtcbiAgICAgIC8vICAgICBsb2NhdGlvbi5jaXR5XG4gICAgICAvLyAgIH08L2g0PjxwPlRvdGFsIFNhbGVzOiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnQudG9GaXhlZChcbiAgICAgIC8vICAgICAyXG4gICAgICAvLyAgICl9PC9wPjwvZGl2PmAsXG4gICAgICAvLyB9XG5cbiAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZm9XaW5kb3cpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwLCBtYXJrZXIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93ID0gaW5mb1dpbmRvdztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG5cblxuICB9XG5cbiAgZ2V0SW5mb1dpbmRvRGF0YShkYXRhKSB7XG4gICAgbGV0IHRvb2xUaXBEYXRhID0gYGA7XG4gICAgdGhpcy50b290VGlwQ29sdW1uLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBgPGRpdiBjbGFzcz0naW5saW5lJz48Yj5gICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIGA6PC9iPjwvZGl2PiBgICtcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uucm91bmRPZmZUaWxsVHdvKGRhdGFbZWxlbWVudC5kYXRhRmllbGRdLCAyKSArXG4gICAgICAgICAgYDxiciAvPmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIGA8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPmAgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgYDo8L2I+PC9kaXY+IGAgK1xuICAgICAgICAgIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdICtcbiAgICAgICAgICBgPGJyIC8+YDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdG9vbFRpcERhdGE7XG4gIH1cbiAgLy8gSGVhdCBNYXAgRW5kIC8vXG5cbiAgLy9oZWF0IG9ubHkgbWFwIHN0YXJ0IC8vXG5cbiAgbG9hZEdvb2dsZUhlYXRPbmx5TWFwcyhkYXRhKTogdm9pZCB7XG4gICAgdGhpcy5oZWF0bWFwRGF0YSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgbGV0IGxhdGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgKTtcbiAgICAgIGxldCBsb2d0aXR1ZGUgPSBwYXJzZUZsb2F0KFxuICAgICAgICBlbGVtZW50W3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTG9uZ2l0dWRlXVxuICAgICAgKTtcbiAgICAgIC8vIGxldCB3ZWlnaHQgPSAoY2VsbE5vZGUucHJvcGVydGllc1snV2VpZ2h0J10gIT0gdW5kZWZpbmVkKSA/IGNlbGxOb2RlLnByb3BlcnRpZXNbJ1dlaWdodCddIDogXCJOQVwiO1xuICAgICAgdGhpcy5oZWF0bWFwRGF0YS5wdXNoKHtcbiAgICAgICAgbG9jYXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcobGF0aXR1ZGUsIGxvZ3RpdHVkZSlcbiAgICAgICAgLy8gd2VpZ2h0OiBwYXJzZUZsb2F0KHdlaWdodCksXG5cbiAgICAgIH0pO1xuICAgICAgdGhpcy5ib3VuZHMuZXh0ZW5kKG5ldyBnb29nbGUubWFwcy5MYXRMbmcobGF0aXR1ZGUsIGxvZ3RpdHVkZSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IG1hcE9wdGlvbnMgPSB7XG4gICAgICAvLyBjZW50ZXI6IHtcbiAgICAgIC8vICAgbGF0OiBwYXJzZUZsb2F0KHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY2VudGVyTGF0aXR1ZGUpLFxuICAgICAgLy8gICBsbmc6IHBhcnNlRmxvYXQodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jZW50ZXJMb25naXR1ZGUpLFxuICAgICAgLy8gfSxcbiAgICAgIC8vIHpvb206IHBhcnNlRmxvYXQodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy56b29tKVxuICAgICAgem9vbTogdGhpcy56b29tVmFsdUZvckFsbFxuICAgIH07XG5cblxuXG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAodGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LCBtYXBPcHRpb25zKTtcbiAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jaGFydEhlaWdodDtcbiAgICB0aGlzLm1hcC5maXRCb3VuZHModGhpcy5ib3VuZHMpO1xuICAgIHRoaXMuaGVhdG1hcCA9IG5ldyBnb29nbGUubWFwcy52aXN1YWxpemF0aW9uLkhlYXRtYXBMYXllcih7XG4gICAgICBkYXRhOiB0aGlzLmhlYXRtYXBEYXRhLFxuICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICB9KTtcblxuICB9XG5cblxuICAvL2hlYXQgb25seSBtYXAgZW5kIC8vXG5cbiAgLy9oZWF0IGFuZCBNYXJrZXIgIG1hcCBTdGFydCAvL1xuICBpbml0aWFsaXplSGVhdFdpdGhNYXJrZXJNYXAoZGF0YSkge1xuICAgIC8vIEluaXRpYWxpemUgbWFwXG4gICAgdGhpcy5tYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudCwge1xuICAgICAgLy8gY2VudGVyOiB7IGxhdDogMzcuNzc0OSwgbG5nOiAtMTIyLjQxOTQgfSxcbiAgICAgIHpvb206IHBhcnNlRmxvYXQoXG4gICAgICAgIHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuem9vbVxuICAgICAgKSxcbiAgICB9KTtcbiAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jaGFydEhlaWdodDtcbiAgICAvLyBJbml0aWFsaXplIGhlYXRtYXAgbGF5ZXJcbiAgICB0aGlzLmhlYXRtYXBEYXRhID0gW107XG4gICAgZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuXG4gICAgICBsZXQgbGF0aXR1ZGUgPSBwYXJzZUZsb2F0KFxuICAgICAgICBlbGVtZW50W3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICApO1xuICAgICAgbGV0IGxvZ3RpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICApO1xuICAgICAgdGhpcy5oZWF0bWFwRGF0YS5wdXNoKHtcbiAgICAgICAgbG9jYXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcobGF0aXR1ZGUsIGxvZ3RpdHVkZSlcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ib3VuZHMuZXh0ZW5kKG5ldyBnb29nbGUubWFwcy5MYXRMbmcobGF0aXR1ZGUsIGxvZ3RpdHVkZSkpO1xuICAgIH0pO1xuICAgIHRoaXMuaGVhdG1hcCA9IG5ldyBnb29nbGUubWFwcy52aXN1YWxpemF0aW9uLkhlYXRtYXBMYXllcih7XG4gICAgICBkYXRhOiB0aGlzLmhlYXRtYXBEYXRhLFxuICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICB9KTtcbiAgICAvLyBJbml0aWFsaXplIG1hcmtlcnNcbiAgICB0aGlzLmxvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4ge1xuICAgICAgY29uc3QgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbGF0OiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICAgIGxuZzogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTG9uZ2l0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIGljb246IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaWNvbiA/IHtcbiAgICAgICAgICB1cmw6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaWNvbiwgLy8gUmVwbGFjZSB3aXRoIHlvdXIgaWNvbiBwYXRoXG4gICAgICAgICAgc2NhbGVkU2l6ZToge1xuICAgICAgICAgICAgd2lkdGg6IDMyLFxuICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICB9LFxuICAgICAgICB9IDogJycsXG4gICAgICAgIC8vIHRvb2x0aXBUZXh0OlxuICAgICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgICAvLyB0aXRsZTogYCR7bG9jYXRpb24uY2l0eX06ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudH1gLFxuICAgICAgICB0aXRsZTogYCR7bG9jYXRpb24uY2l0eX06ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudH1gLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobWFya2VyLmdldFBvc2l0aW9uKCkpO1xuICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG5cbiAgICAgIC8vIEFkZCBhbiBpbmZvIHdpbmRvd1xuICAgICAgY29uc3QgaW5mb1dJbmRvd0RhdGEgPSB0aGlzLmdldEluZm9XaW5kb0RhdGEobG9jYXRpb24pO1xuICAgICAgY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHtcbiAgICAgICAgY29udGVudDogYDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMjBweDtcIj5cbiAgICAgICAgICAgICR7aW5mb1dJbmRvd0RhdGF9XG4gICAgICAgICAgPC9kaXY+YCxcbiAgICAgIH0pO1xuXG5cbiAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZm9XaW5kb3cpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwLCBtYXJrZXIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93ID0gaW5mb1dpbmRvdztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG5cbiAgICAvLyBBZGQgbGlzdGVuZXIgZm9yIHpvb20gY2hhbmdlc1xuICAgIHRoaXMubWFwLmFkZExpc3RlbmVyKCd6b29tX2NoYW5nZWQnLCAoKSA9PiB0aGlzLmhhbmRsZVpvb21DaGFuZ2UoKSk7XG4gIH1cblxuICBoYW5kbGVab29tQ2hhbmdlKCkge1xuICAgIGNvbnN0IHpvb21MZXZlbCA9IHRoaXMubWFwLmdldFpvb20oKTtcbiAgICBpZiAoem9vbUxldmVsIDwgNSkge1xuICAgICAgLy8gU2hvdyBoZWF0bWFwIGFuZCBoaWRlIG1hcmtlcnNcbiAgICAgIHRoaXMuaGVhdG1hcC5zZXRNYXAodGhpcy5tYXApO1xuICAgICAgdGhpcy5tYXJrZXJzLmZvckVhY2goKG1hcmtlcikgPT4gbWFya2VyLnNldE1hcChudWxsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhpZGUgaGVhdG1hcCBhbmQgc2hvdyBtYXJrZXJzXG4gICAgICB0aGlzLmhlYXRtYXAuc2V0TWFwKG51bGwpO1xuICAgICAgdGhpcy5tYXJrZXJzLmZvckVhY2goKG1hcmtlcikgPT4gbWFya2VyLnNldE1hcCh0aGlzLm1hcCkpO1xuICAgIH1cbiAgfVxuXG4gIC8vaGVhdCBhbmQgTWFya2VyICBtYXAgRW5kIC8vXG4gIC8vQnViYmxlIENoYXJ0IFN0YXJ0XG4gIGFkZEJ1YmJsZU1hcmtlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5wcmVwYXJlQnViYmxlRGF0YSgpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMubG9jYXRpb25zKTtcbiAgICB0aGlzLmxvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4ge1xuICAgICAgY29uc3QgbWFya2VyID0gbmV3IGdvb2dsZS5tYXBzLk1hcmtlcih7XG4gICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgbGF0OiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICAgIGxuZzogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTG9uZ2l0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIGljb246IHtcbiAgICAgICAgICBwYXRoOiBnb29nbGUubWFwcy5TeW1ib2xQYXRoLkNJUkNMRSxcbiAgICAgICAgICBzY2FsZTogTWF0aC5yb3VuZChsb2NhdGlvbi5zYWxlc19wZXJjZW50YWdlKSwgLy8gQWRqdXN0IGJ1YmJsZSBzaXplXG4gICAgICAgICAgZmlsbENvbG9yOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmJ1YmJsZUNvbG9yLFxuICAgICAgICAgIGZpbGxPcGFjaXR5OiAwLjYsXG4gICAgICAgICAgc3Ryb2tlV2VpZ2h0OiAwLFxuICAgICAgICB9LFxuICAgICAgICAvLyB0b29sdGlwVGV4dDpcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgLy8gdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgICAgdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmFncnVtZW50VmFsdWVdXG4gICAgICAgICAgfWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcbiAgICAgIGxldCBzdHJpbmdXaXRob3V0UXVvdGVzID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcbiAgICAgIGNvbnN0IGluZm9XSW5kb3dEYXRhID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcblxuICAgICAgY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHtcbiAgICAgICAgLy8gY29udGVudDogaW5mb1dJbmRvd0RhdGEsXG4gICAgICAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+XG4gICAgICAgICAke2luZm9XSW5kb3dEYXRhfVxuICAgICAgIDwvZGl2PmAsXG4gICAgICB9KTtcblxuICAgICAgbWFya2VyLmFkZExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5mb1dpbmRvdykge1xuICAgICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXAsIG1hcmtlcik7XG4gICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cgPSBpbmZvV2luZG93O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcbiAgfVxuXG4gIHByZXBhcmVCdWJibGVEYXRhKCkge1xuICAgIC8vIFN0ZXAgMTogRmluZCBtaW4gYW5kIG1heCB0b3RhbF9zYWxlc19hbW91bnRcbiAgICBjb25zdCBtaW5TYWxlcyA9IE1hdGgubWluKFxuICAgICAgLi4udGhpcy5sb2NhdGlvbnMubWFwKFxuICAgICAgICAoZCkgPT4gZFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmFncnVtZW50VmFsdWVdXG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCBtYXhTYWxlcyA9IE1hdGgubWF4KFxuICAgICAgLi4udGhpcy5sb2NhdGlvbnMubWFwKFxuICAgICAgICAoZCkgPT4gZFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmFncnVtZW50VmFsdWVdXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIFN0ZXAgMjogRGVmaW5lIG1pbiBhbmQgbWF4IHBlcmNlbnRhZ2UgdmFsdWVzXG4gICAgY29uc3QgbWluUGVyY2VudGFnZSA9XG4gICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmJ1YmJsZU1pbmltdW1TaXplO1xuICAgIGNvbnN0IG1heFBlcmNlbnRhZ2UgPVxuICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVNYXhpbXVtU2l6ZTtcblxuICAgIC8vIFN0ZXAgMzogTm9ybWFsaXplIGZ1bmN0aW9uXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHZhbHVlLCBtaW4sIG1heCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKCh2YWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKSkgKiAobWF4UGVyY2VudGFnZSAtIG1pblBlcmNlbnRhZ2UpICtcbiAgICAgICAgbWluUGVyY2VudGFnZVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8gU3RlcCA0OiBBc3NpZ24gY2FsY3VsYXRlZCBwZXJjZW50YWdlIHRvIGVhY2ggb2JqZWN0XG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgZC5zYWxlc19wZXJjZW50YWdlID0gTWF0aC5taW4oXG4gICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgIG5vcm1hbGl6ZShcbiAgICAgICAgICAgIGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXSxcbiAgICAgICAgICAgIG1pblNhbGVzLFxuICAgICAgICAgICAgbWF4U2FsZXNcbiAgICAgICAgICApLFxuICAgICAgICAgIG1pblBlcmNlbnRhZ2VcbiAgICAgICAgKSxcbiAgICAgICAgbWF4UGVyY2VudGFnZVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuICAvL0J1YmJsZSBDaGFydCBFbmRcblxuICAvLyBjaG9yb3BsZXRoTWFwIHN0YXJ0IC8vXG5cbiAgZ2V0Q29sb3IoY250OiBudW1iZXIsIHN0YXJ0Q29sb3I6IHN0cmluZywgZW5kQ29sb3I6IHN0cmluZywgbWluQ291bnQ6IG51bWJlciwgbWF4Q291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGNudCA9PT0gdW5kZWZpbmVkIHx8IGNudCA9PT0gbnVsbCB8fCBtYXhDb3VudCA9PT0gbWluQ291bnQpIHtcbiAgICAgIHJldHVybiAnI2NjY2NjYyc7XG4gICAgfVxuXG4gICAgLy8gY29uc3QgcmF0aW8gPSBNYXRoLm1pbihcbiAgICAvLyAgIE1hdGgubWF4KChjbnQgLSBtaW5Db3VudCkgLyAobWF4Q291bnQgLSBtaW5Db3VudCksIDApLFxuICAgIC8vICAgMVxuICAgIC8vICk7XG5cbiAgICBjb25zdCByYXdSYXRpbyA9XG4gICAgICAoY250IC0gbWluQ291bnQpIC8gKG1heENvdW50IC0gbWluQ291bnQpO1xuXG4gICAgLy8gZ2FtbWEgPCAxIGV4YWdnZXJhdGVzIGRpZmZlcmVuY2VzXG4gICAgY29uc3QgZ2FtbWEgPSAwLjI7IC8vIHRyeSAwLjQg4oCTIDAuN1xuICAgIGNvbnN0IHJhdGlvID0gTWF0aC5wb3coXG4gICAgICBNYXRoLm1pbihNYXRoLm1heChyYXdSYXRpbywgMCksIDEpLFxuICAgICAgZ2FtbWFcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmhleFRvUmdiKHN0YXJ0Q29sb3IpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuaGV4VG9SZ2IoZW5kQ29sb3IpO1xuXG4gICAgY29uc3QgciA9IHRoaXMubGVycChzdGFydC5yLCBlbmQuciwgcmF0aW8pO1xuICAgIGNvbnN0IGcgPSB0aGlzLmxlcnAoc3RhcnQuZywgZW5kLmcsIHJhdGlvKTtcbiAgICBjb25zdCBiID0gdGhpcy5sZXJwKHN0YXJ0LmIsIGVuZC5iLCByYXRpbyk7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhgQ29sb3IgZm9yIGNvdW50ICR7Y250fTogcmdiKCR7cn0sICR7Z30sICR7Yn0pYCk7XG5cbiAgICByZXR1cm4gYHJnYigke3J9LCAke2d9LCAke2J9KWA7XG4gIH1cblxuICBsZXJwKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCByYXRpbzogbnVtYmVyKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoc3RhcnQgKyAoZW5kIC0gc3RhcnQpICogcmF0aW8pO1xuICB9XG4gIGhleFRvUmdiKGhleDogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xlYW5IZXggPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgICBjb25zdCBiaWdpbnQgPSBwYXJzZUludChjbGVhbkhleCwgMTYpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IChiaWdpbnQgPj4gMTYpICYgMjU1LFxuICAgICAgZzogKGJpZ2ludCA+PiA4KSAmIDI1NSxcbiAgICAgIGI6IGJpZ2ludCAmIDI1NVxuICAgIH07XG4gIH1cblxuXG4gIGluaXRDaG9yb3BsZXRoTWFwKGNoYXJ0Q29uZmlnOiBhbnksIHRvb3RUaXBDb2x1bW46IGFueVtdKTogdm9pZCB7XG5cbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTsgLy8g8J+RiCBTVEFSVCBsb2FkZXJcblxuICAgXG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvb2dsZW1hcFwiKSBhcyBIVE1MRWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgY2VudGVyOiB7IGxhdDogcGFyc2VGbG9hdChjaGFydENvbmZpZy5jZW50ZXJMYXQpLCBsbmc6IHBhcnNlRmxvYXQoY2hhcnRDb25maWcuY2VudGVyTG5nKSB9LFxuICAgICAgICB6b29tOiBwYXJzZUludChjaGFydENvbmZpZy56b29tKVxuICAgICAgfVxuICAgICk7XG5cblxuICAgIHRoaXMubWFwLmRhdGEubG9hZEdlb0pzb24oY2hhcnRDb25maWcuZ2pzb25GaWxlUGF0aCk7XG4gICAgdGhpcy5tYXAuZGF0YS5zZXRTdHlsZShmZWF0dXJlID0+IHRoaXMuZ2V0RmVhdHVyZVN0eWxlKGZlYXR1cmUsIGNoYXJ0Q29uZmlnLCB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQsIHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCkpO1xuXG4gICAgY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KCk7XG5cbiAgICB0aGlzLm1hcC5kYXRhLmFkZExpc3RlbmVyKCdtb3VzZW92ZXInLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZGlzdHJpY3QgPSBldmVudC5mZWF0dXJlLmdldFByb3BlcnR5KCdkJyk7XG4gICAgICBjb25zdCBrZXkgPSBkaXN0cmljdD8udG9VcHBlckNhc2UoKTtcblxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5jaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UuZ2V0KGtleSk7XG5cbiAgICAgIGluZm9XaW5kb3cuc2V0Q29udGVudChcbiAgICAgICAgdGhpcy5idWlsZEluZm9XaW5kb3dDb250ZW50KGRpc3RyaWN0LCByb3csIHRvb3RUaXBDb2x1bW4pXG4gICAgICApO1xuXG4gICAgICBpbmZvV2luZG93LnNldFBvc2l0aW9uKGV2ZW50LmxhdExuZyk7XG4gICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXAuZGF0YS5hZGRMaXN0ZW5lcignbW91c2VvdXQnLCAoKSA9PiBpbmZvV2luZG93LmNsb3NlKCkpO1xuICB9XG5cbiAgXG5cblxuXG4gIGJ1aWxkSW5mb1dpbmRvd0NvbnRlbnQoZGlzdHJpY3Q6IHN0cmluZywgcm93OiBhbnksIHRvb3RUaXBDb2x1bW46IGFueVtdKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IHJvd3MgPSB0b290VGlwQ29sdW1uLm1hcChjID0+IGBcbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTpmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtcIj5cbiAgICAgIDxzcGFuPiR7Yy5jYXB0aW9ufTwvc3Bhbj5cbiAgICAgIDxzdHJvbmc+JHtyb3c/LltjLmRhdGFGaWVsZF0gPz8gJ05vIGRhdGEnfTwvc3Ryb25nPlxuICAgIDwvZGl2PlxuICBgKS5qb2luKCcnKTtcblxuICAgIHJldHVybiBgXG4gICAgPGRpdiBzdHlsZT1cIlxuICAgICAgY29sb3I6IzAwMDtcbiAgICAgIGJhY2tncm91bmQ6I2ZmZjtcbiAgICAgIHBhZGRpbmc6OHB4IDEycHg7XG4gICAgICBmb250LXNpemU6MTNweDtcbiAgICAgIG1pbi13aWR0aDoxNTBweDtcbiAgICBcIj5cbiAgICAgIDxkaXYgc3R5bGU9XCJmb250LXdlaWdodDo2MDA7IG1hcmdpbi1ib3R0b206NnB4O1wiPlxuICAgICAgICAke2Rpc3RyaWN0fSA6IFxuICAgICAgPC9kaXY+XG4gICAgICAke3Jvd3N9XG4gICAgPC9kaXY+XG4gIGA7XG4gIH1cblxuXG4gIHVwZGF0ZUNob3JvcGxldGhNYXBEYXRhKHllYXI6IHN0cmluZywgY2hhcnRDb25maWc6IGFueSkge1xuICAgIHRoaXMuY2hvcm9wbGV0aE1hcERhdGFTb3VyY2UuY2xlYXIoKTtcbiAgICB0aGlzLmNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZS5jbGVhcigpO1xuICAgIGxldCBtaW5DaG9yb3BsZXRoTWFwQ250ID0gSW5maW5pdHk7XG4gICAgbGV0IG1heENob3JvcGxldGhNYXBDbnQgPSAtSW5maW5pdHk7XG4gICAgXG5cbiAgICBjb25zdCB2YWx1ZUZpZWxkID0gY2hhcnRDb25maWcuY2hhcnRfY29uZmlnLmZpbmQoXG4gICAgICBjID0+IGMuZGlzcGxheUZvciA9PT0gJ21hcCdcbiAgICApPy5kYXRhRmllbGQ7XG5cbiAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhXG4gICAgICAuZmlsdGVyKGQgPT4gZFtjaGFydENvbmZpZy5zbGlkZXJWYWx1ZUZpZWxkXSA9PT0geWVhcilcbiAgICAgIC5mb3JFYWNoKGQgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBkLmRpc3RyaWN0LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcERhdGFTb3VyY2Uuc2V0KGtleSwgZFt2YWx1ZUZpZWxkXSk7XG4gICAgICAgIHRoaXMuY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLnNldChrZXksIGQpO1xuXG4gICAgICAgIG1pbkNob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1pbihtaW5DaG9yb3BsZXRoTWFwQ250LCBkW3ZhbHVlRmllbGRdKTtcbiAgICAgICAgbWF4Q2hvcm9wbGV0aE1hcENudCA9IE1hdGgubWF4KG1heENob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgfSk7XG5cblxuICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICAgIHRoaXMubWFwLmRhdGEuZm9yRWFjaChmZWF0dXJlID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMuZ2V0RmVhdHVyZVN0eWxlKGZlYXR1cmUsIGNoYXJ0Q29uZmlnLCB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQsIHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCk7XG5cbiAgICAgICAgICB0aGlzLm1hcC5kYXRhLm92ZXJyaWRlU3R5bGUoZmVhdHVyZSwgc3R5bGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGdldEZlYXR1cmVTdHlsZShmZWF0dXJlOiBhbnksIGNoYXJ0Q29uZmlnOiBhbnksIG1pbkNvdW50LCBtYXhDb3VudCkge1xuICAgIGNvbnN0IGRpc3RyaWN0TmFtZSA9IGZlYXR1cmUuZ2V0UHJvcGVydHkoJ2QnKT8udG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBjbnQgPSB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlLmdldChkaXN0cmljdE5hbWUpO1xuICAgIGNvbnNvbGUubG9nKGRpc3RyaWN0TmFtZSwgY250LCB0aGlzLmdldENvbG9yKGNudCwgY2hhcnRDb25maWcuY29sb3JPbmUsIGNoYXJ0Q29uZmlnLmNvbG9yVHdvLCBtaW5Db3VudCwgbWF4Q291bnQpKTtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsbENvbG9yOiB0aGlzLmdldENvbG9yKGNudCwgY2hhcnRDb25maWcuY29sb3JPbmUsIGNoYXJ0Q29uZmlnLmNvbG9yVHdvLCBtaW5Db3VudCwgbWF4Q291bnQpLFxuICAgICAgc3Ryb2tlQ29sb3I6ICcjNTU1JyxcbiAgICAgIHN0cm9rZVdlaWdodDogMSxcbiAgICAgIGZpbGxPcGFjaXR5OiAwLjc1XG4gICAgfTtcbiAgfVxuXG4gIC8vIGNob3JvcGxldGhNYXAgc3RhcnQgLy9cblxuXG5cblxuICB0b2dnbGVQbGF5KCkge1xuICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYXkoKTtcbiAgICB9XG4gIH1cblxuICBwbGF5KCkge1xuICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBsYXlJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXggPCB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXgrKztcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyQnlJbmRleCh0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQpO1xuXG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnBsYXlJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBsYXlJbnRlcnZhbCk7XG4gICAgICB0aGlzLnBsYXlJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVzdGFydCgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnVwZGF0ZVllYXJCeUluZGV4KHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBvblllYXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucGF1c2UoKTsgLy8gc3RvcCBhdXRvcGxheSB3aGVuIHVzZXIgbW92ZXMgc2xpZGVyXG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gK2V2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVllYXJCeUluZGV4KHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBzZXRZZWFyQnlJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgIHRoaXMudXBkYXRlWWVhckJ5SW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgdXBkYXRlWWVhckJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlID0gdGhpcy5hbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzW2luZGV4XTtcbiAgICB0aGlzLnVwZGF0ZUNob3JvcGxldGhNYXBEYXRhKHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlLCB0aGlzLmNob3JvcGxldGhNYXBDaGFydENvbmZpZyk7XG4gIH1cblxuXG4gIC8vIHNldFllYXJCeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgLy8gICB0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSA9IHRoaXMuYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlc1tpbmRleF07XG4gIC8vICAgdGhpcy51cGRhdGVDaG9yb3BsZXRoTWFwRGF0YSh0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSwgdGhpcy5jaG9yb3BsZXRoTWFwQ2hhcnRDb25maWcpO1xuICAvLyB9XG5cbiAgLy8gb25ZZWFyQ2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAvLyAgIGNvbnN0IGluZGV4ID0gKyhldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gIC8vICAgdGhpcy5zZXRZZWFyQnlJbmRleChpbmRleCk7XG4gIC8vIH1cblxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJteC0yIGJnLWdyYXktODAwXCI+XG4gIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgYmctZ3JheS04MDAgcC0yXCI+XG4gICAgICA8YXBwLWxvYWRlcj48L2FwcC1sb2FkZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPiAtLT5cblxuXG4gIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGxcIj5cblxuICAgIDxkaXYgaWQ9XCJyZWdpb25zX2RpdlwiICNnb29nbE1hcCBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9kaXY+XG4gICAgPGRpdiBpZD1cImdvb2dsZW1hcFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgW3N0eWxlLmhlaWdodF09XCJjaGFydEhlaWdodFwiPjwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cImlzTG9hZGVyXCIgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctYmxhY2svNDAgYmFja2Ryb3AtYmx1ci1zbVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxvYWRlclwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG5cblxuICAgIDxkaXYgY2xhc3M9XCJteC0yIHBiLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCIgbXgtYXV0byB3LWZ1bGwgbXQtM1wiICpuZ0lmPVwiaXNSYW5nZVNsaWRlclZpc2libGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi0yXCI+XG5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGV4dC13aGl0ZSBweC0zIHB5LTIgcm91bmRlZCBiZy1ncmF5LTgwMCBob3ZlcjpiZy1ncmF5LTcwMFwiIChjbGljayk9XCJ0b2dnbGVQbGF5KClcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFcIiBbbmdDbGFzc109XCJpc1BsYXlpbmcgPyAnZmEtcGF1c2UnIDogJ2ZhLXBsYXknXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggc3BhY2UteC0yIHRleHQtc20gZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgeWVhciBvZiBhbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgcHgtMiBweS0xIHJvdW5kZWQtbWQgdHJhbnNpdGlvblwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdiZy1ibGFjayB0ZXh0LXdoaXRlIHNoYWRvdyc6IHllYXIgPT09IHNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSxcbiAgICAgICAgICAgICd0ZXh0LWdyYXktMzAwIGhvdmVyOnRleHQtd2hpdGUnOiB5ZWFyICE9PSBzZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVcbiAgICAgICAgICB9XCIgKGNsaWNrKT1cInNldFllYXJCeUluZGV4KGkpXCI+XG4gICAgICAgICAgICAgICAge3sgeWVhciB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0ZXh0LXdoaXRlIHB4LTMgcHktMiByb3VuZGVkIGJnLWdyYXktODAwIGhvdmVyOmJnLWdyYXktNzAwXCIgKGNsaWNrKT1cInJlc3RhcnQoKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1yZWZyZXNoXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBjbGFzcz1cInctZnVsbCBoLTIgcm91bmRlZC1sZyBhcHBlYXJhbmNlLW5vbmUgY3Vyc29yLXBvaW50ZXJcbiAgICAgICAgICAgYmctZ3JhZGllbnQtdG8tciBmcm9tLWdyZWVuLTQwMCB2aWEteWVsbG93LTQwMCB0by1yZWQtNTAwXCIgW21pbl09XCIwXCJcbiAgICAgICAgICBbbWF4XT1cImFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXMubGVuZ3RoIC0gMVwiIFt2YWx1ZV09XCJjaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4XCJcbiAgICAgICAgICAoaW5wdXQpPVwib25ZZWFyQ2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgPC9kaXY+XG5cblxuXG5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cblxuXG5cblxuXG48L2Rpdj4iXX0=
692
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDOzs7O0FBeUJuRSxNQUFNLE9BQU8sc0JBQXNCO0lBcU1qQyxZQUFtQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQWpML0MsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUliLFdBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdkIseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0QsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELGlDQUE0QixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdFLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQVMxQywrQkFBMEIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN2RCx3QkFBbUIsR0FBVyxRQUFRLENBQUM7UUFDdkMsd0JBQW1CLEdBQVcsQ0FBQyxRQUFRLENBQUE7UUFDdkMsaUNBQTRCLEdBQVUsRUFB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ekQsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3JELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdGLENBQUM7O21IQXQrQlUsc0JBQXNCO3VHQUF0QixzQkFBc0Isd1lDbkNuQyxxbEVBNkRNOzJGRDFCTyxzQkFBc0I7a0JBcEJsQyxTQUFTOytCQUNFLHFCQUFxQjtvR0FvQlIsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQXlCSixvQkFBb0I7c0JBQXBDLE1BQU07Z0JBQ1UsU0FBUztzQkFBekIsTUFBTTtnQkFDVSw0QkFBNEI7c0JBQTVDLE1BQU07Z0JBQ0UsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQXlCRixlQUFlO3NCQURsQixLQUFLO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbic7XG4vLyBpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmRlY2xhcmUgdmFyIGdvb2dsZTogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYXBwLWdhbW1hLWdlby1jaGFydFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2dhbW1hLWdlby1jaGFydC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZXM6IFtgXG4gICAgLmxvYWRlciB7XG4gICAgICB3aWR0aDogNjRweDtcbiAgICAgIGhlaWdodDogNjRweDtcbiAgICAgIGJvcmRlcjogNnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICM0YWRlODA7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlO1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgc3BpbiB7XG4gICAgICB0byB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgICB9XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBHYW1tYUdlb0NoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZChcImdvb2dsTWFwXCIpIGdvb2dsTWFwOiBFbGVtZW50UmVmO1xuICBjaGFyRGF0YTogYW55O1xuICBjaGFydEhlaWdodDogYW55O1xuICBiYWNncm91bmRDb2xvcjogYW55O1xuICBtYXBDb2xvcnM6IGFueTtcbiAgY2hhcnRUeXBlOiBhbnk7XG4gIHRvb3RUaXBDb2x1bW46IGFueTtcbiAgcmVnaW9uOiBhbnk7XG4gIHJlZ2lvbkNvZGU6IGFueTtcbiAgLy8gaGVhdCBNYXAgc3RhcnRcbiAgbWFwOiBhbnk7XG4gIGxvY2F0aW9ucztcbiAgbWFwVFlwZTogYW55O1xuICBtYXBPcHRpb25Gb3JIZWF0TWFwOiB7XG4gICAgem9vbTogbnVtYmVyO1xuICB9O1xuICBjdXJyZW50SW5mb1dpbmRvdzogYW55O1xuICAvLyBoZWF0IE1hcCBlbmRcbiAgLy9oZWF0IG9ubHkgbWFwIHN0YXJ0IC8vXG4gIG1hcmtlcnMgPSBbXTtcbiAgaGVhdG1hcDogYW55O1xuICBoZWF0bWFwRGF0YTogYW55O1xuICB6b29tVmFsdUZvckFsbDogbnVtYmVyO1xuICBib3VuZHMgPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKCk7XG4gIC8vaGVhdCBvbmx5IG1hcCBlbmQgLy9cbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRUYWJsZUNvbmZpZ091dFB1dDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb1Jvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvbnJpZ2h0Q2xpY2tDb250ZXh0U2VsZWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgcmlnaHRDbGlja0VuYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzTG9hZGVyOiBib29sZWFuO1xuICBwYWdlX2NvbmZpZzogYW55O1xuICBwYWdlX3Bhcm1zOiBhbnk7XG4gIHNvcnRCeTogYW55O1xuICBmaWx0ZXJlZE9iamVjdHM6IGFueTtcblxuXG4gIC8vY2hvcm9wbGV0aE1hcCB2YXJpYWJsZXMvL1xuICBjaG9yb3BsZXRoX21hcF9kYXRhX3NvdXJjZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIG1pbkNob3JvcGxldGhNYXBDbnQ6IG51bWJlciA9IEluZmluaXR5O1xuICBtYXhDaG9yb3BsZXRoTWFwQ250OiBudW1iZXIgPSAtSW5maW5pdHlcbiAgYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlczogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlOiBzdHJpbmc7XG4gIGNob3JvcGxldGhNYXBEYXRhU291cmNlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgY2hvcm9wbGV0aE1hcERhdGE6IGFueTtcbiAgaXNSYW5nZVNsaWRlclZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2hvcm9wbGV0aE1hcENoYXJ0Q29uZmlnOiBhbnk7XG4gIGlzUGxheWluZyA9IGZhbHNlO1xuICBwbGF5SW50ZXJ2YWw6IGFueTtcbiAgY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCA9IDA7XG4gIGNob3JvcGxldGhNYXBzbGlkZVNwZWVkOiBudW1iZXI7XG5cbiAgQElucHV0KFwiY2hhcnREYXRhU291cmNlXCIpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFnZV9jb25maWcgPSB2YWx1ZTtcbiAgICAgIHRoaXMucGFnZV9wYXJtcyA9IHZhbHVlLnRpdGxlUGFyYW1zO1xuICAgICAgdGhpcy5zb3J0QnkgPSB2YWx1ZS5rcGlDb25maWc/LmRhdGFDb25maWc/LnNvcnRCeTtcbiAgICAgIC8vIHRoaXMuaW5Sb2FtZXJHZW9DaGFydC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJtb250aGx5XCIpIHtcbiAgICAgICAgICB0aGlzLm1hcFRZcGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXBUeXBlO1xuICAgICAgICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJnZW9NYXBcIikge1xuICAgICAgICAgICAgdGhpcy5yZWdpb24gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5yZWdpb247XG4gICAgICAgICAgICB0aGlzLnJlZ2lvbkNvZGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5yZWdpb25Db2RlO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgIHRoaXMuY2hhcnRUeXBlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRUeXBlO1xuICAgICAgICAgICAgdGhpcy5iYWNncm91bmRDb2xvciA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgIHRoaXMubWFwQ29sb3JzID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sb3JzO1xuICAgICAgICAgICAgLy8gbGV0IGNvbmZpZyA9IHZhbHVlLmNoYXJ0Q29uZmlnO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0YSA9IFtcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiYXJndW1lbnRGaWVsZFwiXSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImNoYXJ0VmFsdWVGaWVsZFwiXSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6IFwic3RyaW5nXCIsIHJvbGU6IFwidG9vbHRpcFwiLCBwOiB7IGh0bWw6IHRydWUgfSB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXS5jb25jYXQoXG4gICAgICAgICAgICAgIGRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMuZ2V0VG9vbHRpcChpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgaXRlbVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImFyZ3VtZW50RmllbGRcIl1dLFxuICAgICAgICAgICAgICAgICAgaXRlbVt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZ1tcImNoYXJ0VmFsdWVGaWVsZFwiXV0sXG4gICAgICAgICAgICAgICAgICB0b29sdGlwLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5jaGFyRGF0YSA9IGZvcm1hdHRlZERhdGE7XG4gICAgICAgICAgICAvLyB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIC8vIHRoaXMubG9hZEdvb2dsZUNoYXJ0cygpO1xuICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImJ1YmJsZU1hcFwiKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwID0ge1xuICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImNob3JvcGxldGhNYXBcIikge1xuICAgICAgICAgICAgbGV0IGNoYXJ0Q29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChjaGFydENvbmZpZy5pc0RhdGFBZ2dyZWdhdGlvbikge1xuICAgICAgICAgICAgICBjb25zdCBhZ2dyZWF0aW9uRGF0YSA9IHRoaXMuZ2V0R3JvdXBEYXRhRm9yQ2hhcnQodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UsIGNoYXJ0Q29uZmlnWydkYXRhQWdncmVnYXRpb25Db25maWcnXVsnZGF0YUFnZ3JlZ2F0ZUNvbHVtZXMnXSwgY2hhcnRDb25maWdbJ2RhdGFBZ2dyZWdhdGlvbkNvbmZpZyddWydhZ2dyZWdhdGVGaWVsZHMnXSk7XG4gICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlID0gYWdncmVhdGlvbkRhdGE7XG5cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYWdncmVhdGlvbkRhdGEpO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuXG5cbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHtjaGFydENvbmZpZy5zaXplfXB4YDtcblxuICAgICAgICAgICAgbGV0IHRvb3RUaXBDb2x1bW4gPSBjaGFydENvbmZpZy5jaGFydF9jb25maWdcbiAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuZGlzcGxheUZvciA9PT0gJ21hcCcgfHwgYy5kaXNwbGF5Rm9yID09PSAndG9vbHRpcCcpO1xuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUZpZWxkID1cbiAgICAgICAgICAgICAgY2hhcnRDb25maWcuY2hhcnRfY29uZmlnLmZpbmQoYyA9PiBjLmRpc3BsYXlGb3IgPT09ICdtYXAnKT8uZGF0YUZpZWxkO1xuXG4gICAgICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5mb3JFYWNoKGQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBrZXkgPSBkW2NoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGRdLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gZFt2YWx1ZUZpZWxkXTtcblxuICAgICAgICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlLnNldChrZXksIHZhbCk7XG4gICAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLnNldChrZXksIGQpO1xuXG4gICAgICAgICAgICAgIHRoaXMubWluQ2hvcm9wbGV0aE1hcENudCA9IE1hdGgubWluKHRoaXMubWluQ2hvcm9wbGV0aE1hcENudCwgZFt2YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgIHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCA9IE1hdGgubWF4KHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCwgZFt2YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGNoYXJ0Q29uZmlnLmlzVmFsdWVGaWVsZFJhbmdlU2xpZGVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlcyA9IFsuLi5uZXcgU2V0KHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLm1hcChkID0+IGRbY2hhcnRDb25maWcuc2xpZGVyVmFsdWVGaWVsZF0pKV07XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlID0gdGhpcy5hbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzWzBdO1xuICAgICAgICAgICAgICB0aGlzLmlzUmFuZ2VTbGlkZXJWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDaG9yb3BsZXRoTWFwRGF0YSh0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSwgY2hhcnRDb25maWcpO1xuICAgICAgICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBDaGFydENvbmZpZyA9IGNoYXJ0Q29uZmlnO1xuICAgICAgICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBzbGlkZVNwZWVkID0gY2hhcnRDb25maWcuc2xpZGVTcGVlZDtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLmluaXRDaG9yb3BsZXRoTWFwKGNoYXJ0Q29uZmlnLCB0b290VGlwQ29sdW1uKTtcblxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7dmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuc2l6ZX1weGA7XG4gICAgICAgICAgICB0aGlzLnpvb21WYWx1Rm9yQWxsID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy56b29tXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwID0ge1xuICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwiZGFpbHlcIikge1xuICAgICAgICAgIHRoaXMubWFwVFlwZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcFR5cGU7XG4gICAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAuZmlsdGVyKHJlY29yZCA9PiByZWNvcmRbdGhpcy5zb3J0QnldKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG1vbWVudChiW3RoaXMuc29ydEJ5XSkuZGlmZihtb21lbnQoYVt0aGlzLnNvcnRCeV0pKSk7XG4gICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJlY29yZCA9IHNvcnRlZERhdGFbMF07XG5cbiAgICAgICAgICBpZiAodmFsdWUuZW5kRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGFbdGhpcy5zb3J0QnldID09PSB2YWx1ZS5lbmREYXRlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGFbdGhpcy5zb3J0QnldID09PSBtb3N0UmVjZW50UmVjb3JkW3RoaXMuc29ydEJ5XSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImJ1YmJsZU1hcFwiKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHRoaXMuZmlsdGVyZWRPYmplY3RzO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwID0ge1xuICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9XG5cblxuICAgIH1cblxuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQgeyB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJnZW9NYXBcIikge1xuICAgICAgdGhpcy5sb2FkR29vZ2xlQ2hhcnRzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJoZWF0TWFwXCIpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmhlYXRNYXBDYXRlZ29yeSA9PSBcImhlYXRNYXBPbmx5XCIpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRHb29nbGVIZWF0T25seU1hcHModGhpcy5sb2NhdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmhlYXRNYXBDYXRlZ29yeSA9PSBcImhlYXRNYXBNYXJrZXJcIikge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU1hcCgpO1xuICAgICAgICB0aGlzLmFkZE1hcmtlcnMoKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVIZWF0V2l0aE1hcmtlck1hcCh0aGlzLmxvY2F0aW9ucyk7XG5cbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiY2hvcm9wbGV0aE1hcFwiKSB7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5pbml0aWFsaXplTWFwKCk7XG4gICAgICB0aGlzLmFkZEJ1YmJsZU1hcmtlcnMoKTtcbiAgICB9XG4gIH1cblxuXG4gIGdldEdyb3VwRGF0YUZvckNoYXJ0KGRhdGEsIGFnZ3JlZ2F0aW9uQ29uZmlnLCBncm91cEJ5Q29sdW1ucykge1xuICAgIGNvbnN0IGdyb3VwTWFwID0ge307XG5cbiAgICBkYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwS2V5ID0gZ3JvdXBCeUNvbHVtbnMubWFwKGNvbCA9PiByb3dbY29sXSkuam9pbihcInx8XCIpO1xuXG4gICAgICBpZiAoIWdyb3VwTWFwW2dyb3VwS2V5XSkge1xuICAgICAgICBncm91cE1hcFtncm91cEtleV0gPSB7fTtcblxuICAgICAgICBncm91cEJ5Q29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2NvbF0gPSByb3dbY29sXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWdncmVnYXRpb25Db25maWcuZm9yRWFjaCgoeyBhZ2dyZWdhdGVEYXRhRmllbGQsIGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSB9KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdW1cIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSBJbmZpbml0eTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gLUluZmluaXR5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjb3VudFwiOlxuICAgICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUgPT09IFwiYXZnXCIpIHtcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBhZ2dyZWdhdGlvbnNcbiAgICAgIGFnZ3JlZ2F0aW9uQ29uZmlnLmZvckVhY2goKHsgYWdncmVnYXRlRGF0YUZpZWxkLCBhZ2dyZWdhdGVGdW5jdGlvblR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1thZ2dyZWdhdGVEYXRhRmllbGRdO1xuXG4gICAgICAgIHN3aXRjaCAoYWdncmVnYXRlRnVuY3Rpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSBcInN1bVwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gdmFsdWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IHZhbHVlO1xuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF0gKz0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgICBNYXRoLm1pbihncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjb3VudFwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEZpbmFsaXplIGF2ZXJhZ2VzXG4gICAgT2JqZWN0LnZhbHVlcyhncm91cE1hcCkuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICBhZ2dyZWdhdGlvbkNvbmZpZy5mb3JFYWNoKCh7IGFnZ3JlZ2F0ZURhdGFGaWVsZCwgYWdncmVnYXRlRnVuY3Rpb25UeXBlIH0pID0+IHtcbiAgICAgICAgaWYgKGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSA9PT0gXCJhdmdcIikge1xuICAgICAgICAgIGdyb3VwW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgZ3JvdXBbYWdncmVnYXRlRGF0YUZpZWxkXSAvIGdyb3VwW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF07XG4gICAgICAgICAgZGVsZXRlIGdyb3VwW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ3JvdXBNYXApO1xuICB9XG5cbiAgbG9hZEdvb2dsZUNoYXJ0cygpIHtcbiAgICBnb29nbGUuY2hhcnRzLmxvYWQoXCJjdXJyZW50XCIsIHtcbiAgICAgIHBhY2thZ2VzOiBbdGhpcy5jaGFydFR5cGVdLFxuICAgIH0pO1xuICAgIGdvb2dsZS5jaGFydHMuc2V0T25Mb2FkQ2FsbGJhY2sodGhpcy5kcmF3Q2hhcnQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBkcmF3Q2hhcnQoKSB7XG4gICAgY29uc3QgZGF0YSA9IGdvb2dsZS52aXN1YWxpemF0aW9uLmFycmF5VG9EYXRhVGFibGUodGhpcy5jaGFyRGF0YSk7XG5cbiAgICAvLyBjb25zdCBvcHRpb25zID0ge1xuICAgIC8vICAgcmVnaW9uOiAnVVNBJyxcbiAgICAvLyAgIGRpc3BsYXlNb2RlOiAnbWFya2VycycsXG4gICAgLy8gICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFjZ3JvdW5kQ29sb3IsXG4gICAgLy8gICB0b29sdGlwOiB7IGlzSHRtbDogdHJ1ZSB9LFxuICAgIC8vICAgY29sb3JBeGlzOiB7IGNvbG9yczogdGhpcy5tYXBDb2xvcnMgfVxuICAgIC8vIH07XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uQ29uZmlnKCk7XG5cbiAgICBjb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5HZW9DaGFydChcbiAgICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudFxuICAgICk7XG4gICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuY2hhcnRIZWlnaHQ7XG4gICAgY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldFRvb2x0aXAoZGF0YSkge1xuICAgIGxldCB0b29sVGlwRGF0YSA9IFwiXCI7XG4gICAgdGhpcy50b290VGlwQ29sdW1uLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPlwiICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIFwiOjwvYj48L2Rpdj4gXCIgK1xuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5yb3VuZE9mZlRpbGxUd28oZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0sIDIpICtcbiAgICAgICAgICBcIjxiciAvPlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBcIjxkaXYgY2xhc3M9J2lubGluZSc+PGI+XCIgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgXCI6PC9iPjwvZGl2PiBcIiArXG4gICAgICAgICAgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gK1xuICAgICAgICAgIFwiPGJyIC8+XCI7XG4gICAgICB9XG5cblxuICAgIH0pO1xuICAgIHJldHVybiB0b29sVGlwRGF0YTtcbiAgfVxuXG4gIGdldE9wdGlvbkNvbmZpZygpIHtcbiAgICBpZiAodGhpcy5yZWdpb24gPT0gJ2NpdHknKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uQ29kZSxcbiAgICAgICAgZGlzcGxheU1vZGU6ICdtYXJrZXJzJyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2dyb3VuZENvbG9yLFxuICAgICAgICB0b29sdGlwOiB7IGlzSHRtbDogdHJ1ZSB9LFxuICAgICAgICBjb2xvckF4aXM6IHsgY29sb3JzOiB0aGlzLm1hcENvbG9ycyB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNncm91bmRDb2xvcixcbiAgICAgICAgdG9vbHRpcDogeyBpc0h0bWw6IHRydWUgfSxcbiAgICAgICAgY29sb3JBeGlzOiB7IGNvbG9yczogdGhpcy5tYXBDb2xvcnMgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gIEdlbyBNYXAgZW5kIC8vXG5cbiAgLy8gSGVhdCBNYXAgc3RhcnQgLy9cbiAgaW5pdGlhbGl6ZU1hcCgpOiB2b2lkIHtcbiAgICBjb25zdCBtYXBPcHRpb25zID0gdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwO1xuICAgIC8vIHtcbiAgICAvLyAgIGNlbnRlcjogeyBsYXQ6IDM3LjA5MDIsIGxuZzogLTk1LjcxMjkgfSwgLy8gQ2VudGVyIG9mIHRoZSBVU0FcbiAgICAvLyAgIHpvb206IDUsXG4gICAgLy8gfTtcblxuICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJidWJibGVNYXBcIikge1xuICAgICAgbWFwT3B0aW9uc1tcInN0eWxlc1wiXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlOiBcImFsbFwiLFxuICAgICAgICAgIHN0eWxlcnM6IFtcbiAgICAgICAgICAgIHsgc2F0dXJhdGlvbjogLTEwMCB9LFxuICAgICAgICAgICAgeyBsaWdodG5lc3M6IDcwIH0sXG4gICAgICAgICAgICB7IHZpc2liaWxpdHk6IFwic2ltcGxpZmllZFwiIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlOiBcImFkbWluaXN0cmF0aXZlLmNvdW50cnlcIixcbiAgICAgICAgICBlbGVtZW50VHlwZTogXCJsYWJlbHNcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogLTMwIH0sIC8vIERhcmtlbiBsYWJlbHMgZnVydGhlclxuICAgICAgICAgICAgeyB2aXNpYmlsaXR5OiBcIm9uXCIgfSxcbiAgICAgICAgICAgIHsgZm9udFdlaWdodDogXCJib2xkXCIgfSwgLy8gTWFrZSBsYWJlbHMgYm9sZFxuICAgICAgICAgICAgeyBmb250U2l6ZTogXCIxMnB4XCIgfSwgLy8gSW5jcmVhc2UgZm9udCBzaXplXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlOiBcImFkbWluaXN0cmF0aXZlLmNvdW50cnlcIixcbiAgICAgICAgICBlbGVtZW50VHlwZTogXCJnZW9tZXRyeS5zdHJva2VcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogLTQwIH0sIC8vIERhcmtlbiBib3JkZXJzIHNpZ25pZmljYW50bHlcbiAgICAgICAgICAgIHsgd2VpZ2h0OiAxLjUgfSwgLy8gSW5jcmVhc2UgYm9yZGVyIHRoaWNrbmVzc1xuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXG4gICAgICAgICAgZWxlbWVudFR5cGU6IFwiZ2VvbWV0cnkuZmlsbFwiLFxuICAgICAgICAgIHN0eWxlcnM6IFtcbiAgICAgICAgICAgIHsgbGlnaHRuZXNzOiA5MCB9LCAvLyBLZWVwIGZpbGwgdmVyeSBsaWdodFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cblxuICAgIHRoaXMubWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChcbiAgICAgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVnaW9uc19kaXZcIikgLFxuICAgICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LFxuICAgICAgbWFwT3B0aW9uc1xuICAgICk7XG4gICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuY2hhcnRIZWlnaHQ7XG4gIH1cblxuICAvLyBBZGQgbWFya2VycyB0byB0aGUgbWFwXG4gIGFkZE1hcmtlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsbmc6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24gPyB7XG4gICAgICAgICAgdXJsOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24sIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGljb24gcGF0aFxuICAgICAgICAgIHNjYWxlZFNpemU6IHtcbiAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSA6ICcnLFxuICAgICAgICAvLyB0b29sdGlwVGV4dDpcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgLy8gdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgICAgdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ib3VuZHMuZXh0ZW5kKG1hcmtlci5nZXRQb3NpdGlvbigpKTtcbiAgICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XG5cbiAgICAgIC8vIEFkZCBhbiBpbmZvIHdpbmRvd1xuICAgICAgbGV0IHN0cmluZ1dpdGhvdXRRdW90ZXMgPSB0aGlzLmdldEluZm9XaW5kb0RhdGEobG9jYXRpb24pO1xuICAgICAgY29uc3QgaW5mb1dJbmRvd0RhdGEgPSB0aGlzLmdldEluZm9XaW5kb0RhdGEobG9jYXRpb24pO1xuXG4gICAgICBjb25zdCBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xuICAgICAgICAvLyBjb250ZW50OiBpbmZvV0luZG93RGF0YSxcbiAgICAgICAgY29udGVudDogYDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMjBweDtcIj5cbiAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgIDwvZGl2PmAsXG4gICAgICB9KTtcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgY29udGVudDogYDxkaXYgc3R5bGU9XCIgIGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7Y29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+PGg0PiR7XG4gICAgICAvLyAgICAgbG9jYXRpb24uY2l0eVxuICAgICAgLy8gICB9PC9oND48cD5Ub3RhbCBTYWxlczogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50LnRvRml4ZWQoXG4gICAgICAvLyAgICAgMlxuICAgICAgLy8gICApfTwvcD48L2Rpdj5gLFxuICAgICAgLy8gfVxuXG4gICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmZvV2luZG93KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluZm9XaW5kb3cub3Blbih0aGlzLm1hcCwgbWFya2VyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdyA9IGluZm9XaW5kb3c7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcC5maXRCb3VuZHModGhpcy5ib3VuZHMpO1xuXG5cbiAgfVxuXG4gIGdldEluZm9XaW5kb0RhdGEoZGF0YSkge1xuICAgIGxldCB0b29sVGlwRGF0YSA9IGBgO1xuICAgIHRoaXMudG9vdFRpcENvbHVtbi5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgYDxkaXYgY2xhc3M9J2lubGluZSc+PGI+YCArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBgOjwvYj48L2Rpdj4gYCArXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnJvdW5kT2ZmVGlsbFR3byhkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSwgMikgK1xuICAgICAgICAgIGA8YnIgLz5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBgPGRpdiBjbGFzcz0naW5saW5lJz48Yj5gICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIGA6PC9iPjwvZGl2PiBgICtcbiAgICAgICAgICBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSArXG4gICAgICAgICAgYDxiciAvPmA7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvb2xUaXBEYXRhO1xuICB9XG4gIC8vIEhlYXQgTWFwIEVuZCAvL1xuXG4gIC8vaGVhdCBvbmx5IG1hcCBzdGFydCAvL1xuXG4gIGxvYWRHb29nbGVIZWF0T25seU1hcHMoZGF0YSk6IHZvaWQge1xuICAgIHRoaXMuaGVhdG1hcERhdGEgPSBbXTtcbiAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGxldCBsYXRpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICk7XG4gICAgICBsZXQgbG9ndGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICk7XG4gICAgICAvLyBsZXQgd2VpZ2h0ID0gKGNlbGxOb2RlLnByb3BlcnRpZXNbJ1dlaWdodCddICE9IHVuZGVmaW5lZCkgPyBjZWxsTm9kZS5wcm9wZXJ0aWVzWydXZWlnaHQnXSA6IFwiTkFcIjtcbiAgICAgIHRoaXMuaGVhdG1hcERhdGEucHVzaCh7XG4gICAgICAgIGxvY2F0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpXG4gICAgICAgIC8vIHdlaWdodDogcGFyc2VGbG9hdCh3ZWlnaHQpLFxuXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpKTtcbiAgICB9KTtcbiAgICBjb25zdCBtYXBPcHRpb25zID0ge1xuICAgICAgLy8gY2VudGVyOiB7XG4gICAgICAvLyAgIGxhdDogcGFyc2VGbG9hdCh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNlbnRlckxhdGl0dWRlKSxcbiAgICAgIC8vICAgbG5nOiBwYXJzZUZsb2F0KHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY2VudGVyTG9uZ2l0dWRlKSxcbiAgICAgIC8vIH0sXG4gICAgICAvLyB6b29tOiBwYXJzZUZsb2F0KHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuem9vbSlcbiAgICAgIHpvb206IHRoaXMuem9vbVZhbHVGb3JBbGxcbiAgICB9O1xuXG5cblxuXG4gICAgdGhpcy5tYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudCwgbWFwT3B0aW9ucyk7XG4gICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuY2hhcnRIZWlnaHQ7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcbiAgICB0aGlzLmhlYXRtYXAgPSBuZXcgZ29vZ2xlLm1hcHMudmlzdWFsaXphdGlvbi5IZWF0bWFwTGF5ZXIoe1xuICAgICAgZGF0YTogdGhpcy5oZWF0bWFwRGF0YSxcbiAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgfSk7XG5cbiAgfVxuXG5cbiAgLy9oZWF0IG9ubHkgbWFwIGVuZCAvL1xuXG4gIC8vaGVhdCBhbmQgTWFya2VyICBtYXAgU3RhcnQgLy9cbiAgaW5pdGlhbGl6ZUhlYXRXaXRoTWFya2VyTWFwKGRhdGEpIHtcbiAgICAvLyBJbml0aWFsaXplIG1hcFxuICAgIHRoaXMubWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcCh0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIC8vIGNlbnRlcjogeyBsYXQ6IDM3Ljc3NDksIGxuZzogLTEyMi40MTk0IH0sXG4gICAgICB6b29tOiBwYXJzZUZsb2F0KFxuICAgICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnpvb21cbiAgICAgICksXG4gICAgfSk7XG4gICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuY2hhcnRIZWlnaHQ7XG4gICAgLy8gSW5pdGlhbGl6ZSBoZWF0bWFwIGxheWVyXG4gICAgdGhpcy5oZWF0bWFwRGF0YSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcblxuICAgICAgbGV0IGxhdGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgKTtcbiAgICAgIGxldCBsb2d0aXR1ZGUgPSBwYXJzZUZsb2F0KFxuICAgICAgICBlbGVtZW50W3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTG9uZ2l0dWRlXVxuICAgICAgKTtcbiAgICAgIHRoaXMuaGVhdG1hcERhdGEucHVzaCh7XG4gICAgICAgIGxvY2F0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpKTtcbiAgICB9KTtcbiAgICB0aGlzLmhlYXRtYXAgPSBuZXcgZ29vZ2xlLm1hcHMudmlzdWFsaXphdGlvbi5IZWF0bWFwTGF5ZXIoe1xuICAgICAgZGF0YTogdGhpcy5oZWF0bWFwRGF0YSxcbiAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgfSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXJrZXJzXG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsbmc6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24gPyB7XG4gICAgICAgICAgdXJsOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24sIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGljb24gcGF0aFxuICAgICAgICAgIHNjYWxlZFNpemU6IHtcbiAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSA6ICcnLFxuICAgICAgICAvLyB0b29sdGlwVGV4dDpcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgLy8gdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgICAgdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ib3VuZHMuZXh0ZW5kKG1hcmtlci5nZXRQb3NpdGlvbigpKTtcbiAgICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XG5cbiAgICAgIC8vIEFkZCBhbiBpbmZvIHdpbmRvd1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcbiAgICAgIGNvbnN0IGluZm9XSW5kb3dEYXRhID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcbiAgICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+XG4gICAgICAgICAgICAke2luZm9XSW5kb3dEYXRhfVxuICAgICAgICAgIDwvZGl2PmAsXG4gICAgICB9KTtcblxuXG4gICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmZvV2luZG93KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluZm9XaW5kb3cub3Blbih0aGlzLm1hcCwgbWFya2VyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdyA9IGluZm9XaW5kb3c7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcC5maXRCb3VuZHModGhpcy5ib3VuZHMpO1xuXG4gICAgLy8gQWRkIGxpc3RlbmVyIGZvciB6b29tIGNoYW5nZXNcbiAgICB0aGlzLm1hcC5hZGRMaXN0ZW5lcignem9vbV9jaGFuZ2VkJywgKCkgPT4gdGhpcy5oYW5kbGVab29tQ2hhbmdlKCkpO1xuICB9XG5cbiAgaGFuZGxlWm9vbUNoYW5nZSgpIHtcbiAgICBjb25zdCB6b29tTGV2ZWwgPSB0aGlzLm1hcC5nZXRab29tKCk7XG4gICAgaWYgKHpvb21MZXZlbCA8IDUpIHtcbiAgICAgIC8vIFNob3cgaGVhdG1hcCBhbmQgaGlkZSBtYXJrZXJzXG4gICAgICB0aGlzLmhlYXRtYXAuc2V0TWFwKHRoaXMubWFwKTtcbiAgICAgIHRoaXMubWFya2Vycy5mb3JFYWNoKChtYXJrZXIpID0+IG1hcmtlci5zZXRNYXAobnVsbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIaWRlIGhlYXRtYXAgYW5kIHNob3cgbWFya2Vyc1xuICAgICAgdGhpcy5oZWF0bWFwLnNldE1hcChudWxsKTtcbiAgICAgIHRoaXMubWFya2Vycy5mb3JFYWNoKChtYXJrZXIpID0+IG1hcmtlci5zZXRNYXAodGhpcy5tYXApKTtcbiAgICB9XG4gIH1cblxuICAvL2hlYXQgYW5kIE1hcmtlciAgbWFwIEVuZCAvL1xuICAvL0J1YmJsZSBDaGFydCBTdGFydFxuICBhZGRCdWJibGVNYXJrZXJzKCk6IHZvaWQge1xuICAgIHRoaXMucHJlcGFyZUJ1YmJsZURhdGEoKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9ucyk7XG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsbmc6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB7XG4gICAgICAgICAgcGF0aDogZ29vZ2xlLm1hcHMuU3ltYm9sUGF0aC5DSVJDTEUsXG4gICAgICAgICAgc2NhbGU6IE1hdGgucm91bmQobG9jYXRpb24uc2FsZXNfcGVyY2VudGFnZSksIC8vIEFkanVzdCBidWJibGUgc2l6ZVxuICAgICAgICAgIGZpbGxDb2xvcjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVDb2xvcixcbiAgICAgICAgICBmaWxsT3BhY2l0eTogMC42LFxuICAgICAgICAgIHN0cm9rZVdlaWdodDogMCxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgICAgIH1gLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobWFya2VyLmdldFBvc2l0aW9uKCkpO1xuICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG4gICAgICBsZXQgc3RyaW5nV2l0aG91dFF1b3RlcyA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG4gICAgICBjb25zdCBpbmZvV0luZG93RGF0YSA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG5cbiAgICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgIC8vIGNvbnRlbnQ6IGluZm9XSW5kb3dEYXRhLFxuICAgICAgICBjb250ZW50OiBgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPlxuICAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG5cbiAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZm9XaW5kb3cpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwLCBtYXJrZXIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93ID0gaW5mb1dpbmRvdztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG4gIH1cblxuICBwcmVwYXJlQnViYmxlRGF0YSgpIHtcbiAgICAvLyBTdGVwIDE6IEZpbmQgbWluIGFuZCBtYXggdG90YWxfc2FsZXNfYW1vdW50XG4gICAgY29uc3QgbWluU2FsZXMgPSBNYXRoLm1pbihcbiAgICAgIC4uLnRoaXMubG9jYXRpb25zLm1hcChcbiAgICAgICAgKGQpID0+IGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgKVxuICAgICk7XG4gICAgY29uc3QgbWF4U2FsZXMgPSBNYXRoLm1heChcbiAgICAgIC4uLnRoaXMubG9jYXRpb25zLm1hcChcbiAgICAgICAgKGQpID0+IGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBTdGVwIDI6IERlZmluZSBtaW4gYW5kIG1heCBwZXJjZW50YWdlIHZhbHVlc1xuICAgIGNvbnN0IG1pblBlcmNlbnRhZ2UgPVxuICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVNaW5pbXVtU2l6ZTtcbiAgICBjb25zdCBtYXhQZXJjZW50YWdlID1cbiAgICAgIHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYnViYmxlTWF4aW11bVNpemU7XG5cbiAgICAvLyBTdGVwIDM6IE5vcm1hbGl6ZSBmdW5jdGlvblxuICAgIGNvbnN0IG5vcm1hbGl6ZSA9ICh2YWx1ZSwgbWluLCBtYXgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICgodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbikpICogKG1heFBlcmNlbnRhZ2UgLSBtaW5QZXJjZW50YWdlKSArXG4gICAgICAgIG1pblBlcmNlbnRhZ2VcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIFN0ZXAgNDogQXNzaWduIGNhbGN1bGF0ZWQgcGVyY2VudGFnZSB0byBlYWNoIG9iamVjdFxuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgIGQuc2FsZXNfcGVyY2VudGFnZSA9IE1hdGgubWluKFxuICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICBub3JtYWxpemUoXG4gICAgICAgICAgICBkW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYWdydW1lbnRWYWx1ZV0sXG4gICAgICAgICAgICBtaW5TYWxlcyxcbiAgICAgICAgICAgIG1heFNhbGVzXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtaW5QZXJjZW50YWdlXG4gICAgICAgICksXG4gICAgICAgIG1heFBlcmNlbnRhZ2VcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgLy9CdWJibGUgQ2hhcnQgRW5kXG5cbiAgLy8gY2hvcm9wbGV0aE1hcCBzdGFydCAvL1xuXG4gIGdldENvbG9yKGNudDogbnVtYmVyLCBzdGFydENvbG9yOiBzdHJpbmcsIGVuZENvbG9yOiBzdHJpbmcsIG1pbkNvdW50OiBudW1iZXIsIG1heENvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChjbnQgPT09IHVuZGVmaW5lZCB8fCBjbnQgPT09IG51bGwgfHwgbWF4Q291bnQgPT09IG1pbkNvdW50KSB7XG4gICAgICByZXR1cm4gJyNjY2NjY2MnO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IHJhdGlvID0gTWF0aC5taW4oXG4gICAgLy8gICBNYXRoLm1heCgoY250IC0gbWluQ291bnQpIC8gKG1heENvdW50IC0gbWluQ291bnQpLCAwKSxcbiAgICAvLyAgIDFcbiAgICAvLyApO1xuXG4gICAgY29uc3QgcmF3UmF0aW8gPVxuICAgICAgKGNudCAtIG1pbkNvdW50KSAvIChtYXhDb3VudCAtIG1pbkNvdW50KTtcblxuICAgIC8vIGdhbW1hIDwgMSBleGFnZ2VyYXRlcyBkaWZmZXJlbmNlc1xuICAgIGNvbnN0IGdhbW1hID0gMC4yOyAvLyB0cnkgMC40IOKAkyAwLjdcbiAgICBjb25zdCByYXRpbyA9IE1hdGgucG93KFxuICAgICAgTWF0aC5taW4oTWF0aC5tYXgocmF3UmF0aW8sIDApLCAxKSxcbiAgICAgIGdhbW1hXG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5oZXhUb1JnYihzdGFydENvbG9yKTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLmhleFRvUmdiKGVuZENvbG9yKTtcblxuICAgIGNvbnN0IHIgPSB0aGlzLmxlcnAoc3RhcnQuciwgZW5kLnIsIHJhdGlvKTtcbiAgICBjb25zdCBnID0gdGhpcy5sZXJwKHN0YXJ0LmcsIGVuZC5nLCByYXRpbyk7XG4gICAgY29uc3QgYiA9IHRoaXMubGVycChzdGFydC5iLCBlbmQuYiwgcmF0aW8pO1xuXG4gICAgLy8gY29uc29sZS5sb2coYENvbG9yIGZvciBjb3VudCAke2NudH06IHJnYigke3J9LCAke2d9LCAke2J9KWApO1xuXG4gICAgcmV0dXJuIGByZ2IoJHtyfSwgJHtnfSwgJHtifSlgO1xuICB9XG5cbiAgbGVycChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgcmF0aW86IG51bWJlcikge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIHJhdGlvKTtcbiAgfVxuICBoZXhUb1JnYihoZXg6IHN0cmluZykge1xuICAgIGNvbnN0IGNsZWFuSGV4ID0gaGV4LnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgY29uc3QgYmlnaW50ID0gcGFyc2VJbnQoY2xlYW5IZXgsIDE2KTtcblxuICAgIHJldHVybiB7XG4gICAgICByOiAoYmlnaW50ID4+IDE2KSAmIDI1NSxcbiAgICAgIGc6IChiaWdpbnQgPj4gOCkgJiAyNTUsXG4gICAgICBiOiBiaWdpbnQgJiAyNTVcbiAgICB9O1xuICB9XG5cblxuICBpbml0Q2hvcm9wbGV0aE1hcChjaGFydENvbmZpZzogYW55LCB0b290VGlwQ29sdW1uOiBhbnlbXSk6IHZvaWQge1xuXG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7IC8vIPCfkYggU1RBUlQgbG9hZGVyXG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvb2dsZW1hcFwiKSBhcyBIVE1MRWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgY2VudGVyOiB7XG4gICAgICAgICAgbGF0OiBwYXJzZUZsb2F0KGNoYXJ0Q29uZmlnLmNlbnRlckxhdCksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KGNoYXJ0Q29uZmlnLmNlbnRlckxuZylcbiAgICAgICAgfSxcbiAgICAgICAgem9vbTogcGFyc2VJbnQoY2hhcnRDb25maWcuem9vbSlcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8g8J+UpSBMaXN0ZW4gb25jZSBmb3IgR2VvSlNPTiBsb2FkIGNvbXBsZXRpb25cbiAgICBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lck9uY2UoXG4gICAgICB0aGlzLm1hcC5kYXRhLFxuICAgICAgJ2FkZGZlYXR1cmUnLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcGx5Q2hvcm9wbGV0aFN0eWxlcyhjaGFydENvbmZpZyk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFwLmRhdGEubG9hZEdlb0pzb24oY2hhcnRDb25maWcuZ2pzb25GaWxlUGF0aCk7XG5cbiAgICAvLyB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgLy8gICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvb2dsZW1hcFwiKSBhcyBIVE1MRWxlbWVudCxcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgY2VudGVyOiB7IGxhdDogcGFyc2VGbG9hdChjaGFydENvbmZpZy5jZW50ZXJMYXQpLCBsbmc6IHBhcnNlRmxvYXQoY2hhcnRDb25maWcuY2VudGVyTG5nKSB9LFxuICAgIC8vICAgICB6b29tOiBwYXJzZUludChjaGFydENvbmZpZy56b29tKVxuICAgIC8vICAgfVxuICAgIC8vICk7XG5cblxuICAgIC8vIHRoaXMubWFwLmRhdGEubG9hZEdlb0pzb24oY2hhcnRDb25maWcuZ2pzb25GaWxlUGF0aCk7XG4gICAgLy8gdGhpcy5tYXAuZGF0YS5zZXRTdHlsZShmZWF0dXJlID0+IHRoaXMuZ2V0RmVhdHVyZVN0eWxlKGZlYXR1cmUsIGNoYXJ0Q29uZmlnLCB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQsIHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCkpO1xuXG4gICAgLy8gY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KCk7XG5cbiAgICAvLyB0aGlzLm1hcC5kYXRhLmFkZExpc3RlbmVyKCdtb3VzZW92ZXInLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIC8vICAgY29uc3QgZGlzdHJpY3QgPSBldmVudC5mZWF0dXJlLmdldFByb3BlcnR5KCdkJyk7XG4gICAgLy8gICBjb25zdCBrZXkgPSBkaXN0cmljdD8udG9VcHBlckNhc2UoKTtcblxuICAgIC8vICAgY29uc3Qgcm93ID0gdGhpcy5jaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UuZ2V0KGtleSk7XG5cbiAgICAvLyAgIGluZm9XaW5kb3cuc2V0Q29udGVudChcbiAgICAvLyAgICAgdGhpcy5idWlsZEluZm9XaW5kb3dDb250ZW50KGRpc3RyaWN0LCByb3csIHRvb3RUaXBDb2x1bW4pXG4gICAgLy8gICApO1xuXG4gICAgLy8gICBpbmZvV2luZG93LnNldFBvc2l0aW9uKGV2ZW50LmxhdExuZyk7XG4gICAgLy8gICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXApO1xuICAgIC8vIH0pO1xuXG4gICAgLy8gdGhpcy5tYXAuZGF0YS5hZGRMaXN0ZW5lcignbW91c2VvdXQnLCAoKSA9PiBpbmZvV2luZG93LmNsb3NlKCkpO1xuICB9XG5cbiAgYXBwbHlDaG9yb3BsZXRoU3R5bGVzKGNoYXJ0Q29uZmlnOiBhbnkpIHtcbiAgICB0aGlzLm1hcC5kYXRhLnNldFN0eWxlKGZlYXR1cmUgPT5cbiAgICAgIHRoaXMuZ2V0RmVhdHVyZVN0eWxlKGZlYXR1cmUsIGNoYXJ0Q29uZmlnLCB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQsIHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudClcbiAgICApO1xuXG4gICAgLy8g4pyFIEV2ZXJ5dGhpbmcgcmVhZHlcbiAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gIH1cblxuXG5cbiAgYnVpbGRJbmZvV2luZG93Q29udGVudChkaXN0cmljdDogc3RyaW5nLCByb3c6IGFueSwgdG9vdFRpcENvbHVtbjogYW55W10pOiBzdHJpbmcge1xuXG4gICAgY29uc3Qgcm93cyA9IHRvb3RUaXBDb2x1bW4ubWFwKGMgPT4gYFxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO1wiPlxuICAgICAgPHNwYW4+JHtjLmNhcHRpb259PC9zcGFuPlxuICAgICAgPHN0cm9uZz4ke3Jvdz8uW2MuZGF0YUZpZWxkXSA/PyAnTm8gZGF0YSd9PC9zdHJvbmc+XG4gICAgPC9kaXY+XG4gIGApLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuIGBcbiAgICA8ZGl2IHN0eWxlPVwiXG4gICAgICBjb2xvcjojMDAwO1xuICAgICAgYmFja2dyb3VuZDojZmZmO1xuICAgICAgcGFkZGluZzo4cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZToxM3B4O1xuICAgICAgbWluLXdpZHRoOjE1MHB4O1xuICAgIFwiPlxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDsgbWFyZ2luLWJvdHRvbTo2cHg7XCI+XG4gICAgICAgICR7ZGlzdHJpY3R9IDogXG4gICAgICA8L2Rpdj5cbiAgICAgICR7cm93c31cbiAgICA8L2Rpdj5cbiAgYDtcbiAgfVxuXG5cbiAgdXBkYXRlQ2hvcm9wbGV0aE1hcERhdGEoeWVhcjogc3RyaW5nLCBjaGFydENvbmZpZzogYW55KSB7XG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5jbGVhcigpO1xuICAgIHRoaXMuY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLmNsZWFyKCk7XG4gICAgbGV0IG1pbkNob3JvcGxldGhNYXBDbnQgPSBJbmZpbml0eTtcbiAgICBsZXQgbWF4Q2hvcm9wbGV0aE1hcENudCA9IC1JbmZpbml0eTtcbiAgICBcblxuICAgIGNvbnN0IHZhbHVlRmllbGQgPSBjaGFydENvbmZpZy5jaGFydF9jb25maWcuZmluZChcbiAgICAgIGMgPT4gYy5kaXNwbGF5Rm9yID09PSAnbWFwJ1xuICAgICk/LmRhdGFGaWVsZDtcblxuICAgIHRoaXMuY2hvcm9wbGV0aE1hcERhdGFcbiAgICAgIC5maWx0ZXIoZCA9PiBkW2NoYXJ0Q29uZmlnLnNsaWRlclZhbHVlRmllbGRdID09PSB5ZWFyKVxuICAgICAgLmZvckVhY2goZCA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGQuZGlzdHJpY3QudG9VcHBlckNhc2UoKTtcbiAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5zZXQoa2V5LCBkW3ZhbHVlRmllbGRdKTtcbiAgICAgICAgdGhpcy5jaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2Uuc2V0KGtleSwgZCk7XG5cbiAgICAgICAgbWluQ2hvcm9wbGV0aE1hcENudCA9IE1hdGgubWluKG1pbkNob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICBtYXhDaG9yb3BsZXRoTWFwQ250ID0gTWF0aC5tYXgobWF4Q2hvcm9wbGV0aE1hcENudCwgZFt2YWx1ZUZpZWxkXSk7XG4gICAgICB9KTtcblxuXG4gICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgICAgdGhpcy5tYXAuZGF0YS5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5nZXRGZWF0dXJlU3R5bGUoZmVhdHVyZSwgY2hhcnRDb25maWcsIHRoaXMubWluQ2hvcm9wbGV0aE1hcENudCwgdGhpcy5tYXhDaG9yb3BsZXRoTWFwQ250KTtcblxuICAgICAgICAgIHRoaXMubWFwLmRhdGEub3ZlcnJpZGVTdHlsZShmZWF0dXJlLCBzdHlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgZ2V0RmVhdHVyZVN0eWxlKGZlYXR1cmU6IGFueSwgY2hhcnRDb25maWc6IGFueSwgbWluQ291bnQsIG1heENvdW50KSB7XG4gICAgY29uc3QgZGlzdHJpY3ROYW1lID0gZmVhdHVyZS5nZXRQcm9wZXJ0eSgnZCcpPy50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGNudCA9IHRoaXMuY2hvcm9wbGV0aE1hcERhdGFTb3VyY2UuZ2V0KGRpc3RyaWN0TmFtZSk7XG4gICAgY29uc29sZS5sb2coZGlzdHJpY3ROYW1lLCBjbnQsIHRoaXMuZ2V0Q29sb3IoY250LCBjaGFydENvbmZpZy5jb2xvck9uZSwgY2hhcnRDb25maWcuY29sb3JUd28sIG1pbkNvdW50LCBtYXhDb3VudCkpO1xuICAgIHJldHVybiB7XG4gICAgICBmaWxsQ29sb3I6IHRoaXMuZ2V0Q29sb3IoY250LCBjaGFydENvbmZpZy5jb2xvck9uZSwgY2hhcnRDb25maWcuY29sb3JUd28sIG1pbkNvdW50LCBtYXhDb3VudCksXG4gICAgICBzdHJva2VDb2xvcjogJyM1NTUnLFxuICAgICAgc3Ryb2tlV2VpZ2h0OiAxLFxuICAgICAgZmlsbE9wYWNpdHk6IDAuNzVcbiAgICB9O1xuICB9XG5cbiAgLy8gY2hvcm9wbGV0aE1hcCBzdGFydCAvL1xuXG5cblxuXG4gIHRvZ2dsZVBsYXkoKSB7XG4gICAgaWYgKHRoaXMuaXNQbGF5aW5nKSB7XG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxheSgpO1xuICAgIH1cbiAgfVxuXG4gIHBsYXkoKSB7XG4gICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xuICAgIHRoaXMucGxheUludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCA8IHRoaXMuYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCsrO1xuICAgICAgICB0aGlzLnVwZGF0ZVllYXJCeUluZGV4KHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5jaG9yb3BsZXRoTWFwc2xpZGVTcGVlZCk7XG5cbiAgfVxuXG4gIHBhdXNlKCkge1xuICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7XG4gICAgaWYgKHRoaXMucGxheUludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucGxheUludGVydmFsKTtcbiAgICAgIHRoaXMucGxheUludGVydmFsID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXN0YXJ0KCkge1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXggPSAwO1xuICAgIHRoaXMudXBkYXRlWWVhckJ5SW5kZXgodGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4KTtcbiAgfVxuXG4gIG9uWWVhckNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5wYXVzZSgpOyAvLyBzdG9wIGF1dG9wbGF5IHdoZW4gdXNlciBtb3ZlcyBzbGlkZXJcbiAgICB0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXggPSArZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMudXBkYXRlWWVhckJ5SW5kZXgodGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4KTtcbiAgfVxuXG4gIHNldFllYXJCeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy51cGRhdGVZZWFyQnlJbmRleChpbmRleCk7XG4gIH1cblxuICB1cGRhdGVZZWFyQnlJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUgPSB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXNbaW5kZXhdO1xuICAgIHRoaXMudXBkYXRlQ2hvcm9wbGV0aE1hcERhdGEodGhpcy5zZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUsIHRoaXMuY2hvcm9wbGV0aE1hcENoYXJ0Q29uZmlnKTtcbiAgfVxuXG5cbiAgLy8gc2V0WWVhckJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAvLyAgIHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlID0gdGhpcy5hbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzW2luZGV4XTtcbiAgLy8gICB0aGlzLnVwZGF0ZUNob3JvcGxldGhNYXBEYXRhKHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlLCB0aGlzLmNob3JvcGxldGhNYXBDaGFydENvbmZpZyk7XG4gIC8vIH1cblxuICAvLyBvblllYXJDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gIC8vICAgY29uc3QgaW5kZXggPSArKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgLy8gICB0aGlzLnNldFllYXJCeUluZGV4KGluZGV4KTtcbiAgLy8gfVxuXG5cblxufVxuIiwiPGRpdiBjbGFzcz1cIm14LTIgYmctZ3JheS04MDBcIj5cbiAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBiZy1ncmF5LTgwMCBwLTJcIj5cbiAgICAgIDxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+IC0tPlxuXG5cbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctZnVsbFwiPlxuXG4gICAgPGRpdiBpZD1cInJlZ2lvbnNfZGl2XCIgI2dvb2dsTWFwIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2Rpdj5cbiAgICA8ZGl2IGlkPVwiZ29vZ2xlbWFwXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0SGVpZ2h0XCI+PC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkZXJcIiBjbGFzcz1cImFic29sdXRlIGluc2V0LTAgei01MCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibGFjay80MCBiYWNrZHJvcC1ibHVyLXNtXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibG9hZGVyXCI+PC9kaXY+XG4gICAgPC9kaXY+XG5cblxuXG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcGItMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cIiBteC1hdXRvIHctZnVsbCBtdC0zXCIgKm5nSWY9XCJpc1JhbmdlU2xpZGVyVmlzaWJsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTJcIj5cblxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0ZXh0LXdoaXRlIHB4LTMgcHktMiByb3VuZGVkIGJnLWdyYXktODAwIGhvdmVyOmJnLWdyYXktNzAwXCIgKGNsaWNrKT1cInRvZ2dsZVBsYXkoKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIFtuZ0NsYXNzXT1cImlzUGxheWluZyA/ICdmYS1wYXVzZScgOiAnZmEtcGxheSdcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzcGFjZS14LTIgdGV4dC1zbSBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB5ZWFyIG9mIGFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBweC0yIHB5LTEgcm91bmRlZC1tZCB0cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2JnLWJsYWNrIHRleHQtd2hpdGUgc2hhZG93JzogeWVhciA9PT0gc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlLFxuICAgICAgICAgICAgJ3RleHQtZ3JheS0zMDAgaG92ZXI6dGV4dC13aGl0ZSc6IHllYXIgIT09IHNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZVxuICAgICAgICAgIH1cIiAoY2xpY2spPVwic2V0WWVhckJ5SW5kZXgoaSlcIj5cbiAgICAgICAgICAgICAgICB7eyB5ZWFyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRleHQtd2hpdGUgcHgtMyBweS0yIHJvdW5kZWQgYmctZ3JheS04MDAgaG92ZXI6YmctZ3JheS03MDBcIiAoY2xpY2spPVwicmVzdGFydCgpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIGNsYXNzPVwidy1mdWxsIGgtMiByb3VuZGVkLWxnIGFwcGVhcmFuY2Utbm9uZSBjdXJzb3ItcG9pbnRlclxuICAgICAgICAgICBiZy1ncmFkaWVudC10by1yIGZyb20tZ3JlZW4tNDAwIHZpYS15ZWxsb3ctNDAwIHRvLXJlZC01MDBcIiBbbWluXT1cIjBcIlxuICAgICAgICAgIFttYXhdPVwiYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlcy5sZW5ndGggLSAxXCIgW3ZhbHVlXT1cImNob3JvcGxldGhNYXBDdXJyZW50SW5kZXhcIlxuICAgICAgICAgIChpbnB1dCk9XCJvblllYXJDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgICA8L2Rpdj5cblxuXG5cblxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG5cblxuXG5cbjwvZGl2PiJdfQ==
@@ -4124,22 +4124,20 @@ class GammaGeoChartComponent {
4124
4124
  initChoroplethMap(chartConfig, tootTipColumn) {
4125
4125
  this.isLoader = true;
4126
4126
  this.map = new google.maps.Map(document.getElementById("googlemap"), {
4127
- center: { lat: parseFloat(chartConfig.centerLat), lng: parseFloat(chartConfig.centerLng) },
4127
+ center: {
4128
+ lat: parseFloat(chartConfig.centerLat),
4129
+ lng: parseFloat(chartConfig.centerLng)
4130
+ },
4128
4131
  zoom: parseInt(chartConfig.zoom)
4129
4132
  });
4133
+ google.maps.event.addListenerOnce(this.map.data, 'addfeature', () => {
4134
+ this.applyChoroplethStyles(chartConfig);
4135
+ });
4130
4136
  this.map.data.loadGeoJson(chartConfig.gjsonFilePath);
4137
+ }
4138
+ applyChoroplethStyles(chartConfig) {
4131
4139
  this.map.data.setStyle(feature => this.getFeatureStyle(feature, chartConfig, this.minChoroplethMapCnt, this.maxChoroplethMapCnt));
4132
- const infoWindow = new google.maps.InfoWindow();
4133
- this.map.data.addListener('mouseover', (event) => {
4134
- const district = event.feature.getProperty('d');
4135
- const key = district === null || district === void 0 ? void 0 : district.toUpperCase();
4136
- const row = this.choroplethTooltipDataSource.get(key);
4137
- infoWindow.setContent(this.buildInfoWindowContent(district, row, tootTipColumn));
4138
- infoWindow.setPosition(event.latLng);
4139
- infoWindow.open(this.map);
4140
- });
4141
4140
  this.isLoader = false;
4142
- this.map.data.addListener('mouseout', () => infoWindow.close());
4143
4141
  }
4144
4142
  buildInfoWindowContent(district, row, tootTipColumn) {
4145
4143
  const rows = tootTipColumn.map(c => {