@arsedizioni/ars-utils 18.1.74 → 18.1.76
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.
- package/clipper.common/common/common.module.d.ts +1 -2
- package/clipper.common/common/definitions.d.ts +317 -0
- package/clipper.common/common/interceptors/auth.interceptor.d.ts +2 -5
- package/clipper.common/common/messages.d.ts +4 -0
- package/clipper.common/common/services/clipper.service.d.ts +12 -36
- package/clipper.ui/{ui/document/documents.d.ts → documents.d.ts} +2 -6
- package/clipper.ui/public_api.d.ts +6 -5
- package/clipper.ui/ui/browser-dialog/browser-dialog.component.d.ts +30 -143
- package/clipper.ui/ui/clipper.scss +270 -106
- package/clipper.ui/ui/document/document.component.d.ts +64 -118
- package/clipper.ui/ui/document-index/document-index.component.d.ts +34 -0
- package/clipper.ui/ui/document-manager/document-manager.d.ts +126 -0
- package/clipper.ui/ui/document-menu/document-menu.component.d.ts +28 -0
- package/clipper.ui/ui/references/references.component.d.ts +39 -73
- package/clipper.ui/ui/search-calendar/search-calendar.component.d.ts +40 -0
- package/clipper.ui/ui/search-dialog/search-dialog.component.d.ts +37 -40
- package/clipper.ui/ui/search-facets/search-facets.component.d.ts +22 -70
- package/clipper.ui/ui/search-free-text-help/search-free-text-help.component.d.ts +0 -1
- package/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.d.ts +8 -12
- package/clipper.ui/ui/search-result-item/search-result-item.component.d.ts +6 -4
- package/clipper.ui/ui/search-result-manager/search-result-manager.d.ts +147 -0
- package/esm2022/clipper.common/common/common.module.mjs +2 -3
- package/esm2022/clipper.common/common/definitions.mjs +1536 -0
- package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +15 -15
- package/esm2022/clipper.common/common/messages.mjs +6 -1
- package/esm2022/clipper.common/common/services/clipper.service.mjs +65 -65
- package/esm2022/clipper.ui/documents.mjs +51 -0
- package/esm2022/clipper.ui/public_api.mjs +7 -6
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +320 -785
- package/esm2022/clipper.ui/ui/document/document.component.mjs +213 -320
- package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +121 -0
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +431 -0
- package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +56 -0
- package/esm2022/clipper.ui/ui/references/references.component.mjs +244 -438
- package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +116 -0
- package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +216 -205
- package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +157 -209
- package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +7 -8
- package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +22 -23
- package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +12 -10
- package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +462 -0
- package/esm2022/help/components/help-viewer/help-viewer.component.mjs +25 -28
- package/esm2022/support.common/common/definitions.mjs +21 -0
- package/esm2022/support.common/common/services/support.service.mjs +9 -7
- package/esm2022/support.common/public_api.mjs +2 -2
- package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +3 -3
- package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +4 -5
- package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +3 -3
- package/esm2022/ui.application/public_api.mjs +4 -1
- package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +163 -0
- package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +47 -0
- package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +239 -0
- package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +23 -24
- package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/messages.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +1608 -1507
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +2283 -2407
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-help.mjs +25 -28
- package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +8 -6
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +5 -6
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +450 -47
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
- package/help/components/help-viewer/help-viewer.component.d.ts +6 -10
- package/package.json +13 -13
- package/styles/ui.scss +140 -0
- package/support.common/common/services/support.service.d.ts +2 -2
- package/support.common/public_api.d.ts +1 -1
- package/ui.application/public_api.d.ts +3 -0
- package/ui.application/ui/components/button-selector/button-selector.component.d.ts +49 -0
- package/ui.application/ui/components/button-toggle/button-toggle.component.d.ts +26 -0
- package/ui.application/ui/components/chips-selector/chips-selector.component.d.ts +70 -0
- package/ui.application/ui/components/file-preview/file-preview.component.d.ts +4 -8
- package/ui.application/ui/messages.d.ts +2 -2
- package/clipper.common/common/clipper.d.ts +0 -119
- package/clipper.common/common/search.d.ts +0 -49
- package/clipper.ui/ui/document/base/document-base.component.d.ts +0 -38
- package/clipper.ui/ui/document/document-index/document-index.component.d.ts +0 -38
- package/clipper.ui/ui/document/document-menu/document-menu.component.d.ts +0 -30
- package/clipper.ui/ui/last-15-days/last-15-days.component.d.ts +0 -41
- package/esm2022/clipper.common/common/clipper.mjs +0 -1371
- package/esm2022/clipper.common/common/search.mjs +0 -69
- package/esm2022/clipper.ui/ui/document/base/document-base.component.mjs +0 -194
- package/esm2022/clipper.ui/ui/document/document-index/document-index.component.mjs +0 -121
- package/esm2022/clipper.ui/ui/document/document-menu/document-menu.component.mjs +0 -88
- package/esm2022/clipper.ui/ui/document/documents.mjs +0 -49
- package/esm2022/clipper.ui/ui/last-15-days/last-15-days.component.mjs +0 -107
- package/esm2022/help/components/help-search-query-builder/help-search-query-builder.component.mjs +0 -114
- package/esm2022/support.common/common/support.mjs +0 -21
- package/esm2022/ui.oauth/ui/components/login/loginOAuth.component.mjs +0 -198
- package/help/components/help-search-query-builder/help-search-query-builder.component.d.ts +0 -29
- package/help/help.scss +0 -72
- package/ui.oauth/ui/components/login/loginOAuth.component.d.ts +0 -38
- /package/support.common/common/{support.d.ts → definitions.d.ts} +0 -0
|
@@ -1,141 +1,56 @@
|
|
|
1
|
-
import { Component, EventEmitter,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { MatExpansionModule } from '@angular/material/expansion';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Output, signal } from '@angular/core';
|
|
2
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
3
|
+
import { MatChipsModule } from '@angular/material/chips';
|
|
5
4
|
import { MatDividerModule } from '@angular/material/divider';
|
|
5
|
+
import { MatExpansionModule } from '@angular/material/expansion';
|
|
6
6
|
import { MatIconModule } from '@angular/material/icon';
|
|
7
7
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
8
|
-
import {
|
|
8
|
+
import { ClipperFacet, ClipperSearchFacetsSnapshot } from '@arsedizioni/ars-utils/clipper.common';
|
|
9
|
+
import { SystemUtils } from '@arsedizioni/ars-utils/core';
|
|
9
10
|
import { FlexModule } from '@ngbracket/ngx-layout/flex';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
12
|
import * as i1 from "@ngbracket/ngx-layout/flex";
|
|
12
|
-
import * as i2 from "@angular/material/
|
|
13
|
-
import * as i3 from "@angular/material/
|
|
13
|
+
import * as i2 from "@angular/material/tooltip";
|
|
14
|
+
import * as i3 from "@angular/material/chips";
|
|
14
15
|
import * as i4 from "@angular/material/icon";
|
|
15
16
|
import * as i5 from "@angular/material/divider";
|
|
16
17
|
import * as i6 from "@angular/material/expansion";
|
|
17
|
-
export class ClipperSearchFacetsSnapshot {
|
|
18
|
-
constructor() {
|
|
19
|
-
this.groups = [];
|
|
20
|
-
this.usedGroups = [];
|
|
21
|
-
this.hasFacets = false;
|
|
22
|
-
this.sector = null;
|
|
23
|
-
this.author = null;
|
|
24
|
-
this.anchor = null;
|
|
25
|
-
this.type = null;
|
|
26
|
-
this.reason = null;
|
|
27
|
-
this.fromDate = null;
|
|
28
|
-
this.toDate = null;
|
|
29
|
-
this.interval = null;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
18
|
export class ClipperSearchFacetsComponent {
|
|
33
19
|
constructor() {
|
|
34
|
-
this.busy = false;
|
|
35
20
|
this.changed = new EventEmitter();
|
|
36
|
-
this.
|
|
37
|
-
this.
|
|
38
|
-
this.hasFacets = false;
|
|
39
|
-
this.hasTooManyResults = true;
|
|
40
|
-
this.sector = null;
|
|
41
|
-
this.author = null;
|
|
42
|
-
this.anchor = null;
|
|
43
|
-
this.type = null;
|
|
44
|
-
this.reason = null;
|
|
45
|
-
this.fromDate = null;
|
|
46
|
-
this.toDate = null;
|
|
47
|
-
this.interval = null;
|
|
48
|
-
this.changedInterval = false;
|
|
49
|
-
this.changedSector = false;
|
|
50
|
-
this.changedAuthor = false;
|
|
51
|
-
this.changedAnchor = false;
|
|
52
|
-
this.changedType = false;
|
|
53
|
-
this.changedReason = false;
|
|
21
|
+
this.busy = signal(false);
|
|
22
|
+
this.snapshot = new ClipperSearchFacetsSnapshot();
|
|
54
23
|
}
|
|
55
24
|
/**
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
25
|
+
* Update facets
|
|
26
|
+
* @param values : the facets values
|
|
27
|
+
* @param interval : the date interval for YEAR facets
|
|
28
|
+
*/
|
|
60
29
|
update(values = null, interval = null) {
|
|
61
|
-
this.
|
|
62
|
-
|
|
63
|
-
this.
|
|
64
|
-
values
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
this.groups
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (this.usedGroups[i].values.length > 1) {
|
|
80
|
-
// Different contents, remove used groupds, and add groups
|
|
81
|
-
this.usedGroups.splice(i, 1);
|
|
82
|
-
if (j === -1) {
|
|
83
|
-
this.groups.push({
|
|
84
|
-
name: name,
|
|
85
|
-
selectedValue: null,
|
|
86
|
-
selectedValueDescription: null,
|
|
87
|
-
values: n,
|
|
88
|
-
index: index,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
30
|
+
this.busy.set(true);
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
this.snapshot.interval = interval;
|
|
33
|
+
if (values) {
|
|
34
|
+
this.snapshot.groups = [];
|
|
35
|
+
values.forEach((n) => {
|
|
36
|
+
let name = n[0].typeName;
|
|
37
|
+
let index = n[0].type;
|
|
38
|
+
let i = SystemUtils.arrayFindIndexByKey(this.snapshot.usedGroups, 'index', index);
|
|
39
|
+
let j = SystemUtils.arrayFindIndexByKey(this.snapshot.groups, 'index', index);
|
|
40
|
+
if (i === -1 && j === -1) {
|
|
41
|
+
this.snapshot.groups.push({
|
|
42
|
+
name: name,
|
|
43
|
+
selectedValue: null,
|
|
44
|
+
selectedValueDescription: null,
|
|
45
|
+
values: n,
|
|
46
|
+
index: index,
|
|
47
|
+
});
|
|
91
48
|
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Save snapshot
|
|
99
|
-
*/
|
|
100
|
-
saveSnapshot() {
|
|
101
|
-
return {
|
|
102
|
-
groups: this.groups,
|
|
103
|
-
usedGroups: this.usedGroups,
|
|
104
|
-
hasFacets: this.hasFacets,
|
|
105
|
-
sector: this.sector,
|
|
106
|
-
author: this.author,
|
|
107
|
-
anchor: this.anchor,
|
|
108
|
-
type: this.type,
|
|
109
|
-
reason: this.reason,
|
|
110
|
-
fromDate: this.fromDate,
|
|
111
|
-
toDate: this.toDate,
|
|
112
|
-
interval: this.interval
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Restore from snapshot
|
|
117
|
-
*/
|
|
118
|
-
restoreFromSnapshot(snapshot) {
|
|
119
|
-
(this.groups = snapshot.groups),
|
|
120
|
-
(this.usedGroups = snapshot.usedGroups),
|
|
121
|
-
(this.hasFacets = snapshot.hasFacets),
|
|
122
|
-
(this.sector = snapshot.sector),
|
|
123
|
-
(this.author = snapshot.author),
|
|
124
|
-
(this.anchor = snapshot.anchor),
|
|
125
|
-
(this.type = snapshot.type),
|
|
126
|
-
(this.reason = snapshot.reason),
|
|
127
|
-
(this.fromDate = snapshot.fromDate),
|
|
128
|
-
(this.toDate = snapshot.toDate),
|
|
129
|
-
(this.interval = snapshot.interval);
|
|
130
|
-
this.update();
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Reset current object using a previous one
|
|
134
|
-
*/
|
|
135
|
-
restoreFrom(old) {
|
|
136
|
-
this.groups = old.groups;
|
|
137
|
-
this.usedGroups = old.usedGroups;
|
|
138
|
-
this.update();
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
this.snapshot.hasFacets = this.snapshot.groups.length > 0 || this.snapshot.usedGroups.length > 0;
|
|
52
|
+
this.busy.set(false);
|
|
53
|
+
}, 250);
|
|
139
54
|
}
|
|
140
55
|
/**
|
|
141
56
|
* Use a facet item as filter
|
|
@@ -145,18 +60,19 @@ export class ClipperSearchFacetsComponent {
|
|
|
145
60
|
use(group, item) {
|
|
146
61
|
group.selectedValue = item.value;
|
|
147
62
|
group.selectedValueDescription = item.title;
|
|
148
|
-
let j = SystemUtils.arrayFindIndexByKey(this.groups, 'index', group.index);
|
|
63
|
+
let j = SystemUtils.arrayFindIndexByKey(this.snapshot.groups, 'index', group.index);
|
|
149
64
|
if (j !== -1) {
|
|
150
|
-
this.groups.splice(j, 1);
|
|
65
|
+
this.snapshot.groups.splice(j, 1);
|
|
151
66
|
let updated = false;
|
|
152
|
-
this.usedGroups.forEach((n, i) => {
|
|
67
|
+
this.snapshot.usedGroups.forEach((n, i) => {
|
|
153
68
|
if (!updated && n.index > group.index) {
|
|
154
|
-
this.usedGroups.splice(i, 0, group);
|
|
69
|
+
this.snapshot.usedGroups.splice(i, 0, group);
|
|
155
70
|
updated = true;
|
|
156
71
|
}
|
|
157
72
|
});
|
|
158
|
-
if (!updated)
|
|
159
|
-
this.usedGroups.push(group);
|
|
73
|
+
if (!updated) {
|
|
74
|
+
this.snapshot.usedGroups.push(group);
|
|
75
|
+
}
|
|
160
76
|
}
|
|
161
77
|
this.apply();
|
|
162
78
|
}
|
|
@@ -168,79 +84,87 @@ export class ClipperSearchFacetsComponent {
|
|
|
168
84
|
dismiss(group, apply = true) {
|
|
169
85
|
group.selectedValue = null;
|
|
170
86
|
group.selectedValueDescription = null;
|
|
171
|
-
let i = SystemUtils.arrayFindIndexByKey(this.usedGroups, 'index', group.index);
|
|
87
|
+
let i = SystemUtils.arrayFindIndexByKey(this.snapshot.usedGroups, 'index', group.index);
|
|
172
88
|
if (i !== -1) {
|
|
173
|
-
this.usedGroups.splice(i, 1);
|
|
89
|
+
this.snapshot.usedGroups.splice(i, 1);
|
|
174
90
|
let updated = false;
|
|
175
|
-
this.groups.forEach((n, j) => {
|
|
91
|
+
this.snapshot.groups.forEach((n, j) => {
|
|
176
92
|
if (!updated && n.index > group.index) {
|
|
177
|
-
this.groups.splice(j, 0, group);
|
|
93
|
+
this.snapshot.groups.splice(j, 0, group);
|
|
178
94
|
updated = true;
|
|
179
95
|
}
|
|
180
96
|
});
|
|
181
|
-
if (!updated)
|
|
182
|
-
this.groups.push(group);
|
|
97
|
+
if (!updated) {
|
|
98
|
+
this.snapshot.groups.push(group);
|
|
99
|
+
}
|
|
183
100
|
}
|
|
184
|
-
if (apply)
|
|
101
|
+
if (apply) {
|
|
185
102
|
this.apply();
|
|
103
|
+
}
|
|
186
104
|
}
|
|
187
105
|
/**
|
|
188
106
|
* Apply filter
|
|
189
107
|
*/
|
|
190
108
|
apply() {
|
|
191
|
-
if (this.usedGroups.length > 0) {
|
|
192
|
-
this.usedGroups.forEach((n) => {
|
|
193
|
-
if (n.index ===
|
|
194
|
-
|
|
195
|
-
|
|
109
|
+
if (this.snapshot.usedGroups.length > 0) {
|
|
110
|
+
this.snapshot.usedGroups.forEach((n) => {
|
|
111
|
+
if (n.index === ClipperFacet.Year) {
|
|
112
|
+
if (n.selectedValue) {
|
|
113
|
+
this.snapshot.fromDate = new Date(parseInt(n.selectedValue), 0, 1, 12, 0, 0);
|
|
114
|
+
this.snapshot.toDate = new Date(parseInt(n.selectedValue), 11, 31, 12, 0, 0);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.snapshot.fromDate = null;
|
|
118
|
+
this.snapshot.toDate = null;
|
|
119
|
+
}
|
|
196
120
|
}
|
|
197
|
-
else if (n.index ===
|
|
198
|
-
this.sector = n.selectedValue;
|
|
121
|
+
else if (n.index === ClipperFacet.Sector) {
|
|
122
|
+
this.snapshot.sector = n.selectedValue ?? null;
|
|
199
123
|
}
|
|
200
|
-
else if (n.index ===
|
|
201
|
-
this.author = n.selectedValue;
|
|
124
|
+
else if (n.index === ClipperFacet.Author) {
|
|
125
|
+
this.snapshot.author = n.selectedValue ?? null;
|
|
202
126
|
}
|
|
203
|
-
else if (n.index ===
|
|
204
|
-
this.type = n.selectedValue;
|
|
127
|
+
else if (n.index === ClipperFacet.DocumentType) {
|
|
128
|
+
this.snapshot.type = n.selectedValue ?? null;
|
|
205
129
|
}
|
|
206
|
-
else if (n.index ===
|
|
207
|
-
this.anchor = n.selectedValue;
|
|
130
|
+
else if (n.index === ClipperFacet.Article) {
|
|
131
|
+
this.snapshot.anchor = n.selectedValue ?? null;
|
|
208
132
|
}
|
|
209
|
-
else if (n.index ===
|
|
210
|
-
this.reason = n.selectedValue;
|
|
133
|
+
else if (n.index === ClipperFacet.Reason) {
|
|
134
|
+
this.snapshot.reason = n.selectedValue ?? null;
|
|
211
135
|
}
|
|
212
136
|
});
|
|
213
137
|
}
|
|
214
|
-
if (this.groups.length > 0) {
|
|
215
|
-
this.groups.forEach((n) => {
|
|
216
|
-
if (n.index ===
|
|
217
|
-
this.changedInterval = this.fromDate !== null;
|
|
218
|
-
this.fromDate = null;
|
|
219
|
-
this.toDate = null;
|
|
138
|
+
if (this.snapshot.groups.length > 0) {
|
|
139
|
+
this.snapshot.groups.forEach((n) => {
|
|
140
|
+
if (n.index === ClipperFacet.Year) {
|
|
141
|
+
this.snapshot.changedInterval = this.snapshot.fromDate !== null;
|
|
142
|
+
this.snapshot.fromDate = null;
|
|
143
|
+
this.snapshot.toDate = null;
|
|
220
144
|
}
|
|
221
|
-
else if (n.index ===
|
|
222
|
-
this.changedSector = this.sector !== null;
|
|
223
|
-
this.sector = null;
|
|
145
|
+
else if (n.index === ClipperFacet.Sector) {
|
|
146
|
+
this.snapshot.changedSector = this.snapshot.sector !== null;
|
|
147
|
+
this.snapshot.sector = null;
|
|
224
148
|
}
|
|
225
|
-
else if (n.index ===
|
|
226
|
-
this.changedAuthor = this.author !== null;
|
|
227
|
-
this.author = null;
|
|
149
|
+
else if (n.index === ClipperFacet.Author) {
|
|
150
|
+
this.snapshot.changedAuthor = this.snapshot.author !== null;
|
|
151
|
+
this.snapshot.author = null;
|
|
228
152
|
}
|
|
229
|
-
else if (n.index ===
|
|
230
|
-
this.changedType = this.type !== null;
|
|
231
|
-
this.type = null;
|
|
153
|
+
else if (n.index === ClipperFacet.DocumentType) {
|
|
154
|
+
this.snapshot.changedType = this.snapshot.type !== null;
|
|
155
|
+
this.snapshot.type = null;
|
|
232
156
|
}
|
|
233
|
-
else if (n.index ===
|
|
234
|
-
this.changedAnchor = this.anchor !== null;
|
|
235
|
-
this.anchor = null;
|
|
157
|
+
else if (n.index === ClipperFacet.Article) {
|
|
158
|
+
this.snapshot.changedAnchor = this.snapshot.anchor !== null;
|
|
159
|
+
this.snapshot.anchor = null;
|
|
236
160
|
}
|
|
237
|
-
else if (n.index ===
|
|
238
|
-
this.changedReason = this.reason !== null;
|
|
239
|
-
this.reason = null;
|
|
161
|
+
else if (n.index === ClipperFacet.Reason) {
|
|
162
|
+
this.snapshot.changedReason = this.snapshot.reason !== null;
|
|
163
|
+
this.snapshot.reason = null;
|
|
240
164
|
}
|
|
241
165
|
});
|
|
242
166
|
}
|
|
243
|
-
this.changed.emit();
|
|
167
|
+
this.changed.emit(this.snapshot);
|
|
244
168
|
}
|
|
245
169
|
/**
|
|
246
170
|
* Clear facets by group index
|
|
@@ -249,64 +173,88 @@ export class ClipperSearchFacetsComponent {
|
|
|
249
173
|
*/
|
|
250
174
|
clear(index = -1) {
|
|
251
175
|
let dismissed = 0;
|
|
252
|
-
this.usedGroups.forEach((n) => {
|
|
176
|
+
this.snapshot.usedGroups.forEach((n) => {
|
|
253
177
|
if (index === -1 || index === n.index) {
|
|
254
|
-
if (n.index ===
|
|
255
|
-
this.changedInterval = true;
|
|
256
|
-
this.fromDate = null;
|
|
257
|
-
this.toDate = null;
|
|
178
|
+
if (n.index === ClipperFacet.Year) {
|
|
179
|
+
this.snapshot.changedInterval = true;
|
|
180
|
+
this.snapshot.fromDate = null;
|
|
181
|
+
this.snapshot.toDate = null;
|
|
258
182
|
}
|
|
259
|
-
else if (n.index ===
|
|
260
|
-
this.changedSector = true;
|
|
261
|
-
this.sector = null;
|
|
183
|
+
else if (n.index === ClipperFacet.Sector) {
|
|
184
|
+
this.snapshot.changedSector = true;
|
|
185
|
+
this.snapshot.sector = null;
|
|
262
186
|
}
|
|
263
|
-
else if (n.index ===
|
|
264
|
-
this.changedAuthor = true;
|
|
265
|
-
this.author = null;
|
|
187
|
+
else if (n.index === ClipperFacet.Author) {
|
|
188
|
+
this.snapshot.changedAuthor = true;
|
|
189
|
+
this.snapshot.author = null;
|
|
266
190
|
}
|
|
267
|
-
else if (n.index ===
|
|
268
|
-
this.changedType = true;
|
|
269
|
-
this.type = null;
|
|
191
|
+
else if (n.index === ClipperFacet.DocumentType) {
|
|
192
|
+
this.snapshot.changedType = true;
|
|
193
|
+
this.snapshot.type = null;
|
|
270
194
|
}
|
|
271
|
-
else if (n.index ===
|
|
272
|
-
this.changedAnchor = true;
|
|
273
|
-
this.anchor = null;
|
|
195
|
+
else if (n.index === ClipperFacet.Article) {
|
|
196
|
+
this.snapshot.changedAnchor = true;
|
|
197
|
+
this.snapshot.anchor = null;
|
|
274
198
|
}
|
|
275
|
-
else if (n.index ===
|
|
276
|
-
this.changedReason = true;
|
|
277
|
-
this.reason = null;
|
|
199
|
+
else if (n.index === ClipperFacet.Reason) {
|
|
200
|
+
this.snapshot.changedReason = true;
|
|
201
|
+
this.snapshot.reason = null;
|
|
278
202
|
}
|
|
279
203
|
this.dismiss(n, false);
|
|
280
204
|
dismissed++;
|
|
281
205
|
}
|
|
282
206
|
});
|
|
283
|
-
if (dismissed)
|
|
284
|
-
this.changed.emit();
|
|
207
|
+
if (dismissed) {
|
|
208
|
+
this.changed.emit(this.snapshot);
|
|
209
|
+
}
|
|
285
210
|
return dismissed;
|
|
286
211
|
}
|
|
287
212
|
/**
|
|
288
213
|
* Reset
|
|
289
214
|
*/
|
|
290
215
|
reset() {
|
|
291
|
-
this.groups = [];
|
|
292
|
-
this.usedGroups = [];
|
|
293
|
-
this.hasFacets = false;
|
|
294
|
-
this.fromDate = null;
|
|
295
|
-
this.toDate = null;
|
|
296
|
-
this.sector = null;
|
|
297
|
-
this.author = null;
|
|
298
|
-
this.anchor = null;
|
|
299
|
-
this.type = null;
|
|
216
|
+
this.snapshot.groups = [];
|
|
217
|
+
this.snapshot.usedGroups = [];
|
|
218
|
+
this.snapshot.hasFacets = false;
|
|
219
|
+
this.snapshot.fromDate = null;
|
|
220
|
+
this.snapshot.toDate = null;
|
|
221
|
+
this.snapshot.sector = null;
|
|
222
|
+
this.snapshot.author = null;
|
|
223
|
+
this.snapshot.anchor = null;
|
|
224
|
+
this.snapshot.type = null;
|
|
225
|
+
this.snapshot.reason = null;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Restore data
|
|
229
|
+
* @param data : the data to restore
|
|
230
|
+
*/
|
|
231
|
+
restore(data) {
|
|
232
|
+
if (data) {
|
|
233
|
+
this.snapshot.groups = data.groups;
|
|
234
|
+
this.snapshot.usedGroups = data.usedGroups;
|
|
235
|
+
this.snapshot.hasFacets = data.hasFacets;
|
|
236
|
+
this.snapshot.fromDate = data.fromDate;
|
|
237
|
+
this.snapshot.toDate = data.toDate;
|
|
238
|
+
this.snapshot.sector = data.sector;
|
|
239
|
+
this.snapshot.author = data.author;
|
|
240
|
+
this.snapshot.anchor = data.anchor;
|
|
241
|
+
this.snapshot.type = data.type;
|
|
242
|
+
this.snapshot.reason = data.reason;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Save data
|
|
247
|
+
*/
|
|
248
|
+
save() {
|
|
249
|
+
return this.snapshot;
|
|
300
250
|
}
|
|
301
251
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperSearchFacetsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
302
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperSearchFacetsComponent, isStandalone: true, selector: "clipper-search-facets", inputs: { busy: "busy" }, outputs: { changed: "changed" }, ngImport: i0, template: "<div fxLayout=\"column\" fxFill style=\"overflow: hidden;\">\r\n <div>\r\n @if (usedGroups.length > 0) {\r\n<div class=\"small\" style=\"padding-left: 15px\">\r\n <div>Selezione:</div>\r\n <div class=\"facets-selection\">\r\n @for (ug of usedGroups; track ug) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed-1 bold\">{{ug.name}}:</div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small truncated bold\">\r\n <div>{{ug.selectedValueDescription}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button class=\"small-icon-button\" matTooltip=\"Rimuovi\"\r\n (click)=\"dismiss(ug)\" color=\"primary\">\r\n <mat-icon>remove</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n <mat-divider></mat-divider>\r\n </div>\r\n}\r\n @if (busy) {\r\n<div style=\"padding: 15px\">\r\n <p>Sto calcolando...</p>\r\n </div>\r\n}\r\n </div>\r\n @if (!busy) {\r\n<div fxFlex=\"100\" style=\"overflow: auto\">\r\n <div class=\"facets-items-container\">\r\n @for (group of groups; track group; let i = $index) {\r\n <mat-accordion displayMode=\"flat\" class=\"mat-elevation-z0\">\r\n <mat-expansion-panel class=\"facets-panel mat-elevation-z0\" [expanded]=\"i == 0\" hideToggle=\"false\">\r\n <mat-expansion-panel-header class=\"facets-header\" [collapsedHeight]=\"'40px'\" [expandedHeight]=\"'40px'\"\r\n [attr.aria-label]=\"group.name\">\r\n <mat-panel-title>\r\n @if (group.index == 2 && interval) {\r\n<div style=\"width: 180px\">{{interval}} \r\n ({{group.values.length}})\r\n </div>\r\n}\r\n @if (group.index != 2 || !interval) {\r\n<div style=\"width: 180px\">{{group.name}} \r\n ({{group.values.length}}) </div>\r\n}\r\n </mat-panel-title>\r\n <mat-panel-description>\r\n <div style=\"width:100%\"></div>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <nav class=\"facets-items\">\r\n <ul>\r\n @for (item of group.values; track item) {\r\n <li class=\"small\" (click)=\"use(group, item)\"\r\n [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill fxFlexAlign=\"center\">\r\n <div fxFlex=\"*\" class=\"truncated\">\r\n <div>{{item.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n {{hasTooManyResults ? '~' : ''}}{{item.count}}\r\n </div>\r\n </div>\r\n </li>\r\n}\r\n </ul>\r\n </nav>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n}\r\n </div>\r\n </div>\r\n}\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.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-close{margin-right:10px;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}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.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}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.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}}.item{min-height:50px!important;border-bottom:1px dotted #eee!important;line-height:18px}.item:hover{background-color:#fff8e1}.item-cell{padding:5px 0}.item-line{padding-top:1px;padding-bottom:1px}.item-line .command a{text-decoration:none;color:#2a91e0;font-weight:500;cursor:pointer!important}.item-line .command a:hover{opacity:.7}.item-line>a{color:#2a91e0!important;opacity:1!important;cursor:pointer}.item-line>a:hover{opacity:.7!important}.item-line-1{font-weight:500;font-size:1em;color:#000}.item-line-2{font-size:.9em;color:#000}.item-line-3{font-size:.8em;color:#000}.item-line-4{font-size:.7em;color:#000}.item-line-block-title{font-size:.8em;font-weight:500}.item-line-block{margin-top:4px;margin-bottom:4px;margin-left:10px;padding-left:10px;border-left:2px solid #009688}.item-line-read{font-weight:400!important}.item-line-read .command,.item-line-read a{color:#2a91e0;cursor:pointer!important;opacity:1!important}.item-line-read .command:hover,.item-line-read a:hover{opacity:.7!important}.item-line-red-badge{background-color:red;color:#fff;padding:2px 4px;border-radius:3px;border:1px solid red}.items-group-title{line-height:24px;padding:20px 10px 10px 20px;font-weight:500;font-size:19.2px}.items-footer{padding-top:10px}.sidenav-title-container{min-height:64px!important;padding-left:15px;margin-bottom:4px}.sidenav-title{color:#009688;font-weight:500;font-size:19.2px}.item-greyed-1{color:#607d8b}.item-greyed-2{color:#90a4ae}.item-accent{color:#0d7066}.item-primary{color:#009688}.item-badge{margin-left:10px;margin-bottom:5px;padding:0 4px;height:12px;line-height:12px;border-radius:3px;font-size:x-small;font-weight:500;text-align:center;background-color:orange;color:#000}::ng-deep .facets-panel .mat-expansion-panel-body{padding:0 0 5px 15px;background-color:#f8f8f8}::ng-deep .facets-panel .mat-expansion-panel-header{padding-right:15px;background-color:#f8f8f8}.facets-panel .mat-expansion-panel,.facets-panel .mat-expansion-panel:hover,.facets-panel .mat-expansion-panel.mat-expanded,.facets-panel .mat-expansion-panel.mat-expanded:hover{border-radius:0!important;background-color:#f8f8f8}.facets-header{padding-left:10px!important}.facets-items{overflow:hidden;padding-right:6px}.facets-items ul{list-style-type:none;padding:0;margin:0}.facets-items ul li{padding:6px;display:block;color:#2d2e2e}.facets-items ul li a{color:inherit;text-decoration:none;display:block}.facets-items ul li:hover{background-color:#fff;cursor:pointer}.factes-items-container{width:235px;padding-top:5px;padding-left:5px}.facets-selection{padding:8px 2px 10px 8px}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { 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: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i6.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i6.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i6.MatExpansionPanelDescription, selector: "mat-panel-description" }] }); }
|
|
252
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperSearchFacetsComponent, isStandalone: true, selector: "clipper-search-facets", outputs: { changed: "changed" }, ngImport: i0, template: "<div fxLayout=\"column\" fxFill class=\"facets-container scroll-hidden\">\r\n <div>\r\n @if (snapshot.usedGroups.length > 0) {\r\n <div class=\"facets-selection\">\r\n <mat-chip-set aria-label=\"Selezione\">\r\n @for (ug of snapshot.usedGroups; track ug) {\r\n <mat-chip (removed)=\"dismiss(ug)\" [matTooltip]=\"ug.selectedValueDescription ?? ''\">\r\n {{ug.selectedValueDescription}}\r\n <button matChipRemove [attr.aria-label]=\"'Rimuovi ' + ug.name\" [matTooltip]=\"'Rimuovi ' + ug.name\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n <mat-divider style=\"margin-top: 20px;\"></mat-divider>\r\n </div>\r\n }\r\n @if (busy()) {\r\n <div class=\"facets-message\">\r\n <p class=\"accent\">Sto elaborando...</p>\r\n </div>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-auto\">\r\n @if (!busy()) {\r\n @if (snapshot.groups.length > 0) {\r\n @for (group of snapshot.groups; track group.index; let i = $index) {\r\n <mat-accordion multi displayMode=\"flat\">\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \" [expanded]=\"i == 0\">\r\n <mat-expansion-panel-header class=\"accordion-header\" [attr.aria-label]=\"group.name\">\r\n <mat-panel-title>\r\n @if (group.index == 2 && snapshot.interval) {\r\n {{snapshot.interval}} ({{group.values.length}})\r\n } @else {\r\n {{group.name}} ({{group.values.length}})\r\n }\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <nav class=\"facets-items\">\r\n <ul>\r\n @for (item of group.values; track item) {\r\n <li (click)=\"use(group, item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"truncated\">\r\n <div class=\"truncated\">{{item.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n {{snapshot.hasTooManyResults ? '~' : ''}}{{item.count}}\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n }\r\n } @else if (snapshot.hasFacets) {\r\n <div class=\"facets-message\">\r\n <p class=\"small\"><i>Tutte le opzioni sono state selezionate</i></p>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>", styles: [".facets-container{padding-top:20px;padding-bottom:10px}.facets-message{padding-top:10px;padding-left:15px}.facets-selection{padding:0 4px 0 15px}.facets-items{padding:0;margin:0}.facets-items ul{list-style-type:none;padding:0;margin:0}.facets-items ul li{font-size:small;padding:4px 8px;display:block;color:var(--c7-text-color) a;color-color:inherit;color-text-decoration:none;color-display:block}.facets-items ul li:hover{background-color:var(--c7-item-hover-background-color);border-radius:6px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { 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: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled", "tabIndex"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i3.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i6.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i6.MatExpansionPanelTitle, selector: "mat-panel-title" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
303
253
|
}
|
|
304
254
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperSearchFacetsComponent, decorators: [{
|
|
305
255
|
type: Component,
|
|
306
|
-
args: [{ selector: 'clipper-search-facets', standalone: true, imports: [FlexModule, MatButtonModule, MatTooltipModule, MatIconModule, MatDividerModule, MatExpansionModule], template: "<div fxLayout=\"column\" fxFill
|
|
307
|
-
}],
|
|
308
|
-
type: Input
|
|
309
|
-
}], changed: [{
|
|
256
|
+
args: [{ selector: 'clipper-search-facets', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FlexModule, MatButtonModule, MatTooltipModule, MatChipsModule, MatIconModule, MatDividerModule, MatExpansionModule], template: "<div fxLayout=\"column\" fxFill class=\"facets-container scroll-hidden\">\r\n <div>\r\n @if (snapshot.usedGroups.length > 0) {\r\n <div class=\"facets-selection\">\r\n <mat-chip-set aria-label=\"Selezione\">\r\n @for (ug of snapshot.usedGroups; track ug) {\r\n <mat-chip (removed)=\"dismiss(ug)\" [matTooltip]=\"ug.selectedValueDescription ?? ''\">\r\n {{ug.selectedValueDescription}}\r\n <button matChipRemove [attr.aria-label]=\"'Rimuovi ' + ug.name\" [matTooltip]=\"'Rimuovi ' + ug.name\">\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n }\r\n </mat-chip-set>\r\n <mat-divider style=\"margin-top: 20px;\"></mat-divider>\r\n </div>\r\n }\r\n @if (busy()) {\r\n <div class=\"facets-message\">\r\n <p class=\"accent\">Sto elaborando...</p>\r\n </div>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-auto\">\r\n @if (!busy()) {\r\n @if (snapshot.groups.length > 0) {\r\n @for (group of snapshot.groups; track group.index; let i = $index) {\r\n <mat-accordion multi displayMode=\"flat\">\r\n <mat-expansion-panel class=\"accordion-panel mat-elevation-z0 \" [expanded]=\"i == 0\">\r\n <mat-expansion-panel-header class=\"accordion-header\" [attr.aria-label]=\"group.name\">\r\n <mat-panel-title>\r\n @if (group.index == 2 && snapshot.interval) {\r\n {{snapshot.interval}} ({{group.values.length}})\r\n } @else {\r\n {{group.name}} ({{group.values.length}})\r\n }\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <nav class=\"facets-items\">\r\n <ul>\r\n @for (item of group.values; track item) {\r\n <li (click)=\"use(group, item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"truncated\">\r\n <div class=\"truncated\">{{item.title}}</div>\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n {{snapshot.hasTooManyResults ? '~' : ''}}{{item.count}}\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n }\r\n } @else if (snapshot.hasFacets) {\r\n <div class=\"facets-message\">\r\n <p class=\"small\"><i>Tutte le opzioni sono state selezionate</i></p>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>", styles: [".facets-container{padding-top:20px;padding-bottom:10px}.facets-message{padding-top:10px;padding-left:15px}.facets-selection{padding:0 4px 0 15px}.facets-items{padding:0;margin:0}.facets-items ul{list-style-type:none;padding:0;margin:0}.facets-items ul li{font-size:small;padding:4px 8px;display:block;color:var(--c7-text-color) a;color-color:inherit;color-text-decoration:none;color-display:block}.facets-items ul li:hover{background-color:var(--c7-item-hover-background-color);border-radius:6px;cursor:pointer}\n"] }]
|
|
257
|
+
}], propDecorators: { changed: [{
|
|
310
258
|
type: Output
|
|
311
259
|
}] } });
|
|
312
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZhY2V0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9zZWFyY2gtZmFjZXRzL3NlYXJjaC1mYWNldHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLWZhY2V0cy9zZWFyY2gtZmFjZXRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFDTCxrQkFBa0IsR0FDbkIsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7QUFrQnhELE1BQU0sT0FBTywyQkFBMkI7SUFBeEM7UUFDRSxXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUNqQyxlQUFVLEdBQXdCLEVBQUUsQ0FBQztRQUNyQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLFdBQU0sR0FBWSxJQUFJLENBQUM7UUFDdkIsV0FBTSxHQUFZLElBQUksQ0FBQztRQUN2QixXQUFNLEdBQVksSUFB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cnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQ2xpcHBlckRlZmluaXRpb25zLFxyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGlwcGVyRmFjZXQge1xyXG4gIHR5cGU6IG51bWJlcjtcclxuICB0eXBlTmFtZTogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZztcclxuICBjb3VudDogbnVtYmVyO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ2xpcHBlckZhY2V0R3JvdXAge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBzZWxlY3RlZFZhbHVlOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRWYWx1ZURlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgdmFsdWVzOiBDbGlwcGVyRmFjZXRbXTtcclxuICBpbmRleDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlclNlYXJjaEZhY2V0c1NuYXBzaG90IHtcclxuICBncm91cHM6IENsaXBwZXJGYWNldEdyb3VwW10gPSBbXTtcclxuICB1c2VkR3JvdXBzOiBDbGlwcGVyRmFjZXRHcm91cFtdID0gW107XHJcbiAgaGFzRmFjZXRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VjdG9yPzogc3RyaW5nID0gbnVsbDtcclxuICBhdXRob3I/OiBzdHJpbmcgPSBudWxsO1xyXG4gIGFuY2hvcj86IHN0cmluZyA9IG51bGw7XHJcbiAgdHlwZT86IHN0cmluZyA9IG51bGw7XHJcbiAgcmVhc29uPzogc3RyaW5nID0gbnVsbDtcclxuICBmcm9tRGF0ZT86IERhdGUgPSBudWxsO1xyXG4gIHRvRGF0ZT86IERhdGUgPSBudWxsO1xyXG4gIGludGVydmFsPzogc3RyaW5nID0gbnVsbDtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NsaXBwZXItc2VhcmNoLWZhY2V0cycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWZhY2V0cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtZmFjZXRzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0ZsZXhNb2R1bGUsICAgTWF0QnV0dG9uTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXREaXZpZGVyTW9kdWxlLCBNYXRFeHBhbnNpb25Nb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBidXN5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIGNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIGdyb3VwczogQ2xpcHBlckZhY2V0R3JvdXBbXSA9IFtdO1xyXG4gIHVzZWRHcm91cHM6IENsaXBwZXJGYWNldEdyb3VwW10gPSBbXTtcclxuICBoYXNGYWNldHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNUb29NYW55UmVzdWx0czogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2VjdG9yOiBzdHJpbmcgPSBudWxsO1xyXG4gIGF1dGhvcjogc3RyaW5nID0gbnVsbDtcclxuICBhbmNob3I6IHN0cmluZyA9IG51bGw7XHJcbiAgdHlwZTogc3RyaW5nID0gbnVsbDtcclxuICByZWFzb246IHN0cmluZyA9IG51bGw7XHJcbiAgZnJvbURhdGU6IERhdGUgPSBudWxsO1xyXG4gIHRvRGF0ZTogRGF0ZSA9IG51bGw7XHJcbiAgaW50ZXJ2YWw6IHN0cmluZyA9IG51bGw7XHJcbiAgY2hhbmdlZEludGVydmFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhbmdlZFNlY3RvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoYW5nZWRBdXRob3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjaGFuZ2VkQW5jaG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhbmdlZFR5cGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjaGFuZ2VkUmVhc29uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICogVXBkYXRlIGZhY2V0c1xyXG4gICogQHBhcmFtIHZhbHVlcyA6IHRoZSBmYWNldHMgdmFsdWVzXHJcbiAgKiBAcGFyYW0gaW50ZXJ2YWwgOiB0aGUgZGF0ZSBpbnRlcnZhbCBmb3IgWUVBUiBmYWNldHNcclxuICAqL1xyXG4gIHVwZGF0ZSh2YWx1ZXM6IENsaXBwZXJGYWNldFtdW10gPSBudWxsLCBpbnRlcnZhbDogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgdGhpcy5pbnRlcnZhbCA9IGludGVydmFsO1xyXG4gICAgaWYgKHZhbHVlcykge1xyXG4gICAgICB0aGlzLmdyb3VwcyA9IFtdO1xyXG4gICAgICB2YWx1ZXMuZm9yRWFjaCgobikgPT4ge1xyXG4gICAgICAgIGxldCBuYW1lID0gblswXS50eXBlTmFtZTtcclxuICAgICAgICBsZXQgaW5kZXggPSBuWzBdLnR5cGU7XHJcbiAgICAgICAgbGV0IGkgPSBTeXN0ZW1VdGlscy5hcnJheUZpbmRJbmRleEJ5S2V5KFxyXG4gICAgICAgICAgdGhpcy51c2VkR3JvdXBzLFxyXG4gICAgICAgICAgJ2luZGV4JyxcclxuICAgICAgICAgIGluZGV4KTtcclxuICAgICAgICBsZXQgaiA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEluZGV4QnlLZXkoXHJcbiAgICAgICAgICB0aGlzLmdyb3VwcyxcclxuICAgICAgICAgICdpbmRleCcsXHJcbiAgICAgICAgICBpbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGkgPT09IC0xICYmIGogPT09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKHtcclxuICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZTogbnVsbCxcclxuICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZURlc2NyaXB0aW9uOiBudWxsLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IG4sXHJcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy51c2VkR3JvdXBzW2ldLnZhbHVlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIC8vIERpZmZlcmVudCBjb250ZW50cywgcmVtb3ZlIHVzZWQgZ3JvdXBkcywgYW5kIGFkZCBncm91cHNcclxuICAgICAgICAgICAgdGhpcy51c2VkR3JvdXBzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgaWYgKGogPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZTogbnVsbCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVEZXNjcmlwdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgICAgIHZhbHVlczogbixcclxuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5oYXNGYWNldHMgPSB0aGlzLmdyb3Vwcy5sZW5ndGggPiAwIHx8IHRoaXMudXNlZEdyb3Vwcy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBzbmFwc2hvdFxyXG4gICAqL1xyXG4gIHNhdmVTbmFwc2hvdCgpOiBDbGlwcGVyU2VhcmNoRmFjZXRzU25hcHNob3Qge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZ3JvdXBzOiB0aGlzLmdyb3VwcyxcclxuICAgICAgdXNlZEdyb3VwczogdGhpcy51c2VkR3JvdXBzLFxyXG4gICAgICBoYXNGYWNldHM6IHRoaXMuaGFzRmFjZXRzLFxyXG4gICAgICBzZWN0b3I6IHRoaXMuc2VjdG9yLFxyXG4gICAgICBhdXRob3I6IHRoaXMuYXV0aG9yLFxyXG4gICAgICBhbmNob3I6IHRoaXMuYW5jaG9yLFxyXG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgIHJlYXNvbjogdGhpcy5yZWFzb24sXHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmZyb21EYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMudG9EYXRlLFxyXG4gICAgICBpbnRlcnZhbDogdGhpcy5pbnRlcnZhbFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3RvcmUgZnJvbSBzbmFwc2hvdFxyXG4gICAqL1xyXG4gIHJlc3RvcmVGcm9tU25hcHNob3Qoc25hcHNob3Q6IENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdCkge1xyXG4gICAgKHRoaXMuZ3JvdXBzID0gc25hcHNob3QuZ3JvdXBzKSxcclxuICAgICAgKHRoaXMudXNlZEdyb3VwcyA9IHNuYXBzaG90LnVzZWRHcm91cHMpLFxyXG4gICAgICAodGhpcy5oYXNGYWNldHMgPSBzbmFwc2hvdC5oYXNGYWNldHMpLFxyXG4gICAgICAodGhpcy5zZWN0b3IgPSBzbmFwc2hvdC5zZWN0b3IpLFxyXG4gICAgICAodGhpcy5hdXRob3IgPSBzbmFwc2hvdC5hdXRob3IpLFxyXG4gICAgICAodGhpcy5hbmNob3IgPSBzbmFwc2hvdC5hbmNob3IpLFxyXG4gICAgICAodGhpcy50eXBlID0gc25hcHNob3QudHlwZSksXHJcbiAgICAgICh0aGlzLnJlYXNvbiA9IHNuYXBzaG90LnJlYXNvbiksXHJcbiAgICAgICh0aGlzLmZyb21EYXRlID0gc25hcHNob3QuZnJvbURhdGUpLFxyXG4gICAgICAodGhpcy50b0RhdGUgPSBzbmFwc2hvdC50b0RhdGUpLFxyXG4gICAgICAodGhpcy5pbnRlcnZhbCA9IHNuYXBzaG90LmludGVydmFsKTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCBjdXJyZW50IG9iamVjdCB1c2luZyBhIHByZXZpb3VzIG9uZVxyXG4gICAqL1xyXG4gIHJlc3RvcmVGcm9tKG9sZDogQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCkge1xyXG4gICAgdGhpcy5ncm91cHMgPSBvbGQuZ3JvdXBzO1xyXG4gICAgdGhpcy51c2VkR3JvdXBzID0gb2xkLnVzZWRHcm91cHM7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlIGEgZmFjZXQgaXRlbSBhcyBmaWx0ZXJcclxuICAgKiBAcGFyYW0gZ3JvdXAgOiB0aGUgZmFjZXQgZ3JvdXBcclxuICAgKiBAcGFyYW0gaXRlbSAgOiB0aGUgZmFjZXQgaXRlbVxyXG4gICAqL1xyXG4gICB1c2UoZ3JvdXA6IENsaXBwZXJGYWNldEdyb3VwLCBpdGVtOiBDbGlwcGVyRmFjZXQpIHtcclxuICAgIGdyb3VwLnNlbGVjdGVkVmFsdWUgPSBpdGVtLnZhbHVlO1xyXG4gICAgZ3JvdXAuc2VsZWN0ZWRWYWx1ZURlc2NyaXB0aW9uID0gaXRlbS50aXRsZTtcclxuICAgIGxldCBqID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kSW5kZXhCeUtleSh0aGlzLmdyb3VwcywgJ2luZGV4JywgZ3JvdXAuaW5kZXgpO1xyXG4gICAgaWYgKGogIT09IC0xKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBzLnNwbGljZShqLCAxKTtcclxuICAgICAgbGV0IHVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy51c2VkR3JvdXBzLmZvckVhY2goKG4sIGkpID0+IHtcclxuICAgICAgICBpZiAoIXVwZGF0ZWQgJiYgbi5pbmRleCA+IGdyb3VwLmluZGV4KSB7XHJcbiAgICAgICAgICB0aGlzLnVzZWRHcm91cHMuc3BsaWNlKGksIDAsIGdyb3VwKTtcclxuICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghdXBkYXRlZCkgdGhpcy51c2VkR3JvdXBzLnB1c2goZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcHBseSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZGlzbWlzcyBhIGZhY2V0IGdyb3VwIGZpbHRlclxyXG4gICAqIEBwYXJhbSBncm91cCA6IHRoZSBmYWNldCBncm91cFxyXG4gICAqIEBwYXJhbSBhcHBseSA6IHRydWUgdG8gZW1pdCBjaGFuZ2VkIGV2ZW50IGFuZCBnZW5lcmF0ZSBhIG5ldyBzZWFyY2gsIGZhbHNlIGp1c3QgZm9yIHVwZGF0ZVxyXG4gICAqL1xyXG4gIGRpc21pc3MoZ3JvdXA6IENsaXBwZXJGYWNldEdyb3VwLCBhcHBseTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGdyb3VwLnNlbGVjdGVkVmFsdWUgPSBudWxsO1xyXG4gICAgZ3JvdXAuc2VsZWN0ZWRWYWx1ZURlc2NyaXB0aW9uID0gbnVsbDtcclxuICAgIGxldCBpID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kSW5kZXhCeUtleSh0aGlzLnVzZWRHcm91cHMsICdpbmRleCcsIGdyb3VwLmluZGV4KTtcclxuICAgIGlmIChpICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnVzZWRHcm91cHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICBsZXQgdXBkYXRlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKChuLCBqKSA9PiB7XHJcbiAgICAgICAgaWYgKCF1cGRhdGVkICYmIG4uaW5kZXggPiBncm91cC5pbmRleCkge1xyXG4gICAgICAgICAgdGhpcy5ncm91cHMuc3BsaWNlKGosIDAsIGdyb3VwKTtcclxuICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghdXBkYXRlZCkgdGhpcy5ncm91cHMucHVzaChncm91cCk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXBwbHkpIHRoaXMuYXBwbHkoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGZpbHRlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXBwbHkoKSB7XHJcbiAgICBpZiAodGhpcy51c2VkR3JvdXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy51c2VkR3JvdXBzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChuLmluZGV4ID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRkFDX1lFQVIpIHtcclxuICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSBuZXcgRGF0ZShwYXJzZUludChuLnNlbGVjdGVkVmFsdWUpLCAwLCAxLCAxMiwgMCwgMCk7XHJcbiAgICAgICAgICB0aGlzLnRvRGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KG4uc2VsZWN0ZWRWYWx1ZSksIDExLCAzMSwgMTIsIDAsIDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkZBQ19TRUNUT1IpIHtcclxuICAgICAgICAgIHRoaXMuc2VjdG9yID0gbi5zZWxlY3RlZFZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkZBQ19BVVRIT1IpIHtcclxuICAgICAgICAgIHRoaXMuYXV0aG9yID0gbi5zZWxlY3RlZFZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkZBQ19ET0NVTUVOVFRZUEUpIHtcclxuICAgICAgICAgIHRoaXMudHlwZSA9IG4uc2VsZWN0ZWRWYWx1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJEZWZpbml0aW9ucy5GQUNfQVJUSUNMRSkge1xyXG4gICAgICAgICAgdGhpcy5hbmNob3IgPSBuLnNlbGVjdGVkVmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuLmluZGV4ID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRkFDX1JFQVNPTikge1xyXG4gICAgICAgICAgdGhpcy5yZWFzb24gPSBuLnNlbGVjdGVkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyb3Vwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChuLmluZGV4ID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRkFDX1lFQVIpIHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZEludGVydmFsID0gdGhpcy5mcm9tRGF0ZSAhPT0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuZnJvbURhdGUgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy50b0RhdGUgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkZBQ19TRUNUT1IpIHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZFNlY3RvciA9IHRoaXMuc2VjdG9yICE9PSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5zZWN0b3IgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkZBQ19BVVRIT1IpIHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZEF1dGhvciA9IHRoaXMuYXV0aG9yICE9PSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5hdXRob3IgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkZBQ19ET0NVTUVOVFRZUEUpIHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZFR5cGUgPSB0aGlzLnR5cGUgIT09IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnR5cGUgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkZBQ19BUlRJQ0xFKSB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRBbmNob3IgPSB0aGlzLmFuY2hvciAhPT0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJEZWZpbml0aW9ucy5GQUNfUkVBU09OKSB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRSZWFzb24gPSB0aGlzLnJlYXNvbiAhPT0gbnVsbDtcclxuICAgICAgICAgIHRoaXMucmVhc29uID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGZhY2V0cyBieSBncm91cCBpbmRleFxyXG4gICAqIEBwYXJhbSBpbmRleCA6IHRoZSBncm91cCBpbmRleCB0byBjbGVhci4gVXNlIC0xIHRvIGNsZWFyIGFsbCBncm91cHMgYXQgb25jZVxyXG4gICAqIEByZXR1cm5zIDogdGhlIG51bWJlciBvZiBncm91cHMgZGlzbWlzc2VkXHJcbiAgICovXHJcbiAgY2xlYXIoaW5kZXg6IG51bWJlciA9IC0xKTogbnVtYmVyIHtcclxuICAgIGxldCBkaXNtaXNzZWQgPSAwO1xyXG4gICAgdGhpcy51c2VkR3JvdXBzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSBuLmluZGV4KSB7XHJcbiAgICAgICAgaWYgKG4uaW5kZXggPT09IENsaXBwZXJEZWZpbml0aW9ucy5GQUNfWUVBUikge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkSW50ZXJ2YWwgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnRvRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuLmluZGV4ID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRkFDX1NFQ1RPUikge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkU2VjdG9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2VjdG9yID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJEZWZpbml0aW9ucy5GQUNfQVVUSE9SKSB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRBdXRob3IgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5hdXRob3IgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkZBQ19ET0NVTUVOVFRZUEUpIHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZFR5cGUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy50eXBlID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJEZWZpbml0aW9ucy5GQUNfQVJUSUNMRSkge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkQW5jaG9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYW5jaG9yID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJEZWZpbml0aW9ucy5GQUNfUkVBU09OKSB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRSZWFzb24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZWFzb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpc21pc3MobiwgZmFsc2UpO1xyXG4gICAgICAgIGRpc21pc3NlZCsrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChkaXNtaXNzZWQpIHRoaXMuY2hhbmdlZC5lbWl0KCk7XHJcblxyXG4gICAgcmV0dXJuIGRpc21pc3NlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0XHJcbiAgICovXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xyXG4gICAgdGhpcy51c2VkR3JvdXBzID0gW107XHJcbiAgICB0aGlzLmhhc0ZhY2V0cyA9IGZhbHNlO1xyXG4gICAgdGhpcy5mcm9tRGF0ZSA9IG51bGw7XHJcbiAgICB0aGlzLnRvRGF0ZSA9IG51bGw7XHJcbiAgICB0aGlzLnNlY3RvciA9IG51bGw7XHJcbiAgICB0aGlzLmF1dGhvciA9IG51bGw7XHJcbiAgICB0aGlzLmFuY2hvciA9IG51bGw7XHJcbiAgICB0aGlzLnR5cGUgPSBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsIHN0eWxlPVwib3ZlcmZsb3c6IGhpZGRlbjtcIj5cclxuICA8ZGl2PlxyXG4gICAgQGlmICh1c2VkR3JvdXBzLmxlbmd0aCA+IDApIHtcclxuPGRpdiBjbGFzcz1cInNtYWxsXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDE1cHhcIj5cclxuICAgICAgPGRpdj5TZWxlemlvbmU6PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmYWNldHMtc2VsZWN0aW9uXCI+XHJcbiAgICAgICAgQGZvciAodWcgb2YgdXNlZEdyb3VwczsgdHJhY2sgdWcpIHtcclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCI1cHhcIiBmeEZpbGw+XHJcbiAgICAgICAgICA8ZGl2IGZ4RmxleEFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJzbWFsbCBpdGVtLWdyZXllZC0xIGJvbGRcIj57e3VnLm5hbWV9fTo8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJzbWFsbCB0cnVuY2F0ZWQgYm9sZFwiPlxyXG4gICAgICAgICAgICA8ZGl2Pnt7dWcuc2VsZWN0ZWRWYWx1ZURlc2NyaXB0aW9ufX08L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJzbWFsbC1pY29uLWJ1dHRvblwiIG1hdFRvb2x0aXA9XCJSaW11b3ZpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzbWlzcyh1ZylcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+cmVtb3ZlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxufVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICA8L2Rpdj5cclxufVxyXG4gICAgQGlmIChidXN5KSB7XHJcbjxkaXYgc3R5bGU9XCJwYWRkaW5nOiAxNXB4XCI+XHJcbiAgICAgIDxwPlN0byBjYWxjb2xhbmRvLi4uPC9wPlxyXG4gICAgPC9kaXY+XHJcbn1cclxuICA8L2Rpdj5cclxuICBAaWYgKCFidXN5KSB7XHJcbjxkaXYgZnhGbGV4PVwiMTAwXCIgc3R5bGU9XCJvdmVyZmxvdzogYXV0b1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZhY2V0cy1pdGVtcy1jb250YWluZXJcIj5cclxuICAgICAgQGZvciAoZ3JvdXAgb2YgZ3JvdXBzOyB0cmFjayBncm91cDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICA8bWF0LWFjY29yZGlvbiBkaXNwbGF5TW9kZT1cImZsYXRcIiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz1cImZhY2V0cy1wYW5lbCBtYXQtZWxldmF0aW9uLXowXCIgW2V4cGFuZGVkXT1cImkgPT0gMFwiIGhpZGVUb2dnbGU9XCJmYWxzZVwiPlxyXG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiZmFjZXRzLWhlYWRlclwiIFtjb2xsYXBzZWRIZWlnaHRdPVwiJzQwcHgnXCIgW2V4cGFuZGVkSGVpZ2h0XT1cIic0MHB4J1wiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ3JvdXAubmFtZVwiPlxyXG4gICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICAgIEBpZiAoZ3JvdXAuaW5kZXggPT0gMiAmJiBpbnRlcnZhbCkge1xyXG48ZGl2IHN0eWxlPVwid2lkdGg6IDE4MHB4XCI+e3tpbnRlcnZhbH19ICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgKHt7Z3JvdXAudmFsdWVzLmxlbmd0aH19KVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG59XHJcbiAgICAgICAgICAgICAgQGlmIChncm91cC5pbmRleCAhPSAyIHx8ICFpbnRlcnZhbCkge1xyXG48ZGl2IHN0eWxlPVwid2lkdGg6IDE4MHB4XCI+e3tncm91cC5uYW1lfX0gJm5ic3A7XHJcbiAgICAgICAgICAgICAgICAoe3tncm91cC52YWx1ZXMubGVuZ3RofX0pIDwvZGl2PlxyXG59XHJcbiAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgIDxuYXYgY2xhc3M9XCJmYWNldHMtaXRlbXNcIj5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZ3JvdXAudmFsdWVzOyB0cmFjayBpdGVtKSB7XHJcbiAgPGxpIGNsYXNzPVwic21hbGxcIiAoY2xpY2spPVwidXNlKGdyb3VwLCBpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0udGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGwgZnhGbGV4QWxpZ249XCJjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCIgY2xhc3M9XCJ0cnVuY2F0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7aXRlbS50aXRsZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2hhc1Rvb01hbnlSZXN1bHRzID8gJ34nIDogJyd9fXt7aXRlbS5jb3VudH19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxufVxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICA8L21hdC1hY2NvcmRpb24+XHJcbn1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG59XHJcbjwvZGl2PiJdfQ==
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZhY2V0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9zZWFyY2gtZmFjZXRzL3NlYXJjaC1mYWNldHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLWZhY2V0cy9zZWFyY2gtZmFjZXRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUNMLFlBQVksRUFHWiwyQkFBMkIsRUFDNUIsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7OztBQVd4RCxNQUFNLE9BQU8sNEJBQTRCO0lBUnpDO1FBU1ksWUFBTyxHQUFHLElBQUksWUFBWSxFQUErQixDQUFDO1FBQ3BFLFNBQUksR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFcEIsYUFB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QztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDRixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQzs4R0F4T1UsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsa0hDekJ6Qyx1bEZBZ0VNLDBqQkR6Q00sVUFBVSwraEdBQUUsZUFBZSw4QkFBRSxnQkFBZ0IsNFRBQUUsY0FBYyxraEJBQUUsYUFBYSxtTEFBRSxnQkFBZ0Isa0lBQUUsa0JBQWtCOzsyRkFFakgsNEJBQTRCO2tCQVJ4QyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUM7OEJBR25ILE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xyXG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQge1xyXG4gIENsaXBwZXJGYWNldCxcclxuICBDbGlwcGVyU2VhcmNoRmFjZXQsXHJcbiAgQ2xpcHBlclNlYXJjaEZhY2V0R3JvdXAsXHJcbiAgQ2xpcHBlclNlYXJjaEZhY2V0c1NuYXBzaG90XHJcbn0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7IFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dC9mbGV4JztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NsaXBwZXItc2VhcmNoLWZhY2V0cycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1mYWNldHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1mYWNldHMuY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGltcG9ydHM6IFtGbGV4TW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGUsIE1hdENoaXBzTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXREaXZpZGVyTW9kdWxlLCBNYXRFeHBhbnNpb25Nb2R1bGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50IHtcclxuICBAT3V0cHV0KCkgY2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2xpcHBlclNlYXJjaEZhY2V0c1NuYXBzaG90PigpO1xyXG4gIGJ1c3kgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwcm90ZWN0ZWQgc25hcHNob3Q6IENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdCA9IG5ldyBDbGlwcGVyU2VhcmNoRmFjZXRzU25hcHNob3QoKTtcclxuXHJcbiAgLyoqXHJcbiAqIFVwZGF0ZSBmYWNldHNcclxuICogQHBhcmFtIHZhbHVlcyA6IHRoZSBmYWNldHMgdmFsdWVzXHJcbiAqIEBwYXJhbSBpbnRlcnZhbCA6IHRoZSBkYXRlIGludGVydmFsIGZvciBZRUFSIGZhY2V0c1xyXG4gKi9cclxuICB1cGRhdGUodmFsdWVzOiBDbGlwcGVyU2VhcmNoRmFjZXRbXVtdIHwgbnVsbCA9IG51bGwsIGludGVydmFsOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgdGhpcy5idXN5LnNldCh0cnVlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNuYXBzaG90LmludGVydmFsID0gaW50ZXJ2YWw7XHJcbiAgICAgIGlmICh2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnNuYXBzaG90Lmdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKChuKSA9PiB7XHJcbiAgICAgICAgICBsZXQgbmFtZSA9IG5bMF0udHlwZU5hbWU7XHJcbiAgICAgICAgICBsZXQgaW5kZXggPSBuWzBdLnR5cGU7XHJcbiAgICAgICAgICBsZXQgaSA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEluZGV4QnlLZXkoXHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QudXNlZEdyb3VwcyxcclxuICAgICAgICAgICAgJ2luZGV4JyxcclxuICAgICAgICAgICAgaW5kZXgpO1xyXG4gICAgICAgICAgbGV0IGogPSBTeXN0ZW1VdGlscy5hcnJheUZpbmRJbmRleEJ5S2V5KFxyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90Lmdyb3VwcyxcclxuICAgICAgICAgICAgJ2luZGV4JyxcclxuICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoaSA9PT0gLTEgJiYgaiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5ncm91cHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlOiBudWxsLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVEZXNjcmlwdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgICB2YWx1ZXM6IG4sXHJcbiAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNuYXBzaG90Lmhhc0ZhY2V0cyA9IHRoaXMuc25hcHNob3QuZ3JvdXBzLmxlbmd0aCA+IDAgfHwgdGhpcy5zbmFwc2hvdC51c2VkR3JvdXBzLmxlbmd0aCA+IDA7XHJcbiAgICAgIHRoaXMuYnVzeS5zZXQoZmFsc2UpO1xyXG4gICAgfSwgMjUwKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlIGEgZmFjZXQgaXRlbSBhcyBmaWx0ZXJcclxuICAgKiBAcGFyYW0gZ3JvdXAgOiB0aGUgZmFjZXQgZ3JvdXBcclxuICAgKiBAcGFyYW0gaXRlbSAgOiB0aGUgZmFjZXQgaXRlbVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCB1c2UoZ3JvdXA6IENsaXBwZXJTZWFyY2hGYWNldEdyb3VwLCBpdGVtOiBDbGlwcGVyU2VhcmNoRmFjZXQpIHtcclxuICAgIGdyb3VwLnNlbGVjdGVkVmFsdWUgPSBpdGVtLnZhbHVlO1xyXG4gICAgZ3JvdXAuc2VsZWN0ZWRWYWx1ZURlc2NyaXB0aW9uID0gaXRlbS50aXRsZTtcclxuICAgIGxldCBqID0gU3lzdGVtVXRpbHMuYXJyYXlGaW5kSW5kZXhCeUtleSh0aGlzLnNuYXBzaG90Lmdyb3VwcywgJ2luZGV4JywgZ3JvdXAuaW5kZXgpO1xyXG4gICAgaWYgKGogIT09IC0xKSB7XHJcbiAgICAgIHRoaXMuc25hcHNob3QuZ3JvdXBzLnNwbGljZShqLCAxKTtcclxuICAgICAgbGV0IHVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zbmFwc2hvdC51c2VkR3JvdXBzLmZvckVhY2goKG4sIGkpID0+IHtcclxuICAgICAgICBpZiAoIXVwZGF0ZWQgJiYgbi5pbmRleCA+IGdyb3VwLmluZGV4KSB7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LnVzZWRHcm91cHMuc3BsaWNlKGksIDAsIGdyb3VwKTtcclxuICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghdXBkYXRlZCkge1xyXG4gICAgICAgIHRoaXMuc25hcHNob3QudXNlZEdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5hcHBseSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZGlzbWlzcyBhIGZhY2V0IGdyb3VwIGZpbHRlclxyXG4gICAqIEBwYXJhbSBncm91cCA6IHRoZSBmYWNldCBncm91cFxyXG4gICAqIEBwYXJhbSBhcHBseSA6IHRydWUgdG8gZW1pdCBjaGFuZ2VkIGV2ZW50IGFuZCBnZW5lcmF0ZSBhIG5ldyBzZWFyY2gsIGZhbHNlIGp1c3QgZm9yIHVwZGF0ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBkaXNtaXNzKGdyb3VwOiBDbGlwcGVyU2VhcmNoRmFjZXRHcm91cCwgYXBwbHk6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBncm91cC5zZWxlY3RlZFZhbHVlID0gbnVsbDtcclxuICAgIGdyb3VwLnNlbGVjdGVkVmFsdWVEZXNjcmlwdGlvbiA9IG51bGw7XHJcbiAgICBsZXQgaSA9IFN5c3RlbVV0aWxzLmFycmF5RmluZEluZGV4QnlLZXkodGhpcy5zbmFwc2hvdC51c2VkR3JvdXBzLCAnaW5kZXgnLCBncm91cC5pbmRleCk7XHJcbiAgICBpZiAoaSAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5zbmFwc2hvdC51c2VkR3JvdXBzLnNwbGljZShpLCAxKTtcclxuICAgICAgbGV0IHVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zbmFwc2hvdC5ncm91cHMuZm9yRWFjaCgobiwgaikgPT4ge1xyXG4gICAgICAgIGlmICghdXBkYXRlZCAmJiBuLmluZGV4ID4gZ3JvdXAuaW5kZXgpIHtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZ3JvdXBzLnNwbGljZShqLCAwLCBncm91cCk7XHJcbiAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoIXVwZGF0ZWQpIHtcclxuICAgICAgICB0aGlzLnNuYXBzaG90Lmdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGFwcGx5KSB7XHJcbiAgICAgIHRoaXMuYXBwbHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IGZpbHRlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXBwbHkoKSB7XHJcbiAgICBpZiAodGhpcy5zbmFwc2hvdC51c2VkR3JvdXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zbmFwc2hvdC51c2VkR3JvdXBzLmZvckVhY2goKG4pID0+IHtcclxuICAgICAgICBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckZhY2V0LlllYXIpIHtcclxuICAgICAgICAgIGlmIChuLnNlbGVjdGVkVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5mcm9tRGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KG4uc2VsZWN0ZWRWYWx1ZSksIDAsIDEsIDEyLCAwLCAwKTtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC50b0RhdGUgPSBuZXcgRGF0ZShwYXJzZUludChuLnNlbGVjdGVkVmFsdWUpLCAxMSwgMzEsIDEyLCAwLCAwKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QuZnJvbURhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90LnRvRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChuLmluZGV4ID09PSBDbGlwcGVyRmFjZXQuU2VjdG9yKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LnNlY3RvciA9IG4uc2VsZWN0ZWRWYWx1ZSA/PyBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckZhY2V0LkF1dGhvcikge1xyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC5hdXRob3IgPSBuLnNlbGVjdGVkVmFsdWUgPz8gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJGYWNldC5Eb2N1bWVudFR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QudHlwZSA9IG4uc2VsZWN0ZWRWYWx1ZSA/PyBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckZhY2V0LkFydGljbGUpIHtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuYW5jaG9yID0gbi5zZWxlY3RlZFZhbHVlID8/IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuLmluZGV4ID09PSBDbGlwcGVyRmFjZXQuUmVhc29uKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LnJlYXNvbiA9IG4uc2VsZWN0ZWRWYWx1ZSA/PyBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbmFwc2hvdC5ncm91cHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNuYXBzaG90Lmdyb3Vwcy5mb3JFYWNoKChuKSA9PiB7XHJcbiAgICAgICAgaWYgKG4uaW5kZXggPT09IENsaXBwZXJGYWNldC5ZZWFyKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmNoYW5nZWRJbnRlcnZhbCA9IHRoaXMuc25hcHNob3QuZnJvbURhdGUgIT09IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmZyb21EYXRlID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QudG9EYXRlID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJGYWNldC5TZWN0b3IpIHtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuY2hhbmdlZFNlY3RvciA9IHRoaXMuc25hcHNob3Quc2VjdG9yICE9PSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC5zZWN0b3IgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckZhY2V0LkF1dGhvcikge1xyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC5jaGFuZ2VkQXV0aG9yID0gdGhpcy5zbmFwc2hvdC5hdXRob3IgIT09IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmF1dGhvciA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuLmluZGV4ID09PSBDbGlwcGVyRmFjZXQuRG9jdW1lbnRUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmNoYW5nZWRUeXBlID0gdGhpcy5zbmFwc2hvdC50eXBlICE9PSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC50eXBlID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJGYWNldC5BcnRpY2xlKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmNoYW5nZWRBbmNob3IgPSB0aGlzLnNuYXBzaG90LmFuY2hvciAhPT0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuYW5jaG9yID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJGYWNldC5SZWFzb24pIHtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuY2hhbmdlZFJlYXNvbiA9IHRoaXMuc25hcHNob3QucmVhc29uICE9PSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC5yZWFzb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZWQuZW1pdCh0aGlzLnNuYXBzaG90KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGZhY2V0cyBieSBncm91cCBpbmRleFxyXG4gICAqIEBwYXJhbSBpbmRleCA6IHRoZSBncm91cCBpbmRleCB0byBjbGVhci4gVXNlIC0xIHRvIGNsZWFyIGFsbCBncm91cHMgYXQgb25jZVxyXG4gICAqIEByZXR1cm5zIDogdGhlIG51bWJlciBvZiBncm91cHMgZGlzbWlzc2VkXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNsZWFyKGluZGV4OiBudW1iZXIgPSAtMSk6IG51bWJlciB7XHJcbiAgICBsZXQgZGlzbWlzc2VkID0gMDtcclxuICAgIHRoaXMuc25hcHNob3QudXNlZEdyb3Vwcy5mb3JFYWNoKChuKSA9PiB7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gLTEgfHwgaW5kZXggPT09IG4uaW5kZXgpIHtcclxuICAgICAgICBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckZhY2V0LlllYXIpIHtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuY2hhbmdlZEludGVydmFsID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuZnJvbURhdGUgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC50b0RhdGUgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobi5pbmRleCA9PT0gQ2xpcHBlckZhY2V0LlNlY3Rvcikge1xyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC5jaGFuZ2VkU2VjdG9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3Quc2VjdG9yID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJGYWNldC5BdXRob3IpIHtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuY2hhbmdlZEF1dGhvciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmF1dGhvciA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuLmluZGV4ID09PSBDbGlwcGVyRmFjZXQuRG9jdW1lbnRUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LmNoYW5nZWRUeXBlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QudHlwZSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuLmluZGV4ID09PSBDbGlwcGVyRmFjZXQuQXJ0aWNsZSkge1xyXG4gICAgICAgICAgdGhpcy5zbmFwc2hvdC5jaGFuZ2VkQW5jaG9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuYW5jaG9yID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKG4uaW5kZXggPT09IENsaXBwZXJGYWNldC5SZWFzb24pIHtcclxuICAgICAgICAgIHRoaXMuc25hcHNob3QuY2hhbmdlZFJlYXNvbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNuYXBzaG90LnJlYXNvbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlzbWlzcyhuLCBmYWxzZSk7XHJcbiAgICAgICAgZGlzbWlzc2VkKys7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGRpc21pc3NlZCkge1xyXG4gICAgICB0aGlzLmNoYW5nZWQuZW1pdCh0aGlzLnNuYXBzaG90KTtcclxuICAgIH1cclxuICAgIHJldHVybiBkaXNtaXNzZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldFxyXG4gICAqL1xyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5zbmFwc2hvdC5ncm91cHMgPSBbXTtcclxuICAgIHRoaXMuc25hcHNob3QudXNlZEdyb3VwcyA9IFtdO1xyXG4gICAgdGhpcy5zbmFwc2hvdC5oYXNGYWNldHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc25hcHNob3QuZnJvbURhdGUgPSBudWxsO1xyXG4gICAgdGhpcy5zbmFwc2hvdC50b0RhdGUgPSBudWxsO1xyXG4gICAgdGhpcy5zbmFwc2hvdC5zZWN0b3IgPSBudWxsO1xyXG4gICAgdGhpcy5zbmFwc2hvdC5hdXRob3IgPSBudWxsO1xyXG4gICAgdGhpcy5zbmFwc2hvdC5hbmNob3IgPSBudWxsO1xyXG4gICAgdGhpcy5zbmFwc2hvdC50eXBlID0gbnVsbDtcclxuICAgIHRoaXMuc25hcHNob3QucmVhc29uID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3RvcmUgZGF0YVxyXG4gICAqIEBwYXJhbSBkYXRhIDogdGhlIGRhdGEgdG8gcmVzdG9yZVxyXG4gICAqL1xyXG4gIHJlc3RvcmUoZGF0YTogQ2xpcHBlclNlYXJjaEZhY2V0c1NuYXBzaG90KSB7XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICB0aGlzLnNuYXBzaG90Lmdyb3VwcyA9IGRhdGEuZ3JvdXBzO1xyXG4gICAgICB0aGlzLnNuYXBzaG90LnVzZWRHcm91cHMgPSBkYXRhLnVzZWRHcm91cHM7XHJcbiAgICAgIHRoaXMuc25hcHNob3QuaGFzRmFjZXRzID0gZGF0YS5oYXNGYWNldHM7XHJcbiAgICAgIHRoaXMuc25hcHNob3QuZnJvbURhdGUgPSBkYXRhLmZyb21EYXRlO1xyXG4gICAgICB0aGlzLnNuYXBzaG90LnRvRGF0ZSA9IGRhdGEudG9EYXRlO1xyXG4gICAgICB0aGlzLnNuYXBzaG90LnNlY3RvciA9IGRhdGEuc2VjdG9yO1xyXG4gICAgICB0aGlzLnNuYXBzaG90LmF1dGhvciA9IGRhdGEuYXV0aG9yO1xyXG4gICAgICB0aGlzLnNuYXBzaG90LmFuY2hvciA9IGRhdGEuYW5jaG9yO1xyXG4gICAgICB0aGlzLnNuYXBzaG90LnR5cGUgPSBkYXRhLnR5cGU7XHJcbiAgICAgIHRoaXMuc25hcHNob3QucmVhc29uID0gZGF0YS5yZWFzb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGRhdGFcclxuICAgKi9cclxuICBzYXZlKCk6IENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdCB7XHJcbiAgICByZXR1cm4gdGhpcy5zbmFwc2hvdDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbCBjbGFzcz1cImZhY2V0cy1jb250YWluZXIgc2Nyb2xsLWhpZGRlblwiPlxyXG4gIDxkaXY+XHJcbiAgICBAaWYgKHNuYXBzaG90LnVzZWRHcm91cHMubGVuZ3RoID4gMCkge1xyXG4gICAgPGRpdiBjbGFzcz1cImZhY2V0cy1zZWxlY3Rpb25cIj5cclxuICAgICAgPG1hdC1jaGlwLXNldCBhcmlhLWxhYmVsPVwiU2VsZXppb25lXCI+XHJcbiAgICAgICAgQGZvciAodWcgb2Ygc25hcHNob3QudXNlZEdyb3VwczsgdHJhY2sgdWcpIHtcclxuICAgICAgICA8bWF0LWNoaXAgKHJlbW92ZWQpPVwiZGlzbWlzcyh1ZylcIiBbbWF0VG9vbHRpcF09XCJ1Zy5zZWxlY3RlZFZhbHVlRGVzY3JpcHRpb24gPz8gJydcIj5cclxuICAgICAgICAgIHt7dWcuc2VsZWN0ZWRWYWx1ZURlc2NyaXB0aW9ufX1cclxuICAgICAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZSBbYXR0ci5hcmlhLWxhYmVsXT1cIidSaW11b3ZpICcgKyB1Zy5uYW1lXCIgW21hdFRvb2x0aXBdPVwiJ1JpbXVvdmkgJyArIHVnLm5hbWVcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L21hdC1jaGlwPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9tYXQtY2hpcC1zZXQ+XHJcbiAgICAgIDxtYXQtZGl2aWRlciBzdHlsZT1cIm1hcmdpbi10b3A6IDIwcHg7XCI+PC9tYXQtZGl2aWRlcj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgQGlmIChidXN5KCkpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJmYWNldHMtbWVzc2FnZVwiPlxyXG4gICAgICA8cCBjbGFzcz1cImFjY2VudFwiPlN0byBlbGFib3JhbmRvLi4uPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBmeEZsZXg9XCIqXCIgY2xhc3M9XCJzY3JvbGwtYXV0b1wiPlxyXG4gICAgQGlmICghYnVzeSgpKSB7XHJcbiAgICBAaWYgKHNuYXBzaG90Lmdyb3Vwcy5sZW5ndGggPiAwKSB7XHJcbiAgICBAZm9yIChncm91cCBvZiBzbmFwc2hvdC5ncm91cHM7IHRyYWNrIGdyb3VwLmluZGV4OyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgPG1hdC1hY2NvcmRpb24gbXVsdGkgZGlzcGxheU1vZGU9XCJmbGF0XCI+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCIgW2V4cGFuZGVkXT1cImkgPT0gMFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImdyb3VwLm5hbWVcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIEBpZiAoZ3JvdXAuaW5kZXggPT0gMiAmJiBzbmFwc2hvdC5pbnRlcnZhbCkge1xyXG4gICAgICAgICAgICB7e3NuYXBzaG90LmludGVydmFsfX0gKHt7Z3JvdXAudmFsdWVzLmxlbmd0aH19KVxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAge3tncm91cC5uYW1lfX0gKHt7Z3JvdXAudmFsdWVzLmxlbmd0aH19KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxuYXYgY2xhc3M9XCJmYWNldHMtaXRlbXNcIj5cclxuICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBncm91cC52YWx1ZXM7IHRyYWNrIGl0ZW0pIHtcclxuICAgICAgICAgICAgPGxpIChjbGljayk9XCJ1c2UoZ3JvdXAsIGl0ZW0pXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLnRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMTBweFwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0cnVuY2F0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRydW5jYXRlZFwiPnt7aXRlbS50aXRsZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImVuZFwiIGZ4RmxleEFsaWduPVwiY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7c25hcHNob3QuaGFzVG9vTWFueVJlc3VsdHMgPyAnficgOiAnJ319e3tpdGVtLmNvdW50fX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICB9XHJcbiAgICB9IEBlbHNlIGlmIChzbmFwc2hvdC5oYXNGYWNldHMpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJmYWNldHMtbWVzc2FnZVwiPlxyXG4gICAgICA8cCBjbGFzcz1cInNtYWxsXCI+PGk+VHV0dGUgbGUgb3B6aW9uaSBzb25vIHN0YXRlIHNlbGV6aW9uYXRlPC9pPjwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|