tango-app-ui-manage-tickets 3.7.0-beta.7 → 3.7.0-beta.71
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/audit-mapping-list/audit-mapping-list.component.mjs +498 -0
- package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +389 -0
- package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +480 -0
- package/esm2022/lib/components/custom-select/custom-select.component.mjs +187 -0
- package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
- package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +372 -205
- package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
- package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
- package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +3 -3
- package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +81 -0
- package/esm2022/lib/components/start-audit/start-audit.component.mjs +758 -0
- package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +7 -3
- package/esm2022/lib/components/ticket-filter-panel/ticket-filter-panel.component.mjs +435 -0
- package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +2488 -0
- package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +43 -0
- package/esm2022/lib/components/tickets/tickets.component.mjs +62 -8
- package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
- package/esm2022/lib/services/audit.service.mjs +88 -0
- package/esm2022/lib/services/ticket.service.mjs +196 -35
- package/esm2022/lib/services/timer.service.mjs +84 -0
- package/esm2022/lib/tango-manage-tickets-routing.module.mjs +22 -2
- package/esm2022/lib/tango-manage-tickets.module.mjs +60 -5
- package/fesm2022/tango-app-ui-manage-tickets.mjs +7345 -337
- package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -1
- package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +73 -0
- package/lib/components/audit-metrics/audit-metrics.component.d.ts +1 -1
- package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +52 -0
- package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
- package/lib/components/custom-select/custom-select.component.d.ts +35 -0
- package/lib/components/filter-options/filter-options.component.d.ts +15 -0
- package/lib/components/footfall-dic/footfall-dic.component.d.ts +22 -9
- package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
- package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
- package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
- package/lib/components/start-audit/start-audit.component.d.ts +86 -0
- package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +1 -0
- package/lib/components/ticket-filter-panel/ticket-filter-panel.component.d.ts +79 -0
- package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +293 -0
- package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +15 -0
- package/lib/components/tickets/tickets.component.d.ts +4 -0
- package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
- package/lib/services/audit.service.d.ts +36 -0
- package/lib/services/ticket.service.d.ts +46 -8
- package/lib/services/timer.service.d.ts +22 -0
- package/lib/tango-manage-tickets.module.d.ts +22 -5
- package/package.json +1 -1
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
import { Component, ViewChild, Input } from '@angular/core';
|
|
2
|
+
import * as LZString from 'lz-string';
|
|
3
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
6
|
+
import * as i2 from "../../services/ticket.service";
|
|
7
|
+
import * as i3 from "@angular/router";
|
|
8
|
+
import * as i4 from "../../services/timer.service";
|
|
9
|
+
import * as i5 from "../../services/audit.service";
|
|
10
|
+
import * as i6 from "tango-app-ui-shared";
|
|
11
|
+
import * as i7 from "@angular/common";
|
|
12
|
+
export class AuditReportPopupComponent {
|
|
13
|
+
modalService;
|
|
14
|
+
activeModal;
|
|
15
|
+
service;
|
|
16
|
+
router;
|
|
17
|
+
timerService;
|
|
18
|
+
cd;
|
|
19
|
+
apiservice;
|
|
20
|
+
route;
|
|
21
|
+
toast;
|
|
22
|
+
Retagjunkcount = 0;
|
|
23
|
+
Retagemployeecount = 0;
|
|
24
|
+
Retagcustomercount = 0;
|
|
25
|
+
demographicCount;
|
|
26
|
+
retagjunkdata;
|
|
27
|
+
retagemployeedata;
|
|
28
|
+
retagcustomerdata;
|
|
29
|
+
totalfiles;
|
|
30
|
+
auth = false;
|
|
31
|
+
submitauth = false;
|
|
32
|
+
Errormsg = '';
|
|
33
|
+
selectedType;
|
|
34
|
+
confirmerror;
|
|
35
|
+
destroy$ = new Subject();
|
|
36
|
+
timePassed = 0;
|
|
37
|
+
subscription = null;
|
|
38
|
+
formattedTime = '00:00:00';
|
|
39
|
+
category = [];
|
|
40
|
+
centralOpsData;
|
|
41
|
+
tangoData;
|
|
42
|
+
tangoAccuracy = '';
|
|
43
|
+
constructor(modalService, activeModal, service, router, timerService, cd, apiservice, route, toast) {
|
|
44
|
+
this.modalService = modalService;
|
|
45
|
+
this.activeModal = activeModal;
|
|
46
|
+
this.service = service;
|
|
47
|
+
this.router = router;
|
|
48
|
+
this.timerService = timerService;
|
|
49
|
+
this.cd = cd;
|
|
50
|
+
this.apiservice = apiservice;
|
|
51
|
+
this.route = route;
|
|
52
|
+
this.toast = toast;
|
|
53
|
+
}
|
|
54
|
+
ngOnInit() {
|
|
55
|
+
let filedata = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
56
|
+
this.totalfiles = filedata;
|
|
57
|
+
this.apiservice.getAuditconfig(filedata?.filedetails?.clientId).pipe(takeUntil(this.destroy$)).subscribe({
|
|
58
|
+
next: (res) => {
|
|
59
|
+
if (res && res?.code == 200) {
|
|
60
|
+
this.category = res.data.footfallDirectoryConfigs.taggingLimitation;
|
|
61
|
+
this.category.map((data) => {
|
|
62
|
+
let filterData = JSON.parse(sessionStorage.getItem(data?.type) || '{}');
|
|
63
|
+
data.value = filterData;
|
|
64
|
+
data.count = data?.value?.length;
|
|
65
|
+
});
|
|
66
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ ngOnInit ~ this.category:", this.category);
|
|
67
|
+
let stringifydata = sessionStorage.getItem('audit') || '{}';
|
|
68
|
+
const decompressedData = LZString.decompress(stringifydata);
|
|
69
|
+
var customer = JSON.parse(decompressedData || '{}');
|
|
70
|
+
this.Retagcustomercount = customer.length;
|
|
71
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ ngOnInit ~ this.totalfiles:", this.totalfiles);
|
|
72
|
+
let input = {
|
|
73
|
+
storeId: this.totalfiles?.filedetails?.storeId,
|
|
74
|
+
dateString: this.totalfiles?.filedetails?.Date,
|
|
75
|
+
};
|
|
76
|
+
this.service
|
|
77
|
+
.checkTicketExists(input).pipe(takeUntil(this.destroy$))
|
|
78
|
+
.subscribe({
|
|
79
|
+
next: (res) => {
|
|
80
|
+
if (res && res?.code === 200) {
|
|
81
|
+
console.log(res.data);
|
|
82
|
+
let ticketList = res?.data;
|
|
83
|
+
let findstoreticket = ticketList.filter((data) => data?._source?.type === 'store' && data?._source?.status != "Closed")[0]?._source;
|
|
84
|
+
if (findstoreticket && findstoreticket?.mappingInfo.length > 0) {
|
|
85
|
+
this.centralOpsData = findstoreticket.mappingInfo.filter((data) => data.type != "tangoreview")[0];
|
|
86
|
+
console.log("🚀 ~ TicketclosepopupComponent ~ ngOnInit ~ this.centralOpsData:", this.centralOpsData);
|
|
87
|
+
}
|
|
88
|
+
this.tangoAccuracy = Math.round((this.Retagcustomercount / this.totalfiles?.totalfiles) * 100);
|
|
89
|
+
this.tangoData = {
|
|
90
|
+
revicedFootfall: this.Retagcustomercount,
|
|
91
|
+
revicedPerc: this.tangoAccuracy + "%"
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
this.setTimer();
|
|
100
|
+
}
|
|
101
|
+
setTimer() {
|
|
102
|
+
this.subscription = this.timerService.getTimePassed().subscribe(time => {
|
|
103
|
+
this.timePassed = time;
|
|
104
|
+
this.formattedTime = this.timerService.formatTime(time);
|
|
105
|
+
this.cd.detectChanges();
|
|
106
|
+
});
|
|
107
|
+
this.timerService.startTimer();
|
|
108
|
+
document.addEventListener('mousemove', this.handleGlobalMouseEvent);
|
|
109
|
+
document.addEventListener('click', this.handleGlobalMouseEvent);
|
|
110
|
+
document.addEventListener('mouseenter', this.handleGlobalMouseEvent);
|
|
111
|
+
document.addEventListener('scroll', this.handleGlobalMouseEvent);
|
|
112
|
+
}
|
|
113
|
+
handleGlobalMouseEvent = () => {
|
|
114
|
+
this.timerService.startTimer();
|
|
115
|
+
};
|
|
116
|
+
ngOnDestroy() {
|
|
117
|
+
this.destroy$.next(true);
|
|
118
|
+
this.destroy$.complete();
|
|
119
|
+
document.removeEventListener('mousemove', this.handleGlobalMouseEvent);
|
|
120
|
+
document.removeEventListener('click', this.handleGlobalMouseEvent);
|
|
121
|
+
document.removeEventListener('mouseenter', this.handleGlobalMouseEvent);
|
|
122
|
+
document.removeEventListener('scroll', this.handleGlobalMouseEvent);
|
|
123
|
+
this.timerService.clearTimer();
|
|
124
|
+
}
|
|
125
|
+
changebrand() {
|
|
126
|
+
this.auth = true;
|
|
127
|
+
var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
128
|
+
let junkimage = [];
|
|
129
|
+
let employeeimage = [];
|
|
130
|
+
let customerimage = [];
|
|
131
|
+
this.retagjunkdata.map((e) => {
|
|
132
|
+
delete e.img_path;
|
|
133
|
+
delete e.selected;
|
|
134
|
+
delete e.count;
|
|
135
|
+
delete e.dropped;
|
|
136
|
+
delete e.mappedid;
|
|
137
|
+
junkimage.push(e);
|
|
138
|
+
});
|
|
139
|
+
this.retagemployeedata.map((e) => {
|
|
140
|
+
delete e.img_path;
|
|
141
|
+
delete e.selected;
|
|
142
|
+
delete e.count;
|
|
143
|
+
delete e.dropped;
|
|
144
|
+
delete e.mappedid;
|
|
145
|
+
employeeimage.push(e);
|
|
146
|
+
});
|
|
147
|
+
this.retagcustomerdata.map((e) => {
|
|
148
|
+
if (e.count > 1) {
|
|
149
|
+
delete e.img_path;
|
|
150
|
+
delete e.selected;
|
|
151
|
+
delete e.dropped;
|
|
152
|
+
var result = e.mappedid;
|
|
153
|
+
e.mappedid = result;
|
|
154
|
+
e.count = result.length;
|
|
155
|
+
e.mappedid.forEach((e1) => { delete e1.img_path; });
|
|
156
|
+
customerimage.push(e);
|
|
157
|
+
}
|
|
158
|
+
if (e.demographic === 'd' && e.count === 1) {
|
|
159
|
+
delete e.img_path;
|
|
160
|
+
delete e.selected;
|
|
161
|
+
delete e.dropped;
|
|
162
|
+
var result = e.mappedid;
|
|
163
|
+
e.mappedid = result;
|
|
164
|
+
e.count = result.length;
|
|
165
|
+
e.mappedid.forEach((e1) => { delete e1.img_path; });
|
|
166
|
+
customerimage.push(e);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
var obj = {
|
|
170
|
+
auditId: totalfile?.auditId ? totalfile?.auditId : totalfile?.filedetails?.auditId,
|
|
171
|
+
storeId: totalfile?.filedetails?.store_id,
|
|
172
|
+
auditType: totalfile?.filedetails?.type,
|
|
173
|
+
fileDate: totalfile?.filedetails?.file_date,
|
|
174
|
+
beforeCount: totalfile?.totalfiles,
|
|
175
|
+
junkCount: this.Retagjunkcount,
|
|
176
|
+
junk: junkimage ? junkimage : [],
|
|
177
|
+
employeeCount: this.Retagemployeecount,
|
|
178
|
+
employee: employeeimage ? employeeimage : [],
|
|
179
|
+
customerCount: this.Retagcustomercount,
|
|
180
|
+
zoneName: totalfile?.filedetails?.zoneName ? totalfile?.filedetails?.zoneName : '',
|
|
181
|
+
moduleType: this.selectedType,
|
|
182
|
+
customer: customerimage ? customerimage : [],
|
|
183
|
+
timeSpent: this.timePassed
|
|
184
|
+
};
|
|
185
|
+
this.apiservice.saveaudit(obj).pipe(takeUntil(this.destroy$)).subscribe({
|
|
186
|
+
next: (res) => {
|
|
187
|
+
if (res && res.code == 200) {
|
|
188
|
+
this.toast.getSuccessToast(res?.data?.result);
|
|
189
|
+
this.auth = false;
|
|
190
|
+
this.timerService.resetTimer();
|
|
191
|
+
sessionStorage.removeItem('timeSpent');
|
|
192
|
+
this.closepopup();
|
|
193
|
+
sessionStorage.removeItem('employee');
|
|
194
|
+
sessionStorage.removeItem('junk');
|
|
195
|
+
sessionStorage.removeItem('audit');
|
|
196
|
+
sessionStorage.removeItem('totalfiles');
|
|
197
|
+
sessionStorage.removeItem('retag');
|
|
198
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
this.auth = false;
|
|
202
|
+
if (res && res.code == 203) {
|
|
203
|
+
this.Errormsg = res.error;
|
|
204
|
+
const modalRef = this.modalService.open(this.confirmerror);
|
|
205
|
+
modalRef.result.then((result) => {
|
|
206
|
+
if (result.isConfirmed) {
|
|
207
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
error: (err) => {
|
|
214
|
+
const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Invalid status code: undefined';
|
|
215
|
+
this.toast.getErrorToast(errorMessage);
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
nextfile() {
|
|
220
|
+
this.auth = true;
|
|
221
|
+
let totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
|
|
222
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ totalfile:", totalfile);
|
|
223
|
+
let revisedDetail = [];
|
|
224
|
+
let stringifydata = sessionStorage.getItem('audit') || '{}';
|
|
225
|
+
const decompressedData = LZString.decompress(stringifydata);
|
|
226
|
+
var customer = JSON.parse(decompressedData || '{}');
|
|
227
|
+
customer.map((customerData) => {
|
|
228
|
+
if (customerData.count > 1) {
|
|
229
|
+
// console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ customerData:", customerData)
|
|
230
|
+
let duplicateData = customerData.mappedid.filter((data) => data.img_name != customerData?.img_name);
|
|
231
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ duplicateData:", duplicateData);
|
|
232
|
+
let duplicateImage = [];
|
|
233
|
+
duplicateData.map((dupData) => {
|
|
234
|
+
duplicateImage.push({
|
|
235
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${dupData?.img_name}`,
|
|
236
|
+
"tempId": dupData?.img_name,
|
|
237
|
+
"filePath": dupData?.img_path,
|
|
238
|
+
"isChecked": true
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
let newObj = {
|
|
242
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${customerData?.img_name}`,
|
|
243
|
+
"clientId": totalfile?.filedetails?.clientId,
|
|
244
|
+
"storeId": totalfile?.filedetails?.storeId,
|
|
245
|
+
"tempId": customerData?.img_name,
|
|
246
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
247
|
+
// "timeRange": "11AM-12PM",
|
|
248
|
+
"processType": "footfall",
|
|
249
|
+
"revopsType": "duplicate",
|
|
250
|
+
"filePath": customerData?.img_path,
|
|
251
|
+
"status": "submitted",
|
|
252
|
+
"description": "",
|
|
253
|
+
"isChecked": true,
|
|
254
|
+
"type": "tagging-reflect",
|
|
255
|
+
"parent": null,
|
|
256
|
+
"isParent": true,
|
|
257
|
+
"duplicateImage": duplicateImage
|
|
258
|
+
};
|
|
259
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ newObj:", newObj);
|
|
260
|
+
revisedDetail.push(newObj);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
// console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ customerData:", customerData)
|
|
264
|
+
let newObj = {
|
|
265
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${customerData?.img_name}`,
|
|
266
|
+
"clientId": totalfile?.filedetails?.clientId,
|
|
267
|
+
"storeId": totalfile?.filedetails?.storeId,
|
|
268
|
+
"tempId": customerData?.img_name,
|
|
269
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
270
|
+
"timeRange": "11AM-12PM",
|
|
271
|
+
"processType": "footfall",
|
|
272
|
+
"revopsType": "duplicate",
|
|
273
|
+
"filePath": customerData?.img_path,
|
|
274
|
+
"status": "submitted",
|
|
275
|
+
"description": "",
|
|
276
|
+
"isChecked": true,
|
|
277
|
+
"type": "tagging-reflect",
|
|
278
|
+
"parent": null,
|
|
279
|
+
"isParent": true,
|
|
280
|
+
"duplicateImage": []
|
|
281
|
+
};
|
|
282
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ newObj:", newObj);
|
|
283
|
+
revisedDetail.push(newObj);
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
let count = [];
|
|
287
|
+
this.category.map((data) => {
|
|
288
|
+
count.push({
|
|
289
|
+
name: data.name,
|
|
290
|
+
value: data.count,
|
|
291
|
+
type: data.type
|
|
292
|
+
});
|
|
293
|
+
let filterData = JSON.parse(sessionStorage.getItem(data?.type) || '[]');
|
|
294
|
+
filterData.map((otherData) => {
|
|
295
|
+
let otherObj = {
|
|
296
|
+
"id": `${totalfile?.filedetails?.storeId}_${totalfile?.filedetails?.Date}_${otherData?.img_name}`,
|
|
297
|
+
"clientId": totalfile?.filedetails?.clientId,
|
|
298
|
+
"storeId": totalfile?.filedetails?.storeId,
|
|
299
|
+
"tempId": otherData?.img_name,
|
|
300
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
301
|
+
"processType": "footfall",
|
|
302
|
+
"revopsType": data?.type,
|
|
303
|
+
"filePath": otherData?.img_path,
|
|
304
|
+
"status": "submitted",
|
|
305
|
+
"description": "",
|
|
306
|
+
"isChecked": true,
|
|
307
|
+
"type": "tagging-reflect",
|
|
308
|
+
"parent": null,
|
|
309
|
+
"isParent": false,
|
|
310
|
+
"duplicateImage": []
|
|
311
|
+
};
|
|
312
|
+
revisedDetail.push(otherObj);
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
let ticketType = sessionStorage.getItem('ticketType');
|
|
316
|
+
var obj = {
|
|
317
|
+
"type": "tangoreview",
|
|
318
|
+
"mode": "web",
|
|
319
|
+
"revicedFootfall": this.Retagcustomercount,
|
|
320
|
+
"revicedPerc": Math.round((this.Retagcustomercount / totalfile?.totalfiles) * 100) + "%",
|
|
321
|
+
count: count,
|
|
322
|
+
revisedDetail: revisedDetail
|
|
323
|
+
};
|
|
324
|
+
console.log("🚀 ~ AuditReportPopupComponent ~ nextfile ~ obj:", obj);
|
|
325
|
+
// return
|
|
326
|
+
let payload = {
|
|
327
|
+
storeId: totalfile?.filedetails?.storeId,
|
|
328
|
+
"dateString": totalfile?.filedetails?.Date,
|
|
329
|
+
ticketType: ticketType,
|
|
330
|
+
mappingInfo: obj
|
|
331
|
+
};
|
|
332
|
+
this.apiservice.saveaudit(payload).pipe(takeUntil(this.destroy$)).subscribe({
|
|
333
|
+
next: (res) => {
|
|
334
|
+
if (res && res.code == 200) {
|
|
335
|
+
this.auth = false;
|
|
336
|
+
this.timerService.resetTimer();
|
|
337
|
+
sessionStorage.removeItem('timeSpent');
|
|
338
|
+
this.closepopup();
|
|
339
|
+
sessionStorage.removeItem('employee');
|
|
340
|
+
sessionStorage.removeItem('junk');
|
|
341
|
+
sessionStorage.removeItem('audit');
|
|
342
|
+
sessionStorage.removeItem('totalfiles');
|
|
343
|
+
sessionStorage.removeItem('retag');
|
|
344
|
+
var obj = {
|
|
345
|
+
totalfiles: {}
|
|
346
|
+
};
|
|
347
|
+
obj.totalfiles.queueName = totalfile?.filedetails?.queueName;
|
|
348
|
+
sessionStorage.setItem('totalfiles', JSON.stringify(obj));
|
|
349
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
this.auth = false;
|
|
353
|
+
if (res && res.code == 203) {
|
|
354
|
+
this.Errormsg = res.error;
|
|
355
|
+
const modalRef = this.modalService.open(this.confirmerror);
|
|
356
|
+
modalRef.result.then((result) => {
|
|
357
|
+
if (result.isConfirmed) {
|
|
358
|
+
this.router.navigate(['/manage/tickets'], { queryParams: { type: 'footfall' } });
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
error: (err) => {
|
|
365
|
+
const errorMessage = err?.error?.message || err?.error?.error || err?.message || 'Invalid status code: undefined';
|
|
366
|
+
this.toast.getErrorToast(errorMessage);
|
|
367
|
+
},
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
closepopup() {
|
|
371
|
+
this.activeModal.close();
|
|
372
|
+
}
|
|
373
|
+
reviewdata() {
|
|
374
|
+
this.router.navigate(["/manage/tickets/mapping-list"]);
|
|
375
|
+
this.activeModal.close();
|
|
376
|
+
}
|
|
377
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditReportPopupComponent, deps: [{ token: i1.NgbModal }, { token: i1.NgbActiveModal }, { token: i2.TicketService }, { token: i3.Router }, { token: i4.TimerService }, { token: i0.ChangeDetectorRef }, { token: i5.AuditService }, { token: i3.ActivatedRoute }, { token: i6.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
378
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditReportPopupComponent, selector: "lib-audit-report-popup", inputs: { selectedType: "selectedType" }, viewQueries: [{ propertyName: "confirmerror", first: true, predicate: ["confirmerror"], descendants: true }], ngImport: i0, template: "<div class=\"modal fade show d-block\" tabindex=\"-1\" role=\"dialog\">\r\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\r\n <div class=\"modal-content merge-ticket-modal\">\r\n\r\n <!-- Header -->\r\n <div class=\"modal-header border-0 pb-0\">\r\n <h5 class=\"modal-title\">Close ticket</h5>\r\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"closepopup()\"></button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"modal-body\">\r\n <div *ngIf=\"tangoAccuracy>85&¢ralOpsData?.revicedFootfall\">\r\n <p class=\"mb-0\">The ticket will be <b>\u201Cclosed\u201D</b> and updated in the store as a final revision.</p>\r\n </div>\r\n <div *ngIf=\"tangoAccuracy>85&&!centralOpsData?.revicedFootfall\">\r\n <p class=\"mb-0\">You\u2019re about to close this ticket. Do you want to proceed?</p>\r\n </div>\r\n <!-- Info banner -->\r\n <div class=\"alert merge-info d-flex\" *ngIf=\"tangoAccuracy<85\">\r\n <div class=\"me-3 mt-1\">\r\n <i class=\"bi bi-info-circle\"></i>\r\n </div>\r\n <div>\r\n\r\n <p class=\"mb-0\">\r\n The ticket will be <b>\u201Cclosed\u201D</b> and updated in the store as a final revision.\r\n Since accuracy is below 85%, it will be marked as an <b>\u201COpen-Accuracy Issue\u201D</b> in Tango.\r\n Please add the cause for the low accuracy.\r\n </p>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Cards -->\r\n <div class=\"row g-3 mt-2\">\r\n <!-- Central Ops -->\r\n <div class=\"col-12 col-md-6\" *ngIf=\"centralOpsData?.revicedFootfall\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body\">\r\n <div class=\"card-title mb-3 fw-semibold\">Central Ops</div>\r\n <div class=\"d-flex justify-content-between align-items-end mb-1\">\r\n <div>\r\n <div class=\"value\">{{centralOpsData?.revicedFootfall}}</div>\r\n <div class=\"label\">Footfall</div>\r\n </div>\r\n <div class=\"text-end\">\r\n <div class=\"value text-primary\">\r\n {{centralOpsData?.revicedPerc}}\r\n <span class=\"arrow\"\r\n *ngIf=\"centralOpsData?.revicedFootfall<tangoData?.revicedFootfall\">\r\n \u2193\r\n </span>\r\n <span class=\"arrow\"\r\n *ngIf=\"centralOpsData?.revicedFootfall>tangoData?.revicedFootfall\">\r\n \u2191\r\n </span>\r\n </div>\r\n <div class=\"label\">Accuracy</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tango -->\r\n <div class=\"col-12 col-md-6\" *ngIf=\"tangoData?.revicedFootfall\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body\">\r\n <div class=\"card-title mb-3 fw-semibold\">Tango</div>\r\n <div class=\"d-flex justify-content-between align-items-end mb-1\">\r\n <div>\r\n <div class=\"value\">{{tangoData?.revicedFootfall}}</div>\r\n <div class=\"label\">Footfall</div>\r\n </div>\r\n <div class=\"text-end\">\r\n <div class=\"value text-primary\">\r\n {{tangoData?.revicedPerc}}\r\n <span class=\"arrow\"\r\n *ngIf=\"centralOpsData?.revicedFootfall>tangoData?.revicedFootfall\">\r\n \u2193\r\n </span>\r\n <span class=\"arrow\"\r\n *ngIf=\"centralOpsData?.revicedFootfall<tangoData?.revicedFootfall\">\r\n \u2191\r\n </span>\r\n </div>\r\n <div class=\"label\">Accuracy</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"modal-footer border-0 pt-0\">\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"closepopup()\">\r\n cancel\r\n </button>\r\n <button *ngIf=\"tangoAccuracy>85\" type=\"button\" class=\"btn btn-primary\" (click)=\"nextfile()\">\r\n submit\r\n </button>\r\n <button *ngIf=\"tangoAccuracy<85\" type=\"button\" class=\"btn btn-primary\" (click)=\"nextfile()\">\r\n Review\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.audit-test{font-family:Inter;font-style:normal;font-weight:600!important;font-size:22px!important;line-height:27px;color:#000}.text-gray-500{font-family:Inter;font-style:normal;font-weight:500!important;font-size:14px!important;line-height:17px;color:#5e6278}.ms-25{margin-left:16rem}.text-gray-400{font-family:Inter;font-style:normal;font-weight:500;font-size:14px!important;line-height:17px;letter-spacing:-.02em;color:#676e76}::ng-deep .custom-container .mat-mdc-dialog-container .mdc-dialog__surface{border-radius:10px!important}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}.merge-ticket-modal{border-radius:16px}.merge-info{border:1px dashed #a9c4ff;background:#f5f9ff;border-radius:10px;font-size:13px;color:#008edf}.merge-info i{font-size:18px}.card{border-radius:12px}.card .value{font-size:24px;font-weight:600}.card .label{font-size:12px;color:#6c757d}.arrow{font-size:16px;margin-left:4px}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
379
|
+
}
|
|
380
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditReportPopupComponent, decorators: [{
|
|
381
|
+
type: Component,
|
|
382
|
+
args: [{ selector: 'lib-audit-report-popup', template: "<div class=\"modal fade show d-block\" tabindex=\"-1\" role=\"dialog\">\r\n <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">\r\n <div class=\"modal-content merge-ticket-modal\">\r\n\r\n <!-- Header -->\r\n <div class=\"modal-header border-0 pb-0\">\r\n <h5 class=\"modal-title\">Close ticket</h5>\r\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"closepopup()\"></button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"modal-body\">\r\n <div *ngIf=\"tangoAccuracy>85&¢ralOpsData?.revicedFootfall\">\r\n <p class=\"mb-0\">The ticket will be <b>\u201Cclosed\u201D</b> and updated in the store as a final revision.</p>\r\n </div>\r\n <div *ngIf=\"tangoAccuracy>85&&!centralOpsData?.revicedFootfall\">\r\n <p class=\"mb-0\">You\u2019re about to close this ticket. Do you want to proceed?</p>\r\n </div>\r\n <!-- Info banner -->\r\n <div class=\"alert merge-info d-flex\" *ngIf=\"tangoAccuracy<85\">\r\n <div class=\"me-3 mt-1\">\r\n <i class=\"bi bi-info-circle\"></i>\r\n </div>\r\n <div>\r\n\r\n <p class=\"mb-0\">\r\n The ticket will be <b>\u201Cclosed\u201D</b> and updated in the store as a final revision.\r\n Since accuracy is below 85%, it will be marked as an <b>\u201COpen-Accuracy Issue\u201D</b> in Tango.\r\n Please add the cause for the low accuracy.\r\n </p>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Cards -->\r\n <div class=\"row g-3 mt-2\">\r\n <!-- Central Ops -->\r\n <div class=\"col-12 col-md-6\" *ngIf=\"centralOpsData?.revicedFootfall\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body\">\r\n <div class=\"card-title mb-3 fw-semibold\">Central Ops</div>\r\n <div class=\"d-flex justify-content-between align-items-end mb-1\">\r\n <div>\r\n <div class=\"value\">{{centralOpsData?.revicedFootfall}}</div>\r\n <div class=\"label\">Footfall</div>\r\n </div>\r\n <div class=\"text-end\">\r\n <div class=\"value text-primary\">\r\n {{centralOpsData?.revicedPerc}}\r\n <span class=\"arrow\"\r\n *ngIf=\"centralOpsData?.revicedFootfall<tangoData?.revicedFootfall\">\r\n \u2193\r\n </span>\r\n <span class=\"arrow\"\r\n *ngIf=\"centralOpsData?.revicedFootfall>tangoData?.revicedFootfall\">\r\n \u2191\r\n </span>\r\n </div>\r\n <div class=\"label\">Accuracy</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tango -->\r\n <div class=\"col-12 col-md-6\" *ngIf=\"tangoData?.revicedFootfall\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-body\">\r\n <div class=\"card-title mb-3 fw-semibold\">Tango</div>\r\n <div class=\"d-flex justify-content-between align-items-end mb-1\">\r\n <div>\r\n <div class=\"value\">{{tangoData?.revicedFootfall}}</div>\r\n <div class=\"label\">Footfall</div>\r\n </div>\r\n <div class=\"text-end\">\r\n <div class=\"value text-primary\">\r\n {{tangoData?.revicedPerc}}\r\n <span class=\"arrow\"\r\n *ngIf=\"centralOpsData?.revicedFootfall>tangoData?.revicedFootfall\">\r\n \u2193\r\n </span>\r\n <span class=\"arrow\"\r\n *ngIf=\"centralOpsData?.revicedFootfall<tangoData?.revicedFootfall\">\r\n \u2191\r\n </span>\r\n </div>\r\n <div class=\"label\">Accuracy</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"modal-footer border-0 pt-0\">\r\n <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"closepopup()\">\r\n cancel\r\n </button>\r\n <button *ngIf=\"tangoAccuracy>85\" type=\"button\" class=\"btn btn-primary\" (click)=\"nextfile()\">\r\n submit\r\n </button>\r\n <button *ngIf=\"tangoAccuracy<85\" type=\"button\" class=\"btn btn-primary\" (click)=\"nextfile()\">\r\n Review\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.audit-test{font-family:Inter;font-style:normal;font-weight:600!important;font-size:22px!important;line-height:27px;color:#000}.text-gray-500{font-family:Inter;font-style:normal;font-weight:500!important;font-size:14px!important;line-height:17px;color:#5e6278}.ms-25{margin-left:16rem}.text-gray-400{font-family:Inter;font-style:normal;font-weight:500;font-size:14px!important;line-height:17px;letter-spacing:-.02em;color:#676e76}::ng-deep .custom-container .mat-mdc-dialog-container .mdc-dialog__surface{border-radius:10px!important}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}.merge-ticket-modal{border-radius:16px}.merge-info{border:1px dashed #a9c4ff;background:#f5f9ff;border-radius:10px;font-size:13px;color:#008edf}.merge-info i{font-size:18px}.card{border-radius:12px}.card .value{font-size:24px;font-weight:600}.card .label{font-size:12px;color:#6c757d}.arrow{font-size:16px;margin-left:4px}\n"] }]
|
|
383
|
+
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i1.NgbActiveModal }, { type: i2.TicketService }, { type: i3.Router }, { type: i4.TimerService }, { type: i0.ChangeDetectorRef }, { type: i5.AuditService }, { type: i3.ActivatedRoute }, { type: i6.ToastService }], propDecorators: { selectedType: [{
|
|
384
|
+
type: Input
|
|
385
|
+
}], confirmerror: [{
|
|
386
|
+
type: ViewChild,
|
|
387
|
+
args: ['confirmerror']
|
|
388
|
+
}] } });
|
|
389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1yZXBvcnQtcG9wdXAvYXVkaXQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1yZXBvcnQtcG9wdXAvYXVkaXQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFBMkMsTUFBTSxlQUFlLENBQUM7QUFHN0csT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFHdEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFTeEQsTUFBTSxPQUFPLHlCQUF5QjtJQXVCakI7SUFDVjtJQUNDO0lBQ0Q7SUFBd0I7SUFBb0M7SUFDNUQ7SUFBa0M7SUFBK0I7SUF6QjFFLGNBQWMsR0FBUSxDQUFDLENBQUM7SUFDeEIsa0JBQWtCLEdBQVEsQ0FBQyxDQUFDO0lBQzVCLGtCQUFrQixHQUFRLENBQUMsQ0FBQztJQUM1QixnQkFBZ0IsQ0FBTTtJQUN0QixhQUFhLENBQU07SUFDbkIsaUJBQWlCLENBQU07SUFDdkIsaUJBQWlCLENBQU07SUFDdkIsVUFBVSxDQUFNO0lBQ2hCLElBQUksR0FBWSxLQUFLLENBQUM7SUFDdEIsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixRQUFRLEdBQVEsRUFBRSxDQUFDO0lBQ1YsWUFBWSxDQUFNO0lBQ0EsWUFBWSxDQUFNO0lBQzVCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDdkIsWUFBWSxHQUF3QixJQUFJLENBQUM7SUFDekMsYUFBYSxHQUFXLFVBQVUsQ0FBQztJQUNuQyxRQUFRLEdBQVEsRUFBRSxDQUFBO0lBQ2xCLGNBQWMsQ0FBTTtJQUNwQixTQUFTLENBQU07SUFDZixhQUFhLEdBQUssRUFBRSxDQUFBO0lBQ3BCLFlBQW1CLFlBQXNCLEVBQ2hDLFdBQTJCLEVBQzFCLE9BQXNCLEVBQ3ZCLE1BQWMsRUFBVSxZQUEwQixFQUFVLEVBQXFCLEVBQ2pGLFVBQXdCLEVBQVUsS0FBcUIsRUFBVSxLQUFtQjtRQUoxRSxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNqRixlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFjO0lBQ3pGLENBQUM7SUFFTCxRQUFRO1FBQ04sSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO1FBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDdkcsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUE7b0JBR25FLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7d0JBQzlCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7d0JBQ3ZFLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFBO3dCQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFBO29CQUNsQyxDQUFDLENBQUMsQ0FBQTtvQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLDREQUE0RCxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDeEYsSUFBSSxhQUFhLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUE7b0JBQzNELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDNUQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsQ0FBQTtvQkFDbkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUE7b0JBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOERBQThELEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO29CQUM1RixJQUFJLEtBQUssR0FBRzt3QkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTzt3QkFDOUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLElBQUk7cUJBQy9DLENBQUE7b0JBQ0QsSUFBSSxDQUFDLE9BQU87eUJBQ1QsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7eUJBQ3ZELFNBQVMsQ0FBQzt3QkFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTs0QkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUU7Z0NBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO2dDQUNyQixJQUFJLFVBQVUsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFBO2dDQUMxQixJQUFJLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFBO2dDQUN4SSxJQUFJLGVBQWUsSUFBSSxlQUFlLEVBQUUsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0NBQzlELElBQUksQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7b0NBQ3RHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0VBQWtFLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO2lDQUNyRztnQ0FDRCxJQUFJLENBQUMsYUFBYSxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBQyxHQUFHLENBQUMsQ0FBQTtnQ0FDM0YsSUFBSSxDQUFDLFNBQVMsR0FBRTtvQ0FDZCxlQUFlLEVBQUMsSUFBSSxDQUFDLGtCQUFrQjtvQ0FDdkMsV0FBVyxFQUFDLElBQUksQ0FBQyxhQUFhLEdBQUMsR0FBRztpQ0FDbkMsQ0FBQTs2QkFDRjt3QkFDSCxDQUFDO3FCQUNGLENBQUMsQ0FBQTtpQkFLTDtZQUNILENBQUM7U0FDRixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNwRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2hFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDckUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsc0JBQXNCLEdBQUcsR0FBUyxFQUFFO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDakMsQ0FBQyxDQUFBO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN2RSxRQUFRLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25FLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDeEUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBQ2hDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxTQUFTLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBRTlFLElBQUksU0FBUyxHQUFRLEVBQUUsQ0FBQztRQUN4QixJQUFJLGFBQWEsR0FBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDaEMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ3JELE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNwQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ3BDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNyRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDcEMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUVwQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDbEIsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFBO2dCQUNuQixDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUE7Z0JBQ3ZCLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDdkQsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUN0QjtZQUNELElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQzFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDbEIsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFBO2dCQUNuQixDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUE7Z0JBQ3ZCLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDdkQsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxHQUFHLEdBQVE7WUFDYixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPO1lBQ2xGLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVE7WUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSTtZQUN2QyxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTO1lBQzNDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVTtZQUNsQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDOUIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLGFBQWEsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQ3RDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM1QyxhQUFhLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUN0QyxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xGLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUM3QixRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzNCLENBQUE7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN0RSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7b0JBQzdDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFBO29CQUM5QixjQUFjLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFBO29CQUN0QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7b0JBQ2pCLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7b0JBQ3JDLGNBQWMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7b0JBQ2pDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7b0JBQ2xDLGNBQWMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUE7b0JBQ3ZDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7b0JBRWxDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7aUJBRWpGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUNsQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTt3QkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFBO3dCQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7d0JBQzFELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7NEJBQzlCLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtnQ0FDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQTs2QkFDakY7d0JBQ0gsQ0FBQyxDQUFDLENBQUE7cUJBQ0g7aUJBQ0Y7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxnQ0FBZ0MsQ0FBQztnQkFDbEgsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDekMsQ0FBQztTQUVGLENBQUMsQ0FBQTtJQUVKLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxTQUFTLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzlFLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0RBQXdELEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDaEYsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFBO1FBQzNCLElBQUksYUFBYSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFBO1FBQzNELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxDQUFBO1FBQ25ELFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7WUFDakMsSUFBSSxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtnQkFDMUIseUZBQXlGO2dCQUN6RixJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUE7Z0JBQ3hHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNERBQTRELEVBQUUsYUFBYSxDQUFDLENBQUE7Z0JBQ3hGLElBQUksY0FBYyxHQUFRLEVBQUUsQ0FBQTtnQkFDNUIsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO29CQUNqQyxjQUFjLENBQUMsSUFBSSxDQUNqQjt3QkFDRSxJQUFJLEVBQUUsR0FBRyxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sSUFBSSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksSUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFO3dCQUMvRixRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVE7d0JBQzNCLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUTt3QkFDN0IsV0FBVyxFQUFFLElBQUk7cUJBQ2xCLENBQ0YsQ0FBQTtnQkFFSCxDQUFDLENBQUMsQ0FBQTtnQkFDRixJQUFJLE1BQU0sR0FBUTtvQkFDaEIsSUFBSSxFQUFFLEdBQUcsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLElBQUksU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLElBQUksWUFBWSxFQUFFLFFBQVEsRUFBRTtvQkFDcEcsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUTtvQkFDNUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTztvQkFDMUMsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRO29CQUNoQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJO29CQUMxQyw0QkFBNEI7b0JBQzVCLGFBQWEsRUFBRSxVQUFVO29CQUN6QixZQUFZLEVBQUUsV0FBVztvQkFDekIsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRO29CQUNsQyxRQUFRLEVBQUUsV0FBVztvQkFDckIsYUFBYSxFQUFFLEVBQUU7b0JBQ2pCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixNQUFNLEVBQUUsaUJBQWlCO29CQUN6QixRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZ0JBQWdCLEVBQUUsY0FBYztpQkFDakMsQ0FBQTtnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLHFEQUFxRCxFQUFFLE1BQU0sQ0FBQyxDQUFBO2dCQUMxRSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2FBQzNCO2lCQUFNO2dCQUNMLHlGQUF5RjtnQkFDekYsSUFBSSxNQUFNLEdBQVE7b0JBQ2hCLElBQUksRUFBRSxHQUFHLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxJQUFJLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLFlBQVksRUFBRSxRQUFRLEVBQUU7b0JBQ3BHLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVE7b0JBQzVDLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU87b0JBQzFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUTtvQkFDaEMsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSTtvQkFDMUMsV0FBVyxFQUFFLFdBQVc7b0JBQ3hCLGFBQWEsRUFBRSxVQUFVO29CQUN6QixZQUFZLEVBQUUsV0FBVztvQkFDekIsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRO29CQUNsQyxRQUFRLEVBQUUsV0FBVztvQkFDckIsYUFBYSxFQUFFLEVBQUU7b0JBQ2pCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixNQUFNLEVBQUUsaUJBQWlCO29CQUN6QixRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZ0JBQWdCLEVBQUUsRUFBRTtpQkFDckIsQ0FBQTtnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLHFEQUFxRCxFQUFFLE1BQU0sQ0FBQyxDQUFBO2dCQUMxRSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2FBQzNCO1FBR0gsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLEtBQUssR0FBUSxFQUFFLENBQUE7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNULElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNoQixDQUFDLENBQUE7WUFDRixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO1lBRXZFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtnQkFFaEMsSUFBSSxRQUFRLEdBQVE7b0JBQ2xCLElBQUksRUFBRSxHQUFHLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxJQUFJLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLFNBQVMsRUFBRSxRQUFRLEVBQUU7b0JBQ2pHLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVE7b0JBQzVDLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU87b0JBQzFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUTtvQkFDN0IsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSTtvQkFDMUMsYUFBYSxFQUFFLFVBQVU7b0JBQ3pCLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSTtvQkFDeEIsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRO29CQUMvQixRQUFRLEVBQUUsV0FBVztvQkFDckIsYUFBYSxFQUFFLEVBQUU7b0JBQ2pCLFdBQVcsRUFBRSxJQUFJO29CQUNqQixNQUFNLEVBQUUsaUJBQWlCO29CQUN6QixRQUFRLEVBQUUsSUFBSTtvQkFDZCxVQUFVLEVBQUUsS0FBSztvQkFDakIsZ0JBQWdCLEVBQUUsRUFBRTtpQkFDckIsQ0FBQTtnQkFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzlCLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7UUFHRixJQUFJLFVBQVUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRXJELElBQUksR0FBRyxHQUFRO1lBQ2IsTUFBTSxFQUFFLGFBQWE7WUFDckIsTUFBTSxFQUFFLEtBQUs7WUFDYixpQkFBaUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBRTFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHO1lBQ3hGLEtBQUssRUFBRSxLQUFLO1lBQ1osYUFBYSxFQUFFLGFBQWE7U0FDN0IsQ0FBQTtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0RBQWtELEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDcEUsU0FBUztRQUNULElBQUksT0FBTyxHQUFHO1lBQ1osT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTztZQUN4QyxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJO1lBQzFDLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFdBQVcsRUFBRSxHQUFHO1NBQ2pCLENBQUE7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMxRSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFBO29CQUM5QixjQUFjLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFBO29CQUN0QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7b0JBQ2pCLGNBQWMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUE7b0JBQ3JDLGNBQWMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7b0JBQ2pDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7b0JBQ2xDLGNBQWMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUE7b0JBQ3ZDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7b0JBQ2xDLElBQUksR0FBRyxHQUFRO3dCQUNiLFVBQVUsRUFBRSxFQUNYO3FCQUNGLENBQUE7b0JBQ0QsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUE7b0JBQzVELGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtvQkFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQTtpQkFFakY7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7b0JBQ2xCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO3dCQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUE7d0JBQ3pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTt3QkFDMUQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTs0QkFDOUIsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO2dDQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBOzZCQUNqRjt3QkFDSCxDQUFDLENBQUMsQ0FBQTtxQkFDSDtpQkFDRjtZQUVILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLGdDQUFnQyxDQUFDO2dCQUNsSCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN6QyxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUE7UUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQTNYVSx5QkFBeUI7NEZBQXpCLHlCQUF5QixzTkNmdEMsaXRNQThHTTs7NEZEL0ZPLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx3QkFBd0I7eVNBaUJ6QixZQUFZO3NCQUFwQixLQUFLO2dCQUNxQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbnB1dCwgdmlld0NoaWxkLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsLCBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXVkaXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXVkaXQuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIExaU3RyaW5nIGZyb20gJ2x6LXN0cmluZyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVGltZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGltZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRpY2tldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aWNrZXQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hdWRpdC1yZXBvcnQtcG9wdXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdWRpdC1yZXBvcnQtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hdWRpdC1yZXBvcnQtcG9wdXAuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBSZXRhZ2p1bmtjb3VudDogYW55ID0gMDtcclxuICBSZXRhZ2VtcGxveWVlY291bnQ6IGFueSA9IDA7XHJcbiAgUmV0YWdjdXN0b21lcmNvdW50OiBhbnkgPSAwO1xyXG4gIGRlbW9ncmFwaGljQ291bnQ6IGFueTtcclxuICByZXRhZ2p1bmtkYXRhOiBhbnk7XHJcbiAgcmV0YWdlbXBsb3llZWRhdGE6IGFueTtcclxuICByZXRhZ2N1c3RvbWVyZGF0YTogYW55O1xyXG4gIHRvdGFsZmlsZXM6IGFueTtcclxuICBhdXRoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3VibWl0YXV0aDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEVycm9ybXNnOiBhbnkgPSAnJztcclxuICBASW5wdXQoKSBzZWxlY3RlZFR5cGU6IGFueTtcclxuICBAVmlld0NoaWxkKCdjb25maXJtZXJyb3InKSBjb25maXJtZXJyb3I6IGFueTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICB0aW1lUGFzc2VkOiBudW1iZXIgPSAwO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgZm9ybWF0dGVkVGltZTogc3RyaW5nID0gJzAwOjAwOjAwJztcclxuICBjYXRlZ29yeTogYW55ID0gW11cclxuICBjZW50cmFsT3BzRGF0YTogYW55O1xyXG4gIHRhbmdvRGF0YTogYW55O1xyXG4gIHRhbmdvQWNjdXJhY3k6YW55PScnXHJcbiAgY29uc3RydWN0b3IocHVibGljIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBUaWNrZXRTZXJ2aWNlLFxyXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHRpbWVyU2VydmljZTogVGltZXJTZXJ2aWNlLCBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBhcGlzZXJ2aWNlOiBBdWRpdFNlcnZpY2UsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGxldCBmaWxlZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndG90YWxmaWxlcycpIHx8ICd7fScpXHJcbiAgICB0aGlzLnRvdGFsZmlsZXMgPSBmaWxlZGF0YTtcclxuICAgIHRoaXMuYXBpc2VydmljZS5nZXRBdWRpdGNvbmZpZyhmaWxlZGF0YT8uZmlsZWRldGFpbHM/LmNsaWVudElkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXM/LmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5ID0gcmVzLmRhdGEuZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzLnRhZ2dpbmdMaW1pdGF0aW9uXHJcblxyXG5cclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcnkubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZpbHRlckRhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZGF0YT8udHlwZSkgfHwgJ3t9JylcclxuICAgICAgICAgICAgZGF0YS52YWx1ZSA9IGZpbHRlckRhdGFcclxuICAgICAgICAgICAgZGF0YS5jb3VudCA9IGRhdGE/LnZhbHVlPy5sZW5ndGhcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH4gbmdPbkluaXQgfiB0aGlzLmNhdGVnb3J5OlwiLCB0aGlzLmNhdGVnb3J5KVxyXG4gICAgICAgICAgbGV0IHN0cmluZ2lmeWRhdGEgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhdWRpdCcpIHx8ICd7fSdcclxuICAgICAgICAgIGNvbnN0IGRlY29tcHJlc3NlZERhdGEgPSBMWlN0cmluZy5kZWNvbXByZXNzKHN0cmluZ2lmeWRhdGEpO1xyXG4gICAgICAgICAgdmFyIGN1c3RvbWVyID0gSlNPTi5wYXJzZShkZWNvbXByZXNzZWREYXRhIHx8ICd7fScpXHJcbiAgICAgICAgICB0aGlzLlJldGFnY3VzdG9tZXJjb3VudCA9IGN1c3RvbWVyLmxlbmd0aFxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5nT25Jbml0IH4gdGhpcy50b3RhbGZpbGVzOlwiLCB0aGlzLnRvdGFsZmlsZXMpXHJcbiAgICAgICAgICBsZXQgaW5wdXQgPSB7XHJcbiAgICAgICAgICAgIHN0b3JlSWQ6IHRoaXMudG90YWxmaWxlcz8uZmlsZWRldGFpbHM/LnN0b3JlSWQsXHJcbiAgICAgICAgICAgIGRhdGVTdHJpbmc6IHRoaXMudG90YWxmaWxlcz8uZmlsZWRldGFpbHM/LkRhdGUsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgICAgLmNoZWNrVGlja2V0RXhpc3RzKGlucHV0KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcz8uY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcy5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICBsZXQgdGlja2V0TGlzdCA9IHJlcz8uZGF0YVxyXG4gICAgICAgICAgICAgICAgICBsZXQgZmluZHN0b3JldGlja2V0ID0gdGlja2V0TGlzdC5maWx0ZXIoKGRhdGE6IGFueSkgPT4gZGF0YT8uX3NvdXJjZT8udHlwZSA9PT0gJ3N0b3JlJyAmJiBkYXRhPy5fc291cmNlPy5zdGF0dXMgIT0gXCJDbG9zZWRcIilbMF0/Ll9zb3VyY2VcclxuICAgICAgICAgICAgICAgICAgaWYgKGZpbmRzdG9yZXRpY2tldCAmJiBmaW5kc3RvcmV0aWNrZXQ/Lm1hcHBpbmdJbmZvLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNlbnRyYWxPcHNEYXRhID0gZmluZHN0b3JldGlja2V0Lm1hcHBpbmdJbmZvLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhLnR5cGUgIT0gXCJ0YW5nb3Jldmlld1wiKVswXVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IFRpY2tldGNsb3NlcG9wdXBDb21wb25lbnQgfiBuZ09uSW5pdCB+IHRoaXMuY2VudHJhbE9wc0RhdGE6XCIsIHRoaXMuY2VudHJhbE9wc0RhdGEpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy50YW5nb0FjY3VyYWN5ICA9IE1hdGgucm91bmQoKHRoaXMuUmV0YWdjdXN0b21lcmNvdW50L3RoaXMudG90YWxmaWxlcz8udG90YWxmaWxlcykqMTAwKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnRhbmdvRGF0YSA9e1xyXG4gICAgICAgICAgICAgICAgICAgIHJldmljZWRGb290ZmFsbDp0aGlzLlJldGFnY3VzdG9tZXJjb3VudCxcclxuICAgICAgICAgICAgICAgICAgICByZXZpY2VkUGVyYzp0aGlzLnRhbmdvQWNjdXJhY3krXCIlXCJcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5zZXRUaW1lcigpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGltZXIoKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMudGltZXJTZXJ2aWNlLmdldFRpbWVQYXNzZWQoKS5zdWJzY3JpYmUodGltZSA9PiB7XHJcbiAgICAgIHRoaXMudGltZVBhc3NlZCA9IHRpbWU7XHJcbiAgICAgIHRoaXMuZm9ybWF0dGVkVGltZSA9IHRoaXMudGltZXJTZXJ2aWNlLmZvcm1hdFRpbWUodGltZSk7XHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRpbWVyU2VydmljZS5zdGFydFRpbWVyKCk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlR2xvYmFsTW91c2VFdmVudCA9ICgpOiB2b2lkID0+IHtcclxuICAgIHRoaXMudGltZXJTZXJ2aWNlLnN0YXJ0VGltZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIHRoaXMudGltZXJTZXJ2aWNlLmNsZWFyVGltZXIoKVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlYnJhbmQoKSB7XHJcbiAgICB0aGlzLmF1dGggPSB0cnVlO1xyXG4gICAgdmFyIHRvdGFsZmlsZTogYW55ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b3RhbGZpbGVzJykgfHwgJ3t9Jyk7XHJcblxyXG4gICAgbGV0IGp1bmtpbWFnZTogYW55ID0gW107XHJcbiAgICBsZXQgZW1wbG95ZWVpbWFnZTogYW55ID0gW107XHJcbiAgICBsZXQgY3VzdG9tZXJpbWFnZTogYW55ID0gW107XHJcblxyXG4gICAgdGhpcy5yZXRhZ2p1bmtkYXRhLm1hcCgoZTogYW55KSA9PiB7XHJcbiAgICAgIGRlbGV0ZSBlLmltZ19wYXRoOyBkZWxldGUgZS5zZWxlY3RlZDsgZGVsZXRlIGUuY291bnQ7XHJcbiAgICAgIGRlbGV0ZSBlLmRyb3BwZWQ7IGRlbGV0ZSBlLm1hcHBlZGlkO1xyXG4gICAgICBqdW5raW1hZ2UucHVzaChlKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLnJldGFnZW1wbG95ZWVkYXRhLm1hcCgoZTogYW55KSA9PiB7XHJcbiAgICAgIGRlbGV0ZSBlLmltZ19wYXRoOyBkZWxldGUgZS5zZWxlY3RlZDsgZGVsZXRlIGUuY291bnQ7XHJcbiAgICAgIGRlbGV0ZSBlLmRyb3BwZWQ7IGRlbGV0ZSBlLm1hcHBlZGlkO1xyXG4gICAgICBlbXBsb3llZWltYWdlLnB1c2goZSk7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMucmV0YWdjdXN0b21lcmRhdGEubWFwKChlOiBhbnkpID0+IHtcclxuXHJcbiAgICAgIGlmIChlLmNvdW50ID4gMSkge1xyXG4gICAgICAgIGRlbGV0ZSBlLmltZ19wYXRoO1xyXG4gICAgICAgIGRlbGV0ZSBlLnNlbGVjdGVkO1xyXG4gICAgICAgIGRlbGV0ZSBlLmRyb3BwZWQ7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGUubWFwcGVkaWQ7XHJcbiAgICAgICAgZS5tYXBwZWRpZCA9IHJlc3VsdFxyXG4gICAgICAgIGUuY291bnQgPSByZXN1bHQubGVuZ3RoXHJcbiAgICAgICAgZS5tYXBwZWRpZC5mb3JFYWNoKChlMTogYW55KSA9PiB7IGRlbGV0ZSBlMS5pbWdfcGF0aCB9KVxyXG4gICAgICAgIGN1c3RvbWVyaW1hZ2UucHVzaChlKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlLmRlbW9ncmFwaGljID09PSAnZCcgJiYgZS5jb3VudCA9PT0gMSkge1xyXG4gICAgICAgIGRlbGV0ZSBlLmltZ19wYXRoO1xyXG4gICAgICAgIGRlbGV0ZSBlLnNlbGVjdGVkO1xyXG4gICAgICAgIGRlbGV0ZSBlLmRyb3BwZWQ7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGUubWFwcGVkaWQ7XHJcbiAgICAgICAgZS5tYXBwZWRpZCA9IHJlc3VsdFxyXG4gICAgICAgIGUuY291bnQgPSByZXN1bHQubGVuZ3RoXHJcbiAgICAgICAgZS5tYXBwZWRpZC5mb3JFYWNoKChlMTogYW55KSA9PiB7IGRlbGV0ZSBlMS5pbWdfcGF0aCB9KVxyXG4gICAgICAgIGN1c3RvbWVyaW1hZ2UucHVzaChlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdmFyIG9iajogYW55ID0ge1xyXG4gICAgICBhdWRpdElkOiB0b3RhbGZpbGU/LmF1ZGl0SWQgPyB0b3RhbGZpbGU/LmF1ZGl0SWQgOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5hdWRpdElkLFxyXG4gICAgICBzdG9yZUlkOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZV9pZCxcclxuICAgICAgYXVkaXRUeXBlOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy50eXBlLFxyXG4gICAgICBmaWxlRGF0ZTogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uZmlsZV9kYXRlLFxyXG4gICAgICBiZWZvcmVDb3VudDogdG90YWxmaWxlPy50b3RhbGZpbGVzLFxyXG4gICAgICBqdW5rQ291bnQ6IHRoaXMuUmV0YWdqdW5rY291bnQsXHJcbiAgICAgIGp1bms6IGp1bmtpbWFnZSA/IGp1bmtpbWFnZSA6IFtdLFxyXG4gICAgICBlbXBsb3llZUNvdW50OiB0aGlzLlJldGFnZW1wbG95ZWVjb3VudCxcclxuICAgICAgZW1wbG95ZWU6IGVtcGxveWVlaW1hZ2UgPyBlbXBsb3llZWltYWdlIDogW10sXHJcbiAgICAgIGN1c3RvbWVyQ291bnQ6IHRoaXMuUmV0YWdjdXN0b21lcmNvdW50LFxyXG4gICAgICB6b25lTmFtZTogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uem9uZU5hbWUgPyB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy56b25lTmFtZSA6ICcnLFxyXG4gICAgICBtb2R1bGVUeXBlOiB0aGlzLnNlbGVjdGVkVHlwZSxcclxuICAgICAgY3VzdG9tZXI6IGN1c3RvbWVyaW1hZ2UgPyBjdXN0b21lcmltYWdlIDogW10sXHJcbiAgICAgIHRpbWVTcGVudDogdGhpcy50aW1lUGFzc2VkXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcGlzZXJ2aWNlLnNhdmVhdWRpdChvYmopLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzPy5kYXRhPy5yZXN1bHQpXHJcbiAgICAgICAgICB0aGlzLmF1dGggPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudGltZXJTZXJ2aWNlLnJlc2V0VGltZXIoKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndGltZVNwZW50JylcclxuICAgICAgICAgIHRoaXMuY2xvc2Vwb3B1cCgpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlbXBsb3llZScpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdqdW5rJylcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2F1ZGl0JylcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RvdGFsZmlsZXMnKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgncmV0YWcnKVxyXG5cclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90aWNrZXRzJ10sIHsgcXVlcnlQYXJhbXM6IHsgdHlwZTogJ2Zvb3RmYWxsJyB9IH0pXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmF1dGggPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRXJyb3Jtc2cgPSByZXMuZXJyb3JcclxuICAgICAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuY29uZmlybWVycm9yKVxyXG4gICAgICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RpY2tldHMnXSwgeyBxdWVyeVBhcmFtczogeyB0eXBlOiAnZm9vdGZhbGwnIH0gfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5lcnJvcj8uZXJyb3IgfHwgZXJyPy5tZXNzYWdlIHx8ICdJbnZhbGlkIHN0YXR1cyBjb2RlOiB1bmRlZmluZWQnO1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnJvck1lc3NhZ2UpO1xyXG4gICAgICB9LFxyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgbmV4dGZpbGUoKSB7XHJcbiAgICB0aGlzLmF1dGggPSB0cnVlO1xyXG4gICAgbGV0IHRvdGFsZmlsZTogYW55ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b3RhbGZpbGVzJykgfHwgJ3t9Jyk7XHJcbiAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH4gbmV4dGZpbGUgfiB0b3RhbGZpbGU6XCIsIHRvdGFsZmlsZSlcclxuICAgIGxldCByZXZpc2VkRGV0YWlsOiBhbnkgPSBbXVxyXG4gICAgbGV0IHN0cmluZ2lmeWRhdGEgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhdWRpdCcpIHx8ICd7fSdcclxuICAgIGNvbnN0IGRlY29tcHJlc3NlZERhdGEgPSBMWlN0cmluZy5kZWNvbXByZXNzKHN0cmluZ2lmeWRhdGEpO1xyXG4gICAgdmFyIGN1c3RvbWVyID0gSlNPTi5wYXJzZShkZWNvbXByZXNzZWREYXRhIHx8ICd7fScpXHJcbiAgICBjdXN0b21lci5tYXAoKGN1c3RvbWVyRGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChjdXN0b21lckRhdGEuY291bnQgPiAxKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5leHRmaWxlIH4gY3VzdG9tZXJEYXRhOlwiLCBjdXN0b21lckRhdGEpXHJcbiAgICAgICAgbGV0IGR1cGxpY2F0ZURhdGEgPSBjdXN0b21lckRhdGEubWFwcGVkaWQuZmlsdGVyKChkYXRhOiBhbnkpID0+IGRhdGEuaW1nX25hbWUgIT0gY3VzdG9tZXJEYXRhPy5pbWdfbmFtZSlcclxuICAgICAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH4gbmV4dGZpbGUgfiBkdXBsaWNhdGVEYXRhOlwiLCBkdXBsaWNhdGVEYXRhKVxyXG4gICAgICAgIGxldCBkdXBsaWNhdGVJbWFnZTogYW55ID0gW11cclxuICAgICAgICBkdXBsaWNhdGVEYXRhLm1hcCgoZHVwRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICBkdXBsaWNhdGVJbWFnZS5wdXNoKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJpZFwiOiBgJHt0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkfV8ke3RvdGFsZmlsZT8uZmlsZWRldGFpbHM/LkRhdGV9XyR7ZHVwRGF0YT8uaW1nX25hbWV9YCxcclxuICAgICAgICAgICAgICBcInRlbXBJZFwiOiBkdXBEYXRhPy5pbWdfbmFtZSxcclxuICAgICAgICAgICAgICBcImZpbGVQYXRoXCI6IGR1cERhdGE/LmltZ19wYXRoLFxyXG4gICAgICAgICAgICAgIFwiaXNDaGVja2VkXCI6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG5cclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCBuZXdPYmo6IGFueSA9IHtcclxuICAgICAgICAgIFwiaWRcIjogYCR7dG90YWxmaWxlPy5maWxlZGV0YWlscz8uc3RvcmVJZH1fJHt0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5EYXRlfV8ke2N1c3RvbWVyRGF0YT8uaW1nX25hbWV9YCxcclxuICAgICAgICAgIFwiY2xpZW50SWRcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uY2xpZW50SWQsXHJcbiAgICAgICAgICBcInN0b3JlSWRcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uc3RvcmVJZCxcclxuICAgICAgICAgIFwidGVtcElkXCI6IGN1c3RvbWVyRGF0YT8uaW1nX25hbWUsXHJcbiAgICAgICAgICBcImRhdGVTdHJpbmdcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZSxcclxuICAgICAgICAgIC8vIFwidGltZVJhbmdlXCI6IFwiMTFBTS0xMlBNXCIsXHJcbiAgICAgICAgICBcInByb2Nlc3NUeXBlXCI6IFwiZm9vdGZhbGxcIixcclxuICAgICAgICAgIFwicmV2b3BzVHlwZVwiOiBcImR1cGxpY2F0ZVwiLFxyXG4gICAgICAgICAgXCJmaWxlUGF0aFwiOiBjdXN0b21lckRhdGE/LmltZ19wYXRoLFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjogXCJzdWJtaXR0ZWRcIixcclxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgIFwiaXNDaGVja2VkXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJ0YWdnaW5nLXJlZmxlY3RcIixcclxuICAgICAgICAgIFwicGFyZW50XCI6IG51bGwsXHJcbiAgICAgICAgICBcImlzUGFyZW50XCI6IHRydWUsXHJcbiAgICAgICAgICBcImR1cGxpY2F0ZUltYWdlXCI6IGR1cGxpY2F0ZUltYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IEF1ZGl0UmVwb3J0UG9wdXBDb21wb25lbnQgfiBuZXh0ZmlsZSB+IG5ld09iajpcIiwgbmV3T2JqKVxyXG4gICAgICAgIHJldmlzZWREZXRhaWwucHVzaChuZXdPYmopXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5leHRmaWxlIH4gY3VzdG9tZXJEYXRhOlwiLCBjdXN0b21lckRhdGEpXHJcbiAgICAgICAgbGV0IG5ld09iajogYW55ID0ge1xyXG4gICAgICAgICAgXCJpZFwiOiBgJHt0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkfV8ke3RvdGFsZmlsZT8uZmlsZWRldGFpbHM/LkRhdGV9XyR7Y3VzdG9tZXJEYXRhPy5pbWdfbmFtZX1gLFxyXG4gICAgICAgICAgXCJjbGllbnRJZFwiOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5jbGllbnRJZCxcclxuICAgICAgICAgIFwic3RvcmVJZFwiOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkLFxyXG4gICAgICAgICAgXCJ0ZW1wSWRcIjogY3VzdG9tZXJEYXRhPy5pbWdfbmFtZSxcclxuICAgICAgICAgIFwiZGF0ZVN0cmluZ1wiOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5EYXRlLFxyXG4gICAgICAgICAgXCJ0aW1lUmFuZ2VcIjogXCIxMUFNLTEyUE1cIixcclxuICAgICAgICAgIFwicHJvY2Vzc1R5cGVcIjogXCJmb290ZmFsbFwiLFxyXG4gICAgICAgICAgXCJyZXZvcHNUeXBlXCI6IFwiZHVwbGljYXRlXCIsXHJcbiAgICAgICAgICBcImZpbGVQYXRoXCI6IGN1c3RvbWVyRGF0YT8uaW1nX3BhdGgsXHJcbiAgICAgICAgICBcInN0YXR1c1wiOiBcInN1Ym1pdHRlZFwiLFxyXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlwiLFxyXG4gICAgICAgICAgXCJpc0NoZWNrZWRcIjogdHJ1ZSxcclxuICAgICAgICAgIFwidHlwZVwiOiBcInRhZ2dpbmctcmVmbGVjdFwiLFxyXG4gICAgICAgICAgXCJwYXJlbnRcIjogbnVsbCxcclxuICAgICAgICAgIFwiaXNQYXJlbnRcIjogdHJ1ZSxcclxuICAgICAgICAgIFwiZHVwbGljYXRlSW1hZ2VcIjogW11cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5leHRmaWxlIH4gbmV3T2JqOlwiLCBuZXdPYmopXHJcbiAgICAgICAgcmV2aXNlZERldGFpbC5wdXNoKG5ld09iailcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9KVxyXG4gICAgbGV0IGNvdW50OiBhbnkgPSBbXVxyXG4gICAgdGhpcy5jYXRlZ29yeS5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBjb3VudC5wdXNoKHtcclxuICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXHJcbiAgICAgICAgdmFsdWU6IGRhdGEuY291bnQsXHJcbiAgICAgICAgdHlwZTogZGF0YS50eXBlXHJcbiAgICAgIH0pXHJcbiAgICAgIGxldCBmaWx0ZXJEYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGRhdGE/LnR5cGUpIHx8ICdbXScpXHJcblxyXG4gICAgICBmaWx0ZXJEYXRhLm1hcCgob3RoZXJEYXRhOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgbGV0IG90aGVyT2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICBcImlkXCI6IGAke3RvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWR9XyR7dG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZX1fJHtvdGhlckRhdGE/LmltZ19uYW1lfWAsXHJcbiAgICAgICAgICBcImNsaWVudElkXCI6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LmNsaWVudElkLFxyXG4gICAgICAgICAgXCJzdG9yZUlkXCI6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWQsXHJcbiAgICAgICAgICBcInRlbXBJZFwiOiBvdGhlckRhdGE/LmltZ19uYW1lLFxyXG4gICAgICAgICAgXCJkYXRlU3RyaW5nXCI6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LkRhdGUsXHJcbiAgICAgICAgICBcInByb2Nlc3NUeXBlXCI6IFwiZm9vdGZhbGxcIixcclxuICAgICAgICAgIFwicmV2b3BzVHlwZVwiOiBkYXRhPy50eXBlLFxyXG4gICAgICAgICAgXCJmaWxlUGF0aFwiOiBvdGhlckRhdGE/LmltZ19wYXRoLFxyXG4gICAgICAgICAgXCJzdGF0dXNcIjogXCJzdWJtaXR0ZWRcIixcclxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuICAgICAgICAgIFwiaXNDaGVja2VkXCI6IHRydWUsXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJ0YWdnaW5nLXJlZmxlY3RcIixcclxuICAgICAgICAgIFwicGFyZW50XCI6IG51bGwsXHJcbiAgICAgICAgICBcImlzUGFyZW50XCI6IGZhbHNlLFxyXG4gICAgICAgICAgXCJkdXBsaWNhdGVJbWFnZVwiOiBbXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXZpc2VkRGV0YWlsLnB1c2gob3RoZXJPYmopXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG5cclxuXHJcbiAgICBsZXQgdGlja2V0VHlwZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RpY2tldFR5cGUnKVxyXG5cclxuICAgIHZhciBvYmo6IGFueSA9IHtcclxuICAgICAgXCJ0eXBlXCI6IFwidGFuZ29yZXZpZXdcIixcclxuICAgICAgXCJtb2RlXCI6IFwid2ViXCIsXHJcbiAgICAgIFwicmV2aWNlZEZvb3RmYWxsXCI6IHRoaXMuUmV0YWdjdXN0b21lcmNvdW50LFxyXG5cclxuICAgICAgXCJyZXZpY2VkUGVyY1wiOiBNYXRoLnJvdW5kKCh0aGlzLlJldGFnY3VzdG9tZXJjb3VudCAvIHRvdGFsZmlsZT8udG90YWxmaWxlcykgKiAxMDApICsgXCIlXCIsXHJcbiAgICAgIGNvdW50OiBjb3VudCxcclxuICAgICAgcmV2aXNlZERldGFpbDogcmV2aXNlZERldGFpbFxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coXCLwn5qAIH4gQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCB+IG5leHRmaWxlIH4gb2JqOlwiLCBvYmopXHJcbiAgICAvLyByZXR1cm5cclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBzdG9yZUlkOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkLFxyXG4gICAgICBcImRhdGVTdHJpbmdcIjogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZSxcclxuICAgICAgdGlja2V0VHlwZTogdGlja2V0VHlwZSxcclxuICAgICAgbWFwcGluZ0luZm86IG9ialxyXG4gICAgfVxyXG4gICAgdGhpcy5hcGlzZXJ2aWNlLnNhdmVhdWRpdChwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuYXV0aCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50aW1lclNlcnZpY2UucmVzZXRUaW1lcigpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd0aW1lU3BlbnQnKVxyXG4gICAgICAgICAgdGhpcy5jbG9zZXBvcHVwKClcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VtcGxveWVlJylcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2p1bmsnKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnYXVkaXQnKVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndG90YWxmaWxlcycpXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdyZXRhZycpXHJcbiAgICAgICAgICB2YXIgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIHRvdGFsZmlsZXM6IHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqLnRvdGFsZmlsZXMucXVldWVOYW1lID0gdG90YWxmaWxlPy5maWxlZGV0YWlscz8ucXVldWVOYW1lXHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0b3RhbGZpbGVzJywgSlNPTi5zdHJpbmdpZnkob2JqKSlcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90aWNrZXRzJ10sIHsgcXVlcnlQYXJhbXM6IHsgdHlwZTogJ2Zvb3RmYWxsJyB9IH0pXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmF1dGggPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRXJyb3Jtc2cgPSByZXMuZXJyb3JcclxuICAgICAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuY29uZmlybWVycm9yKVxyXG4gICAgICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RpY2tldHMnXSwgeyBxdWVyeVBhcmFtczogeyB0eXBlOiAnZm9vdGZhbGwnIH0gfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8uZXJyb3I/LmVycm9yIHx8IGVycj8ubWVzc2FnZSB8fCAnSW52YWxpZCBzdGF0dXMgY29kZTogdW5kZWZpbmVkJztcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgfSxcclxuICAgIH0pXHJcblxyXG4gIH1cclxuICBjbG9zZXBvcHVwKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcmV2aWV3ZGF0YSgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2UvdGlja2V0cy9tYXBwaW5nLWxpc3RcIl0pXHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZSBzaG93IGQtYmxvY2tcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWRcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudCBtZXJnZS10aWNrZXQtbW9kYWxcIj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gSGVhZGVyIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGJvcmRlci0wIHBiLTBcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+Q2xvc2UgdGlja2V0PC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cImNsb3NlcG9wdXAoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQm9keSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0YW5nb0FjY3VyYWN5Pjg1JiZjZW50cmFsT3BzRGF0YT8ucmV2aWNlZEZvb3RmYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+VGhlIHRpY2tldCB3aWxsIGJlIDxiPuKAnGNsb3NlZOKAnTwvYj4gYW5kIHVwZGF0ZWQgaW4gdGhlIHN0b3JlIGFzIGEgZmluYWwgcmV2aXNpb24uPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGFuZ29BY2N1cmFjeT44NSYmIWNlbnRyYWxPcHNEYXRhPy5yZXZpY2VkRm9vdGZhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIj5Zb3XigJlyZSBhYm91dCB0byBjbG9zZSB0aGlzIHRpY2tldC4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD88L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gSW5mbyBiYW5uZXIgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgbWVyZ2UtaW5mbyBkLWZsZXhcIiAqbmdJZj1cInRhbmdvQWNjdXJhY3k8ODVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMyBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktaW5mby1jaXJjbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRpY2tldCB3aWxsIGJlIDxiPuKAnGNsb3NlZOKAnTwvYj4gYW5kIHVwZGF0ZWQgaW4gdGhlIHN0b3JlIGFzIGEgZmluYWwgcmV2aXNpb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5jZSBhY2N1cmFjeSBpcyBiZWxvdyA4NSUsIGl0IHdpbGwgYmUgbWFya2VkIGFzIGFuIDxiPuKAnE9wZW4tQWNjdXJhY3kgSXNzdWXigJ08L2I+IGluIFRhbmdvLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGFkZCB0aGUgY2F1c2UgZm9yIHRoZSBsb3cgYWNjdXJhY3kuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIENhcmRzIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTMgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQ2VudHJhbCBPcHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiICpuZ0lmPVwiY2VudHJhbE9wc0RhdGE/LnJldmljZWRGb290ZmFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIG1iLTMgZnctc2VtaWJvbGRcIj5DZW50cmFsIE9wczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtZW5kIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiPnt7Y2VudHJhbE9wc0RhdGE/LnJldmljZWRGb290ZmFsbH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5Gb290ZmFsbDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWUgdGV4dC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjZW50cmFsT3BzRGF0YT8ucmV2aWNlZFBlcmN9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNlbnRyYWxPcHNEYXRhPy5yZXZpY2VkRm9vdGZhbGw8dGFuZ29EYXRhPy5yZXZpY2VkRm9vdGZhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaTXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNlbnRyYWxPcHNEYXRhPy5yZXZpY2VkRm9vdGZhbGw+dGFuZ29EYXRhPy5yZXZpY2VkRm9vdGZhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaRXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5BY2N1cmFjeTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBUYW5nbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCIgKm5nSWY9XCJ0YW5nb0RhdGE/LnJldmljZWRGb290ZmFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIG1iLTMgZnctc2VtaWJvbGRcIj5UYW5nbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtZW5kIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiPnt7dGFuZ29EYXRhPy5yZXZpY2VkRm9vdGZhbGx9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+Rm9vdGZhbGw8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlIHRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFuZ29EYXRhPy5yZXZpY2VkUGVyY319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2VudHJhbE9wc0RhdGE/LnJldmljZWRGb290ZmFsbD50YW5nb0RhdGE/LnJldmljZWRGb290ZmFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2VudHJhbE9wc0RhdGE/LnJldmljZWRGb290ZmFsbDx0YW5nb0RhdGE/LnJldmljZWRGb290ZmFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPkFjY3VyYWN5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBGb290ZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgYm9yZGVyLTAgcHQtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNsb3NlcG9wdXAoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwidGFuZ29BY2N1cmFjeT44NVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJuZXh0ZmlsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgc3VibWl0XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ0YW5nb0FjY3VyYWN5PDg1XCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm5leHRmaWxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICBSZXZpZXdcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|