tnx-shared 5.1.342 → 5.1.345
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/bundles/tnx-shared.umd.js +274 -67
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/list-base.d.ts.map +1 -1
- package/classes/form-schema.d.ts +4 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/address/address.component.d.ts +1 -0
- package/components/address/address.component.d.ts.map +1 -1
- package/components/autocomplete-datasource/autocomplete-datasource.component.d.ts +1 -0
- package/components/autocomplete-datasource/autocomplete-datasource.component.d.ts.map +1 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts +2 -0
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
- package/components/check-box-list/check-box-list.component.d.ts +1 -0
- package/components/check-box-list/check-box-list.component.d.ts.map +1 -1
- package/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.d.ts +1 -0
- package/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.d.ts.map +1 -1
- package/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.d.ts +1 -0
- package/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.d.ts.map +1 -1
- package/components/congviec-picker/congviec-picker.component.d.ts +1 -0
- package/components/congviec-picker/congviec-picker.component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +7 -0
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/datetime-picker/datetime-picker.component.d.ts +1 -0
- package/components/datetime-picker/datetime-picker.component.d.ts.map +1 -1
- package/components/datetime-picker-range/datetime-picker-range.component.d.ts +1 -0
- package/components/datetime-picker-range/datetime-picker-range.component.d.ts.map +1 -1
- package/components/dropdown/dropdown.component.d.ts +1 -0
- package/components/dropdown/dropdown.component.d.ts.map +1 -1
- package/components/entity-picker/entity-picker.component.d.ts +1 -0
- package/components/entity-picker/entity-picker.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts +1 -0
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/file-upload/file-upload.component.d.ts +1 -0
- package/components/file-upload/file-upload.component.d.ts.map +1 -1
- package/components/mask/mask.component.d.ts +1 -0
- package/components/mask/mask.component.d.ts.map +1 -1
- package/components/number-picker-range/number-picker-range.component.d.ts +1 -0
- package/components/number-picker-range/number-picker-range.component.d.ts.map +1 -1
- package/components/radio-button-list/radio-button-list.component.d.ts +1 -0
- package/components/radio-button-list/radio-button-list.component.d.ts.map +1 -1
- package/components/reference-textbox/reference-textbox.component.d.ts +2 -1
- package/components/reference-textbox/reference-textbox.component.d.ts.map +1 -1
- package/components/service-file-upload/service-file-upload.component.d.ts +1 -0
- package/components/service-file-upload/service-file-upload.component.d.ts.map +1 -1
- package/components/splash-component/splash-component-v1/splash-component-v1.component.d.ts.map +1 -1
- package/components/splash-component/splash-component-v2/splash-component-v2.component.d.ts.map +1 -1
- package/components/splash-component/splash-component.component.d.ts.map +1 -1
- package/components/statemachines/models/enums.d.ts +1 -0
- package/components/statemachines/models/enums.d.ts.map +1 -1
- package/components/tn-color-picker/tn-color-picker.component.d.ts +1 -0
- package/components/tn-color-picker/tn-color-picker.component.d.ts.map +1 -1
- package/components/tn-tabview/tn-tabview.component.d.ts +7 -1
- package/components/tn-tabview/tn-tabview.component.d.ts.map +1 -1
- package/components/tn-tinymce/tn-tinymce.component.d.ts +1 -0
- package/components/tn-tinymce/tn-tinymce.component.d.ts.map +1 -1
- package/components/user-picker/user-picker.component.d.ts +1 -0
- package/components/user-picker/user-picker.component.d.ts.map +1 -1
- package/components/vanban-picker/vanban-picker.component.d.ts +1 -0
- package/components/vanban-picker/vanban-picker.component.d.ts.map +1 -1
- package/esm2015/classes/base/list-base.js +13 -8
- package/esm2015/classes/form-schema.js +4 -1
- package/esm2015/components/address/address.component.js +4 -1
- package/esm2015/components/autocomplete-datasource/autocomplete-datasource.component.js +4 -1
- package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +13 -7
- package/esm2015/components/check-box-list/check-box-list.component.js +4 -1
- package/esm2015/components/cocautochuc/cocautochuc-picker/cocautochuc-picker.component.js +4 -1
- package/esm2015/components/cocautochuc/cocautochuc-picker-list/cocautochuc-picker-list.component.js +4 -1
- package/esm2015/components/congviec-picker/congviec-picker.component.js +4 -1
- package/esm2015/components/crud/crud-form/crud-form.component.js +67 -11
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/components/datetime-picker/datetime-picker.component.js +4 -1
- package/esm2015/components/datetime-picker-range/datetime-picker-range.component.js +5 -2
- package/esm2015/components/dropdown/dropdown.component.js +4 -1
- package/esm2015/components/entity-picker/entity-picker.component.js +4 -1
- package/esm2015/components/file-explorer/file-manager/file-manager.component.js +4 -1
- package/esm2015/components/file-upload/file-upload.component.js +4 -1
- package/esm2015/components/mask/mask.component.js +4 -1
- package/esm2015/components/number-picker-range/number-picker-range.component.js +5 -2
- package/esm2015/components/radio-button-list/radio-button-list.component.js +4 -1
- package/esm2015/components/reference-textbox/reference-textbox.component.js +6 -3
- package/esm2015/components/service-file-upload/service-file-upload.component.js +4 -1
- package/esm2015/components/splash-component/splash-component-v1/splash-component-v1.component.js +4 -1
- package/esm2015/components/splash-component/splash-component-v2/splash-component-v2.component.js +4 -1
- package/esm2015/components/splash-component/splash-component.component.js +4 -1
- package/esm2015/components/statemachines/models/constants.js +14 -14
- package/esm2015/components/statemachines/models/enums.js +2 -2
- package/esm2015/components/tn-color-picker/tn-color-picker.component.js +4 -2
- package/esm2015/components/tn-dialog/tn-dialog.component.js +2 -2
- package/esm2015/components/tn-tabview/tn-tabview.component.js +32 -5
- package/esm2015/components/tn-tinymce/tn-tinymce.component.js +4 -1
- package/esm2015/components/user-picker/user-picker.component.js +4 -1
- package/esm2015/components/vanban-picker/vanban-picker.component.js +4 -1
- package/esm2015/services/common.service.js +39 -32
- package/esm2015/services/menu.service.js +20 -1
- package/esm2015/services/permission.service.js +1 -1
- package/esm2015/services/user.service.js +1 -1
- package/fesm2015/tnx-shared.js +269 -75
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/common.service.d.ts.map +1 -1
- package/services/menu.service.d.ts +1 -0
- package/services/menu.service.d.ts.map +1 -1
- package/services/permission.service.d.ts.map +1 -1
- package/services/user.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -179,10 +179,29 @@ export class MenuService {
|
|
|
179
179
|
const menuUrl = `assets/menus/${appCode.toLocaleLowerCase()}.json`;
|
|
180
180
|
fetch(menuUrl).then((rs) => __awaiter(this, void 0, void 0, function* () {
|
|
181
181
|
const menu = JSON.parse(yield rs.text());
|
|
182
|
+
this.setDefaultIcon(menu, 0);
|
|
182
183
|
yield this.setMenuItems(menu);
|
|
183
184
|
}));
|
|
184
185
|
});
|
|
185
186
|
}
|
|
187
|
+
setDefaultIcon(menus, level) {
|
|
188
|
+
if (!menus)
|
|
189
|
+
return;
|
|
190
|
+
menus.forEach(itemMenu => {
|
|
191
|
+
if (!itemMenu.icon) {
|
|
192
|
+
if (level === 0) {
|
|
193
|
+
itemMenu.icon = 'pi pi-th-large';
|
|
194
|
+
}
|
|
195
|
+
else if (level === 1) {
|
|
196
|
+
itemMenu.icon = 'pi pi-star-o';
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
itemMenu.icon = 'pi pi-circle-on';
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
this.setDefaultIcon(itemMenu.items, level + 1);
|
|
203
|
+
});
|
|
204
|
+
}
|
|
186
205
|
}
|
|
187
206
|
MenuService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MenuService_Factory() { return new MenuService(i0.ɵɵinject(i1.ModuleConfigService), i0.ɵɵinject(i2.PermissionService), i0.ɵɵinject(i3.CommonService), i0.ɵɵinject(i4.ApplicationContextService)); }, token: MenuService, providedIn: "root" });
|
|
188
207
|
MenuService.decorators = [
|
|
@@ -194,4 +213,4 @@ MenuService.ctorParameters = () => [
|
|
|
194
213
|
{ type: CommonService },
|
|
195
214
|
{ type: ApplicationContextService }
|
|
196
215
|
];
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL21lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFHekQsTUFBTSxPQUFPLFdBQVc7SUFRcEIsWUFDWSxvQkFBeUMsRUFDekMsa0JBQXFDLEVBQ3JDLGNBQTZCLEVBQzdCLG1CQUE4QztRQUg5Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUEyQjtRQVhsRCxlQUFVLEdBQVUsRUFBRSxDQUFDO1FBQ3ZCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUU5QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFRN0MsQ0FBQztJQUVELEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBdUI7UUFDekMsS0FBSyxNQUFNLElBQUksSUFBSSxnQkFBZ0IsRUFBRTtZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7WUFDaEQsSUFBSSxJQUFJLENBQUMsdUJBQXVC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O29CQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztvQkFDbEQsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBRTdGLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUMzRixPQUFPLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztpQkFDbEM7cUJBQ0k7b0JBQ0QsT0FBTyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7aUJBQzNCO2FBQ0o7UUFFTCxDQUFDO0tBQUE7SUFFSyxtQkFBbUIsQ0FBQyxPQUFlOztZQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztZQUNuRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQU0sRUFBRSxFQUFDLEVBQUU7Z0JBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDekMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQSxDQUFDLENBQUM7UUFDUCxDQUFDO0tBQUE7Ozs7WUF2TUosVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7O1lBSHpCLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFGakIsYUFBYTtZQURiLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2FwcGxpY2F0aW9uLWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Blcm1pc3Npb24uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTWVudVNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBfbWVudUl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfcm9vdE1lbnU6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBtYXBwaW5nUm91dGVyTGluayA9IHt9O1xyXG4gICAgcHJpdmF0ZSBtYXBwaW5nUmV2ZXNlUm91dGVyTGluayA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBtZW51Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25Db250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbWFwKHNvdXJjZVJvdXRlckxpbmssIG1hcHBlZFJvdXRlckxpbms6IGFueVtdKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1hcHBlZFJvdXRlckxpbmspIHtcclxuICAgICAgICAgICAgdGhpcy5tYXBwaW5nUm91dGVyTGlua1tpdGVtXSA9IHNvdXJjZVJvdXRlckxpbms7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1hcHBpbmdSZXZlc2VSb3V0ZXJMaW5rW3NvdXJjZVJvdXRlckxpbmtdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcHBpbmdSZXZlc2VSb3V0ZXJMaW5rW3NvdXJjZVJvdXRlckxpbmtdLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcHBpbmdSZXZlc2VSb3V0ZXJMaW5rW3NvdXJjZVJvdXRlckxpbmtdID0gW2l0ZW1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrTWFwcGluZ1JvdXRlckxpbmsobWVudVJvdXRlckxpbmssIGN1cnJlbnRSb3V0ZXJMaW5rKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwcGluZ1JvdXRlckxpbmtbY3VycmVudFJvdXRlckxpbmtdID09IG1lbnVSb3V0ZXJMaW5rXHJcbiAgICAgICAgICAgIHx8ICh0aGlzLm1hcHBpbmdSZXZlc2VSb3V0ZXJMaW5rW21lbnVSb3V0ZXJMaW5rXSAmJiB0aGlzLm1hcHBpbmdSZXZlc2VSb3V0ZXJMaW5rW21lbnVSb3V0ZXJMaW5rXS5zb21lKHggPT4gY3VycmVudFJvdXRlckxpbmsuc3RhcnRzV2l0aCh4KSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluaXRNZW51SXRlbXMobWVudXM6IGFueVtdKSB7XHJcbiAgICAvLyAgICAgdGhpcy5fbWVudUl0ZW1zID0gbWVudXM7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaW5pdFJvb3RNZW51KG1lbnU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuX3Jvb3RNZW51ID0gbWVudTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290TWVudTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRNZW51SXRlbXMobWVudXM6IGFueVtdLCBjbGVhclByZXZNZW51ID0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRWaXNpYmxlTWVudXMobWVudXMpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gW107XHJcbiAgICAgICAgICAgIG1lbnVzLmZvckVhY2gobSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW0uaXNSb290TWVudSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3RNZW51LmxhYmVsID0gbS5sYWJlbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgb2xkTWVudSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuY2xvbmVPYmplY3QodGhpcy5nZXRNZW51SXRlbXMoKSk7XHJcbiAgICAgICAgICAgIGlmIChjbGVhclByZXZNZW51KSB7XHJcbiAgICAgICAgICAgICAgICBvbGRNZW51ID0gdGVtcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9sZE1lbnUucHVzaCguLi50ZW1wKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fbWVudUl0ZW1zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuX21lbnVJdGVtcy5wdXNoKC4uLnRoaXMucmVjdXJzaXZlT3JkZXJCeShvbGRNZW51KSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUNoYW5nZWQubmV4dCh0aGlzLl9tZW51SXRlbXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlY3Vyc2l2ZU9yZGVyQnkobWVudXM6IGFueVtdKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1lbnVzKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pdGVtcyA9IHRoaXMucmVjdXJzaXZlT3JkZXJCeShpdGVtLml0ZW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fY29tbW9uU2VydmljZS5vcmRlckJ5KG1lbnVzLCAnb3JkZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2R1bGVOYW1lKGNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+ICg8YW55PngpLmNvZGUgPT09IGNvZGUpO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnRpdGxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExvbmdNb2R1bGVOYW1lKGNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+ICg8YW55PngpLmNvZGUgPT09IGNvZGUpO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmxvbmdUaXRsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBsb29wR2V0QWN0aXZlKG1lbnVzLCByZXN1bHQsIGxhc3RMZW5ndGgpIHtcclxuICAgICAgICBtZW51cy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5hY3RpdmF0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiBsYXN0TGVuZ3RoICYmIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0uaXRlbXMgJiYgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9vcEdldEFjdGl2ZShyZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLml0ZW1zLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51QWN0aXZlcygpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICB0aGlzLmxvb3BHZXRBY3RpdmUodGhpcy5fbWVudUl0ZW1zLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFzdE1lbnVBY3RpdmUoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdGhpcy5sb29wR2V0QWN0aXZlKHRoaXMuX21lbnVJdGVtcywgcmVzdWx0LCByZXN1bHQubGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGxvb3BHZXRNZW51SXRlbShtZW51cywgaW5zdGFuY2VJZCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtZW51cykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pbnN0YW5jZUlkID09IGluc3RhbmNlSWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLmxvb3BHZXRNZW51SXRlbShpdGVtLml0ZW1zLCBpbnN0YW5jZUlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51SXRlbShpbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vcEdldE1lbnVJdGVtKHRoaXMuX21lbnVJdGVtcywgaW5zdGFuY2VJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudUl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51SXRlbXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFzeW5jIHNldFZpc2libGVNZW51cyhtZW51cykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuYXN5bmNGb3JFYWNoKG1lbnVzLCBhc3luYyBlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRWaXNpYmxlTWVudShlbGVtZW50KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHNldFZpc2libGVNZW51KGVsZW1lbnQpIHtcclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaXNSb290TWVudSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC5pc0N1c3RvbUF1dGhlbikge1xyXG4gICAgICAgICAgICAvLyBlbGVtZW50LnZpc2libGUgPSBlbGVtZW50LnZpc2libGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuYWxsb3dBbm9ueW1vdXMpIHtcclxuICAgICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pdGVtcyAmJiBlbGVtZW50Lml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5hc3luY0ZvckVhY2goZWxlbWVudC5pdGVtcywgYXN5bmMgZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldFZpc2libGVNZW51KGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGVsZW1lbnQuaXRlbXMuc29tZSh4ID0+IHgudmlzaWJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByb290ID0gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCk7XHJcbiAgICAgICAgICAgIGlmIChyb290LmRhdGEuY3VycmVudFVzZXIgJiYgcm9vdC5kYXRhLmN1cnJlbnRVc2VyLnVzZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHJvb3QuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuY29kZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBgJHtyb290LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLmNvZGV9JHtlbGVtZW50LnJvdXRlckxpbmt9YC50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXV0aG9yaXplZCA9IGF3YWl0IHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZChzZXJ2aWNlLCBwZXJtaXNzaW9uLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGlzQXV0aG9yaXplZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW5kZXJNZW51QnlBcHBDb2RlKGFwcENvZGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX21lbnVJdGVtcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG1lbnVVcmwgPSBgYXNzZXRzL21lbnVzLyR7YXBwQ29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpfS5qc29uYDtcclxuICAgICAgICBmZXRjaChtZW51VXJsKS50aGVuKGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWVudSA9IEpTT04ucGFyc2UoYXdhaXQgcnMudGV4dCgpKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRNZW51SXRlbXMobWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL21lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFHekQsTUFBTSxPQUFPLFdBQVc7SUFRcEIsWUFDWSxvQkFBeUMsRUFDekMsa0JBQXFDLEVBQ3JDLGNBQTZCLEVBQzdCLG1CQUE4QztRQUg5Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUEyQjtRQVhsRCxlQUFVLEdBQVUsRUFBRSxDQUFDO1FBQ3ZCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUU5QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFRN0MsQ0FBQztJQUVELEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBdUI7UUFDekMsS0FBSyxNQUFNLElBQUksSUFBSSxnQkFBZ0IsRUFBRTtZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7WUFDaEQsSUFBSSxJQUFJLENBQUMsdUJBQXVC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LENBQUMsSUFBSSxFQUFFO2dCQUNoQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7b0JBQ2IsUUFBUSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztpQkFDcEM7cUJBQ0ksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO29CQUNsQixRQUFRLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztpQkFDbEM7cUJBQ0k7b0JBQ0QsUUFBUSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztpQkFDckM7YUFDSjtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7O1lBMU5KLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OztZQUh6QixtQkFBbUI7WUFDbkIsaUJBQWlCO1lBRmpCLGFBQWE7WUFEYix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE1lbnVTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgX21lbnVJdGVtczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX3Jvb3RNZW51OiBhbnkgPSB7fTtcclxuICAgIHByaXZhdGUgbWFwcGluZ1JvdXRlckxpbmsgPSB7fTtcclxuICAgIHByaXZhdGUgbWFwcGluZ1JldmVzZVJvdXRlckxpbmsgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgbWVudUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FwcGxpY2F0aW9uQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZSxcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIG1hcChzb3VyY2VSb3V0ZXJMaW5rLCBtYXBwZWRSb3V0ZXJMaW5rOiBhbnlbXSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtYXBwZWRSb3V0ZXJMaW5rKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwcGluZ1JvdXRlckxpbmtbaXRlbV0gPSBzb3VyY2VSb3V0ZXJMaW5rO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXBwaW5nUmV2ZXNlUm91dGVyTGlua1tzb3VyY2VSb3V0ZXJMaW5rXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBwaW5nUmV2ZXNlUm91dGVyTGlua1tzb3VyY2VSb3V0ZXJMaW5rXS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBwaW5nUmV2ZXNlUm91dGVyTGlua1tzb3VyY2VSb3V0ZXJMaW5rXSA9IFtpdGVtXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja01hcHBpbmdSb3V0ZXJMaW5rKG1lbnVSb3V0ZXJMaW5rLCBjdXJyZW50Um91dGVyTGluaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hcHBpbmdSb3V0ZXJMaW5rW2N1cnJlbnRSb3V0ZXJMaW5rXSA9PSBtZW51Um91dGVyTGlua1xyXG4gICAgICAgICAgICB8fCAodGhpcy5tYXBwaW5nUmV2ZXNlUm91dGVyTGlua1ttZW51Um91dGVyTGlua10gJiYgdGhpcy5tYXBwaW5nUmV2ZXNlUm91dGVyTGlua1ttZW51Um91dGVyTGlua10uc29tZSh4ID0+IGN1cnJlbnRSb3V0ZXJMaW5rLnN0YXJ0c1dpdGgoeCkpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbml0TWVudUl0ZW1zKG1lbnVzOiBhbnlbXSkge1xyXG4gICAgLy8gICAgIHRoaXMuX21lbnVJdGVtcyA9IG1lbnVzO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGluaXRSb290TWVudShtZW51OiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9yb290TWVudSA9IG1lbnU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdE1lbnU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWVudUl0ZW1zKG1lbnVzOiBhbnlbXSwgY2xlYXJQcmV2TWVudSA9IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0VmlzaWJsZU1lbnVzKG1lbnVzKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IFtdO1xyXG4gICAgICAgICAgICBtZW51cy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtLmlzUm9vdE1lbnUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2gobSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb290TWVudS5sYWJlbCA9IG0ubGFiZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGV0IG9sZE1lbnUgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHRoaXMuZ2V0TWVudUl0ZW1zKCkpO1xyXG4gICAgICAgICAgICBpZiAoY2xlYXJQcmV2TWVudSkge1xyXG4gICAgICAgICAgICAgICAgb2xkTWVudSA9IHRlbXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvbGRNZW51LnB1c2goLi4udGVtcCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX21lbnVJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB0aGlzLl9tZW51SXRlbXMucHVzaCguLi50aGlzLnJlY3Vyc2l2ZU9yZGVyQnkob2xkTWVudSkpO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVDaGFuZ2VkLm5leHQodGhpcy5fbWVudUl0ZW1zKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWN1cnNpdmVPcmRlckJ5KG1lbnVzOiBhbnlbXSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtZW51cykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaXRlbXMgPSB0aGlzLnJlY3Vyc2l2ZU9yZGVyQnkoaXRlbS5pdGVtcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbW1vblNlcnZpY2Uub3JkZXJCeShtZW51cywgJ29yZGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kdWxlTmFtZShjb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBpdGVtOiBhbnkgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZpbmQoeCA9PiAoPGFueT54KS5jb2RlID09PSBjb2RlKTtcclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS50aXRsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb25nTW9kdWxlTmFtZShjb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBpdGVtOiBhbnkgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwcE1ldGFkYXRhLmFwcFN3aXRjaGVyLmZpbmQoeCA9PiAoPGFueT54KS5jb2RlID09PSBjb2RlKTtcclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS5sb25nVGl0bGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgbG9vcEdldEFjdGl2ZShtZW51cywgcmVzdWx0LCBsYXN0TGVuZ3RoKSB7XHJcbiAgICAgICAgbWVudXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uYWN0aXZhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gbGFzdExlbmd0aCAmJiByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLml0ZW1zICYmIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvb3BHZXRBY3RpdmUocmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5pdGVtcywgcmVzdWx0LCByZXN1bHQubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudUFjdGl2ZXMoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdGhpcy5sb29wR2V0QWN0aXZlKHRoaXMuX21lbnVJdGVtcywgcmVzdWx0LCByZXN1bHQubGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RNZW51QWN0aXZlKCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9vcEdldEFjdGl2ZSh0aGlzLl9tZW51SXRlbXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBsb29wR2V0TWVudUl0ZW0obWVudXMsIGluc3RhbmNlSWQpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWVudXMpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaW5zdGFuY2VJZCA9PSBpbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5sb29wR2V0TWVudUl0ZW0oaXRlbS5pdGVtcywgaW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudUl0ZW0oaW5zdGFuY2VJZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvb3BHZXRNZW51SXRlbSh0aGlzLl9tZW51SXRlbXMsIGluc3RhbmNlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1lbnVJdGVtcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbWVudUl0ZW1zO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyBzZXRWaXNpYmxlTWVudXMobWVudXMpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmFzeW5jRm9yRWFjaChtZW51cywgYXN5bmMgZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0VmlzaWJsZU1lbnUoZWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRWaXNpYmxlTWVudShlbGVtZW50KSB7XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50LmlzUm9vdE1lbnUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaXNDdXN0b21BdXRoZW4pIHtcclxuICAgICAgICAgICAgLy8gZWxlbWVudC52aXNpYmxlID0gZWxlbWVudC52aXNpYmxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChlbGVtZW50LmFsbG93QW5vbnltb3VzKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXRlbXMgJiYgZWxlbWVudC5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuYXN5bmNGb3JFYWNoKGVsZW1lbnQuaXRlbXMsIGFzeW5jIGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRWaXNpYmxlTWVudShlbGVtZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBlbGVtZW50Lml0ZW1zLnNvbWUoeCA9PiB4LnZpc2libGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgICAgICBpZiAocm9vdC5kYXRhLmN1cnJlbnRVc2VyICYmIHJvb3QuZGF0YS5jdXJyZW50VXNlci51c2VySWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSByb290LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLmNvZGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gYCR7cm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5jb2RlfSR7ZWxlbWVudC5yb3V0ZXJMaW5rfWAudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F1dGhvcml6ZWQgPSBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQoc2VydmljZSwgcGVybWlzc2lvbiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBpc0F1dGhvcml6ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVuZGVyTWVudUJ5QXBwQ29kZShhcHBDb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9tZW51SXRlbXMgPSBbXTtcclxuICAgICAgICBjb25zdCBtZW51VXJsID0gYGFzc2V0cy9tZW51cy8ke2FwcENvZGUudG9Mb2NhbGVMb3dlckNhc2UoKX0uanNvbmA7XHJcbiAgICAgICAgZmV0Y2gobWVudVVybCkudGhlbihhc3luYyBycyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnUgPSBKU09OLnBhcnNlKGF3YWl0IHJzLnRleHQoKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEljb24obWVudSwgMCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0TWVudUl0ZW1zKG1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERlZmF1bHRJY29uKG1lbnVzOiBhbnlbXSwgbGV2ZWw6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghbWVudXMpIHJldHVybjtcclxuICAgICAgICBtZW51cy5mb3JFYWNoKGl0ZW1NZW51ID0+IHtcclxuICAgICAgICAgICAgaWYgKCFpdGVtTWVudS5pY29uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTWVudS5pY29uID0gJ3BpIHBpLXRoLWxhcmdlJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxldmVsID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbU1lbnUuaWNvbiA9ICdwaSBwaS1zdGFyLW8nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbU1lbnUuaWNvbiA9ICdwaSBwaS1jaXJjbGUtb24nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEljb24oaXRlbU1lbnUuaXRlbXMsIGxldmVsICsgMSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -417,4 +417,4 @@ PermissionService.ctorParameters = () => [
|
|
|
417
417
|
{ type: OAuthService },
|
|
418
418
|
{ type: ApplicationContextService }
|
|
419
419
|
];
|
|
420
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFLdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQUU3QyxNQUFNLE9BQU8sY0FBYztJQVN2QixZQUFZLElBQW9CO1FBTGhDLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFDM0Isa0JBQWEsR0FBYyxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBQ2pDLHdCQUFtQixHQUFjLEVBQUUsQ0FBQztRQUdoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztDQUNKO0FBS0QsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFTOUMsWUFDSSxJQUFnQixFQUNoQixRQUFrQixFQUNWLG9CQUF5QyxFQUN6QyxZQUF5QixFQUN6QixhQUEyQixFQUMzQixXQUFzQztRQUU5QyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFB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QUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQztLQUFBO0lBRUQsd0JBQXdCLENBQUMsVUFBa0IsRUFBRSxNQUFjO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsNkJBQTZCLFVBQVUsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXFCO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUscUJBQXFCLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOzs7O1lBNVpKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBL0JRLFVBQVU7WUFDRSxRQUFRO1lBU3BCLG1CQUFtQjtZQUNuQixXQUFXO1lBVFgsWUFBWTtZQUVaLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbiB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3RuLXVzZXInO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGhhblF1eWVuTW9kZWwge1xyXG4gICAgc3ViamVjdFR5cGU6IG51bWJlcjtcclxuICAgIGlkVXNlckdyb3Vwcz86IHN0cmluZ1tdO1xyXG4gICAgaWRVc2Vycz86IHN0cmluZ1tdO1xyXG4gICAgYWRkUm9sZUlkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICByZW1vdmVSb2xlSWRzPzogc3RyaW5nW10gPSBbXTtcclxuICAgIGFkZFBlcm1pc3Npb25JZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcmVtb3ZlUGVybWlzc2lvbklkcz86IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoaW5pdDogUGhhblF1eWVuTW9kZWwpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBpbml0KSB7XHJcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IGluaXRba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlO1xyXG4gICAgcmVhZG9ubHkgX2NvbmZpZzogYW55O1xyXG4gICAgcmVhZG9ubHkgaWdub3JlQWRtaW4gPSBmYWxzZTtcclxuICAgIGRlbGF5Q2hlY2tQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgcm9vdDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XHJcbiAgICBhcHBDb2RlOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FwcENvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uYXV0aG9yaXphdGlvbkVuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L3Blcm1pc3Npb25gKTtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmF1dGhvcml6YXRpb25FbmRwb2ludDtcclxuICAgICAgICB0aGlzLmlnbm9yZUFkbWluID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50LmlzSWdub3JlQWRtaW47XHJcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fY29uZmlnLmFwcENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJQZXJtaXNzaW9uQ2FjaGVBbGwoKSB7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICBjb25zdCBsc3RBcGlFbmRwb2ludCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFwaURvbWFpbiA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW47XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5OYW1lIGluIGFwaURvbWFpbikge1xyXG4gICAgICAgICAgICBpZiAoZG9tYWluTmFtZS5zdGFydHNXaXRoKCctJykgfHwgZG9tYWluTmFtZS5zdGFydHNXaXRoKCcxJykgfHwgZG9tYWluTmFtZSA9PSAnZ2F0ZXdheScpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCByZWFsRG9tYWluTmFtZSA9IGRvbWFpbk5hbWUuc3BsaXQoJ0VuZHBvaW50JykgPyBkb21haW5OYW1lLnNwbGl0KCdFbmRwb2ludCcpWzBdIDogZG9tYWluTmFtZTtcclxuICAgICAgICAgICAgbHN0QXBpRW5kcG9pbnQucHVzaChyZWFsRG9tYWluTmFtZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJQZXJtaXNzaW9uQ2FjaGUoWy4uLmxzdEFwcENvZGVzLCAuLi5sc3RBcGlFbmRwb2ludF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGVybWlzc2lvbkNhY2hlKGxzdE1vZHVsZTogc3RyaW5nW10pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NsZWFyUGVybWlzc2lvbkNhY2hlYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdE1vZHVsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEN1cnJlbnRVc2VyUGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEFsbEJhc2VQZXJtaXNzaW9uKHVzZXJJZD86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWxsQmFzZVBlcm1pc3Npb25gO1xyXG4gICAgICAgIC8vIHJldHVybiBz4bubbSB2w6wgxJHDonkgbMOgIHRyxrDhu51uZyBo4bujcCBs4bqleSBwZXJtaXNzaW9uIHRoZW8gSWQgY+G7p2EgVXNlclxyXG4gICAgICAgIC8vIGtvIHNldCBsb2NhbCBzdG9yYWdlIHbDrCBz4bq9IGzDoG0gaOG7j25nIHF1eeG7gW4gY+G7p2EgbmfGsOG7nWkgZMO5bmcgaGnhu4duIHThuqFpXHJcbiAgICAgICAgaWYgKHVzZXJJZCAmJiB1c2VySWQgIT0gJycgJiYgdXNlcklkICE9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwgKyBgP3VzZXJJZD0ke3VzZXJJZH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICBpZiAodXNlclxyXG4gICAgICAgICAgICAmJiAodXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKVxyXG4gICAgICAgICAgICB8fCAodXNlci5pc2FkbWluICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICAvLyBO4bq/dSBDw7MgZXJyb3IgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiB04buVbmcgaOG7o3AgdGjDrCBxdWF5IHbhu4EgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiBk4buxYSB2w6BvIHThu6tuZyBtb2R1bGVcclxuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzIHx8IHJlcy5kYXRhID09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZUFycjogUHJvbWlzZTxzdHJpbmdbXT5bXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvZGUgb2YgbHN0QXBwQ29kZXMpIHtcclxuICAgICAgICAgICAgICAgIHByb21pc2VBcnIucHVzaCh0aGlzLmdldFNlcnZpY2VQZXJtaXNzaW9uKGNvZGUpKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFycik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCBsb2NhbCBzdG9yYWdlIGNobyBwZXJtaXNzaW9uIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIGxzdEFwcENvZGVzKSB7XHJcbiAgICAgICAgICAgIGxldCBwZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS50b1VwcGVyQ2FzZSgpICE9IHNlcnZpY2UudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgPSByZXMuZGF0YVtrZXldO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gYEFVVEhPUklaQVRJT04uJHtzZXJ2aWNlLnRvVXBwZXJDYXNlKCl9YDtcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZUl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHBlcm1pc3Npb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJ1eeG7gW4gdsOgbyBkYW5oIHPDoWNoIHBlcm1pc2lvbiBj4bqnbiBjaGVja1xyXG4gICAgICogQHBhcmFtIGxzdFBlcm1pc3Npb25Db2RlIG5o4buvbmcgcGVycm1pc2lvbiBjb2RlIGPhuqduIGNoZWNrID0+IG7Dqm4gZMO5bmcgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIGNoZWNrIGPDoWMgYnV0dG9uIHRyb25nIGNvZGVcclxuICAgICAqIEByZXR1cm5zIHRy4bqjIHJhIGPDoWMgcGVycm1pc2lvbkNvZGUgY8OzIHF1eeG7gW5cclxuICAgICAqL1xyXG4gICAgZ2V0UGVybWlzc2lvbkF1dGhvcml6ZWQobHN0UGVybWlzc2lvbkNvZGU6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGxzdFBlcm1pc3Npb25Db2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGxzdFBlcm1pc3Npb25Db2RlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsc3RQZXJtaXNzaW9uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF3YWl0IHRoaXMuaXNBdXRob3JpemVkUGVybWlzc2lvbihpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaXNBdXRob3JpemVkUGVybWlzc2lvbihwZXJtaXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICAvLyByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5kZWxheSgxMDApO1xyXG4gICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbih0aGlzLmFwcENvZGUsIHBlcm1pc3Npb24pO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGlzQXV0aG9yaXplZChzZXJ2aWNlOiBzdHJpbmcsIHBlcm1pc3Npb246IHN0cmluZywgY2hlY0Zvck1lbnU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXMuX2FwcENvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcclxuICAgICAgICAvLyByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5kZWxheSgxMDApO1xyXG4gICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbihzZXJ2aWNlLCBwZXJtaXNzaW9uLCBjaGVjRm9yTWVudSk7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tQZXJtaXNzaW9uKHNlcnZpY2UsIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcsIGNoZWNrRm9yTWVudTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9ICh0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKSBhcyBUblVzZXI7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4gJiYgdXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnICYmICF0aGlzLmlnbm9yZUFkbWluKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSBhd2FpdCB0aGlzLmdldFNlcnZpY2VQZXJtaXNzaW9uKHNlcnZpY2UpO1xyXG4gICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25zICYmIHVzZXJQZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tGb3JNZW51XHJcbiAgICAgICAgICAgICAgICAgICAgPyB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvblRvQ2hlY2spXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9jaGVja1Blcm1pc3Npb24odXNlclBlcm1pc3Npb25zLCBwZXJtaXNzaW9uVG9DaGVjayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgS2jDtG5nIGPDsyBxdXnhu4FuIHbhu5tpIHBow6JuIGjhu4cgWyR7c2VydmljZX1dYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiAoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tQZXJtaXNzaW9uKHVzZXJQZXJtaXNzaW9uczogc3RyaW5nW10sIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2hlY2sgcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgIC8vIGR1eeG7h3QgcXVhIHThu6tuZyBwZXJtaXNzaW9uIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgZm9yIChjb25zdCB1c2VyUGVybWlzc2lvbiBvZiB1c2VyUGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgLy8gYmnhur9uIMSR4buDIGJyZWFrIGto4buPaSB2w7JuZyBraGkgbmfGsOG7nWkgZMO5bmcgxJHGsOG7o2MgYXV0aG9yaXplZFxyXG4gICAgICAgICAgICBsZXQgYnJlYWtPdXRlckxvb3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gcG9pbnRlciBwZXJtaXNzaW9uIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgICAgIGxldCB1c2VyUGVybWlzc2lvblBvaW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAvLyBwb2ludGVyIHBlcm1pc3Npb24gxJFhbmcgY2hlY2tcclxuICAgICAgICAgICAgbGV0IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA9IDA7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIHThu6tuZyBjaGFyIGPhu6dhIDIgbeG6o25nXHJcbiAgICAgICAgICAgIGZvciAoOyBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPCBwZXJtaXNzaW9uVG9DaGVjay5sZW5ndGg7KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBu4bq/dSBjaGFyIGzDoCBrw70gdOG7sSBi4bqvdCDEkeG6p3UgdGVtcGxhdGUgPT4gdOG7i25oIHRp4bq/biBwb2ludGVyIGPhu6dhIDIgbeG6o25nXHJcbiAgICAgICAgICAgICAgICBsZXQgbmVlZFJlY2hlY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdID09ICd7Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNobyDEkeG6v24ga2hpIHTDrG0gxJHGsOG7o2Mga8O9IHThu7EgJy8nIHRp4bq/cCB0aGVvIHRow6wgZOG7q25nIGzhuqFpXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlciA8IHVzZXJQZXJtaXNzaW9uLmxlbmd0aDsgdXNlclBlcm1pc3Npb25Qb2ludGVyKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnfScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsrdXNlclBlcm1pc3Npb25Qb2ludGVyOyAvLyB0aeG6v24gdGnhur9uIMSR4bq/biBrw70gdOG7sSBzYXUga+G6v3QgdGjDumMgdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdHLGsOG7nW5nIGjhu6NwIHRyxrDhu51uZyBo4bujcCBjaHXhu5dpIHRlbXBsYXRlIGPDsyBk4bqhbmcgXCJ7dGVtcGxhdGV9YWNzZWtqZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vID0+IGPhuqduIGNoZWNrIGPDoWMga8O9IHThu7Egc2F1IHRlbXBsYXRlIHbDoCB0csaw4bubYyBrw70gdOG7sSAnLydcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0gIT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkUmVjaGVjayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdXNlclBlcm1pc3Npb25Qb2ludGVyIDwgdXNlclBlcm1pc3Npb24ubGVuZ3RoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblBvaW50ZXIgPT0gdXNlclBlcm1pc3Npb24ubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0gIT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA8IHBlcm1pc3Npb25Ub0NoZWNrLmxlbmd0aDsgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA9PSBwZXJtaXNzaW9uVG9DaGVjay5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2tbcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyXSA9PSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBicmVha0lubmVyTG9vcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRSZWNoZWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgbOG6oWkgY2hvIHRyxrDhu51uZyBo4bujcCBjaHXhu5dpIHRlbXBsYXRlIGPDsyBk4bqhbmcgXCJ7dGVtcGxhdGV9YWNzbGVrZmpcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGR1eeG7h3QgbmfGsOG7o2MgbOG6oWkgY2hvIMSR4bq/biBraGkgZ+G6t3Aga8O9IHThu7Ega+G6v3QgdGjDumMgdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcFVzZXJQb2ludGVyID0gdXNlclBlcm1pc3Npb25Qb2ludGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVG9DaGVja1BvaW50ZXIgPSBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHVzZXJQZXJtaXNzaW9uW3RlbXBVc2VyUG9pbnRlcl0gIT0gJ30nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJDaGFyID0gdXNlclBlcm1pc3Npb25bdGVtcFVzZXJQb2ludGVyXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uQ2hhciA9IHBlcm1pc3Npb25Ub0NoZWNrW3RlbXBUb0NoZWNrUG9pbnRlcl0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ga8O9IHThu7Ega2jDoWMgbmhhdSA9PiBicmVhayBraOG7j2kgdsOybmcga2nhu4NtIHRyYSB0cm9uZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlckNoYXIgIT0gcGVybWlzc2lvbkNoYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrSW5uZXJMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBVc2VyUG9pbnRlci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wVG9DaGVja1BvaW50ZXItLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrSW5uZXJMb29wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlckNoYXIgPSB1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0b0NoZWNrQ2hhciA9IHBlcm1pc3Npb25Ub0NoZWNrW3Blcm1pc3Npb25Ub0NoZWNrUG9pbnRlcl0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIC8vIG7hur91IHVzZXJQZXJtaXNzaW9uIMSRYW5nIOG7nyBpbmRleCBjdeG7kWlcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblBvaW50ZXIgPT0gdXNlclBlcm1pc3Npb24ubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXIgY3Xhu5FpIGPhu6dhIDIgbeG6o25nICh0cuG7qyBraGkgbMOgIGvDvSB04buxIGvhur90IHRow7pjIHRlbXBsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHbDoCBjxaluZyBwaOG6o2kgbMOgIGNoYXIgY3Xhu5FpIGPhu6dhIG3huqNuZyBwZXJtaXNzaW9uIGPhuqduIGNoZWNrXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gPT4gbmfGsOG7nWkgZMO5bmcgYXV0aG9yaXplZCB2w6AgYnJlYWsga2jhu49pIHbDsm5nIGzhurdwIG5nb8OgaSBjw7luZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgodXNlckNoYXIgPT0gJ30nIHx8IHVzZXJDaGFyID09IHRvQ2hlY2tDaGFyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPT0gcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha091dGVyTG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXIgY8OzIGdp4buRbmcgbmhhdSBraMO0bmcsIGtow7RuZyBnaeG7kW5nIHRow6wgYnJlYWsga2jhu49pIHbDsm5nIGNoZWNrXHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckNoYXIgIT0gdG9DaGVja0NoYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBu4bq/dSBjaGFyIGdp4buRbmcgbmhhdSB0aMOsIHRp4bq/cCB04bulYyB2w7JuZyBsxINwXHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIrKztcclxuICAgICAgICAgICAgICAgIHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChicmVha091dGVyTG9vcCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzQXV0aG9yaXplZDtcclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tQZXJtaXNzaW9uT2xkKHVzZXJQZXJtaXNzaW9uczogc3RyaW5nW10sIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2hlY2sgcXV54buBbiB0aGVvIGPDoWNoIGPFqSBu4bq/dSB0csaw4budbmcgaOG7jXAgbMOgIHBow6JuIHF1eeG7gW4gbW9kdWxlXHJcbiAgICAgICAgaWYgKHBlcm1pc3Npb25Ub0NoZWNrLmluY2x1ZGVzKCdNT0RVTEUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXNlclBlcm1pc3Npb25zLmluY2x1ZGVzKHBlcm1pc3Npb25Ub0NoZWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCB1c2VyUGVybWlzc2lvbiBvZiB1c2VyUGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgLy8gQ+G6r3QgY2h14buXaSBwZXJtaXNzaW9uIHRow6BuaCBt4bqjbmcgxJHhu4MgeGVtIG3hu5dpIGZyYWdlbWVudCBjw7Mga2jhu5twIG5oYXUga2jDtG5nXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9uRnJhZ21lbnRzID0gKHVzZXJQZXJtaXNzaW9uIGFzIHN0cmluZykuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbkZyYWdtZW50cyA9IHBlcm1pc3Npb25Ub0NoZWNrLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBN4bqjbmcga2jDoWMgxJHhu5kgZMOgaSB0aMOsIHRob8OhdCBz4bubbVxyXG4gICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoICE9IHBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYmnhur9uIGZsYWcgcmEgaGnhu4d1IG5nxrDhu51pIGTDuW5nIGF1dGhvcml6ZWQgdsOgIG91dCB2w7JuZ1xyXG4gICAgICAgICAgICBsZXQgYnJlYWtMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIG7hur91IHThuqV0IGPhuqMgcGjhuqduIHThu60ga2jhu5twIG5oYXUgPT4gcGVybWlzc2lvbiBuw6B5IHRyw7luZyB2w6AgbmfGsOG7nWkgZMO5bmcgxJHGsOG7o2MgYXV0aG9yaXplZFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJGcmFnZW1lbnQgPSB1c2VyUGVybWlzc2lvbkZyYWdtZW50c1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uRnJhZ21lbnQgPSBwZXJtaXNzaW9uRnJhZ21lbnRzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIC8vIHNraXAgcXVhIGPDoWMgcGjhuqduIHThu60gY8OzIGvDvSB04buxIGLhuq90IMSR4bqndSBsw6AgJ3snXHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckZyYWdlbWVudFswXSA9PSAneycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrTG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJGcmFnZW1lbnQudG9Mb3dlckNhc2UoKSAhPSBwZXJtaXNzaW9uRnJhZ21lbnQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IHBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYnJlYWtMb29wKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNBdXRob3JpemVkO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpc0F1dGhvcml6ZWRCeVBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBBcnJheTxQZXJtaXNzaW9uPiwgb3BlcmF0b3IgPSAnT1InLCBpZ25vcmVBZG1pbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wZXJhdG9yLnRvVXBwZXJDYXNlKCkgPT0gJ09SJykge1xyXG4gICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlcnZpY2VQZXJtaXNzaW9uKGl0ZW0uc2VydmljZSkudGhlbihwZXJtaXNzaW9uUmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVybWlzc2lvblJlc3VsdC5pbmNsdWRlcyhpdGVtLnBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShpc0F1dGhvcml6ZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNlcnZpY2VQZXJtaXNzaW9uKHNlcnZpY2UsIG92ZXJyaWRlTG9jYWxTdG9yYWdlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gYEFVVEhPUklaQVRJT04uJHtzZXJ2aWNlLnRvVXBwZXJDYXNlKCl9YDtcclxuICAgICAgICBsZXQgaGFzTG9jYWxTdG9yYWdlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFvdmVycmlkZUxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlSXRlbSAmJiBzdG9yYWdlSXRlbSAhPT0gJ251bGwnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIGhhc0xvY2FsU3RvcmFnZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25zQnlTZXJ2aWNlP3NlcnZpY2U9JHtzZXJ2aWNlfWA7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhhc0xvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpKTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9uSWRzQnlNb2R1bGUobW9kdWxlQ29kZTogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGVybWlzc2lvbklkc0J5TW9kdWxlLyR7bW9kdWxlQ29kZX0vJHt1c2VySWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGhhblF1eWVuTmd1b2lEdW5nKG1vZGVsOiBQaGFuUXV5ZW5Nb2RlbCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vUGhhblF1eWVuTmd1b2lEdW5nYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIG1vZGVsKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
420
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFLdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQUU3QyxNQUFNLE9BQU8sY0FBYztJQVN2QixZQUFZLElBQW9CO1FBTGhDLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFDM0Isa0JBQWEsR0FBYyxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBQ2pDLHdCQUFtQixHQUFjLEVBQUUsQ0FBQztRQUdoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztDQUNKO0FBS0QsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFTOUMsWUFDSSxJQUFnQixFQUNoQixRQUFrQixFQUNWLG9CQUF5QyxFQUN6QyxZQUF5QixFQUN6QixhQUEyQixFQUMzQixXQUFzQztRQUU5QyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFB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QUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDekIsQ0FBQztLQUFBO0lBRUQsd0JBQXdCLENBQUMsVUFBa0IsRUFBRSxNQUFjO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsNkJBQTZCLFVBQVUsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXFCO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUscUJBQXFCLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOzs7O1lBM1pKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBL0JRLFVBQVU7WUFDRSxRQUFRO1lBU3BCLG1CQUFtQjtZQUNuQixXQUFXO1lBVFgsWUFBWTtZQUVaLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbiB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3RuLXVzZXInO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGhhblF1eWVuTW9kZWwge1xyXG4gICAgc3ViamVjdFR5cGU6IG51bWJlcjtcclxuICAgIGlkVXNlckdyb3Vwcz86IHN0cmluZ1tdO1xyXG4gICAgaWRVc2Vycz86IHN0cmluZ1tdO1xyXG4gICAgYWRkUm9sZUlkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICByZW1vdmVSb2xlSWRzPzogc3RyaW5nW10gPSBbXTtcclxuICAgIGFkZFBlcm1pc3Npb25JZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcmVtb3ZlUGVybWlzc2lvbklkcz86IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoaW5pdDogUGhhblF1eWVuTW9kZWwpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBpbml0KSB7XHJcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IGluaXRba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlO1xyXG4gICAgcmVhZG9ubHkgX2NvbmZpZzogYW55O1xyXG4gICAgcmVhZG9ubHkgaWdub3JlQWRtaW4gPSBmYWxzZTtcclxuICAgIGRlbGF5Q2hlY2tQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgcm9vdDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XHJcbiAgICBhcHBDb2RlOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FwcENvbnRleHQ6IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uYXV0aG9yaXphdGlvbkVuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L3Blcm1pc3Npb25gKTtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xyXG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmF1dGhvcml6YXRpb25FbmRwb2ludDtcclxuICAgICAgICB0aGlzLmlnbm9yZUFkbWluID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50LmlzSWdub3JlQWRtaW47XHJcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fY29uZmlnLmFwcENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJQZXJtaXNzaW9uQ2FjaGVBbGwoKSB7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICBjb25zdCBsc3RBcGlFbmRwb2ludCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFwaURvbWFpbiA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW47XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5OYW1lIGluIGFwaURvbWFpbikge1xyXG4gICAgICAgICAgICBpZiAoZG9tYWluTmFtZS5zdGFydHNXaXRoKCctJykgfHwgZG9tYWluTmFtZS5zdGFydHNXaXRoKCcxJykgfHwgZG9tYWluTmFtZSA9PSAnZ2F0ZXdheScpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCByZWFsRG9tYWluTmFtZSA9IGRvbWFpbk5hbWUuc3BsaXQoJ0VuZHBvaW50JykgPyBkb21haW5OYW1lLnNwbGl0KCdFbmRwb2ludCcpWzBdIDogZG9tYWluTmFtZTtcclxuICAgICAgICAgICAgbHN0QXBpRW5kcG9pbnQucHVzaChyZWFsRG9tYWluTmFtZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJQZXJtaXNzaW9uQ2FjaGUoWy4uLmxzdEFwcENvZGVzLCAuLi5sc3RBcGlFbmRwb2ludF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGVybWlzc2lvbkNhY2hlKGxzdE1vZHVsZTogc3RyaW5nW10pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NsZWFyUGVybWlzc2lvbkNhY2hlYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdE1vZHVsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEN1cnJlbnRVc2VyUGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEFsbEJhc2VQZXJtaXNzaW9uKHVzZXJJZD86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWxsQmFzZVBlcm1pc3Npb25gO1xyXG4gICAgICAgIC8vIHJldHVybiBz4bubbSB2w6wgxJHDonkgbMOgIHRyxrDhu51uZyBo4bujcCBs4bqleSBwZXJtaXNzaW9uIHRoZW8gSWQgY+G7p2EgVXNlclxyXG4gICAgICAgIC8vIGtvIHNldCBsb2NhbCBzdG9yYWdlIHbDrCBz4bq9IGzDoG0gaOG7j25nIHF1eeG7gW4gY+G7p2EgbmfGsOG7nWkgZMO5bmcgaGnhu4duIHThuqFpXHJcbiAgICAgICAgaWYgKHVzZXJJZCAmJiB1c2VySWQgIT0gJycgJiYgdXNlcklkICE9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwgKyBgP3VzZXJJZD0ke3VzZXJJZH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICBpZiAodXNlclxyXG4gICAgICAgICAgICAmJiAodXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKVxyXG4gICAgICAgICAgICB8fCAodXNlci5pc2FkbWluICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICAvLyBO4bq/dSBDw7MgZXJyb3IgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiB04buVbmcgaOG7o3AgdGjDrCBxdWF5IHbhu4EgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiBk4buxYSB2w6BvIHThu6tuZyBtb2R1bGVcclxuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzIHx8IHJlcy5kYXRhID09IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZUFycjogUHJvbWlzZTxzdHJpbmdbXT5bXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvZGUgb2YgbHN0QXBwQ29kZXMpIHtcclxuICAgICAgICAgICAgICAgIHByb21pc2VBcnIucHVzaCh0aGlzLmdldFNlcnZpY2VQZXJtaXNzaW9uKGNvZGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2V0IGxvY2FsIHN0b3JhZ2UgY2hvIHBlcm1pc3Npb24gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICBmb3IgKGNvbnN0IHNlcnZpY2Ugb2YgbHN0QXBwQ29kZXMpIHtcclxuICAgICAgICAgICAgbGV0IHBlcm1pc3Npb25zID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LnRvVXBwZXJDYXNlKCkgIT0gc2VydmljZS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyA9IHJlcy5kYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgQVVUSE9SSVpBVElPTi4ke3NlcnZpY2UudG9VcHBlckNhc2UoKX1gO1xyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocGVybWlzc2lvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcnV54buBbiB2w6BvIGRhbmggc8OhY2ggcGVybWlzaW9uIGPhuqduIGNoZWNrXHJcbiAgICAgKiBAcGFyYW0gbHN0UGVybWlzc2lvbkNvZGUgbmjhu69uZyBwZXJybWlzaW9uIGNvZGUgY+G6p24gY2hlY2sgPT4gbsOqbiBkw7luZyB0cm9uZyB0csaw4budbmcgaOG7o3AgY2hlY2sgY8OhYyBidXR0b24gdHJvbmcgY29kZVxyXG4gICAgICogQHJldHVybnMgdHLhuqMgcmEgY8OhYyBwZXJybWlzaW9uQ29kZSBjw7MgcXV54buBblxyXG4gICAgICovXHJcbiAgICBnZXRQZXJtaXNzaW9uQXV0aG9yaXplZChsc3RQZXJtaXNzaW9uQ29kZTogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IChhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKSBhcyBUblVzZXI7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobHN0UGVybWlzc2lvbkNvZGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobHN0UGVybWlzc2lvbkNvZGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxzdFBlcm1pc3Npb25Db2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5pc0F1dGhvcml6ZWRQZXJtaXNzaW9uKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpc0F1dGhvcml6ZWRQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIC8vIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgIHdoaWxlICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tQZXJtaXNzaW9uKHRoaXMuYXBwQ29kZSwgcGVybWlzc2lvbik7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaXNBdXRob3JpemVkKHNlcnZpY2U6IHN0cmluZywgcGVybWlzc2lvbjogc3RyaW5nLCBjaGVjRm9yTWVudTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fYXBwQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIC8vIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgIHdoaWxlICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tQZXJtaXNzaW9uKHNlcnZpY2UsIHBlcm1pc3Npb24sIGNoZWNGb3JNZW51KTtcclxuICAgICAgICAvLyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja1Blcm1pc3Npb24oc2VydmljZSwgcGVybWlzc2lvblRvQ2hlY2s6IHN0cmluZywgY2hlY2tGb3JNZW51OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gKHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbiAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IGF3YWl0IHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oc2VydmljZSk7XHJcbiAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvbnMgJiYgdXNlclBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGVja0Zvck1lbnVcclxuICAgICAgICAgICAgICAgICAgICA/IHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uVG9DaGVjaylcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NoZWNrUGVybWlzc2lvbih1c2VyUGVybWlzc2lvbnMsIHBlcm1pc3Npb25Ub0NoZWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBLaMO0bmcgY8OzIHF1eeG7gW4gduG7m2kgcGjDom4gaOG7hyBbJHtzZXJ2aWNlfV1gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgICAgcmV0dXJuIChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja1Blcm1pc3Npb24odXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSwgcGVybWlzc2lvblRvQ2hlY2s6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAvLyBjaGVjayBwZXJtaXNzaW9uIGPhu6dhIG5nxrDhu51pIGTDuW5nXHJcbiAgICAgICAgLy8gZHV54buHdCBxdWEgdOG7q25nIHBlcm1pc3Npb24gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICBmb3IgKGNvbnN0IHVzZXJQZXJtaXNzaW9uIG9mIHVzZXJQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICAvLyBiaeG6v24gxJHhu4MgYnJlYWsga2jhu49pIHbDsm5nIGtoaSBuZ8aw4budaSBkw7luZyDEkcaw4bujYyBhdXRob3JpemVkXHJcbiAgICAgICAgICAgIGxldCBicmVha091dGVyTG9vcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBwb2ludGVyIHBlcm1pc3Npb24gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICAgICAgbGV0IHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9IDA7XHJcbiAgICAgICAgICAgIC8vIHBvaW50ZXIgcGVybWlzc2lvbiDEkWFuZyBjaGVja1xyXG4gICAgICAgICAgICBsZXQgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyID0gMDtcclxuICAgICAgICAgICAgLy8gY2hlY2sgdOG7q25nIGNoYXIgY+G7p2EgMiBt4bqjbmdcclxuICAgICAgICAgICAgZm9yICg7IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA8IHBlcm1pc3Npb25Ub0NoZWNrLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgICAgIC8vIG7hur91IGNoYXIgbMOgIGvDvSB04buxIGLhuq90IMSR4bqndSB0ZW1wbGF0ZSA9PiB04buLbmggdGnhur9uIHBvaW50ZXIgY+G7p2EgMiBt4bqjbmdcclxuICAgICAgICAgICAgICAgIGxldCBuZWVkUmVjaGVjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0gPT0gJ3snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hvIMSR4bq/biBraGkgdMOsbSDEkcaw4bujYyBrw70gdOG7sSAnLycgdGnhur9wIHRoZW8gdGjDrCBk4burbmcgbOG6oWlcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgdXNlclBlcm1pc3Npb25Qb2ludGVyIDwgdXNlclBlcm1pc3Npb24ubGVuZ3RoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25Qb2ludGVyID09IHVzZXJQZXJtaXNzaW9uLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdICE9ICd9Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKyt1c2VyUGVybWlzc2lvblBvaW50ZXI7IC8vIHRp4bq/biB0aeG6v24gxJHhur9uIGvDvSB04buxIHNhdSBr4bq/dCB0aMO6YyB0ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0csaw4budbmcgaOG7o3AgdHLGsOG7nW5nIGjhu6NwIGNodeG7l2kgdGVtcGxhdGUgY8OzIGThuqFuZyBcInt0ZW1wbGF0ZX1hY3Nla2pmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gPT4gY+G6p24gY2hlY2sgY8OhYyBrw70gdOG7sSBzYXUgdGVtcGxhdGUgdsOgIHRyxrDhu5tjIGvDvSB04buxICcvJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRSZWNoZWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIgPCB1c2VyUGVybWlzc2lvbi5sZW5ndGg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyIDwgcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoOyBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2tQb2ludGVyID09IHBlcm1pc3Npb25Ub0NoZWNrLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uVG9DaGVja1twZXJtaXNzaW9uVG9DaGVja1BvaW50ZXJdID09ICcvJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJyZWFrSW5uZXJMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAobmVlZFJlY2hlY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBs4bqhaSBjaG8gdHLGsOG7nW5nIGjhu6NwIGNodeG7l2kgdGVtcGxhdGUgY8OzIGThuqFuZyBcInt0ZW1wbGF0ZX1hY3NsZWtmalwiXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZHV54buHdCBuZ8aw4bujYyBs4bqhaSBjaG8gxJHhur9uIGtoaSBn4bq3cCBrw70gdOG7sSBr4bq/dCB0aMO6YyB0ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVXNlclBvaW50ZXIgPSB1c2VyUGVybWlzc2lvblBvaW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBUb0NoZWNrUG9pbnRlciA9IHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodXNlclBlcm1pc3Npb25bdGVtcFVzZXJQb2ludGVyXSAhPSAnfScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlckNoYXIgPSB1c2VyUGVybWlzc2lvblt0ZW1wVXNlclBvaW50ZXJdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25DaGFyID0gcGVybWlzc2lvblRvQ2hlY2tbdGVtcFRvQ2hlY2tQb2ludGVyXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBrw70gdOG7sSBraMOhYyBuaGF1ID0+IGJyZWFrIGto4buPaSB2w7JuZyBraeG7g20gdHJhIHRyb25nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyQ2hhciAhPSBwZXJtaXNzaW9uQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtJbm5lckxvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFVzZXJQb2ludGVyLS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUb0NoZWNrUG9pbnRlci0tO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYnJlYWtJbm5lckxvb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyQ2hhciA9IHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2tDaGFyID0gcGVybWlzc2lvblRvQ2hlY2tbcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gbuG6v3UgdXNlclBlcm1pc3Npb24gxJFhbmcg4bufIGluZGV4IGN14buRaVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgY2hhciBjdeG7kWkgY+G7p2EgMiBt4bqjbmcgKHRy4burIGtoaSBsw6Aga8O9IHThu7Ega+G6v3QgdGjDumMgdGVtcGxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdsOgIGPFqW5nIHBo4bqjaSBsw6AgY2hhciBjdeG7kWkgY+G7p2EgbeG6o25nIHBlcm1pc3Npb24gY+G6p24gY2hlY2tcclxuICAgICAgICAgICAgICAgICAgICAvLyA9PiBuZ8aw4budaSBkw7luZyBhdXRob3JpemVkIHbDoCBicmVhayBraOG7j2kgdsOybmcgbOG6t3Agbmdvw6BpIGPDuW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh1c2VyQ2hhciA9PSAnfScgfHwgdXNlckNoYXIgPT0gdG9DaGVja0NoYXIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlciA9PSBwZXJtaXNzaW9uVG9DaGVjay5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrT3V0ZXJMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgY2hhciBjw7MgZ2nhu5FuZyBuaGF1IGtow7RuZywga2jDtG5nIGdp4buRbmcgdGjDrCBicmVhayBraOG7j2kgdsOybmcgY2hlY2tcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyQ2hhciAhPSB0b0NoZWNrQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIG7hur91IGNoYXIgZ2nhu5FuZyBuaGF1IHRow6wgdGnhur9wIHThu6VjIHbDsm5nIGzEg3BcclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25Ub0NoZWNrUG9pbnRlcisrO1xyXG4gICAgICAgICAgICAgICAgdXNlclBlcm1pc3Npb25Qb2ludGVyKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJyZWFrT3V0ZXJMb29wKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNBdXRob3JpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIF9jaGVja1Blcm1pc3Npb25PbGQodXNlclBlcm1pc3Npb25zOiBzdHJpbmdbXSwgcGVybWlzc2lvblRvQ2hlY2s6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAvLyBjaGVjayBxdXnhu4FuIHRoZW8gY8OhY2ggY8WpIG7hur91IHRyxrDhu51uZyBo4buNcCBsw6AgcGjDom4gcXV54buBbiBtb2R1bGVcclxuICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2suaW5jbHVkZXMoJ01PRFVMRScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyUGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvblRvQ2hlY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IHVzZXJQZXJtaXNzaW9uIG9mIHVzZXJQZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICAvLyBD4bqvdCBjaHXhu5dpIHBlcm1pc3Npb24gdGjDoG5oIG3huqNuZyDEkeG7gyB4ZW0gbeG7l2kgZnJhZ2VtZW50IGPDsyBraOG7m3AgbmhhdSBraMO0bmdcclxuICAgICAgICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25GcmFnbWVudHMgPSAodXNlclBlcm1pc3Npb24gYXMgc3RyaW5nKS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uRnJhZ21lbnRzID0gcGVybWlzc2lvblRvQ2hlY2suc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE3huqNuZyBraMOhYyDEkeG7mSBkw6BpIHRow6wgdGhvw6F0IHPhu5ttXHJcbiAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggIT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBiaeG6v24gZmxhZyByYSBoaeG7h3UgbmfGsOG7nWkgZMO5bmcgYXV0aG9yaXplZCB2w6Agb3V0IHbDsm5nXHJcbiAgICAgICAgICAgIGxldCBicmVha0xvb3AgPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gbuG6v3UgdOG6pXQgY+G6oyBwaOG6p24gdOG7rSBraOG7m3AgbmhhdSA9PiBwZXJtaXNzaW9uIG7DoHkgdHLDuW5nIHbDoCBuZ8aw4budaSBkw7luZyDEkcaw4bujYyBhdXRob3JpemVkXHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwZXJtaXNzaW9uRnJhZ21lbnRzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlckZyYWdlbWVudCA9IHVzZXJQZXJtaXNzaW9uRnJhZ21lbnRzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25GcmFnbWVudCA9IHBlcm1pc3Npb25GcmFnbWVudHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBxdWEgY8OhYyBwaOG6p24gdOG7rSBjw7Mga8O9IHThu7EgYuG6r3QgxJHhuqd1IGzDoCAneydcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyRnJhZ2VtZW50WzBdID09ICd7Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSBwZXJtaXNzaW9uRnJhZ21lbnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckZyYWdlbWVudC50b0xvd2VyQ2FzZSgpICE9IHBlcm1pc3Npb25GcmFnbWVudC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVha0xvb3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChicmVha0xvb3ApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0F1dGhvcml6ZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlzQXV0aG9yaXplZEJ5UGVybWlzc2lvbnMocGVybWlzc2lvbnM6IEFycmF5PFBlcm1pc3Npb24+LCBvcGVyYXRvciA9ICdPUicsIGlnbm9yZUFkbWluOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IChhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKSBhcyBUblVzZXI7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGlzQXV0aG9yaXplZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oaXRlbS5zZXJ2aWNlKS50aGVuKHBlcm1pc3Npb25SZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvci50b1VwcGVyQ2FzZSgpID09ICdPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25SZXN1bHQuaW5jbHVkZXMoaXRlbS5wZXJtaXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKGlzQXV0aG9yaXplZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0U2VydmljZVBlcm1pc3Npb24oc2VydmljZSwgb3ZlcnJpZGVMb2NhbFN0b3JhZ2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICBjb25zdCBrZXkgPSBgQVVUSE9SSVpBVElPTi4ke3NlcnZpY2UudG9VcHBlckNhc2UoKX1gO1xyXG4gICAgICAgIGxldCBoYXNMb2NhbFN0b3JhZ2UgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIW92ZXJyaWRlTG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VJdGVtICYmIHN0b3JhZ2VJdGVtICE9PSAnbnVsbCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2Uoc3RvcmFnZUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaGFzTG9jYWxTdG9yYWdlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGVybWlzc2lvbnNCeVNlcnZpY2U/c2VydmljZT0ke3NlcnZpY2V9YDtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGFzTG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSkpO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25JZHNCeU1vZHVsZShtb2R1bGVDb2RlOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uSWRzQnlNb2R1bGUvJHttb2R1bGVDb2RlfS8ke3VzZXJJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwaGFuUXV5ZW5OZ3VvaUR1bmcobW9kZWw6IFBoYW5RdXllbk1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9QaGFuUXV5ZW5OZ3VvaUR1bmdgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbW9kZWwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|