ng-firebase-table-kxp 1.2.6 → 1.2.8
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/README.md +602 -602
- package/esm2020/lib/components/table/table.component.mjs +1559 -1557
- package/esm2020/lib/components/table-tabs/table-tabs.component.mjs +129 -129
- package/esm2020/lib/components/table-tooltip/table-tooltip.component.mjs +49 -49
- package/esm2020/lib/ng-firebase-table-kxp.component.mjs +14 -14
- package/esm2020/lib/ng-firebase-table-kxp.module.mjs +102 -102
- package/esm2020/lib/ng-firebase-table-kxp.service.mjs +14 -14
- package/esm2020/lib/services/filter.service.mjs +419 -416
- package/esm2020/lib/services/pagination.service.mjs +115 -115
- package/esm2020/lib/services/table.service.mjs +1140 -1140
- package/esm2020/lib/services/tooltip.service.mjs +141 -141
- package/esm2020/lib/types/Table.mjs +9 -9
- package/esm2020/lib/utils/table.utils.mjs +75 -75
- package/esm2020/ng-firebase-table-kxp.mjs +4 -4
- package/esm2020/public-api.mjs +22 -22
- package/fesm2015/ng-firebase-table-kxp.mjs +3966 -3960
- package/fesm2015/ng-firebase-table-kxp.mjs.map +1 -1
- package/fesm2020/ng-firebase-table-kxp.mjs +3668 -3663
- package/fesm2020/ng-firebase-table-kxp.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/components/table/table.component.d.ts +135 -135
- package/lib/components/table-tabs/table-tabs.component.d.ts +34 -34
- package/lib/components/table-tooltip/table-tooltip.component.d.ts +18 -18
- package/lib/ng-firebase-table-kxp.component.d.ts +5 -5
- package/lib/ng-firebase-table-kxp.module.d.ts +24 -24
- package/lib/ng-firebase-table-kxp.service.d.ts +6 -6
- package/lib/services/filter.service.d.ts +88 -88
- package/lib/services/pagination.service.d.ts +34 -34
- package/lib/services/table.service.d.ts +80 -80
- package/lib/services/tooltip.service.d.ts +73 -73
- package/lib/types/Table.d.ts +162 -162
- package/lib/utils/table.utils.d.ts +25 -25
- package/package.json +1 -1
- package/public-api.d.ts +12 -12
|
@@ -1,1557 +1,1559 @@
|
|
|
1
|
-
import { TABLE_DEFAULTS, } from '../../types/Table';
|
|
2
|
-
import { Component, Input, ViewChild, ChangeDetectionStrategy, } from '@angular/core';
|
|
3
|
-
import { MatPaginator } from '@angular/material/paginator';
|
|
4
|
-
import { MatSort } from '@angular/material/sort';
|
|
5
|
-
import { MatTableDataSource } from '@angular/material/table';
|
|
6
|
-
import { getDisplayValue, getNestedValue, isString, trackByProperty, getImageKey, } from '../../utils/table.utils';
|
|
7
|
-
import { debounceTime, firstValueFrom, Subject, takeUntil, BehaviorSubject, } from 'rxjs';
|
|
8
|
-
import { FormControl, FormArray } from '@angular/forms';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/router";
|
|
11
|
-
import * as i2 from "../../services/table.service";
|
|
12
|
-
import * as i3 from "../../services/filter.service";
|
|
13
|
-
import * as i4 from "../../services/tooltip.service";
|
|
14
|
-
import * as i5 from "../../services/pagination.service";
|
|
15
|
-
import * as i6 from "@angular/fire/compat/firestore";
|
|
16
|
-
import * as i7 from "@angular/common";
|
|
17
|
-
import * as i8 from "@angular/forms";
|
|
18
|
-
import * as i9 from "@angular/material/table";
|
|
19
|
-
import * as i10 from "@angular/material/paginator";
|
|
20
|
-
import * as i11 from "@angular/material/sort";
|
|
21
|
-
import * as i12 from "@angular/material/form-field";
|
|
22
|
-
import * as i13 from "@angular/material/input";
|
|
23
|
-
import * as i14 from "@angular/material/core";
|
|
24
|
-
import * as i15 from "@angular/material/select";
|
|
25
|
-
import * as i16 from "@angular/material/tooltip";
|
|
26
|
-
import * as i17 from "@angular/material/progress-spinner";
|
|
27
|
-
import * as i18 from "@angular/material/icon";
|
|
28
|
-
import * as i19 from "../table-tabs/table-tabs.component";
|
|
29
|
-
import * as i20 from "../table-tooltip/table-tooltip.component";
|
|
30
|
-
function TableComponent_div_0_div_2_button_7_i_1_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
-
i0.ɵɵelement(0, "i");
|
|
32
|
-
} if (rf & 2) {
|
|
33
|
-
const ctx_r16 = i0.ɵɵnextContext(4);
|
|
34
|
-
i0.ɵɵclassMap(ctx_r16.data.actionButton.icon);
|
|
35
|
-
} }
|
|
36
|
-
function TableComponent_div_0_div_2_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
-
const _r18 = i0.ɵɵgetCurrentView();
|
|
38
|
-
i0.ɵɵelementStart(0, "button", 30);
|
|
39
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r17.data.actionButton.method ? ctx_r17.data.actionButton.method($event) : null); });
|
|
40
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_button_7_i_1_Template, 1, 2, "i", 31);
|
|
41
|
-
i0.ɵɵtext(2);
|
|
42
|
-
i0.ɵɵelementEnd();
|
|
43
|
-
} if (rf & 2) {
|
|
44
|
-
const ctx_r11 = i0.ɵɵnextContext(3);
|
|
45
|
-
i0.ɵɵproperty("ngClass", ctx_r11.getActionButtonClass())("routerLink", ctx_r11.data.actionButton.routerLink);
|
|
46
|
-
i0.ɵɵadvance(1);
|
|
47
|
-
i0.ɵɵproperty("ngIf", ctx_r11.data.actionButton.icon);
|
|
48
|
-
i0.ɵɵadvance(1);
|
|
49
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r11.data.actionButton.label, " ");
|
|
50
|
-
} }
|
|
51
|
-
function TableComponent_div_0_div_2_div_8_mat_option_9_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
-
i0.ɵɵelementStart(0, "mat-option", 39)(1, "div", 21);
|
|
53
|
-
i0.ɵɵelement(2, "i", 36);
|
|
54
|
-
i0.ɵɵelementStart(3, "span");
|
|
55
|
-
i0.ɵɵtext(4);
|
|
56
|
-
i0.ɵɵelementEnd()()();
|
|
57
|
-
} if (rf & 2) {
|
|
58
|
-
const item_r20 = ctx.$implicit;
|
|
59
|
-
i0.ɵɵproperty("value", item_r20);
|
|
60
|
-
i0.ɵɵadvance(4);
|
|
61
|
-
i0.ɵɵtextInterpolate(item_r20.title);
|
|
62
|
-
} }
|
|
63
|
-
function TableComponent_div_0_div_2_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
64
|
-
i0.ɵɵelementStart(0, "div", 32)(1, "div", 33)(2, "div", 34)(3, "mat-form-field", 35)(4, "mat-label", 21);
|
|
65
|
-
i0.ɵɵelement(5, "i", 36);
|
|
66
|
-
i0.ɵɵelementStart(6, "span");
|
|
67
|
-
i0.ɵɵtext(7, "Ordenar por");
|
|
68
|
-
i0.ɵɵelementEnd()();
|
|
69
|
-
i0.ɵɵelementStart(8, "mat-select", 37);
|
|
70
|
-
i0.ɵɵtemplate(9, TableComponent_div_0_div_2_div_8_mat_option_9_Template, 5, 2, "mat-option", 38);
|
|
71
|
-
i0.ɵɵelementEnd()()()()();
|
|
72
|
-
} if (rf & 2) {
|
|
73
|
-
const ctx_r12 = i0.ɵɵnextContext(3);
|
|
74
|
-
i0.ɵɵadvance(8);
|
|
75
|
-
i0.ɵɵproperty("formControl", ctx_r12.selectSort);
|
|
76
|
-
i0.ɵɵadvance(1);
|
|
77
|
-
i0.ɵɵproperty("ngForOf", ctx_r12.sortableDropdownItems);
|
|
78
|
-
} }
|
|
79
|
-
function TableComponent_div_0_div_2_div_9_div_1_div_1_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
-
i0.ɵɵelementStart(0, "mat-option", 39)(1, "div", 21);
|
|
81
|
-
i0.ɵɵelement(2, "i", 47);
|
|
82
|
-
i0.ɵɵelementStart(3, "span");
|
|
83
|
-
i0.ɵɵtext(4);
|
|
84
|
-
i0.ɵɵelementEnd()()();
|
|
85
|
-
} if (rf & 2) {
|
|
86
|
-
const item_r30 = ctx.$implicit;
|
|
87
|
-
i0.ɵɵproperty("value", item_r30);
|
|
88
|
-
i0.ɵɵadvance(2);
|
|
89
|
-
i0.ɵɵclassMap(item_r30.icon || "fa fa-filter");
|
|
90
|
-
i0.ɵɵadvance(2);
|
|
91
|
-
i0.ɵɵtextInterpolate(item_r30.title);
|
|
92
|
-
} }
|
|
93
|
-
function TableComponent_div_0_div_2_div_9_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
94
|
-
const _r32 = i0.ɵɵgetCurrentView();
|
|
95
|
-
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
|
|
96
|
-
i0.ɵɵtext(3, "Tipo de filtro");
|
|
97
|
-
i0.ɵɵelementEnd();
|
|
98
|
-
i0.ɵɵelementStart(4, "mat-select", 46);
|
|
99
|
-
i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_2_div_9_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r32); const ctx_r31 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r31.onSelectFilterChange()); });
|
|
100
|
-
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option", 38);
|
|
101
|
-
i0.ɵɵelementEnd()()();
|
|
102
|
-
} if (rf & 2) {
|
|
103
|
-
const
|
|
104
|
-
i0.ɵɵ
|
|
105
|
-
i0.ɵɵ
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
i0.ɵɵ
|
|
111
|
-
i0.ɵɵ
|
|
112
|
-
i0.ɵɵ
|
|
113
|
-
i0.ɵɵ
|
|
114
|
-
i0.ɵɵ
|
|
115
|
-
i0.ɵɵ
|
|
116
|
-
i0.ɵɵ
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
i0.ɵɵ
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
i0.ɵɵ
|
|
126
|
-
i0.ɵɵ
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
i0.ɵɵ
|
|
131
|
-
i0.ɵɵ
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
i0.ɵɵ
|
|
136
|
-
i0.ɵɵ
|
|
137
|
-
i0.ɵɵ
|
|
138
|
-
i0.ɵɵ
|
|
139
|
-
i0.ɵɵ
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
let
|
|
144
|
-
|
|
145
|
-
i0.ɵɵ
|
|
146
|
-
i0.ɵɵ
|
|
147
|
-
i0.ɵɵ
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
i0.ɵɵ
|
|
153
|
-
i0.ɵɵ
|
|
154
|
-
i0.ɵɵ
|
|
155
|
-
i0.ɵɵ
|
|
156
|
-
i0.ɵɵ
|
|
157
|
-
i0.ɵɵ
|
|
158
|
-
i0.ɵɵ
|
|
159
|
-
i0.ɵɵ
|
|
160
|
-
i0.ɵɵ
|
|
161
|
-
i0.ɵɵ
|
|
162
|
-
i0.ɵɵ
|
|
163
|
-
i0.ɵɵ
|
|
164
|
-
i0.ɵɵ
|
|
165
|
-
i0.ɵɵ
|
|
166
|
-
i0.ɵɵ
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
i0.ɵɵ
|
|
171
|
-
i0.ɵɵ
|
|
172
|
-
i0.ɵɵ
|
|
173
|
-
i0.ɵɵ
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
i0.ɵɵ
|
|
178
|
-
i0.ɵɵtemplate(
|
|
179
|
-
i0.ɵɵtemplate(
|
|
180
|
-
i0.ɵɵtemplate(
|
|
181
|
-
i0.ɵɵtemplate(
|
|
182
|
-
i0.ɵɵ
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
let
|
|
188
|
-
let
|
|
189
|
-
|
|
190
|
-
i0.ɵɵ
|
|
191
|
-
i0.ɵɵ
|
|
192
|
-
i0.ɵɵ
|
|
193
|
-
i0.ɵɵ
|
|
194
|
-
i0.ɵɵ
|
|
195
|
-
i0.ɵɵ
|
|
196
|
-
i0.ɵɵ
|
|
197
|
-
i0.ɵɵ
|
|
198
|
-
i0.ɵɵ
|
|
199
|
-
i0.ɵɵ
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
i0.ɵɵ
|
|
204
|
-
i0.ɵɵ
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
i0.ɵɵ
|
|
208
|
-
i0.ɵɵ
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
i0.ɵɵ
|
|
213
|
-
i0.ɵɵ
|
|
214
|
-
i0.ɵɵ
|
|
215
|
-
i0.ɵɵ
|
|
216
|
-
i0.ɵɵ
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
i0.ɵɵ
|
|
221
|
-
i0.ɵɵ
|
|
222
|
-
i0.ɵɵ
|
|
223
|
-
i0.ɵɵ
|
|
224
|
-
i0.ɵɵ
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
i0.ɵɵ
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
i0.ɵɵ
|
|
232
|
-
i0.ɵɵ
|
|
233
|
-
i0.ɵɵ
|
|
234
|
-
i0.ɵɵ
|
|
235
|
-
i0.ɵɵ
|
|
236
|
-
i0.ɵɵ
|
|
237
|
-
i0.ɵɵ
|
|
238
|
-
i0.ɵɵ
|
|
239
|
-
i0.ɵɵ
|
|
240
|
-
i0.ɵɵ
|
|
241
|
-
i0.ɵɵ
|
|
242
|
-
i0.ɵɵ
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
i0.ɵɵ
|
|
246
|
-
i0.ɵɵ
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
i0.ɵɵ
|
|
251
|
-
i0.ɵɵ
|
|
252
|
-
i0.ɵɵ
|
|
253
|
-
i0.ɵɵ
|
|
254
|
-
i0.ɵɵ
|
|
255
|
-
i0.ɵɵ
|
|
256
|
-
i0.ɵɵ
|
|
257
|
-
i0.ɵɵtemplate(
|
|
258
|
-
i0.ɵɵ
|
|
259
|
-
i0.ɵɵ
|
|
260
|
-
i0.ɵɵtemplate(
|
|
261
|
-
i0.ɵɵ
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
i0.ɵɵ
|
|
265
|
-
i0.ɵɵ
|
|
266
|
-
i0.ɵɵ
|
|
267
|
-
i0.ɵɵ
|
|
268
|
-
i0.ɵɵ
|
|
269
|
-
i0.ɵɵ
|
|
270
|
-
i0.ɵɵ
|
|
271
|
-
i0.ɵɵ
|
|
272
|
-
i0.ɵɵ
|
|
273
|
-
i0.ɵɵ
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
i0.ɵɵ
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
i0.ɵɵ
|
|
284
|
-
i0.ɵɵ
|
|
285
|
-
i0.ɵɵ
|
|
286
|
-
i0.ɵɵ
|
|
287
|
-
i0.ɵɵ
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
i0.ɵɵ
|
|
291
|
-
i0.ɵɵ
|
|
292
|
-
i0.ɵɵ
|
|
293
|
-
i0.ɵɵ
|
|
294
|
-
i0.ɵɵ
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
i0.ɵɵ
|
|
300
|
-
i0.ɵɵ
|
|
301
|
-
i0.ɵɵ
|
|
302
|
-
i0.ɵɵ
|
|
303
|
-
i0.ɵɵ
|
|
304
|
-
i0.ɵɵ
|
|
305
|
-
i0.ɵɵ
|
|
306
|
-
i0.ɵɵ
|
|
307
|
-
i0.ɵɵ
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
i0.ɵɵ
|
|
312
|
-
i0.ɵɵ
|
|
313
|
-
i0.ɵɵ
|
|
314
|
-
i0.ɵɵ
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
i0.ɵɵ
|
|
319
|
-
i0.ɵɵ
|
|
320
|
-
i0.ɵɵ
|
|
321
|
-
i0.ɵɵ
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
i0.ɵɵ
|
|
327
|
-
i0.ɵɵ
|
|
328
|
-
i0.ɵɵ
|
|
329
|
-
i0.ɵɵ
|
|
330
|
-
i0.ɵɵ
|
|
331
|
-
i0.ɵɵ
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
i0.ɵɵ
|
|
335
|
-
i0.ɵɵ
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
i0.ɵɵ
|
|
341
|
-
i0.ɵɵelementStart(
|
|
342
|
-
i0.ɵɵ
|
|
343
|
-
i0.ɵɵ
|
|
344
|
-
i0.ɵɵ
|
|
345
|
-
i0.ɵɵ
|
|
346
|
-
i0.ɵɵ
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
i0.ɵɵ
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
i0.ɵɵ
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
i0.ɵɵ
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
i0.ɵɵ
|
|
367
|
-
i0.ɵɵ
|
|
368
|
-
i0.ɵɵ
|
|
369
|
-
i0.ɵɵ
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
i0.ɵɵadvance(
|
|
377
|
-
i0.ɵɵ
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
i0.ɵɵ
|
|
383
|
-
i0.ɵɵelementStart(
|
|
384
|
-
i0.ɵɵ
|
|
385
|
-
i0.ɵɵ
|
|
386
|
-
i0.ɵɵ
|
|
387
|
-
i0.ɵɵ
|
|
388
|
-
i0.ɵɵ
|
|
389
|
-
i0.ɵɵ
|
|
390
|
-
i0.ɵɵ
|
|
391
|
-
i0.ɵɵelementStart(
|
|
392
|
-
i0.ɵɵ
|
|
393
|
-
i0.ɵɵ
|
|
394
|
-
i0.ɵɵ
|
|
395
|
-
i0.ɵɵ
|
|
396
|
-
i0.ɵɵ
|
|
397
|
-
} }
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
i0.ɵɵ
|
|
403
|
-
i0.ɵɵ
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
i0.ɵɵ
|
|
409
|
-
i0.ɵɵtemplate(
|
|
410
|
-
i0.ɵɵtemplate(
|
|
411
|
-
i0.ɵɵtemplate(
|
|
412
|
-
i0.ɵɵ
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
let
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
i0.ɵɵproperty("
|
|
422
|
-
i0.ɵɵadvance(1);
|
|
423
|
-
i0.ɵɵproperty("ngIf",
|
|
424
|
-
i0.ɵɵadvance(1);
|
|
425
|
-
i0.ɵɵproperty("ngIf", ((
|
|
426
|
-
i0.ɵɵadvance(1);
|
|
427
|
-
i0.ɵɵproperty("ngIf", ((
|
|
428
|
-
i0.ɵɵadvance(1);
|
|
429
|
-
i0.ɵɵproperty("ngIf",
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
i0.ɵɵ
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
i0.ɵɵ
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
i0.ɵɵ
|
|
445
|
-
i0.ɵɵ
|
|
446
|
-
i0.ɵɵ
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
i0.ɵɵ
|
|
453
|
-
i0.ɵɵ
|
|
454
|
-
i0.ɵɵ
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
i0.ɵɵ
|
|
464
|
-
i0.ɵɵ
|
|
465
|
-
i0.ɵɵ
|
|
466
|
-
i0.ɵɵ
|
|
467
|
-
i0.ɵɵ
|
|
468
|
-
i0.ɵɵ
|
|
469
|
-
i0.ɵɵ
|
|
470
|
-
i0.ɵɵ
|
|
471
|
-
i0.ɵɵ
|
|
472
|
-
i0.ɵɵelementEnd();
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
i0.ɵɵ
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
i0.ɵɵelementStart(
|
|
482
|
-
i0.ɵɵtemplate(
|
|
483
|
-
i0.ɵɵ
|
|
484
|
-
i0.ɵɵ
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
i0.ɵɵ
|
|
489
|
-
i0.ɵɵadvance(
|
|
490
|
-
i0.ɵɵproperty("ngIf",
|
|
491
|
-
i0.ɵɵadvance(
|
|
492
|
-
i0.ɵɵproperty("ngIf",
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
i0.ɵɵelementStart(
|
|
498
|
-
i0.ɵɵ
|
|
499
|
-
i0.ɵɵ
|
|
500
|
-
i0.ɵɵ
|
|
501
|
-
i0.ɵɵelementEnd()();
|
|
502
|
-
i0.ɵɵtemplate(
|
|
503
|
-
i0.ɵɵ
|
|
504
|
-
i0.ɵɵ
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
i0.ɵɵadvance(
|
|
510
|
-
i0.ɵɵproperty("ngIf", ctx_r2.
|
|
511
|
-
i0.ɵɵadvance(1);
|
|
512
|
-
i0.ɵɵproperty("ngIf", ctx_r2.
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
i0.ɵɵ
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
i0.ɵɵ
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
i0.ɵɵ
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
i0.ɵɵ
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
i0.ɵɵ
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
i0.ɵɵ
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
const
|
|
549
|
-
|
|
550
|
-
i0.ɵɵ
|
|
551
|
-
i0.ɵɵ
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
i0.ɵɵ
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
const
|
|
561
|
-
|
|
562
|
-
i0.ɵɵ
|
|
563
|
-
i0.ɵɵ
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
i0.ɵɵ
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
const
|
|
573
|
-
i0.ɵɵ
|
|
574
|
-
i0.ɵɵ
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
i0.ɵɵ
|
|
580
|
-
i0.ɵɵtemplate(
|
|
581
|
-
i0.ɵɵ
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
i0.ɵɵ
|
|
586
|
-
i0.ɵɵ
|
|
587
|
-
i0.ɵɵadvance(1);
|
|
588
|
-
i0.ɵɵproperty("ngIf",
|
|
589
|
-
i0.ɵɵadvance(1);
|
|
590
|
-
i0.ɵɵproperty("ngIf",
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
i0.ɵɵ
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
const
|
|
600
|
-
|
|
601
|
-
i0.ɵɵ
|
|
602
|
-
i0.ɵɵ
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
i0.ɵɵ
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
const
|
|
612
|
-
|
|
613
|
-
i0.ɵɵ
|
|
614
|
-
i0.ɵɵ
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
i0.ɵɵ
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
const
|
|
624
|
-
i0.ɵɵ
|
|
625
|
-
i0.ɵɵ
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
i0.ɵɵtemplate(
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
i0.ɵɵ
|
|
635
|
-
i0.ɵɵ
|
|
636
|
-
i0.ɵɵproperty("ngIf",
|
|
637
|
-
i0.ɵɵadvance(1);
|
|
638
|
-
i0.ɵɵproperty("ngIf",
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
i0.ɵɵ
|
|
644
|
-
i0.ɵɵ
|
|
645
|
-
i0.ɵɵtemplate(
|
|
646
|
-
i0.ɵɵ
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
const
|
|
651
|
-
i0.ɵɵ
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
i0.ɵɵ
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
i0.ɵɵ
|
|
663
|
-
i0.ɵɵelementStart(
|
|
664
|
-
i0.ɵɵ
|
|
665
|
-
i0.ɵɵ
|
|
666
|
-
}
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
const
|
|
670
|
-
i0.ɵɵ
|
|
671
|
-
i0.ɵɵ
|
|
672
|
-
i0.ɵɵadvance(1);
|
|
673
|
-
i0.ɵɵ
|
|
674
|
-
i0.ɵɵ
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
i0.ɵɵ
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
i0.ɵɵ
|
|
685
|
-
i0.ɵɵelementStart(
|
|
686
|
-
i0.ɵɵ
|
|
687
|
-
i0.ɵɵ
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
const
|
|
692
|
-
i0.ɵɵ
|
|
693
|
-
i0.ɵɵ
|
|
694
|
-
i0.ɵɵadvance(1);
|
|
695
|
-
i0.ɵɵ
|
|
696
|
-
i0.ɵɵ
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
i0.ɵɵ
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
i0.ɵɵ
|
|
706
|
-
i0.ɵɵ
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
i0.ɵɵ
|
|
713
|
-
i0.ɵɵ
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
i0.ɵɵ
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
i0.ɵɵ
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
i0.ɵɵ
|
|
734
|
-
i0.ɵɵ
|
|
735
|
-
i0.ɵɵtemplate(
|
|
736
|
-
i0.ɵɵtemplate(
|
|
737
|
-
i0.ɵɵ
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
i0.ɵɵ
|
|
742
|
-
i0.ɵɵadvance(1);
|
|
743
|
-
i0.ɵɵproperty("ngIf",
|
|
744
|
-
i0.ɵɵadvance(1);
|
|
745
|
-
i0.ɵɵproperty("ngIf",
|
|
746
|
-
i0.ɵɵadvance(1);
|
|
747
|
-
i0.ɵɵproperty("ngIf",
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
i0.ɵɵ
|
|
753
|
-
i0.ɵɵtemplate(
|
|
754
|
-
i0.ɵɵ
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
i0.ɵɵ
|
|
759
|
-
i0.ɵɵ
|
|
760
|
-
i0.ɵɵadvance(1);
|
|
761
|
-
i0.ɵɵproperty("ngIf",
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
i0.ɵɵ
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
i0.ɵɵ
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
i0.ɵɵ
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
i0.ɵɵ
|
|
792
|
-
i0.ɵɵ
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
i0.ɵɵ
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
i0.ɵɵ
|
|
808
|
-
i0.ɵɵ
|
|
809
|
-
i0.ɵɵ
|
|
810
|
-
i0.ɵɵtemplate(
|
|
811
|
-
i0.ɵɵelementStart(
|
|
812
|
-
i0.ɵɵtemplate(
|
|
813
|
-
i0.ɵɵ
|
|
814
|
-
i0.ɵɵtemplate(
|
|
815
|
-
i0.ɵɵtemplate(
|
|
816
|
-
i0.ɵɵ
|
|
817
|
-
i0.ɵɵtemplate(
|
|
818
|
-
i0.ɵɵ
|
|
819
|
-
i0.ɵɵ
|
|
820
|
-
i0.ɵɵ
|
|
821
|
-
i0.ɵɵ
|
|
822
|
-
i0.ɵɵ
|
|
823
|
-
i0.ɵɵelementEnd();
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
i0.ɵɵadvance(
|
|
829
|
-
i0.ɵɵproperty("ngIf", ctx_r0.data.pagination ===
|
|
830
|
-
i0.ɵɵadvance(
|
|
831
|
-
i0.ɵɵproperty("ngIf", ctx_r0.data.
|
|
832
|
-
i0.ɵɵadvance(2);
|
|
833
|
-
i0.ɵɵproperty("
|
|
834
|
-
i0.ɵɵadvance(2);
|
|
835
|
-
i0.ɵɵproperty("
|
|
836
|
-
i0.ɵɵadvance(
|
|
837
|
-
i0.ɵɵproperty("
|
|
838
|
-
i0.ɵɵadvance(1);
|
|
839
|
-
i0.ɵɵproperty("
|
|
840
|
-
i0.ɵɵadvance(
|
|
841
|
-
i0.ɵɵproperty("
|
|
842
|
-
i0.ɵɵadvance(
|
|
843
|
-
i0.ɵɵproperty("
|
|
844
|
-
i0.ɵɵadvance(
|
|
845
|
-
i0.ɵɵproperty("
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
this.
|
|
853
|
-
this.
|
|
854
|
-
this.
|
|
855
|
-
this.
|
|
856
|
-
this.
|
|
857
|
-
this.
|
|
858
|
-
this.
|
|
859
|
-
this.
|
|
860
|
-
this.
|
|
861
|
-
this.
|
|
862
|
-
this.
|
|
863
|
-
this.
|
|
864
|
-
this.
|
|
865
|
-
this.
|
|
866
|
-
this.
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
this.
|
|
873
|
-
this.
|
|
874
|
-
this.
|
|
875
|
-
this.
|
|
876
|
-
this.
|
|
877
|
-
this.
|
|
878
|
-
this.
|
|
879
|
-
this.
|
|
880
|
-
this.
|
|
881
|
-
this.
|
|
882
|
-
this.
|
|
883
|
-
this.
|
|
884
|
-
|
|
885
|
-
this.
|
|
886
|
-
|
|
887
|
-
this.
|
|
888
|
-
this.
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
'hide-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
const
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
this.
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
this.
|
|
959
|
-
this.
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
this.
|
|
994
|
-
|
|
995
|
-
this.
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
this.
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
const
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
this.destroy
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
if (this.data
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
this.
|
|
1096
|
-
this.
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
this.
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
this.
|
|
1122
|
-
this.
|
|
1123
|
-
this.
|
|
1124
|
-
this.
|
|
1125
|
-
this.
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
this.
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
this.
|
|
1167
|
-
this.dataSource
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
this.dataSource.sort.
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
.
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
.
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
await this.
|
|
1238
|
-
|
|
1239
|
-
this.
|
|
1240
|
-
this.
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
this.
|
|
1260
|
-
this.
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
this.
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
this.
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
this.
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
this.
|
|
1371
|
-
this.
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
this.
|
|
1383
|
-
this.
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
this.
|
|
1389
|
-
this.
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
const
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
params.
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
.
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
this.
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
this.
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
if (this.
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
}
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
i0.ɵɵ
|
|
1540
|
-
} if (rf &
|
|
1541
|
-
i0.ɵɵ
|
|
1542
|
-
}
|
|
1543
|
-
(
|
|
1544
|
-
|
|
1545
|
-
args: [{ selector: 'lib-table', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"data\" class=\"card-body\">\n <div class=\"flex flex-col justify-between gap-6\">\n <!-- UNIFIED CONTROL PANEL: FILTERS, SORT & ACTIONS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === true &&\n (dropdownItems.length > 0 ||\n sortableDropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SORT FIELD (Integrated with filters) -->\n <div class=\"mb-4\" *ngIf=\"sortableDropdownItems.length > 0\">\n <div class=\"flex flex-wrap items-center gap-3 p-2\">\n <div class=\"min-w-[200px] flex-1\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>Ordenar por</span>\n </mat-label>\n <mat-select placeholder=\"Selecione...\" [formControl]=\"selectSort\">\n <mat-option\n *ngFor=\"let item of sortableDropdownItems\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <!-- FILTERS CONTENT (WITH REFINEMENTS) -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions()\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Action Buttons -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Right Side: Search, Reset, Export -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true || this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"\n $any(arrange) && downloadTable !== undefined\n ? downloadTable($any(arrange), data.conditions || [])\n : null\n \"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n\n <!-- UNIFIED CONTROL PANEL (for non-paginated tables): SEARCH, SORT & FILTERS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === false &&\n (hasFilterableColumn === true ||\n dropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SIMPLE SEARCH -->\n <div\n class=\"mb-4\"\n *ngIf=\"hasFilterableColumn === true && data.showSimpleSearch !== false\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-blue-500\"></i>\n Buscar\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search($event)\"\n (keyup)=\"applyFilter(filterInput.value)\"\n placeholder=\"Digite para filtrar...\"\n #filterInput\n />\n <mat-icon matSuffix class=\"text-gray-500\">search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- FILTERS PANEL -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <!-- FILTERS CONTENT -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions()\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n (blur)=\"onDateFilterChange()\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n (blur)=\"onDateFilterChange()\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Actions -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Action Buttons -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true ||\n this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"handleDownload()\"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <!-- TABS COMPONENT -->\n <lib-table-tabs\n *ngIf=\"data.tabs && data.tabs.tabsData && data.tabs.tabsData.length > 0\"\n [tabsData]=\"data.tabs.tabsData\"\n [selectedTab]=\"selectedTab\"\n (tabSelected)=\"onTabSelected($event)\"\n ></lib-table-tabs>\n <div\n class=\"mat-elevation-z8 w-full overflow-x-auto rounded-xl table-container\"\n >\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n #sort=\"matSort\"\n matSortActive=\"createdAt\"\n matSortDirection=\"desc\"\n >\n <ng-container\n *ngFor=\"let col of data.displayedColumns; trackBy: trackByProperty\"\n matColumnDef=\"{{ col.property }}\"\n >\n <ng-container *matHeaderCellDef>\n <!-- IF THE COLUMN IS NOT SORTABLE, THEN DON'T SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"!col.isSortable || data.pagination === true\"\n mat-header-cell\n >\n {{ col.title }}\n </th>\n <!-- IF THE COLUMN IS SORTABLE, THEN SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"col.isSortable && data.pagination === false\"\n mat-header-cell\n mat-sort-header\n >\n {{ col.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n (click)=\"col.method ? col.method(row) : null\"\n (mouseenter)=\"onCellMouseEnter($event, row, col)\"\n (mouseleave)=\"onCellMouseLeave()\"\n (mousemove)=\"onCellMouseMove($event)\"\n >\n <!-- CHECK IF THE COLUMN MUST BE DISPLAYED -->\n <span *ngIf=\"!col.image && !col.iconClass && !col.method\">\n <ng-container>\n <span\n *ngIf=\"\n col.charLimit &&\n row[col.property] &&\n row[col.property].length > col.charLimit;\n else withinLimit\n \"\n >\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row) }}\n </span>\n </span>\n </ng-container>\n <ng-template #withinLimit>\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row, true) }}\n </span>\n </ng-template>\n </span>\n <!------------------- IMAGE ------------------>\n <!-- Imagem com loading -->\n <div\n *ngIf=\"\n col.image && col.image.path && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"col.image.path + '/' + row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n\n <!-- Imagem com URL completa e loading -->\n <div\n *ngIf=\"\n col.image && col.image.url && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n <ng-container *ngIf=\"col.iconClass\">\n <button\n *ngFor=\"let iconClass of col.iconClass\"\n (click)=\"\n iconClass.buttonMethod\n ? iconClass.buttonMethod(row, $event)\n : $event.stopPropagation()\n \"\n >\n <span\n [ngClass]=\"iconClass.class\"\n *ngIf=\"\n iconClass.condition === undefined ||\n (iconClass.condition !== undefined &&\n $any(iconClass.condition)(row))\n \"\n >{{ iconClass.text }}</span\n >\n </button>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnProperties\"></tr>\n <tr\n [ngClass]=\"getTableRowNgClass()\"\n mat-row\n *matRowDef=\"let row; columns: columnProperties\"\n (click)=\"goToDetails(row)\"\n ></tr>\n\n <!-- ROW SHOWN WHEN THERE IS NO MATCHING DATA. -->\n <tr class=\"mat-row\" *matNoDataRow>\n <td *ngIf=\"!(isLoading$ | async)\" class=\"mat-cell p-4\" colspan=\"4\">\n Nenhum resultado encontrado para a busca\n </td>\n </tr>\n </table>\n\n <div class=\"flex justify-center\" *ngIf=\"isLoading$ | async\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div class=\"paginator-container\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[25, 50, 100]\"\n [pageSize]=\"pageSize\"\n [length]=\"totalItems\"\n showFirstLastButtons\n aria-label=\"Select page of periodic elements\"\n (page)=\"onPageChange($event)\"\n [ngClass]=\"getPaginatorNgClass()\"\n >\n </mat-paginator>\n <!-- <div\n *ngIf=\"\n !(isLoading$ | async) &&\n dataSource?.data &&\n dataSource.data.length > 0 &&\n data?.filterFn\n \"\n class=\"page-number-display\"\n >\n {{ currentPageNumber }}\n </div> -->\n </div>\n </div>\n </div>\n </div>\n\n <!-- TOOLTIP PERSONALIZADO -->\n <lib-table-tooltip\n [state]=\"tooltipState\"\n [styles]=\"getTooltipStyles()\"\n ></lib-table-tooltip>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto::-webkit-scrollbar,.overflow-y-auto::-webkit-scrollbar,.overflow-auto::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto::-webkit-scrollbar-thumb,.overflow-y-auto::-webkit-scrollbar-thumb,.overflow-auto::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto::-webkit-scrollbar-thumb:hover,.overflow-y-auto::-webkit-scrollbar-thumb:hover,.overflow-auto::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}:host ::ng-deep .mat-table .mat-header-cell,:host ::ng-deep .mat-header-cell,:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600}::ng-deep .fa-filter,::ng-deep i.fa-filter{color:var(--table-color, #1976d2)!important}::ng-deep .rounded-xl.border{border-color:var(--table-color, #1976d2)!important}::ng-deep .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important}::ng-deep .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled .mdc-text-field__input{color:#525252}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none}::ng-deep .hide-length .mat-mdc-paginator-range-label{display:none}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw}::ng-deep .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"],button:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"]:hover,button:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"],button:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"]:hover,button:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"]:disabled,button:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"],button:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"]:hover,button:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"],button:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"]:hover:not(:disabled),button:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"]:disabled,button:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}\n"] }]
|
|
1546
|
-
|
|
1547
|
-
type: Input
|
|
1548
|
-
|
|
1549
|
-
type: Input
|
|
1550
|
-
}],
|
|
1551
|
-
type:
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxjQUFjLEdBSWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBS1QsdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNN0QsT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBQ2QsUUFBUSxFQUNSLGVBQWUsRUFDZixXQUFXLEdBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSxNQUFNLENBQUM7QUFLZCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ3RCdkQsb0JBR0s7OztJQURILDZDQUFnQzs7OztJQVZwQyxrQ0FPQztJQUhDLG1MQUNpQixrREFBMkIsd0NBQ2pELEdBQUcsSUFDVixDQUFBLElBRGE7SUFFRCxpRkFHSztJQUNMLFlBQ0Y7SUFBQSxpQkFBUzs7O0lBWFAsd0RBQWtDLG9EQUFBO0lBTy9CLGVBQTRCO0lBQTVCLHFEQUE0QjtJQUcvQixlQUNGO0lBREUsZ0VBQ0Y7OztJQWNNLHNDQUdDLGNBQUE7SUFFRyx3QkFBbUQ7SUFDbkQsNEJBQU07SUFBQSxZQUFnQjtJQUFBLGlCQUFPLEVBQUEsRUFBQTs7O0lBSi9CLGdDQUFjO0lBSU4sZUFBZ0I7SUFBaEIsb0NBQWdCOzs7SUFmcEMsK0JBQTJELGNBQUEsY0FBQSx5QkFBQSxvQkFBQTtJQUtqRCx3QkFBbUQ7SUFDbkQsNEJBQU07SUFBQSwyQkFBVztJQUFBLGlCQUFPLEVBQUE7SUFFMUIsc0NBQWtFO0lBQ2hFLGdHQVFhO0lBQ2YsaUJBQWEsRUFBQSxFQUFBLEVBQUEsRUFBQTs7O0lBVjBCLGVBQTBCO0lBQTFCLGdEQUEwQjtJQUU1QyxlQUF3QjtJQUF4Qix1REFBd0I7OztJQThCM0Msc0NBR0MsY0FBQTtJQUVHLHdCQUdLO0lBQ0wsNEJBQU07SUFBQSxZQUFnQjtJQUFBLGlCQUFPLEVBQUEsRUFBQTs7O0lBUC9CLGdDQUFjO0lBSVYsZUFBcUM7SUFBckMsOENBQXFDO0lBR2pDLGVBQWdCO0lBQWhCLG9DQUFnQjs7OztJQWpCaEMsK0JBQW1FLHlCQUFBLGdCQUFBO0lBRXBELDhCQUFjO0lBQUEsaUJBQVk7SUFDckMsc0NBSUM7SUFEQyw4TUFBbUIsZUFBQSw4QkFBc0IsQ0FBQSxJQUFDO0lBRTFDLDRHQVdhO0lBQ2YsaUJBQWEsRUFBQSxFQUFBOzs7SUFYUSxlQUE4QjtJQUE5Qiw2REFBOEI7Ozs7SUFnQnZELCtCQUtDLHlCQUFBLG9CQUFBO0lBR0ssd0JBQTBDO0lBQzFDLDRCQUFNO0lBQUEsWUFHSjtJQUFBLGlCQUFPLEVBQUE7SUFFWCxxQ0FNRTtJQUxBLHVNQUFlLGVBQUEsc0JBQWMsQ0FBQSxJQUFDO0lBRGhDLGlCQU1FLEVBQUEsRUFBQTs7OztJQVhNLGVBR0o7SUFISSx3SkFHSjs7O0lBZ0NGLHNDQU1DO0lBQ0MsWUFDRjtJQUFBLGlCQUFhOzs7SUFIWCxnQ0FBYztJQUVkLGVBQ0Y7SUFERSwrQ0FDRjs7O0lBM0JOLCtCQVFDLHlCQUFBLGdCQUFBO0lBRWMsWUFHVDtJQUFBLGlCQUFZO0lBQ2Qsc0NBSUM7SUFDQyw0R0FRYTtJQUNmLGlCQUFhLEVBQUEsRUFBQTs7Ozs7SUFsQkYsZUFHVDtJQUhTLDBKQUdUO0lBUWtDLGVBR2xEO0lBSGtELDhHQUdsRDs7OztJQVNVLCtCQU1DLGNBQUEseUJBQUEsb0JBQUE7SUFNTyx3QkFBNEM7SUFDNUMsNEJBQU07SUFBQSw0QkFBWTtJQUFBLGlCQUFPLEVBQUE7SUFFM0IsaUNBUUU7SUFMQSwyTUFBaUIsZUFBQSxzQkFBYyxDQUFBLElBQUMsc05BQ3ZCLGVBQUEsNEJBQW9CLGFBQWEsUUFBSSxDQUFBLElBRGQ7SUFIbEMsaUJBUUUsRUFBQTtJQUdKLDBDQUFvRCxvQkFBQTtJQUVoRCx5QkFBNEM7SUFDNUMsNkJBQU07SUFBQSwyQkFBVTtJQUFBLGlCQUFPLEVBQUE7SUFFekIsa0NBUUU7SUFOQSw0TUFBaUIsZUFBQSxzQkFBYyxDQUFBLElBQUMsdU5BQ3ZCLGVBQUEsNEJBQW9CLFdBQVcsUUFBSSxDQUFBLElBRFo7SUFGbEMsaUJBUUUsRUFBQSxFQUFBLEVBQUE7Ozs7SUFNUiwrQkFBa0UsaUJBQUE7SUFFOUQsOE5BQVMsZUFBQSwyQkFBZSxDQUFBLElBQUM7SUFJekIsd0JBQTJEO0lBQzdELGlCQUFTLEVBQUE7OztJQTdJYiwrQkFJQztJQUVDLHdGQXNCTTtJQUdOLHdGQXNCTTtJQUdOLHdGQThCTTtJQUdOLHlGQTBDTTtJQUdOLHdGQVFNO0lBQ1IsaUJBQU07Ozs7Ozs7SUE5SUosMkNBQStCO0lBS0ksZUFBOEI7SUFBOUIsdURBQThCO0lBMkI5RCxlQUdiO0lBSGEsMkpBR2I7SUFzQmEsZUFNYjtJQU5hLG1OQU1iO0lBMkJhLGVBSWI7SUFKYSxpS0FJYjtJQXVDZ0IsZUFBNEI7SUFBNUIscURBQTRCOzs7SUF2SXRDLCtCQUFvRTtJQUNsRSxrRkErSU07SUFDUixpQkFBTTs7O0lBOUlzQixlQUF5QjtJQUF6QixzREFBeUI7Ozs7SUFxSm5ELDJCQUFzQyxpQkFBQTtJQUVsQywyS0FBUyxlQUFBLG1CQUFXLENBQUEsSUFBQztJQUlyQix3QkFBK0I7SUFDL0Isa0NBQ0Y7SUFBQSxpQkFBUyxFQUFBOzs7O0lBNkJULGtDQWFDO0lBTEMsb0xBQ2lCLDREQUN4QixTQUFTLEdBQW1CLHFFQUNuQixHQUNKLElBQ1YsQ0FBQSxJQURhO0lBRUQsd0JBQThCO0lBQzlCLDBCQUNGO0lBQUEsaUJBQVM7OztJQVhQLDRGQUVDOzs7O0lBaENMLCtCQUtDLGlCQUFBO0lBRUcsMktBQVMsZUFBQSxnQkFBUSxDQUFBLElBQUM7SUFLbEIsd0JBQTRCO0lBQzVCLDJCQUNGO0lBQUEsaUJBQVM7SUFFVCxrQ0FJQztJQUhDLDJLQUFTLGVBQUEscUJBQWEsQ0FBQSxJQUFDO0lBSXZCLHdCQUErQjtJQUMvQix5QkFDRjtJQUFBLGlCQUFTO0lBRVQseUZBZ0JTO0lBQ1gsaUJBQU07OztJQWhCRCxlQUE4QztJQUE5QywrRUFBOEM7OztJQTlQdkQsK0JBUUMsY0FBQSxjQUFBLGNBQUE7SUFRTyx3QkFBa0Q7SUFDbEQsZ0NBQ0c7SUFBQSx5Q0FBZTtJQUFBLGlCQUNqQixFQUFBO0lBRUgsa0ZBYVM7SUFDWCxpQkFBTSxFQUFBO0lBSVIsNkVBc0JNO0lBR04sNEVBaUpNO0lBR04sZ0NBRUM7SUFFQyw4RUFTTTtJQUdOLDhFQTBDTTtJQUNSLGlCQUFNLEVBQUE7OztJQXpQQyxlQUFzRDtJQUF0RCxxRkFBc0Q7SUFpQjFDLGVBQXNDO0lBQXRDLDhEQUFzQztJQXlCNUIsZUFBcUM7SUFBckMsNkRBQXFDO0lBd0oxRCxlQUE4QjtJQUE5QixzREFBOEI7SUFjakMsZUFHWDtJQUhXLCtGQUdYOzs7SUF1RVksb0JBR0s7OztJQURILDZDQUFnQzs7OztJQVZwQyxrQ0FPQztJQUhDLG1MQUNpQixrREFBMkIsd0NBQ2pELEdBQUcsSUFDVixDQUFBLElBRGE7SUFFRCxpRkFHSztJQUNMLFlBQ0Y7SUFBQSxpQkFBUzs7O0lBWFAsd0RBQWtDLG9EQUFBO0lBTy9CLGVBQTRCO0lBQTVCLHFEQUE0QjtJQUcvQixlQUNGO0lBREUsZ0VBQ0Y7Ozs7SUFLSiwrQkFHQyx5QkFBQSxvQkFBQTtJQUdLLHdCQUEwQztJQUMxQyx3QkFDRjtJQUFBLGlCQUFZO0lBQ1oscUNBTUU7SUFKQSwyTEFBZSxlQUFBLHNCQUFjLENBQUEsSUFBQyw0TEFDckIsZUFBQSwrQkFBOEIsQ0FBQSxJQURUO0lBRmhDLGlCQU1FO0lBQ0Ysb0NBQTBDO0lBQUEsc0JBQU07SUFBQSxpQkFBVyxFQUFBLEVBQUE7OztJQXNCbkQsc0NBR0MsY0FBQTtJQUVHLHdCQUdLO0lBQ0wsNEJBQU07SUFBQSxZQUFnQjtJQUFBLGlCQUFPLEVBQUEsRUFBQTs7O0lBUC9CLGdDQUFjO0lBSVYsZUFBcUM7SUFBckMsOENBQXFDO0lBR2pDLGVBQWdCO0lBQWhCLG9DQUFnQjs7OztJQWpCaEMsK0JBQW1FLHlCQUFBLGdCQUFBO0lBRXBELDhCQUFjO0lBQUEsaUJBQVk7SUFDckMsc0NBSUM7SUFEQyxvTkFBbUIsZUFBQSw4QkFBc0IsQ0FBQSxJQUFDO0lBRTFDLGtIQVdhO0lBQ2YsaUJBQWEsRUFBQSxFQUFBOzs7SUFYUSxlQUE4QjtJQUE5Qiw2REFBOEI7Ozs7SUFnQnZELCtCQU1DLHlCQUFBLG9CQUFBO0lBR0ssd0JBQTBDO0lBQzFDLDRCQUFNO0lBQUEsWUFHSjtJQUFBLGlCQUFPLEVBQUE7SUFFWCxxQ0FNRTtJQUxBLDZNQUFlLGVBQUEsc0JBQWMsQ0FBQSxJQUFDO0lBRGhDLGlCQU1FLEVBQUEsRUFBQTs7OztJQVhNLGVBR0o7SUFISSx3SkFHSjs7O0lBZ0NGLHNDQU1DO0lBQ0MsWUFDRjtJQUFBLGlCQUFhOzs7SUFIWCxnQ0FBYztJQUVkLGVBQ0Y7SUFERSwrQ0FDRjs7O0lBM0JOLCtCQVFDLHlCQUFBLGdCQUFBO0lBRWMsWUFHVDtJQUFBLGlCQUFZO0lBQ2Qsc0NBSUM7SUFDQyxrSEFRYTtJQUNmLGlCQUFhLEVBQUEsRUFBQTs7Ozs7SUFsQkYsZUFHVDtJQUhTLDBKQUdUO0lBUW9DLGVBR3REO0lBSHNELDhHQUd0RDs7OztJQVNZLCtCQU1DLGNBQUEseUJBQUEsb0JBQUE7SUFNTyx3QkFBNEM7SUFDNUMsNEJBQU07SUFBQSw0QkFBWTtJQUFBLGlCQUFPLEVBQUE7SUFFM0IsaUNBU0U7SUFOQSxpTkFBaUIsZUFBQSxzQkFBYyxDQUFBLElBQUMsNE5BQ3ZCLGVBQUEsNEJBQW9CLGFBQWEsUUFBSSxDQUFBLElBRGQsNEtBRXhCLGVBQUEsNEJBQW9CLENBQUEsSUFGSTtJQUhsQyxpQkFTRSxFQUFBO0lBR0osMENBQW9ELG9CQUFBO0lBRWhELHlCQUE0QztJQUM1Qyw2QkFBTTtJQUFBLDJCQUFVO0lBQUEsaUJBQU8sRUFBQTtJQUV6QixrQ0FTRTtJQVBBLGtOQUFpQixlQUFBLHNCQUFjLENBQUEsSUFBQyw2TkFDdkIsZUFBQSw0QkFBb0IsV0FBVyxRQUFJLENBQUEsSUFEWiw2S0FFeEIsZUFBQSw0QkFBb0IsQ0FBQSxJQUZJO0lBRmxDLGlCQVNFLEVBQUEsRUFBQSxFQUFBOzs7O0lBTVIsK0JBQWtFLGlCQUFBO0lBRTlELHFPQUFTLGVBQUEsMkJBQWUsQ0FBQSxJQUFDO0lBSXpCLHdCQUEyRDtJQUM3RCxpQkFBUyxFQUFBOzs7SUFoSmIsK0JBSUM7SUFFQyw4RkFzQk07SUFHTiw4RkF1Qk07SUFHTiw4RkE4Qk07SUFHTiwrRkE0Q007SUFHTiw4RkFRTTtJQUNSLGlCQUFNOzs7Ozs7O0lBakpKLDJDQUErQjtJQUtJLGVBQThCO0lBQTlCLHVEQUE4QjtJQTJCOUQsZUFJZjtJQUplLDJKQUlmO0lBc0JlLGVBTWY7SUFOZSxtTkFNZjtJQTJCZSxlQUlmO0lBSmUsaUtBSWY7SUF5Q2tCLGVBQTRCO0lBQTVCLHFEQUE0Qjs7O0lBMUl0QywrQkFBb0U7SUFDbEUsd0ZBa0pNO0lBQ1IsaUJBQU07OztJQWpKc0IsZUFBeUI7SUFBekIsc0RBQXlCOzs7O0lBd0puRCwyQkFBc0MsaUJBQUE7SUFFbEMsa0xBQVMsZUFBQSxvQkFBVyxDQUFBLElBQUM7SUFJckIsd0JBQStCO0lBQy9CLGtDQUNGO0lBQUEsaUJBQVMsRUFBQTs7OztJQThCVCxrQ0FTQztJQURDLDJMQUFTLGVBQUEseUJBQWdCLENBQUEsSUFBQztJQUUxQix3QkFBOEI7SUFDOUIsMEJBQ0Y7SUFBQSxpQkFBUzs7O0lBUFAsOEZBRUM7Ozs7SUFqQ0wsK0JBTUMsaUJBQUE7SUFFRyxrTEFBUyxlQUFBLGlCQUFRLENBQUEsSUFBQztJQUtsQix3QkFBNEI7SUFDNUIsMkJBQ0Y7SUFBQSxpQkFBUztJQUVULGtDQUlDO0lBSEMsa0xBQVMsZUFBQSxzQkFBYSxDQUFBLElBQUM7SUFJdkIsd0JBQStCO0lBQy9CLHlCQUNGO0lBQUEsaUJBQVM7SUFFVCw4RkFZUztJQUNYLGlCQUFNOzs7SUFaRCxlQUE4QztJQUE5QywrRUFBOEM7OztJQXBNdkQsMkJBQXNDO0lBRXBDLGtGQW9KTTtJQUdOLCtCQUVDO0lBRUMsa0ZBU007SUFHTixrRkF1Q007SUFDUixpQkFBTSxFQUFBOzs7SUEvTXVCLGVBQXFDO0lBQXJDLDhEQUFxQztJQTJKMUQsZUFBOEI7SUFBOUIsdURBQThCO0lBY2pDLGVBSWI7SUFKYSxpR0FJYjs7O0lBM09JLCtCQVFDLGNBQUEsY0FBQSxjQUFBO0lBUU8sd0JBQWtEO0lBQ2xELGdDQUNHO0lBQUEseUNBQWU7SUFBQSxpQkFDakIsRUFBQTtJQUVILGtGQWFTO0lBQ1gsaUJBQU0sRUFBQTtJQUlSLDRFQWtCTTtJQUdOLDRFQWtOTTtJQUNSLGlCQUFNOzs7SUF6UEcsZUFBc0Q7SUFBdEQscUZBQXNEO0lBbUIxRCxlQUFxRTtJQUFyRSxvR0FBcUU7SUFtQmxFLGVBQThCO0lBQTlCLHNEQUE4Qjs7OztJQXVOcEMsMENBS0M7SUFEQywyTUFBZSxlQUFBLDhCQUFxQixDQUFBLElBQUM7SUFDdEMsaUJBQWlCOzs7SUFIaEIsb0RBQStCLG1DQUFBOzs7SUFxQnpCLDhCQUdDO0lBQ0MsWUFDRjtJQUFBLGlCQUFLOzs7SUFESCxlQUNGO0lBREUsK0NBQ0Y7OztJQUVBLDhCQUlDO0lBQ0MsWUFDRjtJQUFBLGlCQUFLOzs7SUFESCxlQUNGO0lBREUsK0NBQ0Y7OztJQW9CUSw2QkFJQztJQUNDLFlBQ0Y7SUFBQSxpQkFBSTs7Ozs7SUFKRixvRUFBMEI7SUFHMUIsZUFDRjtJQURFLDZFQUNGOzs7SUFDQSw2QkFJQztJQUNDLFlBQ0Y7SUFBQSxpQkFBSTs7Ozs7SUFKRix5REFBb0I7SUFHcEIsZUFDRjtJQURFLDZFQUNGOzs7SUFDQSw0QkFFQztJQUNDLFlBQ0Y7SUFBQSxpQkFBTzs7Ozs7SUFETCxlQUNGO0lBREUsNkVBQ0Y7OztJQTFCRiw0QkFPQztJQUNDLG1IQU1JO0lBQ0osbUhBTUk7SUFDSix5SEFJTztJQUNULGlCQUFPOzs7O0lBbEJGLGVBQTBCO0lBQTFCLGdEQUEwQjtJQU8xQixlQUEwQztJQUExQyw4RUFBMEM7SUFPMUMsZUFBb0Q7SUFBcEQsd0ZBQW9EOzs7SUFPekQsNkJBSUM7SUFDQyxZQUNGO0lBQUEsaUJBQUk7Ozs7O0lBSkYsb0VBQTBCO0lBRzFCLGVBQ0Y7SUFERSxtRkFDRjs7O0lBQ0EsNkJBSUM7SUFDQyxZQUNGO0lBQUEsaUJBQUk7Ozs7O0lBSkYseURBQW9CO0lBR3BCLGVBQ0Y7SUFERSxtRkFDRjs7O0lBQ0EsNEJBRUM7SUFDQyxZQUNGO0lBQUEsaUJBQU87Ozs7O0lBREwsZUFDRjtJQURFLG1GQUNGOzs7SUFsQkEsMEhBTUk7SUFDSiwwSEFNSTtJQUNKLGdJQUlPOzs7O0lBakJKLGdEQUEwQjtJQU8xQixlQUEwQztJQUExQyw4RUFBMEM7SUFPMUMsZUFBb0Q7SUFBcEQsd0ZBQW9EOzs7SUEvQzNELDRCQUEwRDtJQUN4RCw2QkFBYztJQUNaLGtIQTJCTztJQUNULDBCQUFlO0lBQ2YsaUtBb0JjO0lBQ2hCLGlCQUFPOzs7OztJQWpEQSxlQUtmO0lBTGUsbUlBS2YsbUJBQUE7OztJQXFEVSxrQ0FJZTs7SUFGYiw2QkFBZTs7OztJQVJuQiwrQkFLQztJQUNDLCtIQUllO0lBQ2YsK0JBT0U7SUFGQSxtU0FBUSxlQUFBLHdDQUFxQixDQUFBLElBQUMsOFJBQ3JCLGVBQUEseUVBQWlELENBQUEsSUFENUI7SUFMaEMsaUJBT0UsRUFBQTs7Ozs7SUFYQyxlQUE4QjtJQUE5QixrRUFBOEI7SUFPL0IsZUFBNEM7SUFBNUMsd0VBQTRDO0lBRjVDLCtGQUFnRCxpQ0FBQTs7O0lBZ0JsRCxrQ0FJZTs7SUFGYiw2QkFBZTs7OztJQVJuQiwrQkFLQztJQUNDLCtIQUllO0lBQ2YsK0JBT0U7SUFGQSxtU0FBUSxlQUFBLHdDQUFxQixDQUFBLElBQUMsOFJBQ3JCLGVBQUEseUVBQWlELENBQUEsSUFENUI7SUFMaEMsaUJBT0UsRUFBQTs7Ozs7SUFYQyxlQUE4QjtJQUE5QixrRUFBOEI7SUFPL0IsZUFBNEM7SUFBNUMsd0VBQTRDO0lBRjVDLG1FQUF5QixpQ0FBQTs7O0lBaUJ6QixpQ0FPRztJQUFBLFlBQW9CO0lBQUEsaUJBQ3RCOzs7SUFQQyw4Q0FBMkI7SUFNMUIsZUFBb0I7SUFBcEIseUNBQW9COzs7O0lBZnpCLGtDQU9DO0lBTEMsNlNBRXBCLDZDQUFpRCw2Q0FDM0IsR0FBMkIsd0JBRWpELENBQUEsSUFEcUI7SUFFRCxtSUFRQztJQUNILGlCQUFTOzs7O0lBUEosZUFLdkI7SUFMdUIsNklBS3ZCOzs7SUFoQmdCLDZCQUFvQztJQUNsQyw4SEFpQlM7SUFDWCwwQkFBZTs7O0lBakJXLGVBQWdCO0lBQWhCLDRDQUFnQjs7OztJQTVHNUMsOEJBT0M7SUFKQyxxUUFBUyxpQ0FBYSx5QkFBZSxHQUFHLElBQUksQ0FBQSxJQUFDLDhTQUMvQixlQUFBLHFEQUFrQyxDQUFBLElBREgsNExBRS9CLGVBQUEsMkJBQWtCLENBQUEsSUFGYSxnTUFHaEMsZUFBQSxnQ0FBdUIsQ0FBQSxJQUhTO0lBTTdDLDJHQW9ETztJQUdQLHlHQW1CTTtJQUdOLHlHQW1CTTtJQUNOLDJIQW1CZTtJQUNqQixpQkFBSzs7O0lBckhJLGVBQWlEO0lBQWpELGlGQUFpRDtJQXdEckQsZUFHbkI7SUFIbUIsdUdBR25CO0lBbUJtQixlQUduQjtJQUhtQixzR0FHbkI7SUFnQitCLGVBQW1CO0lBQW5CLHlDQUFtQjs7O0lBMUh0Qyw2QkFBZ0M7SUFFOUIsa0dBS0s7SUFFTCxrR0FNSztJQUNMLGtHQThISztJQUNQLDBCQUFlOzs7O0lBNUlWLGVBQWlEO0lBQWpELGdGQUFpRDtJQU9qRCxlQUFpRDtJQUFqRCxnRkFBaUQ7OztJQWR4RCxpQ0FHQztJQUNDLHVHQStJZTtJQUNqQiwwQkFBZTs7O0lBbEpiLDJEQUFpQzs7O0lBb0puQywwQkFBNEQ7Ozs7SUFDNUQsK0JBS0M7SUFEQyw4TkFBUyxlQUFBLDhCQUFnQixDQUFBLElBQUM7SUFDM0IsaUJBQUs7OztJQUpKLHFEQUFnQzs7O0lBUWhDLCtCQUFtRTtJQUNqRSwwREFDRjtJQUFBLGlCQUFLOzs7SUFIUCwrQkFBa0M7SUFDaEMsMkVBRUs7O0lBQ1AsaUJBQUs7OztJQUhFLGVBQTJCO0lBQTNCLCtEQUEyQjs7O0lBTXBDLGdDQUE0RDtJQUMxRCw4QkFBMkI7SUFDN0IsaUJBQU07Ozs7O0lBbHVCZCw4QkFBb0MsYUFBQTtJQUdoQyxzRUFnUk07SUFHTixzRUErUU07SUFFTiw4QkFBMkI7SUFFekIsMkZBS2tCO0lBQ2xCLDhCQUVDLGtCQUFBO0lBU0csdUZBb0plO0lBRWYsc0VBQTREO0lBQzVELHNFQUtNO0lBR04sc0VBSUs7SUFDUCxpQkFBUTtJQUVSLHdFQUVNOztJQUVOLGdDQUFpQyw2QkFBQTtJQVE3QiwyS0FBUSxlQUFBLDZCQUFvQixDQUFBLElBQUM7SUFHL0IsaUJBQWdCLEVBQUEsRUFBQSxFQUFBLEVBQUE7SUFrQnhCLHlDQUdxQjtJQUN2QixpQkFBTTs7O0lBaHdCQyxlQU1QO0lBTk8sa0tBTVA7SUE2UU8sZUFNUDtJQU5PLCtKQU1QO0lBNFFTLGVBQXNFO0lBQXRFLDRHQUFzRTtJQVVyRSxlQUF5QjtJQUF6Qiw4Q0FBeUI7SUFPUCxlQUEwQjtJQUExQixzREFBMEIsd0NBQUE7SUFxSnhCLGVBQWlDO0lBQWpDLHlEQUFpQztJQUk5QixlQUF5QjtJQUF6QiwwREFBeUI7SUFZaEIsZUFBd0I7SUFBeEIsZ0VBQXdCO0lBT3RELGVBQWlDO0lBQWpDLDZEQUFpQyw2QkFBQSw2QkFBQSx5Q0FBQTtJQTJCekMsZUFBc0I7SUFBdEIsMkNBQXNCLHFDQUFBOztBRG5zQjFCLE1BQU0sT0FBTyxjQUFjO0lBd0R6QixjQUFjO0lBQ2QsWUFDVSxNQUFjLEVBQ2QsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLEVBQWMsRUFDZCxHQUFzQjtRQVB0QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBM0RoQyxZQUFPLEdBQW1CLElBQUksQ0FBQztRQUkvQixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDdEIsMkJBQXNCLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVqRCxVQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ2hCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLFlBQU8sR0FBb0MsSUFBSSxDQUFDO1FBQ2hELGFBQVEsR0FBb0MsSUFBSSxDQUFDO1FBQ2pELFdBQU0sR0FBK0M7WUFDM0QsS0FBSyxFQUFFLGNBQWMsQ0FBQyxVQUFVO1lBQ2hDLEtBQUssRUFBRSxjQUFjLENBQUMsVUFBVTtTQUNqQyxDQUFDO1FBQ0sscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBR3ZDLGVBQVUsR0FBZ0IsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFFcEIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0Isa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLDBCQUFxQixHQUFtQixFQUFFLENBQUM7UUFDM0MsYUFBUSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUM7UUFDcEMsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUVmLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUVsQyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBRTNCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUM3QixtQkFBYyxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUVsRSxnQkFBVyxHQUFXLENBQUMsQ0FBQztRQVF4QixpQ0FBaUM7UUFDakMsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFFdkMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFhckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLElBQUksYUFBYSxDQUFDO1lBQ3RELCtGQUErRixDQUNoRyxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPO1lBQ0wscUJBQXFCLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLEtBQUssSUFBSTtZQUN6RCxvQ0FBb0MsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYztTQUNqRSxDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQjtRQUNqQixPQUFPO1lBQ0wsYUFBYSxFQUNYLENBQUMsUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUTtZQUN2QixrQkFBa0IsRUFDaEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxLQUFLLElBQUk7WUFDckQsa0JBQWtCLEVBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxLQUFLLElBQUksQ0FBQztnQkFDckQsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUTtTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVELDhDQUE4QztJQUU5QyxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsU0FBUyxDQUFDLFVBTVQ7UUFDQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FDMUIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUM3QixVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FDakQsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUM3QixJQUFJLENBQUMsV0FBVyxDQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQjtRQUNsQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEQsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLENBQUM7UUFFN0QsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFDRSxjQUFjLENBQUMsT0FBTyxLQUFLLGNBQWM7Z0JBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFDN0I7Z0JBQ0EsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVyxDQUNULEtBQVksRUFDWixXQUF3QyxFQUN4QyxXQUFtQjtRQUVuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQWMsQ0FBQztRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUN2RCxJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7WUFDRixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBRTdCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQzNELENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ2YsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUV2QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxLQUFVO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FDOUMsS0FBSyxFQUNMLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUMvQyxJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7SUFDSixDQUFDO0lBRUQsZ0RBQWdEO0lBRWhELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWlCLEVBQUUsR0FBTSxFQUFFLEdBQVc7UUFDckQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FDbEMsS0FBSyxFQUNMLEdBQUcsRUFDSCxHQUFHLEVBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUMxQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWlCO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUNqQyxLQUFLLEVBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQzdCLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUN4RSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWM7SUFFZCxhQUFhLENBQUMsS0FBc0M7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU07WUFBRSxPQUFPO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsd0NBQXdDO0lBRXhDLGVBQWUsQ0FBQyxHQUFXLEVBQUUsR0FBTSxFQUFFLGNBQXVCLEtBQUs7UUFDL0QsT0FBTyxlQUFlLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQVksRUFBRSxJQUFZO1FBQ3ZDLE9BQU8sY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWM7UUFDckIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFjLEVBQUUsR0FBVztRQUN6QyxPQUFPLGVBQWUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELHdCQUF3QjtJQUVoQixXQUFXLENBQUMsR0FBTSxFQUFFLEdBQVc7UUFDckMsT0FBTyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBTSxFQUFFLEdBQVc7UUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFNLEVBQUUsR0FBVztRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBWSxFQUFFLEdBQU0sRUFBRSxHQUFXLEVBQUUsWUFBcUI7UUFDbkUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDaEQsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLFlBQVksRUFBRTtnQkFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2FBQ3ZCO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzthQUMvQjtTQUNGO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsb0JBQW9CO0lBRXBCLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRXZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3ZCLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN4RTtRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ3pCLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUMzQixxQkFBcUIsRUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNyQixDQUFDO1NBQ0g7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUM5QyxvRkFBb0YsQ0FDckYsQ0FBQztZQUNGLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFpQixFQUFFLEVBQUU7Z0JBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO29CQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7aUJBQ2pEO2dCQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO29CQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ3pDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVE7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHO2dCQUNoQixFQUFFLEVBQUUsY0FBYyxDQUFDLGdCQUFnQjtnQkFDbkMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxrQkFBa0I7YUFDeEMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUNuQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FDcEQsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQzVCLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUU7WUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDdkQ7UUFFRCxpREFBaUQ7UUFDakQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FDM0IsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUNoRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUFDO1FBQ2hFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUM7UUFDNUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztRQUV4RCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUMxRCxJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUM1QixDQUFDO1NBQ0g7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDbEMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUN6QjtRQUVELGdCQUFnQjtRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTtZQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHO29CQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO29CQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztpQkFDOUIsQ0FBQzthQUNIO1lBQ0QsSUFBSSxDQUFDLGFBQWE7aUJBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDakUsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBRUwsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDdEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDekMsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUM3QyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxFQUVuQixDQUFDO29CQUNkLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ3RDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVTs0QkFDaEMsQ0FBQyxPQUFPLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVcsQ0FBQztxQkFDaEU7aUJBQ0Y7YUFDRjtZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO0lBRWYsS0FBSyxDQUFDLFNBQVM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDeEIsQ0FBUSxDQUFDO1FBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7UUFDRCxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFcEMsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJO2dCQUMxQixLQUFLLEVBQUUsY0FBYyxDQUFDLFVBQVU7Z0JBQ2hDLEtBQUssRUFBRSxjQUFjLENBQUMsVUFBVTthQUNqQztTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJO1lBQ2hDLEtBQUssRUFBRSxjQUFjLENBQUMsVUFBVTtZQUNoQyxLQUFLLEVBQUUsY0FBYyxDQUFDLFVBQVU7U0FDakMsQ0FBQztRQUVGLElBQUksY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsY0FBYyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsYUFBYSxHQUFHLGNBQWMsQ0FBQztRQUVwQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNyRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN4QztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQWMsRUFBRSxFQUFFO1lBQ3pELE1BQU0sSUFBSSxHQUFHLElBQStCLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBVyxFQUFFO2dCQUN0RCxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDeEIsT0FBTyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFXLEVBQUU7d0JBQ3RELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3pDLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxFQUFFOzRCQUN2RCxPQUFPLEtBQUssQ0FBQzt5QkFDZDt3QkFFRCxNQUFNLGNBQWMsR0FBRyxhQUF3QyxDQUFDO3dCQUNoRSxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ2pELElBQUksY0FBYyxLQUFLLElBQUksSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFOzRCQUMzRCxPQUFPLEtBQUssQ0FBQzt5QkFDZDt3QkFFRCxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUM7NkJBQzFCLElBQUksRUFBRTs2QkFDTixpQkFBaUIsRUFBRTs2QkFDbkIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QixDQUFDLENBQUMsQ0FBQztpQkFDSjtnQkFFRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRTtvQkFDcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDekMsSUFBSSxhQUFhLEtBQUssSUFBSSxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7d0JBQ3pELE9BQU8sS0FBSyxDQUFDO3FCQUNkO29CQUVELE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQzt5QkFDekIsSUFBSSxFQUFFO3lCQUNOLGlCQUFpQixFQUFFO3lCQUNuQixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3JCO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLEtBQUssQ0FBQyxrQkFBa0IsQ0FDOUIsYUFBZ0QsUUFBUSxFQUN4RCxRQUFpQixLQUFLO1FBRXRCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQztTQUNqQztRQUNELElBQUksS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN4RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FDM0QsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixPQUFPLEVBQUUsYUFBYTtZQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFlO1lBQzVCLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN4QixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQ2hDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3ZELFVBQVU7WUFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQVE7WUFDdEIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUNoQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUM1QixlQUFlLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtTQUM3QyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFZLENBQUM7UUFDakMsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUEwQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQTJDLENBQUM7UUFFbkUsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEtBQUssU0FBUyxFQUFFO1lBQy9DLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUM7U0FDN0Q7UUFFRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3RCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pDLE1BQU0sV0FBVyxHQUFHLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksRUFFbkIsQ0FBQztnQkFDZCxJQUFJLE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO29CQUNsQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDakUsTUFBTSxZQUFZLEdBQUcsT0FBTyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFZLENBQUM7aUJBQy9EO2FBQ0Y7WUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztTQUN2QjtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQscUJBQXFCO0lBRXJCLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBaUI7UUFDbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUVwRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixNQUFNLFlBQVksR0FBRztZQUNuQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3pDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7WUFDbkQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDOUIsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FDM0QsS0FBSyxFQUNMLFlBQVksQ0FDYixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsT0FBTztTQUNSO1FBRUQseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFDNUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFFbEQsOEJBQThCO1FBQzlCLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNoQztRQUVELG9FQUFvRTtRQUNwRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLENBQ2pFLElBQUksQ0FBQyxVQUFVLEVBQ2YsS0FBSyxDQUFDLFFBQVEsQ0FDZixDQUFDO1FBQ0YsSUFBSSxnQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBRTNDLElBQ0UsS0FBSyxDQUFDLFNBQVMsS0FBSyxhQUFhO1lBQ2pDLFVBQVUsQ0FBQyxTQUFTLEtBQUssVUFBVTtZQUNuQyxVQUFVLENBQUMsU0FBUyxFQUNwQjtZQUNBLE1BQU0sdUJBQXVCLEdBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FDL0MsSUFBSSxDQUFDLFVBQVUsRUFDZixLQUFLLENBQUMsUUFBUSxDQUNmLENBQUM7WUFFSixJQUNFLHVCQUF1QixHQUFHLENBQUM7Z0JBQzNCLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQ3hDO2dCQUNBLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQXVCLENBQUM7YUFDekM7U0FDRjtRQUVELElBQUk7WUFDRixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMzRTtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMzRDtnQkFBUztZQUNSLElBQUksZ0JBQWdCLEtBQUssSUFBSSxFQUFFO2dCQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDO2FBQ2xDO1NBQ0Y7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx3QkFBd0I7SUFFeEIsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzdEO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBYTtRQUN4QixJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDekI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtnQkFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRztvQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUTtvQkFDckMsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQzthQUNIO1lBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssWUFBWSxFQUFFO2dCQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHO29CQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRO29CQUNyQyxLQUFLLEVBQUUsTUFBTTtpQkFDZCxDQUFDO2FBQ0g7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGNBQWM7Z0JBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztvQkFDcEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDekI7YUFBTTtZQUNMLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsY0FBYztnQkFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDekIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO29CQUNwRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQ3hEO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQ3pELEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXO1NBQy9ELENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHO2dCQUNiLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTthQUNwQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDekI7YUFBTTtZQUNMLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQscUJBQXFCO0lBRXJCLFdBQVcsQ0FBQyxHQUFNO1FBQ2hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDNUIsT0FBTztTQUNSO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsR0FBK0MsQ0FBQztRQUNsRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN6RCxDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELG1CQUFtQjtJQUVuQixLQUFLLENBQUMsV0FBVyxDQUFDLE1BSWpCO1FBQ0MsSUFBSTtZQUNGLElBQUksUUFBeUQsQ0FBQztZQUM5RCxJQUNFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRTtnQkFDaEIsTUFBTSxDQUFDLEVBQUUsS0FBSyxTQUFTO2dCQUN2QixNQUFNLENBQUMsVUFBVSxLQUFLLFNBQVM7Z0JBQy9CLE1BQU0sQ0FBQyxVQUFVLEtBQUssRUFBRSxFQUN4QjtnQkFDQSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUNsRSxDQUFDO2FBQ0g7WUFDRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUMvQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUF5QyxDQUFDO2dCQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUMvQztZQUNELE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYTtRQUN6QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO2FBQ2hELE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQzthQUM3QixPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUM1QixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hCLE1BQU0sVUFBVSxHQUFHLElBQStCLENBQUM7Z0JBQ25ELFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDO29CQUNoRCxFQUFFLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDekQsVUFBVSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCO29CQUMzQyxXQUFXLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxHQUFHLENBQUMsUUFBUTtpQkFDM0QsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUosTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsTUFRcEI7UUFDQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBK0IsQ0FBQztRQUMxRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTO2FBQ2xDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzthQUN0QyxHQUFHLENBQUMsS0FBSyxDQUNSLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUN4QixNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFDeEIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQ2xDO2FBQ0EsR0FBRyxFQUFFLENBQUM7UUFDVCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0I7UUFDNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7YUFDOUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO2FBQ2hDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzVCLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRTtnQkFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBK0IsQ0FBQztnQkFDbkQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUM7b0JBQ25ELElBQUksRUFBRSxJQUFJO29CQUNWLFFBQVEsRUFBRSxHQUFHLENBQUMsV0FBVztpQkFDMUIsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDdEMsTUFBTSxnQkFBZ0IsR0FDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQ3pCLElBQUksQ0FBQyxRQUFvRCxDQUMxRCxDQUFDO29CQUNKLElBQUksZ0JBQWdCLEVBQUU7d0JBQ3BCLE1BQU0sVUFBVSxHQUFHLElBQStCLENBQUM7d0JBQ25ELE9BQU8sZ0JBQWdCLENBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FDbEIsQ0FBQztxQkFDSDtvQkFDRCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO0lBRWpCLEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO2FBQU07WUFDTCxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxrQkFBa0IsQ0FBSSxFQUFFLENBQUMsQ0FBQztTQUNqRDtRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FDcEQsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQzVCLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUMzQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDO1FBQ2hELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxZQUFZLENBQUMscUJBQXFCLENBQUM7UUFFaEUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FDMUQsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FDNUIsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUM1QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSTtZQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztTQUN2RDtRQUFDLE1BQU07WUFDTixPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBRWhDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQ2xDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRTtnQkFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN4RDtZQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3pEO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUM5RDtTQUNGO0lBQ0gsQ0FBQzs7NEVBcjZCVSxjQUFjO2lFQUFkLGNBQWM7dUJBNkNkLFlBQVk7dUJBQ1osT0FBTzs7Ozs7O1FDN0dwQixpRUFxd0JNOztRQXJ3QkEsK0JBQVU7O3VGRCtESCxjQUFjO2NBUDFCLFNBQVM7MkJBQ0UsV0FBVyxjQUNULEtBQUssbUJBR0EsdUJBQXVCLENBQUMsTUFBTTtxUUFNdEMsSUFBSTtrQkFBWixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQXdDbUIsU0FBUztrQkFBakMsU0FBUzttQkFBQyxZQUFZO1lBQ0gsSUFBSTtrQkFBdkIsU0FBUzttQkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXJyYW5nZSxcbiAgQ29uZGl0aW9uLFxuICBUYWJEYXRhLFxuICBUYWJsZURhdGEsXG4gIENvbHVtbixcbiAgVEFCTEVfREVGQVVMVFMsXG4gIERyb3Bkb3duSXRlbSxcbiAgRmlsdGVyU2VsZWN0SXRlbSxcbiAgUGFnaW5hdGlvbixcbn0gZnJvbSAnLi4vLi4vdHlwZXMvVGFibGUnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgRWxlbWVudFJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQW5ndWxhckZpcmVzdG9yZSxcbiAgUXVlcnlEb2N1bWVudFNuYXBzaG90LFxufSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdC9maXJlc3RvcmUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2x0aXBTZXJ2aWNlLCBUb29sdGlwU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b29sdGlwLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgZ2V0RGlzcGxheVZhbHVlLFxuICBnZXROZXN0ZWRWYWx1ZSxcbiAgaXNTdHJpbmcsXG4gIHRyYWNrQnlQcm9wZXJ0eSxcbiAgZ2V0SW1hZ2VLZXksXG59IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxlLnV0aWxzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZmlyc3RWYWx1ZUZyb20sXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbiAgQmVoYXZpb3JTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9yZGVyQnlEaXJlY3Rpb24gfSBmcm9tICdmaXJlYmFzZS9maXJlc3RvcmUnO1xuaW1wb3J0IGZpcmViYXNlIGZyb20gJ2ZpcmViYXNlL2NvbXBhdCc7XG5pbXBvcnQgV2hlcmVGaWx0ZXJPcCA9IGZpcmViYXNlLmZpcmVzdG9yZS5XaGVyZUZpbHRlck9wO1xuaW1wb3J0IGZpcmVzdG9yZSA9IGZpcmViYXNlLmZpcmVzdG9yZTtcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUID0gYW55PlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgLy8gSU5QVVRTXG4gIEBJbnB1dCgpIGRhdGEhOiBUYWJsZURhdGE7XG4gIEBJbnB1dCgpIGRvd25sb2FkVGFibGU/OiAoYXJyYW5nZTogQXJyYW5nZSwgY29uZGl0aW9uczogQ29uZGl0aW9uW10pID0+IHZvaWQ7XG4gIGFycmFuZ2U6IEFycmFuZ2UgfCBudWxsID0gbnVsbDtcblxuICAvLyBWQVJJQUJMRVNcbiAgZGF0YVNvdXJjZSE6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPjtcbiAgY3VycmVudFBhZ2VOdW1iZXIgPSAxO1xuICBjdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcblxuICBwdWJsaWMgaXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBpdGVtczogVFtdID0gW107XG4gIHB1YmxpYyBmaWx0ZXJlZEl0ZW1zOiBUW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0RG9jOiBRdWVyeURvY3VtZW50U25hcHNob3Q8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmaXJzdERvYzogUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc29ydEJ5OiB7IGZpZWxkOiBzdHJpbmc7IG9yZGVyOiBPcmRlckJ5RGlyZWN0aW9uIH0gPSB7XG4gICAgZmllbGQ6IFRBQkxFX0RFRkFVTFRTLlNPUlRfRklFTEQsXG4gICAgb3JkZXI6IFRBQkxFX0RFRkFVTFRTLlNPUlRfT1JERVIsXG4gIH07XG4gIHB1YmxpYyBjb2x1bW5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZpbHRlcnNGb3JtOiBGb3JtQXJyYXk7XG4gIHNlbGVjdFNvcnQ6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgY3VycmVudEFycmFuZ2UgPSAnJztcblxuICBoYXNOZXh0UGFnZTogYm9vbGVhbiA9IGZhbHNlO1xuICBkcm9wZG93bkl0ZW1zOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuICBzb3J0YWJsZURyb3Bkb3duSXRlbXM6IERyb3Bkb3duSXRlbVtdID0gW107XG4gIHBhZ2VTaXplID0gVEFCTEVfREVGQVVMVFMuUEFHRV9TSVpFO1xuICB0b3RhbEl0ZW1zID0gMDtcbiAgcGFnZUV2ZW50PzogUGFnZUV2ZW50O1xuICBmaWx0ZXJWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgaGFzRmlsdGVyYWJsZUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBoYXNTb3J0YWJsZUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXJQcmVkaWNhdGU6ICgoZGF0YTogVCwgZmlsdGVyOiBzdHJpbmcpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGZpbHRlclN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VUaW1lTXMgPSBUQUJMRV9ERUZBVUxUUy5ERUJPVU5DRV9USU1FX01TO1xuXG4gIHNlbGVjdGVkVGFiOiBudW1iZXIgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XG5cbiAgLy8gUHJvcHJpZWRhZGVzIHBhcmEgY29udHJvbGUgZG8gdG9vbHRpcFxuICB0b29sdGlwU3RhdGU6IFRvb2x0aXBTdGF0ZTtcblxuICAvLyBDb250cm9sZSBkZSBsb2FkaW5nIGRlIGltYWdlbnNcbiAgaW1hZ2VMb2FkaW5nU3RhdGUgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBDT05TVFJVQ1RPUlxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbHRpcFNlcnZpY2U6IFRvb2x0aXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlyZXN0b3JlOiBBbmd1bGFyRmlyZXN0b3JlLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICB0aGlzLmZpbHRlcnNGb3JtID0gbmV3IEZvcm1BcnJheShbdGhpcy5maWx0ZXJTZXJ2aWNlLmNyZWF0ZUZpbHRlckdyb3VwKCldKTtcbiAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHRoaXMudG9vbHRpcFNlcnZpY2UuY3JlYXRlSW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBnZXRBY3Rpb25CdXR0b25DbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5kYXRhPy5hY3Rpb25CdXR0b24/LmNvbG9yQ2xhc3MgfHwgJ2JnLWJsdWUtNTAwJykgK1xuICAgICAgJyBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgaG92ZXI6b3BhY2l0eS03MCdcbiAgICApO1xuICB9XG5cbiAgZ2V0VGFibGVSb3dOZ0NsYXNzKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2V4YW1wbGUtZWxlbWVudC1yb3cnOiB0aGlzLmRhdGE/LmlzTm90Q2xpY2thYmxlID09PSB0cnVlLFxuICAgICAgJ2V4YW1wbGUtZWxlbWVudC1yb3cgY3Vyc29yLXBvaW50ZXInOiAhdGhpcy5kYXRhPy5pc05vdENsaWNrYWJsZSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0UGFnaW5hdG9yTmdDbGFzcygpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdoaWRlLWxlbmd0aCc6XG4gICAgICAgIFsnZmlsdGVyJywgJ2ZpbHRlckJ5RGF0ZScsICdlcXVhbHMnXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRBcnJhbmdlKSB8fFxuICAgICAgICAhIXRoaXMuZGF0YT8uZmlsdGVyRm4sXG4gICAgICAnaGlkZS1uZXh0LWJ1dHRvbic6XG4gICAgICAgICF0aGlzLmhhc05leHRQYWdlICYmIHRoaXMuZGF0YT8ucGFnaW5hdGlvbiA9PT0gdHJ1ZSxcbiAgICAgICdoaWRlLWxhc3QtYnV0dG9uJzpcbiAgICAgICAgKCF0aGlzLmhhc05leHRQYWdlICYmIHRoaXMuZGF0YT8ucGFnaW5hdGlvbiA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgISF0aGlzLmRhdGE/LmZpbHRlckZuLFxuICAgIH07XG4gIH1cblxuICAvLyBGSUxURVIgTUVUSE9EUyAoZGVsZWdhZG9zIGFvIEZpbHRlclNlcnZpY2UpXG5cbiAgY3JlYXRlRmlsdGVyR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXJ2aWNlLmNyZWF0ZUZpbHRlckdyb3VwKCk7XG4gIH1cblxuICBhZGRGaWx0ZXIoZmlsdGVyRGF0YT86IHtcbiAgICBzZWxlY3RGaWx0ZXI6IERyb3Bkb3duSXRlbSB8IG51bGw7XG4gICAgdHlwZUZpbHRlcj86IHN0cmluZztcbiAgICBzZWxlY3RJdGVtPzogRmlsdGVyU2VsZWN0SXRlbVtdO1xuICAgIGluaXRpYWxEYXRlPzogc3RyaW5nO1xuICAgIGZpbmFsRGF0ZT86IHN0cmluZztcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5hZGRGaWx0ZXIoXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUsXG4gICAgICBmaWx0ZXJEYXRhLFxuICAgICk7XG4gIH1cblxuICBoYXNBY3RpdmVEYXRlRmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuaGFzQWN0aXZlRGF0ZUZpbHRlcih0aGlzLmZpbHRlcnNGb3JtKTtcbiAgfVxuXG4gIGdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoKTogRHJvcGRvd25JdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0QXZhaWxhYmxlRmlsdGVyT3B0aW9ucyhcbiAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyxcbiAgICAgIHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlLFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICApO1xuICB9XG5cbiAgb25TZWxlY3RGaWx0ZXJDaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RGaWx0ZXIgPSB0aGlzLmZpbHRlcnNGb3JtLmF0KGxhc3RJbmRleCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXIgPSBsYXN0RmlsdGVyLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlO1xuXG4gICAgaWYgKHNlbGVjdGVkRmlsdGVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyLmFycmFuZ2UgPT09ICdmaWx0ZXJCeURhdGUnICYmXG4gICAgICAgIHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRGaWx0ZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVGaWx0ZXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5yZW1vdmVGaWx0ZXIodGhpcy5maWx0ZXJzRm9ybSwgaW5kZXgpO1xuICB9XG5cbiAgcmVtb3ZlQWxsRmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UucmVtb3ZlQWxsRmlsdGVycyh0aGlzLmZpbHRlcnNGb3JtKTtcbiAgICB0aGlzLnJlc2V0RmlsdGVyKCk7XG4gIH1cblxuICBvbkRhdGVJbnB1dChcbiAgICBldmVudDogRXZlbnQsXG4gICAgY29udHJvbE5hbWU6ICdpbml0aWFsRGF0ZScgfCAnZmluYWxEYXRlJyxcbiAgICBmaWx0ZXJJbmRleDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJHcm91cCA9IHRoaXMuZmlsdGVyc0Zvcm0uYXQoZmlsdGVySW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UuYXBwbHlEYXRlTWFzayhldmVudCwgY29udHJvbE5hbWUsIGZpbHRlckdyb3VwKTtcbiAgfVxuXG4gIG9uRGF0ZUZpbHRlckNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFycmFuZ2UgPSB0aGlzLmZpbHRlclNlcnZpY2UuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoXG4gICAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICAgIHRoaXMuc29ydEJ5LFxuICAgICAgKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzVG9EYXRhU291cmNlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyc1RvRGF0YVNvdXJjZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSkgcmV0dXJuO1xuXG4gICAgbGV0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLmZpbHRlclNlcnZpY2UuYXBwbHlDbGllbnRTaWRlRmlsdGVyczxUPihcbiAgICAgIFsuLi50aGlzLml0ZW1zXSxcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICB0aGlzLnNvcnRCeSxcbiAgICApO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZmlsdGVyZWRJdGVtcztcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBmaWx0ZXJlZEl0ZW1zO1xuICAgIHRoaXMudG90YWxJdGVtcyA9IGZpbHRlcmVkSXRlbXMubGVuZ3RoO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q2xpZW50U2lkZUZpbHRlcnMoaXRlbXM6IFRbXSk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5hcHBseUNsaWVudFNpZGVGaWx0ZXJzPFQ+KFxuICAgICAgaXRlbXMsXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5zb3J0QnksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoKTogQXJyYW5nZSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5idWlsZEFycmFuZ2VGcm9tRmlsdGVycyhcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICB0aGlzLnNvcnRCeSxcbiAgICApO1xuICB9XG5cbiAgLy8gVE9PTFRJUCBNRVRIT0RTIChkZWxlZ2Fkb3MgYW8gVG9vbHRpcFNlcnZpY2UpXG5cbiAgZ2V0VG9vbHRpcFN0eWxlcygpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwU2VydmljZS5nZXRUb29sdGlwU3R5bGVzKHRoaXMudG9vbHRpcFN0YXRlKTtcbiAgfVxuXG4gIG9uQ2VsbE1vdXNlRW50ZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogVCwgY29sOiBDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlRW50ZXIoXG4gICAgICBldmVudCxcbiAgICAgIHJvdyxcbiAgICAgIGNvbCxcbiAgICAgIChjLCByLCB3KSA9PiB0aGlzLmdldERpc3BsYXlWYWx1ZShjLCByLCB3KSxcbiAgICAgIChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHsgLi4udGhpcy50b29sdGlwU3RhdGUsIC4uLnN0YXRlIH07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgb25DZWxsTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlTGVhdmUoKHN0YXRlKSA9PiB7XG4gICAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHN0YXRlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkNlbGxNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlTW92ZShcbiAgICAgIGV2ZW50LFxuICAgICAgdGhpcy50b29sdGlwU3RhdGUuc2hvd1Rvb2x0aXAsXG4gICAgICAocG9zaXRpb24pID0+IHtcbiAgICAgICAgdGhpcy50b29sdGlwU3RhdGUgPSB7IC4uLnRoaXMudG9vbHRpcFN0YXRlLCB0b29sdGlwUG9zaXRpb246IHBvc2l0aW9uIH07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVEFCIE1FVEhPRFNcblxuICBvblRhYlNlbGVjdGVkKGV2ZW50OiB7IHRhYjogVGFiRGF0YTsgaW5kZXg6IG51bWJlciB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGEudGFicz8ubWV0aG9kKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IGV2ZW50LmluZGV4O1xuICAgIHRoaXMuZGF0YS50YWJzLm1ldGhvZChldmVudC50YWIsIGV2ZW50LmluZGV4KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIFVUSUxJVFkgTUVUSE9EUyAoZGVsZWdhZG9zIGFvcyB1dGlscylcblxuICBnZXREaXNwbGF5VmFsdWUoY29sOiBDb2x1bW4sIHJvdzogVCwgd2l0aGluTGltaXQ6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgd2l0aGluTGltaXQpO1xuICB9XG5cbiAgZ2V0TmVzdGVkVmFsdWUob2JqOiB1bmtub3duLCBwYXRoOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUob2JqLCBwYXRoKTtcbiAgfVxuXG4gIGlzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHRyYWNrQnlQcm9wZXJ0eShfaW5kZXg6IG51bWJlciwgY29sOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0cmFja0J5UHJvcGVydHkoX2luZGV4LCBjb2wpO1xuICB9XG5cbiAgLy8gSU1BR0UgTE9BRElORyBNRVRIT0RTXG5cbiAgcHJpdmF0ZSBnZXRJbWFnZUtleShyb3c6IFQsIGNvbDogQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICB9XG5cbiAgaXNJbWFnZUxvYWRpbmcocm93OiBULCBjb2w6IENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICAgIHJldHVybiAhdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5oYXMoa2V5KTtcbiAgfVxuXG4gIG9uSW1hZ2VMb2FkKHJvdzogVCwgY29sOiBDb2x1bW4pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEltYWdlS2V5KHJvdywgY29sKTtcbiAgICB0aGlzLmltYWdlTG9hZGluZ1N0YXRlLnNldChrZXksIHRydWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25JbWFnZUVycm9yKGV2ZW50OiBFdmVudCwgcm93OiBULCBjb2w6IENvbHVtbiwgZGVmYXVsdEltYWdlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRJbWFnZUtleShyb3csIGNvbCk7XG4gICAgdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5zZXQoa2V5LCB0cnVlKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGlmIChkZWZhdWx0SW1hZ2UpIHtcbiAgICAgICAgdGFyZ2V0LnNyYyA9IGRlZmF1bHRJbWFnZTtcbiAgICAgICAgdGFyZ2V0Lm9uZXJyb3IgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBMSUZFQ1lDTEUgTUVUSE9EU1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXBwbHlDdXN0b21Db2xvcnMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXBwbHlDdXN0b21Db2xvcnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcFNlcnZpY2UuZGVzdHJveSgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDdXN0b21Db2xvcnMoKTogdm9pZCB7XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmVsPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghaG9zdEVsZW1lbnQgfHwgIXRoaXMuZGF0YSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5jb2xvcj8uYmcpIHtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLWNvbG9yJywgdGhpcy5kYXRhLmNvbG9yLmJnKTtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLWhlYWRlci1iZycsIHRoaXMuZGF0YS5jb2xvci5iZyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LnRleHQpIHtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLXRleHQtY29sb3InLCB0aGlzLmRhdGEuY29sb3IudGV4dCk7XG4gICAgICBob3N0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0tdGFibGUtaGVhZGVyLXRleHQnLFxuICAgICAgICB0aGlzLmRhdGEuY29sb3IudGV4dCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJDZWxscyA9IGhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICcubWF0LWhlYWRlci1jZWxsLCAubWF0LW1kYy1oZWFkZXItY2VsbCwgdGgubWF0LWhlYWRlci1jZWxsLCB0aC5tYXQtbWRjLWhlYWRlci1jZWxsJyxcbiAgICAgICk7XG4gICAgICBoZWFkZXJDZWxscy5mb3JFYWNoKChjZWxsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmNvbG9yPy5iZykge1xuICAgICAgICAgIGNlbGwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kYXRhLmNvbG9yLmJnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LnRleHQpIHtcbiAgICAgICAgICBjZWxsLnN0eWxlLmNvbG9yID0gdGhpcy5kYXRhLmNvbG9yLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmRhdGEuY29sb3IpIHtcbiAgICAgIHRoaXMuZGF0YS5jb2xvciA9IHtcbiAgICAgICAgYmc6IFRBQkxFX0RFRkFVTFRTLkRFRkFVTFRfQkdfQ09MT1IsXG4gICAgICAgIHRleHQ6IFRBQkxFX0RFRkFVTFRTLkRFRkFVTFRfVEVYVF9DT0xPUixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuc2hvd1NpbXBsZVNlYXJjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRhdGEuc2hvd1NpbXBsZVNlYXJjaCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5Qcm9wZXJ0aWVzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMubWFwKFxuICAgICAgKGNvbHVtbikgPT4gY29sdW1uLnByb3BlcnR5LFxuICAgICk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICBpZiAodGhpcy5kYXRhLmFjdGlvbkJ1dHRvbiAmJiAhdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24pIHtcbiAgICAgIHRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uID0gKF9yb3c/OiBUKSA9PiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEluaWNpYWxpemFyIGRyb3Bkb3duSXRlbXMgdXNhbmRvIEZpbHRlclNlcnZpY2VcbiAgICBjb25zdCBmaWx0ZXJDb25maWcgPSB0aGlzLmZpbHRlclNlcnZpY2UuaW5pdGlhbGl6ZURyb3Bkb3duSXRlbXMoXG4gICAgICB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucyxcbiAgICApO1xuICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5kcm9wZG93bkl0ZW1zO1xuICAgIHRoaXMuc29ydGFibGVEcm9wZG93bkl0ZW1zID0gZmlsdGVyQ29uZmlnLnNvcnRhYmxlRHJvcGRvd25JdGVtcztcbiAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPSBmaWx0ZXJDb25maWcuaGFzRmlsdGVyYWJsZUNvbHVtbjtcbiAgICB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID0gZmlsdGVyQ29uZmlnLmhhc1NvcnRhYmxlQ29sdW1uO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucykge1xuICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmFkZEZpbHRlcmFibGVPcHRpb25zKFxuICAgICAgICB0aGlzLmRyb3Bkb3duSXRlbXMsXG4gICAgICAgIHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU2VtIHBhZ2luYcOnw6NvXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXMoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIENvbSBwYWdpbmHDp8Ojb1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuZGF0YS5zb3J0QnkpIHtcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuZGF0YS5zb3J0QnkuZmllbGQsXG4gICAgICAgICAgb3JkZXI6IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlclN1YmplY3RcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lTXMpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG5cbiAgICAgIHRoaXMuc29ydC5hY3RpdmUgPSAnY3JlYXRlZEF0JztcbiAgICAgIHRoaXMuc29ydC5kaXJlY3Rpb24gPSAnZGVzYyc7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XG4gICAgICBpZiAodGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICAgIGZvciAoY29uc3QgdG90YWxSZWYgb2YgdGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICAgICAgY29uc3QgdG90YWxSZWZEb2MgPSBhd2FpdCB0b3RhbFJlZi5yZWYuZ2V0KCk7XG4gICAgICAgICAgY29uc3QgZG9jRGF0YSA9IHRvdGFsUmVmRG9jLmRhdGEoKSBhc1xuICAgICAgICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGRvY0RhdGEgJiYgZG9jRGF0YVt0b3RhbFJlZi5maWVsZF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBkb2NEYXRhW3RvdGFsUmVmLmZpZWxkXTtcbiAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9ICh0aGlzLnRvdGFsSXRlbXMgK1xuICAgICAgICAgICAgICAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdudW1iZXInID8gZmllbGRWYWx1ZSA6IDApKSBhcyBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyBEQVRBIExPQURJTkcgTUVUSE9EU1xuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEl0ZW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuY2xlYXIoKTtcbiAgICB0aGlzLml0ZW1zID0gKGF3YWl0IHRoaXMudGFibGVTZXJ2aWNlLmdldEl0ZW1zKFxuICAgICAgdGhpcy5kYXRhLmNvbGxlY3Rpb25SZWYsXG4gICAgKSkgYXMgVFtdO1xuICAgIGlmICh0aGlzLmRhdGEuY29uZGl0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmxvYWRSZWxhdGlvbnMoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRRdWVyeUxlbmd0aHMoKTtcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcblxuICAgIHRoaXMuYXJyYW5nZSA9IHtcbiAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgc29ydEJ5OiB0aGlzLmRhdGEuc29ydEJ5IHx8IHtcbiAgICAgICAgZmllbGQ6IFRBQkxFX0RFRkFVTFRTLlNPUlRfRklFTEQsXG4gICAgICAgIG9yZGVyOiBUQUJMRV9ERUZBVUxUUy5TT1JUX09SREVSLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuc29ydEJ5ID0gdGhpcy5kYXRhLnNvcnRCeSB8fCB7XG4gICAgICBmaWVsZDogVEFCTEVfREVGQVVMVFMuU09SVF9GSUVMRCxcbiAgICAgIG9yZGVyOiBUQUJMRV9ERUZBVUxUUy5TT1JUX09SREVSLFxuICAgIH07XG5cbiAgICBsZXQgaXRlbXNUb0Rpc3BsYXkgPSBbLi4udGhpcy5pdGVtc107XG4gICAgaXRlbXNUb0Rpc3BsYXkgPSB0aGlzLmFwcGx5Q2xpZW50U2lkZUZpbHRlcnMoaXRlbXNUb0Rpc3BsYXkpO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IGl0ZW1zVG9EaXNwbGF5O1xuXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShpdGVtc1RvRGlzcGxheSk7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgIGlmICh0aGlzLmRhdGEuc29ydEJ5KSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydC5hY3RpdmUgPSB0aGlzLmRhdGEuc29ydEJ5LmZpZWxkO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQuZGlyZWN0aW9uID0gdGhpcy5kYXRhLnNvcnRCeS5vcmRlcjtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0LnNvcnRDaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAoZGF0YSwgZmlsdGVyOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLnNvbWUoKGNvbCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoY29sLmZpbHRlclByZWRpY2F0ZXMpIHtcbiAgICAgICAgICByZXR1cm4gY29sLmZpbHRlclByZWRpY2F0ZXMuc29tZSgocHJlZGljYXRlKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gaXRlbVtjb2wucHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVZhbHVlIHx8IHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5UmVjb3JkID0gcHJvcGVydHlWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZVZhbHVlID0gcHJvcGVydHlSZWNvcmRbcHJlZGljYXRlXTtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGVWYWx1ZSA9PT0gbnVsbCB8fCBwcmVkaWNhdGVWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwcmVkaWNhdGVWYWx1ZSlcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgICAuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wucHJvcGVydHkgJiYgY29sLmlzRmlsdGVyYWJsZSkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBpdGVtW2NvbC5wcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPT09IG51bGwgfHwgcHJvcGVydHlWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFN0cmluZyhwcm9wZXJ0eVZhbHVlKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkSXRlbXNQYWdpbmF0ZWQoXG4gICAgbmF2aWdhdGlvbjogJ3JlbG9hZCcgfCAnZm9yd2FyZCcgfCAnYmFja3dhcmQnID0gJ3JlbG9hZCcsXG4gICAgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5jbGVhcigpO1xuICAgIGlmIChyZXNldCAmJiBbJ2ZvcndhcmQnLCAncmVsb2FkJ10uaW5jbHVkZXMobmF2aWdhdGlvbikpIHtcbiAgICAgIHRoaXMubGFzdERvYyA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH1cbiAgICBpZiAocmVzZXQgJiYgWydiYWNrd2FyZCcsICdyZWxvYWQnXS5pbmNsdWRlcyhuYXZpZ2F0aW9uKSkge1xuICAgICAgdGhpcy5maXJzdERvYyA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZXh0cmFjdEFjdGl2ZUZpbHRlcnMoXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICk7XG5cbiAgICB0aGlzLmFycmFuZ2UgPSB7XG4gICAgICBmaWx0ZXJzOiBhY3RpdmVGaWx0ZXJzLFxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcbiAgICB9O1xuXG4gICAgY29uc3QgcGFnaW5hdGVkOiBQYWdpbmF0aW9uID0ge1xuICAgICAgYmF0Y2hTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY29sbGVjdGlvbjogdGhpcy5kYXRhLmNvbGxlY3Rpb24sXG4gICAgICBkb2M6IHsgbGFzdERvYzogdGhpcy5sYXN0RG9jLCBmaXJzdERvYzogdGhpcy5maXJzdERvYyB9LFxuICAgICAgbmF2aWdhdGlvbixcbiAgICAgIGFycmFuZ2U6IHRoaXMuYXJyYW5nZSEsXG4gICAgICBjb25kaXRpb25zOiB0aGlzLmRhdGEuY29uZGl0aW9ucyxcbiAgICAgIHNpemU6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgIGZpbHRlckZuOiB0aGlzLmRhdGEuZmlsdGVyRm4sXG4gICAgICBjbGllbnRQYWdlSW5kZXg6IHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50YWJsZVNlcnZpY2UuZ2V0UGFnaW5hdGVkKHBhZ2luYXRlZCk7XG4gICAgdGhpcy5pdGVtcyA9IHJlc3VsdC5pdGVtcyBhcyBUW107XG4gICAgYXdhaXQgdGhpcy5sb2FkUmVsYXRpb25zKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkUXVlcnlMZW5ndGhzKCk7XG4gICAgdGhpcy5sYXN0RG9jID0gcmVzdWx0Lmxhc3REb2MgYXMgUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbDtcbiAgICB0aGlzLmZpcnN0RG9jID0gcmVzdWx0LmZpcnN0RG9jIGFzIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxUPiB8IG51bGw7XG5cbiAgICBpZiAocmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gcmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgbGV0IHN1bSA9IDA7XG4gICAgaWYgKHRoaXMuZGF0YS50b3RhbFJlZikge1xuICAgICAgZm9yIChjb25zdCB0b3RhbFJlZiBvZiB0aGlzLmRhdGEudG90YWxSZWYpIHtcbiAgICAgICAgY29uc3QgdG90YWxSZWZEb2MgPSBhd2FpdCB0b3RhbFJlZi5yZWYuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGRvY0RhdGEgPSB0b3RhbFJlZkRvYy5kYXRhKCkgYXNcbiAgICAgICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChkb2NEYXRhIHx8IHJlc3VsdC5maWx0ZXJMZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gZG9jRGF0YSA/IGRvY0RhdGFbdG90YWxSZWYuZmllbGRdIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHR5cGVvZiBmaWVsZFZhbHVlID09PSAnbnVtYmVyJyA/IGZpZWxkVmFsdWUgOiAwO1xuICAgICAgICAgIHN1bSA9IHJlc3VsdC5maWx0ZXJMZW5ndGggPz8gKChzdW0gKyBudW1lcmljVmFsdWUpIGFzIG51bWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHN1bTtcbiAgICB9XG5cbiAgICB0aGlzLmhhc05leHRQYWdlID0gcmVzdWx0Lmhhc05leHRQYWdlO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5pdGVtcyk7XG4gICAgdGhpcy5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gUEFHSU5BVElPTiBNRVRIT0RTXG5cbiAgYXN5bmMgb25QYWdlQ2hhbmdlKGV2ZW50PzogUGFnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uICE9PSB0cnVlIHx8ICFldmVudCkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB7XG4gICAgICBjdXJyZW50UGFnZU51bWJlcjogdGhpcy5jdXJyZW50UGFnZU51bWJlcixcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgdG90YWxJdGVtczogdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgaGFzTmV4dFBhZ2U6IHRoaXMuaGFzTmV4dFBhZ2UsXG4gICAgfTtcblxuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZU5hdmlnYXRpb24oXG4gICAgICBldmVudCxcbiAgICAgIGN1cnJlbnRTdGF0ZSxcbiAgICApO1xuXG4gICAgaWYgKCFuYXZpZ2F0aW9uLnNob3VsZE5hdmlnYXRlKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLnBhZ2VFdmVudCA9IGV2ZW50O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEF0dWFsaXphciBlc3RhZG8gbG9jYWxcbiAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSBuYXZpZ2F0aW9uLm5ld0NsaWVudFBhZ2VJbmRleDtcbiAgICB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyID0gbmF2aWdhdGlvbi5uZXdQYWdlTnVtYmVyO1xuXG4gICAgLy8gQXR1YWxpemFyIHBhZ2VTaXplIHNlIG11ZG91XG4gICAgaWYgKGV2ZW50LnBhZ2VTaXplICE9PSB0aGlzLnBhZ2VTaXplKSB7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XG4gICAgfVxuXG4gICAgLy8gQWp1c3RhciBwYWdlU2l6ZSB0ZW1wb3JhcmlhbWVudGUgcGFyYSDDumx0aW1hIHDDoWdpbmEgc2UgbmVjZXNzw6FyaW9cbiAgICBjb25zdCBsYXN0UGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVMYXN0UGFnZUluZGV4KFxuICAgICAgdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgZXZlbnQucGFnZVNpemUsXG4gICAgKTtcbiAgICBsZXQgb3JpZ2luYWxQYWdlU2l6ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoXG4gICAgICBldmVudC5wYWdlSW5kZXggPT09IGxhc3RQYWdlSW5kZXggJiZcbiAgICAgIG5hdmlnYXRpb24uZGlyZWN0aW9uID09PSAnYmFja3dhcmQnICYmXG4gICAgICBuYXZpZ2F0aW9uLnJlc2V0RG9jc1xuICAgICkge1xuICAgICAgY29uc3QgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPVxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZUxhc3RQYWdlSXRlbUNvdW50KFxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICBldmVudC5wYWdlU2l6ZSxcbiAgICAgICAgKTtcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZSA+IDAgJiZcbiAgICAgICAgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPCBldmVudC5wYWdlU2l6ZVxuICAgICAgKSB7XG4gICAgICAgIG9yaWdpbmFsUGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKG5hdmlnYXRpb24uZGlyZWN0aW9uLCBuYXZpZ2F0aW9uLnJlc2V0RG9jcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gY2FycmVnYXIgaXRlbnMgcGFnaW5hZG9zOicsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKG9yaWdpbmFsUGFnZVNpemUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IG9yaWdpbmFsUGFnZVNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYWdlRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBGSUxURVIvU0VBUkNIIE1FVEhPRFNcblxuICBhcHBseUZpbHRlcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9IFN0cmluZyh2YWx1ZSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQodGhpcy5maWx0ZXJWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VhcmNoKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RTb3J0LnZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RTb3J0LnZhbHVlLmFycmFuZ2UgPT09ICdhc2NlbmRpbmcnKSB7XG4gICAgICAgIHRoaXMuc29ydEJ5ID0ge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLnNlbGVjdFNvcnQudmFsdWUucHJvcGVydHksXG4gICAgICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0U29ydC52YWx1ZS5hcnJhbmdlID09PSAnZGVzY2VuZGluZycpIHtcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuc2VsZWN0U29ydC52YWx1ZS5wcm9wZXJ0eSxcbiAgICAgICAgICBvcmRlcjogJ2Rlc2MnLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYXJyYW5nZSA9IHRoaXMuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzVG9EYXRhU291cmNlKCk7XG4gICAgICB0aGlzLmN1cnJlbnRBcnJhbmdlID1cbiAgICAgICAgdGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggPiAwXG4gICAgICAgICAgPyAodGhpcy5maWx0ZXJzRm9ybS5hdCgwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA/PyAnJylcbiAgICAgICAgICA6ICcnO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPVxuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICh0aGlzLmZpbHRlcnNGb3JtLmF0KDApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID8/ICcnKVxuICAgICAgICAgIDogJyc7XG4gICAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlc2V0RmlsdGVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAnJztcbiAgICBpZiAodGhpcy5maWx0ZXJQcmVkaWNhdGUpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmZpbHRlclByZWRpY2F0ZTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNsZWFyKCk7XG4gICAgdGhpcy5hZGRGaWx0ZXIoKTtcbiAgICB0aGlzLnNlbGVjdFNvcnQucGF0Y2hWYWx1ZSgnJyk7XG4gICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICBvcmRlcjogdGhpcy5kYXRhLnNvcnRCeSA/IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXIgOiAnZGVzYycsXG4gICAgICBmaWVsZDogdGhpcy5kYXRhLnNvcnRCeSA/IHRoaXMuZGF0YS5zb3J0QnkuZmllbGQgOiAnY3JlYXRlZEF0JyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hcnJhbmdlID0ge1xuICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcbiAgICAgIH07XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi50aGlzLml0ZW1zXTtcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9ICcnO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPSAnJztcbiAgICAgIHRoaXMucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gTkFWSUdBVElPTiBNRVRIT0RTXG5cbiAgZ29Ub0RldGFpbHMocm93OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5pc05vdENsaWNrYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5kYXRhLnVybCB8fCB0aGlzLmRhdGEubmFtZTtcbiAgICBjb25zdCByb3dXaXRoSWQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IGlkOiBzdHJpbmcgfTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwoXG4gICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtgLyR7dXJsUGF0aH1gLCByb3dXaXRoSWQuaWRdKSxcbiAgICApO1xuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICB9XG5cbiAgLy8gUkVMQVRJT04gTUVUSE9EU1xuXG4gIGFzeW5jIGdldFJlbGF0aW9uKHBhcmFtczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29sbGVjdGlvbjogc3RyaW5nO1xuICAgIG5ld1Byb3BlcnR5OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgc25hcHNob3Q6IGZpcmVzdG9yZS5Eb2N1bWVudFNuYXBzaG90PHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKFxuICAgICAgICBwYXJhbXMuaWQgIT09ICcnICYmXG4gICAgICAgIHBhcmFtcy5pZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgcGFyYW1zLmNvbGxlY3Rpb24gIT09ICcnXG4gICAgICApIHtcbiAgICAgICAgc25hcHNob3QgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uKHBhcmFtcy5jb2xsZWN0aW9uKS5kb2MocGFyYW1zLmlkKS5nZXQoKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzbmFwc2hvdCAmJiBzbmFwc2hvdC5leGlzdHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHNuYXBzaG90LmRhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhPy5bcGFyYW1zLm5ld1Byb3BlcnR5XTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6ICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUmVsYXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlbGF0aW9uUHJvbWlzZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVsYXRpb24pXG4gICAgICAuZmxhdE1hcCgoY29sKSA9PlxuICAgICAgICB0aGlzLml0ZW1zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChjb2wucmVsYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgaXRlbVJlY29yZFtjb2wucHJvcGVydHldID0gYXdhaXQgdGhpcy5nZXRSZWxhdGlvbih7XG4gICAgICAgICAgICAgIGlkOiBTdHJpbmcoaXRlbVJlY29yZFtjb2wucmVsYXRpb24uc291cmNlUHJvcGVydHldID8/ICcnKSxcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sLnJlbGF0aW9uLnRhcmdldGVkQ29sbGVjdGlvbixcbiAgICAgICAgICAgICAgbmV3UHJvcGVydHk6IGNvbC5yZWxhdGlvbi50YXJnZXRlZFByb3BlcnR5IHx8IGNvbC5wcm9wZXJ0eSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocmVsYXRpb25Qcm9taXNlcyk7XG4gIH1cblxuICBhc3luYyBnZXRRdWVyeUxlbmd0aChwYXJhbXM6IHtcbiAgICBpdGVtOiBUO1xuICAgIHJlbGF0aW9uOiB7XG4gICAgICBjb2xsZWN0aW9uOiBzdHJpbmc7XG4gICAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgICAgb3BlcmF0b3I6IFdoZXJlRmlsdGVyT3A7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgIH07XG4gIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBwYXJhbXMuaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRoaXMuZmlyZXN0b3JlXG4gICAgICAuY29sbGVjdGlvbihwYXJhbXMucmVsYXRpb24uY29sbGVjdGlvbilcbiAgICAgIC5yZWYud2hlcmUoXG4gICAgICAgIHBhcmFtcy5yZWxhdGlvbi5wcm9wZXJ0eSxcbiAgICAgICAgcGFyYW1zLnJlbGF0aW9uLm9wZXJhdG9yLFxuICAgICAgICBpdGVtUmVjb3JkW3BhcmFtcy5yZWxhdGlvbi52YWx1ZV0sXG4gICAgICApXG4gICAgICAuZ2V0KCk7XG4gICAgcmV0dXJuIHNuYXBzaG90LnNpemU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRRdWVyeUxlbmd0aHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbGVuZ3RoUHJvbWlzZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucXVlcnlMZW5ndGgpXG4gICAgICAuZmxhdE1hcCgoY29sKSA9PlxuICAgICAgICB0aGlzLml0ZW1zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChjb2wucXVlcnlMZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgaXRlbVJlY29yZFtjb2wucHJvcGVydHldID0gYXdhaXQgdGhpcy5nZXRRdWVyeUxlbmd0aCh7XG4gICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgIHJlbGF0aW9uOiBjb2wucXVlcnlMZW5ndGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChsZW5ndGhQcm9taXNlcyk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckl0ZW1zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuY29uZGl0aW9ucykge1xuICAgICAgdGhpcy5kYXRhLmNvbmRpdGlvbnMuZm9yRWFjaCgoY29uZCkgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBvcGVyYXRvckZ1bmN0aW9uID1cbiAgICAgICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9wZXJhdG9yc1tcbiAgICAgICAgICAgICAgY29uZC5vcGVyYXRvciBhcyBrZXlvZiB0eXBlb2YgdGhpcy50YWJsZVNlcnZpY2Uub3BlcmF0b3JzXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIGlmIChvcGVyYXRvckZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtUmVjb3JkID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIHJldHVybiBvcGVyYXRvckZ1bmN0aW9uKFxuICAgICAgICAgICAgICBpdGVtUmVjb3JkW2NvbmQuZmlyZXN0b3JlUHJvcGVydHldLFxuICAgICAgICAgICAgICBjb25kLmRhc2hQcm9wZXJ0eSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBQVUJMSUMgTUVUSE9EU1xuXG4gIGFzeW5jIHJlbG9hZFRhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xuICAgICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVEaXNwbGF5ZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8VD4oW10pO1xuICAgIH1cblxuICAgIHRoaXMuY29sdW1uUHJvcGVydGllcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLm1hcChcbiAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5wcm9wZXJ0eSxcbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyQ29uZmlnID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmluaXRpYWxpemVEcm9wZG93bkl0ZW1zKFxuICAgICAgdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMsXG4gICAgKTtcbiAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSBmaWx0ZXJDb25maWcuZHJvcGRvd25JdGVtcztcbiAgICB0aGlzLnNvcnRhYmxlRHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5zb3J0YWJsZURyb3Bkb3duSXRlbXM7XG5cbiAgICBpZiAodGhpcy5kYXRhLmZpbHRlcmFibGVPcHRpb25zKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSB0aGlzLmZpbHRlclNlcnZpY2UuYWRkRmlsdGVyYWJsZU9wdGlvbnMoXG4gICAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyxcbiAgICAgICAgdGhpcy5kYXRhLmZpbHRlcmFibGVPcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzaG91bGRTaG93QWN0aW9uQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kYXRhPy5hY3Rpb25CdXR0b24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uKG51bGwpID8/IHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVEb3dubG9hZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZG93bmxvYWRUYWJsZSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJyYW5nZSA9IHRoaXMuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoKTtcbiAgICAgIHRoaXMuZG93bmxvYWRUYWJsZShhcnJhbmdlLCB0aGlzLmRhdGEuY29uZGl0aW9ucyB8fCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmFycmFuZ2UpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZFRhYmxlKHRoaXMuYXJyYW5nZSwgdGhpcy5kYXRhLmNvbmRpdGlvbnMgfHwgW10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImRhdGFcIiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTZcIj5cbiAgICA8IS0tIFVOSUZJRUQgQ09OVFJPTCBQQU5FTDogRklMVEVSUywgU09SVCAmIEFDVElPTlMgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctd2hpdGUgcC00IHNoYWRvdy1sZ1wiXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBkYXRhLnBhZ2luYXRpb24gPT09IHRydWUgJiZcbiAgICAgICAgKGRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIHNvcnRhYmxlRHJvcGRvd25JdGVtcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24pXG4gICAgICBcIlxuICAgID5cbiAgICAgIDwhLS0gUEFORUwgSEVBREVSOiBUaXRsZSBhbmQgQ3VzdG9tIEFjdGlvbiAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtYi00IGZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci1iLTIgYm9yZGVyLWdyYXktMjAwIHBiLTQgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBMZWZ0IFNpZGU6IFRpdGxlICYgTWFpbiBBY3Rpb24gQnV0dG9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbHRlciB0ZXh0LXhsIHRleHQtYmx1ZS01MDBcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwXCJcbiAgICAgICAgICAgICAgPkZpbHRyb3MgZSBBw6fDtWVzPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvbiAmJiBkYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0QWN0aW9uQnV0dG9uQ2xhc3MoKVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJkYXRhLmFjdGlvbkJ1dHRvbi5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kID8gZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kKCRldmVudCkgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICB7eyBkYXRhLmFjdGlvbkJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNPUlQgRklFTEQgKEludGVncmF0ZWQgd2l0aCBmaWx0ZXJzKSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCIgKm5nSWY9XCJzb3J0YWJsZURyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zIHAtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zb3J0LWFscGhhLWRvd24gdGV4dC1jeWFuLTYwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3Bhbj5PcmRlbmFyIHBvcjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCIgW2Zvcm1Db250cm9sXT1cInNlbGVjdFNvcnRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc29ydGFibGVEcm9wZG93bkl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zb3J0LWFscGhhLWRvd24gdGV4dC1jeWFuLTYwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGSUxURVJTIENPTlRFTlQgKFdJVEggUkVGSU5FTUVOVFMpIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgc3BhY2UteS0zXCIgKm5nSWY9XCJmaWx0ZXJzRm9ybS5jb250cm9scy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbZm9ybUdyb3VwXT1cIiRhbnkoZmlsdGVyR3JvdXApXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyR3JvdXAgb2YgZmlsdGVyc0Zvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zIHAtMlwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIEZJTFRFUiBUWVBFIFNFTEVDVE9SIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiICpuZ0lmPVwiZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGUgZmlsdHJvPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY2lvbmUgbyB0aXBvLi4uXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3RGaWx0ZXJDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0QXZhaWxhYmxlRmlsdGVyT3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5pY29uIHx8ICdmYSBmYS1maWx0ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gdGV4dC1ibHVlLTUwMFwiXG4gICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRFWFQgRklMVEVSIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU/LmFycmFuZ2UgPT09ICdmaWx0ZXInXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldChcInNlbGVjdEZpbHRlclwiKT8udmFsdWU/LnRpdGxlIHx8XG4gICAgICAgICAgICAgICAgICAgIFwiRmlsdHJhclwiXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERST1BET1dOIEZJTFRFUiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlICYmXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApXG4gICAgICAgICAgICAgICAgLmdldCgnc2VsZWN0RmlsdGVyJylcbiAgICAgICAgICAgICAgICA/LnZhbHVlLmhhc093blByb3BlcnR5KCdpdGVtcycpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoXCJzZWxlY3RGaWx0ZXJcIik/LnZhbHVlPy50aXRsZSB8fFxuICAgICAgICAgICAgICAgICAgXCJTZWxlY2lvbmVcIlxuICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RJdGVtXCJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIC5pdGVtc1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEQVRFIEZJTFRFUiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVszNDBweF0gZmxleC1hdXRvXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PVxuICAgICAgICAgICAgICAnZmlsdGVyQnlEYXRlJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1zdHJldGNoIGdhcC0zIHNtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEluaWNpYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2luaXRpYWxEYXRlJywgaSlcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW5pdGlhbERhdGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEZpbmFsPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2ZpbmFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaW5hbERhdGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFJFTU9WRSBGSUxURVIgQlVUVE9OIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJzRm9ybS5sZW5ndGggPiAxXCIgY2xhc3M9XCJtbC1hdXRvIGZsZXgtc2hyaW5rLTBcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihpKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBoLTEwIHctMTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgaG92ZXI6YmctcmVkLTEwMFwiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmVyIGZpbHRyb1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggdGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMFwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFBBTkVMIEZPT1RFUjogQWRkIEZpbHRlciAmIEFjdGlvbiBCdXR0b25zIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIi1tYi0yIGZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBwdC00XCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBBZGQgRmlsdGVyIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRyYW5zZm9ybSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLWJsdWUtMzAwIGJnLWJsdWUtNTAgcHgtNiBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgaG92ZXI6LXRyYW5zbGF0ZS15LTAuNSBob3Zlcjpib3JkZXItYmx1ZS00MDAgaG92ZXI6YmctYmx1ZS0xMDAgaG92ZXI6c2hhZG93LW1kXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBZGljaW9uYXIgbm92byBmaWx0cm9cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cyBtci0yXCI+PC9pPlxuICAgICAgICAgICAgQWRpY2lvbmFyIEZpbHRyb1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJpZ2h0IFNpZGU6IFNlYXJjaCwgUmVzZXQsIEV4cG9ydCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTMgc2VsZi1zdGFydCBzbTpzZWxmLWF1dG9cIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IHRydWUgfHwgdGhpcy5oYXNTb3J0YWJsZUNvbHVtbiA9PT0gdHJ1ZVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoKClcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctZ3JlZW4tNjAwIHB4LTUgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctZ3JlZW4tNzAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBcGxpY2FyIGZpbHRyb3NcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgUGVzcXVpc2FyXG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXIoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctcmVkLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXJlZC02MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxpbXBhciBmaWx0cm9zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWRvLWFsdFwiPjwvaT5cbiAgICAgICAgICAgIFJlc2V0YXJcbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5kb3dubG9hZCAhPT0gZmFsc2UgJiYgZG93bmxvYWRUYWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctb3JhbmdlLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLW9yYW5nZS02MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkV4cG9ydGFyIFRhYmVsYVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA8PSAwXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAkYW55KGFycmFuZ2UpICYmIGRvd25sb2FkVGFibGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZG93bmxvYWRUYWJsZSgkYW55KGFycmFuZ2UpLCBkYXRhLmNvbmRpdGlvbnMgfHwgW10pXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L2k+XG4gICAgICAgICAgICBFeHBvcnRhclxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBVTklGSUVEIENPTlRST0wgUEFORUwgKGZvciBub24tcGFnaW5hdGVkIHRhYmxlcyk6IFNFQVJDSCwgU09SVCAmIEZJTFRFUlMgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctd2hpdGUgcC00IHNoYWRvdy1sZ1wiXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBkYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlICYmXG4gICAgICAgIChoYXNGaWx0ZXJhYmxlQ29sdW1uID09PSB0cnVlIHx8XG4gICAgICAgICAgZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24pXG4gICAgICBcIlxuICAgID5cbiAgICAgIDwhLS0gUEFORUwgSEVBREVSOiBUaXRsZSBhbmQgQ3VzdG9tIEFjdGlvbiAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtYi00IGZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci1iLTIgYm9yZGVyLWdyYXktMjAwIHBiLTQgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBMZWZ0IFNpZGU6IFRpdGxlICYgTWFpbiBBY3Rpb24gQnV0dG9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbHRlciB0ZXh0LXhsIHRleHQtYmx1ZS01MDBcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwXCJcbiAgICAgICAgICAgICAgPkZpbHRyb3MgZSBBw6fDtWVzPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvbiAmJiBkYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0QWN0aW9uQnV0dG9uQ2xhc3MoKVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJkYXRhLmFjdGlvbkJ1dHRvbi5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kID8gZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kKCRldmVudCkgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICB7eyBkYXRhLmFjdGlvbkJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNJTVBMRSBTRUFSQ0ggLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWItNFwiXG4gICAgICAgICpuZ0lmPVwiaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSAmJiBkYXRhLnNob3dTaW1wbGVTZWFyY2ggIT09IGZhbHNlXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIHRleHQtYmx1ZS01MDBcIj48L2k+XG4gICAgICAgICAgICBCdXNjYXJcbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGtleXVwKT1cImFwcGx5RmlsdGVyKGZpbHRlcklucHV0LnZhbHVlKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRpZ2l0ZSBwYXJhIGZpbHRyYXIuLi5cIlxuICAgICAgICAgICAgI2ZpbHRlcklucHV0XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4IGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGSUxURVJTIFBBTkVMIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8IS0tIEZJTFRFUlMgQ09OVEVOVCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgc3BhY2UteS0zXCIgKm5nSWY9XCJmaWx0ZXJzRm9ybS5jb250cm9scy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCIkYW55KGZpbHRlckdyb3VwKVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyR3JvdXAgb2YgZmlsdGVyc0Zvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gRklMVEVSIFRZUEUgU0VMRUNUT1IgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkZSBmaWx0cm88L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY2lvbmUgbyB0aXBvLi4uXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0RmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJpdGVtLmljb24gfHwgJ2ZhIGZhLWZpbHRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS01MDBcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVEVYVCBGSUxURVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PVxuICAgICAgICAgICAgICAgICdmaWx0ZXInXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBcIkZpbHRyYXJcIlxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZUZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBEUk9QRE9XTiBGSUxURVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlICYmXG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cClcbiAgICAgICAgICAgICAgICAgIC5nZXQoJ3NlbGVjdEZpbHRlcicpXG4gICAgICAgICAgICAgICAgICA/LnZhbHVlLmhhc093blByb3BlcnR5KCdpdGVtcycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xuICAgICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgXCJTZWxlY2lvbmVcIlxuICAgICAgICAgICAgICAgIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLml0ZW1zXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIERBVEUgRklMVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LVszNDBweF0gZmxleC1hdXRvXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgICAnZmlsdGVyQnlEYXRlJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0cmV0Y2ggZ2FwLTMgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEluaWNpYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2luaXRpYWxEYXRlJywgaSlcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkRhdGVGaWx0ZXJDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaXRpYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkRhdGEgRmluYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2ZpbmFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25EYXRlRmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaW5hbERhdGVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkREL01NL0FBQUFcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUkVNT1ZFIEZJTFRFUiBCVVRUT04gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMVwiIGNsYXNzPVwibWwtYXV0byBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGkpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMCB3LTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGhvdmVyOmJnLXJlZC0xMDBcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmVyIGZpbHRyb1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDBcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUEFORUwgRk9PVEVSOiBBZGQgRmlsdGVyICYgQWN0aW9ucyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiLW1iLTIgZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIHB0LTRcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBBZGQgRmlsdGVyIEJ1dHRvbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidHJhbnNmb3JtIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItYmx1ZS0zMDAgYmctYmx1ZS01MCBweC02IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWJsdWUtNjAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBob3ZlcjotdHJhbnNsYXRlLXktMC41IGhvdmVyOmJvcmRlci1ibHVlLTQwMCBob3ZlcjpiZy1ibHVlLTEwMCBob3ZlcjpzaGFkb3ctbWRcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRpY2lvbmFyIG5vdm8gZmlsdHJvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzIG1yLTJcIj48L2k+XG4gICAgICAgICAgICAgIEFkaWNpb25hciBGaWx0cm9cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zIHNlbGYtc3RhcnQgc206c2VsZi1hdXRvXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHRoaXMuaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID09PSB0cnVlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1ncmVlbi02MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1ncmVlbi03MDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBsaWNhciBmaWx0cm9zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIj48L2k+XG4gICAgICAgICAgICAgIFBlc3F1aXNhclxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctcmVkLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXJlZC02MDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTGltcGFyIGZpbHRyb3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWRvLWFsdFwiPjwvaT5cbiAgICAgICAgICAgICAgUmVzZXRhclxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmRvd25sb2FkICE9PSBmYWxzZSAmJiBkb3dubG9hZFRhYmxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLW9yYW5nZS01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1vcmFuZ2UtNjAwXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRXhwb3J0YXIgVGFiZWxhXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA8PSAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVEb3dubG9hZCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiPjwvaT5cbiAgICAgICAgICAgICAgRXhwb3J0YXJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgIDwhLS0gVEFCUyBDT01QT05FTlQgLS0+XG4gICAgICA8bGliLXRhYmxlLXRhYnNcbiAgICAgICAgKm5nSWY9XCJkYXRhLnRhYnMgJiYgZGF0YS50YWJzLnRhYnNEYXRhICYmIGRhdGEudGFicy50YWJzRGF0YS5sZW5ndGggPiAwXCJcbiAgICAgICAgW3RhYnNEYXRhXT1cImRhdGEudGFicy50YWJzRGF0YVwiXG4gICAgICAgIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgICh0YWJTZWxlY3RlZCk9XCJvblRhYlNlbGVjdGVkKCRldmVudClcIlxuICAgICAgPjwvbGliLXRhYmxlLXRhYnM+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCB3LWZ1bGwgb3ZlcmZsb3cteC1hdXRvIHJvdW5kZWQteGwgdGFibGUtY29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgbWF0LXRhYmxlXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgICAgbWF0U29ydFxuICAgICAgICAgICNzb3J0PVwibWF0U29ydFwiXG4gICAgICAgICAgbWF0U29ydEFjdGl2ZT1cImNyZWF0ZWRBdFwiXG4gICAgICAgICAgbWF0U29ydERpcmVjdGlvbj1cImRlc2NcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBkYXRhLmRpc3BsYXllZENvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlQcm9wZXJ0eVwiXG4gICAgICAgICAgICBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wucHJvcGVydHkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBOT1QgU09SVEFCTEUsIFRIRU4gRE9OJ1QgU0hPVyBUSEUgU09SVCBCVVRUT05TIC0tPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaXNTb3J0YWJsZSB8fCBkYXRhLnBhZ2luYXRpb24gPT09IHRydWVcIlxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sLnRpdGxlIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBTT1JUQUJMRSwgVEhFTiBTSE9XIFRIRSBTT1JUIEJVVFRPTlMgLS0+XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmlzU29ydGFibGUgJiYgZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb2wudGl0bGUgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wubWV0aG9kID8gY29sLm1ldGhvZChyb3cpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25DZWxsTW91c2VFbnRlcigkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25DZWxsTW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vtb3ZlKT1cIm9uQ2VsbE1vdXNlTW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwhLS0gQ0hFQ0sgSUYgVEhFIENPTFVNTiBNVVNUIEJFIERJU1BMQVlFRCAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2wuaW1hZ2UgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGFyTGltaXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0ubGVuZ3RoID4gY29sLmNoYXJMaW1pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd2l0aGluTGltaXRcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicm93W2NvbC5wcm9wZXJ0eV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3cpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rICYmIGlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2wuaGFzTGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdykgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgIT09IHRydWUgJiYgIWlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhpbkxpbWl0PlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAmJiBpc1N0cmluZyhjb2wuaGFzTGluaylcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImNvbC5oYXNMaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAhPT0gdHJ1ZSAmJiAhaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tIElNQUdFIC0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgICAgICAgICA8IS0tIEltYWdlbSBjb20gbG9hZGluZyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wuaW1hZ2UgJiYgY29sLmltYWdlLnBhdGggJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG0tYXV0b1wiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjb2wuaW1hZ2UucGF0aCArICcvJyArIHJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sLmltYWdlLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktMF09XCJpc0ltYWdlTG9hZGluZyhyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZChyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKCRldmVudCwgcm93LCBjb2wsIGNvbC5pbWFnZS5kZWZhdWx0KVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBJbWFnZW0gY29tIFVSTCBjb21wbGV0YSBlIGxvYWRpbmcgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLmltYWdlICYmIGNvbC5pbWFnZS51cmwgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG0tYXV0b1wiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJyb3dbY29sLnByb3BlcnR5XVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5pbWFnZS5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uSW1hZ2VFcnJvcigkZXZlbnQsIHJvdywgY29sLCBjb2wuaW1hZ2UuZGVmYXVsdClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaWNvbkNsYXNzIG9mIGNvbC5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLmJ1dHRvbk1ldGhvZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpY29uQ2xhc3MuYnV0dG9uTWV0aG9kKHJvdywgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpY29uQ2xhc3MuY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3MuY29uZGl0aW9uID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpY29uQ2xhc3MuY29uZGl0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFueShpY29uQ2xhc3MuY29uZGl0aW9uKShyb3cpKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7IGljb25DbGFzcy50ZXh0IH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtblByb3BlcnRpZXNcIj48L3RyPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0VGFibGVSb3dOZ0NsYXNzKClcIlxuICAgICAgICAgICAgbWF0LXJvd1xuICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtblByb3BlcnRpZXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9EZXRhaWxzKHJvdylcIlxuICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgPCEtLSBST1cgU0hPV04gV0hFTiBUSEVSRSBJUyBOTyBNQVRDSElORyBEQVRBLiAtLT5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm1hdE5vRGF0YVJvdz5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiEoaXNMb2FkaW5nJCB8IGFzeW5jKVwiIGNsYXNzPVwibWF0LWNlbGwgcC00XCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgICAgTmVuaHVtIHJlc3VsdGFkbyBlbmNvbnRyYWRvIHBhcmEgYSBidXNjYVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyXCIgKm5nSWY9XCJpc0xvYWRpbmckIHwgYXN5bmNcIj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRvci1jb250YWluZXJcIj5cbiAgICAgICAgICA8bWF0LXBhZ2luYXRvclxuICAgICAgICAgICAgI3BhZ2luYXRvclxuICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJbMjUsIDUwLCAxMDBdXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICBbbGVuZ3RoXT1cInRvdGFsSXRlbXNcIlxuICAgICAgICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3QgcGFnZSBvZiBwZXJpb2RpYyBlbGVtZW50c1wiXG4gICAgICAgICAgICAocGFnZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJnZXRQYWdpbmF0b3JOZ0NsYXNzKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XG4gICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhKGlzTG9hZGluZyQgfCBhc3luYykgJiZcbiAgICAgICAgICAgICAgZGF0YVNvdXJjZT8uZGF0YSAmJlxuICAgICAgICAgICAgICBkYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICBkYXRhPy5maWx0ZXJGblxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwicGFnZS1udW1iZXItZGlzcGxheVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY3VycmVudFBhZ2VOdW1iZXIgfX1cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVE9PTFRJUCBQRVJTT05BTElaQURPIC0tPlxuICA8bGliLXRhYmxlLXRvb2x0aXBcbiAgICBbc3RhdGVdPVwidG9vbHRpcFN0YXRlXCJcbiAgICBbc3R5bGVzXT1cImdldFRvb2x0aXBTdHlsZXMoKVwiXG4gID48L2xpYi10YWJsZS10b29sdGlwPlxuPC9kaXY+XG4iXX0=
|
|
1
|
+
import { TABLE_DEFAULTS, } from '../../types/Table';
|
|
2
|
+
import { Component, Input, ViewChild, ChangeDetectionStrategy, } from '@angular/core';
|
|
3
|
+
import { MatPaginator } from '@angular/material/paginator';
|
|
4
|
+
import { MatSort } from '@angular/material/sort';
|
|
5
|
+
import { MatTableDataSource } from '@angular/material/table';
|
|
6
|
+
import { getDisplayValue, getNestedValue, isString, trackByProperty, getImageKey, } from '../../utils/table.utils';
|
|
7
|
+
import { debounceTime, firstValueFrom, Subject, takeUntil, BehaviorSubject, } from 'rxjs';
|
|
8
|
+
import { FormControl, FormArray, } from '@angular/forms';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/router";
|
|
11
|
+
import * as i2 from "../../services/table.service";
|
|
12
|
+
import * as i3 from "../../services/filter.service";
|
|
13
|
+
import * as i4 from "../../services/tooltip.service";
|
|
14
|
+
import * as i5 from "../../services/pagination.service";
|
|
15
|
+
import * as i6 from "@angular/fire/compat/firestore";
|
|
16
|
+
import * as i7 from "@angular/common";
|
|
17
|
+
import * as i8 from "@angular/forms";
|
|
18
|
+
import * as i9 from "@angular/material/table";
|
|
19
|
+
import * as i10 from "@angular/material/paginator";
|
|
20
|
+
import * as i11 from "@angular/material/sort";
|
|
21
|
+
import * as i12 from "@angular/material/form-field";
|
|
22
|
+
import * as i13 from "@angular/material/input";
|
|
23
|
+
import * as i14 from "@angular/material/core";
|
|
24
|
+
import * as i15 from "@angular/material/select";
|
|
25
|
+
import * as i16 from "@angular/material/tooltip";
|
|
26
|
+
import * as i17 from "@angular/material/progress-spinner";
|
|
27
|
+
import * as i18 from "@angular/material/icon";
|
|
28
|
+
import * as i19 from "../table-tabs/table-tabs.component";
|
|
29
|
+
import * as i20 from "../table-tooltip/table-tooltip.component";
|
|
30
|
+
function TableComponent_div_0_div_2_button_7_i_1_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
+
i0.ɵɵelement(0, "i");
|
|
32
|
+
} if (rf & 2) {
|
|
33
|
+
const ctx_r16 = i0.ɵɵnextContext(4);
|
|
34
|
+
i0.ɵɵclassMap(ctx_r16.data.actionButton.icon);
|
|
35
|
+
} }
|
|
36
|
+
function TableComponent_div_0_div_2_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
38
|
+
i0.ɵɵelementStart(0, "button", 30);
|
|
39
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r17.data.actionButton.method ? ctx_r17.data.actionButton.method($event) : null); });
|
|
40
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_button_7_i_1_Template, 1, 2, "i", 31);
|
|
41
|
+
i0.ɵɵtext(2);
|
|
42
|
+
i0.ɵɵelementEnd();
|
|
43
|
+
} if (rf & 2) {
|
|
44
|
+
const ctx_r11 = i0.ɵɵnextContext(3);
|
|
45
|
+
i0.ɵɵproperty("ngClass", ctx_r11.getActionButtonClass())("routerLink", ctx_r11.data.actionButton.routerLink);
|
|
46
|
+
i0.ɵɵadvance(1);
|
|
47
|
+
i0.ɵɵproperty("ngIf", ctx_r11.data.actionButton.icon);
|
|
48
|
+
i0.ɵɵadvance(1);
|
|
49
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r11.data.actionButton.label, " ");
|
|
50
|
+
} }
|
|
51
|
+
function TableComponent_div_0_div_2_div_8_mat_option_9_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
+
i0.ɵɵelementStart(0, "mat-option", 39)(1, "div", 21);
|
|
53
|
+
i0.ɵɵelement(2, "i", 36);
|
|
54
|
+
i0.ɵɵelementStart(3, "span");
|
|
55
|
+
i0.ɵɵtext(4);
|
|
56
|
+
i0.ɵɵelementEnd()()();
|
|
57
|
+
} if (rf & 2) {
|
|
58
|
+
const item_r20 = ctx.$implicit;
|
|
59
|
+
i0.ɵɵproperty("value", item_r20);
|
|
60
|
+
i0.ɵɵadvance(4);
|
|
61
|
+
i0.ɵɵtextInterpolate(item_r20.title);
|
|
62
|
+
} }
|
|
63
|
+
function TableComponent_div_0_div_2_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
64
|
+
i0.ɵɵelementStart(0, "div", 32)(1, "div", 33)(2, "div", 34)(3, "mat-form-field", 35)(4, "mat-label", 21);
|
|
65
|
+
i0.ɵɵelement(5, "i", 36);
|
|
66
|
+
i0.ɵɵelementStart(6, "span");
|
|
67
|
+
i0.ɵɵtext(7, "Ordenar por");
|
|
68
|
+
i0.ɵɵelementEnd()();
|
|
69
|
+
i0.ɵɵelementStart(8, "mat-select", 37);
|
|
70
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_div_2_div_8_mat_option_9_Template, 5, 2, "mat-option", 38);
|
|
71
|
+
i0.ɵɵelementEnd()()()()();
|
|
72
|
+
} if (rf & 2) {
|
|
73
|
+
const ctx_r12 = i0.ɵɵnextContext(3);
|
|
74
|
+
i0.ɵɵadvance(8);
|
|
75
|
+
i0.ɵɵproperty("formControl", ctx_r12.selectSort);
|
|
76
|
+
i0.ɵɵadvance(1);
|
|
77
|
+
i0.ɵɵproperty("ngForOf", ctx_r12.sortableDropdownItems);
|
|
78
|
+
} }
|
|
79
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_1_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
i0.ɵɵelementStart(0, "mat-option", 39)(1, "div", 21);
|
|
81
|
+
i0.ɵɵelement(2, "i", 47);
|
|
82
|
+
i0.ɵɵelementStart(3, "span");
|
|
83
|
+
i0.ɵɵtext(4);
|
|
84
|
+
i0.ɵɵelementEnd()()();
|
|
85
|
+
} if (rf & 2) {
|
|
86
|
+
const item_r30 = ctx.$implicit;
|
|
87
|
+
i0.ɵɵproperty("value", item_r30);
|
|
88
|
+
i0.ɵɵadvance(2);
|
|
89
|
+
i0.ɵɵclassMap(item_r30.icon || "fa fa-filter");
|
|
90
|
+
i0.ɵɵadvance(2);
|
|
91
|
+
i0.ɵɵtextInterpolate(item_r30.title);
|
|
92
|
+
} }
|
|
93
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
94
|
+
const _r32 = i0.ɵɵgetCurrentView();
|
|
95
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
|
|
96
|
+
i0.ɵɵtext(3, "Tipo de filtro");
|
|
97
|
+
i0.ɵɵelementEnd();
|
|
98
|
+
i0.ɵɵelementStart(4, "mat-select", 46);
|
|
99
|
+
i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_2_div_9_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r32); const ctx_r31 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r31.onSelectFilterChange()); });
|
|
100
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option", 38);
|
|
101
|
+
i0.ɵɵelementEnd()()();
|
|
102
|
+
} if (rf & 2) {
|
|
103
|
+
const filterGroup_r22 = i0.ɵɵnextContext().$implicit;
|
|
104
|
+
const ctx_r24 = i0.ɵɵnextContext(4);
|
|
105
|
+
i0.ɵɵadvance(5);
|
|
106
|
+
i0.ɵɵproperty("ngForOf", ctx_r24.getAvailableFilterOptions(filterGroup_r22));
|
|
107
|
+
} }
|
|
108
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
109
|
+
const _r36 = i0.ɵɵgetCurrentView();
|
|
110
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label", 21);
|
|
111
|
+
i0.ɵɵelement(3, "i", 48);
|
|
112
|
+
i0.ɵɵelementStart(4, "span");
|
|
113
|
+
i0.ɵɵtext(5);
|
|
114
|
+
i0.ɵɵelementEnd()();
|
|
115
|
+
i0.ɵɵelementStart(6, "input", 49, 50);
|
|
116
|
+
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_2_div_9_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r35 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r35.search($event)); });
|
|
117
|
+
i0.ɵɵelementEnd()()();
|
|
118
|
+
} if (rf & 2) {
|
|
119
|
+
const filterGroup_r22 = i0.ɵɵnextContext().$implicit;
|
|
120
|
+
let tmp_0_0;
|
|
121
|
+
i0.ɵɵadvance(5);
|
|
122
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Filtrar");
|
|
123
|
+
} }
|
|
124
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_3_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
125
|
+
i0.ɵɵelementStart(0, "mat-option", 39);
|
|
126
|
+
i0.ɵɵtext(1);
|
|
127
|
+
i0.ɵɵelementEnd();
|
|
128
|
+
} if (rf & 2) {
|
|
129
|
+
const item_r39 = ctx.$implicit;
|
|
130
|
+
i0.ɵɵproperty("value", item_r39);
|
|
131
|
+
i0.ɵɵadvance(1);
|
|
132
|
+
i0.ɵɵtextInterpolate1(" ", item_r39.label, " ");
|
|
133
|
+
} }
|
|
134
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
135
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
|
|
136
|
+
i0.ɵɵtext(3);
|
|
137
|
+
i0.ɵɵelementEnd();
|
|
138
|
+
i0.ɵɵelementStart(4, "mat-select", 51);
|
|
139
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_3_mat_option_5_Template, 2, 2, "mat-option", 38);
|
|
140
|
+
i0.ɵɵelementEnd()()();
|
|
141
|
+
} if (rf & 2) {
|
|
142
|
+
const filterGroup_r22 = i0.ɵɵnextContext().$implicit;
|
|
143
|
+
let tmp_0_0;
|
|
144
|
+
let tmp_1_0;
|
|
145
|
+
i0.ɵɵadvance(3);
|
|
146
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Selecione");
|
|
147
|
+
i0.ɵɵadvance(2);
|
|
148
|
+
i0.ɵɵproperty("ngForOf", (tmp_1_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_1_0.value.items);
|
|
149
|
+
} }
|
|
150
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
+
const _r42 = i0.ɵɵgetCurrentView();
|
|
152
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "div", 53)(2, "mat-form-field", 54)(3, "mat-label", 21);
|
|
153
|
+
i0.ɵɵelement(4, "i", 55);
|
|
154
|
+
i0.ɵɵelementStart(5, "span");
|
|
155
|
+
i0.ɵɵtext(6, "Data Inicial");
|
|
156
|
+
i0.ɵɵelementEnd()();
|
|
157
|
+
i0.ɵɵelementStart(7, "input", 56);
|
|
158
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r41 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r41.search($event)); })("input", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r42); const i_r23 = i0.ɵɵnextContext().index; const ctx_r43 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r43.onDateInput($event, "initialDate", i_r23)); });
|
|
159
|
+
i0.ɵɵelementEnd()();
|
|
160
|
+
i0.ɵɵelementStart(8, "mat-form-field", 54)(9, "mat-label", 21);
|
|
161
|
+
i0.ɵɵelement(10, "i", 55);
|
|
162
|
+
i0.ɵɵelementStart(11, "span");
|
|
163
|
+
i0.ɵɵtext(12, "Data Final");
|
|
164
|
+
i0.ɵɵelementEnd()();
|
|
165
|
+
i0.ɵɵelementStart(13, "input", 57);
|
|
166
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r45 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r45.search($event)); })("input", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r42); const i_r23 = i0.ɵɵnextContext().index; const ctx_r46 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r46.onDateInput($event, "finalDate", i_r23)); });
|
|
167
|
+
i0.ɵɵelementEnd()()()();
|
|
168
|
+
} }
|
|
169
|
+
function TableComponent_div_0_div_2_div_9_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
170
|
+
const _r50 = i0.ɵɵgetCurrentView();
|
|
171
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "button", 59);
|
|
172
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_9_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r50); const i_r23 = i0.ɵɵnextContext().index; const ctx_r48 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r48.removeFilter(i_r23)); });
|
|
173
|
+
i0.ɵɵelement(2, "i", 60);
|
|
174
|
+
i0.ɵɵelementEnd()();
|
|
175
|
+
} }
|
|
176
|
+
function TableComponent_div_0_div_2_div_9_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
177
|
+
i0.ɵɵelementStart(0, "div", 42);
|
|
178
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_div_9_div_1_div_1_Template, 6, 1, "div", 43);
|
|
179
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_div_2_div_9_div_1_div_2_Template, 8, 1, "div", 43);
|
|
180
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_2_div_9_div_1_div_3_Template, 6, 2, "div", 43);
|
|
181
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_div_2_div_9_div_1_div_4_Template, 14, 0, "div", 44);
|
|
182
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_5_Template, 3, 0, "div", 45);
|
|
183
|
+
i0.ɵɵelementEnd();
|
|
184
|
+
} if (rf & 2) {
|
|
185
|
+
const filterGroup_r22 = ctx.$implicit;
|
|
186
|
+
const ctx_r21 = i0.ɵɵnextContext(4);
|
|
187
|
+
let tmp_2_0;
|
|
188
|
+
let tmp_3_0;
|
|
189
|
+
let tmp_4_0;
|
|
190
|
+
i0.ɵɵproperty("formGroup", filterGroup_r22);
|
|
191
|
+
i0.ɵɵadvance(1);
|
|
192
|
+
i0.ɵɵproperty("ngIf", ctx_r21.dropdownItems.length > 0);
|
|
193
|
+
i0.ɵɵadvance(1);
|
|
194
|
+
i0.ɵɵproperty("ngIf", ((tmp_2_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_2_0.value == null ? null : tmp_2_0.value.arrange) === "filter");
|
|
195
|
+
i0.ɵɵadvance(1);
|
|
196
|
+
i0.ɵɵproperty("ngIf", ((tmp_3_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_3_0.value) && ((tmp_3_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_3_0.value.hasOwnProperty("items")));
|
|
197
|
+
i0.ɵɵadvance(1);
|
|
198
|
+
i0.ɵɵproperty("ngIf", ((tmp_4_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_4_0.value == null ? null : tmp_4_0.value.arrange) === "filterByDate");
|
|
199
|
+
i0.ɵɵadvance(1);
|
|
200
|
+
i0.ɵɵproperty("ngIf", ctx_r21.filtersForm.length > 1);
|
|
201
|
+
} }
|
|
202
|
+
function TableComponent_div_0_div_2_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
203
|
+
i0.ɵɵelementStart(0, "div", 40);
|
|
204
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_div_9_div_1_Template, 6, 6, "div", 41);
|
|
205
|
+
i0.ɵɵelementEnd();
|
|
206
|
+
} if (rf & 2) {
|
|
207
|
+
const ctx_r13 = i0.ɵɵnextContext(3);
|
|
208
|
+
i0.ɵɵadvance(1);
|
|
209
|
+
i0.ɵɵproperty("ngForOf", ctx_r13.filtersForm.controls);
|
|
210
|
+
} }
|
|
211
|
+
function TableComponent_div_0_div_2_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
212
|
+
const _r52 = i0.ɵɵgetCurrentView();
|
|
213
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 61);
|
|
214
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r52); const ctx_r51 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r51.addFilter()); });
|
|
215
|
+
i0.ɵɵelement(2, "i", 62);
|
|
216
|
+
i0.ɵɵtext(3, " Adicionar Filtro ");
|
|
217
|
+
i0.ɵɵelementEnd()();
|
|
218
|
+
} }
|
|
219
|
+
function TableComponent_div_0_div_2_div_12_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
220
|
+
const _r55 = i0.ɵɵgetCurrentView();
|
|
221
|
+
i0.ɵɵelementStart(0, "button", 69);
|
|
222
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r55); const ctx_r54 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r54.arrange && ctx_r54.downloadTable !== undefined ? ctx_r54.downloadTable(ctx_r54.arrange, ctx_r54.data.conditions || []) : null); });
|
|
223
|
+
i0.ɵɵelement(1, "i", 70);
|
|
224
|
+
i0.ɵɵtext(2, " Exportar ");
|
|
225
|
+
i0.ɵɵelementEnd();
|
|
226
|
+
} if (rf & 2) {
|
|
227
|
+
const ctx_r53 = i0.ɵɵnextContext(4);
|
|
228
|
+
i0.ɵɵproperty("disabled", ctx_r53.dataSource && ctx_r53.dataSource.filteredData.length <= 0);
|
|
229
|
+
} }
|
|
230
|
+
function TableComponent_div_0_div_2_div_12_Template(rf, ctx) { if (rf & 1) {
|
|
231
|
+
const _r57 = i0.ɵɵgetCurrentView();
|
|
232
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "button", 64);
|
|
233
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r57); const ctx_r56 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r56.search()); });
|
|
234
|
+
i0.ɵɵelement(2, "i", 65);
|
|
235
|
+
i0.ɵɵtext(3, " Pesquisar ");
|
|
236
|
+
i0.ɵɵelementEnd();
|
|
237
|
+
i0.ɵɵelementStart(4, "button", 66);
|
|
238
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r57); const ctx_r58 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r58.resetFilter()); });
|
|
239
|
+
i0.ɵɵelement(5, "i", 67);
|
|
240
|
+
i0.ɵɵtext(6, " Resetar ");
|
|
241
|
+
i0.ɵɵelementEnd();
|
|
242
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_2_div_12_button_7_Template, 3, 1, "button", 68);
|
|
243
|
+
i0.ɵɵelementEnd();
|
|
244
|
+
} if (rf & 2) {
|
|
245
|
+
const ctx_r15 = i0.ɵɵnextContext(3);
|
|
246
|
+
i0.ɵɵadvance(7);
|
|
247
|
+
i0.ɵɵproperty("ngIf", ctx_r15.data.download !== false && ctx_r15.downloadTable);
|
|
248
|
+
} }
|
|
249
|
+
function TableComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
250
|
+
i0.ɵɵelementStart(0, "div", 18)(1, "div", 19)(2, "div", 20)(3, "div", 21);
|
|
251
|
+
i0.ɵɵelement(4, "i", 22);
|
|
252
|
+
i0.ɵɵelementStart(5, "span", 23);
|
|
253
|
+
i0.ɵɵtext(6, "Filtros e A\u00E7\u00F5es");
|
|
254
|
+
i0.ɵɵelementEnd()();
|
|
255
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_2_button_7_Template, 3, 4, "button", 24);
|
|
256
|
+
i0.ɵɵelementEnd()();
|
|
257
|
+
i0.ɵɵtemplate(8, TableComponent_div_0_div_2_div_8_Template, 10, 2, "div", 25);
|
|
258
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_div_2_div_9_Template, 2, 1, "div", 26);
|
|
259
|
+
i0.ɵɵelementStart(10, "div", 27);
|
|
260
|
+
i0.ɵɵtemplate(11, TableComponent_div_0_div_2_div_11_Template, 4, 0, "div", 28);
|
|
261
|
+
i0.ɵɵtemplate(12, TableComponent_div_0_div_2_div_12_Template, 8, 1, "div", 29);
|
|
262
|
+
i0.ɵɵelementEnd()();
|
|
263
|
+
} if (rf & 2) {
|
|
264
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
265
|
+
i0.ɵɵadvance(7);
|
|
266
|
+
i0.ɵɵproperty("ngIf", ctx_r1.data.actionButton && ctx_r1.data.actionButton.condition);
|
|
267
|
+
i0.ɵɵadvance(1);
|
|
268
|
+
i0.ɵɵproperty("ngIf", ctx_r1.sortableDropdownItems.length > 0);
|
|
269
|
+
i0.ɵɵadvance(1);
|
|
270
|
+
i0.ɵɵproperty("ngIf", ctx_r1.filtersForm.controls.length > 0);
|
|
271
|
+
i0.ɵɵadvance(2);
|
|
272
|
+
i0.ɵɵproperty("ngIf", ctx_r1.dropdownItems.length > 0);
|
|
273
|
+
i0.ɵɵadvance(1);
|
|
274
|
+
i0.ɵɵproperty("ngIf", ctx_r1.hasFilterableColumn === true || ctx_r1.hasSortableColumn === true);
|
|
275
|
+
} }
|
|
276
|
+
function TableComponent_div_0_div_3_button_7_i_1_Template(rf, ctx) { if (rf & 1) {
|
|
277
|
+
i0.ɵɵelement(0, "i");
|
|
278
|
+
} if (rf & 2) {
|
|
279
|
+
const ctx_r62 = i0.ɵɵnextContext(4);
|
|
280
|
+
i0.ɵɵclassMap(ctx_r62.data.actionButton.icon);
|
|
281
|
+
} }
|
|
282
|
+
function TableComponent_div_0_div_3_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
283
|
+
const _r64 = i0.ɵɵgetCurrentView();
|
|
284
|
+
i0.ɵɵelementStart(0, "button", 30);
|
|
285
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r64); const ctx_r63 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r63.data.actionButton.method ? ctx_r63.data.actionButton.method($event) : null); });
|
|
286
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_button_7_i_1_Template, 1, 2, "i", 31);
|
|
287
|
+
i0.ɵɵtext(2);
|
|
288
|
+
i0.ɵɵelementEnd();
|
|
289
|
+
} if (rf & 2) {
|
|
290
|
+
const ctx_r59 = i0.ɵɵnextContext(3);
|
|
291
|
+
i0.ɵɵproperty("ngClass", ctx_r59.getActionButtonClass())("routerLink", ctx_r59.data.actionButton.routerLink);
|
|
292
|
+
i0.ɵɵadvance(1);
|
|
293
|
+
i0.ɵɵproperty("ngIf", ctx_r59.data.actionButton.icon);
|
|
294
|
+
i0.ɵɵadvance(1);
|
|
295
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r59.data.actionButton.label, " ");
|
|
296
|
+
} }
|
|
297
|
+
function TableComponent_div_0_div_3_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
298
|
+
const _r67 = i0.ɵɵgetCurrentView();
|
|
299
|
+
i0.ɵɵelementStart(0, "div", 32)(1, "mat-form-field", 35)(2, "mat-label", 21);
|
|
300
|
+
i0.ɵɵelement(3, "i", 71);
|
|
301
|
+
i0.ɵɵtext(4, " Buscar ");
|
|
302
|
+
i0.ɵɵelementEnd();
|
|
303
|
+
i0.ɵɵelementStart(5, "input", 72, 73);
|
|
304
|
+
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_8_Template_input_keyup_enter_5_listener($event) { i0.ɵɵrestoreView(_r67); const ctx_r66 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r66.search($event)); })("keyup", function TableComponent_div_0_div_3_div_8_Template_input_keyup_5_listener() { i0.ɵɵrestoreView(_r67); const _r65 = i0.ɵɵreference(6); const ctx_r68 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r68.applyFilter(_r65.value)); });
|
|
305
|
+
i0.ɵɵelementEnd();
|
|
306
|
+
i0.ɵɵelementStart(7, "mat-icon", 74);
|
|
307
|
+
i0.ɵɵtext(8, "search");
|
|
308
|
+
i0.ɵɵelementEnd()()();
|
|
309
|
+
} }
|
|
310
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
311
|
+
i0.ɵɵelementStart(0, "mat-option", 39)(1, "div", 21);
|
|
312
|
+
i0.ɵɵelement(2, "i", 47);
|
|
313
|
+
i0.ɵɵelementStart(3, "span");
|
|
314
|
+
i0.ɵɵtext(4);
|
|
315
|
+
i0.ɵɵelementEnd()()();
|
|
316
|
+
} if (rf & 2) {
|
|
317
|
+
const item_r81 = ctx.$implicit;
|
|
318
|
+
i0.ɵɵproperty("value", item_r81);
|
|
319
|
+
i0.ɵɵadvance(2);
|
|
320
|
+
i0.ɵɵclassMap(item_r81.icon || "fa fa-filter");
|
|
321
|
+
i0.ɵɵadvance(2);
|
|
322
|
+
i0.ɵɵtextInterpolate(item_r81.title);
|
|
323
|
+
} }
|
|
324
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
325
|
+
const _r83 = i0.ɵɵgetCurrentView();
|
|
326
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
|
|
327
|
+
i0.ɵɵtext(3, "Tipo de filtro");
|
|
328
|
+
i0.ɵɵelementEnd();
|
|
329
|
+
i0.ɵɵelementStart(4, "mat-select", 46);
|
|
330
|
+
i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r83); const ctx_r82 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r82.onSelectFilterChange()); });
|
|
331
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option", 38);
|
|
332
|
+
i0.ɵɵelementEnd()()();
|
|
333
|
+
} if (rf & 2) {
|
|
334
|
+
const filterGroup_r73 = i0.ɵɵnextContext().$implicit;
|
|
335
|
+
const ctx_r75 = i0.ɵɵnextContext(5);
|
|
336
|
+
i0.ɵɵadvance(5);
|
|
337
|
+
i0.ɵɵproperty("ngForOf", ctx_r75.getAvailableFilterOptions(filterGroup_r73));
|
|
338
|
+
} }
|
|
339
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
340
|
+
const _r87 = i0.ɵɵgetCurrentView();
|
|
341
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label", 21);
|
|
342
|
+
i0.ɵɵelement(3, "i", 48);
|
|
343
|
+
i0.ɵɵelementStart(4, "span");
|
|
344
|
+
i0.ɵɵtext(5);
|
|
345
|
+
i0.ɵɵelementEnd()();
|
|
346
|
+
i0.ɵɵelementStart(6, "input", 49, 50);
|
|
347
|
+
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(_r87); const ctx_r86 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r86.search($event)); });
|
|
348
|
+
i0.ɵɵelementEnd()()();
|
|
349
|
+
} if (rf & 2) {
|
|
350
|
+
const filterGroup_r73 = i0.ɵɵnextContext().$implicit;
|
|
351
|
+
let tmp_0_0;
|
|
352
|
+
i0.ɵɵadvance(5);
|
|
353
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Filtrar");
|
|
354
|
+
} }
|
|
355
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
356
|
+
i0.ɵɵelementStart(0, "mat-option", 39);
|
|
357
|
+
i0.ɵɵtext(1);
|
|
358
|
+
i0.ɵɵelementEnd();
|
|
359
|
+
} if (rf & 2) {
|
|
360
|
+
const item_r90 = ctx.$implicit;
|
|
361
|
+
i0.ɵɵproperty("value", item_r90);
|
|
362
|
+
i0.ɵɵadvance(1);
|
|
363
|
+
i0.ɵɵtextInterpolate1(" ", item_r90.label, " ");
|
|
364
|
+
} }
|
|
365
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
366
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
|
|
367
|
+
i0.ɵɵtext(3);
|
|
368
|
+
i0.ɵɵelementEnd();
|
|
369
|
+
i0.ɵɵelementStart(4, "mat-select", 51);
|
|
370
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_mat_option_5_Template, 2, 2, "mat-option", 38);
|
|
371
|
+
i0.ɵɵelementEnd()()();
|
|
372
|
+
} if (rf & 2) {
|
|
373
|
+
const filterGroup_r73 = i0.ɵɵnextContext().$implicit;
|
|
374
|
+
let tmp_0_0;
|
|
375
|
+
let tmp_1_0;
|
|
376
|
+
i0.ɵɵadvance(3);
|
|
377
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Selecione");
|
|
378
|
+
i0.ɵɵadvance(2);
|
|
379
|
+
i0.ɵɵproperty("ngForOf", (tmp_1_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_1_0.value.items);
|
|
380
|
+
} }
|
|
381
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
382
|
+
const _r93 = i0.ɵɵgetCurrentView();
|
|
383
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "div", 53)(2, "mat-form-field", 54)(3, "mat-label", 21);
|
|
384
|
+
i0.ɵɵelement(4, "i", 55);
|
|
385
|
+
i0.ɵɵelementStart(5, "span");
|
|
386
|
+
i0.ɵɵtext(6, "Data Inicial");
|
|
387
|
+
i0.ɵɵelementEnd()();
|
|
388
|
+
i0.ɵɵelementStart(7, "input", 77);
|
|
389
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(_r93); const ctx_r92 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r92.search($event)); })("input", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r93); const i_r74 = i0.ɵɵnextContext().index; const ctx_r94 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r94.onDateInput($event, "initialDate", i_r74)); })("blur", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_blur_7_listener() { i0.ɵɵrestoreView(_r93); const ctx_r96 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r96.onDateFilterChange()); });
|
|
390
|
+
i0.ɵɵelementEnd()();
|
|
391
|
+
i0.ɵɵelementStart(8, "mat-form-field", 54)(9, "mat-label", 21);
|
|
392
|
+
i0.ɵɵelement(10, "i", 55);
|
|
393
|
+
i0.ɵɵelementStart(11, "span");
|
|
394
|
+
i0.ɵɵtext(12, "Data Final");
|
|
395
|
+
i0.ɵɵelementEnd()();
|
|
396
|
+
i0.ɵɵelementStart(13, "input", 78);
|
|
397
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(_r93); const ctx_r97 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r97.search($event)); })("input", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r93); const i_r74 = i0.ɵɵnextContext().index; const ctx_r98 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r98.onDateInput($event, "finalDate", i_r74)); })("blur", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_blur_13_listener() { i0.ɵɵrestoreView(_r93); const ctx_r100 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r100.onDateFilterChange()); });
|
|
398
|
+
i0.ɵɵelementEnd()()()();
|
|
399
|
+
} }
|
|
400
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
401
|
+
const _r103 = i0.ɵɵgetCurrentView();
|
|
402
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "button", 59);
|
|
403
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r103); const i_r74 = i0.ɵɵnextContext().index; const ctx_r101 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r101.removeFilter(i_r74)); });
|
|
404
|
+
i0.ɵɵelement(2, "i", 60);
|
|
405
|
+
i0.ɵɵelementEnd()();
|
|
406
|
+
} }
|
|
407
|
+
function TableComponent_div_0_div_3_div_9_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
408
|
+
i0.ɵɵelementStart(0, "div", 76);
|
|
409
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template, 6, 1, "div", 43);
|
|
410
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template, 8, 1, "div", 43);
|
|
411
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_Template, 6, 2, "div", 43);
|
|
412
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template, 14, 0, "div", 44);
|
|
413
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template, 3, 0, "div", 45);
|
|
414
|
+
i0.ɵɵelementEnd();
|
|
415
|
+
} if (rf & 2) {
|
|
416
|
+
const filterGroup_r73 = ctx.$implicit;
|
|
417
|
+
const ctx_r72 = i0.ɵɵnextContext(5);
|
|
418
|
+
let tmp_2_0;
|
|
419
|
+
let tmp_3_0;
|
|
420
|
+
let tmp_4_0;
|
|
421
|
+
i0.ɵɵproperty("formGroup", filterGroup_r73);
|
|
422
|
+
i0.ɵɵadvance(1);
|
|
423
|
+
i0.ɵɵproperty("ngIf", ctx_r72.dropdownItems.length > 0);
|
|
424
|
+
i0.ɵɵadvance(1);
|
|
425
|
+
i0.ɵɵproperty("ngIf", ((tmp_2_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_2_0.value == null ? null : tmp_2_0.value.arrange) === "filter");
|
|
426
|
+
i0.ɵɵadvance(1);
|
|
427
|
+
i0.ɵɵproperty("ngIf", ((tmp_3_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_3_0.value) && ((tmp_3_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_3_0.value.hasOwnProperty("items")));
|
|
428
|
+
i0.ɵɵadvance(1);
|
|
429
|
+
i0.ɵɵproperty("ngIf", ((tmp_4_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_4_0.value == null ? null : tmp_4_0.value.arrange) === "filterByDate");
|
|
430
|
+
i0.ɵɵadvance(1);
|
|
431
|
+
i0.ɵɵproperty("ngIf", ctx_r72.filtersForm.length > 1);
|
|
432
|
+
} }
|
|
433
|
+
function TableComponent_div_0_div_3_div_9_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
434
|
+
i0.ɵɵelementStart(0, "div", 40);
|
|
435
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_div_1_Template, 6, 6, "div", 75);
|
|
436
|
+
i0.ɵɵelementEnd();
|
|
437
|
+
} if (rf & 2) {
|
|
438
|
+
const ctx_r69 = i0.ɵɵnextContext(4);
|
|
439
|
+
i0.ɵɵadvance(1);
|
|
440
|
+
i0.ɵɵproperty("ngForOf", ctx_r69.filtersForm.controls);
|
|
441
|
+
} }
|
|
442
|
+
function TableComponent_div_0_div_3_div_9_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
443
|
+
const _r105 = i0.ɵɵgetCurrentView();
|
|
444
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 61);
|
|
445
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r105); const ctx_r104 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r104.addFilter()); });
|
|
446
|
+
i0.ɵɵelement(2, "i", 62);
|
|
447
|
+
i0.ɵɵtext(3, " Adicionar Filtro ");
|
|
448
|
+
i0.ɵɵelementEnd()();
|
|
449
|
+
} }
|
|
450
|
+
function TableComponent_div_0_div_3_div_9_div_4_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
451
|
+
const _r108 = i0.ɵɵgetCurrentView();
|
|
452
|
+
i0.ɵɵelementStart(0, "button", 69);
|
|
453
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r108); const ctx_r107 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r107.handleDownload()); });
|
|
454
|
+
i0.ɵɵelement(1, "i", 70);
|
|
455
|
+
i0.ɵɵtext(2, " Exportar ");
|
|
456
|
+
i0.ɵɵelementEnd();
|
|
457
|
+
} if (rf & 2) {
|
|
458
|
+
const ctx_r106 = i0.ɵɵnextContext(5);
|
|
459
|
+
i0.ɵɵproperty("disabled", ctx_r106.dataSource && ctx_r106.dataSource.filteredData.length <= 0);
|
|
460
|
+
} }
|
|
461
|
+
function TableComponent_div_0_div_3_div_9_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
462
|
+
const _r110 = i0.ɵɵgetCurrentView();
|
|
463
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "button", 64);
|
|
464
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r110); const ctx_r109 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r109.search()); });
|
|
465
|
+
i0.ɵɵelement(2, "i", 65);
|
|
466
|
+
i0.ɵɵtext(3, " Pesquisar ");
|
|
467
|
+
i0.ɵɵelementEnd();
|
|
468
|
+
i0.ɵɵelementStart(4, "button", 66);
|
|
469
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r110); const ctx_r111 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r111.resetFilter()); });
|
|
470
|
+
i0.ɵɵelement(5, "i", 67);
|
|
471
|
+
i0.ɵɵtext(6, " Resetar ");
|
|
472
|
+
i0.ɵɵelementEnd();
|
|
473
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_3_div_9_div_4_button_7_Template, 3, 1, "button", 68);
|
|
474
|
+
i0.ɵɵelementEnd();
|
|
475
|
+
} if (rf & 2) {
|
|
476
|
+
const ctx_r71 = i0.ɵɵnextContext(4);
|
|
477
|
+
i0.ɵɵadvance(7);
|
|
478
|
+
i0.ɵɵproperty("ngIf", ctx_r71.data.download !== false && ctx_r71.downloadTable);
|
|
479
|
+
} }
|
|
480
|
+
function TableComponent_div_0_div_3_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
481
|
+
i0.ɵɵelementStart(0, "div");
|
|
482
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_Template, 2, 1, "div", 26);
|
|
483
|
+
i0.ɵɵelementStart(2, "div", 27);
|
|
484
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_div_9_div_3_Template, 4, 0, "div", 28);
|
|
485
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_div_3_div_9_div_4_Template, 8, 1, "div", 29);
|
|
486
|
+
i0.ɵɵelementEnd()();
|
|
487
|
+
} if (rf & 2) {
|
|
488
|
+
const ctx_r61 = i0.ɵɵnextContext(3);
|
|
489
|
+
i0.ɵɵadvance(1);
|
|
490
|
+
i0.ɵɵproperty("ngIf", ctx_r61.filtersForm.controls.length > 0);
|
|
491
|
+
i0.ɵɵadvance(2);
|
|
492
|
+
i0.ɵɵproperty("ngIf", ctx_r61.dropdownItems.length > 0);
|
|
493
|
+
i0.ɵɵadvance(1);
|
|
494
|
+
i0.ɵɵproperty("ngIf", ctx_r61.hasFilterableColumn === true || ctx_r61.hasSortableColumn === true);
|
|
495
|
+
} }
|
|
496
|
+
function TableComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
497
|
+
i0.ɵɵelementStart(0, "div", 18)(1, "div", 19)(2, "div", 20)(3, "div", 21);
|
|
498
|
+
i0.ɵɵelement(4, "i", 22);
|
|
499
|
+
i0.ɵɵelementStart(5, "span", 23);
|
|
500
|
+
i0.ɵɵtext(6, "Filtros e A\u00E7\u00F5es");
|
|
501
|
+
i0.ɵɵelementEnd()();
|
|
502
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_3_button_7_Template, 3, 4, "button", 24);
|
|
503
|
+
i0.ɵɵelementEnd()();
|
|
504
|
+
i0.ɵɵtemplate(8, TableComponent_div_0_div_3_div_8_Template, 9, 0, "div", 25);
|
|
505
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_div_3_div_9_Template, 5, 3, "div", 28);
|
|
506
|
+
i0.ɵɵelementEnd();
|
|
507
|
+
} if (rf & 2) {
|
|
508
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
509
|
+
i0.ɵɵadvance(7);
|
|
510
|
+
i0.ɵɵproperty("ngIf", ctx_r2.data.actionButton && ctx_r2.data.actionButton.condition);
|
|
511
|
+
i0.ɵɵadvance(1);
|
|
512
|
+
i0.ɵɵproperty("ngIf", ctx_r2.hasFilterableColumn === true && ctx_r2.data.showSimpleSearch !== false);
|
|
513
|
+
i0.ɵɵadvance(1);
|
|
514
|
+
i0.ɵɵproperty("ngIf", ctx_r2.dropdownItems.length > 0);
|
|
515
|
+
} }
|
|
516
|
+
function TableComponent_div_0_lib_table_tabs_5_Template(rf, ctx) { if (rf & 1) {
|
|
517
|
+
const _r113 = i0.ɵɵgetCurrentView();
|
|
518
|
+
i0.ɵɵelementStart(0, "lib-table-tabs", 79);
|
|
519
|
+
i0.ɵɵlistener("tabSelected", function TableComponent_div_0_lib_table_tabs_5_Template_lib_table_tabs_tabSelected_0_listener($event) { i0.ɵɵrestoreView(_r113); const ctx_r112 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r112.onTabSelected($event)); });
|
|
520
|
+
i0.ɵɵelementEnd();
|
|
521
|
+
} if (rf & 2) {
|
|
522
|
+
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
523
|
+
i0.ɵɵproperty("tabsData", ctx_r3.data.tabs.tabsData)("selectedTab", ctx_r3.selectedTab);
|
|
524
|
+
} }
|
|
525
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_th_1_Template(rf, ctx) { if (rf & 1) {
|
|
526
|
+
i0.ɵɵelementStart(0, "th", 85);
|
|
527
|
+
i0.ɵɵtext(1);
|
|
528
|
+
i0.ɵɵelementEnd();
|
|
529
|
+
} if (rf & 2) {
|
|
530
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
531
|
+
i0.ɵɵadvance(1);
|
|
532
|
+
i0.ɵɵtextInterpolate1(" ", col_r114.title, " ");
|
|
533
|
+
} }
|
|
534
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_th_2_Template(rf, ctx) { if (rf & 1) {
|
|
535
|
+
i0.ɵɵelementStart(0, "th", 86);
|
|
536
|
+
i0.ɵɵtext(1);
|
|
537
|
+
i0.ɵɵelementEnd();
|
|
538
|
+
} if (rf & 2) {
|
|
539
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
540
|
+
i0.ɵɵadvance(1);
|
|
541
|
+
i0.ɵɵtextInterpolate1(" ", col_r114.title, " ");
|
|
542
|
+
} }
|
|
543
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_1_Template(rf, ctx) { if (rf & 1) {
|
|
544
|
+
i0.ɵɵelementStart(0, "a", 92);
|
|
545
|
+
i0.ɵɵtext(1);
|
|
546
|
+
i0.ɵɵelementEnd();
|
|
547
|
+
} if (rf & 2) {
|
|
548
|
+
const row_r121 = i0.ɵɵnextContext(3).$implicit;
|
|
549
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
550
|
+
const ctx_r129 = i0.ɵɵnextContext(2);
|
|
551
|
+
i0.ɵɵproperty("href", row_r121[col_r114.property], i0.ɵɵsanitizeUrl);
|
|
552
|
+
i0.ɵɵadvance(1);
|
|
553
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r129.getDisplayValue(col_r114, row_r121), " ");
|
|
554
|
+
} }
|
|
555
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_2_Template(rf, ctx) { if (rf & 1) {
|
|
556
|
+
i0.ɵɵelementStart(0, "a", 92);
|
|
557
|
+
i0.ɵɵtext(1);
|
|
558
|
+
i0.ɵɵelementEnd();
|
|
559
|
+
} if (rf & 2) {
|
|
560
|
+
const row_r121 = i0.ɵɵnextContext(3).$implicit;
|
|
561
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
562
|
+
const ctx_r130 = i0.ɵɵnextContext(2);
|
|
563
|
+
i0.ɵɵproperty("href", col_r114.hasLink, i0.ɵɵsanitizeUrl);
|
|
564
|
+
i0.ɵɵadvance(1);
|
|
565
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r130.getDisplayValue(col_r114, row_r121), " ");
|
|
566
|
+
} }
|
|
567
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_span_3_Template(rf, ctx) { if (rf & 1) {
|
|
568
|
+
i0.ɵɵelementStart(0, "span");
|
|
569
|
+
i0.ɵɵtext(1);
|
|
570
|
+
i0.ɵɵelementEnd();
|
|
571
|
+
} if (rf & 2) {
|
|
572
|
+
const row_r121 = i0.ɵɵnextContext(3).$implicit;
|
|
573
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
574
|
+
const ctx_r131 = i0.ɵɵnextContext(2);
|
|
575
|
+
i0.ɵɵadvance(1);
|
|
576
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r131.getDisplayValue(col_r114, row_r121), " ");
|
|
577
|
+
} }
|
|
578
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
579
|
+
i0.ɵɵelementStart(0, "span");
|
|
580
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_1_Template, 2, 2, "a", 91);
|
|
581
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_2_Template, 2, 2, "a", 91);
|
|
582
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_span_3_Template, 2, 1, "span", 28);
|
|
583
|
+
i0.ɵɵelementEnd();
|
|
584
|
+
} if (rf & 2) {
|
|
585
|
+
const col_r114 = i0.ɵɵnextContext(4).$implicit;
|
|
586
|
+
const ctx_r126 = i0.ɵɵnextContext(2);
|
|
587
|
+
i0.ɵɵadvance(1);
|
|
588
|
+
i0.ɵɵproperty("ngIf", col_r114.hasLink === true);
|
|
589
|
+
i0.ɵɵadvance(1);
|
|
590
|
+
i0.ɵɵproperty("ngIf", col_r114.hasLink && ctx_r126.isString(col_r114.hasLink));
|
|
591
|
+
i0.ɵɵadvance(1);
|
|
592
|
+
i0.ɵɵproperty("ngIf", col_r114.hasLink !== true && !ctx_r126.isString(col_r114.hasLink));
|
|
593
|
+
} }
|
|
594
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_0_Template(rf, ctx) { if (rf & 1) {
|
|
595
|
+
i0.ɵɵelementStart(0, "a", 92);
|
|
596
|
+
i0.ɵɵtext(1);
|
|
597
|
+
i0.ɵɵelementEnd();
|
|
598
|
+
} if (rf & 2) {
|
|
599
|
+
const row_r121 = i0.ɵɵnextContext(3).$implicit;
|
|
600
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
601
|
+
const ctx_r139 = i0.ɵɵnextContext(2);
|
|
602
|
+
i0.ɵɵproperty("href", row_r121[col_r114.property], i0.ɵɵsanitizeUrl);
|
|
603
|
+
i0.ɵɵadvance(1);
|
|
604
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r139.getDisplayValue(col_r114, row_r121, true), " ");
|
|
605
|
+
} }
|
|
606
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_1_Template(rf, ctx) { if (rf & 1) {
|
|
607
|
+
i0.ɵɵelementStart(0, "a", 92);
|
|
608
|
+
i0.ɵɵtext(1);
|
|
609
|
+
i0.ɵɵelementEnd();
|
|
610
|
+
} if (rf & 2) {
|
|
611
|
+
const row_r121 = i0.ɵɵnextContext(3).$implicit;
|
|
612
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
613
|
+
const ctx_r140 = i0.ɵɵnextContext(2);
|
|
614
|
+
i0.ɵɵproperty("href", col_r114.hasLink, i0.ɵɵsanitizeUrl);
|
|
615
|
+
i0.ɵɵadvance(1);
|
|
616
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r140.getDisplayValue(col_r114, row_r121, true), " ");
|
|
617
|
+
} }
|
|
618
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
619
|
+
i0.ɵɵelementStart(0, "span");
|
|
620
|
+
i0.ɵɵtext(1);
|
|
621
|
+
i0.ɵɵelementEnd();
|
|
622
|
+
} if (rf & 2) {
|
|
623
|
+
const row_r121 = i0.ɵɵnextContext(3).$implicit;
|
|
624
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
625
|
+
const ctx_r141 = i0.ɵɵnextContext(2);
|
|
626
|
+
i0.ɵɵadvance(1);
|
|
627
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r141.getDisplayValue(col_r114, row_r121, true), " ");
|
|
628
|
+
} }
|
|
629
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
630
|
+
i0.ɵɵtemplate(0, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_0_Template, 2, 2, "a", 91);
|
|
631
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_1_Template, 2, 2, "a", 91);
|
|
632
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_span_2_Template, 2, 1, "span", 28);
|
|
633
|
+
} if (rf & 2) {
|
|
634
|
+
const col_r114 = i0.ɵɵnextContext(4).$implicit;
|
|
635
|
+
const ctx_r128 = i0.ɵɵnextContext(2);
|
|
636
|
+
i0.ɵɵproperty("ngIf", col_r114.hasLink === true);
|
|
637
|
+
i0.ɵɵadvance(1);
|
|
638
|
+
i0.ɵɵproperty("ngIf", col_r114.hasLink && ctx_r128.isString(col_r114.hasLink));
|
|
639
|
+
i0.ɵɵadvance(1);
|
|
640
|
+
i0.ɵɵproperty("ngIf", col_r114.hasLink !== true && !ctx_r128.isString(col_r114.hasLink));
|
|
641
|
+
} }
|
|
642
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
643
|
+
i0.ɵɵelementStart(0, "span");
|
|
644
|
+
i0.ɵɵelementContainerStart(1);
|
|
645
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_Template, 4, 3, "span", 89);
|
|
646
|
+
i0.ɵɵelementContainerEnd();
|
|
647
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_Template, 3, 3, "ng-template", null, 90, i0.ɵɵtemplateRefExtractor);
|
|
648
|
+
i0.ɵɵelementEnd();
|
|
649
|
+
} if (rf & 2) {
|
|
650
|
+
const _r127 = i0.ɵɵreference(4);
|
|
651
|
+
const row_r121 = i0.ɵɵnextContext().$implicit;
|
|
652
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
653
|
+
i0.ɵɵadvance(2);
|
|
654
|
+
i0.ɵɵproperty("ngIf", col_r114.charLimit && row_r121[col_r114.property] && row_r121[col_r114.property].length > col_r114.charLimit)("ngIfElse", _r127);
|
|
655
|
+
} }
|
|
656
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_mat_spinner_1_Template(rf, ctx) { if (rf & 1) {
|
|
657
|
+
i0.ɵɵelement(0, "mat-spinner", 96);
|
|
658
|
+
} if (rf & 2) {
|
|
659
|
+
i0.ɵɵproperty("diameter", 32);
|
|
660
|
+
} }
|
|
661
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
662
|
+
const _r154 = i0.ɵɵgetCurrentView();
|
|
663
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
664
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_mat_spinner_1_Template, 1, 1, "mat-spinner", 94);
|
|
665
|
+
i0.ɵɵelementStart(2, "img", 95);
|
|
666
|
+
i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_load_2_listener() { i0.ɵɵrestoreView(_r154); const row_r121 = i0.ɵɵnextContext().$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; const ctx_r152 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r152.onImageLoad(row_r121, col_r114)); })("error", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_error_2_listener($event) { i0.ɵɵrestoreView(_r154); const row_r121 = i0.ɵɵnextContext().$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; const ctx_r156 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r156.onImageError($event, row_r121, col_r114, col_r114.image.default)); });
|
|
667
|
+
i0.ɵɵelementEnd()();
|
|
668
|
+
} if (rf & 2) {
|
|
669
|
+
const row_r121 = i0.ɵɵnextContext().$implicit;
|
|
670
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
671
|
+
const ctx_r123 = i0.ɵɵnextContext(2);
|
|
672
|
+
i0.ɵɵadvance(1);
|
|
673
|
+
i0.ɵɵproperty("ngIf", ctx_r123.isImageLoading(row_r121, col_r114));
|
|
674
|
+
i0.ɵɵadvance(1);
|
|
675
|
+
i0.ɵɵclassProp("opacity-0", ctx_r123.isImageLoading(row_r121, col_r114));
|
|
676
|
+
i0.ɵɵproperty("src", col_r114.image.path + "/" + row_r121[col_r114.property], i0.ɵɵsanitizeUrl)("ngClass", col_r114.image.class);
|
|
677
|
+
} }
|
|
678
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_mat_spinner_1_Template(rf, ctx) { if (rf & 1) {
|
|
679
|
+
i0.ɵɵelement(0, "mat-spinner", 96);
|
|
680
|
+
} if (rf & 2) {
|
|
681
|
+
i0.ɵɵproperty("diameter", 32);
|
|
682
|
+
} }
|
|
683
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
684
|
+
const _r164 = i0.ɵɵgetCurrentView();
|
|
685
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
686
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_mat_spinner_1_Template, 1, 1, "mat-spinner", 94);
|
|
687
|
+
i0.ɵɵelementStart(2, "img", 95);
|
|
688
|
+
i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_load_2_listener() { i0.ɵɵrestoreView(_r164); const row_r121 = i0.ɵɵnextContext().$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; const ctx_r162 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r162.onImageLoad(row_r121, col_r114)); })("error", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_error_2_listener($event) { i0.ɵɵrestoreView(_r164); const row_r121 = i0.ɵɵnextContext().$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; const ctx_r166 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r166.onImageError($event, row_r121, col_r114, col_r114.image.default)); });
|
|
689
|
+
i0.ɵɵelementEnd()();
|
|
690
|
+
} if (rf & 2) {
|
|
691
|
+
const row_r121 = i0.ɵɵnextContext().$implicit;
|
|
692
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
693
|
+
const ctx_r124 = i0.ɵɵnextContext(2);
|
|
694
|
+
i0.ɵɵadvance(1);
|
|
695
|
+
i0.ɵɵproperty("ngIf", ctx_r124.isImageLoading(row_r121, col_r114));
|
|
696
|
+
i0.ɵɵadvance(1);
|
|
697
|
+
i0.ɵɵclassProp("opacity-0", ctx_r124.isImageLoading(row_r121, col_r114));
|
|
698
|
+
i0.ɵɵproperty("src", row_r121[col_r114.property], i0.ɵɵsanitizeUrl)("ngClass", col_r114.image.class);
|
|
699
|
+
} }
|
|
700
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
701
|
+
i0.ɵɵelementStart(0, "span", 100);
|
|
702
|
+
i0.ɵɵtext(1);
|
|
703
|
+
i0.ɵɵelementEnd();
|
|
704
|
+
} if (rf & 2) {
|
|
705
|
+
const iconClass_r172 = i0.ɵɵnextContext().$implicit;
|
|
706
|
+
i0.ɵɵproperty("ngClass", iconClass_r172.class);
|
|
707
|
+
i0.ɵɵadvance(1);
|
|
708
|
+
i0.ɵɵtextInterpolate(iconClass_r172.text);
|
|
709
|
+
} }
|
|
710
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
711
|
+
const _r176 = i0.ɵɵgetCurrentView();
|
|
712
|
+
i0.ɵɵelementStart(0, "button", 98);
|
|
713
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template_button_click_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r176); const iconClass_r172 = restoredCtx.$implicit; const row_r121 = i0.ɵɵnextContext(2).$implicit; return i0.ɵɵresetView(iconClass_r172.buttonMethod ? iconClass_r172.buttonMethod(row_r121, $event) : $event.stopPropagation()); });
|
|
714
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_span_1_Template, 2, 2, "span", 99);
|
|
715
|
+
i0.ɵɵelementEnd();
|
|
716
|
+
} if (rf & 2) {
|
|
717
|
+
const iconClass_r172 = ctx.$implicit;
|
|
718
|
+
const row_r121 = i0.ɵɵnextContext(2).$implicit;
|
|
719
|
+
i0.ɵɵadvance(1);
|
|
720
|
+
i0.ɵɵproperty("ngIf", iconClass_r172.condition === undefined || iconClass_r172.condition !== undefined && iconClass_r172.condition(row_r121));
|
|
721
|
+
} }
|
|
722
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
723
|
+
i0.ɵɵelementContainerStart(0);
|
|
724
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template, 2, 1, "button", 97);
|
|
725
|
+
i0.ɵɵelementContainerEnd();
|
|
726
|
+
} if (rf & 2) {
|
|
727
|
+
const col_r114 = i0.ɵɵnextContext(3).$implicit;
|
|
728
|
+
i0.ɵɵadvance(1);
|
|
729
|
+
i0.ɵɵproperty("ngForOf", col_r114.iconClass);
|
|
730
|
+
} }
|
|
731
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template(rf, ctx) { if (rf & 1) {
|
|
732
|
+
const _r182 = i0.ɵɵgetCurrentView();
|
|
733
|
+
i0.ɵɵelementStart(0, "td", 87);
|
|
734
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r182); const row_r121 = restoredCtx.$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; return i0.ɵɵresetView(col_r114.method ? col_r114.method(row_r121) : null); })("mouseenter", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mouseenter_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r182); const row_r121 = restoredCtx.$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; const ctx_r183 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r183.onCellMouseEnter($event, row_r121, col_r114)); })("mouseleave", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mouseleave_0_listener() { i0.ɵɵrestoreView(_r182); const ctx_r185 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r185.onCellMouseLeave()); })("mousemove", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mousemove_0_listener($event) { i0.ɵɵrestoreView(_r182); const ctx_r186 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r186.onCellMouseMove($event)); });
|
|
735
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_Template, 5, 2, "span", 28);
|
|
736
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template, 3, 5, "div", 88);
|
|
737
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template, 3, 5, "div", 88);
|
|
738
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_Template, 2, 1, "ng-container", 28);
|
|
739
|
+
i0.ɵɵelementEnd();
|
|
740
|
+
} if (rf & 2) {
|
|
741
|
+
const col_r114 = i0.ɵɵnextContext(2).$implicit;
|
|
742
|
+
i0.ɵɵadvance(1);
|
|
743
|
+
i0.ɵɵproperty("ngIf", !col_r114.image && !col_r114.iconClass && !col_r114.method);
|
|
744
|
+
i0.ɵɵadvance(1);
|
|
745
|
+
i0.ɵɵproperty("ngIf", col_r114.image && col_r114.image.path && !col_r114.iconClass && !col_r114.method);
|
|
746
|
+
i0.ɵɵadvance(1);
|
|
747
|
+
i0.ɵɵproperty("ngIf", col_r114.image && col_r114.image.url && !col_r114.iconClass && !col_r114.method);
|
|
748
|
+
i0.ɵɵadvance(1);
|
|
749
|
+
i0.ɵɵproperty("ngIf", col_r114.iconClass);
|
|
750
|
+
} }
|
|
751
|
+
function TableComponent_div_0_ng_container_9_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
752
|
+
i0.ɵɵelementContainerStart(0);
|
|
753
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_th_1_Template, 2, 1, "th", 82);
|
|
754
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_th_2_Template, 2, 1, "th", 83);
|
|
755
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template, 5, 4, "td", 84);
|
|
756
|
+
i0.ɵɵelementContainerEnd();
|
|
757
|
+
} if (rf & 2) {
|
|
758
|
+
const col_r114 = i0.ɵɵnextContext().$implicit;
|
|
759
|
+
const ctx_r115 = i0.ɵɵnextContext(2);
|
|
760
|
+
i0.ɵɵadvance(1);
|
|
761
|
+
i0.ɵɵproperty("ngIf", !col_r114.isSortable || ctx_r115.data.pagination === true);
|
|
762
|
+
i0.ɵɵadvance(1);
|
|
763
|
+
i0.ɵɵproperty("ngIf", col_r114.isSortable && ctx_r115.data.pagination === false);
|
|
764
|
+
} }
|
|
765
|
+
function TableComponent_div_0_ng_container_9_Template(rf, ctx) { if (rf & 1) {
|
|
766
|
+
i0.ɵɵelementContainerStart(0, 80);
|
|
767
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_Template, 4, 2, "ng-container", 81);
|
|
768
|
+
i0.ɵɵelementContainerEnd();
|
|
769
|
+
} if (rf & 2) {
|
|
770
|
+
const col_r114 = ctx.$implicit;
|
|
771
|
+
i0.ɵɵpropertyInterpolate("matColumnDef", col_r114.property);
|
|
772
|
+
} }
|
|
773
|
+
function TableComponent_div_0_tr_10_Template(rf, ctx) { if (rf & 1) {
|
|
774
|
+
i0.ɵɵelement(0, "tr", 101);
|
|
775
|
+
} }
|
|
776
|
+
function TableComponent_div_0_tr_11_Template(rf, ctx) { if (rf & 1) {
|
|
777
|
+
const _r191 = i0.ɵɵgetCurrentView();
|
|
778
|
+
i0.ɵɵelementStart(0, "tr", 102);
|
|
779
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_tr_11_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r191); const row_r189 = restoredCtx.$implicit; const ctx_r190 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r190.goToDetails(row_r189)); });
|
|
780
|
+
i0.ɵɵelementEnd();
|
|
781
|
+
} if (rf & 2) {
|
|
782
|
+
const ctx_r7 = i0.ɵɵnextContext(2);
|
|
783
|
+
i0.ɵɵproperty("ngClass", ctx_r7.getTableRowNgClass());
|
|
784
|
+
} }
|
|
785
|
+
function TableComponent_div_0_tr_12_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
786
|
+
i0.ɵɵelementStart(0, "td", 105);
|
|
787
|
+
i0.ɵɵtext(1, " Nenhum resultado encontrado para a busca ");
|
|
788
|
+
i0.ɵɵelementEnd();
|
|
789
|
+
} }
|
|
790
|
+
function TableComponent_div_0_tr_12_Template(rf, ctx) { if (rf & 1) {
|
|
791
|
+
i0.ɵɵelementStart(0, "tr", 103);
|
|
792
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_tr_12_td_1_Template, 2, 0, "td", 104);
|
|
793
|
+
i0.ɵɵpipe(2, "async");
|
|
794
|
+
i0.ɵɵelementEnd();
|
|
795
|
+
} if (rf & 2) {
|
|
796
|
+
const ctx_r8 = i0.ɵɵnextContext(2);
|
|
797
|
+
i0.ɵɵadvance(1);
|
|
798
|
+
i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind1(2, 1, ctx_r8.isLoading$));
|
|
799
|
+
} }
|
|
800
|
+
function TableComponent_div_0_div_13_Template(rf, ctx) { if (rf & 1) {
|
|
801
|
+
i0.ɵɵelementStart(0, "div", 106);
|
|
802
|
+
i0.ɵɵelement(1, "mat-spinner");
|
|
803
|
+
i0.ɵɵelementEnd();
|
|
804
|
+
} }
|
|
805
|
+
const _c0 = function () { return [25, 50, 100]; };
|
|
806
|
+
function TableComponent_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
807
|
+
const _r194 = i0.ɵɵgetCurrentView();
|
|
808
|
+
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2);
|
|
809
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_div_2_Template, 13, 5, "div", 3);
|
|
810
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_Template, 10, 3, "div", 3);
|
|
811
|
+
i0.ɵɵelementStart(4, "div", 4);
|
|
812
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_lib_table_tabs_5_Template, 1, 2, "lib-table-tabs", 5);
|
|
813
|
+
i0.ɵɵelementStart(6, "div", 6)(7, "table", 7, 8);
|
|
814
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_ng_container_9_Template, 2, 1, "ng-container", 9);
|
|
815
|
+
i0.ɵɵtemplate(10, TableComponent_div_0_tr_10_Template, 1, 0, "tr", 10);
|
|
816
|
+
i0.ɵɵtemplate(11, TableComponent_div_0_tr_11_Template, 1, 1, "tr", 11);
|
|
817
|
+
i0.ɵɵtemplate(12, TableComponent_div_0_tr_12_Template, 3, 3, "tr", 12);
|
|
818
|
+
i0.ɵɵelementEnd();
|
|
819
|
+
i0.ɵɵtemplate(13, TableComponent_div_0_div_13_Template, 2, 0, "div", 13);
|
|
820
|
+
i0.ɵɵpipe(14, "async");
|
|
821
|
+
i0.ɵɵelementStart(15, "div", 14)(16, "mat-paginator", 15, 16);
|
|
822
|
+
i0.ɵɵlistener("page", function TableComponent_div_0_Template_mat_paginator_page_16_listener($event) { i0.ɵɵrestoreView(_r194); const ctx_r193 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r193.onPageChange($event)); });
|
|
823
|
+
i0.ɵɵelementEnd()()()()();
|
|
824
|
+
i0.ɵɵelement(18, "lib-table-tooltip", 17);
|
|
825
|
+
i0.ɵɵelementEnd();
|
|
826
|
+
} if (rf & 2) {
|
|
827
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
828
|
+
i0.ɵɵadvance(2);
|
|
829
|
+
i0.ɵɵproperty("ngIf", ctx_r0.data.pagination === true && (ctx_r0.dropdownItems.length > 0 || ctx_r0.sortableDropdownItems.length > 0 || ctx_r0.data.actionButton));
|
|
830
|
+
i0.ɵɵadvance(1);
|
|
831
|
+
i0.ɵɵproperty("ngIf", ctx_r0.data.pagination === false && (ctx_r0.hasFilterableColumn === true || ctx_r0.dropdownItems.length > 0 || ctx_r0.data.actionButton));
|
|
832
|
+
i0.ɵɵadvance(2);
|
|
833
|
+
i0.ɵɵproperty("ngIf", ctx_r0.data.tabs && ctx_r0.data.tabs.tabsData && ctx_r0.data.tabs.tabsData.length > 0);
|
|
834
|
+
i0.ɵɵadvance(2);
|
|
835
|
+
i0.ɵɵproperty("dataSource", ctx_r0.dataSource);
|
|
836
|
+
i0.ɵɵadvance(2);
|
|
837
|
+
i0.ɵɵproperty("ngForOf", ctx_r0.data.displayedColumns)("ngForTrackBy", ctx_r0.trackByProperty);
|
|
838
|
+
i0.ɵɵadvance(1);
|
|
839
|
+
i0.ɵɵproperty("matHeaderRowDef", ctx_r0.columnProperties);
|
|
840
|
+
i0.ɵɵadvance(1);
|
|
841
|
+
i0.ɵɵproperty("matRowDefColumns", ctx_r0.columnProperties);
|
|
842
|
+
i0.ɵɵadvance(2);
|
|
843
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(14, 15, ctx_r0.isLoading$));
|
|
844
|
+
i0.ɵɵadvance(3);
|
|
845
|
+
i0.ɵɵproperty("pageSizeOptions", i0.ɵɵpureFunction0(17, _c0))("pageSize", ctx_r0.pageSize)("length", ctx_r0.totalItems)("ngClass", ctx_r0.getPaginatorNgClass());
|
|
846
|
+
i0.ɵɵadvance(2);
|
|
847
|
+
i0.ɵɵproperty("state", ctx_r0.tooltipState)("styles", ctx_r0.getTooltipStyles());
|
|
848
|
+
} }
|
|
849
|
+
export class TableComponent {
|
|
850
|
+
// CONSTRUCTOR
|
|
851
|
+
constructor(router, tableService, filterService, tooltipService, paginationService, firestore, el, cdr) {
|
|
852
|
+
this.router = router;
|
|
853
|
+
this.tableService = tableService;
|
|
854
|
+
this.filterService = filterService;
|
|
855
|
+
this.tooltipService = tooltipService;
|
|
856
|
+
this.paginationService = paginationService;
|
|
857
|
+
this.firestore = firestore;
|
|
858
|
+
this.el = el;
|
|
859
|
+
this.cdr = cdr;
|
|
860
|
+
this.arrange = null;
|
|
861
|
+
this.currentPageNumber = 1;
|
|
862
|
+
this.currentClientPageIndex = 0;
|
|
863
|
+
this.isLoading$ = new BehaviorSubject(false);
|
|
864
|
+
this.items = [];
|
|
865
|
+
this.filteredItems = [];
|
|
866
|
+
this.lastDoc = null;
|
|
867
|
+
this.firstDoc = null;
|
|
868
|
+
this.sortBy = {
|
|
869
|
+
field: TABLE_DEFAULTS.SORT_FIELD,
|
|
870
|
+
order: TABLE_DEFAULTS.SORT_ORDER,
|
|
871
|
+
};
|
|
872
|
+
this.columnProperties = [];
|
|
873
|
+
this.selectSort = new FormControl('');
|
|
874
|
+
this.currentArrange = '';
|
|
875
|
+
this.hasNextPage = false;
|
|
876
|
+
this.dropdownItems = [];
|
|
877
|
+
this.sortableDropdownItems = [];
|
|
878
|
+
this.pageSize = TABLE_DEFAULTS.PAGE_SIZE;
|
|
879
|
+
this.totalItems = 0;
|
|
880
|
+
this.filterValue = null;
|
|
881
|
+
this.hasFilterableColumn = false;
|
|
882
|
+
this.hasSortableColumn = false;
|
|
883
|
+
this.filterSubject = new Subject();
|
|
884
|
+
this.debounceTimeMs = TABLE_DEFAULTS.DEBOUNCE_TIME_MS;
|
|
885
|
+
this.selectedTab = 0;
|
|
886
|
+
// Controle de loading de imagens
|
|
887
|
+
this.imageLoadingState = new Map();
|
|
888
|
+
this.destroy$ = new Subject();
|
|
889
|
+
this.filtersForm = new FormArray([this.filterService.createFilterGroup()]);
|
|
890
|
+
this.tooltipState = this.tooltipService.createInitialState();
|
|
891
|
+
}
|
|
892
|
+
getActionButtonClass() {
|
|
893
|
+
return ((this.data?.actionButton?.colorClass || 'bg-blue-500') +
|
|
894
|
+
' flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium text-white hover:opacity-70');
|
|
895
|
+
}
|
|
896
|
+
getTableRowNgClass() {
|
|
897
|
+
return {
|
|
898
|
+
'example-element-row': this.data?.isNotClickable === true,
|
|
899
|
+
'example-element-row cursor-pointer': !this.data?.isNotClickable,
|
|
900
|
+
};
|
|
901
|
+
}
|
|
902
|
+
getPaginatorNgClass() {
|
|
903
|
+
return {
|
|
904
|
+
'hide-length': ['filter', 'filterByDate', 'equals'].includes(this.currentArrange) ||
|
|
905
|
+
!!this.data?.filterFn,
|
|
906
|
+
'hide-next-button': !this.hasNextPage && this.data?.pagination === true,
|
|
907
|
+
'hide-last-button': (!this.hasNextPage && this.data?.pagination === true) ||
|
|
908
|
+
!!this.data?.filterFn,
|
|
909
|
+
};
|
|
910
|
+
}
|
|
911
|
+
// FILTER METHODS (delegados ao FilterService)
|
|
912
|
+
createFilterGroup() {
|
|
913
|
+
return this.filterService.createFilterGroup();
|
|
914
|
+
}
|
|
915
|
+
addFilter(filterData) {
|
|
916
|
+
this.filterService.addFilter(this.filtersForm, this.data.pagination === true, filterData);
|
|
917
|
+
}
|
|
918
|
+
hasActiveDateFilter() {
|
|
919
|
+
return this.filterService.hasActiveDateFilter(this.filtersForm);
|
|
920
|
+
}
|
|
921
|
+
getAvailableFilterOptions(currentGroup) {
|
|
922
|
+
return this.filterService.getAvailableFilterOptions(this.dropdownItems, this.data.pagination === true, this.filtersForm, currentGroup);
|
|
923
|
+
}
|
|
924
|
+
onSelectFilterChange() {
|
|
925
|
+
const lastIndex = this.filtersForm.length - 1;
|
|
926
|
+
const lastFilter = this.filtersForm.at(lastIndex);
|
|
927
|
+
const selectedFilter = lastFilter.get('selectFilter')?.value;
|
|
928
|
+
if (selectedFilter) {
|
|
929
|
+
if (selectedFilter.arrange === 'filterByDate' &&
|
|
930
|
+
this.data.pagination === true) {
|
|
931
|
+
return;
|
|
932
|
+
}
|
|
933
|
+
this.addFilter();
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
removeFilter(index) {
|
|
937
|
+
this.filterService.removeFilter(this.filtersForm, index);
|
|
938
|
+
}
|
|
939
|
+
removeAllFilters() {
|
|
940
|
+
this.filterService.removeAllFilters(this.filtersForm);
|
|
941
|
+
this.resetFilter();
|
|
942
|
+
}
|
|
943
|
+
onDateInput(event, controlName, filterIndex) {
|
|
944
|
+
const filterGroup = this.filtersForm.at(filterIndex);
|
|
945
|
+
this.filterService.applyDateMask(event, controlName, filterGroup);
|
|
946
|
+
}
|
|
947
|
+
onDateFilterChange() {
|
|
948
|
+
if (this.data.pagination === false) {
|
|
949
|
+
this.arrange = this.filterService.buildArrangeFromFilters(this.filtersForm, this.sortBy);
|
|
950
|
+
this.applyFiltersToDataSource();
|
|
951
|
+
this.cdr.markForCheck();
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
applyFiltersToDataSource() {
|
|
955
|
+
if (!this.dataSource)
|
|
956
|
+
return;
|
|
957
|
+
let filteredItems = this.filterService.applyClientSideFilters([...this.items], this.filtersForm, this.sortBy);
|
|
958
|
+
this.dataSource.data = filteredItems;
|
|
959
|
+
this.filteredItems = filteredItems;
|
|
960
|
+
this.totalItems = filteredItems.length;
|
|
961
|
+
this.cdr.markForCheck();
|
|
962
|
+
}
|
|
963
|
+
applyClientSideFilters(items) {
|
|
964
|
+
return this.filterService.applyClientSideFilters(items, this.filtersForm, this.sortBy);
|
|
965
|
+
}
|
|
966
|
+
buildArrangeFromFilters() {
|
|
967
|
+
return this.filterService.buildArrangeFromFilters(this.filtersForm, this.sortBy);
|
|
968
|
+
}
|
|
969
|
+
// TOOLTIP METHODS (delegados ao TooltipService)
|
|
970
|
+
getTooltipStyles() {
|
|
971
|
+
return this.tooltipService.getTooltipStyles(this.tooltipState);
|
|
972
|
+
}
|
|
973
|
+
onCellMouseEnter(event, row, col) {
|
|
974
|
+
this.tooltipService.handleMouseEnter(event, row, col, (c, r, w) => this.getDisplayValue(c, r, w), (state) => {
|
|
975
|
+
this.tooltipState = { ...this.tooltipState, ...state };
|
|
976
|
+
this.cdr.markForCheck();
|
|
977
|
+
});
|
|
978
|
+
}
|
|
979
|
+
onCellMouseLeave() {
|
|
980
|
+
this.tooltipService.handleMouseLeave((state) => {
|
|
981
|
+
this.tooltipState = state;
|
|
982
|
+
this.cdr.markForCheck();
|
|
983
|
+
});
|
|
984
|
+
}
|
|
985
|
+
onCellMouseMove(event) {
|
|
986
|
+
this.tooltipService.handleMouseMove(event, this.tooltipState.showTooltip, (position) => {
|
|
987
|
+
this.tooltipState = { ...this.tooltipState, tooltipPosition: position };
|
|
988
|
+
this.cdr.markForCheck();
|
|
989
|
+
});
|
|
990
|
+
}
|
|
991
|
+
// TAB METHODS
|
|
992
|
+
onTabSelected(event) {
|
|
993
|
+
if (!this.data.tabs?.method)
|
|
994
|
+
return;
|
|
995
|
+
this.selectedTab = event.index;
|
|
996
|
+
this.data.tabs.method(event.tab, event.index);
|
|
997
|
+
this.cdr.markForCheck();
|
|
998
|
+
}
|
|
999
|
+
// UTILITY METHODS (delegados aos utils)
|
|
1000
|
+
getDisplayValue(col, row, withinLimit = false) {
|
|
1001
|
+
return getDisplayValue(col, row, withinLimit);
|
|
1002
|
+
}
|
|
1003
|
+
getNestedValue(obj, path) {
|
|
1004
|
+
return getNestedValue(obj, path);
|
|
1005
|
+
}
|
|
1006
|
+
isString(value) {
|
|
1007
|
+
return isString(value);
|
|
1008
|
+
}
|
|
1009
|
+
trackByProperty(_index, col) {
|
|
1010
|
+
return trackByProperty(_index, col);
|
|
1011
|
+
}
|
|
1012
|
+
// IMAGE LOADING METHODS
|
|
1013
|
+
getImageKey(row, col) {
|
|
1014
|
+
return getImageKey(row, col);
|
|
1015
|
+
}
|
|
1016
|
+
isImageLoading(row, col) {
|
|
1017
|
+
const key = this.getImageKey(row, col);
|
|
1018
|
+
return !this.imageLoadingState.has(key);
|
|
1019
|
+
}
|
|
1020
|
+
onImageLoad(row, col) {
|
|
1021
|
+
const key = this.getImageKey(row, col);
|
|
1022
|
+
this.imageLoadingState.set(key, true);
|
|
1023
|
+
this.cdr.markForCheck();
|
|
1024
|
+
}
|
|
1025
|
+
onImageError(event, row, col, defaultImage) {
|
|
1026
|
+
const key = this.getImageKey(row, col);
|
|
1027
|
+
this.imageLoadingState.set(key, true);
|
|
1028
|
+
const target = event.target;
|
|
1029
|
+
if (target) {
|
|
1030
|
+
if (defaultImage) {
|
|
1031
|
+
target.src = defaultImage;
|
|
1032
|
+
target.onerror = null;
|
|
1033
|
+
}
|
|
1034
|
+
else {
|
|
1035
|
+
target.style.display = 'none';
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
this.cdr.markForCheck();
|
|
1039
|
+
}
|
|
1040
|
+
// LIFECYCLE METHODS
|
|
1041
|
+
ngOnChanges(changes) {
|
|
1042
|
+
if (changes['data']) {
|
|
1043
|
+
setTimeout(() => this.applyCustomColors(), 0);
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
ngAfterViewInit() {
|
|
1047
|
+
this.applyCustomColors();
|
|
1048
|
+
}
|
|
1049
|
+
ngOnDestroy() {
|
|
1050
|
+
this.tooltipService.destroy();
|
|
1051
|
+
this.destroy$.next();
|
|
1052
|
+
this.destroy$.complete();
|
|
1053
|
+
}
|
|
1054
|
+
applyCustomColors() {
|
|
1055
|
+
const hostElement = this.el?.nativeElement;
|
|
1056
|
+
if (!hostElement || !this.data)
|
|
1057
|
+
return;
|
|
1058
|
+
if (this.data.color?.bg) {
|
|
1059
|
+
hostElement.style.setProperty('--table-color', this.data.color.bg);
|
|
1060
|
+
hostElement.style.setProperty('--table-header-bg', this.data.color.bg);
|
|
1061
|
+
}
|
|
1062
|
+
if (this.data.color?.text) {
|
|
1063
|
+
hostElement.style.setProperty('--table-text-color', this.data.color.text);
|
|
1064
|
+
hostElement.style.setProperty('--table-header-text', this.data.color.text);
|
|
1065
|
+
}
|
|
1066
|
+
setTimeout(() => {
|
|
1067
|
+
const headerCells = hostElement.querySelectorAll('.mat-header-cell, .mat-mdc-header-cell, th.mat-header-cell, th.mat-mdc-header-cell');
|
|
1068
|
+
headerCells.forEach((cell) => {
|
|
1069
|
+
if (this.data.color?.bg) {
|
|
1070
|
+
cell.style.backgroundColor = this.data.color.bg;
|
|
1071
|
+
}
|
|
1072
|
+
if (this.data.color?.text) {
|
|
1073
|
+
cell.style.color = this.data.color.text;
|
|
1074
|
+
}
|
|
1075
|
+
});
|
|
1076
|
+
}, 100);
|
|
1077
|
+
}
|
|
1078
|
+
async ngOnInit() {
|
|
1079
|
+
if (!this.data.color) {
|
|
1080
|
+
this.data.color = {
|
|
1081
|
+
bg: TABLE_DEFAULTS.DEFAULT_BG_COLOR,
|
|
1082
|
+
text: TABLE_DEFAULTS.DEFAULT_TEXT_COLOR,
|
|
1083
|
+
};
|
|
1084
|
+
}
|
|
1085
|
+
if (this.data.showSimpleSearch === undefined) {
|
|
1086
|
+
this.data.showSimpleSearch = true;
|
|
1087
|
+
}
|
|
1088
|
+
this.columnProperties = this.data.displayedColumns.map((column) => column.property);
|
|
1089
|
+
this.cdr.markForCheck();
|
|
1090
|
+
if (this.data.actionButton && !this.data.actionButton.condition) {
|
|
1091
|
+
this.data.actionButton.condition = (_row) => true;
|
|
1092
|
+
}
|
|
1093
|
+
// Inicializar dropdownItems usando FilterService
|
|
1094
|
+
const filterConfig = this.filterService.initializeDropdownItems(this.data.displayedColumns);
|
|
1095
|
+
this.dropdownItems = filterConfig.dropdownItems;
|
|
1096
|
+
this.sortableDropdownItems = filterConfig.sortableDropdownItems;
|
|
1097
|
+
this.hasFilterableColumn = filterConfig.hasFilterableColumn;
|
|
1098
|
+
this.hasSortableColumn = filterConfig.hasSortableColumn;
|
|
1099
|
+
if (this.data.filterableOptions) {
|
|
1100
|
+
this.dropdownItems = this.filterService.addFilterableOptions(this.dropdownItems, this.data.filterableOptions);
|
|
1101
|
+
}
|
|
1102
|
+
// Sem paginação
|
|
1103
|
+
if (this.data.pagination === false) {
|
|
1104
|
+
await this.loadItems();
|
|
1105
|
+
this.cdr.markForCheck();
|
|
1106
|
+
}
|
|
1107
|
+
// Com paginação
|
|
1108
|
+
if (this.data.pagination === true) {
|
|
1109
|
+
if (this.data.sortBy) {
|
|
1110
|
+
this.sortBy = {
|
|
1111
|
+
field: this.data.sortBy.field,
|
|
1112
|
+
order: this.data.sortBy.order,
|
|
1113
|
+
};
|
|
1114
|
+
}
|
|
1115
|
+
this.filterSubject
|
|
1116
|
+
.pipe(debounceTime(this.debounceTimeMs), takeUntil(this.destroy$))
|
|
1117
|
+
.subscribe(() => {
|
|
1118
|
+
this.loadItemsPaginated('reload', true);
|
|
1119
|
+
});
|
|
1120
|
+
this.isLoading$.next(true);
|
|
1121
|
+
this.cdr.markForCheck();
|
|
1122
|
+
await this.loadItemsPaginated('reload', true);
|
|
1123
|
+
this.sort.active = 'createdAt';
|
|
1124
|
+
this.sort.direction = 'desc';
|
|
1125
|
+
this.dataSource.paginator = this.paginator;
|
|
1126
|
+
this.dataSource.sort = this.sort;
|
|
1127
|
+
this.totalItems = 0;
|
|
1128
|
+
if (this.data.totalRef) {
|
|
1129
|
+
for (const totalRef of this.data.totalRef) {
|
|
1130
|
+
const totalRefDoc = await totalRef.ref.get();
|
|
1131
|
+
const docData = totalRefDoc.data();
|
|
1132
|
+
if (docData && docData[totalRef.field]) {
|
|
1133
|
+
const fieldValue = docData[totalRef.field];
|
|
1134
|
+
this.totalItems = (this.totalItems +
|
|
1135
|
+
(typeof fieldValue === 'number' ? fieldValue : 0));
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
this.isLoading$.next(false);
|
|
1140
|
+
this.cdr.markForCheck();
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1143
|
+
// DATA LOADING METHODS
|
|
1144
|
+
async loadItems() {
|
|
1145
|
+
this.imageLoadingState.clear();
|
|
1146
|
+
this.items = (await this.tableService.getItems(this.data.collectionRef));
|
|
1147
|
+
if (this.data.conditions) {
|
|
1148
|
+
this.filterItems();
|
|
1149
|
+
}
|
|
1150
|
+
await this.loadRelations();
|
|
1151
|
+
await this.loadQueryLengths();
|
|
1152
|
+
this.totalItems = this.items.length;
|
|
1153
|
+
this.arrange = {
|
|
1154
|
+
filters: [],
|
|
1155
|
+
sortBy: this.data.sortBy || {
|
|
1156
|
+
field: TABLE_DEFAULTS.SORT_FIELD,
|
|
1157
|
+
order: TABLE_DEFAULTS.SORT_ORDER,
|
|
1158
|
+
},
|
|
1159
|
+
};
|
|
1160
|
+
this.sortBy = this.data.sortBy || {
|
|
1161
|
+
field: TABLE_DEFAULTS.SORT_FIELD,
|
|
1162
|
+
order: TABLE_DEFAULTS.SORT_ORDER,
|
|
1163
|
+
};
|
|
1164
|
+
let itemsToDisplay = [...this.items];
|
|
1165
|
+
itemsToDisplay = this.applyClientSideFilters(itemsToDisplay);
|
|
1166
|
+
this.filteredItems = itemsToDisplay;
|
|
1167
|
+
this.dataSource = new MatTableDataSource(itemsToDisplay);
|
|
1168
|
+
this.dataSource.paginator = this.paginator;
|
|
1169
|
+
this.dataSource.sort = this.sort;
|
|
1170
|
+
if (this.data.sortBy) {
|
|
1171
|
+
this.dataSource.sort.active = this.data.sortBy.field;
|
|
1172
|
+
this.dataSource.sort.direction = this.data.sortBy.order;
|
|
1173
|
+
this.dataSource.sort.sortChange.emit();
|
|
1174
|
+
}
|
|
1175
|
+
this.dataSource.filterPredicate = (data, filter) => {
|
|
1176
|
+
const item = data;
|
|
1177
|
+
return this.data.displayedColumns.some((col) => {
|
|
1178
|
+
if (col.filterPredicates) {
|
|
1179
|
+
return col.filterPredicates.some((predicate) => {
|
|
1180
|
+
const propertyValue = item[col.property];
|
|
1181
|
+
if (!propertyValue || typeof propertyValue !== 'object') {
|
|
1182
|
+
return false;
|
|
1183
|
+
}
|
|
1184
|
+
const propertyRecord = propertyValue;
|
|
1185
|
+
const predicateValue = propertyRecord[predicate];
|
|
1186
|
+
if (predicateValue === null || predicateValue === undefined) {
|
|
1187
|
+
return false;
|
|
1188
|
+
}
|
|
1189
|
+
return String(predicateValue)
|
|
1190
|
+
.trim()
|
|
1191
|
+
.toLocaleLowerCase()
|
|
1192
|
+
.includes(filter);
|
|
1193
|
+
});
|
|
1194
|
+
}
|
|
1195
|
+
if (col.property && col.isFilterable) {
|
|
1196
|
+
const propertyValue = item[col.property];
|
|
1197
|
+
if (propertyValue === null || propertyValue === undefined) {
|
|
1198
|
+
return false;
|
|
1199
|
+
}
|
|
1200
|
+
return String(propertyValue)
|
|
1201
|
+
.trim()
|
|
1202
|
+
.toLocaleLowerCase()
|
|
1203
|
+
.includes(filter);
|
|
1204
|
+
}
|
|
1205
|
+
return false;
|
|
1206
|
+
});
|
|
1207
|
+
};
|
|
1208
|
+
this.filterPredicate = this.dataSource.filterPredicate;
|
|
1209
|
+
this.cdr.markForCheck();
|
|
1210
|
+
}
|
|
1211
|
+
async loadItemsPaginated(navigation = 'reload', reset = false) {
|
|
1212
|
+
this.imageLoadingState.clear();
|
|
1213
|
+
if (reset && ['forward', 'reload'].includes(navigation)) {
|
|
1214
|
+
this.lastDoc = null;
|
|
1215
|
+
this.currentClientPageIndex = 0;
|
|
1216
|
+
}
|
|
1217
|
+
if (reset && ['backward', 'reload'].includes(navigation)) {
|
|
1218
|
+
this.firstDoc = null;
|
|
1219
|
+
this.currentClientPageIndex = 0;
|
|
1220
|
+
}
|
|
1221
|
+
const activeFilters = this.filterService.extractActiveFilters(this.filtersForm);
|
|
1222
|
+
this.arrange = {
|
|
1223
|
+
filters: activeFilters,
|
|
1224
|
+
sortBy: this.sortBy,
|
|
1225
|
+
};
|
|
1226
|
+
const paginated = {
|
|
1227
|
+
batchSize: this.pageSize,
|
|
1228
|
+
collection: this.data.collection,
|
|
1229
|
+
doc: { lastDoc: this.lastDoc, firstDoc: this.firstDoc },
|
|
1230
|
+
navigation,
|
|
1231
|
+
arrange: this.arrange,
|
|
1232
|
+
conditions: this.data.conditions,
|
|
1233
|
+
size: this.totalItems,
|
|
1234
|
+
filterFn: this.data.filterFn,
|
|
1235
|
+
clientPageIndex: this.currentClientPageIndex,
|
|
1236
|
+
};
|
|
1237
|
+
const result = await this.tableService.getPaginated(paginated);
|
|
1238
|
+
this.items = result.items;
|
|
1239
|
+
await this.loadRelations();
|
|
1240
|
+
await this.loadQueryLengths();
|
|
1241
|
+
this.lastDoc = result.lastDoc;
|
|
1242
|
+
this.firstDoc = result.firstDoc;
|
|
1243
|
+
if (result.currentClientPageIndex !== undefined) {
|
|
1244
|
+
this.currentClientPageIndex = result.currentClientPageIndex;
|
|
1245
|
+
}
|
|
1246
|
+
let sum = 0;
|
|
1247
|
+
if (this.data.totalRef) {
|
|
1248
|
+
for (const totalRef of this.data.totalRef) {
|
|
1249
|
+
const totalRefDoc = await totalRef.ref.get();
|
|
1250
|
+
const docData = totalRefDoc.data();
|
|
1251
|
+
if (docData || result.filterLength) {
|
|
1252
|
+
const fieldValue = docData ? docData[totalRef.field] : undefined;
|
|
1253
|
+
const numericValue = typeof fieldValue === 'number' ? fieldValue : 0;
|
|
1254
|
+
sum = result.filterLength ?? (sum + numericValue);
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
this.totalItems = sum;
|
|
1258
|
+
}
|
|
1259
|
+
this.hasNextPage = result.hasNextPage;
|
|
1260
|
+
this.dataSource = new MatTableDataSource(this.items);
|
|
1261
|
+
this.filterPredicate = this.dataSource.filterPredicate;
|
|
1262
|
+
this.cdr.markForCheck();
|
|
1263
|
+
}
|
|
1264
|
+
// PAGINATION METHODS
|
|
1265
|
+
async onPageChange(event) {
|
|
1266
|
+
if (this.data.pagination !== true || !event)
|
|
1267
|
+
return;
|
|
1268
|
+
this.isLoading$.next(true);
|
|
1269
|
+
const currentState = {
|
|
1270
|
+
currentPageNumber: this.currentPageNumber,
|
|
1271
|
+
currentClientPageIndex: this.currentClientPageIndex,
|
|
1272
|
+
pageSize: this.pageSize,
|
|
1273
|
+
totalItems: this.totalItems,
|
|
1274
|
+
hasNextPage: this.hasNextPage,
|
|
1275
|
+
};
|
|
1276
|
+
const navigation = this.paginationService.calculateNavigation(event, currentState);
|
|
1277
|
+
if (!navigation.shouldNavigate) {
|
|
1278
|
+
this.isLoading$.next(false);
|
|
1279
|
+
this.pageEvent = event;
|
|
1280
|
+
return;
|
|
1281
|
+
}
|
|
1282
|
+
// Atualizar estado local
|
|
1283
|
+
this.currentClientPageIndex = navigation.newClientPageIndex;
|
|
1284
|
+
this.currentPageNumber = navigation.newPageNumber;
|
|
1285
|
+
// Atualizar pageSize se mudou
|
|
1286
|
+
if (event.pageSize !== this.pageSize) {
|
|
1287
|
+
this.pageSize = event.pageSize;
|
|
1288
|
+
}
|
|
1289
|
+
// Ajustar pageSize temporariamente para última página se necessário
|
|
1290
|
+
const lastPageIndex = this.paginationService.calculateLastPageIndex(this.totalItems, event.pageSize);
|
|
1291
|
+
let originalPageSize = null;
|
|
1292
|
+
if (event.pageIndex === lastPageIndex &&
|
|
1293
|
+
navigation.direction === 'backward' &&
|
|
1294
|
+
navigation.resetDocs) {
|
|
1295
|
+
const itemsExpectedInLastPage = this.paginationService.calculateLastPageItemCount(this.totalItems, event.pageSize);
|
|
1296
|
+
if (itemsExpectedInLastPage > 0 &&
|
|
1297
|
+
itemsExpectedInLastPage < event.pageSize) {
|
|
1298
|
+
originalPageSize = this.pageSize;
|
|
1299
|
+
this.pageSize = itemsExpectedInLastPage;
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
try {
|
|
1303
|
+
await this.loadItemsPaginated(navigation.direction, navigation.resetDocs);
|
|
1304
|
+
}
|
|
1305
|
+
catch (error) {
|
|
1306
|
+
console.error('Erro ao carregar itens paginados:', error);
|
|
1307
|
+
}
|
|
1308
|
+
finally {
|
|
1309
|
+
if (originalPageSize !== null) {
|
|
1310
|
+
this.pageSize = originalPageSize;
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
this.pageEvent = event;
|
|
1314
|
+
this.isLoading$.next(false);
|
|
1315
|
+
this.cdr.markForCheck();
|
|
1316
|
+
}
|
|
1317
|
+
// FILTER/SEARCH METHODS
|
|
1318
|
+
applyFilter(value) {
|
|
1319
|
+
if (this.data.pagination === false) {
|
|
1320
|
+
this.dataSource.filter = String(value).trim().toLowerCase();
|
|
1321
|
+
}
|
|
1322
|
+
if (this.data.pagination === true) {
|
|
1323
|
+
this.filterValue = value;
|
|
1324
|
+
this.filterSubject.next(this.filterValue);
|
|
1325
|
+
}
|
|
1326
|
+
}
|
|
1327
|
+
async search(event) {
|
|
1328
|
+
if (event) {
|
|
1329
|
+
event.preventDefault();
|
|
1330
|
+
event.stopPropagation();
|
|
1331
|
+
}
|
|
1332
|
+
if (this.selectSort.value) {
|
|
1333
|
+
if (this.selectSort.value.arrange === 'ascending') {
|
|
1334
|
+
this.sortBy = {
|
|
1335
|
+
field: this.selectSort.value.property,
|
|
1336
|
+
order: 'asc',
|
|
1337
|
+
};
|
|
1338
|
+
}
|
|
1339
|
+
if (this.selectSort.value.arrange === 'descending') {
|
|
1340
|
+
this.sortBy = {
|
|
1341
|
+
field: this.selectSort.value.property,
|
|
1342
|
+
order: 'desc',
|
|
1343
|
+
};
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1346
|
+
if (this.data.pagination === false) {
|
|
1347
|
+
this.arrange = this.buildArrangeFromFilters();
|
|
1348
|
+
this.applyFiltersToDataSource();
|
|
1349
|
+
this.currentArrange =
|
|
1350
|
+
this.filtersForm.length > 0
|
|
1351
|
+
? (this.filtersForm.at(0).get('selectFilter')?.value?.arrange ?? '')
|
|
1352
|
+
: '';
|
|
1353
|
+
this.cdr.markForCheck();
|
|
1354
|
+
}
|
|
1355
|
+
else {
|
|
1356
|
+
await this.loadItemsPaginated('reload', true);
|
|
1357
|
+
this.currentArrange =
|
|
1358
|
+
this.filtersForm.length > 0
|
|
1359
|
+
? (this.filtersForm.at(0).get('selectFilter')?.value?.arrange ?? '')
|
|
1360
|
+
: '';
|
|
1361
|
+
this.paginator.firstPage();
|
|
1362
|
+
this.cdr.markForCheck();
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
async resetFilter() {
|
|
1366
|
+
this.dataSource.filter = '';
|
|
1367
|
+
if (this.filterPredicate) {
|
|
1368
|
+
this.dataSource.filterPredicate = this.filterPredicate;
|
|
1369
|
+
}
|
|
1370
|
+
this.filtersForm.clear();
|
|
1371
|
+
this.addFilter();
|
|
1372
|
+
this.selectSort.patchValue('');
|
|
1373
|
+
this.sortBy = {
|
|
1374
|
+
order: this.data.sortBy ? this.data.sortBy.order : 'desc',
|
|
1375
|
+
field: this.data.sortBy ? this.data.sortBy.field : 'createdAt',
|
|
1376
|
+
};
|
|
1377
|
+
if (this.data.pagination === false) {
|
|
1378
|
+
this.arrange = {
|
|
1379
|
+
filters: [],
|
|
1380
|
+
sortBy: this.sortBy,
|
|
1381
|
+
};
|
|
1382
|
+
this.dataSource.data = [...this.items];
|
|
1383
|
+
this.totalItems = this.items.length;
|
|
1384
|
+
this.currentArrange = '';
|
|
1385
|
+
this.cdr.markForCheck();
|
|
1386
|
+
}
|
|
1387
|
+
else {
|
|
1388
|
+
await this.loadItemsPaginated('reload', true);
|
|
1389
|
+
this.currentArrange = '';
|
|
1390
|
+
this.paginator.firstPage();
|
|
1391
|
+
this.cdr.markForCheck();
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
// NAVIGATION METHODS
|
|
1395
|
+
goToDetails(row) {
|
|
1396
|
+
if (this.data.isNotClickable) {
|
|
1397
|
+
return;
|
|
1398
|
+
}
|
|
1399
|
+
const urlPath = this.data.url || this.data.name;
|
|
1400
|
+
const rowWithId = row;
|
|
1401
|
+
const url = this.router.serializeUrl(this.router.createUrlTree([`/${urlPath}`, rowWithId.id]));
|
|
1402
|
+
window.open(url, '_blank');
|
|
1403
|
+
}
|
|
1404
|
+
// RELATION METHODS
|
|
1405
|
+
async getRelation(params) {
|
|
1406
|
+
try {
|
|
1407
|
+
let snapshot;
|
|
1408
|
+
if (params.id !== '' &&
|
|
1409
|
+
params.id !== undefined &&
|
|
1410
|
+
params.collection !== undefined &&
|
|
1411
|
+
params.collection !== '') {
|
|
1412
|
+
snapshot = await firstValueFrom(this.firestore.collection(params.collection).doc(params.id).get());
|
|
1413
|
+
}
|
|
1414
|
+
if (snapshot && snapshot.exists) {
|
|
1415
|
+
const data = snapshot.data();
|
|
1416
|
+
const value = data?.[params.newProperty];
|
|
1417
|
+
return typeof value === 'string' ? value : '';
|
|
1418
|
+
}
|
|
1419
|
+
return '';
|
|
1420
|
+
}
|
|
1421
|
+
catch (e) {
|
|
1422
|
+
console.error(e);
|
|
1423
|
+
return '';
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
async loadRelations() {
|
|
1427
|
+
const relationPromises = this.data.displayedColumns
|
|
1428
|
+
.filter((col) => col.relation)
|
|
1429
|
+
.flatMap((col) => this.items.map(async (item) => {
|
|
1430
|
+
if (col.relation) {
|
|
1431
|
+
const itemRecord = item;
|
|
1432
|
+
itemRecord[col.property] = await this.getRelation({
|
|
1433
|
+
id: String(itemRecord[col.relation.sourceProperty] ?? ''),
|
|
1434
|
+
collection: col.relation.targetedCollection,
|
|
1435
|
+
newProperty: col.relation.targetedProperty || col.property,
|
|
1436
|
+
});
|
|
1437
|
+
}
|
|
1438
|
+
}));
|
|
1439
|
+
await Promise.all(relationPromises);
|
|
1440
|
+
}
|
|
1441
|
+
async getQueryLength(params) {
|
|
1442
|
+
const itemRecord = params.item;
|
|
1443
|
+
const snapshot = await this.firestore
|
|
1444
|
+
.collection(params.relation.collection)
|
|
1445
|
+
.ref.where(params.relation.property, params.relation.operator, itemRecord[params.relation.value])
|
|
1446
|
+
.get();
|
|
1447
|
+
return snapshot.size;
|
|
1448
|
+
}
|
|
1449
|
+
async loadQueryLengths() {
|
|
1450
|
+
const lengthPromises = this.data.displayedColumns
|
|
1451
|
+
.filter((col) => col.queryLength)
|
|
1452
|
+
.flatMap((col) => this.items.map(async (item) => {
|
|
1453
|
+
if (col.queryLength) {
|
|
1454
|
+
const itemRecord = item;
|
|
1455
|
+
itemRecord[col.property] = await this.getQueryLength({
|
|
1456
|
+
item: item,
|
|
1457
|
+
relation: col.queryLength,
|
|
1458
|
+
});
|
|
1459
|
+
}
|
|
1460
|
+
}));
|
|
1461
|
+
await Promise.all(lengthPromises);
|
|
1462
|
+
}
|
|
1463
|
+
filterItems() {
|
|
1464
|
+
if (this.data.conditions) {
|
|
1465
|
+
this.data.conditions.forEach((cond) => {
|
|
1466
|
+
this.items = this.items.filter((item) => {
|
|
1467
|
+
const operatorFunction = this.tableService.operators[cond.operator];
|
|
1468
|
+
if (operatorFunction) {
|
|
1469
|
+
const itemRecord = item;
|
|
1470
|
+
return operatorFunction(itemRecord[cond.firestoreProperty], cond.dashProperty);
|
|
1471
|
+
}
|
|
1472
|
+
return false;
|
|
1473
|
+
});
|
|
1474
|
+
});
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
// PUBLIC METHODS
|
|
1478
|
+
async reloadTable() {
|
|
1479
|
+
if (this.data.pagination) {
|
|
1480
|
+
await this.loadItemsPaginated('reload', true);
|
|
1481
|
+
this.paginator.firstPage();
|
|
1482
|
+
this.cdr.markForCheck();
|
|
1483
|
+
}
|
|
1484
|
+
else {
|
|
1485
|
+
await this.loadItems();
|
|
1486
|
+
}
|
|
1487
|
+
}
|
|
1488
|
+
updateDisplayedColumns() {
|
|
1489
|
+
if (this.dataSource) {
|
|
1490
|
+
this.dataSource = new MatTableDataSource([]);
|
|
1491
|
+
}
|
|
1492
|
+
this.columnProperties = this.data.displayedColumns.map((column) => column.property);
|
|
1493
|
+
const filterConfig = this.filterService.initializeDropdownItems(this.data.displayedColumns);
|
|
1494
|
+
this.dropdownItems = filterConfig.dropdownItems;
|
|
1495
|
+
this.sortableDropdownItems = filterConfig.sortableDropdownItems;
|
|
1496
|
+
if (this.data.filterableOptions) {
|
|
1497
|
+
this.dropdownItems = this.filterService.addFilterableOptions(this.dropdownItems, this.data.filterableOptions);
|
|
1498
|
+
}
|
|
1499
|
+
this.cdr.markForCheck();
|
|
1500
|
+
}
|
|
1501
|
+
shouldShowActionButton() {
|
|
1502
|
+
if (!this.data?.actionButton) {
|
|
1503
|
+
return false;
|
|
1504
|
+
}
|
|
1505
|
+
if (!this.data.actionButton.condition) {
|
|
1506
|
+
return true;
|
|
1507
|
+
}
|
|
1508
|
+
try {
|
|
1509
|
+
return this.data.actionButton.condition(null) ?? true;
|
|
1510
|
+
}
|
|
1511
|
+
catch {
|
|
1512
|
+
return true;
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
handleDownload() {
|
|
1516
|
+
if (!this.downloadTable)
|
|
1517
|
+
return;
|
|
1518
|
+
if (this.data.pagination === false) {
|
|
1519
|
+
if (this.dataSource && this.dataSource.filteredData) {
|
|
1520
|
+
this.filteredItems = [...this.dataSource.filteredData];
|
|
1521
|
+
}
|
|
1522
|
+
const arrange = this.buildArrangeFromFilters();
|
|
1523
|
+
this.downloadTable(arrange, this.data.conditions || []);
|
|
1524
|
+
}
|
|
1525
|
+
else {
|
|
1526
|
+
if (this.arrange) {
|
|
1527
|
+
this.downloadTable(this.arrange, this.data.conditions || []);
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1531
|
+
}
|
|
1532
|
+
TableComponent.ɵfac = function TableComponent_Factory(t) { return new (t || TableComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i2.TableService), i0.ɵɵdirectiveInject(i3.FilterService), i0.ɵɵdirectiveInject(i4.TooltipService), i0.ɵɵdirectiveInject(i5.PaginationService), i0.ɵɵdirectiveInject(i6.AngularFirestore), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
1533
|
+
TableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableComponent, selectors: [["lib-table"]], viewQuery: function TableComponent_Query(rf, ctx) { if (rf & 1) {
|
|
1534
|
+
i0.ɵɵviewQuery(MatPaginator, 5);
|
|
1535
|
+
i0.ɵɵviewQuery(MatSort, 5);
|
|
1536
|
+
} if (rf & 2) {
|
|
1537
|
+
let _t;
|
|
1538
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.paginator = _t.first);
|
|
1539
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.sort = _t.first);
|
|
1540
|
+
} }, inputs: { data: "data", downloadTable: "downloadTable" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["class", "card-body", 4, "ngIf"], [1, "card-body"], [1, "flex", "flex-col", "justify-between", "gap-6"], ["class", "rounded-xl border border-gray-200 bg-white p-4 shadow-lg", 4, "ngIf"], [1, "flex", "flex-col"], [3, "tabsData", "selectedTab", "tabSelected", 4, "ngIf"], [1, "mat-elevation-z8", "w-full", "overflow-x-auto", "rounded-xl", "table-container"], ["mat-table", "", "matSort", "", "matSortActive", "createdAt", "matSortDirection", "desc", 3, "dataSource"], ["sort", "matSort"], [3, "matColumnDef", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["mat-header-row", "", 4, "matHeaderRowDef"], ["mat-row", "", 3, "ngClass", "click", 4, "matRowDef", "matRowDefColumns"], ["class", "mat-row", 4, "matNoDataRow"], ["class", "flex justify-center", 4, "ngIf"], [1, "paginator-container"], ["showFirstLastButtons", "", "aria-label", "Select page of periodic elements", 3, "pageSizeOptions", "pageSize", "length", "ngClass", "page"], ["paginator", ""], [3, "state", "styles"], [1, "rounded-xl", "border", "border-gray-200", "bg-white", "p-4", "shadow-lg"], [1, "mb-4", "flex", "flex-col", "items-start", "justify-between", "gap-4", "border-b-2", "border-gray-200", "pb-4", "md:flex-row", "md:items-center"], [1, "flex", "flex-wrap", "items-center", "gap-4"], [1, "flex", "items-center", "gap-2"], [1, "fa", "fa-filter", "text-xl", "text-blue-500"], [1, "text-lg", "font-semibold", "text-gray-700"], [3, "ngClass", "routerLink", "click", 4, "ngIf"], ["class", "mb-4", 4, "ngIf"], ["class", "mb-4 space-y-3", 4, "ngIf"], [1, "-mb-2", "flex", "items-start", "justify-between", "gap-4", "border-t", "border-gray-200", "pt-4"], [4, "ngIf"], ["class", "flex flex-wrap gap-3 self-start sm:self-auto", 4, "ngIf"], [3, "ngClass", "routerLink", "click"], [3, "class", 4, "ngIf"], [1, "mb-4"], [1, "flex", "flex-wrap", "items-center", "gap-3", "p-2"], [1, "min-w-[200px]", "flex-1"], ["appearance", "outline", 1, "w-full"], [1, "fa", "fa-sort-alpha-down", "text-cyan-600"], ["placeholder", "Selecione...", 3, "formControl"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], [1, "mb-4", "space-y-3"], ["class", "flex flex-wrap items-center gap-3 p-2", 3, "formGroup", 4, "ngFor", "ngForOf"], [1, "flex", "flex-wrap", "items-center", "gap-3", "p-2", 3, "formGroup"], ["class", "min-w-[200px] flex-1", 4, "ngIf"], ["class", "min-w-[340px] flex-auto", 4, "ngIf"], ["class", "ml-auto flex-shrink-0", 4, "ngIf"], ["placeholder", "Selecione o tipo...", "formControlName", "selectFilter", 3, "selectionChange"], [1, "text-sm", "text-blue-500"], [1, "fa", "fa-search", "text-gray-400"], ["formControlName", "typeFilter", "matInput", "", "placeholder", "Digite para filtrar...", 3, "keyup.enter"], ["input", ""], ["placeholder", "Selecione...", "formControlName", "selectItem", "multiple", ""], [1, "min-w-[340px]", "flex-auto"], [1, "flex", "flex-col", "items-stretch", "gap-3", "sm:flex-row", "sm:items-center"], ["appearance", "outline", 1, "flex-1"], [1, "fa", "fa-calendar", "text-gray-400"], ["type", "text", "matInput", "", "formControlName", "initialDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input"], ["type", "text", "matInput", "", "formControlName", "finalDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input"], [1, "ml-auto", "flex-shrink-0"], ["matTooltip", "Remover filtro", 1, "flex", "h-10", "w-10", "items-center", "justify-center", "rounded-full", "transition-colors", "duration-300", "hover:bg-red-100", 3, "click"], [1, "fa", "fa-trash", "text-red-500", "hover:text-red-600"], ["matTooltip", "Adicionar novo filtro", 1, "transform", "rounded-full", "border-2", "border-blue-300", "bg-blue-50", "px-6", "py-2", "text-sm", "font-medium", "text-blue-600", "transition-all", "duration-300", "hover:-translate-y-0.5", "hover:border-blue-400", "hover:bg-blue-100", "hover:shadow-md", 3, "click"], [1, "fa", "fa-plus", "mr-2"], [1, "flex", "flex-wrap", "gap-3", "self-start", "sm:self-auto"], ["type", "button", "matTooltip", "Aplicar filtros", 1, "flex", "items-center", "gap-2", "rounded-lg", "bg-green-600", "px-5", "py-2", "text-sm", "font-medium", "text-white", "transition-colors", "hover:bg-green-700", 3, "click"], [1, "fa", "fa-search"], ["matTooltip", "Limpar filtros", 1, "flex", "items-center", "gap-2", "rounded-lg", "bg-red-500", "px-5", "py-2", "text-sm", "font-medium", "text-white", "transition-colors", "hover:bg-red-600", 3, "click"], [1, "fas", "fa-redo-alt"], ["class", "flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600", "matTooltipPosition", "above", "matTooltip", "Exportar Tabela", 3, "disabled", "click", 4, "ngIf"], ["matTooltipPosition", "above", "matTooltip", "Exportar Tabela", 1, "flex", "items-center", "gap-2", "rounded-lg", "bg-orange-500", "px-5", "py-2", "text-sm", "font-medium", "text-white", "transition-colors", "hover:bg-orange-600", 3, "disabled", "click"], [1, "fa", "fa-download"], [1, "fa", "fa-search", "text-blue-500"], ["matInput", "", "placeholder", "Digite para filtrar...", 3, "keyup.enter", "keyup"], ["filterInput", ""], ["matSuffix", "", 1, "text-gray-500"], ["class", "flex flex-wrap items-center gap-3", 3, "formGroup", 4, "ngFor", "ngForOf"], [1, "flex", "flex-wrap", "items-center", "gap-3", 3, "formGroup"], ["type", "text", "matInput", "", "formControlName", "initialDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input", "blur"], ["type", "text", "matInput", "", "formControlName", "finalDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input", "blur"], [3, "tabsData", "selectedTab", "tabSelected"], [3, "matColumnDef"], [4, "matHeaderCellDef"], ["mat-header-cell", "", 4, "ngIf"], ["mat-header-cell", "", "mat-sort-header", "", 4, "ngIf"], ["mat-cell", "", 3, "click", "mouseenter", "mouseleave", "mousemove", 4, "matCellDef"], ["mat-header-cell", ""], ["mat-header-cell", "", "mat-sort-header", ""], ["mat-cell", "", 3, "click", "mouseenter", "mouseleave", "mousemove"], ["class", "relative inline-block", 4, "ngIf"], [4, "ngIf", "ngIfElse"], ["withinLimit", ""], ["target", "_blank", 3, "href", 4, "ngIf"], ["target", "_blank", 3, "href"], [1, "relative", "inline-block"], ["class", "absolute inset-0 m-auto", 3, "diameter", 4, "ngIf"], ["alt", "", 3, "src", "ngClass", "load", "error"], [1, "absolute", "inset-0", "m-auto", 3, "diameter"], [3, "click", 4, "ngFor", "ngForOf"], [3, "click"], [3, "ngClass", 4, "ngIf"], [3, "ngClass"], ["mat-header-row", ""], ["mat-row", "", 3, "ngClass", "click"], [1, "mat-row"], ["class", "mat-cell p-4", "colspan", "4", 4, "ngIf"], ["colspan", "4", 1, "mat-cell", "p-4"], [1, "flex", "justify-center"]], template: function TableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1541
|
+
i0.ɵɵtemplate(0, TableComponent_div_0_Template, 19, 18, "div", 0);
|
|
1542
|
+
} if (rf & 2) {
|
|
1543
|
+
i0.ɵɵproperty("ngIf", ctx.data);
|
|
1544
|
+
} }, dependencies: [i7.NgClass, i7.NgForOf, i7.NgIf, i8.DefaultValueAccessor, i8.NgControlStatus, i8.NgControlStatusGroup, i8.MaxLengthValidator, i8.FormControlDirective, i8.FormGroupDirective, i8.FormControlName, i1.RouterLink, i9.MatTable, i9.MatHeaderCellDef, i9.MatHeaderRowDef, i9.MatColumnDef, i9.MatCellDef, i9.MatRowDef, i9.MatHeaderCell, i9.MatCell, i9.MatHeaderRow, i9.MatRow, i9.MatNoDataRow, i10.MatPaginator, i11.MatSort, i11.MatSortHeader, i12.MatFormField, i12.MatLabel, i12.MatSuffix, i13.MatInput, i14.MatOption, i15.MatSelect, i16.MatTooltip, i17.MatProgressSpinner, i18.MatIcon, i19.TableTabsComponent, i20.TableTooltipComponent, i7.AsyncPipe], styles: ["@charset \"UTF-8\";[_nghost-%COMP%]{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}[_nghost-%COMP%] .mat-table .mat-header-cell, [_nghost-%COMP%] .mat-header-cell, [_nghost-%COMP%] th.mat-header-cell, [_nghost-%COMP%] .mat-mdc-table .mat-mdc-header-cell, [_nghost-%COMP%] .mat-mdc-header-cell, [_nghost-%COMP%] th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600} .fa-filter, i.fa-filter{color:var(--table-color, #1976d2)!important} .rounded-xl.border{border-color:var(--table-color, #1976d2)!important} .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important} .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined[_ngcontent-%COMP%] .mat-mdc-form-field-infix[_ngcontent-%COMP%]{padding-bottom:0} .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled[_ngcontent-%COMP%]{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled[_ngcontent-%COMP%] .mdc-text-field__input[_ngcontent-%COMP%]{color:#525252}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none} .hide-length .mat-mdc-paginator-range-label{display:none} .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden} .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden} .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw} .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%]:disabled, button[_ngcontent-%COMP%]:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%]:hover:not(:disabled), button[_ngcontent-%COMP%]:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%]:disabled, button[_ngcontent-%COMP%]:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}"], changeDetection: 0 });
|
|
1545
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TableComponent, [{
|
|
1546
|
+
type: Component,
|
|
1547
|
+
args: [{ selector: 'lib-table', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"data\" class=\"card-body\">\n <div class=\"flex flex-col justify-between gap-6\">\n <!-- UNIFIED CONTROL PANEL: FILTERS, SORT & ACTIONS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === true &&\n (dropdownItems.length > 0 ||\n sortableDropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SORT FIELD (Integrated with filters) -->\n <div class=\"mb-4\" *ngIf=\"sortableDropdownItems.length > 0\">\n <div class=\"flex flex-wrap items-center gap-3 p-2\">\n <div class=\"min-w-[200px] flex-1\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>Ordenar por</span>\n </mat-label>\n <mat-select placeholder=\"Selecione...\" [formControl]=\"selectSort\">\n <mat-option\n *ngFor=\"let item of sortableDropdownItems\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <!-- FILTERS CONTENT (WITH REFINEMENTS) -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions(filterGroup)\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Action Buttons -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Right Side: Search, Reset, Export -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true || this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"\n $any(arrange) && downloadTable !== undefined\n ? downloadTable($any(arrange), data.conditions || [])\n : null\n \"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n\n <!-- UNIFIED CONTROL PANEL (for non-paginated tables): SEARCH, SORT & FILTERS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === false &&\n (hasFilterableColumn === true ||\n dropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SIMPLE SEARCH -->\n <div\n class=\"mb-4\"\n *ngIf=\"hasFilterableColumn === true && data.showSimpleSearch !== false\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-blue-500\"></i>\n Buscar\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search($event)\"\n (keyup)=\"applyFilter(filterInput.value)\"\n placeholder=\"Digite para filtrar...\"\n #filterInput\n />\n <mat-icon matSuffix class=\"text-gray-500\">search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- FILTERS PANEL -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <!-- FILTERS CONTENT -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions(filterGroup)\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n (blur)=\"onDateFilterChange()\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n (blur)=\"onDateFilterChange()\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Actions -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Action Buttons -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true ||\n this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"handleDownload()\"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <!-- TABS COMPONENT -->\n <lib-table-tabs\n *ngIf=\"data.tabs && data.tabs.tabsData && data.tabs.tabsData.length > 0\"\n [tabsData]=\"data.tabs.tabsData\"\n [selectedTab]=\"selectedTab\"\n (tabSelected)=\"onTabSelected($event)\"\n ></lib-table-tabs>\n <div\n class=\"mat-elevation-z8 w-full overflow-x-auto rounded-xl table-container\"\n >\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n #sort=\"matSort\"\n matSortActive=\"createdAt\"\n matSortDirection=\"desc\"\n >\n <ng-container\n *ngFor=\"let col of data.displayedColumns; trackBy: trackByProperty\"\n matColumnDef=\"{{ col.property }}\"\n >\n <ng-container *matHeaderCellDef>\n <!-- IF THE COLUMN IS NOT SORTABLE, THEN DON'T SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"!col.isSortable || data.pagination === true\"\n mat-header-cell\n >\n {{ col.title }}\n </th>\n <!-- IF THE COLUMN IS SORTABLE, THEN SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"col.isSortable && data.pagination === false\"\n mat-header-cell\n mat-sort-header\n >\n {{ col.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n (click)=\"col.method ? col.method(row) : null\"\n (mouseenter)=\"onCellMouseEnter($event, row, col)\"\n (mouseleave)=\"onCellMouseLeave()\"\n (mousemove)=\"onCellMouseMove($event)\"\n >\n <!-- CHECK IF THE COLUMN MUST BE DISPLAYED -->\n <span *ngIf=\"!col.image && !col.iconClass && !col.method\">\n <ng-container>\n <span\n *ngIf=\"\n col.charLimit &&\n row[col.property] &&\n row[col.property].length > col.charLimit;\n else withinLimit\n \"\n >\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row) }}\n </span>\n </span>\n </ng-container>\n <ng-template #withinLimit>\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row, true) }}\n </span>\n </ng-template>\n </span>\n <!------------------- IMAGE ------------------>\n <!-- Imagem com loading -->\n <div\n *ngIf=\"\n col.image && col.image.path && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"col.image.path + '/' + row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n\n <!-- Imagem com URL completa e loading -->\n <div\n *ngIf=\"\n col.image && col.image.url && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n <ng-container *ngIf=\"col.iconClass\">\n <button\n *ngFor=\"let iconClass of col.iconClass\"\n (click)=\"\n iconClass.buttonMethod\n ? iconClass.buttonMethod(row, $event)\n : $event.stopPropagation()\n \"\n >\n <span\n [ngClass]=\"iconClass.class\"\n *ngIf=\"\n iconClass.condition === undefined ||\n (iconClass.condition !== undefined &&\n $any(iconClass.condition)(row))\n \"\n >{{ iconClass.text }}</span\n >\n </button>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnProperties\"></tr>\n <tr\n [ngClass]=\"getTableRowNgClass()\"\n mat-row\n *matRowDef=\"let row; columns: columnProperties\"\n (click)=\"goToDetails(row)\"\n ></tr>\n\n <!-- ROW SHOWN WHEN THERE IS NO MATCHING DATA. -->\n <tr class=\"mat-row\" *matNoDataRow>\n <td *ngIf=\"!(isLoading$ | async)\" class=\"mat-cell p-4\" colspan=\"4\">\n Nenhum resultado encontrado para a busca\n </td>\n </tr>\n </table>\n\n <div class=\"flex justify-center\" *ngIf=\"isLoading$ | async\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div class=\"paginator-container\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[25, 50, 100]\"\n [pageSize]=\"pageSize\"\n [length]=\"totalItems\"\n showFirstLastButtons\n aria-label=\"Select page of periodic elements\"\n (page)=\"onPageChange($event)\"\n [ngClass]=\"getPaginatorNgClass()\"\n >\n </mat-paginator>\n <!-- <div\n *ngIf=\"\n !(isLoading$ | async) &&\n dataSource?.data &&\n dataSource.data.length > 0 &&\n data?.filterFn\n \"\n class=\"page-number-display\"\n >\n {{ currentPageNumber }}\n </div> -->\n </div>\n </div>\n </div>\n </div>\n\n <!-- TOOLTIP PERSONALIZADO -->\n <lib-table-tooltip\n [state]=\"tooltipState\"\n [styles]=\"getTooltipStyles()\"\n ></lib-table-tooltip>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto::-webkit-scrollbar,.overflow-y-auto::-webkit-scrollbar,.overflow-auto::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto::-webkit-scrollbar-thumb,.overflow-y-auto::-webkit-scrollbar-thumb,.overflow-auto::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto::-webkit-scrollbar-thumb:hover,.overflow-y-auto::-webkit-scrollbar-thumb:hover,.overflow-auto::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}:host ::ng-deep .mat-table .mat-header-cell,:host ::ng-deep .mat-header-cell,:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600}::ng-deep .fa-filter,::ng-deep i.fa-filter{color:var(--table-color, #1976d2)!important}::ng-deep .rounded-xl.border{border-color:var(--table-color, #1976d2)!important}::ng-deep .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important}::ng-deep .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled .mdc-text-field__input{color:#525252}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none}::ng-deep .hide-length .mat-mdc-paginator-range-label{display:none}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw}::ng-deep .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"],button:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"]:hover,button:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"],button:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"]:hover,button:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"]:disabled,button:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"],button:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"]:hover,button:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"],button:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"]:hover:not(:disabled),button:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"]:disabled,button:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}\n"] }]
|
|
1548
|
+
}], function () { return [{ type: i1.Router }, { type: i2.TableService }, { type: i3.FilterService }, { type: i4.TooltipService }, { type: i5.PaginationService }, { type: i6.AngularFirestore }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, { data: [{
|
|
1549
|
+
type: Input
|
|
1550
|
+
}], downloadTable: [{
|
|
1551
|
+
type: Input
|
|
1552
|
+
}], paginator: [{
|
|
1553
|
+
type: ViewChild,
|
|
1554
|
+
args: [MatPaginator]
|
|
1555
|
+
}], sort: [{
|
|
1556
|
+
type: ViewChild,
|
|
1557
|
+
args: [MatSort]
|
|
1558
|
+
}] }); })();
|
|
1559
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxjQUFjLEdBSWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBS1QsdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNN0QsT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBQ2QsUUFBUSxFQUNSLGVBQWUsRUFDZixXQUFXLEdBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSxNQUFNLENBQUM7QUFLZCxPQUFPLEVBRUwsV0FBVyxFQUNYLFNBQVMsR0FFVixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQzNCWixvQkFHSzs7O0lBREgsNkNBQWdDOzs7O0lBVnBDLGtDQU9DO0lBSEMsbUxBQ2lCLGtEQUEyQix3Q0FDakQsR0FBRyxJQUNWLENBQUEsSUFEYTtJQUVELGlGQUdLO0lBQ0wsWUFDRjtJQUFBLGlCQUFTOzs7SUFYUCx3REFB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LEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7YUFDOUQ7U0FDRjtJQUNILENBQUM7OzRFQXQ2QlUsY0FBYztpRUFBZCxjQUFjO3VCQTZDZCxZQUFZO3VCQUNaLE9BQU87Ozs7OztRQ2xIcEIsaUVBcXdCTTs7UUFyd0JBLCtCQUFVOzt1RkRvRUgsY0FBYztjQVAxQixTQUFTOzJCQUNFLFdBQVcsY0FDVCxLQUFLLG1CQUdBLHVCQUF1QixDQUFDLE1BQU07cVFBTXRDLElBQUk7a0JBQVosS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUF3Q21CLFNBQVM7a0JBQWpDLFNBQVM7bUJBQUMsWUFBWTtZQUNILElBQUk7a0JBQXZCLFNBQVM7bUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFycmFuZ2UsXG4gIENvbmRpdGlvbixcbiAgVGFiRGF0YSxcbiAgVGFibGVEYXRhLFxuICBDb2x1bW4sXG4gIFRBQkxFX0RFRkFVTFRTLFxuICBEcm9wZG93bkl0ZW0sXG4gIEZpbHRlclNlbGVjdEl0ZW0sXG4gIFBhZ2luYXRpb24sXG59IGZyb20gJy4uLy4uL3R5cGVzL1RhYmxlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEVsZW1lbnRSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFuZ3VsYXJGaXJlc3RvcmUsXG4gIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdCxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9jb21wYXQvZmlyZXN0b3JlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciwgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sdGlwU2VydmljZSwgVG9vbHRpcFN0YXRlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9vbHRpcC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGdldERpc3BsYXlWYWx1ZSxcbiAgZ2V0TmVzdGVkVmFsdWUsXG4gIGlzU3RyaW5nLFxuICB0cmFja0J5UHJvcGVydHksXG4gIGdldEltYWdlS2V5LFxufSBmcm9tICcuLi8uLi91dGlscy90YWJsZS51dGlscyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGZpcnN0VmFsdWVGcm9tLFxuICBTdWJqZWN0LFxuICB0YWtlVW50aWwsXG4gIEJlaGF2aW9yU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPcmRlckJ5RGlyZWN0aW9uIH0gZnJvbSAnZmlyZWJhc2UvZmlyZXN0b3JlJztcbmltcG9ydCBmaXJlYmFzZSBmcm9tICdmaXJlYmFzZS9jb21wYXQnO1xuaW1wb3J0IFdoZXJlRmlsdGVyT3AgPSBmaXJlYmFzZS5maXJlc3RvcmUuV2hlcmVGaWx0ZXJPcDtcbmltcG9ydCBmaXJlc3RvcmUgPSBmaXJlYmFzZS5maXJlc3RvcmU7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtQXJyYXksXG4gIEZvcm1Hcm91cCxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGFibGUnLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQgPSBhbnk+XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICAvLyBJTlBVVFNcbiAgQElucHV0KCkgZGF0YSE6IFRhYmxlRGF0YTtcbiAgQElucHV0KCkgZG93bmxvYWRUYWJsZT86IChhcnJhbmdlOiBBcnJhbmdlLCBjb25kaXRpb25zOiBDb25kaXRpb25bXSkgPT4gdm9pZDtcbiAgYXJyYW5nZTogQXJyYW5nZSB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFZBUklBQkxFU1xuICBkYXRhU291cmNlITogTWF0VGFibGVEYXRhU291cmNlPFQ+O1xuICBjdXJyZW50UGFnZU51bWJlciA9IDE7XG4gIGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuXG4gIHB1YmxpYyBpc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIGl0ZW1zOiBUW10gPSBbXTtcbiAgcHVibGljIGZpbHRlcmVkSXRlbXM6IFRbXSA9IFtdO1xuICBwcml2YXRlIGxhc3REb2M6IFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxUPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGZpcnN0RG9jOiBRdWVyeURvY3VtZW50U25hcHNob3Q8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzb3J0Qnk6IHsgZmllbGQ6IHN0cmluZzsgb3JkZXI6IE9yZGVyQnlEaXJlY3Rpb24gfSA9IHtcbiAgICBmaWVsZDogVEFCTEVfREVGQVVMVFMuU09SVF9GSUVMRCxcbiAgICBvcmRlcjogVEFCTEVfREVGQVVMVFMuU09SVF9PUkRFUixcbiAgfTtcbiAgcHVibGljIGNvbHVtblByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cbiAgZmlsdGVyc0Zvcm06IEZvcm1BcnJheTtcbiAgc2VsZWN0U29ydDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICBjdXJyZW50QXJyYW5nZSA9ICcnO1xuXG4gIGhhc05leHRQYWdlOiBib29sZWFuID0gZmFsc2U7XG4gIGRyb3Bkb3duSXRlbXM6IERyb3Bkb3duSXRlbVtdID0gW107XG4gIHNvcnRhYmxlRHJvcGRvd25JdGVtczogRHJvcGRvd25JdGVtW10gPSBbXTtcbiAgcGFnZVNpemUgPSBUQUJMRV9ERUZBVUxUUy5QQUdFX1NJWkU7XG4gIHRvdGFsSXRlbXMgPSAwO1xuICBwYWdlRXZlbnQ/OiBQYWdlRXZlbnQ7XG4gIGZpbHRlclZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBoYXNGaWx0ZXJhYmxlQ29sdW1uOiBib29sZWFuID0gZmFsc2U7XG4gIGhhc1NvcnRhYmxlQ29sdW1uOiBib29sZWFuID0gZmFsc2U7XG4gIGZpbHRlclByZWRpY2F0ZTogKChkYXRhOiBULCBmaWx0ZXI6IHN0cmluZykgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgZmlsdGVyU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWJvdW5jZVRpbWVNcyA9IFRBQkxFX0RFRkFVTFRTLkRFQk9VTkNFX1RJTUVfTVM7XG5cbiAgc2VsZWN0ZWRUYWI6IG51bWJlciA9IDA7XG5cbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0ITogTWF0U29ydDtcblxuICAvLyBQcm9wcmllZGFkZXMgcGFyYSBjb250cm9sZSBkbyB0b29sdGlwXG4gIHRvb2x0aXBTdGF0ZTogVG9vbHRpcFN0YXRlO1xuXG4gIC8vIENvbnRyb2xlIGRlIGxvYWRpbmcgZGUgaW1hZ2Vuc1xuICBpbWFnZUxvYWRpbmdTdGF0ZSA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIENPTlNUUlVDVE9SXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSB0YWJsZVNlcnZpY2U6IFRhYmxlU2VydmljZSxcbiAgICBwcml2YXRlIGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b29sdGlwU2VydmljZTogVG9vbHRpcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXJlc3RvcmU6IEFuZ3VsYXJGaXJlc3RvcmUsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIHRoaXMuZmlsdGVyc0Zvcm0gPSBuZXcgRm9ybUFycmF5KFt0aGlzLmZpbHRlclNlcnZpY2UuY3JlYXRlRmlsdGVyR3JvdXAoKV0pO1xuICAgIHRoaXMudG9vbHRpcFN0YXRlID0gdGhpcy50b29sdGlwU2VydmljZS5jcmVhdGVJbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIGdldEFjdGlvbkJ1dHRvbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmRhdGE/LmFjdGlvbkJ1dHRvbj8uY29sb3JDbGFzcyB8fCAnYmctYmx1ZS01MDAnKSArXG4gICAgICAnIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSBob3ZlcjpvcGFjaXR5LTcwJ1xuICAgICk7XG4gIH1cblxuICBnZXRUYWJsZVJvd05nQ2xhc3MoKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xuICAgIHJldHVybiB7XG4gICAgICAnZXhhbXBsZS1lbGVtZW50LXJvdyc6IHRoaXMuZGF0YT8uaXNOb3RDbGlja2FibGUgPT09IHRydWUsXG4gICAgICAnZXhhbXBsZS1lbGVtZW50LXJvdyBjdXJzb3ItcG9pbnRlcic6ICF0aGlzLmRhdGE/LmlzTm90Q2xpY2thYmxlLFxuICAgIH07XG4gIH1cblxuICBnZXRQYWdpbmF0b3JOZ0NsYXNzKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2hpZGUtbGVuZ3RoJzpcbiAgICAgICAgWydmaWx0ZXInLCAnZmlsdGVyQnlEYXRlJywgJ2VxdWFscyddLmluY2x1ZGVzKHRoaXMuY3VycmVudEFycmFuZ2UpIHx8XG4gICAgICAgICEhdGhpcy5kYXRhPy5maWx0ZXJGbixcbiAgICAgICdoaWRlLW5leHQtYnV0dG9uJzpcbiAgICAgICAgIXRoaXMuaGFzTmV4dFBhZ2UgJiYgdGhpcy5kYXRhPy5wYWdpbmF0aW9uID09PSB0cnVlLFxuICAgICAgJ2hpZGUtbGFzdC1idXR0b24nOlxuICAgICAgICAoIXRoaXMuaGFzTmV4dFBhZ2UgJiYgdGhpcy5kYXRhPy5wYWdpbmF0aW9uID09PSB0cnVlKSB8fFxuICAgICAgICAhIXRoaXMuZGF0YT8uZmlsdGVyRm4sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZJTFRFUiBNRVRIT0RTIChkZWxlZ2Fkb3MgYW8gRmlsdGVyU2VydmljZSlcblxuICBjcmVhdGVGaWx0ZXJHcm91cCgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuY3JlYXRlRmlsdGVyR3JvdXAoKTtcbiAgfVxuXG4gIGFkZEZpbHRlcihmaWx0ZXJEYXRhPzoge1xuICAgIHNlbGVjdEZpbHRlcjogRHJvcGRvd25JdGVtIHwgbnVsbDtcbiAgICB0eXBlRmlsdGVyPzogc3RyaW5nO1xuICAgIHNlbGVjdEl0ZW0/OiBGaWx0ZXJTZWxlY3RJdGVtW107XG4gICAgaW5pdGlhbERhdGU/OiBzdHJpbmc7XG4gICAgZmluYWxEYXRlPzogc3RyaW5nO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJTZXJ2aWNlLmFkZEZpbHRlcihcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICB0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSxcbiAgICAgIGZpbHRlckRhdGEsXG4gICAgKTtcbiAgfVxuXG4gIGhhc0FjdGl2ZURhdGVGaWx0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5oYXNBY3RpdmVEYXRlRmlsdGVyKHRoaXMuZmlsdGVyc0Zvcm0pO1xuICB9XG5cbiAgZ2V0QXZhaWxhYmxlRmlsdGVyT3B0aW9ucyhjdXJyZW50R3JvdXA/OiBBYnN0cmFjdENvbnRyb2wpOiBEcm9wZG93bkl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5nZXRBdmFpbGFibGVGaWx0ZXJPcHRpb25zKFxuICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zLFxuICAgICAgdGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUsXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgY3VycmVudEdyb3VwLFxuICAgICk7XG4gIH1cblxuICBvblNlbGVjdEZpbHRlckNoYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLmZpbHRlcnNGb3JtLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgbGFzdEZpbHRlciA9IHRoaXMuZmlsdGVyc0Zvcm0uYXQobGFzdEluZGV4KTtcbiAgICBjb25zdCBzZWxlY3RlZEZpbHRlciA9IGxhc3RGaWx0ZXIuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU7XG5cbiAgICBpZiAoc2VsZWN0ZWRGaWx0ZXIpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc2VsZWN0ZWRGaWx0ZXIuYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScgJiZcbiAgICAgICAgdGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmFkZEZpbHRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUZpbHRlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJTZXJ2aWNlLnJlbW92ZUZpbHRlcih0aGlzLmZpbHRlcnNGb3JtLCBpbmRleCk7XG4gIH1cblxuICByZW1vdmVBbGxGaWx0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5yZW1vdmVBbGxGaWx0ZXJzKHRoaXMuZmlsdGVyc0Zvcm0pO1xuICAgIHRoaXMucmVzZXRGaWx0ZXIoKTtcbiAgfVxuXG4gIG9uRGF0ZUlucHV0KFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBjb250cm9sTmFtZTogJ2luaXRpYWxEYXRlJyB8ICdmaW5hbERhdGUnLFxuICAgIGZpbHRlckluZGV4OiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlckdyb3VwID0gdGhpcy5maWx0ZXJzRm9ybS5hdChmaWx0ZXJJbmRleCkgYXMgRm9ybUdyb3VwO1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5hcHBseURhdGVNYXNrKGV2ZW50LCBjb250cm9sTmFtZSwgZmlsdGVyR3JvdXApO1xuICB9XG5cbiAgb25EYXRlRmlsdGVyQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYXJyYW5nZSA9IHRoaXMuZmlsdGVyU2VydmljZS5idWlsZEFycmFuZ2VGcm9tRmlsdGVycyhcbiAgICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICAgICAgdGhpcy5zb3J0QnksXG4gICAgICApO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnNUb0RhdGFTb3VyY2UoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzVG9EYXRhU291cmNlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRhU291cmNlKSByZXR1cm47XG5cbiAgICBsZXQgZmlsdGVyZWRJdGVtcyA9IHRoaXMuZmlsdGVyU2VydmljZS5hcHBseUNsaWVudFNpZGVGaWx0ZXJzPFQ+KFxuICAgICAgWy4uLnRoaXMuaXRlbXNdLFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICAgIHRoaXMuc29ydEJ5LFxuICAgICk7XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBmaWx0ZXJlZEl0ZW1zO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IGZpbHRlcmVkSXRlbXM7XG4gICAgdGhpcy50b3RhbEl0ZW1zID0gZmlsdGVyZWRJdGVtcy5sZW5ndGg7XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDbGllbnRTaWRlRmlsdGVycyhpdGVtczogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXJ2aWNlLmFwcGx5Q2xpZW50U2lkZUZpbHRlcnM8VD4oXG4gICAgICBpdGVtcyxcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICB0aGlzLnNvcnRCeSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFycmFuZ2VGcm9tRmlsdGVycygpOiBBcnJhbmdlIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXJ2aWNlLmJ1aWxkQXJyYW5nZUZyb21GaWx0ZXJzKFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICAgIHRoaXMuc29ydEJ5LFxuICAgICk7XG4gIH1cblxuICAvLyBUT09MVElQIE1FVEhPRFMgKGRlbGVnYWRvcyBhbyBUb29sdGlwU2VydmljZSlcblxuICBnZXRUb29sdGlwU3R5bGVzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLnRvb2x0aXBTZXJ2aWNlLmdldFRvb2x0aXBTdHlsZXModGhpcy50b29sdGlwU3RhdGUpO1xuICB9XG5cbiAgb25DZWxsTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCwgcm93OiBULCBjb2w6IENvbHVtbik6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcFNlcnZpY2UuaGFuZGxlTW91c2VFbnRlcihcbiAgICAgIGV2ZW50LFxuICAgICAgcm93LFxuICAgICAgY29sLFxuICAgICAgKGMsIHIsIHcpID0+IHRoaXMuZ2V0RGlzcGxheVZhbHVlKGMsIHIsIHcpLFxuICAgICAgKHN0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMudG9vbHRpcFN0YXRlID0geyAuLi50aGlzLnRvb2x0aXBTdGF0ZSwgLi4uc3RhdGUgfTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBvbkNlbGxNb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcFNlcnZpY2UuaGFuZGxlTW91c2VMZWF2ZSgoc3RhdGUpID0+IHtcbiAgICAgIHRoaXMudG9vbHRpcFN0YXRlID0gc3RhdGU7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2VsbE1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcFNlcnZpY2UuaGFuZGxlTW91c2VNb3ZlKFxuICAgICAgZXZlbnQsXG4gICAgICB0aGlzLnRvb2x0aXBTdGF0ZS5zaG93VG9vbHRpcCxcbiAgICAgIChwb3NpdGlvbikgPT4ge1xuICAgICAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHsgLi4udGhpcy50b29sdGlwU3RhdGUsIHRvb2x0aXBQb3NpdGlvbjogcG9zaXRpb24gfTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBUQUIgTUVUSE9EU1xuXG4gIG9uVGFiU2VsZWN0ZWQoZXZlbnQ6IHsgdGFiOiBUYWJEYXRhOyBpbmRleDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0YS50YWJzPy5tZXRob2QpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gZXZlbnQuaW5kZXg7XG4gICAgdGhpcy5kYXRhLnRhYnMubWV0aG9kKGV2ZW50LnRhYiwgZXZlbnQuaW5kZXgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gVVRJTElUWSBNRVRIT0RTIChkZWxlZ2Fkb3MgYW9zIHV0aWxzKVxuXG4gIGdldERpc3BsYXlWYWx1ZShjb2w6IENvbHVtbiwgcm93OiBULCB3aXRoaW5MaW1pdDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB3aXRoaW5MaW1pdCk7XG4gIH1cblxuICBnZXROZXN0ZWRWYWx1ZShvYmo6IHVua25vd24sIHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiBnZXROZXN0ZWRWYWx1ZShvYmosIHBhdGgpO1xuICB9XG5cbiAgaXNTdHJpbmcodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgdHJhY2tCeVByb3BlcnR5KF9pbmRleDogbnVtYmVyLCBjb2w6IENvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRyYWNrQnlQcm9wZXJ0eShfaW5kZXgsIGNvbCk7XG4gIH1cblxuICAvLyBJTUFHRSBMT0FESU5HIE1FVEhPRFNcblxuICBwcml2YXRlIGdldEltYWdlS2V5KHJvdzogVCwgY29sOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRJbWFnZUtleShyb3csIGNvbCk7XG4gIH1cblxuICBpc0ltYWdlTG9hZGluZyhyb3c6IFQsIGNvbDogQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRJbWFnZUtleShyb3csIGNvbCk7XG4gICAgcmV0dXJuICF0aGlzLmltYWdlTG9hZGluZ1N0YXRlLmhhcyhrZXkpO1xuICB9XG5cbiAgb25JbWFnZUxvYWQocm93OiBULCBjb2w6IENvbHVtbik6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICAgIHRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuc2V0KGtleSwgdHJ1ZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkltYWdlRXJyb3IoZXZlbnQ6IEV2ZW50LCByb3c6IFQsIGNvbDogQ29sdW1uLCBkZWZhdWx0SW1hZ2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEltYWdlS2V5KHJvdywgY29sKTtcbiAgICB0aGlzLmltYWdlTG9hZGluZ1N0YXRlLnNldChrZXksIHRydWUpO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgaWYgKGRlZmF1bHRJbWFnZSkge1xuICAgICAgICB0YXJnZXQuc3JjID0gZGVmYXVsdEltYWdlO1xuICAgICAgICB0YXJnZXQub25lcnJvciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIExJRkVDWUNMRSBNRVRIT0RTXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hcHBseUN1c3RvbUNvbG9ycygpLCAwKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBseUN1c3RvbUNvbG9ycygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwU2VydmljZS5kZXN0cm95KCk7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUN1c3RvbUNvbG9ycygpOiB2b2lkIHtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWw/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFob3N0RWxlbWVudCB8fCAhdGhpcy5kYXRhKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5kYXRhLmNvbG9yPy5iZykge1xuICAgICAgaG9zdEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGFibGUtY29sb3InLCB0aGlzLmRhdGEuY29sb3IuYmcpO1xuICAgICAgaG9zdEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGFibGUtaGVhZGVyLWJnJywgdGhpcy5kYXRhLmNvbG9yLmJnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS5jb2xvcj8udGV4dCkge1xuICAgICAgaG9zdEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGFibGUtdGV4dC1jb2xvcicsIHRoaXMuZGF0YS5jb2xvci50ZXh0KTtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAnLS10YWJsZS1oZWFkZXItdGV4dCcsXG4gICAgICAgIHRoaXMuZGF0YS5jb2xvci50ZXh0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlckNlbGxzID0gaG9zdEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgJy5tYXQtaGVhZGVyLWNlbGwsIC5tYXQtbWRjLWhlYWRlci1jZWxsLCB0aC5tYXQtaGVhZGVyLWNlbGwsIHRoLm1hdC1tZGMtaGVhZGVyLWNlbGwnLFxuICAgICAgKTtcbiAgICAgIGhlYWRlckNlbGxzLmZvckVhY2goKGNlbGw6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LmJnKSB7XG4gICAgICAgICAgY2VsbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmRhdGEuY29sb3IuYmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jb2xvcj8udGV4dCkge1xuICAgICAgICAgIGNlbGwuc3R5bGUuY29sb3IgPSB0aGlzLmRhdGEuY29sb3IudGV4dDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZGF0YS5jb2xvcikge1xuICAgICAgdGhpcy5kYXRhLmNvbG9yID0ge1xuICAgICAgICBiZzogVEFCTEVfREVGQVVMVFMuREVGQVVMVF9CR19DT0xPUixcbiAgICAgICAgdGV4dDogVEFCTEVfREVGQVVMVFMuREVGQVVMVF9URVhUX0NPTE9SLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS5zaG93U2ltcGxlU2VhcmNoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGF0YS5zaG93U2ltcGxlU2VhcmNoID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtblByb3BlcnRpZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucy5tYXAoXG4gICAgICAoY29sdW1uKSA9PiBjb2x1bW4ucHJvcGVydHksXG4gICAgKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGlmICh0aGlzLmRhdGEuYWN0aW9uQnV0dG9uICYmICF0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbikge1xuICAgICAgdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24gPSAoX3Jvdz86IFQpID0+IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSW5pY2lhbGl6YXIgZHJvcGRvd25JdGVtcyB1c2FuZG8gRmlsdGVyU2VydmljZVxuICAgIGNvbnN0IGZpbHRlckNvbmZpZyA9IHRoaXMuZmlsdGVyU2VydmljZS5pbml0aWFsaXplRHJvcGRvd25JdGVtcyhcbiAgICAgIHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLFxuICAgICk7XG4gICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gZmlsdGVyQ29uZmlnLmRyb3Bkb3duSXRlbXM7XG4gICAgdGhpcy5zb3J0YWJsZURyb3Bkb3duSXRlbXMgPSBmaWx0ZXJDb25maWcuc29ydGFibGVEcm9wZG93bkl0ZW1zO1xuICAgIHRoaXMuaGFzRmlsdGVyYWJsZUNvbHVtbiA9IGZpbHRlckNvbmZpZy5oYXNGaWx0ZXJhYmxlQ29sdW1uO1xuICAgIHRoaXMuaGFzU29ydGFibGVDb2x1bW4gPSBmaWx0ZXJDb25maWcuaGFzU29ydGFibGVDb2x1bW47XG5cbiAgICBpZiAodGhpcy5kYXRhLmZpbHRlcmFibGVPcHRpb25zKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSB0aGlzLmZpbHRlclNlcnZpY2UuYWRkRmlsdGVyYWJsZU9wdGlvbnMoXG4gICAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyxcbiAgICAgICAgdGhpcy5kYXRhLmZpbHRlcmFibGVPcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTZW0gcGFnaW5hw6fDo29cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtcygpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8gQ29tIHBhZ2luYcOnw6NvXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlKSB7XG4gICAgICBpZiAodGhpcy5kYXRhLnNvcnRCeSkge1xuICAgICAgICB0aGlzLnNvcnRCeSA9IHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5kYXRhLnNvcnRCeS5maWVsZCxcbiAgICAgICAgICBvcmRlcjogdGhpcy5kYXRhLnNvcnRCeS5vcmRlcixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyU3ViamVjdFxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVNcyksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcblxuICAgICAgdGhpcy5zb3J0LmFjdGl2ZSA9ICdjcmVhdGVkQXQnO1xuICAgICAgdGhpcy5zb3J0LmRpcmVjdGlvbiA9ICdkZXNjJztcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMDtcbiAgICAgIGlmICh0aGlzLmRhdGEudG90YWxSZWYpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b3RhbFJlZiBvZiB0aGlzLmRhdGEudG90YWxSZWYpIHtcbiAgICAgICAgICBjb25zdCB0b3RhbFJlZkRvYyA9IGF3YWl0IHRvdGFsUmVmLnJlZi5nZXQoKTtcbiAgICAgICAgICBjb25zdCBkb2NEYXRhID0gdG90YWxSZWZEb2MuZGF0YSgpIGFzXG4gICAgICAgICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoZG9jRGF0YSAmJiBkb2NEYXRhW3RvdGFsUmVmLmZpZWxkXSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IGRvY0RhdGFbdG90YWxSZWYuZmllbGRdO1xuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gKHRoaXMudG90YWxJdGVtcyArXG4gICAgICAgICAgICAgICh0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ251bWJlcicgPyBmaWVsZFZhbHVlIDogMCkpIGFzIG51bWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERBVEEgTE9BRElORyBNRVRIT0RTXG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkSXRlbXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5jbGVhcigpO1xuICAgIHRoaXMuaXRlbXMgPSAoYXdhaXQgdGhpcy50YWJsZVNlcnZpY2UuZ2V0SXRlbXMoXG4gICAgICB0aGlzLmRhdGEuY29sbGVjdGlvblJlZixcbiAgICApKSBhcyBUW107XG4gICAgaWYgKHRoaXMuZGF0YS5jb25kaXRpb25zKSB7XG4gICAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMubG9hZFJlbGF0aW9ucygpO1xuICAgIGF3YWl0IHRoaXMubG9hZFF1ZXJ5TGVuZ3RocygpO1xuICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuXG4gICAgdGhpcy5hcnJhbmdlID0ge1xuICAgICAgZmlsdGVyczogW10sXG4gICAgICBzb3J0Qnk6IHRoaXMuZGF0YS5zb3J0QnkgfHwge1xuICAgICAgICBmaWVsZDogVEFCTEVfREVGQVVMVFMuU09SVF9GSUVMRCxcbiAgICAgICAgb3JkZXI6IFRBQkxFX0RFRkFVTFRTLlNPUlRfT1JERVIsXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5zb3J0QnkgPSB0aGlzLmRhdGEuc29ydEJ5IHx8IHtcbiAgICAgIGZpZWxkOiBUQUJMRV9ERUZBVUxUUy5TT1JUX0ZJRUxELFxuICAgICAgb3JkZXI6IFRBQkxFX0RFRkFVTFRTLlNPUlRfT1JERVIsXG4gICAgfTtcblxuICAgIGxldCBpdGVtc1RvRGlzcGxheSA9IFsuLi50aGlzLml0ZW1zXTtcbiAgICBpdGVtc1RvRGlzcGxheSA9IHRoaXMuYXBwbHlDbGllbnRTaWRlRmlsdGVycyhpdGVtc1RvRGlzcGxheSk7XG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gaXRlbXNUb0Rpc3BsYXk7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKGl0ZW1zVG9EaXNwbGF5KTtcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgaWYgKHRoaXMuZGF0YS5zb3J0QnkpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0LmFjdGl2ZSA9IHRoaXMuZGF0YS5zb3J0QnkuZmllbGQ7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydC5kaXJlY3Rpb24gPSB0aGlzLmRhdGEuc29ydEJ5Lm9yZGVyO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQuc29ydENoYW5nZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChkYXRhLCBmaWx0ZXI6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgaXRlbSA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMuc29tZSgoY29sKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGlmIChjb2wuZmlsdGVyUHJlZGljYXRlcykge1xuICAgICAgICAgIHJldHVybiBjb2wuZmlsdGVyUHJlZGljYXRlcy5zb21lKChwcmVkaWNhdGUpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBpdGVtW2NvbC5wcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5VmFsdWUgfHwgdHlwZW9mIHByb3BlcnR5VmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlSZWNvcmQgPSBwcm9wZXJ0eVZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgY29uc3QgcHJlZGljYXRlVmFsdWUgPSBwcm9wZXJ0eVJlY29yZFtwcmVkaWNhdGVdO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZVZhbHVlID09PSBudWxsIHx8IHByZWRpY2F0ZVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHByZWRpY2F0ZVZhbHVlKVxuICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIC5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbC5wcm9wZXJ0eSAmJiBjb2wuaXNGaWx0ZXJhYmxlKSB7XG4gICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGl0ZW1bY29sLnByb3BlcnR5XTtcbiAgICAgICAgICBpZiAocHJvcGVydHlWYWx1ZSA9PT0gbnVsbCB8fCBwcm9wZXJ0eVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHByb3BlcnR5VmFsdWUpXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRJdGVtc1BhZ2luYXRlZChcbiAgICBuYXZpZ2F0aW9uOiAncmVsb2FkJyB8ICdmb3J3YXJkJyB8ICdiYWNrd2FyZCcgPSAncmVsb2FkJyxcbiAgICByZXNldDogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmltYWdlTG9hZGluZ1N0YXRlLmNsZWFyKCk7XG4gICAgaWYgKHJlc2V0ICYmIFsnZm9yd2FyZCcsICdyZWxvYWQnXS5pbmNsdWRlcyhuYXZpZ2F0aW9uKSkge1xuICAgICAgdGhpcy5sYXN0RG9jID0gbnVsbDtcbiAgICAgIHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCA9IDA7XG4gICAgfVxuICAgIGlmIChyZXNldCAmJiBbJ2JhY2t3YXJkJywgJ3JlbG9hZCddLmluY2x1ZGVzKG5hdmlnYXRpb24pKSB7XG4gICAgICB0aGlzLmZpcnN0RG9jID0gbnVsbDtcbiAgICAgIHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRmlsdGVycyA9IHRoaXMuZmlsdGVyU2VydmljZS5leHRyYWN0QWN0aXZlRmlsdGVycyhcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgKTtcblxuICAgIHRoaXMuYXJyYW5nZSA9IHtcbiAgICAgIGZpbHRlcnM6IGFjdGl2ZUZpbHRlcnMsXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5LFxuICAgIH07XG5cbiAgICBjb25zdCBwYWdpbmF0ZWQ6IFBhZ2luYXRpb24gPSB7XG4gICAgICBiYXRjaFNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICBjb2xsZWN0aW9uOiB0aGlzLmRhdGEuY29sbGVjdGlvbixcbiAgICAgIGRvYzogeyBsYXN0RG9jOiB0aGlzLmxhc3REb2MsIGZpcnN0RG9jOiB0aGlzLmZpcnN0RG9jIH0sXG4gICAgICBuYXZpZ2F0aW9uLFxuICAgICAgYXJyYW5nZTogdGhpcy5hcnJhbmdlISxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZGF0YS5jb25kaXRpb25zLFxuICAgICAgc2l6ZTogdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgZmlsdGVyRm46IHRoaXMuZGF0YS5maWx0ZXJGbixcbiAgICAgIGNsaWVudFBhZ2VJbmRleDogdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnRhYmxlU2VydmljZS5nZXRQYWdpbmF0ZWQocGFnaW5hdGVkKTtcbiAgICB0aGlzLml0ZW1zID0gcmVzdWx0Lml0ZW1zIGFzIFRbXTtcbiAgICBhd2FpdCB0aGlzLmxvYWRSZWxhdGlvbnMoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRRdWVyeUxlbmd0aHMoKTtcbiAgICB0aGlzLmxhc3REb2MgPSByZXN1bHQubGFzdERvYyBhcyBRdWVyeURvY3VtZW50U25hcHNob3Q8VD4gfCBudWxsO1xuICAgIHRoaXMuZmlyc3REb2MgPSByZXN1bHQuZmlyc3REb2MgYXMgUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbDtcblxuICAgIGlmIChyZXN1bHQuY3VycmVudENsaWVudFBhZ2VJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSByZXN1bHQuY3VycmVudENsaWVudFBhZ2VJbmRleDtcbiAgICB9XG5cbiAgICBsZXQgc3VtID0gMDtcbiAgICBpZiAodGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICBmb3IgKGNvbnN0IHRvdGFsUmVmIG9mIHRoaXMuZGF0YS50b3RhbFJlZikge1xuICAgICAgICBjb25zdCB0b3RhbFJlZkRvYyA9IGF3YWl0IHRvdGFsUmVmLnJlZi5nZXQoKTtcbiAgICAgICAgY29uc3QgZG9jRGF0YSA9IHRvdGFsUmVmRG9jLmRhdGEoKSBhc1xuICAgICAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGRvY0RhdGEgfHwgcmVzdWx0LmZpbHRlckxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBkb2NEYXRhID8gZG9jRGF0YVt0b3RhbFJlZi5maWVsZF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gdHlwZW9mIGZpZWxkVmFsdWUgPT09ICdudW1iZXInID8gZmllbGRWYWx1ZSA6IDA7XG4gICAgICAgICAgc3VtID0gcmVzdWx0LmZpbHRlckxlbmd0aCA/PyAoKHN1bSArIG51bWVyaWNWYWx1ZSkgYXMgbnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50b3RhbEl0ZW1zID0gc3VtO1xuICAgIH1cblxuICAgIHRoaXMuaGFzTmV4dFBhZ2UgPSByZXN1bHQuaGFzTmV4dFBhZ2U7XG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLml0ZW1zKTtcbiAgICB0aGlzLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBQQUdJTkFUSU9OIE1FVEhPRFNcblxuICBhc3luYyBvblBhZ2VDaGFuZ2UoZXZlbnQ/OiBQYWdlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gIT09IHRydWUgfHwgIWV2ZW50KSByZXR1cm47XG5cbiAgICB0aGlzLmlzTG9hZGluZyQubmV4dCh0cnVlKTtcblxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHtcbiAgICAgIGN1cnJlbnRQYWdlTnVtYmVyOiB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyLFxuICAgICAgY3VycmVudENsaWVudFBhZ2VJbmRleDogdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICB0b3RhbEl0ZW1zOiB0aGlzLnRvdGFsSXRlbXMsXG4gICAgICBoYXNOZXh0UGFnZTogdGhpcy5oYXNOZXh0UGFnZSxcbiAgICB9O1xuXG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY2FsY3VsYXRlTmF2aWdhdGlvbihcbiAgICAgIGV2ZW50LFxuICAgICAgY3VycmVudFN0YXRlLFxuICAgICk7XG5cbiAgICBpZiAoIW5hdmlnYXRpb24uc2hvdWxkTmF2aWdhdGUpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMucGFnZUV2ZW50ID0gZXZlbnQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXR1YWxpemFyIGVzdGFkbyBsb2NhbFxuICAgIHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCA9IG5hdmlnYXRpb24ubmV3Q2xpZW50UGFnZUluZGV4O1xuICAgIHRoaXMuY3VycmVudFBhZ2VOdW1iZXIgPSBuYXZpZ2F0aW9uLm5ld1BhZ2VOdW1iZXI7XG5cbiAgICAvLyBBdHVhbGl6YXIgcGFnZVNpemUgc2UgbXVkb3VcbiAgICBpZiAoZXZlbnQucGFnZVNpemUgIT09IHRoaXMucGFnZVNpemUpIHtcbiAgICAgIHRoaXMucGFnZVNpemUgPSBldmVudC5wYWdlU2l6ZTtcbiAgICB9XG5cbiAgICAvLyBBanVzdGFyIHBhZ2VTaXplIHRlbXBvcmFyaWFtZW50ZSBwYXJhIMO6bHRpbWEgcMOhZ2luYSBzZSBuZWNlc3PDoXJpb1xuICAgIGNvbnN0IGxhc3RQYWdlSW5kZXggPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZUxhc3RQYWdlSW5kZXgoXG4gICAgICB0aGlzLnRvdGFsSXRlbXMsXG4gICAgICBldmVudC5wYWdlU2l6ZSxcbiAgICApO1xuICAgIGxldCBvcmlnaW5hbFBhZ2VTaXplOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50LnBhZ2VJbmRleCA9PT0gbGFzdFBhZ2VJbmRleCAmJlxuICAgICAgbmF2aWdhdGlvbi5kaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgJiZcbiAgICAgIG5hdmlnYXRpb24ucmVzZXREb2NzXG4gICAgKSB7XG4gICAgICBjb25zdCBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZSA9XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY2FsY3VsYXRlTGFzdFBhZ2VJdGVtQ291bnQoXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgICAgIGV2ZW50LnBhZ2VTaXplLFxuICAgICAgICApO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlID4gMCAmJlxuICAgICAgICBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZSA8IGV2ZW50LnBhZ2VTaXplXG4gICAgICApIHtcbiAgICAgICAgb3JpZ2luYWxQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQobmF2aWdhdGlvbi5kaXJlY3Rpb24sIG5hdmlnYXRpb24ucmVzZXREb2NzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJybyBhbyBjYXJyZWdhciBpdGVucyBwYWdpbmFkb3M6JywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAob3JpZ2luYWxQYWdlU2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gb3JpZ2luYWxQYWdlU2l6ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhZ2VFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIEZJTFRFUi9TRUFSQ0ggTUVUSE9EU1xuXG4gIGFwcGx5RmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gU3RyaW5nKHZhbHVlKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmZpbHRlclZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmZpbHRlclN1YmplY3QubmV4dCh0aGlzLmZpbHRlclZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2goZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdFNvcnQudmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdFNvcnQudmFsdWUuYXJyYW5nZSA9PT0gJ2FzY2VuZGluZycpIHtcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuc2VsZWN0U29ydC52YWx1ZS5wcm9wZXJ0eSxcbiAgICAgICAgICBvcmRlcjogJ2FzYycsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RTb3J0LnZhbHVlLmFycmFuZ2UgPT09ICdkZXNjZW5kaW5nJykge1xuICAgICAgICB0aGlzLnNvcnRCeSA9IHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5zZWxlY3RTb3J0LnZhbHVlLnByb3BlcnR5LFxuICAgICAgICAgIG9yZGVyOiAnZGVzYycsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hcnJhbmdlID0gdGhpcy5idWlsZEFycmFuZ2VGcm9tRmlsdGVycygpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnNUb0RhdGFTb3VyY2UoKTtcbiAgICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPVxuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICh0aGlzLmZpbHRlcnNGb3JtLmF0KDApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID8/ICcnKVxuICAgICAgICAgIDogJyc7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xuICAgICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9XG4gICAgICAgIHRoaXMuZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMFxuICAgICAgICAgID8gKHRoaXMuZmlsdGVyc0Zvcm0uYXQoMCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU/LmFycmFuZ2UgPz8gJycpXG4gICAgICAgICAgOiAnJztcbiAgICAgIHRoaXMucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVzZXRGaWx0ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9ICcnO1xuICAgIGlmICh0aGlzLmZpbHRlclByZWRpY2F0ZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuZmlsdGVyUHJlZGljYXRlO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyc0Zvcm0uY2xlYXIoKTtcbiAgICB0aGlzLmFkZEZpbHRlcigpO1xuICAgIHRoaXMuc2VsZWN0U29ydC5wYXRjaFZhbHVlKCcnKTtcbiAgICB0aGlzLnNvcnRCeSA9IHtcbiAgICAgIG9yZGVyOiB0aGlzLmRhdGEuc29ydEJ5ID8gdGhpcy5kYXRhLnNvcnRCeS5vcmRlciA6ICdkZXNjJyxcbiAgICAgIGZpZWxkOiB0aGlzLmRhdGEuc29ydEJ5ID8gdGhpcy5kYXRhLnNvcnRCeS5maWVsZCA6ICdjcmVhdGVkQXQnLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFycmFuZ2UgPSB7XG4gICAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5LFxuICAgICAgfTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gWy4uLnRoaXMuaXRlbXNdO1xuICAgICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgICB0aGlzLmN1cnJlbnRBcnJhbmdlID0gJyc7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xuICAgICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9ICcnO1xuICAgICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyBOQVZJR0FUSU9OIE1FVEhPRFNcblxuICBnb1RvRGV0YWlscyhyb3c6IFQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmlzTm90Q2xpY2thYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmRhdGEudXJsIHx8IHRoaXMuZGF0YS5uYW1lO1xuICAgIGNvbnN0IHJvd1dpdGhJZCA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgaWQ6IHN0cmluZyB9O1xuICAgIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybChcbiAgICAgIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW2AvJHt1cmxQYXRofWAsIHJvd1dpdGhJZC5pZF0pLFxuICAgICk7XG4gICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG4gIH1cblxuICAvLyBSRUxBVElPTiBNRVRIT0RTXG5cbiAgYXN5bmMgZ2V0UmVsYXRpb24ocGFyYW1zOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb2xsZWN0aW9uOiBzdHJpbmc7XG4gICAgbmV3UHJvcGVydHk6IHN0cmluZztcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzbmFwc2hvdDogZmlyZXN0b3JlLkRvY3VtZW50U25hcHNob3Q8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoXG4gICAgICAgIHBhcmFtcy5pZCAhPT0gJycgJiZcbiAgICAgICAgcGFyYW1zLmlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgcGFyYW1zLmNvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBwYXJhbXMuY29sbGVjdGlvbiAhPT0gJydcbiAgICAgICkge1xuICAgICAgICBzbmFwc2hvdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgIHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb24ocGFyYW1zLmNvbGxlY3Rpb24pLmRvYyhwYXJhbXMuaWQpLmdldCgpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHNuYXBzaG90ICYmIHNuYXBzaG90LmV4aXN0cykge1xuICAgICAgICBjb25zdCBkYXRhID0gc25hcHNob3QuZGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGE/LltwYXJhbXMubmV3UHJvcGVydHldO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRSZWxhdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVsYXRpb25Qcm9taXNlcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5yZWxhdGlvbilcbiAgICAgIC5mbGF0TWFwKChjb2wpID0+XG4gICAgICAgIHRoaXMuaXRlbXMubWFwKGFzeW5jIChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbC5yZWxhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaXRlbVJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBpdGVtUmVjb3JkW2NvbC5wcm9wZXJ0eV0gPSBhd2FpdCB0aGlzLmdldFJlbGF0aW9uKHtcbiAgICAgICAgICAgICAgaWQ6IFN0cmluZyhpdGVtUmVjb3JkW2NvbC5yZWxhdGlvbi5zb3VyY2VQcm9wZXJ0eV0gPz8gJycpLFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2wucmVsYXRpb24udGFyZ2V0ZWRDb2xsZWN0aW9uLFxuICAgICAgICAgICAgICBuZXdQcm9wZXJ0eTogY29sLnJlbGF0aW9uLnRhcmdldGVkUHJvcGVydHkgfHwgY29sLnByb3BlcnR5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChyZWxhdGlvblByb21pc2VzKTtcbiAgfVxuXG4gIGFzeW5jIGdldFF1ZXJ5TGVuZ3RoKHBhcmFtczoge1xuICAgIGl0ZW06IFQ7XG4gICAgcmVsYXRpb246IHtcbiAgICAgIGNvbGxlY3Rpb246IHN0cmluZztcbiAgICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgICBvcGVyYXRvcjogV2hlcmVGaWx0ZXJPcDtcbiAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgfTtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgaXRlbVJlY29yZCA9IHBhcmFtcy5pdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdGhpcy5maXJlc3RvcmVcbiAgICAgIC5jb2xsZWN0aW9uKHBhcmFtcy5yZWxhdGlvbi5jb2xsZWN0aW9uKVxuICAgICAgLnJlZi53aGVyZShcbiAgICAgICAgcGFyYW1zLnJlbGF0aW9uLnByb3BlcnR5LFxuICAgICAgICBwYXJhbXMucmVsYXRpb24ub3BlcmF0b3IsXG4gICAgICAgIGl0ZW1SZWNvcmRbcGFyYW1zLnJlbGF0aW9uLnZhbHVlXSxcbiAgICAgIClcbiAgICAgIC5nZXQoKTtcbiAgICByZXR1cm4gc25hcHNob3Quc2l6ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFF1ZXJ5TGVuZ3RocygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsZW5ndGhQcm9taXNlcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5xdWVyeUxlbmd0aClcbiAgICAgIC5mbGF0TWFwKChjb2wpID0+XG4gICAgICAgIHRoaXMuaXRlbXMubWFwKGFzeW5jIChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbC5xdWVyeUxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbVJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBpdGVtUmVjb3JkW2NvbC5wcm9wZXJ0eV0gPSBhd2FpdCB0aGlzLmdldFF1ZXJ5TGVuZ3RoKHtcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgcmVsYXRpb246IGNvbC5xdWVyeUxlbmd0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKGxlbmd0aFByb21pc2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVySXRlbXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5jb25kaXRpb25zKSB7XG4gICAgICB0aGlzLmRhdGEuY29uZGl0aW9ucy5mb3JFYWNoKChjb25kKSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wZXJhdG9yRnVuY3Rpb24gPVxuICAgICAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uub3BlcmF0b3JzW1xuICAgICAgICAgICAgICBjb25kLm9wZXJhdG9yIGFzIGtleW9mIHR5cGVvZiB0aGlzLnRhYmxlU2VydmljZS5vcGVyYXRvcnNcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgaWYgKG9wZXJhdG9yRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yRnVuY3Rpb24oXG4gICAgICAgICAgICAgIGl0ZW1SZWNvcmRbY29uZC5maXJlc3RvcmVQcm9wZXJ0eV0sXG4gICAgICAgICAgICAgIGNvbmQuZGFzaFByb3BlcnR5LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBVQkxJQyBNRVRIT0RTXG5cbiAgYXN5bmMgcmVsb2FkVGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG4gICAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtcygpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZURpc3BsYXllZENvbHVtbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxUPihbXSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5Qcm9wZXJ0aWVzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMubWFwKFxuICAgICAgKGNvbHVtbikgPT4gY29sdW1uLnByb3BlcnR5LFxuICAgICk7XG5cbiAgICBjb25zdCBmaWx0ZXJDb25maWcgPSB0aGlzLmZpbHRlclNlcnZpY2UuaW5pdGlhbGl6ZURyb3Bkb3duSXRlbXMoXG4gICAgICB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucyxcbiAgICApO1xuICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5kcm9wZG93bkl0ZW1zO1xuICAgIHRoaXMuc29ydGFibGVEcm9wZG93bkl0ZW1zID0gZmlsdGVyQ29uZmlnLnNvcnRhYmxlRHJvcGRvd25JdGVtcztcblxuICAgIGlmICh0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IHRoaXMuZmlsdGVyU2VydmljZS5hZGRGaWx0ZXJhYmxlT3B0aW9ucyhcbiAgICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zLFxuICAgICAgICB0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNob3VsZFNob3dBY3Rpb25CdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRhdGE/LmFjdGlvbkJ1dHRvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24obnVsbCkgPz8gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZURvd25sb2FkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb3dubG9hZFRhYmxlKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlICYmIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5maWx0ZXJlZERhdGFdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJhbmdlID0gdGhpcy5idWlsZEFycmFuZ2VGcm9tRmlsdGVycygpO1xuICAgICAgdGhpcy5kb3dubG9hZFRhYmxlKGFycmFuZ2UsIHRoaXMuZGF0YS5jb25kaXRpb25zIHx8IFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuYXJyYW5nZSkge1xuICAgICAgICB0aGlzLmRvd25sb2FkVGFibGUodGhpcy5hcnJhbmdlLCB0aGlzLmRhdGEuY29uZGl0aW9ucyB8fCBbXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiZGF0YVwiIGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBnYXAtNlwiPlxuICAgIDwhLS0gVU5JRklFRCBDT05UUk9MIFBBTkVMOiBGSUxURVJTLCBTT1JUICYgQUNUSU9OUyAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBiZy13aGl0ZSBwLTQgc2hhZG93LWxnXCJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIGRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgICAoZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgc29ydGFibGVEcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICBkYXRhLmFjdGlvbkJ1dHRvbilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPCEtLSBQQU5FTCBIRUFERVI6IFRpdGxlIGFuZCBDdXN0b20gQWN0aW9uIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1iLTQgZmxleCBmbGV4LWNvbCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLWItMiBib3JkZXItZ3JheS0yMDAgcGItNCBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8IS0tIExlZnQgU2lkZTogVGl0bGUgJiBNYWluIEFjdGlvbiBCdXR0b24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsdGVyIHRleHQteGwgdGV4dC1ibHVlLTUwMFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDBcIlxuICAgICAgICAgICAgICA+RmlsdHJvcyBlIEHDp8O1ZXM8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImRhdGEuYWN0aW9uQnV0dG9uICYmIGRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJnZXRBY3Rpb25CdXR0b25DbGFzcygpXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImRhdGEuYWN0aW9uQnV0dG9uLnJvdXRlckxpbmtcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBkYXRhLmFjdGlvbkJ1dHRvbi5tZXRob2QgPyBkYXRhLmFjdGlvbkJ1dHRvbi5tZXRob2QoJGV2ZW50KSA6IG51bGxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImRhdGEuYWN0aW9uQnV0dG9uLmljb25cIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIHt7IGRhdGEuYWN0aW9uQnV0dG9uLmxhYmVsIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU09SVCBGSUVMRCAoSW50ZWdyYXRlZCB3aXRoIGZpbHRlcnMpIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIiAqbmdJZj1cInNvcnRhYmxlRHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTMgcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNvcnQtYWxwaGEtZG93biB0ZXh0LWN5YW4tNjAwXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPk9yZGVuYXIgcG9yPC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY2lvbmUuLi5cIiBbZm9ybUNvbnRyb2xdPVwic2VsZWN0U29ydFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzb3J0YWJsZURyb3Bkb3duSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNvcnQtYWxwaGEtZG93biB0ZXh0LWN5YW4tNjAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEZJTFRFUlMgQ09OVEVOVCAoV0lUSCBSRUZJTkVNRU5UUykgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNCBzcGFjZS15LTNcIiAqbmdJZj1cImZpbHRlcnNGb3JtLmNvbnRyb2xzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtmb3JtR3JvdXBdPVwiJGFueShmaWx0ZXJHcm91cClcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWx0ZXJHcm91cCBvZiBmaWx0ZXJzRm9ybS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTMgcC0yXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gRklMVEVSIFRZUEUgU0VMRUNUT1IgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCIgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkZSBmaWx0cm88L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZSBvIHRpcG8uLi5cIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEZpbHRlclwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdEZpbHRlckNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRBdmFpbGFibGVGaWx0ZXJPcHRpb25zKGZpbHRlckdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uaWNvbiB8fCAnZmEgZmEtZmlsdGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS01MDBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBURVhUIEZJTFRFUiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PSAnZmlsdGVyJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoXCJzZWxlY3RGaWx0ZXJcIik/LnZhbHVlPy50aXRsZSB8fFxuICAgICAgICAgICAgICAgICAgICBcIkZpbHRyYXJcIlxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlRmlsdGVyXCJcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGlnaXRlIHBhcmEgZmlsdHJhci4uLlwiXG4gICAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEUk9QRE9XTiBGSUxURVIgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZSAmJlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKVxuICAgICAgICAgICAgICAgIC5nZXQoJ3NlbGVjdEZpbHRlcicpXG4gICAgICAgICAgICAgICAgPy52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7XG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgIFwiU2VsZWNpb25lXCJcbiAgICAgICAgICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZS4uLlwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0SXRlbVwiXG4gICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAuaXRlbXNcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gREFURSBGSUxURVIgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtaW4tdy1bMzQwcHhdIGZsZXgtYXV0b1wiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgJ2ZpbHRlckJ5RGF0ZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtc3RyZXRjaCBnYXAtMyBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBJbmljaWFsPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdpbml0aWFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaXRpYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBGaW5hbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdmaW5hbERhdGUnLCBpKVwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmluYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBSRU1PVkUgRklMVEVSIEJVVFRPTiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMVwiIGNsYXNzPVwibWwtYXV0byBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMCB3LTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGhvdmVyOmJnLXJlZC0xMDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlciBmaWx0cm9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDBcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQQU5FTCBGT09URVI6IEFkZCBGaWx0ZXIgJiBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCItbWItMiBmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcHQtNFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gQWRkIEZpbHRlciBCdXR0b24gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkRmlsdGVyKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0cmFuc2Zvcm0gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1ibHVlLTMwMCBiZy1ibHVlLTUwIHB4LTYgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS02MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGhvdmVyOi10cmFuc2xhdGUteS0wLjUgaG92ZXI6Ym9yZGVyLWJsdWUtNDAwIGhvdmVyOmJnLWJsdWUtMTAwIGhvdmVyOnNoYWRvdy1tZFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRpY2lvbmFyIG5vdm8gZmlsdHJvXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMgbXItMlwiPjwvaT5cbiAgICAgICAgICAgIEFkaWNpb25hciBGaWx0cm9cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBSaWdodCBTaWRlOiBTZWFyY2gsIFJlc2V0LCBFeHBvcnQgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zIHNlbGYtc3RhcnQgc206c2VsZi1hdXRvXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgdGhpcy5oYXNGaWx0ZXJhYmxlQ29sdW1uID09PSB0cnVlIHx8IHRoaXMuaGFzU29ydGFibGVDb2x1bW4gPT09IHRydWVcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLWdyZWVuLTYwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWdyZWVuLTcwMFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBsaWNhciBmaWx0cm9zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjwvaT5cbiAgICAgICAgICAgIFBlc3F1aXNhclxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLXJlZC01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1yZWQtNjAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJMaW1wYXIgZmlsdHJvc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcmVkby1hbHRcIj48L2k+XG4gICAgICAgICAgICBSZXNldGFyXG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImRhdGEuZG93bmxvYWQgIT09IGZhbHNlICYmIGRvd25sb2FkVGFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLW9yYW5nZS01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1vcmFuZ2UtNjAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFeHBvcnRhciBUYWJlbGFcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggPD0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGFueShhcnJhbmdlKSAmJiBkb3dubG9hZFRhYmxlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGRvd25sb2FkVGFibGUoJGFueShhcnJhbmdlKSwgZGF0YS5jb25kaXRpb25zIHx8IFtdKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PC9pPlxuICAgICAgICAgICAgRXhwb3J0YXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVU5JRklFRCBDT05UUk9MIFBBTkVMIChmb3Igbm9uLXBhZ2luYXRlZCB0YWJsZXMpOiBTRUFSQ0gsIFNPUlQgJiBGSUxURVJTIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLXdoaXRlIHAtNCBzaGFkb3ctbGdcIlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSAmJlxuICAgICAgICAoaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSB8fFxuICAgICAgICAgIGRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8IS0tIFBBTkVMIEhFQURFUjogVGl0bGUgYW5kIEN1c3RvbSBBY3Rpb24gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWItNCBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItYi0yIGJvcmRlci1ncmF5LTIwMCBwYi00IG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlclwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gTGVmdCBTaWRlOiBUaXRsZSAmIE1haW4gQWN0aW9uIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWx0ZXIgdGV4dC14bCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMFwiXG4gICAgICAgICAgICAgID5GaWx0cm9zIGUgQcOnw7Vlczwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24gJiYgZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEFjdGlvbkJ1dHRvbkNsYXNzKClcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZGF0YS5hY3Rpb25CdXR0b24ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCA/IGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCgkZXZlbnQpIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuYWN0aW9uQnV0dG9uLmljb25cIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgZGF0YS5hY3Rpb25CdXR0b24ubGFiZWwgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTSU1QTEUgU0VBUkNIIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1iLTRcIlxuICAgICAgICAqbmdJZj1cImhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IHRydWUgJiYgZGF0YS5zaG93U2ltcGxlU2VhcmNoICE9PSBmYWxzZVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxuICAgICAgICAgICAgQnVzY2FyXG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJhcHBseUZpbHRlcihmaWx0ZXJJbnB1dC52YWx1ZSlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICNmaWx0ZXJJbnB1dFxuICAgICAgICAgIC8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCBjbGFzcz1cInRleHQtZ3JheS01MDBcIj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRklMVEVSUyBQQU5FTCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPCEtLSBGSUxURVJTIENPTlRFTlQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi00IHNwYWNlLXktM1wiICpuZ0lmPVwiZmlsdGVyc0Zvcm0uY29udHJvbHMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiJGFueShmaWx0ZXJHcm91cClcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbHRlckdyb3VwIG9mIGZpbHRlcnNGb3JtLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIEZJTFRFUiBUWVBFIFNFTEVDVE9SIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCIgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGUgZmlsdHJvPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lIG8gdGlwby4uLlwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdEZpbHRlckNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRBdmFpbGFibGVGaWx0ZXJPcHRpb25zKGZpbHRlckdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJpdGVtLmljb24gfHwgJ2ZhIGZhLWZpbHRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS01MDBcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVEVYVCBGSUxURVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PVxuICAgICAgICAgICAgICAgICdmaWx0ZXInXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBcIkZpbHRyYXJcIlxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZUZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBEUk9QRE9XTiBGSUxURVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlICYmXG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cClcbiAgICAgICAgICAgICAgICAgIC5nZXQoJ3NlbGVjdEZpbHRlcicpXG4gICAgICAgICAgICAgICAgICA/LnZhbHVlLmhhc093blByb3BlcnR5KCdpdGVtcycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xuICAgICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgXCJTZWxlY2lvbmVcIlxuICAgICAgICAgICAgICAgIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLml0ZW1zXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIERBVEUgRklMVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LVszNDBweF0gZmxleC1hdXRvXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgICAnZmlsdGVyQnlEYXRlJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0cmV0Y2ggZ2FwLTMgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEluaWNpYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2luaXRpYWxEYXRlJywgaSlcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkRhdGVGaWx0ZXJDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaXRpYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkRhdGEgRmluYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2ZpbmFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25EYXRlRmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaW5hbERhdGVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkREL01NL0FBQUFcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUkVNT1ZFIEZJTFRFUiBCVVRUT04gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMVwiIGNsYXNzPVwibWwtYXV0byBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGkpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMCB3LTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGhvdmVyOmJnLXJlZC0xMDBcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmVyIGZpbHRyb1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDBcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUEFORUwgRk9PVEVSOiBBZGQgRmlsdGVyICYgQWN0aW9ucyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiLW1iLTIgZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIHB0LTRcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBBZGQgRmlsdGVyIEJ1dHRvbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidHJhbnNmb3JtIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItYmx1ZS0zMDAgYmctYmx1ZS01MCBweC02IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWJsdWUtNjAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBob3ZlcjotdHJhbnNsYXRlLXktMC41IGhvdmVyOmJvcmRlci1ibHVlLTQwMCBob3ZlcjpiZy1ibHVlLTEwMCBob3ZlcjpzaGFkb3ctbWRcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRpY2lvbmFyIG5vdm8gZmlsdHJvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzIG1yLTJcIj48L2k+XG4gICAgICAgICAgICAgIEFkaWNpb25hciBGaWx0cm9cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zIHNlbGYtc3RhcnQgc206c2VsZi1hdXRvXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHRoaXMuaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID09PSB0cnVlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1ncmVlbi02MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1ncmVlbi03MDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBsaWNhciBmaWx0cm9zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIj48L2k+XG4gICAgICAgICAgICAgIFBlc3F1aXNhclxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctcmVkLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXJlZC02MDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTGltcGFyIGZpbHRyb3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWRvLWFsdFwiPjwvaT5cbiAgICAgICAgICAgICAgUmVzZXRhclxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmRvd25sb2FkICE9PSBmYWxzZSAmJiBkb3dubG9hZFRhYmxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLW9yYW5nZS01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1vcmFuZ2UtNjAwXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRXhwb3J0YXIgVGFiZWxhXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA8PSAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVEb3dubG9hZCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiPjwvaT5cbiAgICAgICAgICAgICAgRXhwb3J0YXJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgIDwhLS0gVEFCUyBDT01QT05FTlQgLS0+XG4gICAgICA8bGliLXRhYmxlLXRhYnNcbiAgICAgICAgKm5nSWY9XCJkYXRhLnRhYnMgJiYgZGF0YS50YWJzLnRhYnNEYXRhICYmIGRhdGEudGFicy50YWJzRGF0YS5sZW5ndGggPiAwXCJcbiAgICAgICAgW3RhYnNEYXRhXT1cImRhdGEudGFicy50YWJzRGF0YVwiXG4gICAgICAgIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgICh0YWJTZWxlY3RlZCk9XCJvblRhYlNlbGVjdGVkKCRldmVudClcIlxuICAgICAgPjwvbGliLXRhYmxlLXRhYnM+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCB3LWZ1bGwgb3ZlcmZsb3cteC1hdXRvIHJvdW5kZWQteGwgdGFibGUtY29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgbWF0LXRhYmxlXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgICAgbWF0U29ydFxuICAgICAgICAgICNzb3J0PVwibWF0U29ydFwiXG4gICAgICAgICAgbWF0U29ydEFjdGl2ZT1cImNyZWF0ZWRBdFwiXG4gICAgICAgICAgbWF0U29ydERpcmVjdGlvbj1cImRlc2NcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBkYXRhLmRpc3BsYXllZENvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlQcm9wZXJ0eVwiXG4gICAgICAgICAgICBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wucHJvcGVydHkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBOT1QgU09SVEFCTEUsIFRIRU4gRE9OJ1QgU0hPVyBUSEUgU09SVCBCVVRUT05TIC0tPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaXNTb3J0YWJsZSB8fCBkYXRhLnBhZ2luYXRpb24gPT09IHRydWVcIlxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sLnRpdGxlIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBTT1JUQUJMRSwgVEhFTiBTSE9XIFRIRSBTT1JUIEJVVFRPTlMgLS0+XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmlzU29ydGFibGUgJiYgZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb2wudGl0bGUgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wubWV0aG9kID8gY29sLm1ldGhvZChyb3cpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25DZWxsTW91c2VFbnRlcigkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25DZWxsTW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vtb3ZlKT1cIm9uQ2VsbE1vdXNlTW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwhLS0gQ0hFQ0sgSUYgVEhFIENPTFVNTiBNVVNUIEJFIERJU1BMQVlFRCAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2wuaW1hZ2UgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGFyTGltaXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0ubGVuZ3RoID4gY29sLmNoYXJMaW1pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd2l0aGluTGltaXRcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicm93W2NvbC5wcm9wZXJ0eV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3cpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rICYmIGlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2wuaGFzTGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdykgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgIT09IHRydWUgJiYgIWlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhpbkxpbWl0PlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAmJiBpc1N0cmluZyhjb2wuaGFzTGluaylcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImNvbC5oYXNMaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAhPT0gdHJ1ZSAmJiAhaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tIElNQUdFIC0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgICAgICAgICA8IS0tIEltYWdlbSBjb20gbG9hZGluZyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wuaW1hZ2UgJiYgY29sLmltYWdlLnBhdGggJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG0tYXV0b1wiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjb2wuaW1hZ2UucGF0aCArICcvJyArIHJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sLmltYWdlLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktMF09XCJpc0ltYWdlTG9hZGluZyhyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZChyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKCRldmVudCwgcm93LCBjb2wsIGNvbC5pbWFnZS5kZWZhdWx0KVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBJbWFnZW0gY29tIFVSTCBjb21wbGV0YSBlIGxvYWRpbmcgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLmltYWdlICYmIGNvbC5pbWFnZS51cmwgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG0tYXV0b1wiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJyb3dbY29sLnByb3BlcnR5XVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5pbWFnZS5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uSW1hZ2VFcnJvcigkZXZlbnQsIHJvdywgY29sLCBjb2wuaW1hZ2UuZGVmYXVsdClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaWNvbkNsYXNzIG9mIGNvbC5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLmJ1dHRvbk1ldGhvZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpY29uQ2xhc3MuYnV0dG9uTWV0aG9kKHJvdywgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpY29uQ2xhc3MuY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3MuY29uZGl0aW9uID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpY29uQ2xhc3MuY29uZGl0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFueShpY29uQ2xhc3MuY29uZGl0aW9uKShyb3cpKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7IGljb25DbGFzcy50ZXh0IH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtblByb3BlcnRpZXNcIj48L3RyPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0VGFibGVSb3dOZ0NsYXNzKClcIlxuICAgICAgICAgICAgbWF0LXJvd1xuICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtblByb3BlcnRpZXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9EZXRhaWxzKHJvdylcIlxuICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgPCEtLSBST1cgU0hPV04gV0hFTiBUSEVSRSBJUyBOTyBNQVRDSElORyBEQVRBLiAtLT5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm1hdE5vRGF0YVJvdz5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiEoaXNMb2FkaW5nJCB8IGFzeW5jKVwiIGNsYXNzPVwibWF0LWNlbGwgcC00XCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgICAgTmVuaHVtIHJlc3VsdGFkbyBlbmNvbnRyYWRvIHBhcmEgYSBidXNjYVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyXCIgKm5nSWY9XCJpc0xvYWRpbmckIHwgYXN5bmNcIj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRvci1jb250YWluZXJcIj5cbiAgICAgICAgICA8bWF0LXBhZ2luYXRvclxuICAgICAgICAgICAgI3BhZ2luYXRvclxuICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJbMjUsIDUwLCAxMDBdXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICBbbGVuZ3RoXT1cInRvdGFsSXRlbXNcIlxuICAgICAgICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3QgcGFnZSBvZiBwZXJpb2RpYyBlbGVtZW50c1wiXG4gICAgICAgICAgICAocGFnZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJnZXRQYWdpbmF0b3JOZ0NsYXNzKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XG4gICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhKGlzTG9hZGluZyQgfCBhc3luYykgJiZcbiAgICAgICAgICAgICAgZGF0YVNvdXJjZT8uZGF0YSAmJlxuICAgICAgICAgICAgICBkYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICBkYXRhPy5maWx0ZXJGblxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwicGFnZS1udW1iZXItZGlzcGxheVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY3VycmVudFBhZ2VOdW1iZXIgfX1cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVE9PTFRJUCBQRVJTT05BTElaQURPIC0tPlxuICA8bGliLXRhYmxlLXRvb2x0aXBcbiAgICBbc3RhdGVdPVwidG9vbHRpcFN0YXRlXCJcbiAgICBbc3R5bGVzXT1cImdldFRvb2x0aXBTdHlsZXMoKVwiXG4gID48L2xpYi10YWJsZS10b29sdGlwPlxuPC9kaXY+XG4iXX0=
|