@abp/ng.permission-management 8.2.1 → 8.2.3
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.
|
@@ -84,56 +84,61 @@ export class PermissionManagementComponent {
|
|
|
84
84
|
return false;
|
|
85
85
|
}
|
|
86
86
|
onClickCheckbox(clickedPermission) {
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
const { isGranted, grantedProviders } = clickedPermission;
|
|
88
|
+
if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {
|
|
89
89
|
return;
|
|
90
|
+
}
|
|
90
91
|
this.setSelectedGroup(this.selectedGroup);
|
|
91
92
|
setTimeout(() => {
|
|
92
|
-
this.
|
|
93
|
-
if (clickedPermission.name === per.name) {
|
|
94
|
-
return { ...per, isGranted: !per.isGranted };
|
|
95
|
-
}
|
|
96
|
-
else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) {
|
|
97
|
-
return { ...per, isGranted: false };
|
|
98
|
-
}
|
|
99
|
-
else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) {
|
|
100
|
-
return { ...per, isGranted: true };
|
|
101
|
-
}
|
|
102
|
-
return per;
|
|
103
|
-
});
|
|
93
|
+
this.updatePermissionStatus(clickedPermission);
|
|
104
94
|
this.updateSelectedGroupPermissions(clickedPermission);
|
|
95
|
+
this.setParentClicked(clickedPermission);
|
|
105
96
|
this.setTabCheckboxState();
|
|
106
97
|
this.setGrantCheckboxState();
|
|
107
|
-
this.setParentClicked(clickedPermission);
|
|
108
98
|
}, 0);
|
|
109
99
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
100
|
+
updatePermissionStatus(clickedPermission) {
|
|
101
|
+
this.permissions = this.permissions.map(permission => {
|
|
102
|
+
const isExactMatch = clickedPermission.name == permission.name;
|
|
103
|
+
const isParentOfPermission = clickedPermission.parentName === permission.name;
|
|
104
|
+
const isChildOfPermission = clickedPermission.name === permission.parentName;
|
|
105
|
+
if (isExactMatch) {
|
|
106
|
+
return { ...permission, isGranted: !permission.isGranted };
|
|
107
|
+
}
|
|
108
|
+
if (isChildOfPermission && permission.isGranted) {
|
|
109
|
+
return { ...permission, isGranted: false };
|
|
110
|
+
}
|
|
111
|
+
if (isParentOfPermission && !permission.isGranted) {
|
|
112
|
+
return { ...permission, isGranted: true };
|
|
113
|
+
}
|
|
114
|
+
return permission;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
setParentClicked(clickedPermission) {
|
|
118
|
+
if (clickedPermission.parentName) {
|
|
119
|
+
const parentPermissions = findParentPermissions(this.permissions, clickedPermission);
|
|
120
|
+
if (parentPermissions.length > 0) {
|
|
121
|
+
const parentNames = new Set(parentPermissions.map(parent => parent.name));
|
|
125
122
|
this.permissions = this.permissions.map(per => {
|
|
126
|
-
|
|
127
|
-
|
|
123
|
+
let updatedIsGranted = per.isGranted;
|
|
124
|
+
if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {
|
|
125
|
+
updatedIsGranted = false;
|
|
126
|
+
}
|
|
127
|
+
if (parentNames.has(per.name)) {
|
|
128
|
+
updatedIsGranted = true;
|
|
128
129
|
}
|
|
129
|
-
return per;
|
|
130
|
+
return { ...per, isGranted: updatedIsGranted };
|
|
130
131
|
});
|
|
131
132
|
}
|
|
132
133
|
return;
|
|
133
134
|
}
|
|
134
135
|
this.permissions = this.permissions.map(per => {
|
|
135
|
-
|
|
136
|
-
|
|
136
|
+
const parents = findParentPermissions(this.permissions, per);
|
|
137
|
+
if (parents.length > 0) {
|
|
138
|
+
const rootParent = parents[parents.length - 1];
|
|
139
|
+
if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {
|
|
140
|
+
return { ...per, isGranted: false };
|
|
141
|
+
}
|
|
137
142
|
}
|
|
138
143
|
return per;
|
|
139
144
|
});
|
|
@@ -147,10 +152,10 @@ export class PermissionManagementComponent {
|
|
|
147
152
|
});
|
|
148
153
|
}
|
|
149
154
|
setTabCheckboxState() {
|
|
150
|
-
const
|
|
151
|
-
const selectedPermissions =
|
|
155
|
+
const selectablePermissions = this.permissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName));
|
|
156
|
+
const selectedPermissions = selectablePermissions.filter(per => per.isGranted);
|
|
152
157
|
const element = document.querySelector('#select-all-in-this-tabs');
|
|
153
|
-
if (selectedPermissions.length ===
|
|
158
|
+
if (selectedPermissions.length === selectablePermissions.length) {
|
|
154
159
|
element.indeterminate = false;
|
|
155
160
|
this.selectThisTab = true;
|
|
156
161
|
}
|
|
@@ -284,6 +289,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
284
289
|
type: ViewChildren,
|
|
285
290
|
args: ['selectAllInAllTabsRef']
|
|
286
291
|
}] } });
|
|
292
|
+
function findParentPermissions(permissions, permission) {
|
|
293
|
+
const permissionMap = new Map(permissions.map(p => [p.name, p]));
|
|
294
|
+
let currentPermission = permissionMap.get(permission.name) ?? null;
|
|
295
|
+
const parentPermissions = [];
|
|
296
|
+
while (currentPermission && currentPermission.parentName) {
|
|
297
|
+
const parentPermission = permissionMap.get(currentPermission.parentName);
|
|
298
|
+
if (!parentPermission) {
|
|
299
|
+
break;
|
|
300
|
+
}
|
|
301
|
+
parentPermissions.push(parentPermission);
|
|
302
|
+
currentPermission = parentPermission;
|
|
303
|
+
}
|
|
304
|
+
return parentPermissions;
|
|
305
|
+
}
|
|
287
306
|
function findMargin(permissions, permission) {
|
|
288
307
|
const parentPermission = permissions.find(per => per.name === permission.parentName);
|
|
289
308
|
if (parentPermission && parentPermission.parentName) {
|
|
@@ -298,4 +317,4 @@ function getPermissions(groups) {
|
|
|
298
317
|
...val.permissions.map(p => ({ ...p, groupName: val.name || '' })),
|
|
299
318
|
], []);
|
|
300
319
|
}
|
|
301
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUlMLGtCQUFrQixHQUduQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBbUIsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkUsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQTRCaEUsTUFBTSxPQUFPLDZCQUE2QjtJQWpCMUM7UUFzQnFCLFlBQU8sR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNyQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBU2xELGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQThC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cnZpY2UsIEN1cnJlbnRVc2VyRHRvIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHtcclxuICBHZXRQZXJtaXNzaW9uTGlzdFJlc3VsdER0byxcclxuICBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvLFxyXG4gIFBlcm1pc3Npb25Hcm91cER0byxcclxuICBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgUHJvdmlkZXJJbmZvRHRvLFxyXG4gIFVwZGF0ZVBlcm1pc3Npb25EdG8sXHJcbn0gZnJvbSAnQGFicC9uZy5wZXJtaXNzaW9uLW1hbmFnZW1lbnQvcHJveHknO1xyXG5pbXBvcnQgeyBMb2NhbGVEaXJlY3Rpb24sIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUcmFja0J5RnVuY3Rpb24sXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZW1lbnQgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50JztcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhTdHlsZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgc3R5bGU6IHN0cmluZztcclxufTtcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhHcm91cE5hbWUgPSBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvICYge1xyXG4gIGdyb3VwTmFtZTogc3RyaW5nO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtcGVybWlzc2lvbi1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2FicFBlcm1pc3Npb25NYW5hZ2VtZW50JyxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLm92ZXJmbG93LXNjcm9sbCB7XHJcbiAgICAgICAgbWF4LWhlaWdodDogNzB2aDtcclxuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XHJcbiAgICAgIH1cclxuICAgICAgLnNjcm9sbC1pbi1tb2RhbCB7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDE1cmVtKTtcclxuICAgICAgfVxyXG4gICAgYCxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRcclxuICBpbXBsZW1lbnRzXHJcbiAgICBQZXJtaXNzaW9uTWFuYWdlbWVudC5QZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudElucHV0cyxcclxuICAgIFBlcm1pc3Npb25NYW5hZ2VtZW50LlBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50T3V0cHV0c1xyXG57XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlcnZpY2UgPSBpbmplY3QoUGVybWlzc2lvbnNTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnU3RhdGUgPSBpbmplY3QoQ29uZmlnU3RhdGVTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9hc3RlclNlcnZpY2UgPSBpbmplY3QoVG9hc3RlclNlcnZpY2UpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5IHByb3ZpZGVyTmFtZSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBwcm92aWRlcktleSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBoaWRlQmFkZ2VzID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBfdmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGVudGl0eURpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuX3Zpc2libGUpIHJldHVybjtcclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5vcGVuTW9kYWwoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgICAgIGNvbmNhdCh0aGlzLnNlbGVjdEFsbEluQWxsVGFic1JlZi5jaGFuZ2VzLCB0aGlzLnNlbGVjdEFsbEluVGhpc1RhYnNSZWYuY2hhbmdlcylcclxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbml0TW9kYWwoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChudWxsKTtcclxuICAgICAgdGhpcy5fdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignc2VsZWN0QWxsSW5UaGlzVGFic1JlZicpXHJcbiAgc2VsZWN0QWxsSW5UaGlzVGFic1JlZiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuICBAVmlld0NoaWxkcmVuKCdzZWxlY3RBbGxJbkFsbFRhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluQWxsVGFic1JlZiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuXHJcbiAgZGF0YTogR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8gPSB7IGdyb3VwczogW10sIGVudGl0eURpc3BsYXlOYW1lOiAnJyB9O1xyXG5cclxuICBzZWxlY3RlZEdyb3VwPzogUGVybWlzc2lvbkdyb3VwRHRvIHwgbnVsbDtcclxuXHJcbiAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lW10gPSBbXTtcclxuXHJcbiAgc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuXHJcbiAgZGlzYWJsZVNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG5cclxuICBkaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IGZhbHNlO1xyXG5cclxuICBtb2RhbEJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zOiBQZXJtaXNzaW9uV2l0aFN0eWxlW10gPSBbXTtcclxuXHJcbiAgdHJhY2tCeUZuOiBUcmFja0J5RnVuY3Rpb248UGVybWlzc2lvbkdyb3VwRHRvPiA9IChfLCBpdGVtKSA9PiBpdGVtLm5hbWU7XHJcblxyXG4gIGdldENoZWNrZWQobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKHRoaXMucGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IG5hbWUpIHx8IHsgaXNHcmFudGVkOiBmYWxzZSB9KS5pc0dyYW50ZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZEdyb3VwKGdyb3VwOiBQZXJtaXNzaW9uR3JvdXBEdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hcmdpbiA9IGBtYXJnaW4tJHtcclxuICAgICAgKGRvY3VtZW50LmJvZHkuZGlyIGFzIExvY2FsZURpcmVjdGlvbikgPT09ICdydGwnID8gJ3JpZ2h0JyA6ICdsZWZ0J1xyXG4gICAgfS5weGA7XHJcblxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPVxyXG4gICAgICAodGhpcy5kYXRhLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8ubmFtZSkgfHwge30pLnBlcm1pc3Npb25zIHx8XHJcbiAgICAgIFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucy5tYXAoXHJcbiAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgICAoe1xyXG4gICAgICAgICAgLi4ucGVybWlzc2lvbixcclxuICAgICAgICAgIHN0eWxlOiB7IFttYXJnaW5dOiBmaW5kTWFyZ2luKHBlcm1pc3Npb25zLCBwZXJtaXNzaW9uKSB9LFxyXG4gICAgICAgICAgaXNHcmFudGVkOiAodGhpcy5wZXJtaXNzaW9ucy5maW5kKHBlciA9PiBwZXIubmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lKSB8fCB7fSkuaXNHcmFudGVkLFxyXG4gICAgICAgIH0pIGFzIHVua25vd24gYXMgUGVybWlzc2lvbldpdGhTdHlsZSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZChwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdKSB7XHJcbiAgICBpZiAocGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYiA9IHBlcm1pc3Npb25zLmV2ZXJ5KFxyXG4gICAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgICAgIHBlcm1pc3Npb24uaXNHcmFudGVkICYmXHJcbiAgICAgICAgICBwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnM/LmV2ZXJ5KHAgPT4gcC5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShncmFudGVkUHJvdmlkZXJzOiBQcm92aWRlckluZm9EdG9bXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGdyYW50ZWRQcm92aWRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBncmFudGVkUHJvdmlkZXJzLmZpbmRJbmRleChwID0+IHAucHJvdmlkZXJOYW1lICE9PSB0aGlzLnByb3ZpZGVyTmFtZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDaGVja2JveChjbGlja2VkUGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgaWYgKFxyXG4gICAgICBjbGlja2VkUGVybWlzc2lvbi5pc0dyYW50ZWQgJiZcclxuICAgICAgdGhpcy5pc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKGNsaWNrZWRQZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpXHJcbiAgICApXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cCh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXIgPT4ge1xyXG4gICAgICAgIGlmIChjbGlja2VkUGVybWlzc2lvbi5uYW1lID09PSBwZXIubmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6ICFwZXIuaXNHcmFudGVkIH07XHJcbiAgICAgICAgfSBlbHNlIGlmIChjbGlja2VkUGVybWlzc2lvbi5uYW1lID09PSBwZXIucGFyZW50TmFtZSAmJiBjbGlja2VkUGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLnBlciwgaXNHcmFudGVkOiBmYWxzZSB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2xpY2tlZFBlcm1pc3Npb24ucGFyZW50TmFtZSA9PT0gcGVyLm5hbWUgJiYgIWNsaWNrZWRQZXJtaXNzaW9uLmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBlcjtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuc2V0UGFyZW50Q2xpY2tlZChjbGlja2VkUGVybWlzc2lvbik7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHNldFBhcmVudENsaWNrZWQoY2xpY2tlZFBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgICBsZXQgY2hpbGRQZXJtaXNzaW9uR3JhbnRlZENvdW50ID0gMDtcclxuICAgIGxldCBwYXJlbnRQZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvO1xyXG5cclxuICAgIGlmIChjbGlja2VkUGVybWlzc2lvbnMucGFyZW50TmFtZSkge1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zLmZvckVhY2gocGVyID0+IHtcclxuICAgICAgICBpZiAocGVyLm5hbWUgPT09IGNsaWNrZWRQZXJtaXNzaW9ucy5wYXJlbnROYW1lKSB7XHJcbiAgICAgICAgICBwYXJlbnRQZXJtaXNzaW9uID0gcGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnMuZm9yRWFjaChwZXIgPT4ge1xyXG4gICAgICAgIGlmIChwYXJlbnRQZXJtaXNzaW9uLm5hbWUgPT09IHBlci5wYXJlbnROYW1lKSB7XHJcbiAgICAgICAgICBwZXIuaXNHcmFudGVkICYmIGNoaWxkUGVybWlzc2lvbkdyYW50ZWRDb3VudCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChjaGlsZFBlcm1pc3Npb25HcmFudGVkQ291bnQgPT09IDEgJiYgIXBhcmVudFBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgICAgICBpZiAocGVyLm5hbWUgPT09IHBhcmVudFBlcm1pc3Npb24ubmFtZSkge1xyXG4gICAgICAgICAgICBwZXIuaXNHcmFudGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBwZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgIGlmIChwZXIucGFyZW50TmFtZSA9PT0gY2xpY2tlZFBlcm1pc3Npb25zLm5hbWUpIHtcclxuICAgICAgICBwZXIuaXNHcmFudGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zKGNsaWNrZWRQZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5tYXAocGVyID0+IHtcclxuICAgICAgaWYgKHBlci5uYW1lID09PSBjbGlja2VkUGVybWlzc2lvbnMubmFtZSkge1xyXG4gICAgICAgIHBlci5pc0dyYW50ZWQgPSAhcGVyLmlzR3JhbnRlZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGVyO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRUYWJDaGVja2JveFN0YXRlKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0YWJsZUdyb3VwUGVybWlzc2lvbnMgPSB0aGlzLnNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+XHJcbiAgICAgIHBlci5ncmFudGVkUHJvdmlkZXJzLmV2ZXJ5KHAgPT4gcC5wcm92aWRlck5hbWUgPT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFBlcm1pc3Npb25zID0gc2VsZWN0YWJsZUdyb3VwUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2VsZWN0LWFsbC1pbi10aGlzLXRhYnMnKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkUGVybWlzc2lvbnMubGVuZ3RoID09PSBzZWxlY3RhYmxlR3JvdXBQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdFRoaXNUYWIgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRHcmFudENoZWNrYm94U3RhdGUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RhYmxlUGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT5cclxuICAgICAgcGVyLmdyYW50ZWRQcm92aWRlcnMuZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSA9PT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQWxsUGVybWlzc2lvbnMgPSBzZWxlY3RhYmxlUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGNoZWNrYm94RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtYWxsLWluLWFsbC10YWJzJykgYXMgYW55O1xyXG5cclxuICAgIGlmIChzZWxlY3RlZEFsbFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbFRhYiA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQWxsUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrU2VsZWN0VGhpc1RhYigpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zLmZvckVhY2gocGVybWlzc2lvbiA9PiB7XHJcbiAgICAgIGlmIChwZXJtaXNzaW9uLmlzR3JhbnRlZCAmJiB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGVybWlzc2lvbnMuZmluZEluZGV4KHBlciA9PiBwZXIubmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lKTtcclxuXHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZSgwLCBpbmRleCksXHJcbiAgICAgICAgeyAuLi50aGlzLnBlcm1pc3Npb25zW2luZGV4XSwgaXNHcmFudGVkOiAhdGhpcy5zZWxlY3RUaGlzVGFiIH0sXHJcbiAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZShpbmRleCArIDEpLFxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWxlY3RBbGwoKSB7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5tYXAocGVybWlzc2lvbiA9PiAoe1xyXG4gICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICBpc0dyYW50ZWQ6XHJcbiAgICAgICAgdGhpcy5pc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycykgfHwgIXRoaXMuc2VsZWN0QWxsVGFiLFxyXG4gICAgfSkpO1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVTZWxlY3RBbGxUYWIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gIXRoaXMuc2VsZWN0QWxsVGFiO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2VHcm91cCh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VHcm91cChncm91cDogUGVybWlzc2lvbkdyb3VwRHRvKSB7XHJcbiAgICB0aGlzLnNldERpc2FibGVkKGdyb3VwLnBlcm1pc3Npb25zKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChncm91cCk7XHJcbiAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdCgpIHtcclxuICAgIGNvbnN0IHVuY2hhbmdlZFBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnModGhpcy5kYXRhLmdyb3Vwcyk7XHJcblxyXG4gICAgY29uc3QgY2hhbmdlZFBlcm1pc3Npb25zOiBVcGRhdGVQZXJtaXNzaW9uRHRvW10gPSB0aGlzLnBlcm1pc3Npb25zXHJcbiAgICAgIC5maWx0ZXIocGVyID0+XHJcbiAgICAgICAgKHVuY2hhbmdlZFBlcm1pc3Npb25zLmZpbmQodW5jaGFuZ2VkID0+IHVuY2hhbmdlZC5uYW1lID09PSBwZXIubmFtZSkgfHwge30pLmlzR3JhbnRlZCA9PT1cclxuICAgICAgICBwZXIuaXNHcmFudGVkXHJcbiAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICA6IHRydWUsXHJcbiAgICAgIClcclxuICAgICAgLm1hcCgoeyBuYW1lLCBpc0dyYW50ZWQgfSkgPT4gKHsgbmFtZSwgaXNHcmFudGVkIH0pKTtcclxuXHJcbiAgICBpZiAoIWNoYW5nZWRQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1vZGFsQnVzeSA9IHRydWU7XHJcbiAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgLnVwZGF0ZSh0aGlzLnByb3ZpZGVyTmFtZSwgdGhpcy5wcm92aWRlcktleSwgeyBwZXJtaXNzaW9uczogY2hhbmdlZFBlcm1pc3Npb25zIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PlxyXG4gICAgICAgICAgdGhpcy5zaG91bGRGZXRjaEFwcENvbmZpZygpID8gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKSA6IG9mKG51bGwpLFxyXG4gICAgICAgICksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubW9kYWxCdXN5ID0gZmFsc2UpKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MoJ0FicFVpOjpTYXZlZFN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Nb2RhbCgpIHtcclxuICAgIGlmICghdGhpcy5wcm92aWRlcktleSB8fCAhdGhpcy5wcm92aWRlck5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlciBLZXkgYW5kIFByb3ZpZGVyIE5hbWUgYXJlIHJlcXVpcmVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5KS5waXBlKFxyXG4gICAgICB0YXAoKHBlcm1pc3Npb25SZXM6IEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gcGVybWlzc2lvblJlcztcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnMocGVybWlzc2lvblJlcy5ncm91cHMpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChwZXJtaXNzaW9uUmVzLmdyb3Vwc1swXSk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IHRoaXMucGVybWlzc2lvbnMuZXZlcnkoXHJcbiAgICAgICAgICBwZXIgPT5cclxuICAgICAgICAgICAgcGVyLmlzR3JhbnRlZCAmJlxyXG4gICAgICAgICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwcm92aWRlciA9PiBwcm92aWRlci5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbml0TW9kYWwoKSB7XHJcbiAgICAvLyBUT0RPOiBSZWZhY3RvclxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RGlzYWJsZWQodGhpcy5zZWxlY3RlZEdyb3VwPy5wZXJtaXNzaW9ucyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25lZENvdW50KGdyb3VwTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIHZhbCkgPT4gKHZhbC5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSAmJiB2YWwuaXNHcmFudGVkID8gYWNjICsgMSA6IGFjYyksXHJcbiAgICAgIDAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkRmV0Y2hBcHBDb25maWcoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lKCdjdXJyZW50VXNlcicpIGFzIEN1cnJlbnRVc2VyRHRvO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1InKSByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZShyb2xlID0+IHJvbGUgPT09IHRoaXMucHJvdmlkZXJLZXkpO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1UnKSByZXR1cm4gY3VycmVudFVzZXIuaWQgPT09IHRoaXMucHJvdmlkZXJLZXk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZmluZE1hcmdpbihcclxuICBwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdLFxyXG4gIHBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8sXHJcbik6IG51bWJlciB7XHJcbiAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25zLmZpbmQocGVyID0+IHBlci5uYW1lID09PSBwZXJtaXNzaW9uLnBhcmVudE5hbWUpO1xyXG5cclxuICBpZiAocGFyZW50UGVybWlzc2lvbiAmJiBwYXJlbnRQZXJtaXNzaW9uLnBhcmVudE5hbWUpIHtcclxuICAgIGxldCBtYXJnaW4gPSAyMDtcclxuICAgIHJldHVybiAobWFyZ2luICs9IGZpbmRNYXJnaW4ocGVybWlzc2lvbnMsIHBhcmVudFBlcm1pc3Npb24pKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBwYXJlbnRQZXJtaXNzaW9uID8gMjAgOiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQZXJtaXNzaW9ucyhncm91cHM6IFBlcm1pc3Npb25Hcm91cER0b1tdKTogUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSB7XHJcbiAgcmV0dXJuIGdyb3Vwcy5yZWR1Y2UoXHJcbiAgICAoYWNjLCB2YWwpID0+IFtcclxuICAgICAgLi4uYWNjLFxyXG4gICAgICAuLi52YWwucGVybWlzc2lvbnMubWFwPFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lPihwID0+ICh7IC4uLnAsIGdyb3VwTmFtZTogdmFsLm5hbWUgfHwgJycgfSkpLFxyXG4gICAgXSxcclxuICAgIFtdIGFzIFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lW10sXHJcbiAgKTtcclxufVxyXG4iLCI8YWJwLW1vZGFsIFsodmlzaWJsZSldPVwidmlzaWJsZVwiIFtidXN5XT1cIm1vZGFsQnVzeVwiIFtvcHRpb25zXT1cInsgc2l6ZTogJ2xnJywgc2Nyb2xsYWJsZTogZmFsc2UgfVwiPlxyXG4gIEBpZiAoZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB8fCBlbnRpdHlEaXNwbGF5TmFtZSkge1xyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICAgIDxoND5cclxuICAgICAgICB7eyAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlBlcm1pc3Npb25zJyB8IGFicExvY2FsaXphdGlvbiB9fSAtXHJcbiAgICAgICAge3sgZW50aXR5RGlzcGxheU5hbWUgfHwgZGF0YS5lbnRpdHlEaXNwbGF5TmFtZSB9fVxyXG4gICAgICA8L2g0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWJwQm9keT5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBzY3JvbGwtaW4tbW9kYWxcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgI3NlbGVjdEFsbEluQWxsVGFic1JlZlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJzZWxlY3QtYWxsLWluLWFsbC10YWJzXCJcclxuICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbFRhYlwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tTZWxlY3RBbGwoKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkU2VsZWN0QWxsSW5BbGxUYWJzXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdC1hbGwtaW4tYWxsLXRhYnNcIj57e1xyXG4gICAgICAgICAgICAgICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6U2VsZWN0QWxsSW5BbGxUYWJzJyB8IGFicExvY2FsaXphdGlvblxyXG4gICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8aHIgY2xhc3M9XCJtdC0yIG1iLTJcIiAvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWF1dG9cIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi1waWxscyBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIEBmb3IgKGdyb3VwIG9mIGRhdGEuZ3JvdXBzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIEBpZiAoeyBhc3NpZ25lZENvdW50OiBnZXRBc3NpZ25lZENvdW50KGdyb3VwLm5hbWUpIH07IGFzIGNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkR3JvdXA/Lm5hbWUgPT09IGdyb3VwPy5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoYW5nZUdyb3VwKGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0KT1cInNldERpc2FibGVkKGdyb3VwLnBlcm1pc3Npb25zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuZm9udC13ZWlnaHQtYm9sZF09XCJjb3VudC5hc3NpZ25lZENvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5kaXNwbGF5TmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvdW50LmFzc2lnbmVkQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+KHt7IGNvdW50LmFzc2lnbmVkQ291bnQgfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBzY3JvbGwtaW4tbW9kYWxcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcy0xXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICNzZWxlY3RBbGxJblRoaXNUYWJzUmVmXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0VGhpc1RhYlwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVNlbGVjdEFsbFRhYlwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja1NlbGVjdFRoaXNUYWIoKVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0LWFsbC1pbi10aGlzLXRhYnNcIj57e1xyXG4gICAgICAgICAgICAgICAgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpTZWxlY3RBbGxJblRoaXNUYWInIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgICAgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGhyIGNsYXNzPVwibXktMlwiIC8+XHJcbiAgICAgICAgICAgIEBmb3IgKHBlcm1pc3Npb24gb2Ygc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zOyB0cmFjayAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJwZXJtaXNzaW9uLnN0eWxlXCIgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAjcGVybWlzc2lvbkNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRDaGVja2VkKHBlcm1pc3Npb24ubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJwZXJtaXNzaW9uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnMpXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tDaGVja2JveChwZXJtaXNzaW9uLCBwZXJtaXNzaW9uQ2hlY2tib3gudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgW2F0dHIuZm9yXT1cInBlcm1pc3Npb24ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgID57eyBwZXJtaXNzaW9uLmRpc3BsYXlOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgIEBpZiAoIWhpZGVCYWRnZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBAZm9yIChwcm92aWRlciBvZiBwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1wcmltYXJ5IHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBwcm92aWRlci5wcm92aWRlck5hbWUgfX06IHt7IHByb3ZpZGVyLnByb3ZpZGVyS2V5IH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhYnBDbG9zZT5cclxuICAgICAgICB7eyAnQWJwSWRlbnRpdHk6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxhYnAtYnV0dG9uIGljb25DbGFzcz1cImZhIGZhLWNoZWNrXCIgKGNsaWNrKT1cInN1Ym1pdCgpXCI+e3tcclxuICAgICAgICAnQWJwSWRlbnRpdHk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgIH19PC9hYnAtYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICB9XHJcbjwvYWJwLW1vZGFsPlxyXG4iXX0=
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Blcm1pc3Npb24tbWFuYWdlbWVudC9zcmMvbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUlMLGtCQUFrQixHQUduQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBbUIsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkUsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQTRCaEUsTUFBTSxPQUFPLDZCQUE2QjtJQWpCMUM7UUFzQnFCLFlBQU8sR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNyQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBU2xELGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQThC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QUFDO0tBQzVGLEVBQ0QsRUFBK0IsQ0FDaEMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWdTdGF0ZVNlcnZpY2UsIEN1cnJlbnRVc2VyRHRvIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHtcclxuICBHZXRQZXJtaXNzaW9uTGlzdFJlc3VsdER0byxcclxuICBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvLFxyXG4gIFBlcm1pc3Npb25Hcm91cER0byxcclxuICBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgUHJvdmlkZXJJbmZvRHRvLFxyXG4gIFVwZGF0ZVBlcm1pc3Npb25EdG8sXHJcbn0gZnJvbSAnQGFicC9uZy5wZXJtaXNzaW9uLW1hbmFnZW1lbnQvcHJveHknO1xyXG5pbXBvcnQgeyBMb2NhbGVEaXJlY3Rpb24sIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUcmFja0J5RnVuY3Rpb24sXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb25jYXQsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbk1hbmFnZW1lbnQgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbi1tYW5hZ2VtZW50JztcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhTdHlsZSA9IFBlcm1pc3Npb25HcmFudEluZm9EdG8gJiB7XHJcbiAgc3R5bGU6IHN0cmluZztcclxufTtcclxuXHJcbnR5cGUgUGVybWlzc2lvbldpdGhHcm91cE5hbWUgPSBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvICYge1xyXG4gIGdyb3VwTmFtZTogc3RyaW5nO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhYnAtcGVybWlzc2lvbi1tYW5hZ2VtZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbi1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBleHBvcnRBczogJ2FicFBlcm1pc3Npb25NYW5hZ2VtZW50JyxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgLm92ZXJmbG93LXNjcm9sbCB7XHJcbiAgICAgICAgbWF4LWhlaWdodDogNzB2aDtcclxuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XHJcbiAgICAgIH1cclxuICAgICAgLnNjcm9sbC1pbi1tb2RhbCB7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDE1cmVtKTtcclxuICAgICAgfVxyXG4gICAgYCxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbk1hbmFnZW1lbnRDb21wb25lbnRcclxuICBpbXBsZW1lbnRzXHJcbiAgICBQZXJtaXNzaW9uTWFuYWdlbWVudC5QZXJtaXNzaW9uTWFuYWdlbWVudENvbXBvbmVudElucHV0cyxcclxuICAgIFBlcm1pc3Npb25NYW5hZ2VtZW50LlBlcm1pc3Npb25NYW5hZ2VtZW50Q29tcG9uZW50T3V0cHV0c1xyXG57XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlcnZpY2UgPSBpbmplY3QoUGVybWlzc2lvbnNTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnU3RhdGUgPSBpbmplY3QoQ29uZmlnU3RhdGVTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9hc3RlclNlcnZpY2UgPSBpbmplY3QoVG9hc3RlclNlcnZpY2UpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHJlYWRvbmx5IHByb3ZpZGVyTmFtZSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBwcm92aWRlcktleSE6IHN0cmluZztcclxuXHJcbiAgQElucHV0KClcclxuICByZWFkb25seSBoaWRlQmFkZ2VzID0gZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBfdmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGVudGl0eURpc3BsYXlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIHNldCB2aXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuX3Zpc2libGUpIHJldHVybjtcclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5vcGVuTW9kYWwoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgICAgIGNvbmNhdCh0aGlzLnNlbGVjdEFsbEluQWxsVGFic1JlZi5jaGFuZ2VzLCB0aGlzLnNlbGVjdEFsbEluVGhpc1RhYnNSZWYuY2hhbmdlcylcclxuICAgICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbml0TW9kYWwoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChudWxsKTtcclxuICAgICAgdGhpcy5fdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignc2VsZWN0QWxsSW5UaGlzVGFic1JlZicpXHJcbiAgc2VsZWN0QWxsSW5UaGlzVGFic1JlZiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuICBAVmlld0NoaWxkcmVuKCdzZWxlY3RBbGxJbkFsbFRhYnNSZWYnKVxyXG4gIHNlbGVjdEFsbEluQWxsVGFic1JlZiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+PjtcclxuXHJcbiAgZGF0YTogR2V0UGVybWlzc2lvbkxpc3RSZXN1bHREdG8gPSB7IGdyb3VwczogW10sIGVudGl0eURpc3BsYXlOYW1lOiAnJyB9O1xyXG5cclxuICBzZWxlY3RlZEdyb3VwPzogUGVybWlzc2lvbkdyb3VwRHRvIHwgbnVsbDtcclxuXHJcbiAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25XaXRoR3JvdXBOYW1lW10gPSBbXTtcclxuXHJcbiAgc2VsZWN0VGhpc1RhYiA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RBbGxUYWIgPSBmYWxzZTtcclxuXHJcbiAgZGlzYWJsZVNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG5cclxuICBkaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IGZhbHNlO1xyXG5cclxuICBtb2RhbEJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zOiBQZXJtaXNzaW9uV2l0aFN0eWxlW10gPSBbXTtcclxuXHJcbiAgdHJhY2tCeUZuOiBUcmFja0J5RnVuY3Rpb248UGVybWlzc2lvbkdyb3VwRHRvPiA9IChfLCBpdGVtKSA9PiBpdGVtLm5hbWU7XHJcblxyXG4gIGdldENoZWNrZWQobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKHRoaXMucGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IG5hbWUpIHx8IHsgaXNHcmFudGVkOiBmYWxzZSB9KS5pc0dyYW50ZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZEdyb3VwKGdyb3VwOiBQZXJtaXNzaW9uR3JvdXBEdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cCA9IGdyb3VwO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hcmdpbiA9IGBtYXJnaW4tJHtcclxuICAgICAgKGRvY3VtZW50LmJvZHkuZGlyIGFzIExvY2FsZURpcmVjdGlvbikgPT09ICdydGwnID8gJ3JpZ2h0JyA6ICdsZWZ0J1xyXG4gICAgfS5weGA7XHJcblxyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPVxyXG4gICAgICAodGhpcy5kYXRhLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cD8ubmFtZSkgfHwge30pLnBlcm1pc3Npb25zIHx8XHJcbiAgICAgIFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucy5tYXAoXHJcbiAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgICAoe1xyXG4gICAgICAgICAgLi4ucGVybWlzc2lvbixcclxuICAgICAgICAgIHN0eWxlOiB7IFttYXJnaW5dOiBmaW5kTWFyZ2luKHBlcm1pc3Npb25zLCBwZXJtaXNzaW9uKSB9LFxyXG4gICAgICAgICAgaXNHcmFudGVkOiAodGhpcy5wZXJtaXNzaW9ucy5maW5kKHBlciA9PiBwZXIubmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lKSB8fCB7fSkuaXNHcmFudGVkLFxyXG4gICAgICAgIH0pIGFzIHVua25vd24gYXMgUGVybWlzc2lvbldpdGhTdHlsZSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZChwZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdKSB7XHJcbiAgICBpZiAocGVybWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYiA9IHBlcm1pc3Npb25zLmV2ZXJ5KFxyXG4gICAgICAgIHBlcm1pc3Npb24gPT5cclxuICAgICAgICAgIHBlcm1pc3Npb24uaXNHcmFudGVkICYmXHJcbiAgICAgICAgICBwZXJtaXNzaW9uLmdyYW50ZWRQcm92aWRlcnM/LmV2ZXJ5KHAgPT4gcC5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdEFsbFRhYiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNHcmFudGVkQnlPdGhlclByb3ZpZGVyTmFtZShncmFudGVkUHJvdmlkZXJzOiBQcm92aWRlckluZm9EdG9bXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGdyYW50ZWRQcm92aWRlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBncmFudGVkUHJvdmlkZXJzLmZpbmRJbmRleChwID0+IHAucHJvdmlkZXJOYW1lICE9PSB0aGlzLnByb3ZpZGVyTmFtZSkgPiAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDaGVja2JveChjbGlja2VkUGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0bykge1xyXG4gICAgY29uc3QgeyBpc0dyYW50ZWQsIGdyYW50ZWRQcm92aWRlcnMgfSA9IGNsaWNrZWRQZXJtaXNzaW9uO1xyXG4gICAgaWYgKGlzR3JhbnRlZCAmJiB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUoZ3JhbnRlZFByb3ZpZGVycykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cCh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlUGVybWlzc2lvblN0YXR1cyhjbGlja2VkUGVybWlzc2lvbik7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy5zZXRQYXJlbnRDbGlja2VkKGNsaWNrZWRQZXJtaXNzaW9uKTtcclxuICAgICAgdGhpcy5zZXRUYWJDaGVja2JveFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuc2V0R3JhbnRDaGVja2JveFN0YXRlKCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVBlcm1pc3Npb25TdGF0dXMoY2xpY2tlZFBlcm1pc3Npb246IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXJtaXNzaW9uID0+IHtcclxuICAgICAgY29uc3QgaXNFeGFjdE1hdGNoID0gY2xpY2tlZFBlcm1pc3Npb24ubmFtZSA9PSBwZXJtaXNzaW9uLm5hbWU7XHJcbiAgICAgIGNvbnN0IGlzUGFyZW50T2ZQZXJtaXNzaW9uID0gY2xpY2tlZFBlcm1pc3Npb24ucGFyZW50TmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lO1xyXG4gICAgICBjb25zdCBpc0NoaWxkT2ZQZXJtaXNzaW9uID0gY2xpY2tlZFBlcm1pc3Npb24ubmFtZSA9PT0gcGVybWlzc2lvbi5wYXJlbnROYW1lO1xyXG5cclxuICAgICAgaWYgKGlzRXhhY3RNYXRjaCkge1xyXG4gICAgICAgIHJldHVybiB7IC4uLnBlcm1pc3Npb24sIGlzR3JhbnRlZDogIXBlcm1pc3Npb24uaXNHcmFudGVkIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0NoaWxkT2ZQZXJtaXNzaW9uICYmIHBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucGVybWlzc2lvbiwgaXNHcmFudGVkOiBmYWxzZSB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNQYXJlbnRPZlBlcm1pc3Npb24gJiYgIXBlcm1pc3Npb24uaXNHcmFudGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ucGVybWlzc2lvbiwgaXNHcmFudGVkOiB0cnVlIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBwZXJtaXNzaW9uO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYXJlbnRDbGlja2VkKGNsaWNrZWRQZXJtaXNzaW9uOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvKSB7XHJcbiAgICBpZiAoY2xpY2tlZFBlcm1pc3Npb24ucGFyZW50TmFtZSkge1xyXG4gICAgICBjb25zdCBwYXJlbnRQZXJtaXNzaW9ucyA9IGZpbmRQYXJlbnRQZXJtaXNzaW9ucyh0aGlzLnBlcm1pc3Npb25zLCBjbGlja2VkUGVybWlzc2lvbik7XHJcbiAgICAgIGlmIChwYXJlbnRQZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50TmFtZXMgPSBuZXcgU2V0KHBhcmVudFBlcm1pc3Npb25zLm1hcChwYXJlbnQgPT4gcGFyZW50Lm5hbWUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgICAgICBsZXQgdXBkYXRlZElzR3JhbnRlZCA9IHBlci5pc0dyYW50ZWQ7XHJcblxyXG4gICAgICAgICAgaWYgKHBlci5wYXJlbnROYW1lID09PSBjbGlja2VkUGVybWlzc2lvbi5uYW1lICYmICFjbGlja2VkUGVybWlzc2lvbi5pc0dyYW50ZWQpIHtcclxuICAgICAgICAgICAgdXBkYXRlZElzR3JhbnRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChwYXJlbnROYW1lcy5oYXMocGVyLm5hbWUpKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRJc0dyYW50ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiB7IC4uLnBlciwgaXNHcmFudGVkOiB1cGRhdGVkSXNHcmFudGVkIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLm1hcChwZXIgPT4ge1xyXG4gICAgICBjb25zdCBwYXJlbnRzID0gZmluZFBhcmVudFBlcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnMsIHBlcik7XHJcbiAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCByb290UGFyZW50ID0gcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgICBpZiAocm9vdFBhcmVudC5uYW1lID09PSBjbGlja2VkUGVybWlzc2lvbi5uYW1lICYmICFyb290UGFyZW50LmlzR3JhbnRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucGVyLCBpc0dyYW50ZWQ6IGZhbHNlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwZXI7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkR3JvdXBQZXJtaXNzaW9ucyhjbGlja2VkUGVybWlzc2lvbnM6IFBlcm1pc3Npb25HcmFudEluZm9EdG8pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zID0gdGhpcy5zZWxlY3RlZEdyb3VwUGVybWlzc2lvbnMubWFwKHBlciA9PiB7XHJcbiAgICAgIGlmIChwZXIubmFtZSA9PT0gY2xpY2tlZFBlcm1pc3Npb25zLm5hbWUpIHtcclxuICAgICAgICBwZXIuaXNHcmFudGVkID0gIXBlci5pc0dyYW50ZWQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBlcjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VGFiQ2hlY2tib3hTdGF0ZSgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PlxyXG4gICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwID0+IHAucHJvdmlkZXJOYW1lID09PSB0aGlzLnByb3ZpZGVyTmFtZSksXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRQZXJtaXNzaW9ucyA9IHNlbGVjdGFibGVQZXJtaXNzaW9ucy5maWx0ZXIocGVyID0+IHBlci5pc0dyYW50ZWQpO1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtYWxsLWluLXRoaXMtdGFicycpIGFzIGFueTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRQZXJtaXNzaW9ucy5sZW5ndGggPT09IHNlbGVjdGFibGVQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgZWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhpc1RhYiA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdFRoaXNUYWIgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRHcmFudENoZWNrYm94U3RhdGUoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RhYmxlUGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLmZpbHRlcihwZXIgPT5cclxuICAgICAgcGVyLmdyYW50ZWRQcm92aWRlcnMuZXZlcnkocCA9PiBwLnByb3ZpZGVyTmFtZSA9PT0gdGhpcy5wcm92aWRlck5hbWUpLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQWxsUGVybWlzc2lvbnMgPSBzZWxlY3RhYmxlUGVybWlzc2lvbnMuZmlsdGVyKHBlciA9PiBwZXIuaXNHcmFudGVkKTtcclxuICAgIGNvbnN0IGNoZWNrYm94RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzZWxlY3QtYWxsLWluLWFsbC10YWJzJykgYXMgYW55O1xyXG5cclxuICAgIGlmIChzZWxlY3RlZEFsbFBlcm1pc3Npb25zLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVBlcm1pc3Npb25zLmxlbmd0aCkge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbFRhYiA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkQWxsUGVybWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNoZWNrYm94RWxlbWVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVGFiID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja2JveEVsZW1lbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrU2VsZWN0VGhpc1RhYigpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBlcm1pc3Npb25zLmZvckVhY2gocGVybWlzc2lvbiA9PiB7XHJcbiAgICAgIGlmIChwZXJtaXNzaW9uLmlzR3JhbnRlZCAmJiB0aGlzLmlzR3JhbnRlZEJ5T3RoZXJQcm92aWRlck5hbWUocGVybWlzc2lvbi5ncmFudGVkUHJvdmlkZXJzKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucGVybWlzc2lvbnMuZmluZEluZGV4KHBlciA9PiBwZXIubmFtZSA9PT0gcGVybWlzc2lvbi5uYW1lKTtcclxuXHJcbiAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZSgwLCBpbmRleCksXHJcbiAgICAgICAgeyAuLi50aGlzLnBlcm1pc3Npb25zW2luZGV4XSwgaXNHcmFudGVkOiAhdGhpcy5zZWxlY3RUaGlzVGFiIH0sXHJcbiAgICAgICAgLi4udGhpcy5wZXJtaXNzaW9ucy5zbGljZShpbmRleCArIDEpLFxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRHcmFudENoZWNrYm94U3RhdGUoKTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWxlY3RBbGwoKSB7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5tYXAocGVybWlzc2lvbiA9PiAoe1xyXG4gICAgICAuLi5wZXJtaXNzaW9uLFxyXG4gICAgICBpc0dyYW50ZWQ6XHJcbiAgICAgICAgdGhpcy5pc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycykgfHwgIXRoaXMuc2VsZWN0QWxsVGFiLFxyXG4gICAgfSkpO1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVTZWxlY3RBbGxUYWIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RUaGlzVGFiID0gIXRoaXMuc2VsZWN0QWxsVGFiO1xyXG4gICAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2VHcm91cCh0aGlzLnNlbGVjdGVkR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VHcm91cChncm91cDogUGVybWlzc2lvbkdyb3VwRHRvKSB7XHJcbiAgICB0aGlzLnNldERpc2FibGVkKGdyb3VwLnBlcm1pc3Npb25zKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChncm91cCk7XHJcbiAgICB0aGlzLnNldFRhYkNoZWNrYm94U3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdCgpIHtcclxuICAgIGNvbnN0IHVuY2hhbmdlZFBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnModGhpcy5kYXRhLmdyb3Vwcyk7XHJcblxyXG4gICAgY29uc3QgY2hhbmdlZFBlcm1pc3Npb25zOiBVcGRhdGVQZXJtaXNzaW9uRHRvW10gPSB0aGlzLnBlcm1pc3Npb25zXHJcbiAgICAgIC5maWx0ZXIocGVyID0+XHJcbiAgICAgICAgKHVuY2hhbmdlZFBlcm1pc3Npb25zLmZpbmQodW5jaGFuZ2VkID0+IHVuY2hhbmdlZC5uYW1lID09PSBwZXIubmFtZSkgfHwge30pLmlzR3JhbnRlZCA9PT1cclxuICAgICAgICBwZXIuaXNHcmFudGVkXHJcbiAgICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgICA6IHRydWUsXHJcbiAgICAgIClcclxuICAgICAgLm1hcCgoeyBuYW1lLCBpc0dyYW50ZWQgfSkgPT4gKHsgbmFtZSwgaXNHcmFudGVkIH0pKTtcclxuXHJcbiAgICBpZiAoIWNoYW5nZWRQZXJtaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1vZGFsQnVzeSA9IHRydWU7XHJcbiAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgLnVwZGF0ZSh0aGlzLnByb3ZpZGVyTmFtZSwgdGhpcy5wcm92aWRlcktleSwgeyBwZXJtaXNzaW9uczogY2hhbmdlZFBlcm1pc3Npb25zIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PlxyXG4gICAgICAgICAgdGhpcy5zaG91bGRGZXRjaEFwcENvbmZpZygpID8gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKSA6IG9mKG51bGwpLFxyXG4gICAgICAgICksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubW9kYWxCdXN5ID0gZmFsc2UpKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MoJ0FicFVpOjpTYXZlZFN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Nb2RhbCgpIHtcclxuICAgIGlmICghdGhpcy5wcm92aWRlcktleSB8fCAhdGhpcy5wcm92aWRlck5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlciBLZXkgYW5kIFByb3ZpZGVyIE5hbWUgYXJlIHJlcXVpcmVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMucHJvdmlkZXJOYW1lLCB0aGlzLnByb3ZpZGVyS2V5KS5waXBlKFxyXG4gICAgICB0YXAoKHBlcm1pc3Npb25SZXM6IEdldFBlcm1pc3Npb25MaXN0UmVzdWx0RHRvKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gcGVybWlzc2lvblJlcztcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gZ2V0UGVybWlzc2lvbnMocGVybWlzc2lvblJlcy5ncm91cHMpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRHcm91cChwZXJtaXNzaW9uUmVzLmdyb3Vwc1swXSk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFNlbGVjdEFsbEluQWxsVGFicyA9IHRoaXMucGVybWlzc2lvbnMuZXZlcnkoXHJcbiAgICAgICAgICBwZXIgPT5cclxuICAgICAgICAgICAgcGVyLmlzR3JhbnRlZCAmJlxyXG4gICAgICAgICAgICBwZXIuZ3JhbnRlZFByb3ZpZGVycy5ldmVyeShwcm92aWRlciA9PiBwcm92aWRlci5wcm92aWRlck5hbWUgIT09IHRoaXMucHJvdmlkZXJOYW1lKSxcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpbml0TW9kYWwoKSB7XHJcbiAgICAvLyBUT0RPOiBSZWZhY3RvclxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0RGlzYWJsZWQodGhpcy5zZWxlY3RlZEdyb3VwPy5wZXJtaXNzaW9ucyB8fCBbXSk7XHJcbiAgICAgIHRoaXMuc2V0VGFiQ2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgICB0aGlzLnNldEdyYW50Q2hlY2tib3hTdGF0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3NpZ25lZENvdW50KGdyb3VwTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5yZWR1Y2UoXHJcbiAgICAgIChhY2MsIHZhbCkgPT4gKHZhbC5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSAmJiB2YWwuaXNHcmFudGVkID8gYWNjICsgMSA6IGFjYyksXHJcbiAgICAgIDAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkRmV0Y2hBcHBDb25maWcoKSB7XHJcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lKCdjdXJyZW50VXNlcicpIGFzIEN1cnJlbnRVc2VyRHRvO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1InKSByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZShyb2xlID0+IHJvbGUgPT09IHRoaXMucHJvdmlkZXJLZXkpO1xyXG5cclxuICAgIGlmICh0aGlzLnByb3ZpZGVyTmFtZSA9PT0gJ1UnKSByZXR1cm4gY3VycmVudFVzZXIuaWQgPT09IHRoaXMucHJvdmlkZXJLZXk7XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZmluZFBhcmVudFBlcm1pc3Npb25zKFxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10sXHJcbiAgcGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuKTogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdIHtcclxuICBjb25zdCBwZXJtaXNzaW9uTWFwID0gbmV3IE1hcChwZXJtaXNzaW9ucy5tYXAocCA9PiBbcC5uYW1lLCBwXSkpO1xyXG4gIGxldCBjdXJyZW50UGVybWlzc2lvbiA9IHBlcm1pc3Npb25NYXAuZ2V0KHBlcm1pc3Npb24ubmFtZSkgPz8gbnVsbDtcclxuICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uczogUGVybWlzc2lvbkdyYW50SW5mb0R0b1tdID0gW107XHJcblxyXG4gIHdoaWxlIChjdXJyZW50UGVybWlzc2lvbiAmJiBjdXJyZW50UGVybWlzc2lvbi5wYXJlbnROYW1lKSB7XHJcbiAgICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uID0gcGVybWlzc2lvbk1hcC5nZXQoY3VycmVudFBlcm1pc3Npb24ucGFyZW50TmFtZSk7XHJcbiAgICBpZiAoIXBhcmVudFBlcm1pc3Npb24pIHtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBwYXJlbnRQZXJtaXNzaW9ucy5wdXNoKHBhcmVudFBlcm1pc3Npb24pO1xyXG4gICAgY3VycmVudFBlcm1pc3Npb24gPSBwYXJlbnRQZXJtaXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcmVudFBlcm1pc3Npb25zO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kTWFyZ2luKFxyXG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uR3JhbnRJbmZvRHRvW10sXHJcbiAgcGVybWlzc2lvbjogUGVybWlzc2lvbkdyYW50SW5mb0R0byxcclxuKTogbnVtYmVyIHtcclxuICBjb25zdCBwYXJlbnRQZXJtaXNzaW9uID0gcGVybWlzc2lvbnMuZmluZChwZXIgPT4gcGVyLm5hbWUgPT09IHBlcm1pc3Npb24ucGFyZW50TmFtZSk7XHJcblxyXG4gIGlmIChwYXJlbnRQZXJtaXNzaW9uICYmIHBhcmVudFBlcm1pc3Npb24ucGFyZW50TmFtZSkge1xyXG4gICAgbGV0IG1hcmdpbiA9IDIwO1xyXG4gICAgcmV0dXJuIChtYXJnaW4gKz0gZmluZE1hcmdpbihwZXJtaXNzaW9ucywgcGFyZW50UGVybWlzc2lvbikpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcmVudFBlcm1pc3Npb24gPyAyMCA6IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBlcm1pc3Npb25zKGdyb3VwczogUGVybWlzc2lvbkdyb3VwRHRvW10pOiBQZXJtaXNzaW9uV2l0aEdyb3VwTmFtZVtdIHtcclxuICByZXR1cm4gZ3JvdXBzLnJlZHVjZShcclxuICAgIChhY2MsIHZhbCkgPT4gW1xyXG4gICAgICAuLi5hY2MsXHJcbiAgICAgIC4uLnZhbC5wZXJtaXNzaW9ucy5tYXA8UGVybWlzc2lvbldpdGhHcm91cE5hbWU+KHAgPT4gKHsgLi4ucCwgZ3JvdXBOYW1lOiB2YWwubmFtZSB8fCAnJyB9KSksXHJcbiAgICBdLFxyXG4gICAgW10gYXMgUGVybWlzc2lvbldpdGhHcm91cE5hbWVbXSxcclxuICApO1xyXG59XHJcbiIsIjxhYnAtbW9kYWwgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW2J1c3ldPVwibW9kYWxCdXN5XCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnLCBzY3JvbGxhYmxlOiBmYWxzZSB9XCI+XHJcbiAgQGlmIChkYXRhLmVudGl0eURpc3BsYXlOYW1lIHx8IGVudGl0eURpc3BsYXlOYW1lKSB7XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEhlYWRlcj5cclxuICAgICAgPGg0PlxyXG4gICAgICAgIHt7ICdBYnBQZXJtaXNzaW9uTWFuYWdlbWVudDo6UGVybWlzc2lvbnMnIHwgYWJwTG9jYWxpemF0aW9uIH19IC1cclxuICAgICAgICB7eyBlbnRpdHlEaXNwbGF5TmFtZSB8fCBkYXRhLmVudGl0eURpc3BsYXlOYW1lIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHNjcm9sbC1pbi1tb2RhbFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAjc2VsZWN0QWxsSW5BbGxUYWJzUmVmXHJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtaW4tYWxsLXRhYnNcIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3QtYWxsLWluLWFsbC10YWJzXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0QWxsVGFiXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja1NlbGVjdEFsbCgpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRTZWxlY3RBbGxJbkFsbFRhYnNcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0LWFsbC1pbi1hbGwtdGFic1wiPnt7XHJcbiAgICAgICAgICAgICAgJ0FicFBlcm1pc3Npb25NYW5hZ2VtZW50OjpTZWxlY3RBbGxJbkFsbFRhYnMnIHwgYWJwTG9jYWxpemF0aW9uXHJcbiAgICAgICAgICAgIH19PC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxociBjbGFzcz1cIm10LTIgbWItMlwiIC8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXBpbGxzIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAoZ3JvdXAgb2YgZGF0YS5ncm91cHM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgQGlmICh7IGFzc2lnbmVkQ291bnQ6IGdldEFzc2lnbmVkQ291bnQoZ3JvdXAubmFtZSkgfTsgYXMgY291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRHcm91cD8ubmFtZSA9PT0gZ3JvdXA/Lm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hhbmdlR3JvdXAoZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3QpPVwic2V0RGlzYWJsZWQoZ3JvdXAucGVybWlzc2lvbnMpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5mb250LXdlaWdodC1ib2xkXT1cImNvdW50LmFzc2lnbmVkQ291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXA/LmRpc3BsYXlOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY291bnQuYXNzaWduZWRDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4oe3sgY291bnQuYXNzaWduZWRDb3VudCB9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04IHNjcm9sbC1pbi1tb2RhbFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzLTFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgI3NlbGVjdEFsbEluVGhpc1RhYnNSZWZcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICBpZD1cInNlbGVjdC1hbGwtaW4tdGhpcy10YWJzXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RUaGlzVGFiXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2VsZWN0QWxsVGFiXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrU2VsZWN0VGhpc1RhYigpXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3QtYWxsLWluLXRoaXMtdGFic1wiPnt7XHJcbiAgICAgICAgICAgICAgICAnQWJwUGVybWlzc2lvbk1hbmFnZW1lbnQ6OlNlbGVjdEFsbEluVGhpc1RhYicgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJteS0yXCIgLz5cclxuICAgICAgICAgICAgQGZvciAocGVybWlzc2lvbiBvZiBzZWxlY3RlZEdyb3VwUGVybWlzc2lvbnM7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInBlcm1pc3Npb24uc3R5bGVcIiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICNwZXJtaXNzaW9uQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0Q2hlY2tlZChwZXJtaXNzaW9uLm5hbWUpXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldENoZWNrZWQocGVybWlzc2lvbi5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cInBlcm1pc3Npb24ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0dyYW50ZWRCeU90aGVyUHJvdmlkZXJOYW1lKHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVycylcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0NoZWNrYm94KHBlcm1pc3Npb24sIHBlcm1pc3Npb25DaGVja2JveC52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBbYXR0ci5mb3JdPVwicGVybWlzc2lvbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgPnt7IHBlcm1pc3Npb24uZGlzcGxheU5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgQGlmICghaGlkZUJhZGdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHByb3ZpZGVyIG9mIHBlcm1pc3Npb24uZ3JhbnRlZFByb3ZpZGVyczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLXByaW1hcnkgdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHByb3ZpZGVyLnByb3ZpZGVyTmFtZSB9fToge3sgcHJvdmlkZXIucHJvdmlkZXJLZXkgfX08L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGFicENsb3NlPlxyXG4gICAgICAgIHt7ICdBYnBJZGVudGl0eTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGFicC1idXR0b24gaWNvbkNsYXNzPVwiZmEgZmEtY2hlY2tcIiAoY2xpY2spPVwic3VibWl0KClcIj57e1xyXG4gICAgICAgICdBYnBJZGVudGl0eTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb25cclxuICAgICAgfX08L2FicC1idXR0b24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIH1cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==
|
|
@@ -85,56 +85,61 @@ class PermissionManagementComponent {
|
|
|
85
85
|
return false;
|
|
86
86
|
}
|
|
87
87
|
onClickCheckbox(clickedPermission) {
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
const { isGranted, grantedProviders } = clickedPermission;
|
|
89
|
+
if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {
|
|
90
90
|
return;
|
|
91
|
+
}
|
|
91
92
|
this.setSelectedGroup(this.selectedGroup);
|
|
92
93
|
setTimeout(() => {
|
|
93
|
-
this.
|
|
94
|
-
if (clickedPermission.name === per.name) {
|
|
95
|
-
return { ...per, isGranted: !per.isGranted };
|
|
96
|
-
}
|
|
97
|
-
else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) {
|
|
98
|
-
return { ...per, isGranted: false };
|
|
99
|
-
}
|
|
100
|
-
else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) {
|
|
101
|
-
return { ...per, isGranted: true };
|
|
102
|
-
}
|
|
103
|
-
return per;
|
|
104
|
-
});
|
|
94
|
+
this.updatePermissionStatus(clickedPermission);
|
|
105
95
|
this.updateSelectedGroupPermissions(clickedPermission);
|
|
96
|
+
this.setParentClicked(clickedPermission);
|
|
106
97
|
this.setTabCheckboxState();
|
|
107
98
|
this.setGrantCheckboxState();
|
|
108
|
-
this.setParentClicked(clickedPermission);
|
|
109
99
|
}, 0);
|
|
110
100
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
101
|
+
updatePermissionStatus(clickedPermission) {
|
|
102
|
+
this.permissions = this.permissions.map(permission => {
|
|
103
|
+
const isExactMatch = clickedPermission.name == permission.name;
|
|
104
|
+
const isParentOfPermission = clickedPermission.parentName === permission.name;
|
|
105
|
+
const isChildOfPermission = clickedPermission.name === permission.parentName;
|
|
106
|
+
if (isExactMatch) {
|
|
107
|
+
return { ...permission, isGranted: !permission.isGranted };
|
|
108
|
+
}
|
|
109
|
+
if (isChildOfPermission && permission.isGranted) {
|
|
110
|
+
return { ...permission, isGranted: false };
|
|
111
|
+
}
|
|
112
|
+
if (isParentOfPermission && !permission.isGranted) {
|
|
113
|
+
return { ...permission, isGranted: true };
|
|
114
|
+
}
|
|
115
|
+
return permission;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
setParentClicked(clickedPermission) {
|
|
119
|
+
if (clickedPermission.parentName) {
|
|
120
|
+
const parentPermissions = findParentPermissions(this.permissions, clickedPermission);
|
|
121
|
+
if (parentPermissions.length > 0) {
|
|
122
|
+
const parentNames = new Set(parentPermissions.map(parent => parent.name));
|
|
126
123
|
this.permissions = this.permissions.map(per => {
|
|
127
|
-
|
|
128
|
-
|
|
124
|
+
let updatedIsGranted = per.isGranted;
|
|
125
|
+
if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {
|
|
126
|
+
updatedIsGranted = false;
|
|
127
|
+
}
|
|
128
|
+
if (parentNames.has(per.name)) {
|
|
129
|
+
updatedIsGranted = true;
|
|
129
130
|
}
|
|
130
|
-
return per;
|
|
131
|
+
return { ...per, isGranted: updatedIsGranted };
|
|
131
132
|
});
|
|
132
133
|
}
|
|
133
134
|
return;
|
|
134
135
|
}
|
|
135
136
|
this.permissions = this.permissions.map(per => {
|
|
136
|
-
|
|
137
|
-
|
|
137
|
+
const parents = findParentPermissions(this.permissions, per);
|
|
138
|
+
if (parents.length > 0) {
|
|
139
|
+
const rootParent = parents[parents.length - 1];
|
|
140
|
+
if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {
|
|
141
|
+
return { ...per, isGranted: false };
|
|
142
|
+
}
|
|
138
143
|
}
|
|
139
144
|
return per;
|
|
140
145
|
});
|
|
@@ -148,10 +153,10 @@ class PermissionManagementComponent {
|
|
|
148
153
|
});
|
|
149
154
|
}
|
|
150
155
|
setTabCheckboxState() {
|
|
151
|
-
const
|
|
152
|
-
const selectedPermissions =
|
|
156
|
+
const selectablePermissions = this.permissions.filter(per => per.grantedProviders.every(p => p.providerName === this.providerName));
|
|
157
|
+
const selectedPermissions = selectablePermissions.filter(per => per.isGranted);
|
|
153
158
|
const element = document.querySelector('#select-all-in-this-tabs');
|
|
154
|
-
if (selectedPermissions.length ===
|
|
159
|
+
if (selectedPermissions.length === selectablePermissions.length) {
|
|
155
160
|
element.indeterminate = false;
|
|
156
161
|
this.selectThisTab = true;
|
|
157
162
|
}
|
|
@@ -285,6 +290,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
285
290
|
type: ViewChildren,
|
|
286
291
|
args: ['selectAllInAllTabsRef']
|
|
287
292
|
}] } });
|
|
293
|
+
function findParentPermissions(permissions, permission) {
|
|
294
|
+
const permissionMap = new Map(permissions.map(p => [p.name, p]));
|
|
295
|
+
let currentPermission = permissionMap.get(permission.name) ?? null;
|
|
296
|
+
const parentPermissions = [];
|
|
297
|
+
while (currentPermission && currentPermission.parentName) {
|
|
298
|
+
const parentPermission = permissionMap.get(currentPermission.parentName);
|
|
299
|
+
if (!parentPermission) {
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
parentPermissions.push(parentPermission);
|
|
303
|
+
currentPermission = parentPermission;
|
|
304
|
+
}
|
|
305
|
+
return parentPermissions;
|
|
306
|
+
}
|
|
288
307
|
function findMargin(permissions, permission) {
|
|
289
308
|
const parentPermission = permissions.find(per => per.name === permission.parentName);
|
|
290
309
|
if (parentPermission && parentPermission.parentName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { ConfigStateService, CurrentUserDto } from '@abp/ng.core';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { LocaleDirection, ToasterService } from '@abp/ng.theme.shared';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output,\r\n QueryList,\r\n TrackByFunction,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { concat, of } from 'rxjs';\r\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models/permission-management';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .overflow-scroll {\r\n max-height: 70vh;\r\n overflow-y: scroll;\r\n }\r\n .scroll-in-modal {\r\n overflow: auto;\r\n max-height: calc(100vh - 15rem);\r\n }\r\n `,\r\n ],\r\n})\r\nexport class PermissionManagementComponent\r\n implements\r\n PermissionManagement.PermissionManagementComponentInputs,\r\n PermissionManagement.PermissionManagementComponentOutputs\r\n{\r\n protected readonly service = inject(PermissionsService);\r\n protected readonly configState = inject(ConfigStateService);\r\n protected readonly toasterService = inject(ToasterService);\r\n\r\n @Input()\r\n readonly providerName!: string;\r\n\r\n @Input()\r\n readonly providerKey!: string;\r\n\r\n @Input()\r\n readonly hideBadges = false;\r\n\r\n protected _visible = false;\r\n\r\n @Input()\r\n entityDisplayName: string | undefined;\r\n\r\n @Input()\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible) return;\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible = true;\r\n this.visibleChange.emit(true);\r\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.initModal();\r\n });\r\n });\r\n } else {\r\n this.setSelectedGroup(null);\r\n this._visible = false;\r\n this.visibleChange.emit(false);\r\n }\r\n }\r\n\r\n @Output() readonly visibleChange = new EventEmitter<boolean>();\r\n\r\n @ViewChildren('selectAllInThisTabsRef')\r\n selectAllInThisTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('selectAllInAllTabsRef')\r\n selectAllInAllTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n selectedGroup?: PermissionGroupDto | null;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n disableSelectAllTab = false;\r\n\r\n disabledSelectAllInAllTabs = false;\r\n\r\n modalBusy = false;\r\n\r\n selectedGroupPermissions: PermissionWithStyle[] = [];\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n setSelectedGroup(group: PermissionGroupDto) {\r\n this.selectedGroup = group;\r\n if (!this.selectedGroup) {\r\n this.selectedGroupPermissions = [];\r\n return;\r\n }\r\n\r\n const margin = `margin-${\r\n (document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions =\r\n (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\r\n [];\r\n this.selectedGroupPermissions = permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n }) as unknown as PermissionWithStyle,\r\n );\r\n }\r\n\r\n setDisabled(permissions: PermissionGrantInfoDto[]) {\r\n if (permissions.length) {\r\n this.disableSelectAllTab = permissions.every(\r\n permission =>\r\n permission.isGranted &&\r\n permission.grantedProviders?.every(p => p.providerName !== this.providerName),\r\n );\r\n } else {\r\n this.disableSelectAllTab = false;\r\n }\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto) {\r\n if (\r\n clickedPermission.isGranted &&\r\n this.isGrantedByOtherProviderName(clickedPermission.grantedProviders)\r\n )\r\n return;\r\n this.setSelectedGroup(this.selectedGroup);\r\n setTimeout(() => {\r\n this.permissions = this.permissions.map(per => {\r\n if (clickedPermission.name === per.name) {\r\n return { ...per, isGranted: !per.isGranted };\r\n } else if (clickedPermission.name === per.parentName && clickedPermission.isGranted) {\r\n return { ...per, isGranted: false };\r\n } else if (clickedPermission.parentName === per.name && !clickedPermission.isGranted) {\r\n return { ...per, isGranted: true };\r\n }\r\n return per;\r\n });\r\n this.updateSelectedGroupPermissions(clickedPermission);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n this.setParentClicked(clickedPermission);\r\n }, 0);\r\n }\r\n\r\n setParentClicked(clickedPermissions: PermissionGrantInfoDto) {\r\n let childPermissionGrantedCount = 0;\r\n let parentPermission: PermissionGrantInfoDto;\r\n\r\n if (clickedPermissions.parentName) {\r\n this.permissions.forEach(per => {\r\n if (per.name === clickedPermissions.parentName) {\r\n parentPermission = per;\r\n }\r\n });\r\n this.permissions.forEach(per => {\r\n if (parentPermission.name === per.parentName) {\r\n per.isGranted && childPermissionGrantedCount++;\r\n }\r\n });\r\n if (childPermissionGrantedCount === 1 && !parentPermission.isGranted) {\r\n this.permissions = this.permissions.map(per => {\r\n if (per.name === parentPermission.name) {\r\n per.isGranted = true;\r\n }\r\n return per;\r\n });\r\n }\r\n return;\r\n }\r\n this.permissions = this.permissions.map(per => {\r\n if (per.parentName === clickedPermissions.name) {\r\n per.isGranted = false;\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) {\r\n this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\r\n if (per.name === clickedPermissions.name) {\r\n per.isGranted = !per.isGranted;\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n setTabCheckboxState() {\r\n const selectableGroupPermissions = this.selectedGroupPermissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedPermissions = selectableGroupPermissions.filter(per => per.isGranted);\r\n const element = document.querySelector('#select-all-in-this-tabs') as any;\r\n\r\n if (selectedPermissions.length === selectableGroupPermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === selectablePermissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n if (!this.disableSelectAllTab) {\r\n this.selectThisTab = !this.selectAllTab;\r\n this.setTabCheckboxState();\r\n }\r\n this.onChangeGroup(this.selectedGroup);\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.setDisabled(group.permissions);\r\n this.setSelectedGroup(group);\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n this.toasterService.success('AbpUi::SavedSuccessfully');\r\n });\r\n }\r\n\r\n openModal() {\r\n if (!this.providerKey || !this.providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(this.providerName, this.providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n this.data = permissionRes;\r\n this.permissions = getPermissions(permissionRes.groups);\r\n this.setSelectedGroup(permissionRes.groups[0]);\r\n this.disabledSelectAllInAllTabs = this.permissions.every(\r\n per =>\r\n per.isGranted &&\r\n per.grantedProviders.every(provider => provider.providerName !== this.providerName),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setDisabled(this.selectedGroup?.permissions || []);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n\r\n if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);\r\n\r\n if (this.providerName === 'U') return currentUser.id === this.providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findMargin(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): number {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [\r\n ...acc,\r\n ...val.permissions.map<PermissionWithGroupName>(p => ({ ...p, groupName: val.name || '' })),\r\n ],\r\n [] as PermissionWithGroupName[],\r\n );\r\n}\r\n","<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\">\r\n <div class=\"col-md-4 scroll-in-modal\">\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\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n @for (group of data.groups; track $index) {\r\n <li class=\"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 <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 </div>\r\n </div>\r\n </div>\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","import { CoreModule } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components/permission-management.component';\r\n\r\n@NgModule({\r\n declarations: [PermissionManagementComponent],\r\n imports: [CoreModule, ThemeSharedModule],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abp-ng.permission-management.mjs","sources":["../../../../packages/permission-management/src/lib/components/permission-management.component.ts","../../../../packages/permission-management/src/lib/components/permission-management.component.html","../../../../packages/permission-management/src/lib/permission-management.module.ts","../../../../packages/permission-management/src/abp-ng.permission-management.ts"],"sourcesContent":["import { ConfigStateService, CurrentUserDto } from '@abp/ng.core';\r\nimport {\r\n GetPermissionListResultDto,\r\n PermissionGrantInfoDto,\r\n PermissionGroupDto,\r\n PermissionsService,\r\n ProviderInfoDto,\r\n UpdatePermissionDto,\r\n} from '@abp/ng.permission-management/proxy';\r\nimport { LocaleDirection, ToasterService } from '@abp/ng.theme.shared';\r\nimport {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output,\r\n QueryList,\r\n TrackByFunction,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { concat, of } from 'rxjs';\r\nimport { finalize, switchMap, take, tap } from 'rxjs/operators';\r\nimport { PermissionManagement } from '../models/permission-management';\r\n\r\ntype PermissionWithStyle = PermissionGrantInfoDto & {\r\n style: string;\r\n};\r\n\r\ntype PermissionWithGroupName = PermissionGrantInfoDto & {\r\n groupName: string;\r\n};\r\n\r\n@Component({\r\n selector: 'abp-permission-management',\r\n templateUrl: './permission-management.component.html',\r\n exportAs: 'abpPermissionManagement',\r\n styles: [\r\n `\r\n .overflow-scroll {\r\n max-height: 70vh;\r\n overflow-y: scroll;\r\n }\r\n .scroll-in-modal {\r\n overflow: auto;\r\n max-height: calc(100vh - 15rem);\r\n }\r\n `,\r\n ],\r\n})\r\nexport class PermissionManagementComponent\r\n implements\r\n PermissionManagement.PermissionManagementComponentInputs,\r\n PermissionManagement.PermissionManagementComponentOutputs\r\n{\r\n protected readonly service = inject(PermissionsService);\r\n protected readonly configState = inject(ConfigStateService);\r\n protected readonly toasterService = inject(ToasterService);\r\n\r\n @Input()\r\n readonly providerName!: string;\r\n\r\n @Input()\r\n readonly providerKey!: string;\r\n\r\n @Input()\r\n readonly hideBadges = false;\r\n\r\n protected _visible = false;\r\n\r\n @Input()\r\n entityDisplayName: string | undefined;\r\n\r\n @Input()\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n set visible(value: boolean) {\r\n if (value === this._visible) return;\r\n\r\n if (value) {\r\n this.openModal().subscribe(() => {\r\n this._visible = true;\r\n this.visibleChange.emit(true);\r\n concat(this.selectAllInAllTabsRef.changes, this.selectAllInThisTabsRef.changes)\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.initModal();\r\n });\r\n });\r\n } else {\r\n this.setSelectedGroup(null);\r\n this._visible = false;\r\n this.visibleChange.emit(false);\r\n }\r\n }\r\n\r\n @Output() readonly visibleChange = new EventEmitter<boolean>();\r\n\r\n @ViewChildren('selectAllInThisTabsRef')\r\n selectAllInThisTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n @ViewChildren('selectAllInAllTabsRef')\r\n selectAllInAllTabsRef!: QueryList<ElementRef<HTMLInputElement>>;\r\n\r\n data: GetPermissionListResultDto = { groups: [], entityDisplayName: '' };\r\n\r\n selectedGroup?: PermissionGroupDto | null;\r\n\r\n permissions: PermissionWithGroupName[] = [];\r\n\r\n selectThisTab = false;\r\n\r\n selectAllTab = false;\r\n\r\n disableSelectAllTab = false;\r\n\r\n disabledSelectAllInAllTabs = false;\r\n\r\n modalBusy = false;\r\n\r\n selectedGroupPermissions: PermissionWithStyle[] = [];\r\n\r\n trackByFn: TrackByFunction<PermissionGroupDto> = (_, item) => item.name;\r\n\r\n getChecked(name: string) {\r\n return (this.permissions.find(per => per.name === name) || { isGranted: false }).isGranted;\r\n }\r\n\r\n setSelectedGroup(group: PermissionGroupDto) {\r\n this.selectedGroup = group;\r\n if (!this.selectedGroup) {\r\n this.selectedGroupPermissions = [];\r\n return;\r\n }\r\n\r\n const margin = `margin-${\r\n (document.body.dir as LocaleDirection) === 'rtl' ? 'right' : 'left'\r\n }.px`;\r\n\r\n const permissions =\r\n (this.data.groups.find(group => group.name === this.selectedGroup?.name) || {}).permissions ||\r\n [];\r\n this.selectedGroupPermissions = permissions.map(\r\n permission =>\r\n ({\r\n ...permission,\r\n style: { [margin]: findMargin(permissions, permission) },\r\n isGranted: (this.permissions.find(per => per.name === permission.name) || {}).isGranted,\r\n }) as unknown as PermissionWithStyle,\r\n );\r\n }\r\n\r\n setDisabled(permissions: PermissionGrantInfoDto[]) {\r\n if (permissions.length) {\r\n this.disableSelectAllTab = permissions.every(\r\n permission =>\r\n permission.isGranted &&\r\n permission.grantedProviders?.every(p => p.providerName !== this.providerName),\r\n );\r\n } else {\r\n this.disableSelectAllTab = false;\r\n }\r\n }\r\n\r\n isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean {\r\n if (grantedProviders.length) {\r\n return grantedProviders.findIndex(p => p.providerName !== this.providerName) > -1;\r\n }\r\n return false;\r\n }\r\n\r\n onClickCheckbox(clickedPermission: PermissionGrantInfoDto) {\r\n const { isGranted, grantedProviders } = clickedPermission;\r\n if (isGranted && this.isGrantedByOtherProviderName(grantedProviders)) {\r\n return;\r\n }\r\n\r\n this.setSelectedGroup(this.selectedGroup);\r\n setTimeout(() => {\r\n this.updatePermissionStatus(clickedPermission);\r\n this.updateSelectedGroupPermissions(clickedPermission);\r\n this.setParentClicked(clickedPermission);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n }, 0);\r\n }\r\n\r\n updatePermissionStatus(clickedPermission: PermissionGrantInfoDto) {\r\n this.permissions = this.permissions.map(permission => {\r\n const isExactMatch = clickedPermission.name == permission.name;\r\n const isParentOfPermission = clickedPermission.parentName === permission.name;\r\n const isChildOfPermission = clickedPermission.name === permission.parentName;\r\n\r\n if (isExactMatch) {\r\n return { ...permission, isGranted: !permission.isGranted };\r\n }\r\n\r\n if (isChildOfPermission && permission.isGranted) {\r\n return { ...permission, isGranted: false };\r\n }\r\n\r\n if (isParentOfPermission && !permission.isGranted) {\r\n return { ...permission, isGranted: true };\r\n }\r\n\r\n return permission;\r\n });\r\n }\r\n\r\n setParentClicked(clickedPermission: PermissionGrantInfoDto) {\r\n if (clickedPermission.parentName) {\r\n const parentPermissions = findParentPermissions(this.permissions, clickedPermission);\r\n if (parentPermissions.length > 0) {\r\n const parentNames = new Set(parentPermissions.map(parent => parent.name));\r\n\r\n this.permissions = this.permissions.map(per => {\r\n let updatedIsGranted = per.isGranted;\r\n\r\n if (per.parentName === clickedPermission.name && !clickedPermission.isGranted) {\r\n updatedIsGranted = false;\r\n }\r\n\r\n if (parentNames.has(per.name)) {\r\n updatedIsGranted = true;\r\n }\r\n\r\n return { ...per, isGranted: updatedIsGranted };\r\n });\r\n }\r\n return;\r\n }\r\n\r\n this.permissions = this.permissions.map(per => {\r\n const parents = findParentPermissions(this.permissions, per);\r\n if (parents.length > 0) {\r\n const rootParent = parents[parents.length - 1];\r\n\r\n if (rootParent.name === clickedPermission.name && !rootParent.isGranted) {\r\n return { ...per, isGranted: false };\r\n }\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto) {\r\n this.selectedGroupPermissions = this.selectedGroupPermissions.map(per => {\r\n if (per.name === clickedPermissions.name) {\r\n per.isGranted = !per.isGranted;\r\n }\r\n return per;\r\n });\r\n }\r\n\r\n setTabCheckboxState() {\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const element = document.querySelector('#select-all-in-this-tabs') as any;\r\n\r\n if (selectedPermissions.length === selectablePermissions.length) {\r\n element.indeterminate = false;\r\n this.selectThisTab = true;\r\n } else if (selectedPermissions.length === 0) {\r\n element.indeterminate = false;\r\n this.selectThisTab = false;\r\n } else {\r\n element.indeterminate = true;\r\n }\r\n }\r\n\r\n setGrantCheckboxState() {\r\n const selectablePermissions = this.permissions.filter(per =>\r\n per.grantedProviders.every(p => p.providerName === this.providerName),\r\n );\r\n const selectedAllPermissions = selectablePermissions.filter(per => per.isGranted);\r\n const checkboxElement = document.querySelector('#select-all-in-all-tabs') as any;\r\n\r\n if (selectedAllPermissions.length === selectablePermissions.length) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = true;\r\n } else if (selectedAllPermissions.length === 0) {\r\n checkboxElement.indeterminate = false;\r\n this.selectAllTab = false;\r\n } else {\r\n checkboxElement.indeterminate = true;\r\n }\r\n }\r\n\r\n onClickSelectThisTab() {\r\n this.selectedGroupPermissions.forEach(permission => {\r\n if (permission.isGranted && this.isGrantedByOtherProviderName(permission.grantedProviders))\r\n return;\r\n\r\n const index = this.permissions.findIndex(per => per.name === permission.name);\r\n\r\n this.permissions = [\r\n ...this.permissions.slice(0, index),\r\n { ...this.permissions[index], isGranted: !this.selectThisTab },\r\n ...this.permissions.slice(index + 1),\r\n ];\r\n });\r\n\r\n this.setGrantCheckboxState();\r\n }\r\n\r\n onClickSelectAll() {\r\n this.permissions = this.permissions.map(permission => ({\r\n ...permission,\r\n isGranted:\r\n this.isGrantedByOtherProviderName(permission.grantedProviders) || !this.selectAllTab,\r\n }));\r\n if (!this.disableSelectAllTab) {\r\n this.selectThisTab = !this.selectAllTab;\r\n this.setTabCheckboxState();\r\n }\r\n this.onChangeGroup(this.selectedGroup);\r\n }\r\n\r\n onChangeGroup(group: PermissionGroupDto) {\r\n this.setDisabled(group.permissions);\r\n this.setSelectedGroup(group);\r\n this.setTabCheckboxState();\r\n }\r\n\r\n submit() {\r\n const unchangedPermissions = getPermissions(this.data.groups);\r\n\r\n const changedPermissions: UpdatePermissionDto[] = this.permissions\r\n .filter(per =>\r\n (unchangedPermissions.find(unchanged => unchanged.name === per.name) || {}).isGranted ===\r\n per.isGranted\r\n ? false\r\n : true,\r\n )\r\n .map(({ name, isGranted }) => ({ name, isGranted }));\r\n\r\n if (!changedPermissions.length) {\r\n this.visible = false;\r\n return;\r\n }\r\n\r\n this.modalBusy = true;\r\n this.service\r\n .update(this.providerName, this.providerKey, { permissions: changedPermissions })\r\n .pipe(\r\n switchMap(() =>\r\n this.shouldFetchAppConfig() ? this.configState.refreshAppState() : of(null),\r\n ),\r\n finalize(() => (this.modalBusy = false)),\r\n )\r\n .subscribe(() => {\r\n this.visible = false;\r\n this.toasterService.success('AbpUi::SavedSuccessfully');\r\n });\r\n }\r\n\r\n openModal() {\r\n if (!this.providerKey || !this.providerName) {\r\n throw new Error('Provider Key and Provider Name are required.');\r\n }\r\n\r\n return this.service.get(this.providerName, this.providerKey).pipe(\r\n tap((permissionRes: GetPermissionListResultDto) => {\r\n this.data = permissionRes;\r\n this.permissions = getPermissions(permissionRes.groups);\r\n this.setSelectedGroup(permissionRes.groups[0]);\r\n this.disabledSelectAllInAllTabs = this.permissions.every(\r\n per =>\r\n per.isGranted &&\r\n per.grantedProviders.every(provider => provider.providerName !== this.providerName),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n initModal() {\r\n // TODO: Refactor\r\n setTimeout(() => {\r\n this.setDisabled(this.selectedGroup?.permissions || []);\r\n this.setTabCheckboxState();\r\n this.setGrantCheckboxState();\r\n });\r\n }\r\n\r\n getAssignedCount(groupName: string) {\r\n return this.permissions.reduce(\r\n (acc, val) => (val.groupName === groupName && val.isGranted ? acc + 1 : acc),\r\n 0,\r\n );\r\n }\r\n\r\n shouldFetchAppConfig() {\r\n const currentUser = this.configState.getOne('currentUser') as CurrentUserDto;\r\n\r\n if (this.providerName === 'R') return currentUser.roles.some(role => role === this.providerKey);\r\n\r\n if (this.providerName === 'U') return currentUser.id === this.providerKey;\r\n\r\n return false;\r\n }\r\n}\r\n\r\nfunction findParentPermissions(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): PermissionGrantInfoDto[] {\r\n const permissionMap = new Map(permissions.map(p => [p.name, p]));\r\n let currentPermission = permissionMap.get(permission.name) ?? null;\r\n const parentPermissions: PermissionGrantInfoDto[] = [];\r\n\r\n while (currentPermission && currentPermission.parentName) {\r\n const parentPermission = permissionMap.get(currentPermission.parentName);\r\n if (!parentPermission) {\r\n break;\r\n }\r\n parentPermissions.push(parentPermission);\r\n currentPermission = parentPermission;\r\n }\r\n\r\n return parentPermissions;\r\n}\r\n\r\nfunction findMargin(\r\n permissions: PermissionGrantInfoDto[],\r\n permission: PermissionGrantInfoDto,\r\n): number {\r\n const parentPermission = permissions.find(per => per.name === permission.parentName);\r\n\r\n if (parentPermission && parentPermission.parentName) {\r\n let margin = 20;\r\n return (margin += findMargin(permissions, parentPermission));\r\n }\r\n\r\n return parentPermission ? 20 : 0;\r\n}\r\n\r\nfunction getPermissions(groups: PermissionGroupDto[]): PermissionWithGroupName[] {\r\n return groups.reduce(\r\n (acc, val) => [\r\n ...acc,\r\n ...val.permissions.map<PermissionWithGroupName>(p => ({ ...p, groupName: val.name || '' })),\r\n ],\r\n [] as PermissionWithGroupName[],\r\n );\r\n}\r\n","<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\">\r\n <div class=\"col-md-4 scroll-in-modal\">\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\r\n <hr class=\"mt-2 mb-2\" />\r\n <div class=\"overflow-auto\">\r\n <ul class=\"nav nav-pills flex-column\">\r\n @for (group of data.groups; track $index) {\r\n <li class=\"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 <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 </div>\r\n </div>\r\n </div>\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","import { CoreModule } from '@abp/ng.core';\r\nimport { ThemeSharedModule } from '@abp/ng.theme.shared';\r\nimport { NgModule } from '@angular/core';\r\nimport { PermissionManagementComponent } from './components/permission-management.component';\r\n\r\n@NgModule({\r\n declarations: [PermissionManagementComponent],\r\n imports: [CoreModule, ThemeSharedModule],\r\n exports: [PermissionManagementComponent],\r\n})\r\nexport class PermissionManagementModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,8 @@ export declare class PermissionManagementComponent implements PermissionManageme
|
|
|
39
39
|
setDisabled(permissions: PermissionGrantInfoDto[]): void;
|
|
40
40
|
isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean;
|
|
41
41
|
onClickCheckbox(clickedPermission: PermissionGrantInfoDto): void;
|
|
42
|
-
|
|
42
|
+
updatePermissionStatus(clickedPermission: PermissionGrantInfoDto): void;
|
|
43
|
+
setParentClicked(clickedPermission: PermissionGrantInfoDto): void;
|
|
43
44
|
updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto): void;
|
|
44
45
|
setTabCheckboxState(): void;
|
|
45
46
|
setGrantCheckboxState(): void;
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abp/ng.permission-management",
|
|
3
|
-
"version": "8.2.
|
|
3
|
+
"version": "8.2.3",
|
|
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": "~8.2.
|
|
10
|
+
"@abp/ng.theme.shared": "~8.2.3",
|
|
11
11
|
"tslib": "^2.0.0"
|
|
12
12
|
},
|
|
13
13
|
"publishConfig": {
|