@arsedizioni/ars-utils 18.5.61 → 19.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 (178) hide show
  1. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +14 -12
  2. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  3. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +41 -41
  4. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  5. package/fesm2022/arsedizioni-ars-utils-core.mjs +99 -99
  6. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  7. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -13
  8. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  9. package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
  10. package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
  11. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +14 -12
  12. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  13. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
  14. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
  15. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
  16. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs.map +1 -1
  17. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
  18. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
  19. package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
  20. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  21. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
  22. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
  23. package/fesm2022/arsedizioni-ars-utils.mjs.map +1 -1
  24. package/package.json +9 -33
  25. package/clipper.ui/ui/clipper.scss +0 -530
  26. package/esm2022/arsedizioni-ars-utils.mjs +0 -5
  27. package/esm2022/clipper.common/arsedizioni-ars-utils-clipper.common.mjs +0 -5
  28. package/esm2022/clipper.common/common/common.module.mjs +0 -16
  29. package/esm2022/clipper.common/common/definitions.mjs +0 -2041
  30. package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +0 -100
  31. package/esm2022/clipper.common/common/messages.mjs +0 -36
  32. package/esm2022/clipper.common/common/services/clipper.service.mjs +0 -1009
  33. package/esm2022/clipper.common/public_api.mjs +0 -5
  34. package/esm2022/clipper.ui/arsedizioni-ars-utils-clipper.ui.mjs +0 -5
  35. package/esm2022/clipper.ui/documents.mjs +0 -50
  36. package/esm2022/clipper.ui/public_api.mjs +0 -18
  37. package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +0 -766
  38. package/esm2022/clipper.ui/ui/document/document.component.mjs +0 -688
  39. package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +0 -118
  40. package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +0 -441
  41. package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +0 -217
  42. package/esm2022/clipper.ui/ui/references/references.component.mjs +0 -380
  43. package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +0 -116
  44. package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +0 -339
  45. package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +0 -251
  46. package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +0 -17
  47. package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +0 -106
  48. package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +0 -120
  49. package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +0 -531
  50. package/esm2022/core/arsedizioni-ars-utils-core.mjs +0 -5
  51. package/esm2022/core/core.module.mjs +0 -151
  52. package/esm2022/core/dateFnsAdapter.mjs +0 -203
  53. package/esm2022/core/definitions.mjs +0 -47
  54. package/esm2022/core/directives/autoFocusDirective.mjs +0 -22
  55. package/esm2022/core/directives/changeDateIntervalDirective.mjs +0 -48
  56. package/esm2022/core/directives/copyClipboardDirective.mjs +0 -46
  57. package/esm2022/core/directives/validators.mjs +0 -502
  58. package/esm2022/core/pipes/format.pipe.mjs +0 -53
  59. package/esm2022/core/pipes/replace.pipe.mjs +0 -29
  60. package/esm2022/core/pipes/safe-html.pipe.mjs +0 -24
  61. package/esm2022/core/pipes/safe-url.pipe.mjs +0 -24
  62. package/esm2022/core/pipes/search-callback.pipe.mjs +0 -21
  63. package/esm2022/core/pipes/search-filter.pipe.mjs +0 -50
  64. package/esm2022/core/public_api.mjs +0 -22
  65. package/esm2022/core/selectable.mjs +0 -131
  66. package/esm2022/core/services/broadcast.service.mjs +0 -35
  67. package/esm2022/core/services/broadcastChannelManager.mjs +0 -80
  68. package/esm2022/core/services/environment.service.mjs +0 -29
  69. package/esm2022/core/services/screen.service.mjs +0 -23
  70. package/esm2022/core/services/theme.service.mjs +0 -140
  71. package/esm2022/core/system.mjs +0 -664
  72. package/esm2022/evolution.common/arsedizioni-ars-utils-evolution.common.mjs +0 -5
  73. package/esm2022/evolution.common/common/common.module.mjs +0 -16
  74. package/esm2022/evolution.common/common/definitions.mjs +0 -454
  75. package/esm2022/evolution.common/common/interceptors/auth.interceptor.mjs +0 -100
  76. package/esm2022/evolution.common/common/messages.mjs +0 -8
  77. package/esm2022/evolution.common/common/services/evolution.service.mjs +0 -488
  78. package/esm2022/evolution.common/public_api.mjs +0 -5
  79. package/esm2022/help/arsedizioni-ars-utils-help.mjs +0 -5
  80. package/esm2022/help/components/help-viewer/help-viewer.component.mjs +0 -442
  81. package/esm2022/help/definitions.mjs +0 -2
  82. package/esm2022/help/help.module.mjs +0 -12
  83. package/esm2022/help/public_api.mjs +0 -7
  84. package/esm2022/help/services/help.service.mjs +0 -77
  85. package/esm2022/public_api.mjs +0 -15
  86. package/esm2022/support.common/arsedizioni-ars-utils-support.common.mjs +0 -5
  87. package/esm2022/support.common/common/common.module.mjs +0 -16
  88. package/esm2022/support.common/common/definitions.mjs +0 -29
  89. package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +0 -100
  90. package/esm2022/support.common/common/messages.mjs +0 -13
  91. package/esm2022/support.common/common/services/support.service.mjs +0 -287
  92. package/esm2022/support.common/public_api.mjs +0 -8
  93. package/esm2022/support.ui/arsedizioni-ars-utils-support.ui.mjs +0 -5
  94. package/esm2022/support.ui/public_api.mjs +0 -5
  95. package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +0 -80
  96. package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +0 -233
  97. package/esm2022/tinymce/arsedizioni-ars-utils-tinymce.mjs +0 -5
  98. package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +0 -48
  99. package/esm2022/tinymce/public_api.mjs +0 -7
  100. package/esm2022/tinymce/tinymce.module.mjs +0 -19
  101. package/esm2022/tinymce/utils.mjs +0 -150
  102. package/esm2022/ui/arsedizioni-ars-utils-ui.mjs +0 -5
  103. package/esm2022/ui/public_api.mjs +0 -12
  104. package/esm2022/ui/ui/components/button-selector/button-selector.component.mjs +0 -150
  105. package/esm2022/ui/ui/components/button-toggle/button-toggle.component.mjs +0 -51
  106. package/esm2022/ui/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
  107. package/esm2022/ui/ui/components/chips-selector/chips-selector.component.mjs +0 -272
  108. package/esm2022/ui/ui/components/file-input/file-input.component.mjs +0 -264
  109. package/esm2022/ui/ui/components/file-preview/file-preview.component.mjs +0 -73
  110. package/esm2022/ui/ui/components/filter-bar/filter-bar.component.mjs +0 -356
  111. package/esm2022/ui/ui/definitions.mjs +0 -2
  112. package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +0 -47
  113. package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +0 -101
  114. package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +0 -86
  115. package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +0 -51
  116. package/esm2022/ui/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
  117. package/esm2022/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
  118. package/esm2022/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
  119. package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +0 -49
  120. package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +0 -89
  121. package/esm2022/ui/ui/dialogs/select/select-dialog.component.mjs +0 -374
  122. package/esm2022/ui/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
  123. package/esm2022/ui/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
  124. package/esm2022/ui/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
  125. package/esm2022/ui/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
  126. package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +0 -32
  127. package/esm2022/ui/ui/directives/resize-table-column.directive.mjs +0 -63
  128. package/esm2022/ui/ui/filters.mjs +0 -43
  129. package/esm2022/ui/ui/paginatorIntl.mjs +0 -34
  130. package/esm2022/ui/ui/services/dialog.service.mjs +0 -417
  131. package/esm2022/ui/ui/services/ui.service.mjs +0 -21
  132. package/esm2022/ui/ui/ui.module.mjs +0 -21
  133. package/esm2022/ui.application/arsedizioni-ars-utils-ui.application.mjs +0 -5
  134. package/esm2022/ui.application/public_api.mjs +0 -21
  135. package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +0 -150
  136. package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +0 -51
  137. package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
  138. package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +0 -272
  139. package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +0 -264
  140. package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +0 -73
  141. package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +0 -356
  142. package/esm2022/ui.application/ui/definitions.mjs +0 -31
  143. package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
  144. package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
  145. package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
  146. package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +0 -374
  147. package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
  148. package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
  149. package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
  150. package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
  151. package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +0 -63
  152. package/esm2022/ui.application/ui/filters.mjs +0 -43
  153. package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +0 -304
  154. package/esm2022/ui.application/ui/ui.module.mjs +0 -30
  155. package/esm2022/ui.oauth/arsedizioni-ars-utils-ui.oauth.mjs +0 -5
  156. package/esm2022/ui.oauth/public_api.mjs +0 -6
  157. package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +0 -199
  158. package/esm2022/ui.oauth/ui/definitions.mjs +0 -7
  159. package/esm2022/ui.oauth/ui/ui.module.mjs +0 -13
  160. package/styles/ui.colors.scss +0 -77
  161. package/styles/ui.scss +0 -318
  162. package/ui/ui/components/button-selector/button-selector.component.d.ts +0 -52
  163. package/ui/ui/components/button-toggle/button-toggle.component.d.ts +0 -28
  164. package/ui/ui/components/calendar-empty-header/calendar-empy-header.component.d.ts +0 -11
  165. package/ui/ui/components/chips-selector/chips-selector.component.d.ts +0 -82
  166. package/ui/ui/components/file-input/file-input.component.d.ts +0 -88
  167. package/ui/ui/components/file-preview/file-preview.component.d.ts +0 -26
  168. package/ui/ui/components/filter-bar/filter-bar.component.d.ts +0 -83
  169. package/ui/ui/dialogs/prompt/prompt-dialog.component.d.ts +0 -18
  170. package/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.d.ts +0 -18
  171. package/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.d.ts +0 -18
  172. package/ui/ui/dialogs/select/select-dialog.component.d.ts +0 -122
  173. package/ui/ui/dialogs/select-file/select-file-dialog.component.d.ts +0 -36
  174. package/ui/ui/dialogs/select-picture/select-picture-dialog.component.d.ts +0 -26
  175. package/ui/ui/dialogs/select-tree/select-tree-dialog.component.d.ts +0 -98
  176. package/ui/ui/dialogs/send-to/send-to-dialog.component.d.ts +0 -28
  177. package/ui/ui/directives/resize-table-column.directive.d.ts +0 -19
  178. package/ui/ui/filters.d.ts +0 -57
@@ -1,356 +0,0 @@
1
- import { NgClass, NgStyle } from "@angular/common";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Output, effect, inject, input, signal } from "@angular/core";
3
- import { FormsModule } from "@angular/forms";
4
- import { MatButtonModule } from "@angular/material/button";
5
- import { MatDividerModule } from "@angular/material/divider";
6
- import { MatFormFieldModule } from "@angular/material/form-field";
7
- import { MatIconModule } from "@angular/material/icon";
8
- import { MatInputModule } from "@angular/material/input";
9
- import { MatMenuModule } from "@angular/material/menu";
10
- import { MatTooltipModule } from "@angular/material/tooltip";
11
- import { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';
12
- import { CurrentFilter, Filters } from '../../filters';
13
- import { FlexLayoutModule } from '@ngbracket/ngx-layout';
14
- import * as i0 from "@angular/core";
15
- import * as i1 from "@ngbracket/ngx-layout/flex";
16
- import * as i2 from "@ngbracket/ngx-layout/extended";
17
- import * as i3 from "@angular/material/form-field";
18
- import * as i4 from "@angular/material/input";
19
- import * as i5 from "@angular/forms";
20
- import * as i6 from "@angular/material/tooltip";
21
- import * as i7 from "@angular/material/button";
22
- import * as i8 from "@angular/material/icon";
23
- import * as i9 from "@angular/material/menu";
24
- import * as i10 from "@angular/material/divider";
25
- export class FilterBarComponent {
26
- constructor() {
27
- this.changed = new EventEmitter();
28
- this.changeDetector = inject(ChangeDetectorRef);
29
- this.filters = input();
30
- this.canFilterByFlt1 = signal(false);
31
- this.canFilterByFlt2 = signal(false);
32
- this.canFilterByFlt3 = signal(false);
33
- this.canFilterByFlt4 = signal(false);
34
- this.canFilterByFlt5 = signal(false);
35
- this.canFilterByText = input(false);
36
- this.canFilterByText2 = input(false);
37
- this.canFilterByText3 = input(false);
38
- this.initialText = input(null);
39
- this.initialText2 = input(null);
40
- this.initialText3 = input(null);
41
- this.textName = input("testo");
42
- this.text2Name = input("...");
43
- this.text3Name = input("...");
44
- this.textLength = input();
45
- this.text2Length = input();
46
- this.text3Length = input();
47
- this.showTextSearchButton = input(false);
48
- this.appearance = input('outline');
49
- this.text = null;
50
- this.text2 = null;
51
- this.text3 = null;
52
- this.currentFilter = new CurrentFilter();
53
- effect(() => {
54
- this.text = this.initialText();
55
- this.text2 = this.initialText2();
56
- this.text3 = this.initialText3();
57
- });
58
- }
59
- ngOnInit() {
60
- this.initializeFilters();
61
- }
62
- /**
63
- * Initialize filters
64
- */
65
- initializeFilters() {
66
- if (!this.filters())
67
- return;
68
- this.filters()?.forEach((n) => {
69
- switch (n.group) {
70
- case Filters.FLT_1:
71
- this.flt1 = n;
72
- this.canFilterByFlt1.set(n.action || (n.items && n.items.length > 0));
73
- break;
74
- case Filters.FLT_2:
75
- this.flt2 = n;
76
- this.canFilterByFlt2.set(n.action || (n.items && n.items.length > 0));
77
- break;
78
- case Filters.FLT_3:
79
- this.flt3 = n;
80
- this.canFilterByFlt3.set(n.action || (n.items && n.items.length > 0));
81
- break;
82
- case Filters.FLT_4:
83
- this.flt4 = n;
84
- this.canFilterByFlt4.set(n.action || (n.items && n.items.length > 0));
85
- break;
86
- case Filters.FLT_5:
87
- this.flt5 = n;
88
- this.canFilterByFlt5.set(n.action || (n.items && n.items.length > 0));
89
- break;
90
- }
91
- });
92
- }
93
- /**
94
- * Apply a filter
95
- * @param filter : the filter to apply
96
- */
97
- applyFilter(filter) {
98
- let changed = false;
99
- switch (filter.group) {
100
- case Filters.FLT_1:
101
- changed = this.currentFilter.flt1 != filter.value;
102
- if (changed) {
103
- this.currentFilter.flt1 = filter.value;
104
- this.currentFilter.flt1Name = filter.titleSelected;
105
- }
106
- break;
107
- case Filters.FLT_2:
108
- changed = this.currentFilter.flt2 != filter.value;
109
- if (changed) {
110
- this.currentFilter.flt2 = filter.value;
111
- this.currentFilter.flt2Name = filter.titleSelected;
112
- }
113
- break;
114
- case Filters.FLT_3:
115
- changed = this.currentFilter.flt3 != filter.value;
116
- if (changed) {
117
- this.currentFilter.flt3 = filter.value;
118
- this.currentFilter.flt3Name = filter.titleSelected;
119
- }
120
- break;
121
- case Filters.FLT_4:
122
- changed = this.currentFilter.flt4 != filter.value;
123
- if (changed) {
124
- this.currentFilter.flt4 = filter.value;
125
- this.currentFilter.flt4Name = filter.titleSelected;
126
- }
127
- break;
128
- case Filters.FLT_5:
129
- changed = this.currentFilter.flt5 != filter.value;
130
- if (changed) {
131
- this.currentFilter.flt5 = filter.value;
132
- this.currentFilter.flt5Name = filter.titleSelected;
133
- }
134
- break;
135
- }
136
- if (changed) {
137
- this.changed.emit({ filter: this.currentFilter, group: filter.group });
138
- }
139
- this.changeDetector.markForCheck();
140
- }
141
- /**
142
- * Apply a filter action
143
- * @param filter : the filter to apply
144
- * @param clear : true if the filter mus be removed
145
- * @param event : the click event
146
- */
147
- applyFilterAction(group, clear = false, event = null) {
148
- if (!clear) {
149
- const g = this.getFilterGroup(group);
150
- if (g.action) {
151
- g.action(this, g, event);
152
- }
153
- }
154
- else {
155
- this.clearFilter(group);
156
- }
157
- this.changeDetector.markForCheck();
158
- }
159
- /**
160
- * Apply text filter
161
- */
162
- applyTextFilter() {
163
- this.currentFilter.text = this.text;
164
- this.currentFilter.text2 = this.text2;
165
- this.currentFilter.text3 = this.text3;
166
- this.changed.emit({
167
- filter: this.currentFilter,
168
- group: Filters.FLT_TEXT
169
- });
170
- this.changeDetector.markForCheck();
171
- }
172
- /**
173
- * Clear a filter
174
- * @param group : the filter group
175
- */
176
- clearFilter(group) {
177
- let changed = false;
178
- switch (group) {
179
- case Filters.FLT_1:
180
- changed = this.currentFilter.flt1 != null;
181
- if (changed) {
182
- this.currentFilter.flt1 = null;
183
- this.currentFilter.flt1Name = null;
184
- }
185
- break;
186
- case Filters.FLT_2:
187
- changed = this.currentFilter.flt2 != null;
188
- if (changed) {
189
- this.currentFilter.flt2 = null;
190
- this.currentFilter.flt2Name = null;
191
- }
192
- break;
193
- case Filters.FLT_3:
194
- changed = this.currentFilter.flt3 != null;
195
- if (changed) {
196
- this.currentFilter.flt3 = null;
197
- this.currentFilter.flt3Name = null;
198
- }
199
- break;
200
- case Filters.FLT_4:
201
- changed = this.currentFilter.flt4 != null;
202
- if (changed) {
203
- this.currentFilter.flt4 = null;
204
- this.currentFilter.flt4Name = null;
205
- }
206
- break;
207
- case Filters.FLT_5:
208
- changed = this.currentFilter.flt5 != null;
209
- if (changed) {
210
- this.currentFilter.flt5 = null;
211
- this.currentFilter.flt5Name = null;
212
- }
213
- break;
214
- }
215
- if (changed) {
216
- this.changed.emit({ filter: this.currentFilter, group: group });
217
- }
218
- }
219
- /**
220
- * Clear all filters
221
- */
222
- clearAllFilters() {
223
- this.currentFilter.flt1 = null;
224
- this.currentFilter.flt1Name = null;
225
- this.currentFilter.flt2 = null;
226
- this.currentFilter.flt2Name = null;
227
- this.currentFilter.flt3 = null;
228
- this.currentFilter.flt3Name = null;
229
- this.currentFilter.flt4 = null;
230
- this.currentFilter.flt4Name = null;
231
- this.currentFilter.flt5 = null;
232
- this.currentFilter.flt5Name = null;
233
- this.currentFilter.text = null;
234
- this.currentFilter.text2 = null;
235
- this.currentFilter.text3 = null;
236
- this.text = null;
237
- this.text2 = null;
238
- this.text3 = null;
239
- this.changed.emit({ filter: this.currentFilter, group: -1 });
240
- }
241
- /**
242
- * Check if can clear all filters button cab be showed
243
- */
244
- canClearAllFilters() {
245
- let count = 0;
246
- if (this.canFilterByText)
247
- count++;
248
- if (this.canFilterByText2)
249
- count++;
250
- if (this.canFilterByText3)
251
- count++;
252
- if (this.canFilterByFlt1)
253
- count++;
254
- if (this.canFilterByFlt2)
255
- count++;
256
- if (this.canFilterByFlt3)
257
- count++;
258
- if (this.canFilterByFlt4)
259
- count++;
260
- if (this.canFilterByFlt5)
261
- count++;
262
- return count > 1;
263
- }
264
- /**
265
- * Get the filter group
266
- * @param id : the filter id
267
- */
268
- getFilterGroup(id) {
269
- return this.filters()?.find((n) => n.group === id);
270
- }
271
- /**
272
- * Update filter bar using current search params
273
- * @param params : search params
274
- */
275
- syncFilter() {
276
- let g = this.getFilterGroup(Filters.FLT_1);
277
- if (g) {
278
- if (g.items) {
279
- this.currentFilter.flt1Name = null;
280
- if (this.currentFilter.flt1) {
281
- const gi = g.items.find(n => n.value === this.currentFilter.flt1);
282
- if (gi)
283
- this.currentFilter.flt1Name = gi.titleSelected;
284
- else
285
- this.currentFilter.flt1 = null;
286
- }
287
- }
288
- }
289
- g = this.getFilterGroup(Filters.FLT_2);
290
- if (g) {
291
- if (g.items) {
292
- this.currentFilter.flt2Name = null;
293
- if (this.currentFilter.flt2) {
294
- const gi = g.items.find(n => n.value === this.currentFilter.flt2);
295
- if (gi)
296
- this.currentFilter.flt2Name = gi.titleSelected;
297
- else
298
- this.currentFilter.flt2 = null;
299
- }
300
- }
301
- }
302
- g = this.getFilterGroup(Filters.FLT_3);
303
- if (g) {
304
- if (g.items) {
305
- this.currentFilter.flt3Name = null;
306
- if (this.currentFilter.flt3) {
307
- const gi = g.items.find(n => n.value === this.currentFilter.flt3);
308
- if (gi)
309
- this.currentFilter.flt3Name = gi.titleSelected;
310
- else
311
- this.currentFilter.flt3 = null;
312
- }
313
- }
314
- }
315
- g = this.getFilterGroup(Filters.FLT_4);
316
- if (g) {
317
- if (g.items) {
318
- this.currentFilter.flt4Name = null;
319
- if (this.currentFilter.flt4) {
320
- const gi = g.items.find(n => n.value === this.currentFilter.flt4);
321
- if (gi)
322
- this.currentFilter.flt4Name = gi.titleSelected;
323
- else
324
- this.currentFilter.flt4 = null;
325
- }
326
- }
327
- }
328
- g = this.getFilterGroup(Filters.FLT_5);
329
- if (g) {
330
- if (g.items) {
331
- this.currentFilter.flt5Name = null;
332
- if (this.currentFilter.flt5) {
333
- const gi = g.items.find(n => n.value === this.currentFilter.flt5);
334
- if (gi)
335
- this.currentFilter.flt5Name = gi.titleSelected;
336
- else
337
- this.currentFilter.flt5 = null;
338
- }
339
- }
340
- }
341
- this.text = this.currentFilter.text;
342
- this.text2 = this.currentFilter.text2;
343
- this.text3 = this.currentFilter.text3;
344
- this.changeDetector.markForCheck();
345
- }
346
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: FilterBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
347
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: FilterBarComponent, isStandalone: true, selector: "filter-bar", inputs: { filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, canFilterByText: { classPropertyName: "canFilterByText", publicName: "canFilterByText", isSignal: true, isRequired: false, transformFunction: null }, canFilterByText2: { classPropertyName: "canFilterByText2", publicName: "canFilterByText2", isSignal: true, isRequired: false, transformFunction: null }, canFilterByText3: { classPropertyName: "canFilterByText3", publicName: "canFilterByText3", isSignal: true, isRequired: false, transformFunction: null }, initialText: { classPropertyName: "initialText", publicName: "initialText", isSignal: true, isRequired: false, transformFunction: null }, initialText2: { classPropertyName: "initialText2", publicName: "initialText2", isSignal: true, isRequired: false, transformFunction: null }, initialText3: { classPropertyName: "initialText3", publicName: "initialText3", isSignal: true, isRequired: false, transformFunction: null }, textName: { classPropertyName: "textName", publicName: "textName", isSignal: true, isRequired: false, transformFunction: null }, text2Name: { classPropertyName: "text2Name", publicName: "text2Name", isSignal: true, isRequired: false, transformFunction: null }, text3Name: { classPropertyName: "text3Name", publicName: "text3Name", isSignal: true, isRequired: false, transformFunction: null }, textLength: { classPropertyName: "textLength", publicName: "textLength", isSignal: true, isRequired: false, transformFunction: null }, text2Length: { classPropertyName: "text2Length", publicName: "text2Length", isSignal: true, isRequired: false, transformFunction: null }, text3Length: { classPropertyName: "text3Length", publicName: "text3Length", isSignal: true, isRequired: false, transformFunction: null }, showTextSearchButton: { classPropertyName: "showTextSearchButton", publicName: "showTextSearchButton", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed" }, ngImport: i0, template: "<div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"filterbox\"\r\n[ngClass]=\"{'filterbox-filtered': currentFilter.filtered()}\">\r\n <div fxFlex=\"100\" fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\">\r\n @if (canFilterByText() || canFilterByText2() || canFilterByText3()) {\r\n <div fxFlex.lt-sm=\"100\" fxFlexAlign=\"center\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill style=\"padding:4px;\">\r\n @if (canFilterByText()) {\r\n <mat-form-field [ngStyle]=\"{'width': textLength() ?? '100%'}\" [appearance]=\"appearance()\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{textName()}}...</mat-label>\r\n <input matInput name=\"_text\" [(ngModel)]=\"text\" maxlength=\"100\" #_text=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text = ''; applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (showTextSearchButton()) {\r\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Trova\" (click)=\"applyTextFilter();\"\r\n matTooltip=\"Trova\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (canFilterByText2()) {\r\n <mat-form-field [ngStyle]=\"{'width': text2Length() ?? '100%'}\" [appearance]=\"appearance()\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{text2Name()}}...</mat-label>\r\n <input matInput name=\"_text2\" [(ngModel)]=\"text2\" maxlength=\"100\" #_text2=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text2) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text2 = ''; applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (canFilterByText3()) {\r\n <mat-form-field [ngStyle]=\"{'width': text3Length() ?? '100%'}\" [appearance]=\"appearance()\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{text3Name()}}...</mat-label>\r\n <input matInput name=\"_text3\" [(ngModel)]=\"text3\" maxlength=\"100\" #_text3=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text3) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text3 = ''; applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <div fxFlex.lt-sm=\"100\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill >\r\n @if (canFilterByFlt1() && flt1 && flt1.action) {\r\n <div fxLayout=\"row\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n [matTooltip]=\"flt1.tooltip || 'Filtra per ' + flt1.title\"\r\n [attr.aria-label]=\"flt1.tooltip || 'Filtra per ' + flt1.title\" color=\"primary\"\r\n (click)=\"applyFilterAction(1, false)\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt1) {\r\n <span style=\"font-weight: 200 !important\">{{flt1.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt1) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\"\r\n aria-label=\"'Azzera'\" (click)=\"applyFilterAction(1, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt1() && flt1 && flt1.items) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [matTooltip]=\"flt1.tooltip || 'Filtra per ' + flt1.title\"\r\n [attr.aria-label]=\"flt1.tooltip || 'Filtra per ' + flt1.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt1\"\r\n color=\"primary\" style=\"height:56px;\" >\r\n &nbsp;\r\n @if (!currentFilter.flt1) {\r\n <span style=\"font-weight: 200 !important\">{{flt1.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n } \r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt1=\"matMenu\">\r\n @for (f of flt1.items; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"clearFilter(flt1.items[0].group)\"\r\n attr.aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt2() && flt2 && flt2.action) {\r\n <div fxLayout=\"row\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n [matTooltip]=\"flt2.tooltip || 'Filtra per ' + flt2.title\"\r\n [attr.aria-label]=\"flt2.tooltip || 'Filtra per ' + flt2.title\" color=\"primary\"\r\n (click)=\"applyFilterAction(2, false)\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt2) {\r\n <span style=\"font-weight: 200 !important\">{{flt2.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt2) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\"\r\n aria-label=\"'Azzera'\" (click)=\"applyFilterAction(2, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (canFilterByFlt2() && flt2 && flt2.items) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [matTooltip]=\"flt2.tooltip || 'Filtra per ' + flt2.title\"\r\n [attr.aria-label]=\"flt2.tooltip || 'Filtra per ' + flt2.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt2\"\r\n color=\"primary\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt2) {\r\n <span style=\"font-weight: 200 !important\">{{flt2.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt2=\"matMenu\">\r\n @for (f of flt2.items; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"clearFilter(flt2.items[0].group)\"\r\n attr.aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt3() && flt3 && flt3.action) {\r\n <div fxLayout=\"row\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n [matTooltip]=\"flt3.tooltip || 'Filtra per ' + flt3.title\"\r\n [attr.aria-label]=\"flt3.tooltip || 'Filtra per ' + flt3.title\" color=\"primary\"\r\n (click)=\"applyFilterAction(3, false)\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt3) {\r\n <span style=\"font-weight: 200 !important\">{{flt3.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt3) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\"\r\n aria-label=\"'Azzera'\" (click)=\"applyFilterAction(3, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (canFilterByFlt3() && flt3 && flt3.items) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [matTooltip]=\"flt3.tooltip || 'Filtra per ' + flt3.title\"\r\n [attr.aria-label]=\"flt3.tooltip || 'Filtra per ' + flt3.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt3\"\r\n color=\"primary\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt3) {\r\n <span style=\"font-weight: 200 !important\">{{flt3.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt3=\"matMenu\">\r\n @for (f of flt3.items; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"clearFilter(flt3.items[0].group)\"\r\n attr.aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt4() && flt4 && flt4.action) {\r\n <div fxLayout=\"row\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n [matTooltip]=\"flt4.tooltip || 'Filtra per ' + flt4.title\"\r\n [attr.aria-label]=\"flt4.tooltip || 'Filtra per ' + flt4.title\" color=\"primary\"\r\n (click)=\"applyFilterAction(4, false)\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt4) {\r\n <span style=\"font-weight: 200 !important\">{{flt4.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt4) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\"\r\n aria-label=\"'Azzera'\" (click)=\"applyFilterAction(4, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (canFilterByFlt4() && flt4 && flt4.items) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [matTooltip]=\"flt4.tooltip || 'Filtra per ' + flt4.title\"\r\n [attr.aria-label]=\"flt4.tooltip || 'Filtra per ' + flt4.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt4\"\r\n color=\"primary\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt4) {\r\n <span style=\"font-weight: 200 !important\">{{flt4.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt4=\"matMenu\">\r\n @for (f of flt4.items; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"clearFilter(flt4.items[0].group)\"\r\n attr.aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt5() && flt5 && flt5.action) {\r\n <div fxLayout=\"row\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n [matTooltip]=\"flt5.tooltip || 'Filtra per ' + flt5.title\"\r\n [attr.aria-label]=\"flt5.tooltip || 'Filtra per ' + flt5.title\" color=\"primary\"\r\n (click)=\"applyFilterAction(5, false)\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt5) {\r\n <span style=\"font-weight: 200 !important\">{{flt5.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt5) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\"\r\n aria-label=\"'Azzera'\" (click)=\"applyFilterAction(5, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (canFilterByFlt5() && flt5 && flt5.items) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [matTooltip]=\"flt5.tooltip || 'Filtra per ' + flt5.title\"\r\n [attr.aria-label]=\"flt5.tooltip || 'Filtra per ' + flt5.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt5\"\r\n color=\"primary\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt5) {\r\n <span style=\"font-weight: 200 !important\">{{flt5.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt5=\"matMenu\">\r\n @for (f of flt5.items; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"clearFilter(flt5.items[0].group)\"\r\n attr.aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n @if (currentFilter.filtered() && canClearAllFilters()) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera tutti i filtri\" attr.aria-label=\"Azzera tutti i filtri\"\r\n (click)=\"clearAllFilters()\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n</div>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:5px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em!important;font-weight:600;padding-left:20px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width: 0px) and (max-width: 430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width: 431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.filterbox{border-radius:auto;background-color:transparent;padding:4px}.filterbox-filtered{border-radius:12px;background-color:var(--ars-filterbox-filtered-background-color, #f9fbe7)}@media (prefers-color-scheme: dark){.filterbox-filtered{background-color:var(--ars-filterbox-filtered-background-color, #f9fbe7)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i2.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i9.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i10.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
348
- }
349
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: FilterBarComponent, decorators: [{
350
- type: Component,
351
- args: [{ selector: "filter-bar", standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, NgStyle, FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule,
352
- MatTooltipModule, MatButtonModule, MatIconModule, MatMenuModule, MatDividerModule, SafeHtmlPipe], template: "<div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"filterbox\"\r\n[ngClass]=\"{'filterbox-filtered': currentFilter.filtered()}\">\r\n <div fxFlex=\"100\" fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\">\r\n @if (canFilterByText() || canFilterByText2() || canFilterByText3()) {\r\n <div fxFlex.lt-sm=\"100\" fxFlexAlign=\"center\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill style=\"padding:4px;\">\r\n @if (canFilterByText()) {\r\n <mat-form-field [ngStyle]=\"{'width': textLength() ?? '100%'}\" [appearance]=\"appearance()\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{textName()}}...</mat-label>\r\n <input matInput name=\"_text\" [(ngModel)]=\"text\" maxlength=\"100\" #_text=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text = ''; applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (showTextSearchButton()) {\r\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Trova\" (click)=\"applyTextFilter();\"\r\n matTooltip=\"Trova\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (canFilterByText2()) {\r\n <mat-form-field [ngStyle]=\"{'width': text2Length() ?? '100%'}\" [appearance]=\"appearance()\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{text2Name()}}...</mat-label>\r\n <input matInput name=\"_text2\" [(ngModel)]=\"text2\" maxlength=\"100\" #_text2=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text2) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text2 = ''; applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (canFilterByText3()) {\r\n <mat-form-field [ngStyle]=\"{'width': text3Length() ?? '100%'}\" [appearance]=\"appearance()\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{text3Name()}}...</mat-label>\r\n <input matInput name=\"_text3\" [(ngModel)]=\"text3\" maxlength=\"100\" #_text3=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text3) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text3 = ''; applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <div fxFlex.lt-sm=\"100\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill >\r\n @if (canFilterByFlt1() && flt1 && flt1.action) {\r\n <div fxLayout=\"row\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n [matTooltip]=\"flt1.tooltip || 'Filtra per ' + flt1.title\"\r\n [attr.aria-label]=\"flt1.tooltip || 'Filtra per ' + flt1.title\" color=\"primary\"\r\n (click)=\"applyFilterAction(1, false)\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt1) {\r\n <span style=\"font-weight: 200 !important\">{{flt1.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt1) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\"\r\n aria-label=\"'Azzera'\" (click)=\"applyFilterAction(1, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt1() && flt1 && flt1.items) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [matTooltip]=\"flt1.tooltip || 'Filtra per ' + flt1.title\"\r\n [attr.aria-label]=\"flt1.tooltip || 'Filtra per ' + flt1.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt1\"\r\n color=\"primary\" style=\"height:56px;\" >\r\n &nbsp;\r\n @if (!currentFilter.flt1) {\r\n <span style=\"font-weight: 200 !important\">{{flt1.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n } \r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt1=\"matMenu\">\r\n @for (f of flt1.items; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"clearFilter(flt1.items[0].group)\"\r\n attr.aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt2() && flt2 && flt2.action) {\r\n <div fxLayout=\"row\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n [matTooltip]=\"flt2.tooltip || 'Filtra per ' + flt2.title\"\r\n [attr.aria-label]=\"flt2.tooltip || 'Filtra per ' + flt2.title\" color=\"primary\"\r\n (click)=\"applyFilterAction(2, false)\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt2) {\r\n <span style=\"font-weight: 200 !important\">{{flt2.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt2) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\"\r\n aria-label=\"'Azzera'\" (click)=\"applyFilterAction(2, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (canFilterByFlt2() && flt2 && flt2.items) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [matTooltip]=\"flt2.tooltip || 'Filtra per ' + flt2.title\"\r\n [attr.aria-label]=\"flt2.tooltip || 'Filtra per ' + flt2.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt2\"\r\n color=\"primary\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt2) {\r\n <span style=\"font-weight: 200 !important\">{{flt2.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt2=\"matMenu\">\r\n @for (f of flt2.items; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"clearFilter(flt2.items[0].group)\"\r\n attr.aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt3() && flt3 && flt3.action) {\r\n <div fxLayout=\"row\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n [matTooltip]=\"flt3.tooltip || 'Filtra per ' + flt3.title\"\r\n [attr.aria-label]=\"flt3.tooltip || 'Filtra per ' + flt3.title\" color=\"primary\"\r\n (click)=\"applyFilterAction(3, false)\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt3) {\r\n <span style=\"font-weight: 200 !important\">{{flt3.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt3) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\"\r\n aria-label=\"'Azzera'\" (click)=\"applyFilterAction(3, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (canFilterByFlt3() && flt3 && flt3.items) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [matTooltip]=\"flt3.tooltip || 'Filtra per ' + flt3.title\"\r\n [attr.aria-label]=\"flt3.tooltip || 'Filtra per ' + flt3.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt3\"\r\n color=\"primary\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt3) {\r\n <span style=\"font-weight: 200 !important\">{{flt3.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt3=\"matMenu\">\r\n @for (f of flt3.items; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"clearFilter(flt3.items[0].group)\"\r\n attr.aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt4() && flt4 && flt4.action) {\r\n <div fxLayout=\"row\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n [matTooltip]=\"flt4.tooltip || 'Filtra per ' + flt4.title\"\r\n [attr.aria-label]=\"flt4.tooltip || 'Filtra per ' + flt4.title\" color=\"primary\"\r\n (click)=\"applyFilterAction(4, false)\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt4) {\r\n <span style=\"font-weight: 200 !important\">{{flt4.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt4) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\"\r\n aria-label=\"'Azzera'\" (click)=\"applyFilterAction(4, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (canFilterByFlt4() && flt4 && flt4.items) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [matTooltip]=\"flt4.tooltip || 'Filtra per ' + flt4.title\"\r\n [attr.aria-label]=\"flt4.tooltip || 'Filtra per ' + flt4.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt4\"\r\n color=\"primary\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt4) {\r\n <span style=\"font-weight: 200 !important\">{{flt4.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt4=\"matMenu\">\r\n @for (f of flt4.items; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"clearFilter(flt4.items[0].group)\"\r\n attr.aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt5() && flt5 && flt5.action) {\r\n <div fxLayout=\"row\">\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n [matTooltip]=\"flt5.tooltip || 'Filtra per ' + flt5.title\"\r\n [attr.aria-label]=\"flt5.tooltip || 'Filtra per ' + flt5.title\" color=\"primary\"\r\n (click)=\"applyFilterAction(5, false)\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt5) {\r\n <span style=\"font-weight: 200 !important\">{{flt5.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt5) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\"\r\n aria-label=\"'Azzera'\" (click)=\"applyFilterAction(5, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n @if (canFilterByFlt5() && flt5 && flt5.items) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button [matTooltip]=\"flt5.tooltip || 'Filtra per ' + flt5.title\"\r\n [attr.aria-label]=\"flt5.tooltip || 'Filtra per ' + flt5.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt5\"\r\n color=\"primary\" style=\"height:56px;\">\r\n &nbsp;\r\n @if (!currentFilter.flt5) {\r\n <span style=\"font-weight: 200 !important\">{{flt5.title}}</span>\r\n } @else {\r\n <span [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt5=\"matMenu\">\r\n @for (f of flt5.items; track f) {\r\n\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button color=\"primary\" (click)=\"clearFilter(flt5.items[0].group)\"\r\n attr.aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n @if (currentFilter.filtered() && canClearAllFilters()) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera tutti i filtri\" attr.aria-label=\"Azzera tutti i filtri\"\r\n (click)=\"clearAllFilters()\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n</div>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:5px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em!important;font-weight:600;padding-left:20px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width: 0px) and (max-width: 430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width: 431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.filterbox{border-radius:auto;background-color:transparent;padding:4px}.filterbox-filtered{border-radius:12px;background-color:var(--ars-filterbox-filtered-background-color, #f9fbe7)}@media (prefers-color-scheme: dark){.filterbox-filtered{background-color:var(--ars-filterbox-filtered-background-color, #f9fbe7)}}\n"] }]
353
- }], ctorParameters: () => [], propDecorators: { changed: [{
354
- type: Output
355
- }] } });
356
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkvdWkvY29tcG9uZW50cy9maWx0ZXItYmFyL2ZpbHRlci1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3VpL3VpL2NvbXBvbmVudHMvZmlsdGVyLWJhci9maWx0ZXItYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFpRCxPQUFPLEVBQUUsTUFBTSxl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QixFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQzt3REFHeEYsT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MsIE5nU3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT3V0cHV0LCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyXCI7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dFwiO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwXCI7XHJcbmltcG9ydCB7IFNhZmVIdG1sUGlwZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IEN1cnJlbnRGaWx0ZXIsIEN1cnJlbnRGaWx0ZXJDaGFuZ2VkLCBGaWx0ZXJHcm91cCwgRmlsdGVySXRlbSwgRmlsdGVycyB9IGZyb20gJy4uLy4uL2ZpbHRlcnMnO1xyXG5pbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0JztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZmlsdGVyLWJhclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZmlsdGVyLWJhci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9maWx0ZXItYmFyLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW05nQ2xhc3MsIE5nU3R5bGUsIEZsZXhMYXlvdXRNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIEZvcm1zTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRNZW51TW9kdWxlLCBNYXREaXZpZGVyTW9kdWxlLCBTYWZlSHRtbFBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDdXJyZW50RmlsdGVyQ2hhbmdlZD4oKTtcclxuICBwcml2YXRlIGNoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgZmlsdGVycyA9IGlucHV0PGFueT4oKTtcclxuICBjYW5GaWx0ZXJCeUZsdDEgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhbkZpbHRlckJ5Rmx0MiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuRmlsdGVyQnlGbHQzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYW5GaWx0ZXJCeUZsdDQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhbkZpbHRlckJ5Rmx0NSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuRmlsdGVyQnlUZXh0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhbkZpbHRlckJ5VGV4dDIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuRmlsdGVyQnlUZXh0MyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpbml0aWFsVGV4dCA9IGlucHV0PHN0cmluZz4obnVsbCk7XHJcbiAgaW5pdGlhbFRleHQyID0gaW5wdXQ8c3RyaW5nPihudWxsKTtcclxuICBpbml0aWFsVGV4dDMgPSBpbnB1dDxzdHJpbmc+KG51bGwpO1xyXG4gIHRleHROYW1lID0gaW5wdXQ8c3RyaW5nPihcInRlc3RvXCIpO1xyXG4gIHRleHQyTmFtZSA9IGlucHV0PHN0cmluZz4oXCIuLi5cIik7XHJcbiAgdGV4dDNOYW1lID0gaW5wdXQ8c3RyaW5nPihcIi4uLlwiKTtcclxuICB0ZXh0TGVuZ3RoID0gaW5wdXQ8c3RyaW5nPigpO1xyXG4gIHRleHQyTGVuZ3RoID0gaW5wdXQ8c3RyaW5nPigpO1xyXG4gIHRleHQzTGVuZ3RoID0gaW5wdXQ8c3RyaW5nPigpO1xyXG4gIHNob3dUZXh0U2VhcmNoQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGFwcGVhcmFuY2UgPSBpbnB1dDwnZmlsbCcgfCAnb3V0bGluZScgfCBudWxsPignb3V0bGluZScpO1xyXG5cclxuXHJcbiAgcHJvdGVjdGVkIHRleHQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCB0ZXh0Mjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHRleHQzOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgZmx0MTogRmlsdGVyR3JvdXA7XHJcbiAgcHJvdGVjdGVkIGZsdDI6IEZpbHRlckdyb3VwO1xyXG4gIHByb3RlY3RlZCBmbHQzOiBGaWx0ZXJHcm91cDtcclxuICBwcm90ZWN0ZWQgZmx0NDogRmlsdGVyR3JvdXA7XHJcbiAgcHJvdGVjdGVkIGZsdDU6IEZpbHRlckdyb3VwO1xyXG5cclxuICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudEZpbHRlcjogQ3VycmVudEZpbHRlciA9IG5ldyBDdXJyZW50RmlsdGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgdGhpcy50ZXh0ID0gdGhpcy5pbml0aWFsVGV4dCgpO1xyXG4gICAgICB0aGlzLnRleHQyID0gdGhpcy5pbml0aWFsVGV4dDIoKTtcclxuICAgICAgdGhpcy50ZXh0MyA9IHRoaXMuaW5pdGlhbFRleHQzKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSBmaWx0ZXJzXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUZpbHRlcnMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZmlsdGVycygpKSByZXR1cm47XHJcbiAgICB0aGlzLmZpbHRlcnMoKT8uZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAobi5ncm91cCkge1xyXG4gICAgICAgIGNhc2UgRmlsdGVycy5GTFRfMTpcclxuICAgICAgICAgIHRoaXMuZmx0MSA9IG47XHJcbiAgICAgICAgICB0aGlzLmNhbkZpbHRlckJ5Rmx0MS5zZXQobi5hY3Rpb24gfHwgKG4uaXRlbXMgJiYgbi5pdGVtcy5sZW5ndGggPiAwKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEZpbHRlcnMuRkxUXzI6XHJcbiAgICAgICAgICB0aGlzLmZsdDIgPSBuO1xyXG4gICAgICAgICAgdGhpcy5jYW5GaWx0ZXJCeUZsdDIuc2V0KG4uYWN0aW9uIHx8IChuLml0ZW1zICYmIG4uaXRlbXMubGVuZ3RoID4gMCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBGaWx0ZXJzLkZMVF8zOlxyXG4gICAgICAgICAgdGhpcy5mbHQzID0gbjtcclxuICAgICAgICAgIHRoaXMuY2FuRmlsdGVyQnlGbHQzLnNldChuLmFjdGlvbiB8fCAobi5pdGVtcyAmJiBuLml0ZW1zLmxlbmd0aCA+IDApKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRmlsdGVycy5GTFRfNDpcclxuICAgICAgICAgIHRoaXMuZmx0NCA9IG47XHJcbiAgICAgICAgICB0aGlzLmNhbkZpbHRlckJ5Rmx0NC5zZXQobi5hY3Rpb24gfHwgKG4uaXRlbXMgJiYgbi5pdGVtcy5sZW5ndGggPiAwKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEZpbHRlcnMuRkxUXzU6XHJcbiAgICAgICAgICB0aGlzLmZsdDUgPSBuO1xyXG4gICAgICAgICAgdGhpcy5jYW5GaWx0ZXJCeUZsdDUuc2V0KG4uYWN0aW9uIHx8IChuLml0ZW1zICYmIG4uaXRlbXMubGVuZ3RoID4gMCkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgYSBmaWx0ZXJcclxuICAgKiBAcGFyYW0gZmlsdGVyIDogdGhlIGZpbHRlciB0byBhcHBseVxyXG4gICAqL1xyXG4gIGFwcGx5RmlsdGVyKGZpbHRlcjogRmlsdGVySXRlbSkge1xyXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcclxuICAgIHN3aXRjaCAoZmlsdGVyLmdyb3VwKSB7XHJcbiAgICAgIGNhc2UgRmlsdGVycy5GTFRfMTpcclxuICAgICAgICBjaGFuZ2VkID0gdGhpcy5jdXJyZW50RmlsdGVyLmZsdDEgIT0gZmlsdGVyLnZhbHVlO1xyXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MSA9IGZpbHRlci52YWx1ZTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudEZpbHRlci5mbHQxTmFtZSA9IGZpbHRlci50aXRsZVNlbGVjdGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWx0ZXJzLkZMVF8yOlxyXG4gICAgICAgIGNoYW5nZWQgPSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MiAhPSBmaWx0ZXIudmFsdWU7XHJcbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudEZpbHRlci5mbHQyID0gZmlsdGVyLnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDJOYW1lID0gZmlsdGVyLnRpdGxlU2VsZWN0ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpbHRlcnMuRkxUXzM6XHJcbiAgICAgICAgY2hhbmdlZCA9IHRoaXMuY3VycmVudEZpbHRlci5mbHQzICE9IGZpbHRlci52YWx1ZTtcclxuICAgICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDMgPSBmaWx0ZXIudmFsdWU7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0M05hbWUgPSBmaWx0ZXIudGl0bGVTZWxlY3RlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmlsdGVycy5GTFRfNDpcclxuICAgICAgICBjaGFuZ2VkID0gdGhpcy5jdXJyZW50RmlsdGVyLmZsdDQgIT0gZmlsdGVyLnZhbHVlO1xyXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NCA9IGZpbHRlci52YWx1ZTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudEZpbHRlci5mbHQ0TmFtZSA9IGZpbHRlci50aXRsZVNlbGVjdGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWx0ZXJzLkZMVF81OlxyXG4gICAgICAgIGNoYW5nZWQgPSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NSAhPSBmaWx0ZXIudmFsdWU7XHJcbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudEZpbHRlci5mbHQ1ID0gZmlsdGVyLnZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDVOYW1lID0gZmlsdGVyLnRpdGxlU2VsZWN0ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZC5lbWl0KHsgZmlsdGVyOiB0aGlzLmN1cnJlbnRGaWx0ZXIsIGdyb3VwOiBmaWx0ZXIuZ3JvdXAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGEgZmlsdGVyIGFjdGlvblxyXG4gICAqIEBwYXJhbSBmaWx0ZXIgOiB0aGUgZmlsdGVyIHRvIGFwcGx5XHJcbiAgICogQHBhcmFtIGNsZWFyIDogdHJ1ZSBpZiB0aGUgZmlsdGVyIG11cyBiZSByZW1vdmVkXHJcbiAgICogQHBhcmFtIGV2ZW50IDogdGhlIGNsaWNrIGV2ZW50XHJcbiAgICovXHJcbiAgYXBwbHlGaWx0ZXJBY3Rpb24oZ3JvdXA6IG51bWJlciwgY2xlYXI6IGJvb2xlYW4gPSBmYWxzZSwgZXZlbnQ6IGFueSA9IG51bGwpIHtcclxuICAgIGlmICghY2xlYXIpIHtcclxuICAgICAgY29uc3QgZyA9IHRoaXMuZ2V0RmlsdGVyR3JvdXAoZ3JvdXApO1xyXG4gICAgICBpZiAoZy5hY3Rpb24pIHtcclxuICAgICAgICBnLmFjdGlvbih0aGlzLCBnLCBldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xlYXJGaWx0ZXIoZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgdGV4dCBmaWx0ZXJcclxuICAgKi9cclxuICBhcHBseVRleHRGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIudGV4dCA9IHRoaXMudGV4dDtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlci50ZXh0MiA9IHRoaXMudGV4dDI7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIudGV4dDMgPSB0aGlzLnRleHQzO1xyXG4gICAgdGhpcy5jaGFuZ2VkLmVtaXQoe1xyXG4gICAgICBmaWx0ZXI6IHRoaXMuY3VycmVudEZpbHRlcixcclxuICAgICAgZ3JvdXA6IEZpbHRlcnMuRkxUX1RFWFRcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYSBmaWx0ZXJcclxuICAgKiBAcGFyYW0gZ3JvdXAgOiB0aGUgZmlsdGVyIGdyb3VwXHJcbiAgICovXHJcbiAgY2xlYXJGaWx0ZXIoZ3JvdXA6IG51bWJlcikge1xyXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcclxuICAgIHN3aXRjaCAoZ3JvdXApIHtcclxuICAgICAgY2FzZSBGaWx0ZXJzLkZMVF8xOlxyXG4gICAgICAgIGNoYW5nZWQgPSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MSAhPSBudWxsO1xyXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MU5hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWx0ZXJzLkZMVF8yOlxyXG4gICAgICAgIGNoYW5nZWQgPSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MiAhPSBudWxsO1xyXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MiA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0Mk5hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWx0ZXJzLkZMVF8zOlxyXG4gICAgICAgIGNoYW5nZWQgPSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MyAhPSBudWxsO1xyXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MyA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0M05hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWx0ZXJzLkZMVF80OlxyXG4gICAgICAgIGNoYW5nZWQgPSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NCAhPSBudWxsO1xyXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NE5hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWx0ZXJzLkZMVF81OlxyXG4gICAgICAgIGNoYW5nZWQgPSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NSAhPSBudWxsO1xyXG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NU5hbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZC5lbWl0KHsgZmlsdGVyOiB0aGlzLmN1cnJlbnRGaWx0ZXIsIGdyb3VwOiBncm91cCB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGFsbCBmaWx0ZXJzXHJcbiAgICovXHJcbiAgY2xlYXJBbGxGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDEgPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDFOYW1lID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlci5mbHQyID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlci5mbHQyTmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MyA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0M05hbWUgPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDQgPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDROYW1lID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlci5mbHQ1ID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudEZpbHRlci5mbHQ1TmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIudGV4dCA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIudGV4dDIgPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50RmlsdGVyLnRleHQzID0gbnVsbDtcclxuICAgIHRoaXMudGV4dCA9IG51bGw7XHJcbiAgICB0aGlzLnRleHQyID0gbnVsbDtcclxuICAgIHRoaXMudGV4dDMgPSBudWxsO1xyXG4gICAgdGhpcy5jaGFuZ2VkLmVtaXQoeyBmaWx0ZXI6IHRoaXMuY3VycmVudEZpbHRlciwgZ3JvdXA6IC0xIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgY2FuIGNsZWFyIGFsbCBmaWx0ZXJzIGJ1dHRvbiBjYWIgYmUgc2hvd2VkXHJcbiAgICovXHJcbiAgY2FuQ2xlYXJBbGxGaWx0ZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGNvdW50ID0gMDtcclxuICAgIGlmICh0aGlzLmNhbkZpbHRlckJ5VGV4dCkgY291bnQrKztcclxuICAgIGlmICh0aGlzLmNhbkZpbHRlckJ5VGV4dDIpIGNvdW50Kys7XHJcbiAgICBpZiAodGhpcy5jYW5GaWx0ZXJCeVRleHQzKSBjb3VudCsrO1xyXG4gICAgaWYgKHRoaXMuY2FuRmlsdGVyQnlGbHQxKSBjb3VudCsrO1xyXG4gICAgaWYgKHRoaXMuY2FuRmlsdGVyQnlGbHQyKSBjb3VudCsrO1xyXG4gICAgaWYgKHRoaXMuY2FuRmlsdGVyQnlGbHQzKSBjb3VudCsrO1xyXG4gICAgaWYgKHRoaXMuY2FuRmlsdGVyQnlGbHQ0KSBjb3VudCsrO1xyXG4gICAgaWYgKHRoaXMuY2FuRmlsdGVyQnlGbHQ1KSBjb3VudCsrO1xyXG4gICAgcmV0dXJuIGNvdW50ID4gMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgZmlsdGVyIGdyb3VwXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIGZpbHRlciBpZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0RmlsdGVyR3JvdXAoaWQ6IG51bWJlcik6IEZpbHRlckdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcnMoKT8uZmluZCgobjogYW55KSA9PiBuLmdyb3VwID09PSBpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgZmlsdGVyIGJhciB1c2luZyBjdXJyZW50IHNlYXJjaCBwYXJhbXNcclxuICAgKiBAcGFyYW0gcGFyYW1zIDogc2VhcmNoIHBhcmFtc1xyXG4gICAqL1xyXG4gIHN5bmNGaWx0ZXIoKSB7XHJcbiAgICBsZXQgZyA9IHRoaXMuZ2V0RmlsdGVyR3JvdXAoRmlsdGVycy5GTFRfMSk7XHJcbiAgICBpZiAoZykge1xyXG4gICAgICBpZiAoZy5pdGVtcykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZpbHRlci5mbHQxTmFtZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5mbHQxKSB7XHJcbiAgICAgICAgICBjb25zdCBnaSA9IGcuaXRlbXMuZmluZChuID0+IG4udmFsdWUgPT09IHRoaXMuY3VycmVudEZpbHRlci5mbHQxKTtcclxuICAgICAgICAgIGlmIChnaSkgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDFOYW1lID0gZ2kudGl0bGVTZWxlY3RlZDtcclxuICAgICAgICAgIGVsc2UgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDEgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGcgPSB0aGlzLmdldEZpbHRlckdyb3VwKEZpbHRlcnMuRkxUXzIpO1xyXG4gICAgaWYgKGcpIHtcclxuICAgICAgaWYgKGcuaXRlbXMpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0Mk5hbWUgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0Mikge1xyXG4gICAgICAgICAgY29uc3QgZ2kgPSBnLml0ZW1zLmZpbmQobiA9PiBuLnZhbHVlID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0Mik7XHJcbiAgICAgICAgICBpZiAoZ2kpIHRoaXMuY3VycmVudEZpbHRlci5mbHQyTmFtZSA9IGdpLnRpdGxlU2VsZWN0ZWQ7XHJcbiAgICAgICAgICBlbHNlIHRoaXMuY3VycmVudEZpbHRlci5mbHQyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnID0gdGhpcy5nZXRGaWx0ZXJHcm91cChGaWx0ZXJzLkZMVF8zKTtcclxuICAgIGlmIChnKSB7XHJcbiAgICAgIGlmIChnLml0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDNOYW1lID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyLmZsdDMpIHtcclxuICAgICAgICAgIGNvbnN0IGdpID0gZy5pdGVtcy5maW5kKG4gPT4gbi52YWx1ZSA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZsdDMpO1xyXG4gICAgICAgICAgaWYgKGdpKSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0M05hbWUgPSBnaS50aXRsZVNlbGVjdGVkO1xyXG4gICAgICAgICAgZWxzZSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0MyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZyA9IHRoaXMuZ2V0RmlsdGVyR3JvdXAoRmlsdGVycy5GTFRfNCk7XHJcbiAgICBpZiAoZykge1xyXG4gICAgICBpZiAoZy5pdGVtcykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZpbHRlci5mbHQ0TmFtZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5mbHQ0KSB7XHJcbiAgICAgICAgICBjb25zdCBnaSA9IGcuaXRlbXMuZmluZChuID0+IG4udmFsdWUgPT09IHRoaXMuY3VycmVudEZpbHRlci5mbHQ0KTtcclxuICAgICAgICAgIGlmIChnaSkgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDROYW1lID0gZ2kudGl0bGVTZWxlY3RlZDtcclxuICAgICAgICAgIGVsc2UgdGhpcy5jdXJyZW50RmlsdGVyLmZsdDQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGcgPSB0aGlzLmdldEZpbHRlckdyb3VwKEZpbHRlcnMuRkxUXzUpO1xyXG4gICAgaWYgKGcpIHtcclxuICAgICAgaWYgKGcuaXRlbXMpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NU5hbWUgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NSkge1xyXG4gICAgICAgICAgY29uc3QgZ2kgPSBnLml0ZW1zLmZpbmQobiA9PiBuLnZhbHVlID09PSB0aGlzLmN1cnJlbnRGaWx0ZXIuZmx0NSk7XHJcbiAgICAgICAgICBpZiAoZ2kpIHRoaXMuY3VycmVudEZpbHRlci5mbHQ1TmFtZSA9IGdpLnRpdGxlU2VsZWN0ZWQ7XHJcbiAgICAgICAgICBlbHNlIHRoaXMuY3VycmVudEZpbHRlci5mbHQ1ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRleHQgPSB0aGlzLmN1cnJlbnRGaWx0ZXIudGV4dDtcclxuICAgIHRoaXMudGV4dDIgPSB0aGlzLmN1cnJlbnRGaWx0ZXIudGV4dDI7XHJcbiAgICB0aGlzLnRleHQzID0gdGhpcy5jdXJyZW50RmlsdGVyLnRleHQzO1xyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgZnhMYXlvdXQ9XCJyb3dcIiAgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiICBjbGFzcz1cImZpbHRlcmJveFwiXHJcbltuZ0NsYXNzXT1cInsnZmlsdGVyYm94LWZpbHRlcmVkJzogY3VycmVudEZpbHRlci5maWx0ZXJlZCgpfVwiPlxyXG4gIDxkaXYgZnhGbGV4PVwiMTAwXCIgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuXCI+XHJcbiAgICBAaWYgKGNhbkZpbHRlckJ5VGV4dCgpIHx8IGNhbkZpbHRlckJ5VGV4dDIoKSB8fCBjYW5GaWx0ZXJCeVRleHQzKCkpIHtcclxuICAgIDxkaXYgZnhGbGV4Lmx0LXNtPVwiMTAwXCIgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbCBzdHlsZT1cInBhZGRpbmc6NHB4O1wiPlxyXG4gICAgICAgIEBpZiAoY2FuRmlsdGVyQnlUZXh0KCkpIHtcclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgW25nU3R5bGVdPVwieyd3aWR0aCc6IHRleHRMZW5ndGgoKSA/PyAnMTAwJSd9XCIgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZSgpXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD5DZXJjYSBwZXIge3t0ZXh0TmFtZSgpfX0uLi48L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPVwiX3RleHRcIiBbKG5nTW9kZWwpXT1cInRleHRcIiBtYXhsZW5ndGg9XCIxMDBcIiAjX3RleHQ9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgKGtleXVwLkVudGVyKT1cImFwcGx5VGV4dEZpbHRlcigpXCIgbWF0VG9vbHRpcD1cIlByZW1pIElOVklPIHBlciBhdnZpYXJlIGxhIHJpY2VyY2FcIj5cclxuICAgICAgICAgIEBpZiAodGV4dCkge1xyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidGV4dCA9ICcnOyBhcHBseVRleHRGaWx0ZXIoKTtcIiBtYXRUb29sdGlwPVwiQXp6ZXJhXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEBpZiAoc2hvd1RleHRTZWFyY2hCdXR0b24oKSkge1xyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiVHJvdmFcIiAoY2xpY2spPVwiYXBwbHlUZXh0RmlsdGVyKCk7XCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlRyb3ZhXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmIChjYW5GaWx0ZXJCeVRleHQyKCkpIHtcclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgW25nU3R5bGVdPVwieyd3aWR0aCc6IHRleHQyTGVuZ3RoKCkgPz8gJzEwMCUnfVwiIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UoKVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+Q2VyY2EgcGVyIHt7dGV4dDJOYW1lKCl9fS4uLjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9XCJfdGV4dDJcIiBbKG5nTW9kZWwpXT1cInRleHQyXCIgbWF4bGVuZ3RoPVwiMTAwXCIgI190ZXh0Mj1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAoa2V5dXAuRW50ZXIpPVwiYXBwbHlUZXh0RmlsdGVyKClcIiBtYXRUb29sdGlwPVwiUHJlbWkgSU5WSU8gcGVyIGF2dmlhcmUgbGEgcmljZXJjYVwiPlxyXG4gICAgICAgICAgQGlmICh0ZXh0Mikge1xyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidGV4dDIgPSAnJzsgYXBwbHlUZXh0RmlsdGVyKCk7XCIgbWF0VG9vbHRpcD1cIkF6emVyYVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmIChjYW5GaWx0ZXJCeVRleHQzKCkpIHtcclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgW25nU3R5bGVdPVwieyd3aWR0aCc6IHRleHQzTGVuZ3RoKCkgPz8gJzEwMCUnfVwiIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UoKVwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+Q2VyY2EgcGVyIHt7dGV4dDNOYW1lKCl9fS4uLjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9XCJfdGV4dDNcIiBbKG5nTW9kZWwpXT1cInRleHQzXCIgbWF4bGVuZ3RoPVwiMTAwXCIgI190ZXh0Mz1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAoa2V5dXAuRW50ZXIpPVwiYXBwbHlUZXh0RmlsdGVyKClcIiBtYXRUb29sdGlwPVwiUHJlbWkgSU5WSU8gcGVyIGF2dmlhcmUgbGEgcmljZXJjYVwiPlxyXG4gICAgICAgICAgQGlmICh0ZXh0Mykge1xyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidGV4dDMgPSAnJzsgYXBwbHlUZXh0RmlsdGVyKCk7XCIgbWF0VG9vbHRpcD1cIkF6emVyYVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8ZGl2IGZ4RmxleC5sdC1zbT1cIjEwMFwiPlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsID5cclxuICAgICAgICBAaWYgKGNhbkZpbHRlckJ5Rmx0MSgpICYmIGZsdDEgJiYgZmx0MS5hY3Rpb24pIHtcclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b25cclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZmx0MS50b29sdGlwIHx8ICdGaWx0cmEgcGVyICcgKyBmbHQxLnRpdGxlXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJmbHQxLnRvb2x0aXAgfHwgJ0ZpbHRyYSBwZXIgJyArIGZsdDEudGl0bGVcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJBY3Rpb24oMSwgZmFsc2UpXCIgc3R5bGU9XCJoZWlnaHQ6NTZweDtcIj5cclxuICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgIEBpZiAoIWN1cnJlbnRGaWx0ZXIuZmx0MSkge1xyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiAyMDAgIWltcG9ydGFudFwiPnt7Zmx0MS50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJjdXJyZW50RmlsdGVyLmZsdDFOYW1lIHwgc2FmZUh0bWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgQGlmIChjdXJyZW50RmlsdGVyLmZsdDEpIHtcclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uICBtYXRUb29sdGlwPVwiQXp6ZXJhXCJcclxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIidBenplcmEnXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVyQWN0aW9uKDEsIHRydWUpO1wiIGNsYXNzPVwic21hbGwtaWNvbi1idXR0b25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0gQGVsc2UgaWYgKGNhbkZpbHRlckJ5Rmx0MSgpICYmIGZsdDEgJiYgZmx0MS5pdGVtcykge1xyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiBbbWF0VG9vbHRpcF09XCJmbHQxLnRvb2x0aXAgfHwgJ0ZpbHRyYSBwZXIgJyArIGZsdDEudGl0bGVcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJmbHQxLnRvb2x0aXAgfHwgJ0ZpbHRyYSBwZXIgJyArIGZsdDEudGl0bGVcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudUFwcGx5RmlsdGVyRmx0MVwiXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT1cImhlaWdodDo1NnB4O1wiID5cclxuICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgQGlmICghY3VycmVudEZpbHRlci5mbHQxKSB7XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiAyMDAgIWltcG9ydGFudFwiPnt7Zmx0MS50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cImN1cnJlbnRGaWx0ZXIuZmx0MU5hbWUgfCBzYWZlSHRtbFwiPjwvc3Bhbj5cclxuICAgICAgICAgIH0gICAgICAgICAgXHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLW1lbnUtZHJvcC1kb3duXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtZW51QXBwbHlGaWx0ZXJGbHQxPVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICBAZm9yIChmIG9mIGZsdDEuaXRlbXM7IHRyYWNrIGYpIHtcclxuXHJcbiAgICAgICAgICAgIEBpZiAoZi5kaXZpZGVyKSB7XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoZilcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImYuZGVzY3JpcHRpb25cIiBzdHlsZT1cIm1pbi13aWR0aDogMjAwcHhcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImYudGl0bGUgfCBzYWZlSHRtbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IG1pbi13aWR0aDogMjAwcHg7IHBhZGRpbmc6IDRweCA0cHggMCA0cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjbGVhckZpbHRlcihmbHQxLml0ZW1zWzBdLmdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgIGF0dHIuYXJpYS1sYWJlbD1cIkF6emVyYVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6MThweDsgaGVpZ2h0OiAxOHB4OyB3aWR0aDoxOHB4O1wiPmNsZWFyPC9tYXQtaWNvbj4gQXp6ZXJhXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQGlmIChjYW5GaWx0ZXJCeUZsdDIoKSAmJiBmbHQyICYmIGZsdDIuYWN0aW9uKSB7XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImZsdDIudG9vbHRpcCB8fCAnRmlsdHJhIHBlciAnICsgZmx0Mi50aXRsZVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZmx0Mi50b29sdGlwIHx8ICdGaWx0cmEgcGVyICcgKyBmbHQyLnRpdGxlXCIgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5RmlsdGVyQWN0aW9uKDIsIGZhbHNlKVwiIHN0eWxlPVwiaGVpZ2h0OjU2cHg7XCI+XHJcbiAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICBAaWYgKCFjdXJyZW50RmlsdGVyLmZsdDIpIHtcclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogMjAwICFpbXBvcnRhbnRcIj57e2ZsdDIudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwiY3VycmVudEZpbHRlci5mbHQyTmFtZSB8IHNhZmVIdG1sXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIEBpZiAoY3VycmVudEZpbHRlci5mbHQyKSB7XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAgbWF0VG9vbHRpcD1cIkF6emVyYVwiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCInQXp6ZXJhJ1wiIChjbGljayk9XCJhcHBseUZpbHRlckFjdGlvbigyLCB0cnVlKTtcIiBjbGFzcz1cInNtYWxsLWljb24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmIChjYW5GaWx0ZXJCeUZsdDIoKSAmJiBmbHQyICYmIGZsdDIuaXRlbXMpIHtcclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gW21hdFRvb2x0aXBdPVwiZmx0Mi50b29sdGlwIHx8ICdGaWx0cmEgcGVyICcgKyBmbHQyLnRpdGxlXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZmx0Mi50b29sdGlwIHx8ICdGaWx0cmEgcGVyICcgKyBmbHQyLnRpdGxlXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVBcHBseUZpbHRlckZsdDJcIlxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgc3R5bGU9XCJoZWlnaHQ6NTZweDtcIj5cclxuICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgQGlmICghY3VycmVudEZpbHRlci5mbHQyKSB7XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiAyMDAgIWltcG9ydGFudFwiPnt7Zmx0Mi50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cImN1cnJlbnRGaWx0ZXIuZmx0Mk5hbWUgfCBzYWZlSHRtbFwiPjwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tbWVudS1kcm9wLWRvd25cIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI21lbnVBcHBseUZpbHRlckZsdDI9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgIEBmb3IgKGYgb2YgZmx0Mi5pdGVtczsgdHJhY2sgZikge1xyXG5cclxuICAgICAgICAgICAgQGlmIChmLmRpdmlkZXIpIHtcclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhcHBseUZpbHRlcihmKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiZi5kZXNjcmlwdGlvblwiIHN0eWxlPVwibWluLXdpZHRoOiAyMDBweFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZi50aXRsZSB8IHNhZmVIdG1sXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgbWluLXdpZHRoOiAyMDBweDsgcGFkZGluZzogNHB4IDRweCAwIDRweDtcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNsZWFyRmlsdGVyKGZsdDIuaXRlbXNbMF0uZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwiQXp6ZXJhXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZToxOHB4OyBoZWlnaHQ6IDE4cHg7IHdpZHRoOjE4cHg7XCI+Y2xlYXI8L21hdC1pY29uPiBBenplcmFcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBAaWYgKGNhbkZpbHRlckJ5Rmx0MygpICYmIGZsdDMgJiYgZmx0My5hY3Rpb24pIHtcclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b25cclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZmx0My50b29sdGlwIHx8ICdGaWx0cmEgcGVyICcgKyBmbHQzLnRpdGxlXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJmbHQzLnRvb2x0aXAgfHwgJ0ZpbHRyYSBwZXIgJyArIGZsdDMudGl0bGVcIiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJBY3Rpb24oMywgZmFsc2UpXCIgc3R5bGU9XCJoZWlnaHQ6NTZweDtcIj5cclxuICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgIEBpZiAoIWN1cnJlbnRGaWx0ZXIuZmx0Mykge1xyXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiAyMDAgIWltcG9ydGFudFwiPnt7Zmx0My50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJjdXJyZW50RmlsdGVyLmZsdDNOYW1lIHwgc2FmZUh0bWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgQGlmIChjdXJyZW50RmlsdGVyLmZsdDMpIHtcclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uICBtYXRUb29sdGlwPVwiQXp6ZXJhXCJcclxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIidBenplcmEnXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVyQWN0aW9uKDMsIHRydWUpO1wiIGNsYXNzPVwic21hbGwtaWNvbi1idXR0b25cIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYgKGNhbkZpbHRlckJ5Rmx0MygpICYmIGZsdDMgJiYgZmx0My5pdGVtcykge1xyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiBbbWF0VG9vbHRpcF09XCJmbHQzLnRvb2x0aXAgfHwgJ0ZpbHRyYSBwZXIgJyArIGZsdDMudGl0bGVcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJmbHQzLnRvb2x0aXAgfHwgJ0ZpbHRyYSBwZXIgJyArIGZsdDMudGl0bGVcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudUFwcGx5RmlsdGVyRmx0M1wiXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT1cImhlaWdodDo1NnB4O1wiPlxyXG4gICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICBAaWYgKCFjdXJyZW50RmlsdGVyLmZsdDMpIHtcclxuICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDIwMCAhaW1wb3J0YW50XCI+e3tmbHQzLnRpdGxlfX08L3NwYW4+XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwiY3VycmVudEZpbHRlci5mbHQzTmFtZSB8IHNhZmVIdG1sXCI+PC9zcGFuPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1tZW51LWRyb3AtZG93blwiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWVudUFwcGx5RmlsdGVyRmx0Mz1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgQGZvciAoZiBvZiBmbHQzLml0ZW1zOyB0cmFjayBmKSB7XHJcblxyXG4gICAgICAgICAgICBAaWYgKGYuZGl2aWRlcikge1xyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFwcGx5RmlsdGVyKGYpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJmLmRlc2NyaXB0aW9uXCIgc3R5bGU9XCJtaW4td2lkdGg6IDIwMHB4XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJmLnRpdGxlIHwgc2FmZUh0bWxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJlbmRcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBtaW4td2lkdGg6IDIwMHB4OyBwYWRkaW5nOiA0cHggNHB4IDAgNHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoZmx0My5pdGVtc1swXS5ncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICBhdHRyLmFyaWEtbGFiZWw9XCJBenplcmFcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiZm9udC1zaXplOjE4cHg7IGhlaWdodDogMThweDsgd2lkdGg6MThweDtcIj5jbGVhcjwvbWF0LWljb24+IEF6emVyYVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIEBpZiAoY2FuRmlsdGVyQnlGbHQ0KCkgJiYgZmx0NCAmJiBmbHQ0LmFjdGlvbikge1xyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJmbHQ0LnRvb2x0aXAgfHwgJ0ZpbHRyYSBwZXIgJyArIGZsdDQudGl0bGVcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImZsdDQudG9vbHRpcCB8fCAnRmlsdHJhIHBlciAnICsgZmx0NC50aXRsZVwiIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlckFjdGlvbig0LCBmYWxzZSlcIiBzdHlsZT1cImhlaWdodDo1NnB4O1wiPlxyXG4gICAgICAgICAgICAmbmJzcDtcclxuICAgICAgICAgICAgQGlmICghY3VycmVudEZpbHRlci5mbHQ0KSB7XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDIwMCAhaW1wb3J0YW50XCI+e3tmbHQ0LnRpdGxlfX08L3NwYW4+XHJcbiAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cImN1cnJlbnRGaWx0ZXIuZmx0NE5hbWUgfCBzYWZlSHRtbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICBAaWYgKGN1cnJlbnRGaWx0ZXIuZmx0NCkge1xyXG4gICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gIG1hdFRvb2x0aXA9XCJBenplcmFcIlxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiJ0F6emVyYSdcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJBY3Rpb24oNCwgdHJ1ZSk7XCIgY2xhc3M9XCJzbWFsbC1pY29uLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBpZiAoY2FuRmlsdGVyQnlGbHQ0KCkgJiYgZmx0NCAmJiBmbHQ0Lml0ZW1zKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIFttYXRUb29sdGlwXT1cImZsdDQudG9vbHRpcCB8fCAnRmlsdHJhIHBlciAnICsgZmx0NC50aXRsZVwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImZsdDQudG9vbHRpcCB8fCAnRmlsdHJhIHBlciAnICsgZmx0NC50aXRsZVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51QXBwbHlGaWx0ZXJGbHQ0XCJcclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIHN0eWxlPVwiaGVpZ2h0OjU2cHg7XCI+XHJcbiAgICAgICAgICAmbmJzcDtcclxuICAgICAgICAgIEBpZiAoIWN1cnJlbnRGaWx0ZXIuZmx0NCkge1xyXG4gICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogMjAwICFpbXBvcnRhbnRcIj57e2ZsdDQudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJjdXJyZW50RmlsdGVyLmZsdDROYW1lIHwgc2FmZUh0bWxcIj48L3NwYW4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLW1lbnUtZHJvcC1kb3duXCI+ZXhwYW5kX21vcmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtZW51QXBwbHlGaWx0ZXJGbHQ0PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICBAZm9yIChmIG9mIGZsdDQuaXRlbXM7IHRyYWNrIGYpIHtcclxuXHJcbiAgICAgICAgICAgIEBpZiAoZi5kaXZpZGVyKSB7XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoZilcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImYuZGVzY3JpcHRpb25cIiBzdHlsZT1cIm1pbi13aWR0aDogMjAwcHhcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImYudGl0bGUgfCBzYWZlSHRtbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsPlxyXG4gICAgICAgICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IG1pbi13aWR0aDogMjAwcHg7IHBhZGRpbmc6IDRweCA0cHggMCA0cHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJjbGVhckZpbHRlcihmbHQ0Lml0ZW1zWzBdLmdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgIGF0dHIuYXJpYS1sYWJlbD1cIkF6emVyYVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6MThweDsgaGVpZ2h0OiAxOHB4OyB3aWR0aDoxOHB4O1wiPmNsZWFyPC9tYXQtaWNvbj4gQXp6ZXJhXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgQGlmIChjYW5GaWx0ZXJCeUZsdDUoKSAmJiBmbHQ1ICYmIGZsdDUuYWN0aW9uKSB7XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImZsdDUudG9vbHRpcCB8fCAnRmlsdHJhIHBlciAnICsgZmx0NS50aXRsZVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZmx0NS50b29sdGlwIHx8ICdGaWx0cmEgcGVyICcgKyBmbHQ1LnRpdGxlXCIgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5RmlsdGVyQWN0aW9uKDUsIGZhbHNlKVwiIHN0eWxlPVwiaGVpZ2h0OjU2cHg7XCI+XHJcbiAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICBAaWYgKCFjdXJyZW50RmlsdGVyLmZsdDUpIHtcclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogMjAwICFpbXBvcnRhbnRcIj57e2ZsdDUudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwiY3VycmVudEZpbHRlci5mbHQ1TmFtZSB8IHNhZmVIdG1sXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIEBpZiAoY3VycmVudEZpbHRlci5mbHQ1KSB7XHJcbiAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiAgbWF0VG9vbHRpcD1cIkF6emVyYVwiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCInQXp6ZXJhJ1wiIChjbGljayk9XCJhcHBseUZpbHRlckFjdGlvbig1LCB0cnVlKTtcIiBjbGFzcz1cInNtYWxsLWljb24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgQGlmIChjYW5GaWx0ZXJCeUZsdDUoKSAmJiBmbHQ1ICYmIGZsdDUuaXRlbXMpIHtcclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gW21hdFRvb2x0aXBdPVwiZmx0NS50b29sdGlwIHx8ICdGaWx0cmEgcGVyICcgKyBmbHQ1LnRpdGxlXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZmx0NS50b29sdGlwIHx8ICdGaWx0cmEgcGVyICcgKyBmbHQ1LnRpdGxlXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVBcHBseUZpbHRlckZsdDVcIlxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgc3R5bGU9XCJoZWlnaHQ6NTZweDtcIj5cclxuICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgQGlmICghY3VycmVudEZpbHRlci5mbHQ1KSB7XHJcbiAgICAgICAgICA8c3BhbiBzdHlsZT1cImZvbnQtd2VpZ2h0OiAyMDAgIWltcG9ydGFudFwiPnt7Zmx0NS50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cImN1cnJlbnRGaWx0ZXIuZmx0NU5hbWUgfCBzYWZlSHRtbFwiPjwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tbWVudS1kcm9wLWRvd25cIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI21lbnVBcHBseUZpbHRlckZsdDU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgIEBmb3IgKGYgb2YgZmx0NS5pdGVtczsgdHJhY2sgZikge1xyXG5cclxuICAgICAgICAgICAgQGlmIChmLmRpdmlkZXIpIHtcclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhcHBseUZpbHRlcihmKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiZi5kZXNjcmlwdGlvblwiIHN0eWxlPVwibWluLXdpZHRoOiAyMDBweFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZi50aXRsZSB8IHNhZmVIdG1sXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgbWluLXdpZHRoOiAyMDBweDsgcGFkZGluZzogNHB4IDRweCAwIDRweDtcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNsZWFyRmlsdGVyKGZsdDUuaXRlbXNbMF0uZ3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgYXR0ci5hcmlhLWxhYmVsPVwiQXp6ZXJhXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImZvbnQtc2l6ZToxOHB4OyBoZWlnaHQ6IDE4cHg7IHdpZHRoOjE4cHg7XCI+Y2xlYXI8L21hdC1pY29uPiBBenplcmFcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2PlxyXG4gICAgQGlmIChjdXJyZW50RmlsdGVyLmZpbHRlcmVkKCkgJiYgY2FuQ2xlYXJBbGxGaWx0ZXJzKCkpIHtcclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQXp6ZXJhIHR1dHRpIGkgZmlsdHJpXCIgYXR0ci5hcmlhLWxhYmVsPVwiQXp6ZXJhIHR1dHRpIGkgZmlsdHJpXCJcclxuICAgICAgIChjbGljayk9XCJjbGVhckFsbEZpbHRlcnMoKVwiPlxyXG4gICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkvdWkvZGVmaW5pdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2dSZXN1bHQge1xyXG4gIHJlc3VsdD86ICdvaycgfCAnY2FuY2VsJyB8ICdvdGhlcicgfCBudWxsO1xyXG4gIHZhbHVlPzogYW55IHwgbnVsbDtcclxuICBvcHRpb25zPzogYW55IHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyUGFzc3dvcmREaWFsb2dSZXN1bHQge1xyXG4gIGVtYWlsOiBzdHJpbmc7XHJcbiAgcmVjYXB0Y2hhOiBib29sZWFuO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXNldFBhc3N3b3JkRGlhbG9nUmVzdWx0IHtcclxuICAgIHVzZXJJZDogbnVtYmVyO1xyXG4gICAgdXNlckVtYWlsOiBzdHJpbmc7XHJcbiAgICBvbGRQYXNzd29yZDogc3RyaW5nO1xyXG4gICAgcGFzc3dvcmQ6IHN0cmluZztcclxuICAgIHBhc3N3b3JkMjogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDcmVkZW50aWFsc0RpYWxvZ1Jlc3VsdCB7XHJcbiAgdXNlcjogc3RyaW5nO1xyXG4gIHBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgcmVtZW1iZXJNZT86IGJvb2xlYW4gfCBudWxsO1xyXG59Il19