@recursyve/nice-data-filter-kit 12.1.29 → 13.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/_index.scss +1 -7
  2. package/{esm2015/lib/api/dto/saved-reports.dto.js → esm2020/lib/api/dto/saved-reports.dto.mjs} +0 -0
  3. package/esm2020/lib/api/filter.api.mjs +51 -0
  4. package/{esm2015/lib/api/models/saved-reports.model.js → esm2020/lib/api/models/saved-reports.model.mjs} +0 -0
  5. package/{esm2015/lib/api/public-api.js → esm2020/lib/api/public-api.mjs} +0 -0
  6. package/esm2020/lib/api/saved-report.api.mjs +48 -0
  7. package/esm2020/lib/components/base-list/base-list.component.mjs +288 -0
  8. package/{esm2015/lib/components/base-list/base-list.constant.js → esm2020/lib/components/base-list/base-list.constant.mjs} +0 -0
  9. package/esm2020/lib/components/base-list/base-list.module.mjs +171 -0
  10. package/{esm2015/lib/components/base-list/directives/base-list-buttons.directive.js → esm2020/lib/components/base-list/directives/base-list-buttons.directive.mjs} +3 -3
  11. package/{esm2015/lib/components/base-list/directives/base-list-cards.directive.js → esm2020/lib/components/base-list/directives/base-list-cards.directive.mjs} +3 -3
  12. package/{esm2015/lib/components/base-list/directives/base-list-custom-content.directive.js → esm2020/lib/components/base-list/directives/base-list-custom-content.directive.mjs} +3 -3
  13. package/{esm2015/lib/components/base-list/directives/base-list-directives.module.js → esm2020/lib/components/base-list/directives/base-list-directives.module.mjs} +4 -4
  14. package/{esm2015/lib/components/base-list/directives/base-list-filters.directive.js → esm2020/lib/components/base-list/directives/base-list-filters.directive.mjs} +3 -3
  15. package/{esm2015/lib/components/base-list/directives/base-list-table.directive.js → esm2020/lib/components/base-list/directives/base-list-table.directive.mjs} +3 -3
  16. package/{esm2015/lib/components/base-list/directives/base-list-title.directive.js → esm2020/lib/components/base-list/directives/base-list-title.directive.mjs} +3 -3
  17. package/{esm2015/lib/components/base-list/models/columns.model.js → esm2020/lib/components/base-list/models/columns.model.mjs} +0 -0
  18. package/{esm2015/lib/components/base-list/models/export.model.js → esm2020/lib/components/base-list/models/export.model.mjs} +0 -0
  19. package/esm2020/lib/components/base-list/models/layout.model.mjs +149 -0
  20. package/esm2020/lib/components/base-list/providers/base-filter.service.mjs +34 -0
  21. package/{esm2015/lib/components/base-list/providers/base-list-saved-report.service.js → esm2020/lib/components/base-list/providers/base-list-saved-report.service.mjs} +3 -3
  22. package/{esm2015/lib/components/base-list/public-api.js → esm2020/lib/components/base-list/public-api.mjs} +0 -0
  23. package/esm2020/lib/components/base-list/store/base-list.query.mjs +35 -0
  24. package/esm2020/lib/components/base-list/store/base-list.service.mjs +341 -0
  25. package/esm2020/lib/components/base-list/store/base-list.store.mjs +81 -0
  26. package/{esm2015/lib/components/multi-state-list/models/list-states.model.js → esm2020/lib/components/multi-state-list/models/list-states.model.mjs} +0 -0
  27. package/esm2020/lib/components/multi-state-list/multi-state-list.component.mjs +71 -0
  28. package/{esm2015/lib/components/multi-state-list/multi-state-list.constant.js → esm2020/lib/components/multi-state-list/multi-state-list.constant.mjs} +0 -0
  29. package/{esm2015/lib/components/multi-state-list/multi-state-list.module.js → esm2020/lib/components/multi-state-list/multi-state-list.module.mjs} +6 -14
  30. package/{esm2015/lib/components/multi-state-list/providers/multi-state-filter.service.js → esm2020/lib/components/multi-state-list/providers/multi-state-filter.service.mjs} +0 -0
  31. package/{esm2015/lib/components/multi-state-list/public-api.js → esm2020/lib/components/multi-state-list/public-api.mjs} +0 -0
  32. package/{esm2015/lib/components/multi-state-list/store/multi-state-list.query.js → esm2020/lib/components/multi-state-list/store/multi-state-list.query.mjs} +3 -3
  33. package/{esm2015/lib/components/multi-state-list/store/multi-state-list.service.js → esm2020/lib/components/multi-state-list/store/multi-state-list.service.mjs} +5 -6
  34. package/esm2020/lib/components/multi-state-list/store/multi-state-list.store.mjs +24 -0
  35. package/{esm2015/lib/components/public-api.js → esm2020/lib/components/public-api.mjs} +0 -0
  36. package/esm2020/lib/components/query-builder/filter-selection/filter-selection.component.mjs +41 -0
  37. package/{esm2015/lib/components/query-builder/pipes/filter-group-icon.pipe.js → esm2020/lib/components/query-builder/pipes/filter-group-icon.pipe.mjs} +3 -3
  38. package/{esm2015/lib/components/query-builder/providers/filter-group.service.js → esm2020/lib/components/query-builder/providers/filter-group.service.mjs} +0 -0
  39. package/{esm2015/lib/components/query-builder/public-api.js → esm2020/lib/components/query-builder/public-api.mjs} +0 -0
  40. package/{esm2015/lib/components/query-builder/query-builder-trigger.directive.js → esm2020/lib/components/query-builder/query-builder-trigger.directive.mjs} +3 -3
  41. package/esm2020/lib/components/query-builder/query-builder.component.mjs +93 -0
  42. package/{esm2015/lib/components/query-builder/query-builder.form.js → esm2020/lib/components/query-builder/query-builder.form.mjs} +0 -0
  43. package/esm2020/lib/components/query-builder/query-builder.module.mjs +116 -0
  44. package/esm2020/lib/components/query-builder/rule/components/date/date-filter.component.mjs +29 -0
  45. package/{esm2015/lib/components/query-builder/rule/components/filter.component.js → esm2020/lib/components/query-builder/rule/components/filter.component.mjs} +3 -3
  46. package/esm2020/lib/components/query-builder/rule/components/number/number-filter.component.mjs +28 -0
  47. package/esm2020/lib/components/query-builder/rule/components/radio/radio-filter.component.mjs +30 -0
  48. package/esm2020/lib/components/query-builder/rule/components/select/select-filter.component.mjs +83 -0
  49. package/esm2020/lib/components/query-builder/rule/components/text/text-filter.component.mjs +31 -0
  50. package/esm2020/lib/components/query-builder/rule/rule.component.mjs +78 -0
  51. package/{esm2015/lib/components/query-builder/utils/qb-filter.utils.js → esm2020/lib/components/query-builder/utils/qb-filter.utils.mjs} +23 -9
  52. package/{esm2015/lib/models/filter.model.js → esm2020/lib/models/filter.model.mjs} +0 -0
  53. package/{esm2015/lib/models/public-api.js → esm2020/lib/models/public-api.mjs} +0 -0
  54. package/{esm2015/lib/models/query.model.js → esm2020/lib/models/query.model.mjs} +0 -0
  55. package/{esm2015/lib/utils/date.adapter.js → esm2020/lib/utils/date.adapter.mjs} +3 -3
  56. package/esm2020/lib/utils/filter.utils.mjs +40 -0
  57. package/{esm2015/lib/utils/public-api.js → esm2020/lib/utils/public-api.mjs} +0 -0
  58. package/{esm2015/lib/utils/query-params.utils.js → esm2020/lib/utils/query-params.utils.mjs} +0 -0
  59. package/{esm2015/lib/utils/string.utils.js → esm2020/lib/utils/string.utils.mjs} +0 -0
  60. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  61. package/{esm2015/recursyve-nice-data-filter-kit.js → esm2020/recursyve-nice-data-filter-kit.mjs} +0 -0
  62. package/fesm2015/recursyve-nice-data-filter-kit.mjs +2448 -0
  63. package/fesm2015/recursyve-nice-data-filter-kit.mjs.map +1 -0
  64. package/fesm2020/recursyve-nice-data-filter-kit.mjs +2446 -0
  65. package/fesm2020/recursyve-nice-data-filter-kit.mjs.map +1 -0
  66. package/lib/components/base-list/base-list.module.d.ts +15 -16
  67. package/lib/components/base-list/models/layout.model.d.ts +0 -4
  68. package/lib/components/multi-state-list/multi-state-list.module.d.ts +15 -16
  69. package/lib/components/query-builder/query-builder.module.d.ts +10 -11
  70. package/package.json +30 -16
  71. package/src/lib/components/base-list/base-list.theme.scss +5 -5
  72. package/src/lib/components/query-builder/filter-selection/filter-selection.theme.scss +42 -0
  73. package/src/lib/components/query-builder/query-builder.theme.scss +2 -0
  74. package/src/lib/components/query-builder/rule/rule.theme.scss +83 -1
  75. package/src/lib/nice-data-filter.theme.scss +7 -0
  76. package/bundles/recursyve-nice-data-filter-kit.umd.js +0 -3189
  77. package/bundles/recursyve-nice-data-filter-kit.umd.js.map +0 -1
  78. package/esm2015/lib/api/filter.api.js +0 -52
  79. package/esm2015/lib/api/saved-report.api.js +0 -49
  80. package/esm2015/lib/components/base-list/base-list.component.js +0 -297
  81. package/esm2015/lib/components/base-list/base-list.module.js +0 -180
  82. package/esm2015/lib/components/base-list/models/layout.model.js +0 -164
  83. package/esm2015/lib/components/base-list/providers/base-filter.service.js +0 -40
  84. package/esm2015/lib/components/base-list/store/base-list.query.js +0 -35
  85. package/esm2015/lib/components/base-list/store/base-list.service.js +0 -330
  86. package/esm2015/lib/components/base-list/store/base-list.store.js +0 -78
  87. package/esm2015/lib/components/multi-state-list/multi-state-list.component.js +0 -75
  88. package/esm2015/lib/components/multi-state-list/store/multi-state-list.store.js +0 -22
  89. package/esm2015/lib/components/query-builder/filter-selection/filter-selection.component.js +0 -48
  90. package/esm2015/lib/components/query-builder/query-builder.component.js +0 -100
  91. package/esm2015/lib/components/query-builder/query-builder.module.js +0 -120
  92. package/esm2015/lib/components/query-builder/rule/components/date/date-filter.component.js +0 -35
  93. package/esm2015/lib/components/query-builder/rule/components/number/number-filter.component.js +0 -34
  94. package/esm2015/lib/components/query-builder/rule/components/radio/radio-filter.component.js +0 -36
  95. package/esm2015/lib/components/query-builder/rule/components/select/select-filter.component.js +0 -94
  96. package/esm2015/lib/components/query-builder/rule/components/text/text-filter.component.js +0 -37
  97. package/esm2015/lib/components/query-builder/rule/rule.component.js +0 -86
  98. package/esm2015/lib/utils/filter.utils.js +0 -41
  99. package/fesm2015/recursyve-nice-data-filter-kit.js +0 -2519
  100. package/fesm2015/recursyve-nice-data-filter-kit.js.map +0 -1
@@ -1,330 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { ApplicationRef, Injectable } from "@angular/core";
3
- import { ActivatedRoute, Router } from "@angular/router";
4
- import { arrayRemove, arrayUpsert } from "@datorama/akita";
5
- import { FileUtils } from "@recursyve/nice-ui-kit.v2";
6
- import { Subject } from "rxjs";
7
- import { map, takeUntil } from "rxjs/operators";
8
- import { FilterUtils } from "../../../utils/filter.utils";
9
- import { QBFilterUtils } from "../../query-builder/utils/qb-filter.utils";
10
- import { QueryParamsUtils } from "../../../utils/query-params.utils";
11
- import { NiceFilterService } from "../providers/base-filter.service";
12
- import { NiceBaseListStore } from "./base-list.store";
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "./base-list.store";
15
- import * as i2 from "../providers/base-filter.service";
16
- import * as i3 from "@angular/router";
17
- export class NiceBaseListService {
18
- constructor(store, filterService, activatedRoute, router, appRef) {
19
- this.store = store;
20
- this.filterService = filterService;
21
- this.activatedRoute = activatedRoute;
22
- this.router = router;
23
- this.appRef = appRef;
24
- this.queryParamsLoaded$ = new Subject();
25
- this.downloadFileName = "data";
26
- this.unsubscribeAll$ = new Subject();
27
- this.loadingData = false;
28
- }
29
- init() {
30
- return __awaiter(this, void 0, void 0, function* () {
31
- this.store.setFilterConfigLoading(true);
32
- try {
33
- const filterConfig = yield this.filterService.getFilterConfig().toPromise();
34
- this.store.update({
35
- filterConfig
36
- });
37
- }
38
- catch (e) {
39
- this.store.setError(e);
40
- }
41
- finally {
42
- this.store.setFilterConfigLoading(false);
43
- }
44
- });
45
- }
46
- resetStore() {
47
- this.store.reset();
48
- }
49
- resetData() {
50
- this.store.update({
51
- filterResult: null
52
- });
53
- }
54
- closeSubscriptions() {
55
- this.unsubscribeAll$.next();
56
- this.unsubscribeAll$.complete();
57
- this.queryParamsLoaded$.complete();
58
- }
59
- disableList() {
60
- this.store.update({
61
- disabled: true
62
- });
63
- }
64
- enableList() {
65
- this.store.update({
66
- disabled: false
67
- });
68
- }
69
- setLoading(loading) {
70
- this.store.setLoading(loading);
71
- }
72
- setMode(mode) {
73
- this.store.update({
74
- mergePageResults: mode === "infinite-scroll"
75
- });
76
- }
77
- loadQueryParams(autoLoad) {
78
- var _a;
79
- (_a = this.activatedRoute) === null || _a === void 0 ? void 0 : _a.queryParams.pipe(takeUntil(this.unsubscribeAll$), map((params) => {
80
- return {
81
- params: QueryParamsUtils.extractFilterParameters(params)
82
- };
83
- })).subscribe(({ params }) => {
84
- if (!params || Object.keys(params).length === 0) {
85
- params = this.store.getValue().filterParameters;
86
- }
87
- const { filterParameters, filterResult } = this.store.getValue();
88
- if (FilterUtils.filterChangeNeedsRefresh(filterParameters, params) ||
89
- !filterResult) {
90
- if (autoLoad) {
91
- this.loadData(params, false);
92
- }
93
- else {
94
- this.setParameters(params, false);
95
- }
96
- }
97
- this.queryParamsLoaded$.next();
98
- });
99
- }
100
- resetAndLoadData(parameters, updateQueryParams = true) {
101
- return __awaiter(this, void 0, void 0, function* () {
102
- return this.loadData(parameters, updateQueryParams, true);
103
- });
104
- }
105
- loadData(parameters, updateQueryParams = true, reset = false) {
106
- return __awaiter(this, void 0, void 0, function* () {
107
- const { disabled } = this.store.getValue();
108
- try {
109
- const filterParameters = this.mergeParameters(parameters);
110
- if (!disabled) {
111
- this.store.setLoading(true);
112
- this.loadingData = true;
113
- const result = yield this.filterService.filter(this.getParameters(filterParameters)).toPromise();
114
- this.store.setResult(result, reset);
115
- }
116
- if (filterParameters) {
117
- this.setParameters(filterParameters, disabled ? false : updateQueryParams);
118
- }
119
- }
120
- catch (e) {
121
- this.store.setError(e);
122
- }
123
- finally {
124
- this.store.setLoading(false);
125
- this.loadingData = false;
126
- }
127
- });
128
- }
129
- searchData(search) {
130
- return __awaiter(this, void 0, void 0, function* () {
131
- const { filterParameters } = this.store.getValue();
132
- yield this.loadData(Object.assign(Object.assign({}, filterParameters), { search }));
133
- });
134
- }
135
- loadNewPage(start, length) {
136
- return __awaiter(this, void 0, void 0, function* () {
137
- const { filterParameters } = this.store.getValue();
138
- yield this.loadData(Object.assign(Object.assign({}, filterParameters), { start,
139
- length }));
140
- });
141
- }
142
- loadNextPage() {
143
- return __awaiter(this, void 0, void 0, function* () {
144
- const { filterParameters } = this.store.getValue();
145
- yield this.loadData(Object.assign(Object.assign({}, filterParameters), { start: filterParameters.start + filterParameters.length }));
146
- });
147
- }
148
- resetPaging() {
149
- return __awaiter(this, void 0, void 0, function* () {
150
- const { filterParameters } = this.store.getValue();
151
- this.store.setParameters(Object.assign(Object.assign({}, filterParameters), { start: 0 }));
152
- this.store.update({
153
- resetPaging: true
154
- });
155
- });
156
- }
157
- downloadData(type, parameters, updateQueryParams = true) {
158
- return __awaiter(this, void 0, void 0, function* () {
159
- try {
160
- this.store.setLoading(true);
161
- this.loadingData = true;
162
- const filterParameters = this.mergeParameters(parameters);
163
- if (filterParameters) {
164
- this.setParameters(filterParameters, updateQueryParams);
165
- }
166
- const result = yield this.filterService.getFile(type, this.getParameters(filterParameters)).toPromise();
167
- FileUtils.downloadFile(`${this.downloadFileName}.${type}`, result);
168
- }
169
- catch (e) {
170
- this.store.setError(e);
171
- }
172
- finally {
173
- this.store.setLoading(false);
174
- this.loadingData = false;
175
- }
176
- });
177
- }
178
- printData(parameters, updateQueryParams = true) {
179
- return __awaiter(this, void 0, void 0, function* () {
180
- try {
181
- this.store.setLoading(true);
182
- this.loadingData = true;
183
- const filterParameters = this.mergeParameters(parameters);
184
- if (filterParameters) {
185
- this.setParameters(filterParameters, updateQueryParams);
186
- }
187
- const result = yield this.filterService.getPrintableHtml(this.getParameters(filterParameters)).toPromise();
188
- FileUtils.openPrintableWindow(result);
189
- }
190
- catch (e) {
191
- this.store.setError(e);
192
- }
193
- finally {
194
- this.store.setLoading(false);
195
- this.loadingData = false;
196
- }
197
- });
198
- }
199
- updateRule(id, newRule) {
200
- var _a;
201
- const { filterParameters } = this.store.getValue();
202
- const rules = (_a = filterParameters.rules) === null || _a === void 0 ? void 0 : _a[0];
203
- if (!rules || rules.rules.length === 0) {
204
- this.updateRules([newRule]);
205
- return;
206
- }
207
- const oldRule = rules.rules.find((r) => r.id === id);
208
- let newRules = rules.rules;
209
- if (oldRule) {
210
- if (newRule) {
211
- // Array replace
212
- newRules = [
213
- ...rules.rules.slice(0, rules.rules.indexOf(oldRule)),
214
- newRule,
215
- ...rules.rules.slice(rules.rules.indexOf(oldRule) + 1, rules.rules.length)
216
- ];
217
- }
218
- else {
219
- newRules = rules.rules.filter((r) => r.id !== id);
220
- }
221
- }
222
- else {
223
- newRules = [...newRules, newRule];
224
- }
225
- this.updateRules(newRules);
226
- }
227
- updateDefaultRules(rule) {
228
- this.store.update({
229
- defaultRules: rule
230
- });
231
- }
232
- updateGlobalRules(rules, updateQueryParams = true) {
233
- return __awaiter(this, void 0, void 0, function* () {
234
- const { filterParameters } = this.store.getValue();
235
- const newRules = Object.assign(Object.assign({}, filterParameters), { rules });
236
- yield this.loadData(newRules, updateQueryParams);
237
- });
238
- }
239
- addRuleFromConfig(config) {
240
- const { filterParameters } = this.store.getValue();
241
- const newRules = Object.assign(Object.assign({}, filterParameters), { rules: [
242
- ...filterParameters.rules,
243
- QBFilterUtils.createQueryModel(config)
244
- ] });
245
- this.store.update({
246
- showQueryBuilder: true
247
- });
248
- this.loadData(newRules, true);
249
- }
250
- updateRules(rules) {
251
- const { filterParameters } = this.store.getValue();
252
- const newRules = {
253
- order: filterParameters.order,
254
- rules: [
255
- {
256
- condition: "and",
257
- rules
258
- }
259
- ]
260
- };
261
- this.loadData(newRules, true);
262
- }
263
- toggleQueryBuilder() {
264
- this.store.update((state) => ({
265
- showQueryBuilder: !state.showQueryBuilder
266
- }));
267
- }
268
- updateListValue(value, key = "id") {
269
- const { filterResult } = this.store.getValue();
270
- if (!filterResult) {
271
- return;
272
- }
273
- this.store.update({
274
- filterResult: Object.assign(Object.assign({}, filterResult), { values: arrayUpsert(filterResult.values, value[key], value) })
275
- });
276
- }
277
- removeListValue(value, key = "id") {
278
- const { filterResult } = this.store.getValue();
279
- if (!filterResult) {
280
- return;
281
- }
282
- this.store.update({
283
- filterResult: Object.assign(Object.assign({}, filterResult), { values: arrayRemove(filterResult.values, value[key]) })
284
- });
285
- }
286
- updateQueryParams(queryParams) {
287
- return __awaiter(this, void 0, void 0, function* () {
288
- if (!this.activatedRoute) {
289
- return;
290
- }
291
- yield this.router.navigate([], {
292
- relativeTo: this.activatedRoute,
293
- queryParams,
294
- queryParamsHandling: "merge"
295
- });
296
- });
297
- }
298
- getParameters(filterParameters) {
299
- const { defaultRules } = this.store.getValue();
300
- const parameters = Object.assign(Object.assign({}, filterParameters), { rules: (filterParameters === null || filterParameters === void 0 ? void 0 : filterParameters.rules) ? [...filterParameters.rules] : [] });
301
- if (defaultRules === null || defaultRules === void 0 ? void 0 : defaultRules.length) {
302
- parameters.rules.push({
303
- condition: "and",
304
- rules: defaultRules
305
- });
306
- }
307
- return parameters;
308
- }
309
- mergeParameters(parameters) {
310
- const { filterParameters } = this.store.getValue();
311
- if (!parameters) {
312
- return filterParameters;
313
- }
314
- return Object.assign(Object.assign(Object.assign({}, filterParameters), parameters), { order: filterParameters.order && !parameters.order
315
- ? undefined
316
- : Object.assign(Object.assign({}, filterParameters.order), parameters.order) });
317
- }
318
- setParameters(parameters, updateQueryParams = true) {
319
- this.store.setParameters(parameters);
320
- if (updateQueryParams) {
321
- this.updateQueryParams(QueryParamsUtils.filterParametersToParamsMap(parameters));
322
- }
323
- }
324
- }
325
- NiceBaseListService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListService, deps: [{ token: i1.NiceBaseListStore }, { token: i2.NiceFilterService }, { token: i3.ActivatedRoute }, { token: i3.Router }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable });
326
- NiceBaseListService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListService });
327
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListService, decorators: [{
328
- type: Injectable
329
- }], ctorParameters: function () { return [{ type: i1.NiceBaseListStore }, { type: i2.NiceFilterService }, { type: i3.ActivatedRoute }, { type: i3.Router }, { type: i0.ApplicationRef }]; } });
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uaWNlLWRhdGEtZmlsdGVyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvYmFzZS1saXN0L3N0b3JlL2Jhc2UtbGlzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQWUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztBQUd0RCxNQUFNLE9BQU8sbUJBQW1CO0lBTzVCLFlBQ2MsS0FBd0IsRUFDeEIsYUFBcUMsRUFDckMsY0FBOEIsRUFDOUIsTUFBYyxFQUNkLE1BQXNCO1FBSnRCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQUNyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsV0FB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QUFnQixDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDcEY7SUFDTCxDQUFDOztnSEF6V1EsbUJBQW1CO29IQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBhcnJheVJlbW92ZSwgYXJyYXlVcGRhdGUsIGFycmF5VXBzZXJ0IH0gZnJvbSBcIkBkYXRvcmFtYS9ha2l0YVwiO1xuaW1wb3J0IHsgRmlsZVV0aWxzIH0gZnJvbSBcIkByZWN1cnN5dmUvbmljZS11aS1raXQudjJcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbCwgRmlsdGVyUGFyYW1ldGVyc01vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9xdWVyeS5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyVXRpbHMgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQgeyBRQkZpbHRlclV0aWxzIH0gZnJvbSBcIi4uLy4uL3F1ZXJ5LWJ1aWxkZXIvdXRpbHMvcWItZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQgeyBRdWVyeVBhcmFtc1V0aWxzIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3F1ZXJ5LXBhcmFtcy51dGlsc1wiO1xuaW1wb3J0IHsgTmljZUZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vcHJvdmlkZXJzL2Jhc2UtZmlsdGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IE5pY2VCYXNlTGlzdFN0b3JlIH0gZnJvbSBcIi4vYmFzZS1saXN0LnN0b3JlXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOaWNlQmFzZUxpc3RTZXJ2aWNlIHtcbiAgICBwdWJsaWMgcXVlcnlQYXJhbXNMb2FkZWQkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByb3RlY3RlZCBkb3dubG9hZEZpbGVOYW1lID0gXCJkYXRhXCI7XG4gICAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlQWxsJCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJvdGVjdGVkIGxvYWRpbmdEYXRhID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHN0b3JlOiBOaWNlQmFzZUxpc3RTdG9yZSxcbiAgICAgICAgcHJvdGVjdGVkIGZpbHRlclNlcnZpY2U6IE5pY2VGaWx0ZXJTZXJ2aWNlPGFueT4sXG4gICAgICAgIHByb3RlY3RlZCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJvdGVjdGVkIGFwcFJlZjogQXBwbGljYXRpb25SZWZcbiAgICApIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5zZXRGaWx0ZXJDb25maWdMb2FkaW5nKHRydWUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29uZmlnID0gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmdldEZpbHRlckNvbmZpZygpLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgdGhpcy5zdG9yZS51cGRhdGUoe1xuICAgICAgICAgICAgICAgIGZpbHRlckNvbmZpZ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0RXJyb3IoZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldEZpbHRlckNvbmZpZ0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0U3RvcmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmUucmVzZXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXREYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHQ6IG51bGxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUFsbCQubmV4dCgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQWxsJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zTG9hZGVkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdG9yZS51cGRhdGUoe1xuICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVuYWJsZUxpc3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKHtcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9hZGluZyhsb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0TG9hZGluZyhsb2FkaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TW9kZShtb2RlOiBcIm5vcm1hbFwiIHwgXCJpbmZpbml0ZS1zY3JvbGxcIik6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7XG4gICAgICAgICAgICBtZXJnZVBhZ2VSZXN1bHRzOiBtb2RlID09PSBcImluZmluaXRlLXNjcm9sbFwiXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkUXVlcnlQYXJhbXMoYXV0b0xvYWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZT8ucXVlcnlQYXJhbXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQWxsJCksXG4gICAgICAgICAgICAgICAgbWFwKChwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogUXVlcnlQYXJhbXNVdGlscy5leHRyYWN0RmlsdGVyUGFyYW1ldGVycyhwYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcGFyYW1zIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcmFtcyB8fCBPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSB0aGlzLnN0b3JlLmdldFZhbHVlKCkuZmlsdGVyUGFyYW1ldGVycztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmaWx0ZXJQYXJhbWV0ZXJzLCBmaWx0ZXJSZXN1bHQgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclV0aWxzLmZpbHRlckNoYW5nZU5lZWRzUmVmcmVzaChmaWx0ZXJQYXJhbWV0ZXJzLCBwYXJhbXMpIHx8XG4gICAgICAgICAgICAgICAgICAgICFmaWx0ZXJSZXN1bHRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9Mb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXRhKHBhcmFtcywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXJzKHBhcmFtcywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtc0xvYWRlZCQubmV4dCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlc2V0QW5kTG9hZERhdGEocGFyYW1ldGVycz86IEZpbHRlclBhcmFtZXRlcnNNb2RlbCwgdXBkYXRlUXVlcnlQYXJhbXM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWREYXRhKHBhcmFtZXRlcnMsIHVwZGF0ZVF1ZXJ5UGFyYW1zLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZERhdGEocGFyYW1ldGVycz86IEZpbHRlclBhcmFtZXRlcnNNb2RlbCwgdXBkYXRlUXVlcnlQYXJhbXM6IGJvb2xlYW4gPSB0cnVlLCByZXNldDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgZGlzYWJsZWQgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclBhcmFtZXRlcnMgPSB0aGlzLm1lcmdlUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nRGF0YSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlcih0aGlzLmdldFBhcmFtZXRlcnMoZmlsdGVyUGFyYW1ldGVycykpLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0UmVzdWx0KHJlc3VsdCwgcmVzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsdGVyUGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1ldGVycyhmaWx0ZXJQYXJhbWV0ZXJzLCBkaXNhYmxlZCA/IGZhbHNlIDogdXBkYXRlUXVlcnlQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldEVycm9yKGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0RhdGEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2hEYXRhKHNlYXJjaDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1ldGVycyB9ID0gdGhpcy5zdG9yZS5nZXRWYWx1ZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWREYXRhKHtcbiAgICAgICAgICAgIC4uLmZpbHRlclBhcmFtZXRlcnMsXG4gICAgICAgICAgICBzZWFyY2hcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWROZXdQYWdlKHN0YXJ0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1ldGVycyB9ID0gdGhpcy5zdG9yZS5nZXRWYWx1ZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWREYXRhKHtcbiAgICAgICAgICAgIC4uLmZpbHRlclBhcmFtZXRlcnMsXG4gICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgIGxlbmd0aFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZE5leHRQYWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtZXRlcnMgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSh7XG4gICAgICAgICAgICAuLi5maWx0ZXJQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgc3RhcnQ6IGZpbHRlclBhcmFtZXRlcnMuc3RhcnQgKyBmaWx0ZXJQYXJhbWV0ZXJzLmxlbmd0aFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVzZXRQYWdpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1ldGVycyB9ID0gdGhpcy5zdG9yZS5nZXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLnN0b3JlLnNldFBhcmFtZXRlcnMoe1xuICAgICAgICAgICAgLi4uZmlsdGVyUGFyYW1ldGVycyxcbiAgICAgICAgICAgIHN0YXJ0OiAwXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0b3JlLnVwZGF0ZSh7XG4gICAgICAgICAgICByZXNldFBhZ2luZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKFxuICAgICAgICB0eXBlOiBzdHJpbmcsXG4gICAgICAgIHBhcmFtZXRlcnM/OiBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwsXG4gICAgICAgIHVwZGF0ZVF1ZXJ5UGFyYW1zOiBib29sZWFuID0gdHJ1ZVxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nRGF0YSA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJQYXJhbWV0ZXJzID0gdGhpcy5tZXJnZVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1ldGVycyhmaWx0ZXJQYXJhbWV0ZXJzLCB1cGRhdGVRdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0RmlsZSh0eXBlLCB0aGlzLmdldFBhcmFtZXRlcnMoZmlsdGVyUGFyYW1ldGVycykpLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgRmlsZVV0aWxzLmRvd25sb2FkRmlsZShgJHt0aGlzLmRvd25sb2FkRmlsZU5hbWV9LiR7dHlwZX1gLCByZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldEVycm9yKGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0RhdGEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmludERhdGEocGFyYW1ldGVycz86IEZpbHRlclBhcmFtZXRlcnNNb2RlbCwgdXBkYXRlUXVlcnlQYXJhbXM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdEYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclBhcmFtZXRlcnMgPSB0aGlzLm1lcmdlUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXJzKGZpbHRlclBhcmFtZXRlcnMsIHVwZGF0ZVF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5nZXRQcmludGFibGVIdG1sKHRoaXMuZ2V0UGFyYW1ldGVycyhmaWx0ZXJQYXJhbWV0ZXJzKSkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICBGaWxlVXRpbHMub3BlblByaW50YWJsZVdpbmRvdyhyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldEVycm9yKGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0RhdGEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSdWxlKGlkOiBzdHJpbmcsIG5ld1J1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1ldGVycyB9ID0gdGhpcy5zdG9yZS5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBydWxlcyA9IGZpbHRlclBhcmFtZXRlcnMucnVsZXM/LlswXTtcbiAgICAgICAgaWYgKCFydWxlcyB8fCBydWxlcy5ydWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUnVsZXMoW25ld1J1bGVdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9sZFJ1bGUgPSBydWxlcy5ydWxlcy5maW5kKChyKSA9PiAociBhcyBRdWVyeVJ1bGVNb2RlbCkuaWQgPT09IGlkKSBhcyBRdWVyeVJ1bGVNb2RlbDtcbiAgICAgICAgbGV0IG5ld1J1bGVzID0gcnVsZXMucnVsZXM7XG4gICAgICAgIGlmIChvbGRSdWxlKSB7XG4gICAgICAgICAgICBpZiAobmV3UnVsZSkge1xuICAgICAgICAgICAgICAgIC8vIEFycmF5IHJlcGxhY2VcbiAgICAgICAgICAgICAgICBuZXdSdWxlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLi4ucnVsZXMucnVsZXMuc2xpY2UoMCwgcnVsZXMucnVsZXMuaW5kZXhPZihvbGRSdWxlKSksXG4gICAgICAgICAgICAgICAgICAgIG5ld1J1bGUsXG4gICAgICAgICAgICAgICAgICAgIC4uLnJ1bGVzLnJ1bGVzLnNsaWNlKHJ1bGVzLnJ1bGVzLmluZGV4T2Yob2xkUnVsZSkgKyAxLCBydWxlcy5ydWxlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3UnVsZXMgPSBydWxlcy5ydWxlcy5maWx0ZXIoKHIpID0+IChyIGFzIFF1ZXJ5UnVsZU1vZGVsKS5pZCAhPT0gaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UnVsZXMgPSBbLi4ubmV3UnVsZXMsIG5ld1J1bGVdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlUnVsZXMobmV3UnVsZXMgYXMgUXVlcnlSdWxlTW9kZWxbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZURlZmF1bHRSdWxlcyhydWxlOiAoUXVlcnlSdWxlTW9kZWwgfCBRdWVyeU1vZGVsKVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKHtcbiAgICAgICAgICAgIGRlZmF1bHRSdWxlczogcnVsZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdXBkYXRlR2xvYmFsUnVsZXMocnVsZXM6IFF1ZXJ5TW9kZWxbXSwgdXBkYXRlUXVlcnlQYXJhbXMgPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1ldGVycyB9ID0gdGhpcy5zdG9yZS5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBuZXdSdWxlczogRmlsdGVyUGFyYW1ldGVyc01vZGVsID0ge1xuICAgICAgICAgICAgLi4uZmlsdGVyUGFyYW1ldGVycyxcbiAgICAgICAgICAgIHJ1bGVzXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YShuZXdSdWxlcywgdXBkYXRlUXVlcnlQYXJhbXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRSdWxlRnJvbUNvbmZpZyhjb25maWc6IEZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtZXRlcnMgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcblxuICAgICAgICBjb25zdCBuZXdSdWxlczogRmlsdGVyUGFyYW1ldGVyc01vZGVsID0ge1xuICAgICAgICAgICAgLi4uZmlsdGVyUGFyYW1ldGVycyxcbiAgICAgICAgICAgIHJ1bGVzOiBbXG4gICAgICAgICAgICAgICAgLi4uKGZpbHRlclBhcmFtZXRlcnMucnVsZXMgYXMgUXVlcnlNb2RlbFtdKSxcbiAgICAgICAgICAgICAgICBRQkZpbHRlclV0aWxzLmNyZWF0ZVF1ZXJ5TW9kZWwoY29uZmlnKVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKHtcbiAgICAgICAgICAgIHNob3dRdWVyeUJ1aWxkZXI6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5sb2FkRGF0YShuZXdSdWxlcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVJ1bGVzKHJ1bGVzOiBRdWVyeVJ1bGVNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1ldGVycyB9ID0gdGhpcy5zdG9yZS5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBuZXdSdWxlczogRmlsdGVyUGFyYW1ldGVyc01vZGVsID0ge1xuICAgICAgICAgICAgb3JkZXI6IGZpbHRlclBhcmFtZXRlcnMub3JkZXIsXG4gICAgICAgICAgICBydWxlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBcImFuZFwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxvYWREYXRhKG5ld1J1bGVzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlUXVlcnlCdWlsZGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JlLnVwZGF0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICBzaG93UXVlcnlCdWlsZGVyOiAhc3RhdGUuc2hvd1F1ZXJ5QnVpbGRlclxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUxpc3RWYWx1ZSh2YWx1ZTogYW55LCBrZXkgPSBcImlkXCIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJSZXN1bHQgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKCFmaWx0ZXJSZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUudXBkYXRlKHtcbiAgICAgICAgICAgIGZpbHRlclJlc3VsdDoge1xuICAgICAgICAgICAgICAgIC4uLmZpbHRlclJlc3VsdCxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGFycmF5VXBzZXJ0KGZpbHRlclJlc3VsdC52YWx1ZXMsIHZhbHVlW2tleV0sIHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlTGlzdFZhbHVlKHZhbHVlOiBhbnksIGtleSA9IFwiaWRcIik6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGZpbHRlclJlc3VsdCB9ID0gdGhpcy5zdG9yZS5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoIWZpbHRlclJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdG9yZS51cGRhdGUoe1xuICAgICAgICAgICAgZmlsdGVyUmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgLi4uZmlsdGVyUmVzdWx0LFxuICAgICAgICAgICAgICAgIHZhbHVlczogYXJyYXlSZW1vdmUoZmlsdGVyUmVzdWx0LnZhbHVlcywgdmFsdWVba2V5XSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2YXRlZFJvdXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyYW1ldGVycyhmaWx0ZXJQYXJhbWV0ZXJzPzogRmlsdGVyUGFyYW1ldGVyc01vZGVsKTogRmlsdGVyUGFyYW1ldGVyc01vZGVsIHtcbiAgICAgICAgY29uc3QgeyBkZWZhdWx0UnVsZXMgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIC4uLmZpbHRlclBhcmFtZXRlcnMsXG4gICAgICAgICAgICBydWxlczogZmlsdGVyUGFyYW1ldGVycz8ucnVsZXMgPyBbLi4uZmlsdGVyUGFyYW1ldGVycy5ydWxlc10gOiBbXVxuICAgICAgICB9O1xuICAgICAgICBpZiAoZGVmYXVsdFJ1bGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMucnVsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiBcImFuZFwiLFxuICAgICAgICAgICAgICAgIHJ1bGVzOiBkZWZhdWx0UnVsZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VQYXJhbWV0ZXJzKHBhcmFtZXRlcnM/OiBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwpOiBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwge1xuICAgICAgICBjb25zdCB7IGZpbHRlclBhcmFtZXRlcnMgfSA9IHRoaXMuc3RvcmUuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUGFyYW1ldGVycztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5maWx0ZXJQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgLi4ucGFyYW1ldGVycyxcbiAgICAgICAgICAgIG9yZGVyOlxuICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtZXRlcnMub3JkZXIgJiYgIXBhcmFtZXRlcnMub3JkZXJcbiAgICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5maWx0ZXJQYXJhbWV0ZXJzLm9yZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucGFyYW1ldGVycy5vcmRlclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnM6IEZpbHRlclBhcmFtZXRlcnNNb2RlbCwgdXBkYXRlUXVlcnlQYXJhbXM6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXJ5UGFyYW1zKFF1ZXJ5UGFyYW1zVXRpbHMuZmlsdGVyUGFyYW1ldGVyc1RvUGFyYW1zTWFwKHBhcmFtZXRlcnMpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -1,78 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { Inject, Injectable, Optional } from "@angular/core";
3
- import { Store, StoreConfig } from "@datorama/akita";
4
- import { DEFAULT_PARAMETERS } from "../base-list.constant";
5
- import * as i0 from "@angular/core";
6
- export const initialBaseListState = {
7
- disabled: false,
8
- mergePageResults: false,
9
- resetPaging: false,
10
- filterConfigLoading: false,
11
- filterResult: null,
12
- filterParameters: {
13
- start: 0,
14
- length: 10,
15
- order: {},
16
- search: "",
17
- rules: [],
18
- data: {}
19
- },
20
- filterConfig: [],
21
- showQueryBuilder: false,
22
- defaultRules: []
23
- };
24
- let NiceBaseListStore = class NiceBaseListStore extends Store {
25
- constructor(parameters) {
26
- super(Object.assign(Object.assign({}, initialBaseListState), { filterParameters: Object.assign(Object.assign({}, initialBaseListState.filterParameters), (parameters !== null && parameters !== void 0 ? parameters : {})) }));
27
- }
28
- setFilterConfigLoading(loading) {
29
- this.update({
30
- filterConfigLoading: loading
31
- });
32
- }
33
- setResult(filterResult, reset = false) {
34
- const { mergePageResults } = this.getValue();
35
- if (mergePageResults && !reset) {
36
- this.update((state) => {
37
- var _a, _b;
38
- return ({
39
- filterResult: {
40
- page: filterResult.page,
41
- total: filterResult.total,
42
- values: state.resetPaging ? filterResult.values : [
43
- ...((_b = (_a = state.filterResult) === null || _a === void 0 ? void 0 : _a.values) !== null && _b !== void 0 ? _b : []),
44
- ...filterResult.values
45
- ]
46
- },
47
- resetPaging: false
48
- });
49
- });
50
- }
51
- else {
52
- this.update({
53
- filterResult
54
- });
55
- }
56
- }
57
- setParameters(filterParameters) {
58
- this.update({
59
- filterParameters
60
- });
61
- }
62
- };
63
- NiceBaseListStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListStore, deps: [{ token: DEFAULT_PARAMETERS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
64
- NiceBaseListStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListStore });
65
- NiceBaseListStore = __decorate([
66
- StoreConfig({ name: "base-list", resettable: true }),
67
- __metadata("design:paramtypes", [Object])
68
- ], NiceBaseListStore);
69
- export { NiceBaseListStore };
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListStore, decorators: [{
71
- type: Injectable
72
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
73
- type: Optional
74
- }, {
75
- type: Inject,
76
- args: [DEFAULT_PARAMETERS]
77
- }] }]; } });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS1kYXRhLWZpbHRlci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtbGlzdC9zdG9yZS9iYXNlLWxpc3Quc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQWUzRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBc0I7SUFDbkQsUUFBUSxFQUFFLEtBQUs7SUFDZixnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsWUFBWSxFQUFFLElBQUk7SUFDbEIsZ0JBQWdCLEVBQUU7UUFDZCxLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sRUFBRSxFQUFFO1FBQ1YsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLEtBQUssRUFBRSxFQUFFO1FBQ1QsSUFBSSxFQUFFLEVBQUU7S0FDWDtJQUNELFlBQVksRUFBRSxFQUFFO0lBQ2hCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsWUFBWSxFQUFFLEVBQUU7Q0FDbkIsQ0FBQztJQUlXLGlCQUFpQixTQUFqQixpQkFBbUUsU0FBUSxLQUFRO0lBQzVGLFlBQW9ELFVBQWlDO1FBQ2pGLEtBQUssQ0FBQyxnQ0FDQyxvQkFBb0IsS0FDdkIsZ0JBQWdCLGtDQUNULG9CQUFvQixDQUFDLGdCQUFnQixHQUNyQyxDQUFDLFVBQVUsYUFBVixVQUFVLGNBQVYsVUFBVSxHQUFJLEVBQUUsQ0FBQyxJQUV2QixDQUFDLENBQUM7SUFDWixDQUFDO0lBRU0sc0JBQXNCLENBQUMsT0FBZ0I7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNSLG1CQUFtQixFQUFFLE9BQU87U0FDMUIsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVNLFNBQVMsQ0FBQyxZQUErQixFQUFFLFFBQWlCLEtBQUs7UUFDcEUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdDLElBQUksZ0JBQWdCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFOztnQkFBQyxPQUFBLENBQUM7b0JBQ3BCLFlBQVksRUFBRTt3QkFDVixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7d0JBQ3ZCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSzt3QkFDekIsTUFBTSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUM5QyxHQUFHLENBQUMsTUFBQSxNQUFBLEtBQUssQ0FBQyxZQUFZLDBDQUFFLE1BQU0sbUNBQUksRUFBRSxDQUFDOzRCQUNyQyxHQUFHLFlBQVksQ0FBQyxNQUFNO3lCQUN6QjtxQkFDSjtvQkFDRCxXQUFXLEVBQUUsS0FBSztpQkFDckIsQ0FBTSxDQUFBO2FBQUEsQ0FBQyxDQUFDO1NBQ1o7YUFBTTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ1IsWUFBWTthQUNWLENBQUMsQ0FBQztTQUNYO0lBQ0wsQ0FBQztJQUVNLGFBQWEsQ0FBQyxnQkFBdUM7UUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNSLGdCQUFnQjtTQUNkLENBQUMsQ0FBQztJQUNaLENBQUM7Q0FDSixDQUFBOzhHQTNDWSxpQkFBaUIsa0JBQ00sa0JBQWtCO2tIQUR6QyxpQkFBaUI7QUFBakIsaUJBQWlCO0lBRDdCLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDOztHQUN4QyxpQkFBaUIsQ0EyQzdCO1NBM0NZLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUY3QixVQUFVOzswQkFHTSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3RvcmUsIFN0b3JlQ29uZmlnIH0gZnJvbSBcIkBkYXRvcmFtYS9ha2l0YVwiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsLCBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwsIEZpbHRlclJlc3VsdE1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9xdWVyeS5tb2RlbFwiO1xuaW1wb3J0IHsgREVGQVVMVF9QQVJBTUVURVJTIH0gZnJvbSBcIi4uL2Jhc2UtbGlzdC5jb25zdGFudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5pY2VCYXNlTGlzdFN0YXRlIHtcbiAgICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBtZXJnZVBhZ2VSZXN1bHRzOiBib29sZWFuO1xuICAgIHJlc2V0UGFnaW5nOiBib29sZWFuO1xuICAgIGZpbHRlckNvbmZpZ0xvYWRpbmc6IGJvb2xlYW47XG4gICAgZmlsdGVyUmVzdWx0OiBGaWx0ZXJSZXN1bHRNb2RlbCB8IG51bGw7XG4gICAgZmlsdGVyUGFyYW1ldGVyczogRmlsdGVyUGFyYW1ldGVyc01vZGVsO1xuICAgIGZpbHRlckNvbmZpZzogRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsW107XG4gICAgc2hvd1F1ZXJ5QnVpbGRlcjogYm9vbGVhbjtcbiAgICBkZWZhdWx0UnVsZXM6IChRdWVyeVJ1bGVNb2RlbCB8IFF1ZXJ5TW9kZWwpW107XG59XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsQmFzZUxpc3RTdGF0ZTogTmljZUJhc2VMaXN0U3RhdGUgPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIG1lcmdlUGFnZVJlc3VsdHM6IGZhbHNlLFxuICAgIHJlc2V0UGFnaW5nOiBmYWxzZSxcbiAgICBmaWx0ZXJDb25maWdMb2FkaW5nOiBmYWxzZSxcbiAgICBmaWx0ZXJSZXN1bHQ6IG51bGwsXG4gICAgZmlsdGVyUGFyYW1ldGVyczoge1xuICAgICAgICBzdGFydDogMCxcbiAgICAgICAgbGVuZ3RoOiAxMCxcbiAgICAgICAgb3JkZXI6IHt9LFxuICAgICAgICBzZWFyY2g6IFwiXCIsXG4gICAgICAgIHJ1bGVzOiBbXSxcbiAgICAgICAgZGF0YToge31cbiAgICB9LFxuICAgIGZpbHRlckNvbmZpZzogW10sXG4gICAgc2hvd1F1ZXJ5QnVpbGRlcjogZmFsc2UsXG4gICAgZGVmYXVsdFJ1bGVzOiBbXVxufTtcblxuQEluamVjdGFibGUoKVxuQFN0b3JlQ29uZmlnKHsgbmFtZTogXCJiYXNlLWxpc3RcIiwgcmVzZXR0YWJsZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5pY2VCYXNlTGlzdFN0b3JlPFQgZXh0ZW5kcyBOaWNlQmFzZUxpc3RTdGF0ZSA9IE5pY2VCYXNlTGlzdFN0YXRlPiBleHRlbmRzIFN0b3JlPFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KERFRkFVTFRfUEFSQU1FVEVSUykgcGFyYW1ldGVyczogRmlsdGVyUGFyYW1ldGVyc01vZGVsKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIC4uLmluaXRpYWxCYXNlTGlzdFN0YXRlLFxuICAgICAgICAgICAgZmlsdGVyUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIC4uLmluaXRpYWxCYXNlTGlzdFN0YXRlLmZpbHRlclBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgLi4uKHBhcmFtZXRlcnMgPz8ge30pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gYXMgVCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZpbHRlckNvbmZpZ0xvYWRpbmcobG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZSh7XG4gICAgICAgICAgICBmaWx0ZXJDb25maWdMb2FkaW5nOiBsb2FkaW5nXG4gICAgICAgIH0gYXMgVCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFJlc3VsdChmaWx0ZXJSZXN1bHQ6IEZpbHRlclJlc3VsdE1vZGVsLCByZXNldDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbWVyZ2VQYWdlUmVzdWx0cyB9ID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAobWVyZ2VQYWdlUmVzdWx0cyAmJiAhcmVzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJSZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogZmlsdGVyUmVzdWx0LnBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiBmaWx0ZXJSZXN1bHQudG90YWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogc3RhdGUucmVzZXRQYWdpbmcgPyBmaWx0ZXJSZXN1bHQudmFsdWVzIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHN0YXRlLmZpbHRlclJlc3VsdD8udmFsdWVzID8/IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpbHRlclJlc3VsdC52YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzZXRQYWdpbmc6IGZhbHNlXG4gICAgICAgICAgICB9KSBhcyBUKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJSZXN1bHRcbiAgICAgICAgICAgIH0gYXMgVCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGFyYW1ldGVycyhmaWx0ZXJQYXJhbWV0ZXJzOiBGaWx0ZXJQYXJhbWV0ZXJzTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGUoe1xuICAgICAgICAgICAgZmlsdGVyUGFyYW1ldGVyc1xuICAgICAgICB9IGFzIFQpO1xuICAgIH1cbn1cbiJdfQ==