@cauca-911/management 13.0.5 → 14.0.1

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.
Files changed (37) hide show
  1. package/esm2020/cauca-911-management.mjs +4 -4
  2. package/esm2020/lib/cauca-management-group/cauca-management-group.component.mjs +294 -289
  3. package/esm2020/lib/cauca-management-user/cauca-management-user.component.mjs +95 -95
  4. package/esm2020/lib/cauca-management.component.mjs +23 -23
  5. package/esm2020/lib/cauca-management.module.mjs +55 -57
  6. package/esm2020/lib/cauca-management.service.mjs +13 -13
  7. package/esm2020/lib/shared/models/group-model.mjs +7 -7
  8. package/esm2020/lib/shared/models/group-permission-model.mjs +8 -8
  9. package/esm2020/lib/shared/models/permission-model.mjs +7 -7
  10. package/esm2020/lib/shared/models/user-group-model.mjs +7 -7
  11. package/esm2020/lib/shared/models/user-model.mjs +11 -11
  12. package/esm2020/lib/shared/models/user-permission-model.mjs +8 -8
  13. package/esm2020/lib/shared/services/management-group.service.mjs +33 -33
  14. package/esm2020/lib/shared/services/management-permission.service.mjs +30 -30
  15. package/esm2020/lib/shared/services/management-user.service.mjs +48 -48
  16. package/esm2020/public-api.mjs +15 -15
  17. package/fesm2015/cauca-911-management.mjs +611 -608
  18. package/fesm2015/cauca-911-management.mjs.map +1 -1
  19. package/fesm2020/cauca-911-management.mjs +575 -572
  20. package/fesm2020/cauca-911-management.mjs.map +1 -1
  21. package/{cauca-911-management.d.ts → index.d.ts} +5 -5
  22. package/lib/cauca-management-group/cauca-management-group.component.d.ts +46 -45
  23. package/lib/cauca-management-user/cauca-management-user.component.d.ts +20 -20
  24. package/lib/cauca-management.component.d.ts +8 -8
  25. package/lib/cauca-management.module.d.ts +15 -15
  26. package/lib/cauca-management.service.d.ts +6 -6
  27. package/lib/shared/models/group-model.d.ts +10 -10
  28. package/lib/shared/models/group-permission-model.d.ts +7 -7
  29. package/lib/shared/models/permission-model.d.ts +7 -7
  30. package/lib/shared/models/user-group-model.d.ts +6 -6
  31. package/lib/shared/models/user-model.d.ts +15 -15
  32. package/lib/shared/models/user-permission-model.d.ts +7 -7
  33. package/lib/shared/services/management-group.service.d.ts +17 -17
  34. package/lib/shared/services/management-permission.service.d.ts +16 -16
  35. package/lib/shared/services/management-user.service.d.ts +23 -23
  36. package/package.json +7 -7
  37. package/public-api.d.ts +12 -12
@@ -1,289 +1,294 @@
1
- import { Component, Input } from '@angular/core';
2
- import { map } from 'rxjs/operators';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../shared/services/management-group.service";
5
- import * as i2 from "../shared/services/management-user.service";
6
- import * as i3 from "../shared/services/management-permission.service";
7
- import * as i4 from "@angular/cdk/layout";
8
- import * as i5 from "@cauca-911/devextreme";
9
- import * as i6 from "devextreme-angular/ui/nested";
10
- import * as i7 from "devextreme-angular/core";
11
- import * as i8 from "devextreme-angular/ui/tag-box";
12
- import * as i9 from "devextreme-angular/ui/list";
13
- import * as i10 from "devextreme-angular/ui/check-box";
14
- import * as i11 from "@ngx-translate/core";
15
- function CaucaManagementGroupComponent_div_20_Template(rf, ctx) { if (rf & 1) {
16
- const _r4 = i0.ɵɵgetCurrentView();
17
- i0.ɵɵelementStart(0, "div")(1, "dx-tag-box", 15);
18
- i0.ɵɵlistener("onInitialized", function CaucaManagementGroupComponent_div_20_Template_dx_tag_box_onInitialized_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r4); const field_r2 = restoredCtx.$implicit; const ctx_r3 = i0.ɵɵnextContext(); return ctx_r3.getGroupUser(field_r2, $event); })("onValueChanged", function CaucaManagementGroupComponent_div_20_Template_dx_tag_box_onValueChanged_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r4); const field_r2 = restoredCtx.$implicit; const ctx_r5 = i0.ɵɵnextContext(); return ctx_r5.setGroupUser(field_r2, $event); });
19
- i0.ɵɵelementEnd()();
20
- } if (rf & 2) {
21
- const ctx_r0 = i0.ɵɵnextContext();
22
- i0.ɵɵadvance(1);
23
- i0.ɵɵproperty("displayExpr", ctx_r0.fullName)("dataSource", ctx_r0.users)("searchEnabled", true)("searchExpr", ctx_r0.fullName);
24
- } }
25
- function CaucaManagementGroupComponent_div_21_div_2_Template(rf, ctx) { if (rf & 1) {
26
- const _r11 = i0.ɵɵgetCurrentView();
27
- i0.ɵɵelementStart(0, "div")(1, "dx-check-box", 17);
28
- i0.ɵɵlistener("onInitialized", function CaucaManagementGroupComponent_div_21_div_2_Template_dx_check_box_onInitialized_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r11); const permission_r8 = restoredCtx.$implicit; const field_r6 = i0.ɵɵnextContext().$implicit; const ctx_r9 = i0.ɵɵnextContext(); return ctx_r9.getPermissionStatus(field_r6, permission_r8, $event); })("onValueChanged", function CaucaManagementGroupComponent_div_21_div_2_Template_dx_check_box_onValueChanged_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r11); const permission_r8 = restoredCtx.$implicit; const field_r6 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(); return ctx_r12.checkBoxToggled(field_r6, permission_r8, $event); });
29
- i0.ɵɵelementEnd()();
30
- } if (rf & 2) {
31
- const permission_r8 = ctx.$implicit;
32
- i0.ɵɵadvance(1);
33
- i0.ɵɵproperty("text", permission_r8.name);
34
- } }
35
- const _c0 = function () { return ["name", "tag"]; };
36
- function CaucaManagementGroupComponent_div_21_Template(rf, ctx) { if (rf & 1) {
37
- i0.ɵɵelementStart(0, "div")(1, "dx-list", 16);
38
- i0.ɵɵtemplate(2, CaucaManagementGroupComponent_div_21_div_2_Template, 2, 1, "div", 14);
39
- i0.ɵɵelementEnd()();
40
- } if (rf & 2) {
41
- const ctx_r1 = i0.ɵɵnextContext();
42
- i0.ɵɵadvance(1);
43
- i0.ɵɵproperty("dataSource", ctx_r1.permissions)("searchEnabled", true)("searchExpr", i0.ɵɵpureFunction0(5, _c0))("hoverStateEnabled", ctx_r1.hoverStatePermission);
44
- i0.ɵɵadvance(1);
45
- i0.ɵɵproperty("dxTemplateOf", "rowTemplate");
46
- } }
47
- export class CaucaManagementGroupComponent {
48
- constructor(managementGroupService, managementUserService, managementPermissionService, breakpointObserver) {
49
- this.managementGroupService = managementGroupService;
50
- this.managementUserService = managementUserService;
51
- this.managementPermissionService = managementPermissionService;
52
- this.showPrintButton = true;
53
- this.hoverStatePermission = true;
54
- this.groups = [];
55
- this.users = [];
56
- this.permissions = [];
57
- this.userFullName = {};
58
- this.showColumn = true;
59
- this.showColumnXS = true;
60
- this.translations = [];
61
- this.calculateUsersCellValue = (e) => {
62
- const users = (e.users ? e.users : []);
63
- let usersNames = [];
64
- users.forEach((user) => {
65
- const userGroup = this.users.filter((u) => u.id === user.idUser);
66
- if (userGroup && userGroup[0]) {
67
- usersNames.push(userGroup[0].firstName + ' ' + userGroup[0].lastName);
68
- }
69
- });
70
- usersNames = usersNames.sort((one, two) => (one < two ? -1 : 1));
71
- return usersNames.join(', ');
72
- };
73
- this.groupNameAlreadyUsedValidation = (e) => this.managementGroupService.hasExistingGroupName(e.data).pipe(map((exist) => !exist)).toPromise();
74
- breakpointObserver.observe(['(max-width: 1000px)']).subscribe((result) => {
75
- this.showColumn = !result.matches;
76
- });
77
- breakpointObserver.observe(['(max-width: 600px)']).subscribe((result) => {
78
- this.showColumnXS = !result.matches;
79
- });
80
- }
81
- ngOnInit() {
82
- this.managementUserService.getAll().subscribe((data) => {
83
- this.users = data;
84
- this.users.forEach((user) => {
85
- if (user.isActive) {
86
- if (user.firstName !== '' && user.lastName !== '') {
87
- this.userFullName[user.id] = `${user.firstName} ${user.lastName}`;
88
- }
89
- }
90
- });
91
- });
92
- this.managementPermissionService.getAll().subscribe((permissions) => {
93
- const permissionIndex = permissions.findIndex((c) => c.tag === 'CanAccessPermissions');
94
- if (permissionIndex !== -1) {
95
- permissions.splice(permissionIndex, 1);
96
- }
97
- permissions.sort((a, b) => {
98
- if (a.name < b.name) {
99
- return -1;
100
- }
101
- if (a.name > b.name) {
102
- return 1;
103
- }
104
- return 0;
105
- });
106
- this.permissions = permissions;
107
- });
108
- this.getGroups();
109
- }
110
- fullName(data) {
111
- if (!data) {
112
- return '';
113
- }
114
- return `${data.firstName} ${data.lastName}`;
115
- }
116
- getGroupUser(field, e) {
117
- const users = [];
118
- if (this.groupUsers) {
119
- this.groupUsers.forEach((user) => {
120
- users.push(user.idUser);
121
- });
122
- }
123
- e.component.option('value', users);
124
- }
125
- setGroupUser(field, e) {
126
- const groupUser = [];
127
- e.value.forEach((idUser) => {
128
- const groupIndex = (field.data.users || []).findIndex((g) => g.idUser === idUser);
129
- if (groupIndex === -1) {
130
- groupUser.push({ idUser, });
131
- }
132
- else {
133
- groupUser.push(field.data.users[groupIndex]);
134
- }
135
- });
136
- field.setValue(JSON.parse(JSON.stringify(groupUser)));
137
- }
138
- setGroupPermission(field, e) {
139
- const groupUser = [];
140
- e.value.forEach((idUser) => {
141
- groupUser.push({
142
- idUser,
143
- });
144
- });
145
- field.setValue(JSON.parse(JSON.stringify(groupUser)));
146
- }
147
- getPermissionStatus(field, permission, e) {
148
- const groupPermission = (field.value || []).find((p) => p.idModulePermission === permission.id);
149
- if (groupPermission) {
150
- e.component.option('value', groupPermission.isAllowed);
151
- }
152
- else {
153
- e.component.option('value', undefined);
154
- }
155
- }
156
- checkBoxToggled(field, permission, e) {
157
- if (e.component.skipOnValueChanged) {
158
- e.component.skipOnValueChanged = false;
159
- return;
160
- }
161
- if (e.component.setUndefinedNextTime) {
162
- e.component.setUndefinedNextTime = false;
163
- e.component.skipOnValueChanged = true;
164
- e.component.option('value', undefined);
165
- this.setPermissionStatus(field, permission, undefined);
166
- return;
167
- }
168
- if (e.value === false) {
169
- e.component.setUndefinedNextTime = true;
170
- }
171
- this.setPermissionStatus(field, permission, e.value);
172
- }
173
- onRowInserted(e) {
174
- this.saveGroup(e.data);
175
- }
176
- onRowUpdated(e) {
177
- this.saveGroup(e.data);
178
- }
179
- onRowRemoved(e) {
180
- const group = e.data;
181
- this.managementGroupService.delete(group.id).subscribe(() => {
182
- this.getGroups();
183
- });
184
- }
185
- onEditingStart(e) {
186
- this.groupUsers = e.data.users;
187
- }
188
- onInitNewRow() {
189
- this.groupUsers = [];
190
- }
191
- setPermissionStatus(field, permission, value) {
192
- const groupPermissions = field.value || [];
193
- const groupIndex = groupPermissions.findIndex((p) => p.idModulePermission === permission.id);
194
- if (groupIndex > -1) {
195
- groupPermissions[groupIndex].isAllowed = value;
196
- }
197
- else {
198
- groupPermissions.push({
199
- idModulePermission: permission.id,
200
- isAllowed: value,
201
- });
202
- }
203
- field.setValue(JSON.parse(JSON.stringify(groupPermissions)));
204
- }
205
- saveGroup(group) {
206
- this.removePermissionUndefined(group);
207
- if (group.users) {
208
- group.users.forEach((userGroup) => {
209
- userGroup.idGroup = group.id;
210
- });
211
- }
212
- if (group.permissions) {
213
- group.permissions.forEach((groupPermission) => {
214
- groupPermission.idGroup = group.id;
215
- });
216
- }
217
- this.managementGroupService.save(group).subscribe(() => {
218
- this.getGroups();
219
- });
220
- this.groupUsers = [];
221
- }
222
- removePermissionUndefined(group) {
223
- group.permissions = group.permissions.filter((permission) => permission.isAllowed !== undefined);
224
- }
225
- getGroups() {
226
- this.managementGroupService.getAll().subscribe((data) => this.groups = data);
227
- }
228
- }
229
- CaucaManagementGroupComponent.ɵfac = function CaucaManagementGroupComponent_Factory(t) { return new (t || CaucaManagementGroupComponent)(i0.ɵɵdirectiveInject(i1.ManagementGroupService), i0.ɵɵdirectiveInject(i2.ManagementUserService), i0.ɵɵdirectiveInject(i3.ManagementPermissionService), i0.ɵɵdirectiveInject(i4.BreakpointObserver)); };
230
- CaucaManagementGroupComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaucaManagementGroupComponent, selectors: [["cauca-management-group"]], inputs: { showPrintButton: "showPrintButton", hoverStatePermission: "hoverStatePermission" }, decls: 22, vars: 34, consts: [["keyExpr", "id", 3, "allowPrint", "dataSource", "onRowInserted", "onInitNewRow", "onRowUpdated", "onEditingStart", "onRowRemoved"], ["dataField", "name", 3, "caption"], ["type", "async", 3, "message", "validationCallback"], ["dataField", "assignableByAllUsers", "dataType", "boolean", 3, "caption"], ["dataField", "users", "editCellTemplate", "usersEditTemplate", 3, "caption", "calculateCellValue"], ["dataField", "permissions", "editCellTemplate", "permissionsEditTemplate", 3, "caption", "visible"], [3, "enabled"], ["mode", "popup", 3, "allowAdding", "allowUpdating", "allowDeleting", "useIcons"], [3, "showTitle", "title", "fullScreen"], ["colCount", "1", 3, "labelLocation"], ["dataField", "name", 3, "isRequired"], ["dataField", "users"], ["dataField", "permissions"], ["dataField", "assignableByAllUsers"], [4, "dxTemplate", "dxTemplateOf"], ["valueExpr", "id", 3, "displayExpr", "dataSource", "searchEnabled", "searchExpr", "onInitialized", "onValueChanged"], ["itemTemplate", "rowTemplate", 3, "dataSource", "searchEnabled", "searchExpr", "hoverStateEnabled"], [3, "text", "onInitialized", "onValueChanged"]], template: function CaucaManagementGroupComponent_Template(rf, ctx) { if (rf & 1) {
231
- i0.ɵɵelementStart(0, "cauca-dx-data-grid", 0);
232
- i0.ɵɵlistener("onRowInserted", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onRowInserted_0_listener($event) { return ctx.onRowInserted($event); })("onInitNewRow", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onInitNewRow_0_listener() { return ctx.onInitNewRow(); })("onRowUpdated", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onRowUpdated_0_listener($event) { return ctx.onRowUpdated($event); })("onEditingStart", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onEditingStart_0_listener($event) { return ctx.onEditingStart($event); })("onRowRemoved", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onRowRemoved_0_listener($event) { return ctx.onRowRemoved($event); });
233
- i0.ɵɵelementStart(1, "dxi-column", 1);
234
- i0.ɵɵpipe(2, "translate");
235
- i0.ɵɵelement(3, "dxi-validation-rule", 2);
236
- i0.ɵɵpipe(4, "translate");
237
- i0.ɵɵelementEnd();
238
- i0.ɵɵelement(5, "dxi-column", 3);
239
- i0.ɵɵpipe(6, "translate");
240
- i0.ɵɵelement(7, "dxi-column", 4);
241
- i0.ɵɵpipe(8, "translate");
242
- i0.ɵɵelement(9, "dxi-column", 5);
243
- i0.ɵɵpipe(10, "translate");
244
- i0.ɵɵelement(11, "dxo-export", 6);
245
- i0.ɵɵelementStart(12, "dxo-editing", 7);
246
- i0.ɵɵelement(13, "dxo-popup", 8);
247
- i0.ɵɵpipe(14, "translate");
248
- i0.ɵɵelementStart(15, "dxo-form", 9);
249
- i0.ɵɵelement(16, "dxi-item", 10)(17, "dxi-item", 11)(18, "dxi-item", 12)(19, "dxi-item", 13);
250
- i0.ɵɵelementEnd()();
251
- i0.ɵɵtemplate(20, CaucaManagementGroupComponent_div_20_Template, 2, 4, "div", 14);
252
- i0.ɵɵtemplate(21, CaucaManagementGroupComponent_div_21_Template, 3, 6, "div", 14);
253
- i0.ɵɵelementEnd();
254
- } if (rf & 2) {
255
- i0.ɵɵproperty("allowPrint", ctx.showPrintButton)("dataSource", ctx.groups);
256
- i0.ɵɵadvance(1);
257
- i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(2, 22, "management.name"));
258
- i0.ɵɵadvance(2);
259
- i0.ɵɵproperty("message", i0.ɵɵpipeBind1(4, 24, "management.groupNameAlreadyUsed"))("validationCallback", ctx.groupNameAlreadyUsedValidation);
260
- i0.ɵɵadvance(2);
261
- i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(6, 26, "management.assignableByAllUsers"));
262
- i0.ɵɵadvance(2);
263
- i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(8, 28, "management.users"))("calculateCellValue", ctx.calculateUsersCellValue);
264
- i0.ɵɵadvance(2);
265
- i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(10, 30, "management.permissions"))("visible", false);
266
- i0.ɵɵadvance(2);
267
- i0.ɵɵproperty("enabled", false);
268
- i0.ɵɵadvance(1);
269
- i0.ɵɵproperty("allowAdding", true)("allowUpdating", true)("allowDeleting", true)("useIcons", true);
270
- i0.ɵɵadvance(1);
271
- i0.ɵɵproperty("showTitle", true)("title", i0.ɵɵpipeBind1(14, 32, "management.group"))("fullScreen", !ctx.showColumn);
272
- i0.ɵɵadvance(2);
273
- i0.ɵɵproperty("labelLocation", ctx.showColumnXS ? "left" : "top");
274
- i0.ɵɵadvance(1);
275
- i0.ɵɵproperty("isRequired", true);
276
- i0.ɵɵadvance(4);
277
- i0.ɵɵproperty("dxTemplateOf", "usersEditTemplate");
278
- i0.ɵɵadvance(1);
279
- i0.ɵɵproperty("dxTemplateOf", "permissionsEditTemplate");
280
- } }, directives: [i5.CaucaDataGridComponent, i6.DxiColumnComponent, i6.DxiValidationRuleComponent, i6.DxoExportComponent, i6.DxoEditingComponent, i6.DxoPopupComponent, i6.DxoFormComponent, i6.DxiItemComponent, i7.DxTemplateDirective, i8.DxTagBoxComponent, i9.DxListComponent, i10.DxCheckBoxComponent], pipes: [i11.TranslatePipe], styles: [""] });
281
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaucaManagementGroupComponent, [{
282
- type: Component,
283
- args: [{ selector: 'cauca-management-group', template: "<cauca-dx-data-grid [allowPrint]=\"showPrintButton\" keyExpr=\"id\" [dataSource]=\"groups\"\n (onRowInserted)=\"onRowInserted($event)\" (onInitNewRow)=\"onInitNewRow()\" (onRowUpdated)=\"onRowUpdated($event)\"\n (onEditingStart)=\"onEditingStart($event)\" (onRowRemoved)=\"onRowRemoved($event)\">\n\n <dxi-column dataField=\"name\" [caption]=\"'management.name' | translate\">\n <dxi-validation-rule type=\"async\" [message]=\"'management.groupNameAlreadyUsed' | translate\"\n [validationCallback]=\"groupNameAlreadyUsedValidation\"></dxi-validation-rule>\n </dxi-column>\n <dxi-column dataField=\"assignableByAllUsers\" [caption]=\"'management.assignableByAllUsers' | translate\"\n dataType=\"boolean\">\n </dxi-column>\n <dxi-column dataField=\"users\" [caption]=\"'management.users' | translate\" editCellTemplate=\"usersEditTemplate\"\n [calculateCellValue]=\"calculateUsersCellValue\">\n </dxi-column>\n <dxi-column dataField=\"permissions\" [caption]=\"'management.permissions' | translate\" [visible]=\"false\"\n editCellTemplate=\"permissionsEditTemplate\">\n </dxi-column>\n <dxo-export [enabled]=\"false\"></dxo-export>\n <dxo-editing mode=\"popup\" [allowAdding]=\"true\" [allowUpdating]=\"true\" [allowDeleting]=\"true\" [useIcons]=\"true\">\n <dxo-popup [showTitle]=\"true\" [title]=\"'management.group' | translate\" [fullScreen]=\"!showColumn\"></dxo-popup>\n <dxo-form colCount=\"1\" [labelLocation]=\"showColumnXS ? 'left' : 'top'\">\n <dxi-item dataField=\"name\" [isRequired]=\"true\"></dxi-item>\n <dxi-item dataField=\"users\"></dxi-item>\n <dxi-item dataField=\"permissions\"></dxi-item>\n <dxi-item dataField=\"assignableByAllUsers\"></dxi-item>\n </dxo-form>\n </dxo-editing>\n\n <div *dxTemplate=\"let field of 'usersEditTemplate'\">\n <dx-tag-box valueExpr=\"id\" [displayExpr]=\"fullName\" [dataSource]=\"users\" [searchEnabled]=\"true\"\n [searchExpr]=\"fullName\" (onInitialized)=\"getGroupUser(field, $event)\"\n (onValueChanged)=\"setGroupUser(field, $event)\">\n </dx-tag-box>\n </div>\n <div *dxTemplate=\"let field of 'permissionsEditTemplate'\">\n <dx-list [dataSource]=\"permissions\" itemTemplate=\"rowTemplate\" [searchEnabled]=\"true\"\n [searchExpr]=\"['name', 'tag']\" [hoverStateEnabled]=\"hoverStatePermission\">\n <div *dxTemplate=\"let permission of 'rowTemplate'\">\n <dx-check-box [text]=\"permission.name\" (onInitialized)=\"getPermissionStatus(field, permission, $event)\"\n (onValueChanged)=\"checkBoxToggled(field, permission, $event)\">\n </dx-check-box>\n </div>\n </dx-list>\n </div>\n</cauca-dx-data-grid>", styles: [""] }]
284
- }], function () { return [{ type: i1.ManagementGroupService }, { type: i2.ManagementUserService }, { type: i3.ManagementPermissionService }, { type: i4.BreakpointObserver }]; }, { showPrintButton: [{
285
- type: Input
286
- }], hoverStatePermission: [{
287
- type: Input
288
- }] }); })();
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1Y2EtbWFuYWdlbWVudC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYXVjYS1tYW5hZ2VtZW50L3NyYy9saWIvY2F1Y2EtbWFuYWdlbWVudC1ncm91cC9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhdWNhLW1hbmFnZW1lbnQvc3JjL2xpYi9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwL2NhdWNhLW1hbmFnZW1lbnQtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7SUMwQmpDLDJCQUFvRCxxQkFBQTtJQUVwQixpUUFBaUIscUNBQTJCLElBQUMsc1BBQ25ELHFDQUEyQixJQUR3QjtJQUV6RSxpQkFBYSxFQUFBOzs7SUFIYyxlQUF3QjtJQUF4Qiw2Q0FBd0IsNEJBQUEsdUJBQUEsK0JBQUE7Ozs7SUFRL0MsMkJBQW1ELHVCQUFBO0lBQ1IsOFRBQWlCLDJEQUE4QyxJQUFDLG9UQUNqRix3REFBMEMsSUFEdUM7SUFFdkcsaUJBQWUsRUFBQTs7O0lBRkQsZUFBd0I7SUFBeEIseUNBQXdCOzs7O0lBSmxELDJCQUEwRCxrQkFBQTtJQUdsRCxzRkFJTTtJQUNWLGlCQUFVLEVBQUE7OztJQVBELGVBQTBCO0lBQTFCLCtDQUEwQix1QkFBQSwwQ0FBQSxrREFBQTtJQUVFLGVBQWdCO0lBQWhCLDRDQUFnQjs7QURwQjdELE1BQU0sT0FBTyw2QkFBNkI7SUFnQnRDLFlBQ1ksc0JBQThDLEVBQzlDLHFCQUE0QyxFQUM1QywyQkFBd0QsRUFDaEUsa0JBQXNDO1FBSDlCLDJCQUFzQixHQUF0QixzQkFBc0Is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LGVBQXlEO1FBQXpELGtGQUF5RDtRQUd4RSxlQUEwQztRQUExQyxtRUFBMEMsbURBQUE7UUFHcEMsZUFBZ0Q7UUFBaEQsMEVBQWdELGtCQUFBO1FBR3hFLGVBQWlCO1FBQWpCLCtCQUFpQjtRQUNILGVBQW9CO1FBQXBCLGtDQUFvQix1QkFBQSx1QkFBQSxrQkFBQTtRQUMvQixlQUFrQjtRQUFsQixnQ0FBa0IscURBQUEsK0JBQUE7UUFDTixlQUErQztRQUEvQyxpRUFBK0M7UUFDdkMsZUFBbUI7UUFBbkIsaUNBQW1CO1FBTzFCLGVBQXNCO1FBQXRCLGtEQUFzQjtRQU10QixlQUE0QjtRQUE1Qix3REFBNEI7O3VGRGpCL0MsNkJBQTZCO2NBTHpDLFNBQVM7MkJBQ0ksd0JBQXdCO3dMQU0zQixlQUFlO2tCQURyQixLQUFLO1lBR0Msb0JBQW9CO2tCQUQxQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFVzZXJNb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvdXNlci1tb2RlbCc7XG5pbXBvcnQgeyBVc2VyR3JvdXBNb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvdXNlci1ncm91cC1tb2RlbCc7XG5pbXBvcnQgeyBHcm91cE1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9ncm91cC1tb2RlbCc7XG5pbXBvcnQgeyBHcm91cFBlcm1pc3Npb25Nb2RlbCB9IGZyb20gJy4uL3NoYXJlZC9tb2RlbHMvZ3JvdXAtcGVybWlzc2lvbi1tb2RlbCc7XG5pbXBvcnQgeyBNYW5hZ2VtZW50R3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL21hbmFnZW1lbnQtZ3JvdXAuc2VydmljZSc7XG5pbXBvcnQgeyBNYW5hZ2VtZW50VXNlclNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvbWFuYWdlbWVudC11c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbk1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9wZXJtaXNzaW9uLW1vZGVsJztcbmltcG9ydCB7IE1hbmFnZW1lbnRQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9tYW5hZ2VtZW50LXBlcm1pc3Npb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY2F1Y2EtbWFuYWdlbWVudC1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhdWNhLW1hbmFnZW1lbnQtZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhdWNhLW1hbmFnZW1lbnQtZ3JvdXAuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYXVjYU1hbmFnZW1lbnRHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd1ByaW50QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBob3ZlclN0YXRlUGVybWlzc2lvbiA9IHRydWU7XG5cbiAgICBwdWJsaWMgZ3JvdXBzOiBHcm91cE1vZGVsW10gPSBbXTtcbiAgICBwdWJsaWMgdXNlcnM6IFVzZXJNb2RlbFtdID0gW107XG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uTW9kZWxbXSA9IFtdO1xuICAgIHB1YmxpYyB1c2VyRnVsbE5hbWU6IGFueSA9IHt9O1xuICAgIHB1YmxpYyBzaG93Q29sdW1uID0gdHJ1ZTtcbiAgICBwdWJsaWMgc2hvd0NvbHVtblhTID0gdHJ1ZTtcbiAgICBwdWJsaWMgdHJhbnNsYXRpb25zOiBhbnkgPSBbXTtcblxuICAgIHByaXZhdGUgZ3JvdXBVc2VyczogYW55O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG1hbmFnZW1lbnRHcm91cFNlcnZpY2U6IE1hbmFnZW1lbnRHcm91cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbWFuYWdlbWVudFVzZXJTZXJ2aWNlOiBNYW5hZ2VtZW50VXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbWFuYWdlbWVudFBlcm1pc3Npb25TZXJ2aWNlOiBNYW5hZ2VtZW50UGVybWlzc2lvblNlcnZpY2UsXG4gICAgICAgIGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLFxuICAgICkge1xuICAgICAgICBicmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZShbJyhtYXgtd2lkdGg6IDEwMDBweCknXSkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Q29sdW1uID0gIXJlc3VsdC5tYXRjaGVzO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoWycobWF4LXdpZHRoOiA2MDBweCknXSkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Q29sdW1uWFMgPSAhcmVzdWx0Lm1hdGNoZXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50VXNlclNlcnZpY2UuZ2V0QWxsPFVzZXJNb2RlbD4oKS5zdWJzY3JpYmUoKGRhdGE6IFVzZXJNb2RlbFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXJzID0gZGF0YTtcbiAgICAgICAgICAgIHRoaXMudXNlcnMuZm9yRWFjaCgodXNlcjogVXNlck1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXIuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXIuZmlyc3ROYW1lICE9PSAnJyAmJiB1c2VyLmxhc3ROYW1lICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyRnVsbE5hbWVbdXNlci5pZF0gID0gYCR7dXNlci5maXJzdE5hbWV9ICR7dXNlci5sYXN0TmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1hbmFnZW1lbnRQZXJtaXNzaW9uU2VydmljZS5nZXRBbGwoKS5zdWJzY3JpYmUoKHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uTW9kZWxbXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbkluZGV4ID0gcGVybWlzc2lvbnMuZmluZEluZGV4KChjOiBQZXJtaXNzaW9uTW9kZWwpID0+IGMudGFnID09PSAnQ2FuQWNjZXNzUGVybWlzc2lvbnMnKTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnMuc3BsaWNlKHBlcm1pc3Npb25JbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5zb3J0KChhOiBQZXJtaXNzaW9uTW9kZWwsIGI6IFBlcm1pc3Npb25Nb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLm5hbWUgPCBiLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYS5uYW1lID4gYi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRHcm91cHMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZnVsbE5hbWUoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7ZGF0YS5maXJzdE5hbWV9ICR7ZGF0YS5sYXN0TmFtZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRHcm91cFVzZXIoZmllbGQ6IGFueSwgZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVzZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5ncm91cFVzZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwVXNlcnMuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdXNlcnMucHVzaCh1c2VyLmlkVXNlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlLmNvbXBvbmVudC5vcHRpb24oJ3ZhbHVlJywgdXNlcnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRHcm91cFVzZXIoZmllbGQ6IGFueSwgZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwVXNlcjogVXNlckdyb3VwTW9kZWxbXSA9IFtdO1xuXG4gICAgICAgIGUudmFsdWUuZm9yRWFjaCgoaWRVc2VyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPSAoZmllbGQuZGF0YS51c2VycyB8fCBbXSkuZmluZEluZGV4KChnOiBhbnkpID0+IGcuaWRVc2VyID09PSBpZFVzZXIpO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdXBJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBncm91cFVzZXIucHVzaCh7IGlkVXNlciwgfSBhcyBVc2VyR3JvdXBNb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3VwVXNlci5wdXNoKGZpZWxkLmRhdGEudXNlcnNbZ3JvdXBJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBmaWVsZC5zZXRWYWx1ZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyb3VwVXNlcikpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0R3JvdXBQZXJtaXNzaW9uKGZpZWxkOiBhbnksIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cFVzZXI6IFVzZXJHcm91cE1vZGVsW10gPSBbXTtcblxuICAgICAgICBlLnZhbHVlLmZvckVhY2goKGlkVXNlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBncm91cFVzZXIucHVzaCh7XG4gICAgICAgICAgICAgICAgaWRVc2VyLFxuICAgICAgICAgICAgfSBhcyBVc2VyR3JvdXBNb2RlbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpZWxkLnNldFZhbHVlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JvdXBVc2VyKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkOiBhbnksIHBlcm1pc3Npb246IGFueSwgZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbiA9IChmaWVsZC52YWx1ZSB8fCBbXSkuZmluZCgocDogYW55KSA9PiBwLmlkTW9kdWxlUGVybWlzc2lvbiA9PT0gcGVybWlzc2lvbi5pZCk7XG5cbiAgICAgICAgaWYgKGdyb3VwUGVybWlzc2lvbikge1xuICAgICAgICAgICAgZS5jb21wb25lbnQub3B0aW9uKCd2YWx1ZScsIGdyb3VwUGVybWlzc2lvbi5pc0FsbG93ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZS5jb21wb25lbnQub3B0aW9uKCd2YWx1ZScsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2hlY2tCb3hUb2dnbGVkKGZpZWxkOiBhbnksIHBlcm1pc3Npb246IGFueSwgZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChlLmNvbXBvbmVudC5za2lwT25WYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNraXBPblZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlLmNvbXBvbmVudC5zZXRVbmRlZmluZWROZXh0VGltZSkge1xuICAgICAgICAgICAgZS5jb21wb25lbnQuc2V0VW5kZWZpbmVkTmV4dFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNraXBPblZhbHVlQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5vcHRpb24oJ3ZhbHVlJywgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRoaXMuc2V0UGVybWlzc2lvblN0YXR1cyhmaWVsZCwgcGVybWlzc2lvbiwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZS52YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNldFVuZGVmaW5lZE5leHRUaW1lID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGVybWlzc2lvblN0YXR1cyhmaWVsZCwgcGVybWlzc2lvbiwgZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93SW5zZXJ0ZWQoZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZUdyb3VwKGUuZGF0YSBhcyBHcm91cE1vZGVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Sb3dVcGRhdGVkKGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVHcm91cChlLmRhdGEgYXMgR3JvdXBNb2RlbCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93UmVtb3ZlZChlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSAoZS5kYXRhIGFzIEdyb3VwTW9kZWwpO1xuICAgICAgICB0aGlzLm1hbmFnZW1lbnRHcm91cFNlcnZpY2UuZGVsZXRlKGdyb3VwLmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRHcm91cHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGN1bGF0ZVVzZXJzQ2VsbFZhbHVlID0gKGU6IGFueSk6IHN0cmluZyA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXJzID0gKGUudXNlcnMgPyBlLnVzZXJzIGFzIFVzZXJHcm91cE1vZGVsW10gOiBbXSk7XG4gICAgICAgIGxldCB1c2Vyc05hbWVzOiBhbnlbXSA9IFtdO1xuICAgICAgICB1c2Vycy5mb3JFYWNoKCh1c2VyOiBVc2VyR3JvdXBNb2RlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXNlckdyb3VwID0gdGhpcy51c2Vycy5maWx0ZXIoKHU6IFVzZXJNb2RlbCkgPT4gdS5pZCA9PT0gdXNlci5pZFVzZXIpO1xuICAgICAgICAgICAgaWYgKHVzZXJHcm91cCAmJiB1c2VyR3JvdXBbMF0pIHtcbiAgICAgICAgICAgICAgICB1c2Vyc05hbWVzLnB1c2godXNlckdyb3VwWzBdLmZpcnN0TmFtZSArICcgJyArIHVzZXJHcm91cFswXS5sYXN0TmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB1c2Vyc05hbWVzID0gdXNlcnNOYW1lcy5zb3J0KChvbmU6IHN0cmluZywgdHdvOiBzdHJpbmcpID0+IChvbmUgPCB0d28gPyAtMSA6IDEpKTtcbiAgICAgICAgcmV0dXJuIHVzZXJzTmFtZXMuam9pbignLCAnKTtcbiAgICB9O1xuXG4gICAgcHVibGljIG9uRWRpdGluZ1N0YXJ0KGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmdyb3VwVXNlcnMgPSBlLmRhdGEudXNlcnM7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW5pdE5ld1JvdygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwTmFtZUFscmVhZHlVc2VkVmFsaWRhdGlvbiA9IChlOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHRoaXMubWFuYWdlbWVudEdyb3VwU2VydmljZS5oYXNFeGlzdGluZ0dyb3VwTmFtZShlLmRhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGV4aXN0OiBib29sZWFuKSA9PiAhZXhpc3QpXG4gICAgICAgICkudG9Qcm9taXNlKCk7XG5cbiAgICBwcml2YXRlIHNldFBlcm1pc3Npb25TdGF0dXMoZmllbGQ6IGFueSwgcGVybWlzc2lvbjogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwUGVybWlzc2lvbnMgPSBmaWVsZC52YWx1ZSB8fCBbXTtcbiAgICAgICAgY29uc3QgZ3JvdXBJbmRleCA9IGdyb3VwUGVybWlzc2lvbnMuZmluZEluZGV4KChwOiBHcm91cFBlcm1pc3Npb25Nb2RlbCkgPT4gcC5pZE1vZHVsZVBlcm1pc3Npb24gPT09IHBlcm1pc3Npb24uaWQpO1xuXG4gICAgICAgIGlmIChncm91cEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbnNbZ3JvdXBJbmRleF0uaXNBbGxvd2VkID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkTW9kdWxlUGVybWlzc2lvbjogcGVybWlzc2lvbi5pZCxcbiAgICAgICAgICAgICAgICBpc0FsbG93ZWQ6IHZhbHVlLFxuICAgICAgICAgICAgfSBhcyBHcm91cFBlcm1pc3Npb25Nb2RlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZC5zZXRWYWx1ZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyb3VwUGVybWlzc2lvbnMpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlR3JvdXAoZ3JvdXA6IEdyb3VwTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVQZXJtaXNzaW9uVW5kZWZpbmVkKGdyb3VwKTtcbiAgICAgICAgaWYgKGdyb3VwLnVzZXJzKSB7XG4gICAgICAgICAgICBncm91cC51c2Vycy5mb3JFYWNoKCh1c2VyR3JvdXA6IFVzZXJHcm91cE1vZGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgdXNlckdyb3VwLmlkR3JvdXAgPSBncm91cC5pZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cC5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgZ3JvdXAucGVybWlzc2lvbnMuZm9yRWFjaCgoZ3JvdXBQZXJtaXNzaW9uOiBHcm91cFBlcm1pc3Npb25Nb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGdyb3VwUGVybWlzc2lvbi5pZEdyb3VwID0gZ3JvdXAuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hbmFnZW1lbnRHcm91cFNlcnZpY2Uuc2F2ZShncm91cCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyb3VwVXNlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVBlcm1pc3Npb25VbmRlZmluZWQoZ3JvdXA6IEdyb3VwTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgZ3JvdXAucGVybWlzc2lvbnMgPSBncm91cC5wZXJtaXNzaW9ucy5maWx0ZXIoKHBlcm1pc3Npb246IEdyb3VwUGVybWlzc2lvbk1vZGVsKSA9PiBwZXJtaXNzaW9uLmlzQWxsb3dlZCAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEdyb3VwcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLmdldEFsbCgpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLmdyb3VwcyA9IGRhdGEpO1xuICAgIH1cbn1cbiIsIjxjYXVjYS1keC1kYXRhLWdyaWQgW2FsbG93UHJpbnRdPVwic2hvd1ByaW50QnV0dG9uXCIga2V5RXhwcj1cImlkXCIgW2RhdGFTb3VyY2VdPVwiZ3JvdXBzXCJcbiAgICAob25Sb3dJbnNlcnRlZCk9XCJvblJvd0luc2VydGVkKCRldmVudClcIiAob25Jbml0TmV3Um93KT1cIm9uSW5pdE5ld1JvdygpXCIgKG9uUm93VXBkYXRlZCk9XCJvblJvd1VwZGF0ZWQoJGV2ZW50KVwiXG4gICAgKG9uRWRpdGluZ1N0YXJ0KT1cIm9uRWRpdGluZ1N0YXJ0KCRldmVudClcIiAob25Sb3dSZW1vdmVkKT1cIm9uUm93UmVtb3ZlZCgkZXZlbnQpXCI+XG5cbiAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJuYW1lXCIgW2NhcHRpb25dPVwiJ21hbmFnZW1lbnQubmFtZScgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgPGR4aS12YWxpZGF0aW9uLXJ1bGUgdHlwZT1cImFzeW5jXCIgW21lc3NhZ2VdPVwiJ21hbmFnZW1lbnQuZ3JvdXBOYW1lQWxyZWFkeVVzZWQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFt2YWxpZGF0aW9uQ2FsbGJhY2tdPVwiZ3JvdXBOYW1lQWxyZWFkeVVzZWRWYWxpZGF0aW9uXCI+PC9keGktdmFsaWRhdGlvbi1ydWxlPlxuICAgIDwvZHhpLWNvbHVtbj5cbiAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJhc3NpZ25hYmxlQnlBbGxVc2Vyc1wiIFtjYXB0aW9uXT1cIidtYW5hZ2VtZW50LmFzc2lnbmFibGVCeUFsbFVzZXJzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGRhdGFUeXBlPVwiYm9vbGVhblwiPlxuICAgIDwvZHhpLWNvbHVtbj5cbiAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ1c2Vyc1wiIFtjYXB0aW9uXT1cIidtYW5hZ2VtZW50LnVzZXJzJyB8IHRyYW5zbGF0ZVwiIGVkaXRDZWxsVGVtcGxhdGU9XCJ1c2Vyc0VkaXRUZW1wbGF0ZVwiXG4gICAgICAgIFtjYWxjdWxhdGVDZWxsVmFsdWVdPVwiY2FsY3VsYXRlVXNlcnNDZWxsVmFsdWVcIj5cbiAgICA8L2R4aS1jb2x1bW4+XG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwicGVybWlzc2lvbnNcIiBbY2FwdGlvbl09XCInbWFuYWdlbWVudC5wZXJtaXNzaW9ucycgfCB0cmFuc2xhdGVcIiBbdmlzaWJsZV09XCJmYWxzZVwiXG4gICAgICAgIGVkaXRDZWxsVGVtcGxhdGU9XCJwZXJtaXNzaW9uc0VkaXRUZW1wbGF0ZVwiPlxuICAgIDwvZHhpLWNvbHVtbj5cbiAgICA8ZHhvLWV4cG9ydCBbZW5hYmxlZF09XCJmYWxzZVwiPjwvZHhvLWV4cG9ydD5cbiAgICA8ZHhvLWVkaXRpbmcgbW9kZT1cInBvcHVwXCIgW2FsbG93QWRkaW5nXT1cInRydWVcIiBbYWxsb3dVcGRhdGluZ109XCJ0cnVlXCIgW2FsbG93RGVsZXRpbmddPVwidHJ1ZVwiIFt1c2VJY29uc109XCJ0cnVlXCI+XG4gICAgICAgIDxkeG8tcG9wdXAgW3Nob3dUaXRsZV09XCJ0cnVlXCIgW3RpdGxlXT1cIidtYW5hZ2VtZW50Lmdyb3VwJyB8IHRyYW5zbGF0ZVwiIFtmdWxsU2NyZWVuXT1cIiFzaG93Q29sdW1uXCI+PC9keG8tcG9wdXA+XG4gICAgICAgIDxkeG8tZm9ybSBjb2xDb3VudD1cIjFcIiBbbGFiZWxMb2NhdGlvbl09XCJzaG93Q29sdW1uWFMgPyAnbGVmdCcgOiAndG9wJ1wiPlxuICAgICAgICAgICAgPGR4aS1pdGVtIGRhdGFGaWVsZD1cIm5hbWVcIiBbaXNSZXF1aXJlZF09XCJ0cnVlXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgIDxkeGktaXRlbSBkYXRhRmllbGQ9XCJ1c2Vyc1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICA8ZHhpLWl0ZW0gZGF0YUZpZWxkPVwicGVybWlzc2lvbnNcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgPGR4aS1pdGVtIGRhdGFGaWVsZD1cImFzc2lnbmFibGVCeUFsbFVzZXJzXCI+PC9keGktaXRlbT5cbiAgICAgICAgPC9keG8tZm9ybT5cbiAgICA8L2R4by1lZGl0aW5nPlxuXG4gICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBmaWVsZCBvZiAndXNlcnNFZGl0VGVtcGxhdGUnXCI+XG4gICAgICAgIDxkeC10YWctYm94IHZhbHVlRXhwcj1cImlkXCIgW2Rpc3BsYXlFeHByXT1cImZ1bGxOYW1lXCIgW2RhdGFTb3VyY2VdPVwidXNlcnNcIiBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzZWFyY2hFeHByXT1cImZ1bGxOYW1lXCIgKG9uSW5pdGlhbGl6ZWQpPVwiZ2V0R3JvdXBVc2VyKGZpZWxkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJzZXRHcm91cFVzZXIoZmllbGQsICRldmVudClcIj5cbiAgICAgICAgPC9keC10YWctYm94PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZmllbGQgb2YgJ3Blcm1pc3Npb25zRWRpdFRlbXBsYXRlJ1wiPlxuICAgICAgICA8ZHgtbGlzdCBbZGF0YVNvdXJjZV09XCJwZXJtaXNzaW9uc1wiIGl0ZW1UZW1wbGF0ZT1cInJvd1RlbXBsYXRlXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2VhcmNoRXhwcl09XCJbJ25hbWUnLCAndGFnJ11cIiBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwiaG92ZXJTdGF0ZVBlcm1pc3Npb25cIj5cbiAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgcGVybWlzc2lvbiBvZiAncm93VGVtcGxhdGUnXCI+XG4gICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbdGV4dF09XCJwZXJtaXNzaW9uLm5hbWVcIiAob25Jbml0aWFsaXplZCk9XCJnZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkLCBwZXJtaXNzaW9uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImNoZWNrQm94VG9nZ2xlZChmaWVsZCwgcGVybWlzc2lvbiwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZHgtbGlzdD5cbiAgICA8L2Rpdj5cbjwvY2F1Y2EtZHgtZGF0YS1ncmlkPiJdfQ==
1
+ import { Component, Input } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../shared/services/management-group.service";
5
+ import * as i2 from "../shared/services/management-user.service";
6
+ import * as i3 from "../shared/services/management-permission.service";
7
+ import * as i4 from "@angular/cdk/layout";
8
+ import * as i5 from "devextreme-angular/ui/check-box";
9
+ import * as i6 from "devextreme-angular/core";
10
+ import * as i7 from "devextreme-angular/ui/list";
11
+ import * as i8 from "devextreme-angular/ui/nested";
12
+ import * as i9 from "devextreme-angular/ui/tag-box";
13
+ import * as i10 from "@cauca-911/devextreme";
14
+ import * as i11 from "@ngx-translate/core";
15
+ function CaucaManagementGroupComponent_div_20_Template(rf, ctx) { if (rf & 1) {
16
+ const _r4 = i0.ɵɵgetCurrentView();
17
+ i0.ɵɵelementStart(0, "div")(1, "dx-tag-box", 15);
18
+ i0.ɵɵlistener("onInitialized", function CaucaManagementGroupComponent_div_20_Template_dx_tag_box_onInitialized_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r4); const field_r2 = restoredCtx.$implicit; const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.getGroupUser(field_r2, $event)); })("onValueChanged", function CaucaManagementGroupComponent_div_20_Template_dx_tag_box_onValueChanged_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r4); const field_r2 = restoredCtx.$implicit; const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.setGroupUser(field_r2, $event)); });
19
+ i0.ɵɵelementEnd()();
20
+ } if (rf & 2) {
21
+ const ctx_r0 = i0.ɵɵnextContext();
22
+ i0.ɵɵadvance(1);
23
+ i0.ɵɵproperty("displayExpr", ctx_r0.fullName)("dataSource", ctx_r0.users)("searchEnabled", true)("searchExpr", ctx_r0.fullName);
24
+ } }
25
+ function CaucaManagementGroupComponent_div_21_div_2_Template(rf, ctx) { if (rf & 1) {
26
+ const _r11 = i0.ɵɵgetCurrentView();
27
+ i0.ɵɵelementStart(0, "div")(1, "dx-check-box", 17);
28
+ i0.ɵɵlistener("onInitialized", function CaucaManagementGroupComponent_div_21_div_2_Template_dx_check_box_onInitialized_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r11); const permission_r8 = restoredCtx.$implicit; const field_r6 = i0.ɵɵnextContext().$implicit; const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.getPermissionStatus(field_r6, permission_r8, $event)); })("onValueChanged", function CaucaManagementGroupComponent_div_21_div_2_Template_dx_check_box_onValueChanged_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r11); const permission_r8 = restoredCtx.$implicit; const field_r6 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.checkBoxToggled(field_r6, permission_r8, $event)); });
29
+ i0.ɵɵelementEnd()();
30
+ } if (rf & 2) {
31
+ const permission_r8 = ctx.$implicit;
32
+ i0.ɵɵadvance(1);
33
+ i0.ɵɵproperty("text", permission_r8.name);
34
+ } }
35
+ const _c0 = function () { return ["name", "tag"]; };
36
+ function CaucaManagementGroupComponent_div_21_Template(rf, ctx) { if (rf & 1) {
37
+ i0.ɵɵelementStart(0, "div")(1, "dx-list", 16);
38
+ i0.ɵɵtemplate(2, CaucaManagementGroupComponent_div_21_div_2_Template, 2, 1, "div", 14);
39
+ i0.ɵɵelementEnd()();
40
+ } if (rf & 2) {
41
+ const ctx_r1 = i0.ɵɵnextContext();
42
+ i0.ɵɵadvance(1);
43
+ i0.ɵɵproperty("dataSource", ctx_r1.permissions)("searchEnabled", true)("searchExpr", i0.ɵɵpureFunction0(5, _c0))("hoverStateEnabled", ctx_r1.hoverStatePermission);
44
+ i0.ɵɵadvance(1);
45
+ i0.ɵɵproperty("dxTemplateOf", "rowTemplate");
46
+ } }
47
+ export class CaucaManagementGroupComponent {
48
+ constructor(managementGroupService, managementUserService, managementPermissionService, breakpointObserver) {
49
+ this.managementGroupService = managementGroupService;
50
+ this.managementUserService = managementUserService;
51
+ this.managementPermissionService = managementPermissionService;
52
+ this.showPrintButton = true;
53
+ this.hoverStatePermission = true;
54
+ this.showAssignableByAllUsers = true;
55
+ this.groups = [];
56
+ this.users = [];
57
+ this.permissions = [];
58
+ this.userFullName = {};
59
+ this.showColumn = true;
60
+ this.showColumnXS = true;
61
+ this.translations = [];
62
+ this.calculateUsersCellValue = (e) => {
63
+ const users = (e.users ? e.users : []);
64
+ let usersNames = [];
65
+ users.forEach((user) => {
66
+ const userGroup = this.users.filter((u) => u.id === user.idUser);
67
+ if (userGroup && userGroup[0]) {
68
+ usersNames.push(userGroup[0].firstName + ' ' + userGroup[0].lastName);
69
+ }
70
+ });
71
+ usersNames = usersNames.sort((one, two) => (one < two ? -1 : 1));
72
+ return usersNames.join(', ');
73
+ };
74
+ this.groupNameAlreadyUsedValidation = (e) => this.managementGroupService.hasExistingGroupName(e.data).pipe(map((exist) => !exist)).toPromise();
75
+ breakpointObserver.observe(['(max-width: 1000px)']).subscribe((result) => {
76
+ this.showColumn = !result.matches;
77
+ });
78
+ breakpointObserver.observe(['(max-width: 600px)']).subscribe((result) => {
79
+ this.showColumnXS = !result.matches;
80
+ });
81
+ }
82
+ ngOnInit() {
83
+ this.managementUserService.getAll().subscribe((data) => {
84
+ this.users = data;
85
+ this.users.forEach((user) => {
86
+ if (user.isActive) {
87
+ if (user.firstName !== '' && user.lastName !== '') {
88
+ this.userFullName[user.id] = `${user.firstName} ${user.lastName}`;
89
+ }
90
+ }
91
+ });
92
+ });
93
+ this.managementPermissionService.getAll().subscribe((permissions) => {
94
+ const permissionIndex = permissions.findIndex((c) => c.tag === 'CanAccessPermissions');
95
+ if (permissionIndex !== -1) {
96
+ permissions.splice(permissionIndex, 1);
97
+ }
98
+ permissions.sort((a, b) => {
99
+ if (a.name < b.name) {
100
+ return -1;
101
+ }
102
+ if (a.name > b.name) {
103
+ return 1;
104
+ }
105
+ return 0;
106
+ });
107
+ this.permissions = permissions;
108
+ });
109
+ this.getGroups();
110
+ }
111
+ fullName(data) {
112
+ if (!data) {
113
+ return '';
114
+ }
115
+ return `${data.firstName} ${data.lastName}`;
116
+ }
117
+ getGroupUser(field, e) {
118
+ const users = [];
119
+ if (this.groupUsers) {
120
+ this.groupUsers.forEach((user) => {
121
+ users.push(user.idUser);
122
+ });
123
+ }
124
+ e.component.option('value', users);
125
+ }
126
+ setGroupUser(field, e) {
127
+ const groupUser = [];
128
+ e.value.forEach((idUser) => {
129
+ const groupIndex = (field.data.users || []).findIndex((g) => g.idUser === idUser);
130
+ if (groupIndex === -1) {
131
+ groupUser.push({ idUser, });
132
+ }
133
+ else {
134
+ groupUser.push(field.data.users[groupIndex]);
135
+ }
136
+ });
137
+ field.setValue(JSON.parse(JSON.stringify(groupUser)));
138
+ }
139
+ setGroupPermission(field, e) {
140
+ const groupUser = [];
141
+ e.value.forEach((idUser) => {
142
+ groupUser.push({
143
+ idUser,
144
+ });
145
+ });
146
+ field.setValue(JSON.parse(JSON.stringify(groupUser)));
147
+ }
148
+ getPermissionStatus(field, permission, e) {
149
+ const groupPermission = (field.value || []).find((p) => p.idModulePermission === permission.id);
150
+ if (groupPermission) {
151
+ e.component.option('value', groupPermission.isAllowed);
152
+ }
153
+ else {
154
+ e.component.option('value', undefined);
155
+ }
156
+ }
157
+ checkBoxToggled(field, permission, e) {
158
+ if (e.component.skipOnValueChanged) {
159
+ e.component.skipOnValueChanged = false;
160
+ return;
161
+ }
162
+ if (e.component.setUndefinedNextTime) {
163
+ e.component.setUndefinedNextTime = false;
164
+ e.component.skipOnValueChanged = true;
165
+ e.component.option('value', undefined);
166
+ this.setPermissionStatus(field, permission, undefined);
167
+ return;
168
+ }
169
+ if (e.value === false) {
170
+ e.component.setUndefinedNextTime = true;
171
+ }
172
+ this.setPermissionStatus(field, permission, e.value);
173
+ }
174
+ onRowInserted(e) {
175
+ this.saveGroup(e.data);
176
+ }
177
+ onRowUpdated(e) {
178
+ this.saveGroup(e.data);
179
+ }
180
+ onRowRemoved(e) {
181
+ const group = e.data;
182
+ this.managementGroupService.delete(group.id).subscribe(() => {
183
+ this.getGroups();
184
+ });
185
+ }
186
+ onEditingStart(e) {
187
+ this.groupUsers = e.data.users;
188
+ }
189
+ onInitNewRow() {
190
+ this.groupUsers = [];
191
+ }
192
+ setPermissionStatus(field, permission, value) {
193
+ const groupPermissions = field.value || [];
194
+ const groupIndex = groupPermissions.findIndex((p) => p.idModulePermission === permission.id);
195
+ if (groupIndex > -1) {
196
+ groupPermissions[groupIndex].isAllowed = value;
197
+ }
198
+ else {
199
+ groupPermissions.push({
200
+ idModulePermission: permission.id,
201
+ isAllowed: value,
202
+ });
203
+ }
204
+ field.setValue(JSON.parse(JSON.stringify(groupPermissions)));
205
+ }
206
+ saveGroup(group) {
207
+ this.removePermissionUndefined(group);
208
+ if (group.users) {
209
+ group.users.forEach((userGroup) => {
210
+ userGroup.idGroup = group.id;
211
+ });
212
+ }
213
+ if (group.permissions) {
214
+ group.permissions.forEach((groupPermission) => {
215
+ groupPermission.idGroup = group.id;
216
+ });
217
+ }
218
+ this.managementGroupService.save(group).subscribe(() => {
219
+ this.getGroups();
220
+ });
221
+ this.groupUsers = [];
222
+ }
223
+ removePermissionUndefined(group) {
224
+ group.permissions = group.permissions.filter((permission) => permission.isAllowed !== undefined);
225
+ }
226
+ getGroups() {
227
+ this.managementGroupService.getAll().subscribe((data) => this.groups = data);
228
+ }
229
+ }
230
+ CaucaManagementGroupComponent.ɵfac = function CaucaManagementGroupComponent_Factory(t) { return new (t || CaucaManagementGroupComponent)(i0.ɵɵdirectiveInject(i1.ManagementGroupService), i0.ɵɵdirectiveInject(i2.ManagementUserService), i0.ɵɵdirectiveInject(i3.ManagementPermissionService), i0.ɵɵdirectiveInject(i4.BreakpointObserver)); };
231
+ CaucaManagementGroupComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CaucaManagementGroupComponent, selectors: [["cauca-management-group"]], inputs: { showPrintButton: "showPrintButton", hoverStatePermission: "hoverStatePermission", showAssignableByAllUsers: "showAssignableByAllUsers" }, decls: 22, vars: 36, consts: [["keyExpr", "id", 3, "allowPrint", "dataSource", "onRowInserted", "onInitNewRow", "onRowUpdated", "onEditingStart", "onRowRemoved"], ["dataField", "name", 3, "caption"], ["type", "async", 3, "message", "validationCallback"], ["dataField", "assignableByAllUsers", "dataType", "boolean", 3, "caption", "visible"], ["dataField", "users", "editCellTemplate", "usersEditTemplate", 3, "caption", "calculateCellValue"], ["dataField", "permissions", "editCellTemplate", "permissionsEditTemplate", 3, "caption", "visible"], [3, "enabled"], ["mode", "popup", 3, "allowAdding", "allowUpdating", "allowDeleting", "useIcons"], [3, "showTitle", "title", "fullScreen"], ["colCount", "1", 3, "labelLocation"], ["dataField", "name", 3, "isRequired"], ["dataField", "users"], ["dataField", "permissions"], ["dataField", "assignableByAllUsers", 3, "visible"], [4, "dxTemplate", "dxTemplateOf"], ["valueExpr", "id", 3, "displayExpr", "dataSource", "searchEnabled", "searchExpr", "onInitialized", "onValueChanged"], ["itemTemplate", "rowTemplate", 3, "dataSource", "searchEnabled", "searchExpr", "hoverStateEnabled"], [3, "text", "onInitialized", "onValueChanged"]], template: function CaucaManagementGroupComponent_Template(rf, ctx) { if (rf & 1) {
232
+ i0.ɵɵelementStart(0, "cauca-dx-data-grid", 0);
233
+ i0.ɵɵlistener("onRowInserted", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onRowInserted_0_listener($event) { return ctx.onRowInserted($event); })("onInitNewRow", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onInitNewRow_0_listener() { return ctx.onInitNewRow(); })("onRowUpdated", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onRowUpdated_0_listener($event) { return ctx.onRowUpdated($event); })("onEditingStart", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onEditingStart_0_listener($event) { return ctx.onEditingStart($event); })("onRowRemoved", function CaucaManagementGroupComponent_Template_cauca_dx_data_grid_onRowRemoved_0_listener($event) { return ctx.onRowRemoved($event); });
234
+ i0.ɵɵelementStart(1, "dxi-column", 1);
235
+ i0.ɵɵpipe(2, "translate");
236
+ i0.ɵɵelement(3, "dxi-validation-rule", 2);
237
+ i0.ɵɵpipe(4, "translate");
238
+ i0.ɵɵelementEnd();
239
+ i0.ɵɵelement(5, "dxi-column", 3);
240
+ i0.ɵɵpipe(6, "translate");
241
+ i0.ɵɵelement(7, "dxi-column", 4);
242
+ i0.ɵɵpipe(8, "translate");
243
+ i0.ɵɵelement(9, "dxi-column", 5);
244
+ i0.ɵɵpipe(10, "translate");
245
+ i0.ɵɵelement(11, "dxo-export", 6);
246
+ i0.ɵɵelementStart(12, "dxo-editing", 7);
247
+ i0.ɵɵelement(13, "dxo-popup", 8);
248
+ i0.ɵɵpipe(14, "translate");
249
+ i0.ɵɵelementStart(15, "dxo-form", 9);
250
+ i0.ɵɵelement(16, "dxi-item", 10)(17, "dxi-item", 11)(18, "dxi-item", 12)(19, "dxi-item", 13);
251
+ i0.ɵɵelementEnd()();
252
+ i0.ɵɵtemplate(20, CaucaManagementGroupComponent_div_20_Template, 2, 4, "div", 14);
253
+ i0.ɵɵtemplate(21, CaucaManagementGroupComponent_div_21_Template, 3, 6, "div", 14);
254
+ i0.ɵɵelementEnd();
255
+ } if (rf & 2) {
256
+ i0.ɵɵproperty("allowPrint", ctx.showPrintButton)("dataSource", ctx.groups);
257
+ i0.ɵɵadvance(1);
258
+ i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(2, 24, "management.name"));
259
+ i0.ɵɵadvance(2);
260
+ i0.ɵɵproperty("message", i0.ɵɵpipeBind1(4, 26, "management.groupNameAlreadyUsed"))("validationCallback", ctx.groupNameAlreadyUsedValidation);
261
+ i0.ɵɵadvance(2);
262
+ i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(6, 28, "management.assignableByAllUsers"))("visible", ctx.showAssignableByAllUsers);
263
+ i0.ɵɵadvance(2);
264
+ i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(8, 30, "management.users"))("calculateCellValue", ctx.calculateUsersCellValue);
265
+ i0.ɵɵadvance(2);
266
+ i0.ɵɵproperty("caption", i0.ɵɵpipeBind1(10, 32, "management.permissions"))("visible", false);
267
+ i0.ɵɵadvance(2);
268
+ i0.ɵɵproperty("enabled", false);
269
+ i0.ɵɵadvance(1);
270
+ i0.ɵɵproperty("allowAdding", true)("allowUpdating", true)("allowDeleting", true)("useIcons", true);
271
+ i0.ɵɵadvance(1);
272
+ i0.ɵɵproperty("showTitle", true)("title", i0.ɵɵpipeBind1(14, 34, "management.group"))("fullScreen", !ctx.showColumn);
273
+ i0.ɵɵadvance(2);
274
+ i0.ɵɵproperty("labelLocation", ctx.showColumnXS ? "left" : "top");
275
+ i0.ɵɵadvance(1);
276
+ i0.ɵɵproperty("isRequired", true);
277
+ i0.ɵɵadvance(3);
278
+ i0.ɵɵproperty("visible", ctx.showAssignableByAllUsers);
279
+ i0.ɵɵadvance(1);
280
+ i0.ɵɵproperty("dxTemplateOf", "usersEditTemplate");
281
+ i0.ɵɵadvance(1);
282
+ i0.ɵɵproperty("dxTemplateOf", "permissionsEditTemplate");
283
+ } }, dependencies: [i5.DxCheckBoxComponent, i6.DxTemplateDirective, i7.DxListComponent, i8.DxiItemComponent, i9.DxTagBoxComponent, i10.CaucaDataGridComponent, i8.DxiColumnComponent, i8.DxiValidationRuleComponent, i8.DxoEditingComponent, i8.DxoFormComponent, i8.DxoPopupComponent, i8.DxoExportComponent, i11.TranslatePipe] });
284
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaucaManagementGroupComponent, [{
285
+ type: Component,
286
+ args: [{ selector: 'cauca-management-group', template: "<cauca-dx-data-grid [allowPrint]=\"showPrintButton\" keyExpr=\"id\" [dataSource]=\"groups\"\n (onRowInserted)=\"onRowInserted($event)\" (onInitNewRow)=\"onInitNewRow()\" (onRowUpdated)=\"onRowUpdated($event)\"\n (onEditingStart)=\"onEditingStart($event)\" (onRowRemoved)=\"onRowRemoved($event)\">\n\n <dxi-column dataField=\"name\" [caption]=\"'management.name' | translate\">\n <dxi-validation-rule type=\"async\" [message]=\"'management.groupNameAlreadyUsed' | translate\"\n [validationCallback]=\"groupNameAlreadyUsedValidation\"></dxi-validation-rule>\n </dxi-column>\n <dxi-column dataField=\"assignableByAllUsers\" [caption]=\"'management.assignableByAllUsers' | translate\"\n dataType=\"boolean\" [visible]=\"showAssignableByAllUsers\">\n </dxi-column>\n <dxi-column dataField=\"users\" [caption]=\"'management.users' | translate\" editCellTemplate=\"usersEditTemplate\"\n [calculateCellValue]=\"calculateUsersCellValue\">\n </dxi-column>\n <dxi-column dataField=\"permissions\" [caption]=\"'management.permissions' | translate\" [visible]=\"false\"\n editCellTemplate=\"permissionsEditTemplate\">\n </dxi-column>\n <dxo-export [enabled]=\"false\"></dxo-export>\n <dxo-editing mode=\"popup\" [allowAdding]=\"true\" [allowUpdating]=\"true\" [allowDeleting]=\"true\" [useIcons]=\"true\">\n <dxo-popup [showTitle]=\"true\" [title]=\"'management.group' | translate\" [fullScreen]=\"!showColumn\"></dxo-popup>\n <dxo-form colCount=\"1\" [labelLocation]=\"showColumnXS ? 'left' : 'top'\">\n <dxi-item dataField=\"name\" [isRequired]=\"true\"></dxi-item>\n <dxi-item dataField=\"users\"></dxi-item>\n <dxi-item dataField=\"permissions\"></dxi-item>\n <dxi-item dataField=\"assignableByAllUsers\" [visible]=\"showAssignableByAllUsers\"></dxi-item>\n </dxo-form>\n </dxo-editing>\n\n <div *dxTemplate=\"let field of 'usersEditTemplate'\">\n <dx-tag-box valueExpr=\"id\" [displayExpr]=\"fullName\" [dataSource]=\"users\" [searchEnabled]=\"true\"\n [searchExpr]=\"fullName\" (onInitialized)=\"getGroupUser(field, $event)\"\n (onValueChanged)=\"setGroupUser(field, $event)\">\n </dx-tag-box>\n </div>\n <div *dxTemplate=\"let field of 'permissionsEditTemplate'\">\n <dx-list [dataSource]=\"permissions\" itemTemplate=\"rowTemplate\" [searchEnabled]=\"true\"\n [searchExpr]=\"['name', 'tag']\" [hoverStateEnabled]=\"hoverStatePermission\">\n <div *dxTemplate=\"let permission of 'rowTemplate'\">\n <dx-check-box [text]=\"permission.name\" (onInitialized)=\"getPermissionStatus(field, permission, $event)\"\n (onValueChanged)=\"checkBoxToggled(field, permission, $event)\">\n </dx-check-box>\n </div>\n </dx-list>\n </div>\n</cauca-dx-data-grid>" }]
287
+ }], function () { return [{ type: i1.ManagementGroupService }, { type: i2.ManagementUserService }, { type: i3.ManagementPermissionService }, { type: i4.BreakpointObserver }]; }, { showPrintButton: [{
288
+ type: Input
289
+ }], hoverStatePermission: [{
290
+ type: Input
291
+ }], showAssignableByAllUsers: [{
292
+ type: Input
293
+ }] }); })();
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1Y2EtbWFuYWdlbWVudC1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYXVjYS1tYW5hZ2VtZW50L3NyYy9saWIvY2F1Y2EtbWFuYWdlbWVudC1ncm91cC9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhdWNhLW1hbmFnZW1lbnQvc3JjL2xpYi9jYXVjYS1tYW5hZ2VtZW50LWdyb3VwL2NhdWNhLW1hbmFnZW1lbnQtZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7SUMwQmpDLDJCQUFvRCxxQkFBQTtJQUVwQixpUUFBaUIsZUFBQSxxQ0FBMkIsQ0FBQSxJQUFDLHNQQUNuRCxlQUFBLHFDQUEyQixDQUFBLElBRHdCO0lBRXpFLGlCQUFhLEVBQUE7OztJQUhjLGVBQXdCO0lBQXhCLDZDQUF3Qiw0QkFBQSx1QkFBQSwrQkFBQTs7OztJQVEvQywyQkFBbUQsdUJBQUE7SUFDUiw4VEFBaUIsZUFBQSwyREFBOEMsQ0FBQSxJQUFDLG9UQUNqRixlQUFBLHdEQUEwQyxDQUFBLElBRHVDO0lBRXZHLGlCQUFlLEVBQUE7OztJQUZELGVBQXdCO0lBQXhCLHlDQUF3Qjs7OztJQUpsRCwyQkFBMEQsa0JBQUE7SUFHbEQsc0ZBSU07SUFDVixpQkFBVSxFQUFBOzs7SUFQRCxlQUEwQjtJQUExQiwrQ0FBMEIsdUJBQUEsMENBQUEsa0RBQUE7SUFFRSxlQUFnQjtJQUFoQiw0Q0FBZ0I7O0FEcEI3RCxNQUFNLE9BQU8sNkJBQTZCO0lBa0J0QyxZQUNZLHNCQUE4QyxFQUM5QyxxQkFBNEMsRUFDNUMsMkJBQXdE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LDBCQUFBO1FBSWpCLGVBQXlDO1FBQXpDLGtFQUF5QztRQUNoQyxlQUF5RDtRQUF6RCxrRkFBeUQsMERBQUE7UUFHbEQsZUFBeUQ7UUFBekQsa0ZBQXlELHlDQUFBO1FBR3hFLGVBQTBDO1FBQTFDLG1FQUEwQyxtREFBQTtRQUdwQyxlQUFnRDtRQUFoRCwwRUFBZ0Qsa0JBQUE7UUFHeEUsZUFBaUI7UUFBakIsK0JBQWlCO1FBQ0gsZUFBb0I7UUFBcEIsa0NBQW9CLHVCQUFBLHVCQUFBLGtCQUFBO1FBQy9CLGVBQWtCO1FBQWxCLGdDQUFrQixxREFBQSwrQkFBQTtRQUNOLGVBQStDO1FBQS9DLGlFQUErQztRQUN2QyxlQUFtQjtRQUFuQixpQ0FBbUI7UUFHSCxlQUFvQztRQUFwQyxzREFBb0M7UUFJM0QsZUFBc0I7UUFBdEIsa0RBQXNCO1FBTXRCLGVBQTRCO1FBQTVCLHdEQUE0Qjs7dUZEakIvQyw2QkFBNkI7Y0FMekMsU0FBUzsyQkFDSSx3QkFBd0I7d0xBTTNCLGVBQWU7a0JBRHJCLEtBQUs7WUFHQyxvQkFBb0I7a0JBRDFCLEtBQUs7WUFHQyx3QkFBd0I7a0JBRDlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVXNlck1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy91c2VyLW1vZGVsJztcbmltcG9ydCB7IFVzZXJHcm91cE1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy91c2VyLWdyb3VwLW1vZGVsJztcbmltcG9ydCB7IEdyb3VwTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL2dyb3VwLW1vZGVsJztcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbk1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9ncm91cC1wZXJtaXNzaW9uLW1vZGVsJztcbmltcG9ydCB7IE1hbmFnZW1lbnRHcm91cFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2VydmljZXMvbWFuYWdlbWVudC1ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hbmFnZW1lbnRVc2VyU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9zZXJ2aWNlcy9tYW5hZ2VtZW50LXVzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL3Blcm1pc3Npb24tbW9kZWwnO1xuaW1wb3J0IHsgTWFuYWdlbWVudFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL3NlcnZpY2VzL21hbmFnZW1lbnQtcGVybWlzc2lvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjYXVjYS1tYW5hZ2VtZW50LWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2F1Y2EtbWFuYWdlbWVudC1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2F1Y2EtbWFuYWdlbWVudC1ncm91cC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhdWNhTWFuYWdlbWVudEdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93UHJpbnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhvdmVyU3RhdGVQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93QXNzaWduYWJsZUJ5QWxsVXNlcnMgPSB0cnVlO1xuXG4gICAgcHVibGljIGdyb3VwczogR3JvdXBNb2RlbFtdID0gW107XG4gICAgcHVibGljIHVzZXJzOiBVc2VyTW9kZWxbXSA9IFtdO1xuICAgIHB1YmxpYyBwZXJtaXNzaW9uczogUGVybWlzc2lvbk1vZGVsW10gPSBbXTtcbiAgICBwdWJsaWMgdXNlckZ1bGxOYW1lOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgc2hvd0NvbHVtbiA9IHRydWU7XG4gICAgcHVibGljIHNob3dDb2x1bW5YUyA9IHRydWU7XG4gICAgcHVibGljIHRyYW5zbGF0aW9uczogYW55ID0gW107XG5cbiAgICBwcml2YXRlIGdyb3VwVXNlcnM6IGFueTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBtYW5hZ2VtZW50R3JvdXBTZXJ2aWNlOiBNYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1hbmFnZW1lbnRVc2VyU2VydmljZTogTWFuYWdlbWVudFVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1hbmFnZW1lbnRQZXJtaXNzaW9uU2VydmljZTogTWFuYWdlbWVudFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgICAgICBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICApIHtcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoWycobWF4LXdpZHRoOiAxMDAwcHgpJ10pLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbHVtbiA9ICFyZXN1bHQubWF0Y2hlcztcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFsnKG1heC13aWR0aDogNjAwcHgpJ10pLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbHVtblhTID0gIXJlc3VsdC5tYXRjaGVzO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFuYWdlbWVudFVzZXJTZXJ2aWNlLmdldEFsbDxVc2VyTW9kZWw+KCkuc3Vic2NyaWJlKChkYXRhOiBVc2VyTW9kZWxbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2VycyA9IGRhdGE7XG4gICAgICAgICAgICB0aGlzLnVzZXJzLmZvckVhY2goKHVzZXI6IFVzZXJNb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLmZpcnN0TmFtZSAhPT0gJycgJiYgdXNlci5sYXN0TmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckZ1bGxOYW1lW3VzZXIuaWRdICA9IGAke3VzZXIuZmlyc3ROYW1lfSAke3VzZXIubGFzdE5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50UGVybWlzc2lvblNlcnZpY2UuZ2V0QWxsKCkuc3Vic2NyaWJlKChwZXJtaXNzaW9uczogUGVybWlzc2lvbk1vZGVsW10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25JbmRleCA9IHBlcm1pc3Npb25zLmZpbmRJbmRleCgoYzogUGVybWlzc2lvbk1vZGVsKSA9PiBjLnRhZyA9PT0gJ0NhbkFjY2Vzc1Blcm1pc3Npb25zJyk7XG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zLnNwbGljZShwZXJtaXNzaW9uSW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGVybWlzc2lvbnMuc29ydCgoYTogUGVybWlzc2lvbk1vZGVsLCBiOiBQZXJtaXNzaW9uTW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYS5uYW1lIDwgYi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGEubmFtZSA+IGIubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZ1bGxOYW1lKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke2RhdGEuZmlyc3ROYW1lfSAke2RhdGEubGFzdE5hbWV9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0R3JvdXBVc2VyKGZpZWxkOiBhbnksIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCB1c2Vyczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBVc2Vycykge1xuICAgICAgICAgICAgdGhpcy5ncm91cFVzZXJzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHVzZXJzLnB1c2godXNlci5pZFVzZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZS5jb21wb25lbnQub3B0aW9uKCd2YWx1ZScsIHVzZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0R3JvdXBVc2VyKGZpZWxkOiBhbnksIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cFVzZXI6IFVzZXJHcm91cE1vZGVsW10gPSBbXTtcblxuICAgICAgICBlLnZhbHVlLmZvckVhY2goKGlkVXNlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cEluZGV4ID0gKGZpZWxkLmRhdGEudXNlcnMgfHwgW10pLmZpbmRJbmRleCgoZzogYW55KSA9PiBnLmlkVXNlciA9PT0gaWRVc2VyKTtcblxuICAgICAgICAgICAgaWYgKGdyb3VwSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBVc2VyLnB1c2goeyBpZFVzZXIsIH0gYXMgVXNlckdyb3VwTW9kZWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cFVzZXIucHVzaChmaWVsZC5kYXRhLnVzZXJzW2dyb3VwSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZmllbGQuc2V0VmFsdWUoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShncm91cFVzZXIpKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEdyb3VwUGVybWlzc2lvbihmaWVsZDogYW55LCBlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZ3JvdXBVc2VyOiBVc2VyR3JvdXBNb2RlbFtdID0gW107XG5cbiAgICAgICAgZS52YWx1ZS5mb3JFYWNoKChpZFVzZXI6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgZ3JvdXBVc2VyLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkVXNlcixcbiAgICAgICAgICAgIH0gYXMgVXNlckdyb3VwTW9kZWwpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmaWVsZC5zZXRWYWx1ZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyb3VwVXNlcikpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGVybWlzc2lvblN0YXR1cyhmaWVsZDogYW55LCBwZXJtaXNzaW9uOiBhbnksIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cFBlcm1pc3Npb24gPSAoZmllbGQudmFsdWUgfHwgW10pLmZpbmQoKHA6IGFueSkgPT4gcC5pZE1vZHVsZVBlcm1pc3Npb24gPT09IHBlcm1pc3Npb24uaWQpO1xuXG4gICAgICAgIGlmIChncm91cFBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgIGUuY29tcG9uZW50Lm9wdGlvbigndmFsdWUnLCBncm91cFBlcm1pc3Npb24uaXNBbGxvd2VkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGUuY29tcG9uZW50Lm9wdGlvbigndmFsdWUnLCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrQm94VG9nZ2xlZChmaWVsZDogYW55LCBwZXJtaXNzaW9uOiBhbnksIGU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZS5jb21wb25lbnQuc2tpcE9uVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5za2lwT25WYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZS5jb21wb25lbnQuc2V0VW5kZWZpbmVkTmV4dFRpbWUpIHtcbiAgICAgICAgICAgIGUuY29tcG9uZW50LnNldFVuZGVmaW5lZE5leHRUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5za2lwT25WYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgZS5jb21wb25lbnQub3B0aW9uKCd2YWx1ZScsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB0aGlzLnNldFBlcm1pc3Npb25TdGF0dXMoZmllbGQsIHBlcm1pc3Npb24sIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGUudmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBlLmNvbXBvbmVudC5zZXRVbmRlZmluZWROZXh0VGltZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBlcm1pc3Npb25TdGF0dXMoZmllbGQsIHBlcm1pc3Npb24sIGUudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd0luc2VydGVkKGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVHcm91cChlLmRhdGEgYXMgR3JvdXBNb2RlbCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93VXBkYXRlZChlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlR3JvdXAoZS5kYXRhIGFzIEdyb3VwTW9kZWwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvd1JlbW92ZWQoZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gKGUuZGF0YSBhcyBHcm91cE1vZGVsKTtcbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLmRlbGV0ZShncm91cC5pZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0R3JvdXBzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjdWxhdGVVc2Vyc0NlbGxWYWx1ZSA9IChlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgICBjb25zdCB1c2VycyA9IChlLnVzZXJzID8gZS51c2VycyBhcyBVc2VyR3JvdXBNb2RlbFtdIDogW10pO1xuICAgICAgICBsZXQgdXNlcnNOYW1lczogYW55W10gPSBbXTtcbiAgICAgICAgdXNlcnMuZm9yRWFjaCgodXNlcjogVXNlckdyb3VwTW9kZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJHcm91cCA9IHRoaXMudXNlcnMuZmlsdGVyKCh1OiBVc2VyTW9kZWwpID0+IHUuaWQgPT09IHVzZXIuaWRVc2VyKTtcbiAgICAgICAgICAgIGlmICh1c2VyR3JvdXAgJiYgdXNlckdyb3VwWzBdKSB7XG4gICAgICAgICAgICAgICAgdXNlcnNOYW1lcy5wdXNoKHVzZXJHcm91cFswXS5maXJzdE5hbWUgKyAnICcgKyB1c2VyR3JvdXBbMF0ubGFzdE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdXNlcnNOYW1lcyA9IHVzZXJzTmFtZXMuc29ydCgob25lOiBzdHJpbmcsIHR3bzogc3RyaW5nKSA9PiAob25lIDwgdHdvID8gLTEgOiAxKSk7XG4gICAgICAgIHJldHVybiB1c2Vyc05hbWVzLmpvaW4oJywgJyk7XG4gICAgfTtcblxuICAgIHB1YmxpYyBvbkVkaXRpbmdTdGFydChlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzID0gZS5kYXRhLnVzZXJzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkluaXROZXdSb3coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ3JvdXBVc2VycyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cE5hbWVBbHJlYWR5VXNlZFZhbGlkYXRpb24gPSAoZTogYW55KTogUHJvbWlzZTxib29sZWFuPiA9PiB0aGlzLm1hbmFnZW1lbnRHcm91cFNlcnZpY2UuaGFzRXhpc3RpbmdHcm91cE5hbWUoZS5kYXRhKS5waXBlKFxuICAgICAgICAgICAgbWFwKChleGlzdDogYm9vbGVhbikgPT4gIWV4aXN0KVxuICAgICAgICApLnRvUHJvbWlzZSgpO1xuXG4gICAgcHJpdmF0ZSBzZXRQZXJtaXNzaW9uU3RhdHVzKGZpZWxkOiBhbnksIHBlcm1pc3Npb246IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cFBlcm1pc3Npb25zID0gZmllbGQudmFsdWUgfHwgW107XG4gICAgICAgIGNvbnN0IGdyb3VwSW5kZXggPSBncm91cFBlcm1pc3Npb25zLmZpbmRJbmRleCgocDogR3JvdXBQZXJtaXNzaW9uTW9kZWwpID0+IHAuaWRNb2R1bGVQZXJtaXNzaW9uID09PSBwZXJtaXNzaW9uLmlkKTtcblxuICAgICAgICBpZiAoZ3JvdXBJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBncm91cFBlcm1pc3Npb25zW2dyb3VwSW5kZXhdLmlzQWxsb3dlZCA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ3JvdXBQZXJtaXNzaW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZE1vZHVsZVBlcm1pc3Npb246IHBlcm1pc3Npb24uaWQsXG4gICAgICAgICAgICAgICAgaXNBbGxvd2VkOiB2YWx1ZSxcbiAgICAgICAgICAgIH0gYXMgR3JvdXBQZXJtaXNzaW9uTW9kZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGQuc2V0VmFsdWUoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShncm91cFBlcm1pc3Npb25zKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZUdyb3VwKGdyb3VwOiBHcm91cE1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlUGVybWlzc2lvblVuZGVmaW5lZChncm91cCk7XG4gICAgICAgIGlmIChncm91cC51c2Vycykge1xuICAgICAgICAgICAgZ3JvdXAudXNlcnMuZm9yRWFjaCgodXNlckdyb3VwOiBVc2VyR3JvdXBNb2RlbCkgPT4ge1xuICAgICAgICAgICAgICAgIHVzZXJHcm91cC5pZEdyb3VwID0gZ3JvdXAuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ3JvdXAucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGdyb3VwLnBlcm1pc3Npb25zLmZvckVhY2goKGdyb3VwUGVybWlzc2lvbjogR3JvdXBQZXJtaXNzaW9uTW9kZWwpID0+IHtcbiAgICAgICAgICAgICAgICBncm91cFBlcm1pc3Npb24uaWRHcm91cCA9IGdyb3VwLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYW5hZ2VtZW50R3JvdXBTZXJ2aWNlLnNhdmUoZ3JvdXApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldEdyb3VwcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncm91cFVzZXJzID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVQZXJtaXNzaW9uVW5kZWZpbmVkKGdyb3VwOiBHcm91cE1vZGVsKTogdm9pZCB7XG4gICAgICAgIGdyb3VwLnBlcm1pc3Npb25zID0gZ3JvdXAucGVybWlzc2lvbnMuZmlsdGVyKChwZXJtaXNzaW9uOiBHcm91cFBlcm1pc3Npb25Nb2RlbCkgPT4gcGVybWlzc2lvbi5pc0FsbG93ZWQgIT09IHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRHcm91cHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFuYWdlbWVudEdyb3VwU2VydmljZS5nZXRBbGwoKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5ncm91cHMgPSBkYXRhKTtcbiAgICB9XG59XG4iLCI8Y2F1Y2EtZHgtZGF0YS1ncmlkIFthbGxvd1ByaW50XT1cInNob3dQcmludEJ1dHRvblwiIGtleUV4cHI9XCJpZFwiIFtkYXRhU291cmNlXT1cImdyb3Vwc1wiXG4gICAgKG9uUm93SW5zZXJ0ZWQpPVwib25Sb3dJbnNlcnRlZCgkZXZlbnQpXCIgKG9uSW5pdE5ld1Jvdyk9XCJvbkluaXROZXdSb3coKVwiIChvblJvd1VwZGF0ZWQpPVwib25Sb3dVcGRhdGVkKCRldmVudClcIlxuICAgIChvbkVkaXRpbmdTdGFydCk9XCJvbkVkaXRpbmdTdGFydCgkZXZlbnQpXCIgKG9uUm93UmVtb3ZlZCk9XCJvblJvd1JlbW92ZWQoJGV2ZW50KVwiPlxuXG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwibmFtZVwiIFtjYXB0aW9uXT1cIidtYW5hZ2VtZW50Lm5hbWUnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgIDxkeGktdmFsaWRhdGlvbi1ydWxlIHR5cGU9XCJhc3luY1wiIFttZXNzYWdlXT1cIidtYW5hZ2VtZW50Lmdyb3VwTmFtZUFscmVhZHlVc2VkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbdmFsaWRhdGlvbkNhbGxiYWNrXT1cImdyb3VwTmFtZUFscmVhZHlVc2VkVmFsaWRhdGlvblwiPjwvZHhpLXZhbGlkYXRpb24tcnVsZT5cbiAgICA8L2R4aS1jb2x1bW4+XG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiYXNzaWduYWJsZUJ5QWxsVXNlcnNcIiBbY2FwdGlvbl09XCInbWFuYWdlbWVudC5hc3NpZ25hYmxlQnlBbGxVc2VycycgfCB0cmFuc2xhdGVcIlxuICAgICAgICBkYXRhVHlwZT1cImJvb2xlYW5cIiBbdmlzaWJsZV09XCJzaG93QXNzaWduYWJsZUJ5QWxsVXNlcnNcIj5cbiAgICA8L2R4aS1jb2x1bW4+XG4gICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidXNlcnNcIiBbY2FwdGlvbl09XCInbWFuYWdlbWVudC51c2VycycgfCB0cmFuc2xhdGVcIiBlZGl0Q2VsbFRlbXBsYXRlPVwidXNlcnNFZGl0VGVtcGxhdGVcIlxuICAgICAgICBbY2FsY3VsYXRlQ2VsbFZhbHVlXT1cImNhbGN1bGF0ZVVzZXJzQ2VsbFZhbHVlXCI+XG4gICAgPC9keGktY29sdW1uPlxuICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInBlcm1pc3Npb25zXCIgW2NhcHRpb25dPVwiJ21hbmFnZW1lbnQucGVybWlzc2lvbnMnIHwgdHJhbnNsYXRlXCIgW3Zpc2libGVdPVwiZmFsc2VcIlxuICAgICAgICBlZGl0Q2VsbFRlbXBsYXRlPVwicGVybWlzc2lvbnNFZGl0VGVtcGxhdGVcIj5cbiAgICA8L2R4aS1jb2x1bW4+XG4gICAgPGR4by1leHBvcnQgW2VuYWJsZWRdPVwiZmFsc2VcIj48L2R4by1leHBvcnQ+XG4gICAgPGR4by1lZGl0aW5nIG1vZGU9XCJwb3B1cFwiIFthbGxvd0FkZGluZ109XCJ0cnVlXCIgW2FsbG93VXBkYXRpbmddPVwidHJ1ZVwiIFthbGxvd0RlbGV0aW5nXT1cInRydWVcIiBbdXNlSWNvbnNdPVwidHJ1ZVwiPlxuICAgICAgICA8ZHhvLXBvcHVwIFtzaG93VGl0bGVdPVwidHJ1ZVwiIFt0aXRsZV09XCInbWFuYWdlbWVudC5ncm91cCcgfCB0cmFuc2xhdGVcIiBbZnVsbFNjcmVlbl09XCIhc2hvd0NvbHVtblwiPjwvZHhvLXBvcHVwPlxuICAgICAgICA8ZHhvLWZvcm0gY29sQ291bnQ9XCIxXCIgW2xhYmVsTG9jYXRpb25dPVwic2hvd0NvbHVtblhTID8gJ2xlZnQnIDogJ3RvcCdcIj5cbiAgICAgICAgICAgIDxkeGktaXRlbSBkYXRhRmllbGQ9XCJuYW1lXCIgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICA8ZHhpLWl0ZW0gZGF0YUZpZWxkPVwidXNlcnNcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgPGR4aS1pdGVtIGRhdGFGaWVsZD1cInBlcm1pc3Npb25zXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgIDxkeGktaXRlbSBkYXRhRmllbGQ9XCJhc3NpZ25hYmxlQnlBbGxVc2Vyc1wiIFt2aXNpYmxlXT1cInNob3dBc3NpZ25hYmxlQnlBbGxVc2Vyc1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgIDwvZHhvLWZvcm0+XG4gICAgPC9keG8tZWRpdGluZz5cblxuICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZmllbGQgb2YgJ3VzZXJzRWRpdFRlbXBsYXRlJ1wiPlxuICAgICAgICA8ZHgtdGFnLWJveCB2YWx1ZUV4cHI9XCJpZFwiIFtkaXNwbGF5RXhwcl09XCJmdWxsTmFtZVwiIFtkYXRhU291cmNlXT1cInVzZXJzXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2VhcmNoRXhwcl09XCJmdWxsTmFtZVwiIChvbkluaXRpYWxpemVkKT1cImdldEdyb3VwVXNlcihmaWVsZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwic2V0R3JvdXBVc2VyKGZpZWxkLCAkZXZlbnQpXCI+XG4gICAgICAgIDwvZHgtdGFnLWJveD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGZpZWxkIG9mICdwZXJtaXNzaW9uc0VkaXRUZW1wbGF0ZSdcIj5cbiAgICAgICAgPGR4LWxpc3QgW2RhdGFTb3VyY2VdPVwicGVybWlzc2lvbnNcIiBpdGVtVGVtcGxhdGU9XCJyb3dUZW1wbGF0ZVwiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgW3NlYXJjaEV4cHJdPVwiWyduYW1lJywgJ3RhZyddXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cImhvdmVyU3RhdGVQZXJtaXNzaW9uXCI+XG4gICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IHBlcm1pc3Npb24gb2YgJ3Jvd1RlbXBsYXRlJ1wiPlxuICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggW3RleHRdPVwicGVybWlzc2lvbi5uYW1lXCIgKG9uSW5pdGlhbGl6ZWQpPVwiZ2V0UGVybWlzc2lvblN0YXR1cyhmaWVsZCwgcGVybWlzc2lvbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJjaGVja0JveFRvZ2dsZWQoZmllbGQsIHBlcm1pc3Npb24sICRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2R4LWxpc3Q+XG4gICAgPC9kaXY+XG48L2NhdWNhLWR4LWRhdGEtZ3JpZD4iXX0=