@microsoft/windows-admin-center-sdk 2.128.0 → 2.152.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular/assets/strings/cs-CZ/strings.json +1 -1
- package/angular/assets/strings/de-DE/strings.json +1 -1
- package/angular/assets/strings/es-ES/strings.json +1 -1
- package/angular/assets/strings/fr-FR/strings.json +1 -1
- package/angular/assets/strings/hu-HU/strings.json +1 -1
- package/angular/assets/strings/it-IT/strings.json +1 -1
- package/angular/assets/strings/ja-JP/strings.json +1 -1
- package/angular/assets/strings/ko-KR/strings.json +1 -1
- package/angular/assets/strings/nl-NL/strings.json +1 -1
- package/angular/assets/strings/pl-PL/strings.json +1 -1
- package/angular/assets/strings/pt-BR/strings.json +1 -1
- package/angular/assets/strings/pt-PT/strings.json +1 -1
- package/angular/assets/strings/ru-RU/strings.json +1 -1
- package/angular/assets/strings/sv-SE/strings.json +1 -1
- package/angular/assets/strings/tr-TR/strings.json +1 -1
- package/angular/assets/strings/zh-CN/strings.json +1 -1
- package/angular/assets/strings/zh-TW/strings.json +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +558 -367
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
- package/angular/esm2015/src/controls/accordion/index.js +5 -0
- package/angular/esm2015/src/controls/data-table/data-table.component.js +5 -5
- package/angular/esm2015/src/controls/dialog/dialog.component.js +2 -2
- package/angular/esm2015/src/controls/dropdown/dropdown.service.js +3 -2
- package/angular/esm2015/src/controls/form/form-field/array/array-form-field.component.js +29 -22
- package/angular/esm2015/src/controls/form/form-field/datetime-range/datetime-range-form-field.component.js +4 -3
- package/angular/esm2015/src/controls/form/form-field/list/list-form-field.component.js +1 -1
- package/angular/esm2015/src/controls/form/validation-alert/validation-alert.component.js +3 -2
- package/angular/esm2015/src/controls/index.js +2 -1
- package/angular/esm2015/src/controls/pivot/pivot.component.js +21 -9
- package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +38 -34
- package/angular/esm2015/src/controls/settings/settings-content.component.js +3 -2
- package/angular/esm2015/src/controls/settings/settings.component.js +45 -13
- package/angular/esm2015/src/controls/settings/settings.module.js +5 -1
- package/angular/esm2015/src/controls/tooltip/tooltip-zone.directive.js +2 -2
- package/angular/esm2015/src/controls/wizard/models/index.js +1 -1
- package/angular/esm2015/src/controls/wizard/models/wizard-builder-interface.js +2 -0
- package/angular/esm2015/src/controls/wizard/models/wizard-navigation-interface.js +2 -0
- package/angular/esm2015/src/controls/wizard/wizard-builder.js +70 -1
- package/angular/esm2015/src/controls/wizard/wizard-navigation-information.js +56 -2
- package/angular/esm2015/src/controls/wizard/wizard.component.js +8 -2
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +508 -322
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
- package/angular/src/controls/accordion/index.d.ts +4 -0
- package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +2 -1
- package/angular/src/controls/index.d.ts +1 -0
- package/angular/src/controls/pivot/pivot.component.d.ts +2 -2
- package/angular/src/controls/settings/settings.component.d.ts +3 -0
- package/angular/src/controls/settings/settings.module.d.ts +3 -2
- package/angular/src/controls/wizard/models/index.d.ts +2 -0
- package/angular/src/controls/wizard/models/wizard-builder-interface.d.ts +8 -0
- package/angular/src/controls/wizard/models/wizard-navigation-interface.d.ts +4 -0
- package/angular/src/controls/wizard/wizard-builder.d.ts +36 -1
- package/angular/src/controls/wizard/wizard-navigation-information.d.ts +48 -5
- package/angular/src/controls/wizard/wizard.component.d.ts +2 -1
- package/core/data/resource-cache.d.ts +1 -1
- package/core/data/resource-cache.js +1 -1
- package/core/data/resource-cache.js.map +1 -1
- package/core/security/authorization-manager.js +1 -1
- package/core/security/authorization-manager.js.map +1 -1
- package/package.json +2 -3
- package/styles/css/main.css +1 -1
- package/tools/gulp-ps-cim/index.js +1 -1
- package/tools/gulp-ps-cim/index.js.map +1 -1
|
@@ -282,7 +282,6 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
282
282
|
message: this.strings.MsftSmeShell.Angular.Wizard.disabledStepAlert,
|
|
283
283
|
};
|
|
284
284
|
this.modelChange = new EventEmitter();
|
|
285
|
-
this.navigationInformation = new WizardNavigationInformation(this);
|
|
286
285
|
this.isExpanded = true;
|
|
287
286
|
}
|
|
288
287
|
/**
|
|
@@ -494,6 +493,9 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
494
493
|
}
|
|
495
494
|
else if (!this.onLastStage) {
|
|
496
495
|
this.stageIndex++;
|
|
496
|
+
while (this.stages[this.stageIndex].steps.length === 0) {
|
|
497
|
+
this.stageIndex++;
|
|
498
|
+
}
|
|
497
499
|
this.stepIndex = 0;
|
|
498
500
|
}
|
|
499
501
|
this.emitStepChanged();
|
|
@@ -520,6 +522,9 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
520
522
|
if (this.stageIndex !== 0) {
|
|
521
523
|
this.stages[this.stageIndex].active = false;
|
|
522
524
|
this.stageIndex--;
|
|
525
|
+
while (this.stages[this.stageIndex].steps.length === 0) {
|
|
526
|
+
this.stageIndex--;
|
|
527
|
+
}
|
|
523
528
|
this.stepIndex = this.stages[this.stageIndex].steps.length - 1;
|
|
524
529
|
this.stages[this.stageIndex].completed = false;
|
|
525
530
|
}
|
|
@@ -543,6 +548,7 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
543
548
|
* The method to run when the component is initialized.
|
|
544
549
|
*/
|
|
545
550
|
ngOnInit() {
|
|
551
|
+
this.navigationInformation = new WizardNavigationInformation(this, this.wizardBuilder);
|
|
546
552
|
this.stages = this.wizardBuilder.stages;
|
|
547
553
|
this.heading = this.wizardBuilder.heading;
|
|
548
554
|
this.exitButtonTitle = this.wizardBuilder.exitButtonTitle;
|
|
@@ -899,4 +905,4 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
899
905
|
}], finished: [{
|
|
900
906
|
type: Output
|
|
901
907
|
}] }); })();
|
|
902
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3dpemFyZC93aXphcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvd2l6YXJkL3dpemFyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDMUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN6RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUsxRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0scUNBQXFDLENBQUM7QUFNckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSwyQkFBMkIsRUFBNkIsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7OztJQ3ZCckcsZ0NBQXFGOzs7SUFIdkYsK0JBQzRKO0lBQzFKLDhCQUFxQztJQUFBLFlBQWE7SUFBQSxpQkFBSztJQUN2RCxtRkFBcUY7SUFDdkYsaUJBQU07OztJQUpvQyxxQ0FBeUI7SUFFNUIs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MkJuQyxlQUFpRDtRQUFqRCwwRUFBaUQ7UUFrQ3JELGVBQXNFO1FBQXRFLDBGQUFzRTtRQUNoRSxlQUFtQztRQUFuQyx3REFBbUM7UUFTdkMsZUFBdUI7UUFBdkIsNENBQXVCOzt1RkRwQmxCLGVBQWU7Y0FKM0IsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixXQUFXLEVBQUUseUJBQXlCO2FBQ3pDOzJJQVNjLEtBQUs7a0JBRGYsS0FBSztZQStCQyxhQUFhO2tCQURuQixLQUFLO1lBaUVVLFdBQVc7a0JBRDFCLE1BQU07WUFPUyxJQUFJO2tCQURuQixNQUFNO1lBT1MsYUFBYTtrQkFENUIsTUFBTTtZQU9TLFdBQVc7a0JBRDFCLE1BQU07WUFPUyxlQUFlO2tCQUQ5QixNQUFNO1lBT1MsUUFBUTtrQkFEdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJ4anNMaWZldGltZU1hbmFnZXIgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2Uvcnhqcy1saWZldGltZS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IFNtZVdlYlRlbGVtZXRyeSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3Mvc21lLXdlYi10ZWxlbWV0cnknO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudE1vZHVsZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvbWFuaWZlc3QvZW52aXJvbm1lbnQtbW9kdWxlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0LFxyXG4gICAgUnBjRGlhbG9nTWVzc2FnZVJlcXVlc3RcclxufSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9kaWFsb2cvcnBjLWRpYWxvZy1tb2RlbCc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvU3RyaW5ncyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21tb24vZHluYW1pYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIZWFsdGhBbGVydFNldmVyaXR5LCBQYWdlQWxlcnQgfSBmcm9tICcuLi9wYWdlLWFsZXJ0LWJhci9tb2RlbHMvcGFnZS1hbGVydCc7XHJcbmltcG9ydCB7IFdpemFyZE1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLW1vZGVsJztcclxuaW1wb3J0IHsgV2l6YXJkU3RhZ2UgfSBmcm9tICcuL21vZGVscy93aXphcmQtc3RhZ2UnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAtY2hhbmdlZC1ldmVudCc7XHJcbmltcG9ydCB7IFdpemFyZFN0ZXBWYWxpZGF0aW9uIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAtdmFsaWRhdGlvbic7XHJcbmltcG9ydCB7IFdpemFyZEJ1aWxkZXIgfSBmcm9tICcuL3dpemFyZC1idWlsZGVyJztcclxuaW1wb3J0IHsgV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uLCBXaXphcmROYXZpZ2F0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi93aXphcmQtbmF2aWdhdGlvbi1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IEdlbmVyaWNXaXphcmRTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi93aXphcmQtc3RlcC93aXphcmQtc3RlcC5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIFdoYXRldmVyIHN0YXRlIHRoZSB3aXphcmQgaXMgaW5cclxuICovXHJcbmVudW0gV2l6YXJkU3RhdGUge1xyXG4gICAgRXhpdCA9ICdFeGl0JyxcclxuICAgIEVudHJ5ID0gJ0VudHJ5JyxcclxuICAgIEZpbmlzaGVkID0gJ0ZpbmlzaGVkJyxcclxuICAgIEFjdGl2ZSA9ICdBY3RpdmUnXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEYXRhIHRvIGNvbGxlY3QgaW4gd2l6YXJkXHJcbiAqL1xyXG5jbGFzcyBXaXphcmRUZWxlbWV0cnlEYXRhIHtcclxuICAgIHN0ZXBJbmRleE51bWJlcjogc3RyaW5nO1xyXG4gICAgc3RlcEluZGV4U3RhcnRUaW1lOiBzdHJpbmc7XHJcbiAgICBlbnRyeVBvaW50Pzogc3RyaW5nO1xyXG4gICAgd2l6YXJkVHlwZT86IHN0cmluZztcclxuICAgIHdpemFyZElkPzogc3RyaW5nO1xyXG4gICAgc3RhdGU/OiBXaXphcmRTdGF0ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBjb21wb25lbnQgY2xhc3MgZGVmaW5pdGlvbiBmb3IgdGhlIHdpemFyZCBjb21wb25lbnQuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLXdpemFyZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vd2l6YXJkLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2l6YXJkQ29tcG9uZW50PFRNb2RlbCBleHRlbmRzIFdpemFyZE1vZGVsPlxyXG4gICAgZXh0ZW5kcyBEeW5hbWljQ29tcG9uZW50QmFzZTxHZW5lcmljV2l6YXJkU3RlcENvbXBvbmVudDxUTW9kZWw+PlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIFdpemFyZE5hdmlnYXRpb25JbnRlcmZhY2Uge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZGF0YSBtb2RlbCBmb3Igc2hhcmluZyBkYXRhIGFjcm9zcyB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBtb2RlbCh2YWx1ZTogVE1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbE1vZGVsID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQub25XaXphcmRNb2RlbENoYW5nZWQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZGF0YSBtb2RlbCBmb3Igc2hhcmluZyBkYXRhIGFjcm9zcyB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFRNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgbW9kZWwgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbE1vZGVsOiBUTW9kZWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBjb3B5IG9mIG1vZGVsIHRvIHJvbGxiYWNrIHRvIHdoZW4gdGhlXHJcbiAgICAgKiBjdXJyZW50IHN0ZXAgaXMgc2tpcHBlZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RlcE1vZGVsQ29weTogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHdpemFyZEJ1aWxkZXIgdXNlZCB0byBpbnN0YW50aWF0ZSB0aGUga2V5IHdpemFyZCBwcm9wZXJ0aWVzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHdpemFyZEJ1aWxkZXI6IFdpemFyZEJ1aWxkZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc3RhZ2VzIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGFnZXM6IFdpemFyZFN0YWdlW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaGVhZGluZyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSBleGl0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4aXRCdXR0b25UaXRsZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSBmaW5pc2ggYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluaXNoQnV0dG9uVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBmaW5pc2ggdmlldyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluaXNoVmlldzogV2l6YXJkU3RlcDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIHN0ZXBzIGxpc3Qgc2lkZSBwYW5lIHdpbGwgYmUgdmlzaWJsZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhpZGVTdGVwc0xpc3RTaWRlUGFuZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgYSBjb25maXJtYXRpb24gZGlhbG9nIHdpbGwgYmUgc2hvd24gdXBvbiAnRXhpdCcgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgYXBwbGljYXRpb24gaXMgaW4gcHJldmlldy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzSW5QcmV2aWV3OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgd2l6YXJkIGNhbiBuYXZpZ2F0ZSB0byBhIHByZXZpb3VzIHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsZW1ldHJ5IGRhdGEgY29sbGVjdGVkIHdoaWxlIG5hdmlnYXRpbmcgdGhyb3VnaCB3aXphcmQuIEJ5IGRlZmF1bHQsIHN0YXJ0IGF0IDEuMSBzdGVwIGluZGV4IGFuZFxyXG4gICAgICogRW50cnkgc3RhdGUuXHJcbiAgICAgKiBLZWVwIHNhbWUgZm9ybWF0IGFzIHRlbGVtZXRyeSBldmVudCB0aW1lc3RhbXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRlbGVtZXRyeURhdGE6IFdpemFyZFRlbGVtZXRyeURhdGEgPSB7XHJcbiAgICAgICAgc3RlcEluZGV4TnVtYmVyOiAnMS4xJyxcclxuICAgICAgICBzdGVwSW5kZXhTdGFydFRpbWU6IChuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgIGVudHJ5UG9pbnQ6IEVudmlyb25tZW50TW9kdWxlLmNyZWF0ZUVudHJ5cG9pbnRJZChNc2Z0U21lLnNlbGYoKS5Jbml0Lm1vZHVsZU5hbWUsXHJcbiAgICAgICAgICAgIE1zZnRTbWUuc2VsZigpLkluaXQuZW50cnlQb2ludE5hbWUpLFxyXG4gICAgICAgIHN0YXRlOiBXaXphcmRTdGF0ZS5FbnRyeVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICogT2NjdXJzIHdoZW4gdGhlIHdpemFyZCBtb2RlbCBjaGFuZ2VzXHJcbiAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUTW9kZWw+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW4gdGhlIHdpemFyZCBpcyBleGl0ZWQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IGV4aXQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuZXZlciBhIHN0ZXAgaXMgc3VibWl0dGVkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzdGVwU3VibWl0dGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbmV2ZXIgYSBzdGVwIGluZGV4IGlzIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IHN0ZXBDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8V2l6YXJkU3RlcENoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBDaGFuZ2VkRXZlbnQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbmV2ZXIgc3RlcCB2YWxpZGF0aW9uIGZhaWxzXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IHN0ZXBJbnZhbGlkYXRlZDogRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBWYWxpZGF0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8V2l6YXJkU3RlcFZhbGlkYXRpb24+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbiB0aGUgd2l6YXJkIGlzIGZpbmlzaGVkXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbmlzaGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNvdXJjZSBzdHJpbmdzIGZvciB0aGUgY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RyaW5nczogU3RyaW5ncyA9IE1zZnRTbWUuZ2V0U3RyaW5nczxTdHJpbmdzPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIHdpemFyZCBpcyB2YWxpZGF0aW5nIGlucHV0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdmFsaWRhdGluZzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgb3Igbm90IGFsbCBvZiB0aGUgd2l6YXJkJ3Mgc3RlcHMgYXJlIGNvbXBsZXRlICYgJ0ZpbmlzaCcgaXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHdpemFyZElzRmluaXNoZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaXphcmQgbmF2aWdhdGlvbiBpbmZvcm1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5hdmlnYXRpb25JbmZvcm1hdGlvbjogV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFsZXJ0IGZvciBhIGRpc2FibGVkIHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbGVydDogUGFnZUFsZXJ0ID0ge1xyXG4gICAgICAgIHNldmVyaXR5OiBIZWFsdGhBbGVydFNldmVyaXR5LkluZm8sXHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5kaXNhYmxlZFN0ZXBBbGVydCxcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWRlIHBhbmUgdG9nZ2xlIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0V4cGFuZGVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGFnZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGFnZUluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcnhqcyBsaWZldGltZSBtYW5hZ2VyIGZvciB0aGUgY3VycmVudCBzdGVwXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3VycmVudFN0ZXBSeGpzTGlmZXRpbWU6IFJ4anNMaWZldGltZU1hbmFnZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgV2l6YXJkQ29tcG9uZW50IGNsYXNzLlxyXG4gICAgICogQHBhcmFtIGFwcENvbnRleHQgLSBUaGUgYXBwbGljYXRpb24gY29udGV4dCBzZXJ2aWNlIGNsYXNzLlxyXG4gICAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIC0gVGhlIGNoYW5nZSBkZXRlY3Rvci5cclxuICAgICAqIEBwYXJhbSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgLSBUaGUgY29tcG9uZW50IGZhY3RvcnkgcmVzb2x2ZXIuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYXBwQ29udGV4dDogQXBwQ29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XHJcbiAgICAgICAgdGhpcy5tb2RlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VE1vZGVsPigpO1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkluZm9ybWF0aW9uID0gbmV3IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbih0aGlzKTtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdGFnZXNBcnJheUluZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdGVwSW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjdXJyZW50U3RhZ2UoKTogV2l6YXJkU3RhZ2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlc0FycmF5SW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXAoKTogV2l6YXJkU3RlcCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzW3RoaXMuc3RlcEluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGZpbmlzaCB2aWV3IG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZmluaXNoU3RlcCgpOiBXaXphcmRTdGVwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTdGVwc0ZvclN0YWdlKCk6IFdpemFyZFN0ZXBbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50IG9mIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXBDb21wb25lbnQoKTogR2VuZXJpY1dpemFyZFN0ZXBDb21wb25lbnQ8VE1vZGVsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmID8gdGhpcy5yZWYuaW5zdGFuY2UgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RlcE9mU3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RlcEluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9uTGFzdFN0ZXBPZkxhc3RTdGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbkxhc3RTdGFnZSAmJiB0aGlzLm9uTGFzdFN0ZXBPZlN0YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBzdGFnZSBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAgICBwdWJsaWMgc3RhZ2VJbmRleERpc2FibGVkKHN0YWdlOiBXaXphcmRTdGFnZSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RhZ2UuY29tcGxldGVkICYmIGluZGV4ICE9PSB0aGlzLnN0YWdlc0FycmF5SW5kZXggJiYgIXN0YWdlLmFjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgc3RlcCBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAgICBwdWJsaWMgc3RlcEluZGV4RGlzYWJsZWQoc3RlcDogV2l6YXJkU3RlcCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RlcC5jb21wbGV0ZWQgJiYgaW5kZXggIT09IHRoaXMuc3RlcEluZGV4ICYmICFzdGVwLmRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGV4dCBmb3IgdGhlIG5leHQgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmV4dEJ1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggLSAxID09PSB0aGlzLnN0ZXBJbmRleCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFnZUluZGV4ID09PSB0aGlzLnN0YWdlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hCdXR0b25UaXRsZSA/IHRoaXMuZmluaXNoQnV0dG9uVGl0bGUgOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmZpbmlzaDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLnN0YWdlTmFtZS5mb3JtYXQodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4ICsgMV0ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5uZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRleHQgZm9yIHRoZSBleGl0L2ZpbmlzaCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4aXRCdXR0b25UaXRsZSA/IHRoaXMuZXhpdEJ1dHRvblRpdGxlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5leGl0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgd2l6YXJkIGJ1dHRvbnNcclxuICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVCYWNrQnV0dG9uKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zdGFnZXNBcnJheUluZGV4ID09PSAwICYmIHRoaXMuc3RlcEluZGV4ID09PSAwKSB8fCB0aGlzLnZhbGlkYXRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNhYmxlTmV4dEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LnZhbGlkIHx8IHRoaXMudmFsaWRhdGluZyB8fCB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmlzQnVzeTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG93U2tpcEJ1dHRvbigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlICYmIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuY2FuQmVTa2lwcGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHN0ZXBJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1t2YWx1ZV0pIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcignV2l6YXJkQ29tcG9uZW50LnN0ZXBJbmRleCBzZXR0ZXInLCAnQXR0ZW1wdGVkIHRvIHNldCBzdGVwSW5kZXggdG8gaW52YWxpZCB2YWx1ZS4nLCB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRJbmRleDogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICBzdGVwczogdGhpcy5jdXJyZW50U3RhZ2Uuc3RlcHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbmRleCA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhbkNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0aGlzLmN1cnJlbnRTdGVwLmR5bmFtaWNTdGVwQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXNlcnZlTW9kZWxGb3JDdXJyZW50U3RlcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGFnZSBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHN0YWdlc0FycmF5SW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGFnZXNbdmFsdWVdKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5zdGFnZVN0ZXBJbmRleCBzZXR0ZXInLCAnQXR0ZW1wdGVkIHRvIHNldCBzdGFnZXNBcnJheUluZGV4IHRvIGludmFsaWQgdmFsdWUuJywge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0SW5kZXg6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuc3RhZ2VzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBjdXJyZW50IHN0YWdlIG9mIHRoZSB3aXphcmQgYXMgY29tcGxldGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RhZ2Ugd2FzIGNvbXBsZXRlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tcGxldGVDdXJyZW50U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RhZ2UuY29tcGxldGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFya3MgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkIGFzIGNvbXBsZXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0ZXAgd2FzIGNvbXBsZXRlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tcGxldGVDdXJyZW50U3RlcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCAmJiAhdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQgYXMgaW5jb21wbGV0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGVwIHdhcyBmYWlsZWQgYW5kIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZhaWxDdXJyZW50U3RlcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmZhaWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgd2l6YXJkIHRvIHRoZSBuZXh0IHZpc2libGUgc3RlcCBpbiB0aGUgbGlzdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uTGFzdFN0ZXBPZkxhc3RTdGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTmV4dFN0ZXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPT09IFdpemFyZFN0YXRlLkVudHJ5KSB7XHJcbiAgICAgICAgICAgIC8vIFN3aXRjaCB0byBhY3RpdmUgYWZ0ZXIgb3VyIGZpcnN0IG1vdmUgdG8gbmV4dCBvciBwcmV2aW91cyBzdGVwXHJcbiAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNhbGwgaXQgaGVyZSBiL2Mgc29tZSBtb2R1bGVzIHdpbGwgdXBkYXRlIHN0ZXBJbmRleCBhZnRlciBsb2FkaW5nLCB3aGljaCB0cmlnZ2VycyBlbWl0U3RlcENoYW5nZWQuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncyhXaXphcmRTdGF0ZS5BY3RpdmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgaW5kZXhpbmcgZm9yIG1vdmluZyB0byB0aGUgbmV4dCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmF2aWdhdGVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5vbkxhc3RTdGVwT2ZTdGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCsrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub25MYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4Kys7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIHRoZSB3aXphcmQgdG8gdGhlIHByZXZpb3VzICh2aXNpYmxlKSBzdGVwIGluIHRoZSBsaXN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZVRvUHJldmlvdXNTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1ByZXZpb3VzU3RlcCgpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1ByZXZpb3VzU3RlcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID09PSBXaXphcmRTdGF0ZS5FbnRyeSkge1xyXG4gICAgICAgICAgICAvLyBTd2l0Y2ggdG8gYWN0aXZlIGFmdGVyIG91ciBmaXJzdCBtb3ZlIHRvIG5leHQgb3IgcHJldmlvdXMgc3RlcFxyXG4gICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPSBXaXphcmRTdGF0ZS5BY3RpdmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgaW5kZXhpbmcgZm9yIG1vdmluZyBiYWNrIHRvIGxhc3Qgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5hdmlnYXRlVG9QcmV2aW91c1N0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RlcEluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YWdlSW5kZXggIT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4ID0gdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFRoZSBtZXRob2QgdGhhdCBmb2N1c2VzIG9uIGFuIGFjdGl2ZSBzdGVwIG9yIHN0YWdlXHJcbiAgICAqL1xyXG5cclxuICAgIHByaXZhdGUgZm9jdXNPbkFjdGl2ZVN0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmhpZGVTdGVwc0xpc3RTaWRlUGFuZSA/ICdzbWUtd2l6YXJkLXN0YWdlLWZvY3VzJyA6ICdzbWUtc3RlcC1hY3RpdmUnO1xyXG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoc2VsZWN0b3IpO1xyXG4gICAgICAgIGlmIChmb2N1c2FibGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+Zm9jdXNhYmxlWzBdKS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdG8gcnVuIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy53aXphcmRCdWlsZGVyLnN0YWdlcztcclxuICAgICAgICB0aGlzLmhlYWRpbmcgPSB0aGlzLndpemFyZEJ1aWxkZXIuaGVhZGluZztcclxuICAgICAgICB0aGlzLmV4aXRCdXR0b25UaXRsZSA9IHRoaXMud2l6YXJkQnVpbGRlci5leGl0QnV0dG9uVGl0bGU7XHJcbiAgICAgICAgdGhpcy5maW5pc2hCdXR0b25UaXRsZSA9IHRoaXMud2l6YXJkQnVpbGRlci5maW5pc2hCdXR0b25UaXRsZTtcclxuICAgICAgICB0aGlzLmZpbmlzaFZpZXcgPSB0aGlzLndpemFyZEJ1aWxkZXIuZmluaXNoVmlldztcclxuICAgICAgICB0aGlzLmhpZGVTdGVwc0xpc3RTaWRlUGFuZSA9IHRoaXMud2l6YXJkQnVpbGRlci5oaWRlU3RlcHNMaXN0U2lkZVBhbmU7XHJcbiAgICAgICAgdGhpcy5zaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZyA9IHRoaXMud2l6YXJkQnVpbGRlci5zaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZztcclxuICAgICAgICB0aGlzLmlzSW5QcmV2aWV3ID0gdGhpcy53aXphcmRCdWlsZGVyLmlzSW5QcmV2aWV3U3RhdGU7XHJcbiAgICAgICAgdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwID0gdGhpcy53aXphcmRCdWlsZGVyLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXA7XHJcbiAgICAgICAgdGhpcy5zdGFnZXNBcnJheUluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcblxyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zdGFnZXMpIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcignV2l6YXJkQ29tcG9uZW50Lm5nT25Jbml0JywgYFRoZSAnc3RhZ2VzJyBhcnJheSBpcyBub3QgdmFsaWQhLmAsIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzOiB0aGlzLnN0YWdlc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQubmdPbkluaXQnLCBgVGhlICdtb2RlbCcgYXR0cmlidXRlIGlzIG5vdCB2YWxpZC5gLCB7XHJcbiAgICAgICAgICAgICAgICBtb2RlbDogdGhpcy5tb2RlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsaWRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2l6YXJkSXNGaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGxlZE1vZGVsID0gdGhpcy5pbnRlcm5hbE1vZGVsIGFzIGFueTtcclxuICAgICAgICBpZiAoZmlsbGVkTW9kZWwud2l6YXJkSWQpIHtcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLndpemFyZElkID0gZmlsbGVkTW9kZWwud2l6YXJkSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWxsZWRNb2RlbC53aXphcmRUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS53aXphcmRUeXBlID0gZmlsbGVkTW9kZWwud2l6YXJkVHlwZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkluZm9ybWF0aW9uLnJlc2V0SGlzdG9yeSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncygpO1xyXG5cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgIT09IFdpemFyZFN0YXRlLkZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBzZXQgYXQgdGhpcyBwb2ludCBiL2MgdmlldyBpcyBkZXN0cnVjdGVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID0gV2l6YXJkU3RhdGUuRXhpdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBQb3B1bGF0ZSBvdXJzZWx2ZXMgYi9jIHRoZSBlbGVtZW50IHJlZiBpcyBkZXN0cnVjdGVkIGF0IHRoaXMgcG9pbnQuIENvbnRhaW5lciB0YWdzIHNob3VsZCBub3QgY2hhbmdlXHJcbiAgICAgICAgICAgIGNvbnN0IGV4aXRUZWxlbWV0cnlEYXRhID0geyBjb250ZW50SWQ6ICdzbWUtd2l6YXJkJywgYXJlYU5hbWU6ICdXaXphcmRDb21wb25lbnQnIH07XHJcbiAgICAgICAgICAgIE1zZnRTbWUuZGVlcEFzc2lnbihleGl0VGVsZW1ldHJ5RGF0YSwgdGhpcy50ZWxlbWV0cnlEYXRhKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFjdGlvblR5cGUgQSBmb3IgQXV0byAoYWNjb3JkaW5nIHRvIEFXQSBkaWN0aW9uYXJ5KSB0byBkaWZmZXJlbnRpYXRlIGZyb20gQ0xcclxuICAgICAgICAgICAgU21lV2ViVGVsZW1ldHJ5LnRyYWNlQWN0aW9uKG51bGwsIHsgY29udGVudDogZXhpdFRlbGVtZXRyeURhdGEsIGFjdGlvblR5cGU6ICdBJyB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gb3IgY2xvc2Ugc2lkZSBwYW5lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0b2dnbGVQYW5lKCkge1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25CYWNrQ2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVRvUHJldmlvdXNTdGVwKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkFjdGl2ZVN0ZXAoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIHNraXAgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblNraXBDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsb2dJZkJ1c3lPckp1c3RDb21wbGV0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZU1vZGVsRm9yQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgRXhpdCAvIEZpbmlzaCBidXR0b24gaXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRXhpdENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nQ29uZmlybWF0aW9uKDxScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0PntcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ubm8sXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi55ZXMsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkV4aXQuRGlhbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5FeGl0LkRpYWxvZy50aXRsZVxyXG4gICAgICAgICAgICB9KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmV4aXQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBoYW5kbGVzIGNvbXBsZXRpb24gb2YgdGhlIHdpemFyZCxcclxuICAgICAqIGFuZCByZW5kZXJzIHRoZSBmaW5pc2hWaWV3IGlmIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGVwKCk7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGFnZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncyhXaXphcmRTdGF0ZS5GaW5pc2hlZCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbmlzaFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy53aXphcmRJc0ZpbmlzaGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Db21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gdGhpcy5maW5pc2hWaWV3LmR5bmFtaWNTdGVwQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBuZXh0IGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25OZXh0Q2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgLy8gaWYgZmluaXNoaW5nXHJcbiAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TdGVwVmFsaWRhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudFN0ZXAuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuU3RlcFZhbGlkYXRpb24oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBTdWJtaXR0ZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCB2YWxpZGF0ZXMgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBydW5TdGVwVmFsaWRhdGlvbigpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQudmFsaWRhdGUoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKHZhbGlkYXRpb25SZXN1bHQ6IFdpemFyZFN0ZXBWYWxpZGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbEN1cnJlbnRTdGVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwSW52YWxpZGF0ZWQuZW1pdCh2YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBoYW5kbGVzIGluZGV4ZXMgYW5kXHJcbiAgICAgKiBzdGVwIGFuZCBzdGFnZSBjb21wbGV0aW9uIGZvciB0aGUgTmV4dCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlTmV4dE5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGVwKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9uTGFzdFN0ZXBPZlN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVDdXJyZW50U3RhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb3ZlVG9OZXh0U3RlcCgpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb2N1c09uQWN0aXZlU3RlcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpIHtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHQuZnJhbWUuc2hvd0RpYWxvZ01lc3NhZ2UoPFJwY0RpYWxvZ01lc3NhZ2VSZXF1ZXN0PntcclxuICAgICAgICAgICAgYnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5PSy5hZmZpcm1hdGl2ZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5QcmV2aW91c1N0ZXAuRGlhbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLlByZXZpb3VzU3RlcC5EaWFsb2cudGl0bGVcclxuICAgICAgICB9KS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKG9uQ29uZmlybWF0aW9uQ2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcclxuICAgICAgICBjb25zdCBpc0J1c3kgPSB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmlzQnVzeTtcclxuICAgICAgICBjb25zdCBidXN5TWVzc2FnZSA9IHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuYnVzeU1lc3NhZ2U7XHJcbiAgICAgICAgaWYgKGlzQnVzeSkge1xyXG4gICAgICAgICAgICB0aGlzLmFwcENvbnRleHQuZnJhbWUuc2hvd0RpYWxvZ0NvbmZpcm1hdGlvbig8UnBjRGlhbG9nQ29uZmlybWF0aW9uUmVxdWVzdD57XHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLm5vLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ueWVzLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYnVzeU1lc3NhZ2UgPyBidXN5TWVzc2FnZSA6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuQnVzeS5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkJ1c3kuRGlhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgIH0pLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY29uZmlybWVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvbkNvbmZpcm1hdGlvbkNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiBhIHN0YWdlIGlzIGNsaWNrZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNsaWNrZWRTdGVwSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGNsaWNrZWQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblN0YWdlQ2xpY2soY2xpY2tlZFN0YWdlSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFN0YWdlID0gdGhpcy5zdGFnZXNbY2xpY2tlZFN0YWdlSW5kZXhdO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwICYmIGNsaWNrZWRTdGFnZUluZGV4IDw9IHRoaXMuc3RhZ2VJbmRleCkge1xyXG4gICAgICAgICAgICAvLyBzaG93IGRpYWxvZyB3aGVuIG9ubHkgY2xpY2tpbmcgYSBwcmV2aW91cyBzdGFnZVxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U3RhZ2UuY29tcGxldGVkICYmIHRoaXMuc3RhZ2VJbmRleCAhPT0gY2xpY2tlZFN0YWdlSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRTdGFnZS5jb21wbGV0ZWQgfHwgdGFyZ2V0U3RhZ2UuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCA9IGNsaWNrZWRTdGFnZUluZGV4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uY29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFnZUluZGV4ICsgMTsgaSA8IHRoaXMuc3RhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbaV0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbaV0uY29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gYSBzdGVwIGlzIGNsaWNrZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNsaWNrZWRTdGVwSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGNsaWNrZWQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU3RlcENsaWNrKGNsaWNrZWRTdGVwSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN0ZXBJc0FjdGl2ZSA9IHRoaXMuc3RlcEluZGV4ID09PSBjbGlja2VkU3RlcEluZGV4O1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFN0ZXAgPSB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1tjbGlja2VkU3RlcEluZGV4XTtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcCAmJiBjbGlja2VkU3RlcEluZGV4IDw9IHRoaXMuc3RlcEluZGV4KSB7XHJcbiAgICAgICAgICAgIC8vIHNob3cgZGlhbG9nIHdoZW4gb25seSBjbGlja2luZyBhIHByZXZpb3VzIHN0ZXBcclxuICAgICAgICAgICAgaWYgKCFzdGVwSXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldFN0ZXAgJiYgIXN0ZXBJc0FjdGl2ZSAmJiAodGFyZ2V0U3RlcC5jb21wbGV0ZWQgfHwgdGFyZ2V0U3RlcC5kaXNhYmxlZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSBjbGlja2VkU3RlcEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICgodGhpcy5jdXJyZW50U3RlcCB8fCB0aGlzLmZpbmlzaFN0ZXApICYmICghdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUgPSBuZXcgUnhqc0xpZmV0aW1lTWFuYWdlcigpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lLmFkZFN1YnNjcmlwdGlvbnMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LnN1Ym1pdHRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbk5leHRDbGljaygpKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQubW9kZWxDaGFuZ2VkLnN1YnNjcmliZShuZXdWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbE1vZGVsID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5vbldpemFyZE1vZGVsQ2hhbmdlZCh0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNsZWFuQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLmNsZWFuQ29tcG9uZW50KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhdmVzIHRoZSBzdGF0ZSBvZiB0aGUgbW9kZWwgYXQgdGhlIGJlZ2lubmluZ1xyXG4gICAgICogb2YgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwcmVzZXJ2ZU1vZGVsRm9yQ3VycmVudFN0ZXAoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcE1vZGVsQ29weSA9IE1zZnRTbWUuZGVlcENvcHkodGhpcy5pbnRlcm5hbE1vZGVsIHx8IHt9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgbW9kZWwgYmFjayB0byB0aGUgc3RhdGUgYXQgdGhlXHJcbiAgICAgKiBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZXN0b3JlTW9kZWxGb3JDdXJyZW50U3RlcCgpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdXJyZW50U3RlcE1vZGVsQ29weTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVtaXRTdGVwQ2hhbmdlZCgpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24ucHVzaEhpc3RvcnkoeyBzdGFnZTogdGhpcy5zdGFnZUluZGV4LCBzdGVwOiB0aGlzLnN0ZXBJbmRleCB9KTtcclxuXHJcbiAgICAgICAgLy8gZW1pdCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UuXHJcbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgc3RhZ2VJbmRleDogdGhpcy5zdGFnZUluZGV4LFxyXG4gICAgICAgICAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLmN1cnJlbnRTdGFnZSA/IHRoaXMuY3VycmVudFN0YWdlLm5hbWUgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3RlcEluZGV4OiB0aGlzLnN0ZXBJbmRleCxcclxuICAgICAgICAgICAgICAgIHN0ZXBOYW1lOiB0aGlzLmN1cnJlbnRTdGVwID8gdGhpcy5jdXJyZW50U3RlcC5uYW1lIDogbnVsbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGVsZW1ldHJ5IHN0cmluZyB1c2VkIHRvIHBvcHVsYXRlIHRlbGVtZXRyeSBhY3Rpb24gZXZlbnRzLiBVcGRhdGVzIHdpemFyZCBzdGF0ZSwgc3RlcCBpbmRleCwgYW5kIHRpbWUgc3RlcCBpbmRleCBzdGFydGVkLlxyXG4gICAgICogU3RlcCBpbmRleCBzdGFydCB0aW1lIHNob3VsZCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggZXZlbnQgdGltZXN0YW1wIHRvIG1vcmUgZWFzaWx5IGNhbGN1bGF0ZSB0aW1lIHNwZW50IGluIHN0YWdlLlxyXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBzdGF0ZSB0byBjaGFuZ2UgdG8sIGlmIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZVRlbGVtZXRyeVRhZ3Moc3RhdGU/OiBXaXphcmRTdGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9IHN0YXRlID8gc3RhdGUgOiB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGU7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0ZXBJbmRleE51bWJlciA9IGAke3RoaXMuc3RhZ2VJbmRleCArIDF9LiR7dGhpcy5zdGVwSW5kZXggKyAxfWA7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0ZXBJbmRleFN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpOyAvLyBrZWVwIHNhbWUgZm9ybWF0IGFzIGV2ZW50IHRpbWVzdGFtcFxyXG5cclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic21lLXdpemFyZCBzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1hcnJhbmdlLXN0YWNrLXYgc21lLXBvc2l0aW9uLWluc2V0LW5vbmVcIiBzbWVUZWxlbWV0cnlJZD0nc21lLXdpemFyZCcgc21lVGVsZW1ldHJ5QXJlYT1cIldpemFyZENvbXBvbmVudFwiPlxyXG4gIDwhLS0gSGVhZGluZyAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiaGVhZGluZyAmJiAhd2l6YXJkSXNGaW5pc2hlZFwiIFthdHRyLmFyaWEtcmVhZG9ubHldPXRydWVcclxuICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWJvcmRlci1ib3R0b20tc20gc21lLWJvcmRlci1ib3R0b20tY29sb3ItYmFzZS04MFwiPlxyXG4gICAgPGgzIGlkPVwic21lLXNoZWxsLXdpemFyZC1oZWFkaW5nLWlkXCI+e3sgaGVhZGluZyB9fTwvaDM+XHJcbiAgICA8c21lLWJhZGdlIHR5cGU9XCJwcmV2aWV3XCIgKm5nSWY9XCJpc0luUHJldmlld1wiIGNsYXNzPVwic21lLW1hcmdpbi1sZWZ0LXhzXCI+PC9zbWUtYmFkZ2U+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gU3RhZ2VzIC0tPlxyXG4gIDx1bCByb2xlPVwidGFibGlzdFwiICpuZ0lmPVwiIXdpemFyZElzRmluaXNoZWRcIlxyXG4gICAgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtYm9yZGVyLWJvdHRvbS1zbSBzbWUtYm9yZGVyLWJvdHRvbS1jb2xvci1iYXNlLTgwIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICA8bGlcclxuICAgICAgW25nQ2xhc3NdPVwieydzbWUtd2l6YXJkLXN0YWdlLWNvbXBsZXRlZCc6IHN0YWdlLmNvbXBsZXRlZCwgJ3NtZS13aXphcmQtc3RhZ2UtY2xpY2tlZCc6IHZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleCwgJ3NtZS13aXphcmQtc3RhZ2UtYWN0aXZlJzogc3RhZ2UuYWN0aXZlLCAnc21lLWRpc2FibGVkJzogdmFsICE9PSBzdGFnZXNBcnJheUluZGV4fVwiXHJcbiAgICAgIGNsYXNzPVwic21lLXdpemFyZC1zdGFnZSBzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1tYXJnaW4tcmlnaHQtbWRcIiByb2xlPVwidGFiXCJcclxuICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICAqbmdGb3I9XCJsZXQgc3RhZ2Ugb2Ygc3RhZ2VzOyBsZXQgdmFsID0gaW5kZXhcIiAoY2xpY2spPVwib25TdGFnZUNsaWNrKHZhbClcIj5cclxuICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInN0YWdlLm5hbWVcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiB0eXBlPVwiYnV0dG9uXCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIiBbc21lVGVsZW1ldHJ5SWRdPVwiJ3dpemFyZFN0YWdlJyArICh2YWwgKyAxKVwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS1hY3RpdmVdPVwidmFsID09PSBzdGFnZXNBcnJheUluZGV4XCJcclxuICAgICAgICBbY2xhc3Muc21lLXNlbGVjdGVkXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS13aXphcmQtc3RhZ2UtZm9jdXNdPVwidmFsID09PSBzdGFnZXNBcnJheUluZGV4XCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy5zdGFnZUluZGV4RGlzYWJsZWQoc3RhZ2UsIHZhbClcIiBbc21lVGVsZW1ldHJ5RGlzYWJsZUVsZW1lbnRdID0gXCJ0aGlzLnN0YWdlSW5kZXhEaXNhYmxlZChzdGFnZSwgdmFsKVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLXdpemFyZC1idXR0b24taXRlbSBzbWUtcGFkZGluZy12ZXJ0aWNhbC1zbSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLW5vbmUgc21lLWJ1dHRvbi1hdXRvLXdpZHRoXCI+XHJcbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydzbWUtaWNvbiBzbWUtaWNvbi1hY2NlcHQgc21lLWljb24tc2l6ZS14eHMnOiBzdGFnZS5jb21wbGV0ZWR9XCJcclxuICAgICAgICAgIGNsYXNzPVwic21lLXdpemFyZC1zdGFnZS1pbmRleCBzbWUtcG9zaXRpb24tZmxleC1ub25lXCI+XHJcbiAgICAgICAgICB7eyAhc3RhZ2UuY29tcGxldGVkID8gdmFsICsgMSA6ICcnIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3NtZS1mb250LWVtcGhhc2lzMSBzbWUtd2l6YXJkLXN0YWdlLWFjdGl2ZSc6IHZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleCB8fCBzdGFnZS5hY3RpdmUsICdzbWUtd2l6YXJkLXN0YWdlLWNvbXBsZXRlZCc6IHN0YWdlLmNvbXBsZXRlZCwgJ3NtZS1tYXJnaW4tbGVmdC14cyc6ICFzdGFnZS5jb21wbGV0ZWR9XCJcclxuICAgICAgICAgIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtZm9udC1ib2R5XCI+XHJcbiAgICAgICAgICB7e3N0YWdlLm5hbWV9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2xpPlxyXG4gIDwvdWw+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8gc21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiPlxyXG4gICAgPGRpdiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkICYmICFoaWRlU3RlcHNMaXN0U2lkZVBhbmVcIlxyXG4gICAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLXYgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtZm9jdXMtem9uZVxyXG4gICAgICBzbWUtYm9yZGVyLXJpZ2h0LXNtIHNtZS1ib3JkZXItcmlnaHQtY29sb3ItYmFzZS04MFwiPlxyXG4gICAgICA8dWwgcm9sZT1cInRhYmxpc3RcIiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkICYmICFoaWRlU3RlcHNMaXN0U2lkZVBhbmVcIlxyXG4gICAgICAgIGNsYXNzPVwic21lLXBhZGRpbmctdmVydGljYWwtc20gc21lLXBvc2l0aW9uLWZsZXgtYXV0b1wiIFtuZ0NsYXNzXT1cInsnc21lLWxheW91dC1taW53aWR0aC1zbSc6IGlzRXhwYW5kZWR9XCI+XHJcbiAgICAgICAgPGxpIHJvbGU9XCJ0YWJcIiB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydzbWUtc2NoZW1lLWxpc3QtaXRlbSBzbWUtYWN0aXZlIHNtZS1jb2xvci1iYXNlLTUnOiBpbmRleCA9PT0gc3RlcEluZGV4fVwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXBhZGRpbmctbGVmdC1sZyBzbWUtcGFkZGluZy1yaWdodC14c1wiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImluZGV4ID09PSBzdGVwSW5kZXhcIiAqbmdGb3I9XCJsZXQgc3RlcCBvZiBnZXRTdGVwc0ZvclN0YWdlKCk7IGxldCBpbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgIChjbGljayk9XCJvblN0ZXBDbGljayhpbmRleClcIiBbdGl0bGVdPVwiaXNFeHBhbmRlZCA/IG51bGwgOiBzdGVwLm5hbWVcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpc0V4cGFuZGVkID8gbnVsbCA6IHN0ZXAubmFtZVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW25nQ2xhc3NdPVwieydzbWUtc3RlcC1hY3RpdmUnOiBpbmRleCA9PT0gc3RlcEluZGV4fVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic21lLXdpemFyZC1zdGVwIHNtZS1idXR0b24tdHJpZ2dlciBzbWUtd2l6YXJkLWJ1dHRvbi1pdGVtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbm9uZSBzbWUtcGFkZGluZy12ZXJ0aWNhbC14cyBzbWUtYnV0dG9uLWF1dG8td2lkdGhcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy5zdGVwSW5kZXhEaXNhYmxlZChzdGVwLCBpbmRleClcIiBbc21lVGVsZW1ldHJ5RGlzYWJsZUVsZW1lbnRdPVwidGhpcy5zdGVwSW5kZXhEaXNhYmxlZChzdGVwLCBpbmRleClcIlxyXG4gICAgICAgICAgICBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIFtzbWVUZWxlbWV0cnlJZF09XCInd2l6YXJkU3RlcCcgKyAoaW5kZXggKyAxKVwiID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1tYXJnaW4tcmlnaHQteHNcIj57eyBzdGFnZXNBcnJheUluZGV4ICsgMSB9fS57eyBpbmRleCArIDEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZVwiICpuZ0lmPVwiaXNFeHBhbmRlZFwiPnt7IHN0ZXAubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJzcGxpdC12aWV3LXRvZ2dsZSBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWxheW91dC1mbG9hdC1yaWdodFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZSgpXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNFeHBhbmRlZCA/IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLmNvbGxhcHNlU3RlcHNMaXN0IDogc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuZXhwYW5kU3RlcHNMaXN0XCJcclxuICAgICAgICAgIFt0aXRsZV09XCJpc0V4cGFuZGVkID8gc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuY29sbGFwc2VTdGVwc0xpc3QgOiBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5leHBhbmRTdGVwc0xpc3RcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb25cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzbWUtaWNvbi1jaGV2cm9uTGVmdCc6IGlzRXhwYW5kZWQsICdzbWUtaWNvbi1jaGV2cm9uUmlnaHQnOiAhaXNFeHBhbmRlZCB9XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU3RlcCBjb250ZW50IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLXBvc2l0aW9uLXN0cmV0Y2ggc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0b1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc21lLXBhZGRpbmctaW5zZXQtbGcnOiBjdXJyZW50U3RlcENvbXBvbmVudC5wYWRDb250ZW50c31cIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRTdGVwQ29tcG9uZW50LmRpc2FibGVkXCI+XHJcbiAgICAgICAgPHNtZS1wYWdlLWFsZXJ0LWJhciBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS1wYWdlLWFsZXJ0LWJhcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gRG9uJ3QgcmVtb3ZlIHRoaXMgbGluZSEgLS0+XHJcbiAgICAgIDwhLS0gVGhlIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGNvbXBvbmVudCBsb29rcyBmb3IgI2NvbnRhaW5lciB0byByZW5kZXIgaXRzZWxmIGFzIHRoZSBzaWJsaW5nLiEgLS0+XHJcbiAgICAgIDxkaXYgaWQ9XCJkeW5hbWljLWNvbnRlbnQtY29udGFpbmVyXCIgI2NvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRm9vdGVyIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZFwiXHJcbiAgICBjbGFzcz1cInNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtYm9yZGVyLXRvcC1zbSBzbWUtYm9yZGVyLXRvcC1jb2xvci1iYXNlLTgwIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LWZsb2F0LWxlZnRcIiBbY2xhc3Muc21lLXBhZGRpbmctcmlnaHQteGxdPVwiIXZhbGlkYXRpbmdcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lXCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkUHJldlwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uQmFja0NsaWNrKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUJhY2tCdXR0b25cIlxyXG4gICAgICAgIFtjbGFzcy5zbWUtbGF5b3V0LW5vbmVdPVwiIWNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXBcIj57e3N0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmJhY2t9fTwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1idXR0b24tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZE5leHRcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIChjbGljayk9XCJvbk5leHRDbGljaygpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZU5leHRCdXR0b25cIiBbc21lVGVsZW1ldHJ5RGlzYWJsZUVsZW1lbnRdPVwiZGlzYWJsZU5leHRCdXR0b25cIj57eyBuZXh0QnV0dG9uVGV4dCgpIH19PC9idXR0b24+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW5nXCIgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1sYXlvdXQtZmxvYXQtcmlnaHQgc21lLXBhZGRpbmctbGVmdC14bCBzbWUtcGFkZGluZy10b3AtbWRcIj5cclxuICAgICAgICA8c21lLWxvYWRpbmctd2hlZWwgc2l6ZT1cInNtYWxsXCI+PC9zbWUtbG9hZGluZy13aGVlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJzbWUtZm9jdXMtem9uZVwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZFNraXBcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIChjbGljayk9XCJvblNraXBDbGljaygpXCJcclxuICAgICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhc2hvd1NraXBCdXR0b25cIj57e3N0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnNraXB9fTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1sYXlvdXQtZmxvYXQtcmlnaHRcIiB0eXBlPVwiYnV0dG9uXCIgc21lVGVsZW1ldHJ5SWQ9XCJ3aXphcmRFeGl0XCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIlxyXG4gICAgICAoY2xpY2spPVwib25FeGl0Q2xpY2soKVwiPnt7IGV4aXRCdXR0b25UZXh0KCkgfX08L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
908
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3dpemFyZC93aXphcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvd2l6YXJkL3dpemFyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUVBQXFFLENBQUM7QUFDMUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN6RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUsxRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0scUNBQXFDLENBQUM7QUFPckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7O0lDeEIxRSxnQ0FBcUY7OztJQUh2RiwrQkFDNEo7SUFDMUosOEJBQXFDO0lBQUEsWUFBYTtJQUFBLGlCQUFLO0lBQ3ZELG1GQUFxRjtJQUN2RixpQkFBTTs7O0lBSm9DLHFDQUF5QjtJQUU1Qixl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LENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0MsQ0FBQzs7aUdBenlCUSxlQUFlO3VFQUFmLGVBQWU7UUM3RDVCLDhCQUF1SjtRQUVySixnRUFJTTtRQUdOLDhEQXdCSztRQUVMLDhCQUFrRjtRQUNoRixnRUE4Qk07UUFHTiw4QkFDeUU7UUFDdkUsZ0VBRU07UUFHTiw0QkFBcUQ7UUFDdkQsaUJBQU07UUFDUixpQkFBTTtRQUVOLGtFQWdCTTtRQUNSLGlCQUFNOztRQS9GRSxlQUFrQztRQUFsQywyREFBa0M7UUFPcEIsZUFBdUI7UUFBdkIsNENBQXVCO1FBMkJuQyxlQUFpRDtRQUFqRCwwRUFBaUQ7UUFrQ3JELGVBQXNFO1FBQXRFLDBGQUFzRTtRQUNoRSxlQUFtQztRQUFuQyx3REFBbUM7UUFTdkMsZUFBdUI7UUFBdkIsNENBQXVCOzt1RkRuQmxCLGVBQWU7Y0FKM0IsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixXQUFXLEVBQUUseUJBQXlCO2FBQ3pDOzJJQVNjLEtBQUs7a0JBRGYsS0FBSztZQStCQyxhQUFhO2tCQURuQixLQUFLO1lBaUVVLFdBQVc7a0JBRDFCLE1BQU07WUFPUyxJQUFJO2tCQURuQixNQUFNO1lBT1MsYUFBYTtrQkFENUIsTUFBTTtZQU9TLFdBQVc7a0JBRDFCLE1BQU07WUFPUyxlQUFlO2tCQUQ5QixNQUFNO1lBT1MsUUFBUTtrQkFEdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJ4anNMaWZldGltZU1hbmFnZXIgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2Uvcnhqcy1saWZldGltZS1tYW5hZ2VyJztcclxuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3MvbG9nZ2luZyc7XHJcbmltcG9ydCB7IFNtZVdlYlRlbGVtZXRyeSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGlhZ25vc3RpY3Mvc21lLXdlYi10ZWxlbWV0cnknO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudE1vZHVsZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvbWFuaWZlc3QvZW52aXJvbm1lbnQtbW9kdWxlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0LFxyXG4gICAgUnBjRGlhbG9nTWVzc2FnZVJlcXVlc3RcclxufSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9kaWFsb2cvcnBjLWRpYWxvZy1tb2RlbCc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvU3RyaW5ncyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21tb24vZHluYW1pYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIZWFsdGhBbGVydFNldmVyaXR5LCBQYWdlQWxlcnQgfSBmcm9tICcuLi9wYWdlLWFsZXJ0LWJhci9tb2RlbHMvcGFnZS1hbGVydCc7XHJcbmltcG9ydCB7IFdpemFyZE1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLW1vZGVsJztcclxuaW1wb3J0IHsgV2l6YXJkTmF2aWdhdGlvbkludGVyZmFjZSB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1uYXZpZ2F0aW9uLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IFdpemFyZFN0YWdlIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0YWdlJztcclxuaW1wb3J0IHsgV2l6YXJkU3RlcCB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1zdGVwJztcclxuaW1wb3J0IHsgV2l6YXJkU3RlcENoYW5nZWRFdmVudCB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1zdGVwLWNoYW5nZWQtZXZlbnQnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwVmFsaWRhdGlvbiB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1zdGVwLXZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBXaXphcmRCdWlsZGVyIH0gZnJvbSAnLi93aXphcmQtYnVpbGRlcic7XHJcbmltcG9ydCB7IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbiB9IGZyb20gJy4vd2l6YXJkLW5hdmlnYXRpb24taW5mb3JtYXRpb24nO1xyXG5pbXBvcnQgeyBHZW5lcmljV2l6YXJkU3RlcENvbXBvbmVudCB9IGZyb20gJy4vd2l6YXJkLXN0ZXAvd2l6YXJkLXN0ZXAuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBXaGF0ZXZlciBzdGF0ZSB0aGUgd2l6YXJkIGlzIGluXHJcbiAqL1xyXG5lbnVtIFdpemFyZFN0YXRlIHtcclxuICAgIEV4aXQgPSAnRXhpdCcsXHJcbiAgICBFbnRyeSA9ICdFbnRyeScsXHJcbiAgICBGaW5pc2hlZCA9ICdGaW5pc2hlZCcsXHJcbiAgICBBY3RpdmUgPSAnQWN0aXZlJ1xyXG59XHJcblxyXG4vKipcclxuICogRGF0YSB0byBjb2xsZWN0IGluIHdpemFyZFxyXG4gKi9cclxuY2xhc3MgV2l6YXJkVGVsZW1ldHJ5RGF0YSB7XHJcbiAgICBzdGVwSW5kZXhOdW1iZXI6IHN0cmluZztcclxuICAgIHN0ZXBJbmRleFN0YXJ0VGltZTogc3RyaW5nO1xyXG4gICAgZW50cnlQb2ludD86IHN0cmluZztcclxuICAgIHdpemFyZFR5cGU/OiBzdHJpbmc7XHJcbiAgICB3aXphcmRJZD86IHN0cmluZztcclxuICAgIHN0YXRlPzogV2l6YXJkU3RhdGU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGUgY29tcG9uZW50IGNsYXNzIGRlZmluaXRpb24gZm9yIHRoZSB3aXphcmQgY29tcG9uZW50LlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS13aXphcmQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemFyZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFdpemFyZENvbXBvbmVudDxUTW9kZWwgZXh0ZW5kcyBXaXphcmRNb2RlbD5cclxuICAgIGV4dGVuZHMgRHluYW1pY0NvbXBvbmVudEJhc2U8R2VuZXJpY1dpemFyZFN0ZXBDb21wb25lbnQ8VE1vZGVsPj5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBXaXphcmROYXZpZ2F0aW9uSW50ZXJmYWNlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRhdGEgbW9kZWwgZm9yIHNoYXJpbmcgZGF0YSBhY3Jvc3MgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgbW9kZWwodmFsdWU6IFRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxNb2RlbCA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50Lm9uV2l6YXJkTW9kZWxDaGFuZ2VkKHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGRhdGEgbW9kZWwgZm9yIHNoYXJpbmcgZGF0YSBhY3Jvc3MgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBtb2RlbCgpOiBUTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsTW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIG1vZGVsIHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxNb2RlbDogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgY29weSBvZiBtb2RlbCB0byByb2xsYmFjayB0byB3aGVuIHRoZVxyXG4gICAgICogY3VycmVudCBzdGVwIGlzIHNraXBwZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3VycmVudFN0ZXBNb2RlbENvcHk6IFRNb2RlbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3aXphcmRCdWlsZGVyIHVzZWQgdG8gaW5zdGFudGlhdGUgdGhlIGtleSB3aXphcmQgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB3aXphcmRCdWlsZGVyOiBXaXphcmRCdWlsZGVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0YWdlcyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhZ2VzOiBXaXphcmRTdGFnZVtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlYWRpbmcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhlYWRpbmc6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgZXhpdCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgZmluaXNoIGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmlzaEJ1dHRvblRpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZmluaXNoIHZpZXcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmlzaFZpZXc6IFdpemFyZFN0ZXA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSBzdGVwcyBsaXN0IHNpZGUgcGFuZSB3aWxsIGJlIHZpc2libGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoaWRlU3RlcHNMaXN0U2lkZVBhbmU6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aWxsIGJlIHNob3duIHVwb24gJ0V4aXQnIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGlzIGluIHByZXZpZXcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0luUHJldmlldzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIHdpemFyZCBjYW4gbmF2aWdhdGUgdG8gYSBwcmV2aW91cyBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGVtZXRyeSBkYXRhIGNvbGxlY3RlZCB3aGlsZSBuYXZpZ2F0aW5nIHRocm91Z2ggd2l6YXJkLiBCeSBkZWZhdWx0LCBzdGFydCBhdCAxLjEgc3RlcCBpbmRleCBhbmRcclxuICAgICAqIEVudHJ5IHN0YXRlLlxyXG4gICAgICogS2VlcCBzYW1lIGZvcm1hdCBhcyB0ZWxlbWV0cnkgZXZlbnQgdGltZXN0YW1wXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0ZWxlbWV0cnlEYXRhOiBXaXphcmRUZWxlbWV0cnlEYXRhID0ge1xyXG4gICAgICAgIHN0ZXBJbmRleE51bWJlcjogJzEuMScsXHJcbiAgICAgICAgc3RlcEluZGV4U3RhcnRUaW1lOiAobmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICBlbnRyeVBvaW50OiBFbnZpcm9ubWVudE1vZHVsZS5jcmVhdGVFbnRyeXBvaW50SWQoTXNmdFNtZS5zZWxmKCkuSW5pdC5tb2R1bGVOYW1lLFxyXG4gICAgICAgICAgICBNc2Z0U21lLnNlbGYoKS5Jbml0LmVudHJ5UG9pbnROYW1lKSxcclxuICAgICAgICBzdGF0ZTogV2l6YXJkU3RhdGUuRW50cnlcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyB3aGVuIHRoZSB3aXphcmQgbW9kZWwgY2hhbmdlc1xyXG4gICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VE1vZGVsPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuIHRoZSB3aXphcmQgaXMgZXhpdGVkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBleGl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbmV2ZXIgYSBzdGVwIGlzIHN1Ym1pdHRlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RlcFN1Ym1pdHRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW5ldmVyIGEgc3RlcCBpbmRleCBpcyBjaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzdGVwQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBDaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwQ2hhbmdlZEV2ZW50PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW5ldmVyIHN0ZXAgdmFsaWRhdGlvbiBmYWlsc1xyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzdGVwSW52YWxpZGF0ZWQ6IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwVmFsaWRhdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBWYWxpZGF0aW9uPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW4gdGhlIHdpemFyZCBpcyBmaW5pc2hlZFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBmaW5pc2hlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb3VyY2Ugc3RyaW5ncyBmb3IgdGhlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0cmluZ3M6IFN0cmluZ3MgPSBNc2Z0U21lLmdldFN0cmluZ3M8U3RyaW5ncz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSB3aXphcmQgaXMgdmFsaWRhdGluZyBpbnB1dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbGlkYXRpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBhbGwgb2YgdGhlIHdpemFyZCdzIHN0ZXBzIGFyZSBjb21wbGV0ZSAmICdGaW5pc2gnIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3aXphcmRJc0ZpbmlzaGVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2l6YXJkIG5hdmlnYXRpb24gaW5mb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuYXZpZ2F0aW9uSW5mb3JtYXRpb246IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhbGVydCBmb3IgYSBkaXNhYmxlZCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWxlcnQ6IFBhZ2VBbGVydCA9IHtcclxuICAgICAgICBzZXZlcml0eTogSGVhbHRoQWxlcnRTZXZlcml0eS5JbmZvLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuZGlzYWJsZWRTdGVwQWxlcnQsXHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2lkZSBwYW5lIHRvZ2dsZSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNFeHBhbmRlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhZ2VJbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJ4anMgbGlmZXRpbWUgbWFuYWdlciBmb3IgdGhlIGN1cnJlbnQgc3RlcFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lOiBSeGpzTGlmZXRpbWVNYW5hZ2VyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFdpemFyZENvbXBvbmVudCBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBhcHBDb250ZXh0IC0gVGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgc2VydmljZSBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiAtIFRoZSBjaGFuZ2UgZGV0ZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyIC0gVGhlIGNvbXBvbmVudCBmYWN0b3J5IHJlc29sdmVyLlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFwcENvbnRleHQ6IEFwcENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpO1xyXG4gICAgICAgIHRoaXMubW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRNb2RlbD4oKTtcclxuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdGFnZXNBcnJheUluZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBzdGVwSW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjdXJyZW50U3RhZ2UoKTogV2l6YXJkU3RhZ2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlc0FycmF5SW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXAoKTogV2l6YXJkU3RlcCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzW3RoaXMuc3RlcEluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGZpbmlzaCB2aWV3IG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZmluaXNoU3RlcCgpOiBXaXphcmRTdGVwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTdGVwc0ZvclN0YWdlKCk6IFdpemFyZFN0ZXBbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50IG9mIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXBDb21wb25lbnQoKTogR2VuZXJpY1dpemFyZFN0ZXBDb21wb25lbnQ8VE1vZGVsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmID8gdGhpcy5yZWYuaW5zdGFuY2UgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RlcE9mU3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RlcEluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9uTGFzdFN0ZXBPZkxhc3RTdGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbkxhc3RTdGFnZSAmJiB0aGlzLm9uTGFzdFN0ZXBPZlN0YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBzdGFnZSBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAgICBwdWJsaWMgc3RhZ2VJbmRleERpc2FibGVkKHN0YWdlOiBXaXphcmRTdGFnZSwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RhZ2UuY29tcGxldGVkICYmIGluZGV4ICE9PSB0aGlzLnN0YWdlc0FycmF5SW5kZXggJiYgIXN0YWdlLmFjdGl2ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgc3RlcCBpcyBkaXNhYmxlZCBvciBub3QuXHJcbiAgICBwdWJsaWMgc3RlcEluZGV4RGlzYWJsZWQoc3RlcDogV2l6YXJkU3RlcCwgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhc3RlcC5jb21wbGV0ZWQgJiYgaW5kZXggIT09IHRoaXMuc3RlcEluZGV4ICYmICFzdGVwLmRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGV4dCBmb3IgdGhlIG5leHQgYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmV4dEJ1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggLSAxID09PSB0aGlzLnN0ZXBJbmRleCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFnZUluZGV4ID09PSB0aGlzLnN0YWdlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hCdXR0b25UaXRsZSA/IHRoaXMuZmluaXNoQnV0dG9uVGl0bGUgOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmZpbmlzaDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLnN0YWdlTmFtZS5mb3JtYXQodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4ICsgMV0ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5uZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRleHQgZm9yIHRoZSBleGl0L2ZpbmlzaCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV4aXRCdXR0b25UaXRsZSA/IHRoaXMuZXhpdEJ1dHRvblRpdGxlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5leGl0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgd2l6YXJkIGJ1dHRvbnNcclxuICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVCYWNrQnV0dG9uKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5zdGFnZXNBcnJheUluZGV4ID09PSAwICYmIHRoaXMuc3RlcEluZGV4ID09PSAwKSB8fCB0aGlzLnZhbGlkYXRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXNhYmxlTmV4dEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LnZhbGlkIHx8IHRoaXMudmFsaWRhdGluZyB8fCB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmlzQnVzeTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBzaG93U2tpcEJ1dHRvbigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlICYmIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuY2FuQmVTa2lwcGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHN0ZXBJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1t2YWx1ZV0pIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcignV2l6YXJkQ29tcG9uZW50LnN0ZXBJbmRleCBzZXR0ZXInLCAnQXR0ZW1wdGVkIHRvIHNldCBzdGVwSW5kZXggdG8gaW52YWxpZCB2YWx1ZS4nLCB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRJbmRleDogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICBzdGVwczogdGhpcy5jdXJyZW50U3RhZ2Uuc3RlcHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbmRleCA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhbkNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0aGlzLmN1cnJlbnRTdGVwLmR5bmFtaWNTdGVwQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXNlcnZlTW9kZWxGb3JDdXJyZW50U3RlcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGFnZSBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0IHN0YWdlc0FycmF5SW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGFnZXNbdmFsdWVdKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5zdGFnZVN0ZXBJbmRleCBzZXR0ZXInLCAnQXR0ZW1wdGVkIHRvIHNldCBzdGFnZXNBcnJheUluZGV4IHRvIGludmFsaWQgdmFsdWUuJywge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0SW5kZXg6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuc3RhZ2VzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBjdXJyZW50IHN0YWdlIG9mIHRoZSB3aXphcmQgYXMgY29tcGxldGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RhZ2Ugd2FzIGNvbXBsZXRlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tcGxldGVDdXJyZW50U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RhZ2UuY29tcGxldGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFya3MgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkIGFzIGNvbXBsZXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0ZXAgd2FzIGNvbXBsZXRlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29tcGxldGVDdXJyZW50U3RlcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCAmJiAhdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQgYXMgaW5jb21wbGV0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGVwIHdhcyBmYWlsZWQgYW5kIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZhaWxDdXJyZW50U3RlcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmZhaWwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgd2l6YXJkIHRvIHRoZSBuZXh0IHZpc2libGUgc3RlcCBpbiB0aGUgbGlzdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uTGFzdFN0ZXBPZkxhc3RTdGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTmV4dFN0ZXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPT09IFdpemFyZFN0YXRlLkVudHJ5KSB7XHJcbiAgICAgICAgICAgIC8vIFN3aXRjaCB0byBhY3RpdmUgYWZ0ZXIgb3VyIGZpcnN0IG1vdmUgdG8gbmV4dCBvciBwcmV2aW91cyBzdGVwXHJcbiAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNhbGwgaXQgaGVyZSBiL2Mgc29tZSBtb2R1bGVzIHdpbGwgdXBkYXRlIHN0ZXBJbmRleCBhZnRlciBsb2FkaW5nLCB3aGljaCB0cmlnZ2VycyBlbWl0U3RlcENoYW5nZWQuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncyhXaXphcmRTdGF0ZS5BY3RpdmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgaW5kZXhpbmcgZm9yIG1vdmluZyB0byB0aGUgbmV4dCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmF2aWdhdGVUb05leHRTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5vbkxhc3RTdGVwT2ZTdGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCsrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub25MYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4Kys7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgd2l6YXJkIHRvIHRoZSBwcmV2aW91cyAodmlzaWJsZSkgc3RlcCBpbiB0aGUgbGlzdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1vdmVUb1ByZXZpb3VzU3RlcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9PT0gV2l6YXJkU3RhdGUuRW50cnkpIHtcclxuICAgICAgICAgICAgLy8gU3dpdGNoIHRvIGFjdGl2ZSBhZnRlciBvdXIgZmlyc3QgbW92ZSB0byBuZXh0IG9yIHByZXZpb3VzIHN0ZXBcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID0gV2l6YXJkU3RhdGUuQWN0aXZlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdGhlIGluZGV4aW5nIGZvciBtb3ZpbmcgYmFjayB0byBsYXN0IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuYXZpZ2F0ZVRvUHJldmlvdXNTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0ZXBJbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFnZUluZGV4ICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4LS07XHJcblxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uc3RlcHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4LS07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLnN0ZXBzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLmNvbXBsZXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXgtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogVGhlIG1ldGhvZCB0aGF0IGZvY3VzZXMgb24gYW4gYWN0aXZlIHN0ZXAgb3Igc3RhZ2VcclxuICAgICovXHJcblxyXG4gICAgcHJpdmF0ZSBmb2N1c09uQWN0aXZlU3RlcCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuaGlkZVN0ZXBzTGlzdFNpZGVQYW5lID8gJ3NtZS13aXphcmQtc3RhZ2UtZm9jdXMnIDogJ3NtZS1zdGVwLWFjdGl2ZSc7XHJcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShzZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKGZvY3VzYWJsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICg8SFRNTElucHV0RWxlbWVudD5mb2N1c2FibGVbMF0pLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0byBydW4gd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24gPSBuZXcgV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uKHRoaXMsIHRoaXMud2l6YXJkQnVpbGRlcik7XHJcbiAgICAgICAgdGhpcy5zdGFnZXMgPSB0aGlzLndpemFyZEJ1aWxkZXIuc3RhZ2VzO1xyXG4gICAgICAgIHRoaXMuaGVhZGluZyA9IHRoaXMud2l6YXJkQnVpbGRlci5oZWFkaW5nO1xyXG4gICAgICAgIHRoaXMuZXhpdEJ1dHRvblRpdGxlID0gdGhpcy53aXphcmRCdWlsZGVyLmV4aXRCdXR0b25UaXRsZTtcclxuICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvblRpdGxlID0gdGhpcy53aXphcmRCdWlsZGVyLmZpbmlzaEJ1dHRvblRpdGxlO1xyXG4gICAgICAgIHRoaXMuZmluaXNoVmlldyA9IHRoaXMud2l6YXJkQnVpbGRlci5maW5pc2hWaWV3O1xyXG4gICAgICAgIHRoaXMuaGlkZVN0ZXBzTGlzdFNpZGVQYW5lID0gdGhpcy53aXphcmRCdWlsZGVyLmhpZGVTdGVwc0xpc3RTaWRlUGFuZTtcclxuICAgICAgICB0aGlzLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nID0gdGhpcy53aXphcmRCdWlsZGVyLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nO1xyXG4gICAgICAgIHRoaXMuaXNJblByZXZpZXcgPSB0aGlzLndpemFyZEJ1aWxkZXIuaXNJblByZXZpZXdTdGF0ZTtcclxuICAgICAgICB0aGlzLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXAgPSB0aGlzLndpemFyZEJ1aWxkZXIuY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcDtcclxuICAgICAgICB0aGlzLnN0YWdlc0FycmF5SW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMuc3RlcEluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YWdlcykge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQubmdPbkluaXQnLCBgVGhlICdzdGFnZXMnIGFycmF5IGlzIG5vdCB2YWxpZCEuYCwge1xyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuc3RhZ2VzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5uZ09uSW5pdCcsIGBUaGUgJ21vZGVsJyBhdHRyaWJ1dGUgaXMgbm90IHZhbGlkLmAsIHtcclxuICAgICAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53aXphcmRJc0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsbGVkTW9kZWwgPSB0aGlzLmludGVybmFsTW9kZWwgYXMgYW55O1xyXG4gICAgICAgIGlmIChmaWxsZWRNb2RlbC53aXphcmRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEud2l6YXJkSWQgPSBmaWxsZWRNb2RlbC53aXphcmRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGxlZE1vZGVsLndpemFyZFR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLndpemFyZFR5cGUgPSBmaWxsZWRNb2RlbC53aXphcmRUeXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24ucmVzZXRIaXN0b3J5KCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKCk7XHJcblxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSAhPT0gV2l6YXJkU3RhdGUuRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IHNldCBhdCB0aGlzIHBvaW50IGIvYyB2aWV3IGlzIGRlc3RydWN0ZWQuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPSBXaXphcmRTdGF0ZS5FeGl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFBvcHVsYXRlIG91cnNlbHZlcyBiL2MgdGhlIGVsZW1lbnQgcmVmIGlzIGRlc3RydWN0ZWQgYXQgdGhpcyBwb2ludC4gQ29udGFpbmVyIHRhZ3Mgc2hvdWxkIG5vdCBjaGFuZ2VcclxuICAgICAgICAgICAgY29uc3QgZXhpdFRlbGVtZXRyeURhdGEgPSB7IGNvbnRlbnRJZDogJ3NtZS13aXphcmQnLCBhcmVhTmFtZTogJ1dpemFyZENvbXBvbmVudCcgfTtcclxuICAgICAgICAgICAgTXNmdFNtZS5kZWVwQXNzaWduKGV4aXRUZWxlbWV0cnlEYXRhLCB0aGlzLnRlbGVtZXRyeURhdGEpO1xyXG5cclxuICAgICAgICAgICAgLy8gYWN0aW9uVHlwZSBBIGZvciBBdXRvIChhY2NvcmRpbmcgdG8gQVdBIGRpY3Rpb25hcnkpIHRvIGRpZmZlcmVudGlhdGUgZnJvbSBDTFxyXG4gICAgICAgICAgICBTbWVXZWJUZWxlbWV0cnkudHJhY2VBY3Rpb24obnVsbCwgeyBjb250ZW50OiBleGl0VGVsZW1ldHJ5RGF0YSwgYWN0aW9uVHlwZTogJ0EnIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBvciBjbG9zZSBzaWRlIHBhbmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZVBhbmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGJhY2sgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkJhY2tDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsb2dJZkJ1c3lPckp1c3RDb21wbGV0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c09uQWN0aXZlU3RlcCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgc2tpcCBidXR0b24gaXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU2tpcENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXN0b3JlTW9kZWxGb3JDdXJyZW50U3RlcCgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBFeGl0IC8gRmluaXNoIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25FeGl0Q2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0V4aXRDb25maXJtYXRpb25EaWFsb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBDb250ZXh0LmZyYW1lLnNob3dEaWFsb2dDb25maXJtYXRpb24oPFJwY0RpYWxvZ0NvbmZpcm1hdGlvblJlcXVlc3Q+e1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5ubyxcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnllcyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuRXhpdC5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkV4aXQuRGlhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvbmZpcm1lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpdC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGhhbmRsZXMgY29tcGxldGlvbiBvZiB0aGUgd2l6YXJkLFxyXG4gICAgICogYW5kIHJlbmRlcnMgdGhlIGZpbmlzaFZpZXcgaWYgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0YWdlKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKFdpemFyZFN0YXRlLkZpbmlzaGVkKTtcclxuXHJcbiAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmluaXNoVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLndpemFyZElzRmluaXNoZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhbkNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0aGlzLmZpbmlzaFZpZXcuZHluYW1pY1N0ZXBDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIG5leHQgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbk5leHRDbGljaygpOiB2b2lkIHtcclxuICAgICAgICAvLyBpZiBmaW5pc2hpbmdcclxuICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJ1blN0ZXBWYWxpZGF0aW9uKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TdGVwVmFsaWRhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcFN1Ym1pdHRlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IHZhbGlkYXRlcyBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJ1blN0ZXBWYWxpZGF0aW9uKCkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC52YWxpZGF0ZSgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAodmFsaWRhdGlvblJlc3VsdDogV2l6YXJkU3RlcFZhbGlkYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWlsQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbnZhbGlkYXRlZC5lbWl0KHZhbGlkYXRpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGhhbmRsZXMgaW5kZXhlcyBhbmRcclxuICAgICAqIHN0ZXAgYW5kIHN0YWdlIGNvbXBsZXRpb24gZm9yIHRoZSBOZXh0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVOZXh0TmF2aWdhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0ZXAoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mU3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vdmVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvY3VzT25BY3RpdmVTdGVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93UHJldmlvdXNTdGVwRGlhbG9nKCkge1xyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nTWVzc2FnZSg8UnBjRGlhbG9nTWVzc2FnZVJlcXVlc3Q+e1xyXG4gICAgICAgICAgICBidXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLk9LLmFmZmlybWF0aXZlLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLlByZXZpb3VzU3RlcC5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuUHJldmlvdXNTdGVwLkRpYWxvZy50aXRsZVxyXG4gICAgICAgIH0pLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUob25Db25maXJtYXRpb25DYWxsYmFjazogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIGNvbnN0IGlzQnVzeSA9IHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuaXNCdXN5O1xyXG4gICAgICAgIGNvbnN0IGJ1c3lNZXNzYWdlID0gdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5idXN5TWVzc2FnZTtcclxuICAgICAgICBpZiAoaXNCdXN5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nQ29uZmlybWF0aW9uKDxScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0PntcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ubm8sXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi55ZXMsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBidXN5TWVzc2FnZSA/IGJ1c3lNZXNzYWdlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5CdXN5LkRpYWxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuQnVzeS5EaWFsb2cudGl0bGVcclxuICAgICAgICAgICAgfSkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtYXRpb25DYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIGEgc3RhZ2UgaXMgY2xpY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2xpY2tlZFN0ZXBJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgY2xpY2tlZCBzdGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU3RhZ2VDbGljayhjbGlja2VkU3RhZ2VJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U3RhZ2UgPSB0aGlzLnN0YWdlc1tjbGlja2VkU3RhZ2VJbmRleF07XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXAgJiYgY2xpY2tlZFN0YWdlSW5kZXggPD0gdGhpcy5zdGFnZUluZGV4KSB7XHJcbiAgICAgICAgICAgIC8vIHNob3cgZGlhbG9nIHdoZW4gb25seSBjbGlja2luZyBhIHByZXZpb3VzIHN0YWdlXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRTdGFnZS5jb21wbGV0ZWQgJiYgdGhpcy5zdGFnZUluZGV4ICE9PSBjbGlja2VkU3RhZ2VJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJldmlvdXNTdGVwRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFN0YWdlLmNvbXBsZXRlZCB8fCB0YXJnZXRTdGFnZS5hY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4ID0gY2xpY2tlZFN0YWdlSW5kZXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWdlSW5kZXggKyAxOyBpIDwgdGhpcy5zdGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1tpXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1tpXS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiBhIHN0ZXAgaXMgY2xpY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2xpY2tlZFN0ZXBJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgY2xpY2tlZCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25TdGVwQ2xpY2soY2xpY2tlZFN0ZXBJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc3RlcElzQWN0aXZlID0gdGhpcy5zdGVwSW5kZXggPT09IGNsaWNrZWRTdGVwSW5kZXg7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U3RlcCA9IHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzW2NsaWNrZWRTdGVwSW5kZXhdO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwICYmIGNsaWNrZWRTdGVwSW5kZXggPD0gdGhpcy5zdGVwSW5kZXgpIHtcclxuICAgICAgICAgICAgLy8gc2hvdyBkaWFsb2cgd2hlbiBvbmx5IGNsaWNraW5nIGEgcHJldmlvdXMgc3RlcFxyXG4gICAgICAgICAgICBpZiAoIXN0ZXBJc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJldmlvdXNTdGVwRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U3RlcCAmJiAhc3RlcElzQWN0aXZlICYmICh0YXJnZXRTdGVwLmNvbXBsZXRlZCB8fCB0YXJnZXRTdGVwLmRpc2FibGVkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IGNsaWNrZWRTdGVwSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjcmVhdGVDb21wb25lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmN1cnJlbnRTdGVwIHx8IHRoaXMuZmluaXNoU3RlcCkgJiYgKCF0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSA9IG5ldyBSeGpzTGlmZXRpbWVNYW5hZ2VyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUuYWRkU3Vic2NyaXB0aW9ucyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuc3VibWl0dGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uTmV4dENsaWNrKCkpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5tb2RlbENoYW5nZWQuc3Vic2NyaWJlKG5ld1ZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsTW9kZWwgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50Lm9uV2l6YXJkTW9kZWxDaGFuZ2VkKHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2xlYW5Db21wb25lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIuY2xlYW5Db21wb25lbnQoKTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBtb2RlbCBhdCB0aGUgYmVnaW5uaW5nXHJcbiAgICAgKiBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHByZXNlcnZlTW9kZWxGb3JDdXJyZW50U3RlcCgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5ID0gTXNmdFNtZS5kZWVwQ29weSh0aGlzLmludGVybmFsTW9kZWwgfHwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBtb2RlbCBiYWNrIHRvIHRoZSBzdGF0ZSBhdCB0aGVcclxuICAgICAqIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlc3RvcmVNb2RlbEZvckN1cnJlbnRTdGVwKCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5O1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBNb2RlbENvcHkgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZW1pdFN0ZXBDaGFuZ2VkKCkge1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLm5hdmlnYXRpb25JbmZvcm1hdGlvbi5wdXNoSGlzdG9yeSh7IHN0YWdlOiB0aGlzLnN0YWdlSW5kZXgsIHN0ZXA6IHRoaXMuc3RlcEluZGV4IH0pO1xyXG5cclxuICAgICAgICAvLyBlbWl0IG9ubHkgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZS5cclxuICAgICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRlbGVtZXRyeVRhZ3MoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBzdGFnZUluZGV4OiB0aGlzLnN0YWdlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICBzdGFnZU5hbWU6IHRoaXMuY3VycmVudFN0YWdlID8gdGhpcy5jdXJyZW50U3RhZ2UubmFtZSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGVwSW5kZXg6IHRoaXMuc3RlcEluZGV4LFxyXG4gICAgICAgICAgICAgICAgc3RlcE5hbWU6IHRoaXMuY3VycmVudFN0ZXAgPyB0aGlzLmN1cnJlbnRTdGVwLm5hbWUgOiBudWxsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0ZWxlbWV0cnkgc3RyaW5nIHVzZWQgdG8gcG9wdWxhdGUgdGVsZW1ldHJ5IGFjdGlvbiBldmVudHMuIFVwZGF0ZXMgd2l6YXJkIHN0YXRlLCBzdGVwIGluZGV4LCBhbmQgdGltZSBzdGVwIGluZGV4IHN0YXJ0ZWQuXHJcbiAgICAgKiBTdGVwIGluZGV4IHN0YXJ0IHRpbWUgc2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBldmVudCB0aW1lc3RhbXAgdG8gbW9yZSBlYXNpbHkgY2FsY3VsYXRlIHRpbWUgc3BlbnQgaW4gc3RhZ2UuXHJcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIHN0YXRlIHRvIGNoYW5nZSB0bywgaWYgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlVGVsZW1ldHJ5VGFncyhzdGF0ZT86IFdpemFyZFN0YXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID0gc3RhdGUgPyBzdGF0ZSA6IHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZTtcclxuICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RlcEluZGV4TnVtYmVyID0gYCR7dGhpcy5zdGFnZUluZGV4ICsgMX0uJHt0aGlzLnN0ZXBJbmRleCArIDF9YDtcclxuICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RlcEluZGV4U3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCk7IC8vIGtlZXAgc2FtZSBmb3JtYXQgYXMgZXZlbnQgdGltZXN0YW1wXHJcblxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtd2l6YXJkIHNtZS1sYXlvdXQtYWJzb2x1dGUgc21lLWFycmFuZ2Utc3RhY2stdiBzbWUtcG9zaXRpb24taW5zZXQtbm9uZVwiIHNtZVRlbGVtZXRyeUlkPSdzbWUtd2l6YXJkJyBzbWVUZWxlbWV0cnlBcmVhPVwiV2l6YXJkQ29tcG9uZW50XCI+XHJcbiAgPCEtLSBIZWFkaW5nIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJoZWFkaW5nICYmICF3aXphcmRJc0ZpbmlzaGVkXCIgW2F0dHIuYXJpYS1yZWFkb25seV09dHJ1ZVxyXG4gICAgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLXBhZGRpbmctdmVydGljYWwtc20gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtYm9yZGVyLWJvdHRvbS1zbSBzbWUtYm9yZGVyLWJvdHRvbS1jb2xvci1iYXNlLTgwXCI+XHJcbiAgICA8aDMgaWQ9XCJzbWUtc2hlbGwtd2l6YXJkLWhlYWRpbmctaWRcIj57eyBoZWFkaW5nIH19PC9oMz5cclxuICAgIDxzbWUtYmFkZ2UgdHlwZT1cInByZXZpZXdcIiAqbmdJZj1cImlzSW5QcmV2aWV3XCIgY2xhc3M9XCJzbWUtbWFyZ2luLWxlZnQteHNcIj48L3NtZS1iYWRnZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBTdGFnZXMgLS0+XHJcbiAgPHVsIHJvbGU9XCJ0YWJsaXN0XCIgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZFwiXHJcbiAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLWxnIHNtZS1ib3JkZXItYm90dG9tLXNtIHNtZS1ib3JkZXItYm90dG9tLWNvbG9yLWJhc2UtODAgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgIDxsaVxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NtZS13aXphcmQtc3RhZ2UtY29tcGxldGVkJzogc3RhZ2UuY29tcGxldGVkLCAnc21lLXdpemFyZC1zdGFnZS1jbGlja2VkJzogdmFsID09PSBzdGFnZXNBcnJheUluZGV4LCAnc21lLXdpemFyZC1zdGFnZS1hY3RpdmUnOiBzdGFnZS5hY3RpdmUsICdzbWUtZGlzYWJsZWQnOiB2YWwgIT09IHN0YWdlc0FycmF5SW5kZXh9XCJcclxuICAgICAgY2xhc3M9XCJzbWUtd2l6YXJkLXN0YWdlIHNtZS1hcnJhbmdlLXN0YWNrLWggc21lLW1hcmdpbi1yaWdodC1tZFwiIHJvbGU9XCJ0YWJcIlxyXG4gICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCBzdGFnZSBvZiBzdGFnZXM7IGxldCB2YWwgPSBpbmRleFwiIChjbGljayk9XCJvblN0YWdlQ2xpY2sodmFsKVwiPlxyXG4gICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIFthdHRyLmFyaWEtbGFiZWxdPVwic3RhZ2UubmFtZVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIHR5cGU9XCJidXR0b25cIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIFtzbWVUZWxlbWV0cnlJZF09XCInd2l6YXJkU3RhZ2UnICsgKHZhbCArIDEpXCJcclxuICAgICAgICBbY2xhc3Muc21lLWFjdGl2ZV09XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICAgIFtjbGFzcy5zbWUtc2VsZWN0ZWRdPVwidmFsID09PSBzdGFnZXNBcnJheUluZGV4XCJcclxuICAgICAgICBbY2xhc3Muc21lLXdpemFyZC1zdGFnZS1mb2N1c109XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLnN0YWdlSW5kZXhEaXNhYmxlZChzdGFnZSwgdmFsKVwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF0gPSBcInRoaXMuc3RhZ2VJbmRleERpc2FibGVkKHN0YWdlLCB2YWwpXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtd2l6YXJkLWJ1dHRvbi1pdGVtIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbm9uZSBzbWUtYnV0dG9uLWF1dG8td2lkdGhcIj5cclxuICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7J3NtZS1pY29uIHNtZS1pY29uLWFjY2VwdCBzbWUtaWNvbi1zaXplLXh4cyc6IHN0YWdlLmNvbXBsZXRlZH1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtd2l6YXJkLXN0YWdlLWluZGV4IHNtZS1wb3NpdGlvbi1mbGV4LW5vbmVcIj5cclxuICAgICAgICAgIHt7ICFzdGFnZS5jb21wbGV0ZWQgPyB2YWwgKyAxIDogJycgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc21lLWZvbnQtZW1waGFzaXMxIHNtZS13aXphcmQtc3RhZ2UtYWN0aXZlJzogdmFsID09PSBzdGFnZXNBcnJheUluZGV4IHx8IHN0YWdlLmFjdGl2ZSwgJ3NtZS13aXphcmQtc3RhZ2UtY29tcGxldGVkJzogc3RhZ2UuY29tcGxldGVkLCAnc21lLW1hcmdpbi1sZWZ0LXhzJzogIXN0YWdlLmNvbXBsZXRlZH1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1mb250LWJvZHlcIj5cclxuICAgICAgICAgIHt7c3RhZ2UubmFtZX19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbGk+XHJcbiAgPC91bD5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0byBzbWUtcG9zaXRpb24tZmxleC1hdXRvXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIXdpemFyZElzRmluaXNoZWQgJiYgIWhpZGVTdGVwc0xpc3RTaWRlUGFuZVwiXHJcbiAgICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2stdiBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXHJcbiAgICAgIHNtZS1ib3JkZXItcmlnaHQtc20gc21lLWJvcmRlci1yaWdodC1jb2xvci1iYXNlLTgwXCI+XHJcbiAgICAgIDx1bCByb2xlPVwidGFibGlzdFwiICpuZ0lmPVwiIXdpemFyZElzRmluaXNoZWQgJiYgIWhpZGVTdGVwc0xpc3RTaWRlUGFuZVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtcGFkZGluZy12ZXJ0aWNhbC1zbSBzbWUtcG9zaXRpb24tZmxleC1hdXRvXCIgW25nQ2xhc3NdPVwieydzbWUtbGF5b3V0LW1pbndpZHRoLXNtJzogaXNFeHBhbmRlZH1cIj5cclxuICAgICAgICA8bGkgcm9sZT1cInRhYlwiIHRhYmluZGV4PVwiMFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3NtZS1zY2hlbWUtbGlzdC1pdGVtIHNtZS1hY3RpdmUgc21lLWNvbG9yLWJhc2UtNSc6IGluZGV4ID09PSBzdGVwSW5kZXh9XCJcclxuICAgICAgICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcGFkZGluZy1sZWZ0LWxnIHNtZS1wYWRkaW5nLXJpZ2h0LXhzXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaW5kZXggPT09IHN0ZXBJbmRleFwiICpuZ0Zvcj1cImxldCBzdGVwIG9mIGdldFN0ZXBzRm9yU3RhZ2UoKTsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU3RlcENsaWNrKGluZGV4KVwiIFt0aXRsZV09XCJpc0V4cGFuZGVkID8gbnVsbCA6IHN0ZXAubmFtZVwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzRXhwYW5kZWQgPyBudWxsIDogc3RlcC5uYW1lXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbbmdDbGFzc109XCJ7J3NtZS1zdGVwLWFjdGl2ZSc6IGluZGV4ID09PSBzdGVwSW5kZXh9XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbWUtd2l6YXJkLXN0ZXAgc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS13aXphcmQtYnV0dG9uLWl0ZW0gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1ub25lIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXhzIHNtZS1idXR0b24tYXV0by13aWR0aFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLnN0ZXBJbmRleERpc2FibGVkKHN0ZXAsIGluZGV4KVwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF09XCJ0aGlzLnN0ZXBJbmRleERpc2FibGVkKHN0ZXAsIGluZGV4KVwiXHJcbiAgICAgICAgICAgIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgW3NtZVRlbGVtZXRyeUlkXT1cIid3aXphcmRTdGVwJyArIChpbmRleCArIDEpXCIgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLW1hcmdpbi1yaWdodC14c1wiPnt7IHN0YWdlc0FycmF5SW5kZXggKyAxIH19Lnt7IGluZGV4ICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lXCIgKm5nSWY9XCJpc0V4cGFuZGVkXCI+e3sgc3RlcC5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvY3VzLXpvbmVcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cInNwbGl0LXZpZXctdG9nZ2xlIHNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtbGF5b3V0LWZsb2F0LXJpZ2h0XCJcclxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lKClcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpc0V4cGFuZGVkID8gc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuY29sbGFwc2VTdGVwc0xpc3QgOiBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5leHBhbmRTdGVwc0xpc3RcIlxyXG4gICAgICAgICAgW3RpdGxlXT1cImlzRXhwYW5kZWQgPyBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5jb2xsYXBzZVN0ZXBzTGlzdCA6IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLmV4cGFuZFN0ZXBzTGlzdFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvblwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3NtZS1pY29uLWNoZXZyb25MZWZ0JzogaXNFeHBhbmRlZCwgJ3NtZS1pY29uLWNoZXZyb25SaWdodCc6ICFpc0V4cGFuZGVkIH1cIj48L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTdGVwIGNvbnRlbnQgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tc3RyZXRjaCBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvXCJcclxuICAgICAgW25nQ2xhc3NdPVwieydzbWUtcGFkZGluZy1pbnNldC1sZyc6IGN1cnJlbnRTdGVwQ29tcG9uZW50LnBhZENvbnRlbnRzfVwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWRcIj5cclxuICAgICAgICA8c21lLXBhZ2UtYWxlcnQtYmFyIFthbGVydF09XCJhbGVydFwiPjwvc21lLXBhZ2UtYWxlcnQtYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBEb24ndCByZW1vdmUgdGhpcyBsaW5lISAtLT5cclxuICAgICAgPCEtLSBUaGUgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50IGxvb2tzIGZvciAjY29udGFpbmVyIHRvIHJlbmRlciBpdHNlbGYgYXMgdGhlIHNpYmxpbmcuISAtLT5cclxuICAgICAgPGRpdiBpZD1cImR5bmFtaWMtY29udGVudC1jb250YWluZXJcIiAjY29udGFpbmVyPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBGb290ZXIgLS0+XHJcbiAgPGRpdiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkXCJcclxuICAgIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1ib3JkZXItdG9wLXNtIHNtZS1ib3JkZXItdG9wLWNvbG9yLWJhc2UtODAgc21lLXBhZGRpbmctdmVydGljYWwtc20gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1sYXlvdXQtZmxvYXQtbGVmdFwiIFtjbGFzcy5zbWUtcGFkZGluZy1yaWdodC14bF09XCIhdmFsaWRhdGluZ1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIiB0eXBlPVwiYnV0dG9uXCIgc21lVGVsZW1ldHJ5SWQ9XCJ3aXphcmRQcmV2XCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIiAoY2xpY2spPVwib25CYWNrQ2xpY2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlQmFja0J1dHRvblwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcFwiPnt7c3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uYmFja319PC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWJ1dHRvbi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkTmV4dFwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uTmV4dENsaWNrKClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlTmV4dEJ1dHRvblwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF09XCJkaXNhYmxlTmV4dEJ1dHRvblwiPnt7IG5leHRCdXR0b25UZXh0KCkgfX08L2J1dHRvbj5cclxuICAgICAgPGRpdiAqbmdJZj1cInZhbGlkYXRpbmdcIiBjbGFzcz1cInNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLWxheW91dC1mbG9hdC1yaWdodCBzbWUtcGFkZGluZy1sZWZ0LXhsIHNtZS1wYWRkaW5nLXRvcC1tZFwiPlxyXG4gICAgICAgIDxzbWUtbG9hZGluZy13aGVlbCBzaXplPVwic21hbGxcIj48L3NtZS1sb2FkaW5nLXdoZWVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lXCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkU2tpcFwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uU2tpcENsaWNrKClcIlxyXG4gICAgICBbY2xhc3Muc21lLWxheW91dC1ub25lXT1cIiFzaG93U2tpcEJ1dHRvblwiPnt7c3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uc2tpcH19PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWxheW91dC1mbG9hdC1yaWdodFwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZEV4aXRcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiXHJcbiAgICAgIChjbGljayk9XCJvbkV4aXRDbGljaygpXCI+e3sgZXhpdEJ1dHRvblRleHQoKSB9fTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|