@bpost/bp-address-auto-complete-by-component 1.0.27 → 1.1.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/VERSION.md +61 -0
- package/bpost-bp-address-auto-complete-by-component.d.ts +3 -2
- package/bpost-bp-address-auto-complete-by-component.metadata.json +1 -1
- package/bundles/bpost-bp-address-auto-complete-by-component.umd.js +170 -17
- package/bundles/bpost-bp-address-auto-complete-by-component.umd.js.map +1 -1
- package/bundles/bpost-bp-address-auto-complete-by-component.umd.min.js +2 -2
- package/bundles/bpost-bp-address-auto-complete-by-component.umd.min.js.map +1 -1
- package/esm2015/bpost-bp-address-auto-complete-by-component.js +4 -3
- package/esm2015/lib/box-number/box-number.component.js +6 -2
- package/esm2015/lib/lib-address-autocomplete-by-component.component.js +85 -10
- package/esm2015/lib/locality/locality.component.js +26 -4
- package/esm2015/lib/services/adress.service.js +5 -1
- package/esm2015/lib/services/http.service.js +15 -2
- package/esm2015/lib/services/nis9.service.js +30 -0
- package/esm2015/lib/street/street.component.js +6 -2
- package/esm2015/lib/street-number/street-number.component.js +6 -2
- package/esm2015/lib/utils/prefill-data.js +3 -1
- package/esm5/bpost-bp-address-auto-complete-by-component.js +4 -3
- package/esm5/lib/box-number/box-number.component.js +6 -2
- package/esm5/lib/lib-address-autocomplete-by-component.component.js +86 -10
- package/esm5/lib/locality/locality.component.js +26 -4
- package/esm5/lib/services/adress.service.js +5 -1
- package/esm5/lib/services/http.service.js +16 -3
- package/esm5/lib/services/nis9.service.js +31 -0
- package/esm5/lib/street/street.component.js +6 -2
- package/esm5/lib/street-number/street-number.component.js +6 -2
- package/esm5/lib/utils/prefill-data.js +3 -1
- package/fesm2015/bpost-bp-address-auto-complete-by-component.js +167 -17
- package/fesm2015/bpost-bp-address-auto-complete-by-component.js.map +1 -1
- package/fesm5/bpost-bp-address-auto-complete-by-component.js +170 -18
- package/fesm5/bpost-bp-address-auto-complete-by-component.js.map +1 -1
- package/lib/box-number/box-number.component.d.ts +2 -0
- package/lib/lib-address-autocomplete-by-component.component.d.ts +10 -1
- package/lib/locality/locality.component.d.ts +1 -0
- package/lib/services/adress.service.d.ts +3 -0
- package/lib/services/http.service.d.ts +4 -1
- package/lib/services/nis9.service.d.ts +9 -0
- package/lib/street/street.component.d.ts +1 -0
- package/lib/street-number/street-number.component.d.ts +1 -0
- package/lib/utils/prefill-data.d.ts +1 -0
- package/package.json +1 -1
|
@@ -23,6 +23,7 @@ var BoxNumberComponent = /** @class */ (function () {
|
|
|
23
23
|
this.visibleSuggesionCount = 5;
|
|
24
24
|
this.sortCriteria = '';
|
|
25
25
|
this.messageOption = 'Y';
|
|
26
|
+
this.isReadonly = false;
|
|
26
27
|
this.messageChanged = new EventEmitter();
|
|
27
28
|
this.addressChanged = new EventEmitter();
|
|
28
29
|
this.focusEvent = new EventEmitter();
|
|
@@ -790,6 +791,9 @@ var BoxNumberComponent = /** @class */ (function () {
|
|
|
790
791
|
__decorate([
|
|
791
792
|
Input()
|
|
792
793
|
], BoxNumberComponent.prototype, "messageOption", void 0);
|
|
794
|
+
__decorate([
|
|
795
|
+
Input()
|
|
796
|
+
], BoxNumberComponent.prototype, "isReadonly", void 0);
|
|
793
797
|
__decorate([
|
|
794
798
|
Output()
|
|
795
799
|
], BoxNumberComponent.prototype, "messageChanged", void 0);
|
|
@@ -817,11 +821,11 @@ var BoxNumberComponent = /** @class */ (function () {
|
|
|
817
821
|
BoxNumberComponent = __decorate([
|
|
818
822
|
Component({
|
|
819
823
|
selector: 'bp-box-number',
|
|
820
|
-
template: "<span *ngIf=\"labelResourceKey\">{{ labelResourceKey | translate}}</span>\n<div class=\"bpaac-dropdown\">\n <div class=\"bpaac-search-bar\">\n <div class=\"bpaac-input-width\">\n <!-- [disabled]=\"isDisabled()\" -->\n <input type=\"text\" #boxNumberSearchInput class=\"bpaac-input\" \n [style.background-color]=\"!isParamsComplete() ? 'lightgrey' : ''\" \n [style.color]=\" getTextColor() \"\n [disabled]=\"!streetNumber || streetNumber.trim().length === 0\" (keydown)=\"checkKeyDown($event)\" \n (input)=\"onInputChange()\" (click)=\"onInputClick()\"\n [(ngModel)]=\"searchText\" id=\"boxNumberInputField\" [attr.title]=\"placeHolderText\" [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" />\n <div id=\"bpaac-clear-boxNb-button\" *ngIf=\"mayShowClearButton()\" (click)=\"clearInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-boxNb-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n <span *ngIf=\"addressIsValidated\" class=\"boxNbChekmark\"><span class=\"checkmark\"></span></span>\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" *ngIf=\"suggestions && suggestions.length>0\">\n <div #boxNumberList [appVisibleSuggestion]=\"visibleSuggesionCount\" id=\"bpaac-box-dropdown\" class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-boxNb-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" *ngFor=\"let option of suggestions; let idx = index\" [ngClass]=\"{'active':(selectedIndex==idx)}\" \n (mousedown)=\"clickSuggestion($event, option)\"\n (mouseenter)=\"selectedIndex=idx\" (mouseleave)=\"selectedIndex=-1\">\n <span *ngIf=\"option\" [innerHtml]=\"option['not-in-list'] ? emptyResponseText : option.string | highlightSuggestion : wordList\"></span>\n </li>\n </ul>\n </div>\n </div>\n</div>\n",
|
|
824
|
+
template: "<span *ngIf=\"labelResourceKey\">{{ labelResourceKey | translate}}</span>\n<div class=\"bpaac-dropdown\">\n <div class=\"bpaac-search-bar\">\n <div class=\"bpaac-input-width\">\n <!-- [disabled]=\"isDisabled()\" -->\n <input type=\"text\" #boxNumberSearchInput class=\"bpaac-input\" \n [readonly]=\"isReadonly\"\n [style.background-color]=\"!isParamsComplete() ? 'lightgrey' : ''\" \n [style.color]=\" getTextColor() \"\n [disabled]=\"!streetNumber || streetNumber.trim().length === 0\" (keydown)=\"checkKeyDown($event)\" \n (input)=\"onInputChange()\" (click)=\"onInputClick()\"\n [(ngModel)]=\"searchText\" id=\"boxNumberInputField\" [attr.title]=\"placeHolderText\" [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" />\n <div id=\"bpaac-clear-boxNb-button\" *ngIf=\"mayShowClearButton()\" (click)=\"clearInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-boxNb-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n <span *ngIf=\"addressIsValidated\" class=\"boxNbChekmark\"><span class=\"checkmark\"></span></span>\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" *ngIf=\"suggestions && suggestions.length>0\">\n <div #boxNumberList [appVisibleSuggestion]=\"visibleSuggesionCount\" id=\"bpaac-box-dropdown\" class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-boxNb-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" *ngFor=\"let option of suggestions; let idx = index\" [ngClass]=\"{'active':(selectedIndex==idx)}\" \n (mousedown)=\"clickSuggestion($event, option)\"\n (mouseenter)=\"selectedIndex=idx\" (mouseleave)=\"selectedIndex=-1\">\n <span *ngIf=\"option\" [innerHtml]=\"option['not-in-list'] ? emptyResponseText : option.string | highlightSuggestion : wordList\"></span>\n </li>\n </ul>\n </div>\n </div>\n</div>\n",
|
|
821
825
|
styles: [""]
|
|
822
826
|
})
|
|
823
827
|
], BoxNumberComponent);
|
|
824
828
|
return BoxNumberComponent;
|
|
825
829
|
}());
|
|
826
830
|
export { BoxNumberComponent };
|
|
827
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYnBvc3QvYnAtYWRkcmVzcy1hdXRvLWNvbXBsZXRlLWJ5LWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9ib3gtbnVtYmVyL2JveC1udW1iZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFrRCxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRzdKLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT3hEO0lBbUZFLDRCQUNVLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxjQUE4QjtRQUg5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNs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SyxFQUFFOzBEQUFvQjtJQUNuQjtRQUFSLEtBQUssRUFBRTt3REFBa0I7SUFDakI7UUFBUixLQUFLLEVBQUU7MERBQW9CO0lBQ25CO1FBQVIsS0FBSyxFQUFFOzREQUFzQjtJQUNyQjtRQUFSLEtBQUssRUFBRTsrREFBaUI7SUFDaEI7UUFBUixLQUFLLEVBQUU7Z0VBQTJCO0lBRzFCO1FBQVIsS0FBSyxFQUFFO3VEQVdQO0lBRVE7UUFBUixLQUFLLEVBQUU7NkRBQXFCO0lBRW5CO1FBQVQsTUFBTSxFQUFFOzhEQUFvSDtJQUNuSDtRQUFULE1BQU0sRUFBRTs4REFBd0Q7SUFDdkQ7UUFBVCxNQUFNLEVBQUU7MERBQW9EO0lBQ25EO1FBQVQsTUFBTSxFQUFFO3lEQUFtRDtJQUNsRDtRQUFULE1BQU0sRUFBRTsrREFBeUQ7SUFDeEQ7UUFBVCxNQUFNLEVBQUU7a0VBQTREO0lBRTNEO1FBQVQsTUFBTSxFQUFFO3NFQUFtRTtJQUVsRTtRQUFULE1BQU0sRUFBRTttRUFBb0Y7SUFwRGxGLGtCQUFrQjtRQUw5QixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsZUFBZTtZQUN6QixvckVBQTBDOztTQUUzQyxDQUFDO09BQ1csa0JBQWtCLENBMnpCOUI7SUFBRCx5QkFBQztDQUFBLEFBM3pCRCxJQTJ6QkM7U0EzekJZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJlZmlsbGVkUGFyYW1ldGVycyB9IGZyb20gJy4uL3V0aWxzL3ByZWZpbGxlZC1wYXJhbWV0ZXJzJztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlVHlwZSB9IGZyb20gJy4uL2VudW0vdmFsaWRhdGlvbi1tZXNzYWdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FkcmVzcy5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBVbmljb2RlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VuaWNvZGUuc2VydmljZSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAnLi4vdXRpbHMvZG9taGFuZGxlcic7XG5pbXBvcnQgeyBBRERSRVNTTEVWRUwgfSBmcm9tICcuLi9lbnVtL2FkZHJlc3MtbGV2ZWwuZW51bSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtZXRlcnMgfSBmcm9tICcuLi9tb2RlbC9xdWVyeS1wYXJhbWV0ZXJzLm1vZGVsJztcbmltcG9ydCB7IFByZWZpbGxEYXRhIH0gZnJvbSAnLi4vdXRpbHMvcHJlZmlsbC1kYXRhJztcbmltcG9ydCB7IFNvdXJjZVR5cGUgfSBmcm9tICcuLi9lbnVtL3NvdXJjZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgUHJlZmlsbEV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvcHJlZmxsbC5ldmVudCc7XG5pbXBvcnQgeyBJbnB1dE5hbWVUeXBlIH0gZnJvbSAnLi4vZW51bS9pbnB1dC1uYW1lLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicC1ib3gtbnVtYmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JveC1udW1iZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ib3gtbnVtYmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQm94TnVtYmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZCgnYm94TnVtYmVyU2VhcmNoSW5wdXQnLCB7c3RhdGljOiBmYWxzZX0gKSBib3hOdW1iZXJTZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnYm94TnVtYmVyTGlzdCcsIHtzdGF0aWM6IGZhbHNlfSApIGJveE51bWJlckxpc3Q6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvLyAyMDIwLTA2LTE1XG4gIC8vIEBJbnB1dCgpXG4gIC8vIG9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YTtcbiAgQElucHV0KCkgc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGxhYmVsUmVzb3VyY2VLZXkgPSAnY29tbW9uLmxhYmVsLmJveE51bWJlcic7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhID0gJyc7XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgYWRkcmVzc1BhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgQElucHV0KCkgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBASW5wdXQoKSBsb2NhbGl0eTogc3RyaW5nO1xuICBASW5wdXQoKSBzdHJlZXROYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0cmVldE51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RlZEFkZHJlc3M7XG4gIEBJbnB1dCgpIG5vdEluTGlzdEFsbG93ZWQ6IGJvb2xlYW47XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgaW5wdXRMYW5nKHZhbDogc3RyaW5nKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NldCBsYW5nJywgdmFsKTtcbiAgICB0aGlzLmxvY2FsZVNlcnZpY2UuY2hhbmdlTGFuZyh2YWwpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UodmFsKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3NldCBsYW5nIGFmdGVyIHN1YnNjcmliZScsIHJlcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgICAgICAgLy8gaWYgKHJlcyAhPT0gdW5kZWZpbmVkICkge1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIEBJbnB1dCgpIG1lc3NhZ2VPcHRpb24gPSAnWSc7XG5cbiAgQE91dHB1dCgpIG1lc3NhZ2VDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8e21lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmd9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGFkZHJlc3NDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYmx1ckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHRleHRDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBlbXB0eVJlc3BvbnNlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBjbGVhcklucHV0RXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgcHJlZmlsbEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPFByZWZpbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFByZWZpbGxFdmVudD4oKTtcblxuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG5cbiAgYWRkcmVzc0lzVmFsaWRhdGVkOiBib29sZWFuO1xuICBzdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgc3VnZ2VzdGlvbnM6IGFueTtcbiAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICBsYXN0U2VhcmNoVmFsdWU6IHN0cmluZztcbiAgd29yZExpc3Q6IGFueTtcbiAgc3VnZ2VzdGlvbnNXb3JkTGlzdDogYW55O1xuICBicFR5cGVBaGVhZDogc3RyaW5nO1xuICBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcbiAgc2tpcE5leHRCbHVyOiBib29sZWFuOyAvLyBPbkJsdXIgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHN1Z2dlc3Rpb24vdmFsaWRhdG9yIGJ1dHRvblxuICBlcnJvckNvZGU6IGFueTtcblxuICBtaW5MZXZlbDogbnVtYmVyO1xuICBzZWxlY3RlZEluZGV4OiBudW1iZXI7XG4gIGNvbGxhcHNlRHJvcGRvd246IGJvb2xlYW47XG4gIHR5cGVBaGVhZFdvcmQ6IHN0cmluZztcbiAgc2VxdWVuY2VOdW1iZXI6IG51bWJlcjtcbiAgY29uc3VtZWROdW1iZXI6IG51bWJlcjtcbiAgc2VsZWN0aW9uQ2hhbmdlZDogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgZW1wdHlSZXNwb25zZVRleHQ6IHN0cmluZztcbiAgZW1wdHlSZXNwb25zZTogYm9vbGVhbjtcblxuICBwcmVmaWxsaW5nID0gZmFsc2U7XG4gIGlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZGRyZXNzU2VydmljZTogQWRkcmVzc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVuaWNvZGVTZXJ2aWNlOiBVbmljb2RlU2VydmljZSxcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgICAvLyBpbnN0YW5jZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnByZXZpb3VzSW5kZXggPSAtMTtcbiAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9ICcnO1xuICAgIHRoaXMud29yZExpc3QgPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zV29yZExpc3QgPSBbXTtcbiAgICB0aGlzLmJwVHlwZUFoZWFkID0gJyc7XG4gICAgdGhpcy5wbGFjZUhvbGRlclRleHQgPSAnJztcbiAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlOyAvLyBPbkJsdXIgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHN1Z2dlc3Rpb24vdmFsaWRhdG9yIGJ1dHRvblxuICAgIHRoaXMuZXJyb3JDb2RlID0gbnVsbDtcbiAgICAvLyBzY29wZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XG4gICAgLy8gcHJvcGVydGllc1xuICAgIHRoaXMudHlwZUFoZWFkV29yZCA9ICcnO1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgdGhpcy5zZXF1ZW5jZU51bWJlciA9IDE7XG4gICAgdGhpcy5jb25zdW1lZE51bWJlciA9IDE7XG4gICAgLy8gaW5pdGlhbGl6YXRpb25cbiAgICB0aGlzLnNldFNlYXJjaFRleHQoJycpO1xuICAgIC8vIHRoaXMuc2V0UGxhY2VIb2xkZXJUZXh0KCk7XG4gICAgdGhpcy5zZXRFbXB0eVJlc3BvbnNlVGV4dCgpO1xuICAgIHRoaXMuZW1wdHlSZXNwb25zZSA9IHRydWU7XG4gICAgdGhpcy5vbkNoYW5nZWRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoYW5nZWQpIHtcbiAgICAgIGNvbnN0IG92ZXJsYXk6IEhUTUxEaXZFbGVtZW50ID0gdGhpcy5ib3hOdW1iZXJMaXN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgbGlzdEl0ZW0gPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUob3ZlcmxheSwgJ2xpLmFjdGl2ZScpO1xuICAgICAgICBpZiAobGlzdEl0ZW0pIHtcbiAgICAgICAgICBEb21IYW5kbGVyLnNjcm9sbEluVmlldyhvdmVybGF5LCBsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgncHJlZmlsbERhdGEnKSAmJiAhY2hhbmdlcy5wcmVmaWxsRGF0YS5maXJzdENoYW5nZSkge1xuICAgICAgICB0aGlzLnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLmxvYWRQYXJhbXMoY2hhbmdlcy5wcmVmaWxsRGF0YS5jdXJyZW50VmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0ICE9PSAnJyAmJiB0aGlzLm1pbkxldmVsID09PSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUikge1xuICAgICAgICAgIC8vIHRoaXMub25JbnB1dENoYW5nZSgncHJlZmlsbGVkJyk7XG4gICAgICAgICAgLy8gdGhpcy5ib3hOdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJcbiAgICAgICAgICAgID0gdGhpcy50cmFuc2Zvcm1Cb3hOdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXIpO1xuICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZSgvKidwcmVmaWxsZWQnKi8gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N0cmVldE51bWJlcicpICYmICFjaGFuZ2VzLnN0cmVldE51bWJlci5maXJzdENoYW5nZSAmJiAhY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgncHJlZmlsbERhdGEnKSkge1xuICAgICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdpbnB1dExhbmcnKSAvIComJiAhY2hhbmdlcy5hZGRyZXNzUGFyYW1zLmZpcnN0Q2hhbmdlKiAvKSB7XG4gICAgICAgIGNvbnN0IGxhbmcgPSBjaGFuZ2VzLmlucHV0TGFuZy5jdXJyZW50VmFsdWU7XG4gICAgICAgIGNvbnNvbGUubG9nKCdvbiBjaGFuZ2VzIC0gaW5wdXRMYW5nJywgbGFuZyk7XG4gICAgICAgIGlmIChjaGFuZ2VzLmlucHV0TGFuZy5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZyhsYW5nKTtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxhbmcpO1xuICAgICAgICAgIHRoaXMubG9jYWxlU2VydmljZS5jaGFuZ2VMYW5nKGxhbmcpO1xuICAgICAgICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKi9cbiAgICB9XG4gIH1cblxuICB0cmFuc2Zvcm1Cb3hOdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKGJveE51bWJlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSBudWxsO1xuICAgIGlmIChib3hOdW1iZXIgIT09IG51bGwgJiYgYm94TnVtYmVyICE9PSB1bmRlZmluZWQgKVxuICAgIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcyhib3hOdW1iZXIpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdUcmFuc2Zvcm1lZCBzdHJlZXQgbnVtYmVyOicsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuXG4gIG9uQ2hhbmdlZExhbmd1YWdlKCkge1xuICAgIC8vIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2JveE51bWJlci5wbGFjZWhvbGRlci5pbnB1dC1wbGFjZWhvbGRlcicpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdwbGFjZSBob2xkZXInLCB0aGlzLnBsYWNlSG9sZGVyVGV4dCk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnYm94TnVtYmVyLnBsYWNlaG9sZGVyLmlucHV0LXBsYWNlaG9sZGVyJylcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCduZXcgcGxhY2Vob2xkZXInLCByZXMpO1xuICAgICAgICAvLyA9PiAnaGVsbG8gd29ybGQnXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gcmVzO1xuICAgICAgICB0aGlzLnNldEVtcHR5UmVzcG9uc2VUZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRFbXB0eVJlc3BvbnNlVGV4dCgpIHtcbiAgICAvLyB0aGlzLmVtcHR5UmVzcG9uc2VUZXh0ID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdub3QtaW4tbGlzdCcpO1xuICAgIHRoaXMuZW1wdHlSZXNwb25zZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnYm94TnVtYmVyLm1lc3NhZ2Uubm90LWluLWxpc3QnKTtcbiAgfVxuXG4gIG9uQ2xlYXJJbnB1dEV2ZW50KGV2ZW50LCBmb2N1cykge1xuICAgIHRoaXMuY2xlYXJJbnB1dChmb2N1cyk7XG4gIH1cblxuICBvbkJsdXIoZXYpIHtcbiAgICBpZiAodGhpcy5pc0Jyb3dzZXJJRSgpICYmIHRoaXMuaXNEcm9wZG93bkNsaWNrZWQoZXYpKSB7XG4gICAgICB0aGlzLmJveE51bWJlclNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2tpcE5leHRCbHVyKSB7XG4gICAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgICAgdGhpcy5ibHVyRXZlbnQuZW1pdChBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgfVxuICB9XG5cbiAgaXNCcm93c2VySUUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9tc2llXFxzfHRyaWRlbnRcXC98ZWRnZVxcLy9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB9XG5cbiAgaXNEcm9wZG93bkNsaWNrZWQoZXYpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldi5leHBsaWNpdE9yaWdpbmFsVGFyZ2V0IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YXJnZXQuaWQgPT09ICdicGFhYy1ib3gtZHJvcGRvd24nKTtcbiAgfVxuXG4gIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgLy8gdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gKHRoaXMucHJlZmlsbGluZyA9PT0gdHJ1ZSAmJiB0aGlzLnByZWZpbGxEYXRhICE9PSBudWxsKVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgPyAhdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgOiBmYWxzZTtcbiAgICAvLyB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlO1xuICAgIHRoaXMuZm9jdXNFdmVudC5lbWl0KEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnRleHRDaGFuZ2VFdmVudC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBtYXlTaG93RHJvcGRvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiAhdGhpcy5jb2xsYXBzZURyb3Bkb3duO1xuICB9XG5cbiAgYnVpbGRJbnB1dFdvcmRMaXN0KCkge1xuICAgIHRoaXMud29yZExpc3QgPSB0aGlzLnNlYXJjaFRleHQuc3BsaXQoL1tcXHMsIF0rLyk7XG4gIH1cblxuICBtYXlBZGRUeXBlQWhlYWQoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgvW15cXHMsIFxcXFxcXC9dJC8pLnRlc3QodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIGJ1aWxkVHlwZUFoZWFkKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoIXRoaXMubWF5QWRkVHlwZUFoZWFkKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoVGV4dFdvcmRzID0gdGhpcy5zZWFyY2hUZXh0LnNwbGl0KC9bXFxzLCBdKy8pO1xuICAgIGNvbnN0IGxhc3RXb3JkID0gc2VhcmNoVGV4dFdvcmRzW3NlYXJjaFRleHRXb3Jkcy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zLnNvbWUoZnVuY3Rpb24oc3VnKSB7XG4gICAgICBpZiAoIXN1ZyB8fCAhc3VnLmhhc093blByb3BlcnR5KCdzdHJpbmcnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VnLnN0cmluZy5zcGxpdCgvW1xccy1dKy8pLnNvbWUoZnVuY3Rpb24od29yZCkge1xuICAgICAgICBpZiAodGhpcy5zdHJpbmdTdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh3b3JkLCBsYXN0V29yZCkpIHtcbiAgICAgICAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSB3b3JkO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0uYmluZCh0aGlzKSkpIHtcbiAgICAgIGNvbnN0IGFwcGVuZGl4ID0gdGhpcy50eXBlQWhlYWRXb3JkLnNsaWNlKGxhc3RXb3JkLmxlbmd0aCwgdGhpcy50eXBlQWhlYWRXb3JkLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuYnBUeXBlQWhlYWQgPSB0aGlzLnNlYXJjaFRleHQgKyBhcHBlbmRpeDtcbiAgICB9XG4gIH1cblxuICBzdHJpbmdTdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh2YWx1ZSwgcHJlZml4KSB7XG4gICAgdmFsdWUgPSAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XG4gICAgcHJlZml4ID0gKHByZWZpeCAhPT0gbnVsbCAmJiBwcmVmaXggIT09IHVuZGVmaW5lZCkgPyBwcmVmaXgudG9Mb3dlckNhc2UoKSA6IHByZWZpeDtcbiAgICByZXR1cm4gdGhpcy51bmljb2RlU2VydmljZS5yZW1vdmVEaWFjcml0aWNzKHZhbHVlKS5zbGljZSgwLCBwcmVmaXgubGVuZ3RoKVxuICAgICAgLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MocHJlZml4KSkgIT09IC0xO1xuICB9XG5cbiAgZ2V0VG9wU3VnZ2VzdGlvbnMoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICBjb25zdCBwYXJhbSA9IHRoaXMuZ2VuZXJhdGVQYXJhbWV0ZXJzKCk7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnQk9YLU5VTUJFUiBjYWxsaW5nIHNlcnZpY2UgcGFyYW1zJywgcGFyYW0pOyB9XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFkZHJlc3NTZXJ2aWNlLmdldEJveCh0aGlzLmJhc2VVcmwsIHRoaXMubG9jYWxpdHksIHRoaXMucG9zdGFsQ29kZSwgcGFyYW0pXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVHZXRCb3hSZXNwb25zZShyZXNwb25zZSwgc291cmNlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLnByZWZpbGxBbmFseXplRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgICxcbiAgICAgICAgICAoKSA9PiB0aGlzLmhhbmRsZUdldEJveEVycm9yKClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGV4dENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICggdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9PT0gdHJ1ZSApID8gJ29yYW5nZXJlZCcgOiAnJztcbiAgfVxuXG4gIHByZWZpbGxBbmFseXplRGF0YSgpXG4gIHtcbiAgICBpZiAodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wcmVmaWxsRXZlbnRFbWl0dGVyLmVtaXQobmV3IFByZWZpbGxFdmVudChBRERSRVNTTEVWRUwuQk9YX05VTUJFUiwgdGhpcy5wcmVmaWxsRGF0YSkgKTtcbiAgfVxuXG4gIGxvYWRQYXJhbXMocHJlZmlsbERhdGE6IFByZWZpbGxEYXRhKSB7XG4gICAgbGV0IGNvbmNhdFN0ciA9ICcnO1xuICAgIGlmIChwcmVmaWxsRGF0YSAhPT0gbnVsbCAmJiBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzICE9PSBudWxsKVxuICAgIHtcbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtaW5MZXZlbCcpKSB7XG4gICAgICAgIHRoaXMubWluTGV2ZWwgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsO1xuICAgICAgfVxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ3Bvc3RhbENvZGUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSkpIHtcbiAgICAgICAgdGhpcy5wb3N0YWxDb2RlID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlO1xuICAgICAgfVxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ211bmljaXBhbGl0eU5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSkpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl0eSA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdzdHJlZXROYW1lJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUpKSB7XG4gICAgICAgIHRoaXMuc3RyZWV0TmFtZSA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdzdHJlZXROdW1iZXInKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyKSkge1xuICAgICAgICB0aGlzLnN0cmVldE51bWJlciA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgfVxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpXG4gICAgICAgICAgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcikgJiYgdGhpcy5pc1BhcmFtc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgY29uY2F0U3RyID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25jYXRTdHI7XG4gIH1cblxuICBpc1N0cmluZyh2YWwpOiBib29sZWFuIHtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB2YWwuY29uc3RydWN0b3IgPT09IFN0cmluZztcbiAgfVxuXG4gIGlzVmFsaWQodmFsKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTdHJpbmcodmFsKSAmJiB2YWwgIT09ICcnO1xuICB9XG5cbiAgaXNQYXJhbXNDb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKHRoaXMucG9zdGFsQ29kZSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMubG9jYWxpdHkpICYmIHRoaXMuaXNWYWxpZCh0aGlzLnN0cmVldE5hbWUpICYmIHRoaXMuaXNWYWxpZCh0aGlzLnN0cmVldE51bWJlcik7XG4gIH1cblxuICBnZW5lcmF0ZVBhcmFtZXRlcnMoKTogUXVlcnlQYXJhbWV0ZXJzIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZVxuICAgIGNvbnN0IHBhcmFtID0gbmV3IFF1ZXJ5UGFyYW1ldGVycyh7XG4gICAgICBpZDogdGhpcy5zZXF1ZW5jZU51bWJlcixcbiAgICAgIHE6IHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgIHBvc3RhbENvZGU6IHRoaXMucG9zdGFsQ29kZSxcbiAgICAgIGxvY2FsaXR5OiB0aGlzLmxvY2FsaXR5LFxuICAgICAgc3RyZWV0OiB0aGlzLnN0cmVldE5hbWUsXG4gICAgICBzdHJlZXROdW1iZXI6IHRoaXMuc3RyZWV0TnVtYmVyLFxuICAgICAgbWF4TnVtYmVyT2ZTdWdnZXN0aW9uczogdGhpcy5tYXhTdWdnZXNpb25Db3VudFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc29ydENyaXRlcmlhID09PSAnQicpIHtcbiAgICAgIHBhcmFtLnNvcnRCeUJveCh0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtO1xuICB9XG5cbiAgaGFuZGxlR2V0Qm94UmVzcG9uc2UoZGF0YTogYW55LCBzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5yZXNwb25zZSAmJiBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyICYmIGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXIgPj0gdGhpcy5jb25zdW1lZE51bWJlciAmJlxuICAgICAgZGF0YS5yZXNwb25zZS50b3BTdWdnZXN0aW9ucykge1xuICAgICAgdGhpcy5jb25zdW1lZE51bWJlciA9IGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXI7XG4gICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICAgIHRoaXMucGFyc2VUb3BTdWdnZXN0aW9ucyhkYXRhLnJlc3BvbnNlLnRvcFN1Z2dlc3Rpb25zLCBzb3VyY2UpO1xuICAgICAgdGhpcy5idWlsZFR5cGVBaGVhZChzb3VyY2UpO1xuICAgICAgdGhpcy5jbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICAgIHRoaXMuYnVpbGRJbnB1dFdvcmRMaXN0KCk7XG4gICAgfVxuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9ICh0aGlzLnByZWZpbGxpbmcgPT09IHRydWUgJiYgdGhpcy5wcmVmaWxsRGF0YSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICF0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMub25Gb2N1c1Nob3dTdWdnZXN0aW9uc0FmdGVyUHJlZmlsbCA6IGZhbHNlO1xuICB9XG5cbiAgaGFuZGxlR2V0Qm94RXJyb3IoKSB7XG4gICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gIH1cblxuICBzZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgIHRoaXMuZXJyb3JDb2RlID0gJ3NlcnZpY2UtdW5hdmFpbGFibGUnO1xuICAgIC8vIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UodGhpcy5lcnJvckNvZGUpO1xuICAgIHRoaXMuZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZVR5cGUuU2VydmljZV9VbmF2YWlsYWJsZSk7XG4gIH1cblxuICBjbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JDb2RlKSB7XG4gICAgICBjb25zdCByZXMgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmVycm9yQ29kZSk7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPT09IHJlcyApIHtcbiAgICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvckNvZGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlVG9wU3VnZ2VzdGlvbnModG9wU3VnZ2VzdGlvbnMsIHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodG9wU3VnZ2VzdGlvbnMuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XG4gICAgICAvLyB0b3BTdWdnZXN0aW9ucy5mb3JFYWNoKHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uLmJpbmQodGhpcykpO1xuICAgICAgZm9yIChjb25zdCBzdWcgb2YgdG9wU3VnZ2VzdGlvbnMpXG4gICAgICB7XG4gICAgICAgIHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uKHN1Zywgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIGlmKCFzb3VyY2UpXG4gICAgICB7XG4gICAgICAgIGlmICgodG9wU3VnZ2VzdGlvbnMubGVuZ3RoID09PSAwIHx8IHRoaXMuZW1wdHlSZXNwb25zZSkgJiYgdGhpcy5ub3RJbkxpc3RBbGxvd2VkKSB7XG4gICAgICAgICAgdGhpcy5zdWdnZXN0aW9ucy5wdXNoKHtzdHJpbmc6IHRoaXMuc2VhcmNoVGV4dCwgJ25vdC1pbi1saXN0JzogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIC8vIElmIHByZWZpbGxpbmcsIHRoZW4gY2hlY2sgaWYgbm8gbWF0Y2ggZm9yIGEgbm9uLWVtcHR5IGJveE51bWJlclxuICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNlLCBzaW11bGF0ZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSAnbm90LWluLWxpc3QnIHN1Z2dlc3Rpb25cbiAgICAgICAgaWYodGhpcy5wcmVmaWxsaW5nICYmIHRoaXMubm90SW5MaXN0QWxsb3dlZFxuICAgICAgICAgICAgJiYgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IGZhbHNlIFxuICAgICAgICAgICAgJiYgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyICE9PSBudWxsIFxuICAgICAgICAgICAgJiYgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlci5sZW5ndGggPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgLy8gY29uc3Qgbm90SW5MaXN0U3VnZ2VzdGlvbiA9IHtzdHJpbmc6IHRoaXMuc2VhcmNoVGV4dCwgJ25vdC1pbi1saXN0JzogdHJ1ZX07XG4gICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IHRoaXMucHJlZmlsbEJ1aWxkTm90SW5MaXN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0JPWCBOVU1CRVIgLSBQUkVGSUxMIE5PVCBJTiBMSVNUIFNVR0dFU1RJT046Jywgc3VnZ2VzdGlvbik7IH1cbiAgICAgICAgICB0aGlzLnByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByZWZpbGxCdWlsZE5vdEluTGlzdFN1Z2dlc3Rpb24oKTogYW55IHtcbiAgICBjb25zdCBub3RJbkxpc3RTdWdnZXN0aW9uID0ge3N0cmluZzogdGhpcy5zZWFyY2hUZXh0LCAnbm90LWluLWxpc3QnOiB0cnVlfTtcbiAgICBjb25zdCBzdHJlZXROdW1iZXJTdWdnZXN0aW9uID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICBjb25zdCBjb21iaW5lZCA9IHsuLi5zdHJlZXROdW1iZXJTdWdnZXN0aW9uLmFkZHJlc3MsIC4uLm5vdEluTGlzdFN1Z2dlc3Rpb259O1xuICAgIGRlbGV0ZSBjb21iaW5lZC5tYWlsQm94aWQ7XG4gICAgZGVsZXRlIGNvbWJpbmVkLnN1ZmZpeElkO1xuICAgIGNvbWJpbmVkLmJveE51bWJlciA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5zZWFyY2hCYXJTdHJpbmcgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgc3RyZWV0TnVtYmVyU3VnZ2VzdGlvbi5hZGRyZXNzID0gY29tYmluZWQ7XG4gICAgcmV0dXJuIHN0cmVldE51bWJlclN1Z2dlc3Rpb247XG4gIH1cblxuICBwYXJzZVNpbmdsZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogYW55LCBzb3VyY2U6IFNvdXJjZVR5cGUpIHtcbiAgICBsZXQgc3VnZ2VzdGlvblRvQWRkOiBhbnk7XG4gICAgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUZyZW5jaCgpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2ZyZW5jaCcpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmZyZW5jaDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUR1dGNoKCkgJiYgc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZHV0Y2gnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5kdXRjaDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUdlcm1hbigpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2dlcm1hbicpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmdlcm1hbjtcbiAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2FkZHJlc3MnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgIH1cbiAgICBpZiAoc3VnZ2VzdGlvblRvQWRkKSB7XG4gICAgICBpZiAoc3VnZ2VzdGlvbi5tZXNzYWdlcykge1xuICAgICAgICBzdWdnZXN0aW9uVG9BZGQubWVzc2FnZXMgPSBzdWdnZXN0aW9uLm1lc3NhZ2VzO1xuICAgICAgfVxuICAgICAgaWYgKHN1Z2dlc3Rpb25Ub0FkZC5ib3hOdW1iZXIgPT09IHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3VnZ2VzdGlvbnMucHVzaChzdWdnZXN0aW9uVG9BZGQpO1xuICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKVxuICAgICAge1xuICAgICAgICBzdWdnZXN0aW9uLmFkZHJlc3MgPSBzdWdnZXN0aW9uVG9BZGQ7XG4gICAgICAgIHRoaXMucHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKVxuICB7XG4gICAgLy9pZiAoICF0aGlzLmFkZHJlc3NJc0NvbXBsZXRlIClcbiAgICB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdib3ggbnVtYmVyIC0gY2hlY2tpbmcgc3VnZ2VzdGlvbiBmb3IgcGVyZmVjdCBtYXRjaCcsIHRoaXMucHJlZmlsbERhdGEsIHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3VnQWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25Cb3hOdW1iZXIgPSB0aGlzLnRyYW5zZm9ybUJveE51bWJlckluTG93ZXJjYXNlQW5kV2l0aG91dERpYWNyaXRpY3MoJycgKyBzdWdBZGRyZXNzLmJveE51bWJlcik7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb21wYXJpbmcgYm94IG51bWJlcnMnLCBzdWdnZXN0aW9uQm94TnVtYmVyLCB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXIpO1xuICAgICAgfVxuICAgICAgaWYgKHN1Z2dlc3Rpb25Cb3hOdW1iZXIgPT09ICgnJyArIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlcikgKVxuICAgICAge1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzdWdBZGRyZXNzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKHN1Z0FkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdBZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihudWxsLCBzdWdBZGRyZXNzKTtcbiAgICAgICAgICAvLyB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQUREUkVTUyBDT01QTEVURSBPTiBCT1ggTlVNQkVSICEnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLyogZWxzZVxuICAgIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0FkZHJlc3MgY29tcGxldGUsIHNraXBwaW5nIHN1Z2dlc3Rpb24gY2hlY2snLCBzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9ICovXG4gIH1cblxuICBvbklucHV0Q2hhbmdlKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSB0aGlzLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0VG9wU3VnZ2VzdGlvbnMoc291cmNlKTtcbiAgICB9XG4gICAgdGhpcy5idWlsZElucHV0V29yZExpc3QoKTtcbiAgfVxuXG4gIGNsaWNrU3VnZ2VzdGlvbihldmVudDogYW55LCBzdWdnZXN0aW9uPzogYW55KSB7XG4gICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgICBpZiAoc3VnZ2VzdGlvbi5zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHN1Z2dlc3Rpb24uc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgICAvLyBpZiAoc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpKSB7XG4gICAgICAvLyAgIHRoaXMuc2hvd0FkZHJlc3NJc1ZhbGlkYXRlZCgpO1xuICAgICAgLy8gfVxuICAgICAgaWYgKHN1Z2dlc3Rpb25bJ25vdC1pbi1saXN0J10pIHtcbiAgICAgICAgc3VnZ2VzdGlvbiA9IHRoaXMubW9kaWZ5U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgc3VnZ2VzdGlvbi5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIG1vZGlmeVNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uOiBvYmplY3QpIHtcbiAgICBjb25zdCBjb21iaW5lZCA9IHsuLi50aGlzLnNlbGVjdGVkQWRkcmVzcywgLi4uc3VnZ2VzdGlvbn07XG4gICAgZGVsZXRlIGNvbWJpbmVkLm1haWxCb3hpZDtcbiAgICBkZWxldGUgY29tYmluZWQuc3VmZml4SWQ7XG4gICAgY29tYmluZWQuYm94TnVtYmVyID0gY29tYmluZWQuc3RyaW5nO1xuICAgIGNvbWJpbmVkLnNlYXJjaEJhclN0cmluZyA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICByZXR1cm4gY29tYmluZWQ7XG4gIH1cblxuICBzZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2JveCBudW1iZXI6OnNldFNlbGVjdGVkQWRkcmVzcycsIHN1Z2dlc3Rpb24pO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdnZXN0aW9uLmlzQ29tcGxldGUgPT09IHRydWUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWRBZGRyZXNzKCkge1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChudWxsKTtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICB9XG5cbiAgLypcbiAgc2V0VmFsaWRhdGlvbk1lc3NhZ2UodHJhbnNsYXRpb25Db2RlLCBvcHRpb25zPywgcmV0cmFuc2xhdGVPcHRpb25zPykge1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAocmV0cmFuc2xhdGVPcHRpb25zICYmIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnNbJ3VudHJhbnNsYXRlZC1zcHJpbnRmJ10pICYmXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucy5zcHJpbnRmKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkRWxlbWVudHMgPSBbXTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zWyd1bnRyYW5zbGF0ZWQtc3ByaW50ZiddLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICB0cmFuc2xhdGVkRWxlbWVudHMucHVzaCh0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoZWxlbWVudCkpO1xuICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICApO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMuc3ByaW50ZiA9IHRyYW5zbGF0ZWRFbGVtZW50cztcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUgPSB0cmFuc2xhdGlvbkNvZGU7XG4gICAgLy8gZW1pdCB0cmFuc2xhdGlvbiBrZXkgdG8gd3JhcHBlciBjb21wb25lbnQgZm9yIGN1c3RvbWl6ZWQgdHJhbnNsYXRpb25zXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlLCB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyk7XG4gICAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQodGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUpO1xuICAgIH1cbiAgfVxuICAqL1xuXG4gIGVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIG9wdGlvbnM/OiBzdHJpbmdbXSkge1xuICAgIC8vIE1vbWVudGx5LCBvcHRpb25zIGFyZSBOT1QgdXNlZDsgc28gZGF0YSB0eXBlIG9mIHRoZXNlIG9wdGlvbnMgd2lsbCBiZSByZXZpZXdlZCBvbmNlIG5lZWRlZC5cbiAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2VUeXBlID09PSBudWxsIHx8IHZhbGlkYXRpb25NZXNzYWdlVHlwZSA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZW1pdCB2YWxpZGF0aW9uIG1lc3NhZ2UgLSBtZXNzYWdlIGtleSBpcyBpbnZhbGlkIScsIHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoICh2YWxpZGF0aW9uTWVzc2FnZVR5cGUpIHtcblxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19Ob3RfRm91bmQ6XG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX1ZhbGlkYXRlZDpcbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGU6IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgICAgICAvLyB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQobWVzc2FnZSk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHttZXNzYWdlVHlwZTogdmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogbWVzc2FnZX0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTphbGlnblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBlbWl0IHZhbGlkYXRpb24gbWVzc2FnZSAtIG1lc3NhZ2Uga2V5IE5PVCBzdXBwb3J0ZWQhJywgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gIH1cbiAgc2hvd0FkZHJlc3NJc1ZhbGlkYXRlZCgpIHtcbiAgICAvLyB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlKCdhZGRyZXNzLXZhbGlkYXRlZCcpO1xuICAgIHRoaXMuZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19WYWxpZGF0ZWQpO1xuICB9XG5cbiAgY2hlY2tLZXlEb3duKGV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgLy8gZG93biBrZXksIGluY3JlbWVudCBzZWxlY3RlZEluZGV4XG4gICAgICBjYXNlIDQwOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVBcnJvd1NlbGVjdGVkSW5kZXhEb3duKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyB1cCBrZXksIGRlY3JlbWVudCBzZWxlY3RlZEluZGV4XG4gICAgICBjYXNlIDM4OlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVBcnJvd1NlbGVjdGVkSW5kZXhVcCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIHJpZ2h0IGFycm93IGtleVxuICAgICAgY2FzZSAzOTpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihldmVudCwgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy50eXBlQWhlYWRXb3JkICYmIHRoaXMudHlwZUFoZWFkSXNTaG93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5icFR5cGVBaGVhZCk7XG4gICAgICAgICAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyB0YWIga2V5XG4gICAgICBjYXNlIDk6XG4gICAgICAgIGlmICghdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdEZpcnN0SW5MaXN0T2ZTdWdnZXNpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDY6XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gZW50ZXIgcHJlc3NlZFxuICAgICAgY2FzZSAxMzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihldmVudCwgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICBicmVhaztcblxuICAgIH1cbiAgfVxuXG4gIGNsZWFyV2lkZ2V0KCkge1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhclNlYXJjaFRleHQoKTtcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgdGhpcy5wcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgLy8gdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gIH1cblxuICBjbGVhclNlYXJjaFRleHQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gIH1cblxuICB0eXBlQWhlYWRJc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLmJwVHlwZUFoZWFkICYmIHRoaXMuYnBUeXBlQWhlYWQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG5cbiAgbW92ZUFycm93U2VsZWN0ZWRJbmRleERvd24oKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCArIDEgIT09IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXgrKztcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggLSAxKTtcbiAgICB9XG4gIH1cblxuICBtb3ZlQXJyb3dTZWxlY3RlZEluZGV4VXAoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEgIT09IC0yKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXgtLTtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICBjdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleCA+PSAwO1xuICB9XG5cbiAgc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbihuZXdWYWwsIG9sZFZhbCkge1xuICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZXdWYWwgIT09IC0xKSB7XG4gICAgICBpZiAob2xkVmFsID09PSAtMSkge1xuICAgICAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVGV4dDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0uc3RyaW5nKTtcbiAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMubGFzdFNlYXJjaFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtYXlTaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPiAwO1xuICB9XG5cbiAgY2xlYXJJbnB1dChmb2N1cz8sIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnByZXZpb3VzSW5kZXggPSAtMTtcbiAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMuY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgaWYgKGZvY3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJveE51bWJlclNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLy8gdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIGlmKGVtaXQpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KC8qJ0JPWF9OVU1CRVInKi8gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25zKCkge1xuICAgIHRoaXMud29yZExpc3QgPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gIH1cblxuICBjbGVhclR5cGVBaGVhZCgpIHtcbiAgICB0aGlzLmJwVHlwZUFoZWFkID0gJyc7XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHttZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6IHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlfSk7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMgPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgfVxuXG4gIHNldFNlYXJjaFRleHQodmFsdWUpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZTtcbiAgfVxuXG4gIHNlbGVjdEZpcnN0SW5MaXN0T2ZTdWdnZXNpb25zKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oKTtcbiAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggLSAxKTtcbiAgfVxuXG4gIGNoYW5nZVNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHN1Z2dlc3Rpb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG5cbiAgc2hvd0FkZHJlc3NOb3RGb3VuZE1lc3NhZ2UoKSB7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSgnYWRkcmVzcy1ub3QtZm91bmQnKTtcbiAgICB0aGlzLmVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfTm90X0ZvdW5kKTtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuICh0aGlzLmxvY2FsaXR5ID09PSAnJyB8fCB0aGlzLnBvc3RhbENvZGUgPT09ICcnIHx8IHRoaXMubWluTGV2ZWwgPiBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gIH1cblxuICBvbklucHV0Q2xpY2soKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnYm94IG51bWJlciBjbGljaycpOyB9XG4gIH1cbn1cbiJdfQ==
|
|
831
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYnBvc3QvYnAtYWRkcmVzcy1hdXRvLWNvbXBsZXRlLWJ5LWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9ib3gtbnVtYmVyL2JveC1udW1iZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFrRCxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRzdKLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT3hEO0lBc0ZFLDRCQUNVLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxjQUE4QjtRQUg5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNs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QUFFOzZEQUFvQztJQUNuQztRQUFSLEtBQUssRUFBRTswREFBb0I7SUFDbkI7UUFBUixLQUFLLEVBQUU7d0RBQWtCO0lBQ2pCO1FBQVIsS0FBSyxFQUFFOzBEQUFvQjtJQUNuQjtRQUFSLEtBQUssRUFBRTs0REFBc0I7SUFDckI7UUFBUixLQUFLLEVBQUU7K0RBQWlCO0lBQ2hCO1FBQVIsS0FBSyxFQUFFO2dFQUEyQjtJQUcxQjtRQUFSLEtBQUssRUFBRTt1REFXUDtJQUVRO1FBQVIsS0FBSyxFQUFFOzZEQUFxQjtJQUc3QjtRQURDLEtBQUssRUFBRTswREFDUztJQUVQO1FBQVQsTUFBTSxFQUFFOzhEQUFvSDtJQUNuSDtRQUFULE1BQU0sRUFBRTs4REFBd0Q7SUFDdkQ7UUFBVCxNQUFNLEVBQUU7MERBQW9EO0lBQ25EO1FBQVQsTUFBTSxFQUFFO3lEQUFtRDtJQUNsRDtRQUFULE1BQU0sRUFBRTsrREFBeUQ7SUFDeEQ7UUFBVCxNQUFNLEVBQUU7a0VBQTREO0lBRTNEO1FBQVQsTUFBTSxFQUFFO3NFQUFtRTtJQUVsRTtRQUFULE1BQU0sRUFBRTttRUFBb0Y7SUF2RGxGLGtCQUFrQjtRQUw5QixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsZUFBZTtZQUN6QiwrdEVBQTBDOztTQUUzQyxDQUFDO09BQ1csa0JBQWtCLENBOHpCOUI7SUFBRCx5QkFBQztDQUFBLEFBOXpCRCxJQTh6QkM7U0E5ekJZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJlZmlsbGVkUGFyYW1ldGVycyB9IGZyb20gJy4uL3V0aWxzL3ByZWZpbGxlZC1wYXJhbWV0ZXJzJztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlVHlwZSB9IGZyb20gJy4uL2VudW0vdmFsaWRhdGlvbi1tZXNzYWdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FkcmVzcy5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBVbmljb2RlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VuaWNvZGUuc2VydmljZSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAnLi4vdXRpbHMvZG9taGFuZGxlcic7XG5pbXBvcnQgeyBBRERSRVNTTEVWRUwgfSBmcm9tICcuLi9lbnVtL2FkZHJlc3MtbGV2ZWwuZW51bSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtZXRlcnMgfSBmcm9tICcuLi9tb2RlbC9xdWVyeS1wYXJhbWV0ZXJzLm1vZGVsJztcbmltcG9ydCB7IFByZWZpbGxEYXRhIH0gZnJvbSAnLi4vdXRpbHMvcHJlZmlsbC1kYXRhJztcbmltcG9ydCB7IFNvdXJjZVR5cGUgfSBmcm9tICcuLi9lbnVtL3NvdXJjZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgUHJlZmlsbEV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvcHJlZmxsbC5ldmVudCc7XG5pbXBvcnQgeyBJbnB1dE5hbWVUeXBlIH0gZnJvbSAnLi4vZW51bS9pbnB1dC1uYW1lLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicC1ib3gtbnVtYmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JveC1udW1iZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ib3gtbnVtYmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQm94TnVtYmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZCgnYm94TnVtYmVyU2VhcmNoSW5wdXQnLCB7c3RhdGljOiBmYWxzZX0gKSBib3hOdW1iZXJTZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnYm94TnVtYmVyTGlzdCcsIHtzdGF0aWM6IGZhbHNlfSApIGJveE51bWJlckxpc3Q6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvLyAyMDIwLTA2LTE1XG4gIC8vIEBJbnB1dCgpXG4gIC8vIG9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YTtcbiAgQElucHV0KCkgc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGxhYmVsUmVzb3VyY2VLZXkgPSAnY29tbW9uLmxhYmVsLmJveE51bWJlcic7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhID0gJyc7XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgYWRkcmVzc1BhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgQElucHV0KCkgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBASW5wdXQoKSBsb2NhbGl0eTogc3RyaW5nO1xuICBASW5wdXQoKSBzdHJlZXROYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0cmVldE51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RlZEFkZHJlc3M7XG4gIEBJbnB1dCgpIG5vdEluTGlzdEFsbG93ZWQ6IGJvb2xlYW47XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgaW5wdXRMYW5nKHZhbDogc3RyaW5nKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NldCBsYW5nJywgdmFsKTtcbiAgICB0aGlzLmxvY2FsZVNlcnZpY2UuY2hhbmdlTGFuZyh2YWwpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UodmFsKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3NldCBsYW5nIGFmdGVyIHN1YnNjcmliZScsIHJlcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgICAgICAgLy8gaWYgKHJlcyAhPT0gdW5kZWZpbmVkICkge1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIEBJbnB1dCgpIG1lc3NhZ2VPcHRpb24gPSAnWSc7wrVcblxuICBASW5wdXQoKVxuICBpc1JlYWRvbmx5PWZhbHNlO1xuXG4gIEBPdXRwdXQoKSBtZXNzYWdlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHttZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogc3RyaW5nfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBhZGRyZXNzQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBmb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGJsdXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB0ZXh0Q2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZW1wdHlSZXNwb25zZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgY2xlYXJJbnB1dEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHByZWZpbGxFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxQcmVmaWxsRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVmaWxsRXZlbnQ+KCk7XG5cbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuXG4gIGFkZHJlc3NJc1ZhbGlkYXRlZDogYm9vbGVhbjtcbiAgc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmc7XG4gIHN1Z2dlc3Rpb25zOiBhbnk7XG4gIHByZXZpb3VzSW5kZXg6IG51bWJlcjtcbiAgbGFzdFNlYXJjaFZhbHVlOiBzdHJpbmc7XG4gIHdvcmRMaXN0OiBhbnk7XG4gIHN1Z2dlc3Rpb25zV29yZExpc3Q6IGFueTtcbiAgYnBUeXBlQWhlYWQ6IHN0cmluZztcbiAgcGxhY2VIb2xkZXJUZXh0OiBzdHJpbmc7XG4gIHNraXBOZXh0Qmx1cjogYm9vbGVhbjsgLy8gT25CbHVyIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzdWdnZXN0aW9uL3ZhbGlkYXRvciBidXR0b25cbiAgZXJyb3JDb2RlOiBhbnk7XG5cbiAgbWluTGV2ZWw6IG51bWJlcjtcbiAgc2VsZWN0ZWRJbmRleDogbnVtYmVyO1xuICBjb2xsYXBzZURyb3Bkb3duOiBib29sZWFuO1xuICB0eXBlQWhlYWRXb3JkOiBzdHJpbmc7XG4gIHNlcXVlbmNlTnVtYmVyOiBudW1iZXI7XG4gIGNvbnN1bWVkTnVtYmVyOiBudW1iZXI7XG4gIHNlbGVjdGlvbkNoYW5nZWQ6IGJvb2xlYW47XG4gIHZhbGlkYXRpb25NZXNzYWdlQ29kZSA9IG51bGw7XG4gIHZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyA9IG51bGw7XG4gIGVtcHR5UmVzcG9uc2VUZXh0OiBzdHJpbmc7XG4gIGVtcHR5UmVzcG9uc2U6IGJvb2xlYW47XG5cbiAgcHJlZmlsbGluZyA9IGZhbHNlO1xuICBpc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWRkcmVzc1NlcnZpY2U6IEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bmljb2RlU2VydmljZTogVW5pY29kZVNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgLy8gaW5zdGFuY2UgcHJvcGVydGllc1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLndvcmRMaXN0ID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTsgLy8gT25CbHVyIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzdWdnZXN0aW9uL3ZhbGlkYXRvciBidXR0b25cbiAgICB0aGlzLmVycm9yQ29kZSA9IG51bGw7XG4gICAgLy8gc2NvcGUgcHJvcGVydGllc1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIHByb3BlcnRpZXNcbiAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgPSAxO1xuICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSAxO1xuICAgIC8vIGluaXRpYWxpemF0aW9uXG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0KCcnKTtcbiAgICAvLyB0aGlzLnNldFBsYWNlSG9sZGVyVGV4dCgpO1xuICAgIHRoaXMuc2V0RW1wdHlSZXNwb25zZVRleHQoKTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSB0cnVlO1xuICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgICBjb25zdCBvdmVybGF5OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMuYm94TnVtYmVyTGlzdC5uYXRpdmVFbGVtZW50O1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKG92ZXJsYXksICdsaS5hY3RpdmUnKTtcbiAgICAgICAgaWYgKGxpc3RJdGVtKSB7XG4gICAgICAgICAgRG9tSGFuZGxlci5zY3JvbGxJblZpZXcob3ZlcmxheSwgbGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcykge1xuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykgJiYgIWNoYW5nZXMucHJlZmlsbERhdGEuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdGhpcy5sb2FkUGFyYW1zKGNoYW5nZXMucHJlZmlsbERhdGEuY3VycmVudFZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAhPT0gJycgJiYgdGhpcy5taW5MZXZlbCA9PT0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpIHtcbiAgICAgICAgICAvLyB0aGlzLm9uSW5wdXRDaGFuZ2UoJ3ByZWZpbGxlZCcpO1xuICAgICAgICAgIC8vIHRoaXMuYm94TnVtYmVyU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyXG4gICAgICAgICAgICA9IHRoaXMudHJhbnNmb3JtQm94TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyh0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyKTtcbiAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoLyoncHJlZmlsbGVkJyovIFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdHJlZXROdW1iZXInKSAmJiAhY2hhbmdlcy5zdHJlZXROdW1iZXIuZmlyc3RDaGFuZ2UgJiYgIWNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykpIHtcbiAgICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSO1xuICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRMYW5nJykgLyAqJiYgIWNoYW5nZXMuYWRkcmVzc1BhcmFtcy5maXJzdENoYW5nZSogLykge1xuICAgICAgICBjb25zdCBsYW5nID0gY2hhbmdlcy5pbnB1dExhbmcuY3VycmVudFZhbHVlO1xuICAgICAgICBjb25zb2xlLmxvZygnb24gY2hhbmdlcyAtIGlucHV0TGFuZycsIGxhbmcpO1xuICAgICAgICBpZiAoY2hhbmdlcy5pbnB1dExhbmcuY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0RGVmYXVsdExhbmcobGFuZyk7XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsYW5nKTtcbiAgICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2UuY2hhbmdlTGFuZyhsYW5nKTtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlZExhbmd1YWdlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICovXG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtQm94TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyhib3hOdW1iZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcbiAgICBpZiAoYm94TnVtYmVyICE9PSBudWxsICYmIGJveE51bWJlciAhPT0gdW5kZWZpbmVkIClcbiAgICB7XG4gICAgICByZXN1bHQgPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MoYm94TnVtYmVyKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnVHJhbnNmb3JtZWQgc3RyZWV0IG51bWJlcjonLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cblxuICBvbkNoYW5nZWRMYW5ndWFnZSgpIHtcbiAgICAvLyB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdib3hOdW1iZXIucGxhY2Vob2xkZXIuaW5wdXQtcGxhY2Vob2xkZXInKTtcbiAgICAvLyBjb25zb2xlLmxvZygncGxhY2UgaG9sZGVyJywgdGhpcy5wbGFjZUhvbGRlclRleHQpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoJ2JveE51bWJlci5wbGFjZWhvbGRlci5pbnB1dC1wbGFjZWhvbGRlcicpXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnbmV3IHBsYWNlaG9sZGVyJywgcmVzKTtcbiAgICAgICAgLy8gPT4gJ2hlbGxvIHdvcmxkJ1xuICAgICAgICB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9IHJlcztcbiAgICAgICAgdGhpcy5zZXRFbXB0eVJlc3BvbnNlVGV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RW1wdHlSZXNwb25zZVRleHQoKSB7XG4gICAgLy8gdGhpcy5lbXB0eVJlc3BvbnNlVGV4dCA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnbm90LWluLWxpc3QnKTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2VUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2JveE51bWJlci5tZXNzYWdlLm5vdC1pbi1saXN0Jyk7XG4gIH1cblxuICBvbkNsZWFySW5wdXRFdmVudChldmVudCwgZm9jdXMpIHtcbiAgICB0aGlzLmNsZWFySW5wdXQoZm9jdXMpO1xuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgaWYgKHRoaXMuaXNCcm93c2VySUUoKSAmJiB0aGlzLmlzRHJvcGRvd25DbGlja2VkKGV2KSkge1xuICAgICAgdGhpcy5ib3hOdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNraXBOZXh0Qmx1cikge1xuICAgICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgIHRoaXMuYmx1ckV2ZW50LmVtaXQoQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpO1xuICAgIH1cbiAgfVxuXG4gIGlzQnJvd3NlcklFKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvbXNpZVxcc3x0cmlkZW50XFwvfGVkZ2VcXC8vaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfVxuXG4gIGlzRHJvcGRvd25DbGlja2VkKGV2KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXYuZXhwbGljaXRPcmlnaW5hbFRhcmdldCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIHJldHVybiAodGFyZ2V0LmlkID09PSAnYnBhYWMtYm94LWRyb3Bkb3duJyk7XG4gIH1cblxuICBvbkZvY3VzKCkge1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIC8vIHRoaXMuY29sbGFwc2VEcm9wZG93biA9ICh0aGlzLnByZWZpbGxpbmcgPT09IHRydWUgJiYgdGhpcy5wcmVmaWxsRGF0YSAhPT0gbnVsbClcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgID8gIXRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5vbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsIDogZmFsc2U7XG4gICAgLy8gdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTtcbiAgICB0aGlzLmZvY3VzRXZlbnQuZW1pdChBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gIH1cblxuICB2YWx1ZUNoYW5nZWQoKSB7XG4gICAgdGhpcy50ZXh0Q2hhbmdlRXZlbnQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgbWF5U2hvd0Ryb3Bkb3duKCkge1xuICAgIHJldHVybiB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgJiYgIXRoaXMuY29sbGFwc2VEcm9wZG93bjtcbiAgfVxuXG4gIGJ1aWxkSW5wdXRXb3JkTGlzdCgpIHtcbiAgICB0aGlzLndvcmRMaXN0ID0gdGhpcy5zZWFyY2hUZXh0LnNwbGl0KC9bXFxzLCBdKy8pO1xuICB9XG5cbiAgbWF5QWRkVHlwZUFoZWFkKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoL1teXFxzLCBcXFxcXFwvXSQvKS50ZXN0KHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBidWlsZFR5cGVBaGVhZChzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKCF0aGlzLm1heUFkZFR5cGVBaGVhZChzb3VyY2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFRleHRXb3JkcyA9IHRoaXMuc2VhcmNoVGV4dC5zcGxpdCgvW1xccywgXSsvKTtcbiAgICBjb25zdCBsYXN0V29yZCA9IHNlYXJjaFRleHRXb3Jkc1tzZWFyY2hUZXh0V29yZHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5zb21lKGZ1bmN0aW9uKHN1Zykge1xuICAgICAgaWYgKCFzdWcgfHwgIXN1Zy5oYXNPd25Qcm9wZXJ0eSgnc3RyaW5nJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Zy5zdHJpbmcuc3BsaXQoL1tcXHMtXSsvKS5zb21lKGZ1bmN0aW9uKHdvcmQpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RyaW5nU3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3Mod29yZCwgbGFzdFdvcmQpKSB7XG4gICAgICAgICAgdGhpcy50eXBlQWhlYWRXb3JkID0gd29yZDtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICB9LmJpbmQodGhpcykpKSB7XG4gICAgICBjb25zdCBhcHBlbmRpeCA9IHRoaXMudHlwZUFoZWFkV29yZC5zbGljZShsYXN0V29yZC5sZW5ndGgsIHRoaXMudHlwZUFoZWFkV29yZC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLmJwVHlwZUFoZWFkID0gdGhpcy5zZWFyY2hUZXh0ICsgYXBwZW5kaXg7XG4gICAgfVxuICB9XG5cbiAgc3RyaW5nU3RhcnRzV2l0aElnbm9yZURpYWNyaXRpY3ModmFsdWUsIHByZWZpeCkge1xuICAgIHZhbHVlID0gKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuICAgIHByZWZpeCA9IChwcmVmaXggIT09IG51bGwgJiYgcHJlZml4ICE9PSB1bmRlZmluZWQpID8gcHJlZml4LnRvTG93ZXJDYXNlKCkgOiBwcmVmaXg7XG4gICAgcmV0dXJuIHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcyh2YWx1ZSkuc2xpY2UoMCwgcHJlZml4Lmxlbmd0aClcbiAgICAgIC50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy51bmljb2RlU2VydmljZS5yZW1vdmVEaWFjcml0aWNzKHByZWZpeCkpICE9PSAtMTtcbiAgfVxuXG4gIGdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLmdlbmVyYXRlUGFyYW1ldGVycygpO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0JPWC1OVU1CRVIgY2FsbGluZyBzZXJ2aWNlIHBhcmFtcycsIHBhcmFtKTsgfVxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5hZGRyZXNzU2VydmljZS5nZXRCb3godGhpcy5iYXNlVXJsLCB0aGlzLmxvY2FsaXR5LCB0aGlzLnBvc3RhbENvZGUsIHBhcmFtKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlR2V0Qm94UmVzcG9uc2UocmVzcG9uc2UsIHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAsXG4gICAgICAgICAgKCkgPT4gdGhpcy5oYW5kbGVHZXRCb3hFcnJvcigpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldFRleHRDb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAoIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPT09IHRydWUgKSA/ICdvcmFuZ2VyZWQnIDogJyc7XG4gIH1cblxuICBwcmVmaWxsQW5hbHl6ZURhdGEoKVxuICB7XG4gICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucHJlZmlsbEV2ZW50RW1pdHRlci5lbWl0KG5ldyBQcmVmaWxsRXZlbnQoQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIsIHRoaXMucHJlZmlsbERhdGEpICk7XG4gIH1cblxuICBsb2FkUGFyYW1zKHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBpZiAocHJlZmlsbERhdGEgIT09IG51bGwgJiYgcHJlZmlsbERhdGEucGFyYW1ldGVycyAhPT0gbnVsbClcbiAgICB7XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnbWluTGV2ZWwnKSkge1xuICAgICAgICB0aGlzLm1pbkxldmVsID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbDtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdwb3N0YWxDb2RlJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUpKSB7XG4gICAgICAgIHRoaXMucG9zdGFsQ29kZSA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtdW5pY2lwYWxpdHlOYW1lJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWUpKSB7XG4gICAgICAgIHRoaXMubG9jYWxpdHkgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TmFtZScpICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lKSkge1xuICAgICAgICB0aGlzLnN0cmVldE5hbWUgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnc3RyZWV0TnVtYmVyJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcikpIHtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKVxuICAgICAgICAgICYmIHRoaXMuaXNTdHJpbmcocHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXIpICYmIHRoaXMuaXNQYXJhbXNDb21wbGV0ZSgpKSB7XG4gICAgICAgIGNvbmNhdFN0ciA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uY2F0U3RyO1xuICB9XG5cbiAgaXNTdHJpbmcodmFsKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsLmNvbnN0cnVjdG9yID09PSBTdHJpbmc7XG4gIH1cblxuICBpc1ZhbGlkKHZhbCkge1xuICAgIHJldHVybiB0aGlzLmlzU3RyaW5nKHZhbCkgJiYgdmFsICE9PSAnJztcbiAgfVxuXG4gIGlzUGFyYW1zQ29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCh0aGlzLnBvc3RhbENvZGUpICYmIHRoaXMuaXNWYWxpZCh0aGlzLmxvY2FsaXR5KSAmJiB0aGlzLmlzVmFsaWQodGhpcy5zdHJlZXROYW1lKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5zdHJlZXROdW1iZXIpO1xuICB9XG5cbiAgZ2VuZXJhdGVQYXJhbWV0ZXJzKCk6IFF1ZXJ5UGFyYW1ldGVycyB7XG4gICAgLy8gdHNsaW50OmRpc2FibGVcbiAgICBjb25zdCBwYXJhbSA9IG5ldyBRdWVyeVBhcmFtZXRlcnMoe1xuICAgICAgaWQ6IHRoaXMuc2VxdWVuY2VOdW1iZXIsXG4gICAgICBxOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICBwb3N0YWxDb2RlOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICBsb2NhbGl0eTogdGhpcy5sb2NhbGl0eSxcbiAgICAgIHN0cmVldDogdGhpcy5zdHJlZXROYW1lLFxuICAgICAgc3RyZWV0TnVtYmVyOiB0aGlzLnN0cmVldE51bWJlcixcbiAgICAgIG1heE51bWJlck9mU3VnZ2VzdGlvbnM6IHRoaXMubWF4U3VnZ2VzaW9uQ291bnRcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNvcnRDcml0ZXJpYSA9PT0gJ0InKSB7XG4gICAgICBwYXJhbS5zb3J0QnlCb3godHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbTtcbiAgfVxuXG4gIGhhbmRsZUdldEJveFJlc3BvbnNlKGRhdGE6IGFueSwgc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmIChkYXRhICYmIGRhdGEucmVzcG9uc2UgJiYgZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlciAmJiBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyID49IHRoaXMuY29uc3VtZWROdW1iZXIgJiZcbiAgICAgIGRhdGEucmVzcG9uc2UudG9wU3VnZ2VzdGlvbnMpIHtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgICB0aGlzLnBhcnNlVG9wU3VnZ2VzdGlvbnMoZGF0YS5yZXNwb25zZS50b3BTdWdnZXN0aW9ucywgc291cmNlKTtcbiAgICAgIHRoaXMuYnVpbGRUeXBlQWhlYWQoc291cmNlKTtcbiAgICAgIHRoaXMuY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICAgIH1cbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSAodGhpcy5wcmVmaWxsaW5nID09PSB0cnVlICYmIHRoaXMucHJlZmlsbERhdGEgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgOiBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZUdldEJveEVycm9yKCkge1xuICAgIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICB9XG5cbiAgc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICB0aGlzLmVycm9yQ29kZSA9ICdzZXJ2aWNlLXVuYXZhaWxhYmxlJztcbiAgICAvLyB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlKHRoaXMuZXJyb3JDb2RlKTtcbiAgICB0aGlzLmVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGUpO1xuICB9XG5cbiAgY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgIGlmICh0aGlzLmVycm9yQ29kZSkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5lcnJvckNvZGUpO1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID09PSByZXMgKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JDb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwYXJzZVRvcFN1Z2dlc3Rpb25zKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHRvcFN1Z2dlc3Rpb25zLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgLy8gdG9wU3VnZ2VzdGlvbnMuZm9yRWFjaCh0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbi5iaW5kKHRoaXMpKTtcbiAgICAgIGZvciAoY29uc3Qgc3VnIG9mIHRvcFN1Z2dlc3Rpb25zKVxuICAgICAge1xuICAgICAgICB0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbihzdWcsIHNvdXJjZSk7XG4gICAgICB9XG4gICAgICBpZighc291cmNlKVxuICAgICAge1xuICAgICAgICBpZiAoKHRvcFN1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmVtcHR5UmVzcG9uc2UpICYmIHRoaXMubm90SW5MaXN0QWxsb3dlZCkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMucHVzaCh7c3RyaW5nOiB0aGlzLnNlYXJjaFRleHQsICdub3QtaW4tbGlzdCc6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBJZiBwcmVmaWxsaW5nLCB0aGVuIGNoZWNrIGlmIG5vIG1hdGNoIGZvciBhIG5vbi1lbXB0eSBib3hOdW1iZXJcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgc2ltdWxhdGUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgJ25vdC1pbi1saXN0JyBzdWdnZXN0aW9uXG4gICAgICAgIGlmKHRoaXMucHJlZmlsbGluZyAmJiB0aGlzLm5vdEluTGlzdEFsbG93ZWRcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSBmYWxzZSBcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlciAhPT0gbnVsbCBcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAmJiB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXIubGVuZ3RoID4gMClcbiAgICAgICAge1xuICAgICAgICAgIC8vIGNvbnN0IG5vdEluTGlzdFN1Z2dlc3Rpb24gPSB7c3RyaW5nOiB0aGlzLnNlYXJjaFRleHQsICdub3QtaW4tbGlzdCc6IHRydWV9O1xuICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSB0aGlzLnByZWZpbGxCdWlsZE5vdEluTGlzdFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdCT1ggTlVNQkVSIC0gUFJFRklMTCBOT1QgSU4gTElTVCBTVUdHRVNUSU9OOicsIHN1Z2dlc3Rpb24pOyB9XG4gICAgICAgICAgdGhpcy5wcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbih0b3BTdWdnZXN0aW9ucywgc291cmNlKTtcbiAgICB9XG4gIH1cblxuICBwcmVmaWxsQnVpbGROb3RJbkxpc3RTdWdnZXN0aW9uKCk6IGFueSB7XG4gICAgY29uc3Qgbm90SW5MaXN0U3VnZ2VzdGlvbiA9IHtzdHJpbmc6IHRoaXMuc2VhcmNoVGV4dCwgJ25vdC1pbi1saXN0JzogdHJ1ZX07XG4gICAgY29uc3Qgc3RyZWV0TnVtYmVyU3VnZ2VzdGlvbiA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgY29uc3QgY29tYmluZWQgPSB7Li4uc3RyZWV0TnVtYmVyU3VnZ2VzdGlvbi5hZGRyZXNzLCAuLi5ub3RJbkxpc3RTdWdnZXN0aW9ufTtcbiAgICBkZWxldGUgY29tYmluZWQubWFpbEJveGlkO1xuICAgIGRlbGV0ZSBjb21iaW5lZC5zdWZmaXhJZDtcbiAgICBjb21iaW5lZC5ib3hOdW1iZXIgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuc2VhcmNoQmFyU3RyaW5nID0gY29tYmluZWQuc3RyaW5nO1xuICAgIGNvbWJpbmVkLmlzQ29tcGxldGUgPSB0cnVlO1xuICAgIHN0cmVldE51bWJlclN1Z2dlc3Rpb24uYWRkcmVzcyA9IGNvbWJpbmVkO1xuICAgIHJldHVybiBzdHJlZXROdW1iZXJTdWdnZXN0aW9uO1xuICB9XG5cbiAgcGFyc2VTaW5nbGVTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IGFueSwgc291cmNlOiBTb3VyY2VUeXBlKSB7XG4gICAgbGV0IHN1Z2dlc3Rpb25Ub0FkZDogYW55O1xuICAgIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVGcmVuY2goKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdmcmVuY2gnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5mcmVuY2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVEdXRjaCgpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2R1dGNoJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZHV0Y2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVHZXJtYW4oKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdnZXJtYW4nKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5nZXJtYW47XG4gICAgfSBlbHNlIGlmIChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdhZGRyZXNzJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICB9XG4gICAgaWYgKHN1Z2dlc3Rpb25Ub0FkZCkge1xuICAgICAgaWYgKHN1Z2dlc3Rpb24ubWVzc2FnZXMpIHtcbiAgICAgICAgc3VnZ2VzdGlvblRvQWRkLm1lc3NhZ2VzID0gc3VnZ2VzdGlvbi5tZXNzYWdlcztcbiAgICAgIH1cbiAgICAgIGlmIChzdWdnZXN0aW9uVG9BZGQuYm94TnVtYmVyID09PSB0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zLnB1c2goc3VnZ2VzdGlvblRvQWRkKTtcbiAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgIHtcbiAgICAgICAgc3VnZ2VzdGlvbi5hZGRyZXNzID0gc3VnZ2VzdGlvblRvQWRkO1xuICAgICAgICB0aGlzLnByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbilcbiAge1xuICAgIC8vaWYgKCAhdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSApXG4gICAge1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnYm94IG51bWJlciAtIGNoZWNraW5nIHN1Z2dlc3Rpb24gZm9yIHBlcmZlY3QgbWF0Y2gnLCB0aGlzLnByZWZpbGxEYXRhLCBzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1Z0FkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQm94TnVtYmVyID0gdGhpcy50cmFuc2Zvcm1Cb3hOdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKCcnICsgc3VnQWRkcmVzcy5ib3hOdW1iZXIpO1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnY29tcGFyaW5nIGJveCBudW1iZXJzJywgc3VnZ2VzdGlvbkJveE51bWJlciwgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdWdnZXN0aW9uQm94TnVtYmVyID09PSAoJycgKyB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXIpIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPSB0cnVlO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0gc3VnZ2VzdGlvbjtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc3VnQWRkcmVzcy5ib3hOdW1iZXI7XG4gICAgICAgIGlmIChzdWdBZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgc3VnQWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24obnVsbCwgc3VnQWRkcmVzcyk7XG4gICAgICAgICAgLy8gdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FERFJFU1MgQ09NUExFVEUgT04gQk9YIE5VTUJFUiAhJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qIGVsc2VcbiAgICB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBZGRyZXNzIGNvbXBsZXRlLCBza2lwcGluZyBzdWdnZXN0aW9uIGNoZWNrJywgc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgfSAqL1xuICB9XG5cbiAgb25JbnB1dENoYW5nZShzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICB9XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQgPT09ICcnKSB7XG4gICAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gdGhpcy5zZXF1ZW5jZU51bWJlcjtcbiAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZSk7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRJbnB1dFdvcmRMaXN0KCk7XG4gIH1cblxuICBjbGlja1N1Z2dlc3Rpb24oZXZlbnQ6IGFueSwgc3VnZ2VzdGlvbj86IGFueSkge1xuICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSBmYWxzZTtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoc3VnZ2VzdGlvbikge1xuICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgICAgaWYgKHN1Z2dlc3Rpb24uc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dChzdWdnZXN0aW9uLnN0cmluZyk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgICAgLy8gaWYgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSkge1xuICAgICAgLy8gICB0aGlzLnNob3dBZGRyZXNzSXNWYWxpZGF0ZWQoKTtcbiAgICAgIC8vIH1cbiAgICAgIGlmIChzdWdnZXN0aW9uWydub3QtaW4tbGlzdCddKSB7XG4gICAgICAgIHN1Z2dlc3Rpb24gPSB0aGlzLm1vZGlmeVNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgIHN1Z2dlc3Rpb24uaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBtb2RpZnlTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbjogb2JqZWN0KSB7XG4gICAgY29uc3QgY29tYmluZWQgPSB7Li4udGhpcy5zZWxlY3RlZEFkZHJlc3MsIC4uLnN1Z2dlc3Rpb259O1xuICAgIGRlbGV0ZSBjb21iaW5lZC5tYWlsQm94aWQ7XG4gICAgZGVsZXRlIGNvbWJpbmVkLnN1ZmZpeElkO1xuICAgIGNvbWJpbmVkLmJveE51bWJlciA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5zZWFyY2hCYXJTdHJpbmcgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb246IGFueSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdib3ggbnVtYmVyOjpzZXRTZWxlY3RlZEFkZHJlc3MnLCBzdWdnZXN0aW9uKTtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgc3VnZ2VzdGlvbi5pc0NvbXBsZXRlID09PSB0cnVlKSA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkLmVtaXQoc3VnZ2VzdGlvbik7XG4gIH1cblxuICBjbGVhclNlbGVjdGVkQWRkcmVzcygpIHtcbiAgICB0aGlzLmFkZHJlc3NDaGFuZ2VkLmVtaXQobnVsbCk7XG4gICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qXG4gIHNldFZhbGlkYXRpb25NZXNzYWdlKHRyYW5zbGF0aW9uQ29kZSwgb3B0aW9ucz8sIHJldHJhbnNsYXRlT3B0aW9ucz8pIHtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKHJldHJhbnNsYXRlT3B0aW9ucyAmJiB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zWyd1bnRyYW5zbGF0ZWQtc3ByaW50ZiddKSAmJlxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMuc3ByaW50Zikge1xuICAgICAgY29uc3QgdHJhbnNsYXRlZEVsZW1lbnRzID0gW107XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9uc1sndW50cmFuc2xhdGVkLXNwcmludGYnXS5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgdHJhbnNsYXRlZEVsZW1lbnRzLnB1c2godGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKGVsZW1lbnQpKTtcbiAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgKTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zLnNwcmludGYgPSB0cmFuc2xhdGVkRWxlbWVudHM7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gdHJhbnNsYXRpb25Db2RlO1xuICAgIC8vIGVtaXQgdHJhbnNsYXRpb24ga2V5IHRvIHdyYXBwZXIgY29tcG9uZW50IGZvciBjdXN0b21pemVkIHRyYW5zbGF0aW9uc1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSh0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSwgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMpO1xuICAgICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlKTtcbiAgICB9XG4gIH1cbiAgKi9cblxuICBlbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCBvcHRpb25zPzogc3RyaW5nW10pIHtcbiAgICAvLyBNb21lbnRseSwgb3B0aW9ucyBhcmUgTk9UIHVzZWQ7IHNvIGRhdGEgdHlwZSBvZiB0aGVzZSBvcHRpb25zIHdpbGwgYmUgcmV2aWV3ZWQgb25jZSBuZWVkZWQuXG4gICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlVHlwZSA9PT0gbnVsbCB8fCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUgPT09IHVuZGVmaW5lZCApIHtcbiAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGVtaXQgdmFsaWRhdGlvbiBtZXNzYWdlIC0gbWVzc2FnZSBrZXkgaXMgaW52YWxpZCEnLCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAodmFsaWRhdGlvbk1lc3NhZ2VUeXBlKSB7XG5cbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfTm90X0ZvdW5kOlxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19WYWxpZGF0ZWQ6XG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5TZXJ2aWNlX1VuYXZhaWxhYmxlOiB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICAgICAgLy8gdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KG1lc3NhZ2UpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh7bWVzc2FnZVR5cGU6IHZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IG1lc3NhZ2V9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmFibGUgdG8gZW1pdCB2YWxpZGF0aW9uIG1lc3NhZ2UgLSBtZXNzYWdlIGtleSBOT1Qgc3VwcG9ydGVkIScsIHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmFsaWduXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICB9XG4gIHNob3dBZGRyZXNzSXNWYWxpZGF0ZWQoKSB7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSgnYWRkcmVzcy12YWxpZGF0ZWQnKTtcbiAgICB0aGlzLmVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfVmFsaWRhdGVkKTtcbiAgfVxuXG4gIGNoZWNrS2V5RG93bihldmVudCkge1xuICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgIC8vIGRvd24ga2V5LCBpbmNyZW1lbnQgc2VsZWN0ZWRJbmRleFxuICAgICAgY2FzZSA0MDpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3ZlQXJyb3dTZWxlY3RlZEluZGV4RG93bigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgLy8gdXAga2V5LCBkZWNyZW1lbnQgc2VsZWN0ZWRJbmRleFxuICAgICAgY2FzZSAzODpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3ZlQXJyb3dTZWxlY3RlZEluZGV4VXAoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyByaWdodCBhcnJvdyBrZXlcbiAgICAgIGNhc2UgMzk6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnNvcklzT25TdWdnZXN0aW9uTGlzdCgpKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24oZXZlbnQsIHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMudHlwZUFoZWFkV29yZCAmJiB0aGlzLnR5cGVBaGVhZElzU2hvd24oKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMuYnBUeXBlQWhlYWQpO1xuICAgICAgICAgICAgdGhpcy50eXBlQWhlYWRXb3JkID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gdGFiIGtleVxuICAgICAgY2FzZSA5OlxuICAgICAgICBpZiAoIXRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ2OlxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIGVudGVyIHByZXNzZWRcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnNvcklzT25TdWdnZXN0aW9uTGlzdCgpKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24oZXZlbnQsIHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICB9XG4gIH1cblxuICBjbGVhcldpZGdldCgpIHtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYXJTZWFyY2hUZXh0KCk7XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIHRoaXMucHJlZmlsbERhdGEgPSBudWxsO1xuICAgIC8vIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICB9XG5cbiAgY2xlYXJTZWFyY2hUZXh0KCkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICB9XG5cbiAgdHlwZUFoZWFkSXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5icFR5cGVBaGVhZCAmJiB0aGlzLmJwVHlwZUFoZWFkLmxlbmd0aCA+IDA7XG4gIH1cblxuICByZXNldEFycm93U2VsZWN0ZWRJbmRleCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxuXG4gIG1vdmVBcnJvd1NlbGVjdGVkSW5kZXhEb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggKyAxICE9PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4Kys7XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gICAgfVxuICB9XG5cbiAgbW92ZUFycm93U2VsZWN0ZWRJbmRleFVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggLSAxICE9PSAtMikge1xuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LS07XG4gICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4ICsgMSk7XG4gICAgfVxuICB9XG5cbiAgY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSW5kZXggPj0gMDtcbiAgfVxuXG4gIHNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24obmV3VmFsLCBvbGRWYWwpIHtcbiAgICBpZiAobmV3VmFsID09PSB1bmRlZmluZWQgfHwgdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmV3VmFsICE9PSAtMSkge1xuICAgICAgaWYgKG9sZFZhbCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSB0aGlzLnNlYXJjaFRleHQ7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnN0cmluZyk7XG4gICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLmxhc3RTZWFyY2hWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbWF5U2hvd0NsZWFyQnV0dG9uKCkge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFRleHQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGNsZWFySW5wdXQoZm9jdXM/LCBlbWl0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLmNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIGlmIChmb2N1cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ib3hOdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIC8vIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChudWxsKTtcbiAgICBpZihlbWl0KSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidCT1hfTlVNQkVSJyovIElucHV0TmFtZVR5cGUuQk9YX05VTUJFUik7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTdWdnZXN0aW9ucygpIHtcbiAgICB0aGlzLndvcmRMaXN0ID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNXb3JkTGlzdCA9IFtdO1xuICB9XG5cbiAgY2xlYXJUeXBlQWhlYWQoKSB7XG4gICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICB9XG5cbiAgY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKSB7XG4gICAgdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh7bWVzc2FnZVR5cGU6IG51bGwsIHRyYW5zbGF0ZWRNZXNzYWdlOiB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZX0pO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSA9IG51bGw7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0KHZhbHVlKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWU7XG4gIH1cblxuICBzZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xuICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gIH1cblxuICBjaGFuZ2VTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzdWdnZXN0aW9uTW91c2VMZWF2ZSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxuXG4gIHNob3dBZGRyZXNzTm90Rm91bmRNZXNzYWdlKCkge1xuICAgIC8vIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UoJ2FkZHJlc3Mtbm90LWZvdW5kJyk7XG4gICAgdGhpcy5lbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX05vdF9Gb3VuZCk7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIHJldHVybiAodGhpcy5sb2NhbGl0eSA9PT0gJycgfHwgdGhpcy5wb3N0YWxDb2RlID09PSAnJyB8fCB0aGlzLm1pbkxldmVsID4gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpO1xuICB9XG5cbiAgb25JbnB1dENsaWNrKCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2JveCBudW1iZXIgY2xpY2snKTsgfVxuICB9XG59XG4iXX0=
|