tin-spa 14.4.2 → 14.10.2

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 (160) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/classes/Classes.mjs +57 -32
  3. package/esm2020/lib/classes/LibClasses.mjs +2 -1
  4. package/esm2020/lib/classes/TinCore.mjs +194 -44
  5. package/esm2020/lib/components/alert/alert.component.mjs +12 -6
  6. package/esm2020/lib/components/attach/attach.component.mjs +49 -33
  7. package/esm2020/lib/components/capsules/capsules.component.mjs +63 -0
  8. package/esm2020/lib/components/cards/cards.component.mjs +103 -0
  9. package/esm2020/lib/components/date/date.component.mjs +4 -4
  10. package/esm2020/lib/components/email/email.component.mjs +19 -17
  11. package/esm2020/lib/components/form/form.component.mjs +142 -57
  12. package/esm2020/lib/components/html/html.component.mjs +34 -0
  13. package/esm2020/lib/components/label/label.component.mjs +6 -3
  14. package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +3 -3
  15. package/esm2020/lib/components/money/money.component.mjs +26 -9
  16. package/esm2020/lib/components/multi-select/multi-select.component.mjs +165 -0
  17. package/esm2020/lib/components/multi-text/multi-text.component.mjs +208 -0
  18. package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +31 -27
  19. package/esm2020/lib/components/notes/notes.component.mjs +62 -0
  20. package/esm2020/lib/components/number/number.component.mjs +23 -8
  21. package/esm2020/lib/components/option/option.component.mjs +36 -14
  22. package/esm2020/lib/components/page/page.component.mjs +101 -0
  23. package/esm2020/lib/components/search/search.component.mjs +10 -5
  24. package/esm2020/lib/components/select/select.component.mjs +56 -129
  25. package/esm2020/lib/components/select-bitwise/select-bitwise.component.mjs +87 -0
  26. package/esm2020/lib/components/select-common/select-common.component.mjs +189 -0
  27. package/esm2020/lib/components/select-internal/select-internal.component.mjs +75 -0
  28. package/esm2020/lib/components/select-lite/select-lite.component.mjs +18 -0
  29. package/esm2020/lib/components/steps/steps.component.mjs +83 -61
  30. package/esm2020/lib/components/suffix/suffix.component.mjs +70 -0
  31. package/esm2020/lib/components/table/detailsDialog.component.mjs +169 -37
  32. package/esm2020/lib/components/table/table.component.mjs +136 -111
  33. package/esm2020/lib/components/table-action/table-action.component.mjs +42 -8
  34. package/esm2020/lib/components/table-header/table-header.component.mjs +12 -8
  35. package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +169 -35
  36. package/esm2020/lib/components/table-internal/table-internal.component.mjs +138 -112
  37. package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +371 -0
  38. package/esm2020/lib/components/table-lite/table-lite.component.mjs +441 -0
  39. package/esm2020/lib/components/table-row/table-row.component.mjs +23 -4
  40. package/esm2020/lib/components/text/text.component.mjs +85 -40
  41. package/esm2020/lib/components/tiles/tiles.component.mjs +32 -20
  42. package/esm2020/lib/components/viewer/viewer.component.mjs +7 -3
  43. package/esm2020/lib/components/viewer/viewerDialog.component.mjs +20 -13
  44. package/esm2020/lib/modules/admin/admin-routing.module.mjs +11 -1
  45. package/esm2020/lib/pages/accounts/accountDialog.component.mjs +1 -1
  46. package/esm2020/lib/pages/app-models/app-models.component.mjs +56 -0
  47. package/esm2020/lib/pages/approvals/approvals.component.mjs +19 -0
  48. package/esm2020/lib/pages/approvals-config/approvals-config.component.mjs +165 -0
  49. package/esm2020/lib/pages/bug/bug.component.mjs +3 -3
  50. package/esm2020/lib/pages/change-password/change-password.component.mjs +1 -1
  51. package/esm2020/lib/pages/create-account/create-account.component.mjs +1 -1
  52. package/esm2020/lib/pages/customers/customers.component.mjs +9 -48
  53. package/esm2020/lib/pages/departments/departments.component.mjs +2 -4
  54. package/esm2020/lib/pages/employees/employees.component.mjs +3 -4
  55. package/esm2020/lib/pages/grades/grades.component.mjs +3 -3
  56. package/esm2020/lib/pages/inventory/inventory.component.mjs +3 -3
  57. package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +1 -1
  58. package/esm2020/lib/pages/invitations-table/invitations-table.component.mjs +11 -10
  59. package/esm2020/lib/pages/login/login.component.mjs +52 -14
  60. package/esm2020/lib/pages/logs/logs.component.mjs +27 -22
  61. package/esm2020/lib/pages/membership/membership.component.mjs +15 -19
  62. package/esm2020/lib/pages/notifications/notifications.component.mjs +82 -6
  63. package/esm2020/lib/pages/notifications-config/notifications-config.component.mjs +113 -0
  64. package/esm2020/lib/pages/plans/plans.component.mjs +16 -19
  65. package/esm2020/lib/pages/positions/positions.component.mjs +4 -4
  66. package/esm2020/lib/pages/profile/profile.component.mjs +4 -3
  67. package/esm2020/lib/pages/recover-account/recover-account.component.mjs +1 -1
  68. package/esm2020/lib/pages/roles/addRoleDialog.component.mjs +2 -2
  69. package/esm2020/lib/pages/roles/roles.component.mjs +77 -17
  70. package/esm2020/lib/pages/settings/settings.component.mjs +2 -11
  71. package/esm2020/lib/pages/signup/signup.component.mjs +1 -1
  72. package/esm2020/lib/pages/suppliers/suppliers.component.mjs +3 -31
  73. package/esm2020/lib/pages/tasks/tasks.component.mjs +9 -9
  74. package/esm2020/lib/pages/tenant-settings/tenant-settings.component.mjs +145 -72
  75. package/esm2020/lib/pages/tenants/tenants.component.mjs +10 -10
  76. package/esm2020/lib/pages/transactions/transactDialog.component.mjs +1 -1
  77. package/esm2020/lib/pages/transactions/transactions.component.mjs +3 -3
  78. package/esm2020/lib/pages/users/users.component.mjs +115 -92
  79. package/esm2020/lib/pages/welcome/welcome.component.mjs +9 -9
  80. package/esm2020/lib/select-context.directive.mjs +23 -0
  81. package/esm2020/lib/services/button.service.mjs +90 -30
  82. package/esm2020/lib/services/csv.service.mjs +1 -1
  83. package/esm2020/lib/services/datalib.service.mjs +504 -76
  84. package/esm2020/lib/services/dialog.service.mjs +24 -7
  85. package/esm2020/lib/services/notifications.service.mjs +33 -0
  86. package/esm2020/lib/services/table-config.service.mjs +55 -7
  87. package/esm2020/lib/tin-spa.module.mjs +46 -11
  88. package/esm2020/public-api.mjs +8 -1
  89. package/fesm2015/tin-spa.mjs +6158 -2594
  90. package/fesm2015/tin-spa.mjs.map +1 -1
  91. package/fesm2020/tin-spa.mjs +6143 -2518
  92. package/fesm2020/tin-spa.mjs.map +1 -1
  93. package/lib/classes/Classes.d.ts +231 -127
  94. package/lib/classes/LibClasses.d.ts +1 -0
  95. package/lib/classes/TinCore.d.ts +11 -3
  96. package/lib/components/attach/attach.component.d.ts +13 -6
  97. package/lib/components/capsules/capsules.component.d.ts +26 -0
  98. package/lib/components/cards/cards.component.d.ts +39 -0
  99. package/lib/components/email/email.component.d.ts +4 -3
  100. package/lib/components/form/form.component.d.ts +20 -11
  101. package/lib/components/html/html.component.d.ts +16 -0
  102. package/lib/components/label/label.component.d.ts +2 -1
  103. package/lib/components/money/money.component.d.ts +8 -1
  104. package/lib/components/multi-select/multi-select.component.d.ts +47 -0
  105. package/lib/components/multi-text/multi-text.component.d.ts +56 -0
  106. package/lib/components/nav-menu/nav-menu.component.d.ts +6 -2
  107. package/lib/components/notes/notes.component.d.ts +19 -0
  108. package/lib/components/number/number.component.d.ts +7 -1
  109. package/lib/components/option/option.component.d.ts +10 -2
  110. package/lib/components/page/page.component.d.ts +38 -0
  111. package/lib/components/search/search.component.d.ts +3 -1
  112. package/lib/components/select/select.component.d.ts +16 -37
  113. package/lib/components/select-bitwise/select-bitwise.component.d.ts +31 -0
  114. package/lib/components/select-common/select-common.component.d.ts +50 -0
  115. package/lib/components/select-internal/select-internal.component.d.ts +23 -0
  116. package/lib/components/select-lite/select-lite.component.d.ts +8 -0
  117. package/lib/components/steps/steps.component.d.ts +18 -9
  118. package/lib/components/suffix/suffix.component.d.ts +23 -0
  119. package/lib/components/table/detailsDialog.component.d.ts +24 -7
  120. package/lib/components/table/table.component.d.ts +15 -9
  121. package/lib/components/table-action/table-action.component.d.ts +4 -1
  122. package/lib/components/table-header/table-header.component.d.ts +3 -1
  123. package/lib/components/table-internal/detailsDialog-internal.component.d.ts +24 -7
  124. package/lib/components/table-internal/table-internal.component.d.ts +15 -9
  125. package/lib/components/table-lite/detailsDialog-lite.component.d.ts +81 -0
  126. package/lib/components/table-lite/table-lite.component.d.ts +91 -0
  127. package/lib/components/table-row/table-row.component.d.ts +4 -1
  128. package/lib/components/text/text.component.d.ts +16 -7
  129. package/lib/components/tiles/tiles.component.d.ts +4 -3
  130. package/lib/components/viewer/viewerDialog.component.d.ts +3 -1
  131. package/lib/pages/app-models/app-models.component.d.ts +15 -0
  132. package/lib/pages/approvals/approvals.component.d.ts +10 -0
  133. package/lib/pages/approvals-config/approvals-config.component.d.ts +24 -0
  134. package/lib/pages/customers/customers.component.d.ts +2 -8
  135. package/lib/pages/invitations-table/invitations-table.component.d.ts +1 -1
  136. package/lib/pages/login/login.component.d.ts +7 -1
  137. package/lib/pages/logs/logs.component.d.ts +2 -6
  138. package/lib/pages/membership/membership.component.d.ts +2 -6
  139. package/lib/pages/notifications/notifications.component.d.ts +9 -1
  140. package/lib/pages/notifications-config/notifications-config.component.d.ts +17 -0
  141. package/lib/pages/plans/plans.component.d.ts +2 -6
  142. package/lib/pages/roles/roles.component.d.ts +14 -2
  143. package/lib/pages/suppliers/suppliers.component.d.ts +1 -4
  144. package/lib/pages/tasks/tasks.component.d.ts +1 -1
  145. package/lib/pages/tenant-settings/tenant-settings.component.d.ts +12 -7
  146. package/lib/pages/tenants/tenants.component.d.ts +2 -2
  147. package/lib/pages/users/users.component.d.ts +8 -16
  148. package/lib/select-context.directive.d.ts +10 -0
  149. package/lib/services/button.service.d.ts +10 -7
  150. package/lib/services/datalib.service.d.ts +54 -10
  151. package/lib/services/dialog.service.d.ts +2 -2
  152. package/lib/services/notifications.service.d.ts +12 -0
  153. package/lib/services/table-config.service.d.ts +9 -1
  154. package/lib/tin-spa.module.d.ts +50 -33
  155. package/package.json +1 -1
  156. package/public-api.d.ts +7 -0
  157. package/esm2020/lib/pages/invitations/invitations.component.mjs +0 -14
  158. package/esm2020/lib/pages/tenant-settings/inviteDialog.component.mjs +0 -60
  159. package/lib/pages/invitations/invitations.component.d.ts +0 -8
  160. package/lib/pages/tenant-settings/inviteDialog.component.d.ts +0 -28
@@ -0,0 +1,23 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SelectContextDirective {
4
+ constructor(templateRef, viewContainer) {
5
+ this.templateRef = templateRef;
6
+ this.viewContainer = viewContainer;
7
+ }
8
+ set selectContext(context) {
9
+ this.viewContainer.clear();
10
+ this.viewContainer.createEmbeddedView(this.templateRef, context);
11
+ }
12
+ }
13
+ SelectContextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SelectContextDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
14
+ SelectContextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: SelectContextDirective, selector: "[selectContext]", inputs: { selectContext: "selectContext" }, ngImport: i0 });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SelectContextDirective, decorators: [{
16
+ type: Directive,
17
+ args: [{
18
+ selector: '[selectContext]'
19
+ }]
20
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { selectContext: [{
21
+ type: Input
22
+ }] } });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWNvbnRleHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3NlbGVjdC1jb250ZXh0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBaUMsTUFBTSxlQUFlLENBQUM7O0FBS2hGLE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFDVSxXQUE2QixFQUM3QixhQUErQjtRQUQvQixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO0lBQ3JDLENBQUM7SUFFTCxJQUFhLGFBQWEsQ0FBQyxPQUFZO1FBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25FLENBQUM7O21IQVRVLHNCQUFzQjt1R0FBdEIsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBSGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUI7aUlBT2MsYUFBYTtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tzZWxlY3RDb250ZXh0XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbnRleHREaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcclxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZlxyXG4gICkgeyB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzZWxlY3RDb250ZXh0KGNvbnRleHQ6IGFueSkge1xyXG4gICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsIGNvbnRleHQpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,20 +1,37 @@
1
1
  import { Injectable } from '@angular/core';
2
+ import { RoleAccess } from '../classes/Classes';
3
+ import { Core } from '../classes/TinCore';
2
4
  import * as i0 from "@angular/core";
5
+ import * as i1 from "./auth.service";
3
6
  export class ButtonService {
7
+ constructor(authService) {
8
+ this.authService = authService;
9
+ }
4
10
  getButton(buttons, name) {
5
11
  return buttons?.find(x => x.name === name) || null;
6
12
  }
13
+ getConfirmMessage(button, row) {
14
+ if (!button?.confirm) {
15
+ return '';
16
+ }
17
+ // Return dynamic message if func is provided
18
+ if (button.confirm.func) {
19
+ return button.confirm.func(row);
20
+ }
21
+ // Return static message
22
+ return button.confirm.message;
23
+ }
7
24
  getButtonProperties(button, row, config) {
8
25
  return {
9
26
  color: this.getButtonColor(button, row),
10
27
  icon: this.getIcon(button, config),
11
28
  disabled: this.testDisabled(button, row),
12
- visible: this.testVisible(button, row),
29
+ visible: this.testVisible(button, row, config),
13
30
  tip: button.tip || button.name
14
31
  };
15
32
  }
16
33
  getButtonColor(button, row) {
17
- if (this.isButtonDisabled(button, row))
34
+ if (this.testDisabled(button, row))
18
35
  return 'lightgray';
19
36
  if (button?.color)
20
37
  return button.color;
@@ -26,19 +43,15 @@ export class ButtonService {
26
43
  };
27
44
  return colorMap[button.name] || '#4050B5';
28
45
  }
29
- isButtonDisabled(button, row) {
30
- return button?.disabled ? button.disabled(row) : false;
31
- }
32
- isButtonVisible(button, row, isLoadComplete) {
33
- if (!isLoadComplete)
34
- return false;
35
- return button?.visible ? button.visible(row) : true;
36
- }
46
+ // isButtonVisible(button: Button, row: any, isLoadComplete: boolean): boolean {
47
+ // if (!isLoadComplete) return false;
48
+ // return this.testVisible(button,row);
49
+ // }
37
50
  getTitleAction(mode, buttons) {
38
51
  const modeMap = {
39
52
  'view': 'View',
40
- 'edit': buttons.find(b => b.name === 'edit')?.display || 'Edit',
41
- 'create': buttons.find(b => b.name === 'create')?.display || 'Create'
53
+ 'edit': buttons?.find(b => b.name === 'edit')?.display || 'Edit',
54
+ 'create': buttons?.find(b => b.name === 'create')?.display || 'Create'
42
55
  };
43
56
  return modeMap[mode] || '';
44
57
  }
@@ -49,13 +62,66 @@ export class ButtonService {
49
62
  if (button.icon) {
50
63
  return button.icon.name;
51
64
  }
52
- return this.getDefaultIcon(button.name, config.flatButtons);
65
+ return config ? this.getDefaultIcon(button.name, config.flatButtons) : this.getDefaultIcon(button.name, true);
53
66
  }
54
- testDisabled(button, row) {
67
+ testDisabled(button, row, config) {
68
+ // Check standard locking/approval rules
69
+ if ((button.name === 'edit' || button.name === 'delete') && row?.locked)
70
+ return true;
71
+ if (row?.pendingApproval && !button.ignorePendingApproval && button.name != 'view')
72
+ return true;
73
+ // Check form access if detailsConfig exists
74
+ if (button.detailsConfig?.formConfig) {
75
+ const access = Core.getFormAccess(button.detailsConfig.formConfig, this.authService.currentRoleSource.value);
76
+ if (!this.hasRequiredAccess(access, button.name))
77
+ return true;
78
+ }
79
+ // Check form access levels from table config
80
+ if (['create', 'edit', 'view', 'delete'].includes(button.name) && config?.formConfig) {
81
+ const access = Core.getFormAccess(config.formConfig, this.authService.currentRoleSource.value);
82
+ if (!this.hasRequiredAccess(access, button.name))
83
+ return true;
84
+ }
85
+ // Check button-specific disabled rules
55
86
  return button.disabled ? button.disabled(row) : false;
56
87
  }
57
- testVisible(button, row) {
58
- return button.visible ? button.visible(row) : true;
88
+ getVisibleButtons(buttons, row, tableConfig) {
89
+ return buttons.filter(button => this.testVisible(button, row, tableConfig));
90
+ }
91
+ testVisible(button, row, tableConfig) {
92
+ if (button.visible && !button.visible(row)) {
93
+ return false;
94
+ }
95
+ const currentRole = this.authService.currentRoleSource.value;
96
+ // Check if button has detailsConfig with form restrictions
97
+ if (button.detailsConfig?.formConfig?.security) {
98
+ const access = Core.getFormAccess(button.detailsConfig.formConfig, currentRole);
99
+ if (!this.hasRequiredAccess(access, button.name)) {
100
+ return false;
101
+ }
102
+ }
103
+ // For create/edit/view buttons, check table's formConfig
104
+ if (['create', 'edit', 'view', 'delete'].includes(button.name) && tableConfig?.formConfig?.security) {
105
+ const access = Core.getFormAccess(tableConfig.formConfig, currentRole);
106
+ if (!this.hasRequiredAccess(access, button.name)) {
107
+ return false;
108
+ }
109
+ }
110
+ return true;
111
+ }
112
+ hasRequiredAccess(access, buttonName) {
113
+ switch (buttonName) {
114
+ case 'view':
115
+ return access >= RoleAccess.View;
116
+ case 'edit':
117
+ return access >= RoleAccess.Edit;
118
+ case 'create':
119
+ return access >= RoleAccess.Create;
120
+ case 'delete':
121
+ return access >= RoleAccess.Full;
122
+ default:
123
+ return true; // Custom buttons don't require specific access
124
+ }
59
125
  }
60
126
  getDefaultColor(buttonName) {
61
127
  switch (buttonName) {
@@ -77,26 +143,20 @@ export class ButtonService {
77
143
  getCreateButton(buttons) {
78
144
  return buttons?.find(button => button?.name === 'create');
79
145
  }
80
- getDisplayedButtons(buttons, isSmallScreen, minButtons) {
81
- const nonCreateButtons = buttons?.filter(x => x.name !== 'create' && !x.inHeader);
82
- if (isSmallScreen) {
83
- if (minButtons) {
84
- return nonCreateButtons.filter(x => minButtons.includes(x.name));
85
- }
86
- return nonCreateButtons.slice(0, 1);
146
+ isFormButton(button) {
147
+ if (button?.action?.url?.includes('/form') || button?.action?.isFormData) {
148
+ button.action.isFormData = true;
149
+ return true;
87
150
  }
88
- return nonCreateButtons;
89
- }
90
- getActionsWidth(buttons) {
91
- return `${buttons.length * 40 + 20}px`;
151
+ return false;
92
152
  }
93
153
  }
94
- ButtonService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
154
+ ButtonService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonService, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
95
155
  ButtonService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonService, providedIn: 'root' });
96
156
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonService, decorators: [{
97
157
  type: Injectable,
98
158
  args: [{
99
159
  providedIn: 'root'
100
160
  }]
101
- }] });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvc2VydmljZXMvYnV0dG9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLGFBQWE7SUFDeEIsU0FBUyxDQUFDLE9BQWlCLEVBQUUsSUFBWTtRQUN2QyxPQUFPLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNyRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBYyxFQUFFLEdBQVEsRUFBRSxNQUFtQjtRQU8vRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztZQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7WUFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztZQUN0QyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSTtTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFjLEVBQUUsR0FBUTtRQUNyQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFFM0QsSUFBSSxNQUFNLEVBQUUsS0FBSztZQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztRQUN2QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUs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dCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQnV0dG9uLCBUYWJsZUNvbmZpZyB9IGZyb20gJy4uL2NsYXNzZXMvQ2xhc3Nlcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdXR0b25TZXJ2aWNlIHtcclxuICBnZXRCdXR0b24oYnV0dG9uczogQnV0dG9uW10sIG5hbWU6IHN0cmluZyk6IEJ1dHRvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIGJ1dHRvbnM/LmZpbmQoeCA9PiB4Lm5hbWUgPT09IG5hbWUpIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRCdXR0b25Qcm9wZXJ0aWVzKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSwgY29uZmlnOiBUYWJsZUNvbmZpZyk6IHtcclxuICAgIGNvbG9yOiBzdHJpbmcsXHJcbiAgICBpY29uOiBzdHJpbmcsXHJcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcclxuICAgIHZpc2libGU6IGJvb2xlYW4sXHJcbiAgICB0aXA6IHN0cmluZ1xyXG4gIH0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29sb3I6IHRoaXMuZ2V0QnV0dG9uQ29sb3IoYnV0dG9uLCByb3cpLFxyXG4gICAgICBpY29uOiB0aGlzLmdldEljb24oYnV0dG9uLCBjb25maWcpLFxyXG4gICAgICBkaXNhYmxlZDogdGhpcy50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3cpLFxyXG4gICAgICB2aXNpYmxlOiB0aGlzLnRlc3RWaXNpYmxlKGJ1dHRvbiwgcm93KSxcclxuICAgICAgdGlwOiBidXR0b24udGlwIHx8IGJ1dHRvbi5uYW1lXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0QnV0dG9uQ29sb3IoYnV0dG9uOiBCdXR0b24sIHJvdzogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmlzQnV0dG9uRGlzYWJsZWQoYnV0dG9uLCByb3cpKSByZXR1cm4gJ2xpZ2h0Z3JheSc7XHJcblxyXG4gICAgaWYgKGJ1dHRvbj8uY29sb3IpIHJldHVybiBidXR0b24uY29sb3I7XHJcbiAgICBpZiAoYnV0dG9uLmljb24/LmNvbG9yKSByZXR1cm4gYnV0dG9uLmljb24uY29sb3I7XHJcblxyXG4gICAgY29uc3QgY29sb3JNYXAgPSB7XHJcbiAgICAgICdkZWxldGUnOiAnI0Y0NDMzNicsXHJcbiAgICAgICdjcmVhdGUnOiAnZ3JlZW4nXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBjb2xvck1hcFtidXR0b24ubmFtZV0gfHwgJyM0MDUwQjUnO1xyXG4gIH1cclxuXHJcbiAgaXNCdXR0b25EaXNhYmxlZChidXR0b246IEJ1dHRvbiwgcm93OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBidXR0b24/LmRpc2FibGVkID8gYnV0dG9uLmRpc2FibGVkKHJvdykgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzQnV0dG9uVmlzaWJsZShidXR0b246IEJ1dHRvbiwgcm93OiBhbnksIGlzTG9hZENvbXBsZXRlOiBib29sZWFuKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWlzTG9hZENvbXBsZXRlKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gYnV0dG9uPy52aXNpYmxlID8gYnV0dG9uLnZpc2libGUocm93KSA6IHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXRUaXRsZUFjdGlvbihtb2RlOiBzdHJpbmcsIGJ1dHRvbnM6IEJ1dHRvbltdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG1vZGVNYXAgPSB7XHJcbiAgICAgICd2aWV3JzogJ1ZpZXcnLFxyXG4gICAgICAnZWRpdCc6IGJ1dHRvbnMuZmluZChiID0+IGIubmFtZSA9PT0gJ2VkaXQnKT8uZGlzcGxheSB8fCAnRWRpdCcsXHJcbiAgICAgICdjcmVhdGUnOiBidXR0b25zLmZpbmQoYiA9PiBiLm5hbWUgPT09ICdjcmVhdGUnKT8uZGlzcGxheSB8fCAnQ3JlYXRlJ1xyXG4gICAgfTtcclxuICAgIHJldHVybiBtb2RlTWFwW21vZGVdIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgaXNUYWJWaXNpYmxlKHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRhYmxlQ29uZmlnLmhpZGVUYWJDb25kaXRpb24gPyAhdGFibGVDb25maWcuaGlkZVRhYkNvbmRpdGlvbih0YWJsZUNvbmZpZy5wYXJlbnREYXRhKSA6IHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXRJY29uKGJ1dHRvbjogQnV0dG9uLCBjb25maWc6IFRhYmxlQ29uZmlnKTogc3RyaW5nIHtcclxuICAgIGlmIChidXR0b24uaWNvbikge1xyXG4gICAgICByZXR1cm4gYnV0dG9uLmljb24ubmFtZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRJY29uKGJ1dHRvbi5uYW1lLCBjb25maWcuZmxhdEJ1dHRvbnMpO1xyXG4gIH1cclxuXHJcbiAgdGVzdERpc2FibGVkKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGJ1dHRvbi5kaXNhYmxlZCA/IGJ1dHRvbi5kaXNhYmxlZChyb3cpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0ZXN0VmlzaWJsZShidXR0b246IEJ1dHRvbiwgcm93OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBidXR0b24udmlzaWJsZSA/IGJ1dHRvbi52aXNpYmxlKHJvdykgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWZhdWx0Q29sb3IoYnV0dG9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoYnV0dG9uTmFtZSkge1xyXG4gICAgICBjYXNlICdkZWxldGUnOiByZXR1cm4gJyNGNDQzMzYnO1xyXG4gICAgICBjYXNlICdjcmVhdGUnOiByZXR1cm4gJ2dyZWVuJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICcjNDA1MEI1JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdEljb24oYnV0dG9uTmFtZTogc3RyaW5nLCBmbGF0QnV0dG9uczogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKGJ1dHRvbk5hbWUpIHtcclxuICAgICAgY2FzZSAndmlldyc6XHJcbiAgICAgICAgcmV0dXJuIGZsYXRCdXR0b25zID8gJ29wZW5faW5fbmV3JyA6ICdwYWdldmlldyc7XHJcbiAgICAgIGNhc2UgJ2VkaXQnOiByZXR1cm4gJ2VkaXQnO1xyXG4gICAgICBjYXNlICdkZWxldGUnOiByZXR1cm4gJ2RlbGV0ZSc7XHJcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6IHJldHVybiAnYWRkJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdtb3JlX2hvcml6JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENyZWF0ZUJ1dHRvbihidXR0b25zOiBCdXR0b25bXSk6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gYnV0dG9ucz8uZmluZChidXR0b24gPT4gYnV0dG9uPy5uYW1lID09PSAnY3JlYXRlJyk7XHJcbiAgfVxyXG5cclxuICBnZXREaXNwbGF5ZWRCdXR0b25zKGJ1dHRvbnM6IEJ1dHRvbltdLCBpc1NtYWxsU2NyZWVuOiBib29sZWFuLCBtaW5CdXR0b25zPzogc3RyaW5nW10pOiBCdXR0b25bXSB7XHJcbiAgICBjb25zdCBub25DcmVhdGVCdXR0b25zID0gYnV0dG9ucz8uZmlsdGVyKHggPT4geC5uYW1lICE9PSAnY3JlYXRlJyAmJiAheC5pbkhlYWRlcik7XHJcblxyXG4gICAgaWYgKGlzU21hbGxTY3JlZW4pIHtcclxuICAgICAgaWYgKG1pbkJ1dHRvbnMpIHtcclxuICAgICAgICByZXR1cm4gbm9uQ3JlYXRlQnV0dG9ucy5maWx0ZXIoeCA9PiBtaW5CdXR0b25zLmluY2x1ZGVzKHgubmFtZSkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBub25DcmVhdGVCdXR0b25zLnNsaWNlKDAsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBub25DcmVhdGVCdXR0b25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aW9uc1dpZHRoKGJ1dHRvbnM6IEJ1dHRvbltdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHtidXR0b25zLmxlbmd0aCAqIDQwICsgMjB9cHhgO1xyXG4gIH1cclxufVxyXG4iXX0=
161
+ }], ctorParameters: function () { return [{ type: i1.AuthService }]; } });
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvc2VydmljZXMvYnV0dG9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVUsVUFBVSxFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFFckUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFLMUMsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBSSxDQUFDO0lBRWpELFNBQVMsQ0FBQyxPQUFpQixFQUFFLElBQVk7UUFDdkMsT0FBTyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQWMsRUFBRSxHQUFRO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO1lBQ3BCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFFRCw2Q0FBNkM7UUFDN0MsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUN2QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsd0JBQXdCO1FBQ3hCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDaEMsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQWMsRUFBRSxHQUFRLEVBQUUsTUFBbUI7UUFPL0QsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7WUFDdkMsSUFBSSxFQUFF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TyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBRWYsQ0FBQzs7MEdBcExVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbiwgUm9sZUFjY2VzcywgVGFibGVDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZSB9IGZyb20gJy4uL2NsYXNzZXMvVGluQ29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdXR0b25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UpIHsgfVxyXG5cclxuICBnZXRCdXR0b24oYnV0dG9uczogQnV0dG9uW10sIG5hbWU6IHN0cmluZyk6IEJ1dHRvbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIGJ1dHRvbnM/LmZpbmQoeCA9PiB4Lm5hbWUgPT09IG5hbWUpIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRDb25maXJtTWVzc2FnZShidXR0b246IEJ1dHRvbiwgcm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFidXR0b24/LmNvbmZpcm0pIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLy8gUmV0dXJuIGR5bmFtaWMgbWVzc2FnZSBpZiBmdW5jIGlzIHByb3ZpZGVkXHJcbiAgICBpZiAoYnV0dG9uLmNvbmZpcm0uZnVuYykge1xyXG4gICAgICByZXR1cm4gYnV0dG9uLmNvbmZpcm0uZnVuYyhyb3cpO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLy8gUmV0dXJuIHN0YXRpYyBtZXNzYWdlXHJcbiAgICByZXR1cm4gYnV0dG9uLmNvbmZpcm0ubWVzc2FnZTtcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvblByb3BlcnRpZXMoYnV0dG9uOiBCdXR0b24sIHJvdzogYW55LCBjb25maWc6IFRhYmxlQ29uZmlnKToge1xyXG4gICAgY29sb3I6IHN0cmluZyxcclxuICAgIGljb246IHN0cmluZyxcclxuICAgIGRpc2FibGVkOiBib29sZWFuLFxyXG4gICAgdmlzaWJsZTogYm9vbGVhbixcclxuICAgIHRpcDogc3RyaW5nXHJcbiAgfSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb2xvcjogdGhpcy5nZXRCdXR0b25Db2xvcihidXR0b24sIHJvdyksXHJcbiAgICAgIGljb246IHRoaXMuZ2V0SWNvbihidXR0b24sIGNvbmZpZyksXHJcbiAgICAgIGRpc2FibGVkOiB0aGlzLnRlc3REaXNhYmxlZChidXR0b24sIHJvdyksXHJcbiAgICAgIHZpc2libGU6IHRoaXMudGVzdFZpc2libGUoYnV0dG9uLCByb3csIGNvbmZpZyksXHJcbiAgICAgIHRpcDogYnV0dG9uLnRpcCB8fCBidXR0b24ubmFtZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldEJ1dHRvbkNvbG9yKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy50ZXN0RGlzYWJsZWQoYnV0dG9uLCByb3cpKSByZXR1cm4gJ2xpZ2h0Z3JheSc7XHJcblxyXG4gICAgaWYgKGJ1dHRvbj8uY29sb3IpIHJldHVybiBidXR0b24uY29sb3I7XHJcbiAgICBpZiAoYnV0dG9uLmljb24/LmNvbG9yKSByZXR1cm4gYnV0dG9uLmljb24uY29sb3I7XHJcblxyXG4gICAgY29uc3QgY29sb3JNYXAgPSB7XHJcbiAgICAgICdkZWxldGUnOiAnI0Y0NDMzNicsXHJcbiAgICAgICdjcmVhdGUnOiAnZ3JlZW4nXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBjb2xvck1hcFtidXR0b24ubmFtZV0gfHwgJyM0MDUwQjUnO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLyBpc0J1dHRvblZpc2libGUoYnV0dG9uOiBCdXR0b24sIHJvdzogYW55LCBpc0xvYWRDb21wbGV0ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gIC8vICAgaWYgKCFpc0xvYWRDb21wbGV0ZSkgcmV0dXJuIGZhbHNlO1xyXG4gIC8vICAgcmV0dXJuIHRoaXMudGVzdFZpc2libGUoYnV0dG9uLHJvdyk7XHJcbiAgLy8gfVxyXG5cclxuICBnZXRUaXRsZUFjdGlvbihtb2RlOiBzdHJpbmcsIGJ1dHRvbnM6IEJ1dHRvbltdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG1vZGVNYXAgPSB7XHJcbiAgICAgICd2aWV3JzogJ1ZpZXcnLFxyXG4gICAgICAnZWRpdCc6IGJ1dHRvbnM/LmZpbmQoYiA9PiBiLm5hbWUgPT09ICdlZGl0Jyk/LmRpc3BsYXkgfHwgJ0VkaXQnLFxyXG4gICAgICAnY3JlYXRlJzogYnV0dG9ucz8uZmluZChiID0+IGIubmFtZSA9PT0gJ2NyZWF0ZScpPy5kaXNwbGF5IHx8ICdDcmVhdGUnXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG1vZGVNYXBbbW9kZV0gfHwgJyc7XHJcbiAgfVxyXG5cclxuICBpc1RhYlZpc2libGUodGFibGVDb25maWc6IFRhYmxlQ29uZmlnKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGFibGVDb25maWcuaGlkZVRhYkNvbmRpdGlvbiA/ICF0YWJsZUNvbmZpZy5oaWRlVGFiQ29uZGl0aW9uKHRhYmxlQ29uZmlnLnBhcmVudERhdGEpIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldEljb24oYnV0dG9uOiBCdXR0b24sIGNvbmZpZzogVGFibGVDb25maWcgfCBudWxsKTogc3RyaW5nIHtcclxuICAgIGlmIChidXR0b24uaWNvbikge1xyXG4gICAgICByZXR1cm4gYnV0dG9uLmljb24ubmFtZTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWcgPyB0aGlzLmdldERlZmF1bHRJY29uKGJ1dHRvbi5uYW1lLCBjb25maWcuZmxhdEJ1dHRvbnMpIDogdGhpcy5nZXREZWZhdWx0SWNvbihidXR0b24ubmFtZSwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICB0ZXN0RGlzYWJsZWQoYnV0dG9uOiBCdXR0b24sIHJvdzogYW55LCBjb25maWc/OiBUYWJsZUNvbmZpZyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIC8vIENoZWNrIHN0YW5kYXJkIGxvY2tpbmcvYXBwcm92YWwgcnVsZXNcclxuICAgIGlmICgoYnV0dG9uLm5hbWUgPT09ICdlZGl0JyB8fCBidXR0b24ubmFtZSA9PT0gJ2RlbGV0ZScpICYmIHJvdz8ubG9ja2VkKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmIChyb3c/LnBlbmRpbmdBcHByb3ZhbCAmJiAhYnV0dG9uLmlnbm9yZVBlbmRpbmdBcHByb3ZhbCAmJiBidXR0b24ubmFtZSAhPSAndmlldycpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIC8vIENoZWNrIGZvcm0gYWNjZXNzIGlmIGRldGFpbHNDb25maWcgZXhpc3RzXHJcbiAgICBpZiAoYnV0dG9uLmRldGFpbHNDb25maWc/LmZvcm1Db25maWcpIHtcclxuICAgICAgY29uc3QgYWNjZXNzID0gQ29yZS5nZXRGb3JtQWNjZXNzKGJ1dHRvbi5kZXRhaWxzQ29uZmlnLmZvcm1Db25maWcsIHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFJvbGVTb3VyY2UudmFsdWUpO1xyXG4gICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZWRBY2Nlc3MoYWNjZXNzLCBidXR0b24ubmFtZSkpIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGZvcm0gYWNjZXNzIGxldmVscyBmcm9tIHRhYmxlIGNvbmZpZ1xyXG4gICAgaWYgKFsnY3JlYXRlJywgJ2VkaXQnLCAndmlldycsICdkZWxldGUnXS5pbmNsdWRlcyhidXR0b24ubmFtZSkgJiYgY29uZmlnPy5mb3JtQ29uZmlnKSB7XHJcbiAgICAgIGNvbnN0IGFjY2VzcyA9IENvcmUuZ2V0Rm9ybUFjY2Vzcyhjb25maWcuZm9ybUNvbmZpZywgdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZSk7XHJcbiAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlZEFjY2VzcyhhY2Nlc3MsIGJ1dHRvbi5uYW1lKSkgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgYnV0dG9uLXNwZWNpZmljIGRpc2FibGVkIHJ1bGVzXHJcbiAgICByZXR1cm4gYnV0dG9uLmRpc2FibGVkID8gYnV0dG9uLmRpc2FibGVkKHJvdykgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldFZpc2libGVCdXR0b25zKGJ1dHRvbnM6IEJ1dHRvbltdLCByb3c6IGFueSwgdGFibGVDb25maWc/OiBUYWJsZUNvbmZpZyk6IEJ1dHRvbltdIHtcclxuICAgIHJldHVybiBidXR0b25zLmZpbHRlcihidXR0b24gPT4gdGhpcy50ZXN0VmlzaWJsZShidXR0b24sIHJvdywgdGFibGVDb25maWcpKTtcclxuICB9XHJcblxyXG4gIHRlc3RWaXNpYmxlKGJ1dHRvbjogQnV0dG9uLCByb3c6IGFueSwgdGFibGVDb25maWc/OiBUYWJsZUNvbmZpZyk6IGJvb2xlYW4ge1xyXG5cclxuXHJcbiAgICBpZiAoYnV0dG9uLnZpc2libGUgJiYgIWJ1dHRvbi52aXNpYmxlKHJvdykpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRSb2xlID0gdGhpcy5hdXRoU2VydmljZS5jdXJyZW50Um9sZVNvdXJjZS52YWx1ZTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiBidXR0b24gaGFzIGRldGFpbHNDb25maWcgd2l0aCBmb3JtIHJlc3RyaWN0aW9uc1xyXG4gICAgaWYgKGJ1dHRvbi5kZXRhaWxzQ29uZmlnPy5mb3JtQ29uZmlnPy5zZWN1cml0eSkge1xyXG4gICAgICBjb25zdCBhY2Nlc3MgPSBDb3JlLmdldEZvcm1BY2Nlc3MoYnV0dG9uLmRldGFpbHNDb25maWcuZm9ybUNvbmZpZywgY3VycmVudFJvbGUpO1xyXG4gICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZWRBY2Nlc3MoYWNjZXNzLCBidXR0b24ubmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3IgY3JlYXRlL2VkaXQvdmlldyBidXR0b25zLCBjaGVjayB0YWJsZSdzIGZvcm1Db25maWdcclxuICAgIGlmIChbJ2NyZWF0ZScsICdlZGl0JywgJ3ZpZXcnLCAnZGVsZXRlJ10uaW5jbHVkZXMoYnV0dG9uLm5hbWUpICYmIHRhYmxlQ29uZmlnPy5mb3JtQ29uZmlnPy5zZWN1cml0eSkge1xyXG4gICAgICBjb25zdCBhY2Nlc3MgPSBDb3JlLmdldEZvcm1BY2Nlc3ModGFibGVDb25maWcuZm9ybUNvbmZpZywgY3VycmVudFJvbGUpO1xyXG4gICAgICBpZiAoIXRoaXMuaGFzUmVxdWlyZWRBY2Nlc3MoYWNjZXNzLCBidXR0b24ubmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzUmVxdWlyZWRBY2Nlc3MoYWNjZXNzOiBSb2xlQWNjZXNzLCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAoYnV0dG9uTmFtZSkge1xyXG4gICAgICBjYXNlICd2aWV3JzpcclxuICAgICAgICByZXR1cm4gYWNjZXNzID49IFJvbGVBY2Nlc3MuVmlldztcclxuICAgICAgY2FzZSAnZWRpdCc6XHJcbiAgICAgICAgcmV0dXJuIGFjY2VzcyA+PSBSb2xlQWNjZXNzLkVkaXQ7XHJcbiAgICAgIGNhc2UgJ2NyZWF0ZSc6XHJcbiAgICAgICAgcmV0dXJuIGFjY2VzcyA+PSBSb2xlQWNjZXNzLkNyZWF0ZTtcclxuICAgICAgY2FzZSAnZGVsZXRlJzpcclxuICAgICAgICByZXR1cm4gYWNjZXNzID49IFJvbGVBY2Nlc3MuRnVsbDtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQ3VzdG9tIGJ1dHRvbnMgZG9uJ3QgcmVxdWlyZSBzcGVjaWZpYyBhY2Nlc3NcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdENvbG9yKGJ1dHRvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKGJ1dHRvbk5hbWUpIHtcclxuICAgICAgY2FzZSAnZGVsZXRlJzogcmV0dXJuICcjRjQ0MzM2JztcclxuICAgICAgY2FzZSAnY3JlYXRlJzogcmV0dXJuICdncmVlbic7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnIzQwNTBCNSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERlZmF1bHRJY29uKGJ1dHRvbk5hbWU6IHN0cmluZywgZmxhdEJ1dHRvbnM6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChidXR0b25OYW1lKSB7XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOlxyXG4gICAgICAgIHJldHVybiBmbGF0QnV0dG9ucyA/ICdvcGVuX2luX25ldycgOiAncGFnZXZpZXcnO1xyXG4gICAgICBjYXNlICdlZGl0JzogcmV0dXJuICdlZGl0JztcclxuICAgICAgY2FzZSAnZGVsZXRlJzogcmV0dXJuICdkZWxldGUnO1xyXG4gICAgICBjYXNlICdjcmVhdGUnOiByZXR1cm4gJ2FkZCc7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnbW9yZV9ob3Jpeic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDcmVhdGVCdXR0b24oYnV0dG9uczogQnV0dG9uW10pOiBCdXR0b24gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGJ1dHRvbnM/LmZpbmQoYnV0dG9uID0+IGJ1dHRvbj8ubmFtZSA9PT0gJ2NyZWF0ZScpO1xyXG4gIH1cclxuXHJcbiAgaXNGb3JtQnV0dG9uKGJ1dHRvbjogQnV0dG9uKTogYm9vbGVhbiB7XHJcblxyXG4gICAgaWYgKGJ1dHRvbj8uYWN0aW9uPy51cmw/LmluY2x1ZGVzKCcvZm9ybScpIHx8IGJ1dHRvbj8uYWN0aW9uPy5pc0Zvcm1EYXRhKSB7XHJcbiAgICAgIGJ1dHRvbi5hY3Rpb24uaXNGb3JtRGF0YSA9IHRydWU7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG59XHJcbiJdfQ==
@@ -46,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
46
46
  providedIn: 'root'
47
47
  }]
48
48
  }] });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvc2VydmljZXMvY3N2LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLFVBQVU7SUFDckIsV0FBVyxDQUFDLElBQVcsRUFBRSxPQUFpQixFQUFFLFdBQW1CLFlBQVksRUFBRSxNQUFtQjtRQUM5RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9CLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFXLEVBQUUsT0FBaUIsRUFBRSxNQUFtQjtRQUN0RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUMxRCxDQUFDO1FBQ0YsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQWlCLEVBQUUsTUFBbUI7UUFDNUQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDM0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQVU7UUFDN0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEYsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDL0M7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOzt1R0F6Q1UsVUFBVTsyR0FBVixVQUFVLGNBRlQsTUFBTTsyRkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vY2xhc3Nlcy9DbGFzc2VzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ3N2U2VydmljZSB7XG4gIGdlbmVyYXRlQ3N2KGRhdGE6IGFueVtdLCBjb2x1bW5zOiBzdHJpbmdbXSwgZmlsZW5hbWU6IHN0cmluZyA9ICdleHBvcnQuY3N2JywgY29uZmlnOiBUYWJsZUNvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSB0aGlzLmNvbnZlcnRUb0NzdihkYXRhLCBjb2x1bW5zLCBjb25maWcpO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlbmFtZSk7XG4gICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvQ3N2KGRhdGE6IGFueVtdLCBjb2x1bW5zOiBzdHJpbmdbXSwgY29uZmlnOiBUYWJsZUNvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sdW1uTWFwID0gdGhpcy5jcmVhdGVDb2x1bW5NYXAoY29sdW1ucywgY29uZmlnKTtcbiAgICBjb25zdCBoZWFkZXIgPSBjb2x1bW5zLm1hcChjb2wgPT4gY29sdW1uTWFwW2NvbF0gfHwgY29sKS5qb2luKCcsJyk7XG4gICAgY29uc3Qgcm93cyA9IGRhdGEubWFwKHJvdyA9PlxuICAgICAgY29sdW1ucy5tYXAoY29sID0+IHRoaXMuZXNjYXBlQ29tbWFzKHJvd1tjb2xdKSkuam9pbignLCcpXG4gICAgKTtcbiAgICByZXR1cm4gW2hlYWRlciwgLi4ucm93c10uam9pbignXFxuJyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbk1hcChjb2x1bW5zOiBzdHJpbmdbXSwgY29uZmlnOiBUYWJsZUNvbmZpZyk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGNvbHVtbk1hcCA9IHt9O1xuICAgIGNvbmZpZy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIGlmIChjb2x1bW5zLmluY2x1ZGVzKGNvbC5uYW1lKSAmJiBjb2wuYWxpYXMpIHtcbiAgICAgICAgY29sdW1uTWFwW2NvbC5uYW1lXSA9IGNvbC5hbGlhcztcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY29sdW1uTWFwO1xuICB9XG5cbiAgcHJpdmF0ZSBlc2NhcGVDb21tYXModmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIGlmIChzdHJpbmdWYWx1ZS5pbmNsdWRlcygnLCcpIHx8IHN0cmluZ1ZhbHVlLmluY2x1ZGVzKCdcIicpIHx8IHN0cmluZ1ZhbHVlLmluY2x1ZGVzKCdcXG4nKSkge1xuICAgICAgcmV0dXJuIGBcIiR7c3RyaW5nVmFsdWUucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG4gICAgfVxuICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgfVxufVxuIl19
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90aW4tc3BhL3NyYy9saWIvc2VydmljZXMvY3N2LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLFVBQVU7SUFDckIsV0FBVyxDQUFDLElBQVcsRUFBRSxPQUFpQixFQUFFLFdBQW1CLFlBQVksRUFBRSxNQUFtQjtRQUM5RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9CLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFXLEVBQUUsT0FBaUIsRUFBRSxNQUFtQjtRQUN0RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUMxRCxDQUFDO1FBQ0YsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQWlCLEVBQUUsTUFBbUI7UUFDNUQsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDM0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQVU7UUFDN0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEYsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDL0M7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOzt1R0F6Q1UsVUFBVTsyR0FBVixVQUFVLGNBRlQsTUFBTTsyRkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3N2U2VydmljZSB7XHJcbiAgZ2VuZXJhdGVDc3YoZGF0YTogYW55W10sIGNvbHVtbnM6IHN0cmluZ1tdLCBmaWxlbmFtZTogc3RyaW5nID0gJ2V4cG9ydC5jc3YnLCBjb25maWc6IFRhYmxlQ29uZmlnKTogdm9pZCB7XHJcbiAgICBjb25zdCBjc3ZDb250ZW50ID0gdGhpcy5jb252ZXJ0VG9Dc3YoZGF0YSwgY29sdW1ucywgY29uZmlnKTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcclxuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZW5hbWUpO1xyXG4gICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb252ZXJ0VG9Dc3YoZGF0YTogYW55W10sIGNvbHVtbnM6IHN0cmluZ1tdLCBjb25maWc6IFRhYmxlQ29uZmlnKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbHVtbk1hcCA9IHRoaXMuY3JlYXRlQ29sdW1uTWFwKGNvbHVtbnMsIGNvbmZpZyk7XHJcbiAgICBjb25zdCBoZWFkZXIgPSBjb2x1bW5zLm1hcChjb2wgPT4gY29sdW1uTWFwW2NvbF0gfHwgY29sKS5qb2luKCcsJyk7XHJcbiAgICBjb25zdCByb3dzID0gZGF0YS5tYXAocm93ID0+XHJcbiAgICAgIGNvbHVtbnMubWFwKGNvbCA9PiB0aGlzLmVzY2FwZUNvbW1hcyhyb3dbY29sXSkpLmpvaW4oJywnKVxyXG4gICAgKTtcclxuICAgIHJldHVybiBbaGVhZGVyLCAuLi5yb3dzXS5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29sdW1uTWFwKGNvbHVtbnM6IHN0cmluZ1tdLCBjb25maWc6IFRhYmxlQ29uZmlnKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XHJcbiAgICBjb25zdCBjb2x1bW5NYXAgPSB7fTtcclxuICAgIGNvbmZpZy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgaWYgKGNvbHVtbnMuaW5jbHVkZXMoY29sLm5hbWUpICYmIGNvbC5hbGlhcykge1xyXG4gICAgICAgIGNvbHVtbk1hcFtjb2wubmFtZV0gPSBjb2wuYWxpYXM7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvbHVtbk1hcDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXNjYXBlQ29tbWFzKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgaWYgKHN0cmluZ1ZhbHVlLmluY2x1ZGVzKCcsJykgfHwgc3RyaW5nVmFsdWUuaW5jbHVkZXMoJ1wiJykgfHwgc3RyaW5nVmFsdWUuaW5jbHVkZXMoJ1xcbicpKSB7XHJcbiAgICAgIHJldHVybiBgXCIke3N0cmluZ1ZhbHVlLnJlcGxhY2UoL1wiL2csICdcIlwiJyl9XCJgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xyXG4gIH1cclxufVxyXG4iXX0=