@abp/ng.permission-management 9.3.5 → 9.3.6

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.
@@ -298,7 +298,7 @@ class PermissionManagementComponent {
298
298
  return false;
299
299
  }
300
300
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: PermissionManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
301
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: PermissionManagementComponent, isStandalone: true, selector: "abp-permission-management", inputs: { providerName: "providerName", providerKey: "providerKey", hideBadges: "hideBadges", entityDisplayName: "entityDisplayName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "selectAllInThisTabsRef", predicate: ["selectAllInThisTabsRef"], descendants: true }, { propertyName: "selectAllInAllTabsRef", predicate: ["selectAllInAllTabsRef"], descendants: true }], exportAs: ["abpPermissionManagement"], ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg', scrollable: false }\">\r\n @if (data.entityDisplayName || entityDisplayName) {\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row d-flex align-items-center mb-2\">\r\n <div class=\"col\">\r\n <div class=\"input-group mb-2\">\r\n <span class=\"input-group-text\" id=\"basic-addon1\"><i class=\"bi bi-search\"></i></span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n id=\"permission-search\"\r\n placeholder=\"Filter\"\r\n [ngModel]=\"filter()\"\r\n (ngModelChange)=\"filter.set($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <fieldset class=\"border rounded-4 p-3\">\r\n <legend class=\"px-1 h5 mb-0\">\r\n {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\r\n </legend>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <li class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <a\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n @if (count.assignedCount > 0) {\r\n <span>({{ count.assignedCount }})</span>\r\n }\r\n </div>\r\n </a>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n @if (selectedGroupPermissions.length) {\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\r\n <div [ngStyle]=\"permission.style\" class=\"form-check mb-2\">\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n @if (!hideBadges) {\r\n @for (provider of permission.grantedProviders; track $index) {\r\n <span class=\"badge bg-primary text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n }\r\n }\r\n </label>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n }\r\n</abp-modal>\r\n", styles: [".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media (max-width: 768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "directive", type: ModalCloseDirective, selector: "[abpClose]" }] }); }
301
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: PermissionManagementComponent, isStandalone: true, selector: "abp-permission-management", inputs: { providerName: "providerName", providerKey: "providerKey", hideBadges: "hideBadges", entityDisplayName: "entityDisplayName", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "selectAllInThisTabsRef", predicate: ["selectAllInThisTabsRef"], descendants: true }, { propertyName: "selectAllInAllTabsRef", predicate: ["selectAllInAllTabsRef"], descendants: true }], exportAs: ["abpPermissionManagement"], ngImport: i0, template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg', scrollable: false }\">\r\n @if (data.entityDisplayName || entityDisplayName) {\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row d-flex align-items-center mb-2\">\r\n <div class=\"col\">\r\n <div class=\"input-group mb-2\">\r\n <span class=\"input-group-text\" id=\"basic-addon1\"><i class=\"bi bi-search\"></i></span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n id=\"permission-search\"\r\n placeholder=\"Filter\"\r\n [ngModel]=\"filter()\"\r\n (ngModelChange)=\"filter.set($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <fieldset class=\"border rounded-4 p-3\">\r\n <legend class=\"px-1 h5 mb-0\">\r\n {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\r\n </legend>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <li class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <a\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n @if (count.assignedCount > 0) {\r\n <span>({{ count.assignedCount }})</span>\r\n }\r\n </div>\r\n </a>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n @if (selectedGroupPermissions.length) {\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\r\n <div [ngStyle]=\"permission.style\" class=\"form-check mb-2\">\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n @if (!hideBadges) {\r\n @for (provider of permission.grantedProviders; track $index) {\r\n <span class=\"badge bg-primary text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n }\r\n }\r\n </label>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n }\r\n</abp-modal>\r\n", styles: [".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media(max-width:768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "pipe", type: LocalizationPipe, name: "abpLocalization" }, { kind: "component", type: ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "directive", type: ModalCloseDirective, selector: "[abpClose]" }] }); }
302
302
  }
303
303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: PermissionManagementComponent, decorators: [{
304
304
  type: Component,
@@ -309,7 +309,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImpor
309
309
  LocalizationPipe,
310
310
  ButtonComponent,
311
311
  ModalCloseDirective,
312
- ], template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg', scrollable: false }\">\r\n @if (data.entityDisplayName || entityDisplayName) {\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row d-flex align-items-center mb-2\">\r\n <div class=\"col\">\r\n <div class=\"input-group mb-2\">\r\n <span class=\"input-group-text\" id=\"basic-addon1\"><i class=\"bi bi-search\"></i></span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n id=\"permission-search\"\r\n placeholder=\"Filter\"\r\n [ngModel]=\"filter()\"\r\n (ngModelChange)=\"filter.set($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <fieldset class=\"border rounded-4 p-3\">\r\n <legend class=\"px-1 h5 mb-0\">\r\n {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\r\n </legend>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <li class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <a\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n @if (count.assignedCount > 0) {\r\n <span>({{ count.assignedCount }})</span>\r\n }\r\n </div>\r\n </a>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n @if (selectedGroupPermissions.length) {\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\r\n <div [ngStyle]=\"permission.style\" class=\"form-check mb-2\">\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n @if (!hideBadges) {\r\n @for (provider of permission.grantedProviders; track $index) {\r\n <span class=\"badge bg-primary text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n }\r\n }\r\n </label>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n }\r\n</abp-modal>\r\n", styles: [".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media (max-width: 768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\n"] }]
312
+ ], template: "<abp-modal [(visible)]=\"visible\" [busy]=\"modalBusy\" [options]=\"{ size: 'lg', scrollable: false }\">\r\n @if (data.entityDisplayName || entityDisplayName) {\r\n <ng-template #abpHeader>\r\n <h4>\r\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\r\n {{ entityDisplayName || data.entityDisplayName }}\r\n </h4>\r\n </ng-template>\r\n <ng-template #abpBody>\r\n <div class=\"row d-flex align-items-center mb-2\">\r\n <div class=\"col\">\r\n <div class=\"input-group mb-2\">\r\n <span class=\"input-group-text\" id=\"basic-addon1\"><i class=\"bi bi-search\"></i></span>\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n id=\"permission-search\"\r\n placeholder=\"Filter\"\r\n [ngModel]=\"filter()\"\r\n (ngModelChange)=\"filter.set($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"col-auto\">\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInAllTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-all-tabs\"\r\n name=\"select-all-in-all-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectAllTab\"\r\n (click)=\"onClickSelectAll()\"\r\n [disabled]=\"disabledSelectAllInAllTabs\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-all-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\r\n }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n <fieldset class=\"border rounded-4 p-3\">\r\n <legend class=\"px-1 h5 mb-0\">\r\n {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\r\n </legend>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"overflow-auto lpx-scroll-pills-container scroll-in-modal\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n @for (group of permissionGroups(); track $index) {\r\n <li class=\"border nav-item\">\r\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\r\n <a\r\n class=\"nav-link pointer\"\r\n [class.active]=\"selectedGroup?.name === group?.name\"\r\n (click)=\"onChangeGroup(group)\"\r\n (select)=\"setDisabled(group.permissions)\"\r\n >\r\n <div [class.font-weight-bold]=\"count.assignedCount\">\r\n {{ group?.displayName }}\r\n @if (count.assignedCount > 0) {\r\n <span>({{ count.assignedCount }})</span>\r\n }\r\n </div>\r\n </a>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-8 scroll-in-modal\">\r\n <div class=\"ps-1\">\r\n @if (selectedGroupPermissions.length) {\r\n <div class=\"form-check mb-2\">\r\n <input\r\n #selectAllInThisTabsRef\r\n type=\"checkbox\"\r\n id=\"select-all-in-this-tabs\"\r\n name=\"select-all-in-this-tabs\"\r\n class=\"form-check-input\"\r\n [(ngModel)]=\"selectThisTab\"\r\n [disabled]=\"disableSelectAllTab\"\r\n (click)=\"onClickSelectThisTab()\"\r\n />\r\n <label class=\"form-check-label\" for=\"select-all-in-this-tabs\">{{\r\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\r\n }}</label>\r\n </div>\r\n <hr class=\"my-2\" />\r\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\r\n <div [ngStyle]=\"permission.style\" class=\"form-check mb-2\">\r\n <input\r\n #permissionCheckbox\r\n type=\"checkbox\"\r\n [checked]=\"getChecked(permission.name)\"\r\n [value]=\"getChecked(permission.name)\"\r\n [attr.id]=\"permission.name\"\r\n class=\"form-check-input\"\r\n [disabled]=\"isGrantedByOtherProviderName(permission.grantedProviders)\"\r\n (click)=\"onClickCheckbox(permission, permissionCheckbox.value)\"\r\n />\r\n <label class=\"form-check-label\" [attr.for]=\"permission.name\"\r\n >{{ permission.displayName }}\r\n @if (!hideBadges) {\r\n @for (provider of permission.grantedProviders; track $index) {\r\n <span class=\"badge bg-primary text-dark\"\r\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\r\n >\r\n }\r\n }\r\n </label>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n </ng-template>\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-outline-primary\" abpClose>\r\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button iconClass=\"fa fa-check\" (click)=\"submit()\">{{\r\n 'AbpIdentity::Save' | abpLocalization\r\n }}</abp-button>\r\n </ng-template>\r\n }\r\n</abp-modal>\r\n", styles: [".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media(max-width:768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\n"] }]
313
313
  }], propDecorators: { providerName: [{
314
314
  type: Input
315
315
  }], providerKey: [{
@@ -1 +1 @@
1
- {"version":3,"file":"abp-ng.permission-management.mjs","sources":["../tmp-esm2022/lib/components/permission-management.component.js","../tmp-esm2022/lib/permission-management.module.js","../tmp-esm2022/abp-ng.permission-management.js"],"sourcesContent":["import { ConfigStateService, LocalizationPipe } from '@abp/ng.core';\nimport { ButtonComponent, ModalCloseDirective, ModalComponent, ToasterService, } from '@abp/ng.theme.shared';\nimport { PermissionsService, } from '@abp/ng.permission-management/proxy';\nimport { Component, computed, EventEmitter, inject, Input, Output, QueryList, signal, ViewChildren, } from '@angular/core';\nimport { concat, of } from 'rxjs';\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@angular/common\";\nexport class PermissionManagementComponent {\n constructor() {\n this.service = inject(PermissionsService);\n this.configState = inject(ConfigStateService);\n this.toasterService = inject(ToasterService);\n this.hideBadges = false;\n this._visible = false;\n this.visibleChange = new EventEmitter();\n this.data = { groups: [], entityDisplayName: '' };\n this.permissions = [];\n this.selectThisTab = false;\n this.selectAllTab = false;\n this.disableSelectAllTab = false;\n this.disabledSelectAllInAllTabs = false;\n this.modalBusy = false;\n this.filter = signal('');\n this.selectedGroupPermissions = [];\n this.permissionGroupSignal = signal([]);\n this.permissionGroups = computed(() => {\n const search = this.filter().toLowerCase().trim();\n let groups = this.permissionGroupSignal();\n if (!search) {\n this.setSelectedGroup(groups[0]);\n return groups;\n }\n const includesSearch = text => text.toLowerCase().includes(search);\n groups = groups.filter(group => group.permissions.some(permission => includesSearch(permission.displayName) || includesSearch(group.displayName)));\n if (groups.length) {\n this.setSelectedGroup(groups[0]);\n }\n else {\n this.selectedGroupPermissions = [];\n }\n return groups;\n });\n this.trackByFn = (_, item) => item.name;\n }\n get visible() {\n return this._visible;\n }\n set visible(value) {\n if (value === this._visible) {\n return;\n }\n if (value) {\n this.openModal().subscribe(() => {\n this._visible = true;\n this.visibleChange.emit(true);\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\n .pipe(take(1))\n .subscribe(() => {\n this.initModal();\n });\n });\n }\n else {\n this.setSelectedGroup(null);\n this._visible = false;\n this.visibleChange.emit(false);\n this.filter.set('');\n }\n }\n getChecked(name) {\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\n }\n setSelectedGroup(group) {\n this.selectedGroup = group;\n if (!this.selectedGroup) {\n this.selectedGroupPermissions = [];\n return;\n }\n const margin = `margin-${document.body.dir === 'rtl' ? 'right' : 'left'}.px`;\n const permissions = (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\n [];\n this.selectedGroupPermissions = permissions.map(permission => ({\n ...permission,\n style: { [margin]: findMargin(permissions, permission) },\n isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\n }));\n }\n setDisabled(permissions) {\n if (permissions.length) {\n this.disableSelectAllTab = permissions.every(permission => permission.isGranted &&\n permission.grantedProviders?.every(p => p.providerName !== this.providerName));\n }\n else {\n this.disableSelectAllTab = false;\n }\n }\n isGrantedByOtherProviderName(grantedProviders) {\n if (grantedProviders.length) {\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\n }\n return false;\n }\n onClickCheckbox(clickedPermission) {\n const { isGranted, grantedProviders } = clickedPermission;\n if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {\n return;\n }\n this.setSelectedGroup(this.selectedGroup);\n setTimeout(() => {\n this.updatePermissionStatus(clickedPermission);\n this.updateSelectedGroupPermissions(clickedPermission);\n this.setParentClicked(clickedPermission);\n this.setTabCheckboxState();\n this.setGrantCheckboxState();\n }, 0);\n }\n updatePermissionStatus(clickedPermission) {\n this.permissions = this.permissions.map(permission => {\n const isExactMatch = clickedPermission.name == permission.name;\n const isParentOfPermission = clickedPermission.parentName === permission.name;\n const isChildOfPermission = clickedPermission.name === permission.parentName;\n if (isExactMatch) {\n return { ...permission, isGranted: !permission.isGranted };\n }\n if (isChildOfPermission && permission.isGranted) {\n return { ...permission, isGranted: false };\n }\n if (isParentOfPermission && !permission.isGranted) {\n return { ...permission, isGranted: true };\n }\n return permission;\n });\n }\n setParentClicked(clickedPermission) {\n if (clickedPermission.parentName) {\n const parentPermissions = findParentPermissions(this.permissions, clickedPermission);\n if (parentPermissions.length > 0) {\n const parentNames = new Set(parentPermissions.map(parent => parent.name));\n this.permissions = this.permissions.map(per => {\n let updatedIsGranted = per.isGranted;\n if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {\n updatedIsGranted = false;\n }\n if (parentNames.has(per.name)) {\n updatedIsGranted = true;\n }\n return { ...per, isGranted: updatedIsGranted };\n });\n }\n return;\n }\n this.permissions = this.permissions.map(per => {\n const parents = findParentPermissions(this.permissions, per);\n if (parents.length > 0) {\n const rootParent = parents[parents.length - 1];\n if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {\n return { ...per, isGranted: false };\n }\n }\n return per;\n });\n }\n updateSelectedGroupPermissions(clickedPermissions) {\n this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\n if (per.name === clickedPermissions.name) {\n per.isGranted = !per.isGranted;\n }\n return per;\n });\n }\n setTabCheckboxState() {\n const selectablePermissions = this.selectedGroupPermissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName));\n const selectedPermissions = selectablePermissions.filter(per => per.isGranted);\n const element = document.querySelector('#select-all-in-this-tabs');\n if (!element) {\n return;\n }\n if (selectedPermissions.length === selectablePermissions.length) {\n element.indeterminate = false;\n this.selectThisTab = true;\n }\n else if (selectedPermissions.length === 0) {\n element.indeterminate = false;\n this.selectThisTab = false;\n }\n else {\n element.indeterminate = true;\n }\n }\n setGrantCheckboxState() {\n const selectablePermissions = this.permissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName));\n const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\n const checkboxElement = document.querySelector('#select-all-in-all-tabs');\n if (selectedAllPermissions.length === selectablePermissions.length) {\n checkboxElement.indeterminate = false;\n this.selectAllTab = true;\n }\n else if (selectedAllPermissions.length === 0) {\n checkboxElement.indeterminate = false;\n this.selectAllTab = false;\n }\n else {\n checkboxElement.indeterminate = true;\n }\n }\n onClickSelectThisTab() {\n this.selectedGroupPermissions.forEach(permission => {\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\n return;\n const index = this.permissions.findIndex(per => per.name === permission.name);\n this.permissions = [\n ...this.permissions.slice(0, index),\n { ...this.permissions[index], isGranted: !this.selectThisTab },\n ...this.permissions.slice(index + 1),\n ];\n });\n this.setGrantCheckboxState();\n }\n onClickSelectAll() {\n if (this.filter()) {\n this.filter.set('');\n }\n this.permissions = this.permissions.map(permission => ({\n ...permission,\n isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\n }));\n if (!this.disableSelectAllTab) {\n this.selectThisTab = !this.selectAllTab;\n this.setTabCheckboxState();\n if (this.filter()) {\n this.setGrantCheckboxState();\n }\n }\n this.onChangeGroup(this.selectedGroup);\n }\n onChangeGroup(group) {\n this.setDisabled(group.permissions);\n this.setSelectedGroup(group);\n this.setTabCheckboxState();\n }\n submit() {\n const unchangedPermissions = getPermissions(this.data.groups);\n const changedPermissions = this.permissions\n .filter(per => (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\n per.isGranted\n ? false\n : true)\n .map(({ name, isGranted }) => ({ name, isGranted }));\n if (!changedPermissions.length) {\n this.visible = false;\n return;\n }\n this.modalBusy = true;\n this.service\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\n .pipe(switchMap(() => this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null)), finalize(() => (this.modalBusy = false)))\n .subscribe(() => {\n this.visible = false;\n this.toasterService.success('AbpUi::SavedSuccessfully');\n });\n }\n openModal() {\n if (!this.providerKey || !this.providerName) {\n throw new Error('Provider Key and Provider Name are required.');\n }\n return this.service.get(this.providerName, this.providerKey).pipe(tap((permissionRes) => {\n const { groups } = permissionRes || {};\n this.data = permissionRes;\n this.permissionGroupSignal.set(groups);\n this.permissions = getPermissions(groups);\n this.setSelectedGroup(groups[0]);\n this.disabledSelectAllInAllTabs = this.permissions.every(per => per.isGranted &&\n per.grantedProviders.every(provider => provider.providerName !== this.providerName));\n }));\n }\n initModal() {\n // TODO: Refactor\n setTimeout(() => {\n this.setDisabled(this.selectedGroup?.permissions || []);\n this.setTabCheckboxState();\n this.setGrantCheckboxState();\n });\n }\n getAssignedCount(groupName) {\n return this.permissions.reduce((acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc), 0);\n }\n shouldFetchAppConfig() {\n const currentUser = this.configState.getOne('currentUser');\n if (this.providerName === 'R')\n return currentUser.roles.some(role => role === this.providerKey);\n if (this.providerName === 'U')\n return currentUser.id === this.providerKey;\n return false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.7\", type: PermissionManagementComponent, isStandalone: true, selector: \"abp-permission-management\", inputs: { providerName: \"providerName\", providerKey: \"providerKey\", hideBadges: \"hideBadges\", entityDisplayName: \"entityDisplayName\", visible: \"visible\" }, outputs: { visibleChange: \"visibleChange\" }, viewQueries: [{ propertyName: \"selectAllInThisTabsRef\", predicate: [\"selectAllInThisTabsRef\"], descendants: true }, { propertyName: \"selectAllInAllTabsRef\", predicate: [\"selectAllInAllTabsRef\"], descendants: true }], exportAs: [\"abpPermissionManagement\"], ngImport: i0, template: \"<abp-modal [(visible)]=\\\"visible\\\" [busy]=\\\"modalBusy\\\" [options]=\\\"{ size: 'lg', scrollable: false }\\\">\\r\\n @if (data.entityDisplayName || entityDisplayName) {\\r\\n <ng-template #abpHeader>\\r\\n <h4>\\r\\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\\r\\n {{ entityDisplayName || data.entityDisplayName }}\\r\\n </h4>\\r\\n </ng-template>\\r\\n <ng-template #abpBody>\\r\\n <div class=\\\"row d-flex align-items-center mb-2\\\">\\r\\n <div class=\\\"col\\\">\\r\\n <div class=\\\"input-group mb-2\\\">\\r\\n <span class=\\\"input-group-text\\\" id=\\\"basic-addon1\\\"><i class=\\\"bi bi-search\\\"></i></span>\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n class=\\\"form-control\\\"\\r\\n id=\\\"permission-search\\\"\\r\\n placeholder=\\\"Filter\\\"\\r\\n [ngModel]=\\\"filter()\\\"\\r\\n (ngModelChange)=\\\"filter.set($event)\\\"\\r\\n />\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"col-auto\\\">\\r\\n <div class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #selectAllInAllTabsRef\\r\\n type=\\\"checkbox\\\"\\r\\n id=\\\"select-all-in-all-tabs\\\"\\r\\n name=\\\"select-all-in-all-tabs\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [(ngModel)]=\\\"selectAllTab\\\"\\r\\n (click)=\\\"onClickSelectAll()\\\"\\r\\n [disabled]=\\\"disabledSelectAllInAllTabs\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" for=\\\"select-all-in-all-tabs\\\">{{\\r\\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\\r\\n }}</label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <fieldset class=\\\"border rounded-4 p-3\\\">\\r\\n <legend class=\\\"px-1 h5 mb-0\\\">\\r\\n {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\\r\\n </legend>\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-4\\\">\\r\\n <div class=\\\"overflow-auto lpx-scroll-pills-container scroll-in-modal\\\">\\r\\n <ul class=\\\"nav nav-pills flex-column\\\">\\r\\n @for (group of permissionGroups(); track $index) {\\r\\n <li class=\\\"border nav-item\\\">\\r\\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\\r\\n <a\\r\\n class=\\\"nav-link pointer\\\"\\r\\n [class.active]=\\\"selectedGroup?.name === group?.name\\\"\\r\\n (click)=\\\"onChangeGroup(group)\\\"\\r\\n (select)=\\\"setDisabled(group.permissions)\\\"\\r\\n >\\r\\n <div [class.font-weight-bold]=\\\"count.assignedCount\\\">\\r\\n {{ group?.displayName }}\\r\\n @if (count.assignedCount > 0) {\\r\\n <span>({{ count.assignedCount }})</span>\\r\\n }\\r\\n </div>\\r\\n </a>\\r\\n }\\r\\n </li>\\r\\n }\\r\\n </ul>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-8 scroll-in-modal\\\">\\r\\n <div class=\\\"ps-1\\\">\\r\\n @if (selectedGroupPermissions.length) {\\r\\n <div class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #selectAllInThisTabsRef\\r\\n type=\\\"checkbox\\\"\\r\\n id=\\\"select-all-in-this-tabs\\\"\\r\\n name=\\\"select-all-in-this-tabs\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [(ngModel)]=\\\"selectThisTab\\\"\\r\\n [disabled]=\\\"disableSelectAllTab\\\"\\r\\n (click)=\\\"onClickSelectThisTab()\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" for=\\\"select-all-in-this-tabs\\\">{{\\r\\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\\r\\n }}</label>\\r\\n </div>\\r\\n <hr class=\\\"my-2\\\" />\\r\\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\\r\\n <div [ngStyle]=\\\"permission.style\\\" class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #permissionCheckbox\\r\\n type=\\\"checkbox\\\"\\r\\n [checked]=\\\"getChecked(permission.name)\\\"\\r\\n [value]=\\\"getChecked(permission.name)\\\"\\r\\n [attr.id]=\\\"permission.name\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [disabled]=\\\"isGrantedByOtherProviderName(permission.grantedProviders)\\\"\\r\\n (click)=\\\"onClickCheckbox(permission, permissionCheckbox.value)\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" [attr.for]=\\\"permission.name\\\"\\r\\n >{{ permission.displayName }}\\r\\n @if (!hideBadges) {\\r\\n @for (provider of permission.grantedProviders; track $index) {\\r\\n <span class=\\\"badge bg-primary text-dark\\\"\\r\\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\\r\\n >\\r\\n }\\r\\n }\\r\\n </label>\\r\\n </div>\\r\\n }\\r\\n }\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </fieldset>\\r\\n </ng-template>\\r\\n <ng-template #abpFooter>\\r\\n <button type=\\\"button\\\" class=\\\"btn btn-outline-primary\\\" abpClose>\\r\\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\\r\\n </button>\\r\\n <abp-button iconClass=\\\"fa fa-check\\\" (click)=\\\"submit()\\\">{{\\r\\n 'AbpIdentity::Save' | abpLocalization\\r\\n }}</abp-button>\\r\\n </ng-template>\\r\\n }\\r\\n</abp-modal>\\r\\n\", styles: [\".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media (max-width: 768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.CheckboxControlValueAccessor, selector: \"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i2.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: ModalComponent, selector: \"abp-modal\", inputs: [\"visible\", \"busy\", \"options\", \"suppressUnsavedChangesWarning\"], outputs: [\"visibleChange\", \"init\", \"appear\", \"disappear\"] }, { kind: \"pipe\", type: LocalizationPipe, name: \"abpLocalization\" }, { kind: \"component\", type: ButtonComponent, selector: \"abp-button\", inputs: [\"buttonId\", \"buttonClass\", \"buttonType\", \"formName\", \"iconClass\", \"loading\", \"disabled\", \"attributes\"], outputs: [\"click\", \"focus\", \"blur\", \"abpClick\", \"abpFocus\", \"abpBlur\"] }, { kind: \"directive\", type: ModalCloseDirective, selector: \"[abpClose]\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementComponent, decorators: [{\n type: Component,\n args: [{ selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', imports: [\n FormsModule,\n CommonModule,\n ModalComponent,\n LocalizationPipe,\n ButtonComponent,\n ModalCloseDirective,\n ], template: \"<abp-modal [(visible)]=\\\"visible\\\" [busy]=\\\"modalBusy\\\" [options]=\\\"{ size: 'lg', scrollable: false }\\\">\\r\\n @if (data.entityDisplayName || entityDisplayName) {\\r\\n <ng-template #abpHeader>\\r\\n <h4>\\r\\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\\r\\n {{ entityDisplayName || data.entityDisplayName }}\\r\\n </h4>\\r\\n </ng-template>\\r\\n <ng-template #abpBody>\\r\\n <div class=\\\"row d-flex align-items-center mb-2\\\">\\r\\n <div class=\\\"col\\\">\\r\\n <div class=\\\"input-group mb-2\\\">\\r\\n <span class=\\\"input-group-text\\\" id=\\\"basic-addon1\\\"><i class=\\\"bi bi-search\\\"></i></span>\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n class=\\\"form-control\\\"\\r\\n id=\\\"permission-search\\\"\\r\\n placeholder=\\\"Filter\\\"\\r\\n [ngModel]=\\\"filter()\\\"\\r\\n (ngModelChange)=\\\"filter.set($event)\\\"\\r\\n />\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"col-auto\\\">\\r\\n <div class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #selectAllInAllTabsRef\\r\\n type=\\\"checkbox\\\"\\r\\n id=\\\"select-all-in-all-tabs\\\"\\r\\n name=\\\"select-all-in-all-tabs\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [(ngModel)]=\\\"selectAllTab\\\"\\r\\n (click)=\\\"onClickSelectAll()\\\"\\r\\n [disabled]=\\\"disabledSelectAllInAllTabs\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" for=\\\"select-all-in-all-tabs\\\">{{\\r\\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\\r\\n }}</label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <fieldset class=\\\"border rounded-4 p-3\\\">\\r\\n <legend class=\\\"px-1 h5 mb-0\\\">\\r\\n {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\\r\\n </legend>\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-4\\\">\\r\\n <div class=\\\"overflow-auto lpx-scroll-pills-container scroll-in-modal\\\">\\r\\n <ul class=\\\"nav nav-pills flex-column\\\">\\r\\n @for (group of permissionGroups(); track $index) {\\r\\n <li class=\\\"border nav-item\\\">\\r\\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\\r\\n <a\\r\\n class=\\\"nav-link pointer\\\"\\r\\n [class.active]=\\\"selectedGroup?.name === group?.name\\\"\\r\\n (click)=\\\"onChangeGroup(group)\\\"\\r\\n (select)=\\\"setDisabled(group.permissions)\\\"\\r\\n >\\r\\n <div [class.font-weight-bold]=\\\"count.assignedCount\\\">\\r\\n {{ group?.displayName }}\\r\\n @if (count.assignedCount > 0) {\\r\\n <span>({{ count.assignedCount }})</span>\\r\\n }\\r\\n </div>\\r\\n </a>\\r\\n }\\r\\n </li>\\r\\n }\\r\\n </ul>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-8 scroll-in-modal\\\">\\r\\n <div class=\\\"ps-1\\\">\\r\\n @if (selectedGroupPermissions.length) {\\r\\n <div class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #selectAllInThisTabsRef\\r\\n type=\\\"checkbox\\\"\\r\\n id=\\\"select-all-in-this-tabs\\\"\\r\\n name=\\\"select-all-in-this-tabs\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [(ngModel)]=\\\"selectThisTab\\\"\\r\\n [disabled]=\\\"disableSelectAllTab\\\"\\r\\n (click)=\\\"onClickSelectThisTab()\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" for=\\\"select-all-in-this-tabs\\\">{{\\r\\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\\r\\n }}</label>\\r\\n </div>\\r\\n <hr class=\\\"my-2\\\" />\\r\\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\\r\\n <div [ngStyle]=\\\"permission.style\\\" class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #permissionCheckbox\\r\\n type=\\\"checkbox\\\"\\r\\n [checked]=\\\"getChecked(permission.name)\\\"\\r\\n [value]=\\\"getChecked(permission.name)\\\"\\r\\n [attr.id]=\\\"permission.name\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [disabled]=\\\"isGrantedByOtherProviderName(permission.grantedProviders)\\\"\\r\\n (click)=\\\"onClickCheckbox(permission, permissionCheckbox.value)\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" [attr.for]=\\\"permission.name\\\"\\r\\n >{{ permission.displayName }}\\r\\n @if (!hideBadges) {\\r\\n @for (provider of permission.grantedProviders; track $index) {\\r\\n <span class=\\\"badge bg-primary text-dark\\\"\\r\\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\\r\\n >\\r\\n }\\r\\n }\\r\\n </label>\\r\\n </div>\\r\\n }\\r\\n }\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </fieldset>\\r\\n </ng-template>\\r\\n <ng-template #abpFooter>\\r\\n <button type=\\\"button\\\" class=\\\"btn btn-outline-primary\\\" abpClose>\\r\\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\\r\\n </button>\\r\\n <abp-button iconClass=\\\"fa fa-check\\\" (click)=\\\"submit()\\\">{{\\r\\n 'AbpIdentity::Save' | abpLocalization\\r\\n }}</abp-button>\\r\\n </ng-template>\\r\\n }\\r\\n</abp-modal>\\r\\n\", styles: [\".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media (max-width: 768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\\n\"] }]\n }], propDecorators: { providerName: [{\n type: Input\n }], providerKey: [{\n type: Input\n }], hideBadges: [{\n type: Input\n }], entityDisplayName: [{\n type: Input\n }], visible: [{\n type: Input\n }], visibleChange: [{\n type: Output\n }], selectAllInThisTabsRef: [{\n type: ViewChildren,\n args: ['selectAllInThisTabsRef']\n }], selectAllInAllTabsRef: [{\n type: ViewChildren,\n args: ['selectAllInAllTabsRef']\n }] } });\nfunction findParentPermissions(permissions, permission) {\n const permissionMap = new Map(permissions.map(p => [p.name, p]));\n let currentPermission = permissionMap.get(permission.name) ?? null;\n const parentPermissions = [];\n while (currentPermission && currentPermission.parentName) {\n const parentPermission = permissionMap.get(currentPermission.parentName);\n if (!parentPermission) {\n break;\n }\n parentPermissions.push(parentPermission);\n currentPermission = parentPermission;\n }\n return parentPermissions;\n}\nfunction findMargin(permissions, permission) {\n const parentPermission = permissions.find(per => per.name === permission.parentName);\n if (parentPermission && parentPermission.parentName) {\n let margin = 20;\n return (margin += findMargin(permissions, parentPermission));\n }\n return parentPermission ? 20 : 0;\n}\nfunction getPermissions(groups) {\n return groups.reduce((acc, val) => [\n ...acc,\n ...val.permissions.map(p => ({ ...p, groupName: val.name || '' })),\n ], []);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEYsT0FBTyxFQUNMLGVBQWUsRUFFZixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGNBQWMsR0FDZixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFJTCxrQkFBa0IsR0FHbkIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFFUixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFFTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFzRTdDLE1BQU0sT0FBTyw2QkFBNkI7SUE1RDFDO1FBaUVxQixZQUFPLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFD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RUQsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2pCLFdBQXFDLEVBQ3JDLFVBQWtDO0lBRWxDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJGLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxNQUE0QjtJQUNsRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDWixHQUFHLEdBQUc7UUFDTixHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUEwQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzVGLEVBQ0QsRUFBK0IsQ0FDaEMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWdTdGF0ZVNlcnZpY2UsIEN1cnJlbnRVc2VyRHRvLCBMb2NhbGl6YXRpb25QaXBlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHtcclxuICBCdXR0b25Db21wb25lbnQsXHJcbiAgTG9jYWxlRGlyZWN0aW9uLFxyXG4gIE1vZGFsQ2xvc2VEaXJlY3RpdmUsXHJcbiAgTW9kYWxDb21wb25lbnQsXHJcbiAgVG9hc3RlclNlcnZpY2UsXHJcbn0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQge1xyXG4gIEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvLFxyXG4gIFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbiAgUGVybWlzc2lvbkdyb3VwRHRvLFxyXG4gIFBlcm1pc3Npb25zU2VydmljZSxcclxuICBQcm92aWRlckluZm9EdG8sXHJcbiAgVXBkYXRlUGVybWlzc2lvbkR0byxcclxufSBmcm9tICdAYWJwL25nLnBlcm1pc3Npb24tbWFuYWdlbWVudC9wcm94eSc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIHNpZ25hbCxcclxuICBUcmFja0J5RnVuY3Rpb24sXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZW1lbnQgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhTdHlsZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgc3R5bGU6IHN0cmluZztcclxufTtcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhHcm91cE5hbWUgPSBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvICYge1xyXG4gIGdyb3VwTmFtZTogc3RyaW5nO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtcGVybWlzc2lvbi1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2FicFBlcm1pc3Npb25NYW5hZ2VtZW50JyxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLnNjcm9sbC1pbi1tb2RhbCB7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgLypcclxuICAgICAgICBUbyBtYWludGFpbiBhIDI4cHggdG9wIG1hcmdpbiBhbmQgMjhweCBib3R0b20gbWFyZ2luIHdoZW4gdGhlIG1vZGFsIHJlYWNoZXMgZnVsbCBoZWlnaHQsIHRoZSBzY3JvbGxhYmxlIGFyZWEgbmVlZHMgdG8gYmUgMTAwdmggLSAyMy4xcmVtXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDIzLjFyZW0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubHB4LXNjcm9sbC1waWxscy1jb250YWluZXIgdWwge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFRhcmdldCBtb2JpbGUgc2NyZWVucyAqL1xyXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcclxuICAgICAgICAuc2Nyb2xsLWluLW1vZGFsIHtcclxuICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxNXJlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciB1bCB7XHJcbiAgICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZpZWxkc2V0IGxlZ2VuZCB7XHJcbiAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICAgICAgd2lkdGg6IGF1dG87XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciAudGFiLWNvbnRlbnQge1xyXG4gICAgICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmxweC1zY3JvbGwtcGlsbHMtY29udGFpbmVyIHVsIGxpIHtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciB1bCBsaSBhLmFjdGl2ZSB7XHJcbiAgICAgICAgY29sb3I6ICNmZmYgIWltcG9ydGFudDtcclxuICAgICAgICBib3JkZXItY29sb3I6ICM2YzVkZDMgIWltcG9ydGFudDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM1ZGQzICFpbXBvcnRhbnQ7XHJcbiAgICAgIH1cclxuICAgIGAsXHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1vZGFsQ29tcG9uZW50LFxyXG4gICAgTG9jYWxpemF0aW9uUGlwZSxcclxuICAgIEJ1dHRvbkNvbXBvbmVudCxcclxuICAgIE1vZGFsQ2xvc2VEaXJlY3RpdmUsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50c1xyXG4gICAgUGVybWlzc2lvbk1hbmFnZW1lbnQuUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRJbnB1dHMsXHJcbiAgICBQZXJtaXNzaW9uTWFuYWdlbWVudC5QZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudE91dHB1dHNcclxue1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBzZXJ2aWNlID0gaW5qZWN0KFBlcm1pc3Npb25zU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZ1N0YXRlID0gaW5qZWN0KENvbmZpZ1N0YXRlU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvYXN0ZXJTZXJ2aWNlID0gaW5qZWN0KFRvYXN0ZXJTZXJ2aWNlKTtcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBwcm92aWRlck5hbWUhOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgcHJvdmlkZXJLZXkhOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgaGlkZUJhZGdlcyA9IGZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgX3Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBlbnRpdHlEaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XHJcbiAgfVxyXG5cclxuICBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlID09PSB0aGlzLl92aXNpYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5vcGVuTW9kYWwoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgICAgIGNvbmNhdCh0aGlzLnNlbGVjdEFsbEluQWxsVGFic1JlZi5jaGFuZ2VzLCB0aGlzLnNlbGVjdEFsbEluVGhpc1RhYnNSZWYuY2hhbmdlcylcclxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbml0TW9kYWwoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChudWxsKTtcclxuICAgICAgdGhpcy5fdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XHJcbiAgICAgIHRoaXMuZmlsdGVyLnNldCgnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignc2VsZWN0QWxsSW5UaGlzVGFic1JlZicpXHJcbiAgc2VsZWN0QWxsSW5UaGlzVGFic1JlZiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuICBAVmlld0NoaWxkcmVuKCdzZWxlY3RBbGxJbkFsbFRhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluQWxsVGFic1JlZiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuXHJcbiAgZGF0YTogR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8gPSB7IGdyb3VwczogW10sIGVudGl0eURpc3BsYXlOYW1lOiAnJyB9O1xyXG5cclxuICBzZWxlY3RlZEdyb3VwPzogUGVybWlzc2lvbkdyb3VwRHRvIHwgbnVsbDtcclxuXHJcbiAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lW10gPSBbXTtcclxuXHJcbiAgc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuXHJcbiAgZGlzYWJsZVNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG5cclxuICBkaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IGZhbHNlO1xyXG5cclxuICBtb2RhbEJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgZmlsdGVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG5cclxuICBzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnM6IFBlcm1pc3Npb25XaXRoU3R5bGVbXSA9IFtdO1xyXG5cclxuICBwZXJtaXNzaW9uR3JvdXBTaWduYWwgPSBzaWduYWw8UGVybWlzc2lvbkdyb3VwRHRvW10+KFtdKTtcclxuXHJcbiAgcGVybWlzc2lvbkdyb3VwcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuZmlsdGVyKCkudG9Mb3dlckNhc2UoKS50cmltKCk7XHJcbiAgICBsZXQgZ3JvdXBzID0gdGhpcy5wZXJtaXNzaW9uR3JvdXBTaWduYWwoKTtcclxuXHJcbiAgICBpZiAoIXNlYXJjaCkge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAoZ3JvdXBzWzBdKTtcclxuICAgICAgcmV0dXJuIGdyb3VwcztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbmNsdWRlc1NlYXJjaCA9IHRleHQgPT4gdGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCk7XHJcbiAgICBncm91cHMgPSBncm91cHMuZmlsdGVyKGdyb3VwID0+XHJcbiAgICAgIGdyb3VwLnBlcm1pc3Npb25zLnNvbWUoXHJcbiAgICAgICAgcGVybWlzc2lvbiA9PiBpbmNsdWRlc1NlYXJjaChwZXJtaXNzaW9uLmRpc3BsYXlOYW1lKSB8fCBpbmNsdWRlc1NlYXJjaChncm91cC5kaXNwbGF5TmFtZSksXHJcbiAgICAgICksXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChncm91cHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChncm91cHNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH0pO1xyXG5cclxuICB0cmFja0J5Rm46IFRyYWNrQnlGdW5jdGlvbjxQZXJtaXNzaW9uR3JvdXBEdG8+ID0gKF8sIGl0ZW0pID0+IGl0ZW0ubmFtZTtcclxuXHJcbiAgZ2V0Q2hlY2tlZChuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAodGhpcy5wZXJtaXNzaW9ucy5maW5kKHBlciA9PiBwZXIubmFtZSA9PT0gbmFtZSkgfHwgeyBpc0dyYW50ZWQ6IGZhbHNlIH0pLmlzR3JhbnRlZDtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkR3JvdXAoZ3JvdXA6IFBlcm1pc3Npb25Hcm91cER0bykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWFyZ2luID0gYG1hcmdpbi0ke1xyXG4gICAgICAoZG9jdW1lbnQuYm9keS5kaXIgYXMgTG9jYWxlRGlyZWN0aW9uKSA9PT0gJ3J0bCcgPyAncmlnaHQnIDogJ2xlZnQnXHJcbiAgICB9LnB4YDtcclxuXHJcbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9XHJcbiAgICAgICh0aGlzLmRhdGEuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4gZ3JvdXAubmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwPy5uYW1lKSB8fCB7fSkucGVybWlzc2lvbnMgfHxcclxuICAgICAgW107XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zLm1hcChcclxuICAgICAgcGVybWlzc2lvbiA9PlxyXG4gICAgICAgICh7XHJcbiAgICAgICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICAgICAgc3R5bGU6IHsgW21hcmdpbl06IGZpbmRNYXJnaW4ocGVybWlzc2lvbnMsIHBlcm1pc3Npb24pIH0sXHJcbiAgICAgICAgICBpc0dyYW50ZWQ6ICh0aGlzLnBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLm5hbWUpIHx8IHt9KS5pc0dyYW50ZWQsXHJcbiAgICAgICAgfSkgYXMgdW5rbm93biBhcyBQZXJtaXNzaW9uV2l0aFN0eWxlLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10pIHtcclxuICAgIGlmIChwZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiID0gcGVybWlzc2lvbnMuZXZlcnkoXHJcbiAgICAgICAgcGVybWlzc2lvbiA9PlxyXG4gICAgICAgICAgcGVybWlzc2lvbi5pc0dyYW50ZWQgJiZcclxuICAgICAgICAgIHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycz8uZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSAhPT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKGdyYW50ZWRQcm92aWRlcnM6IFByb3ZpZGVySW5mb0R0b1tdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZ3JhbnRlZFByb3ZpZGVycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGdyYW50ZWRQcm92aWRlcnMuZmluZEluZGV4KHAgPT4gcC5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0NoZWNrYm94KGNsaWNrZWRQZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgICBjb25zdCB7IGlzR3JhbnRlZCwgZ3JhbnRlZFByb3ZpZGVycyB9ID0gY2xpY2tlZFBlcm1pc3Npb247XHJcbiAgICBpZiAoaXNHcmFudGVkICYmIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShncmFudGVkUHJvdmlkZXJzKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKHRoaXMuc2VsZWN0ZWRHcm91cCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVQZXJtaXNzaW9uU3RhdHVzKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMoY2xpY2tlZFBlcm1pc3Npb24pO1xyXG4gICAgICB0aGlzLnNldFBhcmVudENsaWNrZWQoY2xpY2tlZFBlcm1pc3Npb24pO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGVybWlzc2lvblN0YXR1cyhjbGlja2VkUGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlcm1pc3Npb24gPT4ge1xyXG4gICAgICBjb25zdCBpc0V4YWN0TWF0Y2ggPSBjbGlja2VkUGVybWlzc2lvbi5uYW1lID09IHBlcm1pc3Npb24ubmFtZTtcclxuICAgICAgY29uc3QgaXNQYXJlbnRPZlBlcm1pc3Npb24gPSBjbGlja2VkUGVybWlzc2lvbi5wYXJlbnROYW1lID09PSBwZXJtaXNzaW9uLm5hbWU7XHJcbiAgICAgIGNvbnN0IGlzQ2hpbGRPZlBlcm1pc3Npb24gPSBjbGlja2VkUGVybWlzc2lvbi5uYW1lID09PSBwZXJtaXNzaW9uLnBhcmVudE5hbWU7XHJcblxyXG4gICAgICBpZiAoaXNFeGFjdE1hdGNoKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucGVybWlzc2lvbiwgaXNHcmFudGVkOiAhcGVybWlzc2lvbi5pc0dyYW50ZWQgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzQ2hpbGRPZlBlcm1pc3Npb24gJiYgcGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICByZXR1cm4geyAuLi5wZXJtaXNzaW9uLCBpc0dyYW50ZWQ6IGZhbHNlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc1BhcmVudE9mUGVybWlzc2lvbiAmJiAhcGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICByZXR1cm4geyAuLi5wZXJtaXNzaW9uLCBpc0dyYW50ZWQ6IHRydWUgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHBlcm1pc3Npb247XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhcmVudENsaWNrZWQoY2xpY2tlZFBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIGlmIChjbGlja2VkUGVybWlzc2lvbi5wYXJlbnROYW1lKSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudFBlcm1pc3Npb25zID0gZmluZFBhcmVudFBlcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnMsIGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgaWYgKHBhcmVudFBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBwYXJlbnROYW1lcyA9IG5ldyBTZXQocGFyZW50UGVybWlzc2lvbnMubWFwKHBhcmVudCA9PiBwYXJlbnQubmFtZSkpO1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5tYXAocGVyID0+IHtcclxuICAgICAgICAgIGxldCB1cGRhdGVkSXNHcmFudGVkID0gcGVyLmlzR3JhbnRlZDtcclxuXHJcbiAgICAgICAgICBpZiAocGVyLnBhcmVudE5hbWUgPT09IGNsaWNrZWRQZXJtaXNzaW9uLm5hbWUgJiYgIWNsaWNrZWRQZXJtaXNzaW9uLmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgICB1cGRhdGVkSXNHcmFudGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHBhcmVudE5hbWVzLmhhcyhwZXIubmFtZSkpIHtcclxuICAgICAgICAgICAgdXBkYXRlZElzR3JhbnRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IHVwZGF0ZWRJc0dyYW50ZWQgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBmaW5kUGFyZW50UGVybWlzc2lvbnModGhpcy5wZXJtaXNzaW9ucywgcGVyKTtcclxuICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJvb3RQYXJlbnQgPSBwYXJlbnRzW3BhcmVudHMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIGlmIChyb290UGFyZW50Lm5hbWUgPT09IGNsaWNrZWRQZXJtaXNzaW9uLm5hbWUgJiYgIXJvb3RQYXJlbnQuaXNHcmFudGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5wZXIsIGlzR3JhbnRlZDogZmFsc2UgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zKGNsaWNrZWRQZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5tYXAocGVyID0+IHtcclxuICAgICAgaWYgKHBlci5uYW1lID09PSBjbGlja2VkUGVybWlzc2lvbnMubmFtZSkge1xyXG4gICAgICAgIHBlci5pc0dyYW50ZWQgPSAhcGVyLmlzR3JhbnRlZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGVyO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUYWJDaGVja2JveFN0YXRlKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0YWJsZVBlcm1pc3Npb25zID0gdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PlxyXG4gICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwID0+IHAucHJvdmlkZXJOYW1lID09PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkUGVybWlzc2lvbnMgPSBzZWxlY3RhYmxlUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LWFsbC1pbi10aGlzLXRhYnMnKSBhcyBhbnk7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxlY3RlZFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBlbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEdyYW50Q2hlY2tib3hTdGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PlxyXG4gICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwID0+IHAucHJvdmlkZXJOYW1lID09PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucyA9IHNlbGVjdGFibGVQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+IHBlci5pc0dyYW50ZWQpO1xyXG4gICAgY29uc3QgY2hlY2tib3hFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NlbGVjdC1hbGwtaW4tYWxsLXRhYnMnKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQWxsUGVybWlzc2lvbnMubGVuZ3RoID09PSBzZWxlY3RhYmxlUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY2hlY2tib3hFbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWxlY3RUaGlzVGFiKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMuZm9yRWFjaChwZXJtaXNzaW9uID0+IHtcclxuICAgICAgaWYgKHBlcm1pc3Npb24uaXNHcmFudGVkICYmIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wZXJtaXNzaW9ucy5maW5kSW5kZXgocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLm5hbWUpO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLnNsaWNlKDAsIGluZGV4KSxcclxuICAgICAgICB7IC4uLnRoaXMucGVybWlzc2lvbnNbaW5kZXhdLCBpc0dyYW50ZWQ6ICF0aGlzLnNlbGVjdFRoaXNUYWIgfSxcclxuICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLnNsaWNlKGluZGV4ICsgMSksXHJcbiAgICAgIF07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1NlbGVjdEFsbCgpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlcigpKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyLnNldCgnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlcm1pc3Npb24gPT4gKHtcclxuICAgICAgLi4ucGVybWlzc2lvbixcclxuICAgICAgaXNHcmFudGVkOlxyXG4gICAgICAgIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpIHx8ICF0aGlzLnNlbGVjdEFsbFRhYixcclxuICAgIH0pKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYikge1xyXG4gICAgICB0aGlzLnNlbGVjdFRoaXNUYWIgPSAhdGhpcy5zZWxlY3RBbGxUYWI7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXIoKSkge1xyXG4gICAgICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2VHcm91cCh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VHcm91cChncm91cDogUGVybWlzc2lvbkdyb3VwRHRvKSB7XHJcbiAgICB0aGlzLnNldERpc2FibGVkKGdyb3VwLnBlcm1pc3Npb25zKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChncm91cCk7XHJcbiAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdCgpIHtcclxuICAgIGNvbnN0IHVuY2hhbmdlZFBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnModGhpcy5kYXRhLmdyb3Vwcyk7XHJcblxyXG4gICAgY29uc3QgY2hhbmdlZFBlcm1pc3Npb25zOiBVcGRhdGVQZXJtaXNzaW9uRHRvW10gPSB0aGlzLnBlcm1pc3Npb25zXHJcbiAgICAgIC5maWx0ZXIocGVyID0+XHJcbiAgICAgICAgKHVuY2hhbmdlZFBlcm1pc3Npb25zLmZpbmQodW5jaGFuZ2VkID0+IHVuY2hhbmdlZC5uYW1lID09PSBwZXIubmFtZSkgfHwge30pLmlzR3JhbnRlZCA9PT1cclxuICAgICAgICBwZXIuaXNHcmFudGVkXHJcbiAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICA6IHRydWUsXHJcbiAgICAgIClcclxuICAgICAgLm1hcCgoeyBuYW1lLCBpc0dyYW50ZWQgfSkgPT4gKHsgbmFtZSwgaXNHcmFudGVkIH0pKTtcclxuXHJcbiAgICBpZiAoIWNoYW5nZWRQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1vZGFsQnVzeSA9IHRydWU7XHJcbiAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgLnVwZGF0ZSh0aGlzLnByb3ZpZGVyTmFtZSwgdGhpcy5wcm92aWRlcktleSwgeyBwZXJtaXNzaW9uczogY2hhbmdlZFBlcm1pc3Npb25zIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PlxyXG4gICAgICAgICAgdGhpcy5zaG91bGRGZXRjaEFwcENvbmZpZygpID8gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKSA6IG9mKG51bGwpLFxyXG4gICAgICAgICksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubW9kYWxCdXN5ID0gZmFsc2UpKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MoJ0FicFVpOjpTYXZlZFN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Nb2RhbCgpIHtcclxuICAgIGlmICghdGhpcy5wcm92aWRlcktleSB8fCAhdGhpcy5wcm92aWRlck5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlciBLZXkgYW5kIFByb3ZpZGVyIE5hbWUgYXJlIHJlcXVpcmVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5KS5waXBlKFxyXG4gICAgICB0YXAoKHBlcm1pc3Npb25SZXM6IEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBncm91cHMgfSA9IHBlcm1pc3Npb25SZXMgfHwge307XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IHBlcm1pc3Npb25SZXM7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uR3JvdXBTaWduYWwuc2V0KGdyb3Vwcyk7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IGdldFBlcm1pc3Npb25zKGdyb3Vwcyk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKGdyb3Vwc1swXSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTZWxlY3RBbGxJbkFsbFRhYnMgPSB0aGlzLnBlcm1pc3Npb25zLmV2ZXJ5KFxyXG4gICAgICAgICAgcGVyID0+XHJcbiAgICAgICAgICAgIHBlci5pc0dyYW50ZWQgJiZcclxuICAgICAgICAgICAgcGVyLmdyYW50ZWRQcm92aWRlcnMuZXZlcnkocHJvdmlkZXIgPT4gcHJvdmlkZXIucHJvdmlkZXJOYW1lICE9PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaW5pdE1vZGFsKCkge1xyXG4gICAgLy8gVE9ETzogUmVmYWN0b3JcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldERpc2FibGVkKHRoaXMuc2VsZWN0ZWRHcm91cD8ucGVybWlzc2lvbnMgfHwgW10pO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzaWduZWRDb3VudChncm91cE5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMucmVkdWNlKFxyXG4gICAgICAoYWNjLCB2YWwpID0+ICh2YWwuZ3JvdXBOYW1lID09PSBncm91cE5hbWUgJiYgdmFsLmlzR3JhbnRlZCA/IGFjYyArIDEgOiBhY2MpLFxyXG4gICAgICAwLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNob3VsZEZldGNoQXBwQ29uZmlnKCkge1xyXG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSgnY3VycmVudFVzZXInKSBhcyBDdXJyZW50VXNlckR0bztcclxuXHJcbiAgICBpZiAodGhpcy5wcm92aWRlck5hbWUgPT09ICdSJykgcmV0dXJuIGN1cnJlbnRVc2VyLnJvbGVzLnNvbWUocm9sZSA9PiByb2xlID09PSB0aGlzLnByb3ZpZGVyS2V5KTtcclxuXHJcbiAgICBpZiAodGhpcy5wcm92aWRlck5hbWUgPT09ICdVJykgcmV0dXJuIGN1cnJlbnRVc2VyLmlkID09PSB0aGlzLnByb3ZpZGVyS2V5O1xyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbmRQYXJlbnRQZXJtaXNzaW9ucyhcclxuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdLFxyXG4gIHBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbik6IFBlcm1pc3Npb25HcmFudEluZm9EdG9bXSB7XHJcbiAgY29uc3QgcGVybWlzc2lvbk1hcCA9IG5ldyBNYXAocGVybWlzc2lvbnMubWFwKHAgPT4gW3AubmFtZSwgcF0pKTtcclxuICBsZXQgY3VycmVudFBlcm1pc3Npb24gPSBwZXJtaXNzaW9uTWFwLmdldChwZXJtaXNzaW9uLm5hbWUpID8/IG51bGw7XHJcbiAgY29uc3QgcGFyZW50UGVybWlzc2lvbnM6IFBlcm1pc3Npb25HcmFudEluZm9EdG9bXSA9IFtdO1xyXG5cclxuICB3aGlsZSAoY3VycmVudFBlcm1pc3Npb24gJiYgY3VycmVudFBlcm1pc3Npb24ucGFyZW50TmFtZSkge1xyXG4gICAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25NYXAuZ2V0KGN1cnJlbnRQZXJtaXNzaW9uLnBhcmVudE5hbWUpO1xyXG4gICAgaWYgKCFwYXJlbnRQZXJtaXNzaW9uKSB7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcGFyZW50UGVybWlzc2lvbnMucHVzaChwYXJlbnRQZXJtaXNzaW9uKTtcclxuICAgIGN1cnJlbnRQZXJtaXNzaW9uID0gcGFyZW50UGVybWlzc2lvbjtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJlbnRQZXJtaXNzaW9ucztcclxufVxyXG5cclxuZnVuY3Rpb24gZmluZE1hcmdpbihcclxuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdLFxyXG4gIHBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbik6IG51bWJlciB7XHJcbiAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLnBhcmVudE5hbWUpO1xyXG5cclxuICBpZiAocGFyZW50UGVybWlzc2lvbiAmJiBwYXJlbnRQZXJtaXNzaW9uLnBhcmVudE5hbWUpIHtcclxuICAgIGxldCBtYXJnaW4gPSAyMDtcclxuICAgIHJldHVybiAobWFyZ2luICs9IGZpbmRNYXJnaW4ocGVybWlzc2lvbnMsIHBhcmVudFBlcm1pc3Npb24pKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJlbnRQZXJtaXNzaW9uID8gMjAgOiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhncm91cHM6IFBlcm1pc3Npb25Hcm91cER0b1tdKTogUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSB7XHJcbiAgcmV0dXJuIGdyb3Vwcy5yZWR1Y2UoXHJcbiAgICAoYWNjLCB2YWwpID0+IFtcclxuICAgICAgLi4uYWNjLFxyXG4gICAgICAuLi52YWwucGVybWlzc2lvbnMubWFwPFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lPihwID0+ICh7IC4uLnAsIGdyb3VwTmFtZTogdmFsLm5hbWUgfHwgJycgfSkpLFxyXG4gICAgXSxcclxuICAgIFtdIGFzIFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lW10sXHJcbiAgKTtcclxufVxyXG4iLCI8YWJwLW1vZGFsIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFtidXN5XT1cIm1vZGFsQnVzeVwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ2xnJywgc2Nyb2xsYWJsZTogZmFsc2UgfVwiPlxyXG4gIEBpZiAoZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB8fCBlbnRpdHlEaXNwbGF5TmFtZSkge1xyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICAgIDxoND5cclxuICAgICAgICB7eyAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlBlcm1pc3Npb25zJyB8IGFicExvY2FsaXphdGlvbiB9fSAtXHJcbiAgICAgICAge3sgZW50aXR5RGlzcGxheU5hbWUgfHwgZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB9fVxyXG4gICAgICA8L2g0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cImJhc2ljLWFkZG9uMVwiPjxpIGNsYXNzPVwiYmkgYmktc2VhcmNoXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICBpZD1cInBlcm1pc3Npb24tc2VhcmNoXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlclwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyKClcIlxyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlci5zZXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgI3NlbGVjdEFsbEluQWxsVGFic1JlZlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJzZWxlY3QtYWxsLWluLWFsbC10YWJzXCJcclxuICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbFRhYlwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RBbGwoKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdC1hbGwtaW4tYWxsLXRhYnNcIj57e1xyXG4gICAgICAgICAgICAgICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6U2VsZWN0QWxsSW5BbGxUYWJzJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImJvcmRlciByb3VuZGVkLTQgcC0zXCI+XHJcbiAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInB4LTEgaDUgbWItMFwiPlxyXG4gICAgICAgICAge3sgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpQZXJtaXNzaW9uR3JvdXAnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9sZWdlbmQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGxweC1zY3JvbGwtcGlsbHMtY29udGFpbmVyIHNjcm9sbC1pbi1tb2RhbFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtcGlsbHMgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGdyb3VwIG9mIHBlcm1pc3Npb25Hcm91cHMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImJvcmRlciBuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoeyBhc3NpZ25lZENvdW50OiBnZXRBc3NpZ25lZENvdW50KGdyb3VwLm5hbWUpIH07IGFzIGNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkR3JvdXA/Lm5hbWUgPT09IGdyb3VwPy5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hhbmdlR3JvdXAoZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJzZXREaXNhYmxlZChncm91cC5wZXJtaXNzaW9ucylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5mb250LXdlaWdodC1ib2xkXT1cImNvdW50LmFzc2lnbmVkQ291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cD8uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvdW50LmFzc2lnbmVkQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4oe3sgY291bnQuYXNzaWduZWRDb3VudCB9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggc2Nyb2xsLWluLW1vZGFsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcy0xXCI+XHJcbiAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICNzZWxlY3RBbGxJblRoaXNUYWJzUmVmXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCJcclxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RUaGlzVGFiXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVNlbGVjdEFsbFRhYlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RUaGlzVGFiKClcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6U2VsZWN0QWxsSW5UaGlzVGFiJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgQGZvciAocGVybWlzc2lvbiBvZiBzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnM7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJwZXJtaXNzaW9uLnN0eWxlXCIgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICNwZXJtaXNzaW9uQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRDaGVja2VkKHBlcm1pc3Npb24ubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tDaGVja2JveChwZXJtaXNzaW9uLCBwZXJtaXNzaW9uQ2hlY2tib3gudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbYXR0ci5mb3JdPVwicGVybWlzc2lvbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgID57eyBwZXJtaXNzaW9uLmRpc3BsYXlOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFoaWRlQmFkZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHByb3ZpZGVyIG9mIHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVyczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1wcmltYXJ5IHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgcHJvdmlkZXIucHJvdmlkZXJOYW1lIH19OiB7eyBwcm92aWRlci5wcm92aWRlcktleSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9maWVsZHNldD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGFicENsb3NlPlxyXG4gICAgICAgIHt7ICdBYnBJZGVudGl0eTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiAoY2xpY2spPVwic3VibWl0KClcIj57e1xyXG4gICAgICAgICdBYnBJZGVudGl0eTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgfX08L2FicC1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIH1cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==","import { NgModule } from '@angular/core';\nimport { PermissionManagementComponent } from './components';\nimport * as i0 from \"@angular/core\";\nexport class PermissionManagementModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, imports: [PermissionManagementComponent], exports: [PermissionManagementComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, imports: [PermissionManagementComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [],\n imports: [PermissionManagementComponent],\n exports: [PermissionManagementComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL3Blcm1pc3Npb24tbWFuYWdlbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBTzdELE1BQU0sT0FBTywwQkFBMEI7OEdBQTFCLDBCQUEwQjsrR0FBMUIsMEJBQTBCLFlBSDNCLDZCQUE2QixhQUM3Qiw2QkFBNkI7K0dBRTVCLDBCQUEwQixZQUgzQiw2QkFBNkI7OzJGQUc1QiwwQkFBMEI7a0JBTHRDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDekMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW10sXHJcbiAgaW1wb3J0czogW1Blcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50XSxcclxuICBleHBvcnRzOiBbUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbk1hbmFnZW1lbnRNb2R1bGUge31cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public-api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLnBlcm1pc3Npb24tbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvYWJwLW5nLnBlcm1pc3Npb24tbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abp-ng.permission-management.mjs","sources":["../tmp-esm2022/lib/components/permission-management.component.js","../tmp-esm2022/lib/permission-management.module.js","../tmp-esm2022/abp-ng.permission-management.js"],"sourcesContent":["import { ConfigStateService, LocalizationPipe } from '@abp/ng.core';\nimport { ButtonComponent, ModalCloseDirective, ModalComponent, ToasterService, } from '@abp/ng.theme.shared';\nimport { PermissionsService, } from '@abp/ng.permission-management/proxy';\nimport { Component, computed, EventEmitter, inject, Input, Output, QueryList, signal, ViewChildren, } from '@angular/core';\nimport { concat, of } from 'rxjs';\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@angular/common\";\nexport class PermissionManagementComponent {\n constructor() {\n this.service = inject(PermissionsService);\n this.configState = inject(ConfigStateService);\n this.toasterService = inject(ToasterService);\n this.hideBadges = false;\n this._visible = false;\n this.visibleChange = new EventEmitter();\n this.data = { groups: [], entityDisplayName: '' };\n this.permissions = [];\n this.selectThisTab = false;\n this.selectAllTab = false;\n this.disableSelectAllTab = false;\n this.disabledSelectAllInAllTabs = false;\n this.modalBusy = false;\n this.filter = signal('');\n this.selectedGroupPermissions = [];\n this.permissionGroupSignal = signal([]);\n this.permissionGroups = computed(() => {\n const search = this.filter().toLowerCase().trim();\n let groups = this.permissionGroupSignal();\n if (!search) {\n this.setSelectedGroup(groups[0]);\n return groups;\n }\n const includesSearch = text => text.toLowerCase().includes(search);\n groups = groups.filter(group => group.permissions.some(permission => includesSearch(permission.displayName) || includesSearch(group.displayName)));\n if (groups.length) {\n this.setSelectedGroup(groups[0]);\n }\n else {\n this.selectedGroupPermissions = [];\n }\n return groups;\n });\n this.trackByFn = (_, item) => item.name;\n }\n get visible() {\n return this._visible;\n }\n set visible(value) {\n if (value === this._visible) {\n return;\n }\n if (value) {\n this.openModal().subscribe(() => {\n this._visible = true;\n this.visibleChange.emit(true);\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\n .pipe(take(1))\n .subscribe(() => {\n this.initModal();\n });\n });\n }\n else {\n this.setSelectedGroup(null);\n this._visible = false;\n this.visibleChange.emit(false);\n this.filter.set('');\n }\n }\n getChecked(name) {\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\n }\n setSelectedGroup(group) {\n this.selectedGroup = group;\n if (!this.selectedGroup) {\n this.selectedGroupPermissions = [];\n return;\n }\n const margin = `margin-${document.body.dir === 'rtl' ? 'right' : 'left'}.px`;\n const permissions = (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\n [];\n this.selectedGroupPermissions = permissions.map(permission => ({\n ...permission,\n style: { [margin]: findMargin(permissions, permission) },\n isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\n }));\n }\n setDisabled(permissions) {\n if (permissions.length) {\n this.disableSelectAllTab = permissions.every(permission => permission.isGranted &&\n permission.grantedProviders?.every(p => p.providerName !== this.providerName));\n }\n else {\n this.disableSelectAllTab = false;\n }\n }\n isGrantedByOtherProviderName(grantedProviders) {\n if (grantedProviders.length) {\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\n }\n return false;\n }\n onClickCheckbox(clickedPermission) {\n const { isGranted, grantedProviders } = clickedPermission;\n if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {\n return;\n }\n this.setSelectedGroup(this.selectedGroup);\n setTimeout(() => {\n this.updatePermissionStatus(clickedPermission);\n this.updateSelectedGroupPermissions(clickedPermission);\n this.setParentClicked(clickedPermission);\n this.setTabCheckboxState();\n this.setGrantCheckboxState();\n }, 0);\n }\n updatePermissionStatus(clickedPermission) {\n this.permissions = this.permissions.map(permission => {\n const isExactMatch = clickedPermission.name == permission.name;\n const isParentOfPermission = clickedPermission.parentName === permission.name;\n const isChildOfPermission = clickedPermission.name === permission.parentName;\n if (isExactMatch) {\n return { ...permission, isGranted: !permission.isGranted };\n }\n if (isChildOfPermission && permission.isGranted) {\n return { ...permission, isGranted: false };\n }\n if (isParentOfPermission && !permission.isGranted) {\n return { ...permission, isGranted: true };\n }\n return permission;\n });\n }\n setParentClicked(clickedPermission) {\n if (clickedPermission.parentName) {\n const parentPermissions = findParentPermissions(this.permissions, clickedPermission);\n if (parentPermissions.length > 0) {\n const parentNames = new Set(parentPermissions.map(parent => parent.name));\n this.permissions = this.permissions.map(per => {\n let updatedIsGranted = per.isGranted;\n if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {\n updatedIsGranted = false;\n }\n if (parentNames.has(per.name)) {\n updatedIsGranted = true;\n }\n return { ...per, isGranted: updatedIsGranted };\n });\n }\n return;\n }\n this.permissions = this.permissions.map(per => {\n const parents = findParentPermissions(this.permissions, per);\n if (parents.length > 0) {\n const rootParent = parents[parents.length - 1];\n if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {\n return { ...per, isGranted: false };\n }\n }\n return per;\n });\n }\n updateSelectedGroupPermissions(clickedPermissions) {\n this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\n if (per.name === clickedPermissions.name) {\n per.isGranted = !per.isGranted;\n }\n return per;\n });\n }\n setTabCheckboxState() {\n const selectablePermissions = this.selectedGroupPermissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName));\n const selectedPermissions = selectablePermissions.filter(per => per.isGranted);\n const element = document.querySelector('#select-all-in-this-tabs');\n if (!element) {\n return;\n }\n if (selectedPermissions.length === selectablePermissions.length) {\n element.indeterminate = false;\n this.selectThisTab = true;\n }\n else if (selectedPermissions.length === 0) {\n element.indeterminate = false;\n this.selectThisTab = false;\n }\n else {\n element.indeterminate = true;\n }\n }\n setGrantCheckboxState() {\n const selectablePermissions = this.permissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName));\n const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\n const checkboxElement = document.querySelector('#select-all-in-all-tabs');\n if (selectedAllPermissions.length === selectablePermissions.length) {\n checkboxElement.indeterminate = false;\n this.selectAllTab = true;\n }\n else if (selectedAllPermissions.length === 0) {\n checkboxElement.indeterminate = false;\n this.selectAllTab = false;\n }\n else {\n checkboxElement.indeterminate = true;\n }\n }\n onClickSelectThisTab() {\n this.selectedGroupPermissions.forEach(permission => {\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\n return;\n const index = this.permissions.findIndex(per => per.name === permission.name);\n this.permissions = [\n ...this.permissions.slice(0, index),\n { ...this.permissions[index], isGranted: !this.selectThisTab },\n ...this.permissions.slice(index + 1),\n ];\n });\n this.setGrantCheckboxState();\n }\n onClickSelectAll() {\n if (this.filter()) {\n this.filter.set('');\n }\n this.permissions = this.permissions.map(permission => ({\n ...permission,\n isGranted: this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\n }));\n if (!this.disableSelectAllTab) {\n this.selectThisTab = !this.selectAllTab;\n this.setTabCheckboxState();\n if (this.filter()) {\n this.setGrantCheckboxState();\n }\n }\n this.onChangeGroup(this.selectedGroup);\n }\n onChangeGroup(group) {\n this.setDisabled(group.permissions);\n this.setSelectedGroup(group);\n this.setTabCheckboxState();\n }\n submit() {\n const unchangedPermissions = getPermissions(this.data.groups);\n const changedPermissions = this.permissions\n .filter(per => (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\n per.isGranted\n ? false\n : true)\n .map(({ name, isGranted }) => ({ name, isGranted }));\n if (!changedPermissions.length) {\n this.visible = false;\n return;\n }\n this.modalBusy = true;\n this.service\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\n .pipe(switchMap(() => this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null)), finalize(() => (this.modalBusy = false)))\n .subscribe(() => {\n this.visible = false;\n this.toasterService.success('AbpUi::SavedSuccessfully');\n });\n }\n openModal() {\n if (!this.providerKey || !this.providerName) {\n throw new Error('Provider Key and Provider Name are required.');\n }\n return this.service.get(this.providerName, this.providerKey).pipe(tap((permissionRes) => {\n const { groups } = permissionRes || {};\n this.data = permissionRes;\n this.permissionGroupSignal.set(groups);\n this.permissions = getPermissions(groups);\n this.setSelectedGroup(groups[0]);\n this.disabledSelectAllInAllTabs = this.permissions.every(per => per.isGranted &&\n per.grantedProviders.every(provider => provider.providerName !== this.providerName));\n }));\n }\n initModal() {\n // TODO: Refactor\n setTimeout(() => {\n this.setDisabled(this.selectedGroup?.permissions || []);\n this.setTabCheckboxState();\n this.setGrantCheckboxState();\n });\n }\n getAssignedCount(groupName) {\n return this.permissions.reduce((acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc), 0);\n }\n shouldFetchAppConfig() {\n const currentUser = this.configState.getOne('currentUser');\n if (this.providerName === 'R')\n return currentUser.roles.some(role => role === this.providerKey);\n if (this.providerName === 'U')\n return currentUser.id === this.providerKey;\n return false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.7\", type: PermissionManagementComponent, isStandalone: true, selector: \"abp-permission-management\", inputs: { providerName: \"providerName\", providerKey: \"providerKey\", hideBadges: \"hideBadges\", entityDisplayName: \"entityDisplayName\", visible: \"visible\" }, outputs: { visibleChange: \"visibleChange\" }, viewQueries: [{ propertyName: \"selectAllInThisTabsRef\", predicate: [\"selectAllInThisTabsRef\"], descendants: true }, { propertyName: \"selectAllInAllTabsRef\", predicate: [\"selectAllInAllTabsRef\"], descendants: true }], exportAs: [\"abpPermissionManagement\"], ngImport: i0, template: \"<abp-modal [(visible)]=\\\"visible\\\" [busy]=\\\"modalBusy\\\" [options]=\\\"{ size: 'lg', scrollable: false }\\\">\\r\\n @if (data.entityDisplayName || entityDisplayName) {\\r\\n <ng-template #abpHeader>\\r\\n <h4>\\r\\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\\r\\n {{ entityDisplayName || data.entityDisplayName }}\\r\\n </h4>\\r\\n </ng-template>\\r\\n <ng-template #abpBody>\\r\\n <div class=\\\"row d-flex align-items-center mb-2\\\">\\r\\n <div class=\\\"col\\\">\\r\\n <div class=\\\"input-group mb-2\\\">\\r\\n <span class=\\\"input-group-text\\\" id=\\\"basic-addon1\\\"><i class=\\\"bi bi-search\\\"></i></span>\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n class=\\\"form-control\\\"\\r\\n id=\\\"permission-search\\\"\\r\\n placeholder=\\\"Filter\\\"\\r\\n [ngModel]=\\\"filter()\\\"\\r\\n (ngModelChange)=\\\"filter.set($event)\\\"\\r\\n />\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"col-auto\\\">\\r\\n <div class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #selectAllInAllTabsRef\\r\\n type=\\\"checkbox\\\"\\r\\n id=\\\"select-all-in-all-tabs\\\"\\r\\n name=\\\"select-all-in-all-tabs\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [(ngModel)]=\\\"selectAllTab\\\"\\r\\n (click)=\\\"onClickSelectAll()\\\"\\r\\n [disabled]=\\\"disabledSelectAllInAllTabs\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" for=\\\"select-all-in-all-tabs\\\">{{\\r\\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\\r\\n }}</label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <fieldset class=\\\"border rounded-4 p-3\\\">\\r\\n <legend class=\\\"px-1 h5 mb-0\\\">\\r\\n {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\\r\\n </legend>\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-4\\\">\\r\\n <div class=\\\"overflow-auto lpx-scroll-pills-container scroll-in-modal\\\">\\r\\n <ul class=\\\"nav nav-pills flex-column\\\">\\r\\n @for (group of permissionGroups(); track $index) {\\r\\n <li class=\\\"border nav-item\\\">\\r\\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\\r\\n <a\\r\\n class=\\\"nav-link pointer\\\"\\r\\n [class.active]=\\\"selectedGroup?.name === group?.name\\\"\\r\\n (click)=\\\"onChangeGroup(group)\\\"\\r\\n (select)=\\\"setDisabled(group.permissions)\\\"\\r\\n >\\r\\n <div [class.font-weight-bold]=\\\"count.assignedCount\\\">\\r\\n {{ group?.displayName }}\\r\\n @if (count.assignedCount > 0) {\\r\\n <span>({{ count.assignedCount }})</span>\\r\\n }\\r\\n </div>\\r\\n </a>\\r\\n }\\r\\n </li>\\r\\n }\\r\\n </ul>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-8 scroll-in-modal\\\">\\r\\n <div class=\\\"ps-1\\\">\\r\\n @if (selectedGroupPermissions.length) {\\r\\n <div class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #selectAllInThisTabsRef\\r\\n type=\\\"checkbox\\\"\\r\\n id=\\\"select-all-in-this-tabs\\\"\\r\\n name=\\\"select-all-in-this-tabs\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [(ngModel)]=\\\"selectThisTab\\\"\\r\\n [disabled]=\\\"disableSelectAllTab\\\"\\r\\n (click)=\\\"onClickSelectThisTab()\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" for=\\\"select-all-in-this-tabs\\\">{{\\r\\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\\r\\n }}</label>\\r\\n </div>\\r\\n <hr class=\\\"my-2\\\" />\\r\\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\\r\\n <div [ngStyle]=\\\"permission.style\\\" class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #permissionCheckbox\\r\\n type=\\\"checkbox\\\"\\r\\n [checked]=\\\"getChecked(permission.name)\\\"\\r\\n [value]=\\\"getChecked(permission.name)\\\"\\r\\n [attr.id]=\\\"permission.name\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [disabled]=\\\"isGrantedByOtherProviderName(permission.grantedProviders)\\\"\\r\\n (click)=\\\"onClickCheckbox(permission, permissionCheckbox.value)\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" [attr.for]=\\\"permission.name\\\"\\r\\n >{{ permission.displayName }}\\r\\n @if (!hideBadges) {\\r\\n @for (provider of permission.grantedProviders; track $index) {\\r\\n <span class=\\\"badge bg-primary text-dark\\\"\\r\\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\\r\\n >\\r\\n }\\r\\n }\\r\\n </label>\\r\\n </div>\\r\\n }\\r\\n }\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </fieldset>\\r\\n </ng-template>\\r\\n <ng-template #abpFooter>\\r\\n <button type=\\\"button\\\" class=\\\"btn btn-outline-primary\\\" abpClose>\\r\\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\\r\\n </button>\\r\\n <abp-button iconClass=\\\"fa fa-check\\\" (click)=\\\"submit()\\\">{{\\r\\n 'AbpIdentity::Save' | abpLocalization\\r\\n }}</abp-button>\\r\\n </ng-template>\\r\\n }\\r\\n</abp-modal>\\r\\n\", styles: [\".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media(max-width:768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.CheckboxControlValueAccessor, selector: \"input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i2.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"component\", type: ModalComponent, selector: \"abp-modal\", inputs: [\"visible\", \"busy\", \"options\", \"suppressUnsavedChangesWarning\"], outputs: [\"visibleChange\", \"init\", \"appear\", \"disappear\"] }, { kind: \"pipe\", type: LocalizationPipe, name: \"abpLocalization\" }, { kind: \"component\", type: ButtonComponent, selector: \"abp-button\", inputs: [\"buttonId\", \"buttonClass\", \"buttonType\", \"formName\", \"iconClass\", \"loading\", \"disabled\", \"attributes\"], outputs: [\"click\", \"focus\", \"blur\", \"abpClick\", \"abpFocus\", \"abpBlur\"] }, { kind: \"directive\", type: ModalCloseDirective, selector: \"[abpClose]\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementComponent, decorators: [{\n type: Component,\n args: [{ selector: 'abp-permission-management', exportAs: 'abpPermissionManagement', imports: [\n FormsModule,\n CommonModule,\n ModalComponent,\n LocalizationPipe,\n ButtonComponent,\n ModalCloseDirective,\n ], template: \"<abp-modal [(visible)]=\\\"visible\\\" [busy]=\\\"modalBusy\\\" [options]=\\\"{ size: 'lg', scrollable: false }\\\">\\r\\n @if (data.entityDisplayName || entityDisplayName) {\\r\\n <ng-template #abpHeader>\\r\\n <h4>\\r\\n {{ 'AbpPermissionManagement::Permissions' | abpLocalization }} -\\r\\n {{ entityDisplayName || data.entityDisplayName }}\\r\\n </h4>\\r\\n </ng-template>\\r\\n <ng-template #abpBody>\\r\\n <div class=\\\"row d-flex align-items-center mb-2\\\">\\r\\n <div class=\\\"col\\\">\\r\\n <div class=\\\"input-group mb-2\\\">\\r\\n <span class=\\\"input-group-text\\\" id=\\\"basic-addon1\\\"><i class=\\\"bi bi-search\\\"></i></span>\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n class=\\\"form-control\\\"\\r\\n id=\\\"permission-search\\\"\\r\\n placeholder=\\\"Filter\\\"\\r\\n [ngModel]=\\\"filter()\\\"\\r\\n (ngModelChange)=\\\"filter.set($event)\\\"\\r\\n />\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"col-auto\\\">\\r\\n <div class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #selectAllInAllTabsRef\\r\\n type=\\\"checkbox\\\"\\r\\n id=\\\"select-all-in-all-tabs\\\"\\r\\n name=\\\"select-all-in-all-tabs\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [(ngModel)]=\\\"selectAllTab\\\"\\r\\n (click)=\\\"onClickSelectAll()\\\"\\r\\n [disabled]=\\\"disabledSelectAllInAllTabs\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" for=\\\"select-all-in-all-tabs\\\">{{\\r\\n 'AbpPermissionManagement::SelectAllInAllTabs' | abpLocalization\\r\\n }}</label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <fieldset class=\\\"border rounded-4 p-3\\\">\\r\\n <legend class=\\\"px-1 h5 mb-0\\\">\\r\\n {{ 'AbpPermissionManagement::PermissionGroup' | abpLocalization }}\\r\\n </legend>\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-4\\\">\\r\\n <div class=\\\"overflow-auto lpx-scroll-pills-container scroll-in-modal\\\">\\r\\n <ul class=\\\"nav nav-pills flex-column\\\">\\r\\n @for (group of permissionGroups(); track $index) {\\r\\n <li class=\\\"border nav-item\\\">\\r\\n @if ({ assignedCount: getAssignedCount(group.name) }; as count) {\\r\\n <a\\r\\n class=\\\"nav-link pointer\\\"\\r\\n [class.active]=\\\"selectedGroup?.name === group?.name\\\"\\r\\n (click)=\\\"onChangeGroup(group)\\\"\\r\\n (select)=\\\"setDisabled(group.permissions)\\\"\\r\\n >\\r\\n <div [class.font-weight-bold]=\\\"count.assignedCount\\\">\\r\\n {{ group?.displayName }}\\r\\n @if (count.assignedCount > 0) {\\r\\n <span>({{ count.assignedCount }})</span>\\r\\n }\\r\\n </div>\\r\\n </a>\\r\\n }\\r\\n </li>\\r\\n }\\r\\n </ul>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-8 scroll-in-modal\\\">\\r\\n <div class=\\\"ps-1\\\">\\r\\n @if (selectedGroupPermissions.length) {\\r\\n <div class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #selectAllInThisTabsRef\\r\\n type=\\\"checkbox\\\"\\r\\n id=\\\"select-all-in-this-tabs\\\"\\r\\n name=\\\"select-all-in-this-tabs\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [(ngModel)]=\\\"selectThisTab\\\"\\r\\n [disabled]=\\\"disableSelectAllTab\\\"\\r\\n (click)=\\\"onClickSelectThisTab()\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" for=\\\"select-all-in-this-tabs\\\">{{\\r\\n 'AbpPermissionManagement::SelectAllInThisTab' | abpLocalization\\r\\n }}</label>\\r\\n </div>\\r\\n <hr class=\\\"my-2\\\" />\\r\\n @for (permission of selectedGroupPermissions; track $index; let i = $index) {\\r\\n <div [ngStyle]=\\\"permission.style\\\" class=\\\"form-check mb-2\\\">\\r\\n <input\\r\\n #permissionCheckbox\\r\\n type=\\\"checkbox\\\"\\r\\n [checked]=\\\"getChecked(permission.name)\\\"\\r\\n [value]=\\\"getChecked(permission.name)\\\"\\r\\n [attr.id]=\\\"permission.name\\\"\\r\\n class=\\\"form-check-input\\\"\\r\\n [disabled]=\\\"isGrantedByOtherProviderName(permission.grantedProviders)\\\"\\r\\n (click)=\\\"onClickCheckbox(permission, permissionCheckbox.value)\\\"\\r\\n />\\r\\n <label class=\\\"form-check-label\\\" [attr.for]=\\\"permission.name\\\"\\r\\n >{{ permission.displayName }}\\r\\n @if (!hideBadges) {\\r\\n @for (provider of permission.grantedProviders; track $index) {\\r\\n <span class=\\\"badge bg-primary text-dark\\\"\\r\\n >{{ provider.providerName }}: {{ provider.providerKey }}</span\\r\\n >\\r\\n }\\r\\n }\\r\\n </label>\\r\\n </div>\\r\\n }\\r\\n }\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </fieldset>\\r\\n </ng-template>\\r\\n <ng-template #abpFooter>\\r\\n <button type=\\\"button\\\" class=\\\"btn btn-outline-primary\\\" abpClose>\\r\\n {{ 'AbpIdentity::Cancel' | abpLocalization }}\\r\\n </button>\\r\\n <abp-button iconClass=\\\"fa fa-check\\\" (click)=\\\"submit()\\\">{{\\r\\n 'AbpIdentity::Save' | abpLocalization\\r\\n }}</abp-button>\\r\\n </ng-template>\\r\\n }\\r\\n</abp-modal>\\r\\n\", styles: [\".scroll-in-modal{overflow:auto;max-height:calc(100vh - 23.1rem)}.lpx-scroll-pills-container ul{display:block;overflow-y:auto}@media(max-width:768px){.scroll-in-modal{max-height:calc(100vh - 15rem)}.lpx-scroll-pills-container ul{max-height:500px}}fieldset legend{float:none;width:auto}.lpx-scroll-pills-container .tab-content{padding-top:0!important;padding-bottom:0!important}.lpx-scroll-pills-container ul li{margin-bottom:10px;border-radius:10px}.lpx-scroll-pills-container ul li a.active{color:#fff!important;border-color:#6c5dd3!important;background-color:#6c5dd3!important}\\n\"] }]\n }], propDecorators: { providerName: [{\n type: Input\n }], providerKey: [{\n type: Input\n }], hideBadges: [{\n type: Input\n }], entityDisplayName: [{\n type: Input\n }], visible: [{\n type: Input\n }], visibleChange: [{\n type: Output\n }], selectAllInThisTabsRef: [{\n type: ViewChildren,\n args: ['selectAllInThisTabsRef']\n }], selectAllInAllTabsRef: [{\n type: ViewChildren,\n args: ['selectAllInAllTabsRef']\n }] } });\nfunction findParentPermissions(permissions, permission) {\n const permissionMap = new Map(permissions.map(p => [p.name, p]));\n let currentPermission = permissionMap.get(permission.name) ?? null;\n const parentPermissions = [];\n while (currentPermission && currentPermission.parentName) {\n const parentPermission = permissionMap.get(currentPermission.parentName);\n if (!parentPermission) {\n break;\n }\n parentPermissions.push(parentPermission);\n currentPermission = parentPermission;\n }\n return parentPermissions;\n}\nfunction findMargin(permissions, permission) {\n const parentPermission = permissions.find(per => per.name === permission.parentName);\n if (parentPermission && parentPermission.parentName) {\n let margin = 20;\n return (margin += findMargin(permissions, parentPermission));\n }\n return parentPermission ? 20 : 0;\n}\nfunction getPermissions(groups) {\n return groups.reduce((acc, val) => [\n ...acc,\n ...val.permissions.map(p => ({ ...p, groupName: val.name || '' })),\n ], []);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEYsT0FBTyxFQUNMLGVBQWUsRUFFZixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGNBQWMsR0FDZixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFJTCxrQkFBa0IsR0FHbkIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFFUixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFFTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFzRTdDLE1BQU0sT0FBTyw2QkFBNkI7SUE1RDFDO1FBaUVxQixZQUFPLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFD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RUQsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2pCLFdBQXFDLEVBQ3JDLFVBQWtDO0lBRWxDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJGLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxNQUE0QjtJQUNsRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDWixHQUFHLEdBQUc7UUFDTixHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUEwQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzVGLEVBQ0QsRUFBK0IsQ0FDaEMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWdTdGF0ZVNlcnZpY2UsIEN1cnJlbnRVc2VyRHRvLCBMb2NhbGl6YXRpb25QaXBlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHtcclxuICBCdXR0b25Db21wb25lbnQsXHJcbiAgTG9jYWxlRGlyZWN0aW9uLFxyXG4gIE1vZGFsQ2xvc2VEaXJlY3RpdmUsXHJcbiAgTW9kYWxDb21wb25lbnQsXHJcbiAgVG9hc3RlclNlcnZpY2UsXHJcbn0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQge1xyXG4gIEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvLFxyXG4gIFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbiAgUGVybWlzc2lvbkdyb3VwRHRvLFxyXG4gIFBlcm1pc3Npb25zU2VydmljZSxcclxuICBQcm92aWRlckluZm9EdG8sXHJcbiAgVXBkYXRlUGVybWlzc2lvbkR0byxcclxufSBmcm9tICdAYWJwL25nLnBlcm1pc3Npb24tbWFuYWdlbWVudC9wcm94eSc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIHNpZ25hbCxcclxuICBUcmFja0J5RnVuY3Rpb24sXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZW1lbnQgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhTdHlsZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgc3R5bGU6IHN0cmluZztcclxufTtcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhHcm91cE5hbWUgPSBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvICYge1xyXG4gIGdyb3VwTmFtZTogc3RyaW5nO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtcGVybWlzc2lvbi1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2FicFBlcm1pc3Npb25NYW5hZ2VtZW50JyxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLnNjcm9sbC1pbi1tb2RhbCB7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgLypcclxuICAgICAgICBUbyBtYWludGFpbiBhIDI4cHggdG9wIG1hcmdpbiBhbmQgMjhweCBib3R0b20gbWFyZ2luIHdoZW4gdGhlIG1vZGFsIHJlYWNoZXMgZnVsbCBoZWlnaHQsIHRoZSBzY3JvbGxhYmxlIGFyZWEgbmVlZHMgdG8gYmUgMTAwdmggLSAyMy4xcmVtXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDIzLjFyZW0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAubHB4LXNjcm9sbC1waWxscy1jb250YWluZXIgdWwge1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFRhcmdldCBtb2JpbGUgc2NyZWVucyAqL1xyXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcclxuICAgICAgICAuc2Nyb2xsLWluLW1vZGFsIHtcclxuICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxNXJlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciB1bCB7XHJcbiAgICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZpZWxkc2V0IGxlZ2VuZCB7XHJcbiAgICAgICAgZmxvYXQ6IG5vbmU7XHJcbiAgICAgICAgd2lkdGg6IGF1dG87XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciAudGFiLWNvbnRlbnQge1xyXG4gICAgICAgIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLmxweC1zY3JvbGwtcGlsbHMtY29udGFpbmVyIHVsIGxpIHtcclxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xyXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC5scHgtc2Nyb2xsLXBpbGxzLWNvbnRhaW5lciB1bCBsaSBhLmFjdGl2ZSB7XHJcbiAgICAgICAgY29sb3I6ICNmZmYgIWltcG9ydGFudDtcclxuICAgICAgICBib3JkZXItY29sb3I6ICM2YzVkZDMgIWltcG9ydGFudDtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM1ZGQzICFpbXBvcnRhbnQ7XHJcbiAgICAgIH1cclxuICAgIGAsXHJcbiAgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1vZGFsQ29tcG9uZW50LFxyXG4gICAgTG9jYWxpemF0aW9uUGlwZSxcclxuICAgIEJ1dHRvbkNvbXBvbmVudCxcclxuICAgIE1vZGFsQ2xvc2VEaXJlY3RpdmUsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50c1xyXG4gICAgUGVybWlzc2lvbk1hbmFnZW1lbnQuUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRJbnB1dHMsXHJcbiAgICBQZXJtaXNzaW9uTWFuYWdlbWVudC5QZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudE91dHB1dHNcclxue1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBzZXJ2aWNlID0gaW5qZWN0KFBlcm1pc3Npb25zU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZ1N0YXRlID0gaW5qZWN0KENvbmZpZ1N0YXRlU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvYXN0ZXJTZXJ2aWNlID0gaW5qZWN0KFRvYXN0ZXJTZXJ2aWNlKTtcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBwcm92aWRlck5hbWUhOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgcHJvdmlkZXJLZXkhOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcmVhZG9ubHkgaGlkZUJhZGdlcyA9IGZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgX3Zpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBlbnRpdHlEaXNwbGF5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XHJcbiAgfVxyXG5cclxuICBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlID09PSB0aGlzLl92aXNpYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5vcGVuTW9kYWwoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgICAgIGNvbmNhdCh0aGlzLnNlbGVjdEFsbEluQWxsVGFic1JlZi5jaGFuZ2VzLCB0aGlzLnNlbGVjdEFsbEluVGhpc1RhYnNSZWYuY2hhbmdlcylcclxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbml0TW9kYWwoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChudWxsKTtcclxuICAgICAgdGhpcy5fdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XHJcbiAgICAgIHRoaXMuZmlsdGVyLnNldCgnJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignc2VsZWN0QWxsSW5UaGlzVGFic1JlZicpXHJcbiAgc2VsZWN0QWxsSW5UaGlzVGFic1JlZiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuICBAVmlld0NoaWxkcmVuKCdzZWxlY3RBbGxJbkFsbFRhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluQWxsVGFic1JlZiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuXHJcbiAgZGF0YTogR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8gPSB7IGdyb3VwczogW10sIGVudGl0eURpc3BsYXlOYW1lOiAnJyB9O1xyXG5cclxuICBzZWxlY3RlZEdyb3VwPzogUGVybWlzc2lvbkdyb3VwRHRvIHwgbnVsbDtcclxuXHJcbiAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lW10gPSBbXTtcclxuXHJcbiAgc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuXHJcbiAgZGlzYWJsZVNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG5cclxuICBkaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IGZhbHNlO1xyXG5cclxuICBtb2RhbEJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgZmlsdGVyID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG5cclxuICBzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnM6IFBlcm1pc3Npb25XaXRoU3R5bGVbXSA9IFtdO1xyXG5cclxuICBwZXJtaXNzaW9uR3JvdXBTaWduYWwgPSBzaWduYWw8UGVybWlzc2lvbkdyb3VwRHRvW10+KFtdKTtcclxuXHJcbiAgcGVybWlzc2lvbkdyb3VwcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuZmlsdGVyKCkudG9Mb3dlckNhc2UoKS50cmltKCk7XHJcbiAgICBsZXQgZ3JvdXBzID0gdGhpcy5wZXJtaXNzaW9uR3JvdXBTaWduYWwoKTtcclxuXHJcbiAgICBpZiAoIXNlYXJjaCkge1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkR3JvdXAoZ3JvdXBzWzBdKTtcclxuICAgICAgcmV0dXJuIGdyb3VwcztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbmNsdWRlc1NlYXJjaCA9IHRleHQgPT4gdGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCk7XHJcbiAgICBncm91cHMgPSBncm91cHMuZmlsdGVyKGdyb3VwID0+XHJcbiAgICAgIGdyb3VwLnBlcm1pc3Npb25zLnNvbWUoXHJcbiAgICAgICAgcGVybWlzc2lvbiA9PiBpbmNsdWRlc1NlYXJjaChwZXJtaXNzaW9uLmRpc3BsYXlOYW1lKSB8fCBpbmNsdWRlc1NlYXJjaChncm91cC5kaXNwbGF5TmFtZSksXHJcbiAgICAgICksXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChncm91cHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChncm91cHNbMF0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH0pO1xyXG5cclxuICB0cmFja0J5Rm46IFRyYWNrQnlGdW5jdGlvbjxQZXJtaXNzaW9uR3JvdXBEdG8+ID0gKF8sIGl0ZW0pID0+IGl0ZW0ubmFtZTtcclxuXHJcbiAgZ2V0Q2hlY2tlZChuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAodGhpcy5wZXJtaXNzaW9ucy5maW5kKHBlciA9PiBwZXIubmFtZSA9PT0gbmFtZSkgfHwgeyBpc0dyYW50ZWQ6IGZhbHNlIH0pLmlzR3JhbnRlZDtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkR3JvdXAoZ3JvdXA6IFBlcm1pc3Npb25Hcm91cER0bykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRHcm91cCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWFyZ2luID0gYG1hcmdpbi0ke1xyXG4gICAgICAoZG9jdW1lbnQuYm9keS5kaXIgYXMgTG9jYWxlRGlyZWN0aW9uKSA9PT0gJ3J0bCcgPyAncmlnaHQnIDogJ2xlZnQnXHJcbiAgICB9LnB4YDtcclxuXHJcbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9XHJcbiAgICAgICh0aGlzLmRhdGEuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4gZ3JvdXAubmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwPy5uYW1lKSB8fCB7fSkucGVybWlzc2lvbnMgfHxcclxuICAgICAgW107XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zLm1hcChcclxuICAgICAgcGVybWlzc2lvbiA9PlxyXG4gICAgICAgICh7XHJcbiAgICAgICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICAgICAgc3R5bGU6IHsgW21hcmdpbl06IGZpbmRNYXJnaW4ocGVybWlzc2lvbnMsIHBlcm1pc3Npb24pIH0sXHJcbiAgICAgICAgICBpc0dyYW50ZWQ6ICh0aGlzLnBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLm5hbWUpIHx8IHt9KS5pc0dyYW50ZWQsXHJcbiAgICAgICAgfSkgYXMgdW5rbm93biBhcyBQZXJtaXNzaW9uV2l0aFN0eWxlLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkKHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10pIHtcclxuICAgIGlmIChwZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiID0gcGVybWlzc2lvbnMuZXZlcnkoXHJcbiAgICAgICAgcGVybWlzc2lvbiA9PlxyXG4gICAgICAgICAgcGVybWlzc2lvbi5pc0dyYW50ZWQgJiZcclxuICAgICAgICAgIHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycz8uZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSAhPT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKGdyYW50ZWRQcm92aWRlcnM6IFByb3ZpZGVySW5mb0R0b1tdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZ3JhbnRlZFByb3ZpZGVycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGdyYW50ZWRQcm92aWRlcnMuZmluZEluZGV4KHAgPT4gcC5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSA+IC0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0NoZWNrYm94KGNsaWNrZWRQZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgICBjb25zdCB7IGlzR3JhbnRlZCwgZ3JhbnRlZFByb3ZpZGVycyB9ID0gY2xpY2tlZFBlcm1pc3Npb247XHJcbiAgICBpZiAoaXNHcmFudGVkICYmIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShncmFudGVkUHJvdmlkZXJzKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKHRoaXMuc2VsZWN0ZWRHcm91cCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVQZXJtaXNzaW9uU3RhdHVzKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMoY2xpY2tlZFBlcm1pc3Npb24pO1xyXG4gICAgICB0aGlzLnNldFBhcmVudENsaWNrZWQoY2xpY2tlZFBlcm1pc3Npb24pO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGVybWlzc2lvblN0YXR1cyhjbGlja2VkUGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlcm1pc3Npb24gPT4ge1xyXG4gICAgICBjb25zdCBpc0V4YWN0TWF0Y2ggPSBjbGlja2VkUGVybWlzc2lvbi5uYW1lID09IHBlcm1pc3Npb24ubmFtZTtcclxuICAgICAgY29uc3QgaXNQYXJlbnRPZlBlcm1pc3Npb24gPSBjbGlja2VkUGVybWlzc2lvbi5wYXJlbnROYW1lID09PSBwZXJtaXNzaW9uLm5hbWU7XHJcbiAgICAgIGNvbnN0IGlzQ2hpbGRPZlBlcm1pc3Npb24gPSBjbGlja2VkUGVybWlzc2lvbi5uYW1lID09PSBwZXJtaXNzaW9uLnBhcmVudE5hbWU7XHJcblxyXG4gICAgICBpZiAoaXNFeGFjdE1hdGNoKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucGVybWlzc2lvbiwgaXNHcmFudGVkOiAhcGVybWlzc2lvbi5pc0dyYW50ZWQgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzQ2hpbGRPZlBlcm1pc3Npb24gJiYgcGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICByZXR1cm4geyAuLi5wZXJtaXNzaW9uLCBpc0dyYW50ZWQ6IGZhbHNlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc1BhcmVudE9mUGVybWlzc2lvbiAmJiAhcGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICByZXR1cm4geyAuLi5wZXJtaXNzaW9uLCBpc0dyYW50ZWQ6IHRydWUgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHBlcm1pc3Npb247XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhcmVudENsaWNrZWQoY2xpY2tlZFBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIGlmIChjbGlja2VkUGVybWlzc2lvbi5wYXJlbnROYW1lKSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudFBlcm1pc3Npb25zID0gZmluZFBhcmVudFBlcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnMsIGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgaWYgKHBhcmVudFBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBwYXJlbnROYW1lcyA9IG5ldyBTZXQocGFyZW50UGVybWlzc2lvbnMubWFwKHBhcmVudCA9PiBwYXJlbnQubmFtZSkpO1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5tYXAocGVyID0+IHtcclxuICAgICAgICAgIGxldCB1cGRhdGVkSXNHcmFudGVkID0gcGVyLmlzR3JhbnRlZDtcclxuXHJcbiAgICAgICAgICBpZiAocGVyLnBhcmVudE5hbWUgPT09IGNsaWNrZWRQZXJtaXNzaW9uLm5hbWUgJiYgIWNsaWNrZWRQZXJtaXNzaW9uLmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgICB1cGRhdGVkSXNHcmFudGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHBhcmVudE5hbWVzLmhhcyhwZXIubmFtZSkpIHtcclxuICAgICAgICAgICAgdXBkYXRlZElzR3JhbnRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IHVwZGF0ZWRJc0dyYW50ZWQgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudHMgPSBmaW5kUGFyZW50UGVybWlzc2lvbnModGhpcy5wZXJtaXNzaW9ucywgcGVyKTtcclxuICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJvb3RQYXJlbnQgPSBwYXJlbnRzW3BhcmVudHMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIGlmIChyb290UGFyZW50Lm5hbWUgPT09IGNsaWNrZWRQZXJtaXNzaW9uLm5hbWUgJiYgIXJvb3RQYXJlbnQuaXNHcmFudGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4geyAuLi5wZXIsIGlzR3JhbnRlZDogZmFsc2UgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zKGNsaWNrZWRQZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5tYXAocGVyID0+IHtcclxuICAgICAgaWYgKHBlci5uYW1lID09PSBjbGlja2VkUGVybWlzc2lvbnMubmFtZSkge1xyXG4gICAgICAgIHBlci5pc0dyYW50ZWQgPSAhcGVyLmlzR3JhbnRlZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGVyO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUYWJDaGVja2JveFN0YXRlKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0YWJsZVBlcm1pc3Npb25zID0gdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PlxyXG4gICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwID0+IHAucHJvdmlkZXJOYW1lID09PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkUGVybWlzc2lvbnMgPSBzZWxlY3RhYmxlUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LWFsbC1pbi10aGlzLXRhYnMnKSBhcyBhbnk7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxlY3RlZFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBlbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEdyYW50Q2hlY2tib3hTdGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PlxyXG4gICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwID0+IHAucHJvdmlkZXJOYW1lID09PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucyA9IHNlbGVjdGFibGVQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+IHBlci5pc0dyYW50ZWQpO1xyXG4gICAgY29uc3QgY2hlY2tib3hFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NlbGVjdC1hbGwtaW4tYWxsLXRhYnMnKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQWxsUGVybWlzc2lvbnMubGVuZ3RoID09PSBzZWxlY3RhYmxlUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVGFiID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRBbGxQZXJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY2hlY2tib3hFbGVtZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWxlY3RUaGlzVGFiKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMuZm9yRWFjaChwZXJtaXNzaW9uID0+IHtcclxuICAgICAgaWYgKHBlcm1pc3Npb24uaXNHcmFudGVkICYmIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wZXJtaXNzaW9ucy5maW5kSW5kZXgocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLm5hbWUpO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IFtcclxuICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLnNsaWNlKDAsIGluZGV4KSxcclxuICAgICAgICB7IC4uLnRoaXMucGVybWlzc2lvbnNbaW5kZXhdLCBpc0dyYW50ZWQ6ICF0aGlzLnNlbGVjdFRoaXNUYWIgfSxcclxuICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLnNsaWNlKGluZGV4ICsgMSksXHJcbiAgICAgIF07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1NlbGVjdEFsbCgpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlcigpKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyLnNldCgnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlcm1pc3Npb24gPT4gKHtcclxuICAgICAgLi4ucGVybWlzc2lvbixcclxuICAgICAgaXNHcmFudGVkOlxyXG4gICAgICAgIHRoaXMuaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpIHx8ICF0aGlzLnNlbGVjdEFsbFRhYixcclxuICAgIH0pKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYikge1xyXG4gICAgICB0aGlzLnNlbGVjdFRoaXNUYWIgPSAhdGhpcy5zZWxlY3RBbGxUYWI7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXIoKSkge1xyXG4gICAgICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2VHcm91cCh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VHcm91cChncm91cDogUGVybWlzc2lvbkdyb3VwRHRvKSB7XHJcbiAgICB0aGlzLnNldERpc2FibGVkKGdyb3VwLnBlcm1pc3Npb25zKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChncm91cCk7XHJcbiAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdCgpIHtcclxuICAgIGNvbnN0IHVuY2hhbmdlZFBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnModGhpcy5kYXRhLmdyb3Vwcyk7XHJcblxyXG4gICAgY29uc3QgY2hhbmdlZFBlcm1pc3Npb25zOiBVcGRhdGVQZXJtaXNzaW9uRHRvW10gPSB0aGlzLnBlcm1pc3Npb25zXHJcbiAgICAgIC5maWx0ZXIocGVyID0+XHJcbiAgICAgICAgKHVuY2hhbmdlZFBlcm1pc3Npb25zLmZpbmQodW5jaGFuZ2VkID0+IHVuY2hhbmdlZC5uYW1lID09PSBwZXIubmFtZSkgfHwge30pLmlzR3JhbnRlZCA9PT1cclxuICAgICAgICBwZXIuaXNHcmFudGVkXHJcbiAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICA6IHRydWUsXHJcbiAgICAgIClcclxuICAgICAgLm1hcCgoeyBuYW1lLCBpc0dyYW50ZWQgfSkgPT4gKHsgbmFtZSwgaXNHcmFudGVkIH0pKTtcclxuXHJcbiAgICBpZiAoIWNoYW5nZWRQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1vZGFsQnVzeSA9IHRydWU7XHJcbiAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgLnVwZGF0ZSh0aGlzLnByb3ZpZGVyTmFtZSwgdGhpcy5wcm92aWRlcktleSwgeyBwZXJtaXNzaW9uczogY2hhbmdlZFBlcm1pc3Npb25zIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PlxyXG4gICAgICAgICAgdGhpcy5zaG91bGRGZXRjaEFwcENvbmZpZygpID8gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKSA6IG9mKG51bGwpLFxyXG4gICAgICAgICksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubW9kYWxCdXN5ID0gZmFsc2UpKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MoJ0FicFVpOjpTYXZlZFN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Nb2RhbCgpIHtcclxuICAgIGlmICghdGhpcy5wcm92aWRlcktleSB8fCAhdGhpcy5wcm92aWRlck5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlciBLZXkgYW5kIFByb3ZpZGVyIE5hbWUgYXJlIHJlcXVpcmVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5KS5waXBlKFxyXG4gICAgICB0YXAoKHBlcm1pc3Npb25SZXM6IEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBncm91cHMgfSA9IHBlcm1pc3Npb25SZXMgfHwge307XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YSA9IHBlcm1pc3Npb25SZXM7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uR3JvdXBTaWduYWwuc2V0KGdyb3Vwcyk7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IGdldFBlcm1pc3Npb25zKGdyb3Vwcyk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEdyb3VwKGdyb3Vwc1swXSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRTZWxlY3RBbGxJbkFsbFRhYnMgPSB0aGlzLnBlcm1pc3Npb25zLmV2ZXJ5KFxyXG4gICAgICAgICAgcGVyID0+XHJcbiAgICAgICAgICAgIHBlci5pc0dyYW50ZWQgJiZcclxuICAgICAgICAgICAgcGVyLmdyYW50ZWRQcm92aWRlcnMuZXZlcnkocHJvdmlkZXIgPT4gcHJvdmlkZXIucHJvdmlkZXJOYW1lICE9PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaW5pdE1vZGFsKCkge1xyXG4gICAgLy8gVE9ETzogUmVmYWN0b3JcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldERpc2FibGVkKHRoaXMuc2VsZWN0ZWRHcm91cD8ucGVybWlzc2lvbnMgfHwgW10pO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzaWduZWRDb3VudChncm91cE5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMucmVkdWNlKFxyXG4gICAgICAoYWNjLCB2YWwpID0+ICh2YWwuZ3JvdXBOYW1lID09PSBncm91cE5hbWUgJiYgdmFsLmlzR3JhbnRlZCA/IGFjYyArIDEgOiBhY2MpLFxyXG4gICAgICAwLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNob3VsZEZldGNoQXBwQ29uZmlnKCkge1xyXG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSgnY3VycmVudFVzZXInKSBhcyBDdXJyZW50VXNlckR0bztcclxuXHJcbiAgICBpZiAodGhpcy5wcm92aWRlck5hbWUgPT09ICdSJykgcmV0dXJuIGN1cnJlbnRVc2VyLnJvbGVzLnNvbWUocm9sZSA9PiByb2xlID09PSB0aGlzLnByb3ZpZGVyS2V5KTtcclxuXHJcbiAgICBpZiAodGhpcy5wcm92aWRlck5hbWUgPT09ICdVJykgcmV0dXJuIGN1cnJlbnRVc2VyLmlkID09PSB0aGlzLnByb3ZpZGVyS2V5O1xyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbmRQYXJlbnRQZXJtaXNzaW9ucyhcclxuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdLFxyXG4gIHBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbik6IFBlcm1pc3Npb25HcmFudEluZm9EdG9bXSB7XHJcbiAgY29uc3QgcGVybWlzc2lvbk1hcCA9IG5ldyBNYXAocGVybWlzc2lvbnMubWFwKHAgPT4gW3AubmFtZSwgcF0pKTtcclxuICBsZXQgY3VycmVudFBlcm1pc3Npb24gPSBwZXJtaXNzaW9uTWFwLmdldChwZXJtaXNzaW9uLm5hbWUpID8/IG51bGw7XHJcbiAgY29uc3QgcGFyZW50UGVybWlzc2lvbnM6IFBlcm1pc3Npb25HcmFudEluZm9EdG9bXSA9IFtdO1xyXG5cclxuICB3aGlsZSAoY3VycmVudFBlcm1pc3Npb24gJiYgY3VycmVudFBlcm1pc3Npb24ucGFyZW50TmFtZSkge1xyXG4gICAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25NYXAuZ2V0KGN1cnJlbnRQZXJtaXNzaW9uLnBhcmVudE5hbWUpO1xyXG4gICAgaWYgKCFwYXJlbnRQZXJtaXNzaW9uKSB7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcGFyZW50UGVybWlzc2lvbnMucHVzaChwYXJlbnRQZXJtaXNzaW9uKTtcclxuICAgIGN1cnJlbnRQZXJtaXNzaW9uID0gcGFyZW50UGVybWlzc2lvbjtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJlbnRQZXJtaXNzaW9ucztcclxufVxyXG5cclxuZnVuY3Rpb24gZmluZE1hcmdpbihcclxuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdLFxyXG4gIHBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbik6IG51bWJlciB7XHJcbiAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLnBhcmVudE5hbWUpO1xyXG5cclxuICBpZiAocGFyZW50UGVybWlzc2lvbiAmJiBwYXJlbnRQZXJtaXNzaW9uLnBhcmVudE5hbWUpIHtcclxuICAgIGxldCBtYXJnaW4gPSAyMDtcclxuICAgIHJldHVybiAobWFyZ2luICs9IGZpbmRNYXJnaW4ocGVybWlzc2lvbnMsIHBhcmVudFBlcm1pc3Npb24pKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJlbnRQZXJtaXNzaW9uID8gMjAgOiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhncm91cHM6IFBlcm1pc3Npb25Hcm91cER0b1tdKTogUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSB7XHJcbiAgcmV0dXJuIGdyb3Vwcy5yZWR1Y2UoXHJcbiAgICAoYWNjLCB2YWwpID0+IFtcclxuICAgICAgLi4uYWNjLFxyXG4gICAgICAuLi52YWwucGVybWlzc2lvbnMubWFwPFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lPihwID0+ICh7IC4uLnAsIGdyb3VwTmFtZTogdmFsLm5hbWUgfHwgJycgfSkpLFxyXG4gICAgXSxcclxuICAgIFtdIGFzIFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lW10sXHJcbiAgKTtcclxufVxyXG4iLCI8YWJwLW1vZGFsIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFtidXN5XT1cIm1vZGFsQnVzeVwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ2xnJywgc2Nyb2xsYWJsZTogZmFsc2UgfVwiPlxyXG4gIEBpZiAoZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB8fCBlbnRpdHlEaXNwbGF5TmFtZSkge1xyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICAgIDxoND5cclxuICAgICAgICB7eyAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlBlcm1pc3Npb25zJyB8IGFicExvY2FsaXphdGlvbiB9fSAtXHJcbiAgICAgICAge3sgZW50aXR5RGlzcGxheU5hbWUgfHwgZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB9fVxyXG4gICAgICA8L2g0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItMlwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cImJhc2ljLWFkZG9uMVwiPjxpIGNsYXNzPVwiYmkgYmktc2VhcmNoXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICBpZD1cInBlcm1pc3Npb24tc2VhcmNoXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlclwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyKClcIlxyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlci5zZXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgI3NlbGVjdEFsbEluQWxsVGFic1JlZlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJzZWxlY3QtYWxsLWluLWFsbC10YWJzXCJcclxuICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbFRhYlwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RBbGwoKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdC1hbGwtaW4tYWxsLXRhYnNcIj57e1xyXG4gICAgICAgICAgICAgICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6U2VsZWN0QWxsSW5BbGxUYWJzJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImJvcmRlciByb3VuZGVkLTQgcC0zXCI+XHJcbiAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInB4LTEgaDUgbWItMFwiPlxyXG4gICAgICAgICAge3sgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpQZXJtaXNzaW9uR3JvdXAnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9sZWdlbmQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIGxweC1zY3JvbGwtcGlsbHMtY29udGFpbmVyIHNjcm9sbC1pbi1tb2RhbFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtcGlsbHMgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGdyb3VwIG9mIHBlcm1pc3Npb25Hcm91cHMoKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImJvcmRlciBuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoeyBhc3NpZ25lZENvdW50OiBnZXRBc3NpZ25lZENvdW50KGdyb3VwLm5hbWUpIH07IGFzIGNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkR3JvdXA/Lm5hbWUgPT09IGdyb3VwPy5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hhbmdlR3JvdXAoZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJzZXREaXNhYmxlZChncm91cC5wZXJtaXNzaW9ucylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5mb250LXdlaWdodC1ib2xkXT1cImNvdW50LmFzc2lnbmVkQ291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cD8uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvdW50LmFzc2lnbmVkQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4oe3sgY291bnQuYXNzaWduZWRDb3VudCB9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggc2Nyb2xsLWluLW1vZGFsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcy0xXCI+XHJcbiAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICNzZWxlY3RBbGxJblRoaXNUYWJzUmVmXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCJcclxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RUaGlzVGFiXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVNlbGVjdEFsbFRhYlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RUaGlzVGFiKClcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6U2VsZWN0QWxsSW5UaGlzVGFiJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgQGZvciAocGVybWlzc2lvbiBvZiBzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnM7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJwZXJtaXNzaW9uLnN0eWxlXCIgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICNwZXJtaXNzaW9uQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRDaGVja2VkKHBlcm1pc3Npb24ubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tDaGVja2JveChwZXJtaXNzaW9uLCBwZXJtaXNzaW9uQ2hlY2tib3gudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbYXR0ci5mb3JdPVwicGVybWlzc2lvbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgID57eyBwZXJtaXNzaW9uLmRpc3BsYXlOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFoaWRlQmFkZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHByb3ZpZGVyIG9mIHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVyczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1wcmltYXJ5IHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgcHJvdmlkZXIucHJvdmlkZXJOYW1lIH19OiB7eyBwcm92aWRlci5wcm92aWRlcktleSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9maWVsZHNldD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGFicENsb3NlPlxyXG4gICAgICAgIHt7ICdBYnBJZGVudGl0eTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiAoY2xpY2spPVwic3VibWl0KClcIj57e1xyXG4gICAgICAgICdBYnBJZGVudGl0eTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgfX08L2FicC1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIH1cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==","import { NgModule } from '@angular/core';\nimport { PermissionManagementComponent } from './components';\nimport * as i0 from \"@angular/core\";\nexport class PermissionManagementModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, imports: [PermissionManagementComponent], exports: [PermissionManagementComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, imports: [PermissionManagementComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: PermissionManagementModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [],\n imports: [PermissionManagementComponent],\n exports: [PermissionManagementComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL3Blcm1pc3Npb24tbWFuYWdlbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBTzdELE1BQU0sT0FBTywwQkFBMEI7OEdBQTFCLDBCQUEwQjsrR0FBMUIsMEJBQTBCLFlBSDNCLDZCQUE2QixhQUM3Qiw2QkFBNkI7K0dBRTVCLDBCQUEwQixZQUgzQiw2QkFBNkI7OzJGQUc1QiwwQkFBMEI7a0JBTHRDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDekMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW10sXHJcbiAgaW1wb3J0czogW1Blcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50XSxcclxuICBleHBvcnRzOiBbUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbk1hbmFnZW1lbnRNb2R1bGUge31cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public-api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLW5nLnBlcm1pc3Npb24tbWFuYWdlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvYWJwLW5nLnBlcm1pc3Npb24tbWFuYWdlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@abp/ng.permission-management",
3
- "version": "9.3.5",
3
+ "version": "9.3.6",
4
4
  "homepage": "https://abp.io",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/abpframework/abp.git"
8
8
  },
9
9
  "dependencies": {
10
- "@abp/ng.theme.shared": "~9.3.5",
10
+ "@abp/ng.theme.shared": "~9.3.6",
11
11
  "tslib": "^2.0.0"
12
12
  },
13
13
  "publishConfig": {