tango-app-ui-analyse-trax 3.0.0-dev → 3.3.1-alpha-task.63
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/action-centre/action-centre.component.mjs +303 -0
- package/esm2022/lib/components/activity-log/activity-log.component.mjs +94 -0
- package/esm2022/lib/components/add-checklist/add-checklist.component.mjs +1439 -0
- package/esm2022/lib/components/add-task/add-task.component.mjs +85 -0
- package/esm2022/lib/components/checklist/checklist.component.mjs +252 -0
- package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +1954 -0
- package/esm2022/lib/components/checklistlayout/checklistlayout.component.mjs +12 -0
- package/esm2022/lib/components/chip-dropdown/chip-dropdown.component.mjs +84 -0
- package/esm2022/lib/components/create-task/create-task.component.mjs +367 -0
- package/esm2022/lib/components/create-task/create-task.data.mjs +306 -0
- package/esm2022/lib/components/create-task/create-task.interface.mjs +2 -0
- package/esm2022/lib/components/custom-select/custom-select.component.mjs +236 -0
- package/esm2022/lib/components/dashboard/dashboard.component.mjs +600 -0
- package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +635 -0
- package/esm2022/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.mjs +172 -0
- package/esm2022/lib/components/dashboard-layout/dashboard-layout.component.mjs +12 -0
- package/esm2022/lib/components/export-gallery/export-gallery.component.mjs +119 -0
- package/esm2022/lib/components/flag-layout/flag-layout.component.mjs +12 -0
- package/esm2022/lib/components/flags/flags.component.mjs +257 -0
- package/esm2022/lib/components/flags/flags.interface.mjs +2 -0
- package/esm2022/lib/components/flags-info/flags-info.component.mjs +388 -0
- package/esm2022/lib/components/flags-info/flags-info.interface.mjs +2 -0
- package/esm2022/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.mjs +71 -0
- package/esm2022/lib/components/gallery/gallery.component.mjs +1202 -0
- package/esm2022/lib/components/group-select/group-select.component.mjs +155 -0
- package/esm2022/lib/components/managechecklist/managechecklist.component.mjs +172 -0
- package/esm2022/lib/components/multi-date-datepicker/multi-date-datepicker.component.mjs +117 -0
- package/esm2022/lib/components/orders/orders.component.mjs +171 -0
- package/esm2022/lib/components/pagination/pagination.component.mjs +62 -0
- package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +105 -0
- package/esm2022/lib/components/reports/date-picker/date-picker.component.mjs +60 -0
- package/esm2022/lib/components/reports/reports.component.mjs +299 -0
- package/esm2022/lib/components/reports/reports.interface.mjs +2 -0
- package/esm2022/lib/components/tango-analyse-trax/tango-analyse-trax.component.mjs +27 -6
- package/esm2022/lib/components/task/task.component.mjs +271 -0
- package/esm2022/lib/components/task-configure/task-configure.component.mjs +504 -0
- package/esm2022/lib/components/task-configure/task-configure.interface.mjs +2 -0
- package/esm2022/lib/components/task-info/task-info.component.mjs +300 -0
- package/esm2022/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.mjs +203 -0
- package/esm2022/lib/components/task-layout/task-layout.component.mjs +12 -0
- package/esm2022/lib/components/trax-store/trax-store.component.mjs +153 -0
- package/esm2022/lib/components/traxpopup/traxpopup.component.mjs +67 -0
- package/esm2022/lib/services/trax.service.mjs +334 -0
- package/esm2022/lib/tango-analyse-trax-routing.module.mjs +124 -6
- package/esm2022/lib/tango-analyse-trax.module.mjs +147 -9
- package/fesm2022/tango-app-ui-analyse-trax.mjs +11512 -21
- package/fesm2022/tango-app-ui-analyse-trax.mjs.map +1 -1
- package/lib/components/action-centre/action-centre.component.d.ts +56 -0
- package/lib/components/activity-log/activity-log.component.d.ts +30 -0
- package/lib/components/add-checklist/add-checklist.component.d.ts +99 -0
- package/lib/components/add-task/add-task.component.d.ts +38 -0
- package/lib/components/checklist/checklist.component.d.ts +39 -0
- package/lib/components/checklist-configure/checklist-configure.component.d.ts +160 -0
- package/lib/components/checklistlayout/checklistlayout.component.d.ts +5 -0
- package/lib/components/chip-dropdown/chip-dropdown.component.d.ts +24 -0
- package/lib/components/create-task/create-task.component.d.ts +58 -0
- package/lib/components/create-task/create-task.data.d.ts +244 -0
- package/lib/components/create-task/create-task.interface.d.ts +147 -0
- package/lib/components/custom-select/custom-select.component.d.ts +35 -0
- package/lib/components/dashboard/dashboard.component.d.ts +77 -0
- package/lib/components/dashboard-info/dashboard-info.component.d.ts +102 -0
- package/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.d.ts +40 -0
- package/lib/components/dashboard-layout/dashboard-layout.component.d.ts +5 -0
- package/lib/components/export-gallery/export-gallery.component.d.ts +33 -0
- package/lib/components/flag-layout/flag-layout.component.d.ts +5 -0
- package/lib/components/flags/flags.component.d.ts +51 -0
- package/lib/components/flags/flags.interface.d.ts +64 -0
- package/lib/components/flags-info/flags-info.component.d.ts +62 -0
- package/lib/components/flags-info/flags-info.interface.d.ts +212 -0
- package/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.d.ts +13 -0
- package/lib/components/gallery/gallery.component.d.ts +126 -0
- package/lib/components/group-select/group-select.component.d.ts +33 -0
- package/lib/components/managechecklist/managechecklist.component.d.ts +32 -0
- package/lib/components/multi-date-datepicker/multi-date-datepicker.component.d.ts +27 -0
- package/lib/components/orders/orders.component.d.ts +38 -0
- package/lib/components/pagination/pagination.component.d.ts +16 -0
- package/lib/components/reactive-select/reactive-select.component.d.ts +32 -0
- package/lib/components/reports/date-picker/date-picker.component.d.ts +23 -0
- package/lib/components/reports/reports.component.d.ts +55 -0
- package/lib/components/reports/reports.interface.d.ts +46 -0
- package/lib/components/tango-analyse-trax/tango-analyse-trax.component.d.ts +10 -1
- package/lib/components/task/task.component.d.ts +59 -0
- package/lib/components/task-configure/task-configure.component.d.ts +69 -0
- package/lib/components/task-configure/task-configure.interface.d.ts +124 -0
- package/lib/components/task-info/task-info.component.d.ts +68 -0
- package/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.d.ts +60 -0
- package/lib/components/task-layout/task-layout.component.d.ts +5 -0
- package/lib/components/trax-store/trax-store.component.d.ts +44 -0
- package/lib/components/traxpopup/traxpopup.component.d.ts +23 -0
- package/lib/services/trax.service.d.ts +107 -0
- package/lib/tango-analyse-trax.module.d.ts +43 -3
- package/package.json +1 -1
|
@@ -0,0 +1,635 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { Subject, debounceTime, takeUntil } from "rxjs";
|
|
3
|
+
import dayjs from 'dayjs';
|
|
4
|
+
import { FormControl } from '@angular/forms';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
import * as i2 from "tango-app-ui-global";
|
|
8
|
+
import * as i3 from "tango-app-ui-shared";
|
|
9
|
+
import * as i4 from "../../services/trax.service";
|
|
10
|
+
import * as i5 from "@angular/forms";
|
|
11
|
+
import * as i6 from "@angular/common";
|
|
12
|
+
import * as i7 from "../reactive-select/reactive-select.component";
|
|
13
|
+
import * as i8 from "./monthlyperformance-datepicker/monthlyperformance-datepicker.component";
|
|
14
|
+
export class DashboardInfoComponent {
|
|
15
|
+
route;
|
|
16
|
+
router;
|
|
17
|
+
gs;
|
|
18
|
+
changeDetector;
|
|
19
|
+
toast;
|
|
20
|
+
TraxService;
|
|
21
|
+
fb;
|
|
22
|
+
pageInfo;
|
|
23
|
+
toastService;
|
|
24
|
+
dayjs = dayjs;
|
|
25
|
+
detach = new Subject();
|
|
26
|
+
destroy$ = new Subject();
|
|
27
|
+
isExport = false;
|
|
28
|
+
itemsPerPage = 10;
|
|
29
|
+
currentPage = 1;
|
|
30
|
+
totalItems = 0;
|
|
31
|
+
paginationSizes = [];
|
|
32
|
+
pageSize = 10;
|
|
33
|
+
sortColumName = '';
|
|
34
|
+
sortBy = '';
|
|
35
|
+
sortDirection = '';
|
|
36
|
+
searchInput = "";
|
|
37
|
+
infoChecklistData = [];
|
|
38
|
+
checklistDropdown = [];
|
|
39
|
+
userlistDropdown = [];
|
|
40
|
+
searchDisabled = false;
|
|
41
|
+
invoiceList = [];
|
|
42
|
+
checklistLoading = true;
|
|
43
|
+
checklistNoData = false;
|
|
44
|
+
headerData;
|
|
45
|
+
receivedData = "Checklist";
|
|
46
|
+
form;
|
|
47
|
+
selectControl;
|
|
48
|
+
checklistselectControl;
|
|
49
|
+
userlistselectControl;
|
|
50
|
+
selectedlistselectControl;
|
|
51
|
+
selectedUser;
|
|
52
|
+
selectedUserType;
|
|
53
|
+
selectedSourceUserId;
|
|
54
|
+
selectedStatus;
|
|
55
|
+
selectedStatusType;
|
|
56
|
+
selectedSourceStatusId;
|
|
57
|
+
dateType = "daily";
|
|
58
|
+
// datasets: Array<{ value: string, label: string }> = [
|
|
59
|
+
// { value: 'Open', label: 'Open' },
|
|
60
|
+
// { value: 'Inprogress', label: 'Inprogress' },
|
|
61
|
+
// { value: 'Delayed', label: 'Delayed' },
|
|
62
|
+
// { value: 'Submitted', label: 'Submitted' },
|
|
63
|
+
// { value: 'ReDo', label: 'ReDo' },
|
|
64
|
+
// ];
|
|
65
|
+
checklistdatasets = [];
|
|
66
|
+
infoCardDataLoading = true;
|
|
67
|
+
infoCardNoData = false;
|
|
68
|
+
infoCardsData = {};
|
|
69
|
+
// infoChecklistData: any = {};
|
|
70
|
+
selectedChecklist;
|
|
71
|
+
selectedChecklistType;
|
|
72
|
+
selectedSourceCheckListId;
|
|
73
|
+
selectDropdown = [];
|
|
74
|
+
selectedvalue;
|
|
75
|
+
statusselectControl = [
|
|
76
|
+
{ _id: 'All', label: 'All' },
|
|
77
|
+
{ _id: 'open', label: 'Open' },
|
|
78
|
+
{ _id: 'inprogress', label: 'In Progress' },
|
|
79
|
+
{ _id: 'submit', label: 'Submitted' },
|
|
80
|
+
];
|
|
81
|
+
timeFlag;
|
|
82
|
+
date;
|
|
83
|
+
infoComparisonCardsData = {};
|
|
84
|
+
searchValue;
|
|
85
|
+
limit;
|
|
86
|
+
offset;
|
|
87
|
+
dateLength;
|
|
88
|
+
checklistInfoDate;
|
|
89
|
+
constructor(route, router, gs, changeDetector, toast, TraxService, fb, pageInfo, toastService) {
|
|
90
|
+
this.route = route;
|
|
91
|
+
this.router = router;
|
|
92
|
+
this.gs = gs;
|
|
93
|
+
this.changeDetector = changeDetector;
|
|
94
|
+
this.toast = toast;
|
|
95
|
+
this.TraxService = TraxService;
|
|
96
|
+
this.fb = fb;
|
|
97
|
+
this.pageInfo = pageInfo;
|
|
98
|
+
this.toastService = toastService;
|
|
99
|
+
}
|
|
100
|
+
ngOnDestroy() {
|
|
101
|
+
// this.detach.next(true);
|
|
102
|
+
// this.detach.complete();
|
|
103
|
+
this.destroy$.next();
|
|
104
|
+
this.destroy$.complete();
|
|
105
|
+
}
|
|
106
|
+
ngOnInit() {
|
|
107
|
+
this.dateType = localStorage.getItem('dashboardDateType') || 'defaultType';
|
|
108
|
+
this.selectedlistselectControl = new FormControl('All');
|
|
109
|
+
this.date = this.dayjs().format('YYYY-MM-DD');
|
|
110
|
+
this.checklistInfoDate = this.dayjs().format('DD MMM YYYY');
|
|
111
|
+
this.route?.queryParams;
|
|
112
|
+
this.route?.queryParams
|
|
113
|
+
?.pipe(takeUntil(this.detach))
|
|
114
|
+
.subscribe((params) => {
|
|
115
|
+
if (params.type === 'Checklist') {
|
|
116
|
+
this.selectedvalue = params.checklist;
|
|
117
|
+
if (params.status == 'submit') {
|
|
118
|
+
this.selectedlistselectControl.setValue('submit');
|
|
119
|
+
}
|
|
120
|
+
this.receivedData = 'Checklist';
|
|
121
|
+
this.infoCardsData = params.checklistData ? JSON.parse(params.checklistData) : null;
|
|
122
|
+
}
|
|
123
|
+
else if (params.type === 'store') {
|
|
124
|
+
this.selectedvalue = params.store_id;
|
|
125
|
+
this.receivedData = 'Store';
|
|
126
|
+
}
|
|
127
|
+
else if (params.type === 'user') {
|
|
128
|
+
this.selectedvalue = params.userEmail;
|
|
129
|
+
this.receivedData = 'User';
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
this.checklistselectControl = new FormControl('');
|
|
133
|
+
this.form = this.fb.group({
|
|
134
|
+
checklistselectControl: this.checklistselectControl
|
|
135
|
+
});
|
|
136
|
+
this.checklistselectControl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {
|
|
137
|
+
this.onChecklistSelect({ _id: this.selectedvalue });
|
|
138
|
+
});
|
|
139
|
+
this.userlistselectControl = new FormControl('');
|
|
140
|
+
this.form = this.fb.group({
|
|
141
|
+
userlistselectControl: this.userlistselectControl
|
|
142
|
+
});
|
|
143
|
+
this.userlistselectControl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {
|
|
144
|
+
this.onUserSelect({ userEmail: value });
|
|
145
|
+
});
|
|
146
|
+
this.form = this.fb.group({
|
|
147
|
+
selectedlistselectControl: this.selectedlistselectControl
|
|
148
|
+
});
|
|
149
|
+
this.selectedlistselectControl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {
|
|
150
|
+
this.onValueChangeStatusSelect(value);
|
|
151
|
+
});
|
|
152
|
+
// this.form.get(this.statusselectControl)?.valueChanges.subscribe((selectedStatus) => {
|
|
153
|
+
// this.onValueChangeStatusSelect(selectedStatus);
|
|
154
|
+
// });
|
|
155
|
+
this.gs.dataRangeValue
|
|
156
|
+
.pipe(takeUntil(this.destroy$), debounceTime(300))
|
|
157
|
+
.subscribe((data) => {
|
|
158
|
+
if (data) {
|
|
159
|
+
this.headerData = data;
|
|
160
|
+
// this.dateLength = getDaysBetweenDates(data?.date.startDate, data?.date.endDate);
|
|
161
|
+
// if (this.dateLength > 28)
|
|
162
|
+
// this.dateType = "monthly";
|
|
163
|
+
// else if (this.dateLength > 5)
|
|
164
|
+
// this.dateType = "weekly";
|
|
165
|
+
// else if(this.dateLength === 0)
|
|
166
|
+
// this.dateType = "weekly";
|
|
167
|
+
this.setPageData();
|
|
168
|
+
if (this.receivedData === 'Checklist') {
|
|
169
|
+
this.getchecklistDropdown();
|
|
170
|
+
}
|
|
171
|
+
else if (this.receivedData === 'User') {
|
|
172
|
+
this.getUserlistDropdown();
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
this.getInfoCardsData();
|
|
176
|
+
this.getInfoComparisonCardsData();
|
|
177
|
+
this.getChecklistInfoData();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// this.getChecklistInfoData();
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
setPageData() {
|
|
184
|
+
this.pageInfo.setTitle("Dashboard");
|
|
185
|
+
// this.pageInfo.setDescription("Dashboard");
|
|
186
|
+
this.pageInfo.setBreadcrumbs([
|
|
187
|
+
{ title: "Tango Trax", path: "/manage/trax/dashboard", isActive: false, isSeparator: false },
|
|
188
|
+
{ title: "Tango Trax", path: "/manage/trax/dashboard", isActive: false, isSeparator: true },
|
|
189
|
+
]);
|
|
190
|
+
}
|
|
191
|
+
getUserlistDropdown() {
|
|
192
|
+
const requestData = {
|
|
193
|
+
fromDate: this.headerData.date.startDate,
|
|
194
|
+
toDate: this.headerData.date.endDate,
|
|
195
|
+
storeId: this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId),
|
|
196
|
+
// storeId: [
|
|
197
|
+
// "11-1743",
|
|
198
|
+
// "11-178",
|
|
199
|
+
// "11-1413",
|
|
200
|
+
// "11-1833",
|
|
201
|
+
// "11-67",
|
|
202
|
+
// "11-709"
|
|
203
|
+
// ],
|
|
204
|
+
clientId: this.headerData.client,
|
|
205
|
+
};
|
|
206
|
+
this.TraxService.getUserlistDropdownData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response) => {
|
|
207
|
+
if (response?.code === 200 && response?.status === "success") {
|
|
208
|
+
// Access the checklistData array from the response
|
|
209
|
+
this.userlistDropdown = response.data?.userData || [];
|
|
210
|
+
this.selectedUser = this.userlistDropdown.find(item => item.userEmail === this.selectedvalue);
|
|
211
|
+
if (this.selectedUser) {
|
|
212
|
+
setTimeout(() => {
|
|
213
|
+
this.userlistselectControl.setValue(this.selectedUser.userEmail);
|
|
214
|
+
this.selectedSourceCheckListId = this.selectedUser.userEmail;
|
|
215
|
+
this.changeDetector.detectChanges();
|
|
216
|
+
}, 100);
|
|
217
|
+
}
|
|
218
|
+
else if (this.userlistDropdown.length > 0) {
|
|
219
|
+
this.userlistselectControl.setValue(this.userlistDropdown[0].userEmail);
|
|
220
|
+
this.selectedUser = this.userlistDropdown[0];
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
this.userlistDropdown = [];
|
|
225
|
+
}
|
|
226
|
+
this.changeDetector.detectChanges();
|
|
227
|
+
}, error => {
|
|
228
|
+
this.userlistDropdown = [];
|
|
229
|
+
this.changeDetector.detectChanges();
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
getchecklistDropdown() {
|
|
233
|
+
const requestData = {
|
|
234
|
+
fromDate: this.headerData.date.startDate,
|
|
235
|
+
toDate: this.headerData.date.endDate,
|
|
236
|
+
// storeId: [
|
|
237
|
+
// "11-1743",
|
|
238
|
+
// "11-178",
|
|
239
|
+
// "11-1413",
|
|
240
|
+
// "11-1833",
|
|
241
|
+
// "11-67",
|
|
242
|
+
// "11-709"
|
|
243
|
+
// ],
|
|
244
|
+
storeId: this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId),
|
|
245
|
+
clientId: this.headerData.client,
|
|
246
|
+
};
|
|
247
|
+
this.TraxService.getChecklistDropdownDashboardData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response) => {
|
|
248
|
+
if (response?.code === 200 && response?.status === "success") {
|
|
249
|
+
this.checklistDropdown = response.data?.checklistData || [];
|
|
250
|
+
this.selectedChecklist = this.checklistDropdown.find(item => item.sourceCheckList_id === this.selectedvalue);
|
|
251
|
+
if (this.selectedChecklist) {
|
|
252
|
+
this.checklistselectControl.setValue(this.selectedChecklist.sourceCheckList_id);
|
|
253
|
+
this.selectedChecklistType = this.selectedChecklist.checkListType;
|
|
254
|
+
this.selectedvalue = this.selectedChecklist.sourceCheckList_id;
|
|
255
|
+
this.changeDetector.detectChanges();
|
|
256
|
+
}
|
|
257
|
+
else if (this.checklistDropdown.length > 0) {
|
|
258
|
+
this.checklistselectControl.setValue(this.checklistDropdown[0].sourceCheckList_id);
|
|
259
|
+
this.selectedChecklist = this.checklistDropdown[0];
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
this.checklistDropdown = [];
|
|
264
|
+
}
|
|
265
|
+
}, error => {
|
|
266
|
+
this.checklistDropdown = [];
|
|
267
|
+
this.changeDetector.detectChanges();
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
getInfoCardsData() {
|
|
271
|
+
this.infoChecklistData = [];
|
|
272
|
+
this.infoCardDataLoading = true;
|
|
273
|
+
this.infoCardNoData = true;
|
|
274
|
+
const requestData = {
|
|
275
|
+
fromDate: this.headerData.date.startDate,
|
|
276
|
+
toDate: this.headerData.date.endDate,
|
|
277
|
+
storeId: this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId),
|
|
278
|
+
// storeId: [
|
|
279
|
+
// "11-1743",
|
|
280
|
+
// "11-178",
|
|
281
|
+
// "11-1413",
|
|
282
|
+
// "11-1833",
|
|
283
|
+
// "11-67",
|
|
284
|
+
// "11-709"
|
|
285
|
+
// ],
|
|
286
|
+
clientId: this.headerData.client,
|
|
287
|
+
groupByType: this.receivedData,
|
|
288
|
+
groupByValue: this.selectedvalue,
|
|
289
|
+
};
|
|
290
|
+
this.TraxService.getInfoCardsData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response) => {
|
|
291
|
+
this.infoCardDataLoading = false;
|
|
292
|
+
if (response?.code === 200 && response?.status === "success") {
|
|
293
|
+
this.infoCardsData = response.data?.overallInfoCards || {};
|
|
294
|
+
this.infoCardDataLoading = false;
|
|
295
|
+
this.infoCardNoData = false;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
this.infoCardsData = [];
|
|
299
|
+
this.infoCardDataLoading = false;
|
|
300
|
+
this.infoCardNoData = true;
|
|
301
|
+
}
|
|
302
|
+
}, error => {
|
|
303
|
+
this.infoCardsData = [];
|
|
304
|
+
this.infoCardDataLoading = false;
|
|
305
|
+
this.infoCardNoData = true;
|
|
306
|
+
this.changeDetector.detectChanges();
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
getInfoComparisonCardsData() {
|
|
310
|
+
this.infoComparisonCardsData = [];
|
|
311
|
+
this.infoCardDataLoading = true;
|
|
312
|
+
this.infoCardNoData = true;
|
|
313
|
+
const requestData = {
|
|
314
|
+
fromDate: this.headerData.date.startDate,
|
|
315
|
+
toDate: this.headerData.date.endDate,
|
|
316
|
+
storeId: this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId),
|
|
317
|
+
// storeId: [
|
|
318
|
+
// "11-1743",
|
|
319
|
+
// "11-178",
|
|
320
|
+
// "11-1413",
|
|
321
|
+
// "11-1833",
|
|
322
|
+
// "11-67",
|
|
323
|
+
// "11-709"
|
|
324
|
+
// ],
|
|
325
|
+
clientId: this.headerData.client,
|
|
326
|
+
groupByType: this.receivedData,
|
|
327
|
+
groupByValue: this.selectedvalue,
|
|
328
|
+
dateType: this.dateType,
|
|
329
|
+
};
|
|
330
|
+
this.TraxService.getInfoComparisonCardsData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response) => {
|
|
331
|
+
this.infoCardDataLoading = false;
|
|
332
|
+
if (response?.code === 200 && response?.status === "success") {
|
|
333
|
+
this.infoComparisonCardsData = response.data?.infoComparisonCards || {};
|
|
334
|
+
this.infoCardDataLoading = false;
|
|
335
|
+
this.infoCardNoData = false;
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
this.infoComparisonCardsData = [];
|
|
339
|
+
this.infoCardDataLoading = false;
|
|
340
|
+
this.infoCardNoData = true;
|
|
341
|
+
}
|
|
342
|
+
}, error => {
|
|
343
|
+
this.infoComparisonCardsData = [];
|
|
344
|
+
this.infoCardDataLoading = false;
|
|
345
|
+
this.infoCardNoData = true;
|
|
346
|
+
this.changeDetector.detectChanges();
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
getChecklistInfoData() {
|
|
350
|
+
this.searchDisabled = true;
|
|
351
|
+
this.checklistLoading = true;
|
|
352
|
+
this.checklistNoData = true;
|
|
353
|
+
const selectedStores = this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId);
|
|
354
|
+
if (selectedStores.length > 1 && this.receivedData === 'Store') {
|
|
355
|
+
this.router.navigate(['/manage/trax/dashboard'], {
|
|
356
|
+
queryParams: { type: 'store' }
|
|
357
|
+
});
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
const requestData = {
|
|
361
|
+
fromDate: this.headerData.date.startDate,
|
|
362
|
+
toDate: this.headerData.date.endDate,
|
|
363
|
+
// storeId: ["11-253", "11-511","11-1176"],
|
|
364
|
+
// storeId: [
|
|
365
|
+
// "11-1743",
|
|
366
|
+
// "11-178",
|
|
367
|
+
// "11-1413",
|
|
368
|
+
// "11-1833",
|
|
369
|
+
// "11-67",
|
|
370
|
+
// "11-709"
|
|
371
|
+
// ],
|
|
372
|
+
storeId: this.headerData.stores.filter((store) => store.checked).map((store) => store.storeId),
|
|
373
|
+
clientId: this.headerData.client,
|
|
374
|
+
limit: this.itemsPerPage,
|
|
375
|
+
offset: this.currentPage - 1,
|
|
376
|
+
sortBy: this.sortDirection,
|
|
377
|
+
sortColumnName: this.sortColumName,
|
|
378
|
+
searchValue: this.searchInput,
|
|
379
|
+
groupByType: this.receivedData,
|
|
380
|
+
groupByValue: this.selectedvalue,
|
|
381
|
+
// export: false,
|
|
382
|
+
checklistStatus: this.selectedlistselectControl.value,
|
|
383
|
+
};
|
|
384
|
+
this.TraxService.getChecklistInfoData(requestData)
|
|
385
|
+
.pipe(takeUntil(this.destroy$))
|
|
386
|
+
.subscribe((response) => {
|
|
387
|
+
this.checklistLoading = false;
|
|
388
|
+
if (response?.code === 200 && response?.status === "success") {
|
|
389
|
+
this.infoChecklistData = response.data.checklistInfo;
|
|
390
|
+
// this.statusselectControl = [...new Set(this.infoChecklistData.map(item => item.checklistStatus))];
|
|
391
|
+
// this.onValueChangeStatusSelect(value);
|
|
392
|
+
// this.infoChecklistData = response.data.checklistInfo.checklistStatus;
|
|
393
|
+
this.totalItems = response.data.totalCount;
|
|
394
|
+
this.setPaginationSizes();
|
|
395
|
+
this.checklistLoading = false;
|
|
396
|
+
this.checklistNoData = false;
|
|
397
|
+
this.searchDisabled = false;
|
|
398
|
+
this.timeFlag = response.data.timeFlag;
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
this.checklistLoading = false;
|
|
402
|
+
this.checklistNoData = true;
|
|
403
|
+
this.searchDisabled = true;
|
|
404
|
+
if (this.searchInput?.length) {
|
|
405
|
+
this.searchDisabled = true;
|
|
406
|
+
}
|
|
407
|
+
this.infoChecklistData = [];
|
|
408
|
+
this.totalItems = 0;
|
|
409
|
+
this.changeDetector.detectChanges();
|
|
410
|
+
}
|
|
411
|
+
}, error => {
|
|
412
|
+
this.infoChecklistData = [];
|
|
413
|
+
this.changeDetector.detectChanges();
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
// onExport(): void {
|
|
417
|
+
// this.currentPage = 0;
|
|
418
|
+
// const requestData = {
|
|
419
|
+
// fromDate: this.headerData.date.startDate,
|
|
420
|
+
// toDate: this.headerData.date.endDate,
|
|
421
|
+
// storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),
|
|
422
|
+
// // storeId: ["11-253", "11-511","11-1176"],
|
|
423
|
+
// clientId:this.headerData.client,
|
|
424
|
+
// // valueType: "sum",
|
|
425
|
+
// search: this.searchInput,
|
|
426
|
+
// sort: this.sortColumName,
|
|
427
|
+
// sortBy: this.sortDirection,
|
|
428
|
+
// limit: 10000,
|
|
429
|
+
// offset: this.currentPage,
|
|
430
|
+
// // export: true
|
|
431
|
+
// };
|
|
432
|
+
// this.TraxService.getSummaryTableExport(requestData)
|
|
433
|
+
// .pipe(takeUntil(this.destroy$))
|
|
434
|
+
// .subscribe({
|
|
435
|
+
// next: (res) => {
|
|
436
|
+
// this.TraxService.saveAsExcelFile(res, 'ZoneSummaryTable');
|
|
437
|
+
// },
|
|
438
|
+
// error: (e) => {
|
|
439
|
+
// this.toast.getErrorToast('Something went Wrong..')
|
|
440
|
+
// }
|
|
441
|
+
// });
|
|
442
|
+
// }
|
|
443
|
+
searchField() {
|
|
444
|
+
this.headerData.search = this.searchInput;
|
|
445
|
+
// this.headerData.export = false;
|
|
446
|
+
this.currentPage = 1;
|
|
447
|
+
this.pageSize = 10;
|
|
448
|
+
this.getChecklistInfoData();
|
|
449
|
+
}
|
|
450
|
+
sortData(column) {
|
|
451
|
+
if (this.sortColumName === column) {
|
|
452
|
+
this.sortDirection = this.sortDirection === 1 ? -1 : 1;
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
this.sortColumName = column;
|
|
456
|
+
this.sortDirection = 1;
|
|
457
|
+
}
|
|
458
|
+
this.changeDetector.detectChanges();
|
|
459
|
+
this.getChecklistInfoData();
|
|
460
|
+
}
|
|
461
|
+
onPageSizeChange(pageSize) {
|
|
462
|
+
this.currentPage = 1;
|
|
463
|
+
this.itemsPerPage = pageSize;
|
|
464
|
+
this.pageSize = pageSize;
|
|
465
|
+
this.changeDetector.detectChanges();
|
|
466
|
+
this.getChecklistInfoData();
|
|
467
|
+
}
|
|
468
|
+
onPageChange(pageOffset) {
|
|
469
|
+
this.currentPage = pageOffset;
|
|
470
|
+
this.getChecklistInfoData();
|
|
471
|
+
}
|
|
472
|
+
setPaginationSizes() {
|
|
473
|
+
if (this.totalItems > 10) {
|
|
474
|
+
this.paginationSizes = [10, 20, 30];
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
this.paginationSizes = [this.totalItems];
|
|
478
|
+
this.pageSize = this.totalItems;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
// onValueChangeChecklist(event: any): void {
|
|
482
|
+
// this.selectedvalue = event;
|
|
483
|
+
// this.selectedChecklist = this.checklistDropdown.find(item => item._id === event);
|
|
484
|
+
// if (this.selectedChecklist) {
|
|
485
|
+
// this.selectedChecklistType = this.selectedChecklist.checkListType;
|
|
486
|
+
// this.selectedSourceCheckListId = this.selectedChecklist.sourceCheckList_id;
|
|
487
|
+
// this.changeDetector.detectChanges();
|
|
488
|
+
// this.getInfoCardsData();
|
|
489
|
+
// this.getInfoComparisonCardsData();
|
|
490
|
+
// this.getChecklistInfoData();
|
|
491
|
+
// }
|
|
492
|
+
// }
|
|
493
|
+
onChecklistSelect(event) {
|
|
494
|
+
this.selectedChecklist = this.checklistDropdown.find(item => item._id === event?._id);
|
|
495
|
+
if (this.selectedChecklist) {
|
|
496
|
+
this.selectedvalue = event._id;
|
|
497
|
+
this.selectedChecklistType = this.selectedChecklist.checkListType;
|
|
498
|
+
this.selectedSourceCheckListId = this.selectedChecklist.sourceCheckList_id;
|
|
499
|
+
this.changeDetector.detectChanges();
|
|
500
|
+
this.router.navigate([], {
|
|
501
|
+
relativeTo: this.route,
|
|
502
|
+
queryParams: { checklist: this.selectedSourceCheckListId },
|
|
503
|
+
queryParamsHandling: 'merge'
|
|
504
|
+
});
|
|
505
|
+
this.getInfoCardsData();
|
|
506
|
+
this.getInfoComparisonCardsData();
|
|
507
|
+
this.getChecklistInfoData();
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
onUserSelect(event) {
|
|
511
|
+
this.selectedvalue = event;
|
|
512
|
+
this.selectedUser = this.userlistDropdown.find(item => item.userEmail === event?.userEmail);
|
|
513
|
+
if (this.selectedUser) {
|
|
514
|
+
this.selectedvalue = event.userEmail;
|
|
515
|
+
this.selectedSourceCheckListId = this.selectedUser.userEmail;
|
|
516
|
+
this.changeDetector.detectChanges();
|
|
517
|
+
this.router.navigate([], {
|
|
518
|
+
relativeTo: this.route,
|
|
519
|
+
queryParams: { userEmail: this.selectedUser.userEmail },
|
|
520
|
+
queryParamsHandling: 'merge'
|
|
521
|
+
});
|
|
522
|
+
this.getInfoCardsData();
|
|
523
|
+
this.getInfoComparisonCardsData();
|
|
524
|
+
this.getChecklistInfoData();
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
// onValueChangeUserChecklist(event: any): void {
|
|
528
|
+
// this.selectedvalue = event;
|
|
529
|
+
// this.selectedUser = this.userlistDropdown.find(item => item.userEmail === event);
|
|
530
|
+
// if (this.selectedUser) {
|
|
531
|
+
// this.selectedSourceCheckListId = this.selectedUser.userEmail;
|
|
532
|
+
// this.changeDetector.detectChanges();
|
|
533
|
+
// this.getInfoCardsData();
|
|
534
|
+
// this.getInfoComparisonCardsData();
|
|
535
|
+
// this.getChecklistInfoData();
|
|
536
|
+
// }
|
|
537
|
+
// // this.selectedUser = selectedUser;
|
|
538
|
+
// }
|
|
539
|
+
trimText(text) {
|
|
540
|
+
return text.length > 10 ? text.slice(0, 10) + '...' : text;
|
|
541
|
+
}
|
|
542
|
+
onValueChangeStatusSelect(event) {
|
|
543
|
+
this.sortColumName = "",
|
|
544
|
+
this.sortDirection = "",
|
|
545
|
+
this.searchValue = "",
|
|
546
|
+
this.limit = 10,
|
|
547
|
+
this.offset = 1,
|
|
548
|
+
this.currentPage = 1,
|
|
549
|
+
this.pageSize = 10;
|
|
550
|
+
this.selectedStatus = this.statusselectControl.find(item => item._id === event);
|
|
551
|
+
if (this.selectedStatus) {
|
|
552
|
+
this.changeDetector.detectChanges();
|
|
553
|
+
// this.getInfoCardsData();
|
|
554
|
+
this.getChecklistInfoData();
|
|
555
|
+
} // Fetch data based on selected status
|
|
556
|
+
}
|
|
557
|
+
reinitiate(id) {
|
|
558
|
+
const requestData = {
|
|
559
|
+
_id: id
|
|
560
|
+
};
|
|
561
|
+
this.TraxService.reinitiateChecklist(requestData)
|
|
562
|
+
.pipe(takeUntil(this.destroy$))
|
|
563
|
+
.subscribe((response) => {
|
|
564
|
+
this.checklistLoading = false;
|
|
565
|
+
if (response?.code === 200 && response?.status === "success") {
|
|
566
|
+
this.toastService.getSuccessToast(`Reinitiated successfully.`);
|
|
567
|
+
this.getChecklistInfoData();
|
|
568
|
+
}
|
|
569
|
+
}, error => {
|
|
570
|
+
this.toastService.getErrorToast(`Something went wrong !`);
|
|
571
|
+
this.changeDetector.detectChanges();
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
sendalert() {
|
|
575
|
+
this.toast.getSuccessToast(`Alert Sent successfully.`);
|
|
576
|
+
}
|
|
577
|
+
download(type, item) {
|
|
578
|
+
const user = JSON.parse(localStorage.getItem('user-info'));
|
|
579
|
+
const payload = {
|
|
580
|
+
"fromDate": this.headerData?.date.startDate,
|
|
581
|
+
"toDate": this.headerData?.date.endDate,
|
|
582
|
+
"checklistId": [item._id],
|
|
583
|
+
"sourceCheckList_id": '',
|
|
584
|
+
"checklistName": item.checkListName,
|
|
585
|
+
"fileType": type,
|
|
586
|
+
// "storeIds": this.headerData?.stores.map((val: { storeId: string, storeName: string }) => val.storeId),
|
|
587
|
+
"storeIds": [item.store_id],
|
|
588
|
+
"userId": user?._id,
|
|
589
|
+
"clientId": this.headerData?.client,
|
|
590
|
+
"downloadInsertFrom": "dashboard",
|
|
591
|
+
};
|
|
592
|
+
this.TraxService.reportTableExport(payload).subscribe({
|
|
593
|
+
next: (res) => {
|
|
594
|
+
if (res.code === 200) {
|
|
595
|
+
this.toastService.getSuccessToast(`<div><span class="me-8" >Downloading your reports</span><a href="/notifications/alerts?tab=download" style="color:#99c3ff; text-decoration:underline; cursor:pointer" >View</a></div>`);
|
|
596
|
+
}
|
|
597
|
+
},
|
|
598
|
+
error: (err) => {
|
|
599
|
+
this.toastService.getErrorToast(`Something went wrong !`);
|
|
600
|
+
}
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
dateValue(type) {
|
|
604
|
+
this.dateType = type;
|
|
605
|
+
this.getInfoComparisonCardsData();
|
|
606
|
+
}
|
|
607
|
+
navigateToGallery(item) {
|
|
608
|
+
this.router.navigate(['/manage/trax/gallery'], {
|
|
609
|
+
queryParams: {
|
|
610
|
+
ChecklistDate: item.checklistDate,
|
|
611
|
+
storeId: item.store_id,
|
|
612
|
+
checklistType: item.checkListType,
|
|
613
|
+
checklistId: item.sourceCheckList_id,
|
|
614
|
+
},
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DashboardInfoComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.GlobalStateService }, { token: i0.ChangeDetectorRef }, { token: i3.ToastService }, { token: i4.TraxService }, { token: i5.FormBuilder }, { token: i2.PageInfoService }, { token: i3.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
618
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DashboardInfoComponent, selector: "lib-dashboard-info", ngImport: i0, template: "<div *ngIf=\"receivedData === 'Checklist'\" class=\"card mb-3\">\r\n <div class=\"card-body pt-2 pb-1\">\r\n <div class=\"d-flex flex-column\">\r\n <div *ngIf=\"selectedChecklist\" class=\"d-flex flex-wrap my-2 pe-2\">\r\n <a [routerLink]=\"['/manage/trax/dashboard']\" [queryParams]=\"{type: 'Checklist'}\" class=\"d-flex align-items-center me-3 cursor-pointer\">\r\n <span><svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_987_30898)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8346 21.0001H16.168M16.168 21.0001L22.0013 26.8334M16.168 21.0001L22.0013 15.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_987_30898\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_987_30898\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_987_30898\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </a>\r\n\r\n <form class=\"mt-1 me-3 cursor-pointer\" style=\"min-width: 200px;\" [formGroup]=\"form\">\r\n <!-- <div class=\"col-md-4 w-200px\"> -->\r\n <lib-select [items]=\"checklistDropdown\" [multi]=\"false\" [searchField]=\"'checkListName'\"\r\n [idField]=\"'_id'\" [selectedValues]=\"[selectedChecklist]\" (selected)=\"onChecklistSelect($event)\">\r\n <!-- <ng-template let-item>\r\n <div class=\"d-flex justify-content-between align-items-center no-border-custom-select\">\r\n <span>{{ item.checkListName }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-template> -->\r\n </lib-select>\r\n\r\n <!-- <lib-reactive-select [formControl]=\"checklistselectControl\" [idField]=\"'_id'\"\r\n [nameField]=\"'checkListName'\" [data]=\"checklistDropdown\" class=\"w-100 \"\r\n style=\"border: none !important; box-shadow: none !important;\"\r\n (valueChange)=\"onValueChangeChecklist($event)\">\r\n <ng-template let-item>\r\n <div class=\"d-flex justify-content-between align-items-center no-border-custom-select\">\r\n <span>{{ item.checkListName }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#101828\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </lib-reactive-select> -->\r\n <!-- </div> -->\r\n </form>\r\n <div class=\"checklist-details d-flex flex-wrap mt-3\">\r\n <!-- <div class=\"d-flex align-items-center grey-badge me-3 my-3\">\r\n {{ selectedChecklist?.checkListName }}\r\n </div> -->\r\n\r\n <div class=\"d-flex align-items-center mb-2\">\r\n <span *ngIf=\"selectedChecklist?.publish\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M7.9987 14.6666C11.6806 14.6666 14.6654 11.6818 14.6654 7.99992C14.6654 4.31802 11.6806 1.33325 7.9987 1.33325C4.3168 1.33325 1.33203 4.31802 1.33203 7.99992C1.33203 11.6818 4.3168 14.6666 7.9987 14.6666Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n\r\n <span *ngIf=\"!selectedChecklist?.publish\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.9987 13.6666C10.6806 13.6666 13.6654 10.6818 13.6654 6.99992C13.6654 3.31802 10.6806 0.333252 6.9987 0.333252C3.3168 0.333252 0.332031 3.31802 0.332031 6.99992C0.332031 10.6818 3.3168 13.6666 6.9987 13.6666Z\"\r\n fill=\"#F04438\" />\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center me-3 checklisttext\">\r\n <span><svg class=\"mx-2 mb-1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M13.3346 14V12.6667C13.3346 11.9594 13.0537 11.2811 12.5536 10.781C12.0535 10.281 11.3752 10 10.668 10H5.33464C4.62739 10 3.94911 10.281 3.44902 10.781C2.94892 11.2811 2.66797 11.9594 2.66797 12.6667V14M10.668 4.66667C10.668 6.13943 9.47406 7.33333 8.0013 7.33333C6.52854 7.33333 5.33464 6.13943 5.33464 4.66667C5.33464 3.19391 6.52854 2 8.0013 2C9.47406 2 10.668 3.19391 10.668 4.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg><span class=\"mt-2\">{{ selectedChecklist?.createdByName }}</span></span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center me-3 checklisttext\">\r\n <span><svg class=\"mx-2 mb-1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M12 3H13.5C13.8978 3 14.2794 3.15804 14.5607 3.43934C14.842 3.72064 15 4.10218 15 4.5V15C15 15.3978 14.842 15.7794 14.5607 16.0607C14.2794 16.342 13.8978 16.5 13.5 16.5H4.5C4.10218 16.5 3.72064 16.342 3.43934 16.0607C3.15804 15.7794 3 15.3978 3 15V4.5C3 4.10218 3.15804 3.72064 3.43934 3.43934C3.72064 3.15804 4.10218 3 4.5 3H6M6.75 1.5H11.25C11.6642 1.5 12 1.83579 12 2.25V3.75C12 4.16421 11.6642 4.5 11.25 4.5H6.75C6.33579 4.5 6 4.16421 6 3.75V2.25C6 1.83579 6.33579 1.5 6.75 1.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg> {{ selectedChecklist?.storeCount?.toLocaleString('en-US', { minimumFractionDigits: 0\r\n }) || '--' }} Stores</span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center me-3 checklisttext\">\r\n <span><svg class=\"mx-2 mb-1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M12 1.5V4.5M6 1.5V4.5M2.25 7.5H15.75M3.75 3H14.25C15.0784 3 15.75 3.67157 15.75 4.5V15C15.75 15.8284 15.0784 16.5 14.25 16.5H3.75C2.92157 16.5 2.25 15.8284 2.25 15V4.5C2.25 3.67157 2.92157 3 3.75 3Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>Repeats {{selectedChecklist.scheduleRepeatedType === 'onetime' ? 'Single' : (selectedChecklist?.scheduleRepeatedType || '--' )}}</span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center me-3 checklisttext\">\r\n <span><svg class=\"mx-2 mb-1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_987_30895)\">\r\n <path\r\n d=\"M9 4.5V9L12 10.5M16.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\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_987_30895\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg> {{ selectedChecklist?.scheduleStartTime?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }} - {{\r\n selectedChecklist?.scheduleEndTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) ||\r\n '--' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--end::Info-->\r\n </div>\r\n </div>\r\n</div>\r\n<div *ngIf=\"receivedData === 'User'\" class=\"card mb-5\">\r\n <div class=\"card-body pt-2 pb-1\">\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"d-flex flex-wrap my-2 pe-2\">\r\n <a [routerLink]=\"['/manage/trax/dashboard']\" [queryParams]=\"{type: 'user'}\" class=\"d-flex align-items-center me-3 cursor-pointer\">\r\n <span><svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_987_30898)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8346 21.0001H16.168M16.168 21.0001L22.0013 26.8334M16.168 21.0001L22.0013 15.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_987_30898\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_987_30898\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_987_30898\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </a>\r\n <div class=\"symbol symbol-35px symbol-circle\">\r\n <span class=\"symbol-label bg-light-primary text-primary me-2 mt-2\">\r\n {{ selectedUser?.userNameChar }}\r\n </span>\r\n </div>\r\n\r\n <form class=\"mt-1 me-3 cursor-pointer\" style=\"min-width: 200px;\" [formGroup]=\"form\"> \r\n <lib-select \r\n [items]=\"userlistDropdown\" \r\n [multi]=\"false\" \r\n [searchField]=\"'userName'\" \r\n [idField]=\"'userEmail'\" \r\n [selectedValues]=\"[selectedUser]\" \r\n (selected)=\"onUserSelect($event)\" \r\n >\r\n <!-- <ng-template let-item>\r\n <div class=\"d-flex justify-content-between align-items-center no-border-custom-select\">\r\n <span>{{ item.userName }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-template> -->\r\n </lib-select>\r\n <!-- <div class=\"col-md-4 w-200px\">\r\n <lib-reactive-select [formControl]=\"userlistselectControl\" [idField]=\"'userEmail'\"\r\n [nameField]=\"'userName'\" [data]=\"userlistDropdown\" class=\"w-100\"\r\n style=\"border: none !important; box-shadow: none !important;\"\r\n (valueChange)=\"onValueChangeUserChecklist($event)\">\r\n <ng-template let-item>\r\n <div class=\"d-flex justify-content-between align-items-center no-border-custom-select\">\r\n <span>{{ item.userName }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#101828\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </lib-reactive-select>\r\n </div> -->\r\n </form>\r\n\r\n <div *ngIf=\"selectedUser?.role\" class=\"checklist-details d-flex flex-wrap mt-2\">\r\n <div class=\"d-flex align-items-center badge badge-light-primary me-3 my-3\">\r\n {{ selectedUser?.role }}\r\n </div>\r\n </div>\r\n </div>\r\n <!--end::Info-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <div *ngIf=\"receivedData === 'Checklist' || receivedData === 'User'\" class=\"row\">\r\n <div class=\"col-4\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Total instances\r\n </div>\r\n <div class=\"infocount mb-6\">{{ infoCardsData?.totalInstances?.count !==null ?\r\n infoCardsData?.totalInstances?.count.toLocaleString('en-US', { minimumFractionDigits: 0 }) :\r\n '--'}}\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.totalInstances?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.totalInstances?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\">\r\n\r\n <span class=\"percent-value\">{{\r\n infoComparisonCardsData?.totalInstances?.comparisonData !==null\r\n ?infoComparisonCardsData?.totalInstances?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span>\r\n <span class=\"week-font\"> vs last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Completed instances\r\n </div>\r\n <div class=\"infocount mb-6\">{{ infoCardsData?.completedInstances?.count !==null ?\r\n infoCardsData?.completedInstances?.count.toLocaleString('en-US', { minimumFractionDigits: 0\r\n }) : '--' }}\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.completedInstances?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.completedInstances?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\">\r\n <span class=\"percent-value\">{{\r\n infoComparisonCardsData?.completedInstances?.comparisonData !==null\r\n ?infoComparisonCardsData?.completedInstances?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span>\r\n <span class=\"week-font\"> vs last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Flags\r\n </div>\r\n <div class=\"infocount mb-6\">{{ infoCardsData?.flags?.count !==null ?\r\n infoCardsData?.flags?.count.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.flags?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.flags?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\">\r\n <span class=\"percent-value\">{{ infoComparisonCardsData?.flags?.comparisonData\r\n !==null ? infoComparisonCardsData?.flags?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span>\r\n <span class=\"week-font\"> vs last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span>\r\n </span>\r\n </div>\r\n <!-- <div class=\"avgcount\">Avg Flag Rate : {{ infoCardsData.flags.count ? '50%' : 'N/A' }}</div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"receivedData === 'Checklist'\" class=\"row my-3\">\r\n <div class=\"col-6\">\r\n <div class=\"subinfocard\">\r\n <div class=\"headingcard\">\r\n Completion Score\r\n </div>\r\n\r\n <div class=\"infocount\">\r\n {{ infoCardsData?.completionScore?.count !==null ?\r\n infoCardsData?.completionScore?.count.toLocaleString('en-US', { minimumFractionDigits: 0 })\r\n : '--' }}%\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.completionScore?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.completionScore?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\">\r\n <span class=\"percent-value\">{{\r\n infoComparisonCardsData?.completionScore?.comparisonData !==null ?\r\n infoComparisonCardsData?.completionScore?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }} %</span>\r\n <span class=\"week-font\"> vs last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"subinfocard\">\r\n <div class=\"headingcard\">\r\n Compliance Rate\r\n </div>\r\n <div class=\"infocount\">\r\n\r\n {{ infoCardsData?.complianceRate?.count !==null ?\r\n infoCardsData?.complianceRate?.count.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }} %\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.complianceRate?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.complianceRate?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\">\r\n <span class=\"percent-value\">{{\r\n infoComparisonCardsData?.complianceRate?.comparisonData !==null\r\n ?infoComparisonCardsData?.complianceRate?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span>\r\n <span class=\"week-font\"> vs last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"receivedData === 'User'\" class=\"row my-3\">\r\n <div class=\"col-6\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Completion Score\r\n </div>\r\n <div class=\"infocount mb-6\">{{ infoCardsData?.completionScore?.count !==null ?\r\n infoCardsData?.completionScore?.count.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--'}} %\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.completionScore?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.completionScore?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\"><span class=\"percent-value\">{{\r\n infoComparisonCardsData?.completionScore?.comparisonData !==null ?\r\n infoComparisonCardsData?.completionScore?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span><span class=\"week-font\"> vs last\r\n <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span></span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Compliance Rate\r\n </div>\r\n <div class=\"infocount mb-6\">{{ infoCardsData?.complianceRate?.count !==null ?\r\n infoCardsData?.complianceRate?.count.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }} %\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.complianceRate?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.complianceRate?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\"><span class=\"percent-value\">{{\r\n infoComparisonCardsData?.complianceRate?.comparisonData !==null ?\r\n infoComparisonCardsData?.complianceRate?.comparisonData.toLocaleString('en-US',\r\n { minimumFractionDigits: 0 }) :\r\n '--'}}%</span><span class=\"week-font\"> vs last <span\r\n *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span></span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <!-- <div class=\"col-4\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Assigned Tasks\r\n </div>\r\n <div class=\"infocount\"><u>6</u>\r\n <div><span class=\"mt-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\"\r\n height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg></span><span class=\"mt-2 ms-2\"><span class=\"percent-value\">13%</span><span\r\n class=\"week-font\"> vs\r\n last week</span></span></div>\r\n <div class=\"actiondownload\">View All </div>\r\n </div>\r\n \r\n \r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"infoCardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"infoCardNoData && !infoCardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Checklist Performance Table\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n\r\n </div>\r\n\r\n\r\n <div *ngIf=\"receivedData === 'Checklist' || receivedData === 'User'\" class=\"col-3\">\r\n <lib-monthlyperformance-datepicker\r\n [monthlyperformce]=\"selectedSourceCheckListId\"></lib-monthlyperformance-datepicker>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"receivedData === 'Store'\" class=\"row mb-4 d-flex justify-content-between align-items-stretch\">\r\n <div class=\"col-2 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{ infoCardsData?.activeUnique !==null ?\r\n infoCardsData?.activeUnique?.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--'\r\n }}</span>\r\n <span class=\"cardtext\">Active Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.totalInstances?.count !==null ?\r\n infoCardsData?.totalInstances?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) :\r\n '--' }}</div>\r\n <div class=\"cardtext\">Checklist Instances</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-5 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{ infoCardsData?.notSubmittedInstances?.count !==null ?\r\n infoCardsData?.notSubmittedInstances?.count?.toLocaleString('en-US', { minimumFractionDigits: 0\r\n }) : '--' }}</span>\r\n <span class=\"cardtext\">Not Submitted Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"row h-auto py-3 px-3\">\r\n <div class=\"col-md-6\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.notSubmittedInstances?.open !==null ?\r\n infoCardsData?.notSubmittedInstances?.open?.toLocaleString('en-US', { minimumFractionDigits:\r\n 0 }) : '--' }}</div>\r\n <div class=\"cardtext\">Open Checklists</div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.notSubmittedInstances?.inprogress !==null ?\r\n infoCardsData?.notSubmittedInstances?.inprogress?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }}</div>\r\n <div class=\"cardtext\">In Progress Checklists</div>\r\n </div>\r\n <!-- <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.notSubmittedInstances?.delay ?\r\n infoCardsData?.notSubmittedInstances?.delay.toLocaleString('en-US', { minimumFractionDigits:\r\n 0 }) : '--' }}</div>\r\n <div class=\"cardtext\">Delay in Submission</div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-5 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{ infoCardsData?.completedInstances?.count !==null ?\r\n infoCardsData?.completedInstances?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) :\r\n '--' }}</span>\r\n <span class=\"cardtext\">Submitted Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"row h-auto py-3 px-3\">\r\n <div class=\"col-md-11\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.completionScore?.count !==null ?\r\n infoCardsData?.completionScore?.count?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 })\r\n : '--' }}%</div>\r\n <div class=\"cardtext\">Completion Score</div>\r\n <div class=\"mt-2\">\r\n <span *ngIf=\"infoComparisonCardsData?.completionScore?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.completionScore?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\"><span class=\"percent-value\">{{\r\n infoComparisonCardsData?.completionScore?.comparisonData !==null?\r\n infoComparisonCardsData?.completionScore?.comparisonData?.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span><span class=\"week-font\"> vs\r\n last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span></span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.complianceRate?.count !==null ?\r\n infoCardsData?.complianceRate?.count?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }}%</div>\r\n <div class=\"cardtext\">Compliance Score</div>\r\n <div class=\"mt-2\">\r\n <span *ngIf=\"infoComparisonCardsData?.complianceRate?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.complianceRate?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\"><span class=\"percent-value\">{{\r\n infoComparisonCardsData?.complianceRate?.comparisonData !==null?\r\n infoComparisonCardsData?.complianceRate?.comparisonData?.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span><span class=\"week-font\"> vs\r\n last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span></span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div *ngIf=\"infoCardsData?.flags?.count; else noDataFlagged\" [routerLink]=\"['/manage/trax/flags']\" class=\"cardsubcount my-2 cursor-pointer\">\r\n <u>{{\r\n infoCardsData?.flags?.count !==null ?\r\n infoCardsData?.flags?.count?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }}</u></div>\r\n <ng-template #noDataFlagged>\r\n <div class=\"cardsubcount my-2\">--</div>\r\n </ng-template>\r\n <div class=\"cardtext\">Total Flags</div>\r\n <div class=\"mt-2\">\r\n <span *ngIf=\"infoComparisonCardsData?.flags?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.flags?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\"><span class=\"percent-value\">{{\r\n infoComparisonCardsData?.flags?.comparisonData !==null ?\r\n infoComparisonCardsData?.flags?.comparisonData?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }}%</span><span class=\"week-font\"> vs\r\n last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1 mt-3\">\r\n <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateType ==='daily' ? 'text-primary' :''\"\r\n (click)=\"dateValue('daily')\">1D</div>\r\n <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateType ==='weekly' ? 'text-primary' :''\"\r\n (click)=\"dateValue('weekly')\">1W</div>\r\n <!-- <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateType ==='monthly' ? 'text-primary' :''\" (click)=\"dateValue('monthly')\">1M</div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <!-- {{receivedData}} -->\r\n <span class=\"card-label mb-2\">Checklist Info</span>\r\n <span class=\"text-sub mb-2\"> Based on {{ headerData?.date?.startDate | date: 'MMM d' }} - {{\r\n headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div>\r\n <form class=\"mt-1\" [formGroup]=\"form\">\r\n <div class=\"col-md-4 w-200px\">\r\n <lib-reactive-select [formControl]=\"selectedlistselectControl\" [idField]=\"'_id'\"\r\n [nameField]=\"'label'\" [data]=\"statusselectControl\" class=\"w-200px\"\r\n (valueChange)=\"onValueChangeStatusSelect($event)\">\r\n <ng-template let-item>\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span>{{ item.label }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <!-- <span class=\"status-text\">Status</span> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#344054\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </lib-reactive-select>\r\n </div>\r\n </form>\r\n </div>\r\n <div *ngIf=\"receivedData === 'Checklist'\"\r\n class=\"d-flex align-items-center position-relative\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 ms-4 footfallsearch\" placeholder=\"Search by Store Name\"\r\n autocomplete=\"off\" (keyup.enter)=\"searchField()\" />\r\n </div>\r\n <div *ngIf=\"receivedData !== 'Checklist'\"\r\n class=\"d-flex align-items-center position-relative\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 ms-4 footfallsearch\" placeholder=\"Search by checklist\"\r\n autocomplete=\"off\" (keyup.enter)=\"searchField()\" />\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.TangoTrax_checklist_isAdd\">\r\n <a [routerLink]=\"['/manage/trax/createChecklist']\" *ngIf=\"receivedData === 'Store'\"\r\n type=\"button\" class=\"btn btn-primary ms-4 rounded-3 text-nowrap ng-star-inserted\"\r\n tabindex=\"0\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg><span class=\"ms-2 text-white\">Create Checklist</span></a>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n\r\n <table *ngIf=\"!checklistLoading && !checklistNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th *ngIf=\"receivedData === 'Checklist' || receivedData === 'User' \"\r\n class=\"cursor-pointer\" (click)=\"sortData('date_string')\">Date\r\n <svg [ngClass]=\"sortColumName === 'date_string' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date_string' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"receivedData === 'Store' || receivedData === 'User'\"\r\n class=\"cursor-pointer\" (click)=\"sortData('checkListName')\">CheckList Name\r\n <svg [ngClass]=\"sortColumName === 'checkListName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date_string' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"receivedData === 'Checklist' || receivedData === 'User'\"\r\n class=\"cursor-pointer\" (click)=\"sortData('storeName')\">Store Name\r\n <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Checklist Owner</th>\r\n <th *ngIf=\"receivedData !== 'User'\">Submitted By</th>\r\n\r\n <th>Status</th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('submitTime_string')\">Submitted On\r\n <svg [ngClass]=\"sortColumName === 'submitTime_string' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'submittedby' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Flags</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of infoChecklistData\">\r\n <td *ngIf=\"receivedData === 'Checklist' || receivedData === 'User' \">\r\n <div class=\"table-title\">{{ item.date_string }}</div>\r\n </td>\r\n <td *ngIf=\"receivedData === 'Store' || receivedData === 'User'\">\r\n <div class=\"symbol symbol-35px symbol-circle\">\r\n <span class=\"symbol-label bg-light-primary text-primary me-2\">\r\n {{ item.checkListChar || '--' }}\r\n </span>\r\n </div>\r\n <span class=\"table-titlechecklist\">{{\r\n item.checkListName }}</span>\r\n </td>\r\n\r\n <td *ngIf=\"receivedData === 'Checklist' || receivedData === 'User'\">\r\n <div class=\"table-title\">{{ item.storeName }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ item.userName }}</div>\r\n </td>\r\n <td *ngIf=\"receivedData !== 'User'\">\r\n <div class=\"table-title\">{{ item.userEmail }}</div>\r\n </td>\r\n <td class=\"table-title\">\r\n <span class=\"badge\" [ngClass]=\"{\r\n 'badge-light-success': item.checklistStatus === 'Submitted',\r\n 'badge-light-warning': item.checklistStatus === 'In Progress',\r\n 'badge-light-primary': item.checklistStatus === 'Open',\r\n 'badge-light-danger': item.checklistStatus === 'delayed'\r\n }\">{{ item.checklistStatus | titlecase }}</span>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ item.submitTime_string?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n\r\n <td>\r\n <div class=\"table-title\">\r\n {{ item.flaggedChecklist !==null ? item?.flaggedChecklist?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title d-flex\">\r\n <ng-container *ngIf=\"item.checklistStatus === 'Submitted'\">\r\n <!-- <span [routerLink]=\"['/manage/trax/gallery']\"\r\n [queryParams]=\"{ storeId: item.store_id, checklistType: item.checkListType, ChecklistDate: item.checklistDate, checklistId: item.sourceCheckList_id }\"\r\n class=\"actionview me-4 cursor-pointer\">View</span> -->\r\n <span (click)=\"navigateToGallery(item)\"\r\n class=\"actionview me-4 cursor-pointer\">View</span>\r\n <span (click)=\"download('pdf',item )\"\r\n class=\"actiondownload cursor-pointer\">Download</span>\r\n </ng-container>\r\n <!-- <ng-container\r\n *ngIf=\"item.checklistStatus !== 'Submitted' && item.timeFlag > 0 && date !== item.date_string\">\r\n <span [ngClass]=\"date !== item.date_string ? 'diasbled': ''\"\r\n (click)=\"date !== item.date_string ? reinitiate(item._id) : null\"\r\n class=\"actiondownload\">Reinitiate</span>\r\n </ng-container> -->\r\n <ng-container>\r\n <span *ngIf=\"checklistInfoDate === item.date_string && !item.reinitiateStatus && item.checklistStatus !== 'Submitted' && item.timeFlag > 0\"\r\n (click)=\"reinitiate(item._id)\" class=\"actiondownload cursor-pointer\">\r\n Reinitiate\r\n </span>\r\n <span *ngIf=\"checklistInfoDate === item.date_string && item.reinitiateStatus && item.checklistStatus !== 'Submitted' && item.timeFlag > 0\"\r\n class=\"actionview disabled\">\r\n Reinitiate\r\n </span>\r\n </ng-container>\r\n <!-- <ng-container\r\n *ngIf=\"item.checklistStatus !== 'Submitted' && item.timeFlag <= 0 && date !== item.date_string\">\r\n <div [ngClass]=\"date !== item.date_string ? 'diasbled': ''\"\r\n (click)=\"date !== item.date_string ? 'sendalert()': '' \"\r\n class=\"actionalert diasbled\">Send Alert</div>\r\n </ng-container> -->\r\n <ng-container *ngIf=\"item.checklistStatus !== 'Submitted' && !(checklistInfoDate === item.date_string && !item.reinitiateStatus && item.checklistStatus !== 'Submitted' && item.timeFlag > 0)\">\r\n <span>--</span>\r\n </ng-container> \r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"checklistLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"checklistNoData && !checklistLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Performance Table\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"!checklistLoading && !checklistNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".grey-badge{border-radius:16px;background:var(--Gray-100, #F2F4F7);display:flex;padding:2px 8px;justify-content:center;align-items:center;color:var(--Gray-700, #344054);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:18px}.text-success{border-radius:16px;background:var(--Success-50, #ECFDF3);display:flex;padding:2px 8px 2px 6px;justify-content:center;align-items:center;gap:6px;color:var(--Success-500, #12B76A);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:18px}.checklistheading{color:var(--Gray-900, #101828);font-size:18px;font-style:normal;font-weight:600;line-height:28px}.checklisttext{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:500;line-height:18px}.totalinfocard{border-radius:5.359px;border:1px solid var(--Gray-200, #EAECF0);background:#fff;display:flex;padding:16px 12px 24px;flex-direction:column;align-items:center;gap:24px;align-self:stretch}.headingcard{color:var(--Black, #101828);font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;padding:8px;flex-direction:column;align-items:center;gap:4px;align-self:stretch;border-radius:4px;background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f9fafb}.infocount{color:var(--Black, #101828);font-size:24px;font-style:normal;font-weight:600;line-height:32px;text-align:center}.subinfocard{border-radius:5.359px;border:1px solid var(--Gray-200, #EAECF0);background:#fff;display:flex;padding:21px 12px 40px;flex-direction:column;align-items:center;gap:24px;align-self:stretch}.avgcount{color:var(--Black, #101828);font-size:14px;font-style:normal;font-weight:400;line-height:20px}.actionview{color:var(--Gray-500, #667085);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.actiondownload{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.actionalert{color:var(--Error-700, #B42318);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.cardcount{color:var(--Black, #101828);font-size:30px;font-style:normal;font-weight:600;line-height:38px}.cardtext{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardsubcount{color:var(--Black, #101828);font-size:20px;font-style:normal;font-weight:700;line-height:30px}.card-border{padding:8px;border-radius:12px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.percent-value{color:var(--Gray-500, #667085);text-align:center;font-size:16px;font-style:normal;font-weight:600;line-height:18px}.week-font{color:var(--Gray-800, #1D2939);font-size:12px;font-style:normal;font-weight:400;line-height:18px}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.rotate{transform:rotate(180deg)}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}table tr{vertical-align:middle}table th,table td{height:44px!important;padding:20px 15px!important;align-items:center;gap:12px;align-self:stretch}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px;font-style:normal;font-weight:500;line-height:20px;text-decoration-line:underline}.table-title{color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.diasbled{cursor:default;color:var(--gray-300, #D0D5DD);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;-webkit-text-decoration-line:underline;text-decoration-line:underline;text-transform:capitalize}.enabled{font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;-webkit-text-decoration-line:underline;text-decoration-line:underline;text-transform:capitalize}.table-titlechecklist{color:var(--Gray-900, #101828);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.card .card-header{padding:0px 1.5rem}\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.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i3.CustomSelectComponent, selector: "lib-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "label", "data"], outputs: ["itemChange"] }, { kind: "component", type: i8.MonthlyperformanceDatepickerComponent, selector: "lib-monthlyperformance-datepicker", inputs: ["monthlyperformce"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
|
|
619
|
+
}
|
|
620
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DashboardInfoComponent, decorators: [{
|
|
621
|
+
type: Component,
|
|
622
|
+
args: [{ selector: 'lib-dashboard-info', template: "<div *ngIf=\"receivedData === 'Checklist'\" class=\"card mb-3\">\r\n <div class=\"card-body pt-2 pb-1\">\r\n <div class=\"d-flex flex-column\">\r\n <div *ngIf=\"selectedChecklist\" class=\"d-flex flex-wrap my-2 pe-2\">\r\n <a [routerLink]=\"['/manage/trax/dashboard']\" [queryParams]=\"{type: 'Checklist'}\" class=\"d-flex align-items-center me-3 cursor-pointer\">\r\n <span><svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_987_30898)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8346 21.0001H16.168M16.168 21.0001L22.0013 26.8334M16.168 21.0001L22.0013 15.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_987_30898\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_987_30898\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_987_30898\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </a>\r\n\r\n <form class=\"mt-1 me-3 cursor-pointer\" style=\"min-width: 200px;\" [formGroup]=\"form\">\r\n <!-- <div class=\"col-md-4 w-200px\"> -->\r\n <lib-select [items]=\"checklistDropdown\" [multi]=\"false\" [searchField]=\"'checkListName'\"\r\n [idField]=\"'_id'\" [selectedValues]=\"[selectedChecklist]\" (selected)=\"onChecklistSelect($event)\">\r\n <!-- <ng-template let-item>\r\n <div class=\"d-flex justify-content-between align-items-center no-border-custom-select\">\r\n <span>{{ item.checkListName }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-template> -->\r\n </lib-select>\r\n\r\n <!-- <lib-reactive-select [formControl]=\"checklistselectControl\" [idField]=\"'_id'\"\r\n [nameField]=\"'checkListName'\" [data]=\"checklistDropdown\" class=\"w-100 \"\r\n style=\"border: none !important; box-shadow: none !important;\"\r\n (valueChange)=\"onValueChangeChecklist($event)\">\r\n <ng-template let-item>\r\n <div class=\"d-flex justify-content-between align-items-center no-border-custom-select\">\r\n <span>{{ item.checkListName }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#101828\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </lib-reactive-select> -->\r\n <!-- </div> -->\r\n </form>\r\n <div class=\"checklist-details d-flex flex-wrap mt-3\">\r\n <!-- <div class=\"d-flex align-items-center grey-badge me-3 my-3\">\r\n {{ selectedChecklist?.checkListName }}\r\n </div> -->\r\n\r\n <div class=\"d-flex align-items-center mb-2\">\r\n <span *ngIf=\"selectedChecklist?.publish\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M7.9987 14.6666C11.6806 14.6666 14.6654 11.6818 14.6654 7.99992C14.6654 4.31802 11.6806 1.33325 7.9987 1.33325C4.3168 1.33325 1.33203 4.31802 1.33203 7.99992C1.33203 11.6818 4.3168 14.6666 7.9987 14.6666Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n\r\n <span *ngIf=\"!selectedChecklist?.publish\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.9987 13.6666C10.6806 13.6666 13.6654 10.6818 13.6654 6.99992C13.6654 3.31802 10.6806 0.333252 6.9987 0.333252C3.3168 0.333252 0.332031 3.31802 0.332031 6.99992C0.332031 10.6818 3.3168 13.6666 6.9987 13.6666Z\"\r\n fill=\"#F04438\" />\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center me-3 checklisttext\">\r\n <span><svg class=\"mx-2 mb-1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M13.3346 14V12.6667C13.3346 11.9594 13.0537 11.2811 12.5536 10.781C12.0535 10.281 11.3752 10 10.668 10H5.33464C4.62739 10 3.94911 10.281 3.44902 10.781C2.94892 11.2811 2.66797 11.9594 2.66797 12.6667V14M10.668 4.66667C10.668 6.13943 9.47406 7.33333 8.0013 7.33333C6.52854 7.33333 5.33464 6.13943 5.33464 4.66667C5.33464 3.19391 6.52854 2 8.0013 2C9.47406 2 10.668 3.19391 10.668 4.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg><span class=\"mt-2\">{{ selectedChecklist?.createdByName }}</span></span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center me-3 checklisttext\">\r\n <span><svg class=\"mx-2 mb-1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M12 3H13.5C13.8978 3 14.2794 3.15804 14.5607 3.43934C14.842 3.72064 15 4.10218 15 4.5V15C15 15.3978 14.842 15.7794 14.5607 16.0607C14.2794 16.342 13.8978 16.5 13.5 16.5H4.5C4.10218 16.5 3.72064 16.342 3.43934 16.0607C3.15804 15.7794 3 15.3978 3 15V4.5C3 4.10218 3.15804 3.72064 3.43934 3.43934C3.72064 3.15804 4.10218 3 4.5 3H6M6.75 1.5H11.25C11.6642 1.5 12 1.83579 12 2.25V3.75C12 4.16421 11.6642 4.5 11.25 4.5H6.75C6.33579 4.5 6 4.16421 6 3.75V2.25C6 1.83579 6.33579 1.5 6.75 1.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg> {{ selectedChecklist?.storeCount?.toLocaleString('en-US', { minimumFractionDigits: 0\r\n }) || '--' }} Stores</span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center me-3 checklisttext\">\r\n <span><svg class=\"mx-2 mb-1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M12 1.5V4.5M6 1.5V4.5M2.25 7.5H15.75M3.75 3H14.25C15.0784 3 15.75 3.67157 15.75 4.5V15C15.75 15.8284 15.0784 16.5 14.25 16.5H3.75C2.92157 16.5 2.25 15.8284 2.25 15V4.5C2.25 3.67157 2.92157 3 3.75 3Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>Repeats {{selectedChecklist.scheduleRepeatedType === 'onetime' ? 'Single' : (selectedChecklist?.scheduleRepeatedType || '--' )}}</span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center me-3 checklisttext\">\r\n <span><svg class=\"mx-2 mb-1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_987_30895)\">\r\n <path\r\n d=\"M9 4.5V9L12 10.5M16.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\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_987_30895\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg> {{ selectedChecklist?.scheduleStartTime?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }} - {{\r\n selectedChecklist?.scheduleEndTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) ||\r\n '--' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--end::Info-->\r\n </div>\r\n </div>\r\n</div>\r\n<div *ngIf=\"receivedData === 'User'\" class=\"card mb-5\">\r\n <div class=\"card-body pt-2 pb-1\">\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"d-flex flex-wrap my-2 pe-2\">\r\n <a [routerLink]=\"['/manage/trax/dashboard']\" [queryParams]=\"{type: 'user'}\" class=\"d-flex align-items-center me-3 cursor-pointer\">\r\n <span><svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_987_30898)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M27.8346 21.0001H16.168M16.168 21.0001L22.0013 26.8334M16.168 21.0001L22.0013 15.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_987_30898\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_987_30898\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_987_30898\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </a>\r\n <div class=\"symbol symbol-35px symbol-circle\">\r\n <span class=\"symbol-label bg-light-primary text-primary me-2 mt-2\">\r\n {{ selectedUser?.userNameChar }}\r\n </span>\r\n </div>\r\n\r\n <form class=\"mt-1 me-3 cursor-pointer\" style=\"min-width: 200px;\" [formGroup]=\"form\"> \r\n <lib-select \r\n [items]=\"userlistDropdown\" \r\n [multi]=\"false\" \r\n [searchField]=\"'userName'\" \r\n [idField]=\"'userEmail'\" \r\n [selectedValues]=\"[selectedUser]\" \r\n (selected)=\"onUserSelect($event)\" \r\n >\r\n <!-- <ng-template let-item>\r\n <div class=\"d-flex justify-content-between align-items-center no-border-custom-select\">\r\n <span>{{ item.userName }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-template> -->\r\n </lib-select>\r\n <!-- <div class=\"col-md-4 w-200px\">\r\n <lib-reactive-select [formControl]=\"userlistselectControl\" [idField]=\"'userEmail'\"\r\n [nameField]=\"'userName'\" [data]=\"userlistDropdown\" class=\"w-100\"\r\n style=\"border: none !important; box-shadow: none !important;\"\r\n (valueChange)=\"onValueChangeUserChecklist($event)\">\r\n <ng-template let-item>\r\n <div class=\"d-flex justify-content-between align-items-center no-border-custom-select\">\r\n <span>{{ item.userName }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#101828\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </lib-reactive-select>\r\n </div> -->\r\n </form>\r\n\r\n <div *ngIf=\"selectedUser?.role\" class=\"checklist-details d-flex flex-wrap mt-2\">\r\n <div class=\"d-flex align-items-center badge badge-light-primary me-3 my-3\">\r\n {{ selectedUser?.role }}\r\n </div>\r\n </div>\r\n </div>\r\n <!--end::Info-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-9\">\r\n <div *ngIf=\"receivedData === 'Checklist' || receivedData === 'User'\" class=\"row\">\r\n <div class=\"col-4\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Total instances\r\n </div>\r\n <div class=\"infocount mb-6\">{{ infoCardsData?.totalInstances?.count !==null ?\r\n infoCardsData?.totalInstances?.count.toLocaleString('en-US', { minimumFractionDigits: 0 }) :\r\n '--'}}\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.totalInstances?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.totalInstances?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\">\r\n\r\n <span class=\"percent-value\">{{\r\n infoComparisonCardsData?.totalInstances?.comparisonData !==null\r\n ?infoComparisonCardsData?.totalInstances?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span>\r\n <span class=\"week-font\"> vs last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Completed instances\r\n </div>\r\n <div class=\"infocount mb-6\">{{ infoCardsData?.completedInstances?.count !==null ?\r\n infoCardsData?.completedInstances?.count.toLocaleString('en-US', { minimumFractionDigits: 0\r\n }) : '--' }}\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.completedInstances?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.completedInstances?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\">\r\n <span class=\"percent-value\">{{\r\n infoComparisonCardsData?.completedInstances?.comparisonData !==null\r\n ?infoComparisonCardsData?.completedInstances?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span>\r\n <span class=\"week-font\"> vs last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Flags\r\n </div>\r\n <div class=\"infocount mb-6\">{{ infoCardsData?.flags?.count !==null ?\r\n infoCardsData?.flags?.count.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.flags?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.flags?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\">\r\n <span class=\"percent-value\">{{ infoComparisonCardsData?.flags?.comparisonData\r\n !==null ? infoComparisonCardsData?.flags?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span>\r\n <span class=\"week-font\"> vs last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span>\r\n </span>\r\n </div>\r\n <!-- <div class=\"avgcount\">Avg Flag Rate : {{ infoCardsData.flags.count ? '50%' : 'N/A' }}</div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"receivedData === 'Checklist'\" class=\"row my-3\">\r\n <div class=\"col-6\">\r\n <div class=\"subinfocard\">\r\n <div class=\"headingcard\">\r\n Completion Score\r\n </div>\r\n\r\n <div class=\"infocount\">\r\n {{ infoCardsData?.completionScore?.count !==null ?\r\n infoCardsData?.completionScore?.count.toLocaleString('en-US', { minimumFractionDigits: 0 })\r\n : '--' }}%\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.completionScore?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.completionScore?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\">\r\n <span class=\"percent-value\">{{\r\n infoComparisonCardsData?.completionScore?.comparisonData !==null ?\r\n infoComparisonCardsData?.completionScore?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }} %</span>\r\n <span class=\"week-font\"> vs last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"subinfocard\">\r\n <div class=\"headingcard\">\r\n Compliance Rate\r\n </div>\r\n <div class=\"infocount\">\r\n\r\n {{ infoCardsData?.complianceRate?.count !==null ?\r\n infoCardsData?.complianceRate?.count.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }} %\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.complianceRate?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.complianceRate?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\">\r\n <span class=\"percent-value\">{{\r\n infoComparisonCardsData?.complianceRate?.comparisonData !==null\r\n ?infoComparisonCardsData?.complianceRate?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span>\r\n <span class=\"week-font\"> vs last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"receivedData === 'User'\" class=\"row my-3\">\r\n <div class=\"col-6\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Completion Score\r\n </div>\r\n <div class=\"infocount mb-6\">{{ infoCardsData?.completionScore?.count !==null ?\r\n infoCardsData?.completionScore?.count.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--'}} %\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.completionScore?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.completionScore?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\"><span class=\"percent-value\">{{\r\n infoComparisonCardsData?.completionScore?.comparisonData !==null ?\r\n infoComparisonCardsData?.completionScore?.comparisonData.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span><span class=\"week-font\"> vs last\r\n <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span></span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"col-6\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Compliance Rate\r\n </div>\r\n <div class=\"infocount mb-6\">{{ infoCardsData?.complianceRate?.count !==null ?\r\n infoCardsData?.complianceRate?.count.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }} %\r\n <div>\r\n <span *ngIf=\"infoComparisonCardsData?.complianceRate?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.complianceRate?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\"><span class=\"percent-value\">{{\r\n infoComparisonCardsData?.complianceRate?.comparisonData !==null ?\r\n infoComparisonCardsData?.complianceRate?.comparisonData.toLocaleString('en-US',\r\n { minimumFractionDigits: 0 }) :\r\n '--'}}%</span><span class=\"week-font\"> vs last <span\r\n *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span></span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <!-- <div class=\"col-4\">\r\n <div class=\"totalinfocard\">\r\n <div class=\"headingcard\">\r\n Assigned Tasks\r\n </div>\r\n <div class=\"infocount\"><u>6</u>\r\n <div><span class=\"mt-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\"\r\n height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg></span><span class=\"mt-2 ms-2\"><span class=\"percent-value\">13%</span><span\r\n class=\"week-font\"> vs\r\n last week</span></span></div>\r\n <div class=\"actiondownload\">View All </div>\r\n </div>\r\n \r\n \r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"infoCardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"infoCardNoData && !infoCardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Checklist Performance Table\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n\r\n </div>\r\n\r\n\r\n <div *ngIf=\"receivedData === 'Checklist' || receivedData === 'User'\" class=\"col-3\">\r\n <lib-monthlyperformance-datepicker\r\n [monthlyperformce]=\"selectedSourceCheckListId\"></lib-monthlyperformance-datepicker>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"receivedData === 'Store'\" class=\"row mb-4 d-flex justify-content-between align-items-stretch\">\r\n <div class=\"col-2 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{ infoCardsData?.activeUnique !==null ?\r\n infoCardsData?.activeUnique?.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--'\r\n }}</span>\r\n <span class=\"cardtext\">Active Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.totalInstances?.count !==null ?\r\n infoCardsData?.totalInstances?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) :\r\n '--' }}</div>\r\n <div class=\"cardtext\">Checklist Instances</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-5 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{ infoCardsData?.notSubmittedInstances?.count !==null ?\r\n infoCardsData?.notSubmittedInstances?.count?.toLocaleString('en-US', { minimumFractionDigits: 0\r\n }) : '--' }}</span>\r\n <span class=\"cardtext\">Not Submitted Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"row h-auto py-3 px-3\">\r\n <div class=\"col-md-6\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.notSubmittedInstances?.open !==null ?\r\n infoCardsData?.notSubmittedInstances?.open?.toLocaleString('en-US', { minimumFractionDigits:\r\n 0 }) : '--' }}</div>\r\n <div class=\"cardtext\">Open Checklists</div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.notSubmittedInstances?.inprogress !==null ?\r\n infoCardsData?.notSubmittedInstances?.inprogress?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }}</div>\r\n <div class=\"cardtext\">In Progress Checklists</div>\r\n </div>\r\n <!-- <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.notSubmittedInstances?.delay ?\r\n infoCardsData?.notSubmittedInstances?.delay.toLocaleString('en-US', { minimumFractionDigits:\r\n 0 }) : '--' }}</div>\r\n <div class=\"cardtext\">Delay in Submission</div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-5 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{ infoCardsData?.completedInstances?.count !==null ?\r\n infoCardsData?.completedInstances?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) :\r\n '--' }}</span>\r\n <span class=\"cardtext\">Submitted Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"row h-auto py-3 px-3\">\r\n <div class=\"col-md-11\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.completionScore?.count !==null ?\r\n infoCardsData?.completionScore?.count?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 })\r\n : '--' }}%</div>\r\n <div class=\"cardtext\">Completion Score</div>\r\n <div class=\"mt-2\">\r\n <span *ngIf=\"infoComparisonCardsData?.completionScore?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.completionScore?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\"><span class=\"percent-value\">{{\r\n infoComparisonCardsData?.completionScore?.comparisonData !==null?\r\n infoComparisonCardsData?.completionScore?.comparisonData?.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span><span class=\"week-font\"> vs\r\n last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span></span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">{{ infoCardsData?.complianceRate?.count !==null ?\r\n infoCardsData?.complianceRate?.count?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }}%</div>\r\n <div class=\"cardtext\">Compliance Score</div>\r\n <div class=\"mt-2\">\r\n <span *ngIf=\"infoComparisonCardsData?.complianceRate?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.complianceRate?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\"><span class=\"percent-value\">{{\r\n infoComparisonCardsData?.complianceRate?.comparisonData !==null?\r\n infoComparisonCardsData?.complianceRate?.comparisonData?.toLocaleString('en-US',\r\n {\r\n minimumFractionDigits: 0 }) : '--' }}%</span><span class=\"week-font\"> vs\r\n last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span></span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div *ngIf=\"infoCardsData?.flags?.count; else noDataFlagged\" [routerLink]=\"['/manage/trax/flags']\" class=\"cardsubcount my-2 cursor-pointer\">\r\n <u>{{\r\n infoCardsData?.flags?.count !==null ?\r\n infoCardsData?.flags?.count?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }}</u></div>\r\n <ng-template #noDataFlagged>\r\n <div class=\"cardsubcount my-2\">--</div>\r\n </ng-template>\r\n <div class=\"cardtext\">Total Flags</div>\r\n <div class=\"mt-2\">\r\n <span *ngIf=\"infoComparisonCardsData?.flags?.comparisonData\">\r\n <span class=\"mt-2\"\r\n *ngIf=\"infoComparisonCardsData?.flags?.ComparisonFlag; else showArrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_3216_118)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3216_118\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <ng-template #showArrow2>\r\n <span class=\"arrow2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"></rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-template>\r\n </span>\r\n <span class=\"mt-2 ms-2\"><span class=\"percent-value\">{{\r\n infoComparisonCardsData?.flags?.comparisonData !==null ?\r\n infoComparisonCardsData?.flags?.comparisonData?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }}%</span><span class=\"week-font\"> vs\r\n last <span *ngIf=\"dateType ==='daily'\">day</span><span\r\n *ngIf=\"dateType ==='weekly'\">week</span> <span\r\n *ngIf=\"dateType ==='monthly'\">month</span></span></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1 mt-3\">\r\n <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateType ==='daily' ? 'text-primary' :''\"\r\n (click)=\"dateValue('daily')\">1D</div>\r\n <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateType ==='weekly' ? 'text-primary' :''\"\r\n (click)=\"dateValue('weekly')\">1W</div>\r\n <!-- <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateType ==='monthly' ? 'text-primary' :''\" (click)=\"dateValue('monthly')\">1M</div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <!-- {{receivedData}} -->\r\n <span class=\"card-label mb-2\">Checklist Info</span>\r\n <span class=\"text-sub mb-2\"> Based on {{ headerData?.date?.startDate | date: 'MMM d' }} - {{\r\n headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div>\r\n <form class=\"mt-1\" [formGroup]=\"form\">\r\n <div class=\"col-md-4 w-200px\">\r\n <lib-reactive-select [formControl]=\"selectedlistselectControl\" [idField]=\"'_id'\"\r\n [nameField]=\"'label'\" [data]=\"statusselectControl\" class=\"w-200px\"\r\n (valueChange)=\"onValueChangeStatusSelect($event)\">\r\n <ng-template let-item>\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span>{{ item.label }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <!-- <span class=\"status-text\">Status</span> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#344054\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </ng-template>\r\n </lib-reactive-select>\r\n </div>\r\n </form>\r\n </div>\r\n <div *ngIf=\"receivedData === 'Checklist'\"\r\n class=\"d-flex align-items-center position-relative\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 ms-4 footfallsearch\" placeholder=\"Search by Store Name\"\r\n autocomplete=\"off\" (keyup.enter)=\"searchField()\" />\r\n </div>\r\n <div *ngIf=\"receivedData !== 'Checklist'\"\r\n class=\"d-flex align-items-center position-relative\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 ms-4 footfallsearch\" placeholder=\"Search by checklist\"\r\n autocomplete=\"off\" (keyup.enter)=\"searchField()\" />\r\n </div>\r\n <div *ngIf=\"(gs.userAccess | async)?.TangoTrax_checklist_isAdd\">\r\n <a [routerLink]=\"['/manage/trax/createChecklist']\" *ngIf=\"receivedData === 'Store'\"\r\n type=\"button\" class=\"btn btn-primary ms-4 rounded-3 text-nowrap ng-star-inserted\"\r\n tabindex=\"0\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg><span class=\"ms-2 text-white\">Create Checklist</span></a>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n\r\n <table *ngIf=\"!checklistLoading && !checklistNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th *ngIf=\"receivedData === 'Checklist' || receivedData === 'User' \"\r\n class=\"cursor-pointer\" (click)=\"sortData('date_string')\">Date\r\n <svg [ngClass]=\"sortColumName === 'date_string' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date_string' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"receivedData === 'Store' || receivedData === 'User'\"\r\n class=\"cursor-pointer\" (click)=\"sortData('checkListName')\">CheckList Name\r\n <svg [ngClass]=\"sortColumName === 'checkListName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date_string' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"receivedData === 'Checklist' || receivedData === 'User'\"\r\n class=\"cursor-pointer\" (click)=\"sortData('storeName')\">Store Name\r\n <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Checklist Owner</th>\r\n <th *ngIf=\"receivedData !== 'User'\">Submitted By</th>\r\n\r\n <th>Status</th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('submitTime_string')\">Submitted On\r\n <svg [ngClass]=\"sortColumName === 'submitTime_string' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'submittedby' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th>Flags</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of infoChecklistData\">\r\n <td *ngIf=\"receivedData === 'Checklist' || receivedData === 'User' \">\r\n <div class=\"table-title\">{{ item.date_string }}</div>\r\n </td>\r\n <td *ngIf=\"receivedData === 'Store' || receivedData === 'User'\">\r\n <div class=\"symbol symbol-35px symbol-circle\">\r\n <span class=\"symbol-label bg-light-primary text-primary me-2\">\r\n {{ item.checkListChar || '--' }}\r\n </span>\r\n </div>\r\n <span class=\"table-titlechecklist\">{{\r\n item.checkListName }}</span>\r\n </td>\r\n\r\n <td *ngIf=\"receivedData === 'Checklist' || receivedData === 'User'\">\r\n <div class=\"table-title\">{{ item.storeName }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ item.userName }}</div>\r\n </td>\r\n <td *ngIf=\"receivedData !== 'User'\">\r\n <div class=\"table-title\">{{ item.userEmail }}</div>\r\n </td>\r\n <td class=\"table-title\">\r\n <span class=\"badge\" [ngClass]=\"{\r\n 'badge-light-success': item.checklistStatus === 'Submitted',\r\n 'badge-light-warning': item.checklistStatus === 'In Progress',\r\n 'badge-light-primary': item.checklistStatus === 'Open',\r\n 'badge-light-danger': item.checklistStatus === 'delayed'\r\n }\">{{ item.checklistStatus | titlecase }}</span>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ item.submitTime_string?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n\r\n <td>\r\n <div class=\"table-title\">\r\n {{ item.flaggedChecklist !==null ? item?.flaggedChecklist?.toLocaleString('en-US', {\r\n minimumFractionDigits: 0 }) : '--' }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title d-flex\">\r\n <ng-container *ngIf=\"item.checklistStatus === 'Submitted'\">\r\n <!-- <span [routerLink]=\"['/manage/trax/gallery']\"\r\n [queryParams]=\"{ storeId: item.store_id, checklistType: item.checkListType, ChecklistDate: item.checklistDate, checklistId: item.sourceCheckList_id }\"\r\n class=\"actionview me-4 cursor-pointer\">View</span> -->\r\n <span (click)=\"navigateToGallery(item)\"\r\n class=\"actionview me-4 cursor-pointer\">View</span>\r\n <span (click)=\"download('pdf',item )\"\r\n class=\"actiondownload cursor-pointer\">Download</span>\r\n </ng-container>\r\n <!-- <ng-container\r\n *ngIf=\"item.checklistStatus !== 'Submitted' && item.timeFlag > 0 && date !== item.date_string\">\r\n <span [ngClass]=\"date !== item.date_string ? 'diasbled': ''\"\r\n (click)=\"date !== item.date_string ? reinitiate(item._id) : null\"\r\n class=\"actiondownload\">Reinitiate</span>\r\n </ng-container> -->\r\n <ng-container>\r\n <span *ngIf=\"checklistInfoDate === item.date_string && !item.reinitiateStatus && item.checklistStatus !== 'Submitted' && item.timeFlag > 0\"\r\n (click)=\"reinitiate(item._id)\" class=\"actiondownload cursor-pointer\">\r\n Reinitiate\r\n </span>\r\n <span *ngIf=\"checklistInfoDate === item.date_string && item.reinitiateStatus && item.checklistStatus !== 'Submitted' && item.timeFlag > 0\"\r\n class=\"actionview disabled\">\r\n Reinitiate\r\n </span>\r\n </ng-container>\r\n <!-- <ng-container\r\n *ngIf=\"item.checklistStatus !== 'Submitted' && item.timeFlag <= 0 && date !== item.date_string\">\r\n <div [ngClass]=\"date !== item.date_string ? 'diasbled': ''\"\r\n (click)=\"date !== item.date_string ? 'sendalert()': '' \"\r\n class=\"actionalert diasbled\">Send Alert</div>\r\n </ng-container> -->\r\n <ng-container *ngIf=\"item.checklistStatus !== 'Submitted' && !(checklistInfoDate === item.date_string && !item.reinitiateStatus && item.checklistStatus !== 'Submitted' && item.timeFlag > 0)\">\r\n <span>--</span>\r\n </ng-container> \r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"checklistLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"checklistNoData && !checklistLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Performance Table\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"!checklistLoading && !checklistNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".grey-badge{border-radius:16px;background:var(--Gray-100, #F2F4F7);display:flex;padding:2px 8px;justify-content:center;align-items:center;color:var(--Gray-700, #344054);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:18px}.text-success{border-radius:16px;background:var(--Success-50, #ECFDF3);display:flex;padding:2px 8px 2px 6px;justify-content:center;align-items:center;gap:6px;color:var(--Success-500, #12B76A);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:18px}.checklistheading{color:var(--Gray-900, #101828);font-size:18px;font-style:normal;font-weight:600;line-height:28px}.checklisttext{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:500;line-height:18px}.totalinfocard{border-radius:5.359px;border:1px solid var(--Gray-200, #EAECF0);background:#fff;display:flex;padding:16px 12px 24px;flex-direction:column;align-items:center;gap:24px;align-self:stretch}.headingcard{color:var(--Black, #101828);font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;padding:8px;flex-direction:column;align-items:center;gap:4px;align-self:stretch;border-radius:4px;background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f9fafb}.infocount{color:var(--Black, #101828);font-size:24px;font-style:normal;font-weight:600;line-height:32px;text-align:center}.subinfocard{border-radius:5.359px;border:1px solid var(--Gray-200, #EAECF0);background:#fff;display:flex;padding:21px 12px 40px;flex-direction:column;align-items:center;gap:24px;align-self:stretch}.avgcount{color:var(--Black, #101828);font-size:14px;font-style:normal;font-weight:400;line-height:20px}.actionview{color:var(--Gray-500, #667085);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.actiondownload{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.actionalert{color:var(--Error-700, #B42318);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.cardcount{color:var(--Black, #101828);font-size:30px;font-style:normal;font-weight:600;line-height:38px}.cardtext{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardsubcount{color:var(--Black, #101828);font-size:20px;font-style:normal;font-weight:700;line-height:30px}.card-border{padding:8px;border-radius:12px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.percent-value{color:var(--Gray-500, #667085);text-align:center;font-size:16px;font-style:normal;font-weight:600;line-height:18px}.week-font{color:var(--Gray-800, #1D2939);font-size:12px;font-style:normal;font-weight:400;line-height:18px}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.rotate{transform:rotate(180deg)}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}table tr{vertical-align:middle}table th,table td{height:44px!important;padding:20px 15px!important;align-items:center;gap:12px;align-self:stretch}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px;font-style:normal;font-weight:500;line-height:20px;text-decoration-line:underline}.table-title{color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.diasbled{cursor:default;color:var(--gray-300, #D0D5DD);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;-webkit-text-decoration-line:underline;text-decoration-line:underline;text-transform:capitalize}.enabled{font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;-webkit-text-decoration-line:underline;text-decoration-line:underline;text-transform:capitalize}.table-titlechecklist{color:var(--Gray-900, #101828);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.card .card-header{padding:0px 1.5rem}\n"] }]
|
|
623
|
+
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.GlobalStateService }, { type: i0.ChangeDetectorRef }, { type: i3.ToastService }, { type: i4.TraxService }, { type: i5.FormBuilder }, { type: i2.PageInfoService }, { type: i3.ToastService }] });
|
|
624
|
+
function getDaysBetweenDates(fromDate, toDate) {
|
|
625
|
+
// Parse the date strings into Date objects
|
|
626
|
+
const start = new Date(fromDate);
|
|
627
|
+
const end = new Date(toDate);
|
|
628
|
+
// Calculate the difference in milliseconds
|
|
629
|
+
const differenceInMs = end.getTime() - start.getTime();
|
|
630
|
+
// Convert milliseconds to days (1 day = 86400000 milliseconds)
|
|
631
|
+
const millisecondsPerDay = 86400000;
|
|
632
|
+
const differenceInDays = Math.floor(differenceInMs / millisecondsPerDay);
|
|
633
|
+
return differenceInDays;
|
|
634
|
+
}
|
|
635
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWluZm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy9kYXNoYm9hcmQtaW5mby9kYXNoYm9hcmQtaW5mby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2Rhc2hib2FyZC1pbmZvL2Rhc2hib2FyZC1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUV2RixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBZ0MsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBS3RGLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQWUsV0FBVyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFVckUsTUFBTSxPQUFPLHNCQUFzQjtJQXNFYjtJQUErQjtJQUF1QjtJQUFnQztJQUEyQztJQUMzSTtJQUFrQztJQUF5QjtJQUFtQztJQXRFeEcsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNOLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ3ZCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQ3ZDLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsWUFBWSxHQUFHLEVBQUUsQ0FBQTtJQUNqQixXQUFXLEdBQUcsQ0FBQyxDQUFBO0lBQ2YsVUFBVSxHQUFHLENBQUMsQ0FBQTtJQUNkLGVBQWUsR0FBVSxFQUFFLENBQUM7SUFDNUIsUUFBUSxHQUFHLEVBQUUsQ0FBQTtJQUNiLGFBQWEsR0FBVyxFQUFFLENBQUM7SUFDM0IsTUFBTSxHQUFRLEVBQUUsQ0FBQztJQUNqQixhQUFh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LENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuLy8gaW1wb3J0IHsgVHJheFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmF4LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmF4U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYXguc2VydmljZSc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1kYXNoYm9hcmQtaW5mbycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC1pbmZvLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZGFzaGJvYXJkLWluZm8uY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkSW5mb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcclxuICBkYXlqcyA9IGRheWpzO1xyXG4gIHByaXZhdGUgZGV0YWNoID0gbmV3IFN1YmplY3QoKTtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBpc0V4cG9ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGl0ZW1zUGVyUGFnZSA9IDEwXHJcbiAgY3VycmVudFBhZ2UgPSAxXHJcbiAgdG90YWxJdGVtcyA9IDBcclxuICBwYWdpbmF0aW9uU2l6ZXM6IGFueVtdID0gW107XHJcbiAgcGFnZVNpemUgPSAxMFxyXG4gIHNvcnRDb2x1bU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHNvcnRCeTogYW55ID0gJyc7XHJcbiAgc29ydERpcmVjdGlvbjogYW55ID0gJyc7XHJcbiAgc2VhcmNoSW5wdXQ6IGFueSA9IFwiXCI7XHJcbiAgaW5mb0NoZWNrbGlzdERhdGE6IGFueVtdID0gW107XHJcbiAgY2hlY2tsaXN0RHJvcGRvd246IGFueVtdID0gW107XHJcbiAgdXNlcmxpc3REcm9wZG93bjogYW55W10gPSBbXTtcclxuICBzZWFyY2hEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGludm9pY2VMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGNoZWNrbGlzdExvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGNoZWNrbGlzdE5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhlYWRlckRhdGE6IGFueTtcclxuICByZWNlaXZlZERhdGE6IHN0cmluZyA9IFwiQ2hlY2tsaXN0XCI7XHJcbiAgZm9ybTogRm9ybUdyb3VwO1xyXG4gIHNlbGVjdENvbnRyb2w6IEZvcm1Db250cm9sO1xyXG4gIGNoZWNrbGlzdHNlbGVjdENvbnRyb2w6IEZvcm1Db250cm9sO1xyXG4gIHVzZXJsaXN0c2VsZWN0Q29udHJvbDogRm9ybUNvbnRyb2w7XHJcbiAgc2VsZWN0ZWRsaXN0c2VsZWN0Q29udHJvbDogRm9ybUNvbnRyb2w7XHJcblxyXG4gIHNlbGVjdGVkVXNlcjogYW55O1xyXG4gIHNlbGVjdGVkVXNlclR5cGU6IHN0cmluZztcclxuICBzZWxlY3RlZFNvdXJjZVVzZXJJZDogc3RyaW5nO1xyXG5cclxuICBzZWxlY3RlZFN0YXR1czogYW55O1xyXG4gIHNlbGVjdGVkU3RhdHVzVHlwZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU291cmNlU3RhdHVzSWQ6IHN0cmluZztcclxuICBkYXRlVHlwZSA9IFwiZGFpbHlcIjtcclxuICAvLyBkYXRhc2V0czogQXJyYXk8eyB2YWx1ZTogc3RyaW5nLCBsYWJlbDogc3RyaW5nIH0+ID0gW1xyXG4gIC8vICAgeyB2YWx1ZTogJ09wZW4nLCBsYWJlbDogJ09wZW4nIH0sXHJcbiAgLy8gICB7IHZhbHVlOiAnSW5wcm9ncmVzcycsIGxhYmVsOiAnSW5wcm9ncmVzcycgfSxcclxuICAvLyAgIHsgdmFsdWU6ICdEZWxheWVkJywgbGFiZWw6ICdEZWxheWVkJyB9LFxyXG4gIC8vICAgeyB2YWx1ZTogJ1N1Ym1pdHRlZCcsIGxhYmVsOiAnU3VibWl0dGVkJyB9LFxyXG4gIC8vICAgeyB2YWx1ZTogJ1JlRG8nLCBsYWJlbDogJ1JlRG8nIH0sXHJcbiAgLy8gXTtcclxuXHJcbiAgY2hlY2tsaXN0ZGF0YXNldHM6IEFycmF5PHsgdmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZyB9PiA9IFtdO1xyXG4gIGluZm9DYXJkRGF0YUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGluZm9DYXJkTm9EYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW5mb0NhcmRzRGF0YTogYW55ID0ge307XHJcbiAgLy8gaW5mb0NoZWNrbGlzdERhdGE6IGFueSA9IHt9O1xyXG4gIHNlbGVjdGVkQ2hlY2tsaXN0OiBhbnk7XHJcbiAgc2VsZWN0ZWRDaGVja2xpc3RUeXBlOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRTb3VyY2VDaGVja0xpc3RJZDogc3RyaW5nO1xyXG4gIHNlbGVjdERyb3Bkb3duOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkdmFsdWU6IGFueTtcclxuICBzdGF0dXNzZWxlY3RDb250cm9sID0gW1xyXG4gICAgeyBfaWQ6ICdBbGwnLCBsYWJlbDogJ0FsbCcgfSxcclxuICAgIHsgX2lkOiAnb3BlbicsIGxhYmVsOiAnT3BlbicgfSxcclxuICAgIHsgX2lkOiAnaW5wcm9ncmVzcycsIGxhYmVsOiAnSW4gUHJvZ3Jlc3MnIH0sXHJcbiAgICB7IF9pZDogJ3N1Ym1pdCcsIGxhYmVsOiAnU3VibWl0dGVkJyB9LFxyXG4gIF07XHJcbiAgdGltZUZsYWc6IGFueTtcclxuICBkYXRlOiBhbnk7XHJcbiAgaW5mb0NvbXBhcmlzb25DYXJkc0RhdGE6IGFueSA9IHt9O1xyXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmc7XHJcbiAgbGltaXQ6IG51bWJlcjtcclxuICBvZmZzZXQ6IG51bWJlcjtcclxuICBkYXRlTGVuZ3RoOiBudW1iZXI7XHJcbiAgY2hlY2tsaXN0SW5mb0RhdGU6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBUcmF4U2VydmljZTogVHJheFNlcnZpY2UsIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIHBhZ2VJbmZvOiBQYWdlSW5mb1NlcnZpY2UsIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2VcclxuICApIHsgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5kZXRhY2gubmV4dCh0cnVlKTtcclxuICAgIC8vIHRoaXMuZGV0YWNoLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0ZVR5cGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGFzaGJvYXJkRGF0ZVR5cGUnKSB8fCAnZGVmYXVsdFR5cGUnO1xyXG4gICAgdGhpcy5zZWxlY3RlZGxpc3RzZWxlY3RDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCdBbGwnKTtcclxuICAgIHRoaXMuZGF0ZSA9IHRoaXMuZGF5anMoKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgIHRoaXMuY2hlY2tsaXN0SW5mb0RhdGUgPSB0aGlzLmRheWpzKCkuZm9ybWF0KCdERCBNTU0gWVlZWScpO1xyXG4gICAgdGhpcy5yb3V0ZT8ucXVlcnlQYXJhbXNcclxuICAgIHRoaXMucm91dGU/LnF1ZXJ5UGFyYW1zXHJcbiAgICAgID8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdDaGVja2xpc3QnKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkdmFsdWUgPSBwYXJhbXMuY2hlY2tsaXN0XHJcbiAgICAgICAgICBpZiAocGFyYW1zLnN0YXR1cyA9PSAnc3VibWl0Jykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkbGlzdHNlbGVjdENvbnRyb2wuc2V0VmFsdWUoJ3N1Ym1pdCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZWNlaXZlZERhdGEgPSAnQ2hlY2tsaXN0JztcclxuICAgICAgICAgIHRoaXMuaW5mb0NhcmRzRGF0YSA9IHBhcmFtcy5jaGVja2xpc3REYXRhID8gSlNPTi5wYXJzZShwYXJhbXMuY2hlY2tsaXN0RGF0YSkgOiBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnR5cGUgPT09ICdzdG9yZScpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWR2YWx1ZSA9IHBhcmFtcy5zdG9yZV9pZFxyXG4gICAgICAgICAgdGhpcy5yZWNlaXZlZERhdGEgPSAnU3RvcmUnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnR5cGUgPT09ICd1c2VyJykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZHZhbHVlID0gcGFyYW1zLnVzZXJFbWFpbFxyXG4gICAgICAgICAgdGhpcy5yZWNlaXZlZERhdGEgPSAnVXNlcic7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNoZWNrbGlzdHNlbGVjdENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGNoZWNrbGlzdHNlbGVjdENvbnRyb2w6IHRoaXMuY2hlY2tsaXN0c2VsZWN0Q29udHJvbFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoZWNrbGlzdHNlbGVjdENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5vbkNoZWNrbGlzdFNlbGVjdCh7X2lkOnRoaXMuc2VsZWN0ZWR2YWx1ZX0pO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMudXNlcmxpc3RzZWxlY3RDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB1c2VybGlzdHNlbGVjdENvbnRyb2w6IHRoaXMudXNlcmxpc3RzZWxlY3RDb250cm9sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXNlcmxpc3RzZWxlY3RDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25Vc2VyU2VsZWN0KHt1c2VyRW1haWw6dmFsdWV9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBzZWxlY3RlZGxpc3RzZWxlY3RDb250cm9sOiB0aGlzLnNlbGVjdGVkbGlzdHNlbGVjdENvbnRyb2xcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZWxlY3RlZGxpc3RzZWxlY3RDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZVN0YXR1c1NlbGVjdCh2YWx1ZSk7XHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMuZm9ybS5nZXQodGhpcy5zdGF0dXNzZWxlY3RDb250cm9sKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoc2VsZWN0ZWRTdGF0dXMpID0+IHtcclxuICAgIC8vICAgdGhpcy5vblZhbHVlQ2hhbmdlU3RhdHVzU2VsZWN0KHNlbGVjdGVkU3RhdHVzKTtcclxuICAgIC8vIH0pO1xyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgZGVib3VuY2VUaW1lKDMwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLmhlYWRlckRhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgLy8gdGhpcy5kYXRlTGVuZ3RoID0gZ2V0RGF5c0JldHdlZW5EYXRlcyhkYXRhPy5kYXRlLnN0YXJ0RGF0ZSwgZGF0YT8uZGF0ZS5lbmREYXRlKTtcclxuICAgICAgICAgIC8vIGlmICh0aGlzLmRhdGVMZW5ndGggPiAyOClcclxuICAgICAgICAgIC8vICAgdGhpcy5kYXRlVHlwZSA9IFwibW9udGhseVwiO1xyXG4gICAgICAgICAgLy8gZWxzZSBpZiAodGhpcy5kYXRlTGVuZ3RoID4gNSlcclxuICAgICAgICAgIC8vICAgdGhpcy5kYXRlVHlwZSA9IFwid2Vla2x5XCI7XHJcbiAgICAgICAgICAvLyBlbHNlIGlmKHRoaXMuZGF0ZUxlbmd0aCA9PT0gMClcclxuICAgICAgICAgIC8vICAgdGhpcy5kYXRlVHlwZSA9IFwid2Vla2x5XCI7XHJcblxyXG4gICAgICAgICAgdGhpcy5zZXRQYWdlRGF0YSgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucmVjZWl2ZWREYXRhID09PSAnQ2hlY2tsaXN0Jykge1xyXG4gICAgICAgICAgICB0aGlzLmdldGNoZWNrbGlzdERyb3Bkb3duKCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVjZWl2ZWREYXRhID09PSAnVXNlcicpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRVc2VybGlzdERyb3Bkb3duKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRJbmZvQ2FyZHNEYXRhKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0SW5mb0NvbXBhcmlzb25DYXJkc0RhdGEoKVxyXG4gICAgICAgICAgICB0aGlzLmdldENoZWNrbGlzdEluZm9EYXRhKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhpcy5nZXRDaGVja2xpc3RJbmZvRGF0YSgpO1xyXG4gICAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIkRhc2hib2FyZFwiKTtcclxuICAgIC8vIHRoaXMucGFnZUluZm8uc2V0RGVzY3JpcHRpb24oXCJEYXNoYm9hcmRcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAgeyB0aXRsZTogXCJUYW5nbyBUcmF4XCIsIHBhdGg6IFwiL21hbmFnZS90cmF4L2Rhc2hib2FyZFwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiBcIlRhbmdvIFRyYXhcIiwgcGF0aDogXCIvbWFuYWdlL3RyYXgvZGFzaGJvYXJkXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlcmxpc3REcm9wZG93bigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLmVuZERhdGUsXHJcbiAgICAgIHN0b3JlSWQ6IHRoaXMuaGVhZGVyRGF0YS5zdG9yZXMuZmlsdGVyKChzdG9yZTogYW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOiBhbnkpID0+IHN0b3JlLnN0b3JlSWQpLFxyXG4gICAgICAvLyAgIHN0b3JlSWQ6IFtcclxuICAgICAgLy8gICAgIFwiMTEtMTc0M1wiLFxyXG4gICAgICAvLyAgICAgXCIxMS0xNzhcIixcclxuICAgICAgLy8gICAgIFwiMTEtMTQxM1wiLFxyXG4gICAgICAvLyAgICAgXCIxMS0xODMzXCIsXHJcbiAgICAgIC8vICAgICBcIjExLTY3XCIsXHJcbiAgICAgIC8vICAgICBcIjExLTcwOVwiXHJcbiAgICAgIC8vIF0sXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGEuY2xpZW50LFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLlRyYXhTZXJ2aWNlLmdldFVzZXJsaXN0RHJvcGRvd25EYXRhKHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwICYmIHJlc3BvbnNlPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAvLyBBY2Nlc3MgdGhlIGNoZWNrbGlzdERhdGEgYXJyYXkgZnJvbSB0aGUgcmVzcG9uc2VcclxuICAgICAgICAgIHRoaXMudXNlcmxpc3REcm9wZG93biA9IHJlc3BvbnNlLmRhdGE/LnVzZXJEYXRhIHx8IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXIgPSB0aGlzLnVzZXJsaXN0RHJvcGRvd24uZmluZChpdGVtID0+IGl0ZW0udXNlckVtYWlsID09PSB0aGlzLnNlbGVjdGVkdmFsdWUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRVc2VyKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlcmxpc3RzZWxlY3RDb250cm9sLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRVc2VyLnVzZXJFbWFpbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNvdXJjZUNoZWNrTGlzdElkID0gdGhpcy5zZWxlY3RlZFVzZXIudXNlckVtYWlsO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMudXNlcmxpc3REcm9wZG93bi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcmxpc3RzZWxlY3RDb250cm9sLnNldFZhbHVlKHRoaXMudXNlcmxpc3REcm9wZG93blswXS51c2VyRW1haWwpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlciA9IHRoaXMudXNlcmxpc3REcm9wZG93blswXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy51c2VybGlzdERyb3Bkb3duID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy51c2VybGlzdERyb3Bkb3duID0gW107XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldGNoZWNrbGlzdERyb3Bkb3duKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgLy8gICBzdG9yZUlkOiBbXHJcbiAgICAgIC8vICAgICBcIjExLTE3NDNcIixcclxuICAgICAgLy8gICAgIFwiMTEtMTc4XCIsXHJcbiAgICAgIC8vICAgICBcIjExLTE0MTNcIixcclxuICAgICAgLy8gICAgIFwiMTEtMTgzM1wiLFxyXG4gICAgICAvLyAgICAgXCIxMS02N1wiLFxyXG4gICAgICAvLyAgICAgXCIxMS03MDlcIlxyXG4gICAgICAvLyBdLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmhlYWRlckRhdGEuc3RvcmVzLmZpbHRlcigoc3RvcmU6IGFueSkgPT4gc3RvcmUuY2hlY2tlZCkubWFwKChzdG9yZTogYW55KSA9PiBzdG9yZS5zdG9yZUlkKSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuVHJheFNlcnZpY2UuZ2V0Q2hlY2tsaXN0RHJvcGRvd25EYXNoYm9hcmREYXRhKHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwICYmIHJlc3BvbnNlPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdERyb3Bkb3duID0gcmVzcG9uc2UuZGF0YT8uY2hlY2tsaXN0RGF0YSB8fCBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGVja2xpc3QgPSB0aGlzLmNoZWNrbGlzdERyb3Bkb3duLmZpbmQoaXRlbSA9PiBpdGVtLnNvdXJjZUNoZWNrTGlzdF9pZCA9PT0gdGhpcy5zZWxlY3RlZHZhbHVlKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ2hlY2tsaXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0c2VsZWN0Q29udHJvbC5zZXRWYWx1ZSh0aGlzLnNlbGVjdGVkQ2hlY2tsaXN0LnNvdXJjZUNoZWNrTGlzdF9pZCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGVja2xpc3RUeXBlID0gdGhpcy5zZWxlY3RlZENoZWNrbGlzdC5jaGVja0xpc3RUeXBlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkdmFsdWUgPSB0aGlzLnNlbGVjdGVkQ2hlY2tsaXN0LnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLmNoZWNrbGlzdERyb3Bkb3duLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2xpc3RzZWxlY3RDb250cm9sLnNldFZhbHVlKHRoaXMuY2hlY2tsaXN0RHJvcGRvd25bMF0uc291cmNlQ2hlY2tMaXN0X2lkKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoZWNrbGlzdCA9IHRoaXMuY2hlY2tsaXN0RHJvcGRvd25bMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0RHJvcGRvd24gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrbGlzdERyb3Bkb3duID0gW107XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRJbmZvQ2FyZHNEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbmZvQ2hlY2tsaXN0RGF0YSA9IFtdXHJcbiAgICB0aGlzLmluZm9DYXJkRGF0YUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pbmZvQ2FyZE5vRGF0YSA9IHRydWU7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmhlYWRlckRhdGEuc3RvcmVzLmZpbHRlcigoc3RvcmU6IGFueSkgPT4gc3RvcmUuY2hlY2tlZCkubWFwKChzdG9yZTogYW55KSA9PiBzdG9yZS5zdG9yZUlkKSxcclxuICAgICAgLy8gICBzdG9yZUlkOiBbXHJcbiAgICAgIC8vICAgICBcIjExLTE3NDNcIixcclxuICAgICAgLy8gICAgIFwiMTEtMTc4XCIsXHJcbiAgICAgIC8vICAgICBcIjExLTE0MTNcIixcclxuICAgICAgLy8gICAgIFwiMTEtMTgzM1wiLFxyXG4gICAgICAvLyAgICAgXCIxMS02N1wiLFxyXG4gICAgICAvLyAgICAgXCIxMS03MDlcIlxyXG4gICAgICAvLyBdLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAgICAgZ3JvdXBCeVR5cGU6IHRoaXMucmVjZWl2ZWREYXRhLFxyXG4gICAgICBncm91cEJ5VmFsdWU6IHRoaXMuc2VsZWN0ZWR2YWx1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5UcmF4U2VydmljZS5nZXRJbmZvQ2FyZHNEYXRhKHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaW5mb0NhcmREYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgIHRoaXMuaW5mb0NhcmRzRGF0YSA9IHJlc3BvbnNlLmRhdGE/Lm92ZXJhbGxJbmZvQ2FyZHMgfHwge307XHJcbiAgICAgICAgdGhpcy5pbmZvQ2FyZERhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbmZvQ2FyZE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaW5mb0NhcmRzRGF0YSA9IFtdXHJcbiAgICAgICAgdGhpcy5pbmZvQ2FyZERhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbmZvQ2FyZE5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICAgIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmluZm9DYXJkc0RhdGEgPSBbXVxyXG4gICAgICAgIHRoaXMuaW5mb0NhcmREYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5mb0NhcmROb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRJbmZvQ29tcGFyaXNvbkNhcmRzRGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5mb0NvbXBhcmlzb25DYXJkc0RhdGEgPSBbXVxyXG4gICAgdGhpcy5pbmZvQ2FyZERhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaW5mb0NhcmROb0RhdGEgPSB0cnVlO1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgc3RvcmVJZDogdGhpcy5oZWFkZXJEYXRhLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOiBhbnkpID0+IHN0b3JlLmNoZWNrZWQpLm1hcCgoc3RvcmU6IGFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIC8vICAgc3RvcmVJZDogW1xyXG4gICAgICAvLyAgICAgXCIxMS0xNzQzXCIsXHJcbiAgICAgIC8vICAgICBcIjExLTE3OFwiLFxyXG4gICAgICAvLyAgICAgXCIxMS0xNDEzXCIsXHJcbiAgICAgIC8vICAgICBcIjExLTE4MzNcIixcclxuICAgICAgLy8gICAgIFwiMTEtNjdcIixcclxuICAgICAgLy8gICAgIFwiMTEtNzA5XCJcclxuICAgICAgLy8gXSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICAgIGdyb3VwQnlUeXBlOiB0aGlzLnJlY2VpdmVkRGF0YSxcclxuICAgICAgZ3JvdXBCeVZhbHVlOiB0aGlzLnNlbGVjdGVkdmFsdWUsXHJcbiAgICAgIGRhdGVUeXBlOiB0aGlzLmRhdGVUeXBlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLlRyYXhTZXJ2aWNlLmdldEluZm9Db21wYXJpc29uQ2FyZHNEYXRhKHJlcXVlc3REYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaW5mb0NhcmREYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgIHRoaXMuaW5mb0NvbXBhcmlzb25DYXJkc0RhdGEgPSByZXNwb25zZS5kYXRhPy5pbmZvQ29tcGFyaXNvbkNhcmRzIHx8IHt9O1xyXG4gICAgICAgIHRoaXMuaW5mb0NhcmREYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5mb0NhcmROb0RhdGEgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmluZm9Db21wYXJpc29uQ2FyZHNEYXRhID0gW11cclxuICAgICAgICB0aGlzLmluZm9DYXJkRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmluZm9DYXJkTm9EYXRhID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5mb0NvbXBhcmlzb25DYXJkc0RhdGEgPSBbXVxyXG4gICAgICAgIHRoaXMuaW5mb0NhcmREYXRhTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaW5mb0NhcmROb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRDaGVja2xpc3RJbmZvRGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGVja2xpc3RMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2hlY2tsaXN0Tm9EYXRhID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFN0b3JlcyA9IHRoaXMuaGVhZGVyRGF0YS5zdG9yZXMuZmlsdGVyKChzdG9yZTogYW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOiBhbnkpID0+IHN0b3JlLnN0b3JlSWQpO1xyXG4gICAgaWYgKHNlbGVjdGVkU3RvcmVzLmxlbmd0aCA+IDEgJiYgdGhpcy5yZWNlaXZlZERhdGEgPT09ICdTdG9yZScpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RyYXgvZGFzaGJvYXJkJ10sIHtcclxuICAgICAgICBxdWVyeVBhcmFtczogeyB0eXBlOiAnc3RvcmUnIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuXHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgLy8gc3RvcmVJZDogW1wiMTEtMjUzXCIsIFwiMTEtNTExXCIsXCIxMS0xMTc2XCJdLFxyXG4gICAgICAvLyAgIHN0b3JlSWQ6IFtcclxuICAgICAgLy8gICAgIFwiMTEtMTc0M1wiLFxyXG4gICAgICAvLyAgICAgXCIxMS0xNzhcIixcclxuICAgICAgLy8gICAgIFwiMTEtMTQxM1wiLFxyXG4gICAgICAvLyAgICAgXCIxMS0xODMzXCIsXHJcbiAgICAgIC8vICAgICBcIjExLTY3XCIsXHJcbiAgICAgIC8vICAgICBcIjExLTcwOVwiXHJcbiAgICAgIC8vIF0sXHJcbiAgICAgIHN0b3JlSWQ6IHRoaXMuaGVhZGVyRGF0YS5zdG9yZXMuZmlsdGVyKChzdG9yZTogYW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOiBhbnkpID0+IHN0b3JlLnN0b3JlSWQpLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAgICAgbGltaXQ6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UgLSAxLFxyXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydERpcmVjdGlvbixcclxuICAgICAgc29ydENvbHVtbk5hbWU6IHRoaXMuc29ydENvbHVtTmFtZSxcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgICAgIGdyb3VwQnlUeXBlOiB0aGlzLnJlY2VpdmVkRGF0YSxcclxuICAgICAgZ3JvdXBCeVZhbHVlOiB0aGlzLnNlbGVjdGVkdmFsdWUsXHJcbiAgICAgIC8vIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgIGNoZWNrbGlzdFN0YXR1czogdGhpcy5zZWxlY3RlZGxpc3RzZWxlY3RDb250cm9sLnZhbHVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLlRyYXhTZXJ2aWNlLmdldENoZWNrbGlzdEluZm9EYXRhKHJlcXVlc3REYXRhKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrbGlzdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG5cclxuICAgICAgICAgIHRoaXMuaW5mb0NoZWNrbGlzdERhdGEgPSByZXNwb25zZS5kYXRhLmNoZWNrbGlzdEluZm87XHJcbiAgICAgICAgICAvLyB0aGlzLnN0YXR1c3NlbGVjdENvbnRyb2wgPSBbLi4ubmV3IFNldCh0aGlzLmluZm9DaGVja2xpc3REYXRhLm1hcChpdGVtID0+IGl0ZW0uY2hlY2tsaXN0U3RhdHVzKSldOyBcclxuICAgICAgICAgIC8vIHRoaXMub25WYWx1ZUNoYW5nZVN0YXR1c1NlbGVjdCh2YWx1ZSk7XHJcbiAgICAgICAgICAvLyB0aGlzLmluZm9DaGVja2xpc3REYXRhID0gcmVzcG9uc2UuZGF0YS5jaGVja2xpc3RJbmZvLmNoZWNrbGlzdFN0YXR1cztcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlc3BvbnNlLmRhdGEudG90YWxDb3VudFxyXG4gICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uU2l6ZXMoKVxyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3RMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50aW1lRmxhZyA9IHJlc3BvbnNlLmRhdGEudGltZUZsYWc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3ROb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmluZm9DaGVja2xpc3REYXRhID0gW11cclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDBcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5pbmZvQ2hlY2tsaXN0RGF0YSA9IFtdXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8vIG9uRXhwb3J0KCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XHJcbiAgLy8gICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAvLyAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAvLyAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlLFxyXG4gIC8vICAgICBzdG9yZUlkOiB0aGlzLmhlYWRlckRhdGEuc3RvcmVzLmZpbHRlcigoc3RvcmU6YW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOmFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgLy8gICAgIC8vIHN0b3JlSWQ6IFtcIjExLTI1M1wiLCBcIjExLTUxMVwiLFwiMTEtMTE3NlwiXSxcclxuICAvLyAgICAgY2xpZW50SWQ6dGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAvLyAgICAgLy8gdmFsdWVUeXBlOiBcInN1bVwiLFxyXG4gIC8vICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgLy8gICAgIHNvcnQ6IHRoaXMuc29ydENvbHVtTmFtZSxcclxuICAvLyAgICAgc29ydEJ5OiB0aGlzLnNvcnREaXJlY3Rpb24sXHJcbiAgLy8gICAgIGxpbWl0OiAxMDAwMCxcclxuICAvLyAgICAgb2Zmc2V0OiB0aGlzLmN1cnJlbnRQYWdlLFxyXG4gIC8vICAgICAvLyBleHBvcnQ6IHRydWVcclxuICAvLyAgIH07XHJcblxyXG4gIC8vICAgdGhpcy5UcmF4U2VydmljZS5nZXRTdW1tYXJ5VGFibGVFeHBvcnQocmVxdWVzdERhdGEpXHJcbiAgLy8gICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAvLyAgICAgLnN1YnNjcmliZSh7XHJcbiAgLy8gICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gIC8vICAgICAgICAgdGhpcy5UcmF4U2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnWm9uZVN1bW1hcnlUYWJsZScpO1xyXG4gIC8vICAgICAgIH0sXHJcbiAgLy8gICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgLy8gICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1NvbWV0aGluZyB3ZW50IFdyb25nLi4nKVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSk7XHJcbiAgLy8gfVxyXG4gIHNlYXJjaEZpZWxkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWFkZXJEYXRhLnNlYXJjaCA9IHRoaXMuc2VhcmNoSW5wdXQ7XHJcbiAgICAvLyB0aGlzLmhlYWRlckRhdGEuZXhwb3J0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMucGFnZVNpemUgPSAxMDtcclxuICAgIHRoaXMuZ2V0Q2hlY2tsaXN0SW5mb0RhdGEoKTtcclxuICB9XHJcbiAgc29ydERhdGEoY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbikge1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09IDEgPyAtMSA6IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNvcnRDb2x1bU5hbWUgPSBjb2x1bW47XHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuZ2V0Q2hlY2tsaXN0SW5mb0RhdGEoKTtcclxuICB9XHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogYW55KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuZ2V0Q2hlY2tsaXN0SW5mb0RhdGEoKVxyXG4gIH1cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogYW55KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZU9mZnNldFxyXG4gICAgdGhpcy5nZXRDaGVja2xpc3RJbmZvRGF0YSgpXHJcbiAgfVxyXG4gIHNldFBhZ2luYXRpb25TaXplcygpIHtcclxuICAgIGlmICh0aGlzLnRvdGFsSXRlbXMgPiAxMCkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gW3RoaXMudG90YWxJdGVtc107XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnRvdGFsSXRlbXM7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gb25WYWx1ZUNoYW5nZUNoZWNrbGlzdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLnNlbGVjdGVkdmFsdWUgPSBldmVudDtcclxuICAvLyAgIHRoaXMuc2VsZWN0ZWRDaGVja2xpc3QgPSB0aGlzLmNoZWNrbGlzdERyb3Bkb3duLmZpbmQoaXRlbSA9PiBpdGVtLl9pZCA9PT0gZXZlbnQpO1xyXG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRDaGVja2xpc3QpIHtcclxuICAvLyAgICAgdGhpcy5zZWxlY3RlZENoZWNrbGlzdFR5cGUgPSB0aGlzLnNlbGVjdGVkQ2hlY2tsaXN0LmNoZWNrTGlzdFR5cGU7XHJcbiAgLy8gICAgIHRoaXMuc2VsZWN0ZWRTb3VyY2VDaGVja0xpc3RJZCA9IHRoaXMuc2VsZWN0ZWRDaGVja2xpc3Quc291cmNlQ2hlY2tMaXN0X2lkO1xyXG5cclxuICAvLyAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgLy8gICAgIHRoaXMuZ2V0SW5mb0NhcmRzRGF0YSgpO1xyXG4gIC8vICAgICB0aGlzLmdldEluZm9Db21wYXJpc29uQ2FyZHNEYXRhKCk7XHJcbiAgLy8gICAgIHRoaXMuZ2V0Q2hlY2tsaXN0SW5mb0RhdGEoKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIG9uQ2hlY2tsaXN0U2VsZWN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDaGVja2xpc3QgPSB0aGlzLmNoZWNrbGlzdERyb3Bkb3duLmZpbmQoaXRlbSA9PiBpdGVtLl9pZCA9PT0gZXZlbnQ/Ll9pZCk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZENoZWNrbGlzdCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkdmFsdWUgPSBldmVudC5faWQ7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDaGVja2xpc3RUeXBlID0gdGhpcy5zZWxlY3RlZENoZWNrbGlzdC5jaGVja0xpc3RUeXBlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU291cmNlQ2hlY2tMaXN0SWQgPSB0aGlzLnNlbGVjdGVkQ2hlY2tsaXN0LnNvdXJjZUNoZWNrTGlzdF9pZDtcclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGNoZWNrbGlzdDogdGhpcy5zZWxlY3RlZFNvdXJjZUNoZWNrTGlzdElkIH0sXHJcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuZ2V0SW5mb0NhcmRzRGF0YSgpO1xyXG4gICAgICB0aGlzLmdldEluZm9Db21wYXJpc29uQ2FyZHNEYXRhKCk7XHJcbiAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0SW5mb0RhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uVXNlclNlbGVjdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkdmFsdWUgPSBldmVudDtcclxuICAgIHRoaXMuc2VsZWN0ZWRVc2VyID0gdGhpcy51c2VybGlzdERyb3Bkb3duLmZpbmQoaXRlbSA9PiBpdGVtLnVzZXJFbWFpbCA9PT0gZXZlbnQ/LnVzZXJFbWFpbCk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFVzZXIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZHZhbHVlID0gZXZlbnQudXNlckVtYWlsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU291cmNlQ2hlY2tMaXN0SWQgPSB0aGlzLnNlbGVjdGVkVXNlci51c2VyRW1haWw7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsgdXNlckVtYWlsOiB0aGlzLnNlbGVjdGVkVXNlci51c2VyRW1haWwgfSxcclxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuZ2V0SW5mb0NhcmRzRGF0YSgpO1xyXG4gICAgICB0aGlzLmdldEluZm9Db21wYXJpc29uQ2FyZHNEYXRhKCk7XHJcbiAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0SW5mb0RhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvLyBvblZhbHVlQ2hhbmdlVXNlckNoZWNrbGlzdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLnNlbGVjdGVkdmFsdWUgPSBldmVudDtcclxuICAvLyAgIHRoaXMuc2VsZWN0ZWRVc2VyID0gdGhpcy51c2VybGlzdERyb3Bkb3duLmZpbmQoaXRlbSA9PiBpdGVtLnVzZXJFbWFpbCA9PT0gZXZlbnQpO1xyXG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRVc2VyKSB7XHJcbiAgLy8gICAgIHRoaXMuc2VsZWN0ZWRTb3VyY2VDaGVja0xpc3RJZCA9IHRoaXMuc2VsZWN0ZWRVc2VyLnVzZXJFbWFpbDtcclxuICAvLyAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgLy8gICAgIHRoaXMuZ2V0SW5mb0NhcmRzRGF0YSgpO1xyXG4gIC8vICAgICB0aGlzLmdldEluZm9Db21wYXJpc29uQ2FyZHNEYXRhKCk7XHJcbiAgLy8gICAgIHRoaXMuZ2V0Q2hlY2tsaXN0SW5mb0RhdGEoKTtcclxuICAvLyAgIH1cclxuICAvLyAgIC8vIHRoaXMuc2VsZWN0ZWRVc2VyID0gc2VsZWN0ZWRVc2VyO1xyXG4gIC8vIH1cclxuXHJcbiAgdHJpbVRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IDEwID8gdGV4dC5zbGljZSgwLCAxMCkgKyAnLi4uJyA6IHRleHQ7XHJcbiAgfVxyXG5cclxuICBvblZhbHVlQ2hhbmdlU3RhdHVzU2VsZWN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc29ydENvbHVtTmFtZSA9IFwiXCIsXHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IFwiXCIsXHJcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBcIlwiLFxyXG4gICAgICB0aGlzLmxpbWl0ID0gMTAsXHJcbiAgICAgIHRoaXMub2Zmc2V0ID0gMSxcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDEsXHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSAxMFxyXG4gICAgdGhpcy5zZWxlY3RlZFN0YXR1cyA9IHRoaXMuc3RhdHVzc2VsZWN0Q29udHJvbC5maW5kKGl0ZW0gPT4gaXRlbS5faWQgPT09IGV2ZW50KTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RhdHVzKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAvLyB0aGlzLmdldEluZm9DYXJkc0RhdGEoKTtcclxuICAgICAgdGhpcy5nZXRDaGVja2xpc3RJbmZvRGF0YSgpO1xyXG4gICAgfSAvLyBGZXRjaCBkYXRhIGJhc2VkIG9uIHNlbGVjdGVkIHN0YXR1c1xyXG4gIH1cclxuXHJcbiAgcmVpbml0aWF0ZShpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgX2lkOiBpZFxyXG4gICAgfVxyXG4gICAgdGhpcy5UcmF4U2VydmljZS5yZWluaXRpYXRlQ2hlY2tsaXN0KHJlcXVlc3REYXRhKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrbGlzdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KGBSZWluaXRpYXRlZCBzdWNjZXNzZnVsbHkuYCk7XHJcbiAgICAgICAgICB0aGlzLmdldENoZWNrbGlzdEluZm9EYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChgU29tZXRoaW5nIHdlbnQgd3JvbmcgIWApXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIHNlbmRhbGVydCgpIHtcclxuICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KGBBbGVydCBTZW50IHN1Y2Nlc3NmdWxseS5gKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkKHR5cGU6ICdwZGYnLCBpdGVtOiBhbnkpIHtcclxuICAgIGNvbnN0IHVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyLWluZm8nKSBhcyBzdHJpbmcpXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBcImZyb21EYXRlXCI6IHRoaXMuaGVhZGVyRGF0YT8uZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIFwidG9EYXRlXCI6IHRoaXMuaGVhZGVyRGF0YT8uZGF0ZS5lbmREYXRlLFxyXG4gICAgICBcImNoZWNrbGlzdElkXCI6IFtpdGVtLl9pZF0sXHJcbiAgICAgIFwic291cmNlQ2hlY2tMaXN0X2lkXCI6ICcnLFxyXG4gICAgICBcImNoZWNrbGlzdE5hbWVcIjogaXRlbS5jaGVja0xpc3ROYW1lLFxyXG4gICAgICBcImZpbGVUeXBlXCI6IHR5cGUsXHJcbiAgICAgIC8vIFwic3RvcmVJZHNcIjogdGhpcy5oZWFkZXJEYXRhPy5zdG9yZXMubWFwKCh2YWw6IHsgc3RvcmVJZDogc3RyaW5nLCBzdG9yZU5hbWU6IHN0cmluZyB9KSA9PiB2YWwuc3RvcmVJZCksXHJcbiAgICAgIFwic3RvcmVJZHNcIjogW2l0ZW0uc3RvcmVfaWRdLFxyXG4gICAgICBcInVzZXJJZFwiOiB1c2VyPy5faWQsXHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJEYXRhPy5jbGllbnQsXHJcbiAgICAgIFwiZG93bmxvYWRJbnNlcnRGcm9tXCI6IFwiZGFzaGJvYXJkXCIsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5UcmF4U2VydmljZS5yZXBvcnRUYWJsZUV4cG9ydChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChgPGRpdj48c3BhbiBjbGFzcz1cIm1lLThcIiA+RG93bmxvYWRpbmcgeW91ciByZXBvcnRzPC9zcGFuPjxhIGhyZWY9XCIvbm90aWZpY2F0aW9ucy9hbGVydHM/dGFiPWRvd25sb2FkXCIgc3R5bGU9XCJjb2xvcjojOTljM2ZmOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBjdXJzb3I6cG9pbnRlclwiID5WaWV3PC9hPjwvZGl2PmApXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFNvbWV0aGluZyB3ZW50IHdyb25nICFgKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcbiAgZGF0ZVZhbHVlKHR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlVHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLmdldEluZm9Db21wYXJpc29uQ2FyZHNEYXRhKCk7XHJcbiAgfVxyXG4gIG5hdmlnYXRlVG9HYWxsZXJ5KGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3RyYXgvZ2FsbGVyeSddLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgQ2hlY2tsaXN0RGF0ZTogaXRlbS5jaGVja2xpc3REYXRlLFxyXG4gICAgICAgIHN0b3JlSWQ6IGl0ZW0uc3RvcmVfaWQsXHJcbiAgICAgICAgY2hlY2tsaXN0VHlwZTogaXRlbS5jaGVja0xpc3RUeXBlLFxyXG4gICAgICAgIGNoZWNrbGlzdElkOiBpdGVtLnNvdXJjZUNoZWNrTGlzdF9pZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmludGVyZmFjZSBEYXRhQ29udGV4dCB7XHJcbiAgY2F0ZWdvcnk6IHN0cmluZztcclxuICB2YWx1ZTogbnVtYmVyO1xyXG4gIGNvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldERheXNCZXR3ZWVuRGF0ZXMoZnJvbURhdGU6IHN0cmluZywgdG9EYXRlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIC8vIFBhcnNlIHRoZSBkYXRlIHN0cmluZ3MgaW50byBEYXRlIG9iamVjdHNcclxuICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKGZyb21EYXRlKTtcclxuICBjb25zdCBlbmQgPSBuZXcgRGF0ZSh0b0RhdGUpO1xyXG5cclxuICAvLyBDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gbWlsbGlzZWNvbmRzXHJcbiAgY29uc3QgZGlmZmVyZW5jZUluTXMgPSBlbmQuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpO1xyXG5cclxuICAvLyBDb252ZXJ0IG1pbGxpc2Vjb25kcyB0byBkYXlzICgxIGRheSA9IDg2NDAwMDAwIG1pbGxpc2Vjb25kcylcclxuICBjb25zdCBtaWxsaXNlY29uZHNQZXJEYXkgPSA4NjQwMDAwMDtcclxuICBjb25zdCBkaWZmZXJlbmNlSW5EYXlzID0gTWF0aC5mbG9vcihkaWZmZXJlbmNlSW5NcyAvIG1pbGxpc2Vjb25kc1BlckRheSk7XHJcblxyXG4gIHJldHVybiBkaWZmZXJlbmNlSW5EYXlzO1xyXG59IiwiPGRpdiAqbmdJZj1cInJlY2VpdmVkRGF0YSA9PT0gJ0NoZWNrbGlzdCdcIiBjbGFzcz1cImNhcmQgbWItM1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwdC0yIHBiLTFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZENoZWNrbGlzdFwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBteS0yIHBlLTJcIj5cclxuICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS90cmF4L2Rhc2hib2FyZCddXCIgW3F1ZXJ5UGFyYW1zXT1cInt0eXBlOiAnQ2hlY2tsaXN0J31cIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWUtMyBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjxzdmcgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzk4N18zMDg5OClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yNy44MzQ2IDIxLjAwMDFIMTYuMTY4TTE2LjE2OCAyMS4wMDAxTDIyLjAwMTMgMjYuODMzNE0xNi4xNjggMjEuMDAwMUwyMi4wMDEzIDE1LjE2NjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzk4N18zMDg5OFwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93Xzk4N18zMDg5OFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfOTg3XzMwODk4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG5cclxuICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwibXQtMSBtZS0zIGN1cnNvci1wb2ludGVyXCIgc3R5bGU9XCJtaW4td2lkdGg6IDIwMHB4O1wiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC00IHctMjAwcHhcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgW2l0ZW1zXT1cImNoZWNrbGlzdERyb3Bkb3duXCIgW211bHRpXT1cImZhbHNlXCIgW3NlYXJjaEZpZWxkXT1cIidjaGVja0xpc3ROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidfaWQnXCIgW3NlbGVjdGVkVmFsdWVzXT1cIltzZWxlY3RlZENoZWNrbGlzdF1cIiAoc2VsZWN0ZWQpPVwib25DaGVja2xpc3RTZWxlY3QoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXRlbXBsYXRlIGxldC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG5vLWJvcmRlci1jdXN0b20tc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5jaGVja0xpc3ROYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNCA2TDggMTBMMTIgNlwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGliLXNlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGliLXJlYWN0aXZlLXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiY2hlY2tsaXN0c2VsZWN0Q29udHJvbFwiICBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ2NoZWNrTGlzdE5hbWUnXCIgW2RhdGFdPVwiY2hlY2tsaXN0RHJvcGRvd25cIiBjbGFzcz1cInctMTAwIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7IGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZUNoZWNrbGlzdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG5vLWJvcmRlci1jdXN0b20tc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5jaGVja0xpc3ROYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQgNkw4IDEwTDEyIDZcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2xpc3QtZGV0YWlscyBkLWZsZXggZmxleC13cmFwIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdyZXktYmFkZ2UgbWUtMyBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkQ2hlY2tsaXN0Py5jaGVja0xpc3ROYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRDaGVja2xpc3Q/LnB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03Ljk5ODcgMTQuNjY2NkMxMS42ODA2IDE0LjY2NjYgMTQuNjY1NCAxMS42ODE4IDE0LjY2NTQgNy45OTk5MkMxNC42NjU0IDQuMzE4MDIgMTEuNjgwNiAxLjMzMzI1IDcuOTk4NyAxLjMzMzI1QzQuMzE2OCAxLjMzMzI1IDEuMzMyMDMgNC4zMTgwMiAxLjMzMjAzIDcuOTk5OTJDMS4zMzIwMyAxMS42ODE4IDQuMzE2OCAxNC42NjY2IDcuOTk4NyAxNC42NjY2WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMTJCNzZBXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzZWxlY3RlZENoZWNrbGlzdD8ucHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuOTk4NyAxMy42NjY2QzEwLjY4MDYgMTMuNjY2NiAxMy42NjU0IDEwLjY4MTggMTMuNjY1NCA2Ljk5OTkyQzEzLjY2NTQgMy4zMTgwMiAxMC42ODA2IDAuMzMzMjUyIDYuOTk4NyAwLjMzMzI1MkMzLjMxNjggMC4zMzMyNTIgMC4zMzIwMzEgMy4zMTgwMiAwLjMzMjAzMSA2Ljk5OTkyQzAuMzMyMDMxIDEwLjY4MTggMy4zMTY4IDEzLjY2NjYgNi45OTg3IDEzLjY2NjZaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGMDQ0MzhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWUtMyBjaGVja2xpc3R0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxzdmcgY2xhc3M9XCJteC0yIG1iLTFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzNDYgMTRWMTIuNjY2N0MxMy4zMzQ2IDExLjk1OTQgMTMuMDUzNyAxMS4yODExIDEyLjU1MzYgMTAuNzgxQzEyLjA1MzUgMTAuMjgxIDExLjM3NTIgMTAgMTAuNjY4IDEwSDUuMzM0NjRDNC42MjczOSAxMCAzLjk0OTExIDEwLjI4MSAzLjQ0OTAyIDEwLjc4MUMyLjk0ODkyIDExLjI4MTEgMi42Njc5NyAxMS45NTk0IDIuNjY3OTcgMTIuNjY2N1YxNE0xMC42NjggNC42NjY2N0MxMC42NjggNi4xMzk0MyA5LjQ3NDA2IDcuMzMzMzMgOC4wMDEzIDcuMzMzMzNDNi41Mjg1NCA3LjMzMzMzIDUuMzM0NjQgNi4xMzk0MyA1LjMzNDY0IDQuNjY2NjdDNS4zMzQ2NCAzLjE5MzkxIDYuNTI4NTQgMiA4LjAwMTMgMkM5LjQ3NDA2IDIgMTAuNjY4IDMuMTkzOTEgMTAuNjY4IDQuNjY2NjdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cIm10LTJcIj57eyBzZWxlY3RlZENoZWNrbGlzdD8uY3JlYXRlZEJ5TmFtZSB9fTwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1lLTMgY2hlY2tsaXN0dGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48c3ZnIGNsYXNzPVwibXgtMiBtYi0xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMiAzSDEzLjVDMTMuODk3OCAzIDE0LjI3OTQgMy4xNTgwNCAxNC41NjA3IDMuNDM5MzRDMTQuODQyIDMuNzIwNjQgMTUgNC4xMDIxOCAxNSA0LjVWMTVDMTUgMTUuMzk3OCAxNC44NDIgMTUuNzc5NCAxNC41NjA3IDE2LjA2MDdDMTQuMjc5NCAxNi4zNDIgMTMuODk3OCAxNi41IDEzLjUgMTYuNUg0LjVDNC4xMDIxOCAxNi41IDMuNzIwNjQgMTYuMzQyIDMuNDM5MzQgMTYuMDYwN0MzLjE1ODA0IDE1Ljc3OTQgMyAxNS4zOTc4IDMgMTVWNC41QzMgNC4xMDIxOCAzLjE1ODA0IDMuNzIwNjQgMy40MzkzNCAzLjQzOTM0QzMuNzIwNjQgMy4xNTgwNCA0LjEwMjE4IDMgNC41IDNINk02Ljc1IDEuNUgxMS4yNUMxMS42NjQyIDEuNSAxMiAxLjgzNTc5IDEyIDIuMjVWMy43NUMxMiA0LjE2NDIxIDExLjY2NDIgNC41IDExLjI1IDQuNUg2Ljc1QzYuMzM1NzkgNC41IDYgNC4xNjQyMSA2IDMuNzVWMi4yNUM2IDEuODM1NzkgNi4zMzU3OSAxLjUgNi43NSAxLjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4ge3sgc2VsZWN0ZWRDaGVja2xpc3Q/LnN0b3JlQ291bnQ/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB8fCAnLS0nIH19IFN0b3Jlczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWUtMyBjaGVja2xpc3R0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxzdmcgY2xhc3M9XCJteC0yIG1iLTFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyIDEuNVY0LjVNNiAxLjVWNC41TTIuMjUgNy41SDE1Ljc1TTMuNzUgM0gxNC4yNUMxNS4wNzg0IDMgMTUuNzUgMy42NzE1NyAxNS43NSA0LjVWMTVDMTUuNzUgMTUuODI4NCAxNS4wNzg0IDE2LjUgMTQuMjUgMTYuNUgzLjc1QzIuOTIxNTcgMTYuNSAyLjI1IDE1LjgyODQgMi4yNSAxNVY0LjVDMi4yNSAzLjY3MTU3IDIuOTIxNTcgMyAzLjc1IDNaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5SZXBlYXRzIHt7c2VsZWN0ZWRDaGVja2xpc3Quc2NoZWR1bGVSZXBlYXRlZFR5cGUgPT09ICdvbmV0aW1lJyA/ICdTaW5nbGUnIDogKHNlbGVjdGVkQ2hlY2tsaXN0Py5zY2hlZHVsZVJlcGVhdGVkVHlwZSB8fCAnLS0nICl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWUtMyBjaGVja2xpc3R0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxzdmcgY2xhc3M9XCJteC0yIG1iLTFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzk4N18zMDg5NSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSA0LjVWOUwxMiAxMC41TTE2LjUgOUMxNi41IDEzLjE0MjEgMTMuMTQyMSAxNi41IDkgMTYuNUM0Ljg1Nzg2IDE2LjUgMS41IDEzLjE0MjEgMS41IDlDMS41IDQuODU3ODYgNC44NTc4NiAxLjUgOSAxLjVDMTMuMTQyMSAxLjUgMTYuNSA0Ljg1Nzg2IDE2LjUgOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfOTg3XzMwODk1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiB7eyBzZWxlY3RlZENoZWNrbGlzdD8uc2NoZWR1bGVTdGFydFRpbWU/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAnLS0nIH19IC0ge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hlY2tsaXN0Py5zY2hlZHVsZUVuZFRpbWU/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tZW5kOjpJbmZvLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJyZWNlaXZlZERhdGEgPT09ICdVc2VyJ1wiIGNsYXNzPVwiY2FyZCBtYi01XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTIgcGItMVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXAgbXktMiBwZS0yXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvdHJheC9kYXNoYm9hcmQnXVwiICBbcXVlcnlQYXJhbXNdPVwie3R5cGU6ICd1c2VyJ31cIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWUtMyBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjxzdmcgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzk4N18zMDg5OClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yNy44MzQ2IDIxLjAwMDFIMTYuMTY4TTE2LjE2OCAyMS4wMDAxTDIyLjAwMTMgMjYuODMzNE0xNi4xNjggMjEuMDAwMUwyMi4wMDEzIDE1LjE2NjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzk4N18zMDg5OFwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93Xzk4N18zMDg5OFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfOTg3XzMwODk4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtMzVweCBzeW1ib2wtY2lyY2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtbGFiZWwgYmctbGlnaHQtcHJpbWFyeSB0ZXh0LXByaW1hcnkgbWUtMiBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkVXNlcj8udXNlck5hbWVDaGFyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtdC0xIG1lLTMgY3Vyc29yLXBvaW50ZXJcIiBzdHlsZT1cIm1pbi13aWR0aDogMjAwcHg7XCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFxyXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cInVzZXJsaXN0RHJvcGRvd25cIiBcclxuICAgICAgICAgICAgICAgIFttdWx0aV09XCJmYWxzZVwiIFxyXG4gICAgICAgICAgICAgICAgW3NlYXJjaEZpZWxkXT1cIid1c2VyTmFtZSdcIiBcclxuICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIid1c2VyRW1haWwnXCIgXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiW3NlbGVjdGVkVXNlcl1cIiBcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblVzZXJTZWxlY3QoJGV2ZW50KVwiIFxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8bmctdGVtcGxhdGUgbGV0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbm8tYm9yZGVyLWN1c3RvbS1zZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS51c2VyTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQgNkw4IDEwTDEyIDZcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L2xpYi1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgdy0yMDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwidXNlcmxpc3RzZWxlY3RDb250cm9sXCIgW2lkRmllbGRdPVwiJ3VzZXJFbWFpbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCIndXNlck5hbWUnXCIgW2RhdGFdPVwidXNlcmxpc3REcm9wZG93blwiIGNsYXNzPVwidy0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6IG5vbmUgIWltcG9ydGFudDsgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZVVzZXJDaGVja2xpc3QoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG5vLWJvcmRlci1jdXN0b20tc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udXNlck5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQgNkw4IDEwTDEyIDZcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRVc2VyPy5yb2xlXCIgY2xhc3M9XCJjaGVja2xpc3QtZGV0YWlscyBkLWZsZXggZmxleC13cmFwIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IG1lLTMgbXktM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZFVzZXI/LnJvbGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLWVuZDo6SW5mby0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicmVjZWl2ZWREYXRhID09PSAnQ2hlY2tsaXN0JyB8fCByZWNlaXZlZERhdGEgPT09ICdVc2VyJ1wiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWxpbmZvY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ2NhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIGluc3RhbmNlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9jb3VudCBtYi02XCI+e3sgaW5mb0NhcmRzRGF0YT8udG90YWxJbnN0YW5jZXM/LmNvdW50ICE9PW51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NhcmRzRGF0YT8udG90YWxJbnN0YW5jZXM/LmNvdW50LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy50b3RhbEluc3RhbmNlcz8uY29tcGFyaXNvbkRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5mb0NvbXBhcmlzb25DYXJkc0RhdGE/LnRvdGFsSW5zdGFuY2VzPy5Db21wYXJpc29uRmxhZzsgZWxzZSBzaG93QXJyb3cyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMzIxNl8xMTgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNSAzTDYuNzUgNy43NUw0LjI1IDUuMjVMMC41IDlNMTEuNSAzSDguNU0xMS41IDNWNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzMyMTZfMTE4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93QXJyb3cyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvdzJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMzI4XzQ2NTQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgOUw2Ljc1IDQuMjVMNC4yNSA2Ljc1TDAuNSAzTTExLjUgOUg4LjVNMTEuNSA5VjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIzMjhfNDY1NFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0yIG1zLTJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVyY2VudC12YWx1ZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8udG90YWxJbnN0YW5jZXM/LmNvbXBhcmlzb25EYXRhICE9PW51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID9pbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8udG90YWxJbnN0YW5jZXM/LmNvbXBhcmlzb25EYXRhLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgOiAnLS0nIH19JTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3ZWVrLWZvbnRcIj4gdnMgbGFzdCA8c3BhbiAqbmdJZj1cImRhdGVUeXBlID09PSdkYWlseSdcIj5kYXk8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSd3ZWVrbHknXCI+d2Vlazwvc3Bhbj4gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSdtb250aGx5J1wiPm1vbnRoPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbGluZm9jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGVkIGluc3RhbmNlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9jb3VudCBtYi02XCI+e3sgaW5mb0NhcmRzRGF0YT8uY29tcGxldGVkSW5zdGFuY2VzPy5jb3VudCAhPT1udWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9DYXJkc0RhdGE/LmNvbXBsZXRlZEluc3RhbmNlcz8uY291bnQudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIDogJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5jb21wbGV0ZWRJbnN0YW5jZXM/LmNvbXBhcmlzb25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5jb21wbGV0ZWRJbnN0YW5jZXM/LkNvbXBhcmlzb25GbGFnOyBlbHNlIHNob3dBcnJvdzJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8zMjE2XzExOClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS41IDNMNi43NSA3Ljc1TDQuMjUgNS4yNUwwLjUgOU0xMS41IDNIOC41TTExLjUgM1Y2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMzIxNl8xMThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dBcnJvdzI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIzMjhfNDY1NClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNSA5TDYuNzUgNC4yNUw0LjI1IDYuNzVMMC41IDNNMTEuNSA5SDguNU0xMS41IDlWNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjMyOF80NjU0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTIgbXMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcmNlbnQtdmFsdWVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NvbXBhcmlzb25DYXJkc0RhdGE/LmNvbXBsZXRlZEluc3RhbmNlcz8uY29tcGFyaXNvbkRhdGEgIT09bnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgP2luZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5jb21wbGV0ZWRJbnN0YW5jZXM/LmNvbXBhcmlzb25EYXRhLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgOiAnLS0nIH19JTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3ZWVrLWZvbnRcIj4gdnMgbGFzdCA8c3BhbiAqbmdJZj1cImRhdGVUeXBlID09PSdkYWlseSdcIj5kYXk8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSd3ZWVrbHknXCI+d2Vlazwvc3Bhbj4gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSdtb250aGx5J1wiPm1vbnRoPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbGluZm9jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZ3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvY291bnQgbWItNlwiPnt7IGluZm9DYXJkc0RhdGE/LmZsYWdzPy5jb3VudCAhPT1udWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9DYXJkc0RhdGE/LmZsYWdzPy5jb3VudC50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSA6ICctLScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uZmxhZ3M/LmNvbXBhcmlzb25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5mbGFncz8uQ29tcGFyaXNvbkZsYWc7IGVsc2Ugc2hvd0Fycm93MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzMyMTZfMTE4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgM0w2Ljc1IDcuNzVMNC4yNSA1LjI1TDAuNSA5TTExLjUgM0g4LjVNMTEuNSAzVjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAzOTg1NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8zMjE2XzExOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0Fycm93Mj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3cyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjMyOF80NjU0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS41IDlMNi43NSA0LjI1TDQuMjUgNi43NUwwLjUgM00xMS41IDlIOC41TTExLjUgOVY2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMzI4XzQ2NTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMiBtcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVyY2VudC12YWx1ZVwiPnt7IGluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5mbGFncz8uY29tcGFyaXNvbkRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9PW51bGwgPyBpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uZmxhZ3M/LmNvbXBhcmlzb25EYXRhLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgOiAnLS0nIH19JTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3ZWVrLWZvbnRcIj4gdnMgbGFzdCA8c3BhbiAqbmdJZj1cImRhdGVUeXBlID09PSdkYWlseSdcIj5kYXk8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSd3ZWVrbHknXCI+d2Vlazwvc3Bhbj4gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSdtb250aGx5J1wiPm1vbnRoPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImF2Z2NvdW50XCI+QXZnIEZsYWcgUmF0ZSA6IHt7IGluZm9DYXJkc0RhdGEuZmxhZ3MuY291bnQgPyAnNTAlJyA6ICdOL0EnIH19PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJlY2VpdmVkRGF0YSA9PT0gJ0NoZWNrbGlzdCdcIiBjbGFzcz1cInJvdyBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViaW5mb2NhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uIFNjb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9jb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaW5mb0NhcmRzRGF0YT8uY29tcGxldGlvblNjb3JlPy5jb3VudCAhPT1udWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9DYXJkc0RhdGE/LmNvbXBsZXRpb25TY29yZT8uY291bnQudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJy0tJyB9fSVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxldGlvblNjb3JlPy5jb21wYXJpc29uRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxldGlvblNjb3JlPy5Db21wYXJpc29uRmxhZzsgZWxzZSBzaG93QXJyb3cyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMzIxNl8xMTgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNSAzTDYuNzUgNy43NUw0LjI1IDUuMjVMMC41IDlNMTEuNSAzSDguNU0xMS41IDNWNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzMyMTZfMTE4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93QXJyb3cyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvdzJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMzI4XzQ2NTQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgOUw2Ljc1IDQuMjVMNC4yNSA2Ljc1TDAuNSAzTTExLjUgOUg4LjVNMTEuNSA5VjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIzMjhfNDY1NFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0yIG1zLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJjZW50LXZhbHVlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5jb21wbGV0aW9uU2NvcmU/LmNvbXBhcmlzb25EYXRhICE9PW51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NvbXBhcmlzb25DYXJkc0RhdGE/LmNvbXBsZXRpb25TY29yZT8uY29tcGFyaXNvbkRhdGEudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSA6ICctLScgfX0gJTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3ZWVrLWZvbnRcIj4gdnMgbGFzdCA8c3BhbiAqbmdJZj1cImRhdGVUeXBlID09PSdkYWlseSdcIj5kYXk8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSd3ZWVrbHknXCI+d2Vlazwvc3Bhbj4gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSdtb250aGx5J1wiPm1vbnRoPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJpbmZvY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ2NhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsaWFuY2UgUmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9jb3VudFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGluZm9DYXJkc0RhdGE/LmNvbXBsaWFuY2VSYXRlPy5jb3VudCAhPT1udWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9DYXJkc0RhdGE/LmNvbXBsaWFuY2VSYXRlPy5jb3VudC50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgOiAnLS0nIH19ICVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxpYW5jZVJhdGU/LmNvbXBhcmlzb25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5jb21wbGlhbmNlUmF0ZT8uQ29tcGFyaXNvbkZsYWc7IGVsc2Ugc2hvd0Fycm93MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzMyMTZfMTE4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgM0w2Ljc1IDcuNzVMNC4yNSA1LjI1TDAuNSA5TTExLjUgM0g4LjVNMTEuNSAzVjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAzOTg1NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8zMjE2XzExOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0Fycm93Mj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3cyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjMyOF80NjU0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS41IDlMNi43NSA0LjI1TDQuMjUgNi43NUwwLjUgM00xMS41IDlIOC41TTExLjUgOVY2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMzI4XzQ2NTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMiBtcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVyY2VudC12YWx1ZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxpYW5jZVJhdGU/LmNvbXBhcmlzb25EYXRhICE9PW51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID9pbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxpYW5jZVJhdGU/LmNvbXBhcmlzb25EYXRhLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgOiAnLS0nIH19JTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3ZWVrLWZvbnRcIj4gdnMgbGFzdCA8c3BhbiAqbmdJZj1cImRhdGVUeXBlID09PSdkYWlseSdcIj5kYXk8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSd3ZWVrbHknXCI+d2Vlazwvc3Bhbj4gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSdtb250aGx5J1wiPm1vbnRoPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZWNlaXZlZERhdGEgPT09ICdVc2VyJ1wiIGNsYXNzPVwicm93IG15LTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbGluZm9jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbiBTY29yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9jb3VudCBtYi02XCI+e3sgaW5mb0NhcmRzRGF0YT8uY29tcGxldGlvblNjb3JlPy5jb3VudCAhPT1udWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9DYXJkc0RhdGE/LmNvbXBsZXRpb25TY29yZT8uY291bnQudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIDogJy0tJ319ICVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxldGlvblNjb3JlPy5jb21wYXJpc29uRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxldGlvblNjb3JlPy5Db21wYXJpc29uRmxhZzsgZWxzZSBzaG93QXJyb3cyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMzIxNl8xMTgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNSAzTDYuNzUgNy43NUw0LjI1IDUuMjVMMC41IDlNMTEuNSAzSDguNU0xMS41IDNWNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzMyMTZfMTE4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93QXJyb3cyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvdzJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMzI4XzQ2NTQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgOUw2Ljc1IDQuMjVMNC4yNSA2Ljc1TDAuNSAzTTExLjUgOUg4LjVNMTEuNSA5VjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIzMjhfNDY1NFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0yIG1zLTJcIj48c3BhbiBjbGFzcz1cInBlcmNlbnQtdmFsdWVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NvbXBhcmlzb25DYXJkc0RhdGE/LmNvbXBsZXRpb25TY29yZT8uY29tcGFyaXNvbkRhdGEgIT09bnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxldGlvblNjb3JlPy5jb21wYXJpc29uRGF0YS50b0xvY2FsZVN0cmluZygnZW4tVVMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIDogJy0tJyB9fSU8L3NwYW4+PHNwYW4gY2xhc3M9XCJ3ZWVrLWZvbnRcIj4gdnMgbGFzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRlVHlwZSA9PT0nZGFpbHknXCI+ZGF5PC9zcGFuPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlVHlwZSA9PT0nd2Vla2x5J1wiPndlZWs8L3NwYW4+IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlVHlwZSA9PT0nbW9udGhseSdcIj5tb250aDwvc3Bhbj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsaW5mb2NhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGlhbmNlIFJhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvY291bnQgbWItNlwiPnt7IGluZm9DYXJkc0RhdGE/LmNvbXBsaWFuY2VSYXRlPy5jb3VudCAhPT1udWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9DYXJkc0RhdGE/LmNvbXBsaWFuY2VSYXRlPy5jb3VudC50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgOiAnLS0nIH19ICVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxpYW5jZVJhdGU/LmNvbXBhcmlzb25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5jb21wbGlhbmNlUmF0ZT8uQ29tcGFyaXNvbkZsYWc7IGVsc2Ugc2hvd0Fycm93MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzMyMTZfMTE4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgM0w2Ljc1IDcuNzVMNC4yNSA1LjI1TDAuNSA5TTExLjUgM0g4LjVNMTEuNSAzVjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAzOTg1NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8zMjE2XzExOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0Fycm93Mj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3cyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjMyOF80NjU0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS41IDlMNi43NSA0LjI1TDQuMjUgNi43NUwwLjUgM00xMS41IDlIOC41TTExLjUgOVY2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMzI4XzQ2NTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMiBtcy0yXCI+PHNwYW4gY2xhc3M9XCJwZXJjZW50LXZhbHVlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5jb21wbGlhbmNlUmF0ZT8uY29tcGFyaXNvbkRhdGEgIT09bnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxpYW5jZVJhdGU/LmNvbXBhcmlzb25EYXRhLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0nfX0lPC9zcGFuPjxzcGFuIGNsYXNzPVwid2Vlay1mb250XCI+IHZzIGxhc3QgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSdkYWlseSdcIj5kYXk8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSd3ZWVrbHknXCI+d2Vlazwvc3Bhbj4gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSdtb250aGx5J1wiPm1vbnRoPC9zcGFuPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWxpbmZvY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWduZWQgVGFza3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9jb3VudFwiPjx1PjY8L3U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3BhbiBjbGFzcz1cIm10LTJcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8zMjE2XzExOClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNSAzTDYuNzUgNy43NUw0LjI1IDUuMjVMMC41IDlNMTEuNSAzSDguNU0xMS41IDNWNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAzOTg1NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMzIxNl8xMThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjxzcGFuIGNsYXNzPVwibXQtMiBtcy0yXCI+PHNwYW4gY2xhc3M9XCJwZXJjZW50LXZhbHVlXCI+MTMlPC9zcGFuPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid2Vlay1mb250XCI+IHZzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Qgd2Vlazwvc3Bhbj48L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25kb3dubG9hZFwiPlZpZXcgQWxsIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImluZm9DYXJkRGF0YUxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmZvQ2FyZE5vRGF0YSAmJiAhaW5mb0NhcmREYXRhTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbXktNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhc3VidGV4dFwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3IgQ2hlY2tsaXN0IFBlcmZvcm1hbmNlIFRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJyZWNlaXZlZERhdGEgPT09ICdDaGVja2xpc3QnIHx8IHJlY2VpdmVkRGF0YSA9PT0gJ1VzZXInXCIgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgICAgICA8bGliLW1vbnRobHlwZXJmb3JtYW5jZS1kYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgICBbbW9udGhseXBlcmZvcm1jZV09XCJzZWxlY3RlZFNvdXJjZUNoZWNrTGlzdElkXCI+PC9saWItbW9udGhseXBlcmZvcm1hbmNlLWRhdGVwaWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cInJlY2VpdmVkRGF0YSA9PT0gJ1N0b3JlJ1wiIGNsYXNzPVwicm93IG1iLTQgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLXN0cmV0Y2hcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMiBweC0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib3JkZXIgcHQtMiBoLTEwMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZWxsaXBzZTEgYm9yZGVyLTAgcHgtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZGNvdW50XCI+e3sgaW5mb0NhcmRzRGF0YT8uYWN0aXZlVW5pcXVlICE9PW51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvQ2FyZHNEYXRhPy5hY3RpdmVVbmlxdWU/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIDogJy0tJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmR0ZXh0XCI+QWN0aXZlIENoZWNrbGlzdHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLWF1dG8gcHktMyBweC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCBteS0yXCI+e3sgaW5mb0NhcmRzRGF0YT8udG90YWxJbnN0YW5jZXM/LmNvdW50ICE9PW51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvQ2FyZHNEYXRhPy50b3RhbEluc3RhbmNlcz8uY291bnQ/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgJy0tJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkdGV4dFwiPkNoZWNrbGlzdCBJbnN0YW5jZXM8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC01IHB4LTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvcmRlciBwdC0yIGgtMTAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBlbGxpcHNlMSBib3JkZXItMCBweC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkY291bnRcIj57eyBpbmZvQ2FyZHNEYXRhPy5ub3RTdWJtaXR0ZWRJbnN0YW5jZXM/LmNvdW50ICE9PW51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvQ2FyZHNEYXRhPy5ub3RTdWJtaXR0ZWRJbnN0YW5jZXM/LmNvdW50Py50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSA6ICctLScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkdGV4dFwiPk5vdCBTdWJtaXR0ZWQgQ2hlY2tsaXN0czwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBoLWF1dG8gcHktMyBweC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkc3ViY291bnQgbXktMlwiPnt7IGluZm9DYXJkc0RhdGE/Lm5vdFN1Ym1pdHRlZEluc3RhbmNlcz8ub3BlbiAhPT1udWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9DYXJkc0RhdGE/Lm5vdFN1Ym1pdHRlZEluc3RhbmNlcz8ub3Blbj8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0pIDogJy0tJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZHRleHRcIj5PcGVuIENoZWNrbGlzdHM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCBteS0yXCI+e3sgaW5mb0NhcmRzRGF0YT8ubm90U3VibWl0dGVkSW5zdGFuY2VzPy5pbnByb2dyZXNzICE9PW51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NhcmRzRGF0YT8ubm90U3VibWl0dGVkSW5zdGFuY2VzPy5pbnByb2dyZXNzPy50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgOiAnLS0nIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkdGV4dFwiPkluIFByb2dyZXNzIENoZWNrbGlzdHM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZHN1YmNvdW50IG15LTJcIj57eyBpbmZvQ2FyZHNEYXRhPy5ub3RTdWJtaXR0ZWRJbnN0YW5jZXM/LmRlbGF5ID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9DYXJkc0RhdGE/Lm5vdFN1Ym1pdHRlZEluc3RhbmNlcz8uZGVsYXkudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0pIDogJy0tJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZHRleHRcIj5EZWxheSBpbiBTdWJtaXNzaW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTUgcHgtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9yZGVyIHB0LTIgaC0xMDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGVsbGlwc2UxIGJvcmRlci0wIHB4LTNcIj5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmRjb3VudFwiPnt7IGluZm9DYXJkc0RhdGE/LmNvbXBsZXRlZEluc3RhbmNlcz8uY291bnQgIT09bnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm9DYXJkc0RhdGE/LmNvbXBsZXRlZEluc3RhbmNlcz8uY291bnQ/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgJy0tJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmR0ZXh0XCI+U3VibWl0dGVkIENoZWNrbGlzdHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgaC1hdXRvIHB5LTMgcHgtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCBteS0yXCI+e3sgaW5mb0NhcmRzRGF0YT8uY29tcGxldGlvblNjb3JlPy5jb3VudCAhPT1udWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NhcmRzRGF0YT8uY29tcGxldGlvblNjb3JlPy5jb3VudD8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLS0nIH19JTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkdGV4dFwiPkNvbXBsZXRpb24gU2NvcmU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5jb21wbGV0aW9uU2NvcmU/LmNvbXBhcmlzb25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5mb0NvbXBhcmlzb25DYXJkc0RhdGE/LmNvbXBsZXRpb25TY29yZT8uQ29tcGFyaXNvbkZsYWc7IGVsc2Ugc2hvd0Fycm93MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzMyMTZfMTE4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS41IDNMNi43NSA3Ljc1TDQuMjUgNS4yNUwwLjUgOU0xMS41IDNIOC41TTExLjUgM1Y2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8zMjE2XzExOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0Fycm93Mj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIzMjhfNDY1NClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgOUw2Ljc1IDQuMjVMNC4yNSA2Ljc1TDAuNSAzTTExLjUgOUg4LjVNMTEuNSA5VjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjMyOF80NjU0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMiBtcy0yXCI+PHNwYW4gY2xhc3M9XCJwZXJjZW50LXZhbHVlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxldGlvblNjb3JlPy5jb21wYXJpc29uRGF0YSAhPT1udWxsP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5jb21wbGV0aW9uU2NvcmU/LmNvbXBhcmlzb25EYXRhPy50b0xvY2FsZVN0cmluZygnZW4tVVMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgOiAnLS0nIH19JTwvc3Bhbj48c3BhbiBjbGFzcz1cIndlZWstZm9udFwiPiB2c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPHNwYW4gKm5nSWY9XCJkYXRlVHlwZSA9PT0nZGFpbHknXCI+ZGF5PC9zcGFuPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0ZVR5cGUgPT09J3dlZWtseSdcIj53ZWVrPC9zcGFuPiA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSdtb250aGx5J1wiPm1vbnRoPC9zcGFuPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkc3ViY291bnQgbXktMlwiPnt7IGluZm9DYXJkc0RhdGE/LmNvbXBsaWFuY2VSYXRlPy5jb3VudCAhPT1udWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NhcmRzRGF0YT8uY29tcGxpYW5jZVJhdGU/LmNvdW50Py50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSA6ICctLScgfX0lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmR0ZXh0XCI+Q29tcGxpYW5jZSBTY29yZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaW5mb0NvbXBhcmlzb25DYXJkc0RhdGE/LmNvbXBsaWFuY2VSYXRlPy5jb21wYXJpc29uRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5jb21wbGlhbmNlUmF0ZT8uQ29tcGFyaXNvbkZsYWc7IGVsc2Ugc2hvd0Fycm93MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzMyMTZfMTE4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS41IDNMNi43NSA3Ljc1TDQuMjUgNS4yNUwwLjUgOU0xMS41IDNIOC41TTExLjUgM1Y2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8zMjE2XzExOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0Fycm93Mj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIzMjhfNDY1NClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgOUw2Ljc1IDQuMjVMNC4yNSA2Ljc1TDAuNSAzTTExLjUgOUg4LjVNMTEuNSA5VjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjMyOF80NjU0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMiBtcy0yXCI+PHNwYW4gY2xhc3M9XCJwZXJjZW50LXZhbHVlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uY29tcGxpYW5jZVJhdGU/LmNvbXBhcmlzb25EYXRhICE9PW51bGw/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NvbXBhcmlzb25DYXJkc0RhdGE/LmNvbXBsaWFuY2VSYXRlPy5jb21wYXJpc29uRGF0YT8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIDogJy0tJyB9fSU8L3NwYW4+PHNwYW4gY2xhc3M9XCJ3ZWVrLWZvbnRcIj4gdnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IDxzcGFuICpuZ0lmPVwiZGF0ZVR5cGUgPT09J2RhaWx5J1wiPmRheTwvc3Bhbj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGVUeXBlID09PSd3ZWVrbHknXCI+d2Vlazwvc3Bhbj4gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlVHlwZSA9PT0nbW9udGhseSdcIj5tb250aDwvc3Bhbj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaW5mb0NhcmRzRGF0YT8uZmxhZ3M/LmNvdW50OyBlbHNlIG5vRGF0YUZsYWdnZWRcIiBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvdHJheC9mbGFncyddXCIgY2xhc3M9XCJjYXJkc3ViY291bnQgbXktMiBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dT57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NhcmRzRGF0YT8uZmxhZ3M/LmNvdW50ICE9PW51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NhcmRzRGF0YT8uZmxhZ3M/LmNvdW50Py50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgOiAnLS0nIH19PC91PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhRmxhZ2dlZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCBteS0yXCI+LS08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkdGV4dFwiPlRvdGFsIEZsYWdzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbmZvQ29tcGFyaXNvbkNhcmRzRGF0YT8uZmxhZ3M/LmNvbXBhcmlzb25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5mb0NvbXBhcmlzb25DYXJkc0RhdGE/LmZsYWdzPy5Db21wYXJpc29uRmxhZzsgZWxzZSBzaG93QXJyb3cyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMzIxNl8xMTgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgM0w2Ljc1IDcuNzVMNC4yNSA1LjI1TDAuNSA5TTExLjUgM0g4LjVNMTEuNSAzVjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzMyMTZfMTE4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93QXJyb3cyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3cyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjMyOF80NjU0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNSA5TDYuNzUgNC4yNUw0LjI1IDYuNzVMMC41IDNNMTEuNSA5SDguNU0xMS41IDlWNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMzI4XzQ2NTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0yIG1zLTJcIj48c3BhbiBjbGFzcz1cInBlcmNlbnQtdmFsdWVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9Db21wYXJpc29uQ2FyZHNEYXRhPy5mbGFncz8uY29tcGFyaXNvbkRhdGEgIT09bnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0NvbXBhcmlzb25DYXJkc0RhdGE/LmZsYWdzPy5jb21wYXJpc29uRGF0YT8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSA6ICctLScgfX0lPC9zcGFuPjxzcGFuIGNsYXNzPVwid2Vlay1mb250XCI+IHZzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA8c3BhbiAqbmdJZj1cImRhdGVUeXBlID09PSdkYWlseSdcIj5kYXk8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlVHlwZSA9PT0nd2Vla2x5J1wiPndlZWs8L3NwYW4+IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0ZVR5cGUgPT09J21vbnRobHknXCI+bW9udGg8L3NwYW4+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBjdXJzb3ItcG9pbnRlciBmcy01XCIgW25nQ2xhc3NdPVwiZGF0ZVR5cGUgPT09J2RhaWx5JyA/ICd0ZXh0LXByaW1hcnknIDonJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0ZVZhbHVlKCdkYWlseScpXCI+MUQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTEgY3Vyc29yLXBvaW50ZXIgZnMtNVwiIFtuZ0NsYXNzXT1cImRhdGVUeXBlID09PSd3ZWVrbHknID8gJ3RleHQtcHJpbWFyeScgOicnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRlVmFsdWUoJ3dlZWtseScpXCI+MVc8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICBjbGFzcz1cIm10LTEgY3Vyc29yLXBvaW50ZXIgZnMtNVwiICBbbmdDbGFzc109XCJkYXRlVHlwZSA9PT0nbW9udGhseScgPyAndGV4dC1wcmltYXJ5JyA6JydcIiAgKGNsaWNrKT1cImRhdGVWYWx1ZSgnbW9udGhseScpXCI+MU08L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7cmVjZWl2ZWREYXRhfX0gIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWwgbWItMlwiPkNoZWNrbGlzdCBJbmZvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3ViIG1iLTJcIj4gQmFzZWQgb24ge3sgaGVhZGVyRGF0YT8uZGF0ZT8uc3RhcnREYXRlIHwgZGF0ZTogJ01NTSBkJyB9fSAtIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJEYXRhPy5kYXRlPy5lbmREYXRlIHwgZGF0ZTogJ01NTSBkLCB5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtdC0xXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCB3LTIwMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwic2VsZWN0ZWRsaXN0c2VsZWN0Q29udHJvbFwiIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIiBbZGF0YV09XCJzdGF0dXNzZWxlY3RDb250cm9sXCIgY2xhc3M9XCJ3LTIwMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZVN0YXR1c1NlbGVjdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJzdGF0dXMtdGV4dFwiPlN0YXR1czwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSA3LjVMMTAgMTIuNUwxNSA3LjVcIiBzdHJva2U9XCIjMzQ0MDU0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicmVjZWl2ZWREYXRhID09PSAnQ2hlY2tsaXN0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyICBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gZm9vdGZhbGxzZWFyY2ggc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSAgbXMtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBbZGlzYWJsZWRdPVwic2VhcmNoRGlzYWJsZWRcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJzZWFyY2hJbnB1dFwiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHMtMTQgbXMtNCBmb290ZmFsbHNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IFN0b3JlIE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5dXAuZW50ZXIpPVwic2VhcmNoRmllbGQoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZWNlaXZlZERhdGEgIT09ICdDaGVja2xpc3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBmb290ZmFsbHNlYXJjaCBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlICBtcy04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFtkaXNhYmxlZF09XCJzZWFyY2hEaXNhYmxlZFwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cInNlYXJjaElucHV0XCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xNCBtcy00IGZvb3RmYWxsc2VhcmNoXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYnkgY2hlY2tsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXVwLmVudGVyKT1cInNlYXJjaEZpZWxkKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LlRhbmdvVHJheF9jaGVja2xpc3RfaXNBZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvdHJheC9jcmVhdGVDaGVja2xpc3QnXVwiICpuZ0lmPVwicmVjZWl2ZWREYXRhID09PSAnU3RvcmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTQgcm91bmRlZC0zIHRleHQtbm93cmFwIG5nLXN0YXItaW5zZXJ0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMDEgNC4xNjY2M1YxNS44MzMzTTQuMTY2NzUgOS45OTk5NkgxNS44MzM0XCIgc3Ryb2tlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMiB0ZXh0LXdoaXRlXCI+Q3JlYXRlIENoZWNrbGlzdDwvc3Bhbj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgKm5nSWY9XCIhY2hlY2tsaXN0TG9hZGluZyAmJiAhY2hlY2tsaXN0Tm9EYXRhXCIgY2xhc3M9XCJ0YWJsZSB0ZXh0LW5vd3JhcCBib3R0b20tYm9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJyZWNlaXZlZERhdGEgPT09ICdDaGVja2xpc3QnIHx8IHJlY2VpdmVkRGF0YSA9PT0gJ1VzZXInIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdkYXRlX3N0cmluZycpXCI+RGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnZGF0ZV9zdHJpbmcnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdkYXRlX3N0cmluZycgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJyZWNlaXZlZERhdGEgPT09ICdTdG9yZScgfHwgcmVjZWl2ZWREYXRhID09PSAnVXNlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnY2hlY2tMaXN0TmFtZScpXCI+Q2hlY2tMaXN0IE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NoZWNrTGlzdE5hbWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdkYXRlX3N0cmluZycgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJyZWNlaXZlZERhdGEgPT09ICdDaGVja2xpc3QnIHx8IHJlY2VpdmVkRGF0YSA9PT0gJ1VzZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3N0b3JlTmFtZScpXCI+U3RvcmUgTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnc3RvcmVOYW1lJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnc3RvcmVOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5DaGVja2xpc3QgT3duZXI8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJyZWNlaXZlZERhdGEgIT09ICdVc2VyJ1wiPlN1Ym1pdHRlZCBCeTwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3N1Ym1pdFRpbWVfc3RyaW5nJylcIj5TdWJtaXR0ZWQgT25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3N1Ym1pdFRpbWVfc3RyaW5nJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnc3VibWl0dGVkYnknID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkZsYWdzPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGluZm9DaGVja2xpc3REYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInJlY2VpdmVkRGF0YSA9PT0gJ0NoZWNrbGlzdCcgfHwgcmVjZWl2ZWREYXRhID09PSAnVXNlcicgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBpdGVtLmRhdGVfc3RyaW5nIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInJlY2VpdmVkRGF0YSA9PT0gJ1N0b3JlJyB8fCByZWNlaXZlZERhdGEgPT09ICdVc2VyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtMzVweCBzeW1ib2wtY2lyY2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtbGFiZWwgYmctbGlnaHQtcHJpbWFyeSB0ZXh0LXByaW1hcnkgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmNoZWNrTGlzdENoYXIgfHwgJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWJsZS10aXRsZWNoZWNrbGlzdFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGVja0xpc3ROYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwicmVjZWl2ZWREYXRhID09PSAnQ2hlY2tsaXN0JyB8fCByZWNlaXZlZERhdGEgPT09ICdVc2VyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgaXRlbS5zdG9yZU5hbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgaXRlbS51c2VyTmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJyZWNlaXZlZERhdGEgIT09ICdVc2VyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgaXRlbS51c2VyRW1haWwgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWRnZS1saWdodC1zdWNjZXNzJzogaXRlbS5jaGVja2xpc3RTdGF0dXMgPT09ICdTdWJtaXR0ZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkZ2UtbGlnaHQtd2FybmluZyc6IGl0ZW0uY2hlY2tsaXN0U3RhdHVzID09PSAnSW4gUHJvZ3Jlc3MnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkZ2UtbGlnaHQtcHJpbWFyeSc6IGl0ZW0uY2hlY2tsaXN0U3RhdHVzID09PSAnT3BlbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWRnZS1saWdodC1kYW5nZXInOiBpdGVtLmNoZWNrbGlzdFN0YXR1cyA9PT0gJ2RlbGF5ZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPnt7IGl0ZW0uY2hlY2tsaXN0U3RhdHVzIHwgdGl0bGVjYXNlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBpdGVtLnN1Ym1pdFRpbWVfc3RyaW5nPy50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIHx8ICctLScgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uZmxhZ2dlZENoZWNrbGlzdCAhPT1udWxsID8gaXRlbT8uZmxhZ2dlZENoZWNrbGlzdD8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSA6ICctLScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uY2hlY2tsaXN0U3RhdHVzID09PSAnU3VibWl0dGVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuICBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvdHJheC9nYWxsZXJ5J11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInsgc3RvcmVJZDogaXRlbS5zdG9yZV9pZCwgY2hlY2tsaXN0VHlwZTogaXRlbS5jaGVja0xpc3RUeXBlLCBDaGVja2xpc3REYXRlOiBpdGVtLmNoZWNrbGlzdERhdGUsIGNoZWNrbGlzdElkOiBpdGVtLnNvdXJjZUNoZWNrTGlzdF9pZCB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9udmlldyBtZS00IGN1cnNvci1wb2ludGVyXCI+Vmlldzwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICAoY2xpY2spPVwibmF2aWdhdGVUb0dhbGxlcnkoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb252aWV3IG1lLTQgY3Vyc29yLXBvaW50ZXJcIj5WaWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiZG93bmxvYWQoJ3BkZicsaXRlbSApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uZG93bmxvYWQgY3Vyc29yLXBvaW50ZXJcIj5Eb3dubG9hZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmNoZWNrbGlzdFN0YXR1cyAhPT0gJ1N1Ym1pdHRlZCcgJiYgaXRlbS50aW1lRmxhZyA+IDAgJiYgZGF0ZSAhPT0gaXRlbS5kYXRlX3N0cmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJkYXRlICE9PSBpdGVtLmRhdGVfc3RyaW5nID8gJ2RpYXNibGVkJzogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGUgIT09IGl0ZW0uZGF0ZV9zdHJpbmcgPyByZWluaXRpYXRlKGl0ZW0uX2lkKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25kb3dubG9hZFwiPlJlaW5pdGlhdGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2hlY2tsaXN0SW5mb0RhdGUgPT09IGl0ZW0uZGF0ZV9zdHJpbmcgJiYgIWl0ZW0ucmVpbml0aWF0ZVN0YXR1cyAmJiBpdGVtLmNoZWNrbGlzdFN0YXR1cyAhPT0gJ1N1Ym1pdHRlZCcgJiYgaXRlbS50aW1lRmxhZyA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlaW5pdGlhdGUoaXRlbS5faWQpXCIgIGNsYXNzPVwiYWN0aW9uZG93bmxvYWQgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlaW5pdGlhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNoZWNrbGlzdEluZm9EYXRlID09PSBpdGVtLmRhdGVfc3RyaW5nICYmIGl0ZW0ucmVpbml0aWF0ZVN0YXR1cyAmJiBpdGVtLmNoZWNrbGlzdFN0YXR1cyAhPT0gJ1N1Ym1pdHRlZCcgJiYgaXRlbS50aW1lRmxhZyA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb252aWV3IGRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWluaXRpYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmNoZWNrbGlzdFN0YXR1cyAhPT0gJ1N1Ym1pdHRlZCcgJiYgaXRlbS50aW1lRmxhZyA8PSAwICYmIGRhdGUgIT09IGl0ZW0uZGF0ZV9zdHJpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJkYXRlICE9PSBpdGVtLmRhdGVfc3RyaW5nID8gJ2RpYXNibGVkJzogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGUgIT09IGl0ZW0uZGF0ZV9zdHJpbmcgPyAnc2VuZGFsZXJ0KCknOiAnJyBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25hbGVydCBkaWFzYmxlZFwiPlNlbmQgQWxlcnQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uY2hlY2tsaXN0U3RhdHVzICE9PSAnU3VibWl0dGVkJyAmJiAhKGNoZWNrbGlzdEluZm9EYXRlID09PSBpdGVtLmRhdGVfc3RyaW5nICYmICFpdGVtLnJlaW5pdGlhdGVTdGF0dXMgJiYgaXRlbS5jaGVja2xpc3RTdGF0dXMgIT09ICdTdWJtaXR0ZWQnICYmIGl0ZW0udGltZUZsYWcgPiAwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4tLTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoZWNrbGlzdExvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja2xpc3ROb0RhdGEgJiYgIWNoZWNrbGlzdExvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG15LTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFtYWludGV4dCBtdC0zXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YXN1YnRleHRcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIFBlcmZvcm1hbmNlIFRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY2hlY2tsaXN0TG9hZGluZyAmJiAhY2hlY2tsaXN0Tm9EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBjbGFzcz1cInRleHQtc3RhcnRcIiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCIgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
|