tango-app-ui-analyse-traffic 3.8.0-alpha.6 → 3.8.0-alpha.60
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/esm2022/lib/components/add-nob/add-nob.component.mjs +258 -71
- package/esm2022/lib/components/explore-view/explore-view.component.mjs +3 -3
- package/esm2022/lib/components/img-rvps/img-rvps.component.mjs +2221 -281
- package/esm2022/lib/components/nob-upload/nob-upload.component.mjs +179 -54
- package/esm2022/lib/components/traffic-analysis/traffic-analysis.component.mjs +11 -7
- package/esm2022/lib/directive/magnifier.directive.mjs +23 -15
- package/esm2022/lib/services/traffic-rvps.service.mjs +4 -1
- package/esm2022/lib/services/traffic.service.mjs +12 -1
- package/esm2022/lib/tango-analyse-traffic.module.mjs +3 -3
- package/fesm2022/tango-app-ui-analyse-traffic.mjs +2692 -414
- package/fesm2022/tango-app-ui-analyse-traffic.mjs.map +1 -1
- package/lib/components/add-nob/add-nob.component.d.ts +18 -2
- package/lib/components/img-rvps/img-rvps.component.d.ts +169 -30
- package/lib/components/nob-upload/nob-upload.component.d.ts +4 -0
- package/lib/components/traffic-analysis/traffic-analysis.component.d.ts +3 -0
- package/lib/directive/magnifier.directive.d.ts +6 -3
- package/lib/services/traffic-rvps.service.d.ts +1 -0
- package/lib/services/traffic.service.d.ts +4 -0
- package/package.json +1 -1
|
@@ -5,23 +5,27 @@ import { DatePipe } from '@angular/common';
|
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@angular/forms";
|
|
7
7
|
import * as i2 from "../../services/traffic.service";
|
|
8
|
-
import * as i3 from "
|
|
9
|
-
import * as i4 from "
|
|
10
|
-
import * as i5 from "
|
|
11
|
-
import * as i6 from "
|
|
8
|
+
import * as i3 from "../../services/excel.service";
|
|
9
|
+
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
10
|
+
import * as i5 from "tango-app-ui-shared";
|
|
11
|
+
import * as i6 from "@angular/common";
|
|
12
|
+
import * as i7 from "../custom-select/custom-select.component";
|
|
12
13
|
export class AddNobComponent {
|
|
13
14
|
fb;
|
|
14
15
|
service;
|
|
16
|
+
excelService;
|
|
15
17
|
activeModal;
|
|
16
18
|
ts;
|
|
17
19
|
cd;
|
|
18
20
|
datePipe;
|
|
19
21
|
type;
|
|
22
|
+
viewData;
|
|
20
23
|
nobForm;
|
|
21
24
|
destroy$ = new Subject();
|
|
22
|
-
constructor(fb, service, activeModal, ts, cd, datePipe) {
|
|
25
|
+
constructor(fb, service, excelService, activeModal, ts, cd, datePipe) {
|
|
23
26
|
this.fb = fb;
|
|
24
27
|
this.service = service;
|
|
28
|
+
this.excelService = excelService;
|
|
25
29
|
this.activeModal = activeModal;
|
|
26
30
|
this.ts = ts;
|
|
27
31
|
this.cd = cd;
|
|
@@ -33,11 +37,41 @@ export class AddNobComponent {
|
|
|
33
37
|
}
|
|
34
38
|
clientId;
|
|
35
39
|
maxDate = '';
|
|
40
|
+
isEditEnabled = false;
|
|
41
|
+
clientData;
|
|
36
42
|
ngOnInit() {
|
|
37
43
|
let data = JSON.parse(localStorage.getItem("header-filters") || "");
|
|
38
44
|
this.clientId = data.client;
|
|
45
|
+
let client = JSON.parse(localStorage.getItem("client-details") || "");
|
|
46
|
+
this.clientData = client;
|
|
39
47
|
this.getNobStoreList(data.client);
|
|
40
48
|
this.setMaxDate();
|
|
49
|
+
if (this.type === 'editView' || this.type === 'view') {
|
|
50
|
+
this.storeName = this.viewData.storeName;
|
|
51
|
+
this.storeId = this.viewData.storeId;
|
|
52
|
+
this.storeCode = this.viewData.storeCode;
|
|
53
|
+
this.dateValue = this.viewData.nobDate
|
|
54
|
+
? new Date(this.viewData.nobDate).toISOString().split('T')[0]
|
|
55
|
+
: null;
|
|
56
|
+
this.nobCount = this.viewData.nobCount;
|
|
57
|
+
this.zoneList = this.viewData.zonewisenob; // keep values
|
|
58
|
+
if (this.type === 'editView') {
|
|
59
|
+
this.isEditEnabled = true;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.isEditEnabled = false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
cancelEdit() {
|
|
67
|
+
this.isEditEnabled = false;
|
|
68
|
+
if (this.viewData?.zoneList) {
|
|
69
|
+
this.zoneList = JSON.parse(JSON.stringify(this.viewData.zoneList));
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.zoneList = [];
|
|
73
|
+
}
|
|
74
|
+
this.cancel();
|
|
41
75
|
}
|
|
42
76
|
storeList = [];
|
|
43
77
|
getNobStoreList(client) {
|
|
@@ -57,6 +91,7 @@ export class AddNobComponent {
|
|
|
57
91
|
dateValue;
|
|
58
92
|
storeCode;
|
|
59
93
|
nobCount;
|
|
94
|
+
zoneShow = false;
|
|
60
95
|
onNOBStoreSelect(event, type) {
|
|
61
96
|
if (!event) {
|
|
62
97
|
this.ts.getErrorToast('storeName or storeId is undefined or invalid');
|
|
@@ -86,6 +121,11 @@ export class AddNobComponent {
|
|
|
86
121
|
this.storeCode = '';
|
|
87
122
|
}
|
|
88
123
|
}
|
|
124
|
+
this.zoneShow = true;
|
|
125
|
+
if (this.isEnabled) {
|
|
126
|
+
this.getZoneList(this.storeId);
|
|
127
|
+
}
|
|
128
|
+
// console.log('storeName',this.storeId);
|
|
89
129
|
}
|
|
90
130
|
omit_special_char(event) {
|
|
91
131
|
var k;
|
|
@@ -109,31 +149,38 @@ export class AddNobComponent {
|
|
|
109
149
|
cancel() {
|
|
110
150
|
this.activeModal.close('close');
|
|
111
151
|
}
|
|
152
|
+
erroShow = '';
|
|
153
|
+
isSubmitting = false;
|
|
112
154
|
onSubmit() {
|
|
113
|
-
|
|
155
|
+
// ⛔ STOP if already submitting
|
|
156
|
+
if (this.isSubmitting) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const overallNob = Number(this.nobCount) || 0;
|
|
160
|
+
const zoneTotal = this.zonewisenob.reduce((sum, z) => sum + (Number(z.nobCount) || 0), 0);
|
|
161
|
+
if (zoneTotal > overallNob) {
|
|
162
|
+
this.erroShow = 'Zone-wise NoB cannot exceed overall NoB count';
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// ✅ LOCK BUTTON
|
|
166
|
+
this.isSubmitting = true;
|
|
167
|
+
const obj = {
|
|
114
168
|
bills: [
|
|
115
169
|
{
|
|
116
|
-
// storeId: this.storeId,
|
|
117
170
|
storeCode: this.storeCode ? this.storeCode : this.storeId,
|
|
118
|
-
// storeName: this.storeName,
|
|
119
171
|
nobDate: this.dateValue,
|
|
120
|
-
nobCount: Number(this.nobCount)
|
|
172
|
+
nobCount: Number(this.nobCount),
|
|
173
|
+
zonewisenob: this.zonewisenob
|
|
121
174
|
}
|
|
122
175
|
],
|
|
123
176
|
clientId: this.clientId
|
|
124
177
|
};
|
|
125
|
-
this.service.getNOBDataList(obj)
|
|
178
|
+
this.service.getNOBDataList(obj)
|
|
179
|
+
?.pipe(takeUntil(this.destroy$))
|
|
126
180
|
.subscribe({
|
|
127
181
|
next: (res) => {
|
|
128
|
-
if (res
|
|
129
|
-
|
|
130
|
-
// .map((item:any) => {
|
|
131
|
-
// const status = item.code === 200 ? '✅' : '❌';
|
|
132
|
-
// const storeInfo = item.storeId ? `${item.storeId}` : '';
|
|
133
|
-
// return `${status} ${storeInfo}: ${item.message}`;
|
|
134
|
-
// })
|
|
135
|
-
// .join('<br>');
|
|
136
|
-
this.ts.getSuccessToast(allMessages);
|
|
182
|
+
if (res?.code === 200) {
|
|
183
|
+
this.ts.getSuccessToast(res.message);
|
|
137
184
|
this.activeModal.close('submit');
|
|
138
185
|
}
|
|
139
186
|
else {
|
|
@@ -141,8 +188,12 @@ export class AddNobComponent {
|
|
|
141
188
|
}
|
|
142
189
|
},
|
|
143
190
|
error: (err) => {
|
|
144
|
-
this.ts.getErrorToast(err
|
|
191
|
+
this.ts.getErrorToast(err?.error?.error || 'Something went wrong');
|
|
145
192
|
},
|
|
193
|
+
complete: () => {
|
|
194
|
+
// 🔓 UNLOCK BUTTON
|
|
195
|
+
this.isSubmitting = false;
|
|
196
|
+
}
|
|
146
197
|
});
|
|
147
198
|
}
|
|
148
199
|
typeNOB = 'single';
|
|
@@ -155,66 +206,144 @@ export class AddNobComponent {
|
|
|
155
206
|
convertedData;
|
|
156
207
|
inputFile;
|
|
157
208
|
onUpload(event) {
|
|
158
|
-
const file = event.target.files[0];
|
|
209
|
+
const file = event.target.files?.[0];
|
|
210
|
+
if (!file)
|
|
211
|
+
return;
|
|
159
212
|
const reader = new FileReader();
|
|
160
213
|
reader.onload = (e) => {
|
|
161
|
-
const binaryData = e.target.result;
|
|
162
214
|
try {
|
|
163
|
-
const
|
|
215
|
+
const binaryData = e.target.result;
|
|
216
|
+
const workbook = XLSX.read(binaryData, {
|
|
217
|
+
type: 'binary'
|
|
218
|
+
});
|
|
164
219
|
const sheetName = workbook.SheetNames[0];
|
|
165
|
-
if (sheetName !== 'NOB') {
|
|
166
|
-
this.ts.getErrorToast("Please upload a valid file.");
|
|
167
|
-
this.resetFileInput();
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
220
|
const sheet = workbook.Sheets[sheetName];
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
this.
|
|
221
|
+
const sheetData = XLSX.utils.sheet_to_json(sheet, {
|
|
222
|
+
header: 1,
|
|
223
|
+
defval: null
|
|
224
|
+
});
|
|
225
|
+
if (!sheetData || sheetData.length < 2) {
|
|
226
|
+
this.ts.getErrorToast('Excel file is empty');
|
|
177
227
|
return;
|
|
178
228
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
229
|
+
const headers = sheetData[0]
|
|
230
|
+
.map(h => (h === null || h === undefined ? '' : String(h).trim()))
|
|
231
|
+
.filter(Boolean);
|
|
232
|
+
if (headers.length < 4) {
|
|
233
|
+
this.ts.getErrorToast('Excel must contain StoreId, Date, NoB count and at least one Zone');
|
|
234
|
+
return;
|
|
182
235
|
}
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
236
|
+
const rows = sheetData.slice(1);
|
|
237
|
+
// ===============================
|
|
238
|
+
// 2️⃣ PROCESS ROWS
|
|
239
|
+
// ===============================
|
|
240
|
+
const bills = rows
|
|
241
|
+
.map((row, rowIndex) => {
|
|
242
|
+
// 🔹 SKIP COMPLETELY EMPTY ROWS (SAFE)
|
|
243
|
+
const isEmptyRow = row.every(cell => cell === null ||
|
|
244
|
+
cell === undefined ||
|
|
245
|
+
(typeof cell === 'string' && cell.trim() === ''));
|
|
246
|
+
if (isEmptyRow)
|
|
247
|
+
return null;
|
|
248
|
+
// ===============================
|
|
249
|
+
// 3️⃣ STORE CODE
|
|
250
|
+
// ===============================
|
|
251
|
+
const storeId = String(row[0] ?? '').trim();
|
|
252
|
+
if (!storeId) {
|
|
253
|
+
throw new Error(`Missing Store Code at row ${rowIndex + 2}`);
|
|
254
|
+
}
|
|
255
|
+
// ===============================
|
|
256
|
+
// 4️⃣ DATE
|
|
257
|
+
// ===============================
|
|
258
|
+
let nobDate = row[1];
|
|
259
|
+
if (nobDate === null || nobDate === undefined || nobDate === '') {
|
|
260
|
+
throw new Error(`Missing Date at row ${rowIndex + 2}`);
|
|
261
|
+
}
|
|
262
|
+
if (typeof nobDate === 'number') {
|
|
263
|
+
nobDate = this.convertExcelDate(nobDate);
|
|
264
|
+
}
|
|
265
|
+
else if (nobDate instanceof Date) {
|
|
266
|
+
// ok
|
|
267
|
+
}
|
|
268
|
+
else if (typeof nobDate === 'string') {
|
|
269
|
+
const parsed = new Date(nobDate);
|
|
270
|
+
if (isNaN(parsed.getTime())) {
|
|
271
|
+
throw new Error(`Invalid Date format at row ${rowIndex + 2}`);
|
|
272
|
+
}
|
|
273
|
+
nobDate = parsed;
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
throw new Error(`Invalid Date format at row ${rowIndex + 2}`);
|
|
277
|
+
}
|
|
278
|
+
// ===============================
|
|
279
|
+
// 5️⃣ NoB COUNT
|
|
280
|
+
// ===============================
|
|
281
|
+
let nobCount = row[2];
|
|
282
|
+
if (nobCount === null || nobCount === undefined || nobCount === '') {
|
|
283
|
+
throw new Error(`Missing NoB count at row ${rowIndex + 2}`);
|
|
284
|
+
}
|
|
285
|
+
nobCount = Number(nobCount);
|
|
286
|
+
if (isNaN(nobCount)) {
|
|
287
|
+
throw new Error(`Invalid NoB count at row ${rowIndex + 2}`);
|
|
288
|
+
}
|
|
289
|
+
// ===============================
|
|
290
|
+
// 6️⃣ ZONE WISE NoB
|
|
291
|
+
// ===============================
|
|
292
|
+
const zonewisenob = headers.slice(3)
|
|
293
|
+
.map((zoneName, index) => {
|
|
294
|
+
const raw = row[index + 3];
|
|
295
|
+
if (raw === null ||
|
|
296
|
+
raw === undefined ||
|
|
297
|
+
(typeof raw === 'string' && raw.trim() === '')) {
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
const value = Number(raw);
|
|
301
|
+
if (isNaN(value)) {
|
|
302
|
+
throw new Error(`Invalid Zone NoB at row ${rowIndex + 2} (${zoneName})`);
|
|
303
|
+
}
|
|
202
304
|
return {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
nobCount: Number(obj["NOBCount"]),
|
|
305
|
+
zoneName,
|
|
306
|
+
nobCount: value
|
|
206
307
|
};
|
|
207
308
|
})
|
|
208
|
-
.filter(
|
|
209
|
-
|
|
309
|
+
.filter(Boolean);
|
|
310
|
+
const zoneTotal = zonewisenob.reduce((sum, z) => sum + z.nobCount, 0);
|
|
311
|
+
if (zoneTotal > nobCount) {
|
|
312
|
+
throw new Error(`Zone-wise NoB cannot exceed overall NoB (Row ${rowIndex + 2})`);
|
|
313
|
+
}
|
|
314
|
+
// ===============================
|
|
315
|
+
// 7️⃣ FINAL OBJECT
|
|
316
|
+
// ===============================
|
|
317
|
+
return {
|
|
318
|
+
storeCode: storeId,
|
|
319
|
+
nobDate: this.datePipe.transform(nobDate, 'yyyy-MM-dd'),
|
|
320
|
+
nobCount,
|
|
321
|
+
zonewisenob
|
|
322
|
+
};
|
|
323
|
+
})
|
|
324
|
+
.filter(Boolean);
|
|
325
|
+
if (!bills.length) {
|
|
326
|
+
this.ts.getErrorToast('No valid rows found in Excel');
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
// ===============================
|
|
330
|
+
// 8️⃣ FINAL PAYLOAD
|
|
331
|
+
// ===============================
|
|
332
|
+
this.convertedData = {
|
|
333
|
+
clientId: this.clientId,
|
|
334
|
+
bills
|
|
210
335
|
};
|
|
211
|
-
this.
|
|
212
|
-
this.
|
|
336
|
+
this.dataTableShow = true;
|
|
337
|
+
this.ts.getSuccessToast('File uploaded successfully');
|
|
338
|
+
}
|
|
339
|
+
catch (err) {
|
|
340
|
+
console.error(err);
|
|
341
|
+
this.ts.getErrorToast(err.message || 'Invalid Excel file');
|
|
213
342
|
}
|
|
214
|
-
|
|
215
|
-
this.
|
|
343
|
+
finally {
|
|
344
|
+
this.resetFileInput();
|
|
345
|
+
this.cd.detectChanges();
|
|
216
346
|
}
|
|
217
|
-
this.resetFileInput();
|
|
218
347
|
};
|
|
219
348
|
reader.readAsBinaryString(file);
|
|
220
349
|
}
|
|
@@ -246,16 +375,74 @@ export class AddNobComponent {
|
|
|
246
375
|
},
|
|
247
376
|
});
|
|
248
377
|
}
|
|
249
|
-
|
|
250
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AddNobComponent, selector: "lib-add-nob", inputs: { type: "type" }, providers: [DatePipe], viewQueries: [{ propertyName: "inputFile", first: true, predicate: ["inputFile"], descendants: true }], ngImport: i0, template: "<div class=\"card pt-0 pb-3 scroll\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5 d-flex\">\r\n <div *ngIf=\"type ==='add'\" class=\"symbol symbol-75px symbol-circle\">\r\n <img alt=\"Pic\" src=\"./assets/tango/Icons/add-store-icon.svg\">\r\n </div>\r\n <div *ngIf=\"type ==='reupload'\" class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M37 31V35C37 35.5304 36.7893 36.0391 36.4142 36.4142C36.0391 36.7893 35.5304 37 35 37H21C20.4696 37 19.9609 36.7893 19.5858 36.4142C19.2107 36.0391 19 35.5304 19 35V31M33 24L28 19M28 19L23 24M28 19V31\" stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n </div>\r\n <div class=\"row w-100\">\r\n <div *ngIf=\"type ==='add'\" class=\"col-md-12\">\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Add Single NoB</a>\r\n </div>\r\n <div *ngIf=\"type ==='reupload'\" class=\"col-md-12\">\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Upload NoB for</a>\r\n </div>\r\n<div *ngIf=\"type ==='reupload'\" class=\"d-flex align-items-center mt-5\">\r\n <div class=\"form-check w-50 cursor-pointer ps-5\" (click)=\"nobStore('single')\" [ngClass]=\"typeNOB ==='single' ? 'form-check-inline':'form-check-inline-none'\" >\r\n <svg *ngIf=\"typeNOB ==='single'\" style=\"margin-top: -5px !important;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#EAF8FF\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#00A3FF\"/>\r\n <circle cx=\"8\" cy=\"8\" r=\"3\" fill=\"#00A3FF\"/>\r\n </svg>\r\n\r\n <svg *ngIf=\"typeNOB !=='single'\" style=\"margin-top: -5px !important;\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"white\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#D0D5DD\"/>\r\n </svg>\r\n <!-- <input class=\"form-check-input ms-10\" type=\"radio\" name=\"inlineRadioOptions\" id=\"inlineRadio1\" value=\"option1\"> -->\r\n <span class=\"ms-3 pt-12\" [ngClass]=\"typeNOB ==='single' ? 'form-text-primary ':'form-defult'\">Single Store</span>\r\n </div>\r\n <div class=\"form-check w-50 cursor-pointer ps-5\" (click)=\"nobStore('multiple')\" [ngClass]=\"typeNOB ==='multiple' ? 'form-check-inline':'form-check-inline-none'\">\r\n <svg *ngIf=\"typeNOB ==='multiple'\" style=\"margin-top: -5px !important;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#EAF8FF\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#00A3FF\"/>\r\n <circle cx=\"8\" cy=\"8\" r=\"3\" fill=\"#00A3FF\"/>\r\n </svg>\r\n\r\n <svg *ngIf=\"typeNOB !=='multiple'\" style=\"margin-top: -5px !important;\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"white\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#D0D5DD\"/>\r\n </svg>\r\n <span class=\"ms-3 pt-12\" [ngClass]=\"typeNOB ==='multiple' ? 'form-text-primary':'form-defult'\">Multiple Stores</span>\r\n \r\n </div>\r\n </div>\r\n <div *ngIf=\"typeNOB ==='single'\" class=\"w-100 h-0px scroll\">\r\n <div class=\"mt-5\">\r\n <div class=\"row px-0 me-3\">\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name<span\r\n class=\"alert-required text-danger\"> *</span></label>\r\n <lib-custom-select [items]=\"storeList\" [multi]=\"false\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeName'\" (selected)=\"onNOBStoreSelect($event, 'storeName')\"\r\n [selectedValues]=\"[{ storeName: storeName }]\">\r\n </lib-custom-select>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"storeID\" class=\"form-label\">Store ID /<span *ngIf=\"type !=='add'\"> Store Code</span><span *ngIf=\"type ==='add'\"> Reference Code</span> <span\r\n class=\"alert-required text-danger\"> *</span></label>\r\n <lib-custom-select [items]=\"storeList\" [multi]=\"false\" [searchField]=\"'storeId'\"\r\n [idField]=\"'storeId'\" (selected)=\"onNOBStoreSelect($event, 'storeId')\"\r\n [selectedValues]=\"[{ storeId: storeId }]\">\r\n </lib-custom-select>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"Date\" class=\"form-label\">Select Date <span\r\n class=\"alert-required text-danger\">*</span></label>\r\n <input type=\"date\" class=\"form-control\" id=\"myDate\" [(ngModel)]=\"dateValue\"\r\n (change)=\"onDateChange($event)\" [max]=\"maxDate\">\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"count\" class=\"form-label\">NOB Count <span\r\n class=\"alert-required text-danger\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"nobCount\"\r\n (keypress)=\"omit_special_char($event)\">\r\n </div>\r\n <div class=\"d-flex mt-3 mb-10\" role=\"group\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button class=\"btn btn-primary w-100 ms-3\" id=\"alert-toast\" (click)=\"onSubmit()\"\r\n [disabled]=\"!dateValue || !nobCount || !storeId || !storeName\"><span *ngIf=\"type !=='add'\">Proceed</span><span *ngIf=\"type ==='add'\">Add</span></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"typeNOB ==='multiple'\" class=\"d-flex justify-content\">\r\n <div class=\"fw-bold text-gray-500 my-6\">\r\n <ul class=\"text-gray-400 fw-bold fs-6\">\r\n <li class=\"user-text\">Use the template to upload multiple NoB\u2019s at once.</li>\r\n <li class=\"user-text \">Download the template here - <a href=\"../../assets/files/nobUploadTemplate.xlsx\" download><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path d=\"M17.5 13V16.3333C17.5 16.7754 17.3244 17.1993 17.0118 17.5118C16.6993 17.8244 16.2754 18 15.8333 18H4.16667C3.72464 18 3.30072 17.8244 2.98816 17.5118C2.67559 17.1993 2.5 16.7754 2.5 16.3333V13M5.83333 8.83333L10 13M10 13L14.1667 8.83333M10 13V3\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2 text-download\">Download Template</span></a></li>\r\n <li class=\"user-text \">Add your data to the Template File</li>\r\n <li class=\"user-text\">Upload it below for processing</li>\r\n \r\n </ul>\r\n </div>\r\n </div>\r\n <div *ngIf=\"typeNOB ==='multiple'\"\r\n class=\"mt-3 ms-3 right-bar py-10 d-flex justify-content-center align-items-center flex-column\">\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal\"\r\n value=\"personal\" class=\"btn-check\" ng-reflect-name=\"accountType\"\r\n ng-reflect-form-control-name=\"accountType\" (change)=\"onUpload($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile />\r\n <label for=\"kt_create_account_form_account_type_personal\" class=\" w-50 p-4 mt-5\"><span\r\n class=\"fw-bold text-center w-100 fs-4\">\r\n<div class=\"d-flex justify-content-center align-items-center w-100\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#F2F4F7\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#F9FAFB\"\r\n stroke-width=\"6\" />\r\n <g clip-path=\"url(#clip0_4047_40566)\">\r\n <path\r\n d=\"M26.3333 26.3334L23 23M23 23L19.6666 26.3334M23 23V30.5M29.9916 28.325C30.8044 27.8819 31.4465 27.1808 31.8165 26.3322C32.1866 25.4837 32.2635 24.5361 32.0351 23.6389C31.8068 22.7418 31.2862 21.9463 30.5555 21.3779C29.8248 20.8095 28.9257 20.5006 28 20.5H26.95C26.6977 19.5244 26.2276 18.6186 25.5749 17.8509C24.9222 17.0831 24.104 16.4732 23.1817 16.0672C22.2594 15.6612 21.2571 15.4695 20.2501 15.5066C19.243 15.5437 18.2575 15.8086 17.3676 16.2814C16.4777 16.7542 15.7066 17.4226 15.1122 18.2363C14.5177 19.0501 14.1155 19.988 13.9358 20.9795C13.756 21.9711 13.8034 22.9905 14.0743 23.9611C14.3452 24.9317 14.8327 25.8282 15.5 26.5834\"\r\n stroke=\"#475467\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4047_40566\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(13 13)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"nodata-title\"><span class=\"click-upload cursor-pointer\">Click to\r\n upload </span>\r\n <!-- <span class=\"drag-drop\"> or drag and drop the template</span> -->\r\n </div>\r\n \r\n </span>\r\n </label>\r\n </div>\r\n\r\n <div *ngIf=\"typeNOB ==='multiple'\" class=\"d-flex mt-3 mb-10\" role=\"group\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button class=\"btn btn-primary w-100 ms-3\" id=\"alert-toast\" (click)=\"proceed()\"\r\n >Proceed</button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>", styles: [".scroll{overflow-y:auto;overflow-x:hidden}.title{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:600;line-height:28px}.sub-title{color:var(--Gray-500, #667085)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.teams-title{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:600!important;line-height:28px}.title-header{border-radius:6px!important;border-bottom:2px solid var(--Gray-200, #EAECF0)!important;background:#f2f4f7!important;box-shadow:0 4px 10px #0000000d!important;color:var(--Black, #101828)!important;font-size:20px!important;font-weight:600;line-height:30px;padding:8px 16px}input[type=checkbox]{width:18px!important;height:18px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0;padding-top:12px;padding-right:6px}.global-label{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:500;line-height:24px}.w-25{width:40%!important}td{color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important;line-height:24px}tr,.add-team{border-bottom:1px solid var(--Gray-200, #EAECF0)!important}input[disabled]{pointer-events:none;opacity:.5}input.form-control{margin-bottom:10px}.dropdown-menu{max-height:200px;overflow-y:auto}.dropdown-item{cursor:pointer}.btn-outline-primary{width:100%;text-align:left}.form-check-inline{border-radius:8px;border:1px solid var(--Primary-700, #009BF3);background:var(--Primary-25, #F6FCFF);padding:16px}.form-check-label{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:600;line-height:24px}.form-check-inline-none{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);padding:16px;margin-right:1rem}.right-bar{border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--White, #FFF);padding:16px 24px!important}.drag-drop{color:var(--Gray-500, #667085)!important;font-size:14px!important;font-weight:400;line-height:20px}.click-upload{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;text-transform:capitalize}.user-text{color:var(--Gray-500, #344054)!important;font-size:14px!important;font-weight:400!important;line-height:28px;list-style:decimal!important}.form-text-primary{color:var(--Primary-700, #009BF3)!important;font-size:16px!important;font-weight:600;line-height:24px}.form-defult{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:600;line-height:24px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.CustomSelectComponent, selector: "lib-custom-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }] });
|
|
378
|
+
isEnabled = false;
|
|
379
|
+
zoneList = [];
|
|
380
|
+
onCheckboxChange(event) {
|
|
381
|
+
this.isEnabled = event.target.checked;
|
|
382
|
+
if (this.isEnabled) {
|
|
383
|
+
this.getZoneList(this.storeId);
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
this.zoneList = [];
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
getZoneList(store) {
|
|
390
|
+
this.service.getZoneList({ "storeId": [store] })?.pipe(takeUntil(this.destroy$))
|
|
391
|
+
.subscribe({
|
|
392
|
+
next: (res) => {
|
|
393
|
+
if (res && res.code === 200) {
|
|
394
|
+
this.zoneList = res?.data;
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
this.zoneList = [];
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
error: (err) => {
|
|
401
|
+
this.zoneList = [];
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
zonewisenob = [];
|
|
406
|
+
onNobChange() {
|
|
407
|
+
this.zonewisenob = this.zoneList.map((zone) => ({
|
|
408
|
+
zoneName: zone.tagName ? zone.tagName : zone.zoneName,
|
|
409
|
+
nobCount: Number(zone.nobCount) || 0
|
|
410
|
+
}));
|
|
411
|
+
console.log('Updated zonewisenob:', this.zonewisenob);
|
|
412
|
+
}
|
|
413
|
+
download() {
|
|
414
|
+
this.service
|
|
415
|
+
.getZoneTemplate({ clientId: this.clientId || '' })
|
|
416
|
+
.pipe(takeUntil(this.destroy$))
|
|
417
|
+
.subscribe({
|
|
418
|
+
next: (res) => {
|
|
419
|
+
if (res) {
|
|
420
|
+
this.excelService.saveAsExcelFile(res, 'NOB Upload Template');
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
this.ts.getErrorToast('File is empty');
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
error: (err) => {
|
|
427
|
+
const errorMsg = err.error?.error ||
|
|
428
|
+
err.error?.message || err.message || err.error;
|
|
429
|
+
'An error occurred while downloading file';
|
|
430
|
+
this.ts.getErrorToast(errorMsg);
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddNobComponent, deps: [{ token: i1.FormBuilder }, { token: i2.TrafficService }, { token: i3.ExcelService }, { token: i4.NgbActiveModal }, { token: i5.ToastService }, { token: i0.ChangeDetectorRef }, { token: i6.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
435
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AddNobComponent, selector: "lib-add-nob", inputs: { type: "type", viewData: "viewData" }, providers: [DatePipe], viewQueries: [{ propertyName: "inputFile", first: true, predicate: ["inputFile"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"type !=='editView' && type !== 'view'\" class=\"card pt-0 pb-3 scroll\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5 d-flex\">\r\n <div *ngIf=\"type ==='add'\" class=\"symbol symbol-75px symbol-circle\">\r\n <img alt=\"Pic\" src=\"./assets/tango/Icons/add-store-icon.svg\">\r\n </div>\r\n <div *ngIf=\"type ==='reupload'\" class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M37 31V35C37 35.5304 36.7893 36.0391 36.4142 36.4142C36.0391 36.7893 35.5304 37 35 37H21C20.4696 37 19.9609 36.7893 19.5858 36.4142C19.2107 36.0391 19 35.5304 19 35V31M33 24L28 19M28 19L23 24M28 19V31\" stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n </div>\r\n <div class=\"row w-100\">\r\n <div *ngIf=\"type ==='add'\" class=\"col-md-12\">\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Add Single NoB</a>\r\n </div>\r\n <div *ngIf=\"type ==='reupload'\" class=\"col-md-12\">\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Upload NoB for</a>\r\n </div>\r\n<div *ngIf=\"type ==='reupload'\" class=\"d-flex align-items-center mt-5\">\r\n <div class=\"form-check w-50 cursor-pointer ps-5\" (click)=\"nobStore('single')\" [ngClass]=\"typeNOB ==='single' ? 'form-check-inline':'form-check-inline-none'\" >\r\n <svg *ngIf=\"typeNOB ==='single'\" style=\"margin-top: -5px !important;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#EAF8FF\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#00A3FF\"/>\r\n <circle cx=\"8\" cy=\"8\" r=\"3\" fill=\"#00A3FF\"/>\r\n </svg>\r\n\r\n <svg *ngIf=\"typeNOB !=='single'\" style=\"margin-top: -5px !important;\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"white\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#D0D5DD\"/>\r\n </svg>\r\n <!-- <input class=\"form-check-input ms-10\" type=\"radio\" name=\"inlineRadioOptions\" id=\"inlineRadio1\" value=\"option1\"> -->\r\n <span class=\"ms-3 pt-12\" [ngClass]=\"typeNOB ==='single' ? 'form-text-primary ':'form-defult'\">Single Store</span>\r\n </div>\r\n <div class=\"form-check w-50 cursor-pointer ps-5\" (click)=\"nobStore('multiple')\" [ngClass]=\"typeNOB ==='multiple' ? 'form-check-inline':'form-check-inline-none'\">\r\n <svg *ngIf=\"typeNOB ==='multiple'\" style=\"margin-top: -5px !important;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#EAF8FF\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#00A3FF\"/>\r\n <circle cx=\"8\" cy=\"8\" r=\"3\" fill=\"#00A3FF\"/>\r\n </svg>\r\n\r\n <svg *ngIf=\"typeNOB !=='multiple'\" style=\"margin-top: -5px !important;\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"white\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#D0D5DD\"/>\r\n </svg>\r\n <span class=\"ms-3 pt-12\" [ngClass]=\"typeNOB ==='multiple' ? 'form-text-primary':'form-defult'\">Multiple Stores</span>\r\n \r\n </div>\r\n </div>\r\n <div *ngIf=\"typeNOB ==='single'\" class=\"w-100 h-0px scroll\">\r\n <div class=\"mt-5\">\r\n <div class=\"row px-0 me-3\">\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name<span\r\n class=\"alert-required text-danger\"> *</span></label>\r\n <lib-custom-select [items]=\"storeList\" [multi]=\"false\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeName'\" (selected)=\"onNOBStoreSelect($event, 'storeName')\"\r\n [selectedValues]=\"[{ storeName: storeName }]\">\r\n </lib-custom-select>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"storeID\" class=\"form-label\">Store ID /<span *ngIf=\"type !=='add'\"> Store Code</span><span *ngIf=\"type ==='add'\"> Reference Code</span> <span\r\n class=\"alert-required text-danger\"> *</span></label>\r\n <lib-custom-select [items]=\"storeList\" [multi]=\"false\" [searchField]=\"'storeId'\"\r\n [idField]=\"'storeId'\" (selected)=\"onNOBStoreSelect($event, 'storeId')\"\r\n [selectedValues]=\"[{ storeId: storeId }]\">\r\n </lib-custom-select>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"Date\" class=\"form-label\">Select Date <span\r\n class=\"alert-required text-danger\">*</span></label>\r\n <input type=\"date\" class=\"form-control\" id=\"myDate\" [(ngModel)]=\"dateValue\"\r\n (change)=\"onDateChange($event)\" [max]=\"maxDate\">\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"count\" class=\"form-label\">NOB Count <span\r\n class=\"alert-required text-danger\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"nobCount\"\r\n (keypress)=\"omit_special_char($event)\">\r\n </div>\r\n <div *ngIf=\"zoneShow\" class=\"col-12\">\r\n <div *ngIf=\"clientData?.isZonewiseNOB\" class=\"toggle-wrapper\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" [(ngModel)]=\"isEnabled\" (change)=\"onCheckboxChange($event)\" />\r\n <span class=\"slider\"></span>\r\n </label>\r\n\r\n <span class=\"toggle-label\">\r\n Add Zone-wise NoB Count\r\n </span>\r\n</div>\r\n\r\n </div>\r\n <div *ngIf=\"isEnabled\" class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap mt-5\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">Zone Name</th>\r\n <th scope=\"col\">NoB Count</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let zone of zoneList\">\r\n <td class=\"py-3 mt-10\">{{zone.tagName}}</td>\r\n <td class=\"py-2\"><input type=\"text\" class=\"form-control form-control-sm mb-0 py-0\" [(ngModel)]=\"zone.nobCount\" (ngModelChange)=\"onNobChange()\" \r\n (keypress)=\"omit_special_char($event)\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"erroShow\" class=\"text-danger mt-2\"><span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n<g clip-path=\"url(#clip0_15055_156438)\">\r\n<path d=\"M9 6V9M9 12H9.0075M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\" stroke=\"#B42318\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</g>\r\n<defs>\r\n<clipPath id=\"clip0_15055_156438\">\r\n<rect width=\"18\" height=\"18\" fill=\"white\"/>\r\n</clipPath>\r\n</defs>\r\n</svg></span>{{ erroShow }}</div>\r\n\r\n <div class=\"d-flex mt-3 mb-10\" role=\"group\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button\r\n class=\"btn btn-primary w-100 ms-3\"\r\n id=\"alert-toast\"\r\n (click)=\"onSubmit()\"\r\n [disabled]=\"\r\n !dateValue ||\r\n !nobCount ||\r\n !storeId ||\r\n !storeName ||\r\n isSubmitting\r\n \"\r\n>\r\n <span *ngIf=\"!isSubmitting && type !== 'add'\">Proceed</span>\r\n <span *ngIf=\"!isSubmitting && type === 'add'\">Add</span>\r\n <span *ngIf=\"isSubmitting\">Please wait...</span>\r\n</button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"typeNOB ==='multiple'\" class=\"d-flex justify-content\">\r\n <div class=\"fw-bold text-gray-500 my-6\">\r\n <ul class=\"text-gray-400 fw-bold fs-6\">\r\n <li class=\"user-text\">Use the template to upload multiple NoB\u2019s at once.</li>\r\n <li class=\"user-text \">Download the template here - <a *ngIf=\"!clientData?.isZonewiseNOB\" href=\"../../assets/files/nobUploadTemplate.xlsx\" download><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path d=\"M17.5 13V16.3333C17.5 16.7754 17.3244 17.1993 17.0118 17.5118C16.6993 17.8244 16.2754 18 15.8333 18H4.16667C3.72464 18 3.30072 17.8244 2.98816 17.5118C2.67559 17.1993 2.5 16.7754 2.5 16.3333V13M5.83333 8.83333L10 13M10 13L14.1667 8.83333M10 13V3\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2 text-download text-primary\">Download Template</span></a> <span *ngIf=\"clientData?.isZonewiseNOB\" class=\" text-active-primary\" (click)=\"download()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path d=\"M17.5 13V16.3333C17.5 16.7754 17.3244 17.1993 17.0118 17.5118C16.6993 17.8244 16.2754 18 15.8333 18H4.16667C3.72464 18 3.30072 17.8244 2.98816 17.5118C2.67559 17.1993 2.5 16.7754 2.5 16.3333V13M5.83333 8.83333L10 13M10 13L14.1667 8.83333M10 13V3\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2 text-download text-primary cursor-pointer\">Download Template</span></span></li>\r\n <li class=\"user-text \">Add your data to the Template File</li>\r\n <li class=\"user-text\">Upload it below for processing</li>\r\n \r\n </ul>\r\n </div>\r\n </div>\r\n <div *ngIf=\"typeNOB ==='multiple'\"\r\n class=\"mt-3 ms-3 right-bar py-10 d-flex justify-content-center align-items-center flex-column\">\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal\"\r\n value=\"personal\" class=\"btn-check\" ng-reflect-name=\"accountType\"\r\n ng-reflect-form-control-name=\"accountType\" (change)=\"onUpload($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile />\r\n <label for=\"kt_create_account_form_account_type_personal\" class=\" w-50 p-4 mt-5\"><span\r\n class=\"fw-bold text-center w-100 fs-4\">\r\n<div class=\"d-flex justify-content-center align-items-center w-100\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#F2F4F7\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#F9FAFB\"\r\n stroke-width=\"6\" />\r\n <g clip-path=\"url(#clip0_4047_40566)\">\r\n <path\r\n d=\"M26.3333 26.3334L23 23M23 23L19.6666 26.3334M23 23V30.5M29.9916 28.325C30.8044 27.8819 31.4465 27.1808 31.8165 26.3322C32.1866 25.4837 32.2635 24.5361 32.0351 23.6389C31.8068 22.7418 31.2862 21.9463 30.5555 21.3779C29.8248 20.8095 28.9257 20.5006 28 20.5H26.95C26.6977 19.5244 26.2276 18.6186 25.5749 17.8509C24.9222 17.0831 24.104 16.4732 23.1817 16.0672C22.2594 15.6612 21.2571 15.4695 20.2501 15.5066C19.243 15.5437 18.2575 15.8086 17.3676 16.2814C16.4777 16.7542 15.7066 17.4226 15.1122 18.2363C14.5177 19.0501 14.1155 19.988 13.9358 20.9795C13.756 21.9711 13.8034 22.9905 14.0743 23.9611C14.3452 24.9317 14.8327 25.8282 15.5 26.5834\"\r\n stroke=\"#475467\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4047_40566\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(13 13)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"nodata-title\"><span class=\"click-upload cursor-pointer\">Click to\r\n upload </span>\r\n <!-- <span class=\"drag-drop\"> or drag and drop the template</span> -->\r\n </div>\r\n \r\n </span>\r\n </label>\r\n </div>\r\n\r\n <div *ngIf=\"typeNOB ==='multiple'\" class=\"d-flex mt-3 mb-10\" role=\"group\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button class=\"btn btn-primary w-100 ms-3\" id=\"alert-toast\" (click)=\"proceed()\"\r\n >Proceed</button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n<div *ngIf=\"type ==='editView' || type === 'view'\" class=\"card pt-0 pb-3 \">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n \r\n <div class=\"row w-100 mt-5\">\r\n \r\n <div class=\"col-md-6\">\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Zone-wise NoB\r\n Count</a>\r\n </div>\r\n <div *ngIf=\"type === 'view'\" class=\"col-md-6 text-end\">\r\n <span class=\"cursor-pointer\" (click)=\"cancel()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n<path d=\"M13 1L1 13M1 1L13 13\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg></span>\r\n </div>\r\n \r\n <div *ngIf=\"zoneList?.length\" class=\"table-responsive max-h-500\">\r\n <table class=\"table bottom-border text-nowrap mt-5\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">Zone Name</th>\r\n <th scope=\"col\">NoB Count</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let zone of zoneList;let i = index\">\r\n <td class=\"py-3 mt-10\">{{zone.zoneName}}</td>\r\n <td class=\"py-2\"><span *ngIf=\"type === 'view' || !isEditEnabled\">\r\n {{ zone.nobCount }}\r\n </span>\r\n\r\n <!-- EDIT MODE -->\r\n <input *ngIf=\"type === 'editView' && isEditEnabled\" type=\"text\" class=\"form-control form-control-sm\"\r\n [(ngModel)]=\"zone.nobCount\" (ngModelChange)=\"onNobChange()\"\r\n (keypress)=\"omit_special_char($event)\" />\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"!zoneList?.length\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata-table\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this Zone-wise NoB count</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"erroShow\" class=\"text-danger mt-2\"><span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n<g clip-path=\"url(#clip0_15055_156438)\">\r\n<path d=\"M9 6V9M9 12H9.0075M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\" stroke=\"#B42318\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</g>\r\n<defs>\r\n<clipPath id=\"clip0_15055_156438\">\r\n<rect width=\"18\" height=\"18\" fill=\"white\"/>\r\n</clipPath>\r\n</defs>\r\n</svg></span>{{ erroShow }}</div>\r\n\r\n <div *ngIf=\"type ==='editView' && isEditEnabled\" class=\"d-flex mt-3 mb-10\" role=\"group\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancelEdit()\">Cancel</button>\r\n <button class=\"btn btn-primary w-100 ms-3\" id=\"alert-toast\" (click)=\"onSubmit()\"\r\n [disabled]=\"!dateValue || !nobCount || !storeId || !storeName\"><span\r\n *ngIf=\"type !=='add'\">Save</span><span *ngIf=\"type ==='add'\">Add</span></button>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n</div>", styles: [".scroll{overflow-y:auto;overflow-x:hidden}.title{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:600;line-height:28px}.sub-title{color:var(--Gray-500, #667085)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.teams-title{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:600!important;line-height:28px}.title-header{border-radius:6px!important;border-bottom:2px solid var(--Gray-200, #EAECF0)!important;background:#f2f4f7!important;box-shadow:0 4px 10px #0000000d!important;color:var(--Black, #101828)!important;font-size:20px!important;font-weight:600;line-height:30px;padding:8px 16px}input[type=checkbox]{width:18px!important;height:18px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0;padding-top:12px;padding-right:6px}.global-label{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:500;line-height:24px}.w-25{width:40%!important}td{color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important;line-height:24px}tr,.add-team{border-bottom:1px solid var(--Gray-200, #EAECF0)!important}input[disabled]{pointer-events:none;opacity:.5}input.form-control{margin-bottom:10px}.dropdown-menu{max-height:200px;overflow-y:auto}.dropdown-item{cursor:pointer}.btn-outline-primary{width:100%;text-align:left}.form-check-inline{border-radius:8px;border:1px solid var(--Primary-700, #009BF3);background:var(--Primary-25, #F6FCFF);padding:16px}.form-check-label{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:600;line-height:24px}.form-check-inline-none{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);padding:16px;margin-right:1rem}.right-bar{border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--White, #FFF);padding:16px 24px!important}.drag-drop{color:var(--Gray-500, #667085)!important;font-size:14px!important;font-weight:400;line-height:20px}.click-upload{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;text-transform:capitalize}.user-text{color:var(--Gray-500, #344054)!important;font-size:14px!important;font-weight:400!important;line-height:28px;list-style:decimal!important}.form-text-primary{color:var(--Primary-700, #009BF3)!important;font-size:16px!important;font-weight:600;line-height:24px}.form-defult{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:600;line-height:24px}table td{height:24px!important;align-items:center}.toggle-wrapper{display:flex;align-items:center;gap:12px}.switch{position:relative;display:inline-block;width:46px;height:24px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#f2f4f7;transition:.3s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;transition:.3s;border-radius:50%}.switch input:checked+.slider{background-color:#0d6efd}.switch input:checked+.slider:before{transform:translate(22px)}.text-danger{color:#b42318!important}.max-h-500{max-height:500px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.CustomSelectComponent, selector: "lib-custom-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }] });
|
|
251
436
|
}
|
|
252
437
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddNobComponent, decorators: [{
|
|
253
438
|
type: Component,
|
|
254
|
-
args: [{ selector: 'lib-add-nob', providers: [DatePipe], template: "<div class=\"card pt-0 pb-3 scroll\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5 d-flex\">\r\n <div *ngIf=\"type ==='add'\" class=\"symbol symbol-75px symbol-circle\">\r\n <img alt=\"Pic\" src=\"./assets/tango/Icons/add-store-icon.svg\">\r\n </div>\r\n <div *ngIf=\"type ==='reupload'\" class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M37 31V35C37 35.5304 36.7893 36.0391 36.4142 36.4142C36.0391 36.7893 35.5304 37 35 37H21C20.4696 37 19.9609 36.7893 19.5858 36.4142C19.2107 36.0391 19 35.5304 19 35V31M33 24L28 19M28 19L23 24M28 19V31\" stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n </div>\r\n <div class=\"row w-100\">\r\n <div *ngIf=\"type ==='add'\" class=\"col-md-12\">\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Add Single NoB</a>\r\n </div>\r\n <div *ngIf=\"type ==='reupload'\" class=\"col-md-12\">\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Upload NoB for</a>\r\n </div>\r\n<div *ngIf=\"type ==='reupload'\" class=\"d-flex align-items-center mt-5\">\r\n <div class=\"form-check w-50 cursor-pointer ps-5\" (click)=\"nobStore('single')\" [ngClass]=\"typeNOB ==='single' ? 'form-check-inline':'form-check-inline-none'\" >\r\n <svg *ngIf=\"typeNOB ==='single'\" style=\"margin-top: -5px !important;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#EAF8FF\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#00A3FF\"/>\r\n <circle cx=\"8\" cy=\"8\" r=\"3\" fill=\"#00A3FF\"/>\r\n </svg>\r\n\r\n <svg *ngIf=\"typeNOB !=='single'\" style=\"margin-top: -5px !important;\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"white\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#D0D5DD\"/>\r\n </svg>\r\n <!-- <input class=\"form-check-input ms-10\" type=\"radio\" name=\"inlineRadioOptions\" id=\"inlineRadio1\" value=\"option1\"> -->\r\n <span class=\"ms-3 pt-12\" [ngClass]=\"typeNOB ==='single' ? 'form-text-primary ':'form-defult'\">Single Store</span>\r\n </div>\r\n <div class=\"form-check w-50 cursor-pointer ps-5\" (click)=\"nobStore('multiple')\" [ngClass]=\"typeNOB ==='multiple' ? 'form-check-inline':'form-check-inline-none'\">\r\n <svg *ngIf=\"typeNOB ==='multiple'\" style=\"margin-top: -5px !important;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#EAF8FF\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#00A3FF\"/>\r\n <circle cx=\"8\" cy=\"8\" r=\"3\" fill=\"#00A3FF\"/>\r\n </svg>\r\n\r\n <svg *ngIf=\"typeNOB !=='multiple'\" style=\"margin-top: -5px !important;\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"white\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#D0D5DD\"/>\r\n </svg>\r\n <span class=\"ms-3 pt-12\" [ngClass]=\"typeNOB ==='multiple' ? 'form-text-primary':'form-defult'\">Multiple Stores</span>\r\n \r\n </div>\r\n </div>\r\n <div *ngIf=\"typeNOB ==='single'\" class=\"w-100 h-0px scroll\">\r\n <div class=\"mt-5\">\r\n <div class=\"row px-0 me-3\">\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name<span\r\n class=\"alert-required text-danger\"> *</span></label>\r\n <lib-custom-select [items]=\"storeList\" [multi]=\"false\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeName'\" (selected)=\"onNOBStoreSelect($event, 'storeName')\"\r\n [selectedValues]=\"[{ storeName: storeName }]\">\r\n </lib-custom-select>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"storeID\" class=\"form-label\">Store ID /<span *ngIf=\"type !=='add'\"> Store Code</span><span *ngIf=\"type ==='add'\"> Reference Code</span> <span\r\n class=\"alert-required text-danger\"> *</span></label>\r\n <lib-custom-select [items]=\"storeList\" [multi]=\"false\" [searchField]=\"'storeId'\"\r\n [idField]=\"'storeId'\" (selected)=\"onNOBStoreSelect($event, 'storeId')\"\r\n [selectedValues]=\"[{ storeId: storeId }]\">\r\n </lib-custom-select>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"Date\" class=\"form-label\">Select Date <span\r\n class=\"alert-required text-danger\">*</span></label>\r\n <input type=\"date\" class=\"form-control\" id=\"myDate\" [(ngModel)]=\"dateValue\"\r\n (change)=\"onDateChange($event)\" [max]=\"maxDate\">\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"count\" class=\"form-label\">NOB Count <span\r\n class=\"alert-required text-danger\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"nobCount\"\r\n (keypress)=\"omit_special_char($event)\">\r\n </div>\r\n <div class=\"d-flex mt-3 mb-10\" role=\"group\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button class=\"btn btn-primary w-100 ms-3\" id=\"alert-toast\" (click)=\"onSubmit()\"\r\n [disabled]=\"!dateValue || !nobCount || !storeId || !storeName\"><span *ngIf=\"type !=='add'\">Proceed</span><span *ngIf=\"type ==='add'\">Add</span></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"typeNOB ==='multiple'\" class=\"d-flex justify-content\">\r\n <div class=\"fw-bold text-gray-500 my-6\">\r\n <ul class=\"text-gray-400 fw-bold fs-6\">\r\n <li class=\"user-text\">Use the template to upload multiple NoB\u2019s at once.</li>\r\n <li class=\"user-text \">Download the template here - <a href=\"../../assets/files/nobUploadTemplate.xlsx\" download><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path d=\"M17.5 13V16.3333C17.5 16.7754 17.3244 17.1993 17.0118 17.5118C16.6993 17.8244 16.2754 18 15.8333 18H4.16667C3.72464 18 3.30072 17.8244 2.98816 17.5118C2.67559 17.1993 2.5 16.7754 2.5 16.3333V13M5.83333 8.83333L10 13M10 13L14.1667 8.83333M10 13V3\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2 text-download\">Download Template</span></a></li>\r\n <li class=\"user-text \">Add your data to the Template File</li>\r\n <li class=\"user-text\">Upload it below for processing</li>\r\n \r\n </ul>\r\n </div>\r\n </div>\r\n <div *ngIf=\"typeNOB ==='multiple'\"\r\n class=\"mt-3 ms-3 right-bar py-10 d-flex justify-content-center align-items-center flex-column\">\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal\"\r\n value=\"personal\" class=\"btn-check\" ng-reflect-name=\"accountType\"\r\n ng-reflect-form-control-name=\"accountType\" (change)=\"onUpload($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile />\r\n <label for=\"kt_create_account_form_account_type_personal\" class=\" w-50 p-4 mt-5\"><span\r\n class=\"fw-bold text-center w-100 fs-4\">\r\n<div class=\"d-flex justify-content-center align-items-center w-100\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#F2F4F7\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#F9FAFB\"\r\n stroke-width=\"6\" />\r\n <g clip-path=\"url(#clip0_4047_40566)\">\r\n <path\r\n d=\"M26.3333 26.3334L23 23M23 23L19.6666 26.3334M23 23V30.5M29.9916 28.325C30.8044 27.8819 31.4465 27.1808 31.8165 26.3322C32.1866 25.4837 32.2635 24.5361 32.0351 23.6389C31.8068 22.7418 31.2862 21.9463 30.5555 21.3779C29.8248 20.8095 28.9257 20.5006 28 20.5H26.95C26.6977 19.5244 26.2276 18.6186 25.5749 17.8509C24.9222 17.0831 24.104 16.4732 23.1817 16.0672C22.2594 15.6612 21.2571 15.4695 20.2501 15.5066C19.243 15.5437 18.2575 15.8086 17.3676 16.2814C16.4777 16.7542 15.7066 17.4226 15.1122 18.2363C14.5177 19.0501 14.1155 19.988 13.9358 20.9795C13.756 21.9711 13.8034 22.9905 14.0743 23.9611C14.3452 24.9317 14.8327 25.8282 15.5 26.5834\"\r\n stroke=\"#475467\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4047_40566\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(13 13)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"nodata-title\"><span class=\"click-upload cursor-pointer\">Click to\r\n upload </span>\r\n <!-- <span class=\"drag-drop\"> or drag and drop the template</span> -->\r\n </div>\r\n \r\n </span>\r\n </label>\r\n </div>\r\n\r\n <div *ngIf=\"typeNOB ==='multiple'\" class=\"d-flex mt-3 mb-10\" role=\"group\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button class=\"btn btn-primary w-100 ms-3\" id=\"alert-toast\" (click)=\"proceed()\"\r\n >Proceed</button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>", styles: [".scroll{overflow-y:auto;overflow-x:hidden}.title{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:600;line-height:28px}.sub-title{color:var(--Gray-500, #667085)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.teams-title{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:600!important;line-height:28px}.title-header{border-radius:6px!important;border-bottom:2px solid var(--Gray-200, #EAECF0)!important;background:#f2f4f7!important;box-shadow:0 4px 10px #0000000d!important;color:var(--Black, #101828)!important;font-size:20px!important;font-weight:600;line-height:30px;padding:8px 16px}input[type=checkbox]{width:18px!important;height:18px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0;padding-top:12px;padding-right:6px}.global-label{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:500;line-height:24px}.w-25{width:40%!important}td{color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important;line-height:24px}tr,.add-team{border-bottom:1px solid var(--Gray-200, #EAECF0)!important}input[disabled]{pointer-events:none;opacity:.5}input.form-control{margin-bottom:10px}.dropdown-menu{max-height:200px;overflow-y:auto}.dropdown-item{cursor:pointer}.btn-outline-primary{width:100%;text-align:left}.form-check-inline{border-radius:8px;border:1px solid var(--Primary-700, #009BF3);background:var(--Primary-25, #F6FCFF);padding:16px}.form-check-label{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:600;line-height:24px}.form-check-inline-none{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);padding:16px;margin-right:1rem}.right-bar{border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--White, #FFF);padding:16px 24px!important}.drag-drop{color:var(--Gray-500, #667085)!important;font-size:14px!important;font-weight:400;line-height:20px}.click-upload{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;text-transform:capitalize}.user-text{color:var(--Gray-500, #344054)!important;font-size:14px!important;font-weight:400!important;line-height:28px;list-style:decimal!important}.form-text-primary{color:var(--Primary-700, #009BF3)!important;font-size:16px!important;font-weight:600;line-height:24px}.form-defult{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:600;line-height:24px}\n"] }]
|
|
255
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.TrafficService }, { type: i3.
|
|
439
|
+
args: [{ selector: 'lib-add-nob', providers: [DatePipe], template: "<div *ngIf=\"type !=='editView' && type !== 'view'\" class=\"card pt-0 pb-3 scroll\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5 d-flex\">\r\n <div *ngIf=\"type ==='add'\" class=\"symbol symbol-75px symbol-circle\">\r\n <img alt=\"Pic\" src=\"./assets/tango/Icons/add-store-icon.svg\">\r\n </div>\r\n <div *ngIf=\"type ==='reupload'\" class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\"/>\r\n <path d=\"M37 31V35C37 35.5304 36.7893 36.0391 36.4142 36.4142C36.0391 36.7893 35.5304 37 35 37H21C20.4696 37 19.9609 36.7893 19.5858 36.4142C19.2107 36.0391 19 35.5304 19 35V31M33 24L28 19M28 19L23 24M28 19V31\" stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n </div>\r\n <div class=\"row w-100\">\r\n <div *ngIf=\"type ==='add'\" class=\"col-md-12\">\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Add Single NoB</a>\r\n </div>\r\n <div *ngIf=\"type ==='reupload'\" class=\"col-md-12\">\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Upload NoB for</a>\r\n </div>\r\n<div *ngIf=\"type ==='reupload'\" class=\"d-flex align-items-center mt-5\">\r\n <div class=\"form-check w-50 cursor-pointer ps-5\" (click)=\"nobStore('single')\" [ngClass]=\"typeNOB ==='single' ? 'form-check-inline':'form-check-inline-none'\" >\r\n <svg *ngIf=\"typeNOB ==='single'\" style=\"margin-top: -5px !important;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#EAF8FF\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#00A3FF\"/>\r\n <circle cx=\"8\" cy=\"8\" r=\"3\" fill=\"#00A3FF\"/>\r\n </svg>\r\n\r\n <svg *ngIf=\"typeNOB !=='single'\" style=\"margin-top: -5px !important;\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"white\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#D0D5DD\"/>\r\n </svg>\r\n <!-- <input class=\"form-check-input ms-10\" type=\"radio\" name=\"inlineRadioOptions\" id=\"inlineRadio1\" value=\"option1\"> -->\r\n <span class=\"ms-3 pt-12\" [ngClass]=\"typeNOB ==='single' ? 'form-text-primary ':'form-defult'\">Single Store</span>\r\n </div>\r\n <div class=\"form-check w-50 cursor-pointer ps-5\" (click)=\"nobStore('multiple')\" [ngClass]=\"typeNOB ==='multiple' ? 'form-check-inline':'form-check-inline-none'\">\r\n <svg *ngIf=\"typeNOB ==='multiple'\" style=\"margin-top: -5px !important;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"#EAF8FF\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#00A3FF\"/>\r\n <circle cx=\"8\" cy=\"8\" r=\"3\" fill=\"#00A3FF\"/>\r\n </svg>\r\n\r\n <svg *ngIf=\"typeNOB !=='multiple'\" style=\"margin-top: -5px !important;\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" fill=\"white\"/>\r\n <rect x=\"0.5\" y=\"0.5\" width=\"15\" height=\"15\" rx=\"7.5\" stroke=\"#D0D5DD\"/>\r\n </svg>\r\n <span class=\"ms-3 pt-12\" [ngClass]=\"typeNOB ==='multiple' ? 'form-text-primary':'form-defult'\">Multiple Stores</span>\r\n \r\n </div>\r\n </div>\r\n <div *ngIf=\"typeNOB ==='single'\" class=\"w-100 h-0px scroll\">\r\n <div class=\"mt-5\">\r\n <div class=\"row px-0 me-3\">\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name<span\r\n class=\"alert-required text-danger\"> *</span></label>\r\n <lib-custom-select [items]=\"storeList\" [multi]=\"false\" [searchField]=\"'storeName'\"\r\n [idField]=\"'storeName'\" (selected)=\"onNOBStoreSelect($event, 'storeName')\"\r\n [selectedValues]=\"[{ storeName: storeName }]\">\r\n </lib-custom-select>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"storeID\" class=\"form-label\">Store ID /<span *ngIf=\"type !=='add'\"> Store Code</span><span *ngIf=\"type ==='add'\"> Reference Code</span> <span\r\n class=\"alert-required text-danger\"> *</span></label>\r\n <lib-custom-select [items]=\"storeList\" [multi]=\"false\" [searchField]=\"'storeId'\"\r\n [idField]=\"'storeId'\" (selected)=\"onNOBStoreSelect($event, 'storeId')\"\r\n [selectedValues]=\"[{ storeId: storeId }]\">\r\n </lib-custom-select>\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"Date\" class=\"form-label\">Select Date <span\r\n class=\"alert-required text-danger\">*</span></label>\r\n <input type=\"date\" class=\"form-control\" id=\"myDate\" [(ngModel)]=\"dateValue\"\r\n (change)=\"onDateChange($event)\" [max]=\"maxDate\">\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-7\">\r\n <label for=\"count\" class=\"form-label\">NOB Count <span\r\n class=\"alert-required text-danger\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"nobCount\"\r\n (keypress)=\"omit_special_char($event)\">\r\n </div>\r\n <div *ngIf=\"zoneShow\" class=\"col-12\">\r\n <div *ngIf=\"clientData?.isZonewiseNOB\" class=\"toggle-wrapper\">\r\n <label class=\"switch\">\r\n <input type=\"checkbox\" [(ngModel)]=\"isEnabled\" (change)=\"onCheckboxChange($event)\" />\r\n <span class=\"slider\"></span>\r\n </label>\r\n\r\n <span class=\"toggle-label\">\r\n Add Zone-wise NoB Count\r\n </span>\r\n</div>\r\n\r\n </div>\r\n <div *ngIf=\"isEnabled\" class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap mt-5\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">Zone Name</th>\r\n <th scope=\"col\">NoB Count</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let zone of zoneList\">\r\n <td class=\"py-3 mt-10\">{{zone.tagName}}</td>\r\n <td class=\"py-2\"><input type=\"text\" class=\"form-control form-control-sm mb-0 py-0\" [(ngModel)]=\"zone.nobCount\" (ngModelChange)=\"onNobChange()\" \r\n (keypress)=\"omit_special_char($event)\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"erroShow\" class=\"text-danger mt-2\"><span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n<g clip-path=\"url(#clip0_15055_156438)\">\r\n<path d=\"M9 6V9M9 12H9.0075M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\" stroke=\"#B42318\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</g>\r\n<defs>\r\n<clipPath id=\"clip0_15055_156438\">\r\n<rect width=\"18\" height=\"18\" fill=\"white\"/>\r\n</clipPath>\r\n</defs>\r\n</svg></span>{{ erroShow }}</div>\r\n\r\n <div class=\"d-flex mt-3 mb-10\" role=\"group\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button\r\n class=\"btn btn-primary w-100 ms-3\"\r\n id=\"alert-toast\"\r\n (click)=\"onSubmit()\"\r\n [disabled]=\"\r\n !dateValue ||\r\n !nobCount ||\r\n !storeId ||\r\n !storeName ||\r\n isSubmitting\r\n \"\r\n>\r\n <span *ngIf=\"!isSubmitting && type !== 'add'\">Proceed</span>\r\n <span *ngIf=\"!isSubmitting && type === 'add'\">Add</span>\r\n <span *ngIf=\"isSubmitting\">Please wait...</span>\r\n</button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div *ngIf=\"typeNOB ==='multiple'\" class=\"d-flex justify-content\">\r\n <div class=\"fw-bold text-gray-500 my-6\">\r\n <ul class=\"text-gray-400 fw-bold fs-6\">\r\n <li class=\"user-text\">Use the template to upload multiple NoB\u2019s at once.</li>\r\n <li class=\"user-text \">Download the template here - <a *ngIf=\"!clientData?.isZonewiseNOB\" href=\"../../assets/files/nobUploadTemplate.xlsx\" download><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path d=\"M17.5 13V16.3333C17.5 16.7754 17.3244 17.1993 17.0118 17.5118C16.6993 17.8244 16.2754 18 15.8333 18H4.16667C3.72464 18 3.30072 17.8244 2.98816 17.5118C2.67559 17.1993 2.5 16.7754 2.5 16.3333V13M5.83333 8.83333L10 13M10 13L14.1667 8.83333M10 13V3\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2 text-download text-primary\">Download Template</span></a> <span *ngIf=\"clientData?.isZonewiseNOB\" class=\" text-active-primary\" (click)=\"download()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path d=\"M17.5 13V16.3333C17.5 16.7754 17.3244 17.1993 17.0118 17.5118C16.6993 17.8244 16.2754 18 15.8333 18H4.16667C3.72464 18 3.30072 17.8244 2.98816 17.5118C2.67559 17.1993 2.5 16.7754 2.5 16.3333V13M5.83333 8.83333L10 13M10 13L14.1667 8.83333M10 13V3\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"ms-2 text-download text-primary cursor-pointer\">Download Template</span></span></li>\r\n <li class=\"user-text \">Add your data to the Template File</li>\r\n <li class=\"user-text\">Upload it below for processing</li>\r\n \r\n </ul>\r\n </div>\r\n </div>\r\n <div *ngIf=\"typeNOB ==='multiple'\"\r\n class=\"mt-3 ms-3 right-bar py-10 d-flex justify-content-center align-items-center flex-column\">\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal\"\r\n value=\"personal\" class=\"btn-check\" ng-reflect-name=\"accountType\"\r\n ng-reflect-form-control-name=\"accountType\" (change)=\"onUpload($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile />\r\n <label for=\"kt_create_account_form_account_type_personal\" class=\" w-50 p-4 mt-5\"><span\r\n class=\"fw-bold text-center w-100 fs-4\">\r\n<div class=\"d-flex justify-content-center align-items-center w-100\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#F2F4F7\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#F9FAFB\"\r\n stroke-width=\"6\" />\r\n <g clip-path=\"url(#clip0_4047_40566)\">\r\n <path\r\n d=\"M26.3333 26.3334L23 23M23 23L19.6666 26.3334M23 23V30.5M29.9916 28.325C30.8044 27.8819 31.4465 27.1808 31.8165 26.3322C32.1866 25.4837 32.2635 24.5361 32.0351 23.6389C31.8068 22.7418 31.2862 21.9463 30.5555 21.3779C29.8248 20.8095 28.9257 20.5006 28 20.5H26.95C26.6977 19.5244 26.2276 18.6186 25.5749 17.8509C24.9222 17.0831 24.104 16.4732 23.1817 16.0672C22.2594 15.6612 21.2571 15.4695 20.2501 15.5066C19.243 15.5437 18.2575 15.8086 17.3676 16.2814C16.4777 16.7542 15.7066 17.4226 15.1122 18.2363C14.5177 19.0501 14.1155 19.988 13.9358 20.9795C13.756 21.9711 13.8034 22.9905 14.0743 23.9611C14.3452 24.9317 14.8327 25.8282 15.5 26.5834\"\r\n stroke=\"#475467\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4047_40566\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(13 13)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"nodata-title\"><span class=\"click-upload cursor-pointer\">Click to\r\n upload </span>\r\n <!-- <span class=\"drag-drop\"> or drag and drop the template</span> -->\r\n </div>\r\n \r\n </span>\r\n </label>\r\n </div>\r\n\r\n <div *ngIf=\"typeNOB ==='multiple'\" class=\"d-flex mt-3 mb-10\" role=\"group\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button class=\"btn btn-primary w-100 ms-3\" id=\"alert-toast\" (click)=\"proceed()\"\r\n >Proceed</button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n<div *ngIf=\"type ==='editView' || type === 'view'\" class=\"card pt-0 pb-3 \">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n \r\n <div class=\"row w-100 mt-5\">\r\n \r\n <div class=\"col-md-6\">\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Zone-wise NoB\r\n Count</a>\r\n </div>\r\n <div *ngIf=\"type === 'view'\" class=\"col-md-6 text-end\">\r\n <span class=\"cursor-pointer\" (click)=\"cancel()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n<path d=\"M13 1L1 13M1 1L13 13\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg></span>\r\n </div>\r\n \r\n <div *ngIf=\"zoneList?.length\" class=\"table-responsive max-h-500\">\r\n <table class=\"table bottom-border text-nowrap mt-5\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\">Zone Name</th>\r\n <th scope=\"col\">NoB Count</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let zone of zoneList;let i = index\">\r\n <td class=\"py-3 mt-10\">{{zone.zoneName}}</td>\r\n <td class=\"py-2\"><span *ngIf=\"type === 'view' || !isEditEnabled\">\r\n {{ zone.nobCount }}\r\n </span>\r\n\r\n <!-- EDIT MODE -->\r\n <input *ngIf=\"type === 'editView' && isEditEnabled\" type=\"text\" class=\"form-control form-control-sm\"\r\n [(ngModel)]=\"zone.nobCount\" (ngModelChange)=\"onNobChange()\"\r\n (keypress)=\"omit_special_char($event)\" />\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"!zoneList?.length\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata-table\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this Zone-wise NoB count</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"erroShow\" class=\"text-danger mt-2\"><span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n<g clip-path=\"url(#clip0_15055_156438)\">\r\n<path d=\"M9 6V9M9 12H9.0075M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\" stroke=\"#B42318\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</g>\r\n<defs>\r\n<clipPath id=\"clip0_15055_156438\">\r\n<rect width=\"18\" height=\"18\" fill=\"white\"/>\r\n</clipPath>\r\n</defs>\r\n</svg></span>{{ erroShow }}</div>\r\n\r\n <div *ngIf=\"type ==='editView' && isEditEnabled\" class=\"d-flex mt-3 mb-10\" role=\"group\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancelEdit()\">Cancel</button>\r\n <button class=\"btn btn-primary w-100 ms-3\" id=\"alert-toast\" (click)=\"onSubmit()\"\r\n [disabled]=\"!dateValue || !nobCount || !storeId || !storeName\"><span\r\n *ngIf=\"type !=='add'\">Save</span><span *ngIf=\"type ==='add'\">Add</span></button>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n</div>", styles: [".scroll{overflow-y:auto;overflow-x:hidden}.title{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:600;line-height:28px}.sub-title{color:var(--Gray-500, #667085)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.teams-title{color:var(--Black, #101828)!important;font-size:18px!important;font-weight:600!important;line-height:28px}.title-header{border-radius:6px!important;border-bottom:2px solid var(--Gray-200, #EAECF0)!important;background:#f2f4f7!important;box-shadow:0 4px 10px #0000000d!important;color:var(--Black, #101828)!important;font-size:20px!important;font-weight:600;line-height:30px;padding:8px 16px}input[type=checkbox]{width:18px!important;height:18px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0;padding-top:12px;padding-right:6px}.global-label{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:500;line-height:24px}.w-25{width:40%!important}td{color:var(--Black, #101828)!important;font-size:16px!important;font-weight:500!important;line-height:24px}tr,.add-team{border-bottom:1px solid var(--Gray-200, #EAECF0)!important}input[disabled]{pointer-events:none;opacity:.5}input.form-control{margin-bottom:10px}.dropdown-menu{max-height:200px;overflow-y:auto}.dropdown-item{cursor:pointer}.btn-outline-primary{width:100%;text-align:left}.form-check-inline{border-radius:8px;border:1px solid var(--Primary-700, #009BF3);background:var(--Primary-25, #F6FCFF);padding:16px}.form-check-label{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:600;line-height:24px}.form-check-inline-none{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);padding:16px;margin-right:1rem}.right-bar{border-radius:8px!important;border:1px solid var(--Gray-200, #EAECF0)!important;background:var(--White, #FFF);padding:16px 24px!important}.drag-drop{color:var(--Gray-500, #667085)!important;font-size:14px!important;font-weight:400;line-height:20px}.click-upload{color:var(--Primary-700, #009BF3);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;text-transform:capitalize}.user-text{color:var(--Gray-500, #344054)!important;font-size:14px!important;font-weight:400!important;line-height:28px;list-style:decimal!important}.form-text-primary{color:var(--Primary-700, #009BF3)!important;font-size:16px!important;font-weight:600;line-height:24px}.form-defult{color:var(--Gray-900, #101828)!important;font-size:16px!important;font-weight:600;line-height:24px}table td{height:24px!important;align-items:center}.toggle-wrapper{display:flex;align-items:center;gap:12px}.switch{position:relative;display:inline-block;width:46px;height:24px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#f2f4f7;transition:.3s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;transition:.3s;border-radius:50%}.switch input:checked+.slider{background-color:#0d6efd}.switch input:checked+.slider:before{transform:translate(22px)}.text-danger{color:#b42318!important}.max-h-500{max-height:500px;overflow-y:auto}\n"] }]
|
|
440
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.TrafficService }, { type: i3.ExcelService }, { type: i4.NgbActiveModal }, { type: i5.ToastService }, { type: i0.ChangeDetectorRef }, { type: i6.DatePipe }], propDecorators: { type: [{
|
|
441
|
+
type: Input
|
|
442
|
+
}], viewData: [{
|
|
256
443
|
type: Input
|
|
257
444
|
}], inputFile: [{
|
|
258
445
|
type: ViewChild,
|
|
259
446
|
args: ["inputFile"]
|
|
260
447
|
}] } });
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW5vYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYWZmaWMvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1ub2IvYWRkLW5vYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYWZmaWMvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1ub2IvYWRkLW5vYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7O0FBTzNDLE1BQU0sT0FBTyxlQUFlO0lBS1I7SUFBdUI7SUFBK0I7SUFBb0M7SUFBeUI7SUFBNkI7SUFKM0osSUFBSSxDQUFLO0lBRWxCLE9BQU8sQ0FBWTtJQUNGLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLFlBQW9CLEVBQWMsRUFBUyxPQUFzQixFQUFTLFdBQTJCLEVBQVMsRUFBZ0IsRUFBUyxFQUFvQixFQUFTLFFBQWtCO1FBQWxLLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUFlO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQVMsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQUFTLE9BQUUsR0FBRixFQUFFLENBQWtCO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUV0TCxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElB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LENBQUMsa0lDWnZCLDYwWUF3Sk07OzRGRDFJTyxlQUFlO2tCQU4zQixTQUFTOytCQUNFLGFBQWEsYUFHWixDQUFDLFFBQVEsQ0FBQzs0TkFHZCxJQUFJO3NCQUFaLEtBQUs7Z0JBNElrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFmZmljU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYWZmaWMuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hZGQtbm9iJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLW5vYi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2FkZC1ub2IuY29tcG9uZW50LnNjc3MnLFxyXG4gIHByb3ZpZGVyczogW0RhdGVQaXBlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkTm9iQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LE9uRGVzdHJveSB7XHJcbkBJbnB1dCgpIHR5cGU6YW55O1xyXG5cclxubm9iRm9ybTogRm9ybUdyb3VwO1xyXG5wcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuY29uc3RydWN0b3IocHJpdmF0ZSBmYjpGb3JtQnVpbGRlcixwcml2YXRlIHNlcnZpY2U6VHJhZmZpY1NlcnZpY2UscHJpdmF0ZSBhY3RpdmVNb2RhbCA6TmdiQWN0aXZlTW9kYWwscHJpdmF0ZSB0czogVG9hc3RTZXJ2aWNlLHByaXZhdGUgY2Q6Q2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUpe1xyXG5cclxufVxyXG5uZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG59XHJcbmNsaWVudElkOmFueTtcclxubWF4RGF0ZTogc3RyaW5nID0gJyc7XHJcbm5nT25Jbml0KCk6IHZvaWQge1xyXG5sZXQgZGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwiXCIpO1xyXG50aGlzLmNsaWVudElkID1kYXRhLmNsaWVudFxyXG50aGlzLmdldE5vYlN0b3JlTGlzdChkYXRhLmNsaWVudCk7XHJcbnRoaXMuc2V0TWF4RGF0ZSgpO1xyXG59XHJcblxyXG5cclxuc3RvcmVMaXN0OmFueVtdPVtdO1xyXG5nZXROb2JTdG9yZUxpc3QoY2xpZW50OmFueSl7XHJcbiAgdGhpcy5zZXJ2aWNlLmdldE5PQlN0b3JlTGlzdChjbGllbnQpPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCl7XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3QgPXJlcy5kYXRhLnJlc3VsdFxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgXHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5cclxuc3RvcmVOYW1lOmFueTtcclxuc3RvcmVJZDphbnk7XHJcbmRhdGVWYWx1ZTphbnk7XHJcbnN0b3JlQ29kZTphbnk7XHJcbm5vYkNvdW50OmFueTtcclxub25OT0JTdG9yZVNlbGVjdChldmVudDogYW55LCB0eXBlOiAnc3RvcmVOYW1lJyB8ICdzdG9yZUlkJyk6IHZvaWQge1xyXG4gIGlmICghZXZlbnQpIHtcclxuICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdCgnc3RvcmVOYW1lIG9yIHN0b3JlSWQgaXMgdW5kZWZpbmVkIG9yIGludmFsaWQnKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgaWYgKHR5cGUgPT09ICdzdG9yZU5hbWUnKSB7XHJcbiAgICB0aGlzLnN0b3JlTmFtZSA9IGV2ZW50LnN0b3JlTmFtZTtcclxuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5zdG9yZUxpc3QuZmluZChzdG9yZSA9PiBzdG9yZS5zdG9yZU5hbWUgPT09IGV2ZW50LnN0b3JlTmFtZSk7XHJcbiAgICBpZiAoc3RvcmUpIHtcclxuICAgICAgdGhpcy5zdG9yZUlkID0gc3RvcmUuc3RvcmVJZDtcclxuICAgICAgdGhpcy5zdG9yZUNvZGUgPSBzdG9yZS5zdG9yZUNvZGU7IFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9yZUlkID0gJyc7XHJcbiAgICAgIHRoaXMuc3RvcmVDb2RlID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbHNlIGlmICh0eXBlID09PSAnc3RvcmVJZCcpIHtcclxuICAgIHRoaXMuc3RvcmVJZCA9IGV2ZW50LnN0b3JlSWQ7XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuc3RvcmVMaXN0LmZpbmQoc3RvcmUgPT4gc3RvcmUuc3RvcmVJZCA9PT0gZXZlbnQuc3RvcmVJZCk7XHJcbiAgICBpZiAoc3RvcmUpIHtcclxuICAgICAgdGhpcy5zdG9yZU5hbWUgPSBzdG9yZS5zdG9yZU5hbWU7XHJcbiAgICAgIHRoaXMuc3RvcmVDb2RlID0gc3RvcmUuc3RvcmVDb2RlOyBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmVOYW1lID0gJyc7XHJcbiAgICAgIHRoaXMuc3RvcmVDb2RlID0gJyc7IFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgXHJcbn1cclxub21pdF9zcGVjaWFsX2NoYXIoZXZlbnQ6IGFueSkge1xyXG4gIHZhciBrO1xyXG4gIGsgPSBldmVudC5jaGFyQ29kZTsgLy8gICAgICAgICBrID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxyXG4gIHJldHVybiBrID09IDggfHwgayA9PSAzMiB8fCAoayA+PSA0OCAmJiBrIDw9IDU3KTtcclxufVxyXG5zZXRNYXhEYXRlKCk6IHZvaWQge1xyXG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSh0b2RheSk7XHJcbiAgeWVzdGVyZGF5LnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gMSk7IC8vIFNldCB0aGUgbWF4IGRhdGUgdG8geWVzdGVyZGF5XHJcbiAgdGhpcy5kYXRlVmFsdWUgPSB5ZXN0ZXJkYXkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gIC8vIEZvcm1hdCB0aGUgZGF0ZSBhcyB5eXl5LU1NLWRkXHJcbiAgdGhpcy5tYXhEYXRlID0geWVzdGVyZGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxufVxyXG5vbkRhdGVDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICBpZiAoc2VsZWN0ZWREYXRlID4gdGhpcy5tYXhEYXRlKSB7XHJcbiAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoJ0ludmFsaWQgZGF0ZSBzZWxlY3RlZCEnKTtcclxuICB9XHJcbn1cclxuY2FuY2VsKCl7XHJcbiAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnY2xvc2UnKTtcclxufVxyXG5vblN1Ym1pdCgpe1xyXG4gIGxldCBvYmogPXtcclxuICAgIGJpbGxzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICAvLyBzdG9yZUlkOiB0aGlzLnN0b3JlSWQsXHJcbiAgICAgICAgc3RvcmVDb2RlOiB0aGlzLnN0b3JlQ29kZSA/IHRoaXMuc3RvcmVDb2RlIDogdGhpcy5zdG9yZUlkLFxyXG4gICAgICAgIC8vIHN0b3JlTmFtZTogdGhpcy5zdG9yZU5hbWUsXHJcbiAgICAgICAgbm9iRGF0ZTogdGhpcy5kYXRlVmFsdWUsXHJcbiAgICAgICAgbm9iQ291bnQ6IE51bWJlcih0aGlzLm5vYkNvdW50KVxyXG4gICAgICB9XHJcbiAgICBdLFxyXG4gICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWRcclxuICB9XHJcbnRoaXMuc2VydmljZS5nZXROT0JEYXRhTGlzdChvYmopPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuLnN1YnNjcmliZSh7XHJcbiAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwICYmIHJlcykge1xyXG4gICAgICAgIGNvbnN0IGFsbE1lc3NhZ2VzID0gcmVzLm1lc3NhZ2VcclxuICAgICAgICAgIC8vIC5tYXAoKGl0ZW06YW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgIGNvbnN0IHN0YXR1cyA9IGl0ZW0uY29kZSA9PT0gMjAwID8gJ+KchScgOiAn4p2MJzsgXHJcbiAgICAgICAgICAvLyAgIGNvbnN0IHN0b3JlSW5mbyA9IGl0ZW0uc3RvcmVJZCA/IGAke2l0ZW0uc3RvcmVJZH1gIDogJyc7XHJcbiAgICAgICAgICAvLyAgIHJldHVybiBgJHtzdGF0dXN9ICR7c3RvcmVJbmZvfTogJHtpdGVtLm1lc3NhZ2V9YDtcclxuICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgICAvLyAuam9pbignPGJyPicpOyBcclxuICAgICAgICB0aGlzLnRzLmdldFN1Y2Nlc3NUb2FzdChhbGxNZXNzYWdlcyk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnc3VibWl0Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KCdVbmV4cGVjdGVkIHJlc3BvbnNlIGZvcm1hdCcpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoZXJyLmVycm9yLmVycm9yID8gZXJyLmVycm9yLmVycm9yOmVyci5lcnJvci5lcnJvcik7XHJcbiAgICB9LFxyXG5cclxufSlcclxufVxyXG5cclxuXHJcbnR5cGVOT0IgPSdzaW5nbGUnXHJcbm5vYlN0b3JlKHR5cGU6YW55KXtcclxuICB0aGlzLnR5cGVOT0IgPXR5cGVcclxufVxyXG5kYXRhVGFibGVTaG93ID1mYWxzZTtcclxuZGF0YVRhYmxlU2hvdzEgPWZhbHNlO1xyXG50YWJsZUhlYWRlcnM6YW55O1xyXG5jb252ZXJ0ZWREYXRhOmFueTtcclxuQFZpZXdDaGlsZChcImlucHV0RmlsZVwiKSBpbnB1dEZpbGU6IEVsZW1lbnRSZWY7XHJcbm9uVXBsb2FkKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IGJpbmFyeURhdGE6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHdvcmtib29rOiBYTFNYLldvcmtCb29rID0gWExTWC5yZWFkKGJpbmFyeURhdGEsIHsgdHlwZTogJ2JpbmFyeScgfSk7XHJcbiAgICAgIGNvbnN0IHNoZWV0TmFtZTogc3RyaW5nID0gd29ya2Jvb2suU2hlZXROYW1lc1swXTtcclxuXHJcbiAgICAgIGlmIChzaGVldE5hbWUgIT09ICdOT0InKSB7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KFwiUGxlYXNlIHVwbG9hZCBhIHZhbGlkIGZpbGUuXCIpO1xyXG4gICAgICAgIHRoaXMucmVzZXRGaWxlSW5wdXQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNoZWV0OiBYTFNYLldvcmtTaGVldCA9IHdvcmtib29rLlNoZWV0c1tzaGVldE5hbWVdO1xyXG4gICAgICBjb25zdCBqc29uRGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbihzaGVldCwgeyBoZWFkZXI6IDEgfSk7XHJcbiAgICAgIGlmIChqc29uRGF0YS5sZW5ndGggPiAxMDApIHsgXHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KFwiRmlsZSBjb250YWlucyB0b28gbWFueSByb3dzLiBQbGVhc2UgbGltaXQgdG8gMTAwIHJvd3MuXCIpO1xyXG4gICAgICAgIHRoaXMucmVzZXRGaWxlSW5wdXQoKTtcclxuICAgICAgICB0aGlzLmRhdGFUYWJsZVNob3cxID0gdHJ1ZTsgXHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlU2hvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kYXRhVGFibGVTaG93MSA9IGZhbHNlOyBcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBoZWFkZXJzOiBhbnkgPSBqc29uRGF0YVswXTtcclxuICAgICAgdGhpcy50YWJsZUhlYWRlcnMgPSBoZWFkZXJzO1xyXG4gICAgICBjb25zdCBkYXRhUm93cyA9IGpzb25EYXRhLnNsaWNlKDEpO1xyXG4gICAgICB0aGlzLmNvbnZlcnRlZERhdGEgPSB7XHJcbiAgICAgICAgYmlsbHM6IGRhdGFSb3dzLm1hcCgocm93OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICBoZWFkZXJzLmZvckVhY2goKGhlYWRlcjogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjZWxsVmFsdWUgPSByb3dbaW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoaGVhZGVyID09PSBcIk5PQkRhdGVcIiAmJiB0eXBlb2YgY2VsbFZhbHVlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgY2VsbFZhbHVlID0gdGhpcy5jb252ZXJ0RXhjZWxEYXRlKGNlbGxWYWx1ZSk7IFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChgUGxlYXNlIHVwbG9hZCBhIHZhbGlkIE5PQiBEYXRlIEZvcm1hdGApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChoZWFkZXIgPT09IFwiU3RvcmVJZFwiICYmIGNlbGxWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgY2VsbFZhbHVlID0gY2VsbFZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb2JqW2hlYWRlcl0gPSBjZWxsVmFsdWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHN0b3JlQ29kZTogb2JqW1wiU3RvcmVJZFwiXSxcclxuICAgICAgICAgICAgbm9iRGF0ZTogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ob2JqW1wiTk9CRGF0ZVwiXSwgXCJ5eXl5LU1NLWRkXCIpLFxyXG4gICAgICAgICAgICBub2JDb3VudDogTnVtYmVyKG9ialtcIk5PQkNvdW50XCJdKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZmlsdGVyKChiaWxsOiBhbnkpID0+IGJpbGwubm9iRGF0ZSAhPT0gbnVsbCAmJiBiaWxsLm5vYkNvdW50ICE9PSBudWxsKSwgXHJcbiAgICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWRcclxuICAgICAgfTtcclxuICAgICAgdGhpcy50cy5nZXRTdWNjZXNzVG9hc3QoYEZpbGUgaGFzIGJlZW4gdXBsb2FkZWRgKTtcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoYFBsZWFzZSB1cGxvYWQgYSB2YWxpZCBmaWxlOiAke2Vycm9yfWApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXNldEZpbGVJbnB1dCgpO1xyXG4gIH07XHJcbiAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhmaWxlKTtcclxufVxyXG5yZXNldEZpbGVJbnB1dCgpOiB2b2lkIHtcclxuICBpZiAodGhpcy5pbnB1dEZpbGUgJiYgdGhpcy5pbnB1dEZpbGUubmF0aXZlRWxlbWVudCkge1xyXG4gICAgdGhpcy5pbnB1dEZpbGUubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gIH1cclxufVxyXG5cclxuY29udmVydEV4Y2VsRGF0ZShleGNlbERhdGU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgY29uc3QgYmFzZURhdGUgPSBuZXcgRGF0ZSgxOTAwLCAwLCAxKTsgXHJcbiAgY29uc3QgY29ycmVjdGVkRGF0ZSA9IG5ldyBEYXRlKGJhc2VEYXRlLmdldFRpbWUoKSArIChleGNlbERhdGUgLSAxKSAqIDg2NDAwMDAwKTtcclxuICByZXR1cm4gY29ycmVjdGVkRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXTsgXHJcbn1cclxuXHJcbnByb2NlZWQoKXtcclxuICB0aGlzLnNlcnZpY2UuZ2V0Tk9CRGF0YUxpc3QodGhpcy5jb252ZXJ0ZWREYXRhKT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzLmNvZGUgPT09IDIwMCAmJiByZXMpIHtcclxuICAgICAgICAgIGNvbnN0IGFsbE1lc3NhZ2VzID0gcmVzLm1lc3NhZ2VcclxuICAgICAgICAgIHRoaXMudHMuZ2V0U3VjY2Vzc1RvYXN0KGFsbE1lc3NhZ2VzKTtcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoJ3N1Ym1pdCcpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdCgnVW5leHBlY3RlZCByZXNwb25zZSBmb3JtYXQnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoZXJyLmVycm9yLmVycm9yKTtcclxuICAgICAgfSxcclxuICBcclxuICB9KVxyXG59XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmQgcHQtMCBwYi0zIHNjcm9sbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0wIGQtZmxleCBmbGV4LXN0YXJ0IGZsZXgtY29sdW1uIHAtOSBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktNSBkLWZsZXhcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT09J2FkZCdcIiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtNzVweCBzeW1ib2wtY2lyY2xlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGFsdD1cIlBpY1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL2FkZC1zdG9yZS1pY29uLnN2Z1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT09J3JldXBsb2FkJ1wiIGNsYXNzPVwic3ltYm9sIHN5bWJvbC03NXB4IHN5bWJvbC1jaXJjbGVcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEQUYxRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTM3IDMxVjM1QzM3IDM1LjUzMDQgMzYuNzg5MyAzNi4wMzkxIDM2LjQxNDIgMzYuNDE0MkMzNi4wMzkxIDM2Ljc4OTMgMzUuNTMwNCAzNyAzNSAzN0gyMUMyMC40Njk2IDM3IDE5Ljk2MDkgMzYuNzg5MyAxOS41ODU4IDM2LjQxNDJDMTkuMjEwNyAzNi4wMzkxIDE5IDM1LjUzMDQgMTkgMzVWMzFNMzMgMjRMMjggMTlNMjggMTlMMjMgMjRNMjggMTlWMzFcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB3LTEwMFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZSA9PT0nYWRkJ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZzLTQgdGV4dC1ncmF5LTgwMCB0ZXh0LWhvdmVyLXByaW1hcnkgZnctYm9sZCBtYi0wIHRpdGxlIGN1cnNvci1wb2ludGVyXCI+QWRkIFNpbmdsZSBOb0I8L2E+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZSA9PT0ncmV1cGxvYWQnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnMtNCB0ZXh0LWdyYXktODAwIHRleHQtaG92ZXItcHJpbWFyeSBmdy1ib2xkIG1iLTAgdGl0bGUgY3Vyc29yLXBvaW50ZXJcIj5VcGxvYWQgTm9CIGZvcjwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbjxkaXYgICpuZ0lmPVwidHlwZSA9PT0ncmV1cGxvYWQnXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgdy01MCBjdXJzb3ItcG9pbnRlciBwcy01XCIgKGNsaWNrKT1cIm5vYlN0b3JlKCdzaW5nbGUnKVwiIFtuZ0NsYXNzXT1cInR5cGVOT0IgPT09J3NpbmdsZScgPyAnZm9ybS1jaGVjay1pbmxpbmUnOidmb3JtLWNoZWNrLWlubGluZS1ub25lJ1wiID5cclxuICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJ0eXBlTk9CID09PSdzaW5nbGUnXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAtNXB4ICFpbXBvcnRhbnQ7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIwLjVcIiB5PVwiMC41XCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE1XCIgcng9XCI3LjVcIiBmaWxsPVwiI0VBRjhGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMC41XCIgeT1cIjAuNVwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiIzAwQTNGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCIzXCIgZmlsbD1cIiMwMEEzRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInR5cGVOT0IgIT09J3NpbmdsZSdcIiBzdHlsZT1cIm1hcmdpbi10b3A6IC01cHggIWltcG9ydGFudDtcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjAuNVwiIHk9XCIwLjVcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiByeD1cIjcuNVwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMC41XCIgeT1cIjAuNVwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtcy0xMFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJpbmxpbmVSYWRpb09wdGlvbnNcIiBpZD1cImlubGluZVJhZGlvMVwiIHZhbHVlPVwib3B0aW9uMVwiPiAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMyBwdC0xMlwiIFtuZ0NsYXNzXT1cInR5cGVOT0IgPT09J3NpbmdsZScgPyAnZm9ybS10ZXh0LXByaW1hcnkgJzonZm9ybS1kZWZ1bHQnXCI+U2luZ2xlIFN0b3JlPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgIHctNTAgY3Vyc29yLXBvaW50ZXIgcHMtNVwiIChjbGljayk9XCJub2JTdG9yZSgnbXVsdGlwbGUnKVwiIFtuZ0NsYXNzXT1cInR5cGVOT0IgPT09J211bHRpcGxlJyA/ICdmb3JtLWNoZWNrLWlubGluZSc6J2Zvcm0tY2hlY2staW5saW5lLW5vbmUnXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwidHlwZU5PQiA9PT0nbXVsdGlwbGUnXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAtNXB4ICFpbXBvcnRhbnQ7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIwLjVcIiB5PVwiMC41XCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE1XCIgcng9XCI3LjVcIiBmaWxsPVwiI0VBRjhGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMC41XCIgeT1cIjAuNVwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiIzAwQTNGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCIzXCIgZmlsbD1cIiMwMEEzRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInR5cGVOT0IgIT09J211bHRpcGxlJ1wiIHN0eWxlPVwibWFyZ2luLXRvcDogLTVweCAhaW1wb3J0YW50O1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMC41XCIgeT1cIjAuNVwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHJ4PVwiNy41XCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIwLjVcIiB5PVwiMC41XCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE1XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMyBwdC0xMlwiIFtuZ0NsYXNzXT1cInR5cGVOT0IgPT09J211bHRpcGxlJyA/ICdmb3JtLXRleHQtcHJpbWFyeSc6J2Zvcm0tZGVmdWx0J1wiPk11bHRpcGxlIFN0b3Jlczwvc3Bhbj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZU5PQiA9PT0nc2luZ2xlJ1wiIGNsYXNzPVwidy0xMDAgaC0wcHggc2Nyb2xsXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMCBtZS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLWxnLTYgY29sLXhsLTYgY29sLXh4bC02IG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdG9yZU5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBOYW1lPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydC1yZXF1aXJlZCB0ZXh0LWRhbmdlclwiPiAqPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWN1c3RvbS1zZWxlY3QgW2l0ZW1zXT1cInN0b3JlTGlzdFwiIFttdWx0aV09XCJmYWxzZVwiIFtzZWFyY2hGaWVsZF09XCInc3RvcmVOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3N0b3JlTmFtZSdcIiAoc2VsZWN0ZWQpPVwib25OT0JTdG9yZVNlbGVjdCgkZXZlbnQsICdzdG9yZU5hbWUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVzXT1cIlt7IHN0b3JlTmFtZTogc3RvcmVOYW1lIH1dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1jdXN0b20tc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLWxnLTYgY29sLXhsLTYgY29sLXh4bC02IG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdG9yZUlEXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RvcmUgSUQgLzxzcGFuICpuZ0lmPVwidHlwZSAhPT0nYWRkJ1wiPiBTdG9yZSBDb2RlPC9zcGFuPjxzcGFuICpuZ0lmPVwidHlwZSA9PT0nYWRkJ1wiPiBSZWZlcmVuY2UgQ29kZTwvc3Bhbj4gIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWQgdGV4dC1kYW5nZXJcIj4gKjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1jdXN0b20tc2VsZWN0IFtpdGVtc109XCJzdG9yZUxpc3RcIiBbbXVsdGldPVwiZmFsc2VcIiBbc2VhcmNoRmllbGRdPVwiJ3N0b3JlSWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInc3RvcmVJZCdcIiAoc2VsZWN0ZWQpPVwib25OT0JTdG9yZVNlbGVjdCgkZXZlbnQsICdzdG9yZUlkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJbeyBzdG9yZUlkOiBzdG9yZUlkIH1dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1jdXN0b20tc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLWxnLTYgY29sLXhsLTYgY29sLXh4bC02IG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJEYXRlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U2VsZWN0IERhdGUgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydC1yZXF1aXJlZCB0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJteURhdGVcIiBbKG5nTW9kZWwpXT1cImRhdGVWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50KVwiICBbbWF4XT1cIm1heERhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLWxnLTYgY29sLXhsLTYgY29sLXh4bC02IG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjb3VudFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk5PQiBDb3VudCA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkIHRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cIm5vYkNvdW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtdC0zIG1iLTEwXCIgcm9sZT1cImdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctMTAwIG1lLTNcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgbXMtM1wiIGlkPVwiYWxlcnQtdG9hc3RcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFkYXRlVmFsdWUgfHwgIW5vYkNvdW50IHx8ICFzdG9yZUlkIHx8ICFzdG9yZU5hbWVcIj48c3BhbiAqbmdJZj1cInR5cGUgIT09J2FkZCdcIj5Qcm9jZWVkPC9zcGFuPjxzcGFuICpuZ0lmPVwidHlwZSA9PT0nYWRkJ1wiPkFkZDwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZU5PQiA9PT0nbXVsdGlwbGUnXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNTAwIG15LTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJ0ZXh0LWdyYXktNDAwIGZ3LWJvbGQgZnMtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ1c2VyLXRleHRcIj5Vc2UgdGhlIHRlbXBsYXRlIHRvIHVwbG9hZCBtdWx0aXBsZSBOb0LigJlzIGF0IG9uY2UuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidXNlci10ZXh0IFwiPkRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBoZXJlIC0gICA8YSBocmVmPVwiLi4vLi4vYXNzZXRzL2ZpbGVzL25vYlVwbG9hZFRlbXBsYXRlLnhsc3hcIiBkb3dubG9hZD48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDIwIDIxXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxM1YxNi4zMzMzQzE3LjUgMTYuNzc1NCAxNy4zMjQ0IDE3LjE5OTMgMTcuMDExOCAxNy41MTE4QzE2LjY5OTMgMTcuODI0NCAxNi4yNzU0IDE4IDE1LjgzMzMgMThINC4xNjY2N0MzLjcyNDY0IDE4IDMuMzAwNzIgMTcuODI0NCAyLjk4ODE2IDE3LjUxMThDMi42NzU1OSAxNy4xOTkzIDIuNSAxNi43NzU0IDIuNSAxNi4zMzMzVjEzTTUuODMzMzMgOC44MzMzM0wxMCAxM00xMCAxM0wxNC4xNjY3IDguODMzMzNNMTAgMTNWM1wiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMiB0ZXh0LWRvd25sb2FkXCI+RG93bmxvYWQgVGVtcGxhdGU8L3NwYW4+PC9hPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInVzZXItdGV4dCBcIj5BZGQgeW91ciBkYXRhIHRvIHRoZSBUZW1wbGF0ZSBGaWxlPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidXNlci10ZXh0XCI+VXBsb2FkIGl0IGJlbG93IGZvciBwcm9jZXNzaW5nPC9saT5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZU5PQiA9PT0nbXVsdGlwbGUnXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXQtMyBtcy0zIHJpZ2h0LWJhciBweS0xMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYWNjb3VudFR5cGVcIiB0eXBlPVwicmFkaW9cIiBpZD1cImt0X2NyZWF0ZV9hY2NvdW50X2Zvcm1fYWNjb3VudF90eXBlX3BlcnNvbmFsXCJcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInBlcnNvbmFsXCIgY2xhc3M9XCJidG4tY2hlY2tcIiBuZy1yZWZsZWN0LW5hbWU9XCJhY2NvdW50VHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmctcmVmbGVjdC1mb3JtLWNvbnRyb2wtbmFtZT1cImFjY291bnRUeXBlXCIgICAoY2hhbmdlKT1cIm9uVXBsb2FkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nLXJlZmxlY3QtdmFsdWU9XCJwZXJzb25hbFwiIHR5cGU9XCJmaWxlXCIgI2lucHV0RmlsZSAvPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImt0X2NyZWF0ZV9hY2NvdW50X2Zvcm1fYWNjb3VudF90eXBlX3BlcnNvbmFsXCIgY2xhc3M9XCIgdy01MCBwLTQgbXQtNVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWNlbnRlciB3LTEwMCBmcy00XCI+XHJcbjxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQ2XCIgaGVpZ2h0PVwiNDZcIiB2aWV3Qm94PVwiMCAwIDQ2IDQ2XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiM1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBmaWxsPVwiI0YyRjRGN1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIHN0cm9rZT1cIiNGOUZBRkJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDQ3XzQwNTY2KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjYuMzMzMyAyNi4zMzM0TDIzIDIzTTIzIDIzTDE5LjY2NjYgMjYuMzMzNE0yMyAyM1YzMC41TTI5Ljk5MTYgMjguMzI1QzMwLjgwNDQgMjcuODgxOSAzMS40NDY1IDI3LjE4MDggMzEuODE2NSAyNi4zMzIyQzMyLjE4NjYgMjUuNDgzNyAzMi4yNjM1IDI0LjUzNjEgMzIuMDM1MSAyMy42Mzg5QzMxLjgwNjggMjIuNzQxOCAzMS4yODYyIDIxLjk0NjMgMzAuNTU1NSAyMS4zNzc5QzI5LjgyNDggMjAuODA5NSAyOC45MjU3IDIwLjUwMDYgMjggMjAuNUgyNi45NUMyNi42OTc3IDE5LjUyNDQgMjYuMjI3NiAxOC42MTg2IDI1LjU3NDkgMTcuODUwOUMyNC45MjIyIDE3LjA4MzEgMjQuMTA0IDE2LjQ3MzIgMjMuMTgxNyAxNi4wNjcyQzIyLjI1OTQgMTUuNjYxMiAyMS4yNTcxIDE1LjQ2OTUgMjAuMjUwMSAxNS41MDY2QzE5LjI0MyAxNS41NDM3IDE4LjI1NzUgMTUuODA4NiAxNy4zNjc2IDE2LjI4MTRDMTYuNDc3NyAxNi43NTQyIDE1LjcwNjYgMTcuNDIyNiAxNS4xMTIyIDE4LjIzNjNDMTQuNTE3NyAxOS4wNTAxIDE0LjExNTUgMTkuOTg4IDEzLjkzNTggMjAuOTc5NUMxMy43NTYgMjEuOTcxMSAxMy44MDM0IDIyLjk5MDUgMTQuMDc0MyAyMy45NjExQzE0LjM0NTIgMjQuOTMxNyAxNC44MzI3IDI1LjgyODIgMTUuNSAyNi41ODM0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDA0N180MDU2NlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEzIDEzKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGVcIj48c3BhbiBjbGFzcz1cImNsaWNrLXVwbG9hZCBjdXJzb3ItcG9pbnRlclwiPkNsaWNrIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiZHJhZy1kcm9wXCI+IG9yIGRyYWcgYW5kIGRyb3AgdGhlIHRlbXBsYXRlPC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAgKm5nSWY9XCJ0eXBlTk9CID09PSdtdWx0aXBsZSdcIiBjbGFzcz1cImQtZmxleCBtdC0zIG1iLTEwXCIgcm9sZT1cImdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctMTAwIG1lLTNcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgbXMtM1wiIGlkPVwiYWxlcnQtdG9hc3RcIiAoY2xpY2spPVwicHJvY2VlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgPlByb2NlZWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
448
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW5vYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYWZmaWMvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1ub2IvYWRkLW5vYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYWZmaWMvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1ub2IvYWRkLW5vYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQVMzQyxNQUFNLE9BQU8sZUFBZTtJQUtSO0lBQXVCO0lBQStCO0lBQ2hFO0lBQW9DO0lBQXlCO0lBQTZCO0lBTDNGLElBQUksQ0FBSztJQUNULFFBQVEsQ0FBSztJQUN0QixPQUFPLENBQVk7SUFDRixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMxQyxZQUFvQixFQUFjLEVBQVMsT0FBc0IsRUFBUyxZQUF5QixFQUN6RixXQUEyQixFQUFTLEVBQWdCLEVBQVMsRUFBb0IsRUFBUyxRQUFrQjtRQURsRyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVMsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pGLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFTLE9BQUUsR0FBRixFQUFFLENBQWM7UUFBUyxPQUFFLEdBQUYsRUFBRSxDQUFrQjtRQUFTLGFBQVEsR0FBUixRQUFRLENB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cEMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFBO2dCQUM1QywwQ0FBMEMsQ0FBQztnQkFFN0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7d0dBeGRZLGVBQWU7NEZBQWYsZUFBZSxzRkFGZixDQUFDLFFBQVEsQ0FBQyxrSUNkdkIsZ21uQkF1Uk07OzRGRHZRTyxlQUFlO2tCQU4zQixTQUFTOytCQUNFLGFBQWEsYUFHWixDQUFDLFFBQVEsQ0FBQzt1UEFHZCxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkF5TWtCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYWZmaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhZmZpYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEV4Y2VsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4Y2VsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWRkLW5vYicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1ub2IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hZGQtbm9iLmNvbXBvbmVudC5zY3NzJyxcclxuICBwcm92aWRlcnM6IFtEYXRlUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZE5vYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG5ASW5wdXQoKSB0eXBlOmFueTtcclxuQElucHV0KCkgdmlld0RhdGE6YW55O1xyXG5ub2JGb3JtOiBGb3JtR3JvdXA7XHJcbnByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5jb25zdHJ1Y3Rvcihwcml2YXRlIGZiOkZvcm1CdWlsZGVyLHByaXZhdGUgc2VydmljZTpUcmFmZmljU2VydmljZSxwcml2YXRlIGV4Y2VsU2VydmljZTpFeGNlbFNlcnZpY2UsXHJcbiAgcHJpdmF0ZSBhY3RpdmVNb2RhbCA6TmdiQWN0aXZlTW9kYWwscHJpdmF0ZSB0czogVG9hc3RTZXJ2aWNlLHByaXZhdGUgY2Q6Q2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUpe1xyXG5cclxufVxyXG5uZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG59XHJcbmNsaWVudElkOmFueTtcclxubWF4RGF0ZTogc3RyaW5nID0gJyc7XHJcbmlzRWRpdEVuYWJsZWQgPSBmYWxzZTtcclxuY2xpZW50RGF0YTphbnk7XHJcbm5nT25Jbml0KCk6IHZvaWQge1xyXG5sZXQgZGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwiXCIpO1xyXG50aGlzLmNsaWVudElkID1kYXRhLmNsaWVudFxyXG5sZXQgY2xpZW50OiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY2xpZW50LWRldGFpbHNcIikgfHwgXCJcIik7XHJcbnRoaXMuY2xpZW50RGF0YSA9IGNsaWVudFxyXG50aGlzLmdldE5vYlN0b3JlTGlzdChkYXRhLmNsaWVudCk7XHJcbnRoaXMuc2V0TWF4RGF0ZSgpO1xyXG5pZiAodGhpcy50eXBlID09PSAnZWRpdFZpZXcnIHx8IHRoaXMudHlwZSA9PT0gJ3ZpZXcnKSB7XHJcbiAgdGhpcy5zdG9yZU5hbWUgPSB0aGlzLnZpZXdEYXRhLnN0b3JlTmFtZTtcclxuICB0aGlzLnN0b3JlSWQgPSB0aGlzLnZpZXdEYXRhLnN0b3JlSWQ7XHJcbiAgdGhpcy5zdG9yZUNvZGUgPSB0aGlzLnZpZXdEYXRhLnN0b3JlQ29kZTtcclxuIHRoaXMuZGF0ZVZhbHVlID0gdGhpcy52aWV3RGF0YS5ub2JEYXRlXHJcbiAgPyBuZXcgRGF0ZSh0aGlzLnZpZXdEYXRhLm5vYkRhdGUpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXVxyXG4gIDogbnVsbDtcclxuXHJcbiAgdGhpcy5ub2JDb3VudCA9IHRoaXMudmlld0RhdGEubm9iQ291bnQ7XHJcblxyXG4gIHRoaXMuem9uZUxpc3QgPSB0aGlzLnZpZXdEYXRhLnpvbmV3aXNlbm9iOyAvLyBrZWVwIHZhbHVlc1xyXG4gIGlmKHRoaXMudHlwZSA9PT0gJ2VkaXRWaWV3Jyl7XHJcbiAgICB0aGlzLmlzRWRpdEVuYWJsZWQgPSB0cnVlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLmlzRWRpdEVuYWJsZWQgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcbn1cclxuXHJcbmNhbmNlbEVkaXQoKSB7XHJcbiAgdGhpcy5pc0VkaXRFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gIGlmICh0aGlzLnZpZXdEYXRhPy56b25lTGlzdCkge1xyXG4gICAgdGhpcy56b25lTGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy52aWV3RGF0YS56b25lTGlzdCkpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnpvbmVMaXN0ID0gW107XHJcbiAgfVxyXG5cclxuICB0aGlzLmNhbmNlbCgpO1xyXG59XHJcblxyXG5zdG9yZUxpc3Q6YW55W109W107XHJcbmdldE5vYlN0b3JlTGlzdChjbGllbnQ6YW55KXtcclxuICB0aGlzLnNlcnZpY2UuZ2V0Tk9CU3RvcmVMaXN0KGNsaWVudCk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gIC5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKXtcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdCA9cmVzLmRhdGEucmVzdWx0XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICBcclxuICAgIH1cclxuICB9KVxyXG59XHJcblxyXG5zdG9yZU5hbWU6YW55O1xyXG5zdG9yZUlkOmFueTtcclxuZGF0ZVZhbHVlOmFueTtcclxuc3RvcmVDb2RlOmFueTtcclxubm9iQ291bnQ6YW55O1xyXG56b25lU2hvdyA9ZmFsc2U7XHJcbm9uTk9CU3RvcmVTZWxlY3QoZXZlbnQ6IGFueSwgdHlwZTogJ3N0b3JlTmFtZScgfCAnc3RvcmVJZCcpOiB2b2lkIHtcclxuICBpZiAoIWV2ZW50KSB7XHJcbiAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoJ3N0b3JlTmFtZSBvciBzdG9yZUlkIGlzIHVuZGVmaW5lZCBvciBpbnZhbGlkJyk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIGlmICh0eXBlID09PSAnc3RvcmVOYW1lJykge1xyXG4gICAgdGhpcy5zdG9yZU5hbWUgPSBldmVudC5zdG9yZU5hbWU7XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuc3RvcmVMaXN0LmZpbmQoc3RvcmUgPT4gc3RvcmUuc3RvcmVOYW1lID09PSBldmVudC5zdG9yZU5hbWUpO1xyXG4gICAgaWYgKHN0b3JlKSB7XHJcbiAgICAgIHRoaXMuc3RvcmVJZCA9IHN0b3JlLnN0b3JlSWQ7XHJcbiAgICAgIHRoaXMuc3RvcmVDb2RlID0gc3RvcmUuc3RvcmVDb2RlOyBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmVJZCA9ICcnO1xyXG4gICAgICB0aGlzLnN0b3JlQ29kZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICBlbHNlIGlmICh0eXBlID09PSAnc3RvcmVJZCcpIHtcclxuICAgIHRoaXMuc3RvcmVJZCA9IGV2ZW50LnN0b3JlSWQ7XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuc3RvcmVMaXN0LmZpbmQoc3RvcmUgPT4gc3RvcmUuc3RvcmVJZCA9PT0gZXZlbnQuc3RvcmVJZCk7XHJcbiAgICBpZiAoc3RvcmUpIHtcclxuICAgICAgdGhpcy5zdG9yZU5hbWUgPSBzdG9yZS5zdG9yZU5hbWU7XHJcbiAgICAgIHRoaXMuc3RvcmVDb2RlID0gc3RvcmUuc3RvcmVDb2RlOyBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmVOYW1lID0gJyc7XHJcbiAgICAgIHRoaXMuc3RvcmVDb2RlID0gJyc7IFxyXG4gICAgfVxyXG4gIH1cclxuICB0aGlzLnpvbmVTaG93ID0gdHJ1ZTtcclxuICBpZih0aGlzLmlzRW5hYmxlZCl7XHJcbiAgIHRoaXMuZ2V0Wm9uZUxpc3QodGhpcy5zdG9yZUlkKTtcclxuICB9XHJcbiAgLy8gY29uc29sZS5sb2coJ3N0b3JlTmFtZScsdGhpcy5zdG9yZUlkKTtcclxuXHJcbiAgXHJcbn1cclxub21pdF9zcGVjaWFsX2NoYXIoZXZlbnQ6IGFueSkge1xyXG4gIHZhciBrO1xyXG4gIGsgPSBldmVudC5jaGFyQ29kZTsgLy8gICAgICAgICBrID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxyXG4gIHJldHVybiBrID09IDggfHwgayA9PSAzMiB8fCAoayA+PSA0OCAmJiBrIDw9IDU3KTtcclxufVxyXG5zZXRNYXhEYXRlKCk6IHZvaWQge1xyXG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSh0b2RheSk7XHJcbiAgeWVzdGVyZGF5LnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpIC0gMSk7IC8vIFNldCB0aGUgbWF4IGRhdGUgdG8geWVzdGVyZGF5XHJcbiAgdGhpcy5kYXRlVmFsdWUgPSB5ZXN0ZXJkYXkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gIC8vIEZvcm1hdCB0aGUgZGF0ZSBhcyB5eXl5LU1NLWRkXHJcbiAgdGhpcy5tYXhEYXRlID0geWVzdGVyZGF5LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxufVxyXG5vbkRhdGVDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICBpZiAoc2VsZWN0ZWREYXRlID4gdGhpcy5tYXhEYXRlKSB7XHJcbiAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoJ0ludmFsaWQgZGF0ZSBzZWxlY3RlZCEnKTtcclxuICB9XHJcbn1cclxuY2FuY2VsKCl7XHJcbiAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnY2xvc2UnKTtcclxufVxyXG5lcnJvU2hvdzphbnkgPScnO1xyXG5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxub25TdWJtaXQoKSB7XHJcblxyXG4gIC8vIOKblCBTVE9QIGlmIGFscmVhZHkgc3VibWl0dGluZ1xyXG4gIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgb3ZlcmFsbE5vYiA9IE51bWJlcih0aGlzLm5vYkNvdW50KSB8fCAwO1xyXG5cclxuICBjb25zdCB6b25lVG90YWwgPSB0aGlzLnpvbmV3aXNlbm9iLnJlZHVjZShcclxuICAgIChzdW06IG51bWJlciwgejogYW55KSA9PiBzdW0gKyAoTnVtYmVyKHoubm9iQ291bnQpIHx8IDApLFxyXG4gICAgMFxyXG4gICk7XHJcblxyXG4gIGlmICh6b25lVG90YWwgPiBvdmVyYWxsTm9iKSB7XHJcbiAgICB0aGlzLmVycm9TaG93ID0gJ1pvbmUtd2lzZSBOb0IgY2Fubm90IGV4Y2VlZCBvdmVyYWxsIE5vQiBjb3VudCc7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyDinIUgTE9DSyBCVVRUT05cclxuICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XHJcblxyXG4gIGNvbnN0IG9iaiA9IHtcclxuICAgIGJpbGxzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBzdG9yZUNvZGU6IHRoaXMuc3RvcmVDb2RlID8gdGhpcy5zdG9yZUNvZGUgOiB0aGlzLnN0b3JlSWQsXHJcbiAgICAgICAgbm9iRGF0ZTogdGhpcy5kYXRlVmFsdWUsXHJcbiAgICAgICAgbm9iQ291bnQ6IE51bWJlcih0aGlzLm5vYkNvdW50KSxcclxuICAgICAgICB6b25ld2lzZW5vYjogdGhpcy56b25ld2lzZW5vYlxyXG4gICAgICB9XHJcbiAgICBdLFxyXG4gICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWRcclxuICB9O1xyXG5cclxuICB0aGlzLnNlcnZpY2UuZ2V0Tk9CRGF0YUxpc3Qob2JqKVxyXG4gICAgPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudHMuZ2V0U3VjY2Vzc1RvYXN0KHJlcy5tZXNzYWdlKTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoJ3N1Ym1pdCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoJ1VuZXhwZWN0ZWQgcmVzcG9uc2UgZm9ybWF0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3IgfHwgJ1NvbWV0aGluZyB3ZW50IHdyb25nJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgLy8g8J+UkyBVTkxPQ0sgQlVUVE9OXHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcblxyXG5cclxudHlwZU5PQiA9J3NpbmdsZSdcclxubm9iU3RvcmUodHlwZTphbnkpe1xyXG4gIHRoaXMudHlwZU5PQiA9dHlwZVxyXG59XHJcbmRhdGFUYWJsZVNob3cgPWZhbHNlO1xyXG5kYXRhVGFibGVTaG93MSA9ZmFsc2U7XHJcbnRhYmxlSGVhZGVyczphbnk7XHJcbmNvbnZlcnRlZERhdGE6YW55O1xyXG5AVmlld0NoaWxkKFwiaW5wdXRGaWxlXCIpIGlucHV0RmlsZTogRWxlbWVudFJlZjtcclxub25VcGxvYWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXM/LlswXTtcclxuICBpZiAoIWZpbGUpIHJldHVybjtcclxuXHJcbiAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGJpbmFyeURhdGEgPSBlLnRhcmdldC5yZXN1bHQ7XHJcblxyXG4gICAgICBjb25zdCB3b3JrYm9vazogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChiaW5hcnlEYXRhLCB7XHJcbiAgICAgICAgdHlwZTogJ2JpbmFyeSdcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBzaGVldE5hbWUgPSB3b3JrYm9vay5TaGVldE5hbWVzWzBdO1xyXG4gICAgICBjb25zdCBzaGVldCA9IHdvcmtib29rLlNoZWV0c1tzaGVldE5hbWVdO1xyXG5cclxuICAgICAgY29uc3Qgc2hlZXREYXRhOiBhbnlbXVtdID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHNoZWV0LCB7XHJcbiAgICAgICAgaGVhZGVyOiAxLFxyXG4gICAgICAgIGRlZnZhbDogbnVsbFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICghc2hlZXREYXRhIHx8IHNoZWV0RGF0YS5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KCdFeGNlbCBmaWxlIGlzIGVtcHR5Jyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBoZWFkZXJzOiBzdHJpbmdbXSA9IHNoZWV0RGF0YVswXVxyXG4gICAgICAgIC5tYXAoaCA9PiAoaCA9PT0gbnVsbCB8fCBoID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyhoKS50cmltKCkpKVxyXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggPCA0KSB7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgJ0V4Y2VsIG11c3QgY29udGFpbiBTdG9yZUlkLCBEYXRlLCBOb0IgY291bnQgYW5kIGF0IGxlYXN0IG9uZSBab25lJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByb3dzID0gc2hlZXREYXRhLnNsaWNlKDEpO1xyXG5cclxuICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gICAgICAvLyAy77iP4oOjIFBST0NFU1MgUk9XU1xyXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAgIGNvbnN0IGJpbGxzID0gcm93c1xyXG4gICAgICAgIC5tYXAoKHJvdzogYW55W10sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcclxuXHJcbiAgICAgICAgICAvLyDwn5S5IFNLSVAgQ09NUExFVEVMWSBFTVBUWSBST1dTIChTQUZFKVxyXG4gICAgICAgICAgY29uc3QgaXNFbXB0eVJvdyA9IHJvdy5ldmVyeShjZWxsID0+XHJcbiAgICAgICAgICAgIGNlbGwgPT09IG51bGwgfHxcclxuICAgICAgICAgICAgY2VsbCA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICh0eXBlb2YgY2VsbCA9PT0gJ3N0cmluZycgJiYgY2VsbC50cmltKCkgPT09ICcnKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChpc0VtcHR5Um93KSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAgICAgICAvLyAz77iP4oOjIFNUT1JFIENPREVcclxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAgICAgICAgIGNvbnN0IHN0b3JlSWQgPSBTdHJpbmcocm93WzBdID8/ICcnKS50cmltKCk7XHJcbiAgICAgICAgICBpZiAoIXN0b3JlSWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIFN0b3JlIENvZGUgYXQgcm93ICR7cm93SW5kZXggKyAyfWApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAgICAgICAgIC8vIDTvuI/ig6MgREFURVxyXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gICAgICAgICAgbGV0IG5vYkRhdGU6IGFueSA9IHJvd1sxXTtcclxuICAgICAgICAgIGlmIChub2JEYXRlID09PSBudWxsIHx8IG5vYkRhdGUgPT09IHVuZGVmaW5lZCB8fCBub2JEYXRlID09PSAnJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgRGF0ZSBhdCByb3cgJHtyb3dJbmRleCArIDJ9YCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHR5cGVvZiBub2JEYXRlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBub2JEYXRlID0gdGhpcy5jb252ZXJ0RXhjZWxEYXRlKG5vYkRhdGUpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChub2JEYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICAvLyBva1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygbm9iRGF0ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUobm9iRGF0ZSk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihwYXJzZWQuZ2V0VGltZSgpKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBEYXRlIGZvcm1hdCBhdCByb3cgJHtyb3dJbmRleCArIDJ9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbm9iRGF0ZSA9IHBhcnNlZDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBEYXRlIGZvcm1hdCBhdCByb3cgJHtyb3dJbmRleCArIDJ9YCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gICAgICAgICAgLy8gNe+4j+KDoyBOb0IgQ09VTlRcclxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAgICAgICAgIGxldCBub2JDb3VudDogYW55ID0gcm93WzJdO1xyXG4gICAgICAgICAgaWYgKG5vYkNvdW50ID09PSBudWxsIHx8IG5vYkNvdW50ID09PSB1bmRlZmluZWQgfHwgbm9iQ291bnQgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBOb0IgY291bnQgYXQgcm93ICR7cm93SW5kZXggKyAyfWApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIG5vYkNvdW50ID0gTnVtYmVyKG5vYkNvdW50KTtcclxuICAgICAgICAgIGlmIChpc05hTihub2JDb3VudCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIE5vQiBjb3VudCBhdCByb3cgJHtyb3dJbmRleCArIDJ9YCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gICAgICAgICAgLy8gNu+4j+KDoyBaT05FIFdJU0UgTm9CXHJcbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAgICAgICBjb25zdCB6b25ld2lzZW5vYiA9IGhlYWRlcnMuc2xpY2UoMylcclxuICAgICAgICAgICAgLm1hcCgoem9uZU5hbWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmF3ID0gcm93W2luZGV4ICsgM107XHJcblxyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHJhdyA9PT0gbnVsbCB8fFxyXG4gICAgICAgICAgICAgICAgcmF3ID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgICAgICh0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyAmJiByYXcudHJpbSgpID09PSAnJylcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBOdW1iZXIocmF3KTtcclxuICAgICAgICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgIGBJbnZhbGlkIFpvbmUgTm9CIGF0IHJvdyAke3Jvd0luZGV4ICsgMn0gKCR7em9uZU5hbWV9KWBcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgem9uZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBub2JDb3VudDogdmFsdWVcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHpvbmVUb3RhbCA9IHpvbmV3aXNlbm9iLnJlZHVjZShcclxuICAgICAgICAgICAgKHN1bTogbnVtYmVyLCB6OiBhbnkpID0+IHN1bSArIHoubm9iQ291bnQsXHJcbiAgICAgICAgICAgIDBcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKHpvbmVUb3RhbCA+IG5vYkNvdW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICBgWm9uZS13aXNlIE5vQiBjYW5ub3QgZXhjZWVkIG92ZXJhbGwgTm9CIChSb3cgJHtyb3dJbmRleCArIDJ9KWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgICAgICAgICAvLyA377iP4oOjIEZJTkFMIE9CSkVDVFxyXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3RvcmVDb2RlOiBzdG9yZUlkLFxyXG4gICAgICAgICAgICBub2JEYXRlOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShub2JEYXRlLCAneXl5eS1NTS1kZCcpLFxyXG4gICAgICAgICAgICBub2JDb3VudCxcclxuICAgICAgICAgICAgem9uZXdpc2Vub2JcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgICAgaWYgKCFiaWxscy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoJ05vIHZhbGlkIHJvd3MgZm91bmQgaW4gRXhjZWwnKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAgICAgLy8gOO+4j+KDoyBGSU5BTCBQQVlMT0FEXHJcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAgICAgdGhpcy5jb252ZXJ0ZWREYXRhID0ge1xyXG4gICAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICAgIGJpbGxzXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZGF0YVRhYmxlU2hvdyA9IHRydWU7XHJcbiAgICAgIHRoaXMudHMuZ2V0U3VjY2Vzc1RvYXN0KCdGaWxlIHVwbG9hZGVkIHN1Y2Nlc3NmdWxseScpO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVyci5tZXNzYWdlIHx8ICdJbnZhbGlkIEV4Y2VsIGZpbGUnKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMucmVzZXRGaWxlSW5wdXQoKTtcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhmaWxlKTtcclxufVxyXG5cclxucmVzZXRGaWxlSW5wdXQoKTogdm9pZCB7XHJcbiAgaWYgKHRoaXMuaW5wdXRGaWxlICYmIHRoaXMuaW5wdXRGaWxlLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgIHRoaXMuaW5wdXRGaWxlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICB9XHJcbn1cclxuXHJcbmNvbnZlcnRFeGNlbERhdGUoZXhjZWxEYXRlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGJhc2VEYXRlID0gbmV3IERhdGUoMTkwMCwgMCwgMSk7IFxyXG4gIGNvbnN0IGNvcnJlY3RlZERhdGUgPSBuZXcgRGF0ZShiYXNlRGF0ZS5nZXRUaW1lKCkgKyAoZXhjZWxEYXRlIC0gMSkgKiA4NjQwMDAwMCk7XHJcbiAgcmV0dXJuIGNvcnJlY3RlZERhdGUudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07IFxyXG59XHJcblxyXG5wcm9jZWVkKCl7XHJcbiAgdGhpcy5zZXJ2aWNlLmdldE5PQkRhdGFMaXN0KHRoaXMuY29udmVydGVkRGF0YSk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gIC5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDAgJiYgcmVzKSB7XHJcbiAgICAgICAgICBjb25zdCBhbGxNZXNzYWdlcyA9IHJlcy5tZXNzYWdlXHJcbiAgICAgICAgICB0aGlzLnRzLmdldFN1Y2Nlc3NUb2FzdChhbGxNZXNzYWdlcyk7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdzdWJtaXQnKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoJ1VuZXhwZWN0ZWQgcmVzcG9uc2UgZm9ybWF0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVyci5lcnJvci5lcnJvcik7XHJcbiAgICAgIH0sXHJcbiAgXHJcbiAgfSlcclxufVxyXG5cclxuaXNFbmFibGVkID0gZmFsc2U7XHJcbnpvbmVMaXN0OmFueT1bXTtcclxub25DaGVja2JveENoYW5nZShldmVudDphbnkpe1xyXG4gIHRoaXMuaXNFbmFibGVkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgaWYodGhpcy5pc0VuYWJsZWQpe1xyXG4gICAgdGhpcy5nZXRab25lTGlzdCh0aGlzLnN0b3JlSWQpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnpvbmVMaXN0ID1bXTtcclxuICB9XHJcbn1cclxuXHJcbmdldFpvbmVMaXN0KHN0b3JlOmFueSl7XHJcbiAgdGhpcy5zZXJ2aWNlLmdldFpvbmVMaXN0KHsgXCJzdG9yZUlkXCI6IFtzdG9yZV0gfSk/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gIC5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKXtcclxuICAgICAgICB0aGlzLnpvbmVMaXN0ID0gcmVzPy5kYXRhXHJcbiAgICAgIH0gZWxzZXtcclxuICAgICAgICB0aGlzLnpvbmVMaXN0ID1bXTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgIHRoaXMuem9uZUxpc3QgPVtdO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5cclxuem9uZXdpc2Vub2I6IGFueVtdID0gW107XHJcblxyXG5vbk5vYkNoYW5nZSgpIHtcclxuICB0aGlzLnpvbmV3aXNlbm9iID0gdGhpcy56b25lTGlzdC5tYXAoKHpvbmU6IGFueSkgPT4gKHtcclxuICAgIHpvbmVOYW1lOiB6b25lLnRhZ05hbWUgPyB6b25lLnRhZ05hbWUgOiB6b25lLnpvbmVOYW1lLFxyXG4gICAgbm9iQ291bnQ6IE51bWJlcih6b25lLm5vYkNvdW50KSB8fCAwXHJcbiAgfSkpO1xyXG5cclxuICBjb25zb2xlLmxvZygnVXBkYXRlZCB6b25ld2lzZW5vYjonLCB0aGlzLnpvbmV3aXNlbm9iKTtcclxufVxyXG4gZG93bmxvYWQoKSB7XHJcbiAgdGhpcy5zZXJ2aWNlXHJcbiAgICAuZ2V0Wm9uZVRlbXBsYXRlKHsgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQgfHwgJycgfSlcclxuICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICB0aGlzLmV4Y2VsU2VydmljZS5zYXZlQXNFeGNlbEZpbGUoXHJcbiAgICAgICAgICAgIHJlcyxcclxuICAgICAgICAgICAgJ05PQiBVcGxvYWQgVGVtcGxhdGUnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoJ0ZpbGUgaXMgZW1wdHknKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICBjb25zdCBlcnJvck1zZyA9IGVyci5lcnJvcj8uZXJyb3IgfHwgXHJcbiAgICAgICAgZXJyLmVycm9yPy5tZXNzYWdlIHx8IGVyci5tZXNzYWdlIHx8IGVyci5lcnJvclxyXG4gICAgICAgICAgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGRvd25sb2FkaW5nIGZpbGUnO1xyXG5cclxuICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoZXJyb3JNc2cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxufSIsIjxkaXYgKm5nSWY9XCJ0eXBlICE9PSdlZGl0VmlldycgJiYgdHlwZSAhPT0gJ3ZpZXcnXCIgY2xhc3M9XCJjYXJkIHB0LTAgcGItMyBzY3JvbGxcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMCBkLWZsZXggZmxleC1zdGFydCBmbGV4LWNvbHVtbiBwLTkgXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTUgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0eXBlID09PSdhZGQnXCIgY2xhc3M9XCJzeW1ib2wgc3ltYm9sLTc1cHggc3ltYm9sLWNpcmNsZVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBhbHQ9XCJQaWNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9hZGQtc3RvcmUtaWNvbi5zdmdcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0eXBlID09PSdyZXVwbG9hZCdcIiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtNzVweCBzeW1ib2wtY2lyY2xlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjREFGMUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0VBRjhGRlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zNyAzMVYzNUMzNyAzNS41MzA0IDM2Ljc4OTMgMzYuMDM5MSAzNi40MTQyIDM2LjQxNDJDMzYuMDM5MSAzNi43ODkzIDM1LjUzMDQgMzcgMzUgMzdIMjFDMjAuNDY5NiAzNyAxOS45NjA5IDM2Ljc4OTMgMTkuNTg1OCAzNi40MTQyQzE5LjIxMDcgMzYuMDM5MSAxOSAzNS41MzA0IDE5IDM1VjMxTTMzIDI0TDI4IDE5TTI4IDE5TDIzIDI0TTI4IDE5VjMxXCIgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdy0xMDBcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT09J2FkZCdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmcy00IHRleHQtZ3JheS04MDAgdGV4dC1ob3Zlci1wcmltYXJ5IGZ3LWJvbGQgbWItMCB0aXRsZSBjdXJzb3ItcG9pbnRlclwiPkFkZCBTaW5nbGUgTm9CPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT09J3JldXBsb2FkJ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZzLTQgdGV4dC1ncmF5LTgwMCB0ZXh0LWhvdmVyLXByaW1hcnkgZnctYm9sZCBtYi0wIHRpdGxlIGN1cnNvci1wb2ludGVyXCI+VXBsb2FkIE5vQiBmb3I8L2E+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG48ZGl2ICAqbmdJZj1cInR5cGUgPT09J3JldXBsb2FkJ1wiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtdC01XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIHctNTAgY3Vyc29yLXBvaW50ZXIgcHMtNVwiIChjbGljayk9XCJub2JTdG9yZSgnc2luZ2xlJylcIiBbbmdDbGFzc109XCJ0eXBlTk9CID09PSdzaW5nbGUnID8gJ2Zvcm0tY2hlY2staW5saW5lJzonZm9ybS1jaGVjay1pbmxpbmUtbm9uZSdcIiA+XHJcbiAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwidHlwZU5PQiA9PT0nc2luZ2xlJ1wiIHN0eWxlPVwibWFyZ2luLXRvcDogLTVweCAhaW1wb3J0YW50O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMC41XCIgeT1cIjAuNVwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHJ4PVwiNy41XCIgZmlsbD1cIiNFQUY4RkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjAuNVwiIHk9XCIwLjVcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiMwMEEzRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiM1wiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJ0eXBlTk9CICE9PSdzaW5nbGUnXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAtNXB4ICFpbXBvcnRhbnQ7XCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIwLjVcIiB5PVwiMC41XCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE1XCIgcng9XCI3LjVcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjAuNVwiIHk9XCIwLjVcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbXMtMTBcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiaW5saW5lUmFkaW9PcHRpb25zXCIgaWQ9XCJpbmxpbmVSYWRpbzFcIiB2YWx1ZT1cIm9wdGlvbjFcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgcHQtMTJcIiBbbmdDbGFzc109XCJ0eXBlTk9CID09PSdzaW5nbGUnID8gJ2Zvcm0tdGV4dC1wcmltYXJ5ICc6J2Zvcm0tZGVmdWx0J1wiPlNpbmdsZSBTdG9yZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrICB3LTUwIGN1cnNvci1wb2ludGVyIHBzLTVcIiAoY2xpY2spPVwibm9iU3RvcmUoJ211bHRpcGxlJylcIiBbbmdDbGFzc109XCJ0eXBlTk9CID09PSdtdWx0aXBsZScgPyAnZm9ybS1jaGVjay1pbmxpbmUnOidmb3JtLWNoZWNrLWlubGluZS1ub25lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInR5cGVOT0IgPT09J211bHRpcGxlJ1wiIHN0eWxlPVwibWFyZ2luLXRvcDogLTVweCAhaW1wb3J0YW50O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMC41XCIgeT1cIjAuNVwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHJ4PVwiNy41XCIgZmlsbD1cIiNFQUY4RkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjAuNVwiIHk9XCIwLjVcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiMwMEEzRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiM1wiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJ0eXBlTk9CICE9PSdtdWx0aXBsZSdcIiBzdHlsZT1cIm1hcmdpbi10b3A6IC01cHggIWltcG9ydGFudDtcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjAuNVwiIHk9XCIwLjVcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiByeD1cIjcuNVwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMC41XCIgeT1cIjAuNVwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgcHQtMTJcIiBbbmdDbGFzc109XCJ0eXBlTk9CID09PSdtdWx0aXBsZScgPyAnZm9ybS10ZXh0LXByaW1hcnknOidmb3JtLWRlZnVsdCdcIj5NdWx0aXBsZSBTdG9yZXM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGVOT0IgPT09J3NpbmdsZSdcIiBjbGFzcz1cInctMTAwIGgtMHB4IHNjcm9sbFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTAgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IGNvbC14bC02IGNvbC14eGwtNiBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3RvcmVOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RvcmUgTmFtZTxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWQgdGV4dC1kYW5nZXJcIj4gKjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1jdXN0b20tc2VsZWN0IFtpdGVtc109XCJzdG9yZUxpc3RcIiBbbXVsdGldPVwiZmFsc2VcIiBbc2VhcmNoRmllbGRdPVwiJ3N0b3JlTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidzdG9yZU5hbWUnXCIgKHNlbGVjdGVkKT1cIm9uTk9CU3RvcmVTZWxlY3QoJGV2ZW50LCAnc3RvcmVOYW1lJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJbeyBzdG9yZU5hbWU6IHN0b3JlTmFtZSB9XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItY3VzdG9tLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IGNvbC14bC02IGNvbC14eGwtNiBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3RvcmVJRFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0b3JlIElEIC88c3BhbiAqbmdJZj1cInR5cGUgIT09J2FkZCdcIj4gU3RvcmUgQ29kZTwvc3Bhbj48c3BhbiAqbmdJZj1cInR5cGUgPT09J2FkZCdcIj4gUmVmZXJlbmNlIENvZGU8L3NwYW4+ICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkIHRleHQtZGFuZ2VyXCI+ICo8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItY3VzdG9tLXNlbGVjdCBbaXRlbXNdPVwic3RvcmVMaXN0XCIgW211bHRpXT1cImZhbHNlXCIgW3NlYXJjaEZpZWxkXT1cIidzdG9yZUlkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3N0b3JlSWQnXCIgKHNlbGVjdGVkKT1cIm9uTk9CU3RvcmVTZWxlY3QoJGV2ZW50LCAnc3RvcmVJZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiW3sgc3RvcmVJZDogc3RvcmVJZCB9XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItY3VzdG9tLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IGNvbC14bC02IGNvbC14eGwtNiBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiRGF0ZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlNlbGVjdCBEYXRlIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWQgdGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwibXlEYXRlXCIgWyhuZ01vZGVsKV09XCJkYXRlVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25EYXRlQ2hhbmdlKCRldmVudClcIiAgW21heF09XCJtYXhEYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IGNvbC14bC02IGNvbC14eGwtNiBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY291bnRcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5OT0IgQ291bnQgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydC1yZXF1aXJlZCB0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJub2JDb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ6b25lU2hvd1wiIGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2xpZW50RGF0YT8uaXNab25ld2lzZU5PQlwiIGNsYXNzPVwidG9nZ2xlLXdyYXBwZXJcIj5cclxuICA8bGFiZWwgY2xhc3M9XCJzd2l0Y2hcIj5cclxuICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImlzRW5hYmxlZFwiIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgkZXZlbnQpXCIgLz5cclxuICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyXCI+PC9zcGFuPlxyXG4gIDwvbGFiZWw+XHJcblxyXG4gIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWxhYmVsXCI+XHJcbiAgICBBZGQgWm9uZS13aXNlIE5vQiBDb3VudFxyXG4gIDwvc3Bhbj5cclxuPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRW5hYmxlZFwiIGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlICBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXAgbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+Wm9uZSBOYW1lPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPk5vQiBDb3VudDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgem9uZSBvZiB6b25lTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicHktMyBtdC0xMFwiPnt7em9uZS50YWdOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicHktMlwiPjxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtYi0wIHB5LTBcIiBbKG5nTW9kZWwpXT1cInpvbmUubm9iQ291bnRcIiAobmdNb2RlbENoYW5nZSk9XCJvbk5vYkNoYW5nZSgpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVycm9TaG93XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtdC0yXCI+PHNwYW4gY2xhc3M9XCJtZS0yXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbjxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTUwNTVfMTU2NDM4KVwiPlxyXG48cGF0aCBkPVwiTTkgNlY5TTkgMTJIOS4wMDc1TTE2LjUgOUMxNi41IDEzLjE0MjEgMTMuMTQyMSAxNi41IDkgMTYuNUM0Ljg1Nzg2IDE2LjUgMS41IDEzLjE0MjEgMS41IDlDMS41IDQuODU3ODYgNC44NTc4NiAxLjUgOSAxLjVDMTMuMTQyMSAxLjUgMTYuNSA0Ljg1Nzg2IDE2LjUgOVpcIiBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuPC9nPlxyXG48ZGVmcz5cclxuPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTUwNTVfMTU2NDM4XCI+XHJcbjxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuPC9jbGlwUGF0aD5cclxuPC9kZWZzPlxyXG48L3N2Zz48L3NwYW4+e3sgZXJyb1Nob3cgfX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtMyBtYi0xMFwiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB3LTEwMCBtZS0zXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgbXMtM1wiXHJcbiAgaWQ9XCJhbGVydC10b2FzdFwiXHJcbiAgKGNsaWNrKT1cIm9uU3VibWl0KClcIlxyXG4gIFtkaXNhYmxlZF09XCJcclxuICAgICFkYXRlVmFsdWUgfHxcclxuICAgICFub2JDb3VudCB8fFxyXG4gICAgIXN0b3JlSWQgfHxcclxuICAgICFzdG9yZU5hbWUgfHxcclxuICAgIGlzU3VibWl0dGluZ1xyXG4gIFwiXHJcbj5cclxuICA8c3BhbiAqbmdJZj1cIiFpc1N1Ym1pdHRpbmcgJiYgdHlwZSAhPT0gJ2FkZCdcIj5Qcm9jZWVkPC9zcGFuPlxyXG4gIDxzcGFuICpuZ0lmPVwiIWlzU3VibWl0dGluZyAmJiB0eXBlID09PSAnYWRkJ1wiPkFkZDwvc3Bhbj5cclxuICA8c3BhbiAqbmdJZj1cImlzU3VibWl0dGluZ1wiPlBsZWFzZSB3YWl0Li4uPC9zcGFuPlxyXG48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGVOT0IgPT09J211bHRpcGxlJ1wiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTUwMCBteS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidGV4dC1ncmF5LTQwMCBmdy1ib2xkIGZzLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidXNlci10ZXh0XCI+VXNlIHRoZSB0ZW1wbGF0ZSB0byB1cGxvYWQgbXVsdGlwbGUgTm9C4oCZcyBhdCBvbmNlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInVzZXItdGV4dCBcIj5Eb3dubG9hZCB0aGUgdGVtcGxhdGUgaGVyZSAtIDxhICpuZ0lmPVwiIWNsaWVudERhdGE/LmlzWm9uZXdpc2VOT0JcIiBocmVmPVwiLi4vLi4vYXNzZXRzL2ZpbGVzL25vYlVwbG9hZFRlbXBsYXRlLnhsc3hcIiBkb3dubG9hZD48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDIwIDIxXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxM1YxNi4zMzMzQzE3LjUgMTYuNzc1NCAxNy4zMjQ0IDE3LjE5OTMgMTcuMDExOCAxNy41MTE4QzE2LjY5OTMgMTcuODI0NCAxNi4yNzU0IDE4IDE1LjgzMzMgMThINC4xNjY2N0MzLjcyNDY0IDE4IDMuMzAwNzIgMTcuODI0NCAyLjk4ODE2IDE3LjUxMThDMi42NzU1OSAxNy4xOTkzIDIuNSAxNi43NzU0IDIuNSAxNi4zMzMzVjEzTTUuODMzMzMgOC44MzMzM0wxMCAxM00xMCAxM0wxNC4xNjY3IDguODMzMzNNMTAgMTNWM1wiIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMiB0ZXh0LWRvd25sb2FkIHRleHQtcHJpbWFyeVwiPkRvd25sb2FkIFRlbXBsYXRlPC9zcGFuPjwvYT4gPHNwYW4gKm5nSWY9XCJjbGllbnREYXRhPy5pc1pvbmV3aXNlTk9CXCIgY2xhc3M9XCIgdGV4dC1hY3RpdmUtcHJpbWFyeVwiICAoY2xpY2spPVwiZG93bmxvYWQoKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiIHZpZXdCb3g9XCIwIDAgMjAgMjFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy41IDEzVjE2LjMzMzNDMTcuNSAxNi43NzU0IDE3LjMyNDQgMTcuMTk5MyAxNy4wMTE4IDE3LjUxMThDMTYuNjk5MyAxNy44MjQ0IDE2LjI3NTQgMTggMTUuODMzMyAxOEg0LjE2NjY3QzMuNzI0NjQgMTggMy4zMDA3MiAxNy44MjQ0IDIuOTg4MTYgMTcuNTExOEMyLjY3NTU5IDE3LjE5OTMgMi41IDE2Ljc3NTQgMi41IDE2LjMzMzNWMTNNNS44MzMzMyA4LjgzMzMzTDEwIDEzTTEwIDEzTDE0LjE2NjcgOC44MzMzM00xMCAxM1YzXCIgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yIHRleHQtZG93bmxvYWQgdGV4dC1wcmltYXJ5IGN1cnNvci1wb2ludGVyXCI+RG93bmxvYWQgVGVtcGxhdGU8L3NwYW4+PC9zcGFuPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInVzZXItdGV4dCBcIj5BZGQgeW91ciBkYXRhIHRvIHRoZSBUZW1wbGF0ZSBGaWxlPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidXNlci10ZXh0XCI+VXBsb2FkIGl0IGJlbG93IGZvciBwcm9jZXNzaW5nPC9saT5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZU5PQiA9PT0nbXVsdGlwbGUnXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXQtMyBtcy0zIHJpZ2h0LWJhciBweS0xMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYWNjb3VudFR5cGVcIiB0eXBlPVwicmFkaW9cIiBpZD1cImt0X2NyZWF0ZV9hY2NvdW50X2Zvcm1fYWNjb3VudF90eXBlX3BlcnNvbmFsXCJcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInBlcnNvbmFsXCIgY2xhc3M9XCJidG4tY2hlY2tcIiBuZy1yZWZsZWN0LW5hbWU9XCJhY2NvdW50VHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmctcmVmbGVjdC1mb3JtLWNvbnRyb2wtbmFtZT1cImFjY291bnRUeXBlXCIgICAoY2hhbmdlKT1cIm9uVXBsb2FkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nLXJlZmxlY3QtdmFsdWU9XCJwZXJzb25hbFwiIHR5cGU9XCJmaWxlXCIgI2lucHV0RmlsZSAvPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImt0X2NyZWF0ZV9hY2NvdW50X2Zvcm1fYWNjb3VudF90eXBlX3BlcnNvbmFsXCIgY2xhc3M9XCIgdy01MCBwLTQgbXQtNVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWNlbnRlciB3LTEwMCBmcy00XCI+XHJcbjxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQ2XCIgaGVpZ2h0PVwiNDZcIiB2aWV3Qm94PVwiMCAwIDQ2IDQ2XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiM1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBmaWxsPVwiI0YyRjRGN1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIHN0cm9rZT1cIiNGOUZBRkJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDQ3XzQwNTY2KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjYuMzMzMyAyNi4zMzM0TDIzIDIzTTIzIDIzTDE5LjY2NjYgMjYuMzMzNE0yMyAyM1YzMC41TTI5Ljk5MTYgMjguMzI1QzMwLjgwNDQgMjcuODgxOSAzMS40NDY1IDI3LjE4MDggMzEuODE2NSAyNi4zMzIyQzMyLjE4NjYgMjUuNDgzNyAzMi4yNjM1IDI0LjUzNjEgMzIuMDM1MSAyMy42Mzg5QzMxLjgwNjggMjIuNzQxOCAzMS4yODYyIDIxLjk0NjMgMzAuNTU1NSAyMS4zNzc5QzI5LjgyNDggMjAuODA5NSAyOC45MjU3IDIwLjUwMDYgMjggMjAuNUgyNi45NUMyNi42OTc3IDE5LjUyNDQgMjYuMjI3NiAxOC42MTg2IDI1LjU3NDkgMTcuODUwOUMyNC45MjIyIDE3LjA4MzEgMjQuMTA0IDE2LjQ3MzIgMjMuMTgxNyAxNi4wNjcyQzIyLjI1OTQgMTUuNjYxMiAyMS4yNTcxIDE1LjQ2OTUgMjAuMjUwMSAxNS41MDY2QzE5LjI0MyAxNS41NDM3IDE4LjI1NzUgMTUuODA4NiAxNy4zNjc2IDE2LjI4MTRDMTYuNDc3NyAxNi43NTQyIDE1LjcwNjYgMTcuNDIyNiAxNS4xMTIyIDE4LjIzNjNDMTQuNTE3NyAxOS4wNTAxIDE0LjExNTUgMTkuOTg4IDEzLjkzNTggMjAuOTc5NUMxMy43NTYgMjEuOTcxMSAxMy44MDM0IDIyLjk5MDUgMTQuMDc0MyAyMy45NjExQzE0LjM0NTIgMjQuOTMxNyAxNC44MzI3IDI1LjgyODIgMTUuNSAyNi41ODM0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDA0N180MDU2NlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEzIDEzKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGVcIj48c3BhbiBjbGFzcz1cImNsaWNrLXVwbG9hZCBjdXJzb3ItcG9pbnRlclwiPkNsaWNrIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiZHJhZy1kcm9wXCI+IG9yIGRyYWcgYW5kIGRyb3AgdGhlIHRlbXBsYXRlPC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAgKm5nSWY9XCJ0eXBlTk9CID09PSdtdWx0aXBsZSdcIiBjbGFzcz1cImQtZmxleCBtdC0zIG1iLTEwXCIgcm9sZT1cImdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctMTAwIG1lLTNcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgbXMtM1wiIGlkPVwiYWxlcnQtdG9hc3RcIiAoY2xpY2spPVwicHJvY2VlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgPlByb2NlZWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwidHlwZSA9PT0nZWRpdFZpZXcnIHx8IHR5cGUgPT09ICd2aWV3J1wiIGNsYXNzPVwiY2FyZCBwdC0wICBwYi0zIFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0wIGQtZmxleCBmbGV4LXN0YXJ0IGZsZXgtY29sdW1uIHAtOSBcIj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHctMTAwIG10LTVcIj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnMtNCB0ZXh0LWdyYXktODAwIHRleHQtaG92ZXItcHJpbWFyeSBmdy1ib2xkIG1iLTAgdGl0bGUgY3Vyc29yLXBvaW50ZXJcIj5ab25lLXdpc2UgTm9CXHJcbiAgICAgICAgICAgICAgICAgICAgQ291bnQ8L2E+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ3ZpZXcnXCIgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjYW5jZWwoKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxyXG48cGF0aCBkPVwiTTEzIDFMMSAxM00xIDFMMTMgMTNcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiem9uZUxpc3Q/Lmxlbmd0aFwiIGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZSBtYXgtaC01MDBcIj5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXAgbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+Wm9uZSBOYW1lPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPk5vQiBDb3VudDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgem9uZSBvZiB6b25lTGlzdDtsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJweS0zIG10LTEwXCI+e3t6b25lLnpvbmVOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicHktMlwiPjxzcGFuICpuZ0lmPVwidHlwZSA9PT0gJ3ZpZXcnIHx8ICFpc0VkaXRFbmFibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHpvbmUubm9iQ291bnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRURJVCBNT0RFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInR5cGUgPT09ICdlZGl0VmlldycgJiYgaXNFZGl0RW5hYmxlZFwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ6b25lLm5vYkNvdW50XCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Ob2JDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXpvbmVMaXN0Py5sZW5ndGhcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1ub2RhdGEtdGFibGVcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS10aXRsZVwiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciB0aGlzIFpvbmUtd2lzZSBOb0IgY291bnQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJlcnJvU2hvd1wiIGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMlwiPjxzcGFuIGNsYXNzPVwibWUtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG48ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE1MDU1XzE1NjQzOClcIj5cclxuPHBhdGggZD1cIk05IDZWOU05IDEySDkuMDA3NU0xNi41IDlDMTYuNSAxMy4xNDIxIDEzLjE0MjEgMTYuNSA5IDE2LjVDNC44NTc4NiAxNi41IDEuNSAxMy4xNDIxIDEuNSA5QzEuNSA0Ljg1Nzg2IDQuODU3ODYgMS41IDkgMS41QzEzLjE0MjEgMS41IDE2LjUgNC44NTc4NiAxNi41IDlaXCIgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbjwvZz5cclxuPGRlZnM+XHJcbjxjbGlwUGF0aCBpZD1cImNsaXAwXzE1MDU1XzE1NjQzOFwiPlxyXG48cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIi8+XHJcbjwvY2xpcFBhdGg+XHJcbjwvZGVmcz5cclxuPC9zdmc+PC9zcGFuPnt7IGVycm9TaG93IH19PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT09J2VkaXRWaWV3JyAmJiBpc0VkaXRFbmFibGVkXCIgY2xhc3M9XCJkLWZsZXggbXQtMyBtYi0xMFwiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0xMDAgbWUtM1wiIChjbGljayk9XCJjYW5jZWxFZGl0KClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIG1zLTNcIiBpZD1cImFsZXJ0LXRvYXN0XCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRhdGVWYWx1ZSB8fCAhbm9iQ291bnQgfHwgIXN0b3JlSWQgfHwgIXN0b3JlTmFtZVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInR5cGUgIT09J2FkZCdcIj5TYXZlPC9zcGFuPjxzcGFuICpuZ0lmPVwidHlwZSA9PT0nYWRkJ1wiPkFkZDwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|