@tsi-developpement/tsi-shared-ui 1.8.25 → 1.8.27
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/esm2022/lib/consts/localization-key.mjs +2 -1
- package/esm2022/lib/services/validation/input-registry.service.mjs +4 -1
- package/esm2022/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.mjs +5 -1
- package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +3 -2
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +10 -1
- package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
- package/lib/consts/app-providers.d.ts +1 -1
- package/lib/consts/localization-key.d.ts +1 -0
- package/lib/services/validation/input-registry.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -9,5 +9,6 @@ export const LocalizationKeys = {
|
|
|
9
9
|
generatedSuccessfully: 'generatedSuccessfully',
|
|
10
10
|
payementsadded: 'payementsadded',
|
|
11
11
|
sentSuccessFully: 'sentSuccessFully',
|
|
12
|
+
noChangesDetected: 'tsi_form_no_changes_detected',
|
|
12
13
|
};
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi9jb25zdHMvbG9jYWxpemF0aW9uLWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBQztJQUMxQixpQkFBaUIsRUFBQyxtQkFBbUI7SUFDckMscUJBQXFCLEVBQUMsdUJBQXVCO0lBQzdDLG1CQUFtQixFQUFDLHFCQUFxQjtJQUN6QyxtQkFBbUIsRUFBQyxxQkFBcUI7SUFDekMsbUJBQW1CLEVBQUMscUJBQXFCO0lBQ3pDLGFBQWEsRUFBRSxlQUFlO0lBQzlCLHNCQUFzQixFQUFDLHdCQUF3QjtJQUMvQyxxQkFBcUIsRUFBQyx1QkFBdUI7SUFDN0MsY0FBYyxFQUFDLGdCQUFnQjtJQUMvQixnQkFBZ0IsRUFBQyxrQkFBa0I7SUFDbkMsaUJBQWlCLEVBQUUsOEJBQThCO0NBQ3BELENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTG9jYWxpemF0aW9uS2V5cz17XHJcbiAgICBzYXZlZFN1Y2Nlc3NmdWxseTonU2F2ZWRTdWNjZXNzZnVsbHknLFxyXG4gICAgcmV0cmlldmVkU3VjY2Vzc2Z1bGx5OidSZXRyaWV2ZWRTdWNjZXNzZnVsbHknLFxyXG4gICAgY3JlYXRlZFN1Y2Nlc3NmdWxseTonY3JlYXRlZFN1Y2Nlc3NmdWxseScsXHJcbiAgICB1cGRhdGVkU3VjY2Vzc2Z1bGx5Oid1cGRhdGVkU3VjY2Vzc2Z1bGx5JyxcclxuICAgIGRlbGV0ZWRTdWNjZXNzZnVsbHk6J2RlbGV0ZWRTdWNjZXNzZnVsbHknLFxyXG4gICAgY29uZmlybURlbGV0ZTogJ0NvbmZpcm1EZWxldGUnLFxyXG4gICAgY2FsY3VsYXRlZFN1Y2Nlc3NmdWxseTonY2FsY3VsYXRlZFN1Y2Nlc3NmdWxseScsXHJcbiAgICBnZW5lcmF0ZWRTdWNjZXNzZnVsbHk6J2dlbmVyYXRlZFN1Y2Nlc3NmdWxseScsXHJcbiAgICBwYXllbWVudHNhZGRlZDoncGF5ZW1lbnRzYWRkZWQnLFxyXG4gICAgc2VudFN1Y2Nlc3NGdWxseTonc2VudFN1Y2Nlc3NGdWxseScsXHJcbiAgICBub0NoYW5nZXNEZXRlY3RlZDogJ3RzaV9mb3JtX25vX2NoYW5nZXNfZGV0ZWN0ZWQnLFxyXG59Il19
|
|
@@ -13,6 +13,9 @@ export class InputRegistryService {
|
|
|
13
13
|
getAll() {
|
|
14
14
|
return Array.from(this._inputs);
|
|
15
15
|
}
|
|
16
|
+
hasAnyDirtyInput() {
|
|
17
|
+
return Array.from(this._inputs).some(input => input.isDirty);
|
|
18
|
+
}
|
|
16
19
|
resetDirtyStatusForAllInputs() {
|
|
17
20
|
const inputs = this.getAll();
|
|
18
21
|
if (!inputs?.length)
|
|
@@ -30,4 +33,4 @@ export class InputRegistryService {
|
|
|
30
33
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputRegistryService, decorators: [{
|
|
31
34
|
type: Injectable
|
|
32
35
|
}] });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcmVnaXN0cnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi9zZXJ2aWNlcy92YWxpZGF0aW9uL2lucHV0LXJlZ2lzdHJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0MsTUFBTSxPQUFPLG9CQUFvQjtJQURqQztRQUdVLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBZ0IsQ0FBQztLQThCM0M7SUE1QkMsUUFBUSxDQUFDLEtBQW1CO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBbUI7UUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsNEJBQTRCO1FBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU07WUFBRSxPQUFPO1FBRTVCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDOytHQS9CVSxvQkFBb0I7bUhBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHNpSW5wdXRCYXNlIH0gZnJvbSAnLi4vLi4vdHNpLWJhc2UvdHNpLWlucHV0LWJhc2UvdHNpLWlucHV0LWJhc2UuY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIElucHV0UmVnaXN0cnlTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBfaW5wdXRzID0gbmV3IFNldDxUc2lJbnB1dEJhc2U+KCk7XHJcblxyXG4gIHJlZ2lzdGVyKGlucHV0OiBUc2lJbnB1dEJhc2UpIHtcclxuICAgIHRoaXMuX2lucHV0cy5hZGQoaW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlcihpbnB1dDogVHNpSW5wdXRCYXNlKSB7XHJcbiAgICB0aGlzLl9pbnB1dHMuZGVsZXRlKGlucHV0KTtcclxuICB9XHJcblxyXG4gIGdldEFsbCgpOiBUc2lJbnB1dEJhc2VbXSB7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9pbnB1dHMpO1xyXG4gIH1cclxuXHJcbiAgaGFzQW55RGlydHlJbnB1dCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2lucHV0cykuc29tZShpbnB1dCA9PiBpbnB1dC5pc0RpcnR5KTtcclxuICB9XHJcblxyXG4gIHJlc2V0RGlydHlTdGF0dXNGb3JBbGxJbnB1dHMoKSB7XHJcbiAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmdldEFsbCgpO1xyXG4gICAgaWYgKCFpbnB1dHM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgaW5wdXRzKSB7XHJcbiAgICAgIGlucHV0LmlzRGlydHkgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5faW5wdXRzLmNsZWFyKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -642,6 +642,10 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
|
|
|
642
642
|
await this._presentationSettingService.loadPresentationSettings();
|
|
643
643
|
}
|
|
644
644
|
save() {
|
|
645
|
+
if (this.mode === Component_Modes.EDIT && !this._inputRegistry.hasAnyDirtyInput()) {
|
|
646
|
+
this._messageInfoService.warn(LocalizationKeys.noChangesDetected);
|
|
647
|
+
throw new Error('No changes detected');
|
|
648
|
+
}
|
|
645
649
|
let errorMessage = '';
|
|
646
650
|
this.requiredInputs = this._inputRegistry.getAll().filter(inp => inp.isRequired && inp.disabled === false);
|
|
647
651
|
this.faultyInputs = [];
|
|
@@ -726,4 +730,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
726
730
|
}], onSave: [{
|
|
727
731
|
type: Output
|
|
728
732
|
}] } });
|
|
729
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktZm9ybS1iYXNlL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJak8sT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBc0IsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakcsT0FBTyxFQUEwQixxQ0FBcUMsRUFBRSxtQkFBbUIsRUFBa0UsTUFBTSxpQkFBaUIsQ0FBQztBQUVyTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDelAsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDM0csT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxF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QUlGLFNBQVM7c0JBRFosS0FBSztnQkFjRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFTTyxNQUFNO3NCQUFsQixLQUFLO2dCQU9PLGFBQWE7c0JBQXpCLEtBQUs7Z0JBb0NJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cyc7XHJcbmltcG9ydCB7IENvbXBvbmVudF9Nb2RlcywgRm9ybVZhbGlkYXRpb25FcnJvciwgRm9ybVZhbGlkaXR5UmVzdWx0LCBNb2RlcyB9IGZyb20gJy4uLy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgQ29tYm9TdGF0dXNNb2RlbCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnREZXNjcmltaW5hdG9yLCBHZXRXb3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXF1ZXN0LCBQcmVzZW50YXRpb25TZXR0aW5nLCBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLCB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtL2Zvcm0tc3RhdGUnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLCBHZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZSwgSW5wdXRSZWdpc3RyeVNlcnZpY2UsIExheW91dEhlbHBlclNlcnZpY2UsIFByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSwgUHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UsIFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsIFdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IENvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS9jb2xvbm5lLXBlcnNvbm5hbGlzZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1TdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtL2Zvcm0tc3RhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVzZW50YXRpb24tc2V0dGluZy9wcmVzZW50YXRpb24tZGVzaWduZXItYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvYnV0dG9uLWNvbXBvbmVudHMvdHNpLWJ1dHRvbi90c2ktYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVkaXRhYmxlR3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvZWRpdGFibGUtZ3JpZC9lZGl0YWJsZS1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktY2hlY2tib3gvdHNpLWNoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtZ3JpZC90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaVZpZXdHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLXZpZXctZ3JpZC90c2ktdmlldy1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy90c2ktZm9ybS90c2ktZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljQ3J1ZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL3RzaS1nZW5lcmljLWNydWQvdHNpLWdlbmVyaWMtY3J1ZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbEZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL3RzaS1tb2RhbC1mb290ZXIvdHNpLW1vZGFsLWZvb3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWRpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBUc2lJbnB1dEJhc2UgfSBmcm9tICcuLi8uLi90c2ktaW5wdXQtYmFzZS90c2ktaW5wdXQtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXBwLWJhc2UvYXBwLWJhc2UuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXRzaS1mb3JtLWJhc2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBmb3JtRW5kcG9pbnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdXBlci5mb3JtRW5kcG9pbnQ7XHJcbiAgfTtcclxuICBwcml2YXRlIG92ZXJyaWRlIHNldCBmb3JtRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG4gICAgc3VwZXIuZm9ybUVuZHBvaW50ID0gYCR7ZW5kcG9pbnR9LyR7dGhpcy5pZH1gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBidXNpbmVzc0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1c2luZXNzQ2xhc3M7XHJcbiAgfVxyXG4gIFxyXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9idXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLmZvcm1FbmRwb2ludCA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgIHRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlPy5sb2FkRW50aXR5VmFsaWRhdGlvbkluZm9zKHRoaXMuX2J1c2luZXNzQ2xhc3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50RGVzY3JpbWluYXRvcjogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZFxyXG4gIHByaXZhdGUgZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuXHJcbiAgcHJvdGVjdGVkIHNldCBjb21wb25lbnREZXNjcmltaW5hdG9yKHZhbHVlOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yID0gdmFsdWVcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcm9wZXJ0eVZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdmFsdWUucHJvcGVydHlWYWx1ZVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlID0gdmFsdWUucHJvcGVydHlWYWx1ZVxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICAgIF07XHJcbiAgICAgIHRoaXMuYWRkSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCwgIXRoaXMuX2xheW91dEhlbHBlclNlcnZpY2U/LmlzRGVzaWduTW9kZSlcclxuXHJcbiAgICAgIC8vIHRoaXMuX3JlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0RGVjcmltaW5hdG9yKHJlcSkuc3Vic2NyaWJlKHtcclxuICAgICAgLy8gICBuZXh0OiBhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgIC8vICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHJlc3VsdC5wcm9wZXJ0eVZhbHVlO1xyXG4gICAgICAvLyAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCkpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgICAgLy8gICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgLy8gICAgICAgdGhpcy5mb3JtLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHJlc3VsdC5wcm9wZXJ0eVZhbHVlXHJcbiAgICAgIC8vICAgICAgIGlmICh0aGlzLmVudGl0eUluZm8/LmlzV29ya2Zsb3cpIHtcclxuICAgICAgLy8gICAgICAgICBhd2FpdCB0aGlzLmZvcm0uZ2V0V29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbih0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuaWQsIHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSlcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgICAgdGhpcy5hZGRJbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LCAhdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlKVxyXG4gICAgICAvLyAgIH0sXHJcbiAgICAgIC8vICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgLy8gICB9LFxyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0IGNvbXBvbmVudERlc2NyaW1pbmF0b3IoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvclxyXG4gIH1cclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpRm9ybUNvbXBvbmVudCkgZm9ybT86IFRzaUZvcm1Db21wb25lbnQ7XHJcblxyXG5cclxuICBAVmlld0NoaWxkKFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50KSBtb2RhbEZvb3Rlcj86IFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50IHwgYW55O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFRzaUNoZWNrYm94Q29tcG9uZW50KSBjaGVja2JveD86IEFycmF5PFRzaUNoZWNrYm94Q29tcG9uZW50PjtcclxuXHJcbiAgZmF1bHR5SW5wdXRzOiBGb3JtVmFsaWRpdHlSZXN1bHRbXSA9IFtdO1xyXG4gIGlzRm9ybVZhbGlkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gIHJlcXVpcmVkSW5wdXRzOiBUc2lJbnB1dEJhc2VbXSA9IFtdO1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oRWRpdGFibGVHcmlkQ29tcG9uZW50KSBlZGl0YWJsZUdyaWRDb21wb25lbnRzITogUXVlcnlMaXN0PEVkaXRhYmxlR3JpZENvbXBvbmVudD47XHJcblxyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpVmlld0dyaWRDb21wb25lbnQpIHZpZXdHcmlkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpVmlld0dyaWRDb21wb25lbnQ+O1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpIGdlbmVyaWNHcmlkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpR2VuZXJpY0dyaWRDb21wb25lbnQ+O1xyXG4gIC8vIEBWaWV3Q2hpbGRyZW4oVHNpR2VuZXJpY0NydWRDb21wb25lbnQpIGdlbmVyaWNDcnVkc0NvbXBvbmVudHMhOiBRdWVyeUxpc3Q8VHNpR2VuZXJpY0NydWRDb21wb25lbnQ+O1xyXG4gIGVkaXRhYmxlR3JpZENvbXBvbmVudHM6IEFycmF5PEVkaXRhYmxlR3JpZENvbXBvbmVudD4gPSBbXTtcclxuICB2aWV3R3JpZHNDb21wb25lbnRzOiBBcnJheTxUc2lWaWV3R3JpZENvbXBvbmVudD4gPSBbXTtcclxuICBnZW5lcmljR3JpZHNDb21wb25lbnRzOiBBcnJheTxUc2lHZW5lcmljR3JpZENvbXBvbmVudD4gPSBbXTtcclxuICBnZW5lcmljQ3J1ZHNDb21wb25lbnRzOiBBcnJheTxUc2lHZW5lcmljQ3J1ZENvbXBvbmVudD4gPSBbXTtcclxuXHJcblxyXG4gIGZvcm1SZWY/OiBOZ0Zvcm07XHJcbiAgaXNGb3JtRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdWRDb21wb25lbnQ6IGFueTtcclxuICBwcml2YXRlIF9tb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBJbnB1dHNcclxuICBASW5wdXQoKSBpdGVtRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG1vZGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RlO1xyXG4gIH1cclxuICBzZXQgbW9kZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBpZD86IHN0cmluZztcclxuICBwcml2YXRlIF9pc2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc2xvYWRpbmcgPSB2YWx1ZTtcclxuICAgIGNvbnNvbGUubG9nKCdpc2xvYWRpbmcgc2V0IHRvJywgdmFsdWUpO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NEaXNhYmxlZElucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzbG9hZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc2xvYWRpbmc7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGhlYWRlcj86IHN0cmluZztcclxuICBASW5wdXQoKSBzYXZpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpdGVtOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3N0YXR1cz86IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgX2FsbG93ZWRTdGF0dXM/OiBzdHJpbmdbXTtcclxuXHJcbiAgZ2V0IHN0YXR1cygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzdGF0dXModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5zdGF0dXMgIT09IHRoaXMuX3N0YXR1cykge1xyXG4gICAgICB0aGlzLmZvcm0uc3RhdHVzID0gdGhpcy5fc3RhdHVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IGFsbG93ZWRTdGF0dXModmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBcclxuICAgIHRoaXMuX2FsbG93ZWRTdGF0dXMgPSB2YWx1ZTtcclxuICBcclxuICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmFsbG93ZWRTdGF0dXMgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5hbGxvd2VkU3RhdHVzID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYWxsb3dlZFN0YXR1cygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dlZFN0YXR1cztcclxuICB9XHJcblxyXG4gIC8vYnNNb2RhbFJlZj86IGFueTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKVxyXG4gIHByaXZhdGUgX3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMilcclxuICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlID0gaW5qZWN0KExheW91dEhlbHBlclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlKVxyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX21lc3NhZ2VJbmZvU2VydmljZSA9IGluamVjdChUc2lOb3RpZmljYXRpb25TZXJ2aWNlKVxyXG4gIHByaXZhdGUgX2Vycm9yUmVzcG9uc2VNYW5hZ2VyID0gaW5qZWN0KEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UgPSBpbmplY3QoUHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UgPSBpbmplY3QoUHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSlcclxuICBwdWJsaWMgbG9jYWxpemU/ID0gaW5qZWN0KExvY2FsaXplUGlwZSlcclxuICBwdWJsaWMgX2lucHV0UmVnaXN0cnkgPSBpbmplY3QoSW5wdXRSZWdpc3RyeVNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfZm9ybVN0YXRlU2VydmljZSA9IGluamVjdChGb3JtU3RhdGVTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX2NvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZSA9IGluamVjdChDb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBkaXJlY3RpdmVFbGVtZW50czogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKVtdID0gW107XHJcbiAgcHJlc2VudGF0aW9uUmVxdWVzdDogUHJlc2VudGF0aW9uU2V0dGluZyA9IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICBfZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcclxuICBfc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxyXG4gIF9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXHJcbiAgX2FkZGVkRGlyZWN0aXZlQmFzZVN1YnNjcml0cGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXHJcbiAgLy8jcmVnaW9uIE91dHB1dHNcclxuICBAT3V0cHV0KCkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlPzogR2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2UgPSBpbmplY3QoR2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2UpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByZWY/OiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIGNvbmZpZz86IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2RSZWY/OiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgc3VwZXIoY2RSZWYpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgd29ya2Zsb3dJbmZvcm1hdGlvbj86IHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlXHJcbiAgY3VzdG9tRGF0YT86IGFueVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5faW5pdE1vZGFsUmVmKCk7XHJcbiAgICB0aGlzLmluaXRNb2RhbERhdGEoKTtcclxuICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmFkZGVkRGlyZWN0aXZlT2JzZXJ2YWJsZVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhLnRyZWF0ZWQpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eUluZm8gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmN1cnJlbnRXb3JrZmxvd0VudGl0eUluZm9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lICYmICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgdGhpcy5fYWRkZWREaXJlY3RpdmVCYXNlU3Vic2NyaXRwaW9uID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5hZGRlZERpcmVjdGl2ZU9ic2VydmFibGVcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5jdXJyZW50V29ya2Zsb3dFbnRpdHlJbmZvXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSAmJiAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIHRoaXMuX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uID0gdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUZvcm1TdWJqZWN0LnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEgJiYgZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVEZXNpZ25Nb2RlKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbk1vZGUoKSB7XHJcbiAgICB0aGlzLnJlbW92ZVRzaU1vZGFsRm9vdGVyKClcclxuICAgIHRoaXMuY3JlYXRlU2F2ZUJ1dHRvbigpO1xyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goaW5wdXQgPT4ge1xyXG4gICAgICBpbnB1dC5pbnNlcnRFbGVtZW50KCk7XHJcbiAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgaW5wdXQuc2VsZWN0QXBwcm9yaWF0ZUNvbHVtbnModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KTtcclxuICAgICAgfVxyXG4gICAgICBpbnB1dC5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KClcclxuICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQWN0aXZlU3Vic2NyaXRwaW9uKClcclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlID0gZmFsc2VcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICBdO1xyXG4gICAgY29uc29sZS5sb2coXCJjb3VudCBvZiBkaXJlY3RpdmVFbGVtZW50cyA9PiBcIiwgdGhpcy5kaXJlY3RpdmVFbGVtZW50cy5sZW5ndGgpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlPy5pc0Rlc2lnbk1vZGVcclxuICAgICAgJiYgIXRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgIC8vIHRoaXMucmVtb3ZlVHNpTW9kYWxGb290ZXIoKVxyXG4gICAgICAvLyB0aGlzLmNyZWF0ZVNhdmVCdXR0b24oKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICB0aGlzLmVudGl0eUluZm8gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmN1cnJlbnRXb3JrZmxvd0VudGl0eUluZm9cclxuICAgICAgfVxyXG4gICAgICAvLyBlbHNlIHtcclxuICAgICAgLy8gICB0aGlzLmVudGl0eUluZm8gPSBhd2FpdCB0aGlzLl9lbnRpdHlDb25maWdTZXJ2aWNlLmdldEVudGl0eUluZm9Gcm9tQ2FjaGUodGhpcy5idXNpbmVzc0NsYXNzKVxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9pbml0IGdlbmVyaWNDcnVkIHJlcG9ydGluZ1xyXG4gICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICB0aGlzLmZvcm0uZm9ybVJlZkNoYW5nZS5zdWJzY3JpYmUoZiA9PiB7XHJcbiAgICAgICAgaWYgKGYpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybVJlZiA9IGY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtLmlkID0gdGhpcy5pZDtcclxuICAgICAgdGhpcy5mb3JtLm1vZGUgPSB0aGlzLm1vZGVcclxuICAgICAgdGhpcy5mb3JtLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB0aGlzLmZvcm0uZm9ybU5hbWUgPSB0aGlzLmZvcm1OYW1lO1xyXG4gICAgICB0aGlzLmZvcm0uYnVzaW5lc3NDbGFzcyA9IHRoaXMuX2J1c2luZXNzQ2xhc3NcclxuICAgICAgdGhpcy5mb3JtLmRpc2FibGVkID0gdGhpcy5pc0Zvcm1EaXNhYmxlZDtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuZm9ybS5hbGxvd2VkU3RhdHVzID0gdGhpcy5fYWxsb3dlZFN0YXR1cztcclxuXHJcbiAgICAgIGlmICghdGhpcy5mb3JtLmlzRGVzY3JpbWluYXRvclZhbHVlU2V0KSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHdvcmtmbG93IGZvcm0gZGVzaWduXHJcbiAgICAgIHRoaXMuX3NhdmVXb3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtLm9uU3VibWl0Rm9ybVdvcmtmbG93Q29uZmlndXJhdGlvbi5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgbGV0IHdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb24gPSB0aGlzLmdldEZvcm1Xb3Jma2xvd1ByZXNlbnRhdGlvblNldHRpbmcoKTtcclxuICAgICAgICB0aGlzLmhpZGUod29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbilcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5vblN0YXR1c0NoYW5nZS5zdWJzY3JpYmUoKG5ld1ZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnN0YXR1cyA9IG5ld1ZhbHVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUpIHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tib3gpIHtcclxuICAgICAgICB0aGlzLmNoZWNrYm94LmZvckVhY2goYm94ID0+IHtcclxuICAgICAgICAgIGJveC5pbnB1dEZpZWxkID0gZmFsc2U7XHJcbiAgICAgICAgICBib3guY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0VHNpR3JpZHNSZWYoKSB7XHJcbiAgICB0aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0Vmlld0dyaWRzKClcclxuICAgIHRoaXMuZ2VuZXJpY0dyaWRzQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRHZW5lcmljR3JpZHMoKVxyXG4gICAgdGhpcy5lZGl0YWJsZUdyaWRDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEVkaXRhYmxlR3JpZHMoKVxyXG4gICAgdGhpcy5nZW5lcmljQ3J1ZHNDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEdlbmVyaWNDcnVkcygpXHJcbiAgfVxyXG5cclxuICBnZXRGb3JtV29yZmtsb3dQcmVzZW50YXRpb25TZXR0aW5nKCkge1xyXG4gICAgbGV0IHByZXNlbnRhdGlvblJlcXVlc3QgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcblxyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzOiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsW10gPSBbXVxyXG4gICAgbGV0IGF2YWlsYWJsZURpcmVjdGl2ZUVsZW1lbnRzID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50cy5maWx0ZXIoeCA9PlxyXG4gICAgICAhKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuc29tZSh5ID0+XHJcbiAgICAgICAgeS5ibG9ja05hbWUgPT09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgIXkuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbml0VHNpR3JpZHNSZWYoKVxyXG5cclxuICAgIGF2YWlsYWJsZURpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcclxuXHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0gdW5kZWZpbmVkXHJcblxyXG5cclxuICAgICAgbGV0IGdyaWRTdGF0ZSA9IFtcclxuICAgICAgICAuLi50aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljR3JpZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0NydWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHNcclxuICAgICAgXVxyXG4gICAgICAgIC5maW5kKHggPT4geC5pZCA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyIHx8ICgnZm9ybU5hbWUnIGluIHggJiYgeC5mb3JtTmFtZSA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKSlcclxuICAgICAgICA/LmdldFN0YXRlKCk7XHJcblxyXG4gICAgICBjb25maWd1cmF0aW9uID0gZ3JpZFN0YXRlID8gSlNPTi5zdHJpbmdpZnkoZ3JpZFN0YXRlKSA6IHVuZGVmaW5lZDtcclxuXHJcblxyXG4gICAgICBsZXQgb2JqZWN0OiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0ge1xyXG4gICAgICAgIGJsb2NrTmFtZTogZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyLFxyXG4gICAgICAgIGlzQmxvY2tWaXNpYmxlOiAhZGlyZWN0aXZlLnNob3dIaWRlQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZCxcclxuICAgICAgICB1aWQ6IHRoaXMuZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciA/PyBcIlwiKSxcclxuICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxyXG4gICAgICAgIGlzSW5wdXRFbmFibGVkOiAhZGlyZWN0aXZlLmRpc2FibGVkQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZFxyXG4gICAgICB9XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLnB1c2gob2JqZWN0KVxyXG4gICAgfSlcclxuXHJcbiAgICBwcmVzZW50YXRpb25SZXF1ZXN0LmNvbXBvbmVudElkZW50aWZlciA9IHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpO1xyXG4gICAgcHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscyA9IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzXHJcblxyXG4gICAgY29uc29sZS5sb2coXCJwcmVzZW50YXRpb25SZXF1ZXN0ID0+IFwiLCBwcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gICAgcmV0dXJuIHByZXNlbnRhdGlvblJlcXVlc3RcclxuICB9XHJcblxyXG5cclxuICBpc0RlbGV0ZU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5ERUxFVEU7XHJcbiAgfVxyXG4gIGlzU3VibWl0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAvL3JldHVybiAhdGhpcy5mb3JtUmVmPy5mb3JtPy52YWxpZCB8fCB0aGlzLnNhdmluZztcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgaXNDb25zdWx0TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkNPTlNVTFQ7XHJcbiAgfVxyXG5cclxuICBpc0R1cGxpY2F0ZU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEU7XHJcbiAgfVxyXG4gIGlzRWRpdE1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5FRElUO1xyXG4gIH1cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGluaXRNb2RhbERhdGEoKSB7XHJcbiAgICBzdXBlci5pbml0TW9kYWxEYXRhKClcclxuICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IHVuZGVmaW5lZFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvL2NoZWNrIGhhdmUgb3BlbmVkRGlhbG9nQ29uZmlnXHJcbiAgICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhICE9IG51bGwgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmN1ZENvbXBvbmVudCA9IHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnLmRhdGEuY3VkQ29tcG9uZW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF92ZXJpZnlNb2RhbERhdGEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSB1bmRlZmluZWRcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0TW9kYWxSZWYoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdmVyaWZ5TW9kYWxEYXRhKCkpIHtcclxuICAgICAgLy90aGlzLmJzTW9kYWxSZWYgPSB7aGlkZTogKCkgPT4gdGhpcy5vcGVuZWREaWFsb2dSZWYuZGVzdHJveSgpLGNsb3NlOiAodmFsOiBhbnkpPT57dGhpcy5vcGVuZWREaWFsb2dSZWYuY2xvc2UodmFsKX19XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vXHJcbiAgbChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMubG9jYWxpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiB0cmFpdGVyIG11bHRpcGxlIGNvbWJvXHJcbiAgYWxsQ29tYm9Mb2FkaW5nU3RhdHVzOiBBcnJheTxDb21ib1N0YXR1c01vZGVsPiA9IFtdO1xyXG4gIGFyZUFsbENvbWJvTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvY2Vzc0NvbWJvSW5pdEV2ZW50KGNvbWJvU3RhdHVzOiBDb21ib1N0YXR1c01vZGVsKSB7XHJcbiAgICBpZiAoIXRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLmZpbmQodSA9PiB1LnVpZCA9PSBjb21ib1N0YXR1cy51aWQpKVxyXG4gICAgICB0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5wdXNoKGNvbWJvU3RhdHVzKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NDb21ib0lzTG9hZGVkRXZlbnQoY29tYm9TdGF0dXM6IENvbWJvU3RhdHVzTW9kZWwpIHtcclxuICAgIGxldCBjb21ib1MgPSB0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5maW5kKHUgPT4gdS51aWQgPT0gY29tYm9TdGF0dXMudWlkKTtcclxuICAgIGlmIChjb21ib1MgIT0gbnVsbCAmJiBjb21ib1MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbWJvUy5pc0RhdGFMb2FkZWQgPSBjb21ib1N0YXR1cy5pc0RhdGFMb2FkZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFyZUFsbENvbWJvTG9hZGVkRm4oKTtcclxuICB9XHJcblxyXG4gIGFyZUFsbENvbWJvTG9hZGVkRm4oKTogdm9pZCB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMubGVuZ3RoID4gMClcclxuICAgICAgdGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMuZm9yRWFjaCh1ID0+IHtcclxuICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdS5pc0RhdGFMb2FkZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgZWxzZSByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFyZUFsbENvbWJvTG9hZGVkID0gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgbmV3IG1vZGFsIGhhbmRsaW5nIG1ldGhvZCAocmVzb2x2ZUZpY2hlKSBpbnN0ZWFkLlxyXG4gKiBUaGlzIG1ldGhvZCBkaXJlY3RseSBtYW5pcHVsYXRlcyB0aGUgZGlhbG9nIHJlZmVyZW5jZSBhbmQgbWF5IGxlYWQgdG8gaW5jb25zaXN0ZW50IGJlaGF2aW9yLlxyXG4gKi9cclxuXHJcbiAgaGlkZSh2YWw/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSBudWxsICYmIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodmFsID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuZWREaWFsb2dSZWYuZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3BlbmVkRGlhbG9nUmVmLmNsb3NlKHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc29sdmVGaWNoZSh2YWw/OiBhbnksIGFwaVJlc3BvbnNlPzogYW55KSB7XHJcbiAgICB0aGlzLl9pbnB1dFJlZ2lzdHJ5LnJlc2V0RGlydHlTdGF0dXNGb3JBbGxJbnB1dHMoKTtcclxuXHJcbiAgICBjb25zdCBoYXNVaWQgPSBhcGlSZXNwb25zZT8udWlkICE9IG51bGw7XHJcblxyXG4gICAgY29uc3QgaXNDcmVhdGVPckR1cGxpY2F0ZSA9XHJcbiAgICAgIHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuQ1JFQVRFIHx8XHJcbiAgICAgIHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuRFVQTElDQVRFO1xyXG5cclxuICAgIGNvbnN0IGlzRWRpdGFibGVNb2RlID1cclxuICAgICAgaXNDcmVhdGVPckR1cGxpY2F0ZSB8fCB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkVESVQ7XHJcblxyXG4gICAgaWYgKGhhc1VpZCAmJiBpc0VkaXRhYmxlTW9kZSkge1xyXG4gICAgICB0aGlzLl9mb3JtU3RhdGVTZXJ2aWNlLmRhdGFTYXZlZCQubmV4dChhcGlSZXNwb25zZS51aWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNVaWQgJiYgaXNDcmVhdGVPckR1cGxpY2F0ZSkge1xyXG4gICAgICB0aGlzLmlkID0gYXBpUmVzcG9uc2UudWlkO1xyXG4gICAgICB0aGlzLm1vZGUgPSBDb21wb25lbnRfTW9kZXMuRURJVDtcclxuXHJcbiAgICAgIHRoaXMuY2RSZWY/LmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uaWQgPSB0aGlzLmlkO1xyXG4gICAgICAgIHRoaXMuZm9ybS5tb2RlID0gdGhpcy5tb2RlO1xyXG4gICAgICAgIHRoaXMuZm9ybS5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgICB0aGlzLnJlZnJlc2hXb3JrZmxvd0luZm9ybWF0aW9uKHRoaXMuaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVmcmVzaExpc3QgPSBpc0VkaXRhYmxlTW9kZSB8fCB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkRFTEVURTtcclxuICAgIGlmKHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnKXtcclxuICAgICAgdGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YSA/Pz0ge307XHJcbiAgICAgIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnLmRhdGEucmVmcmVzaExpc3QgPSByZWZyZXNoTGlzdDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX2Zvcm1TdGF0ZVNlcnZpY2UuY2xvc2VNb2RhbCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaGlkZShhcGlSZXNwb25zZSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaFdvcmtmbG93SW5mb3JtYXRpb24oaWQgPzogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVxdWVzdDogR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCA9IG5ldyBHZXRXb3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXF1ZXN0KCk7XHJcbiAgICByZXF1ZXN0LmNsYXNzTmFtZSA9IHRoaXMuYnVzaW5lc3NDbGFzc1xyXG4gICAgcmVxdWVzdC51aWRPYmpldCA9IGlkO1xyXG4gICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lID0gdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lXHJcbiAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgPSB0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWVcclxuICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0Q3VycmVudEVudGl0eVdvcmtsZm93SW5zdGFuY2VJbmZvcm1hdGlvbihyZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0ud29ya2Zsb3dJbmZvcm1hdGlvbiA9IHJlc3BvbnNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjooZXJyb3IpID0+e1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3aGlsZSBnZXR0aW5nIHdvcmtmbG93SW5mb3JtYXRpb25cIiwgZXJyb3IpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vI2VuZHJlZ2lvbiB0cmFpdGVyIG11bHRpcGxlIGNvbWJvXHJcblxyXG4gIGdldFdvcmtmbG93RXRhdEZvcm0oKSB7XHJcbiAgICBsZXQgd29ya2Zsb3dFdGF0Rm9ybSA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dFdGF0Rm9ybUZvckN1cnJlbnRGb3JtXHJcbiAgICAgID8uZmluZCh4ID0+IHgudWlkID09IHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dFdGF0KVxyXG5cclxuICAgIGlmICh3b3JrZmxvd0V0YXRGb3JtKSB7XHJcbiAgICAgIGxldCB3b3JrZmxvd0V0YXQgPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLm1hcFdvcmtmbG93RXRhdEZvcm1Ub1ByZXNlbnRhdGlvblNldHRpbmcoXHJcbiAgICAgICAgd29ya2Zsb3dFdGF0Rm9ybT8ud29ya2Zsb3dFdGF0c0Zvcm1zXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gd29ya2Zsb3dFdGF0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIFByZXNlbnRhdGlvbiBTZXR0aW5nc1xyXG4gIGFkZElucHV0cyhcclxuICAgIHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcsXHJcbiAgICBhcHBseUdyaWRDb25maWc6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgd29ya2Zsb3dFdGF0PzogUHJlc2VudGF0aW9uU2V0dGluZyxcclxuICAgIGRpcmVjdGl2ZUVsZW1lbnRzOiAoUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpW10gPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzXHJcbiAgKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCghd29ya2Zsb3dFdGF0IHx8IHdvcmtmbG93RXRhdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5sZW5ndGggPT0gMClcclxuICAgICAgJiYgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uXHJcbiAgICAgICYmIHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dFdGF0KSB7XHJcbiAgICAgIHdvcmtmbG93RXRhdCA9IHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaGFzUHJlc2VudGF0aW9uUmVxdWVzdCA9IHByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5sZW5ndGggPiAwO1xyXG5cclxuXHJcbiAgICBpZiAoaGFzUHJlc2VudGF0aW9uUmVxdWVzdCkge1xyXG4gICAgICBkaXJlY3RpdmVFbGVtZW50cyA9IGRpcmVjdGl2ZUVsZW1lbnRzLmZpbHRlcih4ID0+XHJcbiAgICAgICAgcHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uc29tZShcclxuICAgICAgICAgIHkgPT4geS5ibG9ja05hbWUgPT09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgKHkuaXNCbG9ja1Zpc2libGUgPT0gdW5kZWZpbmVkIHx8IHkuaXNCbG9ja1Zpc2libGUgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgJiYgeC50cmVhdGVkID09IGZhbHNlXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKGRpcmVjdGl2ZSA9PiB7XHJcblxyXG4gICAgICBjb25zdCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0gcHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuICAgICAgaWYgKHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPT0gdW5kZWZpbmVkIHx8IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGUpIHtcclxuXHJcbiAgICAgICAgbGV0IHdvcmZrZmxvd0V0YXRGb3JtID0gdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKCk7XHJcblxyXG4gICAgICAgIGlmICh3b3Jma2Zsb3dFdGF0Rm9ybSkge1xyXG4gICAgICAgICAgbGV0IHdvcmtmbG93Q29uZmlnID0gd29yZmtmbG93RXRhdEZvcm0ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgICAgICBpZiAoIXdvcmtmbG93Q29uZmlnKSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiAod29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdW5kZWZpbmVkIHx8IHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHRydWUpKSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmUuZGlzYWJsZUlucHV0cygpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmFkZENoZWNrYm94ZXNUb0lucHV0cyh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc0Rpc2FibGVkSW5wdXRzKHByZXNlbnRhdGlvblJlcXVlc3QsIGRpcmVjdGl2ZUVsZW1lbnRzKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFbXB0eUFuY2VzdG9yc0Zyb21FbGVtZW50cygpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBwcm9jZXNzRGlzYWJsZWRJbnB1dHMocHJlc2VudGF0aW9uUmVxdWVzdDogUHJlc2VudGF0aW9uU2V0dGluZywgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IHRoaXMuZGlyZWN0aXZlRWxlbWVudHMpIHtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlPy5pc0Rlc2lnbk1vZGUgfHwgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCBoYXNQcmVzZW50YXRpb25SZXF1ZXN0ID0gcHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/Lmxlbmd0aCA+IDA7XHJcblxyXG4gICAgaWYgKGhhc1ByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgZGlyZWN0aXZlRWxlbWVudHMgPSBkaXJlY3RpdmVFbGVtZW50cy5maWx0ZXIoeCA9PlxyXG4gICAgICAgIHByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LnNvbWUoXHJcbiAgICAgICAgICB5ID0+IHkuYmxvY2tOYW1lID09PSB4LnByZXNlbnRhdGlvbkRlc2lnbmVyICYmIHkuaXNCbG9ja1Zpc2libGVcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IHdvcmZrZmxvd0V0YXRGb3JtID0gdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKClcclxuICAgIGRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKGRpcmVjdGl2ZSA9PiB7XHJcblxyXG4gICAgICBsZXQgd29ya2Zsb3dDb25maWcgPSB3b3Jma2Zsb3dFdGF0Rm9ybT8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgIGlmICh3b3JrZmxvd0NvbmZpZyAmJiAhd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgJiYgKHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlID8/IHRydWUpKSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmRpc2FibGVJbnB1dHMoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRW1wdHlBbmNlc3RvcnNGcm9tRWxlbWVudHMoKSB7XHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKS5mb3JFYWNoKHMgPT4gcy5yZW1vdmVFbXB0eUFuY2VzdG9ycyhzPy50ZW1wVGVtcGxhdGVQYXJlbnROb2RlKSlcclxuICAgIC8vIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGJsb2NrTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGJsb2NrTmFtZSk/LnVpZFxyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpIHtcclxuICAgIC8vIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgLy8gICByZXR1cm4gYCR7dGhpcy5fbXlOYW1lKCl9XyR7dGhpcy5kZXNjcmltaW5hdG9yVmFsdWV9YFxyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIHRoaXMuX215TmFtZSgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVQcm9wZXJ0aWVzKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuaW5pdFRzaUdyaWRzUmVmKClcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSwgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuXHJcbiAgICBpZiAoIXRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzOiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsW10gPSBbXVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xyXG5cclxuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWRcclxuXHJcblxyXG4gICAgICBsZXQgZ3JpZFN0YXRlID0gW1xyXG4gICAgICAgIC4uLnRoaXMudmlld0dyaWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljQ3J1ZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50c1xyXG4gICAgICBdXHJcbiAgICAgICAgLmZpbmQoeCA9PiB4LmlkID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgfHwgKCdmb3JtTmFtZScgaW4geCAmJiB4LmZvcm1OYW1lID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpKVxyXG4gICAgICAgID8uZ2V0U3RhdGUoKTtcclxuXHJcbiAgICAgIGNvbmZpZ3VyYXRpb24gPSBncmlkU3RhdGUgPyBKU09OLnN0cmluZ2lmeShncmlkU3RhdGUpIDogdW5kZWZpbmVkO1xyXG5cclxuXHJcbiAgICAgIGxldCBvYmplY3Q6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB7XHJcbiAgICAgICAgYmxvY2tOYW1lOiBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIsXHJcbiAgICAgICAgaXNCbG9ja1Zpc2libGU6ICFkaXJlY3RpdmUuc2hvd0hpZGVDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkLFxyXG4gICAgICAgIHVpZDogdGhpcy5nZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyID8/IFwiXCIpLFxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb25cclxuICAgICAgfVxyXG4gICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5wdXNoKG9iamVjdClcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LmNvbXBvbmVudElkZW50aWZlciA9IHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpO1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMgPSBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsc1xyXG5cclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZVxyXG5cclxuICAgIGlmICh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkICE9IG51bGwgJiYgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UudXBkYXRlUHJlc2VudGF0aW9uU2V0dGluZyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QsIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NBZnRlclNhdmVDb25maWd1cmF0aW9uKClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmNyZWF0ZVByZXNlbnRhdGlvblNldHRpbmcodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzQWZ0ZXJTYXZlQ29uZmlndXJhdGlvbigpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXIuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NTaW5nbGVFbGVtZW50KGRpcmVjdGl2ZTogUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpIHtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuXHJcbiAgICBpZiAocHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZSkge1xyXG5cclxuICAgICAgbGV0IHdvcmZrZmxvd0V0YXRGb3JtID0gdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKCk7XHJcblxyXG4gICAgICBpZiAod29yZmtmbG93RXRhdEZvcm0pIHtcclxuICAgICAgICBsZXQgd29ya2Zsb3dDb25maWcgPSB3b3Jma2Zsb3dFdGF0Rm9ybS5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuICAgICAgICBpZiAoIXdvcmtmbG93Q29uZmlnKSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiAod29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdW5kZWZpbmVkIHx8IHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHRydWUpKSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmRpc2FibGVJbnB1dHMoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICBkaXJlY3RpdmUuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbilcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZUZyb21BY3RpdmVTdWJzY3JpdHBpb24oKSB7XHJcbiAgICBpZiAodGhpcy5fZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9zYXZlV29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvblN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9zYXZlV29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uKSB7XHJcbiAgICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fYWRkZWREaXJlY3RpdmVCYXNlU3Vic2NyaXRwaW9uKSB7XHJcbiAgICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlQmFzZVN1YnNjcml0cGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVUc2lNb2RhbEZvb3RlcigpIHtcclxuICAgIGNvbnN0IHRzaU1vZGFsRm9vdGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInRzaS1tb2RhbC1mb290ZXJcIilcclxuXHJcbiAgICBpZiAodHNpTW9kYWxGb290ZXIgJiYgdHNpTW9kYWxGb290ZXIubGFzdENoaWxkKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyPy5yZW1vdmVDaGlsZCh0c2lNb2RhbEZvb3RlciwgdHNpTW9kYWxGb290ZXIubGFzdENoaWxkKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2F2ZUJ1dHRvbigpIHtcclxuICAgIGNvbnN0IHRzaUJ1dHRvblJlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWY/LmNyZWF0ZUNvbXBvbmVudChUc2lCdXR0b25Db21wb25lbnQpO1xyXG4gICAgdHNpQnV0dG9uUmVmPy5zZXRJbnB1dCgndGV4dCcsICdzaGFyZWRfdHNpX2NvbXBvbmVudF9zYXZlX2NvbmZpZ19zaG93X2hpZGUnKTtcclxuICAgIHRzaUJ1dHRvblJlZj8uc2V0SW5wdXQoJ2ljb24nLCAnc2F2ZScpO1xyXG5cclxuICAgIHRzaUJ1dHRvblJlZiEuaW5zdGFuY2Uub25DbGljay5lbWl0ID0gKCkgPT4gdGhpcy5zYXZlUHJvcGVydGllcygpO1xyXG5cclxuICAgIGNvbnN0IHRzaUZvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwidHNpLWZvcm1cIilcclxuXHJcbiAgICBpZiAodHNpRm9ybSkge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlcj8uYXBwZW5kQ2hpbGQodHNpRm9ybSwgdHNpQnV0dG9uUmVmPy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3NBZnRlclNhdmVDb25maWd1cmF0aW9uKCkge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgdGhpcy5oaWRlKClcclxuICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpXHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IGZhbHNlXHJcbiAgICAvLyB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmN1cnJlbnRGb3JtTmFtZSA9IHVuZGVmaW5lZFxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUZvcm1TdWJqZWN0Lm5leHQoZmFsc2UpXHJcbiAgICBhd2FpdCB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5sb2FkUHJlc2VudGF0aW9uU2V0dGluZ3MoKTtcclxuICB9XHJcblxyXG4gIHNhdmUoKTogdm9pZCB7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICB0aGlzLnJlcXVpcmVkSW5wdXRzID0gdGhpcy5faW5wdXRSZWdpc3RyeS5nZXRBbGwoKS5maWx0ZXIoaW5wID0+IGlucC5pc1JlcXVpcmVkICYmIGlucC5kaXNhYmxlZCA9PT0gZmFsc2UpO1xyXG4gICAgdGhpcy5mYXVsdHlJbnB1dHMgPSBbXTtcclxuICAgIHRoaXMuaXNGb3JtVmFsaWQgPSB0aGlzLnJlcXVpcmVkSW5wdXRzLmV2ZXJ5KGlucHV0ID0+IGlucHV0LmlzVmFsaWQoKS5pc1ZhbGlkID09PSB0cnVlKVxyXG5cclxuICAgIHRoaXMucmVxdWlyZWRJbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAgIGxldCBmdnIgPSBpbnB1dC5pc1ZhbGlkKCk7XHJcbiAgICAgIGlmIChmdnIuaXNWYWxpZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLmZhdWx0eUlucHV0cy5wdXNoKGZ2cilcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy5pc0Zvcm1WYWxpZCA9PT0gZmFsc2UgJiYgdGhpcy5mYXVsdHlJbnB1dHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmZhdWx0eUlucHV0cylcclxuICAgICAgbGV0IGZhdWx0eUlucHV0c05hbWVzID0gXCJcIjtcclxuICAgICAgdGhpcy5mYXVsdHlJbnB1dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuZmF1bHR5SW5wdXRzLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgICBmYXVsdHlJbnB1dHNOYW1lcyArPSBgJHtpdGVtLmlucHV0TmFtZX0uIGBcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBmYXVsdHlJbnB1dHNOYW1lcyArPSBgJHtpdGVtLmlucHV0TmFtZX0sIGBcclxuICAgICAgfSlcclxuICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgPSBmYXVsdHlJbnB1dHNOYW1lcy5yZXBsYWNlKC8sJC8sICcnKTtcclxuICAgICAgaWYgKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuUmVxdWlyZWQpKSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUluZm9TZXJ2aWNlLndhcm4oZmF1bHR5SW5wdXRzTmFtZXMsIHRoaXMubG9jYWxpemU/LnRyYW5zZm9ybSgndHNpX2Zvcm1fYmFzZV9hdXRvX3ZhbGlkYXRpb25fcmVxdWlyZWRfZmllbGRfdGl0bGUnKSlcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgTGVzIGNoYW1wcyAke2ZhdWx0eUlucHV0c05hbWVzfSBzb250IG9ibGlnYXRvaXJlLmA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5mYXVsdHlJbnB1dHMuc29tZShmaSA9PiBmaS5lcnJvciA9PT0gRm9ybVZhbGlkYXRpb25FcnJvci5NYXhMZW5ndGgpKSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUluZm9TZXJ2aWNlLndhcm4oYFxyXG4gICAgICAgICAgJHt0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX3RoZV9maWVsZCcpfVxyXG4gICAgICAgICAgJHt0aGlzLmZhdWx0eUlucHV0c1swXS5pbnB1dE5hbWV9IFxyXG4gICAgICAgICAgJHt0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX21heF9sZW5ndGgnKX1cclxuICAgICAgICAgICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uZGF0YX0gJHt0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX21heF9sZW5ndGhfY2hhcnMnKX1gLFxyXG4gICAgICAgICAgdGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2ZpZWxkX3RpdGxlJykpXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYExlIGNoYW1wICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uaW5wdXROYW1lfSBuZSBkb2l0IHBhcyBkw6lwYXNzZXIgJHt0aGlzLmZhdWx0eUlucHV0c1swXS5kYXRhfSBjYXJhY3TDqHJlcy5gO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuT3V0T2ZSYW5nZSkpIHtcclxuICAgICAgICAvL3RvIGRvXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYExlIGNoYW1wICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uaW5wdXROYW1lfSBkb2l0IMOqdHJlIGRhbnMgbCdpbnRlcnZhbGxlLmA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlKHsgaXNWYWxpZDogZmFsc2UsIGlzU3VibWl0dGVkOiB0cnVlIH0pO1xyXG5cclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVGb3JtU3RhdGUoeyBpc1ZhbGlkOiB0cnVlLCBpc1N1Ym1pdHRlZDogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybVN0YXRlKGZvcm1TdGF0ZTogRm9ybVN0YXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fZ2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2UudXBkYXRlRm9ybVN0YXRlKGZvcm1TdGF0ZSk7XHJcblxyXG4gICAgdGhpcy5lZGl0YWJsZUdyaWRDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEVkaXRhYmxlR3JpZHMoKTtcclxuICAgIHRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50cy5mb3JFYWNoKChlKSA9PiBlLnVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGUpKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjxwPnRzaS1mb3JtLWJhc2Ugd29ya3MhPC9wPlxyXG4iXX0=
|
|
733
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktZm9ybS1iYXNlL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJak8sT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBc0IsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakcsT0FBTyxFQUEwQixxQ0FBcUMsRUFBRSxtQkFBbUIsRUFBa0UsTUFBTSxpQkFBaUIsQ0FBQztBQUVyTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDelAsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDM0csT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxF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RkQ4QmEsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLG1CQUFtQjt1SkEwRUEsSUFBSTtzQkFBaEMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBR1MsV0FBVztzQkFBOUMsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBRUUsUUFBUTtzQkFBM0MsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBdUJ6QixVQUFVO3NCQUFsQixLQUFLO2dCQUdGLElBQUk7c0JBRFAsS0FBSztnQkFRRyxFQUFFO3NCQUFWLEtBQUs7Z0JBSUYsU0FBUztzQkFEWixLQUFLO2dCQWNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQVNPLE1BQU07c0JBQWxCLEtBQUs7Z0JBT08sYUFBYTtzQkFBekIsS0FBSztnQkFvQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50X01vZGVzLCBGb3JtVmFsaWRhdGlvbkVycm9yLCBGb3JtVmFsaWRpdHlSZXN1bHQsIE1vZGVzIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBDb21ib1N0YXR1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudERlc2NyaW1pbmF0b3IsIEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3QsIFByZXNlbnRhdGlvblNldHRpbmcsIFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwsIHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0vZm9ybS1zdGF0ZSc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsIEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlLCBJbnB1dFJlZ2lzdHJ5U2VydmljZSwgTGF5b3V0SGVscGVyU2VydmljZSwgUHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLCBQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSwgV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZHluYW1pYy1mb3JtL2NvbG9ubmUtcGVyc29ubmFsaXNlZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0vZm9ybS1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ByZXNlbnRhdGlvbi1zZXR0aW5nL3ByZXNlbnRhdGlvbi1kZXNpZ25lci1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9idXR0b24tY29tcG9uZW50cy90c2ktYnV0dG9uL3RzaS1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRWRpdGFibGVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy9lZGl0YWJsZS1ncmlkL2VkaXRhYmxlLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9pbnB1dC1jb21wb25lbnRzL3RzaS1jaGVja2JveC90c2ktY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktZ2VuZXJpYy1ncmlkL3RzaS1nZW5lcmljLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpVmlld0dyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktdmlldy1ncmlkL3RzaS12aWV3LWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL3RzaS1mb3JtL3RzaS1mb3JtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtY3J1ZC90c2ktZ2VuZXJpYy1jcnVkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaU1vZGFsRm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvdHNpLW1vZGFsLWZvb3Rlci90c2ktbW9kYWwtZm9vdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlLCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UgfSBmcm9tICcuLi8uLi8uLi90c2ktZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IFRzaUlucHV0QmFzZSB9IGZyb20gJy4uLy4uL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9hcHAtYmFzZS9hcHAtYmFzZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdHNpLWZvcm0tYmFzZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcbiAgLy8jcmVnaW9uIHByb3BlcnRpZXNcclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGZvcm1FbmRwb2ludCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN1cGVyLmZvcm1FbmRwb2ludDtcclxuICB9O1xyXG4gIHByaXZhdGUgb3ZlcnJpZGUgc2V0IGZvcm1FbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcbiAgICBzdXBlci5mb3JtRW5kcG9pbnQgPSBgJHtlbmRwb2ludH0vJHt0aGlzLmlkfWA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVzaW5lc3NDbGFzcztcclxuICB9XHJcbiAgXHJcbiAgcHVibGljIG92ZXJyaWRlIHNldCBidXNpbmVzc0NsYXNzKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2J1c2luZXNzQ2xhc3MgPSB2YWx1ZTtcclxuICAgIHRoaXMuZm9ybUVuZHBvaW50ID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgdGhpcy5fZ2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2U/LmxvYWRFbnRpdHlWYWxpZGF0aW9uSW5mb3ModGhpcy5fYnVzaW5lc3NDbGFzcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb21wb25lbnREZXNjcmltaW5hdG9yOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkXHJcbiAgcHJpdmF0ZSBkZXNjcmltaW5hdG9yVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG5cclxuICBwcm90ZWN0ZWQgc2V0IGNvbXBvbmVudERlc2NyaW1pbmF0b3IodmFsdWU6IENvbXBvbmVudERlc2NyaW1pbmF0b3IgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2NvbXBvbmVudERlc2NyaW1pbmF0b3IgPSB2YWx1ZVxyXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLnByb3BlcnR5VmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZS5wcm9wZXJ0eVZhbHVlXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUgPSB2YWx1ZS5wcm9wZXJ0eVZhbHVlXHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLFxyXG4gICAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgICAgXTtcclxuICAgICAgdGhpcy5hZGRJbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LCAhdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlKVxyXG5cclxuICAgICAgLy8gdGhpcy5fcmVwb3J0aW5nU2VydmljZS5nZXRSZXBvcnREZWNyaW1pbmF0b3IocmVxKS5zdWJzY3JpYmUoe1xyXG4gICAgICAvLyAgIG5leHQ6IGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgLy8gICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlID0gcmVzdWx0LnByb3BlcnR5VmFsdWU7XHJcbiAgICAgIC8vICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgICAvLyAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAvLyAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gcmVzdWx0LnByb3BlcnR5VmFsdWVcclxuICAgICAgLy8gICAgICAgaWYgKHRoaXMuZW50aXR5SW5mbz8uaXNXb3JrZmxvdykge1xyXG4gICAgICAvLyAgICAgICAgIGF3YWl0IHRoaXMuZm9ybS5nZXRXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5pZCwgdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lLFxyXG4gICAgICAvLyAgICAgICAgICAgdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lKVxyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgICB0aGlzLmFkZElucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QsICF0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlPy5pc0Rlc2lnbk1vZGUpXHJcbiAgICAgIC8vICAgfSxcclxuICAgICAgLy8gICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAvLyAgIH0sXHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgY29tcG9uZW50RGVzY3JpbWluYXRvcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yXHJcbiAgfVxyXG5cclxuXHJcbiAgQFZpZXdDaGlsZChUc2lGb3JtQ29tcG9uZW50KSBmb3JtPzogVHNpRm9ybUNvbXBvbmVudDtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpTW9kYWxGb290ZXJDb21wb25lbnQpIG1vZGFsRm9vdGVyPzogVHNpTW9kYWxGb290ZXJDb21wb25lbnQgfCBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpQ2hlY2tib3hDb21wb25lbnQpIGNoZWNrYm94PzogQXJyYXk8VHNpQ2hlY2tib3hDb21wb25lbnQ+O1xyXG5cclxuICBmYXVsdHlJbnB1dHM6IEZvcm1WYWxpZGl0eVJlc3VsdFtdID0gW107XHJcbiAgaXNGb3JtVmFsaWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcbiAgcmVxdWlyZWRJbnB1dHM6IFRzaUlucHV0QmFzZVtdID0gW107XHJcbiAgLy8gQFZpZXdDaGlsZHJlbihFZGl0YWJsZUdyaWRDb21wb25lbnQpIGVkaXRhYmxlR3JpZENvbXBvbmVudHMhOiBRdWVyeUxpc3Q8RWRpdGFibGVHcmlkQ29tcG9uZW50PjtcclxuXHJcbiAgLy8gQFZpZXdDaGlsZHJlbihUc2lWaWV3R3JpZENvbXBvbmVudCkgdmlld0dyaWRzQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxUc2lWaWV3R3JpZENvbXBvbmVudD47XHJcbiAgLy8gQFZpZXdDaGlsZHJlbihUc2lHZW5lcmljR3JpZENvbXBvbmVudCkgZ2VuZXJpY0dyaWRzQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxUc2lHZW5lcmljR3JpZENvbXBvbmVudD47XHJcbiAgLy8gQFZpZXdDaGlsZHJlbihUc2lHZW5lcmljQ3J1ZENvbXBvbmVudCkgZ2VuZXJpY0NydWRzQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxUc2lHZW5lcmljQ3J1ZENvbXBvbmVudD47XHJcbiAgZWRpdGFibGVHcmlkQ29tcG9uZW50czogQXJyYXk8RWRpdGFibGVHcmlkQ29tcG9uZW50PiA9IFtdO1xyXG4gIHZpZXdHcmlkc0NvbXBvbmVudHM6IEFycmF5PFRzaVZpZXdHcmlkQ29tcG9uZW50PiA9IFtdO1xyXG4gIGdlbmVyaWNHcmlkc0NvbXBvbmVudHM6IEFycmF5PFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50PiA9IFtdO1xyXG4gIGdlbmVyaWNDcnVkc0NvbXBvbmVudHM6IEFycmF5PFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50PiA9IFtdO1xyXG5cclxuXHJcbiAgZm9ybVJlZj86IE5nRm9ybTtcclxuICBpc0Zvcm1EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1ZENvbXBvbmVudDogYW55O1xyXG4gIHByaXZhdGUgX21vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIGl0ZW1EaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgbW9kZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX21vZGU7XHJcbiAgfVxyXG4gIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX21vZGUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGlkPzogc3RyaW5nO1xyXG4gIHByaXZhdGUgX2lzbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc2xvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzbG9hZGluZyA9IHZhbHVlO1xyXG4gICAgY29uc29sZS5sb2coJ2lzbG9hZGluZyBzZXQgdG8nLCB2YWx1ZSk7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc0Rpc2FibGVkSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdClcclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNsb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzbG9hZGluZztcclxuICB9XHJcbiAgQElucHV0KCkgaGVhZGVyPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNhdmluZyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGl0ZW06IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBfc3RhdHVzPzogc3RyaW5nID0gJyc7XHJcbiAgcHJpdmF0ZSBfYWxsb3dlZFN0YXR1cz86IHN0cmluZ1tdO1xyXG5cclxuICBnZXQgc3RhdHVzKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IHN0YXR1cyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9zdGF0dXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLnN0YXR1cyAhPT0gdGhpcy5fc3RhdHVzKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5zdGF0dXMgPSB0aGlzLl9zdGF0dXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgYWxsb3dlZFN0YXR1cyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcclxuICAgIFxyXG4gICAgdGhpcy5fYWxsb3dlZFN0YXR1cyA9IHZhbHVlO1xyXG4gIFxyXG4gICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uYWxsb3dlZFN0YXR1cyAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5mb3JtLmFsbG93ZWRTdGF0dXMgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBhbGxvd2VkU3RhdHVzKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9hbGxvd2VkU3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgLy9ic01vZGFsUmVmPzogYW55O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpXHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKVxyXG4gIHByaXZhdGUgX2xheW91dEhlbHBlclNlcnZpY2UgPSBpbmplY3QoTGF5b3V0SGVscGVyU2VydmljZSlcclxuICBwcml2YXRlIF93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlID0gaW5qZWN0KFdvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UgPSBpbmplY3QoUHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfbWVzc2FnZUluZm9TZXJ2aWNlID0gaW5qZWN0KFRzaU5vdGlmaWNhdGlvblNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXIgPSBpbmplY3QoRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlKVxyXG4gIHB1YmxpYyBsb2NhbGl6ZT8gPSBpbmplY3QoTG9jYWxpemVQaXBlKVxyXG4gIHB1YmxpYyBfaW5wdXRSZWdpc3RyeSA9IGluamVjdChJbnB1dFJlZ2lzdHJ5U2VydmljZSlcclxuICBwcml2YXRlIF9mb3JtU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEZvcm1TdGF0ZVNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfY29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlID0gaW5qZWN0KENvbG9ubmVQZXJzb25uYWxpc2VlU2VydmljZSlcclxuICBwcml2YXRlIGRpcmVjdGl2ZUVsZW1lbnRzOiAoUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpW10gPSBbXTtcclxuICBwcmVzZW50YXRpb25SZXF1ZXN0OiBQcmVzZW50YXRpb25TZXR0aW5nID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gIF9kZXNpZ25Nb2RlRm9ybVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG4gIF9zYXZlV29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXHJcbiAgX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcclxuICBfYWRkZWREaXJlY3RpdmVCYXNlU3Vic2NyaXRwaW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcclxuICAvLyNyZWdpb24gT3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSBfZ2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2U/OiBHZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZSA9IGluamVjdChHZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlZj86IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlnPzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcclxuICAgIHB1YmxpYyBvdmVycmlkZSBjZFJlZj86IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihjZFJlZik7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB3b3JrZmxvd0luZm9ybWF0aW9uPzogd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2VcclxuICBjdXN0b21EYXRhPzogYW55XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLl9pbml0TW9kYWxSZWYoKTtcclxuICAgIHRoaXMuaW5pdE1vZGFsRGF0YSgpO1xyXG4gICAgdGhpcy5fYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb24gPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuYWRkZWREaXJlY3RpdmVPYnNlcnZhYmxlXHJcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEudHJlYXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuY3VycmVudFdvcmtmbG93RW50aXR5SW5mb1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgJiYgIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb24gPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmFkZGVkRGlyZWN0aXZlT2JzZXJ2YWJsZVxyXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhLnRyZWF0ZWQpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eUluZm8gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmN1cnJlbnRXb3JrZmxvd0VudGl0eUluZm9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lICYmICF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgdGhpcy5fZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb24gPSB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlRm9ybVN1YmplY3Quc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhID09IHRydWUpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZURlc2lnbk1vZGUoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRGVzaWduTW9kZSgpIHtcclxuICAgIHRoaXMucmVtb3ZlVHNpTW9kYWxGb290ZXIoKVxyXG4gICAgdGhpcy5jcmVhdGVTYXZlQnV0dG9uKCk7XHJcblxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAgIGlucHV0Lmluc2VydEVsZW1lbnQoKTtcclxuICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUpIHtcclxuICAgICAgICBpbnB1dC5zZWxlY3RBcHByb3JpYXRlQ29sdW1ucyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGlucHV0LmFkZENoZWNrYm94ZXNUb0lucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKVxyXG4gICAgdGhpcy51bnN1YnNjcmliZUZyb21BY3RpdmVTdWJzY3JpdHBpb24oKVxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcbiAgICBjb25zb2xlLmxvZyhcImNvdW50IG9mIGRpcmVjdGl2ZUVsZW1lbnRzID0+IFwiLCB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzLmxlbmd0aClcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2U/LmlzRGVzaWduTW9kZVxyXG4gICAgICAmJiAhdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgLy8gdGhpcy5yZW1vdmVUc2lNb2RhbEZvb3RlcigpXHJcbiAgICAgIC8vIHRoaXMuY3JlYXRlU2F2ZUJ1dHRvbigpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuY3VycmVudFdvcmtmbG93RW50aXR5SW5mb1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAvLyAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZ1NlcnZpY2UuZ2V0RW50aXR5SW5mb0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MpXHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICAvL2luaXQgZ2VuZXJpY0NydWQgcmVwb3J0aW5nXHJcbiAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtUmVmQ2hhbmdlLnN1YnNjcmliZShmID0+IHtcclxuICAgICAgICBpZiAoZikge1xyXG4gICAgICAgICAgdGhpcy5mb3JtUmVmID0gZjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZvcm0uaWQgPSB0aGlzLmlkO1xyXG4gICAgICB0aGlzLmZvcm0ubW9kZSA9IHRoaXMubW9kZVxyXG4gICAgICB0aGlzLmZvcm0uZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIHRoaXMuZm9ybS5idXNpbmVzc0NsYXNzID0gdGhpcy5fYnVzaW5lc3NDbGFzc1xyXG4gICAgICB0aGlzLmZvcm0uZGlzYWJsZWQgPSB0aGlzLmlzRm9ybURpc2FibGVkO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5mb3JtLmFsbG93ZWRTdGF0dXMgPSB0aGlzLl9hbGxvd2VkU3RhdHVzO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmZvcm0uaXNEZXNjcmltaW5hdG9yVmFsdWVTZXQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gd29ya2Zsb3cgZm9ybSBkZXNpZ25cclxuICAgICAgdGhpcy5fc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLmZvcm0ub25TdWJtaXRGb3JtV29ya2Zsb3dDb25maWd1cmF0aW9uLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICBsZXQgd29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbiA9IHRoaXMuZ2V0Rm9ybVdvcmZrbG93UHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgICAgIHRoaXMuaGlkZSh3b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5mb3JtLm9uU3RhdHVzQ2hhbmdlLnN1YnNjcmliZSgobmV3VmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gbmV3VmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkNSRUFURSkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja2JveCkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3guZm9yRWFjaChib3ggPT4ge1xyXG4gICAgICAgICAgYm94LmlucHV0RmllbGQgPSBmYWxzZTtcclxuICAgICAgICAgIGJveC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRUc2lHcmlkc1JlZigpIHtcclxuICAgIHRoaXMudmlld0dyaWRzQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRWaWV3R3JpZHMoKVxyXG4gICAgdGhpcy5nZW5lcmljR3JpZHNDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEdlbmVyaWNHcmlkcygpXHJcbiAgICB0aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RWRpdGFibGVHcmlkcygpXHJcbiAgICB0aGlzLmdlbmVyaWNDcnVkc0NvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0R2VuZXJpY0NydWRzKClcclxuICB9XHJcblxyXG4gIGdldEZvcm1Xb3Jma2xvd1ByZXNlbnRhdGlvblNldHRpbmcoKSB7XHJcbiAgICBsZXQgcHJlc2VudGF0aW9uUmVxdWVzdCA9IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxbXSA9IFtdXHJcbiAgICBsZXQgYXZhaWxhYmxlRGlyZWN0aXZlRWxlbWVudHMgPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzLmZpbHRlcih4ID0+XHJcbiAgICAgICEodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5zb21lKHkgPT5cclxuICAgICAgICB5LmJsb2NrTmFtZSA9PT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiAheS5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgICApKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmluaXRUc2lHcmlkc1JlZigpXHJcblxyXG4gICAgYXZhaWxhYmxlRGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xyXG5cclxuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWRcclxuXHJcblxyXG4gICAgICBsZXQgZ3JpZFN0YXRlID0gW1xyXG4gICAgICAgIC4uLnRoaXMudmlld0dyaWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljQ3J1ZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50c1xyXG4gICAgICBdXHJcbiAgICAgICAgLmZpbmQoeCA9PiB4LmlkID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgfHwgKCdmb3JtTmFtZScgaW4geCAmJiB4LmZvcm1OYW1lID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpKVxyXG4gICAgICAgID8uZ2V0U3RhdGUoKTtcclxuXHJcbiAgICAgIGNvbmZpZ3VyYXRpb24gPSBncmlkU3RhdGUgPyBKU09OLnN0cmluZ2lmeShncmlkU3RhdGUpIDogdW5kZWZpbmVkO1xyXG5cclxuXHJcbiAgICAgIGxldCBvYmplY3Q6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB7XHJcbiAgICAgICAgYmxvY2tOYW1lOiBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIsXHJcbiAgICAgICAgaXNCbG9ja1Zpc2libGU6ICFkaXJlY3RpdmUuc2hvd0hpZGVDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkLFxyXG4gICAgICAgIHVpZDogdGhpcy5nZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyID8/IFwiXCIpLFxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgaXNJbnB1dEVuYWJsZWQ6ICFkaXJlY3RpdmUuZGlzYWJsZWRDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkXHJcbiAgICAgIH1cclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMucHVzaChvYmplY3QpXHJcbiAgICB9KVxyXG5cclxuICAgIHByZXNlbnRhdGlvblJlcXVlc3QuY29tcG9uZW50SWRlbnRpZmVyID0gdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCk7XHJcbiAgICBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzID0gcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHNcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcInByZXNlbnRhdGlvblJlcXVlc3QgPT4gXCIsIHByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICByZXR1cm4gcHJlc2VudGF0aW9uUmVxdWVzdFxyXG4gIH1cclxuXHJcblxyXG4gIGlzRGVsZXRlTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkRFTEVURTtcclxuICB9XHJcbiAgaXNTdWJtaXREaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIC8vcmV0dXJuICF0aGlzLmZvcm1SZWY/LmZvcm0/LnZhbGlkIHx8IHRoaXMuc2F2aW5nO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBpc0NvbnN1bHRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuQ09OU1VMVDtcclxuICB9XHJcblxyXG4gIGlzRHVwbGljYXRlTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkRVUExJQ0FURTtcclxuICB9XHJcbiAgaXNFZGl0TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkVESVQ7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaW5pdE1vZGFsRGF0YSgpIHtcclxuICAgIHN1cGVyLmluaXRNb2RhbERhdGEoKVxyXG4gICAgaWYgKHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vY2hlY2sgaGF2ZSBvcGVuZWREaWFsb2dDb25maWdcclxuICAgICAgaWYgKHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnLmRhdGEgIT0gbnVsbCAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY3VkQ29tcG9uZW50ID0gdGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YS5jdWRDb21wb25lbnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ZlcmlmeU1vZGFsRGF0YSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IHVuZGVmaW5lZFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRNb2RhbFJlZigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl92ZXJpZnlNb2RhbERhdGEoKSkge1xyXG4gICAgICAvL3RoaXMuYnNNb2RhbFJlZiA9IHtoaWRlOiAoKSA9PiB0aGlzLm9wZW5lZERpYWxvZ1JlZi5kZXN0cm95KCksY2xvc2U6ICh2YWw6IGFueSk9Pnt0aGlzLm9wZW5lZERpYWxvZ1JlZi5jbG9zZSh2YWwpfX1cclxuICAgIH1cclxuICB9XHJcbiAgLy9cclxuICBsKGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmxvY2FsaXplICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5sb2NhbGl6ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemUudHJhbnNmb3JtKGtleSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIHRyYWl0ZXIgbXVsdGlwbGUgY29tYm9cclxuICBhbGxDb21ib0xvYWRpbmdTdGF0dXM6IEFycmF5PENvbWJvU3RhdHVzTW9kZWw+ID0gW107XHJcbiAgYXJlQWxsQ29tYm9Mb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm9jZXNzQ29tYm9Jbml0RXZlbnQoY29tYm9TdGF0dXM6IENvbWJvU3RhdHVzTW9kZWwpIHtcclxuICAgIGlmICghdGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMuZmluZCh1ID0+IHUudWlkID09IGNvbWJvU3RhdHVzLnVpZCkpXHJcbiAgICAgIHRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLnB1c2goY29tYm9TdGF0dXMpO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0NvbWJvSXNMb2FkZWRFdmVudChjb21ib1N0YXR1czogQ29tYm9TdGF0dXNNb2RlbCkge1xyXG4gICAgbGV0IGNvbWJvUyA9IHRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLmZpbmQodSA9PiB1LnVpZCA9PSBjb21ib1N0YXR1cy51aWQpO1xyXG4gICAgaWYgKGNvbWJvUyAhPSBudWxsICYmIGNvbWJvUyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgY29tYm9TLmlzRGF0YUxvYWRlZCA9IGNvbWJvU3RhdHVzLmlzRGF0YUxvYWRlZDtcclxuICAgIH1cclxuICAgIHRoaXMuYXJlQWxsQ29tYm9Mb2FkZWRGbigpO1xyXG4gIH1cclxuXHJcbiAgYXJlQWxsQ29tYm9Mb2FkZWRGbigpOiB2b2lkIHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5sZW5ndGggPiAwKVxyXG4gICAgICB0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5mb3JFYWNoKHUgPT4ge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB1LmlzRGF0YUxvYWRlZDtcclxuICAgICAgfSk7XHJcbiAgICBlbHNlIHJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuYXJlQWxsQ29tYm9Mb2FkZWQgPSByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBuZXcgbW9kYWwgaGFuZGxpbmcgbWV0aG9kIChyZXNvbHZlRmljaGUpIGluc3RlYWQuXHJcbiAqIFRoaXMgbWV0aG9kIGRpcmVjdGx5IG1hbmlwdWxhdGVzIHRoZSBkaWFsb2cgcmVmZXJlbmNlIGFuZCBtYXkgbGVhZCB0byBpbmNvbnNpc3RlbnQgYmVoYXZpb3IuXHJcbiAqL1xyXG5cclxuICBoaWRlKHZhbD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IG51bGwgJiYgdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh2YWwgPT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLm9wZW5lZERpYWxvZ1JlZi5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcGVuZWREaWFsb2dSZWYuY2xvc2UodmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZUZpY2hlKHZhbD86IGFueSwgYXBpUmVzcG9uc2U/OiBhbnkpIHtcclxuICAgIHRoaXMuX2lucHV0UmVnaXN0cnkucmVzZXREaXJ0eVN0YXR1c0ZvckFsbElucHV0cygpO1xyXG5cclxuICAgIGNvbnN0IGhhc1VpZCA9IGFwaVJlc3BvbnNlPy51aWQgIT0gbnVsbDtcclxuXHJcbiAgICBjb25zdCBpc0NyZWF0ZU9yRHVwbGljYXRlID1cclxuICAgICAgdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUgfHxcclxuICAgICAgdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEU7XHJcblxyXG4gICAgY29uc3QgaXNFZGl0YWJsZU1vZGUgPVxyXG4gICAgICBpc0NyZWF0ZU9yRHVwbGljYXRlIHx8IHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuRURJVDtcclxuXHJcbiAgICBpZiAoaGFzVWlkICYmIGlzRWRpdGFibGVNb2RlKSB7XHJcbiAgICAgIHRoaXMuX2Zvcm1TdGF0ZVNlcnZpY2UuZGF0YVNhdmVkJC5uZXh0KGFwaVJlc3BvbnNlLnVpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc1VpZCAmJiBpc0NyZWF0ZU9yRHVwbGljYXRlKSB7XHJcbiAgICAgIHRoaXMuaWQgPSBhcGlSZXNwb25zZS51aWQ7XHJcbiAgICAgIHRoaXMubW9kZSA9IENvbXBvbmVudF9Nb2Rlcy5FRElUO1xyXG5cclxuICAgICAgdGhpcy5jZFJlZj8uZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5pZCA9IHRoaXMuaWQ7XHJcbiAgICAgICAgdGhpcy5mb3JtLm1vZGUgPSB0aGlzLm1vZGU7XHJcbiAgICAgICAgdGhpcy5mb3JtLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFdvcmtmbG93SW5mb3JtYXRpb24odGhpcy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWZyZXNoTGlzdCA9IGlzRWRpdGFibGVNb2RlIHx8IHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuREVMRVRFO1xyXG4gICAgaWYodGhpcy5vcGVuZWREaWFsb2dDb25maWcpe1xyXG4gICAgICB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhID8/PSB7fTtcclxuICAgICAgdGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YS5yZWZyZXNoTGlzdCA9IHJlZnJlc2hMaXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fZm9ybVN0YXRlU2VydmljZS5jbG9zZU1vZGFsKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5oaWRlKGFwaVJlc3BvbnNlKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoV29ya2Zsb3dJbmZvcm1hdGlvbihpZCA/OiBzdHJpbmcpIHtcclxuICAgIGxldCByZXF1ZXN0OiBHZXRXb3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXF1ZXN0ID0gbmV3IEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3QoKTtcclxuICAgIHJlcXVlc3QuY2xhc3NOYW1lID0gdGhpcy5idXNpbmVzc0NsYXNzXHJcbiAgICByZXF1ZXN0LnVpZE9iamV0ID0gaWQ7XHJcbiAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JDbGFzc05hbWUgPSB0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JDbGFzc05hbWVcclxuICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSA9IHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZVxyXG4gICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRDdXJyZW50RW50aXR5V29ya2xmb3dJbnN0YW5jZUluZm9ybWF0aW9uKHJlcXVlc3QpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS53b3JrZmxvd0luZm9ybWF0aW9uID0gcmVzcG9uc2VcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOihlcnJvcikgPT57XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoaWxlIGdldHRpbmcgd29ya2Zsb3dJbmZvcm1hdGlvblwiLCBlcnJvcilcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8jZW5kcmVnaW9uIHRyYWl0ZXIgbXVsdGlwbGUgY29tYm9cclxuXHJcbiAgZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpIHtcclxuICAgIGxldCB3b3JrZmxvd0V0YXRGb3JtID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0V0YXRGb3JtRm9yQ3VycmVudEZvcm1cclxuICAgICAgPy5maW5kKHggPT4geC51aWQgPT0gdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0V0YXQpXHJcblxyXG4gICAgaWYgKHdvcmtmbG93RXRhdEZvcm0pIHtcclxuICAgICAgbGV0IHdvcmtmbG93RXRhdCA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UubWFwV29ya2Zsb3dFdGF0Rm9ybVRvUHJlc2VudGF0aW9uU2V0dGluZyhcclxuICAgICAgICB3b3JrZmxvd0V0YXRGb3JtPy53b3JrZmxvd0V0YXRzRm9ybXNcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybiB3b3JrZmxvd0V0YXRcclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWRcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gUHJlc2VudGF0aW9uIFNldHRpbmdzXHJcbiAgYWRkSW5wdXRzKFxyXG4gICAgcHJlc2VudGF0aW9uUmVxdWVzdDogUHJlc2VudGF0aW9uU2V0dGluZyxcclxuICAgIGFwcGx5R3JpZENvbmZpZzogYm9vbGVhbiA9IHRydWUsXHJcbiAgICB3b3JrZmxvd0V0YXQ/OiBQcmVzZW50YXRpb25TZXR0aW5nLFxyXG4gICAgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IHRoaXMuZGlyZWN0aXZlRWxlbWVudHNcclxuICApOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoKCF3b3JrZmxvd0V0YXQgfHwgd29ya2Zsb3dFdGF0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAmJiB0aGlzLndvcmtmbG93SW5mb3JtYXRpb25cclxuICAgICAgJiYgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uPy53b3JrZmxvd0V0YXQpIHtcclxuICAgICAgd29ya2Zsb3dFdGF0ID0gdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBoYXNQcmVzZW50YXRpb25SZXF1ZXN0ID0gcHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/Lmxlbmd0aCA+IDA7XHJcblxyXG5cclxuICAgIGlmIChoYXNQcmVzZW50YXRpb25SZXF1ZXN0KSB7XHJcbiAgICAgIGRpcmVjdGl2ZUVsZW1lbnRzID0gZGlyZWN0aXZlRWxlbWVudHMuZmlsdGVyKHggPT5cclxuICAgICAgICBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5zb21lKFxyXG4gICAgICAgICAgeSA9PiB5LmJsb2NrTmFtZSA9PT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiAoeS5pc0Jsb2NrVmlzaWJsZSA9PSB1bmRlZmluZWQgfHwgeS5pc0Jsb2NrVmlzaWJsZSA9PSB0cnVlKVxyXG4gICAgICAgICAgICAmJiB4LnRyZWF0ZWQgPT0gZmFsc2VcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goZGlyZWN0aXZlID0+IHtcclxuXHJcbiAgICAgIGNvbnN0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICBpZiAocHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZSkge1xyXG5cclxuICAgICAgICBsZXQgd29yZmtmbG93RXRhdEZvcm0gPSB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm0oKTtcclxuXHJcbiAgICAgICAgaWYgKHdvcmZrZmxvd0V0YXRGb3JtKSB7XHJcbiAgICAgICAgICBsZXQgd29ya2Zsb3dDb25maWcgPSB3b3Jma2Zsb3dFdGF0Rm9ybS5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuICAgICAgICAgIGlmICghd29ya2Zsb3dDb25maWcpIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHdvcmtmbG93Q29uZmlnICYmIHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlICYmICh3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSB1bmRlZmluZWQgfHwgd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHdvcmtmbG93Q29uZmlnICYmIHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlICYmIHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGl2ZS5kaXNhYmxlSW5wdXRzKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbilcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5jcmVhdGUpIHtcclxuICAgICAgdGhpcy5wcm9jZXNzRGlzYWJsZWRJbnB1dHMocHJlc2VudGF0aW9uUmVxdWVzdCwgZGlyZWN0aXZlRWxlbWVudHMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLnJlbW92ZUVtcHR5QW5jZXN0b3JzRnJvbUVsZW1lbnRzKCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHByb2Nlc3NEaXNhYmxlZElucHV0cyhwcmVzZW50YXRpb25SZXF1ZXN0OiBQcmVzZW50YXRpb25TZXR0aW5nLCBkaXJlY3RpdmVFbGVtZW50czogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKVtdID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50cykge1xyXG4gICAgaWYgKHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2U/LmlzRGVzaWduTW9kZSB8fCB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IGhhc1ByZXNlbnRhdGlvblJlcXVlc3QgPSBwcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8ubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAoaGFzUHJlc2VudGF0aW9uUmVxdWVzdCkge1xyXG4gICAgICBkaXJlY3RpdmVFbGVtZW50cyA9IGRpcmVjdGl2ZUVsZW1lbnRzLmZpbHRlcih4ID0+XHJcbiAgICAgICAgcHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uc29tZShcclxuICAgICAgICAgIHkgPT4geS5ibG9ja05hbWUgPT09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgeS5pc0Jsb2NrVmlzaWJsZVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY29uc3Qgd29yZmtmbG93RXRhdEZvcm0gPSB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm0oKVxyXG4gICAgZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goZGlyZWN0aXZlID0+IHtcclxuXHJcbiAgICAgIGxldCB3b3JrZmxvd0NvbmZpZyA9IHdvcmZrZmxvd0V0YXRGb3JtPy5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuICAgICAgaWYgKHdvcmtmbG93Q29uZmlnICYmICF3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCAmJiAod29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgPz8gdHJ1ZSkpIHtcclxuICAgICAgICBkaXJlY3RpdmUuZGlzYWJsZUlucHV0cygpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICByZW1vdmVFbXB0eUFuY2VzdG9yc0Zyb21FbGVtZW50cygpIHtcclxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLmZvckVhY2gocyA9PiBzLnJlbW92ZUVtcHR5QW5jZXN0b3JzKHM/LnRlbXBUZW1wbGF0ZVBhcmVudE5vZGUpKVxyXG4gICAgLy8gfSwgMCk7XHJcbiAgfVxyXG5cclxuICBnZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoYmxvY2tOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gYmxvY2tOYW1lKT8udWlkXHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnRJZGVudGlmaWVyKCkge1xyXG4gICAgLy8gaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAvLyAgIHJldHVybiBgJHt0aGlzLl9teU5hbWUoKX1fJHt0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZX1gXHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gdGhpcy5fbXlOYW1lKClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZVByb3BlcnRpZXMoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5pbml0VHNpR3JpZHNSZWYoKVxyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG5cclxuICAgIGlmICghdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KSB7XHJcbiAgICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxbXSA9IFtdXHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XHJcblxyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbiA9IHVuZGVmaW5lZFxyXG5cclxuXHJcbiAgICAgIGxldCBncmlkU3RhdGUgPSBbXHJcbiAgICAgICAgLi4udGhpcy52aWV3R3JpZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0dyaWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNDcnVkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5lZGl0YWJsZUdyaWRDb21wb25lbnRzXHJcbiAgICAgIF1cclxuICAgICAgICAuZmluZCh4ID0+IHguaWQgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciB8fCAoJ2Zvcm1OYW1lJyBpbiB4ICYmIHguZm9ybU5hbWUgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcikpXHJcbiAgICAgICAgPy5nZXRTdGF0ZSgpO1xyXG5cclxuICAgICAgY29uZmlndXJhdGlvbiA9IGdyaWRTdGF0ZSA/IEpTT04uc3RyaW5naWZ5KGdyaWRTdGF0ZSkgOiB1bmRlZmluZWQ7XHJcblxyXG5cclxuICAgICAgbGV0IG9iamVjdDogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHtcclxuICAgICAgICBibG9ja05hbWU6IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcixcclxuICAgICAgICBpc0Jsb2NrVmlzaWJsZTogIWRpcmVjdGl2ZS5zaG93SGlkZUNoZWNrYm94Q29tcG9uZW50UmVmPy5pbnN0YW5jZT8uX2NoZWNrZWQsXHJcbiAgICAgICAgdWlkOiB0aGlzLmdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgPz8gXCJcIiksXHJcbiAgICAgICAgY29uZmlndXJhdGlvbjogY29uZmlndXJhdGlvblxyXG4gICAgICB9XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLnB1c2gob2JqZWN0KVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QuY29tcG9uZW50SWRlbnRpZmVyID0gdGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCk7XHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QuZGVzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscyA9IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzXHJcblxyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlXHJcblxyXG4gICAgaWYgKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQgIT0gbnVsbCAmJiB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS51cGRhdGVQcmVzZW50YXRpb25TZXR0aW5nKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCwgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0FmdGVyU2F2ZUNvbmZpZ3VyYXRpb24oKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuY3JlYXRlUHJlc2VudGF0aW9uU2V0dGluZyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NBZnRlclNhdmVDb25maWd1cmF0aW9uKClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1NpbmdsZUVsZW1lbnQoZGlyZWN0aXZlOiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSkge1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgICBsZXQgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG5cclxuICAgIGlmIChwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID09IHVuZGVmaW5lZCB8fCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlKSB7XHJcblxyXG4gICAgICBsZXQgd29yZmtmbG93RXRhdEZvcm0gPSB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm0oKTtcclxuXHJcbiAgICAgIGlmICh3b3Jma2Zsb3dFdGF0Rm9ybSkge1xyXG4gICAgICAgIGxldCB3b3JrZmxvd0NvbmZpZyA9IHdvcmZrZmxvd0V0YXRGb3JtLnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICAgIGlmICghd29ya2Zsb3dDb25maWcpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHdvcmtmbG93Q29uZmlnICYmIHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlICYmICh3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSB1bmRlZmluZWQgfHwgd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdHJ1ZSkpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHdvcmtmbG93Q29uZmlnICYmIHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlICYmIHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IGZhbHNlKSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZGlzYWJsZUlucHV0cygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgIGRpcmVjdGl2ZS5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uKVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHVuc3Vic2NyaWJlRnJvbUFjdGl2ZVN1YnNjcml0cGlvbigpIHtcclxuICAgIGlmICh0aGlzLl9kZXNpZ25Nb2RlRm9ybVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9kZXNpZ25Nb2RlRm9ybVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NhdmVXb3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuX3NhdmVXb3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb24pIHtcclxuICAgICAgdGhpcy5fYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb24pIHtcclxuICAgICAgdGhpcy5fYWRkZWREaXJlY3RpdmVCYXNlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVRzaU1vZGFsRm9vdGVyKCkge1xyXG4gICAgY29uc3QgdHNpTW9kYWxGb290ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwidHNpLW1vZGFsLWZvb3RlclwiKVxyXG5cclxuICAgIGlmICh0c2lNb2RhbEZvb3RlciAmJiB0c2lNb2RhbEZvb3Rlci5sYXN0Q2hpbGQpIHtcclxuICAgICAgdGhpcy5fcmVuZGVyZXI/LnJlbW92ZUNoaWxkKHRzaU1vZGFsRm9vdGVyLCB0c2lNb2RhbEZvb3Rlci5sYXN0Q2hpbGQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVTYXZlQnV0dG9uKCkge1xyXG4gICAgY29uc3QgdHNpQnV0dG9uUmVmID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZj8uY3JlYXRlQ29tcG9uZW50KFRzaUJ1dHRvbkNvbXBvbmVudCk7XHJcbiAgICB0c2lCdXR0b25SZWY/LnNldElucHV0KCd0ZXh0JywgJ3NoYXJlZF90c2lfY29tcG9uZW50X3NhdmVfY29uZmlnX3Nob3dfaGlkZScpO1xyXG4gICAgdHNpQnV0dG9uUmVmPy5zZXRJbnB1dCgnaWNvbicsICdzYXZlJyk7XHJcblxyXG4gICAgdHNpQnV0dG9uUmVmIS5pbnN0YW5jZS5vbkNsaWNrLmVtaXQgPSAoKSA9PiB0aGlzLnNhdmVQcm9wZXJ0aWVzKCk7XHJcblxyXG4gICAgY29uc3QgdHNpRm9ybSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ0c2ktZm9ybVwiKVxyXG5cclxuICAgIGlmICh0c2lGb3JtKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyPy5hcHBlbmRDaGlsZCh0c2lGb3JtLCB0c2lCdXR0b25SZWY/LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcHJvY2Vzc0FmdGVyU2F2ZUNvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IGZhbHNlXHJcbiAgICB0aGlzLmhpZGUoKVxyXG4gICAgdGhpcy5fbWVzc2FnZUluZm9TZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uS2V5cy5zYXZlZFN1Y2Nlc3NmdWxseSlcclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlID0gZmFsc2VcclxuICAgIC8vIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuY3VycmVudEZvcm1OYW1lID0gdW5kZWZpbmVkXHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlRm9ybVN1YmplY3QubmV4dChmYWxzZSlcclxuICAgIGF3YWl0IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmxvYWRQcmVzZW50YXRpb25TZXR0aW5ncygpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IENvbXBvbmVudF9Nb2Rlcy5FRElUICYmICF0aGlzLl9pbnB1dFJlZ2lzdHJ5Lmhhc0FueURpcnR5SW5wdXQoKSkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uud2FybihMb2NhbGl6YXRpb25LZXlzLm5vQ2hhbmdlc0RldGVjdGVkKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjaGFuZ2VzIGRldGVjdGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgdGhpcy5yZXF1aXJlZElucHV0cyA9IHRoaXMuX2lucHV0UmVnaXN0cnkuZ2V0QWxsKCkuZmlsdGVyKGlucCA9PiBpbnAuaXNSZXF1aXJlZCAmJiBpbnAuZGlzYWJsZWQgPT09IGZhbHNlKTtcclxuICAgIHRoaXMuZmF1bHR5SW5wdXRzID0gW107XHJcbiAgICB0aGlzLmlzRm9ybVZhbGlkID0gdGhpcy5yZXF1aXJlZElucHV0cy5ldmVyeShpbnB1dCA9PiBpbnB1dC5pc1ZhbGlkKCkuaXNWYWxpZCA9PT0gdHJ1ZSlcclxuXHJcbiAgICB0aGlzLnJlcXVpcmVkSW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xyXG4gICAgICBsZXQgZnZyID0gaW5wdXQuaXNWYWxpZCgpO1xyXG4gICAgICBpZiAoZnZyLmlzVmFsaWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5mYXVsdHlJbnB1dHMucHVzaChmdnIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuaXNGb3JtVmFsaWQgPT09IGZhbHNlICYmIHRoaXMuZmF1bHR5SW5wdXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5mYXVsdHlJbnB1dHMpXHJcbiAgICAgIGxldCBmYXVsdHlJbnB1dHNOYW1lcyA9IFwiXCI7XHJcbiAgICAgIHRoaXMuZmF1bHR5SW5wdXRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmZhdWx0eUlucHV0cy5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgKz0gYCR7aXRlbS5pbnB1dE5hbWV9LiBgXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgKz0gYCR7aXRlbS5pbnB1dE5hbWV9LCBgXHJcbiAgICAgIH0pXHJcbiAgICAgIGZhdWx0eUlucHV0c05hbWVzID0gZmF1bHR5SW5wdXRzTmFtZXMucmVwbGFjZSgvLCQvLCAnJyk7XHJcbiAgICAgIGlmICh0aGlzLmZhdWx0eUlucHV0cy5zb21lKGZpID0+IGZpLmVycm9yID09PSBGb3JtVmFsaWRhdGlvbkVycm9yLlJlcXVpcmVkKSkge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKGZhdWx0eUlucHV0c05hbWVzLCB0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX3JlcXVpcmVkX2ZpZWxkX3RpdGxlJykpXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYExlcyBjaGFtcHMgJHtmYXVsdHlJbnB1dHNOYW1lc30gc29udCBvYmxpZ2F0b2lyZS5gO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuTWF4TGVuZ3RoKSkge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKGBcclxuICAgICAgICAgICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl90aGVfZmllbGQnKX1cclxuICAgICAgICAgICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uaW5wdXROYW1lfSBcclxuICAgICAgICAgICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoJyl9XHJcbiAgICAgICAgICAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmRhdGF9ICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2NoYXJzJyl9YCxcclxuICAgICAgICAgIHRoaXMubG9jYWxpemU/LnRyYW5zZm9ybSgndHNpX2Zvcm1fYmFzZV9hdXRvX3ZhbGlkYXRpb25fbWF4X2xlbmd0aF9maWVsZF90aXRsZScpKVxyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZSBjaGFtcCAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gbmUgZG9pdCBwYXMgZMOpcGFzc2VyICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uZGF0YX0gY2FyYWN0w6hyZXMuYDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmZhdWx0eUlucHV0cy5zb21lKGZpID0+IGZpLmVycm9yID09PSBGb3JtVmFsaWRhdGlvbkVycm9yLk91dE9mUmFuZ2UpKSB7XHJcbiAgICAgICAgLy90byBkb1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZSBjaGFtcCAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gZG9pdCDDqnRyZSBkYW5zIGwnaW50ZXJ2YWxsZS5gO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1TdGF0ZSh7IGlzVmFsaWQ6IGZhbHNlLCBpc1N1Ym1pdHRlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlKHsgaXNWYWxpZDogdHJ1ZSwgaXNTdWJtaXR0ZWQ6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGU6IEZvcm1TdGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9nZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlLnVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGUpO1xyXG5cclxuICAgIHRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRFZGl0YWJsZUdyaWRzKCk7XHJcbiAgICB0aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHMuZm9yRWFjaCgoZSkgPT4gZS51cGRhdGVGb3JtU3RhdGUoZm9ybVN0YXRlKSk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8cD50c2ktZm9ybS1iYXNlIHdvcmtzITwvcD5cclxuIl19
|