ngx-hana-nameserver-history-viewer 1.1.9-9.8.beta → 1.2.0-9.8.beta

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.
@@ -62,19 +62,6 @@ export class NameServerHistoryComponent {
62
62
  this.stepShowChart = false;
63
63
  this.searchType = SearchType.searchAll;
64
64
  }
65
- ngOnInit() {
66
- // this.timezone = this.defaultTimezone;
67
- this.onResize();
68
- // init items' status
69
- // reset chart button will be disable by default later, only be enabled after zoomed
70
- this._toggleItems([
71
- { id: HtmlElement.chartArea, status: false },
72
- { id: HtmlElement.readFileProgress, status: false },
73
- { id: HtmlElement.showChartButton, status: false },
74
- { id: HtmlElement.loadPortsButton, status: true },
75
- { id: HtmlElement.resetChartButton, status: false }
76
- ]);
77
- }
78
65
  async ngOnChanges(changes) {
79
66
  const fbc = changes.fileBuffer;
80
67
  if (fbc && fbc.currentValue && fbc.currentValue !== fbc.previousValue) {
@@ -83,15 +70,26 @@ export class NameServerHistoryComponent {
83
70
  await this.fileSelected(simulatedEvent);
84
71
  this.port = undefined; // clear the port selection
85
72
  if (this.autoDisplay) {
86
- this.onResize(); // update the size, otherwise there may have a scrollbar (because of the toast) if auto display is set to true
87
73
  this.showChart();
88
74
  }
89
75
  }
90
76
  }
77
+ ngAfterViewInit() {
78
+ // init items' status
79
+ // reset chart button will be disable by default later, only be enabled after zoomed
80
+ this._toggleItems([
81
+ { id: HtmlElement.chartArea, status: false },
82
+ { id: HtmlElement.readFileProgress, status: false },
83
+ { id: HtmlElement.showChartButton, status: false },
84
+ { id: HtmlElement.loadPortsButton, status: true },
85
+ { id: HtmlElement.resetChartButton, status: false }
86
+ ]);
87
+ this.onResize(); // update the size, otherwise there may have a scrollbar (because of the toast) if auto display is set to true
88
+ }
91
89
  /**
92
- * Reset Chart to initial status
93
- * If legend is already selected/unselected from the list, it wouldn't be restored.
94
- */
90
+ * Reset Chart to initial status
91
+ * If legend is already selected/unselected from the list, it wouldn't be restored.
92
+ */
95
93
  resetChart() {
96
94
  this._toggleItems([{ id: HtmlElement.resetChartButton, status: false }]);
97
95
  if (this.tableSource && this._selection) {
@@ -554,4 +552,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
554
552
  }], autoDisplay: [{
555
553
  type: Input
556
554
  }] } });
557
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBb0MsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLEtBQUssRUFDTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixZQUFZLEVBQ1osYUFBYSxFQUNiLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixVQUFVLEVBQ1gsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBZ0UsTUFBTSxVQUFVLENBQUM7QUFDekgsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5FLE9BQU8sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sNkJBQTZCLENBQUM7QUFDckMsT0FBTyx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBRS9CLElBQUssVUFJSjtBQUpELFdBQUssVUFBVTtJQUNiLHlEQUEyQyxDQUFBO0lBQzNDLHFDQUF1QixDQUFBO0lBQ3ZCLG1EQUFxQyxDQUFBO0FBQ3ZDLENB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RCxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHtcclxuICBzZXRDaGFydEhlaWdodCxcclxuICBzbGVlcCxcclxuICBpc0VtcHR5RGF0YSxcclxuICBnZXREaXNwbGF5UG9ydCxcclxuICBnZXRGaWxlRnJvbUlucHV0LFxyXG4gIGlzU2FtZUZpbGUsXHJcbiAgZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSxcclxuICBnZXRGaWxlRnJvbURyb3AsXHJcbiAgZ2V0UmVhbFBvcnRzLFxyXG4gIGdldFRpbWVTdHJpbmcsXHJcbiAgcHJpbnRQcm9jZXNzZWRUaW1lLFxyXG4gIGdldFRpbWVSYW5nZVN0cmluZyxcclxuICBnZW5lcmF0ZVBvcnRzLFxyXG4gIGdldERlZmF1bHRUaW1lem9uZSxcclxuICBibG9iVG9GaWxlXHJcbn0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBBYm9ydCwgQWxlcnQsIEh0bWxFbGVtZW50LCBJdGVtLCBDaGFydENvbnRlbnREYXRhLCBDaGFydENvbnRlbnRIZWFkZXIsIENoYXJ0Q29udGVudFRpbWUsIFBvcnQgfSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IEZpbGVTZXJ2aWNlLCBDaGFydFNlcnZpY2UsIFVJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuXHJcbmltcG9ydCAnaGFtbWVyanMnO1xyXG5pbXBvcnQgJy4uL3V0aWxzL2NoYXJ0anMtZG93bnNhbXBsZSc7XHJcbmltcG9ydCAnLi4vdXRpbHMvY2hhcnRqcy16b29tJztcclxuXHJcbmVudW0gU2VhcmNoVHlwZSB7XHJcbiAgc2VhcmNoV2l0aFN1YkhlYWRlciA9ICdzZWFyY2hXaXRoU3ViSGVhZGVyJyxcclxuICBzZWFyY2hBbGwgPSAnc2VhcmNoQWxsJyxcclxuICBzZWFyY2hJbkNoaWxkcmVuID0gJ3NlYXJjaEluQ2hpbGRyZW4nXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LWhhbmEtbmFtZXNlcnZlci1oaXN0b3J5LXZpZXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25hbWVzZXJ2ZXItaGlzdG9yeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbICcuL25hbWVzZXJ2ZXItaGlzdG9yeS5jb21wb25lbnQuc2NzcycgXSxcclxuICBwcm92aWRlcnM6IFsgRmlsZVNlcnZpY2UsIENoYXJ0U2VydmljZSwgVUlTZXJ2aWNlIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5hbWVTZXJ2ZXJIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ25hbWVzZXJ2ZXJIaXN0b3J5QWxsJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG5hbWVzZXJ2ZXJIaXN0b3J5QWxsUmVmOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ25hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbZGVmYXVsdFNlbGVjdGVkSXRlbXNdXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGVmYXVsdFNlbGVjdGVkSXRlbXM6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW2hpZGVNZWFzdXJlQ29sdW1uc11cclxuICAgKi9cclxuICBASW5wdXQoKSBoaWRlTWVhc3VyZUNvbHVtbnM6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW21heFJvd3NMaW1pdGF0aW9uXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1heFJvd3NMaW1pdGF0aW9uOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbc2hvd0luc3RydWN0aW9uXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNob3dJbnN0cnVjdGlvbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbdGltZXpvbmVdXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGltZXpvbmU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogZmlsZSBidWZmZXIsIHVzZSB0aGlzIGZvciBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGZpbGVCdWZmZXI6IEJsb2I7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZpbGUgbmFtZSBmb3Igc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdHJlYW1Nb2RlRmlsZU5hbWU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYXV0byBkaXNwbGF5IHRoZSBjaGFydCBpbiBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGF1dG9EaXNwbGF5OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBmaWxlOiBGaWxlO1xyXG5cclxuICAvKipcclxuICAgKiB0aW1lIGluZm8gb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIHRpbWU6IENoYXJ0Q29udGVudFRpbWUgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGF0YSBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgZGF0YTogQ2hhcnRDb250ZW50RGF0YSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBoZWFkZXIgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGhlYWRlcjogQ2hhcnRDb250ZW50SGVhZGVyW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogaG9zdCBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgaG9zdCA9ICduYW1lc2VydmVyIGhpc3RvcnkgZmlsZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGFsZXJ0IG1lc3NhZ2UgY29udGVudFxyXG4gICAqL1xyXG4gIGFsZXJ0TWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhbGVydCBtZXNzYWdlIHR5cGVcclxuICAgKi9cclxuICBhbGVydFR5cGU6IEFsZXJ0O1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcG9ydDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhbGwgdGhlIHBvcnRzIGZyb20gdGhlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgcG9ydHM6IFBvcnRbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgdGltZSByYW5nZVxyXG4gICAqL1xyXG4gIGRhdGVUaW1lUmFuZ2U6IERhdGVbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGF0YSBzb3VyY2UgZm9yIHRoZSBzZWxlY3Rpb24gdGFibGUgKHJpZ2h0IHBhcnQgb2YgdGhlIGNoYXJ0KVxyXG4gICAqL1xyXG4gIHRhYmxlU291cmNlOiBhbnlbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogdGhlIHByb2dyZXNzIGZvciByZWFkaW5nIGZpbGVcclxuICAgKi9cclxuICByZWFkUHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZC9kcm9wcGVkIGZpbGUgbmFtZSAoYWJicmV2aWF0aW9uKSwgZnVsbCBmaWxlIG5hbWUgd2lsbCBiZSBzaG93biB2aWEgdGhlIHRvb2x0aXBzXHJcbiAgICovXHJcbiAgYWJicmV2aWF0ZWRGaWxlTmFtZSA9ICdvciBEcm9wIEZpbGUgSGVyZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZvciB0aGUgaW5zdHJ1Y3Rpb24gc3RlcCA0XHJcbiAgICovXHJcbiAgc3RlcFNob3dDaGFydCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIHNob3dpbmcgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgY2hhcnRcclxuICAgKi9cclxuICBzaG93Q2hhcnRGbGFnOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIHNob3dpbmcgdGhlIGZpbGUgcmVhZGluZyBwcm9ncmVzc1xyXG4gICAqL1xyXG4gIHNob3dSZWFkRmlsZVByb2dyZXNzOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIFwiTG9hZFwiIHBvcnRzIGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZUxvYWRQb3J0c0J1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBlbmFibGluZyBcIlNob3dcIiBjaGFydCBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVTaG93Q2hhcnRCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3IgXCJSZXNldFwiIGNoYXJ0IGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZVJlc2V0Q2hhcnRCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIHNlYXJjaFR5cGUgPSBTZWFyY2hUeXBlLnNlYXJjaEFsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBjdXJyZW50IGRpc3BsYXlpbmcgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2N1cnJlbnRDaGFydFBvcnQ6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmaWxlU2VydmljZTogRmlsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHVpU2VydmljZTogVUlTZXJ2aWNlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHRoaXMudGltZXpvbmUgPSB0aGlzLmRlZmF1bHRUaW1lem9uZTtcclxuICAgIHRoaXMub25SZXNpemUoKTtcclxuXHJcbiAgICAvLyBpbml0IGl0ZW1zJyBzdGF0dXNcclxuICAgIC8vIHJlc2V0IGNoYXJ0IGJ1dHRvbiB3aWxsIGJlIGRpc2FibGUgYnkgZGVmYXVsdCBsYXRlciwgb25seSBiZSBlbmFibGVkIGFmdGVyIHpvb21lZFxyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5sb2FkUG9ydHNCdXR0b24sIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBmYmMgPSBjaGFuZ2VzLmZpbGVCdWZmZXI7XHJcbiAgICBpZiAoZmJjICYmIGZiYy5jdXJyZW50VmFsdWUgJiYgZmJjLmN1cnJlbnRWYWx1ZSAhPT0gZmJjLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgLy8gc2ltdWxhdGUgc2VsZWN0aW5nIGZpbGVcclxuICAgICAgY29uc3Qgc2ltdWxhdGVkRXZlbnQgPSB7dGFyZ2V0OiB7ZmlsZXM6IFtibG9iVG9GaWxlKHRoaXMuZmlsZUJ1ZmZlciwgdGhpcy5zdHJlYW1Nb2RlRmlsZU5hbWUpXX19O1xyXG4gICAgICBhd2FpdCB0aGlzLmZpbGVTZWxlY3RlZChzaW11bGF0ZWRFdmVudCk7XHJcbiAgICAgIHRoaXMucG9ydCA9IHVuZGVmaW5lZDsgLy8gY2xlYXIgdGhlIHBvcnQgc2VsZWN0aW9uXHJcbiAgICAgIGlmICh0aGlzLmF1dG9EaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZSgpOyAvLyB1cGRhdGUgdGhlIHNpemUsIG90aGVyd2lzZSB0aGVyZSBtYXkgaGF2ZSBhIHNjcm9sbGJhciAoYmVjYXVzZSBvZiB0aGUgdG9hc3QpIGlmIGF1dG8gZGlzcGxheSBpcyBzZXQgdG8gdHJ1ZVxyXG4gICAgICAgIHRoaXMuc2hvd0NoYXJ0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogUmVzZXQgQ2hhcnQgdG8gaW5pdGlhbCBzdGF0dXNcclxuICAgKiBJZiBsZWdlbmQgaXMgYWxyZWFkeSBzZWxlY3RlZC91bnNlbGVjdGVkIGZyb20gdGhlIGxpc3QsIGl0IHdvdWxkbid0IGJlIHJlc3RvcmVkLlxyXG4gICAqL1xyXG4gIHJlc2V0Q2hhcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRhYmxlU291cmNlICYmIHRoaXMuX3NlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5yZXNldENoYXJ0KHRoaXMudGFibGVTb3VyY2UsIHRoaXMuX3NlbGVjdGlvbilcclxuICAgICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVhZCB0aGUgZmlsZSBhbmQgZGlzcGxheSB0aGUgY2hhcnRcclxuICAgKi9cclxuICBzaG93Q2hhcnQoKTogdm9pZCB7XHJcbiAgICAvLyBhZnRlciBjbGljaywgdGhpcyBidXR0b24gYW5kIHJlc2V0IGJ1dHRvbiBuZWVkcyB0byBiZSBkaXNhYmxlZFxyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICB0aGlzLnN0ZXBTaG93Q2hhcnQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuX2luaXRDaGFydEVudigpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZFRpbWUgPSB0aGlzLl9zZWxlY3RlZFRpbWVSYW5nZTtcclxuICAgICAgaWYgKHNlbGVjdGVkVGltZS5zdGFydFRpbWUgPiBzZWxlY3RlZFRpbWUuZW5kVGltZSkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCAnVGltZSByYW5nZSBpcyBub3QgY29ycmVjdC4nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmlsZSkge1xyXG4gICAgICAgIC8vIGl0J3MgdGltZSBmb3IgZGlzcGxheWluZyB0aGUgcmVhZGluZyBwcm9ncmVzcyBiYXJcclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnRGcm9tRGF0YUZpbGUodGhpcy5maWxlLCBzZWxlY3RlZFRpbWUuc3RhcnRUaW1lLCBzZWxlY3RlZFRpbWUuZW5kVGltZSwgdGhpcy5wb3J0KTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goZSA9PiB7XHJcbiAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKTtcclxuICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogbG9hZCBhbGwgcG9ydHMgZnJvbSBmaWxlXHJcbiAgICovXHJcbiAgbG9hZFBvcnRzKCk6IHZvaWQge1xyXG4gICAgLy8gZG8gY29uZmlybWF0aW9uIGFjdGlvbnNcclxuICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgLy8gYmVmb3JlIHN0YXJ0IGxvYWRpbmcgcG9ydHMgZnJvbSBmaWxlLCBkaXNwbGF5IHByb2dyZXNzIGJhciBhbmQgZGlzYWJsZSB0aGUgc2hvdyBjaGFydCBidXR0b25cclxuICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiB0cnVlfSxcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1cclxuICAgICAgXSk7XHJcbiAgICAgIHRoaXMuX3JlYWRQb3J0c0Zyb21GaWxlKHRoaXMuZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3QgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlLCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyAxIGZpbGUuXHJcbiAgICovXHJcbiAgYXN5bmMgZmlsZVNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9IGdldEZpbGVGcm9tSW5wdXQoZXZlbnQudGFyZ2V0KTtcclxuICAgIGlmIChzZWxlY3RlZEZpbGUpIHtcclxuICAgICAgaWYgKCFpc1NhbWVGaWxlKHRoaXMuZmlsZSwgc2VsZWN0ZWRGaWxlKSkge1xyXG4gICAgICAgIC8vIGluaXQgcG9ydCBzZWxlY3RvclxyXG4gICAgICAgIGF3YWl0IHRoaXMuX2luaXRQb3J0U2VsZWN0b3IoKS5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsZSA9IHNlbGVjdGVkRmlsZTtcclxuICAgICAgICB0aGlzLmFiYnJldmlhdGVkRmlsZU5hbWUgPSBnZXRBYmJyZXZpYXRlZEZpbGVOYW1lKHRoaXMuZmlsZS5uYW1lKTtcclxuICAgICAgICAvLyBhZnRlciBmaWxlIGhhcyBiZWVuIHNlbGVjdGVkLCB0aGUgc2hvdyBjaGFydCBidXR0b24gbmVlZHMgdG8gYmUgZW5hYmxlZFxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBkcm9wIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSwgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMSBmaWxlLlxyXG4gICAqL1xyXG4gIGZpbGVEcm9wcGVkKGV2ZW50OiBhbnkpIHtcclxuICAgIGdldEZpbGVGcm9tRHJvcChldmVudClcclxuICAgICAgLnRoZW4oZmlsZSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc1NhbWVGaWxlKHRoaXMuZmlsZSwgZmlsZSkpIHtcclxuICAgICAgICAgIC8vIGluaXQgcG9ydCBzZWxlY3RvclxyXG4gICAgICAgICAgdGhpcy5maWxlID0gZmlsZTtcclxuICAgICAgICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5hYmJyZXZpYXRlZEZpbGVOYW1lID0gZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSh0aGlzLmZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgIC8vIGFmdGVyIGZpbGUgaGFzIGJlZW4gZHJvcHBlZCwgdGhlIHNob3cgY2hhcnQgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWRcclxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfX0pXHJcbiAgICAgIC50aGVuKCgpID0+ICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IoKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBvbmUgaXRlbSBmcm9tIHNlbGVjdGlvbiB0YWJsZSwgcmVsYXRpdmUgZGF0YXNldCB3aWxsIGJlIHNob3duIG9yIGhpZGRlblxyXG4gICAqL1xyXG4gIHNlbGVjdEl0ZW0oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhYmxlUm93KSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IGV2ZW50LnRhYmxlUm93O1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb24udG9nZ2xlKHJvdyk7XHJcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnRvZ2dsZURhdGFJbkNoYXJ0KHJvdy5LUEksICF0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpKVxyXG4gICAgICAgIC5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWNhbGN1bGF0aW5nIGNoYXJ0IGhlaWdodCB3aGVuIHJlc2l6aW5nXHJcbiAgICovXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICBjb25zdCBuYW1lc2VydmVySGlzdG9yeUFsbEVsZW1lbnQgPSB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5QWxsUmVmID8gdGhpcy5uYW1lc2VydmVySGlzdG9yeUFsbFJlZi5uYXRpdmVFbGVtZW50IDogbnVsbDtcclxuICAgIGNvbnN0IG5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudEVsZW1lbnQgPSB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudFJlZiA/IHRoaXMubmFtZXNlcnZlckhpc3RvcnlDb250ZW50UmVmLm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xyXG4gICAgc2V0Q2hhcnRIZWlnaHQobmFtZXNlcnZlckhpc3RvcnlBbGxFbGVtZW50LCBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN3aXRjaCBwb3J0IGFuZCByZWluaXRpYWxpemUgY2hhcnQsIHRyaWdnZXJlZCBieSBjaGFuZ2luZyB0aGUgcG9ydFxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgc3dpdGNoUG9ydEZvckNoYXJ0KHBvcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHBvcnQgPT09IHRoaXMuX2N1cnJlbnRDaGFydFBvcnQpIHtcclxuICAgICAgLy8gbm90IHRvIHN3aXRjaCBwb3J0LCBiZWNhdXNlIHRoZSByZWxhdGl2ZSBwb3J0IGlzIGRpc3BsYXlpbmcsIG5vIG5lZWQgdG8gcmVuZGVyIHR3aWNlLlxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZmlsZSB8fCAhcG9ydCB8fCBwb3J0Lmxlbmd0aCA9PT0gMCB8fCBwb3J0LnNsaWNlKDEsIDMpID09PSAnKionKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXModGhpcy50aW1lKS5sZW5ndGggPiAxICYmICFnZXRSZWFsUG9ydHMoT2JqZWN0LmtleXModGhpcy50aW1lKS5maWx0ZXIoa2V5ID0+IHRoaXMudGltZVtrZXldKSkuaW5jbHVkZXMocG9ydCkpIHtcclxuICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuaW5mbywgYERhdGEgb2YgcG9ydDoke3BvcnR9IGlzIG5vdCBsb2FkZWQsIHBsZWFzZSBsb2FkIHRoZSBkYXRhIGZpcnN0IGJ5IGNsaWNraW5nIHRoZSBcIlNob3dcIiBidXR0b24uYCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBvbmx5IGRvIHN3aXRjaCBwb3J0cyB3aGVuIGF2YWlsYWJsZSBwb3J0cyBudW1iZXIgPiAxXHJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aW1lKS5maWx0ZXIoa2V5ID0+IHRoaXMudGltZVtrZXldKS5sZW5ndGggPiAxKSB7XHJcbiAgICAgIC8vIGRpc2FibGUgdGhlIFwic2hvdyBjaGFydFwiIGFuZCBcInJlc2V0IGNoYXJ0XCIgYnV0dG9uIGZpcnN0XHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG4gICAgICAvLyBpbml0IHRoZSBlbnZpcm9ubWVudCB3aXRoIHN3aXRjaCBmbGFnXHJcbiAgICAgIHRoaXMuX2luaXRDaGFydEVudih0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRDaGFydChwb3J0LCBudWxsLCB0cnVlKTtcclxuICAgICAgfSkuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBjb2x1bW5zIHdoaWNoIG5lZWQgdG8gYmUgaGlkZGVuIGZyb20gdGhlIHNlbGVjdGlvbiB0YWJsZVxyXG4gICAqL1xyXG4gIGdldCBoaWRkZW5Db2x1bW5zKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLnVpU2VydmljZS5nZXRIaWRkZW5Db2x1bW5zKHRoaXMuaGlkZU1lYXN1cmVDb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBkZWZhdWx0IHRpbWV6b25lXHJcbiAgICovXHJcbiAgZ2V0IGRlZmF1bHRUaW1lem9uZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGdldERlZmF1bHRUaW1lem9uZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBrZXkgY29sdW1uIChLUEkpXHJcbiAgICovXHJcbiAgZ2V0IGtwaUNvbHVtbigpOiBJdGVtIHtcclxuICAgIHJldHVybiBJdGVtLmtwaTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUga2V5IGNvbHVtbiAoS1BJKVxyXG4gICAqL1xyXG4gIGdldCBkZXNjQ29sdW1uKCk6IEl0ZW0ge1xyXG4gICAgcmV0dXJuIEl0ZW0uZGVzY3JpcHRpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHNlbGVjdGVkIHRpbWUgcmFuZ2UsIHNldCBzZWNvbmQgYW5kIG1pbGxpc2Vjb25kIHBhcnQgdG8gMFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9zZWxlY3RlZFRpbWVSYW5nZSgpOiB7c3RhcnRUaW1lOiBudW1iZXIsIGVuZFRpbWU6IG51bWJlcn0ge1xyXG4gICAgbGV0IHN0YXJ0VGltZSA9IDA7XHJcbiAgICBsZXQgZW5kVGltZSA9IDQxMDIzNTg0MDAwMDA7IC8vIDIwOTkvMTIvMzFcclxuICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2UgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgLy8gZ2V0IHN0YXJ0IHRpbWVcclxuICAgICAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlWzBdKSB7XHJcbiAgICAgICAgICBzdGFydFRpbWUgPSB0aGlzLmRhdGVUaW1lUmFuZ2VbMF0uc2V0U2Vjb25kcygwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZVsxXSkge1xyXG4gICAgICAgICAgZW5kVGltZSA9IHRoaXMuZGF0ZVRpbWVSYW5nZVsxXS5zZXRTZWNvbmRzKDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtzdGFydFRpbWU6IHN0YXJ0VGltZSwgZW5kVGltZTogZW5kVGltZX07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHRpbWUgcmFuZ2Ugc3RyaW5nLCBlZzogMjAxOC0xMC0yNSAxMDoyNSB+IDIwMTgtMTAtMjYgMTA6MjZcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkVGltZVJhbmdlU3RyaW5nID0gdGhpcy5fc2VsZWN0ZWRUaW1lUmFuZ2U7XHJcbiAgICByZXR1cm4gYCR7Z2V0VGltZVN0cmluZyhzZWxlY3RlZFRpbWVSYW5nZVN0cmluZy5zdGFydFRpbWUpfSB+ICR7Z2V0VGltZVN0cmluZyhzZWxlY3RlZFRpbWVSYW5nZVN0cmluZy5lbmRUaW1lKX1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGFycmF5IG9mIGhlYWRlciBrZXlcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfaGVhZGVyS2V5KCk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0aGlzLmhlYWRlcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5oZWFkZXIubWFwKGhlYWRlckl0ZW0gPT4gaGVhZGVySXRlbS5rZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGFycmF5IG9mIGhlYWRlciB0ZXh0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX2hlYWRlclRleHQoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyLm1hcChoZWFkZXJJdGVtID0+IGhlYWRlckl0ZW0udGV4dCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWFkIHBvcnRzIGZyb20gdGhlIHNlbGVjdGVkIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIGZpbGUgbmFtZXNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBwcml2YXRlIF9yZWFkUG9ydHNGcm9tRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbGVTZXJ2aWNlLmdldFBvcnRzRnJvbUZpbGUoZmlsZSwgKHByb2dyZXNzKSA9PiB7XHJcbiAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcbiAgICB9KS50aGVuKHBvcnRzID0+IHtcclxuICAgICAgcmV0dXJuIHNsZWVwKDEwMCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMpO1xyXG4gICAgICB9KTtcclxuICAgIH0pLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGJ1aWxkIGNoYXJ0IGZyb20gdGhlIHNlbGVjdGVkIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIGZpbGUgdGhlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICogQHBhcmFtIHN0YXJ0VGltZSBzdGFydCB0aW1lXHJcbiAgICogQHBhcmFtIGVuZFRpbWUgZW5kIHRpbWVcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWRQb3J0IHNlbGVjdGVkIHBvcnQgZm9yIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlIChNREMgc3lzdGVtKVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2J1aWxkQ2hhcnRGcm9tRGF0YUZpbGUoZmlsZTogRmlsZSwgc3RhcnRUaW1lOiBudW1iZXIsIGVuZFRpbWU6IG51bWJlciwgc2VsZWN0ZWRQb3J0OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2UuZ2V0Q2hhcnRDb250ZW50RnJvbUZpbGUoXHJcbiAgICAgIGZpbGUsXHJcbiAgICAgIHN0YXJ0VGltZSxcclxuICAgICAgZW5kVGltZSxcclxuICAgICAgc2VsZWN0ZWRQb3J0LFxyXG4gICAgICB0aGlzLnRpbWV6b25lLFxyXG4gICAgICB0aGlzLm1heFJvd3NMaW1pdGF0aW9uLCBwcm9ncmVzcyA9PiB0aGlzLnJlYWRQcm9ncmVzcyA9IHByb2dyZXNzKVxyXG4gICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgIC8vIHBhcnNpbmcgZG9uZVxyXG4gICAgICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBwb3J0cyA9IGdldFJlYWxQb3J0cyhPYmplY3Qua2V5cyhyZXN1bHQudGltZSksIHRydWUpO1xyXG4gICAgICAgIHBvcnRzLmZvckVhY2gocG9ydCA9PiB7XHJcbiAgICAgICAgICAvLyBjb252ZXJ0IHRoZSB1bml0IGFuZCBnZW5lcmF0ZSBjb250cm9sbGluZyBkYXRhIGZvciBhbGwgcG9ydHNcclxuICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy51aVNlcnZpY2UuY29udmVydFVuaXRBbmRHZW5lcmF0ZUNvbnRyb2xEYXRhKHJlc3VsdC5kYXRhW3BvcnRdLCByZXN1bHQuaGVhZGVyLCBwb3J0KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcylcclxuICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgIC8vIGdldCBhbGwgcG9ydHMgZnJvbSB0aGUgYW5hbHl6ZWQgZGF0YSh0aW1lKVxyXG4gICAgICAgICAgICAvLyBnZXQgdGhlIHBvcnQgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSBwYWdlXHJcbiAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBnZXREaXNwbGF5UG9ydChwb3J0cywgc2VsZWN0ZWRQb3J0KTtcclxuXHJcbiAgICAgICAgICAgIHByaW50UHJvY2Vzc2VkVGltZShiZWdpblRpbWUsICdjb252ZXJ0aW5nIHN0ZXAnKTtcclxuICAgICAgICAgICAgcG9ydHMuZm9yRWFjaCggcG9ydEl0ZW0gPT4gdGhpcy51aVNlcnZpY2UuZ2VuZXJhdGVZU2NhbGUocG9ydEl0ZW0pKTtcclxuICAgICAgICAgICAgcHJpbnRQcm9jZXNzZWRUaW1lKGJlZ2luVGltZSwgJ2dlbmVyYXRpbmcgWVNjYWxlIHN0ZXAnKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzdWx0LmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMudGltZSA9IHJlc3VsdC50aW1lO1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlciA9IHRoaXMudWlTZXJ2aWNlLmdldEhlYWRlcihyZXN1bHQuaGVhZGVyLCBwb3J0KTtcclxuICAgICAgICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0Lmhvc3Q7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuYWJvcnRlZCA9PT0gQWJvcnQubWF4TGluZU51bVJlYWNoZWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShcclxuICAgICAgICAgICAgICAgIEFsZXJ0Lndhcm5pbmcsIGBNYXhpbXVtIG51bWJlciBvZiBsaW5lcyByZWFjaGVkLiBQcm9jZXNzZWQgdGltZSByYW5nZSBpczogJHtnZXRUaW1lUmFuZ2VTdHJpbmcodGhpcy50aW1lKX0uYCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzRW1wdHlEYXRhKHRoaXMuZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmluZm8sIGBDYW5ub3QgZmluZCBhbnkgZGF0YSBmb3IgdGhlIHNlbGVjdGVkIHRpbWUgcGVyaW9kOiAke3RoaXMuX3NlbGVjdGVkVGltZVJhbmdlU3RyaW5nfWApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5zdWNjZXNzLCBgUHJvY2Vzc2VkIHRpbWUgcmFuZ2UgaXM6ICR7Z2V0VGltZVJhbmdlU3RyaW5nKHRoaXMudGltZSl9LmApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2xlZXAoMTAwKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRDaGFydChwb3J0LCBwb3J0cyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVpbml0aWFsaXplIHRoZSBwb3J0IHNlbGVjdG9yIHdpdGggdGhlIHBvcnRzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaW5pdFBvcnRTZWxlY3Rvcihwb3J0czogc3RyaW5nW10gPSBudWxsLCBzZWxlY3RlZFBvcnQ6IHN0cmluZyA9IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgLy8gaW5pdGlhbGl6YXRpb24gZm9yIG5neC1zZWxlY3RcclxuICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgcG9ydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIC8vIE1EQywgcmVtb3ZlIGRlZmF1bHQgJzAwMDAnIHBvcnRcclxuICAgICAgICB0aGlzLnBvcnRzID0gZ2VuZXJhdGVQb3J0cyhnZXRSZWFsUG9ydHMocG9ydHMpLCBzZWxlY3RlZFBvcnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9ydHMgPSBnZW5lcmF0ZVBvcnRzKHBvcnRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHBvcnRzICE9IG51bGwgJiYgc2VsZWN0ZWRQb3J0ID09PSBudWxsKSB7XHJcbiAgICAgICAgLy8gcmVzZXQgc3RhdHVzIHdoZW4gZG9pbmc6XHJcbiAgICAgICAgLy8gMS4gbG9hZGluZyBwb3J0c1xyXG4gICAgICAgIC8vIDIuIHRoZSBmaWxlIGRvZXNuJ3QgY29udGFpbiB0aGUgc2VsZWN0ZWQgUG9ydFxyXG4gICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAvLyBoaWRlIHRoZSBwcm9ncmVzcyBiYXIgYW5kIGVuYWJsZSB0aGUgXCJzaG93IGNoYXJ0XCIgYnV0dG9uXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBidWlsZCBhbmQgZGlzcGxheSB0aGUgY2hhcnQgb24gcGFnZVxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICogQHBhcmFtIHBvcnRzIGFsbCBhdmFpbGFibGUgcG9ydHNcclxuICAgKiBAcGFyYW0gc3dpdGNoRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIHN3aXRjaGluZyBwb3J0cyAobm8gaW5pdCBwb3J0IHNlbGVjdG9yIG5lZWRlZClcclxuICAgKi9cclxuICBwcml2YXRlIF9idWlsZENoYXJ0KHBvcnQ6IHN0cmluZywgcG9ydHM6IHN0cmluZ1tdLCBzd2l0Y2hGbGFnID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgYmVnaW5UaW1lID0gbmV3IERhdGUoKTtcclxuICAgIGlmIChwb3J0KSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbG9hZFNldHRpbmdzRm9yU2VsZWN0aW9uc1RhYmxlKHBvcnQpKVxyXG4gICAgICAgIC50aGVuKCAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBnZXQgdGhlIGNvbmZpZ1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcnRTZXJ2aWNlLmJ1aWxkQ2hhcnQoXHJcbiAgICAgICAgICAgIHRoaXMudGltZVtwb3J0XSxcclxuICAgICAgICAgICAgdGhpcy5kYXRhW3BvcnRdLFxyXG4gICAgICAgICAgICB0aGlzLnVpU2VydmljZS5nZXRZU2NhbGUodGhpcy5faGVhZGVyS2V5LCBwb3J0KSxcclxuICAgICAgICAgICAgdGhpcy5faGVhZGVyVGV4dCxcclxuICAgICAgICAgICAgdGhpcy5faGVhZGVyS2V5LFxyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24sXHJcbiAgICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UsXHJcbiAgICAgICAgICAgIHRoaXMuX2dldEhvc3RUaXRsZShwb3J0KSxcclxuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcyksXHJcbiAgICAgICAgICAgIHRoaXMuX29uWm9vbS5iaW5kKHRoaXMpKVxyXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkUHJvZ3Jlc3MgPSAwO1xyXG4gICAgICAgICAgICAgIC8vIGFmdGVyIGNoYXJ0IGhhcyBiZWVuIGNyZWF0ZWQsIHNob3cgdGhlIGNoYXJ0IGFyZWEsIGhpZGUgcHJvZ3Jlc3MgYmFyIGFuZCBlbmFibGUgdGhlIFwic2hvdyBjaGFydFwiIGJ1dHRvblxyXG4gICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuY2hhcnRBcmVhLCBzdGF0dXM6IHRydWV9LFxyXG4gICAgICAgICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XHJcbiAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgLy8gc2V0IHBvcnQgdG8gY3VycmVudCBkaXNwbGF5aW5nIHBvcnRcclxuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2hhcnRQb3J0ID0gcG9ydDtcclxuICAgICAgICAgICAgICBwcmludFByb2Nlc3NlZFRpbWUoYmVnaW5UaW1lLCAnc3RlcF9idWlsZF9jaGFydCcpO1xyXG4gICAgICAgICAgICAgIGlmIChwb3J0cyAmJiBwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN3aXRjaEZsYWcpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwb3J0IHNlbGVjdG9yLiBEbyBub3QgbmVlZCB0byBkbyBpdCB3aGVuIHN3aXRjaGluZyBwb3J0LlxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdFBvcnRTZWxlY3Rvcihwb3J0cywgcG9ydCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoXHJcbiAgICAgICAgICBBbGVydC53YXJuaW5nLFxyXG4gICAgICAgICAgJ1RoZSBzZWxlY3RlZCBwb3J0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUuIFBsZWFzZSBjaG9vc2UgYSBjb3JyZWN0IHBvcnQgYW5kIGhhdmUgYSB0cnkgYWdhaW4uJyk7XHJcbiAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICAvLyBpbml0aWFsaXplIHBvcnQgc2VsZWN0b3IuIERvIG5vdCBuZWVkIHRvIGRvIGl0IHdoZW4gc3dpdGNoaW5nIHBvcnQuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5faW5pdFBvcnRTZWxlY3Rvcihwb3J0cywgcG9ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIHN0cmluZyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIG9uIHRoZSB0aXRsZSBhcmVhIG9mIHRoZSBjaGFydFxyXG4gICAqIGVnOiBob3N0MSAtIDMwMDQwICgyMDE4LTA5LTA1IDE1OjMyOjMyIH4gMjAxOC0wOS0wNyAxNTozMjoxNSlcclxuICAgKiBAcGFyYW0gcG9ydCBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0SG9zdFRpdGxlKHBvcnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5ob3N0KSB7XHJcbiAgICAgIHJldHVybiAgYCR7dGhpcy5ob3N0fSAtICR7cG9ydH0gKCAke2dldFRpbWVSYW5nZVN0cmluZyh0aGlzLnRpbWVbcG9ydF0pfSApYDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGFmdGVyIHpvb20sIGVuYWJsZSB0aGUgcmVzZXQgYnV0dG9uLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX29uWm9vbSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1dKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGluaXRpYWxpemUgY2hhcnQsIGluY2x1ZGluZzogZGVzdHJveSBjdXJyZW50IGNoYXJ0LCBpbml0aWFsaXplIGNvbmZpZywgaW5pdGlhbGl6ZSBhbGwgcmVsYXRpdmUgZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2luaXRDaGFydEVudihzd2l0Y2hGbGFnOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRTZXJ2aWNlLmRlc3Ryb3lDaGFydCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICB7XHJcbiAgICAgICAgLy8gY2xlYW51cCBvdGhlciBkYXRhXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQuY2hhcnRBcmVhLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG5cclxuICAgICAgICBpZiAoIXN3aXRjaEZsYWcpIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMudGltZSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLnRpbWVba2V5XS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICB0aGlzLnRpbWUgPSB7fTtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLmRhdGFba2V5XS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB7fTtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICB0aGlzLmhvc3QgPSAnbmFtZXNlcnZlciBoaXN0b3J5IGZpbGUnO1xyXG4gICAgICAgICAgdGhpcy50YWJsZVNvdXJjZSA9IHZvaWQgMDtcclxuICAgICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLmNsZWFyTG9hZEhpc3RvcnlJbmZvcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHNldHRpbmdzIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlICh0aGUgcmlnaHQgcGFydCBvZiB0aGUgY2hhcnQpXHJcbiAgICogQHBhcmFtIHBvcnQgdGhlIHNlbGVjdGVkIHBvcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9sb2FkU2V0dGluZ3NGb3JTZWxlY3Rpb25zVGFibGUocG9ydDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlID0gdGhpcy51aVNlcnZpY2UuZ2V0U2VsZWN0aW9uVGFibGVSb3dzKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgW10pO1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnVpU2VydmljZS5nZXREaXNwbGF5SXRlbXModGhpcy5faGVhZGVyS2V5LCBwb3J0LCB0aGlzLmRlZmF1bHRTZWxlY3RlZEl0ZW1zKS5pbmNsdWRlcyhyb3cuS1BJKSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbi5zZWxlY3Qocm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IG1lc3NhZ2VzXHJcbiAgICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgbWVzc2FnZVxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIG1lc3NhZ2UgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3Nob3dNZXNzYWdlKHR5cGU6IEFsZXJ0LCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0eXBlKSB7XHJcbiAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgQWxlcnQuc3VjY2VzczpcclxuICAgICAgICBjYXNlIEFsZXJ0LmluZm86XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEFsZXJ0Lndhcm5pbmc6XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEFsZXJ0LmVycm9yOlxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWxlcnRNZXNzYWdlID09PSBtZXNzYWdlKSB7XHJcbiAgICAgIC8vIHRyeSB0cmlnZ2VyIHRoZSBjaGFuZ2UgZXZlbnQgb2YgdGhlIGFsZXJ0LlxyXG4gICAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IHZvaWQgMDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFsZXJ0TWVzc2FnZSA9IG1lc3NhZ2UsIDEwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFsZXJ0VHlwZSA9IHR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB0b2dnbGUgaXRlbXMgd2l0aCB0aGUgcHJvdmlkZWQgc3RhdHVzIChzaG93IG9yIGhpZGUgdGhlIHJlbGF0aXZlIGVsZW1lbnQgb24gdGhlIHBhZ2UpXHJcbiAgICogQHBhcmFtIGl0ZW1zIGl0ZW1zIHdpdGggdGhlIHJlbGF0aXZlIGlkIGFuZCBzdGF0dXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdG9nZ2xlSXRlbXMoaXRlbXM6IHtpZDogSHRtbEVsZW1lbnQsIHN0YXR1czogYm9vbGVhbn1bXSkge1xyXG4gICAgY29uc3QgZ2V0VmFyaWFibGVOYW1lQnlUeXBlSWQgPSAoaWQ6IEh0bWxFbGVtZW50KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LmNoYXJ0QXJlYTogcmV0dXJuICdzaG93Q2hhcnRGbGFnJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3M6IHJldHVybiAnc2hvd1JlYWRGaWxlUHJvZ3Jlc3MnO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uOiByZXR1cm4gJ2VuYWJsZVNob3dDaGFydEJ1dHRvbic7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5sb2FkUG9ydHNCdXR0b246IHJldHVybiAnZW5hYmxlTG9hZFBvcnRzQnV0dG9uJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b246IHJldHVybiAnZW5hYmxlUmVzZXRDaGFydEJ1dHRvbic7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAoaXRlbXMpIHtcclxuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB0aGlzW2dldFZhcmlhYmxlTmFtZUJ5VHlwZUlkKGl0ZW0uaWQpXSA9IGl0ZW0uc3RhdHVzO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAjbmFtZXNlcnZlckhpc3RvcnlBbGwgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktYWxsXCIgKHdpbmRvdzpyZXNpemUpPVwib25SZXNpemUoKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWNoYXJ0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWJveC1jb250ZW50XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj5cclxuICAgICAgICA8ZmlsZS1kcm9wLWlucHV0IChmaWxlRHJvcCk9XCJmaWxlRHJvcHBlZCgkZXZlbnQpXCIgKGZpbGVJbnB1dCk9XCJmaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZHJvcEFyZWFUZXh0XT0gXCJhYmJyZXZpYXRlZEZpbGVOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEFyZWFUZXh0XT1cIidCcm93c2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWxlPy5uYW1lPyBmaWxlLm5hbWU6J1NlbGVjdCBhIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSBmcm9tIHlvdXIgbG9jYWwgZGlzay4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpbGVCdWZmZXJcIj5cclxuICAgICAgICA8L2ZpbGUtZHJvcC1pbnB1dD5cclxuICAgICAgICA8cCAqbmdJZj1cImZpbGVCdWZmZXJcIiBjbGFzcz1cImJveC1zdHJlYW0tbW9kZS10ZXh0XCI+e3tzdHJlYW1Nb2RlRmlsZU5hbWUgfHwgJ25hbWVzZXJ2ZXJfaGlzdG9yeS50cmMgKHN0cmVhbSBtb2RlKSd9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiPlxyXG4gICAgICAgIDxwcm9ncmVzcy1iYXIgW3Byb2dyZXNzXT1cInJlYWRQcm9ncmVzc1wiPjwvcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LXRpbWVcIj5cclxuICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGltZS1yYW5nZVwiPlxyXG4gICAgICAgPHRpbWUtcmFuZ2Utc2VsZWN0b3IgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCIgWyhkYXRlVGltZVJhbmdlKV09XCJkYXRlVGltZVJhbmdlXCI+PC90aW1lLXJhbmdlLXNlbGVjdG9yPlxyXG4gICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGltZXpvbmUtc2VsZWN0b3JcIj5cclxuICAgICAgICA8dGltZXpvbmUtc2VsZWN0b3IgWyh0aW1lem9uZSldPVwidGltZXpvbmVcIiBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj48L3RpbWV6b25lLXNlbGVjdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJwb3J0LXNlbGVjdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicG9ydC1zZWxlY3RvclwiPlxyXG4gICAgICAgIDxwb3J0LXNlbGVjdG9yIChwb3J0Q2hhbmdlKT1cInN3aXRjaFBvcnRGb3JDaGFydCgkZXZlbnQpXCIgWyhwb3J0KV09XCJwb3J0XCIgW3BvcnRzXT1cInBvcnRzXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCI+PC9wb3J0LXNlbGVjdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBvcnQtbG9hZC1idXR0b25cIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkUG9ydHMoKVwiIHRpdGxlPVwiTG9hZCBhbGwgcG9ydHMgZnJvbSBuYW1lIHNlcnZlciBoaXN0b3J5IHRyYWNlIGZpbGUuXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVTaG93Q2hhcnRCdXR0b24gfHwgcG9ydCB8fCAhZW5hYmxlTG9hZFBvcnRzQnV0dG9uXCI+e3tzaG93UmVhZEZpbGVQcm9ncmVzcz8gXCJMb2FkaW5nLi4uXCIgOiBcIkxvYWRcIn19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LW9wZXJhdGlvblwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNob3dDaGFydCgpXCIgdGl0bGU9XCJMb2FkIGFuZCBkaXNwbGF5IGFsbCBkYXRhIGZyb20gbmFtZSBzZXJ2ZXIgaGlzdG9yeSB0cmFjZSBmaWxlLlwiIFtkaXNhYmxlZF09XCIhZW5hYmxlU2hvd0NoYXJ0QnV0dG9uXCI+e3tzaG93UmVhZEZpbGVQcm9ncmVzcz8gXCJMb2FkaW5nLi4uXCIgOiBcIlNob3dcIn19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZXNldENoYXJ0KClcIiB0aXRsZT1cIlJlc2V0IHpvb20gb2YgY2hhcnQuXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzIHx8ICFlbmFibGVSZXNldENoYXJ0QnV0dG9uXCI+UmVzZXQgQ2hhcnQ8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICNuYW1lc2VydmVySGlzdG9yeUNvbnRlbnQgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50LWNoYXJ0XCI+XHJcbiAgICAgIDxpbnN0cnVjdGlvbiBbKHNob3cpXT1cInNob3dJbnN0cnVjdGlvblwiICpuZ0lmPVwiIXNob3dDaGFydEZsYWcgJiYgc2hvd0luc3RydWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwMUZpbmlzaGVkXT1cIiEhZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDJGaW5pc2hlZF09XCJkYXRlVGltZVJhbmdlICYmICghIWRhdGVUaW1lUmFuZ2VbMF0gfHwgISFkYXRlVGltZVJhbmdlWzFdKSB8fCB0aW1lem9uZSAhPSBkZWZhdWx0VGltZXpvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXAzRmluaXNoZWRdPVwiISFwb3J0XCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwNEZpbmlzaGVkXT1cInN0ZXBTaG93Q2hhcnQgJiYgIWVuYWJsZVNob3dDaGFydEJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDVGaW5pc2hlZF09XCJmYWxzZVwiPlxyXG4gICAgICA8L2luc3RydWN0aW9uPlxyXG4gICAgICA8Y2FudmFzIGlkPVwiY2hhcnROYW1lU2VydmVySGlzdG9yeVwiID48L2NhbnZhcz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50LWNvbnRyb2xsZXJcIiA+XHJcbiAgICAgIDxuZ3gtc2VsZWN0aW9uLXRhYmxlIChjaGFuZ2UpPVwic2VsZWN0SXRlbSgkZXZlbnQpXCIgKm5nSWY9XCJzaG93Q2hhcnRGbGFnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrYm94XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVTb3VyY2VdPVwidGFibGVTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5Q29sdW1uXT1cImtwaUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5Db2x1bW5zXT1cImhpZGRlbkNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcENvbHVtbl09XCJkZXNjQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFN0eWxlXT1cInNlYXJjaFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoQ29sdW1uXT1cImtwaUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aVNlbGVjdGlvbl09XCJ0cnVlXCI+XHJcbiAgICAgIDwvbmd4LXNlbGVjdGlvbi10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGFpbmVyXCIgKm5nSWY9XCJhbGVydE1lc3NhZ2VcIj5cclxuICA8YWxlcnQgWyhhbGVydE1lc3NhZ2UpXT1cImFsZXJ0TWVzc2FnZVwiIFthbGVydFR5cGVdPVwiYWxlcnRUeXBlXCIgW2FsZXJ0VGltZW91dF09XCIzMDAwMFwiPjwvYWxlcnQ+XHJcbjwvZGl2PlxyXG4iXX0=
555
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQTRCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUNMLGNBQWMsRUFDZCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsWUFBWSxFQUNaLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsVUFBVSxFQUNYLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQWdFLE1BQU0sVUFBVSxDQUFDO0FBQ3pILE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRSxPQUFPLFVBQVUsQ0FBQztBQUNsQixPQUFPLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7OztBQUUvQixJQUFLLFVBSUo7QUFKRCxXQUFLLFVBQVU7SUFDYix5REFBMkMsQ0FBQTtJQUMzQyxxQ0FBdUIsQ0FBQTtJQUN2QixtREFBcUMsQ0FBQTtBQUN2QyxD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SztnQkFLRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBS0csZUFBZTtzQkFBdkIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gIHNldENoYXJ0SGVpZ2h0LFxyXG4gIHNsZWVwLFxyXG4gIGlzRW1wdHlEYXRhLFxyXG4gIGdldERpc3BsYXlQb3J0LFxyXG4gIGdldEZpbGVGcm9tSW5wdXQsXHJcbiAgaXNTYW1lRmlsZSxcclxuICBnZXRBYmJyZXZpYXRlZEZpbGVOYW1lLFxyXG4gIGdldEZpbGVGcm9tRHJvcCxcclxuICBnZXRSZWFsUG9ydHMsXHJcbiAgZ2V0VGltZVN0cmluZyxcclxuICBwcmludFByb2Nlc3NlZFRpbWUsXHJcbiAgZ2V0VGltZVJhbmdlU3RyaW5nLFxyXG4gIGdlbmVyYXRlUG9ydHMsXHJcbiAgZ2V0RGVmYXVsdFRpbWV6b25lLFxyXG4gIGJsb2JUb0ZpbGVcclxufSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IEFib3J0LCBBbGVydCwgSHRtbEVsZW1lbnQsIEl0ZW0sIENoYXJ0Q29udGVudERhdGEsIENoYXJ0Q29udGVudEhlYWRlciwgQ2hhcnRDb250ZW50VGltZSwgUG9ydCB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UsIENoYXJ0U2VydmljZSwgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5cclxuaW1wb3J0ICdoYW1tZXJqcyc7XHJcbmltcG9ydCAnLi4vdXRpbHMvY2hhcnRqcy1kb3duc2FtcGxlJztcclxuaW1wb3J0ICcuLi91dGlscy9jaGFydGpzLXpvb20nO1xyXG5cclxuZW51bSBTZWFyY2hUeXBlIHtcclxuICBzZWFyY2hXaXRoU3ViSGVhZGVyID0gJ3NlYXJjaFdpdGhTdWJIZWFkZXInLFxyXG4gIHNlYXJjaEFsbCA9ICdzZWFyY2hBbGwnLFxyXG4gIHNlYXJjaEluQ2hpbGRyZW4gPSAnc2VhcmNoSW5DaGlsZHJlbidcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtaGFuYS1uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsgJy4vbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5zY3NzJyBdLFxyXG4gIHByb3ZpZGVyczogWyBGaWxlU2VydmljZSwgQ2hhcnRTZXJ2aWNlLCBVSVNlcnZpY2UgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmFtZVNlcnZlckhpc3RvcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ25hbWVzZXJ2ZXJIaXN0b3J5QWxsJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG5hbWVzZXJ2ZXJIaXN0b3J5QWxsUmVmOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ25hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbZGVmYXVsdFNlbGVjdGVkSXRlbXNdXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGVmYXVsdFNlbGVjdGVkSXRlbXM6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW2hpZGVNZWFzdXJlQ29sdW1uc11cclxuICAgKi9cclxuICBASW5wdXQoKSBoaWRlTWVhc3VyZUNvbHVtbnM6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW21heFJvd3NMaW1pdGF0aW9uXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1heFJvd3NMaW1pdGF0aW9uOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbc2hvd0luc3RydWN0aW9uXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNob3dJbnN0cnVjdGlvbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbdGltZXpvbmVdXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGltZXpvbmU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogZmlsZSBidWZmZXIsIHVzZSB0aGlzIGZvciBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGZpbGVCdWZmZXI6IEJsb2I7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZpbGUgbmFtZSBmb3Igc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdHJlYW1Nb2RlRmlsZU5hbWU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYXV0byBkaXNwbGF5IHRoZSBjaGFydCBpbiBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGF1dG9EaXNwbGF5OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBmaWxlOiBGaWxlO1xyXG5cclxuICAvKipcclxuICAgKiB0aW1lIGluZm8gb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIHRpbWU6IENoYXJ0Q29udGVudFRpbWUgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGF0YSBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgZGF0YTogQ2hhcnRDb250ZW50RGF0YSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBoZWFkZXIgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGhlYWRlcjogQ2hhcnRDb250ZW50SGVhZGVyW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogaG9zdCBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgaG9zdCA9ICduYW1lc2VydmVyIGhpc3RvcnkgZmlsZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGFsZXJ0IG1lc3NhZ2UgY29udGVudFxyXG4gICAqL1xyXG4gIGFsZXJ0TWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhbGVydCBtZXNzYWdlIHR5cGVcclxuICAgKi9cclxuICBhbGVydFR5cGU6IEFsZXJ0O1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcG9ydDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhbGwgdGhlIHBvcnRzIGZyb20gdGhlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgcG9ydHM6IFBvcnRbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgdGltZSByYW5nZVxyXG4gICAqL1xyXG4gIGRhdGVUaW1lUmFuZ2U6IERhdGVbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGF0YSBzb3VyY2UgZm9yIHRoZSBzZWxlY3Rpb24gdGFibGUgKHJpZ2h0IHBhcnQgb2YgdGhlIGNoYXJ0KVxyXG4gICAqL1xyXG4gIHRhYmxlU291cmNlOiBhbnlbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogdGhlIHByb2dyZXNzIGZvciByZWFkaW5nIGZpbGVcclxuICAgKi9cclxuICByZWFkUHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZC9kcm9wcGVkIGZpbGUgbmFtZSAoYWJicmV2aWF0aW9uKSwgZnVsbCBmaWxlIG5hbWUgd2lsbCBiZSBzaG93biB2aWEgdGhlIHRvb2x0aXBzXHJcbiAgICovXHJcbiAgYWJicmV2aWF0ZWRGaWxlTmFtZSA9ICdvciBEcm9wIEZpbGUgSGVyZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZvciB0aGUgaW5zdHJ1Y3Rpb24gc3RlcCA0XHJcbiAgICovXHJcbiAgc3RlcFNob3dDaGFydCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIHNob3dpbmcgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgY2hhcnRcclxuICAgKi9cclxuICBzaG93Q2hhcnRGbGFnOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIHNob3dpbmcgdGhlIGZpbGUgcmVhZGluZyBwcm9ncmVzc1xyXG4gICAqL1xyXG4gIHNob3dSZWFkRmlsZVByb2dyZXNzOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIFwiTG9hZFwiIHBvcnRzIGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZUxvYWRQb3J0c0J1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBlbmFibGluZyBcIlNob3dcIiBjaGFydCBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVTaG93Q2hhcnRCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3IgXCJSZXNldFwiIGNoYXJ0IGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZVJlc2V0Q2hhcnRCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIHNlYXJjaFR5cGUgPSBTZWFyY2hUeXBlLnNlYXJjaEFsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBjdXJyZW50IGRpc3BsYXlpbmcgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2N1cnJlbnRDaGFydFBvcnQ6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmaWxlU2VydmljZTogRmlsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHVpU2VydmljZTogVUlTZXJ2aWNlKSB7fVxyXG5cclxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBmYmMgPSBjaGFuZ2VzLmZpbGVCdWZmZXI7XHJcbiAgICBpZiAoZmJjICYmIGZiYy5jdXJyZW50VmFsdWUgJiYgZmJjLmN1cnJlbnRWYWx1ZSAhPT0gZmJjLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgLy8gc2ltdWxhdGUgc2VsZWN0aW5nIGZpbGVcclxuICAgICAgY29uc3Qgc2ltdWxhdGVkRXZlbnQgPSB7dGFyZ2V0OiB7ZmlsZXM6IFtibG9iVG9GaWxlKHRoaXMuZmlsZUJ1ZmZlciwgdGhpcy5zdHJlYW1Nb2RlRmlsZU5hbWUpXX19O1xyXG4gICAgICBhd2FpdCB0aGlzLmZpbGVTZWxlY3RlZChzaW11bGF0ZWRFdmVudCk7XHJcbiAgICAgIHRoaXMucG9ydCA9IHVuZGVmaW5lZDsgLy8gY2xlYXIgdGhlIHBvcnQgc2VsZWN0aW9uXHJcbiAgICAgIGlmICh0aGlzLmF1dG9EaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5zaG93Q2hhcnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gaW5pdCBpdGVtcycgc3RhdHVzXHJcbiAgICAvLyByZXNldCBjaGFydCBidXR0b24gd2lsbCBiZSBkaXNhYmxlIGJ5IGRlZmF1bHQgbGF0ZXIsIG9ubHkgYmUgZW5hYmxlZCBhZnRlciB6b29tZWRcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5jaGFydEFyZWEsIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQubG9hZFBvcnRzQnV0dG9uLCBzdGF0dXM6IHRydWV9LFxyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XSk7XHJcbiAgICB0aGlzLm9uUmVzaXplKCk7IC8vIHVwZGF0ZSB0aGUgc2l6ZSwgb3RoZXJ3aXNlIHRoZXJlIG1heSBoYXZlIGEgc2Nyb2xsYmFyIChiZWNhdXNlIG9mIHRoZSB0b2FzdCkgaWYgYXV0byBkaXNwbGF5IGlzIHNldCB0byB0cnVlXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCBDaGFydCB0byBpbml0aWFsIHN0YXR1c1xyXG4gICAqIElmIGxlZ2VuZCBpcyBhbHJlYWR5IHNlbGVjdGVkL3Vuc2VsZWN0ZWQgZnJvbSB0aGUgbGlzdCwgaXQgd291bGRuJ3QgYmUgcmVzdG9yZWQuXHJcbiAgICovXHJcbiAgcmVzZXRDaGFydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XSk7XHJcblxyXG4gICAgaWYgKHRoaXMudGFibGVTb3VyY2UgJiYgdGhpcy5fc2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnJlc2V0Q2hhcnQodGhpcy50YWJsZVNvdXJjZSwgdGhpcy5fc2VsZWN0aW9uKVxyXG4gICAgICAgIC5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWFkIHRoZSBmaWxlIGFuZCBkaXNwbGF5IHRoZSBjaGFydFxyXG4gICAqL1xyXG4gIHNob3dDaGFydCgpOiB2b2lkIHtcclxuICAgIC8vIGFmdGVyIGNsaWNrLCB0aGlzIGJ1dHRvbiBhbmQgcmVzZXQgYnV0dG9uIG5lZWRzIHRvIGJlIGRpc2FibGVkXHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG5cclxuICAgIHRoaXMuc3RlcFNob3dDaGFydCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5faW5pdENoYXJ0RW52KCkudGhlbigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkVGltZSA9IHRoaXMuX3NlbGVjdGVkVGltZVJhbmdlO1xyXG4gICAgICBpZiAoc2VsZWN0ZWRUaW1lLnN0YXJ0VGltZSA+IHNlbGVjdGVkVGltZS5lbmRUaW1lKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsICdUaW1lIHJhbmdlIGlzIG5vdCBjb3JyZWN0LicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgICAgLy8gaXQncyB0aW1lIGZvciBkaXNwbGF5aW5nIHRoZSByZWFkaW5nIHByb2dyZXNzIGJhclxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogdHJ1ZX1dKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYnVpbGRDaGFydEZyb21EYXRhRmlsZSh0aGlzLmZpbGUsIHNlbGVjdGVkVGltZS5zdGFydFRpbWUsIHNlbGVjdGVkVGltZS5lbmRUaW1lLCB0aGlzLnBvcnQpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaChlID0+IHtcclxuICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpO1xyXG4gICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IGZhbHNlfV0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBsb2FkIGFsbCBwb3J0cyBmcm9tIGZpbGVcclxuICAgKi9cclxuICBsb2FkUG9ydHMoKTogdm9pZCB7XHJcbiAgICAvLyBkbyBjb25maXJtYXRpb24gYWN0aW9uc1xyXG4gICAgaWYgKHRoaXMuZmlsZSkge1xyXG4gICAgICAvLyBiZWZvcmUgc3RhcnQgbG9hZGluZyBwb3J0cyBmcm9tIGZpbGUsIGRpc3BsYXkgcHJvZ3Jlc3MgYmFyIGFuZCBkaXNhYmxlIHRoZSBzaG93IGNoYXJ0IGJ1dHRvblxyXG4gICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzLCBzdGF0dXM6IHRydWV9LFxyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfVxyXG4gICAgICBdKTtcclxuICAgICAgdGhpcy5fcmVhZFBvcnRzRnJvbUZpbGUodGhpcy5maWxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIDEgZmlsZS5cclxuICAgKi9cclxuICBhc3luYyBmaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWxlID0gZ2V0RmlsZUZyb21JbnB1dChldmVudC50YXJnZXQpO1xyXG4gICAgaWYgKHNlbGVjdGVkRmlsZSkge1xyXG4gICAgICBpZiAoIWlzU2FtZUZpbGUodGhpcy5maWxlLCBzZWxlY3RlZEZpbGUpKSB7XHJcbiAgICAgICAgLy8gaW5pdCBwb3J0IHNlbGVjdG9yXHJcbiAgICAgICAgYXdhaXQgdGhpcy5faW5pdFBvcnRTZWxlY3RvcigpLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWxlID0gc2VsZWN0ZWRGaWxlO1xyXG4gICAgICAgIHRoaXMuYWJicmV2aWF0ZWRGaWxlTmFtZSA9IGdldEFiYnJldmlhdGVkRmlsZU5hbWUodGhpcy5maWxlLm5hbWUpO1xyXG4gICAgICAgIC8vIGFmdGVyIGZpbGUgaGFzIGJlZW4gc2VsZWN0ZWQsIHRoZSBzaG93IGNoYXJ0IGJ1dHRvbiBuZWVkcyB0byBiZSBlbmFibGVkXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGRyb3AgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlLCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyAxIGZpbGUuXHJcbiAgICovXHJcbiAgZmlsZURyb3BwZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgZ2V0RmlsZUZyb21Ecm9wKGV2ZW50KVxyXG4gICAgICAudGhlbihmaWxlID0+IHtcclxuICAgICAgICBpZiAoIWlzU2FtZUZpbGUodGhpcy5maWxlLCBmaWxlKSkge1xyXG4gICAgICAgICAgLy8gaW5pdCBwb3J0IHNlbGVjdG9yXHJcbiAgICAgICAgICB0aGlzLmZpbGUgPSBmaWxlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmlsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFiYnJldmlhdGVkRmlsZU5hbWUgPSBnZXRBYmJyZXZpYXRlZEZpbGVOYW1lKHRoaXMuZmlsZS5uYW1lKTtcclxuICAgICAgICAgICAgLy8gYWZ0ZXIgZmlsZSBoYXMgYmVlbiBkcm9wcGVkLCB0aGUgc2hvdyBjaGFydCBidXR0b24gbmVlZHMgdG8gYmUgZW5hYmxlZFxyXG4gICAgICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1dKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9fSlcclxuICAgICAgLnRoZW4oKCkgPT4gIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5pdFBvcnRTZWxlY3RvcigpO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IG9uZSBpdGVtIGZyb20gc2VsZWN0aW9uIHRhYmxlLCByZWxhdGl2ZSBkYXRhc2V0IHdpbGwgYmUgc2hvd24gb3IgaGlkZGVuXHJcbiAgICovXHJcbiAgc2VsZWN0SXRlbShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFibGVSb3cpIHtcclxuICAgICAgY29uc3Qgcm93ID0gZXZlbnQudGFibGVSb3c7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGlvbi50b2dnbGUocm93KTtcclxuICAgICAgdGhpcy5jaGFydFNlcnZpY2UudG9nZ2xlRGF0YUluQ2hhcnQocm93LktQSSwgIXRoaXMuX3NlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdykpXHJcbiAgICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlY2FsY3VsYXRpbmcgY2hhcnQgaGVpZ2h0IHdoZW4gcmVzaXppbmdcclxuICAgKi9cclxuICBvblJlc2l6ZSgpIHtcclxuICAgIGNvbnN0IG5hbWVzZXJ2ZXJIaXN0b3J5QWxsRWxlbWVudCA9IHRoaXMubmFtZXNlcnZlckhpc3RvcnlBbGxSZWYgPyB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5QWxsUmVmLm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xyXG4gICAgY29uc3QgbmFtZXNlcnZlckhpc3RvcnlDb250ZW50RWxlbWVudCA9IHRoaXMubmFtZXNlcnZlckhpc3RvcnlDb250ZW50UmVmID8gdGhpcy5uYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWYubmF0aXZlRWxlbWVudCA6IG51bGw7XHJcbiAgICBzZXRDaGFydEhlaWdodChuYW1lc2VydmVySGlzdG9yeUFsbEVsZW1lbnQsIG5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudEVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3dpdGNoIHBvcnQgYW5kIHJlaW5pdGlhbGl6ZSBjaGFydCwgdHJpZ2dlcmVkIGJ5IGNoYW5naW5nIHRoZSBwb3J0XHJcbiAgICogQHBhcmFtIHBvcnQgdGhlIHNlbGVjdGVkIHBvcnRcclxuICAgKi9cclxuICBzd2l0Y2hQb3J0Rm9yQ2hhcnQocG9ydDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAocG9ydCA9PT0gdGhpcy5fY3VycmVudENoYXJ0UG9ydCkge1xyXG4gICAgICAvLyBub3QgdG8gc3dpdGNoIHBvcnQsIGJlY2F1c2UgdGhlIHJlbGF0aXZlIHBvcnQgaXMgZGlzcGxheWluZywgbm8gbmVlZCB0byByZW5kZXIgdHdpY2UuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5maWxlIHx8ICFwb3J0IHx8IHBvcnQubGVuZ3RoID09PSAwIHx8IHBvcnQuc2xpY2UoMSwgMykgPT09ICcqKicpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChPYmplY3Qua2V5cyh0aGlzLnRpbWUpLmxlbmd0aCA+IDEgJiYgIWdldFJlYWxQb3J0cyhPYmplY3Qua2V5cyh0aGlzLnRpbWUpLmZpbHRlcihrZXkgPT4gdGhpcy50aW1lW2tleV0pKS5pbmNsdWRlcyhwb3J0KSkge1xyXG4gICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5pbmZvLCBgRGF0YSBvZiBwb3J0OiR7cG9ydH0gaXMgbm90IGxvYWRlZCwgcGxlYXNlIGxvYWQgdGhlIGRhdGEgZmlyc3QgYnkgY2xpY2tpbmcgdGhlIFwiU2hvd1wiIGJ1dHRvbi5gKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIG9ubHkgZG8gc3dpdGNoIHBvcnRzIHdoZW4gYXZhaWxhYmxlIHBvcnRzIG51bWJlciA+IDFcclxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnRpbWUpLmZpbHRlcihrZXkgPT4gdGhpcy50aW1lW2tleV0pLmxlbmd0aCA+IDEpIHtcclxuICAgICAgLy8gZGlzYWJsZSB0aGUgXCJzaG93IGNoYXJ0XCIgYW5kIFwicmVzZXQgY2hhcnRcIiBidXR0b24gZmlyc3RcclxuICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlc2V0Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XSk7XHJcbiAgICAgIC8vIGluaXQgdGhlIGVudmlyb25tZW50IHdpdGggc3dpdGNoIGZsYWdcclxuICAgICAgdGhpcy5faW5pdENoYXJ0RW52KHRydWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9idWlsZENoYXJ0KHBvcnQsIG51bGwsIHRydWUpO1xyXG4gICAgICB9KS5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIGNvbHVtbnMgd2hpY2ggbmVlZCB0byBiZSBoaWRkZW4gZnJvbSB0aGUgc2VsZWN0aW9uIHRhYmxlXHJcbiAgICovXHJcbiAgZ2V0IGhpZGRlbkNvbHVtbnMoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMudWlTZXJ2aWNlLmdldEhpZGRlbkNvbHVtbnModGhpcy5oaWRlTWVhc3VyZUNvbHVtbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IGRlZmF1bHQgdGltZXpvbmVcclxuICAgKi9cclxuICBnZXQgZGVmYXVsdFRpbWV6b25lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZ2V0RGVmYXVsdFRpbWV6b25lKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIGtleSBjb2x1bW4gKEtQSSlcclxuICAgKi9cclxuICBnZXQga3BpQ29sdW1uKCk6IEl0ZW0ge1xyXG4gICAgcmV0dXJuIEl0ZW0ua3BpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBrZXkgY29sdW1uIChLUEkpXHJcbiAgICovXHJcbiAgZ2V0IGRlc2NDb2x1bW4oKTogSXRlbSB7XHJcbiAgICByZXR1cm4gSXRlbS5kZXNjcmlwdGlvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgc2VsZWN0ZWQgdGltZSByYW5nZSwgc2V0IHNlY29uZCBhbmQgbWlsbGlzZWNvbmQgcGFydCB0byAwXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX3NlbGVjdGVkVGltZVJhbmdlKCk6IHtzdGFydFRpbWU6IG51bWJlciwgZW5kVGltZTogbnVtYmVyfSB7XHJcbiAgICBsZXQgc3RhcnRUaW1lID0gMDtcclxuICAgIGxldCBlbmRUaW1lID0gNDEwMjM1ODQwMDAwMDsgLy8gMjA5OS8xMi8zMVxyXG4gICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZSAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2UubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAvLyBnZXQgc3RhcnQgdGltZVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2VbMF0pIHtcclxuICAgICAgICAgIHN0YXJ0VGltZSA9IHRoaXMuZGF0ZVRpbWVSYW5nZVswXS5zZXRTZWNvbmRzKDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlWzFdKSB7XHJcbiAgICAgICAgICBlbmRUaW1lID0gdGhpcy5kYXRlVGltZVJhbmdlWzFdLnNldFNlY29uZHMoMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3N0YXJ0VGltZTogc3RhcnRUaW1lLCBlbmRUaW1lOiBlbmRUaW1lfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgdGltZSByYW5nZSBzdHJpbmcsIGVnOiAyMDE4LTEwLTI1IDEwOjI1IH4gMjAxOC0xMC0yNiAxMDoyNlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9zZWxlY3RlZFRpbWVSYW5nZVN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcgPSB0aGlzLl9zZWxlY3RlZFRpbWVSYW5nZTtcclxuICAgIHJldHVybiBgJHtnZXRUaW1lU3RyaW5nKHNlbGVjdGVkVGltZVJhbmdlU3RyaW5nLnN0YXJ0VGltZSl9IH4gJHtnZXRUaW1lU3RyaW5nKHNlbGVjdGVkVGltZVJhbmdlU3RyaW5nLmVuZFRpbWUpfWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgYXJyYXkgb2YgaGVhZGVyIGtleVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9oZWFkZXJLZXkoKTogc3RyaW5nW10ge1xyXG4gICAgaWYgKHRoaXMuaGVhZGVyKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmhlYWRlci5tYXAoaGVhZGVySXRlbSA9PiBoZWFkZXJJdGVtLmtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgYXJyYXkgb2YgaGVhZGVyIHRleHRcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfaGVhZGVyVGV4dCgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5oZWFkZXIubWFwKGhlYWRlckl0ZW0gPT4gaGVhZGVySXRlbS50ZXh0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlYWQgcG9ydHMgZnJvbSB0aGUgc2VsZWN0ZWQgbmFtZXNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKiBAcGFyYW0gZmlsZSBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3JlYWRQb3J0c0Zyb21GaWxlKGZpbGU6IEZpbGUpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsZVNlcnZpY2UuZ2V0UG9ydHNGcm9tRmlsZShmaWxlLCAocHJvZ3Jlc3MpID0+IHtcclxuICAgICAgdGhpcy5yZWFkUHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuICAgIH0pLnRoZW4ocG9ydHMgPT4ge1xyXG4gICAgICByZXR1cm4gc2xlZXAoMTAwKS50aGVuKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5pdFBvcnRTZWxlY3Rvcihwb3J0cyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSkuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYnVpbGQgY2hhcnQgZnJvbSB0aGUgc2VsZWN0ZWQgbmFtZXNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKiBAcGFyYW0gZmlsZSB0aGUgbmFtZXNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKiBAcGFyYW0gc3RhcnRUaW1lIHN0YXJ0IHRpbWVcclxuICAgKiBAcGFyYW0gZW5kVGltZSBlbmQgdGltZVxyXG4gICAqIEBwYXJhbSBzZWxlY3RlZFBvcnQgc2VsZWN0ZWQgcG9ydCBmb3IgbmFtZXNlcnZlciBoaXN0b3J5IGZpbGUgKE1EQyBzeXN0ZW0pXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYnVpbGRDaGFydEZyb21EYXRhRmlsZShmaWxlOiBGaWxlLCBzdGFydFRpbWU6IG51bWJlciwgZW5kVGltZTogbnVtYmVyLCBzZWxlY3RlZFBvcnQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZS5nZXRDaGFydENvbnRlbnRGcm9tRmlsZShcclxuICAgICAgZmlsZSxcclxuICAgICAgc3RhcnRUaW1lLFxyXG4gICAgICBlbmRUaW1lLFxyXG4gICAgICBzZWxlY3RlZFBvcnQsXHJcbiAgICAgIHRoaXMudGltZXpvbmUsXHJcbiAgICAgIHRoaXMubWF4Um93c0xpbWl0YXRpb24sIHByb2dyZXNzID0+IHRoaXMucmVhZFByb2dyZXNzID0gcHJvZ3Jlc3MpXHJcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgLy8gcGFyc2luZyBkb25lXHJcbiAgICAgICAgY29uc3QgYmVnaW5UaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHBvcnRzID0gZ2V0UmVhbFBvcnRzKE9iamVjdC5rZXlzKHJlc3VsdC50aW1lKSwgdHJ1ZSk7XHJcbiAgICAgICAgcG9ydHMuZm9yRWFjaChwb3J0ID0+IHtcclxuICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIHVuaXQgYW5kIGdlbmVyYXRlIGNvbnRyb2xsaW5nIGRhdGEgZm9yIGFsbCBwb3J0c1xyXG4gICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLnVpU2VydmljZS5jb252ZXJ0VW5pdEFuZEdlbmVyYXRlQ29udHJvbERhdGEocmVzdWx0LmRhdGFbcG9ydF0sIHJlc3VsdC5oZWFkZXIsIHBvcnQpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKVxyXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgLy8gZ2V0IGFsbCBwb3J0cyBmcm9tIHRoZSBhbmFseXplZCBkYXRhKHRpbWUpXHJcbiAgICAgICAgICAgIC8vIGdldCB0aGUgcG9ydCB0aGF0IHdpbGwgYmUgc2hvd24gaW4gdGhlIHBhZ2VcclxuICAgICAgICAgICAgY29uc3QgcG9ydCA9IGdldERpc3BsYXlQb3J0KHBvcnRzLCBzZWxlY3RlZFBvcnQpO1xyXG5cclxuICAgICAgICAgICAgcHJpbnRQcm9jZXNzZWRUaW1lKGJlZ2luVGltZSwgJ2NvbnZlcnRpbmcgc3RlcCcpO1xyXG4gICAgICAgICAgICBwb3J0cy5mb3JFYWNoKCBwb3J0SXRlbSA9PiB0aGlzLnVpU2VydmljZS5nZW5lcmF0ZVlTY2FsZShwb3J0SXRlbSkpO1xyXG4gICAgICAgICAgICBwcmludFByb2Nlc3NlZFRpbWUoYmVnaW5UaW1lLCAnZ2VuZXJhdGluZyBZU2NhbGUgc3RlcCcpO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy50aW1lID0gcmVzdWx0LnRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyID0gdGhpcy51aVNlcnZpY2UuZ2V0SGVhZGVyKHJlc3VsdC5oZWFkZXIsIHBvcnQpO1xyXG4gICAgICAgICAgICB0aGlzLmhvc3QgPSByZXN1bHQuaG9zdDtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5hYm9ydGVkID09PSBBYm9ydC5tYXhMaW5lTnVtUmVhY2hlZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgQWxlcnQud2FybmluZywgYE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHJlYWNoZWQuIFByb2Nlc3NlZCB0aW1lIHJhbmdlIGlzOiAke2dldFRpbWVSYW5nZVN0cmluZyh0aGlzLnRpbWUpfS5gKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoaXNFbXB0eURhdGEodGhpcy5kYXRhKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuaW5mbywgYENhbm5vdCBmaW5kIGFueSBkYXRhIGZvciB0aGUgc2VsZWN0ZWQgdGltZSBwZXJpb2Q6ICR7dGhpcy5fc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmd9YCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LnN1Y2Nlc3MsIGBQcm9jZXNzZWQgdGltZSByYW5nZSBpczogJHtnZXRUaW1lUmFuZ2VTdHJpbmcodGhpcy50aW1lKX0uYCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzbGVlcCgxMDApLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLl9idWlsZENoYXJ0KHBvcnQsIHBvcnRzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZWluaXRpYWxpemUgdGhlIHBvcnQgc2VsZWN0b3Igd2l0aCB0aGUgcG9ydHNcclxuICAgKi9cclxuICBwcml2YXRlIF9pbml0UG9ydFNlbGVjdG9yKHBvcnRzOiBzdHJpbmdbXSA9IG51bGwsIHNlbGVjdGVkUG9ydDogc3RyaW5nID0gbnVsbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAvLyBpbml0aWFsaXphdGlvbiBmb3Igbmd4LXNlbGVjdFxyXG4gICAgICBpZiAocG9ydHMgIT0gbnVsbCAmJiBwb3J0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgLy8gTURDLCByZW1vdmUgZGVmYXVsdCAnMDAwMCcgcG9ydFxyXG4gICAgICAgIHRoaXMucG9ydHMgPSBnZW5lcmF0ZVBvcnRzKGdldFJlYWxQb3J0cyhwb3J0cyksIHNlbGVjdGVkUG9ydCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wb3J0cyA9IGdlbmVyYXRlUG9ydHMocG9ydHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocG9ydHMgIT0gbnVsbCAmJiBzZWxlY3RlZFBvcnQgPT09IG51bGwpIHtcclxuICAgICAgICAvLyByZXNldCBzdGF0dXMgd2hlbiBkb2luZzpcclxuICAgICAgICAvLyAxLiBsb2FkaW5nIHBvcnRzXHJcbiAgICAgICAgLy8gMi4gdGhlIGZpbGUgZG9lc24ndCBjb250YWluIHRoZSBzZWxlY3RlZCBQb3J0XHJcbiAgICAgICAgdGhpcy5yZWFkUHJvZ3Jlc3MgPSAwO1xyXG4gICAgICAgIC8vIGhpZGUgdGhlIHByb2dyZXNzIGJhciBhbmQgZW5hYmxlIHRoZSBcInNob3cgY2hhcnRcIiBidXR0b25cclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1cclxuICAgICAgICBdKTtcclxuICAgICAgfVxyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGJ1aWxkIGFuZCBkaXNwbGF5IHRoZSBjaGFydCBvbiBwYWdlXHJcbiAgICogQHBhcmFtIHBvcnQgdGhlIHNlbGVjdGVkIHBvcnRcclxuICAgKiBAcGFyYW0gcG9ydHMgYWxsIGF2YWlsYWJsZSBwb3J0c1xyXG4gICAqIEBwYXJhbSBzd2l0Y2hGbGFnIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gc3dpdGNoaW5nIHBvcnRzIChubyBpbml0IHBvcnQgc2VsZWN0b3IgbmVlZGVkKVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2J1aWxkQ2hhcnQocG9ydDogc3RyaW5nLCBwb3J0czogc3RyaW5nW10sIHN3aXRjaEZsYWcgPSBmYWxzZSk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBiZWdpblRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgaWYgKHBvcnQpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9sb2FkU2V0dGluZ3NGb3JTZWxlY3Rpb25zVGFibGUocG9ydCkpXHJcbiAgICAgICAgLnRoZW4oICgpID0+IHtcclxuICAgICAgICAgIC8vIGdldCB0aGUgY29uZmlnXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jaGFydFNlcnZpY2UuYnVpbGRDaGFydChcclxuICAgICAgICAgICAgdGhpcy50aW1lW3BvcnRdLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFbcG9ydF0sXHJcbiAgICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLmdldFlTY2FsZSh0aGlzLl9oZWFkZXJLZXksIHBvcnQpLFxyXG4gICAgICAgICAgICB0aGlzLl9oZWFkZXJUZXh0LFxyXG4gICAgICAgICAgICB0aGlzLl9oZWFkZXJLZXksXHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbixcclxuICAgICAgICAgICAgdGhpcy50YWJsZVNvdXJjZSxcclxuICAgICAgICAgICAgdGhpcy5fZ2V0SG9zdFRpdGxlKHBvcnQpLFxyXG4gICAgICAgICAgICB0aGlzLnVpU2VydmljZS5nZXREaXNwbGF5SXRlbXModGhpcy5faGVhZGVyS2V5LCBwb3J0LCB0aGlzLmRlZmF1bHRTZWxlY3RlZEl0ZW1zKSxcclxuICAgICAgICAgICAgdGhpcy5fb25ab29tLmJpbmQodGhpcykpXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgICAgICAgLy8gYWZ0ZXIgY2hhcnQgaGFzIGJlZW4gY3JlYXRlZCwgc2hvdyB0aGUgY2hhcnQgYXJlYSwgaGlkZSBwcm9ncmVzcyBiYXIgYW5kIGVuYWJsZSB0aGUgXCJzaG93IGNoYXJ0XCIgYnV0dG9uXHJcbiAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICAgICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5jaGFydEFyZWEsIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICAgICAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1cclxuICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAvLyBzZXQgcG9ydCB0byBjdXJyZW50IGRpc3BsYXlpbmcgcG9ydFxyXG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDaGFydFBvcnQgPSBwb3J0O1xyXG4gICAgICAgICAgICAgIHByaW50UHJvY2Vzc2VkVGltZShiZWdpblRpbWUsICdzdGVwX2J1aWxkX2NoYXJ0Jyk7XHJcbiAgICAgICAgICAgICAgaWYgKHBvcnRzICYmIHBvcnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICghc3dpdGNoRmxhZykge1xyXG4gICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIHBvcnQgc2VsZWN0b3IuIERvIG5vdCBuZWVkIHRvIGRvIGl0IHdoZW4gc3dpdGNoaW5nIHBvcnQuXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKHBvcnRzLCBwb3J0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBvcnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShcclxuICAgICAgICAgIEFsZXJ0Lndhcm5pbmcsXHJcbiAgICAgICAgICAnVGhlIHNlbGVjdGVkIHBvcnQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZS4gUGxlYXNlIGNob29zZSBhIGNvcnJlY3QgcG9ydCBhbmQgaGF2ZSBhIHRyeSBhZ2Fpbi4nKTtcclxuICAgICAgICBpZiAoIXN3aXRjaEZsYWcpIHtcclxuICAgICAgICAgIC8vIGluaXRpYWxpemUgcG9ydCBzZWxlY3Rvci4gRG8gbm90IG5lZWQgdG8gZG8gaXQgd2hlbiBzd2l0Y2hpbmcgcG9ydC5cclxuICAgICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKHBvcnRzLCBwb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgb24gdGhlIHRpdGxlIGFyZWEgb2YgdGhlIGNoYXJ0XHJcbiAgICogZWc6IGhvc3QxIC0gMzAwNDAgKDIwMTgtMDktMDUgMTU6MzI6MzIgfiAyMDE4LTA5LTA3IDE1OjMyOjE1KVxyXG4gICAqIEBwYXJhbSBwb3J0IHNlbGVjdGVkIHBvcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9nZXRIb3N0VGl0bGUocG9ydDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmhvc3QpIHtcclxuICAgICAgcmV0dXJuICBgJHt0aGlzLmhvc3R9IC0gJHtwb3J0fSAoICR7Z2V0VGltZVJhbmdlU3RyaW5nKHRoaXMudGltZVtwb3J0XSl9IClgO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYWZ0ZXIgem9vbSwgZW5hYmxlIHRoZSByZXNldCBidXR0b24uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfb25ab29tKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfV0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogaW5pdGlhbGl6ZSBjaGFydCwgaW5jbHVkaW5nOiBkZXN0cm95IGN1cnJlbnQgY2hhcnQsIGluaXRpYWxpemUgY29uZmlnLCBpbml0aWFsaXplIGFsbCByZWxhdGl2ZSBkYXRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaW5pdENoYXJ0RW52KHN3aXRjaEZsYWc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydFNlcnZpY2UuZGVzdHJveUNoYXJ0KCkudGhlbigoKSA9PiB7XHJcbiAgICAgIHtcclxuICAgICAgICAvLyBjbGVhbnVwIG90aGVyIGRhdGFcclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5jaGFydEFyZWEsIHN0YXR1czogZmFsc2V9XSk7XHJcblxyXG4gICAgICAgIGlmICghc3dpdGNoRmxhZykge1xyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy50aW1lKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVba2V5XSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudGltZVtrZXldLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgIHRoaXMudGltZSA9IHt9O1xyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5kYXRhKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFba2V5XSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtrZXldLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgIHRoaXMuZGF0YSA9IHt9O1xyXG4gICAgICAgICAgdGhpcy5oZWFkZXIubGVuZ3RoID0gMDtcclxuICAgICAgICAgIHRoaXMuaG9zdCA9ICduYW1lc2VydmVyIGhpc3RvcnkgZmlsZSc7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlU291cmNlID0gdm9pZCAwO1xyXG4gICAgICAgICAgdGhpcy5yZWFkUHJvZ3Jlc3MgPSAwO1xyXG4gICAgICAgICAgdGhpcy51aVNlcnZpY2UuY2xlYXJMb2FkSGlzdG9yeUluZm9zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgc2V0dGluZ3MgZm9yIHRoZSBzZWxlY3Rpb24gdGFibGUgKHRoZSByaWdodCBwYXJ0IG9mIHRoZSBjaGFydClcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2xvYWRTZXR0aW5nc0ZvclNlbGVjdGlvbnNUYWJsZShwb3J0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudGFibGVTb3VyY2UgPSB0aGlzLnVpU2VydmljZS5nZXRTZWxlY3Rpb25UYWJsZVJvd3ModGhpcy5faGVhZGVyS2V5LCBwb3J0LCB0aGlzLmRlZmF1bHRTZWxlY3RlZEl0ZW1zKTtcclxuICAgIHRoaXMuX3NlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbCh0cnVlLCBbXSk7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgaWYgKHRoaXMudWlTZXJ2aWNlLmdldERpc3BsYXlJdGVtcyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpLmluY2x1ZGVzKHJvdy5LUEkpKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uLnNlbGVjdChyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgbWVzc2FnZXNcclxuICAgKiBAcGFyYW0gdHlwZSB0eXBlIG9mIHRoZSBtZXNzYWdlXHJcbiAgICogQHBhcmFtIG1lc3NhZ2UgbWVzc2FnZSB0ZXh0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2hvd01lc3NhZ2UodHlwZTogQWxlcnQsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHR5cGUpIHtcclxuICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBBbGVydC5zdWNjZXNzOlxyXG4gICAgICAgIGNhc2UgQWxlcnQuaW5mbzpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQWxlcnQud2FybmluZzpcclxuICAgICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQWxlcnQuZXJyb3I6XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hbGVydE1lc3NhZ2UgPT09IG1lc3NhZ2UpIHtcclxuICAgICAgLy8gdHJ5IHRyaWdnZXIgdGhlIGNoYW5nZSBldmVudCBvZiB0aGUgYWxlcnQuXHJcbiAgICAgIHRoaXMuYWxlcnRNZXNzYWdlID0gdm9pZCAwO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWxlcnRNZXNzYWdlID0gbWVzc2FnZSwgMTAwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRNZXNzYWdlID0gbWVzc2FnZTtcclxuICAgIH1cclxuICAgIHRoaXMuYWxlcnRUeXBlID0gdHlwZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRvZ2dsZSBpdGVtcyB3aXRoIHRoZSBwcm92aWRlZCBzdGF0dXMgKHNob3cgb3IgaGlkZSB0aGUgcmVsYXRpdmUgZWxlbWVudCBvbiB0aGUgcGFnZSlcclxuICAgKiBAcGFyYW0gaXRlbXMgaXRlbXMgd2l0aCB0aGUgcmVsYXRpdmUgaWQgYW5kIHN0YXR1cy5cclxuICAgKi9cclxuICBwcml2YXRlIF90b2dnbGVJdGVtcyhpdGVtczoge2lkOiBIdG1sRWxlbWVudCwgc3RhdHVzOiBib29sZWFufVtdKSB7XHJcbiAgICBjb25zdCBnZXRWYXJpYWJsZU5hbWVCeVR5cGVJZCA9IChpZDogSHRtbEVsZW1lbnQpID0+IHtcclxuICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQuY2hhcnRBcmVhOiByZXR1cm4gJ3Nob3dDaGFydEZsYWcnO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzczogcmV0dXJuICdzaG93UmVhZEZpbGVQcm9ncmVzcyc7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b246IHJldHVybiAnZW5hYmxlU2hvd0NoYXJ0QnV0dG9uJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LmxvYWRQb3J0c0J1dHRvbjogcmV0dXJuICdlbmFibGVMb2FkUG9ydHNCdXR0b24nO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbjogcmV0dXJuICdlbmFibGVSZXNldENoYXJ0QnV0dG9uJztcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGlmIChpdGVtcykge1xyXG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIHRoaXNbZ2V0VmFyaWFibGVOYW1lQnlUeXBlSWQoaXRlbS5pZCldID0gaXRlbS5zdGF0dXM7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNuYW1lc2VydmVySGlzdG9yeUFsbCBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1hbGxcIiAod2luZG93OnJlc2l6ZSk9XCJvblJlc2l6ZSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRvb2xiYXItY2hhcnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtYm94LWNvbnRlbnRcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFzaG93UmVhZEZpbGVQcm9ncmVzc1wiPlxyXG4gICAgICAgIDxmaWxlLWRyb3AtaW5wdXQgKGZpbGVEcm9wKT1cImZpbGVEcm9wcGVkKCRldmVudClcIiAoZmlsZUlucHV0KT1cImZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wQXJlYVRleHRdPSBcImFiYnJldmlhdGVkRmlsZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0QXJlYVRleHRdPVwiJ0Jyb3dzZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImZpbGU/Lm5hbWU/IGZpbGUubmFtZTonU2VsZWN0IGEgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlIGZyb20geW91ciBsb2NhbCBkaXNrLidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZmlsZUJ1ZmZlclwiPlxyXG4gICAgICAgIDwvZmlsZS1kcm9wLWlucHV0PlxyXG4gICAgICAgIDxwICpuZ0lmPVwiZmlsZUJ1ZmZlclwiIGNsYXNzPVwiYm94LXN0cmVhbS1tb2RlLXRleHRcIj57e3N0cmVhbU1vZGVGaWxlTmFtZSB8fCAnbmFtZXNlcnZlcl9oaXN0b3J5LnRyYyAoc3RyZWFtIG1vZGUpJ319PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInNob3dSZWFkRmlsZVByb2dyZXNzXCI+XHJcbiAgICAgICAgPHByb2dyZXNzLWJhciBbcHJvZ3Jlc3NdPVwicmVhZFByb2dyZXNzXCI+PC9wcm9ncmVzcy1iYXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGltZVwiPlxyXG4gICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10aW1lLXJhbmdlXCI+XHJcbiAgICAgICA8dGltZS1yYW5nZS1zZWxlY3RvciBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIiBbKGRhdGVUaW1lUmFuZ2UpXT1cImRhdGVUaW1lUmFuZ2VcIj48L3RpbWUtcmFuZ2Utc2VsZWN0b3I+XHJcbiAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lem9uZS1zZWxlY3RvclwiPlxyXG4gICAgICAgIDx0aW1lem9uZS1zZWxlY3RvciBbKHRpbWV6b25lKV09XCJ0aW1lem9uZVwiIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiPjwvdGltZXpvbmUtc2VsZWN0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInBvcnQtc2VsZWN0aW9uXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwb3J0LXNlbGVjdG9yXCI+XHJcbiAgICAgICAgPHBvcnQtc2VsZWN0b3IgKHBvcnRDaGFuZ2UpPVwic3dpdGNoUG9ydEZvckNoYXJ0KCRldmVudClcIiBbKHBvcnQpXT1cInBvcnRcIiBbcG9ydHNdPVwicG9ydHNcIiBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj48L3BvcnQtc2VsZWN0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicG9ydC1sb2FkLWJ1dHRvblwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRQb3J0cygpXCIgdGl0bGU9XCJMb2FkIGFsbCBwb3J0cyBmcm9tIG5hbWUgc2VydmVyIGhpc3RvcnkgdHJhY2UgZmlsZS5cIiBbZGlzYWJsZWRdPVwiIWVuYWJsZVNob3dDaGFydEJ1dHRvbiB8fCBwb3J0IHx8ICFlbmFibGVMb2FkUG9ydHNCdXR0b25cIj57e3Nob3dSZWFkRmlsZVByb2dyZXNzPyBcIkxvYWRpbmcuLi5cIiA6IFwiTG9hZFwifX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2hhcnQtb3BlcmF0aW9uXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2hvd0NoYXJ0KClcIiB0aXRsZT1cIkxvYWQgYW5kIGRpc3BsYXkgYWxsIGRhdGEgZnJvbSBuYW1lIHNlcnZlciBoaXN0b3J5IHRyYWNlIGZpbGUuXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVTaG93Q2hhcnRCdXR0b25cIj57e3Nob3dSZWFkRmlsZVByb2dyZXNzPyBcIkxvYWRpbmcuLi5cIiA6IFwiU2hvd1wifX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJlc2V0Q2hhcnQoKVwiIHRpdGxlPVwiUmVzZXQgem9vbSBvZiBjaGFydC5cIiBbZGlzYWJsZWRdPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3MgfHwgIWVuYWJsZVJlc2V0Q2hhcnRCdXR0b25cIj5SZXNldCBDaGFydDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgI25hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudCBjbGFzcz1cIm5hbWVzZXJ2ZXItaGlzdG9yeS1jb250ZW50XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWNvbnRlbnQtY2hhcnRcIj5cclxuICAgICAgPGluc3RydWN0aW9uIFsoc2hvdyldPVwic2hvd0luc3RydWN0aW9uXCIgKm5nSWY9XCIhc2hvd0NoYXJ0RmxhZyAmJiBzaG93SW5zdHJ1Y3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXAxRmluaXNoZWRdPVwiISFmaWxlXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwMkZpbmlzaGVkXT1cImRhdGVUaW1lUmFuZ2UgJiYgKCEhZGF0ZVRpbWVSYW5nZVswXSB8fCAhIWRhdGVUaW1lUmFuZ2VbMV0pIHx8IHRpbWV6b25lICE9IGRlZmF1bHRUaW1lem9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDNGaW5pc2hlZF09XCIhIXBvcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXA0RmluaXNoZWRdPVwic3RlcFNob3dDaGFydCAmJiAhZW5hYmxlU2hvd0NoYXJ0QnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwNUZpbmlzaGVkXT1cImZhbHNlXCI+XHJcbiAgICAgIDwvaW5zdHJ1Y3Rpb24+XHJcbiAgICAgIDxjYW52YXMgaWQ9XCJjaGFydE5hbWVTZXJ2ZXJIaXN0b3J5XCIgPjwvY2FudmFzPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWNvbnRlbnQtY29udHJvbGxlclwiID5cclxuICAgICAgPG5neC1zZWxlY3Rpb24tdGFibGUgKGNoYW5nZSk9XCJzZWxlY3RJdGVtKCRldmVudClcIiAqbmdJZj1cInNob3dDaGFydEZsYWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tib3hdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZVNvdXJjZV09XCJ0YWJsZVNvdXJjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXlDb2x1bW5dPVwia3BpQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbkNvbHVtbnNdPVwiaGlkZGVuQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwQ29sdW1uXT1cImRlc2NDb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoU3R5bGVdPVwic2VhcmNoVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hDb2x1bW5dPVwia3BpQ29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpU2VsZWN0aW9uXT1cInRydWVcIj5cclxuICAgICAgPC9uZ3gtc2VsZWN0aW9uLXRhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwibWVzc2FnZS1jb250YWluZXJcIiAqbmdJZj1cImFsZXJ0TWVzc2FnZVwiPlxyXG4gIDxhbGVydCBbKGFsZXJ0TWVzc2FnZSldPVwiYWxlcnRNZXNzYWdlXCIgW2FsZXJ0VHlwZV09XCJhbGVydFR5cGVcIiBbYWxlcnRUaW1lb3V0XT1cIjMwMDAwXCI+PC9hbGVydD5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';
2
2
  import { TimezoneSelectorService } from './timezone-selector.service';
3
- import moment from 'moment-timezone';
3
+ import * as moment from 'moment-timezone';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "./timezone-selector.service";
6
6
  import * as i2 from "ngx-dropdown-list";
@@ -85,4 +85,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
85
85
  }], timezoneChange: [{
86
86
  type: Output
87
87
  }] } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXpvbmUtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL25hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXIvY29tcG9uZW50cy90aW1lem9uZS1zZWxlY3Rvci90aW1lem9uZS1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFtQnJDLE1BQU0sT0FBTyx5QkFBeUI7SUFlcEMsWUFBb0IsT0FBZ0M7UUFBaEMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFiM0MsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFZcEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQzlGLENBQUMsRUFBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEtBQUssU0FB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QUFtQjtvQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7O0dBVVQ7b0JBQ0QsU0FBUyxFQUFFLENBQUUsdUJBQXVCLENBQUU7b0JBQ3RDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4R0FHVSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRpbWV6b25lU2VsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi90aW1lem9uZS1zZWxlY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGltZXpvbmUtc2VsZWN0b3InLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bmd4LWRyb3Bkb3duLWxpc3QgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwidGltZXpvbmVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlTZWxlY3Rpb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInVGltZXpvbmVzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFZhbHVlKV09XCJ0aW1lem9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlckJveF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0NsZWFyXT1cImZhbHNlXCI+XHJcbiAgICA8L25neC1kcm9wZG93bi1saXN0PlxyXG4gIGAsXHJcbiAgcHJvdmlkZXJzOiBbIFRpbWV6b25lU2VsZWN0b3JTZXJ2aWNlIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbWV6b25lU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRpbWV6b25lOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHRpbWV6b25lQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIGFsbCB0aW1lIHpvbmVzIGZvciBlYWNoIHJlZ2lvblxyXG4gICAqL1xyXG4gIHRpbWV6b25lczogYW55W107XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIF9mb3JtYXROdW1iZXIobnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBudW1iZXIgPCAxMCB8fCAhbnVtYmVyID8gYDAke251bWJlcn1gIDogYCR7bnVtYmVyfWA7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IFRpbWV6b25lU2VsZWN0b3JTZXJ2aWNlKSB7XHJcbiAgICBjb25zdCBkZWZhdWx0VFogPSB0aGlzLnNlcnZpY2UuZ2V0RGVmYXVsdFRpbWV6b25lKCk7XHJcbiAgICB0aGlzLnRpbWV6b25lcyA9IHRoaXMuc2VydmljZS5nZXRab25lcygpLm1hcCh0eiA9PiAoe2dyb3VwOiB0ei5yZWdpb24sIGl0ZW1zOiB0ei56b25lcy5tYXAoem9uZSA9PlxyXG4gICAgICAgICh7aWQ6IHpvbmUsIHZhbHVlOiB6b25lLCB0ZXh0OiB0aGlzLl9nZXRGb3JtYXR0ZWRab25lKHR6LnJlZ2lvbiwgem9uZSksIHNlbGVjdGVkOiB6b25lID09PSBkZWZhdWx0VFp9KSl9KSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlcy50aW1lem9uZSAmJiBjaGFuZ2VzLnRpbWV6b25lLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy50aW1lem9uZXMpIHtcclxuICAgICAgICB0aGlzLnRpbWV6b25lcyA9IHRoaXMuc2VydmljZS5nZXRab25lcygpLm1hcCh0eiA9PiAoe2dyb3VwOiB0ei5yZWdpb24sIGl0ZW1zOiB0ei56b25lcy5tYXAoem9uZSA9PlxyXG4gICAgICAgICAgICAoe2lkOiB6b25lLCB2YWx1ZTogem9uZSwgdGV4dDogdGhpcy5fZ2V0Rm9ybWF0dGVkWm9uZSh0ei5yZWdpb24sIHpvbmUpLCBzZWxlY3RlZDogem9uZSA9PT0gY2hhbmdlcy50aW1lem9uZS5jdXJyZW50VmFsdWV9KSl9KSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEZvcm1hdHRlZFpvbmUocmVnaW9uLCB6b25lKSB7XHJcbiAgICByZXR1cm4gYCR7cmVnaW9ufSAtICR7dGhpcy5fZm9ybWF0VGltZXpvbmUoem9uZSl9ICR7dGhpcy5fZ2V0T2Zmc2V0KHpvbmUpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb3JtYXRUaW1lem9uZSh6b25lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdHogPSB6b25lLnNwbGl0KCcvJyk7XHJcbiAgICByZXR1cm4gdHpbdHoubGVuZ3RoIC0gMV0ucmVwbGFjZSgnXycsICcgJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRPZmZzZXQoem9uZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBvZmZzZXQgPSBtb21lbnQudHooem9uZSkudXRjT2Zmc2V0KCk7XHJcbiAgICBjb25zdCBuZWcgPSBvZmZzZXQgPCAwO1xyXG4gICAgaWYgKG5lZykge1xyXG4gICAgICBvZmZzZXQgPSAtMSAqIG9mZnNldDtcclxuICAgIH1cclxuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XHJcbiAgICBjb25zdCBtaW51dGVzID0gKG9mZnNldCAvIDYwIC0gaG91cnMpICogNjA7XHJcbiAgICByZXR1cm4gYChHTVQke25lZyA/ICctJyA6ICcrJ30ke1RpbWV6b25lU2VsZWN0b3JDb21wb25lbnQuX2Zvcm1hdE51bWJlcihob3Vycyl9OiR7VGltZXpvbmVTZWxlY3RvckNvbXBvbmVudC5fZm9ybWF0TnVtYmVyKG1pbnV0ZXMpfSlgO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb25DaGFuZ2UgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBcIm5neC1zZWxlY3RcIiBlbGVtZW50XHJcbiAgICogQHBhcmFtIHNlbGVjdGVkVGltZXpvbmUgVGhlIHRpbWV6b25lIHN0cmluZyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIG9uQ2hhbmdlKHNlbGVjdGVkVGltZXpvbmU6IHN0cmluZykge1xyXG4gICAgdGhpcy50aW1lem9uZSA9IHNlbGVjdGVkVGltZXpvbmU7XHJcbiAgICB0aGlzLnRpbWV6b25lQ2hhbmdlLmVtaXQodGhpcy50aW1lem9uZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXpvbmUtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL25hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXIvY29tcG9uZW50cy90aW1lem9uZS1zZWxlY3Rvci90aW1lem9uZS1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQzs7OztBQW1CMUMsTUFBTSxPQUFPLHlCQUF5QjtJQWVwQyxZQUFvQixPQUFnQztRQUFoQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQWIzQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWhCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQVlwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDOUYsQ0FBQyxFQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksS0FB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QUUsbUJBQW1CO29CQUM3QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7R0FVVDtvQkFDRCxTQUFTLEVBQUUsQ0FBRSx1QkFBdUIsQ0FBRTtvQkFDdEMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzhHQUdVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGltZXpvbmVTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL3RpbWV6b25lLXNlbGVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RpbWV6b25lLXNlbGVjdG9yJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5neC1kcm9wZG93bi1saXN0IChzZWxlY3Rpb25DaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInRpbWV6b25lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW211bHRpU2VsZWN0aW9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ1RpbWV6b25lcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRWYWx1ZSldPVwidGltZXpvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJCb3hdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dDbGVhcl09XCJmYWxzZVwiPlxyXG4gICAgPC9uZ3gtZHJvcGRvd24tbGlzdD5cclxuICBgLFxyXG4gIHByb3ZpZGVyczogWyBUaW1lem9uZVNlbGVjdG9yU2VydmljZSBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaW1lem9uZVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSB0aW1lem9uZTogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSB0aW1lem9uZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAvKipcclxuICAgKiBhbGwgdGltZSB6b25lcyBmb3IgZWFjaCByZWdpb25cclxuICAgKi9cclxuICB0aW1lem9uZXM6IGFueVtdO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfZm9ybWF0TnVtYmVyKG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbnVtYmVyIDwgMTAgfHwgIW51bWJlciA/IGAwJHtudW1iZXJ9YCA6IGAke251bWJlcn1gO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBUaW1lem9uZVNlbGVjdG9yU2VydmljZSkge1xyXG4gICAgY29uc3QgZGVmYXVsdFRaID0gdGhpcy5zZXJ2aWNlLmdldERlZmF1bHRUaW1lem9uZSgpO1xyXG4gICAgdGhpcy50aW1lem9uZXMgPSB0aGlzLnNlcnZpY2UuZ2V0Wm9uZXMoKS5tYXAodHogPT4gKHtncm91cDogdHoucmVnaW9uLCBpdGVtczogdHouem9uZXMubWFwKHpvbmUgPT5cclxuICAgICAgICAoe2lkOiB6b25lLCB2YWx1ZTogem9uZSwgdGV4dDogdGhpcy5fZ2V0Rm9ybWF0dGVkWm9uZSh0ei5yZWdpb24sIHpvbmUpLCBzZWxlY3RlZDogem9uZSA9PT0gZGVmYXVsdFRafSkpfSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMudGltZXpvbmUgJiYgY2hhbmdlcy50aW1lem9uZS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMudGltZXpvbmVzKSB7XHJcbiAgICAgICAgdGhpcy50aW1lem9uZXMgPSB0aGlzLnNlcnZpY2UuZ2V0Wm9uZXMoKS5tYXAodHogPT4gKHtncm91cDogdHoucmVnaW9uLCBpdGVtczogdHouem9uZXMubWFwKHpvbmUgPT5cclxuICAgICAgICAgICAgKHtpZDogem9uZSwgdmFsdWU6IHpvbmUsIHRleHQ6IHRoaXMuX2dldEZvcm1hdHRlZFpvbmUodHoucmVnaW9uLCB6b25lKSwgc2VsZWN0ZWQ6IHpvbmUgPT09IGNoYW5nZXMudGltZXpvbmUuY3VycmVudFZhbHVlfSkpfSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRGb3JtYXR0ZWRab25lKHJlZ2lvbiwgem9uZSkge1xyXG4gICAgcmV0dXJuIGAke3JlZ2lvbn0gLSAke3RoaXMuX2Zvcm1hdFRpbWV6b25lKHpvbmUpfSAke3RoaXMuX2dldE9mZnNldCh6b25lKX1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9ybWF0VGltZXpvbmUoem9uZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHR6ID0gem9uZS5zcGxpdCgnLycpO1xyXG4gICAgcmV0dXJuIHR6W3R6Lmxlbmd0aCAtIDFdLnJlcGxhY2UoJ18nLCAnICcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0T2Zmc2V0KHpvbmU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgb2Zmc2V0ID0gbW9tZW50LnR6KHpvbmUpLnV0Y09mZnNldCgpO1xyXG4gICAgY29uc3QgbmVnID0gb2Zmc2V0IDwgMDtcclxuICAgIGlmIChuZWcpIHtcclxuICAgICAgb2Zmc2V0ID0gLTEgKiBvZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xyXG4gICAgY29uc3QgbWludXRlcyA9IChvZmZzZXQgLyA2MCAtIGhvdXJzKSAqIDYwO1xyXG4gICAgcmV0dXJuIGAoR01UJHtuZWcgPyAnLScgOiAnKyd9JHtUaW1lem9uZVNlbGVjdG9yQ29tcG9uZW50Ll9mb3JtYXROdW1iZXIoaG91cnMpfToke1RpbWV6b25lU2VsZWN0b3JDb21wb25lbnQuX2Zvcm1hdE51bWJlcihtaW51dGVzKX0pYDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIG9uQ2hhbmdlIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgXCJuZ3gtc2VsZWN0XCIgZWxlbWVudFxyXG4gICAqIEBwYXJhbSBzZWxlY3RlZFRpbWV6b25lIFRoZSB0aW1lem9uZSBzdHJpbmcgc2VsZWN0ZWRcclxuICAgKi9cclxuICBvbkNoYW5nZShzZWxlY3RlZFRpbWV6b25lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGltZXpvbmUgPSBzZWxlY3RlZFRpbWV6b25lO1xyXG4gICAgdGhpcy50aW1lem9uZUNoYW5nZS5lbWl0KHRoaXMudGltZXpvbmUpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -298,11 +298,16 @@ export class ChartService {
298
298
  * generate configuration for chart and create the chart object.
299
299
  */
300
300
  buildChart(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCB) {
301
- return new Promise((resolve) => {
302
- const ctx = document.getElementById('chartNameServerHistory').getContext('2d');
303
- const cfg = ChartService._generateChartConfig(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCB);
304
- this._chart = new Chart(ctx, cfg);
305
- resolve();
301
+ return new Promise((resolve, reject) => {
302
+ const ctx = document.getElementById('chartNameServerHistory')?.getContext('2d');
303
+ if (ctx) {
304
+ const cfg = ChartService._generateChartConfig(time, data, yScale, header, headerKey, selection, tableSource, title, defaultItems, zoomCB);
305
+ this._chart = new Chart(ctx, cfg);
306
+ resolve();
307
+ }
308
+ else {
309
+ reject('Can not find the canvas.');
310
+ }
306
311
  });
307
312
  }
308
313
  /**
@@ -320,4 +325,4 @@ ChartService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version
320
325
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ChartService, decorators: [{
321
326
  type: Injectable
322
327
  }] });
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL3NlcnZpY2VzL2NoYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFxQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUV6RSwrRUFBK0U7QUFDL0UsV0FBVztBQUVYLE1BQU0sT0FBTyxZQUFZO0lBR3ZCOztPQUVHO0lBQ0ssTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFvQixFQUFFLEtBQVksRUFBRSxNQUFlO1FBQy9FLDBEQUEwRDtRQUMxRCx5REFBeUQ7UUFDekQsd0RBQXdEO1FBQ3hELHVEQUF1RDtRQUN2RCxtRUFBbUU7UUFDbkUseUVBQXlFO1FBQ3pFLElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEQsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDWCw0RUFBNEU7b0JBQzVFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2lCQUN6RTtxQkFBTTtvQkFDTCxJ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SUFBYTtRQUNuRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDN0IsWUFBWSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7MEdBMVVVLFlBQVk7OEdBQVosWUFBWTs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnY2hhcnQuanMnO1xyXG5pbXBvcnQgeyBnZXRDb2xvclN0cmluZywgZ2V0TnVtYmVyV2l0aENvbW1hcywgcmFuZG9tQ29sb3IgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gJy4vdWkuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXJ0Q29udGVudERhdGFJdGVtLCBMZWdlbmRDb2xvciwgSXRlbSwgVW5pdCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbi8vIFVzaW5nIGR5bmFtaWMgZmxhZyB0byBmaXggdGhlIGlzc3VlIG9mIG5nLXBhY2thZ3IgIzY5NjogTGFtYmRhIG5vdCBzdXBwb3J0ZWRcclxuLy8gQGR5bmFtaWNcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ2hhcnRTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9jaGFydDogQ2hhcnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIHRvZ2dsZSB0aGUgZGF0YXNldCBzdGF0dXMgb2YgdGhlIGNoYXJ0LCBzeW5jaHJvbm91c2x5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3RvZ2dsZURhdGFTZXQoZGF0YVNldEluZGV4OiBudW1iZXIsIGNoYXJ0OiBDaGFydCwgaGlkZGVuOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAvLyBtZXRhLmhpZGRlbiA9IGZhbHNlIGFuZCBkYXRhc2V0LmhpZGRlbiA9IGZhbHNlIC0tPiBzaG93XHJcbiAgICAvLyBtZXRhLmhpZGRlbiA9IGZhbHNlIGFuZCBkYXRhc2V0LmhpZGRlbiA9IHRydWUgLS0+IHNob3dcclxuICAgIC8vIG1ldGEuaGlkZGVuID0gbnVsbCBhbmQgZGF0YXNldC5oaWRkZW4gPSBmYWxzZSAtPiBzaG93XHJcbiAgICAvLyBtZXRhLmhpZGRlbiA9IG51bGwgYW5kIGRhdGFzZXQuaGlkZGVuID0gdHJ1ZSAtPiBoaWRlXHJcbiAgICAvLyBpbiB0aGUgZmlyc3QgY2FzZSAoZmFsc2UsIGZhbHNlKSwgbmVlZHMgdG8gY2xpY2sgbGVnZW5kIHR3aWNlIHRvXHJcbiAgICAvLyBoaWRlIHRoZSBkYXRhc2V0LCBiZWNhdXNlIHRoZSBmaXJzdCBjbGljayBvbmx5IHNldCBtZXRhLmhpZGRlbiA9IG51bGwpXHJcbiAgICBpZiAoZGF0YVNldEluZGV4ICE9IG51bGwgJiYgY2hhcnQgIT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YVNldEluZGV4KTtcclxuICAgICAgaWYgKG1ldGEpIHtcclxuICAgICAgICBpZiAoIWhpZGRlbikge1xyXG4gICAgICAgICAgLy8gZGlzcGxheSB0aGUgaXRlbSwgaWYgZGF0YXNldCBoaWRkZW4gaXMgZmFsc2UsIHNldCBoaWRkZW4gb2YgbWV0YSB0byBudWxsLFxyXG4gICAgICAgICAgbWV0YS5oaWRkZW4gPSAhY2hhcnQuZGF0YS5kYXRhc2V0c1tkYXRhU2V0SW5kZXhdLmhpZGRlbiA/IG51bGwgOiBoaWRkZW47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1ldGEuaGlkZGVuID0gaGlkZGVuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyBfcmVzdG9yZURhdGFTZXRTdGF0dXMoY2hhcnQ6IENoYXJ0LCBkYXRhc2V0SW5kZXg6IG51bWJlciwgc3RhdHVzOiB7bWV0YVN0YXR1czogYm9vbGVhbiwgZGF0YXNldFN0YXR1czogYm9vbGVhbn0pOiB2b2lkIHtcclxuICAgIGlmIChjaGFydCAmJiBjaGFydC5kYXRhICYmIGNoYXJ0LmRhdGEuZGF0YXNldHMgJiYgY2hhcnQuZ2V0RGF0YXNldE1ldGEoZGF0YXNldEluZGV4KSAmJiBzdGF0dXMpIHtcclxuICAgICAgY2hhcnQuZGF0YS5kYXRhc2V0c1tkYXRhc2V0SW5kZXhdLmhpZGRlbiA9IHN0YXR1cy5kYXRhc2V0U3RhdHVzO1xyXG4gICAgICBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpLmhpZGRlbiA9IHN0YXR1cy5tZXRhU3RhdHVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogaW5pdGlhbGl6ZS9jbGVhciB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNoYXJ0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luaXRDb25maWcoY2hhcnQ6IGFueSk6IHZvaWQge1xyXG4gICAgLy8gaW5pdCBkYXRhIHNldHNcclxuICAgIGlmIChjaGFydC5kYXRhICYmIGNoYXJ0LmRhdGEuZGF0YXNldHMpIHtcclxuICAgICAgY2hhcnQuZGF0YS5kYXRhc2V0cy5sZW5ndGggPSAwO1xyXG4gICAgICBjaGFydC5kYXRhLmRhdGFzZXRzID0gdm9pZCAwO1xyXG4gICAgICBjaGFydC5kYXRhID0gdm9pZCAwO1xyXG4gICAgfVxyXG4gICAgLy8gaW5pdCBvcHRpb25zXHJcbiAgICBpZiAoY2hhcnQub3B0aW9ucyAmJiBjaGFydC5vcHRpb25zLnNjYWxlcyAmJiAoY2hhcnQub3B0aW9ucy5zY2FsZXMueEF4ZXMgfHwgY2hhcnQub3B0aW9ucy5zY2FsZXMueUF4aXMpKSB7XHJcbiAgICAgIGlmIChjaGFydC5vcHRpb25zLnNjYWxlcy54QXhlcykge1xyXG4gICAgICAgIGNoYXJ0Lm9wdGlvbnMuc2NhbGVzLnhBeGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgY2hhcnQub3B0aW9ucy5zY2FsZXMueEF4ZXMgPSB2b2lkIDA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoYXJ0Lm9wdGlvbnMuc2NhbGVzLnlBeGVzKSB7XHJcbiAgICAgICAgY2hhcnQub3B0aW9ucy5zY2FsZXMueUF4ZXMubGVuZ3RoID0gMDtcclxuICAgICAgICBjaGFydC5vcHRpb25zLnNjYWxlcy55QXhlcyA9IHZvaWQgMDtcclxuICAgICAgfVxyXG4gICAgICBjaGFydC5vcHRpb25zLnNjYWxlcyA9IHZvaWQgMDtcclxuICAgICAgY2hhcnQub3B0aW9ucyA9IHZvaWQgMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIERhdGFTZXRzIGJ5IHRoZSBkYXRhIGFuZCBoZWFkZXIgaW5mb3JtYXRpb25cclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfZ2VuZXJhdGVEYXRhU2V0cyhkYXRhOiBDaGFydENvbnRlbnREYXRhSXRlbVtdW10sIGhlYWRlcjogc3RyaW5nW10sIGhlYWRlcktleTogc3RyaW5nW10sIGRlZmF1bHRJdGVtczogc3RyaW5nW10pOiBhbnkge1xyXG4gICAgY29uc3QgYWxwaGEgPSAwLjU7XHJcbiAgICBjb25zdCBjb2xvcnM6IExlZ2VuZENvbG9yID0gVUlTZXJ2aWNlLmdldENvbG9ycyhhbHBoYSk7XHJcbiAgICByZXR1cm4gZGF0YS5tYXAoKGl0ZW0sIGkpID0+IHtcclxuICAgICAgY29uc3QgY29sb3IgPSBjb2xvcnNbaGVhZGVyS2V5W2ldXSA/IGdldENvbG9yU3RyaW5nKGNvbG9yc1toZWFkZXJLZXlbaV1dKSA6IHJhbmRvbUNvbG9yKGFscGhhKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBib3JkZXJDb2xvcjogY29sb3IsXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvcixcclxuICAgICAgICBib3JkZXJXaWR0aDogMS4yNSxcclxuICAgICAgICBzcGFuR2FwczogZmFsc2UsXHJcbiAgICAgICAgbGFiZWw6IGhlYWRlcltpXSxcclxuICAgICAgICBkYXRhOiBkYXRhW2ldLFxyXG4gICAgICAgIGZpbGw6IGZhbHNlLFxyXG4gICAgICAgIHlBeGlzSUQ6IGB5LWF4aXMtJHtpfWAsXHJcbiAgICAgICAgaGlkZGVuOiAhZGVmYXVsdEl0ZW1zLmluY2x1ZGVzKGhlYWRlcltpXSlcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyBfZ2VuZXJhdGVYQXhlcyh0aW1lOiBudW1iZXJbXSk6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtYXQgPSAnTU1NREQgSEg6bW06c3MnO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6ICd0aW1lJyxcclxuICAgICAgICB0aW1lOiB7XHJcbiAgICAgICAgICAvLyB1bml0OiAnc2Vjb25kJyxcclxuICAgICAgICAgIC8vIHN0ZXBTaXplOiAxLFxyXG4gICAgICAgICAgZGlzcGxheUZvcm1hdHM6IHtcclxuICAgICAgICAgICAgJ21pbGxpc2Vjb25kJzogZm9ybWF0LFxyXG4gICAgICAgICAgICAnc2Vjb25kJzogZm9ybWF0LFxyXG4gICAgICAgICAgICAnbWludXRlJzogZm9ybWF0LFxyXG4gICAgICAgICAgICAnaG91cic6ICdNTU1ERCBISCcsXHJcbiAgICAgICAgICAgICdkYXknOiAnTU1NREQgWVlZWScsXHJcbiAgICAgICAgICAgICd3ZWVrJzogZm9ybWF0LFxyXG4gICAgICAgICAgICAnbW9udGgnOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICdxdWFydGVyJzogZm9ybWF0LFxyXG4gICAgICAgICAgICAneWVhcic6IGZvcm1hdCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0b29sdGlwRm9ybWF0OiAnbGwgSEg6bW06c3MnLFxyXG4gICAgICAgICAgbWluOiB0aW1lWzBdLFxyXG4gICAgICAgICAgbWF4OiB0aW1lW3RpbWUubGVuZ3RoIC0gMV1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIHNjYWxlTGFiZWw6IHtcclxuICAgICAgICAvLyAgIGRpc3BsYXk6IGZhbHNlLFxyXG4gICAgICAgIC8vICAgbGFiZWxTdHJpbmc6ICdEYXRlJ1xyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgICAgdGlja3M6IHtcclxuICAgICAgICAgIG1heFJvdGF0aW9uOiAwLFxyXG4gICAgICAgICAgcmV2ZXJzZTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2dlbmVyYXRlWUF4ZXMoZGF0YTogQ2hhcnRDb250ZW50RGF0YUl0ZW1bXVtdLCB5U2NhbGU6IG51bWJlcltdKTogYW55IHtcclxuICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbSwgaSkgPT4gKHtcclxuICAgICAgdHlwZTogJ2xpbmVhcicsXHJcbiAgICAgIGRpc3BsYXk6IGZhbHNlLFxyXG4gICAgICBwb3NpdGlvbjogJ2xlZnQnLFxyXG4gICAgICBpZDogYHktYXhpcy0ke2l9YCxcclxuICAgICAgZ3JpZExpbmVzOiB7XHJcbiAgICAgIH0sXHJcbiAgICAgIHRpY2tzOiB7XHJcbiAgICAgICAgbWluOiAwLFxyXG4gICAgICAgIG1heDogeVNjYWxlW2ldXHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdlbmVyYXRlIGNvbmZpZ3VyYXRpb24gZm9yIGNoYXJ0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2dlbmVyYXRlQ2hhcnRDb25maWcodGltZTogbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogQ2hhcnRDb250ZW50RGF0YUl0ZW1bXVtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlTY2FsZTogbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBzdHJpbmdbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJLZXk6IHN0cmluZ1tdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVNvdXJjZTogYW55LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEl0ZW1zOiBzdHJpbmdbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tQ2FsbGJhY2s6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB0eXBlOiAnbGluZScsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBkYXRhc2V0czogQ2hhcnRTZXJ2aWNlLl9nZW5lcmF0ZURhdGFTZXRzKGRhdGEsIGhlYWRlciwgaGVhZGVyS2V5LCBkZWZhdWx0SXRlbXMpXHJcbiAgICAgIH0sXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBlbGVtZW50czoge3BvaW50OiB7cmFkaXVzOiAwLCBoaXRSYWRpdXM6IDUsIGhvdmVyUmFkaXVzOiA1fX0sIC8vIHNldCByYWRpdXMgdG8gMCBub3QgdG8gZGlzcGxheSBwb2ludFxyXG4gICAgICAgIHJlc3BvbnNpdmU6IHRydWUsXHJcbiAgICAgICAgYW5pbWF0aW9uOiB7XHJcbiAgICAgICAgICBkdXJhdGlvbjogMCwgLy8gZ2VuZXJhbCBhbmltYXRpb24gdGltZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG92ZXI6IHtcclxuICAgICAgICAgIGFuaW1hdGlvbkR1cmF0aW9uOiAwLCAvLyBkdXJhdGlvbiBvZiBhbmltYXRpb25zIHdoZW4gaG92ZXJpbmcgYW4gaXRlbVxyXG4gICAgICAgICAgb25Ib3ZlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLmdldEVsZW1lbnRBdEV2ZW50KGUpO1xyXG4gICAgICAgICAgICBpZiAocG9pbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgZS50YXJnZXQuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGUudGFyZ2V0LnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzcG9uc2l2ZUFuaW1hdGlvbkR1cmF0aW9uOiAwLCAvLyBhbmltYXRpb24gZHVyYXRpb24gYWZ0ZXIgYSByZXNpemVcclxuICAgICAgICBsZWdlbmQ6IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcclxuICAgICAgICAgIG9uSG92ZXI6IChlKSA9PiB7XHJcbiAgICAgICAgICAgIGUudGFyZ2V0LnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsYWJlbHM6IHtcclxuICAgICAgICAgICAgZmlsdGVyOiAobGVnZW5kSXRlbSkgPT4gc2VsZWN0aW9uLmlzU2VsZWN0ZWQodGFibGVTb3VyY2UuZmluZChyb3cgPT4gbGVnZW5kSXRlbS50ZXh0ID09PSByb3cuS1BJKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgICBkaXNwbGF5OiB0cnVlLFxyXG4gICAgICAgICAgdGV4dDogdGl0bGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc3BvbnNpdmVEb3duc2FtcGxlOiB7XHJcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgICAgZGVzaXJlZERhdGFQb2ludERpc3RhbmNlOiAyLFxyXG4gICAgICAgICAgbWluTnVtUG9pbnRzOiAyMDAsXHJcbiAgICAgICAgICBtYXhOdW1Qb2ludHNUb0RyYXc6IDEwMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdG9vbHRpcHM6IHtcclxuICAgICAgICAgIGNhbGxiYWNrczoge1xyXG4gICAgICAgICAgICBsYWJlbDogZnVuY3Rpb24odG9vbHRpcEl0ZW0sIGNoYXJ0RGF0YSkge1xyXG4gICAgICAgICAgICAgIC8vIGZvcm1hdCBudW1iZXJzIHdpdGggY29tbWFzIGFuZCBhZGQgdW5pdCBpbmZvcm1hdGlvblxyXG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gY2hhcnREYXRhLmRhdGFzZXRzW3Rvb2x0aXBJdGVtLmRhdGFzZXRJbmRleF0ubGFiZWwgfHwgJyc7XHJcbiAgICAgICAgICAgICAgaWYgKGxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBnZXQgdW5pdCAoZWc6IE1CLCBHQiwgTUIvcywgJSBhbmQgc28gb24pXHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJdGVtID0gdGFibGVTb3VyY2UuZmluZChjb250cm9sVGFibGVSb3cgPT4gbGFiZWwgPT09IGNvbnRyb2xUYWJsZVJvdy5LUEkpIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdW5pdCA9IHJvd0l0ZW1bSXRlbS51bml0XSAmJiByb3dJdGVtW0l0ZW0udW5pdF0gIT09IFVuaXQuUENUID8gYCAke3Jvd0l0ZW1bSXRlbS51bml0XX1gIDogcm93SXRlbVtJdGVtLnVuaXRdIHx8ICcnO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2xhYmVsfTogJHtnZXROdW1iZXJXaXRoQ29tbWFzKHRvb2x0aXBJdGVtLnlMYWJlbCl9JHt1bml0fWA7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnZXROdW1iZXJXaXRoQ29tbWFzKHRvb2x0aXBJdGVtLnlMYWJlbCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzY2FsZXM6IHtcclxuICAgICAgICAgIHhBeGVzOiBDaGFydFNlcnZpY2UuX2dlbmVyYXRlWEF4ZXModGltZSksXHJcbiAgICAgICAgICB5QXhlczogQ2hhcnRTZXJ2aWNlLl9nZW5lcmF0ZVlBeGVzKGRhdGEsIHlTY2FsZSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHpvb206IHtcclxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICBkcmFnOiB0cnVlLFxyXG4gICAgICAgICAgbW9kZTogJ3gnLFxyXG4gICAgICAgICAgb25ab29tOiB6b29tQ2FsbGJhY2tcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXREYXRhU2V0SW5kZXhCeUxhYmVsKGxhYmVsOiBzdHJpbmcsIGNoYXJ0OiBDaGFydCk6IG51bWJlciB7XHJcbiAgICBpZiAoY2hhcnQuZGF0YSAmJiBjaGFydC5kYXRhLmRhdGFzZXRzKSB7XHJcbiAgICAgIHJldHVybiBjaGFydC5kYXRhLmRhdGFzZXRzLmZpbmRJbmRleChkYXRhc2V0ID0+IGRhdGFzZXQubGFiZWwgPT09IGxhYmVsKTtcclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGRlc3Ryb3kgdGhlIGNoYXJ0LCByZWxlYXNlIHRoZSByZXNvdXJjZSBvZiB0aGUgY2hhcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9kZXN0cm95Q2hhcnQoY2hhcnQ6IENoYXJ0KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgaWYgKGNoYXJ0KSB7XHJcbiAgICAgICAgY2hhcnQuZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiB1cGRhdGUvcmVmcmVzaCB0aGUgY2hhcnRcclxuICAgKi9cclxuICBwcml2YXRlIF91cGRhdGVDaGFydChjaGFydDogQ2hhcnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmIChjaGFydCkge1xyXG4gICAgICAgIGNoYXJ0LnVwZGF0ZSgpO1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZWplY3QoJ1VwZGF0aW5nIGNoYXJ0IGZhaWxlZCwgZXJyb3I6IHRoZSBjaGFydCBvYmplY3QgaXMgZW1wdHkuJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVzZXQgem9vbSBvZiB0aGUgY2hhcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9yZXNldFpvb20oY2hhcnQ6IGFueSk6IFByb21pc2U8e21ldGFTdGF0dXM6IGJvb2xlYW4sIGRhdGFzZXRTdGF0dXM6IGJvb2xlYW59W10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmIChjaGFydCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFzZXRTdGF0dXNCZWZvcmVSZXNldCA9IFtdO1xyXG4gICAgICAgIGlmIChjaGFydC5kYXRhICYmIGNoYXJ0LmRhdGEuZGF0YXNldHMpIHtcclxuICAgICAgICAgIGNoYXJ0LmRhdGEuZGF0YXNldHMuZm9yRWFjaCgoZGF0YXNldCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWV0YSA9IGNoYXJ0LmdldERhdGFzZXRNZXRhKGluZGV4KTtcclxuICAgICAgICAgICAgaWYgKG1ldGEpIHtcclxuICAgICAgICAgICAgICBkYXRhc2V0U3RhdHVzQmVmb3JlUmVzZXRbaW5kZXhdID0ge21ldGFTdGF0dXM6IG1ldGEuaGlkZGVuLCBkYXRhc2V0U3RhdHVzOiBkYXRhc2V0LmhpZGRlbn07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KGBJbnRlcm5hbCBlcnJvciwgY2FuIG5vdCBmaW5kIHRoZSBtZXRhICR7aW5kZXh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2hhcnQucmVzZXRab29tKCk7XHJcbiAgICAgICAgcmVzb2x2ZShkYXRhc2V0U3RhdHVzQmVmb3JlUmVzZXQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlamVjdCgnUmVzZXR0aW5nIGNoYXJ0IGZhaWxlZCwgZXJyb3I6IHRoZSBjaGFydCBvYmplY3QgaXMgZW1wdHkuJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXNldCBDaGFydCB0byBpbml0aWFsIHN0YXR1c1xyXG4gICAqIElmIGxlZ2VuZCBpcyBhbHJlYWR5IHNlbGVjdGVkL3Vuc2VsZWN0ZWQgZnJvbSB0aGUgbGlzdCwgaXQgd291bGRuJ3QgYmUgcmVzdG9yZWQuXHJcbiAgICogQHBhcmFtIGRhdGFTb3VyY2VEYXRhIHRoZSBkYXRhIHNldHMgb2YgdGhlIGNoYXJ0XHJcbiAgICogQHBhcmFtIHNlbGVjdGlvbiBzZWxlY3Rpb24gc3RhdHVzIGxpc3RcclxuICAgKi9cclxuICBwdWJsaWMgcmVzZXRDaGFydChkYXRhU291cmNlRGF0YTogYW55LCBzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT4pOiBQcm9taXNlIDxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXNldFpvb20odGhpcy5fY2hhcnQpLnRoZW4oKGRhdGFzZXRTdGF0dXNCZWZvcmVab29tKSA9PiB7XHJcbiAgICAgIC8vIHJlc2V0IHRoZSBkYXRhIHNldCBieSB0aGUgc2VsZWN0aW9uIHN0YXR1c1xyXG4gICAgICBkYXRhU291cmNlRGF0YS5maWx0ZXIocm93ID0+ICFyb3cuaGVhZGVyKS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9nZXREYXRhU2V0SW5kZXhCeUxhYmVsKHJvdy5LUEksIHRoaXMuX2NoYXJ0KTtcclxuICAgICAgICBpZiAoIXNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdykpIHtcclxuICAgICAgICAgIENoYXJ0U2VydmljZS5fdG9nZ2xlRGF0YVNldChpbmRleCwgdGhpcy5fY2hhcnQsIHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDaGFydFNlcnZpY2UuX3Jlc3RvcmVEYXRhU2V0U3RhdHVzKHRoaXMuX2NoYXJ0LCBpbmRleCwgZGF0YXNldFN0YXR1c0JlZm9yZVpvb21baW5kZXhdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdGhpcy5fdXBkYXRlQ2hhcnQodGhpcy5fY2hhcnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBkZXN0cm95IHRoZSBjaGFydCBhbmQgcmVpbml0aWFsaXplIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBjaGFydFxyXG4gICAqL1xyXG4gIHB1YmxpYyBkZXN0cm95Q2hhcnQoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9kZXN0cm95Q2hhcnQodGhpcy5fY2hhcnQpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgICBDaGFydFNlcnZpY2UuX2luaXRDb25maWcodGhpcy5fY2hhcnQpO1xyXG4gICAgICAgIHRoaXMuX2NoYXJ0ID0gdm9pZCAwO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdlbmVyYXRlIGNvbmZpZ3VyYXRpb24gZm9yIGNoYXJ0IGFuZCBjcmVhdGUgdGhlIGNoYXJ0IG9iamVjdC5cclxuICAgKi9cclxuICBwdWJsaWMgYnVpbGRDaGFydCh0aW1lOiBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBDaGFydENvbnRlbnREYXRhSXRlbVtdW10sXHJcbiAgICAgICAgICAgICAgICAgICAgeVNjYWxlOiBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHN0cmluZ1tdLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcktleTogc3RyaW5nW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+LFxyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlU291cmNlOiBhbnksXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SXRlbXM6IHN0cmluZ1tdLFxyXG4gICAgICAgICAgICAgICAgICAgIHpvb21DQik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGN0eCA9ICg8SFRNTENhbnZhc0VsZW1lbnQ+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGFydE5hbWVTZXJ2ZXJIaXN0b3J5JykpLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgIGNvbnN0IGNmZzogYW55ID0gQ2hhcnRTZXJ2aWNlLl9nZW5lcmF0ZUNoYXJ0Q29uZmlnKHRpbWUsIGRhdGEsIHlTY2FsZSwgaGVhZGVyLCBoZWFkZXJLZXksIHNlbGVjdGlvbiwgdGFibGVTb3VyY2UsIHRpdGxlLCBkZWZhdWx0SXRlbXMsIHpvb21DQik7XHJcbiAgICAgIHRoaXMuX2NoYXJ0ID0gbmV3IENoYXJ0KGN0eCwgY2ZnKTtcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBzaG93L2hpZGUgdGhlIHJlbGF0aXZlIGRhdGEgc2V0XHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZURhdGFJbkNoYXJ0KGxhYmVsOiBzdHJpbmcsIGhpZGU6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIENoYXJ0U2VydmljZS5fdG9nZ2xlRGF0YVNldCh0aGlzLl9nZXREYXRhU2V0SW5kZXhCeUxhYmVsKGxhYmVsLCB0aGlzLl9jaGFydCksIHRoaXMuX2NoYXJ0LCBoaWRlKTtcclxuICAgICAgcmVzb2x2ZSh0aGlzLl91cGRhdGVDaGFydCh0aGlzLl9jaGFydCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL3NlcnZpY2VzL2NoYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFxQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUV6RSwrRUFBK0U7QUFDL0UsV0FBVztBQUVYLE1BQU0sT0FBTyxZQUFZO0lBR3ZCOztPQUVHO0lBQ0ssTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFvQixFQUFFLEtBQVksRUFBRSxNQUFlO1FBQy9FLDBEQUEwRDtRQUMxRCx5REFBeUQ7UUFDekQsd0RBQXdEO1FBQ3hELHVEQUF1RDtRQUN2RCxtRUFBbUU7UUFDbkUseUVBQXlFO1FBQ3pFLElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEQsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDWCw0RUFBNEU7b0JBQzVFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2lCQUN6RTtxQkFBTTtvQkFDTCxJ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QUFDLENBQUM7YUFDcEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQixDQUFDLEtBQWEsRUFBRSxJQUFhO1FBQ25ELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakcsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzswR0E5VVUsWUFBWTs4R0FBWixZQUFZOzRGQUFaLFlBQVk7a0JBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgQ2hhcnQgfSBmcm9tICdjaGFydC5qcyc7XHJcbmltcG9ydCB7IGdldENvbG9yU3RyaW5nLCBnZXROdW1iZXJXaXRoQ29tbWFzLCByYW5kb21Db2xvciB9IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi91aS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hhcnRDb250ZW50RGF0YUl0ZW0sIExlZ2VuZENvbG9yLCBJdGVtLCBVbml0IH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuLy8gVXNpbmcgZHluYW1pYyBmbGFnIHRvIGZpeCB0aGUgaXNzdWUgb2YgbmctcGFja2FnciAjNjk2OiBMYW1iZGEgbm90IHN1cHBvcnRlZFxyXG4vLyBAZHluYW1pY1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDaGFydFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgX2NoYXJ0OiBDaGFydDtcclxuXHJcbiAgLyoqXHJcbiAgICogdG9nZ2xlIHRoZSBkYXRhc2V0IHN0YXR1cyBvZiB0aGUgY2hhcnQsIHN5bmNocm9ub3VzbHlcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfdG9nZ2xlRGF0YVNldChkYXRhU2V0SW5kZXg6IG51bWJlciwgY2hhcnQ6IENoYXJ0LCBoaWRkZW46IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIC8vIG1ldGEuaGlkZGVuID0gZmFsc2UgYW5kIGRhdGFzZXQuaGlkZGVuID0gZmFsc2UgLS0+IHNob3dcclxuICAgIC8vIG1ldGEuaGlkZGVuID0gZmFsc2UgYW5kIGRhdGFzZXQuaGlkZGVuID0gdHJ1ZSAtLT4gc2hvd1xyXG4gICAgLy8gbWV0YS5oaWRkZW4gPSBudWxsIGFuZCBkYXRhc2V0LmhpZGRlbiA9IGZhbHNlIC0+IHNob3dcclxuICAgIC8vIG1ldGEuaGlkZGVuID0gbnVsbCBhbmQgZGF0YXNldC5oaWRkZW4gPSB0cnVlIC0+IGhpZGVcclxuICAgIC8vIGluIHRoZSBmaXJzdCBjYXNlIChmYWxzZSwgZmFsc2UpLCBuZWVkcyB0byBjbGljayBsZWdlbmQgdHdpY2UgdG9cclxuICAgIC8vIGhpZGUgdGhlIGRhdGFzZXQsIGJlY2F1c2UgdGhlIGZpcnN0IGNsaWNrIG9ubHkgc2V0IG1ldGEuaGlkZGVuID0gbnVsbClcclxuICAgIGlmIChkYXRhU2V0SW5kZXggIT0gbnVsbCAmJiBjaGFydCAhPSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IG1ldGEgPSBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhU2V0SW5kZXgpO1xyXG4gICAgICBpZiAobWV0YSkge1xyXG4gICAgICAgIGlmICghaGlkZGVuKSB7XHJcbiAgICAgICAgICAvLyBkaXNwbGF5IHRoZSBpdGVtLCBpZiBkYXRhc2V0IGhpZGRlbiBpcyBmYWxzZSwgc2V0IGhpZGRlbiBvZiBtZXRhIHRvIG51bGwsXHJcbiAgICAgICAgICBtZXRhLmhpZGRlbiA9ICFjaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFTZXRJbmRleF0uaGlkZGVuID8gbnVsbCA6IGhpZGRlbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWV0YS5oaWRkZW4gPSBoaWRkZW47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RhdGljIF9yZXN0b3JlRGF0YVNldFN0YXR1cyhjaGFydDogQ2hhcnQsIGRhdGFzZXRJbmRleDogbnVtYmVyLCBzdGF0dXM6IHttZXRhU3RhdHVzOiBib29sZWFuLCBkYXRhc2V0U3RhdHVzOiBib29sZWFufSk6IHZvaWQge1xyXG4gICAgaWYgKGNoYXJ0ICYmIGNoYXJ0LmRhdGEgJiYgY2hhcnQuZGF0YS5kYXRhc2V0cyAmJiBjaGFydC5nZXREYXRhc2V0TWV0YShkYXRhc2V0SW5kZXgpICYmIHN0YXR1cykge1xyXG4gICAgICBjaGFydC5kYXRhLmRhdGFzZXRzW2RhdGFzZXRJbmRleF0uaGlkZGVuID0gc3RhdHVzLmRhdGFzZXRTdGF0dXM7XHJcbiAgICAgIGNoYXJ0LmdldERhdGFzZXRNZXRhKGRhdGFzZXRJbmRleCkuaGlkZGVuID0gc3RhdHVzLm1ldGFTdGF0dXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpbml0aWFsaXplL2NsZWFyIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgY2hhcnRcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfaW5pdENvbmZpZyhjaGFydDogYW55KTogdm9pZCB7XHJcbiAgICAvLyBpbml0IGRhdGEgc2V0c1xyXG4gICAgaWYgKGNoYXJ0LmRhdGEgJiYgY2hhcnQuZGF0YS5kYXRhc2V0cykge1xyXG4gICAgICBjaGFydC5kYXRhLmRhdGFzZXRzLmxlbmd0aCA9IDA7XHJcbiAgICAgIGNoYXJ0LmRhdGEuZGF0YXNldHMgPSB2b2lkIDA7XHJcbiAgICAgIGNoYXJ0LmRhdGEgPSB2b2lkIDA7XHJcbiAgICB9XHJcbiAgICAvLyBpbml0IG9wdGlvbnNcclxuICAgIGlmIChjaGFydC5vcHRpb25zICYmIGNoYXJ0Lm9wdGlvbnMuc2NhbGVzICYmIChjaGFydC5vcHRpb25zLnNjYWxlcy54QXhlcyB8fCBjaGFydC5vcHRpb25zLnNjYWxlcy55QXhpcykpIHtcclxuICAgICAgaWYgKGNoYXJ0Lm9wdGlvbnMuc2NhbGVzLnhBeGVzKSB7XHJcbiAgICAgICAgY2hhcnQub3B0aW9ucy5zY2FsZXMueEF4ZXMubGVuZ3RoID0gMDtcclxuICAgICAgICBjaGFydC5vcHRpb25zLnNjYWxlcy54QXhlcyA9IHZvaWQgMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hhcnQub3B0aW9ucy5zY2FsZXMueUF4ZXMpIHtcclxuICAgICAgICBjaGFydC5vcHRpb25zLnNjYWxlcy55QXhlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIGNoYXJ0Lm9wdGlvbnMuc2NhbGVzLnlBeGVzID0gdm9pZCAwO1xyXG4gICAgICB9XHJcbiAgICAgIGNoYXJ0Lm9wdGlvbnMuc2NhbGVzID0gdm9pZCAwO1xyXG4gICAgICBjaGFydC5vcHRpb25zID0gdm9pZCAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgRGF0YVNldHMgYnkgdGhlIGRhdGEgYW5kIGhlYWRlciBpbmZvcm1hdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhdGljIF9nZW5lcmF0ZURhdGFTZXRzKGRhdGE6IENoYXJ0Q29udGVudERhdGFJdGVtW11bXSwgaGVhZGVyOiBzdHJpbmdbXSwgaGVhZGVyS2V5OiBzdHJpbmdbXSwgZGVmYXVsdEl0ZW1zOiBzdHJpbmdbXSk6IGFueSB7XHJcbiAgICBjb25zdCBhbHBoYSA9IDAuNTtcclxuICAgIGNvbnN0IGNvbG9yczogTGVnZW5kQ29sb3IgPSBVSVNlcnZpY2UuZ2V0Q29sb3JzKGFscGhhKTtcclxuICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICBjb25zdCBjb2xvciA9IGNvbG9yc1toZWFkZXJLZXlbaV1dID8gZ2V0Q29sb3JTdHJpbmcoY29sb3JzW2hlYWRlcktleVtpXV0pIDogcmFuZG9tQ29sb3IoYWxwaGEpO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGJvcmRlckNvbG9yOiBjb2xvcixcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLFxyXG4gICAgICAgIGJvcmRlcldpZHRoOiAxLjI1LFxyXG4gICAgICAgIHNwYW5HYXBzOiBmYWxzZSxcclxuICAgICAgICBsYWJlbDogaGVhZGVyW2ldLFxyXG4gICAgICAgIGRhdGE6IGRhdGFbaV0sXHJcbiAgICAgICAgZmlsbDogZmFsc2UsXHJcbiAgICAgICAgeUF4aXNJRDogYHktYXhpcy0ke2l9YCxcclxuICAgICAgICBoaWRkZW46ICFkZWZhdWx0SXRlbXMuaW5jbHVkZXMoaGVhZGVyW2ldKVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RhdGljIF9nZW5lcmF0ZVhBeGVzKHRpbWU6IG51bWJlcltdKTogYW55IHtcclxuICAgIGNvbnN0IGZvcm1hdCA9ICdNTU1ERCBISDptbTpzcyc7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogJ3RpbWUnLFxyXG4gICAgICAgIHRpbWU6IHtcclxuICAgICAgICAgIC8vIHVuaXQ6ICdzZWNvbmQnLFxyXG4gICAgICAgICAgLy8gc3RlcFNpemU6IDEsXHJcbiAgICAgICAgICBkaXNwbGF5Rm9ybWF0czoge1xyXG4gICAgICAgICAgICAnbWlsbGlzZWNvbmQnOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICdzZWNvbmQnOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICdtaW51dGUnOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICdob3VyJzogJ01NTUREIEhIJyxcclxuICAgICAgICAgICAgJ2RheSc6ICdNTU1ERCBZWVlZJyxcclxuICAgICAgICAgICAgJ3dlZWsnOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICdtb250aCc6IGZvcm1hdCxcclxuICAgICAgICAgICAgJ3F1YXJ0ZXInOiBmb3JtYXQsXHJcbiAgICAgICAgICAgICd5ZWFyJzogZm9ybWF0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRvb2x0aXBGb3JtYXQ6ICdsbCBISDptbTpzcycsXHJcbiAgICAgICAgICBtaW46IHRpbWVbMF0sXHJcbiAgICAgICAgICBtYXg6IHRpbWVbdGltZS5sZW5ndGggLSAxXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gc2NhbGVMYWJlbDoge1xyXG4gICAgICAgIC8vICAgZGlzcGxheTogZmFsc2UsXHJcbiAgICAgICAgLy8gICBsYWJlbFN0cmluZzogJ0RhdGUnXHJcbiAgICAgICAgLy8gfSxcclxuICAgICAgICB0aWNrczoge1xyXG4gICAgICAgICAgbWF4Um90YXRpb246IDAsXHJcbiAgICAgICAgICByZXZlcnNlOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyBfZ2VuZXJhdGVZQXhlcyhkYXRhOiBDaGFydENvbnRlbnREYXRhSXRlbVtdW10sIHlTY2FsZTogbnVtYmVyW10pOiBhbnkge1xyXG4gICAgcmV0dXJuIGRhdGEubWFwKChpdGVtLCBpKSA9PiAoe1xyXG4gICAgICB0eXBlOiAnbGluZWFyJyxcclxuICAgICAgZGlzcGxheTogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiAnbGVmdCcsXHJcbiAgICAgIGlkOiBgeS1heGlzLSR7aX1gLFxyXG4gICAgICBncmlkTGluZXM6IHtcclxuICAgICAgfSxcclxuICAgICAgdGlja3M6IHtcclxuICAgICAgICBtaW46IDAsXHJcbiAgICAgICAgbWF4OiB5U2NhbGVbaV1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2VuZXJhdGUgY29uZmlndXJhdGlvbiBmb3IgY2hhcnRcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfZ2VuZXJhdGVDaGFydENvbmZpZyh0aW1lOiBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBDaGFydENvbnRlbnREYXRhSXRlbVtdW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeVNjYWxlOiBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHN0cmluZ1tdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcktleTogc3RyaW5nW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU291cmNlOiBhbnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SXRlbXM6IHN0cmluZ1tdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb21DYWxsYmFjazogYW55KTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHR5cGU6ICdsaW5lJyxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGRhdGFzZXRzOiBDaGFydFNlcnZpY2UuX2dlbmVyYXRlRGF0YVNldHMoZGF0YSwgaGVhZGVyLCBoZWFkZXJLZXksIGRlZmF1bHRJdGVtcylcclxuICAgICAgfSxcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgIGVsZW1lbnRzOiB7cG9pbnQ6IHtyYWRpdXM6IDAsIGhpdFJhZGl1czogNSwgaG92ZXJSYWRpdXM6IDV9fSwgLy8gc2V0IHJhZGl1cyB0byAwIG5vdCB0byBkaXNwbGF5IHBvaW50XHJcbiAgICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSxcclxuICAgICAgICBhbmltYXRpb246IHtcclxuICAgICAgICAgIGR1cmF0aW9uOiAwLCAvLyBnZW5lcmFsIGFuaW1hdGlvbiB0aW1lXHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3Zlcjoge1xyXG4gICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IDAsIC8vIGR1cmF0aW9uIG9mIGFuaW1hdGlvbnMgd2hlbiBob3ZlcmluZyBhbiBpdGVtXHJcbiAgICAgICAgICBvbkhvdmVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHRoaXMuZ2V0RWxlbWVudEF0RXZlbnQoZSk7XHJcbiAgICAgICAgICAgIGlmIChwb2ludC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBlLnRhcmdldC5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZS50YXJnZXQuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNwb25zaXZlQW5pbWF0aW9uRHVyYXRpb246IDAsIC8vIGFuaW1hdGlvbiBkdXJhdGlvbiBhZnRlciBhIHJlc2l6ZVxyXG4gICAgICAgIGxlZ2VuZDoge1xyXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgb25Ib3ZlcjogKGUpID0+IHtcclxuICAgICAgICAgICAgZS50YXJnZXQuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxhYmVsczoge1xyXG4gICAgICAgICAgICBmaWx0ZXI6IChsZWdlbmRJdGVtKSA9PiBzZWxlY3Rpb24uaXNTZWxlY3RlZCh0YWJsZVNvdXJjZS5maW5kKHJvdyA9PiBsZWdlbmRJdGVtLnRleHQgPT09IHJvdy5LUEkpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGl0bGU6IHtcclxuICAgICAgICAgIGRpc3BsYXk6IHRydWUsXHJcbiAgICAgICAgICB0ZXh0OiB0aXRsZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzcG9uc2l2ZURvd25zYW1wbGU6IHtcclxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICBkZXNpcmVkRGF0YVBvaW50RGlzdGFuY2U6IDIsXHJcbiAgICAgICAgICBtaW5OdW1Qb2ludHM6IDIwMCxcclxuICAgICAgICAgIG1heE51bVBvaW50c1RvRHJhdzogMTAwXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b29sdGlwczoge1xyXG4gICAgICAgICAgY2FsbGJhY2tzOiB7XHJcbiAgICAgICAgICAgIGxhYmVsOiBmdW5jdGlvbih0b29sdGlwSXRlbSwgY2hhcnREYXRhKSB7XHJcbiAgICAgICAgICAgICAgLy8gZm9ybWF0IG51bWJlcnMgd2l0aCBjb21tYXMgYW5kIGFkZCB1bml0IGluZm9ybWF0aW9uXHJcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBjaGFydERhdGEuZGF0YXNldHNbdG9vbHRpcEl0ZW0uZGF0YXNldEluZGV4XS5sYWJlbCB8fCAnJztcclxuICAgICAgICAgICAgICBpZiAobGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIC8vIGdldCB1bml0IChlZzogTUIsIEdCLCBNQi9zLCAlIGFuZCBzbyBvbilcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0l0ZW0gPSB0YWJsZVNvdXJjZS5maW5kKGNvbnRyb2xUYWJsZVJvdyA9PiBsYWJlbCA9PT0gY29udHJvbFRhYmxlUm93LktQSSkgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0ID0gcm93SXRlbVtJdGVtLnVuaXRdICYmIHJvd0l0ZW1bSXRlbS51bml0XSAhPT0gVW5pdC5QQ1QgPyBgICR7cm93SXRlbVtJdGVtLnVuaXRdfWAgOiByb3dJdGVtW0l0ZW0udW5pdF0gfHwgJyc7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7bGFiZWx9OiAke2dldE51bWJlcldpdGhDb21tYXModG9vbHRpcEl0ZW0ueUxhYmVsKX0ke3VuaXR9YDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE51bWJlcldpdGhDb21tYXModG9vbHRpcEl0ZW0ueUxhYmVsKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNjYWxlczoge1xyXG4gICAgICAgICAgeEF4ZXM6IENoYXJ0U2VydmljZS5fZ2VuZXJhdGVYQXhlcyh0aW1lKSxcclxuICAgICAgICAgIHlBeGVzOiBDaGFydFNlcnZpY2UuX2dlbmVyYXRlWUF4ZXMoZGF0YSwgeVNjYWxlKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgem9vbToge1xyXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICAgIGRyYWc6IHRydWUsXHJcbiAgICAgICAgICBtb2RlOiAneCcsXHJcbiAgICAgICAgICBvblpvb206IHpvb21DYWxsYmFja1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldERhdGFTZXRJbmRleEJ5TGFiZWwobGFiZWw6IHN0cmluZywgY2hhcnQ6IENoYXJ0KTogbnVtYmVyIHtcclxuICAgIGlmIChjaGFydC5kYXRhICYmIGNoYXJ0LmRhdGEuZGF0YXNldHMpIHtcclxuICAgICAgcmV0dXJuIGNoYXJ0LmRhdGEuZGF0YXNldHMuZmluZEluZGV4KGRhdGFzZXQgPT4gZGF0YXNldC5sYWJlbCA9PT0gbGFiZWwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZGVzdHJveSB0aGUgY2hhcnQsIHJlbGVhc2UgdGhlIHJlc291cmNlIG9mIHRoZSBjaGFydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3lDaGFydChjaGFydDogQ2hhcnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAoY2hhcnQpIHtcclxuICAgICAgICBjaGFydC5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIHVwZGF0ZS9yZWZyZXNoIHRoZSBjaGFydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3VwZGF0ZUNoYXJ0KGNoYXJ0OiBDaGFydCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKGNoYXJ0KSB7XHJcbiAgICAgICAgY2hhcnQudXBkYXRlKCk7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlamVjdCgnVXBkYXRpbmcgY2hhcnQgZmFpbGVkLCBlcnJvcjogdGhlIGNoYXJ0IG9iamVjdCBpcyBlbXB0eS4nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZXNldCB6b29tIG9mIHRoZSBjaGFydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3Jlc2V0Wm9vbShjaGFydDogYW55KTogUHJvbWlzZTx7bWV0YVN0YXR1czogYm9vbGVhbiwgZGF0YXNldFN0YXR1czogYm9vbGVhbn1bXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKGNoYXJ0KSB7XHJcbiAgICAgICAgY29uc3QgZGF0YXNldFN0YXR1c0JlZm9yZVJlc2V0ID0gW107XHJcbiAgICAgICAgaWYgKGNoYXJ0LmRhdGEgJiYgY2hhcnQuZGF0YS5kYXRhc2V0cykge1xyXG4gICAgICAgICAgY2hhcnQuZGF0YS5kYXRhc2V0cy5mb3JFYWNoKChkYXRhc2V0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gY2hhcnQuZ2V0RGF0YXNldE1ldGEoaW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAobWV0YSkge1xyXG4gICAgICAgICAgICAgIGRhdGFzZXRTdGF0dXNCZWZvcmVSZXNldFtpbmRleF0gPSB7bWV0YVN0YXR1czogbWV0YS5oaWRkZW4sIGRhdGFzZXRTdGF0dXM6IGRhdGFzZXQuaGlkZGVufTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZWplY3QoYEludGVybmFsIGVycm9yLCBjYW4gbm90IGZpbmQgdGhlIG1ldGEgJHtpbmRleH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjaGFydC5yZXNldFpvb20oKTtcclxuICAgICAgICByZXNvbHZlKGRhdGFzZXRTdGF0dXNCZWZvcmVSZXNldCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVqZWN0KCdSZXNldHRpbmcgY2hhcnQgZmFpbGVkLCBlcnJvcjogdGhlIGNoYXJ0IG9iamVjdCBpcyBlbXB0eS4nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IENoYXJ0IHRvIGluaXRpYWwgc3RhdHVzXHJcbiAgICogSWYgbGVnZW5kIGlzIGFscmVhZHkgc2VsZWN0ZWQvdW5zZWxlY3RlZCBmcm9tIHRoZSBsaXN0LCBpdCB3b3VsZG4ndCBiZSByZXN0b3JlZC5cclxuICAgKiBAcGFyYW0gZGF0YVNvdXJjZURhdGEgdGhlIGRhdGEgc2V0cyBvZiB0aGUgY2hhcnRcclxuICAgKiBAcGFyYW0gc2VsZWN0aW9uIHNlbGVjdGlvbiBzdGF0dXMgbGlzdFxyXG4gICAqL1xyXG4gIHB1YmxpYyByZXNldENoYXJ0KGRhdGFTb3VyY2VEYXRhOiBhbnksIHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55Pik6IFByb21pc2UgPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc2V0Wm9vbSh0aGlzLl9jaGFydCkudGhlbigoZGF0YXNldFN0YXR1c0JlZm9yZVpvb20pID0+IHtcclxuICAgICAgLy8gcmVzZXQgdGhlIGRhdGEgc2V0IGJ5IHRoZSBzZWxlY3Rpb24gc3RhdHVzXHJcbiAgICAgIGRhdGFTb3VyY2VEYXRhLmZpbHRlcihyb3cgPT4gIXJvdy5oZWFkZXIpLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2dldERhdGFTZXRJbmRleEJ5TGFiZWwocm93LktQSSwgdGhpcy5fY2hhcnQpO1xyXG4gICAgICAgIGlmICghc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSkge1xyXG4gICAgICAgICAgQ2hhcnRTZXJ2aWNlLl90b2dnbGVEYXRhU2V0KGluZGV4LCB0aGlzLl9jaGFydCwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIENoYXJ0U2VydmljZS5fcmVzdG9yZURhdGFTZXRTdGF0dXModGhpcy5fY2hhcnQsIGluZGV4LCBkYXRhc2V0U3RhdHVzQmVmb3JlWm9vbVtpbmRleF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0aGlzLl91cGRhdGVDaGFydCh0aGlzLl9jaGFydCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGRlc3Ryb3kgdGhlIGNoYXJ0IGFuZCByZWluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNoYXJ0XHJcbiAgICovXHJcbiAgcHVibGljIGRlc3Ryb3lDaGFydCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3lDaGFydCh0aGlzLl9jaGFydCkudGhlbigoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICAgIENoYXJ0U2VydmljZS5faW5pdENvbmZpZyh0aGlzLl9jaGFydCk7XHJcbiAgICAgICAgdGhpcy5fY2hhcnQgPSB2b2lkIDA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2VuZXJhdGUgY29uZmlndXJhdGlvbiBmb3IgY2hhcnQgYW5kIGNyZWF0ZSB0aGUgY2hhcnQgb2JqZWN0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBidWlsZENoYXJ0KHRpbWU6IG51bWJlcltdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IENoYXJ0Q29udGVudERhdGFJdGVtW11bXSxcclxuICAgICAgICAgICAgICAgICAgICB5U2NhbGU6IG51bWJlcltdLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogc3RyaW5nW10sXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyS2V5OiBzdHJpbmdbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT4sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVTb3VyY2U6IGFueSxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRJdGVtczogc3RyaW5nW10sXHJcbiAgICAgICAgICAgICAgICAgICAgem9vbUNCKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBjdHggPSAoPEhUTUxDYW52YXNFbGVtZW50PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhcnROYW1lU2VydmVySGlzdG9yeScpKT8uZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgaWYgKGN0eCkge1xyXG4gICAgICAgIGNvbnN0IGNmZzogYW55ID0gQ2hhcnRTZXJ2aWNlLl9nZW5lcmF0ZUNoYXJ0Q29uZmlnKHRpbWUsIGRhdGEsIHlTY2FsZSwgaGVhZGVyLCBoZWFkZXJLZXksIHNlbGVjdGlvbiwgdGFibGVTb3VyY2UsIHRpdGxlLCBkZWZhdWx0SXRlbXMsIHpvb21DQik7XHJcbiAgICAgICAgdGhpcy5fY2hhcnQgPSBuZXcgQ2hhcnQoY3R4LCBjZmcpO1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZWplY3QoJ0NhbiBub3QgZmluZCB0aGUgY2FudmFzLicpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHNob3cvaGlkZSB0aGUgcmVsYXRpdmUgZGF0YSBzZXRcclxuICAgKi9cclxuICBwdWJsaWMgdG9nZ2xlRGF0YUluQ2hhcnQobGFiZWw6IHN0cmluZywgaGlkZTogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgQ2hhcnRTZXJ2aWNlLl90b2dnbGVEYXRhU2V0KHRoaXMuX2dldERhdGFTZXRJbmRleEJ5TGFiZWwobGFiZWwsIHRoaXMuX2NoYXJ0KSwgdGhpcy5fY2hhcnQsIGhpZGUpO1xyXG4gICAgICByZXNvbHZlKHRoaXMuX3VwZGF0ZUNoYXJ0KHRoaXMuX2NoYXJ0KSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,4 +1,5 @@
1
- import moment from 'moment';
1
+ import * as moment_module from 'moment';
2
+ const moment = (window && window.moment) ? window.moment : moment_module;
2
3
  import * as utils from './utils';
3
4
  function getCompareValue(value) {
4
5
  if (typeof value === 'number') {
@@ -53,4 +54,4 @@ export function cullData(data, range) {
53
54
  }
54
55
  return data.slice(startIndex, endIndex);
55
56
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9jdWxsaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL25hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXIvdXRpbHMvY2hhcnRqcy1kb3duc2FtcGxlL2RhdGFfY3VsbGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQkEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sS0FBSyxLQUFLLE1BQU0sU0FBUyxDQUFDO0FBS2pDLFNBQVMsZUFBZSxDQUFDLEtBQWE7SUFDbEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDM0IsT0FBTyxLQUFLLENBQUM7S0FDaEI7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUNsQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUN0QztTQUFNLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtRQUM5QixPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMxQjtTQUFNO1FBQ0gsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDM0M7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxhQUFvQixFQUFFLFlBQW1CO0lBQ2xFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDekIsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDOUI7UUFDRSxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUVELGFBQWEsR0FBRyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RixZQUFZLEdBQUcsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEYsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEYsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBWTtJQUN0QyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNyQjtJQUVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRCxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQWtCLEVBQUUsS0FBWTtJQUNyRCxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBRTNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekQsSUFBSSxZQUFZLElBQUksVUFBVSxFQUFFO1lBQzVCLFVBQVUsR0FBRyxDQUFDLENBQUM7U0FDbEI7UUFFRCxJQUFJLFlBQVksSUFBSSxRQUFRLEVBQUU7WUFDMUIsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakIsTUFBTTtTQUNUO0tBQ0o7SUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVGhpcyBwbHVnaW4gaXMgYWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vM2RjbC9jaGFydGpzLXBsdWdpbi1yZXNwb25zaXZlLWRvd25zYW1wbGVcclxuICogZm9yIGNvbnRyb2xsaW5nIHRoZSByYWRpdXMgb2YgcG9pbnQuXHJcbiAqXHJcbiAqIE1JVCBMaWNlbnNlXHJcbiAqIENvcHlyaWdodCAoYykgMjAxOCAzRCBDb250ZW50IExvZ2lzdGljc1xyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XHJcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcclxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xyXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXHJcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xyXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcclxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICpcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxyXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcclxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXHJcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcclxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcclxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcclxuICogU09GVFdBUkUuXHJcbiAqL1xyXG5pbXBvcnQgeyBDaGFydFBvaW50IH0gZnJvbSAnY2hhcnQuanMnO1xyXG5pbXBvcnQgeyBTY2FsZSB9IGZyb20gJy4vY2hhcnRqc19leHQnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5cclxuZXhwb3J0IHR5cGUgWFZhbHVlID0gbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSB8IG1vbWVudC5Nb21lbnQ7XHJcbmV4cG9ydCB0eXBlIFJhbmdlID0gW1hWYWx1ZSwgWFZhbHVlXTtcclxuXHJcbmZ1bmN0aW9uIGdldENvbXBhcmVWYWx1ZSh2YWx1ZTogWFZhbHVlKTogbnVtYmVyIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZSh2YWx1ZSkpLmdldFRpbWUoKTtcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldFRpbWUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkudG9EYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VJc0VxdWFsKHByZXZpb3VzVmFsdWU6IFJhbmdlLCBjdXJyZW50VmFsdWU6IFJhbmdlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodXRpbHMuaXNOaWwocHJldmlvdXNWYWx1ZSkgfHxcclxuICAgICAgICB1dGlscy5pc05pbChjdXJyZW50VmFsdWUpIHx8XHJcbiAgICAgICAgdXRpbHMuaXNOaWwocHJldmlvdXNWYWx1ZVswXSkgfHxcclxuICAgICAgICB1dGlscy5pc05pbChwcmV2aW91c1ZhbHVlWzFdKSB8fFxyXG4gICAgICAgIHV0aWxzLmlzTmlsKGN1cnJlbnRWYWx1ZVswXSkgfHxcclxuICAgICAgICB1dGlscy5pc05pbChjdXJyZW50VmFsdWVbMV0pXHJcbiAgICApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlvdXNWYWx1ZSA9IFtnZXRDb21wYXJlVmFsdWUocHJldmlvdXNWYWx1ZVswXSksIGdldENvbXBhcmVWYWx1ZShwcmV2aW91c1ZhbHVlWzFdKV07XHJcbiAgICBjdXJyZW50VmFsdWUgPSBbZ2V0Q29tcGFyZVZhbHVlKGN1cnJlbnRWYWx1ZVswXSksIGdldENvbXBhcmVWYWx1ZShjdXJyZW50VmFsdWVbMV0pXTtcclxuXHJcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZVswXSA9PT0gY3VycmVudFZhbHVlWzBdICYmIHByZXZpb3VzVmFsdWVbMV0gPT09IGN1cnJlbnRWYWx1ZVsxXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxlUmFuZ2Uoc2NhbGU6IFNjYWxlKTogUmFuZ2Uge1xyXG4gICAgaWYgKHV0aWxzLmlzTmlsKHNjYWxlKSkge1xyXG4gICAgICByZXR1cm4gW251bGwsIG51bGxdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXJ0ID0gc2NhbGUuZ2V0VmFsdWVGb3JQaXhlbChzY2FsZS5sZWZ0KTtcclxuICAgIGNvbnN0IGVuZCA9IHNjYWxlLmdldFZhbHVlRm9yUGl4ZWwoc2NhbGUucmlnaHQpO1xyXG5cclxuICAgIHJldHVybiBbc3RhcnQsIGVuZF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjdWxsRGF0YShkYXRhOiBDaGFydFBvaW50W10sIHJhbmdlOiBSYW5nZSk6IENoYXJ0UG9pbnRbXSB7XHJcbiAgICBjb25zdCBzdGFydFZhbHVlID0gZ2V0Q29tcGFyZVZhbHVlKHJhbmdlWzBdKTtcclxuICAgIGNvbnN0IGVuZFZhbHVlID0gZ2V0Q29tcGFyZVZhbHVlKHJhbmdlWzFdKTtcclxuICAgIGxldCBzdGFydEluZGV4ID0gMDtcclxuICAgIGxldCBlbmRJbmRleCA9IGRhdGEubGVuZ3RoO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF0YS5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGNvbnN0IHBvaW50ID0gZGF0YVtpXTtcclxuICAgICAgICBjb25zdCBjb21wYXJlVmFsdWUgPSBnZXRDb21wYXJlVmFsdWUocG9pbnQueCB8fCBwb2ludC50KTtcclxuXHJcbiAgICAgICAgaWYgKGNvbXBhcmVWYWx1ZSA8PSBzdGFydFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbXBhcmVWYWx1ZSA+PSBlbmRWYWx1ZSkge1xyXG4gICAgICAgICAgICBlbmRJbmRleCA9IGkgKyAxO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGEuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xyXG59XHJcbiJdfQ==
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9jdWxsaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL25hbWVzZXJ2ZXItaGlzdG9yeS12aWV3ZXIvdXRpbHMvY2hhcnRqcy1kb3duc2FtcGxlL2RhdGFfY3VsbGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQkEsT0FBTyxLQUFLLGFBQWEsTUFBTSxRQUFRLENBQUM7QUFDeEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLElBQUssTUFBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBRSxNQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7QUFDM0YsT0FBTyxLQUFLLEtBQUssTUFBTSxTQUFTLENBQUM7QUFLakMsU0FBUyxlQUFlLENBQUMsS0FBYTtJQUNsQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUMzQixPQUFPLEtBQUssQ0FBQztLQUNoQjtTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQ2xDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3RDO1NBQU0sSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFO1FBQzlCLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzFCO1NBQU07UUFDSCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUMzQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLGFBQW9CLEVBQUUsWUFBbUI7SUFDbEUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUMxQixLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN6QixLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM5QjtRQUNFLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsYUFBYSxHQUFHLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLFlBQVksR0FBRyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVwRixPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFZO0lBQ3RDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN0QixPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3JCO0lBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWhELE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBa0IsRUFBRSxLQUFZO0lBQ3JELE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFFM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RCxJQUFJLFlBQVksSUFBSSxVQUFVLEVBQUU7WUFDNUIsVUFBVSxHQUFHLENBQUMsQ0FBQztTQUNsQjtRQUVELElBQUksWUFBWSxJQUFJLFFBQVEsRUFBRTtZQUMxQixRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixNQUFNO1NBQ1Q7S0FDSjtJQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUaGlzIHBsdWdpbiBpcyBhZGFwdGVkIGZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS8zZGNsL2NoYXJ0anMtcGx1Z2luLXJlc3BvbnNpdmUtZG93bnNhbXBsZVxyXG4gKiBmb3IgY29udHJvbGxpbmcgdGhlIHJhZGl1cyBvZiBwb2ludC5cclxuICpcclxuICogTUlUIExpY2Vuc2VcclxuICogQ29weXJpZ2h0IChjKSAyMDE4IDNEIENvbnRlbnQgTG9naXN0aWNzXHJcbiAqXHJcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcclxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxyXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXHJcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcclxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXHJcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XHJcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxyXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxyXG4gKlxyXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXHJcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxyXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcclxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxyXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxyXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxyXG4gKiBTT0ZUV0FSRS5cclxuICovXHJcbmltcG9ydCB7IENoYXJ0UG9pbnQgfSBmcm9tICdjaGFydC5qcyc7XHJcbmltcG9ydCB7IFNjYWxlIH0gZnJvbSAnLi9jaGFydGpzX2V4dCc7XHJcbmltcG9ydCAqIGFzIG1vbWVudF9tb2R1bGUgZnJvbSAnbW9tZW50JztcclxuY29uc3QgbW9tZW50ID0gKHdpbmRvdyAmJiAod2luZG93IGFzIGFueSkubW9tZW50KSA/ICh3aW5kb3cgYXMgYW55KS5tb21lbnQgOiBtb21lbnRfbW9kdWxlO1xyXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcclxuXHJcbmV4cG9ydCB0eXBlIFhWYWx1ZSA9IG51bWJlciB8IHN0cmluZyB8IERhdGUgfCBtb21lbnRfbW9kdWxlLk1vbWVudDtcclxuZXhwb3J0IHR5cGUgUmFuZ2UgPSBbWFZhbHVlLCBYVmFsdWVdO1xyXG5cclxuZnVuY3Rpb24gZ2V0Q29tcGFyZVZhbHVlKHZhbHVlOiBYVmFsdWUpOiBudW1iZXIge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBEYXRlKHZhbHVlKSkuZ2V0VGltZSgpO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUuZ2V0VGltZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KHZhbHVlKS50b0RhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYW5nZUlzRXF1YWwocHJldmlvdXNWYWx1ZTogUmFuZ2UsIGN1cnJlbnRWYWx1ZTogUmFuZ2UpOiBib29sZWFuIHtcclxuICAgIGlmICh1dGlscy5pc05pbChwcmV2aW91c1ZhbHVlKSB8fFxyXG4gICAgICAgIHV0aWxzLmlzTmlsKGN1cnJlbnRWYWx1ZSkgfHxcclxuICAgICAgICB1dGlscy5pc05pbChwcmV2aW91c1ZhbHVlWzBdKSB8fFxyXG4gICAgICAgIHV0aWxzLmlzTmlsKHByZXZpb3VzVmFsdWVbMV0pIHx8XHJcbiAgICAgICAgdXRpbHMuaXNOaWwoY3VycmVudFZhbHVlWzBdKSB8fFxyXG4gICAgICAgIHV0aWxzLmlzTmlsKGN1cnJlbnRWYWx1ZVsxXSlcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2aW91c1ZhbHVlID0gW2dldENvbXBhcmVWYWx1ZShwcmV2aW91c1ZhbHVlWzBdKSwgZ2V0Q29tcGFyZVZhbHVlKHByZXZpb3VzVmFsdWVbMV0pXTtcclxuICAgIGN1cnJlbnRWYWx1ZSA9IFtnZXRDb21wYXJlVmFsdWUoY3VycmVudFZhbHVlWzBdKSwgZ2V0Q29tcGFyZVZhbHVlKGN1cnJlbnRWYWx1ZVsxXSldO1xyXG5cclxuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlWzBdID09PSBjdXJyZW50VmFsdWVbMF0gJiYgcHJldmlvdXNWYWx1ZVsxXSA9PT0gY3VycmVudFZhbHVlWzFdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NhbGVSYW5nZShzY2FsZTogU2NhbGUpOiBSYW5nZSB7XHJcbiAgICBpZiAodXRpbHMuaXNOaWwoc2NhbGUpKSB7XHJcbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnQgPSBzY2FsZS5nZXRWYWx1ZUZvclBpeGVsKHNjYWxlLmxlZnQpO1xyXG4gICAgY29uc3QgZW5kID0gc2NhbGUuZ2V0VmFsdWVGb3JQaXhlbChzY2FsZS5yaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIFtzdGFydCwgZW5kXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGN1bGxEYXRhKGRhdGE6IENoYXJ0UG9pbnRbXSwgcmFuZ2U6IFJhbmdlKTogQ2hhcnRQb2ludFtdIHtcclxuICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSBnZXRDb21wYXJlVmFsdWUocmFuZ2VbMF0pO1xyXG4gICAgY29uc3QgZW5kVmFsdWUgPSBnZXRDb21wYXJlVmFsdWUocmFuZ2VbMV0pO1xyXG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xyXG4gICAgbGV0IGVuZEluZGV4ID0gZGF0YS5sZW5ndGg7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgY29uc3QgcG9pbnQgPSBkYXRhW2ldO1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVWYWx1ZSA9IGdldENvbXBhcmVWYWx1ZShwb2ludC54IHx8IHBvaW50LnQpO1xyXG5cclxuICAgICAgICBpZiAoY29tcGFyZVZhbHVlIDw9IHN0YXJ0VmFsdWUpIHtcclxuICAgICAgICAgICAgc3RhcnRJbmRleCA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29tcGFyZVZhbHVlID49IGVuZFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGVuZEluZGV4ID0gaSArIDE7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YS5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbn1cclxuIl19