tango-app-ui-analyse-trax 3.0.0-dev → 3.3.1-alpha-task.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/esm2022/lib/components/action-centre/action-centre.component.mjs +303 -0
  2. package/esm2022/lib/components/activity-log/activity-log.component.mjs +94 -0
  3. package/esm2022/lib/components/add-checklist/add-checklist.component.mjs +1439 -0
  4. package/esm2022/lib/components/checklist/checklist.component.mjs +252 -0
  5. package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +1954 -0
  6. package/esm2022/lib/components/checklistlayout/checklistlayout.component.mjs +12 -0
  7. package/esm2022/lib/components/chip-dropdown/chip-dropdown.component.mjs +84 -0
  8. package/esm2022/lib/components/create-task/create-task.component.mjs +367 -0
  9. package/esm2022/lib/components/create-task/create-task.data.mjs +306 -0
  10. package/esm2022/lib/components/create-task/create-task.interface.mjs +2 -0
  11. package/esm2022/lib/components/custom-select/custom-select.component.mjs +236 -0
  12. package/esm2022/lib/components/dashboard/dashboard.component.mjs +597 -0
  13. package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +635 -0
  14. package/esm2022/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.mjs +172 -0
  15. package/esm2022/lib/components/dashboard-layout/dashboard-layout.component.mjs +12 -0
  16. package/esm2022/lib/components/export-gallery/export-gallery.component.mjs +119 -0
  17. package/esm2022/lib/components/flag-layout/flag-layout.component.mjs +12 -0
  18. package/esm2022/lib/components/flags/flags.component.mjs +257 -0
  19. package/esm2022/lib/components/flags/flags.interface.mjs +2 -0
  20. package/esm2022/lib/components/flags-info/flags-info.component.mjs +388 -0
  21. package/esm2022/lib/components/flags-info/flags-info.interface.mjs +2 -0
  22. package/esm2022/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.mjs +71 -0
  23. package/esm2022/lib/components/gallery/gallery.component.mjs +1181 -0
  24. package/esm2022/lib/components/group-select/group-select.component.mjs +155 -0
  25. package/esm2022/lib/components/managechecklist/managechecklist.component.mjs +172 -0
  26. package/esm2022/lib/components/multi-date-datepicker/multi-date-datepicker.component.mjs +117 -0
  27. package/esm2022/lib/components/orders/orders.component.mjs +171 -0
  28. package/esm2022/lib/components/pagination/pagination.component.mjs +62 -0
  29. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +105 -0
  30. package/esm2022/lib/components/reports/date-picker/date-picker.component.mjs +60 -0
  31. package/esm2022/lib/components/reports/reports.component.mjs +299 -0
  32. package/esm2022/lib/components/reports/reports.interface.mjs +2 -0
  33. package/esm2022/lib/components/tango-analyse-trax/tango-analyse-trax.component.mjs +27 -6
  34. package/esm2022/lib/components/task/task.component.mjs +271 -0
  35. package/esm2022/lib/components/task-configure/task-configure.component.mjs +504 -0
  36. package/esm2022/lib/components/task-configure/task-configure.interface.mjs +2 -0
  37. package/esm2022/lib/components/task-info/task-info.component.mjs +300 -0
  38. package/esm2022/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.mjs +203 -0
  39. package/esm2022/lib/components/task-layout/task-layout.component.mjs +12 -0
  40. package/esm2022/lib/components/trax-store/trax-store.component.mjs +153 -0
  41. package/esm2022/lib/components/traxpopup/traxpopup.component.mjs +67 -0
  42. package/esm2022/lib/services/trax.service.mjs +334 -0
  43. package/esm2022/lib/tango-analyse-trax-routing.module.mjs +124 -6
  44. package/esm2022/lib/tango-analyse-trax.module.mjs +144 -9
  45. package/fesm2022/tango-app-ui-analyse-trax.mjs +11412 -21
  46. package/fesm2022/tango-app-ui-analyse-trax.mjs.map +1 -1
  47. package/lib/components/action-centre/action-centre.component.d.ts +56 -0
  48. package/lib/components/activity-log/activity-log.component.d.ts +30 -0
  49. package/lib/components/add-checklist/add-checklist.component.d.ts +99 -0
  50. package/lib/components/checklist/checklist.component.d.ts +39 -0
  51. package/lib/components/checklist-configure/checklist-configure.component.d.ts +160 -0
  52. package/lib/components/checklistlayout/checklistlayout.component.d.ts +5 -0
  53. package/lib/components/chip-dropdown/chip-dropdown.component.d.ts +24 -0
  54. package/lib/components/create-task/create-task.component.d.ts +58 -0
  55. package/lib/components/create-task/create-task.data.d.ts +244 -0
  56. package/lib/components/create-task/create-task.interface.d.ts +147 -0
  57. package/lib/components/custom-select/custom-select.component.d.ts +35 -0
  58. package/lib/components/dashboard/dashboard.component.d.ts +75 -0
  59. package/lib/components/dashboard-info/dashboard-info.component.d.ts +102 -0
  60. package/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.d.ts +40 -0
  61. package/lib/components/dashboard-layout/dashboard-layout.component.d.ts +5 -0
  62. package/lib/components/export-gallery/export-gallery.component.d.ts +33 -0
  63. package/lib/components/flag-layout/flag-layout.component.d.ts +5 -0
  64. package/lib/components/flags/flags.component.d.ts +51 -0
  65. package/lib/components/flags/flags.interface.d.ts +64 -0
  66. package/lib/components/flags-info/flags-info.component.d.ts +62 -0
  67. package/lib/components/flags-info/flags-info.interface.d.ts +212 -0
  68. package/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.d.ts +13 -0
  69. package/lib/components/gallery/gallery.component.d.ts +125 -0
  70. package/lib/components/group-select/group-select.component.d.ts +33 -0
  71. package/lib/components/managechecklist/managechecklist.component.d.ts +32 -0
  72. package/lib/components/multi-date-datepicker/multi-date-datepicker.component.d.ts +27 -0
  73. package/lib/components/orders/orders.component.d.ts +38 -0
  74. package/lib/components/pagination/pagination.component.d.ts +16 -0
  75. package/lib/components/reactive-select/reactive-select.component.d.ts +32 -0
  76. package/lib/components/reports/date-picker/date-picker.component.d.ts +23 -0
  77. package/lib/components/reports/reports.component.d.ts +55 -0
  78. package/lib/components/reports/reports.interface.d.ts +46 -0
  79. package/lib/components/tango-analyse-trax/tango-analyse-trax.component.d.ts +10 -1
  80. package/lib/components/task/task.component.d.ts +59 -0
  81. package/lib/components/task-configure/task-configure.component.d.ts +69 -0
  82. package/lib/components/task-configure/task-configure.interface.d.ts +124 -0
  83. package/lib/components/task-info/task-info.component.d.ts +68 -0
  84. package/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.d.ts +60 -0
  85. package/lib/components/task-layout/task-layout.component.d.ts +5 -0
  86. package/lib/components/trax-store/trax-store.component.d.ts +44 -0
  87. package/lib/components/traxpopup/traxpopup.component.d.ts +23 -0
  88. package/lib/services/trax.service.d.ts +107 -0
  89. package/lib/tango-analyse-trax.module.d.ts +42 -3
  90. package/package.json +1 -1
@@ -0,0 +1,1954 @@
1
+ import { Component, HostListener, ViewChild } from '@angular/core';
2
+ import { TraxpopupComponent } from '../traxpopup/traxpopup.component';
3
+ import { TraxStoreComponent } from '../trax-store/trax-store.component';
4
+ import * as XLSX from 'xlsx';
5
+ import dayjs from 'dayjs';
6
+ import customParseFormat from 'dayjs/plugin/customParseFormat';
7
+ import { Subject, takeUntil } from 'rxjs';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/router";
10
+ import * as i2 from "@ng-bootstrap/ng-bootstrap";
11
+ import * as i3 from "../../services/trax.service";
12
+ import * as i4 from "tango-app-ui-shared";
13
+ import * as i5 from "tango-app-ui-global";
14
+ import * as i6 from "@angular/common";
15
+ import * as i7 from "@angular/forms";
16
+ import * as i8 from "@angular/cdk/drag-drop";
17
+ import * as i9 from "ngx-daterangepicker-material";
18
+ import * as i10 from "../multi-date-datepicker/multi-date-datepicker.component";
19
+ import * as i11 from "../chip-dropdown/chip-dropdown.component";
20
+ dayjs.extend(customParseFormat);
21
+ export class ChecklistConfigureComponent {
22
+ changedetector;
23
+ router;
24
+ route;
25
+ dialog;
26
+ SopService;
27
+ toast;
28
+ gs;
29
+ pageInfo;
30
+ fileInput;
31
+ fileInput1;
32
+ dayjs = dayjs;
33
+ selectedDates;
34
+ minDate;
35
+ type = 'custom';
36
+ obj;
37
+ configData;
38
+ tableData = [];
39
+ tableLoading = false;
40
+ tableDisplayedColumns = ["name", "role", "email"];
41
+ pageValue = [];
42
+ offset = 0;
43
+ recordsTotal = 0;
44
+ size = 5;
45
+ offsetvalue = 0;
46
+ pageDisplay = [];
47
+ nextbtn = true;
48
+ backbtn = true;
49
+ currentValue = 1;
50
+ tableFilter = '';
51
+ pageStart = 0;
52
+ pageEnd = 0;
53
+ recordsCount;
54
+ paginationSize = [5, 10, 15, 20];
55
+ userData = [];
56
+ excelUserData = [];
57
+ showImage = true;
58
+ monthDay;
59
+ show = 0;
60
+ popUpTitle;
61
+ showIntro = true;
62
+ searchUser;
63
+ addUserForm;
64
+ sopStores = [];
65
+ selectAll = false;
66
+ errormsg = false;
67
+ startTime;
68
+ endTime;
69
+ checklistId;
70
+ reupload = false;
71
+ selectAllUser = false;
72
+ removeUsers = [];
73
+ selectedDays = [];
74
+ showRangeValue = false;
75
+ submittedDates = [];
76
+ monthDate = '';
77
+ specific = false;
78
+ date;
79
+ sections = [];
80
+ MonthweekNumber;
81
+ popupCount = 0;
82
+ validTime = true;
83
+ disabledQuestion = false;
84
+ showconfig = true;
85
+ showadvance = true;
86
+ repeatType = '';
87
+ showDropDown = false;
88
+ selectedDate = [];
89
+ dates = Array.from({ length: 31 }, (_, i) => i + 1); // Array from 1 to 31
90
+ selectedDateList = [];
91
+ selectedStartDate;
92
+ minStartDate;
93
+ selectedEndDate;
94
+ minEndDate;
95
+ clientId;
96
+ alertUsers = [];
97
+ zoneList = [];
98
+ loading = true;
99
+ approve = false;
100
+ remainder = false;
101
+ detach = new Subject();
102
+ timeLoop = [1];
103
+ minutes = [30, 45, 60, 75, 90];
104
+ constructor(changedetector, router, route, dialog, SopService, toast, gs, pageInfo) {
105
+ this.changedetector = changedetector;
106
+ this.router = router;
107
+ this.route = route;
108
+ this.dialog = dialog;
109
+ this.SopService = SopService;
110
+ this.toast = toast;
111
+ this.gs = gs;
112
+ this.pageInfo = pageInfo;
113
+ }
114
+ ngOnInit() {
115
+ let storageDetails = JSON.parse(localStorage.getItem('header-filters') || '{}');
116
+ if (!storageDetails?.client) {
117
+ storageDetails = JSON.parse(localStorage.getItem('client-details') || '{}');
118
+ storageDetails.client = storageDetails.clientId;
119
+ }
120
+ if (storageDetails?.client) {
121
+ this.clientId = storageDetails.client;
122
+ this.router.queryParams.subscribe(params => {
123
+ if (typeof params.type == 'undefined') {
124
+ this.obj = {
125
+ checkListId: params.checkListId,
126
+ clientId: this.clientId
127
+ };
128
+ this.type = 'custom';
129
+ this.disabledQuestion = params.disabledQuestion;
130
+ }
131
+ else {
132
+ this.obj = {
133
+ type: params.type,
134
+ clientId: this.clientId
135
+ };
136
+ this.type = params.type;
137
+ }
138
+ });
139
+ this.setPageData();
140
+ this.GetConfig();
141
+ this.getClientUser();
142
+ this.getZoneList();
143
+ }
144
+ }
145
+ ngOnDestroy() {
146
+ this.detach.next(true);
147
+ this.detach.complete();
148
+ }
149
+ setPageData() {
150
+ this.pageInfo.setTitle("Manage Checklist");
151
+ this.pageInfo.setDescription("Automate or create checklists to improve operational efficiency");
152
+ this.pageInfo.setBreadcrumbs([
153
+ { title: "Tango Trax", path: "/manage/trax/dashboard", isActive: false, isSeparator: false },
154
+ { title: "Tango Trax", path: "/manage/trax/dashboard", isActive: false, isSeparator: true }
155
+ ]);
156
+ }
157
+ GetConfig() {
158
+ this.loading = true;
159
+ this.monthDate = '';
160
+ this.monthDay = '';
161
+ this.SopService.getconfig(this.obj).pipe(takeUntil(this.detach)).subscribe((res) => {
162
+ if (res && res.code == 200) {
163
+ this.loading = false;
164
+ if (res.data.checkListDetails.checkListType) {
165
+ this.checklistId = res.data.checkListDetails._id;
166
+ this.type = res.data.checkListDetails.checkListType;
167
+ this.configData = res.data;
168
+ this.removeUsers = this.configData.checkListDetails?.removedUsers || [];
169
+ this.approve = this.configData.checkListDetails.approver?.length ? true : false;
170
+ this.remainder = this.configData.checkListDetails?.remainder?.length ? true : false;
171
+ this.timeLoop = this.configData.checkListDetails?.remainder?.length ? Array.from({ length: this.configData.checkListDetails.remainder.length }, (_, i) => i) : [0];
172
+ // this.zones = this.configData?.checkListDetails?.detectionArea || [];
173
+ this.sections = this.configData.checkListDetails.sections;
174
+ this.selectedDays = this.configData?.checkListDetails?.scheduleWeekDays || [];
175
+ this.endTime = this.configData.checkListDetails?.scheduleEndTime ? this.dayjs(this.configData.checkListDetails?.scheduleEndTime, 'h:mm A').format('HH:mm') : '22:00';
176
+ this.startTime = this.configData.checkListDetails?.scheduleStartTime ? this.dayjs(this.configData.checkListDetails?.scheduleStartTime, 'h:mm A').format('HH:mm') : '10:00';
177
+ this.repeatType = this.configData.checkListDetails?.schedule == 'daily' ? 'Day' : ['weekly', 'weekday'].includes(this.configData.checkListDetails?.schedule) ? 'Week' : 'Month';
178
+ if (!this.configData.checkListDetails?.scheduleEndTime) {
179
+ this.configData.checkListDetails.scheduleEndTime = "10:00 PM";
180
+ }
181
+ if (!this.configData.checkListDetails?.scheduleStartTime) {
182
+ this.configData.checkListDetails.scheduleStartTime = "10:00 AM";
183
+ }
184
+ // if (this.configData?.checkListDetails?.alert?.alertsTo.length) {
185
+ // this.emailList = this.configData?.checkListDetails?.alert?.alertsTo;
186
+ // }
187
+ if (this.configData.checkListDetails.schedule != 'onetime') {
188
+ this.showRangeValue = this.configData.checkListDetails?.configStartDate != '' && this.configData.checkListDetails?.configStartDate != null ? true : false;
189
+ if (this.configData.checkListDetails?.configStartDate != '' && this.configData.checkListDetails?.configStartDate != null) {
190
+ this.configData.checkListDetails.configStartDate = this.dayjs(this.configData.checkListDetails?.configStartDate).format('YYYY-MM-DD');
191
+ this.selectedStartDate = { startDate: this.dayjs(this.configData.checkListDetails?.configStartDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.configData.checkListDetails?.configStartDate).format('DD-MM-YYYY') };
192
+ this.minStartDate = this.dayjs(this.configData.checkListDetails?.configStartDate).format();
193
+ }
194
+ if (this.configData.checkListDetails?.configEndDate != '' && this.configData.checkListDetails?.configEndDate != null) {
195
+ this.configData.checkListDetails.configEndDate = this.dayjs(this.configData.checkListDetails?.configEndDate).format('YYYY-MM-DD');
196
+ this.selectedEndDate = { startDate: this.dayjs(this.configData.checkListDetails?.configEndDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.configData.checkListDetails?.configEndDate).format('DD-MM-YYYY') };
197
+ this.minEndDate = this.dayjs(this.configData.checkListDetails?.configEndDate).format();
198
+ }
199
+ if (this.configData.checkListDetails?.schedule == 'monthly') {
200
+ if (this.configData.checkListDetails?.scheduleRepeatedMonthSetup == 'date') {
201
+ if (this.configData.checkListDetails?.scheduleRepeatedMonthWeek.split(' ')?.length > 1) {
202
+ this.monthDate = this.configData.checkListDetails?.scheduleRepeatedMonthWeek.split(' ')[0];
203
+ this.monthDay = this.configData.checkListDetails?.scheduleRepeatedMonthWeek.split(' ')[1];
204
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = '';
205
+ }
206
+ }
207
+ if (this.configData.checkListDetails?.scheduleRepeatedMonthSetup == 'specific') {
208
+ this.submittedDates = this.configData.checkListDetails?.specificDate || [];
209
+ }
210
+ }
211
+ if (this.configData.checkListDetails?.schedule == 'range' && this.configData.checkListDetails.specificDate.length) {
212
+ this.specific = true;
213
+ this.selectedDateList = this.configData.checkListDetails.specificDate;
214
+ }
215
+ }
216
+ if (this.configData.checkListDetails.schedule == 'onetime') {
217
+ this.configData.checkListDetails.scheduleDate = this.configData.checkListDetails.scheduleDate ? this.configData.checkListDetails.scheduleDate : dayjs().format();
218
+ this.selectedDates = { startDate: this.dayjs(this.configData.checkListDetails.scheduleDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.configData.checkListDetails.scheduleDate).format('DD-MM-YYYY') };
219
+ this.minDate = this.dayjs().format();
220
+ }
221
+ this.userDetails();
222
+ }
223
+ }
224
+ }, (error) => {
225
+ if (error.code == 403) {
226
+ // this.router.navigate(['/error403'])
227
+ }
228
+ });
229
+ }
230
+ accordian(index) {
231
+ if (this.show == index) {
232
+ this.show = -1;
233
+ }
234
+ else {
235
+ this.show = index;
236
+ }
237
+ }
238
+ configaccordian() {
239
+ this.showconfig = !this.showconfig;
240
+ }
241
+ advanceaccordian() {
242
+ this.showadvance = !this.showadvance;
243
+ }
244
+ Checklist() {
245
+ // this.mobileusagedetection = true;
246
+ // this.storeopenandclosedetection = false;
247
+ }
248
+ omit_special_char(event) {
249
+ var k;
250
+ k = event.charCode; // k = event.keyCode; (Both can be used)
251
+ return (k == 8 || k == 32 || (k >= 48 && k <= 57));
252
+ }
253
+ validateLimit(event) {
254
+ if (event.target.value < 15) {
255
+ event.target.value = '';
256
+ this.errormsg = true;
257
+ this.configData.checkListDetails.alert.usageExceeds = '';
258
+ this.changedetector.detectChanges();
259
+ }
260
+ else
261
+ this.errormsg = false;
262
+ }
263
+ onFileUpload(event) {
264
+ this.currentValue = 1;
265
+ this.reupload = false;
266
+ this.userData = this.excelUserData = [];
267
+ let data;
268
+ const target = (event.target);
269
+ let isExcelFile = !!target.files[0].name.match(/(.xls|.xlsx)/);
270
+ let error = [];
271
+ if (isExcelFile) {
272
+ const reader = new FileReader();
273
+ reader.readAsBinaryString(target.files[0]);
274
+ reader.onload = (e) => {
275
+ const bstr = e.target.result;
276
+ const wb = XLSX.read(bstr, { type: 'binary' });
277
+ const wsname = wb.SheetNames[0];
278
+ const ws = wb.Sheets[wsname];
279
+ data = XLSX.utils.sheet_to_json(ws);
280
+ if (!data.length) {
281
+ this.toast.getErrorToast('Please Upload a Valid file.');
282
+ return;
283
+ }
284
+ data = data.filter((item) => {
285
+ return ((item?.storeName && item?.storeName.trim() != '' && item?.storeName.trim() != null) || (item?.userName && item?.userName.trim() != '' && item?.userName.trim() != null) || (item?.userEmail && item?.userEmail.trim() != '' && item?.userEmail.trim() != null));
286
+ });
287
+ data.forEach((element, index) => {
288
+ if (element?.userEmail) {
289
+ element.userEmail = element?.userEmail.replace(/\s/g, '');
290
+ }
291
+ if ((element.storeName && element.storeName.trim() == '') || element.storeName == null) {
292
+ console.log(index);
293
+ error.push(`Invalid Store Name - A${index + 2}`);
294
+ }
295
+ if ((element.userEmail && element.userEmail.trim() == '') || element.userEmail == null) {
296
+ error.push(`Invalid userEmail - B${index + 2}`);
297
+ }
298
+ if ((element.userName && element.userName.trim() == '') || element.userName == null) {
299
+ error.push(`Invalid User Name - C${index + 2}`);
300
+ }
301
+ if (element?.userEmail && !element.userEmail.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/)) {
302
+ error.push(`Invalid userEmail - B${index + 2}`);
303
+ }
304
+ let checkUserIndex = this.userData.findIndex((item) => item.userEmail == element.userEmail);
305
+ if (checkUserIndex != -1 && (this.userData[checkUserIndex]?.userName != null && element?.userName != null && this.userData[checkUserIndex]?.userName?.trim().length && element?.userName?.trim().length && this.userData[checkUserIndex]?.userName?.trim().toLowerCase() != element?.userName?.trim().toLowerCase())) {
306
+ error.push(`Same Email with Different users - B${index + 2},B${checkUserIndex + 2}`);
307
+ }
308
+ this.userData.push({
309
+ storeName: element?.storeName,
310
+ userName: element?.userName?.trim(),
311
+ userEmail: element?.userEmail?.toLowerCase()?.trim(),
312
+ userPhone: element?.userPhone,
313
+ checkFlag: element?.check ? element.check : false,
314
+ city: element?.city
315
+ });
316
+ });
317
+ // console.log(storeNotExists);
318
+ // console.log(userNotExists);
319
+ if (error.length) {
320
+ const popupcontent = {
321
+ displayprop: false,
322
+ imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>`,
323
+ title: `Invalid details!`,
324
+ content: `Please provide correct and complete store information.`,
325
+ buttontype: 'error',
326
+ error: error
327
+ };
328
+ const dialogRef = this.dialog.open(TraxpopupComponent, {
329
+ centered: true, size: 'md'
330
+ });
331
+ dialogRef.componentInstance.data = popupcontent;
332
+ dialogRef.result.then((res) => {
333
+ if (res != 'reupload') {
334
+ return false;
335
+ }
336
+ else {
337
+ if (this.fileInput1) {
338
+ this.fileInput1.nativeElement.value = '';
339
+ }
340
+ this.reupload = true;
341
+ this.changedetector.detectChanges();
342
+ let ele = document.getElementById('kt_account_team_size_select_2');
343
+ ele?.click();
344
+ return false;
345
+ }
346
+ });
347
+ return;
348
+ // this.toast.getErrorToast(error.join(' '));
349
+ }
350
+ this.validateUserDetails(false);
351
+ if (this.fileInput) {
352
+ this.fileInput.nativeElement.value = '';
353
+ }
354
+ if (this.fileInput1) {
355
+ this.fileInput1.nativeElement.value = '';
356
+ }
357
+ };
358
+ }
359
+ else {
360
+ if (this.fileInput) {
361
+ this.fileInput.nativeElement.value = '';
362
+ }
363
+ if (this.fileInput1) {
364
+ this.fileInput1.nativeElement.value = '';
365
+ }
366
+ this.toast.getErrorToast('Please Upload a Excel file');
367
+ }
368
+ }
369
+ validateUserDetails(del) {
370
+ let params = {
371
+ id: this.checklistId,
372
+ assignedUsers: this.userData,
373
+ uploadUser: true,
374
+ type: this.obj?.type && ['mobileusagedetection', 'storeopenandclose'].includes(this.obj.type) ? this.obj.type : '',
375
+ ...(del) ? { delete: false } : {},
376
+ clientId: this.clientId
377
+ };
378
+ this.SopService.validateUser(params).pipe(takeUntil(this.detach)).subscribe((res) => {
379
+ let validate = true;
380
+ if (res && res.code == 200) {
381
+ this.configData.uploadUser = true;
382
+ if (res?.data?.ExistsEmail?.length) {
383
+ this.toast.getErrorToast(res?.data?.ExistsEmail.join(', ') + ' ' + res?.data?.message);
384
+ if (this.fileInput) {
385
+ this.fileInput.nativeElement.value = '';
386
+ }
387
+ if (this.fileInput1) {
388
+ this.fileInput1.nativeElement.value = '';
389
+ }
390
+ return;
391
+ }
392
+ else if (res?.data?.id) {
393
+ this.configData.checkListDetails._id = res.data.id;
394
+ this.checklistId = res.data.id;
395
+ this.configData.checkListDetails.assignedUsers = [];
396
+ this.configData.uploadUser = true;
397
+ this.userDetails();
398
+ this.changedetector.detectChanges();
399
+ }
400
+ else {
401
+ if (res?.data?.domain.length) {
402
+ let email = res?.data?.domain.map((item) => item.email);
403
+ // +' '+'<a href="profile/domains">Add domain</a>'
404
+ this.toast.getErrorToast(email.join(', ') + ' ' + 'Domain is not Exists.');
405
+ return;
406
+ }
407
+ else if (res?.data?.user?.length && res?.data?.store?.length) {
408
+ validate = false;
409
+ let popupcontent;
410
+ let store = [];
411
+ let location = [];
412
+ let inactiveStore = [];
413
+ store = res.data.store.filter((item) => {
414
+ return item.message == '';
415
+ });
416
+ inactiveStore = res.data.store.filter((item) => {
417
+ return item.message == 'store is inactive';
418
+ });
419
+ location = res.data.store.filter((item) => {
420
+ return item.message != '' && item.message != 'store is inactive';
421
+ });
422
+ store = [...new Set(store.map((item) => item.store))];
423
+ inactiveStore = [...new Set(inactiveStore.map((item) => item.store))];
424
+ location = [...new Set(location.map((item) => item.store))];
425
+ if (store.length) {
426
+ let title = `New Store found in uploaded file`;
427
+ if (inactiveStore.length) {
428
+ title = `New Store and Inactive Store found in uploaded file`;
429
+ }
430
+ popupcontent = {
431
+ displayprop: false,
432
+ imagesrc: '<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>',
433
+ title: title,
434
+ content: `This CSV contains a new store. Add new stores in the Store Management under Manage menu.`,
435
+ buttontype: 'Addstore',
436
+ subtitle: store.join(', '),
437
+ location: location.join(),
438
+ inactiveStores: inactiveStore.join()
439
+ };
440
+ }
441
+ else if (inactiveStore.length) {
442
+ popupcontent = {
443
+ displayprop: false,
444
+ imagesrc: '<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>',
445
+ title: `Inactive Store found in uploaded file`,
446
+ content: `Inactive stores found in the .csv. Please activate or skip them to proceed to assign.`,
447
+ buttontype: 'Activestore',
448
+ subtitle: inactiveStore.join(', '),
449
+ };
450
+ }
451
+ else {
452
+ if (location.length) {
453
+ let userDataCopy = [...this.userData];
454
+ let store_id = [];
455
+ location.forEach((item) => {
456
+ let details = userDataCopy.find((store) => item == store.storeName);
457
+ if (details.city == undefined || details.city == '') {
458
+ store_id.push(item);
459
+ }
460
+ });
461
+ if (store_id.length) {
462
+ this.toast.getErrorToast(`City is required on this stores ${store_id.join()}`);
463
+ if (this.fileInput) {
464
+ this.fileInput.nativeElement.value = '';
465
+ }
466
+ if (this.fileInput1) {
467
+ this.fileInput1.nativeElement.value = '';
468
+ }
469
+ return;
470
+ }
471
+ else {
472
+ this.configData.uploadUser = true;
473
+ this.uploadUser(del);
474
+ }
475
+ }
476
+ }
477
+ if (popupcontent) {
478
+ const dialogRef = this.dialog.open(TraxpopupComponent, {
479
+ centered: true, size: 'md'
480
+ });
481
+ dialogRef.componentInstance.data = popupcontent;
482
+ dialogRef.result.then((result) => {
483
+ if (result == 'confirmStore') {
484
+ this.route.navigateByUrl(`manage/stores/addition-method`);
485
+ }
486
+ if (result == 'activeStore') {
487
+ this.route.navigateByUrl(`manage/stores`);
488
+ }
489
+ validate = true;
490
+ if (result == 'skip') {
491
+ if (location.length) {
492
+ let store_id = [];
493
+ location.forEach((item) => {
494
+ let details = this.userData.find((store) => item == store.storeName);
495
+ if (details.city == undefined || details.city == '') {
496
+ store_id.push(item);
497
+ }
498
+ });
499
+ if (store_id.length) {
500
+ this.toast.getErrorToast(`City is required on this stores ${store_id.join()}`);
501
+ if (this.fileInput) {
502
+ this.fileInput.nativeElement.value = '';
503
+ }
504
+ if (this.fileInput1) {
505
+ this.fileInput1.nativeElement.value = '';
506
+ }
507
+ return;
508
+ }
509
+ }
510
+ let userDataCopy = [...this.userData];
511
+ this.userData = [];
512
+ userDataCopy.forEach((item) => {
513
+ if (!store.includes(item.storeName) && !inactiveStore.includes(item.storeName)) {
514
+ this.userData.push(item);
515
+ }
516
+ });
517
+ if (!this.userData.length) {
518
+ this.toast.getErrorToast('Please Enter valid Details');
519
+ if (this.fileInput) {
520
+ this.fileInput.nativeElement.value = '';
521
+ }
522
+ if (this.fileInput1) {
523
+ this.fileInput1.nativeElement.value = '';
524
+ }
525
+ return;
526
+ }
527
+ let userDetails = this.userData.map((item) => item.userEmail);
528
+ let user = [...res.data.user];
529
+ res.data.user = [];
530
+ user.forEach((item) => {
531
+ if (userDetails.includes(item.userEmail)) {
532
+ res.data.user.push(item);
533
+ }
534
+ });
535
+ if (res.data.user.length) {
536
+ popupcontent = {
537
+ displayprop: false,
538
+ imagesrc: '<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>',
539
+ title: `Invite new users added in CSV`,
540
+ content: `This CSV contains new users. Invite users by sending mail to them`,
541
+ buttontype: 'Invite',
542
+ user: res.data.user
543
+ };
544
+ const dialogRef = this.dialog.open(TraxpopupComponent, {
545
+ centered: true, size: 'md'
546
+ });
547
+ dialogRef.componentInstance.data = popupcontent;
548
+ dialogRef.result.then((result) => {
549
+ if (result?.message == 'confirm' || result == 'skip') {
550
+ if (result == 'skip') {
551
+ userDataCopy = [...this.userData];
552
+ this.userData = [];
553
+ userDataCopy.forEach((item) => {
554
+ if (!userDetails.includes(item.userEmail)) {
555
+ this.userData.push(item);
556
+ }
557
+ });
558
+ }
559
+ else {
560
+ result?.user.forEach((item) => {
561
+ let index = this.userData.findIndex((user) => {
562
+ return user.userEmail == item.userEmail;
563
+ });
564
+ if (!item.invite) {
565
+ this.userData.splice(index, 1);
566
+ }
567
+ });
568
+ for (let item of res.data.user) {
569
+ if (item?.message) {
570
+ this.toast.getErrorToast(`${item.userEmail} - ${item.message}`);
571
+ if (this.fileInput) {
572
+ this.fileInput.nativeElement.value = '';
573
+ }
574
+ if (this.fileInput1) {
575
+ this.fileInput1.nativeElement.value = '';
576
+ }
577
+ validate = false;
578
+ return;
579
+ }
580
+ }
581
+ }
582
+ if (!this.userData.length) {
583
+ this.toast.getErrorToast(`Please Enter valid Details`);
584
+ if (this.fileInput) {
585
+ this.fileInput.nativeElement.value = '';
586
+ }
587
+ if (this.fileInput1) {
588
+ this.fileInput1.nativeElement.value = '';
589
+ }
590
+ return;
591
+ }
592
+ if (validate) {
593
+ this.configData.uploadUser = true;
594
+ this.uploadUser(del);
595
+ }
596
+ }
597
+ });
598
+ }
599
+ else {
600
+ this.configData.uploadUser = true;
601
+ this.uploadUser(del);
602
+ }
603
+ }
604
+ });
605
+ }
606
+ }
607
+ else if (res?.data?.user?.length || res?.data?.store?.length) {
608
+ validate = false;
609
+ let popupcontent;
610
+ let store = [];
611
+ let location = [];
612
+ let inactiveStore = [];
613
+ if (res?.data?.user?.length) {
614
+ popupcontent = {
615
+ displayprop: false,
616
+ imagesrc: '<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>',
617
+ title: `Invite new users added in CSV`,
618
+ content: `This CSV contains new users. Invite users by sending mail to them`,
619
+ buttontype: 'Invite',
620
+ user: res.data.user
621
+ };
622
+ }
623
+ else {
624
+ store = res.data.store.filter((item) => {
625
+ return item.message == '';
626
+ });
627
+ inactiveStore = res.data.store.filter((item) => {
628
+ return item.message == 'store is inactive';
629
+ });
630
+ location = res.data.store.filter((item) => {
631
+ return item.message != '';
632
+ });
633
+ store = [...new Set(store.map((item) => item.store))];
634
+ inactiveStore = [...new Set(inactiveStore.map((item) => item.store))];
635
+ location = [...new Set(location.map((item) => item.store))];
636
+ if (store.length) {
637
+ let title = `New Store found in uploaded file`;
638
+ if (inactiveStore.length) {
639
+ title = `New Store and Inactive Store found in uploaded file`;
640
+ }
641
+ popupcontent = {
642
+ displayprop: false,
643
+ imagesrc: '<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>',
644
+ title: title,
645
+ content: `This CSV contains a new store. Add new stores in the Store Management under Manage menu.`,
646
+ buttontype: 'Addstore',
647
+ subtitle: store.join(', '),
648
+ location: location.join(),
649
+ inactiveStores: inactiveStore.join()
650
+ };
651
+ }
652
+ else if (inactiveStore.length) {
653
+ popupcontent = {
654
+ displayprop: false,
655
+ imagesrc: '<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>',
656
+ title: `Inactive Store found in uploaded file`,
657
+ content: `Inactive stores found in the .csv. Please activate or skip them to proceed to assign.`,
658
+ buttontype: 'Activestore',
659
+ subtitle: inactiveStore.join(', '),
660
+ };
661
+ }
662
+ else {
663
+ if (location.length) {
664
+ let userDataCopy = [...this.userData];
665
+ let store_id = [];
666
+ location.forEach((item) => {
667
+ let details = userDataCopy.find((store) => item == store.storeName);
668
+ if (details.city == undefined || details.city == '') {
669
+ store_id.push(item);
670
+ }
671
+ });
672
+ if (store_id.length) {
673
+ this.toast.getErrorToast(`City is required on this stores ${store_id.join()}`);
674
+ if (this.fileInput) {
675
+ this.fileInput.nativeElement.value = '';
676
+ }
677
+ if (this.fileInput1) {
678
+ this.fileInput1.nativeElement.value = '';
679
+ }
680
+ return;
681
+ }
682
+ else {
683
+ this.configData.uploadUser = true;
684
+ this.uploadUser(del);
685
+ }
686
+ }
687
+ }
688
+ }
689
+ if (popupcontent) {
690
+ const dialogRef = this.dialog.open(TraxpopupComponent, {
691
+ centered: true, size: 'md'
692
+ });
693
+ dialogRef.componentInstance.data = popupcontent;
694
+ dialogRef.result.then((result) => {
695
+ if (result == 'confirmStore') {
696
+ this.route.navigateByUrl(`manage/stores/addition-method`);
697
+ }
698
+ if (result == 'activeStore') {
699
+ this.route.navigateByUrl(`manage/stores`);
700
+ }
701
+ if (result?.message == 'confirm' || result == 'skip') {
702
+ validate = true;
703
+ if (result == 'skip') {
704
+ let userDataCopy = [...this.userData];
705
+ this.userData = [];
706
+ if (res?.data?.user?.length) {
707
+ let userDetails = res.data.user.map((item) => item.userEmail);
708
+ userDataCopy.forEach((item) => {
709
+ if (!userDetails.includes(item.userEmail)) {
710
+ this.userData.push(item);
711
+ }
712
+ });
713
+ }
714
+ if (location.length) {
715
+ let store_id = [];
716
+ location.forEach((item) => {
717
+ let details = userDataCopy.find((store) => item == store.storeName);
718
+ if (details.city == undefined || details.city == '') {
719
+ store_id.push(item);
720
+ }
721
+ });
722
+ if (store_id.length) {
723
+ this.toast.getErrorToast(`City is required on this stores ${store_id.join()}`);
724
+ if (this.fileInput) {
725
+ this.fileInput.nativeElement.value = '';
726
+ }
727
+ if (this.fileInput1) {
728
+ this.fileInput1.nativeElement.value = '';
729
+ }
730
+ return;
731
+ }
732
+ }
733
+ if (res?.data?.store?.length) {
734
+ userDataCopy.forEach((item) => {
735
+ if (!store.includes(item.storeName) && !inactiveStore.includes(item.storeName)) {
736
+ this.userData.push(item);
737
+ }
738
+ });
739
+ }
740
+ }
741
+ else {
742
+ result?.user.forEach((item) => {
743
+ let index = this.userData.findIndex((user) => {
744
+ return user.userEmail == item.userEmail;
745
+ });
746
+ if (!item.invite) {
747
+ this.userData.splice(index, 1);
748
+ }
749
+ });
750
+ for (let item of res.data.user) {
751
+ if (item?.message) {
752
+ this.toast.getErrorToast(`${item.userEmail} - ${item.message}`);
753
+ if (this.fileInput) {
754
+ this.fileInput.nativeElement.value = '';
755
+ }
756
+ if (this.fileInput1) {
757
+ this.fileInput1.nativeElement.value = '';
758
+ }
759
+ validate = false;
760
+ return;
761
+ }
762
+ }
763
+ }
764
+ if (validate) {
765
+ if (!this.userData.length) {
766
+ this.toast.getErrorToast('Please Enter valid Details');
767
+ if (this.fileInput) {
768
+ this.fileInput.nativeElement.value = '';
769
+ }
770
+ if (this.fileInput1) {
771
+ this.fileInput1.nativeElement.value = '';
772
+ }
773
+ return;
774
+ }
775
+ this.configData.uploadUser = true;
776
+ this.uploadUser(del);
777
+ }
778
+ }
779
+ });
780
+ }
781
+ }
782
+ else {
783
+ this.configData.uploadUser = true;
784
+ if (this.fileInput) {
785
+ this.fileInput.nativeElement.value = '';
786
+ }
787
+ if (this.fileInput1) {
788
+ this.fileInput1.nativeElement.value = '';
789
+ }
790
+ this.uploadUser(del);
791
+ }
792
+ }
793
+ }
794
+ }, (error) => {
795
+ if (this.fileInput) {
796
+ this.fileInput.nativeElement.value = '';
797
+ }
798
+ if (this.fileInput1) {
799
+ this.fileInput1.nativeElement.value = '';
800
+ }
801
+ this.toast.getErrorToast(error.error.error);
802
+ });
803
+ }
804
+ uploadUser(del) {
805
+ let data = {
806
+ id: this.checklistId,
807
+ assignedUsers: this.userData,
808
+ uploadUser: true,
809
+ addUser: true,
810
+ type: this.obj?.type && ['mobileusagedetection', 'storeopenandclose'].includes(this.obj.type) ? this.obj.type : '',
811
+ ...(del) ? { delete: false } : {},
812
+ clientId: this.clientId
813
+ };
814
+ this.SopService.validateUser(data).pipe(takeUntil(this.detach)).subscribe((response) => {
815
+ if (response && response.code == 200) {
816
+ this.configData.checkListDetails._id = response.data.id;
817
+ this.checklistId = response.data.id;
818
+ this.configData.checkListDetails.assignedUsers = [];
819
+ this.userDetails();
820
+ this.changedetector.detectChanges();
821
+ }
822
+ });
823
+ }
824
+ userDetails() {
825
+ this.size = 5;
826
+ this.tableLoading = true;
827
+ let params = {
828
+ limit: this.size,
829
+ offset: 0,
830
+ search: this.tableFilter,
831
+ id: this.checklistId,
832
+ clientId: this.clientId
833
+ };
834
+ this.SopService.getUserDetails(params).pipe(takeUntil(this.detach)).subscribe((res) => {
835
+ this.tableLoading = false;
836
+ let count = 0;
837
+ if (res == null) {
838
+ this.showImage = true;
839
+ if (this.tableFilter.length)
840
+ this.showImage = false;
841
+ this.tableData = [];
842
+ }
843
+ if (res && res.code == 200) {
844
+ this.showImage = false;
845
+ this.tableData = res.data.users;
846
+ this.recordsCount = this.tableData.length;
847
+ this.recordsTotal = res.data.count;
848
+ if (this.recordsTotal < 5) {
849
+ this.paginationSize = [this.recordsTotal];
850
+ this.size = this.recordsTotal;
851
+ }
852
+ else {
853
+ this.paginationSize = [5, 10, 15, 20];
854
+ this.size = 5;
855
+ }
856
+ this.tableData.forEach((item) => {
857
+ if (item.checkFlag && !this.configData.checkListDetails.assignedUsers.includes(item.id) && !this.removeUsers.includes(item.id))
858
+ this.configData.checkListDetails.assignedUsers.push(item.id);
859
+ if (this.configData.checkListDetails.assignedUsers.includes(item.id)) {
860
+ count += 1;
861
+ }
862
+ if (!item.checkFlag && !this.removeUsers.includes(item.id))
863
+ this.removeUsers.push(item.id);
864
+ });
865
+ if (count == this.recordsCount) {
866
+ this.selectAll = true;
867
+ }
868
+ else {
869
+ this.selectAll = false;
870
+ }
871
+ }
872
+ });
873
+ }
874
+ downloadTemplate() {
875
+ let params = {
876
+ limit: 10000,
877
+ offset: 0,
878
+ id: this.checklistId,
879
+ search: this.tableFilter,
880
+ clientId: this.clientId
881
+ };
882
+ this.SopService.getUserDetails(params).pipe(takeUntil(this.detach)).subscribe((res) => {
883
+ let excelData = [];
884
+ if (res == null) {
885
+ excelData.push({
886
+ storeName: '',
887
+ userEmail: '',
888
+ userName: '',
889
+ userPhone: '',
890
+ city: ''
891
+ });
892
+ }
893
+ if (res && res.code == 200) {
894
+ res.data.users.forEach((item) => {
895
+ excelData.push({
896
+ storeName: item.storeName,
897
+ userEmail: item.userEmail,
898
+ userName: item.userName,
899
+ userPhone: item.userPhone,
900
+ city: item.city
901
+ });
902
+ });
903
+ }
904
+ this.SopService.exportAsExcelFile(excelData, 'CheckList_userList_');
905
+ });
906
+ }
907
+ onPageChange(event) {
908
+ this.tableLoading = true;
909
+ this.currentValue = event;
910
+ this.tableLoading = true;
911
+ let params = {
912
+ limit: this.size,
913
+ offset: event - 1,
914
+ search: this.tableFilter,
915
+ id: this.checklistId,
916
+ clientId: this.clientId
917
+ };
918
+ this.SopService.getUserDetails(params).pipe(takeUntil(this.detach)).subscribe((res) => {
919
+ this.tableLoading = false;
920
+ if (res == null) {
921
+ this.showImage = true;
922
+ if (this.tableFilter.length) {
923
+ this.showImage = false;
924
+ }
925
+ this.tableData = [];
926
+ }
927
+ if (res && res.code == 200) {
928
+ this.showImage = false;
929
+ this.tableData = res.data.users;
930
+ let count = 0;
931
+ this.tableData.forEach((item) => {
932
+ if (item.checkFlag && !this.configData.checkListDetails.assignedUsers.includes(item.id) && !this.removeUsers.includes(item.id))
933
+ this.configData.checkListDetails.assignedUsers.push(item.id);
934
+ if (this.configData.checkListDetails.assignedUsers.includes(item.id)) {
935
+ count += 1;
936
+ }
937
+ });
938
+ this.recordsCount = this.tableData.length;
939
+ this.recordsTotal = res.data.count;
940
+ if (this.recordsTotal < 5) {
941
+ this.paginationSize = [this.recordsTotal];
942
+ this.size = this.recordsTotal;
943
+ }
944
+ else {
945
+ this.paginationSize = [5, 10, 15, 20];
946
+ this.size = 5;
947
+ }
948
+ if (count == this.recordsCount) {
949
+ this.selectAll = true;
950
+ }
951
+ else {
952
+ this.selectAll = false;
953
+ }
954
+ }
955
+ });
956
+ this.changedetector.detectChanges();
957
+ }
958
+ onPageSizeChange(event) {
959
+ this.size = event;
960
+ this.tableLoading = true;
961
+ this.currentValue = 1;
962
+ this.tableLoading = true;
963
+ let params = {
964
+ limit: this.size,
965
+ offset: 0,
966
+ search: this.tableFilter,
967
+ id: this.checklistId,
968
+ clientId: this.clientId
969
+ };
970
+ this.SopService.getUserDetails(params).pipe(takeUntil(this.detach)).subscribe((res) => {
971
+ this.tableLoading = false;
972
+ if (res == null) {
973
+ this.showImage = true;
974
+ if (this.tableFilter.length)
975
+ this.showImage = false;
976
+ this.tableData = [];
977
+ }
978
+ if (res && res.code == 200) {
979
+ this.showImage = false;
980
+ this.tableData = res.data.users;
981
+ this.tableData.forEach((item) => {
982
+ if (item.checkFlag && !this.configData.checkListDetails.assignedUsers.includes(item.id) && !this.removeUsers.includes(item.id))
983
+ this.configData.checkListDetails.assignedUsers.push(item.id);
984
+ });
985
+ this.recordsCount = this.tableData.length;
986
+ this.recordsTotal = res.data.count;
987
+ if (this.recordsTotal < 5) {
988
+ this.paginationSize = [this.recordsTotal];
989
+ }
990
+ else {
991
+ this.paginationSize = [5, 10, 15, 20];
992
+ }
993
+ }
994
+ });
995
+ }
996
+ searchTableData() {
997
+ this.size = 5;
998
+ this.currentValue = 1;
999
+ this.tableLoading = true;
1000
+ let params = {
1001
+ offset: 0,
1002
+ limit: this.size,
1003
+ search: this.tableFilter,
1004
+ id: this.checklistId,
1005
+ clientId: this.clientId
1006
+ };
1007
+ if (this.tableFilter.length) {
1008
+ this.SopService.getUserDetails(params).pipe(takeUntil(this.detach)).subscribe((res) => {
1009
+ this.tableLoading = false;
1010
+ if (res == null) {
1011
+ this.showImage = true;
1012
+ if (this.tableFilter.length)
1013
+ this.showImage = false;
1014
+ this.tableData = [];
1015
+ }
1016
+ if (res && res.code == 200) {
1017
+ this.showImage = false;
1018
+ this.tableData = res.data.users;
1019
+ this.recordsCount = this.tableData.length;
1020
+ this.recordsTotal = res.data.count;
1021
+ let count = 0;
1022
+ if (this.recordsTotal < 5) {
1023
+ this.paginationSize = [this.recordsTotal];
1024
+ this.size = this.recordsTotal;
1025
+ }
1026
+ else {
1027
+ this.paginationSize = [5, 10, 15, 20];
1028
+ this.size = 5;
1029
+ }
1030
+ this.tableData.forEach((item) => {
1031
+ if (item.checkFlag && !this.configData.checkListDetails.assignedUsers.includes(item.id) && !this.removeUsers.includes(item.id))
1032
+ this.configData.checkListDetails.assignedUsers.push(item.id);
1033
+ if (this.configData.checkListDetails.assignedUsers.includes(item.id)) {
1034
+ count += 1;
1035
+ }
1036
+ });
1037
+ if (count == this.recordsCount) {
1038
+ this.selectAll = true;
1039
+ }
1040
+ else {
1041
+ this.selectAll = false;
1042
+ }
1043
+ }
1044
+ });
1045
+ }
1046
+ else {
1047
+ this.userDetails();
1048
+ }
1049
+ }
1050
+ updateFlag(event, index, element) {
1051
+ element.checkFlag = event.target.checked;
1052
+ if (event.target.checked) {
1053
+ let index = this.removeUsers.findIndex((item) => item == element.id);
1054
+ this.removeUsers.splice(index, 1);
1055
+ this.configData.checkListDetails.assignedUsers.push(element.id);
1056
+ }
1057
+ if (!event.target.checked) {
1058
+ this.removeUsers.push(element.id);
1059
+ let index = this.configData.checkListDetails.assignedUsers.findIndex((item) => item == element.id);
1060
+ this.configData.checkListDetails.assignedUsers.splice(index, 1);
1061
+ }
1062
+ this.tableData[index].checkFlag = event.target.checked;
1063
+ this.changedetector.detectChanges();
1064
+ if (this.configData.checkListDetails.assignedUsers.length != this.recordsTotal) {
1065
+ this.selectAll = false;
1066
+ }
1067
+ }
1068
+ checkAll(event) {
1069
+ // this.configData.checkListDetails.assignedUsers = [];
1070
+ if (event.target.checked) {
1071
+ this.tableData.forEach((item) => {
1072
+ item.checkFlag = true;
1073
+ let index = this.removeUsers.findIndex((element) => element == item.id);
1074
+ this.removeUsers.splice(index, 1);
1075
+ if (!this.configData.checkListDetails.assignedUsers.includes(item.id))
1076
+ this.configData.checkListDetails.assignedUsers.push(item.id);
1077
+ });
1078
+ }
1079
+ else {
1080
+ this.tableData.forEach((item) => {
1081
+ item.checkFlag = false;
1082
+ this.removeUsers.push(item.id);
1083
+ let index = this.configData.checkListDetails.assignedUsers.findIndex((id) => id == item.id);
1084
+ this.configData.checkListDetails.assignedUsers.splice(index, 1);
1085
+ });
1086
+ }
1087
+ this.changedetector.detectChanges();
1088
+ }
1089
+ // dateRangeStart(event :any) {
1090
+ // this.rangeStart = this.dayjs(event.start).format('YYYY-MM-DD')
1091
+ // this.validateTime();
1092
+ // }
1093
+ dateSpecific(event) {
1094
+ if (this.configData.checkListDetails?.schedule == 'range' && event?.selectedList) {
1095
+ this.selectedDateList = event.selectedList;
1096
+ }
1097
+ }
1098
+ dateRangeStart(event) {
1099
+ if (event && event.startDate) {
1100
+ if (this.configData.checkListDetails?.schedule == 'onetime')
1101
+ this.configData.checkListDetails.scheduleDate = this.dayjs(event.startDate).format('YYYY-MM-DD');
1102
+ else {
1103
+ this.configData.checkListDetails.configStartDate = this.dayjs(event.startDate).format('YYYY-MM-DD');
1104
+ }
1105
+ }
1106
+ else {
1107
+ if (this.configData.checkListDetails?.schedule == 'onetime')
1108
+ this.configData.checkListDetails.scheduleDate = this.configData.checkListDetails.scheduleDate;
1109
+ else {
1110
+ this.configData.checkListDetails.configStartDate = this.configData.checkListDetails.configStartDate;
1111
+ }
1112
+ }
1113
+ this.selectedStartDate = { startDate: this.dayjs(this.configData.checkListDetails?.configStartDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.configData.checkListDetails?.configStartDate).format('DD-MM-YYYY') };
1114
+ this.minStartDate = this.dayjs(this.configData.checkListDetails?.configStartDate).format();
1115
+ this.selectedDate = { startDate: this.dayjs(this.configData.checkListDetails.scheduleDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.configData.checkListDetails.scheduleDate).format('DD-MM-YYYY') };
1116
+ this.minDate = this.dayjs().format();
1117
+ this.minEndDate = this.dayjs(this.configData.checkListDetails?.configStartDate).format();
1118
+ this.validateTime();
1119
+ }
1120
+ dateRangeEnd(event) {
1121
+ if (event && event.endDate) {
1122
+ this.configData.checkListDetails.configEndDate = this.dayjs(event.endDate).format('YYYY-MM-DD');
1123
+ // this.refreshPicker = false;
1124
+ this.selectedEndDate = { startDate: this.dayjs(this.configData.checkListDetails?.configEndDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.configData.checkListDetails?.configEndDate).format('DD-MM-YYYY') };
1125
+ this.minEndDate = this.dayjs(this.configData.checkListDetails?.configStartDate).format();
1126
+ this.validateTime();
1127
+ }
1128
+ }
1129
+ // dateChanged(event: any) {
1130
+ // this.date = this.dayjs(event.start);
1131
+ // this.monthDate = parseInt(this.date.format('DD')) == 1 ? parseInt(this.date.format('DD')) + 'st' : parseInt(this.date.format('DD')) == 2 ? parseInt(this.date.format('DD')) + 'nd' : parseInt(this.date.format('DD')) == 3 ? parseInt(this.date.format('DD')) + 'rd' : parseInt(this.date.format('DD')) + 'th';
1132
+ // this.monthDay = this.date.format('dddd');
1133
+ // this.configData.checkListDetails.scheduleDate = this.dayjs(event.start).format('YYYY-MM-DD');
1134
+ // let weekNumber = getWeekNumber(this.date);
1135
+ // this.MonthweekNumber = weekNumber == 1 ? weekNumber + 'st' : weekNumber == 2 ? weekNumber + 'nd' : weekNumber == 3 ? weekNumber + 'rd' : weekNumber + 'th';
1136
+ // this.setMonthDate(this.configData.checkListDetails.scheduleRepeatedMonthSetup);
1137
+ // }
1138
+ // setDay(day: any) {
1139
+ // this.configData.checkListDetails.scheduleRepeatedDay = day;
1140
+ // }
1141
+ setDay(day) {
1142
+ if (this.selectedDays.includes(day)) {
1143
+ this.selectedDays = this.selectedDays.filter(selectedDay => selectedDay !== day);
1144
+ }
1145
+ else {
1146
+ this.selectedDays.push(day);
1147
+ }
1148
+ }
1149
+ // setMonthDate(data: any) {
1150
+ // if (data == 'date') {
1151
+ // this.configData.checkListDetails.scheduleRepeatedDay = [this.monthDate];
1152
+ // this.selectedDays = [this.monthDate];
1153
+ // }
1154
+ // else {
1155
+ // this.configData.checkListDetails.scheduleRepeatedDay = [this.monthDay];
1156
+ // this.selectedDays = [this.monthDay];
1157
+ // let weekNumber = getWeekNumber(this.date);
1158
+ // this.configData.checkListDetails.scheduleRepeatedMonthWeek = weekNumber == 1 ? weekNumber + 'st' : weekNumber == 2 ? weekNumber + 'nd' : weekNumber == 3 ? weekNumber + 'rd' : weekNumber + 'th';
1159
+ // }
1160
+ // this.configData.checkListDetails.scheduleRepeatedMonthSetup = data;
1161
+ // }
1162
+ // setDate(event: any) {
1163
+ // this.configData.checkListDetails.scheduleDate = event.start;
1164
+ // }
1165
+ publish() {
1166
+ if (['weekly', 'weekday'].includes(this.configData.checkListDetails.schedule) && this.selectedDays.length == 0) {
1167
+ this.toast.getErrorToast('Please select atleast 1 day to proceed');
1168
+ return false;
1169
+ }
1170
+ if (!this.validTime) {
1171
+ this.toast.getErrorToast('Invalid Schedule End Time');
1172
+ return false;
1173
+ }
1174
+ if (!this.showRangeValue) {
1175
+ this.configData.checkListDetails.configStartDate = '';
1176
+ this.configData.checkListDetails.configEndDate = '';
1177
+ }
1178
+ if (this.configData.checkListDetails.schedule != 'onetime') {
1179
+ this.configData.checkListDetails.scheduleDate = '';
1180
+ }
1181
+ if (this.configData.checkListDetails.schedule == 'monthly' && this.configData.checkListDetails.scheduleRepeatedMonthSetup == 'date') {
1182
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = this.monthDate + ' ' + this.monthDay;
1183
+ }
1184
+ if (this.configData.checkListDetails.schedule == 'monthly' && this.configData.checkListDetails.scheduleRepeatedMonthSetup == 'specific') {
1185
+ if (this.submittedDates.length)
1186
+ this.configData.checkListDetails.specificDate = this.submittedDates;
1187
+ else {
1188
+ this.toast.getErrorToast('Please select atleast 1 date to proceed');
1189
+ return false;
1190
+ }
1191
+ }
1192
+ if (this.configData.checkListDetails.schedule == 'range') {
1193
+ this.configData.checkListDetails.specificDate = this.selectedDateList;
1194
+ }
1195
+ let popupcontent = {
1196
+ displayprop: false,
1197
+ imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#D1FADF"/><path d="M38 27.0818V28.0018C37.9988 30.1582 37.3005 32.2565 36.0093 33.9836C34.7182 35.7108 32.9033 36.9743 30.8354 37.5857C28.7674 38.1971 26.5573 38.1237 24.5345 37.3764C22.5117 36.6291 20.7847 35.2479 19.611 33.4389C18.4373 31.6299 17.8798 29.4899 18.0217 27.3381C18.1636 25.1864 18.9972 23.1381 20.3983 21.4989C21.7994 19.8596 23.6928 18.7172 25.7962 18.242C27.8996 17.7667 30.1003 17.9842 32.07 18.8618M38 20.0018L28 30.0118L25 27.0118" stroke="#039855" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#ECFDF3" stroke-width="8"/></svg>`,
1198
+ title: `Are you sure you want to publish ${this.configData.checkListDetails.checkListName} checklist?`,
1199
+ content: `Publishing will make this checklist live, and changes will take effect immediately.`,
1200
+ buttontype: 'confirm'
1201
+ };
1202
+ const dialogRef = this.dialog.open(TraxpopupComponent, { centered: true, size: 'md' });
1203
+ dialogRef.componentInstance.data = popupcontent;
1204
+ dialogRef.result.then((res) => {
1205
+ if (res == 'confirm') {
1206
+ if (this.type == 'mobileusagedetection' || this.type == 'storeopenandclose') {
1207
+ // if (this.type == 'mobileusagedetection') {
1208
+ // this.configData.checkListDetails.detectionArea = this.zones;
1209
+ // }
1210
+ if (this.type == 'storeopenandclose') {
1211
+ this.configData.checkListDetails.scheduleStartTime = this.configData.openTime;
1212
+ this.configData.checkListDetails.scheduleEndTime = this.configData.closeTime;
1213
+ }
1214
+ // this.configData.checkListDetails.alert.alertsTo = this.emailList;
1215
+ }
1216
+ this.configData.checkListDetails.publish = true;
1217
+ this.configData.submitType = 'publish';
1218
+ this.configData.removedUsers = this.removeUsers;
1219
+ this.configData.checkListDetails.scheduleWeekDays = this.selectedDays;
1220
+ this.configData.updateConfigure = this.disabledQuestion ? true : false;
1221
+ this.configData.clientId = this.clientId;
1222
+ console.log(this.configData);
1223
+ this.SopService.configUpdate(this.configData).pipe(takeUntil(this.detach)).subscribe((res) => {
1224
+ if (res) {
1225
+ if (res && res.code == 200) {
1226
+ this.toast.getSuccessToast(`${this.configData.checkListDetails.checkListName} checklist published.`);
1227
+ this.route.navigate(['/manage/trax/checklist']);
1228
+ }
1229
+ else {
1230
+ this.toast.getErrorToast('Please Assign a User!');
1231
+ }
1232
+ }
1233
+ else {
1234
+ this.toast.getErrorToast('Please Assign a User!');
1235
+ }
1236
+ }, (error) => {
1237
+ let err = error?.error?.error?.message || 'something went wrong';
1238
+ this.toast.getErrorToast(err);
1239
+ });
1240
+ }
1241
+ });
1242
+ }
1243
+ // selectstore(element: any) {
1244
+ // const dialogRef = this.dialog.open(TraxStoreComponent, {
1245
+ // centered:true,size:'md'
1246
+ // });
1247
+ // dialogRef.componentInstance.data = element;
1248
+ // dialogRef.result.then((data: any) => {
1249
+ // // console.log(data);
1250
+ // if (data && data.msg == 'confirm') {
1251
+ // if (data.stores.length) {
1252
+ // let sop = data.stores;
1253
+ // let id = element.id;
1254
+ // // this.SopService.assignSopStore(sop, id).subscribe((res: any) => {
1255
+ // // if (res && res.code == 200) {
1256
+ // // element.sop_stores = data.stores;
1257
+ // // this.changedetector.detectChanges();
1258
+ // // }
1259
+ // // }, (error: any) => {
1260
+ // // })
1261
+ // }
1262
+ // }
1263
+ // })
1264
+ // }
1265
+ newstore() {
1266
+ this.route.navigate(["/manage/stores"], { queryParams: { checklistid: JSON.stringify(this.obj) } });
1267
+ }
1268
+ inviteuser() {
1269
+ this.route.navigate(["/control-panel/assign-role"], { queryParams: { checklistid: JSON.stringify(this.obj) } });
1270
+ }
1271
+ updateDay() {
1272
+ return this.configData.checkListDetails.scheduleRepeatedMonthSetup == 'day' ? this.dayjs().format('DD') : '';
1273
+ }
1274
+ updateValue(event) {
1275
+ if (event.target.value.length != 0) {
1276
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = event.target.value < 9 ? '0' + event.target.value : event.target.value;
1277
+ }
1278
+ else {
1279
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = this.dayjs().format('DD');
1280
+ }
1281
+ this.changedetector.detectChanges();
1282
+ }
1283
+ validate(event) {
1284
+ if (!isNaN(event.target.value)) {
1285
+ if (event.target.value[0] == 3 && event.target.value[1] > 1) {
1286
+ event.target.value = 3;
1287
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = 3;
1288
+ }
1289
+ if (event.target.value[0] > 3 && event.target.value[1] >= 0) {
1290
+ event.target.value = event.target.value[0];
1291
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = event.target.value[0];
1292
+ }
1293
+ if (event.target.value[0] < 1) {
1294
+ event.target.value = '';
1295
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = '';
1296
+ }
1297
+ }
1298
+ else {
1299
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = '';
1300
+ event.target.value = '';
1301
+ }
1302
+ }
1303
+ savedraft() {
1304
+ if (!this.validTime) {
1305
+ this.toast.getErrorToast('Invalid Schedule End Time');
1306
+ return false;
1307
+ }
1308
+ let startDateWithTime, endDateWithTime;
1309
+ if (!this.showRangeValue) {
1310
+ this.configData.checkListDetails.configStartDate = '';
1311
+ this.configData.checkListDetails.configEndDate = '';
1312
+ }
1313
+ if (this.configData.checkListDetails.schedule != 'onetime') {
1314
+ this.configData.checkListDetails.scheduleDate = '';
1315
+ }
1316
+ if (this.configData.checkListDetails.schedule == 'monthly' && this.configData.checkListDetails.scheduleRepeatedMonthSetup == 'date') {
1317
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = this.monthDate + ' ' + this.monthDay;
1318
+ }
1319
+ if (this.configData.checkListDetails.schedule == 'monthly' && this.configData.checkListDetails.scheduleRepeatedMonthSetup == 'specific') {
1320
+ if (this.submittedDates.length)
1321
+ this.configData.checkListDetails.specificDate = this.submittedDates;
1322
+ }
1323
+ if (this.configData.checkListDetails.schedule == 'range') {
1324
+ this.configData.checkListDetails.specificDate = this.selectedDateList;
1325
+ }
1326
+ // if (this.configData.checkListDetails.scheduleRepeatedType == 'range') {
1327
+ // let start = this.configData.checkListDetails.scheduleStartTime.split(' ');
1328
+ // let end = this.configData.checkListDetails.scheduleEndTime.split(' ');
1329
+ // startDateWithTime = start.length > 2 ? start[1] + ' ' + start[2] : this.configData.checkListDetails.scheduleStartTime;
1330
+ // endDateWithTime = end.length > 2 ? end[1] + ' ' + end[2] : this.configData.checkListDetails.scheduleEndTime;
1331
+ // this.configData.checkListDetails.scheduleStartTime = this.dayjs(this.rangeStart).format('YYYY-MM-DD') + ' ' + startDateWithTime;
1332
+ // this.configData.checkListDetails.scheduleEndTime = this.dayjs(this.rangeEnd).format('YYYY-MM-DD') + ' ' + endDateWithTime;
1333
+ // if (this.configData.checkListDetails.scheduleStartTime > this.configData.checkListDetails.scheduleEndTime) {
1334
+ // this.configData.checkListDetails.scheduleStartTime = startDateWithTime;
1335
+ // this.configData.checkListDetails.scheduleEndTime = endDateWithTime;
1336
+ // this.toast.getErrorToast('End time must be greater than start time');
1337
+ // return false;
1338
+ // }
1339
+ // }
1340
+ this.popupCount = this.popupCount + 1;
1341
+ this.configData.submitType = 'save';
1342
+ this.configData.checkListDetails.publish = false;
1343
+ this.configData.removedUsers = this.removeUsers;
1344
+ this.configData.checkListDetails.scheduleWeekDays = this.selectedDays;
1345
+ const popupcontent = {
1346
+ displayprop: false,
1347
+ imagesrc: '<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>',
1348
+ title: `Unsaved changes`,
1349
+ content: `Do you want to save as draft?`,
1350
+ buttontype: 'draft'
1351
+ };
1352
+ const dialogRef = this.dialog.open(TraxpopupComponent, {
1353
+ centered: true, size: 'md'
1354
+ });
1355
+ dialogRef.componentInstance.data = popupcontent;
1356
+ dialogRef.result.then((res) => {
1357
+ if (this.type == 'mobileusagedetection' || this.type == 'storeopenandclose') {
1358
+ if (this.type == 'mobileusagedetection') {
1359
+ // this.configData.checkListDetails.detectionArea = this.zones;
1360
+ }
1361
+ if (this.type == 'storeopenandclose') {
1362
+ this.configData.checkListDetails.scheduleStartTime = this.configData.openTime;
1363
+ this.configData.checkListDetails.scheduleEndTime = this.configData.closeTime;
1364
+ }
1365
+ // this.configData.checkListDetails.assignedUsers = this.sopStores;
1366
+ // this.configData.checkListDetails.alert.alertsTo = this.emailList;
1367
+ }
1368
+ if (!res) {
1369
+ this.popupCount = 0;
1370
+ }
1371
+ if (res == 'confirm') {
1372
+ this.configData.clientId = this.clientId;
1373
+ this.SopService.configUpdate(this.configData).pipe(takeUntil(this.detach)).subscribe((result) => {
1374
+ if (result && result.code == 200) {
1375
+ this.toast.getSuccessToast('Draft has been saved successfully.');
1376
+ this.route.navigate(['/manage/trax/checklist']);
1377
+ }
1378
+ });
1379
+ }
1380
+ });
1381
+ }
1382
+ Reupload() {
1383
+ if (this.fileInput) {
1384
+ this.fileInput.nativeElement.value = '';
1385
+ }
1386
+ if (this.fileInput1) {
1387
+ this.fileInput1.nativeElement.value = '';
1388
+ }
1389
+ this.popupCount = this.popupCount + 1;
1390
+ const popupcontent = {
1391
+ displayprop: false,
1392
+ imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>`,
1393
+ title: `Reupload CSV`,
1394
+ content: `Are you sure you want to replace existing data by uploading new file? Your existing data will get replaced with the new one.`,
1395
+ buttontype: 'Reupload'
1396
+ };
1397
+ const dialogRef = this.dialog.open(TraxpopupComponent, {
1398
+ centered: true, size: 'md',
1399
+ });
1400
+ dialogRef.componentInstance.data = popupcontent;
1401
+ dialogRef.result.then((res) => {
1402
+ if (res == 'confirm') {
1403
+ this.reupload = true;
1404
+ this.changedetector.detectChanges();
1405
+ let ele = document.getElementById('kt_account_team_size_select_2');
1406
+ ele?.click();
1407
+ }
1408
+ });
1409
+ }
1410
+ // invitenewuser() {
1411
+ // this.popupCount = this.popupCount + 1;
1412
+ // const popupcontent = {
1413
+ // displayprop: false,
1414
+ // imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>`,
1415
+ // title: `Invite new users added in CSV`,
1416
+ // content: `This CSV contains new users. Invite users by sending mail to them. <br>`,
1417
+ // buttontype: 'Invite'
1418
+ // }
1419
+ // const dialogRef = this.dialog.open(TraxpopupComponent, {
1420
+ // centered:true,size:'md'
1421
+ // });
1422
+ // dialogRef.componentInstance.data = popupcontent;
1423
+ // dialogRef.result.then((res) => {
1424
+ // if (res == 'confirm') {
1425
+ // // this.SopService.configUpdate(this.configData).subscribe((result: any) => {
1426
+ // // // console.log(result);
1427
+ // // if (result && result.code == 200) {
1428
+ // // Swal.fire({
1429
+ // // toast: true,
1430
+ // // iconHtml: '<img src="../../../../assets/Icons/checklist-unpublished-icon.svg">',
1431
+ // // // titleText: `Email sent succesfully`,
1432
+ // // html: `<div class="row">
1433
+ // // <div class="col-12 mt-2">
1434
+ // // <h4>CSV has been Reuploaded successfully.</h4>
1435
+ // // </div>
1436
+ // // </div>`,
1437
+ // // position: 'bottom',
1438
+ // // showConfirmButton: false,
1439
+ // // showCloseButton: true,
1440
+ // // timer: 6000,
1441
+ // // timerProgressBar: true,
1442
+ // // didOpen: (toast) => {
1443
+ // // toast.addEventListener('mouseenter', Swal.stopTimer)
1444
+ // // toast.addEventListener('mouseleave', Swal.resumeTimer)
1445
+ // // $("#kt_create_account_form_account_type_personal").val('')
1446
+ // // this.changedetector.detectChanges();
1447
+ // // }
1448
+ // // })
1449
+ // // // this.route.navigate(['/sop/Checklists']);
1450
+ // // }
1451
+ // // })
1452
+ // }
1453
+ // })
1454
+ // }
1455
+ // Addstore() {
1456
+ // this.popupCount = this.popupCount + 1;
1457
+ // const popupcontent = {
1458
+ // displayprop: false,
1459
+ // imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>`,
1460
+ // title: `Invite new users added in CSV`,
1461
+ // content: `This CSV contains new users. Invite users by sending mail to them. <br>`,
1462
+ // subtitle: 'LKST009, ST3045',
1463
+ // buttontype: 'Addstore'
1464
+ // }
1465
+ // const dialogRef = this.dialog.open(TraxpopupComponent, {
1466
+ // centered:true,size:'md'
1467
+ // });
1468
+ // dialogRef.componentInstance.data = popupcontent;
1469
+ // dialogRef.result.then((res) => {
1470
+ // if (res == 'confirm') {
1471
+ // // this.SopService.configUpdate(this.configData).subscribe((result: any) => {
1472
+ // // // console.log(result);
1473
+ // // if (result && result.code == 200) {
1474
+ // // Swal.fire({
1475
+ // // toast: true,
1476
+ // // iconHtml: '<img src="../../../../assets/Icons/checklist-unpublished-icon.svg">',
1477
+ // // // titleText: `Email sent succesfully`,
1478
+ // // html: `<div class="row">
1479
+ // // <div class="col-12 mt-2">
1480
+ // // <h4>CSV has been Reuploaded successfully.</h4>
1481
+ // // </div>
1482
+ // // </div>`,
1483
+ // // position: 'bottom',
1484
+ // // showConfirmButton: false,
1485
+ // // showCloseButton: true,
1486
+ // // timer: 6000,
1487
+ // // timerProgressBar: true,
1488
+ // // didOpen: (toast) => {
1489
+ // // toast.addEventListener('mouseenter', Swal.stopTimer)
1490
+ // // toast.addEventListener('mouseleave', Swal.resumeTimer)
1491
+ // // $("#kt_create_account_form_account_type_personal").val('')
1492
+ // // this.changedetector.detectChanges();
1493
+ // // }
1494
+ // // })
1495
+ // // // this.route.navigate(['/sop/Checklists']);
1496
+ // // }
1497
+ // // })
1498
+ // }
1499
+ // })
1500
+ // }
1501
+ // addUser() {
1502
+ // this.addUserForm = !this.addUserForm;
1503
+ // }
1504
+ // createuserPopup(type: string, record: any = null): void {
1505
+ // if (type == 'view') {
1506
+ // this.popUpTitle = "View User Details";
1507
+ // } else if (type == 'edit') {
1508
+ // this.popUpTitle = "Edit User Details";
1509
+ // } else {
1510
+ // this.popUpTitle = "Enter New User Details";
1511
+ // // this.popUpTitle = "Enter New User Details";
1512
+ // }
1513
+ // let data = {
1514
+ // record: record,
1515
+ // type: type,
1516
+ // title: this.popUpTitle
1517
+ // }
1518
+ // const dialogRef_createUser = this.dialog.open(UploadSingleUserComponent, {
1519
+ // panelClass: 'custom-modalbox',
1520
+ // data: data
1521
+ // });
1522
+ // dialogRef_createUser.afterClosed().subscribe((res: any) => {
1523
+ // this.showIntro = false;
1524
+ // if (!record && res && res.data.code == 200) {
1525
+ // Swal.fire({
1526
+ // icon: 'success',
1527
+ // text: 'The user invite has been sent successfully to the user and added to the platform!',
1528
+ // confirmButtonText: 'OK',
1529
+ // allowOutsideClick: false,
1530
+ // heightAuto: false
1531
+ // }).then((result) => {
1532
+ // if (result.isConfirmed) {
1533
+ // this.searchUser = ''
1534
+ // this.addUserForm = false;
1535
+ // this.currentValue = 1;
1536
+ // // this.loadRecords(0, this.size)
1537
+ // }
1538
+ // })
1539
+ // } else if (res && res.data.code == 200) {
1540
+ // Swal.fire({
1541
+ // icon: 'success',
1542
+ // text: 'User Updated Successfully!',
1543
+ // heightAuto: false
1544
+ // });
1545
+ // this.searchUser = ''
1546
+ // this.addUserForm = false;
1547
+ // this.currentValue = 1;
1548
+ // // this.loadRecords(0, this.size)
1549
+ // }
1550
+ // })
1551
+ // }
1552
+ // createuserPopup() {
1553
+ // const dialogRef = this.dialog.open(UploadSingleUserComponent, {
1554
+ // panelClass: 'custom-modalbox'
1555
+ // });
1556
+ // dialogRef.afterClosed()
1557
+ // .subscribe((res: any) => {
1558
+ // })
1559
+ // }
1560
+ // transferFormData() {
1561
+ // this.SopService.sopData.asObservable()
1562
+ // }
1563
+ saveandredirect(id) {
1564
+ if (this.type == 'mobileusagedetection' || this.type == 'storeopenandclose') {
1565
+ if (this.type == 'mobileusagedetection') {
1566
+ // this.configData.checkListDetails.detectionArea = this.zones;
1567
+ }
1568
+ if (this.type == 'storeopenandclose') {
1569
+ this.configData.checkListDetails.scheduleStartTime = this.configData.openTime;
1570
+ this.configData.checkListDetails.scheduleEndTime = this.configData.closeTime;
1571
+ }
1572
+ // this.configData.checkListDetails.alert.alertsTo = this.emailList;
1573
+ }
1574
+ this.configData.submitType = 'save';
1575
+ this.configData.removedUsers = this.removeUsers;
1576
+ let startDateWithTime, endDateWithTime;
1577
+ if (!this.showRangeValue) {
1578
+ this.configData.checkListDetails.configStartDate = '';
1579
+ this.configData.checkListDetails.configEndDate = '';
1580
+ }
1581
+ if (this.configData.checkListDetails.schedule != 'onetime') {
1582
+ this.configData.checkListDetails.scheduleDate = '';
1583
+ }
1584
+ if (this.configData.checkListDetails.schedule == 'monthly' && this.configData.checkListDetails.scheduleRepeatedMonthSetup == 'date') {
1585
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = this.monthDate + ' ' + this.monthDay;
1586
+ }
1587
+ if (this.configData.checkListDetails.schedule == 'monthly' && this.configData.checkListDetails.scheduleRepeatedMonthSetup == 'specific') {
1588
+ if (this.submittedDates.length)
1589
+ this.configData.checkListDetails.specificDate = this.submittedDates;
1590
+ }
1591
+ if (this.configData.checkListDetails.schedule == 'range' && this.selectedDateList.length) {
1592
+ this.configData.checkListDetails.specificDate = this.selectedDateList;
1593
+ }
1594
+ this.configData.clientId = this.clientId;
1595
+ this.SopService.configUpdate(this.configData).pipe(takeUntil(this.detach)).subscribe((result) => {
1596
+ if (result && result.code == 200) {
1597
+ this.route.navigate(["/manage/trax/createChecklist"], { queryParams: { checklistId: id } });
1598
+ }
1599
+ });
1600
+ }
1601
+ validateTime() {
1602
+ let startTime = this.dayjs(this.startTime, 'HH:mm');
1603
+ let endTime = this.dayjs(this.endTime, 'HH:mm');
1604
+ if (this.showRangeValue) {
1605
+ if (this.configData.checkListDetails?.configStartDate != '' && this.configData.checkListDetails?.configStartDate != null && this.configData.checkListDetails.configEndDate != '' && this.configData.checkListDetails.configEndDate != null) {
1606
+ if (this.configData.checkListDetails?.configStartDate == this.configData.checkListDetails?.configEndDate) {
1607
+ if (startTime > endTime) {
1608
+ this.validTime = false;
1609
+ this.toast.getErrorToast('Invalid Schedule End Time');
1610
+ return false;
1611
+ }
1612
+ else {
1613
+ this.validTime = true;
1614
+ return true;
1615
+ }
1616
+ }
1617
+ else if (this.configData.checkListDetails.configStartDate > this.configData.checkListDetails.configEndDate) {
1618
+ this.validTime = false;
1619
+ this.toast.getErrorToast('Invalid Schedule End Date');
1620
+ return false;
1621
+ }
1622
+ else {
1623
+ this.validTime = true;
1624
+ return true;
1625
+ }
1626
+ }
1627
+ else {
1628
+ this.validTime = true;
1629
+ return true;
1630
+ }
1631
+ }
1632
+ else if (startTime > endTime) {
1633
+ this.validTime = false;
1634
+ this.toast.getErrorToast('Invalid Schedule End Time');
1635
+ return false;
1636
+ }
1637
+ else {
1638
+ this.validTime = true;
1639
+ return true;
1640
+ }
1641
+ }
1642
+ updateTime(data) {
1643
+ if (this.validateTime()) {
1644
+ if (data == 'start') {
1645
+ this.configData.checkListDetails.scheduleStartTime = this.dayjs(this.startTime, 'HH:mm').format('hh:mm A');
1646
+ }
1647
+ else {
1648
+ this.configData.checkListDetails.scheduleEndTime = this.dayjs(this.endTime, 'HH:mm').format('hh:mm A');
1649
+ }
1650
+ }
1651
+ this.changedetector.detectChanges();
1652
+ }
1653
+ updateSchedule(event) {
1654
+ this.configData.checkListDetails.scheduleRepeatedMonthSetup = '';
1655
+ this.configData.checkListDetails.scheduleRepeatedDay = '01';
1656
+ this.selectedDays = [];
1657
+ this.submittedDates = [];
1658
+ this.selectedDate = [];
1659
+ this.selectedDateList = [];
1660
+ this.specific = false;
1661
+ this.monthDate = '';
1662
+ this.monthDay = '';
1663
+ this.showDropDown = false;
1664
+ this.showRangeValue = event.target.value == 'range' ? true : false;
1665
+ if (event.target.value == 'range') {
1666
+ // this.refreshPicker = false;
1667
+ this.specific = false;
1668
+ this.selectedDateList = [];
1669
+ this.configData.checkListDetails.specificDate = [];
1670
+ this.configData.checkListDetails.configStartDate = this.configData.checkListDetails?.configStartDate || this.dayjs().format('YYYY-MM-DD');
1671
+ this.configData.checkListDetails.configEndDate = this.configData.checkListDetails?.configEndDate || this.dayjs().add(1, 'day').format('YYYY-MM-DD');
1672
+ this.selectedEndDate = { startDate: this.dayjs(this.configData.checkListDetails?.configEndDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.configData.checkListDetails?.configEndDate).format('DD-MM-YYYY') };
1673
+ this.minEndDate = this.dayjs(this.configData.checkListDetails?.configEndDate).format();
1674
+ this.selectedStartDate = { startDate: this.dayjs(this.configData.checkListDetails?.configStartDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.configData.checkListDetails?.configStartDate).format('DD-MM-YYYY') };
1675
+ this.minStartDate = this.dayjs(this.configData.checkListDetails?.configStartDate).format();
1676
+ }
1677
+ else {
1678
+ this.configData.checkListDetails.configStartDate = '';
1679
+ this.selectedStartDate = '';
1680
+ this.minStartDate = '';
1681
+ this.selectedEndDate = '';
1682
+ this.minEndDate = '';
1683
+ this.configData.checkListDetails.configEndDate = this.dayjs().add(1, 'day').format('YYYY-MM-DD');
1684
+ // this.refreshPicker = false;
1685
+ }
1686
+ if (event.target.value == 'weekday') {
1687
+ this.selectedDays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
1688
+ }
1689
+ if (event.target.value == 'weekly') {
1690
+ let todayDate = this.dayjs().format('dddd');
1691
+ this.selectedDays = [todayDate];
1692
+ }
1693
+ if (event.target.value == 'monthly') {
1694
+ this.configData.checkListDetails.scheduleRepeatedMonthSetup = 'day';
1695
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = this.dayjs().format('DD');
1696
+ }
1697
+ if (['daily', 'onetime'].includes(event.target.value) || (event.target.value == 'monthly' && ['day', 'date'].includes(this.configData.checkListDetails.scheduleRepeatedMonthSetup))) {
1698
+ if (event.target.value == 'onetime') {
1699
+ this.configData.checkListDetails.scheduleDate = this.configData.checkListDetails.scheduleDate ? this.configData.checkListDetails.scheduleDate : dayjs().format();
1700
+ this.selectedDates = { startDate: this.dayjs(this.configData.checkListDetails.scheduleDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.configData.checkListDetails.scheduleDate).format('DD-MM-YYYY') };
1701
+ this.minDate = this.dayjs().format();
1702
+ }
1703
+ this.configData.checkListDetails.allowOnce = false;
1704
+ }
1705
+ this.repeatType = this.configData.checkListDetails?.schedule == 'daily' ? 'Day' : ['weekly', 'weekday'].includes(this.configData.checkListDetails?.schedule) ? 'Week' : this.configData.checkListDetails?.schedule == 'monthly' ? 'Month' : '';
1706
+ this.changedetector.detectChanges();
1707
+ this.validateTime();
1708
+ }
1709
+ navigateToControlCenter() {
1710
+ this.route.navigate(['/controlcenter/templateview'], { queryParams: { source: 'cc' } });
1711
+ }
1712
+ addStoreComponent() {
1713
+ const dialogRef = this.dialog.open(TraxStoreComponent, {
1714
+ centered: true, size: 'md'
1715
+ });
1716
+ dialogRef.componentInstance.data = {
1717
+ checklistId: this.checklistId,
1718
+ obj: this.obj
1719
+ };
1720
+ dialogRef.result.then((res) => {
1721
+ if (res) {
1722
+ this.userData = res;
1723
+ this.validateUserDetails(true);
1724
+ }
1725
+ });
1726
+ }
1727
+ toggleDropDown() {
1728
+ this.showDropDown = !this.showDropDown;
1729
+ }
1730
+ selectDate(date) {
1731
+ if (this.selectedDate.includes(date)) {
1732
+ this.selectedDate = this.selectedDate.filter((day) => day !== date);
1733
+ }
1734
+ else {
1735
+ if (!this.selectedDate.includes(date)) {
1736
+ this.selectedDate.push(date);
1737
+ }
1738
+ }
1739
+ }
1740
+ submitDate() {
1741
+ this.submittedDates = [...this.selectedDate];
1742
+ }
1743
+ removeBadge(date) {
1744
+ this.submittedDates = this.submittedDates.filter(d => d !== date);
1745
+ this.selectedDate = this.selectedDate.filter((d) => d !== date);
1746
+ }
1747
+ getDateWithSuffix(date) {
1748
+ if (date == 1 || date == 31 || date == 21) {
1749
+ return date + 'st';
1750
+ }
1751
+ else if (date == 2 || date == 22) {
1752
+ return date + 'nd';
1753
+ }
1754
+ else if (date == 3 || date == 23) {
1755
+ return date + 'rd';
1756
+ }
1757
+ else {
1758
+ return date + 'th';
1759
+ }
1760
+ }
1761
+ closeDropDown() {
1762
+ this.showDropDown = false;
1763
+ }
1764
+ updateMonth(type) {
1765
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = '';
1766
+ this.submittedDates = [];
1767
+ this.selectedDate = [];
1768
+ this.configData.checkListDetails.specificDate = [];
1769
+ this.configData.checkListDetails.scheduleRepeatedMonthSetup = type;
1770
+ this.monthDate = '';
1771
+ this.monthDay = '';
1772
+ this.selectedDateList = [];
1773
+ this.configData.checkListDetails.allowOnce = false;
1774
+ if (this.configData.checkListDetails.scheduleRepeatedMonthSetup == 'date') {
1775
+ let dateWeek = getWeekNumber(this.dayjs());
1776
+ this.monthDate = dateWeek.toString();
1777
+ this.monthDay = this.dayjs().format('dddd');
1778
+ }
1779
+ if (this.configData.checkListDetails.scheduleRepeatedMonthSetup == 'day') {
1780
+ this.configData.checkListDetails.scheduleRepeatedMonthWeek = this.dayjs().format('DD');
1781
+ }
1782
+ }
1783
+ updateRepeatDay() {
1784
+ let value = this.configData.checkListDetails.scheduleRepeatedDay;
1785
+ this.configData.checkListDetails.scheduleRepeatedDay = value == "00" || value == '' ? '01' : value;
1786
+ }
1787
+ updateMonthValue() {
1788
+ let dateValue = '';
1789
+ if (this.monthDate == '1') {
1790
+ dateValue = 'First';
1791
+ }
1792
+ if (this.monthDate == '2') {
1793
+ dateValue = 'Second';
1794
+ }
1795
+ if (this.monthDate == '3') {
1796
+ dateValue = 'Third';
1797
+ }
1798
+ if (this.monthDate == '4') {
1799
+ dateValue = 'Fourth';
1800
+ }
1801
+ if (this.monthDate == '5') {
1802
+ dateValue = 'Last';
1803
+ }
1804
+ return ('on the ' + dateValue + ' ' + this.monthDay);
1805
+ }
1806
+ updateSpecificValue() {
1807
+ let value = [];
1808
+ this.submittedDates.forEach((item) => {
1809
+ item = (item == 1 || item == 31 || item == 21) ? item + ' st' : (item == 2 || item == 22) ? item + ' nd' : (item == 3 || item == 23) ? item + 'rd' : item + ' th';
1810
+ value.push(item);
1811
+ });
1812
+ return value;
1813
+ }
1814
+ removeDate(date) {
1815
+ this.selectedDateList = this.selectedDateList.filter((ele) => ele != date);
1816
+ }
1817
+ updateSceduleDate() {
1818
+ // console.log('this.configData?.checkListDetails?.configEndDate',this.configData?.checkListDetails?.configEndDate)
1819
+ if (this.configData?.checkListDetails?.configEndDate != '' && this.configData?.checkListDetails?.configEndDate != null) {
1820
+ return this.configData?.checkListDetails?.configEndDate;
1821
+ }
1822
+ else {
1823
+ return '';
1824
+ }
1825
+ }
1826
+ updateDateValue(event) {
1827
+ if (event.target.checked) {
1828
+ this.configData.checkListDetails.configStartDate = this.configData.checkListDetails?.configStartDate || this.dayjs().format('YYYY-MM-DD');
1829
+ this.configData.checkListDetails.configEndDate = '';
1830
+ }
1831
+ else {
1832
+ this.configData.checkListDetails.configStartDate = '';
1833
+ this.configData.checkListDetails.configEndDate = '';
1834
+ }
1835
+ this.selectedEndDate = '';
1836
+ this.minDate = '';
1837
+ this.selectedStartDate = { startDate: this.dayjs(this.configData.checkListDetails?.configStartDate).format('DD-MM-YYYY'), endDate: this.dayjs(this.configData.checkListDetails?.configStartDate).format('DD-MM-YYYY') };
1838
+ this.minStartDate = this.dayjs(this.configData.checkListDetails?.configStartDate).format();
1839
+ }
1840
+ updateSpecific(event) {
1841
+ if (!event.target.checked) {
1842
+ this.selectedDateList = [];
1843
+ }
1844
+ }
1845
+ onDatepickerRefresh() {
1846
+ this.configData.checkListDetails.configEndDate = '';
1847
+ this.selectedEndDate = '';
1848
+ this.minEndDate = '';
1849
+ }
1850
+ selectSpecificDate(event) {
1851
+ this.showDropDown = false;
1852
+ this.selectedDateList = event;
1853
+ }
1854
+ clickOutside(event) {
1855
+ const clickedInside = event.target.closest(".dropdown-close");
1856
+ console.log(clickedInside);
1857
+ if (!clickedInside) {
1858
+ this.closeDropDown();
1859
+ }
1860
+ }
1861
+ getClientUser() {
1862
+ this.SopService.getClientUser(this.clientId).pipe(takeUntil(this.detach)).subscribe((res) => {
1863
+ if (res && res.code == 200) {
1864
+ this.alertUsers = res.data.map((item) => { return { name: item.userName, value: item.email }; });
1865
+ }
1866
+ else {
1867
+ this.alertUsers = [];
1868
+ }
1869
+ });
1870
+ }
1871
+ getZoneList() {
1872
+ this.SopService.getZoneList(this.clientId).pipe(takeUntil(this.detach)).subscribe((res) => {
1873
+ if (res && res.code == 200) {
1874
+ this.zoneList = res.data.map((item) => { return { name: item.zone, value: item.zone }; });
1875
+ }
1876
+ else {
1877
+ this.zoneList = [];
1878
+ }
1879
+ });
1880
+ }
1881
+ updateAlert(event) {
1882
+ this.configData.checkListDetails.alert.alertsTo = event;
1883
+ }
1884
+ updateZone(event) {
1885
+ this.configData.checkListDetails.detectionArea = event;
1886
+ }
1887
+ updateLoop() {
1888
+ let len = this.timeLoop.length;
1889
+ this.timeLoop.push(len);
1890
+ this.configData.checkListDetails.remainder.push(this.minutes[len].toString());
1891
+ }
1892
+ updateRemainder(event, index) {
1893
+ this.configData.checkListDetails.remainder[index] = event.target.value;
1894
+ }
1895
+ getSelected(time, index) {
1896
+ if (this.configData.checkListDetails?.remainder?.length >= (index + 1) && time == this.configData.checkListDetails.remainder[index]) {
1897
+ return true;
1898
+ }
1899
+ else {
1900
+ if (time == 30) {
1901
+ return true;
1902
+ }
1903
+ }
1904
+ }
1905
+ updateApprover(event) {
1906
+ this.configData.checkListDetails.approver = event;
1907
+ }
1908
+ updateConfigRemainder(event) {
1909
+ if (!event.target.checked) {
1910
+ this.configData.checkListDetails.remainder = [];
1911
+ }
1912
+ else {
1913
+ this.configData.checkListDetails.remainder = this.minutes[0];
1914
+ }
1915
+ }
1916
+ updateConfigApprover(event) {
1917
+ if (!event.target.checked) {
1918
+ this.configData.checkListDetails.approver = [];
1919
+ }
1920
+ }
1921
+ updateTimeLoop(index) {
1922
+ let data = JSON.parse(JSON.stringify(this.configData.checkListDetails.remainder));
1923
+ data.splice(index, 1);
1924
+ return this.minutes.filter((item) => !data.includes(item.toString()));
1925
+ }
1926
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChecklistConfigureComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.NgbModal }, { token: i3.TraxService }, { token: i4.ToastService }, { token: i5.GlobalStateService }, { token: i5.PageInfoService }], target: i0.ɵɵFactoryTarget.Component });
1927
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ChecklistConfigureComponent, selector: "lib-checklist-configure", host: { listeners: { "document:click": "clickOutside($event)" } }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["file"], descendants: true }, { propertyName: "fileInput1", first: true, predicate: ["file1"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"loading\" class=\"card 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<div *ngIf=\"!loading\">\r\n <div class=\"card\">\r\n <ng-container>\r\n <div class=\"card-header border-0 pt-3 pb-3\">\r\n <h3 class=\"card-title align-items-start flex-column w-800px\">\r\n <div class=\"editablecontent mb-4 w-100\"><input type=\"text\" class=\"checklist plain-input\"\r\n placeholder=\"Enter Checklist Name\" [value]=\"configData?.checkListDetails?.checkListName\" readonly></div>\r\n <div class=\"editablecontent w-100\"><input type=\"text\" class=\"checklistDescription plain-input\"\r\n #checklistDescription placeholder=\"Enter Checklist Description\"\r\n [value]=\"configData?.checkListDetails?.checkListDescription\" readonly></div>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\"\r\n class=\"btn btn-primary mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"\r\n (click)=\"publish()\"><span class=\"ms-2\">Publish</span> </button>\r\n \r\n <button type=\"button\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"\r\n (click)=\"savedraft()\"><span class=\"ms-2\">Save as Draft</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"row checkconfigcont mt-2\" *ngIf=\"configData\">\r\n <div class=\"col-xl-3 leftcard\">\r\n <div class=\"card px-7 py-7\">\r\n <div class=\"section-leftheading1\">{{configData?.checkListDetails?.checkListName}}</div>\r\n <div *ngIf=\"obj.checkListId\" class=\"section-left\">\r\n <div *ngFor=\"let section of sections; let i=index;\">\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\">\r\n <div class=\"fs-4 fw-bold section\">{{section.name}}</div>\r\n <hr class=\"mx-2\">\r\n <svg (click)=\"accordian(i)\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"35\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"show===i\" class=\"question-left\">\r\n <div cdkDropList [cdkDropListData]=\"section.questions\">\r\n \r\n <div *ngFor=\"let question of section.questions;let j=index;\" class=\"my-2 q-btn\" cdkDrag>\r\n \r\n <div class=\"editablecontent\">\r\n {{question.qname}}\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <h3 class=\"card-title align-items-start flex-column \">\r\n <div class=\"card-label section-leftheading1 mt-6\">Schedule</div>\r\n \r\n <div *ngIf=\"type === 'mobileusagedetection' || type === 'storeopenandclose'\" class=\"mt-4 mx-2 sub\"><span\r\n class=\" mx-4\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <path\r\n d=\"M12 6V12L16 14M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"mt-2\">{{configData.checkListDetails.scheduleStartTime}} to\r\n {{configData.checkListDetails.scheduleEndTime}}</span>\r\n </div>\r\n \r\n \r\n \r\n <div *ngIf=\"['custom'].includes(type)\">\r\n <div class=\"mt-4 mx-2 sub\"><span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"23\" height=\"23\"\r\n viewBox=\"0 0 23 23\" fill=\"none\">\r\n <path\r\n d=\"M8.41448 4.52303C8.69518 4.80371 8.69518 5.2588 8.41448 5.53948L5.53948 8.41448C5.2588 8.69518 4.80371 8.69518 4.52303 8.41448L3.08553 6.97698C2.80482 6.6963 2.80482 6.24121 3.08553 5.96053C3.36621 5.67982 3.8213 5.67982 4.10198 5.96053L5.03125 6.88978L7.39803 4.52303C7.67871 4.24232 8.1338 4.24232 8.41448 4.52303Z\"\r\n fill=\"#667085\" />\r\n <path\r\n d=\"M8.41448 11.7105C8.69518 11.9912 8.69518 12.4463 8.41448 12.727L5.53948 15.602C5.2588 15.8826 4.80371 15.8826 4.52303 15.602L3.08553 14.1645C2.80482 13.8838 2.80482 13.4287 3.08553 13.1479C3.36621 12.8673 3.8213 12.8673 4.10198 13.1479L5.03125 14.0773L7.39803 11.7105C7.67871 11.4299 8.1338 11.4299 8.41448 11.7105Z\"\r\n fill=\"#667085\" />\r\n <path\r\n d=\"M10.0625 6.46875C10.0625 6.0718 10.3844 5.75 10.7812 5.75H15.0938C15.4906 5.75 15.8125 6.0718 15.8125 6.46875C15.8125 6.8657 15.4906 7.1875 15.0938 7.1875H10.7812C10.3844 7.1875 10.0625 6.8657 10.0625 6.46875Z\"\r\n fill=\"#667085\" />\r\n <path\r\n d=\"M3.59375 0C1.60898 0 0 1.60898 0 3.59375V16.5312C0 18.516 1.60898 20.125 3.59375 20.125H9.48708C9.25429 19.6696 9.06436 19.1886 8.92261 18.6875H3.59375C2.40288 18.6875 1.4375 17.7221 1.4375 16.5312V3.59375C1.4375 2.40288 2.40288 1.4375 3.59375 1.4375H16.5312C17.7221 1.4375 18.6875 2.40288 18.6875 3.59375V8.92261C19.1886 9.06436 19.6696 9.25429 20.125 9.48708V3.59375C20.125 1.60898 18.516 0 16.5312 0H3.59375Z\"\r\n fill=\"#667085\" />\r\n <path\r\n d=\"M16.5313 23C20.1039 23 23 20.1039 23 16.5313C23 12.9586 20.1039 10.0625 16.5313 10.0625C12.9586 10.0625 10.0625 12.9586 10.0625 16.5313C10.0625 20.1039 12.9586 23 16.5313 23ZM16.5313 12.9375C16.9281 12.9375 17.25 13.2594 17.25 13.6563V15.8125H19.4063C19.8031 15.8125 20.125 16.1344 20.125 16.5313C20.125 16.9281 19.8031 17.25 19.4063 17.25H17.25V19.4063C17.25 19.8031 16.9281 20.125 16.5313 20.125C16.1344 20.125 15.8125 19.8031 15.8125 19.4063V17.25H13.6563C13.2594 17.25 12.9375 16.9281 12.9375 16.5313C12.9375 16.1344 13.2594 15.8125 13.6563 15.8125H15.8125V13.6563C15.8125 13.2594 16.1344 12.9375 16.5313 12.9375Z\"\r\n fill=\"#667085\" />\r\n </svg>\r\n </span><span class=\"mt-2 ms-2\">{{configData?.checkListDetails?.schedule === 'onetime' ?\r\n 'One-time' : (configData?.checkListDetails?.schedule | titlecase)}}\r\n </span></div>\r\n \r\n <div class=\"mt-4 mx-2 sub\"><span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12 6V12L16 14M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"mt-2 ms-2\">{{configData?.checkListDetails?.scheduleStartTime ?\r\n configData?.checkListDetails?.scheduleStartTime.substr(-8) : configData?.openTime}} to\r\n {{configData?.checkListDetails?.scheduleEndTime ?\r\n configData?.checkListDetails?.scheduleEndTime.substr(-8) : configData?.closeTime}}</span>\r\n </div>\r\n \r\n <div class=\"mt-4 mx-2 sub\" *ngIf=\"showRangeValue\"><span><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M16 2V6M8 2V6M3 10H21M5 4H19C20.1046 4 21 4.89543 21 6V20C21 21.1046 20.1046 22 19 22H5C3.89543 22 3 21.1046 3 20V6C3 4.89543 3.89543 4 5 4Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span><span\r\n class=\"mt-2 ms-2\"><span>{{configData?.checkListDetails?.configStartDate}}</span><span\r\n *ngIf=\"configData?.checkListDetails?.configEndDate !== '' && configData?.checkListDetails?.configEndDate !== null\">\r\n to {{configData?.checkListDetails?.configEndDate}}</span></span></div>\r\n \r\n <div class=\"col-lg-10 editques\" *ngIf=\"['custom'].includes(type) && !disabledQuestion\">\r\n <a (click)=\"saveandredirect(obj.checkListId)\"\r\n class=\"btn-outline btn-outline-dashed btn btn-light upload\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M14.6666 2.5009C14.8855 2.28203 15.1453 2.10842 15.4313 1.98996C15.7173 1.87151 16.0238 1.81055 16.3333 1.81055C16.6428 1.81055 16.9493 1.87151 17.2353 1.98996C17.5213 2.10842 17.7811 2.28203 18 2.5009C18.2188 2.71977 18.3924 2.97961 18.5109 3.26558C18.6294 3.55154 18.6903 3.85804 18.6903 4.16757C18.6903 4.4771 18.6294 4.7836 18.5109 5.06956C18.3924 5.35553 18.2188 5.61537 18 5.83424L6.74996 17.0842L2.16663 18.3342L3.41663 13.7509L14.6666 2.5009Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg><span class=\"uploadtext\">Edit Questions</span></a>\r\n \r\n </div>\r\n </div>\r\n </h3>\r\n <div *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\">\r\n <div class=\"card-label section-leftheading1\">Alerts</div>\r\n <div class=\"mt-6 mx-4 sub\">Email</div>\r\n </div>\r\n <div *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\" class=\"mx-4 mt-4 sub\">if usage exceeds\r\n {{configData?.checkListDetails?.alert?.usageExceeds}}\r\n events\r\n </div>\r\n <div *ngIf=\"type === 'storeopenandclose'\">\r\n <div class=\"card-label section-leftheading1\">Alerts</div>\r\n <div class=\"mt-4 mx-4 sub\">Send email everyday to</div>\r\n </div>\r\n <h3 *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\" class=\"card-title align-items-start flex-column \">\r\n <div class=\"card-label section-leftheading1 mt-4\">Detection Areas</div>\r\n \r\n <div class=\"mt-4 mx-2 sub\"><span *ngFor=\"let zone of configData?.checkListDetails?.detectionArea\"\r\n class=\"badge mx-2 mt-4 badge-light checklistlabel fs-base\">\r\n <i class=\"ki-duotone ki-arrow-up checklisttext\"></i>\r\n {{zone}}\r\n </span></div>\r\n </h3>\r\n \r\n \r\n </div>\r\n </div>\r\n <div class=\"col-xl-9\">\r\n <div class=\"card card-flush h-xl-100\">\r\n <div class=\"card-body px-7\">\r\n <div class=\"schedule\">\r\n <div>\r\n <h2 class=\"section-leftheading\">Schedule<span\r\n class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1874_66195)\">\r\n <path\r\n d=\"M8.00016 10.6673V8.00065M8.00016 5.33398H8.00683M14.6668 8.00065C14.6668 11.6826 11.6821 14.6673 8.00016 14.6673C4.31826 14.6673 1.3335 11.6826 1.3335 8.00065C1.3335 4.31875 4.31826 1.33398 8.00016 1.33398C11.6821 1.33398 14.6668 4.31875 14.6668 8.00065Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1874_66195\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></h2>\r\n <div class=\"row\" *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\">\r\n <div class=\"col-md-4 d-flex\">\r\n <span class=\"sub mt-2 mx-4\">From</span>&nbsp;&nbsp;\r\n <input class=\"form-control form-control-solid flatpickr-input w-200px mt-2\"\r\n (change)=\"updateTime('start')\" [(ngModel)]=\"startTime\"\r\n placeholder=\"Set store open time\" name=\"due_date\" type=\"time\">\r\n </div>\r\n <div class=\"col-md-4 d-flex\">\r\n <span class=\"sub mt-3 mx-4\">To</span>&nbsp;&nbsp;\r\n <input class=\"form-control form-control-solid flatpickr-input w-200px mt-2\"\r\n (change)=\"updateTime('end')\" [(ngModel)]=\"endTime\" placeholder=\"Set store open time\"\r\n name=\"due_date\" type=\"time\">\r\n </div>\r\n <div class=\"separator mt-8\"></div>\r\n \r\n </div>\r\n <div *ngIf=\"['custom'].includes(type)\">\r\n <div class=\"col-md-12 mt-6 mb-1\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2 mt-3\">\r\n <span class=\"mx-6 sub\">For</span>\r\n </div>\r\n <div class=\"col-md-3 dropdown\">\r\n <select\r\n class=\"form-select form-select-lg select2-hidden-accessible ng-pristine ng-valid ng-touched\"\r\n [(ngModel)]=\"configData.checkListDetails.schedule\"\r\n (change)=\"updateSchedule($event)\">\r\n <option value=\"onetime\">Does Not Repeat</option>\r\n <option value=\"weekday\"> Every Weekday (Mon - Fri)</option>\r\n <option value=\"daily\">Daily</option>\r\n <option value=\"weekly\">Weekly</option>\r\n <option value=\"monthly\">Monthly</option>\r\n <option value=\"range\">Custom Range</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-2 d-flex\">\r\n <span class=\"sub mt-3 mx-2\">At</span>&nbsp;&nbsp;\r\n <input class=\"form-control form-control-solid flatpickr-input w-200px margin\"\r\n (change)=\"updateTime('start')\" [(ngModel)]=\"startTime\"\r\n placeholder=\"Set store open time\" name=\"due_date\" type=\"time\">\r\n </div>\r\n <div class=\"col-md-2 d-flex\">\r\n <span class=\"sub mt-3 ms-5\">Ends</span>&nbsp;&nbsp;\r\n <input class=\"form-control form-control-solid flatpickr-input w-200px margin\"\r\n (change)=\"updateTime('end')\" [(ngModel)]=\"endTime\"\r\n placeholder=\"Set store open time\" name=\"due_date\" type=\"time\">\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"justify-content-between mt-4\">\r\n <div class=\"config-heading\">Checklist Configuration</div>\r\n <div *ngIf=\"configData.checkListDetails.schedule === 'onetime'\">\r\n <div class=\"row col-lg-12 d-flex mt-5\">\r\n <div class=\"col-md-2 d-flex\">\r\n <span class=\"sub mt-3\">Once On</span>\r\n </div>\r\n <div class=\"col-md-3 px-4 pe-3\" id=\"dateclass\" data-kt-daterangepicker=\"true\"\r\n data-kt-daterangepicker-opens=\"left\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" type=\"text\" matInput ngxDaterangepickerMd [singleDatePicker]=\"true\" [minDate]=\"minDate\"\r\n [drops]=\"'down'\" [opens]=\"'right'\" [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" \r\n [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDates\" [autoApply]=\"false\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"dateRangeStart($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"configData.checkListDetails.schedule !== 'onetime'\">\r\n <div class=\"form-check form-switch mt-6\">\r\n <input type=\"checkbox\" id=\"rangeDate\"\r\n class=\"form-check-input ng-valid ng-dirty ng-touched\"\r\n [(ngModel)]=\"showRangeValue\"\r\n [disabled]=\"configData.checkListDetails?.schedule === 'range'\"\r\n (change)=\"updateDateValue($event)\">\r\n <label for=\"rangeDate\" class=\"form-check-label checklisttext ms-2\">Set defined\r\n date range</label>\r\n </div>\r\n <div class=\"row col-lg-12 d-flex mt-5\" *ngIf=\"showRangeValue\">\r\n <div class=\"col-md-2 d-flex\">\r\n <span class=\"sub mt-3\">Starts from</span>\r\n </div>\r\n <div class=\"col-md-3\" [ngClass]=\"configData.checkListDetails.schedule === 'range' ? 'ps-10' : 'px-4 pe-3'\" id=\"dateclass\" data-kt-daterangepicker=\"true\" data-kt-daterangepicker-opens=\"left\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" type=\"text\" matInput ngxDaterangepickerMd\r\n [singleDatePicker]=\"true\" [minDate]=\"minStartDate\" [drops]=\"'down'\" [opens]=\"'right'\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedStartDate\" [autoApply]=\"false\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"dateRangeStart($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 mt-8 ng-star-inserted\">\r\n <div class=\"row\" *ngIf=\"configData.checkListDetails.schedule !== 'range'\">\r\n <div class=\"col-md-2 mt-2\">\r\n <span class=\"sub\">Repeats every</span>\r\n </div>\r\n <div class=\"col-lg-6 d-flex\">\r\n <div class=\"fv-row mb-5 fv-plugins-icon-container d-flex flex-column\">\r\n <input type=\"text\" autocomplete=\"off\" required=\"\"\r\n class=\"form-control form-control-solid w-100px ng-pristine ng-invalid ng-touched\"\r\n [(ngModel)]=\"configData.checkListDetails.scheduleRepeatedDay\"\r\n maxlength=\"2\" min=\"1\" (change)=\"updateRepeatDay()\">\r\n </div>\r\n <div\r\n class=\"fv-row mb-5 mx-2 fv-plugins-icon-container d-flex flex-column\">\r\n <input type=\"text\" autocomplete=\"off\"\r\n class=\"form-control form-control-solid w-100px ng-pristine ng-invalid ng-touched\"\r\n [(ngModel)]=\"repeatType\" readonly>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"configData.checkListDetails.schedule === 'monthly'\">\r\n <div class=\"col-md-12 ng-star-inserted\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n \r\n </div>\r\n <div class=\"col-lg-2 mt-3\">\r\n <div class=\"form-check fontSize\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"day\"\r\n [checked]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup === 'day'\" (change)=\"updateMonth('day')\">\r\n <label class=\"cursor-pointer\" for=\"inlineRadio1\">On Day</label>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 d-flex\">\r\n <div\r\n class=\"fv-row mb-5 fv-plugins-icon-container d-flex flex-column\">\r\n <input type=\"text\" autocomplete=\"off\"\r\n class=\"form-control form-control-solid w-100px\"\r\n [ngClass]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup !== 'day' ? 'disabled' : ''\"\r\n [(ngModel)]=\"configData.checkListDetails.scheduleRepeatedMonthWeek\"\r\n (change)=\"updateValue($event)\"\r\n [disabled]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup !== 'day'\"\r\n maxLength=\"2\" (input)=\"validate($event)\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 ng-star-inserted\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n \r\n </div>\r\n <div class=\"col-lg-2 mt-3\">\r\n <div class=\"form-check fontSize\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"day\"\r\n [checked]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup === 'date'\" (change)=\"updateMonth('date')\">\r\n <label class=\"cursor-pointer\" for=\"inlineRadio1\">On the</label>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 d-flex\">\r\n <div\r\n class=\"fv-row mb-5 fv-plugins-icon-container d-flex flex-column\">\r\n <select\r\n class=\"form-select form-select-lg select2-hidden-accessible ng-pristine ng-valid ng-touched\"\r\n [(ngModel)]=\"monthDate\"\r\n [disabled]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup !== 'date'\">\r\n <option value=\"1\"> First </option>\r\n <option value=\"2\"> Second </option>\r\n <option value=\"3\"> Third</option>\r\n <option value=\"4\"> Fourth</option>\r\n <option value=\"5\"> Last</option>\r\n </select>\r\n </div>\r\n <div\r\n class=\"fv-row mb-5 mx-2 fv-plugins-icon-container d-flex flex-column\">\r\n <select\r\n class=\"form-select form-select-lg select2-hidden-accessible ng-pristine ng-valid ng-touched\"\r\n [(ngModel)]=\"monthDay\"\r\n [disabled]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup !== 'date'\">\r\n <option value=\"Sunday\"> Sunday </option>\r\n <option value=\"Monday\"> Monday </option>\r\n <option value=\"Tuesday\"> Tuesday</option>\r\n <option value=\"Wednesday\"> Wednesday</option>\r\n <option value=\"Thursday\"> Thursday</option>\r\n <option value=\"Friday\">Friday</option>\r\n <option value=\"Saturday\"> Saturday</option>\r\n </select>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div class=\"col-md-12 ng-star-inserted\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n </div>\r\n <div class=\"col-lg-2 mt-3\">\r\n <div class=\"form-check fontSize\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"day\"\r\n [checked]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup === 'specific'\"\r\n (change)=\"updateMonth('specific')\">\r\n <label class=\"cursor-pointer\" for=\"inlineRadio1\">On Specific Dates</label>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 d-flex\">\r\n <div class=\"position-relative\"\r\n (clickOutside)=\"closeDropDown()\">\r\n <div class=\"dropdown-close\">\r\n <div class=\"w-100\">\r\n <div\r\n class=\"d-flex align-items-center position-relative w-100\">\r\n <span\r\n class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input type=\"text\"\r\n class=\"form-control dropdown-input ps-14\"\r\n (click)=\"toggleDropDown()\" readonly\r\n placeholder=\"Select Dates\"\r\n [disabled]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup !== 'specific'\" />\r\n </div>\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu w-100\"\r\n *ngIf=\"showDropDown\">\r\n <div class=\"calendar-container\">\r\n <div class=\"content\">\r\n <div class=\"dates\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"row d-flex\">\r\n <div class=\"col-2 mb-2\"\r\n *ngFor=\"let date of dates\">\r\n <li class=\"nav-item me-1\"\r\n role=\"presentation\"\r\n (click)=\"selectDate(date)\">\r\n <a class=\"nav-link btn weekstyledate d-flex flex-column flex-center rounded-pill min-w-35px py-2 px-3 \"\r\n [ngClass]=\"selectedDate.includes(date) ? 'active btn-active-primary' : ''\"\r\n data-bs-toggle=\"tab\"\r\n aria-selected=\"false\"\r\n tabindex=\"-1\"\r\n role=\"tab\">\r\n <span\r\n class=\"pillstyle\">{{\r\n date }}</span>\r\n </a>\r\n </li>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button ms-2\"\r\n (click)=\"submitDate();showDropDown= false;\">\r\n <button\r\n class=\"btn btn-primary btn-block w-100\">\r\n Submit\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n </div>\r\n <div class=\"col-lg-6 py-3 badge-specificdate\">\r\n <div class=\"d-flex mt-3 flex-wrap\">\r\n <span *ngFor=\"let date of submittedDates\"\r\n class=\"badge badge-pill badge-light checklisttext me-4\">\r\n {{ getDateWithSuffix(date) }}\r\n <span (click)=\"removeBadge(date)\" class=\"cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\"\r\n height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 ng-star-inserted\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div\r\n *ngIf=\"['weekday','weekly'].includes(configData.checkListDetails.schedule)\">\r\n <ul class=\"nav nav-pills d-flex flex-nowrap mb-3\" role=\"tablist\">\r\n \r\n <ng-container\r\n *ngFor=\"let day of ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\">\r\n <li class=\"nav-item me-1\" role=\"presentation\"\r\n (click)=\"(configData.checkListDetails.schedule === 'weekly' || (configData.checkListDetails.schedule === 'weekday' && !['Sunday','Saturday'].includes(day))) ? setDay(day) : ''\">\r\n <a class=\"nav-link btn weekstyle d-flex flex-column flex-center rounded-pill min-w-45px me-2 py-4 px-3\"\r\n [ngClass]=\"(configData.checkListDetails.schedule === 'weekday' && ['Sunday','Saturday'].includes(day)) ? 'cursor-default' : selectedDays.includes(day) ? 'selectDay' : ''\"\r\n data-bs-toggle=\"tab\" aria-selected=\"false\" tabindex=\"-1\"\r\n role=\"tab\">\r\n <span class=\"pillstyle\">{{ day[0] }}</span>\r\n </a>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"configData.checkListDetails.schedule === 'range'\">\r\n <div class=\"col-md-12 ng-star-inserted\">\r\n <div class=\"row\">\r\n \r\n <div class=\"col-lg-6 d-flex\">\r\n <div class=\"form-check form-switch mt-3\">\r\n <input type=\"checkbox\" id=\"flexSwitchCheckDefault\"\r\n class=\"form-check-input ng-valid ng-dirty ng-touched\"\r\n [(ngModel)]=\"specific\" (change)=\"updateSpecific($event)\">\r\n <label for=\"flexSwitchCheckDefault\"\r\n class=\"form-check-label checklisttext ms-2\">On Specific\r\n Dates</label>\r\n </div>\r\n <div class=\"px-4 pe-3 position-relative\" (clickOutside)=\"closeDropDown()\">\r\n <div class=\"dropdown-close\">\r\n <div class=\"w-100\">\r\n <div class=\"d-flex align-items-center position-relative w-300px\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control dropdown-input ps-14\" (click)=\"toggleDropDown()\" readonly\r\n placeholder=\"Select Dates\"\r\n [disabled]=\"!specific\"/>\r\n </div>\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu w-100\" *ngIf=\"showDropDown\">\r\n <lib-multi-date-datepicker (selectedDates)=\"selectSpecificDate($event)\" [predefinedDates]=\"selectedDateList\" [startDate]=\"configData.checkListDetails.configStartDate\" [endDate]=\"configData.checkListDetails.configEndDate\"></lib-multi-date-datepicker>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n </div>\r\n <div class=\"col-lg-6 py-3 badge-specificdate\">\r\n <div class=\"d-flex mt-3 ms-5 flex-wrap\">\r\n <span *ngFor=\"let date of selectedDateList\"\r\n class=\"badge badge-pill badge-light checklisttext me-4\">\r\n {{ date }}\r\n <span (click)=\"removeDate(date)\" class=\"cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\"\r\n height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 ng-star-inserted\"\r\n [hidden]=\"!showRangeValue || configData.checkListDetails.schedule === 'onetime'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\" [ngClass]=\"configData.checkListDetails.schedule === 'range' ? 'mt-4' : 'mt-2'\">\r\n <span class=\"sub\">Ends On</span>\r\n </div>\r\n <div class=\"col-md-3\" id=\"dateclass\" [ngClass]=\"configData.checkListDetails.schedule === 'range' ? 'ps-9' : 'px-4 pe-3'\" data-kt-daterangepicker=\"true\" data-kt-daterangepicker-opens=\"left\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" type=\"text\" matInput ngxDaterangepickerMd\r\n [singleDatePicker]=\"true\" [minDate]=\"minEndDate\" [drops]=\"'down'\" [opens]=\"'right'\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedEndDate\" [autoApply]=\"false\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"dateRangeEnd($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n <div class=\"mt-5 remove cursor-pointer ms-4\" (click)=\"onDatepickerRefresh()\"\r\n *ngIf=\"configData.checkListDetails.configEndDate !== '' && configData.checkListDetails.configEndDate !== null && configData.checkListDetails.schedule !=='range'\">\r\n Remove\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"my-3 user\" *ngIf=\"configData.checkListDetails?.schedule === 'onetime'\">Occurs on\r\n the day {{configData.checkListDetails?.scheduleDate | date:'dd MMM YYYY'}}</div>\r\n <div class=\"my-3 user\"\r\n *ngIf=\"['weekday','weekly'].includes(configData.checkListDetails?.schedule)\">Occurs\r\n every {{(configData.checkListDetails?.scheduleRepeatedDay?.length &&\r\n configData.checkListDetails?.scheduleRepeatedDay !=='01') ?\r\n configData.checkListDetails?.scheduleRepeatedDay : ''}} week<span\r\n *ngIf=\"configData.checkListDetails?.scheduleRepeatedDay !== 01\">s</span> on\r\n {{selectedDays.toString()}}<span *ngIf=\"showRangeValue\"> starting\r\n {{configData.checkListDetails?.configStartDate | date:'dd MMM YYYY'}} <span *ngIf=\"configData.checkListDetails?.configEndDate\">until {{configData.checkListDetails?.configEndDate | date:'dd MMM YYYY'}}</span></span></div>\r\n <div class=\"my-3 user\" *ngIf=\"configData.checkListDetails?.schedule === 'daily'\">Occurs every\r\n {{(configData.checkListDetails?.scheduleRepeatedDay?.length &&\r\n configData.checkListDetails?.scheduleRepeatedDay !== '01') ?\r\n configData.checkListDetails?.scheduleRepeatedDay : ''}} day<span\r\n *ngIf=\"configData.checkListDetails?.scheduleRepeatedDay !== 01\">s</span><span\r\n *ngIf=\"showRangeValue\"> starting {{configData.checkListDetails?.configStartDate |\r\n date:'dd MMM YYYY'}} <span *ngIf=\"configData.checkListDetails?.configEndDate \">until {{configData.checkListDetails?.configEndDate | date:'dd MMM YYYY'}}</span></span></div>\r\n <div class=\"my-3 user\" *ngIf=\"configData.checkListDetails?.schedule === 'monthly'\">Occurs\r\n every\r\n {{(configData.checkListDetails?.scheduleRepeatedDay?.length &&\r\n configData.checkListDetails?.scheduleRepeatedDay !== '01') ?\r\n configData.checkListDetails?.scheduleRepeatedDay : ''}} month<span *ngIf=\"configData.checkListDetails?.scheduleRepeatedDay !== 01\">s </span>{{(configData.checkListDetails?.scheduleRepeatedMonthSetup === 'day') ? ('on day ' + configData.checkListDetails.scheduleRepeatedMonthWeek) : configData.checkListDetails?.scheduleRepeatedMonthSetup === 'date' ? updateMonthValue():\r\n updateSpecificValue()}}<span *ngIf=\"showRangeValue\"> starting {{configData.checkListDetails?.configStartDate | date:'dd MMM YYYY'}} <span\r\n *ngIf=\"configData.checkListDetails?.configEndDate\">until {{configData.checkListDetails?.configEndDate | date:'dd MMM YYYY'}}</span></span></div>\r\n <div class=\"my-3 user\" *ngIf=\"configData.checkListDetails?.schedule === 'range'\">Occurs every\r\n {{configData.checkListDetails?.scheduleWeekDays?.toString()}} <span\r\n *ngIf=\"showRangeValue\"> starting {{configData.checkListDetails?.configStartDate |\r\n date:'dd MMM YYYY'}} <span *ngIf=\"configData.checkListDetails?.configEndDate\">until {{configData.checkListDetails?.configEndDate | date:'dd MMM YYYY'}}</span></span></div>\r\n \r\n \r\n </div>\r\n \r\n <div class=\"section-left\" *ngIf=\"['custom'].includes(type)\">\r\n <div>\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\">\r\n <div class=\"config-heading\">Response Configuration</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" (click)=\"configaccordian()\"\r\n [ngClass]=\"{'rotate' : showconfig}\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"35\" height=\"35\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"showconfig\">\r\n <div cdkDropList>\r\n <div cdkDrag>\r\n <div class=\"col-lg-12\"\r\n [ngClass]=\"['onetime','daily'].includes(configData?.checkListDetails.schedule) || (configData?.checkListDetails.schedule === 'monthly' && configData?.checkListDetails.scheduleRepeatedMonthSetup !=='specific') ? 'bg-color-disabled' : ''\">\r\n <div\r\n class=\"fv-row checklistturnoff mt-4 fv-plugins-icon-containe\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\"\r\n [checked]=\"configData?.checkListDetails?.allowOnce ? true : false\"\r\n [(ngModel)]=\"configData.checkListDetails.allowOnce\"\r\n [ngModelOptions]=\"{standalone: true}\" type=\"checkbox\"\r\n id=\"oneTime\"\r\n [disabled]=\"['onetime','daily'].includes(configData?.checkListDetails.schedule) || (configData?.checkListDetails.schedule === 'monthly' && configData?.checkListDetails.scheduleRepeatedMonthSetup !=='specific')\">\r\n <label class=\"form-check-label sub ms-2\" for=\"oneTime\">Only one\r\n time\r\n </label><br>\r\n <label class=\"form-check-label subtext ms-2\" for=\"oneTime\">By\r\n enabling this, the response can be captured only once for\r\n this checklist <span *ngIf=\"showRangeValue\">from\r\n {{configData.checkListDetails.configStartDate}} <span\r\n *ngIf=\"configData.checkListDetails.configEndDate\">to\r\n {{configData.checkListDetails.configEndDate}}.</span></span></label>\r\n </div>\r\n </div>\r\n <div class=\"fv-row checklistturnoff mt-4 fv-plugins-icon-containe\">\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\"\r\n [checked]=\" configData?.checkListDetails?.allowedOverTime ? true : false\"\r\n [(ngModel)]=\"configData.checkListDetails.allowedOverTime\"\r\n [ngModelOptions]=\"{standalone: true}\" type=\"checkbox\"\r\n id=\"fillResponse\">\r\n <label class=\"form-check-label sub ms-2\"\r\n for=\"fillResponse\">Fill response after configure\r\n time.</label><br>\r\n <label class=\"form-check-label subtext ms-2\"\r\n for=\"fillResponse\">By enabling, the user can fill the\r\n checklist even after the above configured\r\n end-time.</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"fv-row checklistturnoff mt-4 fv-plugins-icon-containe\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\"\r\n [checked]=\"configData?.checkListDetails?.allowedStoreLocation ? true : false\"\r\n [(ngModel)]=\"configData.checkListDetails.allowedStoreLocation\"\r\n [ngModelOptions]=\"{standalone: true}\" type=\"checkbox\"\r\n id=\"geoFencing\">\r\n <label class=\"form-check-label sub ms-2\" for=\"geoFencing\">Geo\r\n fencing\r\n </label><br>\r\n <label class=\"form-check-label subtext ms-2\" for=\"geoFencing\">By\r\n enabling, the checklist can be filled by the user only when\r\n inside the store.</label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"fv-row checklistturnoff mt-4 fv-plugins-icon-containe\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\"\r\n [checked]=\"configData?.checkListDetails?.allowedMultiSubmit ? true : false\"\r\n [(ngModel)]=\"configData.checkListDetails.allowedMultiSubmit\"\r\n [ngModelOptions]=\"{standalone: true}\" type=\"checkbox\"\r\n id=\"allowedMultiSubmitSwitch\">\r\n <label class=\"form-check-label sub ms-2\"\r\n for=\"allowedMultiSubmitSwitch\">Allow multiple\r\n responses</label><br>\r\n <label class=\"form-check-label subtext ms-2\"\r\n for=\"allowedMultiSubmitSwitch\">By enabling, the checklist\r\n can be filled multiple times in a day</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"separator mt-8\"></div>\r\n </div>\r\n\r\n <div class=\"section-left\" *ngIf=\"['custom'].includes(type)\">\r\n <div>\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\">\r\n <div class=\"config-heading\">Advance Configuration</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" (click)=\"advanceaccordian()\" [ngClass]=\"{'rotate' : showadvance}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"35\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"showadvance\">\r\n <div cdkDropList>\r\n <div cdkDrag>\r\n <div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"d-flex\">\r\n <div class=\"mt-2 form-check-label sub\">\r\n <span>Approver</span>\r\n </div>\r\n <div class=\"form-check form-switch ms-5\">\r\n <input class=\"form-check-input mt-3\" [checked]=\"configData?.checkListDetails?.approver?.length ? true : false\" [(ngModel)]=\"approve\"\r\n type=\"checkbox\" id=\"oneTime\" (change)=\"updateConfigApprover($event)\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-check-label subtext\">\r\n By enabling, the users will be able to approve the checklist\r\n </div>\r\n <div class=\"col-lg-12 mt-3\" *ngIf=\"approve\">\r\n <div class=\"d-flex w-100\">\r\n <div class=\"d-flex align-items-center my-5 w-20\">\r\n <div class=\"flex-grow-2\">\r\n <div class=\"sub\">To be approved by </div>\r\n </div>\r\n </div>\r\n <div class=\"w-80\">\r\n <lib-chip-dropdown [data]=\"alertUsers\"\r\n [selectedData]=\"configData?.checkListDetails?.approver\" (selectedList)=\"updateApprover($event)\"></lib-chip-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-5\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"d-flex\">\r\n <div class=\"mt-2 form-check-label sub\">\r\n <span>Remainder</span>\r\n </div>\r\n <div class=\"form-check form-switch ms-5\">\r\n <input class=\"form-check-input mt-3\" [(ngModel)]=\"remainder\"\r\n type=\"checkbox\" id=\"oneTime\" (change)=\"updateConfigRemainder($event)\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-check-label subtext\">\r\n By enabling, the users will be reminded in the selected interval\r\n </div>\r\n <div class=\"col-lg-12 mt-3\" *ngIf=\"remainder\">\r\n <div class=\"d-flex w-100\">\r\n <div class=\"d-flex align-items-center my-5 w-20\">\r\n <div class=\"flex-grow-2\">\r\n <div class=\"sub\">Notify user before</div>\r\n </div>\r\n </div>\r\n <div class=\"w-80\">\r\n <div class=\"w-100 d-flex\">\r\n <div class=\"d-flex align-items-center position-relative w-200px ,\" *ngFor=\"let loop of timeLoop\">\r\n <!-- <span *ngFor=\"let loop of timeLoop\"> -->\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1487_47636)\">\r\n <path\r\n d=\"M10.0013 5.00033V10.0003L13.3346 11.667M18.3346 10.0003C18.3346 14.6027 14.6037 18.3337 10.0013 18.3337C5.39893 18.3337 1.66797 14.6027 1.66797 10.0003C1.66797 5.39795 5.39893 1.66699 10.0013 1.66699C14.6037 1.66699 18.3346 5.39795 18.3346 10.0003Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1487_47636\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <select class=\"form-select ps-14 me-5\" (change)=\"updateRemainder($event,loop)\">\r\n <option *ngFor=\"let time of updateTimeLoop(loop)\" class=\"h-200px\" [selected]=\"getSelected(time,loop)\" [value]=\"time\">{{time}} mins</option>\r\n </select>\r\n <!-- </span> -->\r\n </div>\r\n <div *ngIf=\"timeLoop.length < 3\" class=\"ms-5\">\r\n <button class=\"btn btn-sm btn-outline\" (click)=\"updateLoop()\"><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.0013 4.16699V15.8337M4.16797 10.0003H15.8346\" stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"remainder\" class=\"mt-2 user\">\r\n Alerts at every 30 Mins and 60 Mins\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"separator mt-8\"></div>\r\n </div>\r\n \r\n <div *ngIf=\"['storeopenandclose','eyetest'].includes(type)\" class=\"mt-6 mx-4 sub\">Store opens at <span\r\n class=\"fw-600\"><u>{{configData?.openTime}}</u></span> and closes\r\n at <span class=\"fw-600\"><u>{{configData?.closeTime}}</u></span>, everyday. <div\r\n class=\"separator mt-8\"></div>\r\n </div>\r\n <div *ngIf=\"type === 'unattended'\" class=\"mt-6 mx-4 sub\">\r\n Time taken to assist by staff &lt;= 1 mins | Staff to customer time spent &lt;=1 mins\r\n <!-- Store opens at <span\r\n class=\"fw-600\"><u>{{configData?.openTime}}</u></span> and closes\r\n at <span class=\"fw-600\"><u>{{configData?.closeTime}}</u></span>, everyday. <div\r\n class=\"separator mt-8\"></div> -->\r\n </div>\r\n <div *ngIf=\"type !=='custom'\">\r\n <div *ngIf=\"!['storeopenandclose','eyetest'].includes(type)\">\r\n <h2 class=\"section-leftheading mt-8\">Alerts\r\n <span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1874_66195)\">\r\n <path\r\n d=\"M8.00016 10.6673V8.00065M8.00016 5.33398H8.00683M14.6668 8.00065C14.6668 11.6826 11.6821 14.6673 8.00016 14.6673C4.31826 14.6673 1.3335 11.6826 1.3335 8.00065C1.3335 4.31875 4.31826 1.33398 8.00016 1.33398C11.6821 1.33398 14.6668 4.31875 14.6668 8.00065Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1874_66195\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </h2>\r\n <div *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\" class=\"col-md-12 mt-8\">\r\n <div class=\"row mt-4\">\r\n <div class=\"col-md-3 mt-2 \">\r\n <span class=\"mx-4 sub\">If usage exceeds</span>\r\n </div>\r\n <div class=\"col-lg-1\">\r\n <div class=\"fv-row mb-5 fv-plugins-icon-container flex flex-column\">\r\n \r\n <input class=\"form-control form-control-solid w-55px\"\r\n [(ngModel)]=\"configData.checkListDetails.alert.usageExceeds\" type=\"text\"\r\n (keypress)=\"omit_special_char($event)\" autocomplete=\"off\" required\r\n minlength=\"2\" maxlength=\"3\" (blur)=\"validateLimit($event)\" />\r\n <span class=\"text-danger usageerror\" *ngIf=\"errormsg\">Please enter event count\r\n between 15 to 999</span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mt-2\">\r\n <span class=\"sub\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"['uniformdetection','mobileusagedetection','unattended','packageConfiguration'].includes(type)\"\r\n class=\"row ng-star-inserted\">\r\n <div class=\"col-lg-3\">\r\n <div class=\"d-flex align-items-center my-5\">\r\n <div class=\"flex-grow-1\">\r\n <div class=\"sub mx-4\">Send Alert to </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-lg-9\">\r\n <div class=\"fv-row fv-plugins-icon-container\">\r\n <lib-chip-dropdown [data]=\"alertUsers\" [selectedData]=\"configData.checkListDetails.alert.alertsTo\" (selectedList)=\"updateAlert($event)\"></lib-chip-dropdown>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"separator mt-8\"></div>\r\n </div>\r\n \r\n <div *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\">\r\n <h2 class=\"section-leftheading mt-8\">Detection Areas<span\r\n class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1874_66195)\">\r\n <path\r\n d=\"M8.00016 10.6673V8.00065M8.00016 5.33398H8.00683M14.6668 8.00065C14.6668 11.6826 11.6821 14.6673 8.00016 14.6673C4.31826 14.6673 1.3335 11.6826 1.3335 8.00065C1.3335 4.31875 4.31826 1.33398 8.00016 1.33398C11.6821 1.33398 14.6668 4.31875 14.6668 8.00065Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1874_66195\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></h2>\r\n \r\n <div class=\"row ng-star-inserted\">\r\n <div class=\"col-lg-3\">\r\n <div class=\"d-flex align-items-center my-4\">\r\n <div class=\"flex-grow-1\">\r\n <div class=\"sub mx-4\"> Detect mobile usage except </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-lg-9\">\r\n <lib-chip-dropdown [data]=\"zoneList\" [selectedData]=\"configData.checkListDetails.detectionArea\" (selectedList)=\"updateZone($event)\"></lib-chip-dropdown>\r\n </div>\r\n \r\n </div>\r\n <div class=\"separator mt-8\"></div>\r\n </div>\r\n \r\n <!-- <div>\r\n <div class=\"d-flex\">\r\n <div><h2 class=\"section-leftheading mt-8\">{{type === 'mobileusagedetection' ? 'To be Acknowledged by' : 'Approver'}}</h2></div>\r\n <div><span class=\"form-check form-switch ms-3 mt-6\">\r\n <input type=\"checkbox\" role=\"switch\" id=\"support\" class=\"form-check-input mt-3 cursor-pointer\">\r\n </span></div>\r\n </div>\r\n <span>By enabling, the users will be able to acknowledge the checklist</span>\r\n <div *ngIf=\"type === 'mobileusagedetection'\" class=\"col-md-12 mt-8\">\r\n <div class=\"row mt-4\">\r\n <div class=\"col-md-3 mt-2 \">\r\n <span class=\"mx-4 sub\">If usage exceeds</span>\r\n </div>\r\n <div class=\"col-lg-1\">\r\n <div class=\"fv-row mb-5 fv-plugins-icon-container flex flex-column\">\r\n \r\n <input class=\"form-control form-control-solid w-55px\"\r\n [(ngModel)]=\"configData?.checkListDetails.alert.usageExceeds\" type=\"text\"\r\n (keypress)=\"omit_special_char($event)\" autocomplete=\"off\" required minlength=\"2\" maxlength=\"3\"\r\n (blur)=\"validateLimit($event)\" />\r\n <span class=\"text-danger usageerror\" *ngIf=\"errormsg\">Please enter event count\r\n between 15 to 999</span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mt-2\">\r\n <span class=\"sub\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row ng-star-inserted mt-3\">\r\n <div class=\"col-lg-3\">\r\n <div class=\"d-flex align-items-center my-5\">\r\n <div class=\"flex-grow-1\">\r\n <div class=\"sub mx-4\">To be approved by </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-lg-9\">\r\n <lib-chip-dropdown [data]=\"alertUsers\" [selectedData]=\"configData.checkListDetails.approver\"></lib-chip-dropdown>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div class=\"separator mt-8\"></div> -->\r\n </div>\r\n \r\n \r\n </div>\r\n </div>\r\n <div>\r\n <div *ngIf=\"!tableData.length && !tableFilter.length && showImage\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <h2 class=\"section-leftheading mt-8\">Assign<span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1874_66195)\">\r\n <path\r\n d=\"M8.00016 10.6673V8.00065M8.00016 5.33398H8.00683M14.6668 8.00065C14.6668 11.6826 11.6821 14.6673 8.00016 14.6673C4.31826 14.6673 1.3335 11.6826 1.3335 8.00065C1.3335 4.31875 4.31826 1.33398 8.00016 1.33398C11.6821 1.33398 14.6668 4.31875 14.6668 8.00065Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1874_66195\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></h2>\r\n </div>\r\n <div>\r\n <a (click)=\"addStoreComponent()\" type=\"button\" class=\"btn btn-primary createbuttons px-4 ng-star-inserted mt-8\"\r\n style=\"white-space: nowrap;\" tabindex=\"0\"><span class=\"svg-icon svg-icon-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16602V15.8327M4.16675 9.99935H15.8334\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"create\">Add Store</span></a>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row mb-6\">\r\n <div class=\"col-lg-12 assignpadding mb-10\">\r\n <div class=\"row\">\r\n <div class=\"uploadpadding\">\r\n <span class=\"mx-14\"><svg class=\"mx-20 mt-12\" width=\"56\" height=\"56\"\r\n viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#D1FADF\" />\r\n <path\r\n d=\"M25.09 25C25.3251 24.3317 25.7892 23.7681 26.4 23.4091C27.0108 23.0502 27.7289 22.9189 28.4272 23.0387C29.1255 23.1585 29.7588 23.5215 30.2151 24.0635C30.6713 24.6055 30.9211 25.2915 30.92 26C30.92 28 27.92 29 27.92 29M28 33H28.01M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z\"\r\n stroke=\"#039855\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#ECFDF3\"\r\n stroke-width=\"8\" />\r\n </svg>\r\n </span>\r\n <h5 class=\"section-leftheading mt-6 mx-10\">Upload to assign users</h5>\r\n <ul class=\"subtext mx-4\">\r\n <li>Click \u201CDownload Template\u201D</li>\r\n <li> Add your data to the template file</li>\r\n <li> Upload it below to assign users</li>\r\n </ul>\r\n </div>\r\n <div class=\"col-lg-2\">\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <button #upload (click)=\"file.click()\" class=\"btn btn-primary reupload\">\r\n <span class=\"svg-icon svg-icon-primary \">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"mb-2 mx-1\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"reuploadtext\">\r\n Upload Template\r\n </span>\r\n </button>\r\n <input style=\"visibility: hidden;\" type=\"file\" #file\r\n id=\"kt_account_team_size_select_1\" (change)=\"onFileUpload($event)\" />\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <button class=\"btn-light-primary download\" (click)=\"downloadTemplate()\"><span\r\n class=\"svg-icon svg-icon-primary\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mb-1\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span><span class=\"downloadtext\">Download Template</span></button>\r\n </div>\r\n <div class=\"col-lg-2\">\r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <div class=\"col-lg-2\">\r\n </div>\r\n </div>\r\n \r\n \r\n \r\n </div>\r\n <div class=\"\" *ngIf=\"tableData.length || tableFilter.length || !showImage\">\r\n <div class=\"card-header border-0 pt-6\" *ngIf=\"!showImage || tableData.length\">\r\n <div class=\"card-title\">\r\n <div class=\"card-title align-items-start flex-column \"><span\r\n class=\"section-leftheading\">Assign<span class=\"mx-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1874_66195)\">\r\n <path\r\n d=\"M8.00016 10.6673V8.00065M8.00016 5.33398H8.00683M14.6668 8.00065C14.6668 11.6826 11.6821 14.6673 8.00016 14.6673C4.31826 14.6673 1.3335 11.6826 1.3335 8.00065C1.3335 4.31875 4.31826 1.33398 8.00016 1.33398C11.6821 1.33398 14.6668 4.31875 14.6668 8.00065Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1874_66195\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex align-items-center position-relative my-1 me-2\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\"\r\n rx=\"1\" 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 <input type=\"text\" data-kt-subscription-table-filter=\"search\"\r\n (change)=\"searchTableData()\" [(ngModel)]=\"tableFilter\"\r\n class=\"form-control form-control-solid w-400px ps-14 mx-1 me-4\"\r\n placeholder=\"Search by Store name\">\r\n <div class=\"d-flex justify-content-end\" data-kt-subscription-table-toolbar=\"base\">\r\n <a (click)=\"addStoreComponent()\" type=\"button\"\r\n class=\"btn btn-primary createbuttons px-4 ng-star-inserted\"\r\n style=\"white-space: nowrap;\" tabindex=\"0\"><span\r\n class=\"svg-icon svg-icon-2\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16602V15.8327M4.16675 9.99935H15.8334\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"create\">Add Store</span></a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row mt-2\">\r\n <div class=\"col-lg-12\" *ngIf=\"!tableData.length && !showImage\">\r\n <div class=\"card-body my-8 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 users</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-body-sop pt-0 mx-4\" *ngIf=\"tableData.length\">\r\n <div class=\"sopTable table-responsive overflow-hidden\">\r\n <div *ngIf=\"tableLoading\" 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 <div *ngIf=\"tableData.length && !tableLoading\">\r\n <div class=\"table-responsive\" >\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-align-left\">\r\n <span><input class=\"form-check-input h-14px w-14px\" type=\"checkbox\" name=\"flag\" (change)=\"checkAll($event)\"\r\n [(ngModel)]=\"selectAll\"> <span class=\"form-check-label mx-4 line-height\" >StoreName</span></span>\r\n </th>\r\n <th class=\"text-align-left\">\r\n <span>Assigned To</span>\r\n </th>\r\n <th class=\"text-align-left\">\r\n <span >Email </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of tableData;let i=index\">\r\n <td>\r\n <input class=\"form-check-input h-14px w-14px userFlag\" type=\"checkbox\" name=\"flag\"\r\n (change)=\"updateFlag($event,i,data)\"\r\n [checked]=\"configData?.checkListDetails?.assignedUsers.includes(data?.id)\" /><span class=\"form-check-label mx-4 line-height\">{{data.storeName}}</span>\r\n </td>\r\n <td>{{data.userName}}</td>\r\n <td>{{data.userEmail}}</td>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"currentValue\" [totalItems]=\"recordsTotal\"\r\n [paginationSizes]=\"paginationSize\" [pageSize]=\"size\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n <br>\r\n </div>\r\n <div class=\"col-lg-12\" *ngIf=\"!tableLoading\">\r\n <div class=\"row mt-6 assignpadding\">\r\n <div class=\"col-lg-2\">\r\n \r\n </div>\r\n <div class=\"col-lg-4\">\r\n <button (click)=\"Reupload()\" class=\"btn btn-primary reupload\"\r\n *ngIf=\"!reupload\"><span class=\"svg-icon svg-icon-primary \"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mb-2 mx-1\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"reuploadtext\" *ngIf=\"!reupload\">Reupload Template</span>\r\n </button>\r\n <button (click)=\"file1.click()\" class=\"btn btn-primary reupload\" *ngIf=\"reupload\"\r\n id=\"reupload\">\r\n <span class=\"svg-icon svg-icon-primary \"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mb-2 mx-1\" width=\"21\" height=\"20\" viewBox=\"0 0 19 19\"\r\n fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"reuploadtext\">\r\n Reupload Template\r\n </span>\r\n </button>\r\n <input style=\"visibility: hidden;\" #file1 type=\"file\" id=\"kt_account_team_size_select_2\"\r\n (change)=\"onFileUpload($event)\" />\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <button class=\"btn-light-primary download\" (click)=\"downloadTemplate()\"><span\r\n class=\"svg-icon svg-icon-primary\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mb-1\" width=\"21\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span><span class=\"downloadtext\">Download This CSV</span></button>\r\n </div>\r\n <div class=\"col-lg-2\">\r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <!-- <div class=\"row footer1 mt-10 mx-5\">\r\n <div class=\"text-dark\">\r\n <span class=\"text-dark footertext me-1\">Need help?</span>\r\n <a href=\"https://tangoeye.ai/\" target=\"_blank\" class=\"text-primary footertext text-hover-primary\"><u>Watch\r\n The Video Tutorial</u>\r\n </a>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n</div>", styles: [".card{border-radius:16px}.row>*{padding-right:0}.checkconfigcont .card{height:100%}.checkconfigcont .section{display:inline-block;width:160px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important}.checkconfigcont .radio{font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checkconfigcont .mat-radio-button.mat-primary .mat-radio-inner-circle,.checkconfigcont .mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.checkconfigcont .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.checkconfigcont .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#00a3ff}.checkconfigcont .section-leftheading1{overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.checkconfigcont .section{color:var(--Black, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checkconfigcont .svg-icon svg{height:1.25em;width:1.25em}.checkconfigcont .section-leftheading{overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:20px;font-style:normal;font-weight:600;line-height:28px}.checkconfigcont .sub{color:var(--gray-700, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checkconfigcont .subopen{color:var(--black, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checkconfigcont .symbol-circle{margin-left:-6px}.checkconfigcont .checklistlabel{padding:4px 12px;justify-content:center;align-items:center;border-radius:16px;background:var(--gray-100, #F2F4F7)}.checkconfigcont .subtitle{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;letter-spacing:0em;text-align:left;color:#667085}.checkconfigcont .form-control.form-control-solid{display:flex;padding:10px 14px;align-items:center;gap:8px;align-self:stretch;border-radius:8px;border:1px solid var(--gray-500, #D0D5DD);background:var(--white, #FFF);box-shadow:0 1px 2px #1018280d}.checkconfigcont .searchplaceholder{font-family:Inter;font-size:16px;font-style:normal;font-weight:400;line-height:24px}.checkconfigcont .custom-appbox{border-radius:12px}.checkconfigcont input::placeholder{color:#667085!important;opacity:1}.checkconfigcont .checklisttext{color:var(--gray-700, #344054);text-align:center;font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.checkconfigcont .separator{height:1px;align-self:stretch}.checkconfigcont ::ng-deep .mat-form-field-infix{color:#101828;border:1px solid #D0D5DD;box-shadow:0 1px 2px #1018280d;border-radius:8px;font-size:16px;width:100%;padding:10px 14px;font-family:Inter;font-weight:400;width:500px!important;line-height:24px}.checkconfigcont ::ng-deep .storechip{color:#101828;font-size:16px;width:100%;font-family:Inter;font-weight:400;width:780px!important;line-height:24px}.checkconfigcont ::ng-deep .mat-chip{font-family:Inter;font-style:normal;font-weight:500;font-size:14px;line-height:17px;text-align:center;color:#5e6278!important}.checkconfigcont ::ng-deep .mat-chip-list-wrapper .mat-standard-chip{margin:4px}.checkconfigcont ::ng-deep .matChip-store{height:100px;display:block;overflow-y:scroll;overflow-x:hidden}.checkconfigcont ::ng-deep .mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.checkconfigcont ::ng-deep .mat-form-field-underline{display:none}.checkconfigcont ::ng-deep .mat-form-field-ripple{display:none}.checkconfigcont .subtext{color:var(--gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px;align-items:center;gap:8px;align-self:stretch}.checkconfigcont .upload{border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);box-shadow:0 1px 2px #1018280d;display:flex;padding:10px 18px;justify-content:center;align-items:center;gap:8px;flex:1 0 0}.checkconfigcont .upload:hover{background:#f3f8fd!important;border:1px solid var(--gray-300, #D0D5DD)!important}.checkconfigcont .uploadtext{color:var(--gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.checkconfigcont .savedraft{border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);padding:10px 18px;justify-content:center;align-items:center;gap:8px;box-shadow:0 1px 2px #1018280d}.checkconfigcont .savedraft:hover{background:#f3f8fd!important;border:1px solid var(--gray-300, #D0D5DD)!important}.checkconfigcont .savedrafttext{color:var(--gray-700, #344054);font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize}.checkconfigcont .download{border-radius:8px;border:1px solid var(--primary-50, #EAF8FF);background:var(--primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;display:flex;padding:10px 18px;justify-content:center;align-items:center;gap:8px;flex:1 0 0;color:var(--primary-700, #009BF3);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.checkconfigcont .svg-icon1:hover:not(.svg-active){color:#fff}.checkconfigcont .btn-outline{border:1px solid lightgrey!important;padding:calc(.75rem + 1px) calc(1.5rem + 1px)}.checkconfigcont .footertext{color:#000;font-family:Inter;font-size:14px;font-weight:500;line-height:20px;text-align:right}.checkconfigcont .footer1{text-align:end}.checkconfigcont ::ng-deep .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#009ef7!important}.checkconfigcont ::ng-deep .mat-radio-button.mat-accent .mat-radio-inner-circle{background-color:#009ef7!important}.checkconfigcont ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:#1da1f21a;color:#009ef7}.checkconfigcont ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#009ef7}.checkconfigcont ::ng-deep th.mat-header-cell:first-of-type,.checkconfigcont ::ng-deep td.mat-cell:first-of-type,.checkconfigcont ::ng-deep td.mat-footer-cell:first-of-type{padding-right:none}.checkconfigcont ::ng-deep .sopTable input{border:none;padding:0!important}.checkconfigcont ::ng-deep .sopTable input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkconfigcont ::ng-deep .sopTable input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}.checkconfigcont ::ng-deep .sopTable input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.checkconfigcont ::ng-deep .card-body-sop{border:1px solid var(--gray-200, #EAECF0);background:var(--white, #FCFCFD);border-radius:6px}.checkconfigcont .schedule{color:var(--gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checkconfigcont .user{color:var(--gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.checkconfigcont .dropdown{margin-left:-9%}.checkconfigcont .pillstyle{color:var(--gray-700, #344054);text-align:center;font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.checkconfigcont .leftcard{position:relative}.checkconfigcont .editques{position:absolute!important;left:12%;transform:translate(-5%);bottom:30px}.checkconfigcont .questiontype{color:var(--primary-700, #009BF3);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;outline:none!important;background-color:#f1faff!important}.checkconfigcont .btn-left{display:inline-block;width:100%;font-size:16px;white-space:nowrap;overflow:hidden!important;text-overflow:ellipsis!important}.checkconfigcont .nav{display:flex;align-items:center;gap:16px;flex:1 0 0;align-self:stretch;--bs-nav-link-color: none}.checkconfigcont .form-control.form-control-solid,.checkconfigcont .form-select.form-select-solid{border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);box-shadow:0 1px 2px #1018280d}.checkconfigcont .checklistturnoff{border-radius:8px;border:1px solid var(--gray-200, #EAECF0);background:var(--white, #FFF);display:flex;padding:16px;align-items:flex-start;align-self:stretch}.checkconfigcont .btn.btn-outline.btn-outline-dashed.btn-outline-default:hover:not(.btn-active){border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);box-shadow:0 1px 2px #1018280d;display:flex;padding:10px 18px;justify-content:center;align-items:center;gap:8px;flex:1 0 0}.checkconfigcont .sopTable input{border:none;padding:0!important}.checkconfigcont .sopTable input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkconfigcont .sopTable input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}.checkconfigcont .sopTable input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.checkconfigcont .option{font-weight:400;display:block;min-height:1.2em;padding:0 2px 1px}.checkconfigcont .card hr{width:-webkit-fill-available}.checkconfigcont .imgnodata1{width:216px;height:245px}.checkconfigcont .editablecontent{display:inline-block;width:230px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important}.checkconfigcont #navfont{font-size:1.15rem!important}.checkconfigcont .imgdata{width:50%;height:50%}.checkconfigcont .imgnodata{width:312px;height:312px;margin-top:-4%}.checkconfigcont .card .card-header{display:flex;justify-content:space-between;align-items:stretch;flex-wrap:wrap;min-height:70px;padding:0 .25rem;background-color:transparent;border-bottom:none}.checkconfigcont ::ng-deep .mat-select{background:#f5f8fa;border-radius:8px}.checkconfigcont ::ng-deep .mat-select-value{height:42px}.checkconfigcont ::ng-deep .multiselect-dropdown .dropdown-btn{border:none!important}.checkconfigcont ::ng-deep .multiselect-dropdown .dropdown-list{border:none;box-shadow:0 1px 5px #959595;margin-left:-12px}.checkconfigcont ::ng-deep .multiselect-dropdown:focus-visible{border:none!important;box-shadow:0 1px 5px #959595;margin-left:-12px;max-height:250px}.checkconfigcont .custom-checkbox{--checkbox-background-checked: white !important;--checkmark-color: #009BF3;--border-color: #009BF3;--border-radius: 4px }.checkconfigcont .form-check.form-check-custom{display:flex;margin:0;height:44px;padding:12px 24px;align-items:center;gap:12px;align-self:stretch}.checkconfigcont .tabsub{color:var(--gray-500, #667085);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.checkconfigcont .selectstore{color:var(--primary-700, #009BF3);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.checkconfigcont .headeralign{color:var(--gray-500, #667085);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}.checkconfigcont .rotate{transform:rotate(180deg);transition:1s}.checkconfigcont .weekstyle{border-radius:20px;background:var(--gray-100, #F2F4F7)}.checkconfigcont ::ng-deep .swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;min-width:2em;height:0em;margin:0 .5em 0 0}.checkconfigcont ::ng-deep .listitem{display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1rem;background-color:#f3f6f9;margin-top:.75rem;border-radius:.42rem}.checkconfigcont ::ng-deep .list{overflow-y:auto}.checkconfigcont ::ng-deep .listitemlabel{font-size:13px!important;font-weight:600;font-family:Inter;color:#7e8299}.checkconfigcont ::ng-deep .swal2-container{padding:.4em!important}.checkconfigcont ::ng-deep .swal2-icon{border:1px solid white!important}.checkconfigcont ::ng-deep body.swal2-toast-shown .swal2-container{width:500px!important}.checkconfigcont ::ng-deep .swal2-popup.swal2-toast .swal2-title{margin:9px 5px auto!important}.checkconfigcont ::ng-deep .label{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}.checkconfigcont ::ng-deep .form-check-input[disabled]~.form-check-label.spocName,.checkconfigcont ::ng-deep .form-check-input:disabled~.form-check-label.spocName{opacity:unset!important}.checkconfigcont tr.mat-header-row{height:56px;border-bottom:1px solid var(--gray-200, #EAECF0);background:var(--gray-25, #FCFCFD)}.checkconfigcont .detectiontext{color:var(--gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.checkconfigcont .alerttext{color:var(--primary-600, #00A3FF);text-align:center;font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}.checkconfigcont .alertlabel{width:24px;height:24px;padding:4px 0 2px;justify-content:center;align-items:center;border-radius:200px;background:var(--primary-50, #EAF8FF)}.checkconfigcont .create{color:var(--white, #FFF);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.checkconfigcont .createbuttons{padding:10px 18px;justify-content:center;align-items:center;gap:8px;border-radius:8px;border:1px solid var(--primary-600, #00A3FF);background:var(--primary-600, #00A3FF);box-shadow:0 1px 2px #1018280d}.checkconfigcont .alertsinput{border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);box-shadow:0 1px 2px #1018280d;padding:10px 14px;align-items:center;gap:8px}.checkconfigcont .usageerror{display:block;width:255px}.checkconfigcont .reupload{padding:10px 18px!important;justify-content:center;align-items:center;gap:8px;flex:1 0 0;border-radius:8px;border:1px solid var(--primary-600, #00A3FF);background:var(--primary-600, #00A3FF);width:220px;cursor:pointer;box-shadow:0 1px 2px #1018280d}.checkconfigcont .reuploadtext{color:var(--White, #FFF);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize;cursor:pointer}.checkconfigcont .download{border-radius:8px;border:1px solid var(--primary-50, #EAF8FF);background:var(--primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;padding:10px 18px!important;justify-content:center;align-items:center;gap:8px;width:220px}.checkconfigcont .downloadtext{color:var(--primary-700, #009BF3);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.checkconfigcont .assignpadding{padding:0 40px}.checkconfigcont .uploadpadding{padding:0 30% 9px}::ng-deep .swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;min-width:2em;height:0em;margin:0 .5em 0 0}::ng-deep .listitem{display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1rem;background-color:#f3f6f9;margin-top:.75rem;border-radius:.42rem}::ng-deep .question-left{max-height:50vh;overflow:auto;overflow-x:hidden}::ng-deep .toasttitile{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .list{overflow-y:auto}::ng-deep .listitemlabel{font-size:13px!important;font-weight:600;font-family:Inter;color:#7e8299}::ng-deep .swal2-container{padding:.4em!important}::ng-deep .swal2-icon{border:1px solid white!important}::ng-deep body.swal2-toast-shown .swal2-container{width:500px!important}::ng-deep .swal2-popup.swal2-toast .swal2-title{margin:9px 5px auto!important}::ng-deep .label{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .matWidth{margin-left:12px;margin-right:12px}::ng-deep .mat-tooltip{white-space:pre-line}::ng-deep .custom-test{color:var(--gray-700, #344054)!important;text-align:start;font-family:Inter;font-size:12px;font-style:normal;border-radius:8px;box-shadow:0 4px 6px -2px #10182808,0 12px 16px -4px #10182814;font-weight:600;line-height:18px;background:#fff}.checkconfigcont .matChip-store{height:113px;display:block;overflow-y:scroll;overflow-x:hidden}.emailalert{position:relative;height:500px!important;overflow:auto!important;overflow-x:hidden!important}.emailalert1{overflow-y:auto!important;height:10%!important;position:relative}.active-question{color:var(--primary-700, #009BF3);font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;padding:8px 12px;align-items:center;gap:105px;align-self:stretch;border-radius:6px;background:var(--primary-50, #EAF8FF)}.q-btn{color:var(--gray-700, #344054);font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;padding:8px 12px;align-items:center;gap:105px;align-self:stretch;border-radius:6px;background:var(--primary-50, white)}.concise-question{display:inline-block;width:100%;white-space:nowrap;overflow:hidden!important;text-overflow:ellipsis!important;text-align:left}@media screen and (min-width: 1400px){.emailalert{position:relative;height:700px!important;overflow:auto!important;overflow-x:hidden!important}}::ng-deep .swal2-html-container{overflow:hidden!important}.badgeColor{background-color:#fffaeb!important;color:#b54708!important;font-family:Inter;font-size:14px;font-weight:500;line-height:20px;letter-spacing:0em;text-align:center}.config-heading{color:var(--Gray-900, #101828);font-family:Inter;font-size:18px;font-style:normal;font-weight:600;line-height:28px;width:35%}.ps-20{padding-left:7rem!important}.ps-18{padding-left:6.5rem!important}.remove{color:var(--Gray-500, #667085);font-size:12px;font-weight:600;line-height:18px;text-decoration-line:underline;text-transform:capitalize}.chip-container{margin-top:10px}.mat-chip{margin:5px}.dropdown-menu{position:absolute;top:100%;left:0;right:0;background-color:#fff;z-index:1000;display:block;box-sizing:border-box;height:0%}.dropdown-item{padding:8px 12px}.dropdown-item:hover{background-color:#f1f1f1}.dropdown-item input[type=checkbox]{margin-right:10px}.custom-dropdown-menu{border-radius:4px;box-shadow:0 1px 2px #1018280d}.custom-dropdown-item{display:flex;align-items:center}.custom-dropdown-item input{margin-left:10px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:3px!important}.formSeach{width:95%}.storetext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;text-transform:lowercase}.position-relative{position:relative!important}.content{background-color:#fff;padding:10px 22px 10px 10px;border-radius:5px;box-shadow:0 0 10px #0000001a}.badge-pill{display:flex;padding:2px 6px 2px 8px;justify-content:center;align-items:center;gap:4px;border-radius:16px;background:var(--Gray-100, #F2F4F7)}.badge-specificdate{max-width:100%;overflow-x:hidden;white-space:normal;display:flex;flex-wrap:wrap}.badge-specificdate .badge{margin-bottom:8px}.bg-color-disabled{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px;font-style:normal;font-weight:400;line-height:20px}a.cursor-default{cursor:default!important;background-color:unset!important}.form-control.form-control-solid.disabled{background-color:#eef3f7!important}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.daterangepicker{display:block!important;top:153.85px!important;left:900px!important;right:0}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}::ng-deep .applyBtn{display:none!important}.wrapper{min-width:200px}.btn-primary{line-height:18px!important}.selectDay{background-color:var(--bs-primary)!important}a.selectDay span{color:#fff!important}.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}}tr th .form-check-label,tr td .form-check-label{color:var(--Gray-700, #344054)!important}:host::ng-deep .schedule .md-drppicker .btn{line-height:10px!important}:host::ng-deep .schedule .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .schedule .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .schedule .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .schedule .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .schedule .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .schedule .md-drppicker td.active,:host::ng-deep .schedule .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .schedule .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .schedule .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .schedule .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep .schedule table th,:host::ng-deep .schedule table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .schedule .md-drppicker td.available.prev,:host::ng-deep .schedule .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .schedule .md-drppicker td.available.next,:host::ng-deep .schedule .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .schedule table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .schedule .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .schedule .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .schedule .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.fontSize{font-size:14px}.margin{margin-top:2px}.w-20{width:20%!important}.w-80{width:80%!important}.approver{color:var(--gray-700, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.line-height{line-height:25px}\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: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.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: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i9.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "component", type: i10.MultiDateDatepickerComponent, selector: "lib-multi-date-datepicker", inputs: ["startDate", "endDate", "predefinedDates"], outputs: ["selectedDates"] }, { kind: "component", type: i11.ChipDropdownComponent, selector: "lib-chip-dropdown", inputs: ["data", "selectedData"], outputs: ["selectedList"] }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
1928
+ }
1929
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChecklistConfigureComponent, decorators: [{
1930
+ type: Component,
1931
+ args: [{ selector: 'lib-checklist-configure', template: "<div *ngIf=\"loading\" class=\"card 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<div *ngIf=\"!loading\">\r\n <div class=\"card\">\r\n <ng-container>\r\n <div class=\"card-header border-0 pt-3 pb-3\">\r\n <h3 class=\"card-title align-items-start flex-column w-800px\">\r\n <div class=\"editablecontent mb-4 w-100\"><input type=\"text\" class=\"checklist plain-input\"\r\n placeholder=\"Enter Checklist Name\" [value]=\"configData?.checkListDetails?.checkListName\" readonly></div>\r\n <div class=\"editablecontent w-100\"><input type=\"text\" class=\"checklistDescription plain-input\"\r\n #checklistDescription placeholder=\"Enter Checklist Description\"\r\n [value]=\"configData?.checkListDetails?.checkListDescription\" readonly></div>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\"\r\n class=\"btn btn-primary mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"\r\n (click)=\"publish()\"><span class=\"ms-2\">Publish</span> </button>\r\n \r\n <button type=\"button\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"\r\n (click)=\"savedraft()\"><span class=\"ms-2\">Save as Draft</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"row checkconfigcont mt-2\" *ngIf=\"configData\">\r\n <div class=\"col-xl-3 leftcard\">\r\n <div class=\"card px-7 py-7\">\r\n <div class=\"section-leftheading1\">{{configData?.checkListDetails?.checkListName}}</div>\r\n <div *ngIf=\"obj.checkListId\" class=\"section-left\">\r\n <div *ngFor=\"let section of sections; let i=index;\">\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\">\r\n <div class=\"fs-4 fw-bold section\">{{section.name}}</div>\r\n <hr class=\"mx-2\">\r\n <svg (click)=\"accordian(i)\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"35\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"show===i\" class=\"question-left\">\r\n <div cdkDropList [cdkDropListData]=\"section.questions\">\r\n \r\n <div *ngFor=\"let question of section.questions;let j=index;\" class=\"my-2 q-btn\" cdkDrag>\r\n \r\n <div class=\"editablecontent\">\r\n {{question.qname}}\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <h3 class=\"card-title align-items-start flex-column \">\r\n <div class=\"card-label section-leftheading1 mt-6\">Schedule</div>\r\n \r\n <div *ngIf=\"type === 'mobileusagedetection' || type === 'storeopenandclose'\" class=\"mt-4 mx-2 sub\"><span\r\n class=\" mx-4\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <path\r\n d=\"M12 6V12L16 14M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"mt-2\">{{configData.checkListDetails.scheduleStartTime}} to\r\n {{configData.checkListDetails.scheduleEndTime}}</span>\r\n </div>\r\n \r\n \r\n \r\n <div *ngIf=\"['custom'].includes(type)\">\r\n <div class=\"mt-4 mx-2 sub\"><span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"23\" height=\"23\"\r\n viewBox=\"0 0 23 23\" fill=\"none\">\r\n <path\r\n d=\"M8.41448 4.52303C8.69518 4.80371 8.69518 5.2588 8.41448 5.53948L5.53948 8.41448C5.2588 8.69518 4.80371 8.69518 4.52303 8.41448L3.08553 6.97698C2.80482 6.6963 2.80482 6.24121 3.08553 5.96053C3.36621 5.67982 3.8213 5.67982 4.10198 5.96053L5.03125 6.88978L7.39803 4.52303C7.67871 4.24232 8.1338 4.24232 8.41448 4.52303Z\"\r\n fill=\"#667085\" />\r\n <path\r\n d=\"M8.41448 11.7105C8.69518 11.9912 8.69518 12.4463 8.41448 12.727L5.53948 15.602C5.2588 15.8826 4.80371 15.8826 4.52303 15.602L3.08553 14.1645C2.80482 13.8838 2.80482 13.4287 3.08553 13.1479C3.36621 12.8673 3.8213 12.8673 4.10198 13.1479L5.03125 14.0773L7.39803 11.7105C7.67871 11.4299 8.1338 11.4299 8.41448 11.7105Z\"\r\n fill=\"#667085\" />\r\n <path\r\n d=\"M10.0625 6.46875C10.0625 6.0718 10.3844 5.75 10.7812 5.75H15.0938C15.4906 5.75 15.8125 6.0718 15.8125 6.46875C15.8125 6.8657 15.4906 7.1875 15.0938 7.1875H10.7812C10.3844 7.1875 10.0625 6.8657 10.0625 6.46875Z\"\r\n fill=\"#667085\" />\r\n <path\r\n d=\"M3.59375 0C1.60898 0 0 1.60898 0 3.59375V16.5312C0 18.516 1.60898 20.125 3.59375 20.125H9.48708C9.25429 19.6696 9.06436 19.1886 8.92261 18.6875H3.59375C2.40288 18.6875 1.4375 17.7221 1.4375 16.5312V3.59375C1.4375 2.40288 2.40288 1.4375 3.59375 1.4375H16.5312C17.7221 1.4375 18.6875 2.40288 18.6875 3.59375V8.92261C19.1886 9.06436 19.6696 9.25429 20.125 9.48708V3.59375C20.125 1.60898 18.516 0 16.5312 0H3.59375Z\"\r\n fill=\"#667085\" />\r\n <path\r\n d=\"M16.5313 23C20.1039 23 23 20.1039 23 16.5313C23 12.9586 20.1039 10.0625 16.5313 10.0625C12.9586 10.0625 10.0625 12.9586 10.0625 16.5313C10.0625 20.1039 12.9586 23 16.5313 23ZM16.5313 12.9375C16.9281 12.9375 17.25 13.2594 17.25 13.6563V15.8125H19.4063C19.8031 15.8125 20.125 16.1344 20.125 16.5313C20.125 16.9281 19.8031 17.25 19.4063 17.25H17.25V19.4063C17.25 19.8031 16.9281 20.125 16.5313 20.125C16.1344 20.125 15.8125 19.8031 15.8125 19.4063V17.25H13.6563C13.2594 17.25 12.9375 16.9281 12.9375 16.5313C12.9375 16.1344 13.2594 15.8125 13.6563 15.8125H15.8125V13.6563C15.8125 13.2594 16.1344 12.9375 16.5313 12.9375Z\"\r\n fill=\"#667085\" />\r\n </svg>\r\n </span><span class=\"mt-2 ms-2\">{{configData?.checkListDetails?.schedule === 'onetime' ?\r\n 'One-time' : (configData?.checkListDetails?.schedule | titlecase)}}\r\n </span></div>\r\n \r\n <div class=\"mt-4 mx-2 sub\"><span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12 6V12L16 14M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"mt-2 ms-2\">{{configData?.checkListDetails?.scheduleStartTime ?\r\n configData?.checkListDetails?.scheduleStartTime.substr(-8) : configData?.openTime}} to\r\n {{configData?.checkListDetails?.scheduleEndTime ?\r\n configData?.checkListDetails?.scheduleEndTime.substr(-8) : configData?.closeTime}}</span>\r\n </div>\r\n \r\n <div class=\"mt-4 mx-2 sub\" *ngIf=\"showRangeValue\"><span><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M16 2V6M8 2V6M3 10H21M5 4H19C20.1046 4 21 4.89543 21 6V20C21 21.1046 20.1046 22 19 22H5C3.89543 22 3 21.1046 3 20V6C3 4.89543 3.89543 4 5 4Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span><span\r\n class=\"mt-2 ms-2\"><span>{{configData?.checkListDetails?.configStartDate}}</span><span\r\n *ngIf=\"configData?.checkListDetails?.configEndDate !== '' && configData?.checkListDetails?.configEndDate !== null\">\r\n to {{configData?.checkListDetails?.configEndDate}}</span></span></div>\r\n \r\n <div class=\"col-lg-10 editques\" *ngIf=\"['custom'].includes(type) && !disabledQuestion\">\r\n <a (click)=\"saveandredirect(obj.checkListId)\"\r\n class=\"btn-outline btn-outline-dashed btn btn-light upload\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M14.6666 2.5009C14.8855 2.28203 15.1453 2.10842 15.4313 1.98996C15.7173 1.87151 16.0238 1.81055 16.3333 1.81055C16.6428 1.81055 16.9493 1.87151 17.2353 1.98996C17.5213 2.10842 17.7811 2.28203 18 2.5009C18.2188 2.71977 18.3924 2.97961 18.5109 3.26558C18.6294 3.55154 18.6903 3.85804 18.6903 4.16757C18.6903 4.4771 18.6294 4.7836 18.5109 5.06956C18.3924 5.35553 18.2188 5.61537 18 5.83424L6.74996 17.0842L2.16663 18.3342L3.41663 13.7509L14.6666 2.5009Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg><span class=\"uploadtext\">Edit Questions</span></a>\r\n \r\n </div>\r\n </div>\r\n </h3>\r\n <div *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\">\r\n <div class=\"card-label section-leftheading1\">Alerts</div>\r\n <div class=\"mt-6 mx-4 sub\">Email</div>\r\n </div>\r\n <div *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\" class=\"mx-4 mt-4 sub\">if usage exceeds\r\n {{configData?.checkListDetails?.alert?.usageExceeds}}\r\n events\r\n </div>\r\n <div *ngIf=\"type === 'storeopenandclose'\">\r\n <div class=\"card-label section-leftheading1\">Alerts</div>\r\n <div class=\"mt-4 mx-4 sub\">Send email everyday to</div>\r\n </div>\r\n <h3 *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\" class=\"card-title align-items-start flex-column \">\r\n <div class=\"card-label section-leftheading1 mt-4\">Detection Areas</div>\r\n \r\n <div class=\"mt-4 mx-2 sub\"><span *ngFor=\"let zone of configData?.checkListDetails?.detectionArea\"\r\n class=\"badge mx-2 mt-4 badge-light checklistlabel fs-base\">\r\n <i class=\"ki-duotone ki-arrow-up checklisttext\"></i>\r\n {{zone}}\r\n </span></div>\r\n </h3>\r\n \r\n \r\n </div>\r\n </div>\r\n <div class=\"col-xl-9\">\r\n <div class=\"card card-flush h-xl-100\">\r\n <div class=\"card-body px-7\">\r\n <div class=\"schedule\">\r\n <div>\r\n <h2 class=\"section-leftheading\">Schedule<span\r\n class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1874_66195)\">\r\n <path\r\n d=\"M8.00016 10.6673V8.00065M8.00016 5.33398H8.00683M14.6668 8.00065C14.6668 11.6826 11.6821 14.6673 8.00016 14.6673C4.31826 14.6673 1.3335 11.6826 1.3335 8.00065C1.3335 4.31875 4.31826 1.33398 8.00016 1.33398C11.6821 1.33398 14.6668 4.31875 14.6668 8.00065Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1874_66195\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></h2>\r\n <div class=\"row\" *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\">\r\n <div class=\"col-md-4 d-flex\">\r\n <span class=\"sub mt-2 mx-4\">From</span>&nbsp;&nbsp;\r\n <input class=\"form-control form-control-solid flatpickr-input w-200px mt-2\"\r\n (change)=\"updateTime('start')\" [(ngModel)]=\"startTime\"\r\n placeholder=\"Set store open time\" name=\"due_date\" type=\"time\">\r\n </div>\r\n <div class=\"col-md-4 d-flex\">\r\n <span class=\"sub mt-3 mx-4\">To</span>&nbsp;&nbsp;\r\n <input class=\"form-control form-control-solid flatpickr-input w-200px mt-2\"\r\n (change)=\"updateTime('end')\" [(ngModel)]=\"endTime\" placeholder=\"Set store open time\"\r\n name=\"due_date\" type=\"time\">\r\n </div>\r\n <div class=\"separator mt-8\"></div>\r\n \r\n </div>\r\n <div *ngIf=\"['custom'].includes(type)\">\r\n <div class=\"col-md-12 mt-6 mb-1\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2 mt-3\">\r\n <span class=\"mx-6 sub\">For</span>\r\n </div>\r\n <div class=\"col-md-3 dropdown\">\r\n <select\r\n class=\"form-select form-select-lg select2-hidden-accessible ng-pristine ng-valid ng-touched\"\r\n [(ngModel)]=\"configData.checkListDetails.schedule\"\r\n (change)=\"updateSchedule($event)\">\r\n <option value=\"onetime\">Does Not Repeat</option>\r\n <option value=\"weekday\"> Every Weekday (Mon - Fri)</option>\r\n <option value=\"daily\">Daily</option>\r\n <option value=\"weekly\">Weekly</option>\r\n <option value=\"monthly\">Monthly</option>\r\n <option value=\"range\">Custom Range</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-2 d-flex\">\r\n <span class=\"sub mt-3 mx-2\">At</span>&nbsp;&nbsp;\r\n <input class=\"form-control form-control-solid flatpickr-input w-200px margin\"\r\n (change)=\"updateTime('start')\" [(ngModel)]=\"startTime\"\r\n placeholder=\"Set store open time\" name=\"due_date\" type=\"time\">\r\n </div>\r\n <div class=\"col-md-2 d-flex\">\r\n <span class=\"sub mt-3 ms-5\">Ends</span>&nbsp;&nbsp;\r\n <input class=\"form-control form-control-solid flatpickr-input w-200px margin\"\r\n (change)=\"updateTime('end')\" [(ngModel)]=\"endTime\"\r\n placeholder=\"Set store open time\" name=\"due_date\" type=\"time\">\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"justify-content-between mt-4\">\r\n <div class=\"config-heading\">Checklist Configuration</div>\r\n <div *ngIf=\"configData.checkListDetails.schedule === 'onetime'\">\r\n <div class=\"row col-lg-12 d-flex mt-5\">\r\n <div class=\"col-md-2 d-flex\">\r\n <span class=\"sub mt-3\">Once On</span>\r\n </div>\r\n <div class=\"col-md-3 px-4 pe-3\" id=\"dateclass\" data-kt-daterangepicker=\"true\"\r\n data-kt-daterangepicker-opens=\"left\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" type=\"text\" matInput ngxDaterangepickerMd [singleDatePicker]=\"true\" [minDate]=\"minDate\"\r\n [drops]=\"'down'\" [opens]=\"'right'\" [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" \r\n [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDates\" [autoApply]=\"false\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"dateRangeStart($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"configData.checkListDetails.schedule !== 'onetime'\">\r\n <div class=\"form-check form-switch mt-6\">\r\n <input type=\"checkbox\" id=\"rangeDate\"\r\n class=\"form-check-input ng-valid ng-dirty ng-touched\"\r\n [(ngModel)]=\"showRangeValue\"\r\n [disabled]=\"configData.checkListDetails?.schedule === 'range'\"\r\n (change)=\"updateDateValue($event)\">\r\n <label for=\"rangeDate\" class=\"form-check-label checklisttext ms-2\">Set defined\r\n date range</label>\r\n </div>\r\n <div class=\"row col-lg-12 d-flex mt-5\" *ngIf=\"showRangeValue\">\r\n <div class=\"col-md-2 d-flex\">\r\n <span class=\"sub mt-3\">Starts from</span>\r\n </div>\r\n <div class=\"col-md-3\" [ngClass]=\"configData.checkListDetails.schedule === 'range' ? 'ps-10' : 'px-4 pe-3'\" id=\"dateclass\" data-kt-daterangepicker=\"true\" data-kt-daterangepicker-opens=\"left\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" type=\"text\" matInput ngxDaterangepickerMd\r\n [singleDatePicker]=\"true\" [minDate]=\"minStartDate\" [drops]=\"'down'\" [opens]=\"'right'\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedStartDate\" [autoApply]=\"false\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"dateRangeStart($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 mt-8 ng-star-inserted\">\r\n <div class=\"row\" *ngIf=\"configData.checkListDetails.schedule !== 'range'\">\r\n <div class=\"col-md-2 mt-2\">\r\n <span class=\"sub\">Repeats every</span>\r\n </div>\r\n <div class=\"col-lg-6 d-flex\">\r\n <div class=\"fv-row mb-5 fv-plugins-icon-container d-flex flex-column\">\r\n <input type=\"text\" autocomplete=\"off\" required=\"\"\r\n class=\"form-control form-control-solid w-100px ng-pristine ng-invalid ng-touched\"\r\n [(ngModel)]=\"configData.checkListDetails.scheduleRepeatedDay\"\r\n maxlength=\"2\" min=\"1\" (change)=\"updateRepeatDay()\">\r\n </div>\r\n <div\r\n class=\"fv-row mb-5 mx-2 fv-plugins-icon-container d-flex flex-column\">\r\n <input type=\"text\" autocomplete=\"off\"\r\n class=\"form-control form-control-solid w-100px ng-pristine ng-invalid ng-touched\"\r\n [(ngModel)]=\"repeatType\" readonly>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"configData.checkListDetails.schedule === 'monthly'\">\r\n <div class=\"col-md-12 ng-star-inserted\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n \r\n </div>\r\n <div class=\"col-lg-2 mt-3\">\r\n <div class=\"form-check fontSize\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"day\"\r\n [checked]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup === 'day'\" (change)=\"updateMonth('day')\">\r\n <label class=\"cursor-pointer\" for=\"inlineRadio1\">On Day</label>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 d-flex\">\r\n <div\r\n class=\"fv-row mb-5 fv-plugins-icon-container d-flex flex-column\">\r\n <input type=\"text\" autocomplete=\"off\"\r\n class=\"form-control form-control-solid w-100px\"\r\n [ngClass]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup !== 'day' ? 'disabled' : ''\"\r\n [(ngModel)]=\"configData.checkListDetails.scheduleRepeatedMonthWeek\"\r\n (change)=\"updateValue($event)\"\r\n [disabled]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup !== 'day'\"\r\n maxLength=\"2\" (input)=\"validate($event)\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 ng-star-inserted\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n \r\n </div>\r\n <div class=\"col-lg-2 mt-3\">\r\n <div class=\"form-check fontSize\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"day\"\r\n [checked]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup === 'date'\" (change)=\"updateMonth('date')\">\r\n <label class=\"cursor-pointer\" for=\"inlineRadio1\">On the</label>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 d-flex\">\r\n <div\r\n class=\"fv-row mb-5 fv-plugins-icon-container d-flex flex-column\">\r\n <select\r\n class=\"form-select form-select-lg select2-hidden-accessible ng-pristine ng-valid ng-touched\"\r\n [(ngModel)]=\"monthDate\"\r\n [disabled]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup !== 'date'\">\r\n <option value=\"1\"> First </option>\r\n <option value=\"2\"> Second </option>\r\n <option value=\"3\"> Third</option>\r\n <option value=\"4\"> Fourth</option>\r\n <option value=\"5\"> Last</option>\r\n </select>\r\n </div>\r\n <div\r\n class=\"fv-row mb-5 mx-2 fv-plugins-icon-container d-flex flex-column\">\r\n <select\r\n class=\"form-select form-select-lg select2-hidden-accessible ng-pristine ng-valid ng-touched\"\r\n [(ngModel)]=\"monthDay\"\r\n [disabled]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup !== 'date'\">\r\n <option value=\"Sunday\"> Sunday </option>\r\n <option value=\"Monday\"> Monday </option>\r\n <option value=\"Tuesday\"> Tuesday</option>\r\n <option value=\"Wednesday\"> Wednesday</option>\r\n <option value=\"Thursday\"> Thursday</option>\r\n <option value=\"Friday\">Friday</option>\r\n <option value=\"Saturday\"> Saturday</option>\r\n </select>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div class=\"col-md-12 ng-star-inserted\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n </div>\r\n <div class=\"col-lg-2 mt-3\">\r\n <div class=\"form-check fontSize\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"day\"\r\n [checked]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup === 'specific'\"\r\n (change)=\"updateMonth('specific')\">\r\n <label class=\"cursor-pointer\" for=\"inlineRadio1\">On Specific Dates</label>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 d-flex\">\r\n <div class=\"position-relative\"\r\n (clickOutside)=\"closeDropDown()\">\r\n <div class=\"dropdown-close\">\r\n <div class=\"w-100\">\r\n <div\r\n class=\"d-flex align-items-center position-relative w-100\">\r\n <span\r\n class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input type=\"text\"\r\n class=\"form-control dropdown-input ps-14\"\r\n (click)=\"toggleDropDown()\" readonly\r\n placeholder=\"Select Dates\"\r\n [disabled]=\"configData.checkListDetails?.scheduleRepeatedMonthSetup !== 'specific'\" />\r\n </div>\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu w-100\"\r\n *ngIf=\"showDropDown\">\r\n <div class=\"calendar-container\">\r\n <div class=\"content\">\r\n <div class=\"dates\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"row d-flex\">\r\n <div class=\"col-2 mb-2\"\r\n *ngFor=\"let date of dates\">\r\n <li class=\"nav-item me-1\"\r\n role=\"presentation\"\r\n (click)=\"selectDate(date)\">\r\n <a class=\"nav-link btn weekstyledate d-flex flex-column flex-center rounded-pill min-w-35px py-2 px-3 \"\r\n [ngClass]=\"selectedDate.includes(date) ? 'active btn-active-primary' : ''\"\r\n data-bs-toggle=\"tab\"\r\n aria-selected=\"false\"\r\n tabindex=\"-1\"\r\n role=\"tab\">\r\n <span\r\n class=\"pillstyle\">{{\r\n date }}</span>\r\n </a>\r\n </li>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button ms-2\"\r\n (click)=\"submitDate();showDropDown= false;\">\r\n <button\r\n class=\"btn btn-primary btn-block w-100\">\r\n Submit\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n </div>\r\n <div class=\"col-lg-6 py-3 badge-specificdate\">\r\n <div class=\"d-flex mt-3 flex-wrap\">\r\n <span *ngFor=\"let date of submittedDates\"\r\n class=\"badge badge-pill badge-light checklisttext me-4\">\r\n {{ getDateWithSuffix(date) }}\r\n <span (click)=\"removeBadge(date)\" class=\"cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\"\r\n height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 ng-star-inserted\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div\r\n *ngIf=\"['weekday','weekly'].includes(configData.checkListDetails.schedule)\">\r\n <ul class=\"nav nav-pills d-flex flex-nowrap mb-3\" role=\"tablist\">\r\n \r\n <ng-container\r\n *ngFor=\"let day of ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\">\r\n <li class=\"nav-item me-1\" role=\"presentation\"\r\n (click)=\"(configData.checkListDetails.schedule === 'weekly' || (configData.checkListDetails.schedule === 'weekday' && !['Sunday','Saturday'].includes(day))) ? setDay(day) : ''\">\r\n <a class=\"nav-link btn weekstyle d-flex flex-column flex-center rounded-pill min-w-45px me-2 py-4 px-3\"\r\n [ngClass]=\"(configData.checkListDetails.schedule === 'weekday' && ['Sunday','Saturday'].includes(day)) ? 'cursor-default' : selectedDays.includes(day) ? 'selectDay' : ''\"\r\n data-bs-toggle=\"tab\" aria-selected=\"false\" tabindex=\"-1\"\r\n role=\"tab\">\r\n <span class=\"pillstyle\">{{ day[0] }}</span>\r\n </a>\r\n </li>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"configData.checkListDetails.schedule === 'range'\">\r\n <div class=\"col-md-12 ng-star-inserted\">\r\n <div class=\"row\">\r\n \r\n <div class=\"col-lg-6 d-flex\">\r\n <div class=\"form-check form-switch mt-3\">\r\n <input type=\"checkbox\" id=\"flexSwitchCheckDefault\"\r\n class=\"form-check-input ng-valid ng-dirty ng-touched\"\r\n [(ngModel)]=\"specific\" (change)=\"updateSpecific($event)\">\r\n <label for=\"flexSwitchCheckDefault\"\r\n class=\"form-check-label checklisttext ms-2\">On Specific\r\n Dates</label>\r\n </div>\r\n <div class=\"px-4 pe-3 position-relative\" (clickOutside)=\"closeDropDown()\">\r\n <div class=\"dropdown-close\">\r\n <div class=\"w-100\">\r\n <div class=\"d-flex align-items-center position-relative w-300px\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control dropdown-input ps-14\" (click)=\"toggleDropDown()\" readonly\r\n placeholder=\"Select Dates\"\r\n [disabled]=\"!specific\"/>\r\n </div>\r\n </div>\r\n <div class=\"dropdown-menu custom-dropdown-menu w-100\" *ngIf=\"showDropDown\">\r\n <lib-multi-date-datepicker (selectedDates)=\"selectSpecificDate($event)\" [predefinedDates]=\"selectedDateList\" [startDate]=\"configData.checkListDetails.configStartDate\" [endDate]=\"configData.checkListDetails.configEndDate\"></lib-multi-date-datepicker>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-2\">\r\n </div>\r\n <div class=\"col-lg-6 py-3 badge-specificdate\">\r\n <div class=\"d-flex mt-3 ms-5 flex-wrap\">\r\n <span *ngFor=\"let date of selectedDateList\"\r\n class=\"badge badge-pill badge-light checklisttext me-4\">\r\n {{ date }}\r\n <span (click)=\"removeDate(date)\" class=\"cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\"\r\n height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 ng-star-inserted\"\r\n [hidden]=\"!showRangeValue || configData.checkListDetails.schedule === 'onetime'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-2\" [ngClass]=\"configData.checkListDetails.schedule === 'range' ? 'mt-4' : 'mt-2'\">\r\n <span class=\"sub\">Ends On</span>\r\n </div>\r\n <div class=\"col-md-3\" id=\"dateclass\" [ngClass]=\"configData.checkListDetails.schedule === 'range' ? 'ps-9' : 'px-4 pe-3'\" data-kt-daterangepicker=\"true\" data-kt-daterangepicker-opens=\"left\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <input class=\"fx-date-range form-control ps-14\" type=\"text\" matInput ngxDaterangepickerMd\r\n [singleDatePicker]=\"true\" [minDate]=\"minEndDate\" [drops]=\"'down'\" [opens]=\"'right'\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\"\r\n [(ngModel)]=\"selectedEndDate\" [autoApply]=\"false\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"dateRangeEnd($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </div>\r\n <div class=\"mt-5 remove cursor-pointer ms-4\" (click)=\"onDatepickerRefresh()\"\r\n *ngIf=\"configData.checkListDetails.configEndDate !== '' && configData.checkListDetails.configEndDate !== null && configData.checkListDetails.schedule !=='range'\">\r\n Remove\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"my-3 user\" *ngIf=\"configData.checkListDetails?.schedule === 'onetime'\">Occurs on\r\n the day {{configData.checkListDetails?.scheduleDate | date:'dd MMM YYYY'}}</div>\r\n <div class=\"my-3 user\"\r\n *ngIf=\"['weekday','weekly'].includes(configData.checkListDetails?.schedule)\">Occurs\r\n every {{(configData.checkListDetails?.scheduleRepeatedDay?.length &&\r\n configData.checkListDetails?.scheduleRepeatedDay !=='01') ?\r\n configData.checkListDetails?.scheduleRepeatedDay : ''}} week<span\r\n *ngIf=\"configData.checkListDetails?.scheduleRepeatedDay !== 01\">s</span> on\r\n {{selectedDays.toString()}}<span *ngIf=\"showRangeValue\"> starting\r\n {{configData.checkListDetails?.configStartDate | date:'dd MMM YYYY'}} <span *ngIf=\"configData.checkListDetails?.configEndDate\">until {{configData.checkListDetails?.configEndDate | date:'dd MMM YYYY'}}</span></span></div>\r\n <div class=\"my-3 user\" *ngIf=\"configData.checkListDetails?.schedule === 'daily'\">Occurs every\r\n {{(configData.checkListDetails?.scheduleRepeatedDay?.length &&\r\n configData.checkListDetails?.scheduleRepeatedDay !== '01') ?\r\n configData.checkListDetails?.scheduleRepeatedDay : ''}} day<span\r\n *ngIf=\"configData.checkListDetails?.scheduleRepeatedDay !== 01\">s</span><span\r\n *ngIf=\"showRangeValue\"> starting {{configData.checkListDetails?.configStartDate |\r\n date:'dd MMM YYYY'}} <span *ngIf=\"configData.checkListDetails?.configEndDate \">until {{configData.checkListDetails?.configEndDate | date:'dd MMM YYYY'}}</span></span></div>\r\n <div class=\"my-3 user\" *ngIf=\"configData.checkListDetails?.schedule === 'monthly'\">Occurs\r\n every\r\n {{(configData.checkListDetails?.scheduleRepeatedDay?.length &&\r\n configData.checkListDetails?.scheduleRepeatedDay !== '01') ?\r\n configData.checkListDetails?.scheduleRepeatedDay : ''}} month<span *ngIf=\"configData.checkListDetails?.scheduleRepeatedDay !== 01\">s </span>{{(configData.checkListDetails?.scheduleRepeatedMonthSetup === 'day') ? ('on day ' + configData.checkListDetails.scheduleRepeatedMonthWeek) : configData.checkListDetails?.scheduleRepeatedMonthSetup === 'date' ? updateMonthValue():\r\n updateSpecificValue()}}<span *ngIf=\"showRangeValue\"> starting {{configData.checkListDetails?.configStartDate | date:'dd MMM YYYY'}} <span\r\n *ngIf=\"configData.checkListDetails?.configEndDate\">until {{configData.checkListDetails?.configEndDate | date:'dd MMM YYYY'}}</span></span></div>\r\n <div class=\"my-3 user\" *ngIf=\"configData.checkListDetails?.schedule === 'range'\">Occurs every\r\n {{configData.checkListDetails?.scheduleWeekDays?.toString()}} <span\r\n *ngIf=\"showRangeValue\"> starting {{configData.checkListDetails?.configStartDate |\r\n date:'dd MMM YYYY'}} <span *ngIf=\"configData.checkListDetails?.configEndDate\">until {{configData.checkListDetails?.configEndDate | date:'dd MMM YYYY'}}</span></span></div>\r\n \r\n \r\n </div>\r\n \r\n <div class=\"section-left\" *ngIf=\"['custom'].includes(type)\">\r\n <div>\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\">\r\n <div class=\"config-heading\">Response Configuration</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" (click)=\"configaccordian()\"\r\n [ngClass]=\"{'rotate' : showconfig}\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"35\" height=\"35\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"showconfig\">\r\n <div cdkDropList>\r\n <div cdkDrag>\r\n <div class=\"col-lg-12\"\r\n [ngClass]=\"['onetime','daily'].includes(configData?.checkListDetails.schedule) || (configData?.checkListDetails.schedule === 'monthly' && configData?.checkListDetails.scheduleRepeatedMonthSetup !=='specific') ? 'bg-color-disabled' : ''\">\r\n <div\r\n class=\"fv-row checklistturnoff mt-4 fv-plugins-icon-containe\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\"\r\n [checked]=\"configData?.checkListDetails?.allowOnce ? true : false\"\r\n [(ngModel)]=\"configData.checkListDetails.allowOnce\"\r\n [ngModelOptions]=\"{standalone: true}\" type=\"checkbox\"\r\n id=\"oneTime\"\r\n [disabled]=\"['onetime','daily'].includes(configData?.checkListDetails.schedule) || (configData?.checkListDetails.schedule === 'monthly' && configData?.checkListDetails.scheduleRepeatedMonthSetup !=='specific')\">\r\n <label class=\"form-check-label sub ms-2\" for=\"oneTime\">Only one\r\n time\r\n </label><br>\r\n <label class=\"form-check-label subtext ms-2\" for=\"oneTime\">By\r\n enabling this, the response can be captured only once for\r\n this checklist <span *ngIf=\"showRangeValue\">from\r\n {{configData.checkListDetails.configStartDate}} <span\r\n *ngIf=\"configData.checkListDetails.configEndDate\">to\r\n {{configData.checkListDetails.configEndDate}}.</span></span></label>\r\n </div>\r\n </div>\r\n <div class=\"fv-row checklistturnoff mt-4 fv-plugins-icon-containe\">\r\n <div>\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\"\r\n [checked]=\" configData?.checkListDetails?.allowedOverTime ? true : false\"\r\n [(ngModel)]=\"configData.checkListDetails.allowedOverTime\"\r\n [ngModelOptions]=\"{standalone: true}\" type=\"checkbox\"\r\n id=\"fillResponse\">\r\n <label class=\"form-check-label sub ms-2\"\r\n for=\"fillResponse\">Fill response after configure\r\n time.</label><br>\r\n <label class=\"form-check-label subtext ms-2\"\r\n for=\"fillResponse\">By enabling, the user can fill the\r\n checklist even after the above configured\r\n end-time.</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"fv-row checklistturnoff mt-4 fv-plugins-icon-containe\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\"\r\n [checked]=\"configData?.checkListDetails?.allowedStoreLocation ? true : false\"\r\n [(ngModel)]=\"configData.checkListDetails.allowedStoreLocation\"\r\n [ngModelOptions]=\"{standalone: true}\" type=\"checkbox\"\r\n id=\"geoFencing\">\r\n <label class=\"form-check-label sub ms-2\" for=\"geoFencing\">Geo\r\n fencing\r\n </label><br>\r\n <label class=\"form-check-label subtext ms-2\" for=\"geoFencing\">By\r\n enabling, the checklist can be filled by the user only when\r\n inside the store.</label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"fv-row checklistturnoff mt-4 fv-plugins-icon-containe\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\"\r\n [checked]=\"configData?.checkListDetails?.allowedMultiSubmit ? true : false\"\r\n [(ngModel)]=\"configData.checkListDetails.allowedMultiSubmit\"\r\n [ngModelOptions]=\"{standalone: true}\" type=\"checkbox\"\r\n id=\"allowedMultiSubmitSwitch\">\r\n <label class=\"form-check-label sub ms-2\"\r\n for=\"allowedMultiSubmitSwitch\">Allow multiple\r\n responses</label><br>\r\n <label class=\"form-check-label subtext ms-2\"\r\n for=\"allowedMultiSubmitSwitch\">By enabling, the checklist\r\n can be filled multiple times in a day</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"separator mt-8\"></div>\r\n </div>\r\n\r\n <div class=\"section-left\" *ngIf=\"['custom'].includes(type)\">\r\n <div>\r\n <div class=\"d-flex align-items-center justify-content-between mt-4\">\r\n <div class=\"config-heading\">Advance Configuration</div>\r\n <hr class=\"mx-2\">\r\n <svg class=\"cursor-pointer\" (click)=\"advanceaccordian()\" [ngClass]=\"{'rotate' : showadvance}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"35\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div *ngIf=\"showadvance\">\r\n <div cdkDropList>\r\n <div cdkDrag>\r\n <div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"d-flex\">\r\n <div class=\"mt-2 form-check-label sub\">\r\n <span>Approver</span>\r\n </div>\r\n <div class=\"form-check form-switch ms-5\">\r\n <input class=\"form-check-input mt-3\" [checked]=\"configData?.checkListDetails?.approver?.length ? true : false\" [(ngModel)]=\"approve\"\r\n type=\"checkbox\" id=\"oneTime\" (change)=\"updateConfigApprover($event)\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-check-label subtext\">\r\n By enabling, the users will be able to approve the checklist\r\n </div>\r\n <div class=\"col-lg-12 mt-3\" *ngIf=\"approve\">\r\n <div class=\"d-flex w-100\">\r\n <div class=\"d-flex align-items-center my-5 w-20\">\r\n <div class=\"flex-grow-2\">\r\n <div class=\"sub\">To be approved by </div>\r\n </div>\r\n </div>\r\n <div class=\"w-80\">\r\n <lib-chip-dropdown [data]=\"alertUsers\"\r\n [selectedData]=\"configData?.checkListDetails?.approver\" (selectedList)=\"updateApprover($event)\"></lib-chip-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-5\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"d-flex\">\r\n <div class=\"mt-2 form-check-label sub\">\r\n <span>Remainder</span>\r\n </div>\r\n <div class=\"form-check form-switch ms-5\">\r\n <input class=\"form-check-input mt-3\" [(ngModel)]=\"remainder\"\r\n type=\"checkbox\" id=\"oneTime\" (change)=\"updateConfigRemainder($event)\">\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-check-label subtext\">\r\n By enabling, the users will be reminded in the selected interval\r\n </div>\r\n <div class=\"col-lg-12 mt-3\" *ngIf=\"remainder\">\r\n <div class=\"d-flex w-100\">\r\n <div class=\"d-flex align-items-center my-5 w-20\">\r\n <div class=\"flex-grow-2\">\r\n <div class=\"sub\">Notify user before</div>\r\n </div>\r\n </div>\r\n <div class=\"w-80\">\r\n <div class=\"w-100 d-flex\">\r\n <div class=\"d-flex align-items-center position-relative w-200px ,\" *ngFor=\"let loop of timeLoop\">\r\n <!-- <span *ngFor=\"let loop of timeLoop\"> -->\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1487_47636)\">\r\n <path\r\n d=\"M10.0013 5.00033V10.0003L13.3346 11.667M18.3346 10.0003C18.3346 14.6027 14.6037 18.3337 10.0013 18.3337C5.39893 18.3337 1.66797 14.6027 1.66797 10.0003C1.66797 5.39795 5.39893 1.66699 10.0013 1.66699C14.6037 1.66699 18.3346 5.39795 18.3346 10.0003Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1487_47636\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <select class=\"form-select ps-14 me-5\" (change)=\"updateRemainder($event,loop)\">\r\n <option *ngFor=\"let time of updateTimeLoop(loop)\" class=\"h-200px\" [selected]=\"getSelected(time,loop)\" [value]=\"time\">{{time}} mins</option>\r\n </select>\r\n <!-- </span> -->\r\n </div>\r\n <div *ngIf=\"timeLoop.length < 3\" class=\"ms-5\">\r\n <button class=\"btn btn-sm btn-outline\" (click)=\"updateLoop()\"><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.0013 4.16699V15.8337M4.16797 10.0003H15.8346\" stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"remainder\" class=\"mt-2 user\">\r\n Alerts at every 30 Mins and 60 Mins\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"separator mt-8\"></div>\r\n </div>\r\n \r\n <div *ngIf=\"['storeopenandclose','eyetest'].includes(type)\" class=\"mt-6 mx-4 sub\">Store opens at <span\r\n class=\"fw-600\"><u>{{configData?.openTime}}</u></span> and closes\r\n at <span class=\"fw-600\"><u>{{configData?.closeTime}}</u></span>, everyday. <div\r\n class=\"separator mt-8\"></div>\r\n </div>\r\n <div *ngIf=\"type === 'unattended'\" class=\"mt-6 mx-4 sub\">\r\n Time taken to assist by staff &lt;= 1 mins | Staff to customer time spent &lt;=1 mins\r\n <!-- Store opens at <span\r\n class=\"fw-600\"><u>{{configData?.openTime}}</u></span> and closes\r\n at <span class=\"fw-600\"><u>{{configData?.closeTime}}</u></span>, everyday. <div\r\n class=\"separator mt-8\"></div> -->\r\n </div>\r\n <div *ngIf=\"type !=='custom'\">\r\n <div *ngIf=\"!['storeopenandclose','eyetest'].includes(type)\">\r\n <h2 class=\"section-leftheading mt-8\">Alerts\r\n <span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1874_66195)\">\r\n <path\r\n d=\"M8.00016 10.6673V8.00065M8.00016 5.33398H8.00683M14.6668 8.00065C14.6668 11.6826 11.6821 14.6673 8.00016 14.6673C4.31826 14.6673 1.3335 11.6826 1.3335 8.00065C1.3335 4.31875 4.31826 1.33398 8.00016 1.33398C11.6821 1.33398 14.6668 4.31875 14.6668 8.00065Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1874_66195\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </h2>\r\n <div *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\" class=\"col-md-12 mt-8\">\r\n <div class=\"row mt-4\">\r\n <div class=\"col-md-3 mt-2 \">\r\n <span class=\"mx-4 sub\">If usage exceeds</span>\r\n </div>\r\n <div class=\"col-lg-1\">\r\n <div class=\"fv-row mb-5 fv-plugins-icon-container flex flex-column\">\r\n \r\n <input class=\"form-control form-control-solid w-55px\"\r\n [(ngModel)]=\"configData.checkListDetails.alert.usageExceeds\" type=\"text\"\r\n (keypress)=\"omit_special_char($event)\" autocomplete=\"off\" required\r\n minlength=\"2\" maxlength=\"3\" (blur)=\"validateLimit($event)\" />\r\n <span class=\"text-danger usageerror\" *ngIf=\"errormsg\">Please enter event count\r\n between 15 to 999</span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mt-2\">\r\n <span class=\"sub\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"['uniformdetection','mobileusagedetection','unattended','packageConfiguration'].includes(type)\"\r\n class=\"row ng-star-inserted\">\r\n <div class=\"col-lg-3\">\r\n <div class=\"d-flex align-items-center my-5\">\r\n <div class=\"flex-grow-1\">\r\n <div class=\"sub mx-4\">Send Alert to </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-lg-9\">\r\n <div class=\"fv-row fv-plugins-icon-container\">\r\n <lib-chip-dropdown [data]=\"alertUsers\" [selectedData]=\"configData.checkListDetails.alert.alertsTo\" (selectedList)=\"updateAlert($event)\"></lib-chip-dropdown>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"separator mt-8\"></div>\r\n </div>\r\n \r\n <div *ngIf=\"['uniformdetection','mobileusagedetection'].includes(type)\">\r\n <h2 class=\"section-leftheading mt-8\">Detection Areas<span\r\n class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1874_66195)\">\r\n <path\r\n d=\"M8.00016 10.6673V8.00065M8.00016 5.33398H8.00683M14.6668 8.00065C14.6668 11.6826 11.6821 14.6673 8.00016 14.6673C4.31826 14.6673 1.3335 11.6826 1.3335 8.00065C1.3335 4.31875 4.31826 1.33398 8.00016 1.33398C11.6821 1.33398 14.6668 4.31875 14.6668 8.00065Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1874_66195\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></h2>\r\n \r\n <div class=\"row ng-star-inserted\">\r\n <div class=\"col-lg-3\">\r\n <div class=\"d-flex align-items-center my-4\">\r\n <div class=\"flex-grow-1\">\r\n <div class=\"sub mx-4\"> Detect mobile usage except </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-lg-9\">\r\n <lib-chip-dropdown [data]=\"zoneList\" [selectedData]=\"configData.checkListDetails.detectionArea\" (selectedList)=\"updateZone($event)\"></lib-chip-dropdown>\r\n </div>\r\n \r\n </div>\r\n <div class=\"separator mt-8\"></div>\r\n </div>\r\n \r\n <!-- <div>\r\n <div class=\"d-flex\">\r\n <div><h2 class=\"section-leftheading mt-8\">{{type === 'mobileusagedetection' ? 'To be Acknowledged by' : 'Approver'}}</h2></div>\r\n <div><span class=\"form-check form-switch ms-3 mt-6\">\r\n <input type=\"checkbox\" role=\"switch\" id=\"support\" class=\"form-check-input mt-3 cursor-pointer\">\r\n </span></div>\r\n </div>\r\n <span>By enabling, the users will be able to acknowledge the checklist</span>\r\n <div *ngIf=\"type === 'mobileusagedetection'\" class=\"col-md-12 mt-8\">\r\n <div class=\"row mt-4\">\r\n <div class=\"col-md-3 mt-2 \">\r\n <span class=\"mx-4 sub\">If usage exceeds</span>\r\n </div>\r\n <div class=\"col-lg-1\">\r\n <div class=\"fv-row mb-5 fv-plugins-icon-container flex flex-column\">\r\n \r\n <input class=\"form-control form-control-solid w-55px\"\r\n [(ngModel)]=\"configData?.checkListDetails.alert.usageExceeds\" type=\"text\"\r\n (keypress)=\"omit_special_char($event)\" autocomplete=\"off\" required minlength=\"2\" maxlength=\"3\"\r\n (blur)=\"validateLimit($event)\" />\r\n <span class=\"text-danger usageerror\" *ngIf=\"errormsg\">Please enter event count\r\n between 15 to 999</span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 mt-2\">\r\n <span class=\"sub\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row ng-star-inserted mt-3\">\r\n <div class=\"col-lg-3\">\r\n <div class=\"d-flex align-items-center my-5\">\r\n <div class=\"flex-grow-1\">\r\n <div class=\"sub mx-4\">To be approved by </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-lg-9\">\r\n <lib-chip-dropdown [data]=\"alertUsers\" [selectedData]=\"configData.checkListDetails.approver\"></lib-chip-dropdown>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div class=\"separator mt-8\"></div> -->\r\n </div>\r\n \r\n \r\n </div>\r\n </div>\r\n <div>\r\n <div *ngIf=\"!tableData.length && !tableFilter.length && showImage\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <h2 class=\"section-leftheading mt-8\">Assign<span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1874_66195)\">\r\n <path\r\n d=\"M8.00016 10.6673V8.00065M8.00016 5.33398H8.00683M14.6668 8.00065C14.6668 11.6826 11.6821 14.6673 8.00016 14.6673C4.31826 14.6673 1.3335 11.6826 1.3335 8.00065C1.3335 4.31875 4.31826 1.33398 8.00016 1.33398C11.6821 1.33398 14.6668 4.31875 14.6668 8.00065Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1874_66195\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></h2>\r\n </div>\r\n <div>\r\n <a (click)=\"addStoreComponent()\" type=\"button\" class=\"btn btn-primary createbuttons px-4 ng-star-inserted mt-8\"\r\n style=\"white-space: nowrap;\" tabindex=\"0\"><span class=\"svg-icon svg-icon-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16602V15.8327M4.16675 9.99935H15.8334\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"create\">Add Store</span></a>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row mb-6\">\r\n <div class=\"col-lg-12 assignpadding mb-10\">\r\n <div class=\"row\">\r\n <div class=\"uploadpadding\">\r\n <span class=\"mx-14\"><svg class=\"mx-20 mt-12\" width=\"56\" height=\"56\"\r\n viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#D1FADF\" />\r\n <path\r\n d=\"M25.09 25C25.3251 24.3317 25.7892 23.7681 26.4 23.4091C27.0108 23.0502 27.7289 22.9189 28.4272 23.0387C29.1255 23.1585 29.7588 23.5215 30.2151 24.0635C30.6713 24.6055 30.9211 25.2915 30.92 26C30.92 28 27.92 29 27.92 29M28 33H28.01M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z\"\r\n stroke=\"#039855\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#ECFDF3\"\r\n stroke-width=\"8\" />\r\n </svg>\r\n </span>\r\n <h5 class=\"section-leftheading mt-6 mx-10\">Upload to assign users</h5>\r\n <ul class=\"subtext mx-4\">\r\n <li>Click \u201CDownload Template\u201D</li>\r\n <li> Add your data to the template file</li>\r\n <li> Upload it below to assign users</li>\r\n </ul>\r\n </div>\r\n <div class=\"col-lg-2\">\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <button #upload (click)=\"file.click()\" class=\"btn btn-primary reupload\">\r\n <span class=\"svg-icon svg-icon-primary \">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"mb-2 mx-1\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"reuploadtext\">\r\n Upload Template\r\n </span>\r\n </button>\r\n <input style=\"visibility: hidden;\" type=\"file\" #file\r\n id=\"kt_account_team_size_select_1\" (change)=\"onFileUpload($event)\" />\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <button class=\"btn-light-primary download\" (click)=\"downloadTemplate()\"><span\r\n class=\"svg-icon svg-icon-primary\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mb-1\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span><span class=\"downloadtext\">Download Template</span></button>\r\n </div>\r\n <div class=\"col-lg-2\">\r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <div class=\"col-lg-2\">\r\n </div>\r\n </div>\r\n \r\n \r\n \r\n </div>\r\n <div class=\"\" *ngIf=\"tableData.length || tableFilter.length || !showImage\">\r\n <div class=\"card-header border-0 pt-6\" *ngIf=\"!showImage || tableData.length\">\r\n <div class=\"card-title\">\r\n <div class=\"card-title align-items-start flex-column \"><span\r\n class=\"section-leftheading\">Assign<span class=\"mx-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1874_66195)\">\r\n <path\r\n d=\"M8.00016 10.6673V8.00065M8.00016 5.33398H8.00683M14.6668 8.00065C14.6668 11.6826 11.6821 14.6673 8.00016 14.6673C4.31826 14.6673 1.3335 11.6826 1.3335 8.00065C1.3335 4.31875 4.31826 1.33398 8.00016 1.33398C11.6821 1.33398 14.6668 4.31875 14.6668 8.00065Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1874_66195\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex align-items-center position-relative my-1 me-2\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-6\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\"\r\n rx=\"1\" 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 <input type=\"text\" data-kt-subscription-table-filter=\"search\"\r\n (change)=\"searchTableData()\" [(ngModel)]=\"tableFilter\"\r\n class=\"form-control form-control-solid w-400px ps-14 mx-1 me-4\"\r\n placeholder=\"Search by Store name\">\r\n <div class=\"d-flex justify-content-end\" data-kt-subscription-table-toolbar=\"base\">\r\n <a (click)=\"addStoreComponent()\" type=\"button\"\r\n class=\"btn btn-primary createbuttons px-4 ng-star-inserted\"\r\n style=\"white-space: nowrap;\" tabindex=\"0\"><span\r\n class=\"svg-icon svg-icon-2\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16602V15.8327M4.16675 9.99935H15.8334\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span><span class=\"create\">Add Store</span></a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row mt-2\">\r\n <div class=\"col-lg-12\" *ngIf=\"!tableData.length && !showImage\">\r\n <div class=\"card-body my-8 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 users</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"card-body-sop pt-0 mx-4\" *ngIf=\"tableData.length\">\r\n <div class=\"sopTable table-responsive overflow-hidden\">\r\n <div *ngIf=\"tableLoading\" 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 <div *ngIf=\"tableData.length && !tableLoading\">\r\n <div class=\"table-responsive\" >\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th class=\"text-align-left\">\r\n <span><input class=\"form-check-input h-14px w-14px\" type=\"checkbox\" name=\"flag\" (change)=\"checkAll($event)\"\r\n [(ngModel)]=\"selectAll\"> <span class=\"form-check-label mx-4 line-height\" >StoreName</span></span>\r\n </th>\r\n <th class=\"text-align-left\">\r\n <span>Assigned To</span>\r\n </th>\r\n <th class=\"text-align-left\">\r\n <span >Email </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of tableData;let i=index\">\r\n <td>\r\n <input class=\"form-check-input h-14px w-14px userFlag\" type=\"checkbox\" name=\"flag\"\r\n (change)=\"updateFlag($event,i,data)\"\r\n [checked]=\"configData?.checkListDetails?.assignedUsers.includes(data?.id)\" /><span class=\"form-check-label mx-4 line-height\">{{data.storeName}}</span>\r\n </td>\r\n <td>{{data.userName}}</td>\r\n <td>{{data.userEmail}}</td>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"size\" [currentPage]=\"currentValue\" [totalItems]=\"recordsTotal\"\r\n [paginationSizes]=\"paginationSize\" [pageSize]=\"size\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n <br>\r\n </div>\r\n <div class=\"col-lg-12\" *ngIf=\"!tableLoading\">\r\n <div class=\"row mt-6 assignpadding\">\r\n <div class=\"col-lg-2\">\r\n \r\n </div>\r\n <div class=\"col-lg-4\">\r\n <button (click)=\"Reupload()\" class=\"btn btn-primary reupload\"\r\n *ngIf=\"!reupload\"><span class=\"svg-icon svg-icon-primary \"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" class=\"mb-2 mx-1\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"reuploadtext\" *ngIf=\"!reupload\">Reupload Template</span>\r\n </button>\r\n <button (click)=\"file1.click()\" class=\"btn btn-primary reupload\" *ngIf=\"reupload\"\r\n id=\"reupload\">\r\n <span class=\"svg-icon svg-icon-primary \"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mb-2 mx-1\" width=\"21\" height=\"20\" viewBox=\"0 0 19 19\"\r\n fill=\"none\">\r\n <path\r\n d=\"M18 12.5V15.8333C18 16.2754 17.8244 16.6993 17.5118 17.0118C17.1993 17.3244 16.7754 17.5 16.3333 17.5H4.66667C4.22464 17.5 3.80072 17.3244 3.48816 17.0118C3.17559 16.6993 3 16.2754 3 15.8333V12.5M14.6667 6.66667L10.5 2.5M10.5 2.5L6.33333 6.66667M10.5 2.5V12.5\"\r\n stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"reuploadtext\">\r\n Reupload Template\r\n </span>\r\n </button>\r\n <input style=\"visibility: hidden;\" #file1 type=\"file\" id=\"kt_account_team_size_select_2\"\r\n (change)=\"onFileUpload($event)\" />\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <button class=\"btn-light-primary download\" (click)=\"downloadTemplate()\"><span\r\n class=\"svg-icon svg-icon-primary\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mb-1\" width=\"21\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span><span class=\"downloadtext\">Download This CSV</span></button>\r\n </div>\r\n <div class=\"col-lg-2\">\r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n \r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n <!-- <div class=\"row footer1 mt-10 mx-5\">\r\n <div class=\"text-dark\">\r\n <span class=\"text-dark footertext me-1\">Need help?</span>\r\n <a href=\"https://tangoeye.ai/\" target=\"_blank\" class=\"text-primary footertext text-hover-primary\"><u>Watch\r\n The Video Tutorial</u>\r\n </a>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n</div>", styles: [".card{border-radius:16px}.row>*{padding-right:0}.checkconfigcont .card{height:100%}.checkconfigcont .section{display:inline-block;width:160px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important}.checkconfigcont .radio{font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checkconfigcont .mat-radio-button.mat-primary .mat-radio-inner-circle,.checkconfigcont .mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple),.checkconfigcont .mat-radio-button.mat-primary.mat-radio-checked .mat-radio-persistent-ripple,.checkconfigcont .mat-radio-button.mat-primary:active .mat-radio-persistent-ripple{background-color:#00a3ff}.checkconfigcont .section-leftheading1{overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:600;line-height:28px}.checkconfigcont .section{color:var(--Black, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checkconfigcont .svg-icon svg{height:1.25em;width:1.25em}.checkconfigcont .section-leftheading{overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:20px;font-style:normal;font-weight:600;line-height:28px}.checkconfigcont .sub{color:var(--gray-700, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checkconfigcont .subopen{color:var(--black, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checkconfigcont .symbol-circle{margin-left:-6px}.checkconfigcont .checklistlabel{padding:4px 12px;justify-content:center;align-items:center;border-radius:16px;background:var(--gray-100, #F2F4F7)}.checkconfigcont .subtitle{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;letter-spacing:0em;text-align:left;color:#667085}.checkconfigcont .form-control.form-control-solid{display:flex;padding:10px 14px;align-items:center;gap:8px;align-self:stretch;border-radius:8px;border:1px solid var(--gray-500, #D0D5DD);background:var(--white, #FFF);box-shadow:0 1px 2px #1018280d}.checkconfigcont .searchplaceholder{font-family:Inter;font-size:16px;font-style:normal;font-weight:400;line-height:24px}.checkconfigcont .custom-appbox{border-radius:12px}.checkconfigcont input::placeholder{color:#667085!important;opacity:1}.checkconfigcont .checklisttext{color:var(--gray-700, #344054);text-align:center;font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.checkconfigcont .separator{height:1px;align-self:stretch}.checkconfigcont ::ng-deep .mat-form-field-infix{color:#101828;border:1px solid #D0D5DD;box-shadow:0 1px 2px #1018280d;border-radius:8px;font-size:16px;width:100%;padding:10px 14px;font-family:Inter;font-weight:400;width:500px!important;line-height:24px}.checkconfigcont ::ng-deep .storechip{color:#101828;font-size:16px;width:100%;font-family:Inter;font-weight:400;width:780px!important;line-height:24px}.checkconfigcont ::ng-deep .mat-chip{font-family:Inter;font-style:normal;font-weight:500;font-size:14px;line-height:17px;text-align:center;color:#5e6278!important}.checkconfigcont ::ng-deep .mat-chip-list-wrapper .mat-standard-chip{margin:4px}.checkconfigcont ::ng-deep .matChip-store{height:100px;display:block;overflow-y:scroll;overflow-x:hidden}.checkconfigcont ::ng-deep .mat-form-field-appearance-fill .mat-form-field-flex{background-color:#fff!important}.checkconfigcont ::ng-deep .mat-form-field-underline{display:none}.checkconfigcont ::ng-deep .mat-form-field-ripple{display:none}.checkconfigcont .subtext{color:var(--gray-500, #667085);font-family:Inter;font-size:14px;font-weight:400;line-height:20px;align-items:center;gap:8px;align-self:stretch}.checkconfigcont .upload{border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);box-shadow:0 1px 2px #1018280d;display:flex;padding:10px 18px;justify-content:center;align-items:center;gap:8px;flex:1 0 0}.checkconfigcont .upload:hover{background:#f3f8fd!important;border:1px solid var(--gray-300, #D0D5DD)!important}.checkconfigcont .uploadtext{color:var(--gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.checkconfigcont .savedraft{border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);padding:10px 18px;justify-content:center;align-items:center;gap:8px;box-shadow:0 1px 2px #1018280d}.checkconfigcont .savedraft:hover{background:#f3f8fd!important;border:1px solid var(--gray-300, #D0D5DD)!important}.checkconfigcont .savedrafttext{color:var(--gray-700, #344054);font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize}.checkconfigcont .download{border-radius:8px;border:1px solid var(--primary-50, #EAF8FF);background:var(--primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;display:flex;padding:10px 18px;justify-content:center;align-items:center;gap:8px;flex:1 0 0;color:var(--primary-700, #009BF3);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.checkconfigcont .svg-icon1:hover:not(.svg-active){color:#fff}.checkconfigcont .btn-outline{border:1px solid lightgrey!important;padding:calc(.75rem + 1px) calc(1.5rem + 1px)}.checkconfigcont .footertext{color:#000;font-family:Inter;font-size:14px;font-weight:500;line-height:20px;text-align:right}.checkconfigcont .footer1{text-align:end}.checkconfigcont ::ng-deep .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#009ef7!important}.checkconfigcont ::ng-deep .mat-radio-button.mat-accent .mat-radio-inner-circle{background-color:#009ef7!important}.checkconfigcont ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar{background-color:#1da1f21a;color:#009ef7}.checkconfigcont ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb{background-color:#009ef7}.checkconfigcont ::ng-deep th.mat-header-cell:first-of-type,.checkconfigcont ::ng-deep td.mat-cell:first-of-type,.checkconfigcont ::ng-deep td.mat-footer-cell:first-of-type{padding-right:none}.checkconfigcont ::ng-deep .sopTable input{border:none;padding:0!important}.checkconfigcont ::ng-deep .sopTable input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkconfigcont ::ng-deep .sopTable input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}.checkconfigcont ::ng-deep .sopTable input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.checkconfigcont ::ng-deep .card-body-sop{border:1px solid var(--gray-200, #EAECF0);background:var(--white, #FCFCFD);border-radius:6px}.checkconfigcont .schedule{color:var(--gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checkconfigcont .user{color:var(--gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.checkconfigcont .dropdown{margin-left:-9%}.checkconfigcont .pillstyle{color:var(--gray-700, #344054);text-align:center;font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.checkconfigcont .leftcard{position:relative}.checkconfigcont .editques{position:absolute!important;left:12%;transform:translate(-5%);bottom:30px}.checkconfigcont .questiontype{color:var(--primary-700, #009BF3);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;outline:none!important;background-color:#f1faff!important}.checkconfigcont .btn-left{display:inline-block;width:100%;font-size:16px;white-space:nowrap;overflow:hidden!important;text-overflow:ellipsis!important}.checkconfigcont .nav{display:flex;align-items:center;gap:16px;flex:1 0 0;align-self:stretch;--bs-nav-link-color: none}.checkconfigcont .form-control.form-control-solid,.checkconfigcont .form-select.form-select-solid{border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);box-shadow:0 1px 2px #1018280d}.checkconfigcont .checklistturnoff{border-radius:8px;border:1px solid var(--gray-200, #EAECF0);background:var(--white, #FFF);display:flex;padding:16px;align-items:flex-start;align-self:stretch}.checkconfigcont .btn.btn-outline.btn-outline-dashed.btn-outline-default:hover:not(.btn-active){border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);box-shadow:0 1px 2px #1018280d;display:flex;padding:10px 18px;justify-content:center;align-items:center;gap:8px;flex:1 0 0}.checkconfigcont .sopTable input{border:none;padding:0!important}.checkconfigcont .sopTable input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkconfigcont .sopTable input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}.checkconfigcont .sopTable input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.checkconfigcont .option{font-weight:400;display:block;min-height:1.2em;padding:0 2px 1px}.checkconfigcont .card hr{width:-webkit-fill-available}.checkconfigcont .imgnodata1{width:216px;height:245px}.checkconfigcont .editablecontent{display:inline-block;width:230px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important}.checkconfigcont #navfont{font-size:1.15rem!important}.checkconfigcont .imgdata{width:50%;height:50%}.checkconfigcont .imgnodata{width:312px;height:312px;margin-top:-4%}.checkconfigcont .card .card-header{display:flex;justify-content:space-between;align-items:stretch;flex-wrap:wrap;min-height:70px;padding:0 .25rem;background-color:transparent;border-bottom:none}.checkconfigcont ::ng-deep .mat-select{background:#f5f8fa;border-radius:8px}.checkconfigcont ::ng-deep .mat-select-value{height:42px}.checkconfigcont ::ng-deep .multiselect-dropdown .dropdown-btn{border:none!important}.checkconfigcont ::ng-deep .multiselect-dropdown .dropdown-list{border:none;box-shadow:0 1px 5px #959595;margin-left:-12px}.checkconfigcont ::ng-deep .multiselect-dropdown:focus-visible{border:none!important;box-shadow:0 1px 5px #959595;margin-left:-12px;max-height:250px}.checkconfigcont .custom-checkbox{--checkbox-background-checked: white !important;--checkmark-color: #009BF3;--border-color: #009BF3;--border-radius: 4px }.checkconfigcont .form-check.form-check-custom{display:flex;margin:0;height:44px;padding:12px 24px;align-items:center;gap:12px;align-self:stretch}.checkconfigcont .tabsub{color:var(--gray-500, #667085);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.checkconfigcont .selectstore{color:var(--primary-700, #009BF3);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.checkconfigcont .headeralign{color:var(--gray-500, #667085);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}.checkconfigcont .rotate{transform:rotate(180deg);transition:1s}.checkconfigcont .weekstyle{border-radius:20px;background:var(--gray-100, #F2F4F7)}.checkconfigcont ::ng-deep .swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;min-width:2em;height:0em;margin:0 .5em 0 0}.checkconfigcont ::ng-deep .listitem{display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1rem;background-color:#f3f6f9;margin-top:.75rem;border-radius:.42rem}.checkconfigcont ::ng-deep .list{overflow-y:auto}.checkconfigcont ::ng-deep .listitemlabel{font-size:13px!important;font-weight:600;font-family:Inter;color:#7e8299}.checkconfigcont ::ng-deep .swal2-container{padding:.4em!important}.checkconfigcont ::ng-deep .swal2-icon{border:1px solid white!important}.checkconfigcont ::ng-deep body.swal2-toast-shown .swal2-container{width:500px!important}.checkconfigcont ::ng-deep .swal2-popup.swal2-toast .swal2-title{margin:9px 5px auto!important}.checkconfigcont ::ng-deep .label{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}.checkconfigcont ::ng-deep .form-check-input[disabled]~.form-check-label.spocName,.checkconfigcont ::ng-deep .form-check-input:disabled~.form-check-label.spocName{opacity:unset!important}.checkconfigcont tr.mat-header-row{height:56px;border-bottom:1px solid var(--gray-200, #EAECF0);background:var(--gray-25, #FCFCFD)}.checkconfigcont .detectiontext{color:var(--gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.checkconfigcont .alerttext{color:var(--primary-600, #00A3FF);text-align:center;font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px}.checkconfigcont .alertlabel{width:24px;height:24px;padding:4px 0 2px;justify-content:center;align-items:center;border-radius:200px;background:var(--primary-50, #EAF8FF)}.checkconfigcont .create{color:var(--white, #FFF);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.checkconfigcont .createbuttons{padding:10px 18px;justify-content:center;align-items:center;gap:8px;border-radius:8px;border:1px solid var(--primary-600, #00A3FF);background:var(--primary-600, #00A3FF);box-shadow:0 1px 2px #1018280d}.checkconfigcont .alertsinput{border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);box-shadow:0 1px 2px #1018280d;padding:10px 14px;align-items:center;gap:8px}.checkconfigcont .usageerror{display:block;width:255px}.checkconfigcont .reupload{padding:10px 18px!important;justify-content:center;align-items:center;gap:8px;flex:1 0 0;border-radius:8px;border:1px solid var(--primary-600, #00A3FF);background:var(--primary-600, #00A3FF);width:220px;cursor:pointer;box-shadow:0 1px 2px #1018280d}.checkconfigcont .reuploadtext{color:var(--White, #FFF);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize;cursor:pointer}.checkconfigcont .download{border-radius:8px;border:1px solid var(--primary-50, #EAF8FF);background:var(--primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;padding:10px 18px!important;justify-content:center;align-items:center;gap:8px;width:220px}.checkconfigcont .downloadtext{color:var(--primary-700, #009BF3);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.checkconfigcont .assignpadding{padding:0 40px}.checkconfigcont .uploadpadding{padding:0 30% 9px}::ng-deep .swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;min-width:2em;height:0em;margin:0 .5em 0 0}::ng-deep .listitem{display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1rem;background-color:#f3f6f9;margin-top:.75rem;border-radius:.42rem}::ng-deep .question-left{max-height:50vh;overflow:auto;overflow-x:hidden}::ng-deep .toasttitile{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .list{overflow-y:auto}::ng-deep .listitemlabel{font-size:13px!important;font-weight:600;font-family:Inter;color:#7e8299}::ng-deep .swal2-container{padding:.4em!important}::ng-deep .swal2-icon{border:1px solid white!important}::ng-deep body.swal2-toast-shown .swal2-container{width:500px!important}::ng-deep .swal2-popup.swal2-toast .swal2-title{margin:9px 5px auto!important}::ng-deep .label{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .matWidth{margin-left:12px;margin-right:12px}::ng-deep .mat-tooltip{white-space:pre-line}::ng-deep .custom-test{color:var(--gray-700, #344054)!important;text-align:start;font-family:Inter;font-size:12px;font-style:normal;border-radius:8px;box-shadow:0 4px 6px -2px #10182808,0 12px 16px -4px #10182814;font-weight:600;line-height:18px;background:#fff}.checkconfigcont .matChip-store{height:113px;display:block;overflow-y:scroll;overflow-x:hidden}.emailalert{position:relative;height:500px!important;overflow:auto!important;overflow-x:hidden!important}.emailalert1{overflow-y:auto!important;height:10%!important;position:relative}.active-question{color:var(--primary-700, #009BF3);font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;padding:8px 12px;align-items:center;gap:105px;align-self:stretch;border-radius:6px;background:var(--primary-50, #EAF8FF)}.q-btn{color:var(--gray-700, #344054);font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;padding:8px 12px;align-items:center;gap:105px;align-self:stretch;border-radius:6px;background:var(--primary-50, white)}.concise-question{display:inline-block;width:100%;white-space:nowrap;overflow:hidden!important;text-overflow:ellipsis!important;text-align:left}@media screen and (min-width: 1400px){.emailalert{position:relative;height:700px!important;overflow:auto!important;overflow-x:hidden!important}}::ng-deep .swal2-html-container{overflow:hidden!important}.badgeColor{background-color:#fffaeb!important;color:#b54708!important;font-family:Inter;font-size:14px;font-weight:500;line-height:20px;letter-spacing:0em;text-align:center}.config-heading{color:var(--Gray-900, #101828);font-family:Inter;font-size:18px;font-style:normal;font-weight:600;line-height:28px;width:35%}.ps-20{padding-left:7rem!important}.ps-18{padding-left:6.5rem!important}.remove{color:var(--Gray-500, #667085);font-size:12px;font-weight:600;line-height:18px;text-decoration-line:underline;text-transform:capitalize}.chip-container{margin-top:10px}.mat-chip{margin:5px}.dropdown-menu{position:absolute;top:100%;left:0;right:0;background-color:#fff;z-index:1000;display:block;box-sizing:border-box;height:0%}.dropdown-item{padding:8px 12px}.dropdown-item:hover{background-color:#f1f1f1}.dropdown-item input[type=checkbox]{margin-right:10px}.custom-dropdown-menu{border-radius:4px;box-shadow:0 1px 2px #1018280d}.custom-dropdown-item{display:flex;align-items:center}.custom-dropdown-item input{margin-left:10px}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:3px!important}.formSeach{width:95%}.storetext{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;text-transform:lowercase}.position-relative{position:relative!important}.content{background-color:#fff;padding:10px 22px 10px 10px;border-radius:5px;box-shadow:0 0 10px #0000001a}.badge-pill{display:flex;padding:2px 6px 2px 8px;justify-content:center;align-items:center;gap:4px;border-radius:16px;background:var(--Gray-100, #F2F4F7)}.badge-specificdate{max-width:100%;overflow-x:hidden;white-space:normal;display:flex;flex-wrap:wrap}.badge-specificdate .badge{margin-bottom:8px}.bg-color-disabled{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px;font-style:normal;font-weight:400;line-height:20px}a.cursor-default{cursor:default!important;background-color:unset!important}.form-control.form-control-solid.disabled{background-color:#eef3f7!important}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.daterangepicker{display:block!important;top:153.85px!important;left:900px!important;right:0}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}::ng-deep .applyBtn{display:none!important}.wrapper{min-width:200px}.btn-primary{line-height:18px!important}.selectDay{background-color:var(--bs-primary)!important}a.selectDay span{color:#fff!important}.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}}tr th .form-check-label,tr td .form-check-label{color:var(--Gray-700, #344054)!important}:host::ng-deep .schedule .md-drppicker .btn{line-height:10px!important}:host::ng-deep .schedule .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .schedule .md-drppicker.drops-down-right.ltr.show-ranges.shown{top:65px!important}:host::ng-deep .schedule .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;right:-475px!important;left:unset!important;height:400px!important}:host::ng-deep .schedule .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .schedule .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .schedule .md-drppicker td.active,:host::ng-deep .schedule .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .schedule .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .schedule .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .schedule .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep .schedule table th,:host::ng-deep .schedule table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .schedule .md-drppicker td.available.prev,:host::ng-deep .schedule .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .schedule .md-drppicker td.available.next,:host::ng-deep .schedule .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .schedule table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .schedule .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .schedule .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .schedule .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.fontSize{font-size:14px}.margin{margin-top:2px}.w-20{width:20%!important}.w-80{width:80%!important}.approver{color:var(--gray-700, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.line-height{line-height:25px}\n"] }]
1932
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.NgbModal }, { type: i3.TraxService }, { type: i4.ToastService }, { type: i5.GlobalStateService }, { type: i5.PageInfoService }], propDecorators: { fileInput: [{
1933
+ type: ViewChild,
1934
+ args: ['file']
1935
+ }], fileInput1: [{
1936
+ type: ViewChild,
1937
+ args: ['file1']
1938
+ }], clickOutside: [{
1939
+ type: HostListener,
1940
+ args: ["document:click", ["$event"]]
1941
+ }] } });
1942
+ function getWeekNumber(date) {
1943
+ let days = [];
1944
+ let dateDat = dayjs(date).startOf('month');
1945
+ while (dateDat.month() === date.month()) {
1946
+ if (dateDat.format('dddd') === date.format('dddd')) {
1947
+ days.push(dateDat.format('YYYY-MM-DD'));
1948
+ }
1949
+ dateDat = dateDat.add(1, 'day');
1950
+ }
1951
+ let findIndex = days.findIndex((item) => item == date.format('YYYY-MM-DD'));
1952
+ return (findIndex + 1);
1953
+ }
1954
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tsaXN0LWNvbmZpZ3VyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2NoZWNrbGlzdC1jb25maWd1cmUvY2hlY2tsaXN0LWNvbmZpZ3VyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2NoZWNrbGlzdC1jb25maWd1cmUvY2hlY2tsaXN0LWNvbmZpZ3VyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdySCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUc3QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7OztBQUN4QyxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFPaEMsTUFBTSxPQUFPLDJCQUEyQjtJQTJFakI7SUFBMkM7SUFBZ0M7SUFBc0I7SUFBd0I7SUFBK0I7SUFBMkI7SUFBOEI7SUExRW5OLFNBQVMsQ0FBYztJQUN0QixVQUFVLENBQWM7SUFDNUMsS0FBSyxHQUFPLEtBQUssQ0FBQztJQUNsQixhQUFhLENBQUs7SUFDbEIsT0FBTyxDQUFLO0lBQ1osSUFBSSxHQUFXLFFBQVEsQ0FBQztJQUN4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Q0FBQztBQUV6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgVHJheHBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vdHJheHBvcHVwL3RyYXhwb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmF4U3RvcmVDb21wb25lbnQgfSBmcm9tICcuLi90cmF4LXN0b3JlL3RyYXgtc3RvcmUuY29tcG9uZW50JztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlJztcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuaW1wb3J0IGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSxQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHtTdWJqZWN0LCB0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xyXG5kYXlqcy5leHRlbmQoY3VzdG9tUGFyc2VGb3JtYXQpO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY2hlY2tsaXN0LWNvbmZpZ3VyZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrbGlzdC1jb25maWd1cmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jaGVja2xpc3QtY29uZmlndXJlLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hlY2tsaXN0Q29uZmlndXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZScpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZTEnKSBmaWxlSW5wdXQxITogRWxlbWVudFJlZjtcclxuICBkYXlqczphbnkgPSBkYXlqcztcclxuICBzZWxlY3RlZERhdGVzOmFueTtcclxuICBtaW5EYXRlOmFueTtcclxuICB0eXBlOiBzdHJpbmcgPSAnY3VzdG9tJztcclxuICBvYmo6IGFueTtcclxuICBjb25maWdEYXRhOiBhbnk7XHJcbiAgdGFibGVEYXRhOiBhbnkgPSBbXTtcclxuICB0YWJsZUxvYWRpbmc6IGFueSA9IGZhbHNlO1xyXG4gIHRhYmxlRGlzcGxheWVkQ29sdW1uczogYW55ID0gW1wibmFtZVwiLCBcInJvbGVcIiwgXCJlbWFpbFwiXVxyXG4gIHBhZ2VWYWx1ZTogYW55ID0gW107XHJcbiAgb2Zmc2V0OiBudW1iZXIgPSAwO1xyXG4gIHJlY29yZHNUb3RhbDogYW55ID0gMDtcclxuICBzaXplOiBhbnkgPSA1O1xyXG4gIG9mZnNldHZhbHVlOiBudW1iZXIgPSAwO1xyXG4gIHBhZ2VEaXNwbGF5OiBhbnkgPSBbXTtcclxuICBuZXh0YnRuOiBib29sZWFuID0gdHJ1ZTtcclxuICBiYWNrYnRuOiBib29sZWFuID0gdHJ1ZTtcclxuICBjdXJyZW50VmFsdWU6IGFueSA9IDE7XHJcbiAgdGFibGVGaWx0ZXI6IGFueSA9ICcnO1xyXG4gIHBhZ2VTdGFydDogYW55ID0gMDtcclxuICBwYWdlRW5kOiBhbnkgPSAwO1xyXG4gIHJlY29yZHNDb3VudDogYW55O1xyXG4gIHBhZ2luYXRpb25TaXplID0gWzUsIDEwLCAxNSwyMF07XHJcbiAgdXNlckRhdGE6IGFueSA9IFtdO1xyXG4gIGV4Y2VsVXNlckRhdGE6IGFueSA9IFtdO1xyXG4gIHNob3dJbWFnZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgbW9udGhEYXk6IGFueTtcclxuICBzaG93OiBudW1iZXIgPSAwO1xyXG4gIHBvcFVwVGl0bGU6IGFueTtcclxuICBzaG93SW50cm86IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNlYXJjaFVzZXI6IGFueTtcclxuICBhZGRVc2VyRm9ybTogYm9vbGVhbjtcclxuICBzb3BTdG9yZXM6IGFueSA9IFtdO1xyXG4gIHNlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVycm9ybXNnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3RhcnRUaW1lOiBhbnk7XHJcbiAgZW5kVGltZTogYW55O1xyXG4gIGNoZWNrbGlzdElkOiBhbnk7XHJcbiAgcmV1cGxvYWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RBbGxVc2VyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcmVtb3ZlVXNlcnM6YW55ID0gW107XHJcbiAgc2VsZWN0ZWREYXlzOiBhbnlbXSA9IFtdO1xyXG4gIHNob3dSYW5nZVZhbHVlOmJvb2xlYW4gPSBmYWxzZTtcclxuICBzdWJtaXR0ZWREYXRlczogbnVtYmVyW10gPSBbXTtcclxuICBtb250aERhdGU6c3RyaW5nPScnO1xyXG4gIHNwZWNpZmljOmJvb2xlYW4gPSBmYWxzZTtcclxuICBkYXRlOiBhbnk7XHJcbiAgc2VjdGlvbnM6IGFueSA9IFtdO1xyXG4gIE1vbnRod2Vla051bWJlcjogc3RyaW5nO1xyXG4gIHBvcHVwQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgdmFsaWRUaW1lOmJvb2xlYW4gPSB0cnVlO1xyXG4gIGRpc2FibGVkUXVlc3Rpb246Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3djb25maWc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dhZHZhbmNlOiBib29sZWFuID0gdHJ1ZTtcclxuICByZXBlYXRUeXBlOnN0cmluZz0nJztcclxuICBzaG93RHJvcERvd246Ym9vbGVhbj0gZmFsc2U7XHJcbiAgc2VsZWN0ZWREYXRlOiBhbnk9IFtdO1xyXG4gIGRhdGVzOiBudW1iZXJbXSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDMxIH0sIChfLCBpKSA9PiBpICsgMSk7IC8vIEFycmF5IGZyb20gMSB0byAzMVxyXG4gIHNlbGVjdGVkRGF0ZUxpc3Q6YW55ID0gW107XHJcbiAgc2VsZWN0ZWRTdGFydERhdGU6YW55O1xyXG4gIG1pblN0YXJ0RGF0ZTphbnk7XHJcbiAgc2VsZWN0ZWRFbmREYXRlOmFueTtcclxuICBtaW5FbmREYXRlOmFueTtcclxuICBjbGllbnRJZDphbnk7XHJcbiAgYWxlcnRVc2Vyczphbnk9W107XHJcbiAgem9uZUxpc3Q6YW55ID0gW107XHJcbiAgbG9hZGluZzpib29sZWFuID0gdHJ1ZTtcclxuICBhcHByb3ZlOmJvb2xlYW4gPSBmYWxzZTtcclxuICByZW1haW5kZXI6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGV0YWNoID0gbmV3IFN1YmplY3QoKTtcclxuICB0aW1lTG9vcDphbnlbXSA9IFsxXVxyXG4gIG1pbnV0ZXM6IG51bWJlcltdID0gWzMwLDQ1LDYwLDc1LDkwXTtcclxuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBjaGFuZ2VkZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgcm91dGVyOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSByb3V0ZTogUm91dGVyLHByaXZhdGUgZGlhbG9nOk5nYk1vZGFsLHByaXZhdGUgU29wU2VydmljZTpUcmF4U2VydmljZSxwcml2YXRlIHRvYXN0OlRvYXN0U2VydmljZSxwcml2YXRlIGdzOkdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIHBhZ2VJbmZvOlBhZ2VJbmZvU2VydmljZSkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgc3RvcmFnZURldGFpbHMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoZWFkZXItZmlsdGVycycpIHx8ICd7fScpO1xyXG4gICAgaWYoIXN0b3JhZ2VEZXRhaWxzPy5jbGllbnQpIHtcclxuICAgICAgc3RvcmFnZURldGFpbHMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjbGllbnQtZGV0YWlscycpIHx8ICd7fScpO1xyXG4gICAgICBzdG9yYWdlRGV0YWlscy5jbGllbnQgPSBzdG9yYWdlRGV0YWlscy5jbGllbnRJZDtcclxuICAgIH1cclxuICAgIGlmKHN0b3JhZ2VEZXRhaWxzPy5jbGllbnQpIHtcclxuICAgICAgdGhpcy5jbGllbnRJZCA9IHN0b3JhZ2VEZXRhaWxzLmNsaWVudDtcclxuICAgICAgdGhpcy5yb3V0ZXIucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMudHlwZSA9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgdGhpcy5vYmogPSB7XHJcbiAgICAgICAgICAgIGNoZWNrTGlzdElkOiBwYXJhbXMuY2hlY2tMaXN0SWQsXHJcbiAgICAgICAgICAgIGNsaWVudElkOnRoaXMuY2xpZW50SWRcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudHlwZSA9ICdjdXN0b20nXHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVkUXVlc3Rpb24gPSBwYXJhbXMuZGlzYWJsZWRRdWVzdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm9iaiA9IHtcclxuICAgICAgICAgICAgdHlwZTogcGFyYW1zLnR5cGUsXHJcbiAgICAgICAgICAgIGNsaWVudElkOnRoaXMuY2xpZW50SWRcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudHlwZSA9IHBhcmFtcy50eXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5zZXRQYWdlRGF0YSgpO1xyXG4gICAgICB0aGlzLkdldENvbmZpZygpO1xyXG4gICAgICB0aGlzLmdldENsaWVudFVzZXIoKTtcclxuICAgICAgdGhpcy5nZXRab25lTGlzdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRldGFjaC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXRhY2guY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIk1hbmFnZSBDaGVja2xpc3RcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKFwiQXV0b21hdGUgb3IgY3JlYXRlIGNoZWNrbGlzdHMgdG8gaW1wcm92ZSBvcGVyYXRpb25hbCBlZmZpY2llbmN5XCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHsgdGl0bGU6IFwiVGFuZ28gVHJheFwiLCBwYXRoOiBcIi9tYW5hZ2UvdHJheC9kYXNoYm9hcmRcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogXCJUYW5nbyBUcmF4XCIsIHBhdGg6IFwiL21hbmFnZS90cmF4L2Rhc2hib2FyZFwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH1cclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgR2V0Q29uZmlnKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubW9udGhEYXRlID0gJyc7XHJcbiAgICB0aGlzLm1vbnRoRGF5ID0gJyc7XHJcbiAgICB0aGlzLlNvcFNlcnZpY2UuZ2V0Y29uZmlnKHRoaXMub2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSgocmVzOmFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZXMuZGF0YS5jaGVja0xpc3REZXRhaWxzLmNoZWNrTGlzdFR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0SWQgPSByZXMuZGF0YS5jaGVja0xpc3REZXRhaWxzLl9pZDtcclxuICAgICAgICAgIHRoaXMudHlwZSA9IHJlcy5kYXRhLmNoZWNrTGlzdERldGFpbHMuY2hlY2tMaXN0VHlwZTtcclxuICAgICAgICAgIHRoaXMuY29uZmlnRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVVc2VycyA9IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5yZW1vdmVkVXNlcnMgfHwgW107XHJcbiAgICAgICAgICB0aGlzLmFwcHJvdmUgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hcHByb3Zlcj8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZW1haW5kZXIgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8ucmVtYWluZGVyPy5sZW5ndGggPyB0cnVlOiBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudGltZUxvb3AgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8ucmVtYWluZGVyPy5sZW5ndGggPyBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5yZW1haW5kZXIubGVuZ3RoIH0sIChfLCBpKSA9PiBpKSA6IFswXTtcclxuICAgICAgICAgIC8vIHRoaXMuem9uZXMgPSB0aGlzLmNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LmRldGVjdGlvbkFyZWEgfHwgW107XHJcbiAgICAgICAgICB0aGlzLnNlY3Rpb25zID0gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2VjdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF5cyA9IHRoaXMuY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGVXZWVrRGF5cyB8fCBbXTtcclxuICAgICAgICAgIHRoaXMuZW5kVGltZSA9IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZUVuZFRpbWUgPyB0aGlzLmRheWpzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZUVuZFRpbWUsICAnaDptbSBBJykuZm9ybWF0KCdISDptbScpIDogJzIyOjAwJztcclxuICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlU3RhcnRUaW1lID8gdGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGVTdGFydFRpbWUsICdoOm1tIEEnKS5mb3JtYXQoJ0hIOm1tJykgOiAnMTA6MDAnO1xyXG4gICAgICAgICAgdGhpcy5yZXBlYXRUeXBlID0gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlID09ICdkYWlseScgPyAnRGF5JyA6IFsnd2Vla2x5Jywnd2Vla2RheSddLmluY2x1ZGVzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZSkgPyAnV2VlaycgOiAnTW9udGgnO1xyXG4gICAgICAgICAgaWYoIXRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZUVuZFRpbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVFbmRUaW1lID0gXCIxMDowMCBQTVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZighdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlU3RhcnRUaW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlU3RhcnRUaW1lID0gXCIxMDowMCBBTVwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIGlmICh0aGlzLmNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LmFsZXJ0Py5hbGVydHNUby5sZW5ndGgpIHtcclxuICAgICAgICAgIC8vICAgdGhpcy5lbWFpbExpc3QgPSB0aGlzLmNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LmFsZXJ0Py5hbGVydHNUbztcclxuICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSAhPSAnb25ldGltZScpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmFuZ2VWYWx1ZSA9IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdTdGFydERhdGUgIT0gJycgJiYgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSAhPSBudWxsID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnU3RhcnREYXRlICE9ICcnICYmIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdTdGFydERhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ1N0YXJ0RGF0ZSA9IHRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7IFxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdGFydERhdGUgPSB7c3RhcnREYXRlOnRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyksZW5kRGF0ZTp0aGlzLmRheWpzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdTdGFydERhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpfTtcclxuICAgICAgICAgICAgICB0aGlzLm1pblN0YXJ0RGF0ZSA9IHRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSkuZm9ybWF0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ0VuZERhdGUgIT0gJycgJiYgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ0VuZERhdGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ0VuZERhdGUgPSB0aGlzLmRheWpzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdFbmREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRW5kRGF0ZSA9IHtzdGFydERhdGU6dGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyksZW5kRGF0ZTp0aGlzLmRheWpzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdFbmREYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKX07XHJcbiAgICAgICAgICAgICAgdGhpcy5taW5FbmREYXRlID0gdGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZSkuZm9ybWF0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZSA9PSAnbW9udGhseScpIHtcclxuICAgICAgICAgICAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGVSZXBlYXRlZE1vbnRoU2V0dXAgPT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGVSZXBlYXRlZE1vbnRoV2Vlay5zcGxpdCgnICcpPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubW9udGhEYXRlID0gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlUmVwZWF0ZWRNb250aFdlZWsuc3BsaXQoJyAnKVswXTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tb250aERheSA9IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkTW9udGhXZWVrLnNwbGl0KCcgJylbMV07XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFdlZWsgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYodGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlUmVwZWF0ZWRNb250aFNldHVwID09ICdzcGVjaWZpYycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkRGF0ZXMgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc3BlY2lmaWNEYXRlIHx8IFtdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYodGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlID09ICdyYW5nZScgJiYgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc3BlY2lmaWNEYXRlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3BlY2lmaWMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlTGlzdCA9IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNwZWNpZmljRGF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlID09ICdvbmV0aW1lJykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUgPyB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUgOiBkYXlqcygpLmZvcm1hdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSB7c3RhcnREYXRlOnRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVEYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKSxlbmREYXRlOnRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVEYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKX07XHJcbiAgICAgICAgICAgIHRoaXMubWluRGF0ZSA9IHRoaXMuZGF5anMoKS5mb3JtYXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudXNlckRldGFpbHMoKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgaWYgKGVycm9yLmNvZGUgPT0gNDAzKSB7XHJcbiAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZXJyb3I0MDMnXSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhY2NvcmRpYW4oaW5kZXg6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2hvdyA9PSBpbmRleCkge1xyXG4gICAgICB0aGlzLnNob3cgPSAtMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvdyA9IGluZGV4O1xyXG5cclxuICAgIH1cclxuICB9XHJcbiAgY29uZmlnYWNjb3JkaWFuKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Y29uZmlnID0gIXRoaXMuc2hvd2NvbmZpZztcclxuICB9XHJcbiAgYWR2YW5jZWFjY29yZGlhbigpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd2FkdmFuY2UgPSAhdGhpcy5zaG93YWR2YW5jZTtcclxuICB9XHJcbiAgQ2hlY2tsaXN0KCkge1xyXG4gICAgLy8gdGhpcy5tb2JpbGV1c2FnZWRldGVjdGlvbiA9IHRydWU7XHJcbiAgICAvLyB0aGlzLnN0b3Jlb3BlbmFuZGNsb3NlZGV0ZWN0aW9uID0gZmFsc2U7XHJcbiAgfVxyXG4gIG9taXRfc3BlY2lhbF9jaGFyKGV2ZW50OiBhbnkpIHtcclxuICAgIHZhciBrO1xyXG4gICAgayA9IGV2ZW50LmNoYXJDb2RlOyAgLy8gICAgICAgICBrID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxyXG4gICAgcmV0dXJuIChrID09IDggfHwgayA9PSAzMiB8fCAoayA+PSA0OCAmJiBrIDw9IDU3KSk7XHJcblxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVMaW1pdChldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlIDwgMTUpIHtcclxuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XHJcbiAgICAgIHRoaXMuZXJyb3Jtc2cgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hbGVydC51c2FnZUV4Y2VlZHMgPSAnJztcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuZXJyb3Jtc2cgPSBmYWxzZTtcclxuXHJcbiAgfVxyXG5cclxuICBvbkZpbGVVcGxvYWQoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5jdXJyZW50VmFsdWUgPSAxO1xyXG4gICAgdGhpcy5yZXVwbG9hZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51c2VyRGF0YSA9IHRoaXMuZXhjZWxVc2VyRGF0YSA9IFtdO1xyXG4gICAgbGV0IGRhdGE6IGFueTtcclxuICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gPERhdGFUcmFuc2Zlcj4oZXZlbnQudGFyZ2V0KTtcclxuICAgIGxldCBpc0V4Y2VsRmlsZSA9ICEhdGFyZ2V0LmZpbGVzWzBdLm5hbWUubWF0Y2goLygueGxzfC54bHN4KS8pO1xyXG4gICAgbGV0IGVycm9yOmFueSA9IFtdO1xyXG5cclxuICAgIGlmIChpc0V4Y2VsRmlsZSkge1xyXG4gICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRhcmdldC5maWxlc1swXSk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYnN0cjogc3RyaW5nID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC5yZWFkKGJzdHIsIHsgdHlwZTogJ2JpbmFyeScgfSk7XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgIGRhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MpO1xyXG5cclxuICAgICAgICBpZighZGF0YS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnUGxlYXNlIFVwbG9hZCBhIFZhbGlkIGZpbGUuJylcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKChpdGVtOmFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuICgoaXRlbT8uc3RvcmVOYW1lICYmIGl0ZW0/LnN0b3JlTmFtZS50cmltKCkgIT0gJycgJiYgaXRlbT8uc3RvcmVOYW1lLnRyaW0oKSAhPSBudWxsKSB8fCAoaXRlbT8udXNlck5hbWUgJiYgaXRlbT8udXNlck5hbWUudHJpbSgpICE9ICcnICYmIGl0ZW0/LnVzZXJOYW1lLnRyaW0oKSAhPSBudWxsKSB8fCAoaXRlbT8udXNlckVtYWlsICYmIGl0ZW0/LnVzZXJFbWFpbC50cmltKCkgIT0gJycgJiYgaXRlbT8udXNlckVtYWlsLnRyaW0oKSAhPSBudWxsKSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIFxyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55LGluZGV4OmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQ/LnVzZXJFbWFpbCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LnVzZXJFbWFpbCA9IGVsZW1lbnQ/LnVzZXJFbWFpbC5yZXBsYWNlKC9cXHMvZywnJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKGVsZW1lbnQuc3RvcmVOYW1lICYmIGVsZW1lbnQuc3RvcmVOYW1lLnRyaW0oKSA9PSAnJykgfHwgZWxlbWVudC5zdG9yZU5hbWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhpbmRleCk7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgU3RvcmUgTmFtZSAtIEEke2luZGV4KzJ9YClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICgoZWxlbWVudC51c2VyRW1haWwgJiYgZWxlbWVudC51c2VyRW1haWwudHJpbSgpID09ICcnKSB8fCBlbGVtZW50LnVzZXJFbWFpbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgdXNlckVtYWlsIC0gQiR7aW5kZXgrMn1gKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKChlbGVtZW50LnVzZXJOYW1lICYmIGVsZW1lbnQudXNlck5hbWUudHJpbSgpID09ICcnKSB8fCBlbGVtZW50LnVzZXJOYW1lID09IG51bGwpIHtcclxuICAgICAgICAgICAgZXJyb3IucHVzaChgSW52YWxpZCBVc2VyIE5hbWUgLSBDJHtpbmRleCsyfWApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudD8udXNlckVtYWlsICYmICFlbGVtZW50LnVzZXJFbWFpbC5tYXRjaCgvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kLykpIHtcclxuICAgICAgICAgICAgZXJyb3IucHVzaChgSW52YWxpZCB1c2VyRW1haWwgLSBCJHtpbmRleCsyfWApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgY2hlY2tVc2VySW5kZXggPSB0aGlzLnVzZXJEYXRhLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtLnVzZXJFbWFpbCA9PSBlbGVtZW50LnVzZXJFbWFpbCk7XHJcbiAgICAgICAgICBpZiAoY2hlY2tVc2VySW5kZXggIT0gLTEgJiYgKHRoaXMudXNlckRhdGFbY2hlY2tVc2VySW5kZXhdPy51c2VyTmFtZSAhPSBudWxsICYmIGVsZW1lbnQ/LnVzZXJOYW1lICE9IG51bGwgJiYgdGhpcy51c2VyRGF0YVtjaGVja1VzZXJJbmRleF0/LnVzZXJOYW1lPy50cmltKCkubGVuZ3RoICYmIGVsZW1lbnQ/LnVzZXJOYW1lPy50cmltKCkubGVuZ3RoICYmIHRoaXMudXNlckRhdGFbY2hlY2tVc2VySW5kZXhdPy51c2VyTmFtZT8udHJpbSgpLnRvTG93ZXJDYXNlKCkgIT0gZWxlbWVudD8udXNlck5hbWU/LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICBlcnJvci5wdXNoKGBTYW1lIEVtYWlsIHdpdGggRGlmZmVyZW50IHVzZXJzIC0gQiR7aW5kZXgrMn0sQiR7Y2hlY2tVc2VySW5kZXggKyAyfWApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy51c2VyRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgc3RvcmVOYW1lOiBlbGVtZW50Py5zdG9yZU5hbWUsXHJcbiAgICAgICAgICAgIHVzZXJOYW1lOiBlbGVtZW50Py51c2VyTmFtZT8udHJpbSgpLFxyXG4gICAgICAgICAgICB1c2VyRW1haWw6IGVsZW1lbnQ/LnVzZXJFbWFpbD8udG9Mb3dlckNhc2UoKT8udHJpbSgpLFxyXG4gICAgICAgICAgICB1c2VyUGhvbmU6IGVsZW1lbnQ/LnVzZXJQaG9uZSxcclxuICAgICAgICAgICAgY2hlY2tGbGFnOiBlbGVtZW50Py5jaGVjayA/IGVsZW1lbnQuY2hlY2sgOiBmYWxzZSxcclxuICAgICAgICAgICAgY2l0eTogZWxlbWVudD8uY2l0eVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHN0b3JlTm90RXhpc3RzKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh1c2VyTm90RXhpc3RzKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXJyb3IubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCBwb3B1cGNvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlwcm9wOiBmYWxzZSxcclxuICAgICAgICAgICAgaW1hZ2VzcmM6ICBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCI+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0ZFRjBDN1wiLz48cGF0aCBkPVwiTTI3Ljk5OTggMjQuMDAxMlYyOC4wMDEyTTI3Ljk5OTggMzIuMDAxMkgyOC4wMDk4TTI2LjI4OTggMTguODYxMkwxNy44MTk4IDMzLjAwMTJDMTcuNjQ1MSAzMy4zMDM2IDE3LjU1MjcgMzMuNjQ2NSAxNy41NTE4IDMzLjk5NTdDMTcuNTUwOCAzNC4zNDQ5IDE3LjY0MTMgMzQuNjg4MyAxNy44MTQyIDM0Ljk5MTdDMTcuOTg3MSAzNS4yOTUxIDE4LjIzNjUgMzUuNTQ3OSAxOC41Mzc1IDM1LjcyNUMxOC44Mzg1IDM1LjkwMjEgMTkuMTgwNiAzNS45OTczIDE5LjUyOTggMzYuMDAxMkgzNi40Njk4QzM2LjgxOSAzNS45OTczIDM3LjE2MTEgMzUuOTAyMSAzNy40NjIxIDM1LjcyNUMzNy43NjMxIDM1LjU0NzkgMzguMDEyNCAzNS4yOTUxIDM4LjE4NTQgMzQuOTkxN0MzOC4zNTgzIDM0LjY4ODMgMzguNDQ4OCAzNC4zNDQ5IDM4LjQ0NzggMzMuOTk1N0MzOC40NDY4IDMzLjY0NjUgMzguMzU0NCAzMy4zMDM2IDM4LjE3OTggMzMuMDAxMkwyOS43MDk4IDE4Ljg2MTJDMjkuNTMxNSAxOC41NjczIDI5LjI4MDUgMTguMzI0MyAyOC45ODEgMTguMTU1N0MyOC42ODE0IDE3Ljk4NyAyOC4zNDM1IDE3Ljg5ODQgMjcuOTk5OCAxNy44OTg0QzI3LjY1NiAxNy44OTg0IDI3LjMxODEgMTcuOTg3IDI3LjAxODYgMTguMTU1N0MyNi43MTkxIDE4LjMyNDMgMjYuNDY4IDE4LjU2NzMgMjYuMjg5OCAxOC44NjEyWlwiIHN0cm9rZT1cIiNEQzY4MDNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0ZGRkFFQlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+PC9zdmc+YCxcclxuICAgICAgICAgICAgdGl0bGU6IGBJbnZhbGlkIGRldGFpbHMhYCxcclxuICAgICAgICAgICAgY29udGVudDogYFBsZWFzZSBwcm92aWRlIGNvcnJlY3QgYW5kIGNvbXBsZXRlIHN0b3JlIGluZm9ybWF0aW9uLmAsXHJcbiAgICAgICAgICAgIGJ1dHRvbnR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIGVycm9yOmVycm9yXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFRyYXhwb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgICAgIGNlbnRlcmVkOnRydWUsc2l6ZTonbWQnXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gcG9wdXBjb250ZW50O1xyXG4gICAgICAgICAgZGlhbG9nUmVmLnJlc3VsdC50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYocmVzICE9ICdyZXVwbG9hZCcpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy5maWxlSW5wdXQxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVJbnB1dDEubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnJldXBsb2FkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICBsZXQgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2t0X2FjY291bnRfdGVhbV9zaXplX3NlbGVjdF8yJyk7XHJcbiAgICAgICAgICAgICAgZWxlPy5jbGljaygpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAvLyB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyb3Iuam9pbignICcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVVzZXJEZXRhaWxzKGZhbHNlKTtcclxuICAgICAgICBpZih0aGlzLmZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmZpbGVJbnB1dDEpIHtcclxuICAgICAgICAgIHRoaXMuZmlsZUlucHV0MS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMuZmlsZUlucHV0MSkge1xyXG4gICAgICAgIHRoaXMuZmlsZUlucHV0MS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdQbGVhc2UgVXBsb2FkIGEgRXhjZWwgZmlsZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVVc2VyRGV0YWlscyhkZWw/OmFueSkge1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgaWQ6IHRoaXMuY2hlY2tsaXN0SWQsXHJcbiAgICAgIGFzc2lnbmVkVXNlcnM6IHRoaXMudXNlckRhdGEsXHJcbiAgICAgIHVwbG9hZFVzZXI6IHRydWUsXHJcbiAgICAgIHR5cGU6IHRoaXMub2JqPy50eXBlICYmIFsnbW9iaWxldXNhZ2VkZXRlY3Rpb24nLCdzdG9yZW9wZW5hbmRjbG9zZSddLmluY2x1ZGVzKHRoaXMub2JqLnR5cGUpID8gdGhpcy5vYmoudHlwZSA6ICcnLFxyXG4gICAgICAuLi4oZGVsKSA/IHtkZWxldGU6ZmFsc2V9IDoge30sXHJcbiAgICAgIGNsaWVudElkOnRoaXMuY2xpZW50SWRcclxuICAgIH1cclxuICAgIHRoaXMuU29wU2VydmljZS52YWxpZGF0ZVVzZXIocGFyYW1zKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgbGV0IHZhbGlkYXRlOkJvb2xlYW4gPSB0cnVlO1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnRGF0YS51cGxvYWRVc2VyID0gdHJ1ZTtcclxuICAgICAgICBpZiAocmVzPy5kYXRhPy5FeGlzdHNFbWFpbD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QocmVzPy5kYXRhPy5FeGlzdHNFbWFpbC5qb2luKCcsICcpICsgJyAnICsgcmVzPy5kYXRhPy5tZXNzYWdlKTtcclxuICAgICAgICAgIGlmKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKHRoaXMuZmlsZUlucHV0MSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVJbnB1dDEubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXM/LmRhdGE/LmlkKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5faWQgPSByZXMuZGF0YS5pZDtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0SWQgPSByZXMuZGF0YS5pZDtcclxuICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFzc2lnbmVkVXNlcnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS51cGxvYWRVc2VyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudXNlckRldGFpbHMoKTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChyZXM/LmRhdGE/LmRvbWFpbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGVtYWlsID0gcmVzPy5kYXRhPy5kb21haW4ubWFwKChpdGVtOmFueSkgPT4gaXRlbS5lbWFpbClcclxuICAgICAgICAgICAgLy8gKycgJysnPGEgaHJlZj1cInByb2ZpbGUvZG9tYWluc1wiPkFkZCBkb21haW48L2E+J1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZW1haWwuam9pbignLCAnKSArICcgJyArICdEb21haW4gaXMgbm90IEV4aXN0cy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAocmVzPy5kYXRhPy51c2VyPy5sZW5ndGggJiYgcmVzPy5kYXRhPy5zdG9yZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBwb3B1cGNvbnRlbnQ7XHJcbiAgICAgICAgICAgIGxldCBzdG9yZTogYW55ID0gW107XHJcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbjogYW55ID0gW107XHJcbiAgICAgICAgICAgIGxldCBpbmFjdGl2ZVN0b3JlOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgc3RvcmUgPSByZXMuZGF0YS5zdG9yZS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtLm1lc3NhZ2UgPT0gJyc7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaW5hY3RpdmVTdG9yZSA9IHJlcy5kYXRhLnN0b3JlLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubWVzc2FnZSA9PSAnc3RvcmUgaXMgaW5hY3RpdmUnXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbG9jYXRpb24gPSByZXMuZGF0YS5zdG9yZS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtLm1lc3NhZ2UgIT0gJycgJiYgaXRlbS5tZXNzYWdlICE9ICdzdG9yZSBpcyBpbmFjdGl2ZSc7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc3RvcmUgPSBbLi4ubmV3IFNldChzdG9yZS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5zdG9yZSkpXTtcclxuICAgICAgICAgICAgaW5hY3RpdmVTdG9yZSA9IFsuLi4gbmV3IFNldChpbmFjdGl2ZVN0b3JlLm1hcCgoaXRlbTphbnkpID0+IGl0ZW0uc3RvcmUpKV07XHJcbiAgICAgICAgICAgIGxvY2F0aW9uID0gWy4uLm5ldyBTZXQobG9jYXRpb24ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uc3RvcmUpKV07XHJcbiAgICAgICAgICAgIGlmIChzdG9yZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBgTmV3IFN0b3JlIGZvdW5kIGluIHVwbG9hZGVkIGZpbGVgXHJcbiAgICAgICAgICAgICAgaWYoaW5hY3RpdmVTdG9yZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRpdGxlID0gYE5ldyBTdG9yZSBhbmQgSW5hY3RpdmUgU3RvcmUgZm91bmQgaW4gdXBsb2FkZWQgZmlsZWBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcG9wdXBjb250ZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheXByb3A6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW1hZ2VzcmM6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRkVGMEM3XCIvPjxwYXRoIGQ9XCJNMjcuOTk5OCAyNC4wMDEyVjI4LjAwMTJNMjcuOTk5OCAzMi4wMDEySDI4LjAwOThNMjYuMjg5OCAxOC44NjEyTDE3LjgxOTggMzMuMDAxMkMxNy42NDUxIDMzLjMwMzYgMTcuNTUyNyAzMy42NDY1IDE3LjU1MTggMzMuOTk1N0MxNy41NTA4IDM0LjM0NDkgMTcuNjQxMyAzNC42ODgzIDE3LjgxNDIgMzQuOTkxN0MxNy45ODcxIDM1LjI5NTEgMTguMjM2NSAzNS41NDc5IDE4LjUzNzUgMzUuNzI1QzE4LjgzODUgMzUuOTAyMSAxOS4xODA2IDM1Ljk5NzMgMTkuNTI5OCAzNi4wMDEySDM2LjQ2OThDMzYuODE5IDM1Ljk5NzMgMzcuMTYxMSAzNS45MDIxIDM3LjQ2MjEgMzUuNzI1QzM3Ljc2MzEgMzUuNTQ3OSAzOC4wMTI0IDM1LjI5NTEgMzguMTg1NCAzNC45OTE3QzM4LjM1ODMgMzQuNjg4MyAzOC40NDg4IDM0LjM0NDkgMzguNDQ3OCAzMy45OTU3QzM4LjQ0NjggMzMuNjQ2NSAzOC4zNTQ0IDMzLjMwMzYgMzguMTc5OCAzMy4wMDEyTDI5LjcwOTggMTguODYxMkMyOS41MzE1IDE4LjU2NzMgMjkuMjgwNSAxOC4zMjQzIDI4Ljk4MSAxOC4xNTU3QzI4LjY4MTQgMTcuOTg3IDI4LjM0MzUgMTcuODk4NCAyNy45OTk4IDE3Ljg5ODRDMjcuNjU2IDE3Ljg5ODQgMjcuMzE4MSAxNy45ODcgMjcuMDE4NiAxOC4xNTU3QzI2LjcxOTEgMTguMzI0MyAyNi40NjggMTguNTY3MyAyNi4yODk4IDE4Ljg2MTJaXCIgc3Ryb2tlPVwiI0RDNjgwM1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRkZGQUVCXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz4nLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgY29udGVudDogYFRoaXMgQ1NWIGNvbnRhaW5zIGEgbmV3IHN0b3JlLiBBZGQgbmV3IHN0b3JlcyBpbiB0aGUgU3RvcmUgTWFuYWdlbWVudCB1bmRlciBNYW5hZ2UgbWVudS5gLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9udHlwZTogJ0FkZHN0b3JlJyxcclxuICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBzdG9yZS5qb2luKCcsICcpLFxyXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLmpvaW4oKSxcclxuICAgICAgICAgICAgICAgIGluYWN0aXZlU3RvcmVzOmluYWN0aXZlU3RvcmUuam9pbigpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYoaW5hY3RpdmVTdG9yZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBwb3B1cGNvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5cHJvcDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpbWFnZXNyYzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNGRUYwQzdcIi8+PHBhdGggZD1cIk0yNy45OTk4IDI0LjAwMTJWMjguMDAxMk0yNy45OTk4IDMyLjAwMTJIMjguMDA5OE0yNi4yODk4IDE4Ljg2MTJMMTcuODE5OCAzMy4wMDEyQzE3LjY0NTEgMzMuMzAzNiAxNy41NTI3IDMzLjY0NjUgMTcuNTUxOCAzMy45OTU3QzE3LjU1MDggMzQuMzQ0OSAxNy42NDEzIDM0LjY4ODMgMTcuODE0MiAzNC45OTE3QzE3Ljk4NzEgMzUuMjk1MSAxOC4yMzY1IDM1LjU0NzkgMTguNTM3NSAzNS43MjVDMTguODM4NSAzNS45MDIxIDE5LjE4MDYgMzUuOTk3MyAxOS41Mjk4IDM2LjAwMTJIMzYuNDY5OEMzNi44MTkgMzUuOTk3MyAzNy4xNjExIDM1LjkwMjEgMzcuNDYyMSAzNS43MjVDMzcuNzYzMSAzNS41NDc5IDM4LjAxMjQgMzUuMjk1MSAzOC4xODU0IDM0Ljk5MTdDMzguMzU4MyAzNC42ODgzIDM4LjQ0ODggMzQuMzQ0OSAzOC40NDc4IDMzLjk5NTdDMzguNDQ2OCAzMy42NDY1IDM4LjM1NDQgMzMuMzAzNiAzOC4xNzk4IDMzLjAwMTJMMjkuNzA5OCAxOC44NjEyQzI5LjUzMTUgMTguNTY3MyAyOS4yODA1IDE4LjMyNDMgMjguOTgxIDE4LjE1NTdDMjguNjgxNCAxNy45ODcgMjguMzQzNSAxNy44OTg0IDI3Ljk5OTggMTcuODk4NEMyNy42NTYgMTcuODk4NCAyNy4zMTgxIDE3Ljk4NyAyNy4wMTg2IDE4LjE1NTdDMjYuNzE5MSAxOC4zMjQzIDI2LjQ2OCAxOC41NjczIDI2LjI4OTggMTguODYxMlpcIiBzdHJva2U9XCIjREM2ODAzXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNGRkZBRUJcIiBzdHJva2Utd2lkdGg9XCI4XCIvPjwvc3ZnPicsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogYEluYWN0aXZlIFN0b3JlIGZvdW5kIGluIHVwbG9hZGVkIGZpbGVgLFxyXG4gICAgICAgICAgICAgICAgY29udGVudDogYEluYWN0aXZlIHN0b3JlcyBmb3VuZCBpbiB0aGUgLmNzdi4gUGxlYXNlIGFjdGl2YXRlIG9yIHNraXAgdGhlbSB0byBwcm9jZWVkIHRvIGFzc2lnbi5gLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9udHlwZTogJ0FjdGl2ZXN0b3JlJyxcclxuICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBpbmFjdGl2ZVN0b3JlLmpvaW4oJywgJyksXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChsb2NhdGlvbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1c2VyRGF0YUNvcHkgPSBbLi4udGhpcy51c2VyRGF0YV07XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RvcmVfaWQ6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gdXNlckRhdGFDb3B5LmZpbmQoKHN0b3JlOiBhbnkpID0+IGl0ZW0gPT0gc3RvcmUuc3RvcmVOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRldGFpbHMuY2l0eSA9PSB1bmRlZmluZWQgfHwgZGV0YWlscy5jaXR5ID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVfaWQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGlmIChzdG9yZV9pZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGBDaXR5IGlzIHJlcXVpcmVkIG9uIHRoaXMgc3RvcmVzICR7c3RvcmVfaWQuam9pbigpfWApO1xyXG4gICAgICAgICAgICAgICAgIGlmKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZmlsZUlucHV0MSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0MS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS51cGxvYWRVc2VyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVc2VyKGRlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwb3B1cGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFRyYXhwb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgY2VudGVyZWQ6dHJ1ZSxzaXplOidtZCdcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZGF0YSA9IHBvcHVwY29udGVudDtcclxuICAgICAgICAgICAgICBkaWFsb2dSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAnY29uZmlybVN0b3JlJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoYG1hbmFnZS9zdG9yZXMvYWRkaXRpb24tbWV0aG9kYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdCA9PSAnYWN0aXZlU3RvcmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucm91dGUubmF2aWdhdGVCeVVybChgbWFuYWdlL3N0b3Jlc2ApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09ICdza2lwJykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0b3JlX2lkOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gdGhpcy51c2VyRGF0YS5maW5kKChzdG9yZTogYW55KSA9PiBpdGVtID09IHN0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWlscy5jaXR5ID09IHVuZGVmaW5lZCB8fCBkZXRhaWxzLmNpdHkgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVfaWQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdG9yZV9pZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgQ2l0eSBpcyByZXF1aXJlZCBvbiB0aGlzIHN0b3JlcyAke3N0b3JlX2lkLmpvaW4oKX1gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5maWxlSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5maWxlSW5wdXQxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0MS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGxldCB1c2VyRGF0YUNvcHkgPSBbLi4udGhpcy51c2VyRGF0YV07XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXNlckRhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgdXNlckRhdGFDb3B5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RvcmUuaW5jbHVkZXMoaXRlbS5zdG9yZU5hbWUpICYmICFpbmFjdGl2ZVN0b3JlLmluY2x1ZGVzKGl0ZW0uc3RvcmVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyRGF0YS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51c2VyRGF0YS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1BsZWFzZSBFbnRlciB2YWxpZCBEZXRhaWxzJylcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZpbGVJbnB1dDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0MS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBsZXQgdXNlckRldGFpbHMgPSB0aGlzLnVzZXJEYXRhLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLnVzZXJFbWFpbCk7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB1c2VyID0gWy4uLnJlcy5kYXRhLnVzZXJdO1xyXG4gICAgICAgICAgICAgICAgICByZXMuZGF0YS51c2VyID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHVzZXIuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJEZXRhaWxzLmluY2x1ZGVzKGl0ZW0udXNlckVtYWlsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEudXNlci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnVzZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9wdXBjb250ZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheXByb3A6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzcmM6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRkVGMEM3XCIvPjxwYXRoIGQ9XCJNMjcuOTk5OCAyNC4wMDEyVjI4LjAwMTJNMjcuOTk5OCAzMi4wMDEySDI4LjAwOThNMjYuMjg5OCAxOC44NjEyTDE3LjgxOTggMzMuMDAxMkMxNy42NDUxIDMzLjMwMzYgMTcuNTUyNyAzMy42NDY1IDE3LjU1MTggMzMuOTk1N0MxNy41NTA4IDM0LjM0NDkgMTcuNjQxMyAzNC42ODgzIDE3LjgxNDIgMzQuOTkxN0MxNy45ODcxIDM1LjI5NTEgMTguMjM2NSAzNS41NDc5IDE4LjUzNzUgMzUuNzI1QzE4LjgzODUgMzUuOTAyMSAxOS4xODA2IDM1Ljk5NzMgMTkuNTI5OCAzNi4wMDEySDM2LjQ2OThDMzYuODE5IDM1Ljk5NzMgMzcuMTYxMSAzNS45MDIxIDM3LjQ2MjEgMzUuNzI1QzM3Ljc2MzEgMzUuNTQ3OSAzOC4wMTI0IDM1LjI5NTEgMzguMTg1NCAzNC45OTE3QzM4LjM1ODMgMzQuNjg4MyAzOC40NDg4IDM0LjM0NDkgMzguNDQ3OCAzMy45OTU3QzM4LjQ0NjggMzMuNjQ2NSAzOC4zNTQ0IDMzLjMwMzYgMzguMTc5OCAzMy4wMDEyTDI5LjcwOTggMTguODYxMkMyOS41MzE1IDE4LjU2NzMgMjkuMjgwNSAxOC4zMjQzIDI4Ljk4MSAxOC4xNTU3QzI4LjY4MTQgMTcuOTg3IDI4LjM0MzUgMTcuODk4NCAyNy45OTk4IDE3Ljg5ODRDMjcuNjU2IDE3Ljg5ODQgMjcuMzE4MSAxNy45ODcgMjcuMDE4NiAxOC4xNTU3QzI2LjcxOTEgMTguMzI0MyAyNi40NjggMTguNTY3MyAyNi4yODk4IDE4Ljg2MTJaXCIgc3Ryb2tlPVwiI0RDNjgwM1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRkZGQUVCXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGBJbnZpdGUgbmV3IHVzZXJzIGFkZGVkIGluIENTVmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBgVGhpcyBDU1YgY29udGFpbnMgbmV3IHVzZXJzLiBJbnZpdGUgdXNlcnMgYnkgc2VuZGluZyBtYWlsIHRvIHRoZW1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYnV0dG9udHlwZTogJ0ludml0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICB1c2VyOiByZXMuZGF0YS51c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVHJheHBvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJlZDp0cnVlLHNpemU6J21kJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gcG9wdXBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Py5tZXNzYWdlID09ICdjb25maXJtJyB8fCByZXN1bHQgPT0gJ3NraXAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gJ3NraXAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckRhdGFDb3B5ID0gWy4uLnRoaXMudXNlckRhdGFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlckRhdGEgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyRGF0YUNvcHkuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXJEZXRhaWxzLmluY2x1ZGVzKGl0ZW0udXNlckVtYWlsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJEYXRhLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ/LnVzZXIuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnVzZXJEYXRhLmZpbmRJbmRleCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyLnVzZXJFbWFpbCA9PSBpdGVtLnVzZXJFbWFpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5pbnZpdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyRGF0YS5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpdGVtIG9mIHJlcy5kYXRhLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtPy5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgJHtpdGVtLnVzZXJFbWFpbH0gLSAke2l0ZW0ubWVzc2FnZX1gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZpbGVJbnB1dDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVJbnB1dDEubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJEYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgUGxlYXNlIEVudGVyIHZhbGlkIERldGFpbHNgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZmlsZUlucHV0MSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlSW5wdXQxLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS51cGxvYWRVc2VyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFVzZXIoZGVsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEudXBsb2FkVXNlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRVc2VyKGRlbCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHJlcz8uZGF0YT8udXNlcj8ubGVuZ3RoIHx8IHJlcz8uZGF0YT8uc3RvcmU/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgcG9wdXBjb250ZW50O1xyXG4gICAgICAgICAgICBsZXQgc3RvcmU6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgbG9jYXRpb246IGFueSA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgaW5hY3RpdmVTdG9yZTogYW55ID0gW107XHJcbiAgICAgICAgICAgIGlmIChyZXM/LmRhdGE/LnVzZXI/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHBvcHVwY29udGVudCA9IHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlwcm9wOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGltYWdlc3JjOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCI+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0ZFRjBDN1wiLz48cGF0aCBkPVwiTTI3Ljk5OTggMjQuMDAxMlYyOC4wMDEyTTI3Ljk5OTggMzIuMDAxMkgyOC4wMDk4TTI2LjI4OTggMTguODYxMkwxNy44MTk4IDMzLjAwMTJDMTcuNjQ1MSAzMy4zMDM2IDE3LjU1MjcgMzMuNjQ2NSAxNy41NTE4IDMzLjk5NTdDMTcuNTUwOCAzNC4zNDQ5IDE3LjY0MTMgMzQuNjg4MyAxNy44MTQyIDM0Ljk5MTdDMTcuOTg3MSAzNS4yOTUxIDE4LjIzNjUgMzUuNTQ3OSAxOC41Mzc1IDM1LjcyNUMxOC44Mzg1IDM1LjkwMjEgMTkuMTgwNiAzNS45OTczIDE5LjUyOTggMzYuMDAxMkgzNi40Njk4QzM2LjgxOSAzNS45OTczIDM3LjE2MTEgMzUuOTAyMSAzNy40NjIxIDM1LjcyNUMzNy43NjMxIDM1LjU0NzkgMzguMDEyNCAzNS4yOTUxIDM4LjE4NTQgMzQuOTkxN0MzOC4zNTgzIDM0LjY4ODMgMzguNDQ4OCAzNC4zNDQ5IDM4LjQ0NzggMzMuOTk1N0MzOC40NDY4IDMzLjY0NjUgMzguMzU0NCAzMy4zMDM2IDM4LjE3OTggMzMuMDAxMkwyOS43MDk4IDE4Ljg2MTJDMjkuNTMxNSAxOC41NjczIDI5LjI4MDUgMTguMzI0MyAyOC45ODEgMTguMTU1N0MyOC42ODE0IDE3Ljk4NyAyOC4zNDM1IDE3Ljg5ODQgMjcuOTk5OCAxNy44OTg0QzI3LjY1NiAxNy44OTg0IDI3LjMxODEgMTcuOTg3IDI3LjAxODYgMTguMTU1N0MyNi43MTkxIDE4LjMyNDMgMjYuNDY4IDE4LjU2NzMgMjYuMjg5OCAxOC44NjEyWlwiIHN0cm9rZT1cIiNEQzY4MDNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0ZGRkFFQlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+PC9zdmc+JyxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBgSW52aXRlIG5ldyB1c2VycyBhZGRlZCBpbiBDU1ZgLFxyXG4gICAgICAgICAgICAgICAgY29udGVudDogYFRoaXMgQ1NWIGNvbnRhaW5zIG5ldyB1c2Vycy4gSW52aXRlIHVzZXJzIGJ5IHNlbmRpbmcgbWFpbCB0byB0aGVtYCxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnR5cGU6ICdJbnZpdGUnLFxyXG4gICAgICAgICAgICAgICAgdXNlcjogcmVzLmRhdGEudXNlclxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBzdG9yZSA9IHJlcy5kYXRhLnN0b3JlLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5tZXNzYWdlID09ICcnO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBpbmFjdGl2ZVN0b3JlID0gcmVzLmRhdGEuc3RvcmUuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm1lc3NhZ2UgPT0gJ3N0b3JlIGlzIGluYWN0aXZlJ1xyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBsb2NhdGlvbiA9IHJlcy5kYXRhLnN0b3JlLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5tZXNzYWdlICE9ICcnO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzdG9yZSA9IFsuLi5uZXcgU2V0KHN0b3JlLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLnN0b3JlKSldO1xyXG4gICAgICAgICAgICAgIGluYWN0aXZlU3RvcmUgPSBbLi4uIG5ldyBTZXQoaW5hY3RpdmVTdG9yZS5tYXAoKGl0ZW06YW55KSA9PiBpdGVtLnN0b3JlKSldO1xyXG4gICAgICAgICAgICAgIGxvY2F0aW9uID0gWy4uLm5ldyBTZXQobG9jYXRpb24ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uc3RvcmUpKV07XHJcbiAgICAgICAgICAgICAgaWYgKHN0b3JlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gYE5ldyBTdG9yZSBmb3VuZCBpbiB1cGxvYWRlZCBmaWxlYFxyXG4gICAgICAgICAgICAgICAgaWYoaW5hY3RpdmVTdG9yZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgdGl0bGUgPSBgTmV3IFN0b3JlIGFuZCBJbmFjdGl2ZSBTdG9yZSBmb3VuZCBpbiB1cGxvYWRlZCBmaWxlYFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcG9wdXBjb250ZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5cHJvcDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGltYWdlc3JjOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCI+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0ZFRjBDN1wiLz48cGF0aCBkPVwiTTI3Ljk5OTggMjQuMDAxMlYyOC4wMDEyTTI3Ljk5OTggMzIuMDAxMkgyOC4wMDk4TTI2LjI4OTggMTguODYxMkwxNy44MTk4IDMzLjAwMTJDMTcuNjQ1MSAzMy4zMDM2IDE3LjU1MjcgMzMuNjQ2NSAxNy41NTE4IDMzLjk5NTdDMTcuNTUwOCAzNC4zNDQ5IDE3LjY0MTMgMzQuNjg4MyAxNy44MTQyIDM0Ljk5MTdDMTcuOTg3MSAzNS4yOTUxIDE4LjIzNjUgMzUuNTQ3OSAxOC41Mzc1IDM1LjcyNUMxOC44Mzg1IDM1LjkwMjEgMTkuMTgwNiAzNS45OTczIDE5LjUyOTggMzYuMDAxMkgzNi40Njk4QzM2LjgxOSAzNS45OTczIDM3LjE2MTEgMzUuOTAyMSAzNy40NjIxIDM1LjcyNUMzNy43NjMxIDM1LjU0NzkgMzguMDEyNCAzNS4yOTUxIDM4LjE4NTQgMzQuOTkxN0MzOC4zNTgzIDM0LjY4ODMgMzguNDQ4OCAzNC4zNDQ5IDM4LjQ0NzggMzMuOTk1N0MzOC40NDY4IDMzLjY0NjUgMzguMzU0NCAzMy4zMDM2IDM4LjE3OTggMzMuMDAxMkwyOS43MDk4IDE4Ljg2MTJDMjkuNTMxNSAxOC41NjczIDI5LjI4MDUgMTguMzI0MyAyOC45ODEgMTguMTU1N0MyOC42ODE0IDE3Ljk4NyAyOC4zNDM1IDE3Ljg5ODQgMjcuOTk5OCAxNy44OTg0QzI3LjY1NiAxNy44OTg0IDI3LjMxODEgMTcuOTg3IDI3LjAxODYgMTguMTU1N0MyNi43MTkxIDE4LjMyNDMgMjYuNDY4IDE4LjU2NzMgMjYuMjg5OCAxOC44NjEyWlwiIHN0cm9rZT1cIiNEQzY4MDNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0ZGRkFFQlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+PC9zdmc+JyxcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiBgVGhpcyBDU1YgY29udGFpbnMgYSBuZXcgc3RvcmUuIEFkZCBuZXcgc3RvcmVzIGluIHRoZSBTdG9yZSBNYW5hZ2VtZW50IHVuZGVyIE1hbmFnZSBtZW51LmAsXHJcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbnR5cGU6ICdBZGRzdG9yZScsXHJcbiAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBzdG9yZS5qb2luKCcsICcpLFxyXG4gICAgICAgICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24uam9pbigpLFxyXG4gICAgICAgICAgICAgICAgICBpbmFjdGl2ZVN0b3JlczppbmFjdGl2ZVN0b3JlLmpvaW4oKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZihpbmFjdGl2ZVN0b3JlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcG9wdXBjb250ZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5cHJvcDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGltYWdlc3JjOiAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCI+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0ZFRjBDN1wiLz48cGF0aCBkPVwiTTI3Ljk5OTggMjQuMDAxMlYyOC4wMDEyTTI3Ljk5OTggMzIuMDAxMkgyOC4wMDk4TTI2LjI4OTggMTguODYxMkwxNy44MTk4IDMzLjAwMTJDMTcuNjQ1MSAzMy4zMDM2IDE3LjU1MjcgMzMuNjQ2NSAxNy41NTE4IDMzLjk5NTdDMTcuNTUwOCAzNC4zNDQ5IDE3LjY0MTMgMzQuNjg4MyAxNy44MTQyIDM0Ljk5MTdDMTcuOTg3MSAzNS4yOTUxIDE4LjIzNjUgMzUuNTQ3OSAxOC41Mzc1IDM1LjcyNUMxOC44Mzg1IDM1LjkwMjEgMTkuMTgwNiAzNS45OTczIDE5LjUyOTggMzYuMDAxMkgzNi40Njk4QzM2LjgxOSAzNS45OTczIDM3LjE2MTEgMzUuOTAyMSAzNy40NjIxIDM1LjcyNUMzNy43NjMxIDM1LjU0NzkgMzguMDEyNCAzNS4yOTUxIDM4LjE4NTQgMzQuOTkxN0MzOC4zNTgzIDM0LjY4ODMgMzguNDQ4OCAzNC4zNDQ5IDM4LjQ0NzggMzMuOTk1N0MzOC40NDY4IDMzLjY0NjUgMzguMzU0NCAzMy4zMDM2IDM4LjE3OTggMzMuMDAxMkwyOS43MDk4IDE4Ljg2MTJDMjkuNTMxNSAxOC41NjczIDI5LjI4MDUgMTguMzI0MyAyOC45ODEgMTguMTU1N0MyOC42ODE0IDE3Ljk4NyAyOC4zNDM1IDE3Ljg5ODQgMjcuOTk5OCAxNy44OTg0QzI3LjY1NiAxNy44OTg0IDI3LjMxODEgMTcuOTg3IDI3LjAxODYgMTguMTU1N0MyNi43MTkxIDE4LjMyNDMgMjYuNDY4IDE4LjU2NzMgMjYuMjg5OCAxOC44NjEyWlwiIHN0cm9rZT1cIiNEQzY4MDNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0ZGRkFFQlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+PC9zdmc+JyxcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6IGBJbmFjdGl2ZSBTdG9yZSBmb3VuZCBpbiB1cGxvYWRlZCBmaWxlYCxcclxuICAgICAgICAgICAgICAgICAgY29udGVudDogYEluYWN0aXZlIHN0b3JlcyBmb3VuZCBpbiB0aGUgLmNzdi4gUGxlYXNlIGFjdGl2YXRlIG9yIHNraXAgdGhlbSB0byBwcm9jZWVkIHRvIGFzc2lnbi5gLFxyXG4gICAgICAgICAgICAgICAgICBidXR0b250eXBlOiAnQWN0aXZlc3RvcmUnLFxyXG4gICAgICAgICAgICAgICAgICBzdWJ0aXRsZTogaW5hY3RpdmVTdG9yZS5qb2luKCcsICcpLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB1c2VyRGF0YUNvcHkgPSBbLi4udGhpcy51c2VyRGF0YV07XHJcbiAgICAgICAgICAgICAgICAgIGxldCBzdG9yZV9pZDogYW55ID0gW107XHJcbiAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gdXNlckRhdGFDb3B5LmZpbmQoKHN0b3JlOiBhbnkpID0+IGl0ZW0gPT0gc3RvcmUuc3RvcmVOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWlscy5jaXR5ID09IHVuZGVmaW5lZCB8fCBkZXRhaWxzLmNpdHkgPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0b3JlX2lkLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICBpZiAoc3RvcmVfaWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGBDaXR5IGlzIHJlcXVpcmVkIG9uIHRoaXMgc3RvcmVzICR7c3RvcmVfaWQuam9pbigpfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZmlsZUlucHV0MSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlSW5wdXQxLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS51cGxvYWRVc2VyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFVzZXIoZGVsKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocG9wdXBjb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihUcmF4cG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIGNlbnRlcmVkOnRydWUsc2l6ZTonbWQnXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmRhdGEgPSBwb3B1cGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgZGlhbG9nUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gJ2NvbmZpcm1TdG9yZScpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKGBtYW5hZ2Uvc3RvcmVzL2FkZGl0aW9uLW1ldGhvZGApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQgPT0gJ2FjdGl2ZVN0b3JlJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoYG1hbmFnZS9zdG9yZXNgKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdD8ubWVzc2FnZSA9PSAnY29uZmlybScgfHwgcmVzdWx0ID09ICdza2lwJykge1xyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gJ3NraXAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVzZXJEYXRhQ29weSA9IFsuLi50aGlzLnVzZXJEYXRhXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJEYXRhID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcz8uZGF0YT8udXNlcj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNlckRldGFpbHMgPSByZXMuZGF0YS51c2VyLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLnVzZXJFbWFpbClcclxuICAgICAgICAgICAgICAgICAgICAgIHVzZXJEYXRhQ29weS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VyRGV0YWlscy5pbmNsdWRlcyhpdGVtLnVzZXJFbWFpbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJEYXRhLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcmVfaWQ6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gdXNlckRhdGFDb3B5LmZpbmQoKHN0b3JlOiBhbnkpID0+IGl0ZW0gPT0gc3RvcmUuc3RvcmVOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRldGFpbHMuY2l0eSA9PSB1bmRlZmluZWQgfHwgZGV0YWlscy5jaXR5ID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVfaWQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdG9yZV9pZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGBDaXR5IGlzIHJlcXVpcmVkIG9uIHRoaXMgc3RvcmVzICR7c3RvcmVfaWQuam9pbigpfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZpbGVJbnB1dDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVJbnB1dDEubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXM/LmRhdGE/LnN0b3JlPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHVzZXJEYXRhQ29weS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG9yZS5pbmNsdWRlcyhpdGVtLnN0b3JlTmFtZSkgJiYgIWluYWN0aXZlU3RvcmUuaW5jbHVkZXMoaXRlbS5zdG9yZU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyRGF0YS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ/LnVzZXIuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnVzZXJEYXRhLmZpbmRJbmRleCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyLnVzZXJFbWFpbCA9PSBpdGVtLnVzZXJFbWFpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5pbnZpdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyRGF0YS5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpdGVtIG9mIHJlcy5kYXRhLnVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtPy5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgJHtpdGVtLnVzZXJFbWFpbH0gLSAke2l0ZW0ubWVzc2FnZX1gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZpbGVJbnB1dDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVJbnB1dDEubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJEYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdQbGVhc2UgRW50ZXIgdmFsaWQgRGV0YWlscycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5maWxlSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5maWxlSW5wdXQxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0MS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS51cGxvYWRVc2VyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFVzZXIoZGVsKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhLnVwbG9hZFVzZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZih0aGlzLmZpbGVJbnB1dCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmZpbGVJbnB1dDEpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbGVJbnB1dDEubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkVXNlcihkZWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0sKGVycm9yKSA9PiB7XHJcbiAgICAgIGlmKHRoaXMuZmlsZUlucHV0KSB7XHJcbiAgICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMuZmlsZUlucHV0MSkge1xyXG4gICAgICAgIHRoaXMuZmlsZUlucHV0MS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycm9yLmVycm9yLmVycm9yKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRVc2VyKGRlbD86YW55KSB7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgaWQ6IHRoaXMuY2hlY2tsaXN0SWQsXHJcbiAgICAgIGFzc2lnbmVkVXNlcnM6IHRoaXMudXNlckRhdGEsXHJcbiAgICAgIHVwbG9hZFVzZXI6IHRydWUsXHJcbiAgICAgIGFkZFVzZXI6IHRydWUsXHJcbiAgICAgIHR5cGU6IHRoaXMub2JqPy50eXBlICYmIFsnbW9iaWxldXNhZ2VkZXRlY3Rpb24nLCAnc3RvcmVvcGVuYW5kY2xvc2UnXS5pbmNsdWRlcyh0aGlzLm9iai50eXBlKSA/IHRoaXMub2JqLnR5cGUgOiAnJyxcclxuICAgICAgLi4uKGRlbCkgPyB7ZGVsZXRlOmZhbHNlfSA6IHt9LFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudElkXHJcbiAgICB9XHJcbiAgICB0aGlzLlNvcFNlcnZpY2UudmFsaWRhdGVVc2VyKGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLl9pZCA9IHJlc3BvbnNlLmRhdGEuaWQ7XHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RJZCA9IHJlc3BvbnNlLmRhdGEuaWQ7XHJcbiAgICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYXNzaWduZWRVc2VycyA9IFtdO1xyXG4gICAgICAgIHRoaXMudXNlckRldGFpbHMoKTtcclxuICAgICAgICB0aGlzLmNoYW5nZWRldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXNlckRldGFpbHMoKSB7XHJcbiAgICB0aGlzLnNpemUgPSA1O1xyXG4gICAgdGhpcy50YWJsZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgbGltaXQ6IHRoaXMuc2l6ZSxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICBzZWFyY2g6IHRoaXMudGFibGVGaWx0ZXIsXHJcbiAgICAgIGlkOiB0aGlzLmNoZWNrbGlzdElkLFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudElkXHJcbiAgICB9XHJcbiAgICB0aGlzLlNvcFNlcnZpY2UuZ2V0VXNlckRldGFpbHMocGFyYW1zKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy50YWJsZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgaWYgKHJlcyA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93SW1hZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyLmxlbmd0aClcclxuICAgICAgICAgIHRoaXMuc2hvd0ltYWdlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0ltYWdlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSByZXMuZGF0YS51c2VycztcclxuICAgICAgICB0aGlzLnJlY29yZHNDb3VudCA9IHRoaXMudGFibGVEYXRhLmxlbmd0aDtcclxuICAgICAgICB0aGlzLnJlY29yZHNUb3RhbCA9IHJlcy5kYXRhLmNvdW50O1xyXG4gICAgICAgIGlmKHRoaXMucmVjb3Jkc1RvdGFsIDwgNSkge1xyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZSA9IFt0aGlzLnJlY29yZHNUb3RhbF07XHJcbiAgICAgICAgICB0aGlzLnNpemUgPSB0aGlzLnJlY29yZHNUb3RhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplID0gWzUsMTAsMTUsMjBdO1xyXG4gICAgICAgICAgdGhpcy5zaXplID0gNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaCgoaXRlbTphbnkpID0+e1xyXG4gICAgICAgICAgaWYoaXRlbS5jaGVja0ZsYWcgJiYgIXRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFzc2lnbmVkVXNlcnMuaW5jbHVkZXMoaXRlbS5pZCkgJiYgIXRoaXMucmVtb3ZlVXNlcnMuaW5jbHVkZXMoaXRlbS5pZCkpXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFzc2lnbmVkVXNlcnMucHVzaChpdGVtLmlkKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYXNzaWduZWRVc2Vycy5pbmNsdWRlcyhpdGVtLmlkKSkge1xyXG4gICAgICAgICAgICBjb3VudCArPTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZighaXRlbS5jaGVja0ZsYWcgJiYgIXRoaXMucmVtb3ZlVXNlcnMuaW5jbHVkZXMoaXRlbS5pZCkpXHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVXNlcnMucHVzaChpdGVtLmlkKTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBpZiAoY291bnQgPT0gdGhpcy5yZWNvcmRzQ291bnQpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSgpIHtcclxuICAgIGxldCBwYXJhbXMgPSB7XHJcbiAgICAgIGxpbWl0OiAxMDAwMCxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICBpZDogdGhpcy5jaGVja2xpc3RJZCxcclxuICAgICAgc2VhcmNoOiB0aGlzLnRhYmxlRmlsdGVyLFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudElkXHJcbiAgICB9XHJcbiAgICB0aGlzLlNvcFNlcnZpY2UuZ2V0VXNlckRldGFpbHMocGFyYW1zKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSgocmVzOmFueSkgPT4ge1xyXG4gICAgICBsZXQgZXhjZWxEYXRhOiBhbnkgPSBbXTtcclxuICAgICAgaWYgKHJlcyA9PSBudWxsKSB7XHJcbiAgICAgICAgZXhjZWxEYXRhLnB1c2goe1xyXG4gICAgICAgICAgc3RvcmVOYW1lOiAnJyxcclxuICAgICAgICAgIHVzZXJFbWFpbDogJycsXHJcbiAgICAgICAgICB1c2VyTmFtZTogJycsXHJcbiAgICAgICAgICB1c2VyUGhvbmU6ICcnLFxyXG4gICAgICAgICAgY2l0eTonJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICByZXMuZGF0YS51c2Vycy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIGV4Y2VsRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgc3RvcmVOYW1lOiBpdGVtLnN0b3JlTmFtZSxcclxuICAgICAgICAgICAgdXNlckVtYWlsOiBpdGVtLnVzZXJFbWFpbCxcclxuICAgICAgICAgICAgdXNlck5hbWU6IGl0ZW0udXNlck5hbWUsXHJcbiAgICAgICAgICAgIHVzZXJQaG9uZTogaXRlbS51c2VyUGhvbmUsXHJcbiAgICAgICAgICAgIGNpdHk6aXRlbS5jaXR5XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5Tb3BTZXJ2aWNlLmV4cG9ydEFzRXhjZWxGaWxlKGV4Y2VsRGF0YSwgJ0NoZWNrTGlzdF91c2VyTGlzdF8nKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMudGFibGVMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY3VycmVudFZhbHVlID0gZXZlbnQ7XHJcbiAgICB0aGlzLnRhYmxlTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBsaW1pdDogdGhpcy5zaXplLFxyXG4gICAgICBvZmZzZXQ6IGV2ZW50IC0gMSxcclxuICAgICAgc2VhcmNoOiB0aGlzLnRhYmxlRmlsdGVyLFxyXG4gICAgICBpZDogdGhpcy5jaGVja2xpc3RJZCxcclxuICAgICAgY2xpZW50SWQ6dGhpcy5jbGllbnRJZFxyXG4gICAgfVxyXG4gICAgdGhpcy5Tb3BTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMudGFibGVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIGlmIChyZXMgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0ltYWdlID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy50YWJsZUZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0ltYWdlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLnNob3dJbWFnZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gcmVzLmRhdGEudXNlcnM7XHJcbiAgICAgICAgbGV0IGNvdW50PTA7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXRlbS5jaGVja0ZsYWcgJiYgIXRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFzc2lnbmVkVXNlcnMuaW5jbHVkZXMoaXRlbS5pZCkgJiYgIXRoaXMucmVtb3ZlVXNlcnMuaW5jbHVkZXMoaXRlbS5pZCkpXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFzc2lnbmVkVXNlcnMucHVzaChpdGVtLmlkKVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hc3NpZ25lZFVzZXJzLmluY2x1ZGVzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgIGNvdW50ICs9MTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMucmVjb3Jkc0NvdW50ID0gdGhpcy50YWJsZURhdGEubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gcmVzLmRhdGEuY291bnQ7XHJcbiAgICAgICAgaWYodGhpcy5yZWNvcmRzVG90YWwgPCA1KSB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplID0gW3RoaXMucmVjb3Jkc1RvdGFsXTtcclxuICAgICAgICAgIHRoaXMuc2l6ZSA9IHRoaXMucmVjb3Jkc1RvdGFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNpemUgPSBbNSwxMCwxNSwyMF07XHJcbiAgICAgICAgICB0aGlzLnNpemUgPSA1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY291bnQgPT0gdGhpcy5yZWNvcmRzQ291bnQpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5jaGFuZ2VkZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VTaXplQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2l6ZSA9IGV2ZW50O1xyXG4gICAgdGhpcy50YWJsZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5jdXJyZW50VmFsdWUgPSAxO1xyXG4gICAgdGhpcy50YWJsZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgbGltaXQ6IHRoaXMuc2l6ZSxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICBzZWFyY2g6IHRoaXMudGFibGVGaWx0ZXIsXHJcbiAgICAgIGlkOiB0aGlzLmNoZWNrbGlzdElkLFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudElkXHJcbiAgICB9XHJcbiAgICB0aGlzLlNvcFNlcnZpY2UuZ2V0VXNlckRldGFpbHMocGFyYW1zKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy50YWJsZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgaWYgKHJlcyA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93SW1hZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyLmxlbmd0aClcclxuICAgICAgICAgIHRoaXMuc2hvd0ltYWdlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0ltYWdlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSByZXMuZGF0YS51c2VycztcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChpdGVtLmNoZWNrRmxhZyAmJiAhdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYXNzaWduZWRVc2Vycy5pbmNsdWRlcyhpdGVtLmlkKSAmJiAhdGhpcy5yZW1vdmVVc2Vycy5pbmNsdWRlcyhpdGVtLmlkKSlcclxuICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYXNzaWduZWRVc2Vycy5wdXNoKGl0ZW0uaWQpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnJlY29yZHNDb3VudCA9IHRoaXMudGFibGVEYXRhLmxlbmd0aDtcclxuICAgICAgICB0aGlzLnJlY29yZHNUb3RhbCA9IHJlcy5kYXRhLmNvdW50O1xyXG4gICAgICAgIGlmKHRoaXMucmVjb3Jkc1RvdGFsIDwgNSkge1xyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZSA9IFt0aGlzLnJlY29yZHNUb3RhbF1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplID0gWzUsMTAsMTUsMjBdXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBzZWFyY2hUYWJsZURhdGEoKSB7XHJcbiAgICB0aGlzLnNpemUgPSA1O1xyXG4gICAgdGhpcy5jdXJyZW50VmFsdWUgPSAxO1xyXG4gICAgdGhpcy50YWJsZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICBsaW1pdDogdGhpcy5zaXplLFxyXG4gICAgICBzZWFyY2g6IHRoaXMudGFibGVGaWx0ZXIsXHJcbiAgICAgIGlkOiB0aGlzLmNoZWNrbGlzdElkLFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudElkXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJsZUZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5Tb3BTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50YWJsZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzID09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0ltYWdlID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5zaG93SW1hZ2UgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dJbWFnZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50YWJsZURhdGEgPSByZXMuZGF0YS51c2VycztcclxuICAgICAgICAgIHRoaXMucmVjb3Jkc0NvdW50ID0gdGhpcy50YWJsZURhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRzVG90YWwgPSByZXMuZGF0YS5jb3VudDtcclxuICAgICAgICAgIGxldCBjb3VudCA9IDAgO1xyXG4gICAgICAgICAgaWYodGhpcy5yZWNvcmRzVG90YWwgPCA1KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNpemUgPSBbdGhpcy5yZWNvcmRzVG90YWxdXHJcbiAgICAgICAgICAgIHRoaXMuc2l6ZSA9IHRoaXMucmVjb3Jkc1RvdGFsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNpemUgPSBbNSwxMCwxNSwyMF1cclxuICAgICAgICAgICAgdGhpcy5zaXplID0gNTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudGFibGVEYXRhLmZvckVhY2goKGl0ZW06YW55KSA9PntcclxuICAgICAgICAgICAgaWYoaXRlbS5jaGVja0ZsYWcgJiYgIXRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFzc2lnbmVkVXNlcnMuaW5jbHVkZXMoaXRlbS5pZCkgJiYgIXRoaXMucmVtb3ZlVXNlcnMuaW5jbHVkZXMoaXRlbS5pZCkpXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYXNzaWduZWRVc2Vycy5wdXNoKGl0ZW0uaWQpO1xyXG4gIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYXNzaWduZWRVc2Vycy5pbmNsdWRlcyhpdGVtLmlkKSkge1xyXG4gICAgICAgICAgICAgIGNvdW50ICs9MTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGlmIChjb3VudCA9PSB0aGlzLnJlY29yZHNDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJEZXRhaWxzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVwZGF0ZUZsYWcoZXZlbnQ6IGFueSwgaW5kZXg6IGFueSwgZWxlbWVudDogYW55KSB7XHJcbiAgICAgICAgXHJcbiAgICBlbGVtZW50LmNoZWNrRmxhZyA9IGV2ZW50LnRhcmdldC5jaGVja2VkXHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgbGV0IGluZGV4ID0gdGhpcy5yZW1vdmVVc2Vycy5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbSA9PSBlbGVtZW50LmlkKTtcclxuICAgICAgdGhpcy5yZW1vdmVVc2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hc3NpZ25lZFVzZXJzLnB1c2goZWxlbWVudC5pZClcclxuICAgIH1cclxuICAgIGlmICghZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5yZW1vdmVVc2Vycy5wdXNoKGVsZW1lbnQuaWQpO1xyXG4gICAgICBsZXQgaW5kZXggPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hc3NpZ25lZFVzZXJzLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtID09IGVsZW1lbnQuaWQpO1xyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hc3NpZ25lZFVzZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRhYmxlRGF0YVtpbmRleF0uY2hlY2tGbGFnID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmNoYW5nZWRldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGlmKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFzc2lnbmVkVXNlcnMubGVuZ3RoICE9IHRoaXMucmVjb3Jkc1RvdGFsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBjaGVja0FsbChldmVudDogYW55KSB7XHJcbiAgICAvLyB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hc3NpZ25lZFVzZXJzID0gW107XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja0ZsYWcgPSB0cnVlXHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5yZW1vdmVVc2Vycy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBpdGVtLmlkKTtcclxuICAgICAgICB0aGlzLnJlbW92ZVVzZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYoIXRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFzc2lnbmVkVXNlcnMuaW5jbHVkZXMoaXRlbS5pZCkpXHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hc3NpZ25lZFVzZXJzLnB1c2goaXRlbS5pZClcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaXRlbS5jaGVja0ZsYWcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlbW92ZVVzZXJzLnB1c2goaXRlbS5pZClcclxuICAgICAgICBsZXQgaW5kZXggPSAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYXNzaWduZWRVc2Vycy5maW5kSW5kZXgoKGlkOmFueSkgPT4gaWQgPT0gaXRlbS5pZCk7XHJcbiAgICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYXNzaWduZWRVc2Vycy5zcGxpY2UoaW5kZXgsMSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICAvLyBkYXRlUmFuZ2VTdGFydChldmVudCA6YW55KSB7XHJcbiAgLy8gICB0aGlzLnJhbmdlU3RhcnQgPSB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0KS5mb3JtYXQoJ1lZWVktTU0tREQnKVxyXG4gIC8vICAgdGhpcy52YWxpZGF0ZVRpbWUoKTtcclxuICAvLyB9XHJcbiAgZGF0ZVNwZWNpZmljKGV2ZW50OmFueSkge1xyXG4gICAgaWYodGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlID09ICdyYW5nZScgJiYgZXZlbnQ/LnNlbGVjdGVkTGlzdCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZUxpc3QgPSBldmVudC5zZWxlY3RlZExpc3Q7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRhdGVSYW5nZVN0YXJ0KGV2ZW50IDphbnkpIHtcclxuICAgIGlmKGV2ZW50ICYmIGV2ZW50LnN0YXJ0RGF0ZSkge1xyXG4gICAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGUgPT0gJ29uZXRpbWUnKVxyXG4gICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlRGF0ZSA9IHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdTdGFydERhdGUgPSB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0RGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJylcclxuICAgICAgfVxyXG4gICAgfSAgIFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZSA9PSAnb25ldGltZScpXHJcbiAgICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVEYXRlID0gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVEYXRlO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdTdGFydERhdGUgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdTdGFydERhdGU7XHJcbiAgICAgIH1cclxuICAgIH0gXHJcbiAgICB0aGlzLnNlbGVjdGVkU3RhcnREYXRlID0ge3N0YXJ0RGF0ZTp0aGlzLmRheWpzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdTdGFydERhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpLGVuZERhdGU6dGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnU3RhcnREYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKX07XHJcbiAgICB0aGlzLm1pblN0YXJ0RGF0ZSA9IHRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSkuZm9ybWF0KCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHtzdGFydERhdGU6dGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpLGVuZERhdGU6dGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpfTtcclxuICAgIHRoaXMubWluRGF0ZSA9IHRoaXMuZGF5anMoKS5mb3JtYXQoKTtcclxuICAgIHRoaXMubWluRW5kRGF0ZSA9IHRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSkuZm9ybWF0KCk7XHJcbiAgICB0aGlzLnZhbGlkYXRlVGltZSgpO1xyXG4gIH1cclxuICBcclxuICBkYXRlUmFuZ2VFbmQoZXZlbnQ6YW55KSB7XHJcbiAgICBpZihldmVudCAmJiBldmVudC5lbmREYXRlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ0VuZERhdGUgPSB0aGlzLmRheWpzKGV2ZW50LmVuZERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXHJcbiAgICAgIC8vIHRoaXMucmVmcmVzaFBpY2tlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW5kRGF0ZSA9IHtzdGFydERhdGU6dGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyksZW5kRGF0ZTp0aGlzLmRheWpzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdFbmREYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKX07XHJcbiAgICAgIHRoaXMubWluRW5kRGF0ZSA9IHRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSkuZm9ybWF0KCk7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVUaW1lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gZGF0ZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgdGhpcy5kYXRlID0gdGhpcy5kYXlqcyhldmVudC5zdGFydCk7XHJcbiAgLy8gICB0aGlzLm1vbnRoRGF0ZSA9IHBhcnNlSW50KHRoaXMuZGF0ZS5mb3JtYXQoJ0REJykpID09IDEgPyBwYXJzZUludCh0aGlzLmRhdGUuZm9ybWF0KCdERCcpKSArICdzdCcgOiBwYXJzZUludCh0aGlzLmRhdGUuZm9ybWF0KCdERCcpKSA9PSAyID8gcGFyc2VJbnQodGhpcy5kYXRlLmZvcm1hdCgnREQnKSkgKyAnbmQnIDogcGFyc2VJbnQodGhpcy5kYXRlLmZvcm1hdCgnREQnKSkgPT0gMyA/IHBhcnNlSW50KHRoaXMuZGF0ZS5mb3JtYXQoJ0REJykpICsgJ3JkJyA6IHBhcnNlSW50KHRoaXMuZGF0ZS5mb3JtYXQoJ0REJykpICsgJ3RoJztcclxuICAvLyAgIHRoaXMubW9udGhEYXkgPSB0aGlzLmRhdGUuZm9ybWF0KCdkZGRkJyk7XHJcbiAgLy8gICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUgPSB0aGlzLmRheWpzKGV2ZW50LnN0YXJ0KS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuXHJcbiAgLy8gICBsZXQgd2Vla051bWJlciA9IGdldFdlZWtOdW1iZXIodGhpcy5kYXRlKTtcclxuICAvLyAgIHRoaXMuTW9udGh3ZWVrTnVtYmVyID0gd2Vla051bWJlciA9PSAxID8gd2Vla051bWJlciArICdzdCcgOiB3ZWVrTnVtYmVyID09IDIgPyB3ZWVrTnVtYmVyICsgJ25kJyA6IHdlZWtOdW1iZXIgPT0gMyA/IHdlZWtOdW1iZXIgKyAncmQnIDogd2Vla051bWJlciArICd0aCc7XHJcbiAgLy8gICB0aGlzLnNldE1vbnRoRGF0ZSh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhTZXR1cCk7XHJcbiAgLy8gfVxyXG4gIC8vIHNldERheShkYXk6IGFueSkge1xyXG4gIC8vICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZERheSA9IGRheTtcclxuICAvLyB9XHJcbiAgc2V0RGF5KGRheTpzdHJpbmcpe1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXlzLmluY2x1ZGVzKGRheSkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZERheXMgPSB0aGlzLnNlbGVjdGVkRGF5cy5maWx0ZXIoc2VsZWN0ZWREYXkgPT4gc2VsZWN0ZWREYXkgIT09IGRheSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF5cy5wdXNoKGRheSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIHNldE1vbnRoRGF0ZShkYXRhOiBhbnkpIHtcclxuICAvLyAgIGlmIChkYXRhID09ICdkYXRlJykge1xyXG4gIC8vICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkRGF5ID0gW3RoaXMubW9udGhEYXRlXTtcclxuICAvLyAgICAgdGhpcy5zZWxlY3RlZERheXMgPSBbdGhpcy5tb250aERhdGVdOyBcclxuICAvLyAgIH1cclxuICAvLyAgIGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkRGF5ID0gW3RoaXMubW9udGhEYXldO1xyXG4gIC8vICAgICB0aGlzLnNlbGVjdGVkRGF5cyA9IFt0aGlzLm1vbnRoRGF5XTsgXHJcbiAgLy8gICAgIGxldCB3ZWVrTnVtYmVyID0gZ2V0V2Vla051bWJlcih0aGlzLmRhdGUpO1xyXG4gIC8vICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhXZWVrID0gd2Vla051bWJlciA9PSAxID8gd2Vla051bWJlciArICdzdCcgOiB3ZWVrTnVtYmVyID09IDIgPyB3ZWVrTnVtYmVyICsgJ25kJyA6IHdlZWtOdW1iZXIgPT0gMyA/IHdlZWtOdW1iZXIgKyAncmQnIDogd2Vla051bWJlciArICd0aCc7XHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhTZXR1cCA9IGRhdGE7XHJcblxyXG4gIC8vIH1cclxuICAvLyBzZXREYXRlKGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlRGF0ZSA9IGV2ZW50LnN0YXJ0O1xyXG4gIC8vIH1cclxuICBwdWJsaXNoKCkge1xyXG4gICAgaWYoWyd3ZWVrbHknLCd3ZWVrZGF5J10uaW5jbHVkZXModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUpICYmIHRoaXMuc2VsZWN0ZWREYXlzLmxlbmd0aCA9PSAwKXtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdQbGVhc2Ugc2VsZWN0IGF0bGVhc3QgMSBkYXkgdG8gcHJvY2VlZCcpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZighdGhpcy52YWxpZFRpbWUpIHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdJbnZhbGlkIFNjaGVkdWxlIEVuZCBUaW1lJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmKCF0aGlzLnNob3dSYW5nZVZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ1N0YXJ0RGF0ZSA9Jyc7IFxyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdFbmREYXRlID0nJzsgXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSAhPSAnb25ldGltZScpIHtcclxuICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVEYXRlID0nJzsgXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSA9PSAnbW9udGhseScgJiYgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoU2V0dXAgPT0gJ2RhdGUnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFdlZWsgPSB0aGlzLm1vbnRoRGF0ZSArJyAnK3RoaXMubW9udGhEYXk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSA9PSAnbW9udGhseScgJiYgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoU2V0dXAgPT0gJ3NwZWNpZmljJykge1xyXG4gICAgICBpZih0aGlzLnN1Ym1pdHRlZERhdGVzLmxlbmd0aClcclxuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zcGVjaWZpY0RhdGUgPSB0aGlzLnN1Ym1pdHRlZERhdGVzO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1BsZWFzZSBzZWxlY3QgYXRsZWFzdCAxIGRhdGUgdG8gcHJvY2VlZCcpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUgPT0gJ3JhbmdlJykge1xyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zcGVjaWZpY0RhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZUxpc3Q7XHJcbiAgICB9XHJcbiAgICBsZXQgcG9wdXBjb250ZW50ID0ge1xyXG4gICAgICBkaXNwbGF5cHJvcDogZmFsc2UsXHJcbiAgICAgIGltYWdlc3JjOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCI+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0QxRkFERlwiLz48cGF0aCBkPVwiTTM4IDI3LjA4MThWMjguMDAxOEMzNy45OTg4IDMwLjE1ODIgMzcuMzAwNSAzMi4yNTY1IDM2LjAwOTMgMzMuOTgzNkMzNC43MTgyIDM1LjcxMDggMzIuOTAzMyAzNi45NzQzIDMwLjgzNTQgMzcuNTg1N0MyOC43Njc0IDM4LjE5NzEgMjYuNTU3MyAzOC4xMjM3IDI0LjUzNDUgMzcuMzc2NEMyMi41MTE3IDM2LjYyOTEgMjAuNzg0NyAzNS4yNDc5IDE5LjYxMSAzMy40Mzg5QzE4LjQzNzMgMzEuNjI5OSAxNy44Nzk4IDI5LjQ4OTkgMTguMDIxNyAyNy4zMzgxQzE4LjE2MzYgMjUuMTg2NCAxOC45OTcyIDIzLjEzODEgMjAuMzk4MyAyMS40OTg5QzIxLjc5OTQgMTkuODU5NiAyMy42OTI4IDE4LjcxNzIgMjUuNzk2MiAxOC4yNDJDMjcuODk5NiAxNy43NjY3IDMwLjEwMDMgMTcuOTg0MiAzMi4wNyAxOC44NjE4TTM4IDIwLjAwMThMMjggMzAuMDExOEwyNSAyNy4wMTE4XCIgc3Ryb2tlPVwiIzAzOTg1NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUNGREYzXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz5gLFxyXG4gICAgICB0aXRsZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwdWJsaXNoICR7dGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuY2hlY2tMaXN0TmFtZX0gY2hlY2tsaXN0P2AsXHJcbiAgICAgIGNvbnRlbnQ6IGBQdWJsaXNoaW5nIHdpbGwgbWFrZSB0aGlzIGNoZWNrbGlzdCBsaXZlLCBhbmQgY2hhbmdlcyB3aWxsIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LmAsXHJcbiAgICAgIGJ1dHRvbnR5cGU6ICdjb25maXJtJ1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihUcmF4cG9wdXBDb21wb25lbnQsIHtjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJ30pO1xyXG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmRhdGEgPSBwb3B1cGNvbnRlbnQ7XHJcbiAgICBkaWFsb2dSZWYucmVzdWx0LnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzID09ICdjb25maXJtJykge1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ21vYmlsZXVzYWdlZGV0ZWN0aW9uJyB8fCB0aGlzLnR5cGUgPT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICAgICAgLy8gaWYgKHRoaXMudHlwZSA9PSAnbW9iaWxldXNhZ2VkZXRlY3Rpb24nKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmRldGVjdGlvbkFyZWEgPSB0aGlzLnpvbmVzO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAnc3RvcmVvcGVuYW5kY2xvc2UnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlU3RhcnRUaW1lID0gdGhpcy5jb25maWdEYXRhLm9wZW5UaW1lO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZUVuZFRpbWUgPSB0aGlzLmNvbmZpZ0RhdGEuY2xvc2VUaW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYWxlcnQuYWxlcnRzVG8gPSB0aGlzLmVtYWlsTGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMucHVibGlzaCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb25maWdEYXRhLnN1Ym1pdFR5cGUgPSAncHVibGlzaCc7XHJcbiAgICAgICAgdGhpcy5jb25maWdEYXRhLnJlbW92ZWRVc2VycyA9IHRoaXMucmVtb3ZlVXNlcnM7XHJcbiAgICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVXZWVrRGF5cyA9IHRoaXMuc2VsZWN0ZWREYXlzO1xyXG4gICAgICAgIHRoaXMuY29uZmlnRGF0YS51cGRhdGVDb25maWd1cmUgPSB0aGlzLmRpc2FibGVkUXVlc3Rpb24gPyAgdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29uZmlnRGF0YS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5jb25maWdEYXRhKTtcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5Tb3BTZXJ2aWNlLmNvbmZpZ1VwZGF0ZSh0aGlzLmNvbmZpZ0RhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KGAke3RoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNoZWNrTGlzdE5hbWV9IGNoZWNrbGlzdCBwdWJsaXNoZWQuYCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbJy9tYW5hZ2UvdHJheC9jaGVja2xpc3QnXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdQbGVhc2UgQXNzaWduIGEgVXNlciEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdQbGVhc2UgQXNzaWduIGEgVXNlciEnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGVyciA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ3NvbWV0aGluZyB3ZW50IHdyb25nJztcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnIpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gc2VsZWN0c3RvcmUoZWxlbWVudDogYW55KSB7XHJcbiAgLy8gICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFRyYXhTdG9yZUNvbXBvbmVudCwge1xyXG4gIC8vICAgIGNlbnRlcmVkOnRydWUsc2l6ZTonbWQnXHJcbiAgLy8gICB9KTtcclxuXHJcbiAgLy8gICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZGF0YSA9IGVsZW1lbnQ7XHJcblxyXG4gIC8vICAgZGlhbG9nUmVmLnJlc3VsdC50aGVuKChkYXRhOiBhbnkpID0+IHtcclxuICAvLyAgICAgLy8gY29uc29sZS5sb2coZGF0YSk7XHJcbiAgLy8gICAgIGlmIChkYXRhICYmIGRhdGEubXNnID09ICdjb25maXJtJykge1xyXG4gIC8vICAgICAgIGlmIChkYXRhLnN0b3Jlcy5sZW5ndGgpIHtcclxuICAvLyAgICAgICAgIGxldCBzb3AgPSBkYXRhLnN0b3JlcztcclxuICAvLyAgICAgICAgIGxldCBpZCA9IGVsZW1lbnQuaWQ7XHJcbiAgLy8gICAgICAgICAvLyB0aGlzLlNvcFNlcnZpY2UuYXNzaWduU29wU3RvcmUoc29wLCBpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgICAgLy8gICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gIC8vICAgICAgICAgLy8gICAgIGVsZW1lbnQuc29wX3N0b3JlcyA9IGRhdGEuc3RvcmVzO1xyXG4gIC8vICAgICAgICAgLy8gICAgIHRoaXMuY2hhbmdlZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIC8vICAgICAgICAgLy8gICB9XHJcbiAgLy8gICAgICAgICAvLyB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG5cclxuICAvLyAgICAgICAgIC8vIH0pXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KVxyXG4gIC8vIH1cclxuICBuZXdzdG9yZSgpIHtcclxuICAgIHRoaXMucm91dGUubmF2aWdhdGUoW1wiL21hbmFnZS9zdG9yZXNcIl0sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tsaXN0aWQ6IEpTT04uc3RyaW5naWZ5KHRoaXMub2JqKSB9IH0pO1xyXG4gIH1cclxuICBpbnZpdGV1c2VyKCkge1xyXG4gICAgdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbXCIvY29udHJvbC1wYW5lbC9hc3NpZ24tcm9sZVwiXSwgeyBxdWVyeVBhcmFtczogeyBjaGVja2xpc3RpZDogSlNPTi5zdHJpbmdpZnkodGhpcy5vYmopIH0gfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoU2V0dXAgPT0gJ2RheScgPyB0aGlzLmRheWpzKCkuZm9ybWF0KCdERCcpIDogJyc7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWYWx1ZShldmVudDphbnkpIHtcclxuICAgIGlmKGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggIT0gMCkge1xyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhXZWVrID0gZXZlbnQudGFyZ2V0LnZhbHVlIDwgOSAgPyAnMCcrZXZlbnQudGFyZ2V0LnZhbHVlIDogZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFdlZWsgPSB0aGlzLmRheWpzKCkuZm9ybWF0KCdERCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VkZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZShldmVudDphbnkpIHsgICAgXHJcbiAgICBpZighaXNOYU4oZXZlbnQudGFyZ2V0LnZhbHVlKSkge1xyXG4gICAgICBpZihldmVudC50YXJnZXQudmFsdWVbMF0gPT0gMyAmJiBldmVudC50YXJnZXQudmFsdWVbMV0gPiAxKSB7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gMztcclxuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhXZWVrID0gMztcclxuICAgICAgfVxyXG4gICAgICBpZihldmVudC50YXJnZXQudmFsdWVbMF0gPiAzICYmIGV2ZW50LnRhcmdldC52YWx1ZVsxXSA+PSAwKSB7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlWzBdO1xyXG4gICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFdlZWsgPSBldmVudC50YXJnZXQudmFsdWVbMF07XHJcbiAgICAgIH1cclxuICAgICAgaWYoZXZlbnQudGFyZ2V0LnZhbHVlWzBdIDwgMSkge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFdlZWsgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFdlZWsgPSAnJztcclxuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgc2F2ZWRyYWZ0KCkge1xyXG4gICAgaWYoIXRoaXMudmFsaWRUaW1lKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnSW52YWxpZCBTY2hlZHVsZSBFbmQgVGltZScpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgc3RhcnREYXRlV2l0aFRpbWUsIGVuZERhdGVXaXRoVGltZTtcclxuICAgIGlmKCF0aGlzLnNob3dSYW5nZVZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ1N0YXJ0RGF0ZSA9Jyc7IFxyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdFbmREYXRlID0nJzsgXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSAhPSAnb25ldGltZScpIHtcclxuICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVEYXRlID0nJzsgXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSA9PSAnbW9udGhseScgJiYgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoU2V0dXAgPT0gJ2RhdGUnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFdlZWsgPSB0aGlzLm1vbnRoRGF0ZSArJyAnK3RoaXMubW9udGhEYXk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSA9PSAnbW9udGhseScgJiYgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoU2V0dXAgPT0gJ3NwZWNpZmljJykge1xyXG4gICAgICBpZih0aGlzLnN1Ym1pdHRlZERhdGVzLmxlbmd0aClcclxuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zcGVjaWZpY0RhdGUgPSB0aGlzLnN1Ym1pdHRlZERhdGVzO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSA9PSAncmFuZ2UnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNwZWNpZmljRGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlTGlzdDtcclxuICAgIH1cclxuICAgIC8vIGlmICh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkVHlwZSA9PSAncmFuZ2UnKSB7XHJcbiAgICAvLyAgIGxldCBzdGFydCA9IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlU3RhcnRUaW1lLnNwbGl0KCcgJyk7XHJcbiAgICAvLyAgIGxldCBlbmQgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZUVuZFRpbWUuc3BsaXQoJyAnKTtcclxuICAgIC8vICAgc3RhcnREYXRlV2l0aFRpbWUgPSBzdGFydC5sZW5ndGggPiAyID8gc3RhcnRbMV0gKyAnICcgKyBzdGFydFsyXSA6IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlU3RhcnRUaW1lO1xyXG4gICAgLy8gICBlbmREYXRlV2l0aFRpbWUgPSBlbmQubGVuZ3RoID4gMiA/IGVuZFsxXSArICcgJyArIGVuZFsyXSA6IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlRW5kVGltZTtcclxuICAgIC8vICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVTdGFydFRpbWUgPSB0aGlzLmRheWpzKHRoaXMucmFuZ2VTdGFydCkuZm9ybWF0KCdZWVlZLU1NLUREJykgKyAnICcgKyBzdGFydERhdGVXaXRoVGltZTtcclxuICAgIC8vICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVFbmRUaW1lID0gdGhpcy5kYXlqcyh0aGlzLnJhbmdlRW5kKS5mb3JtYXQoJ1lZWVktTU0tREQnKSArICcgJyArIGVuZERhdGVXaXRoVGltZTtcclxuICAgICAgXHJcbiAgICAvLyAgIGlmICh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVN0YXJ0VGltZSA+IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlRW5kVGltZSkge1xyXG4gICAgLy8gICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlU3RhcnRUaW1lID0gc3RhcnREYXRlV2l0aFRpbWU7XHJcbiAgICAvLyAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVFbmRUaW1lID0gZW5kRGF0ZVdpdGhUaW1lO1xyXG4gICAgLy8gICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnRW5kIHRpbWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gc3RhcnQgdGltZScpO1xyXG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgXHJcbiAgICB0aGlzLnBvcHVwQ291bnQgPSB0aGlzLnBvcHVwQ291bnQgKyAxO1xyXG4gICAgdGhpcy5jb25maWdEYXRhLnN1Ym1pdFR5cGUgPSAnc2F2ZSc7XHJcbiAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5wdWJsaXNoID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbmZpZ0RhdGEucmVtb3ZlZFVzZXJzID0gdGhpcy5yZW1vdmVVc2VycztcclxuICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlV2Vla0RheXMgPSB0aGlzLnNlbGVjdGVkRGF5cztcclxuICAgIGNvbnN0IHBvcHVwY29udGVudCA9IHtcclxuICAgICAgZGlzcGxheXByb3A6IGZhbHNlLFxyXG4gICAgICBpbWFnZXNyYzogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNGRUYwQzdcIi8+PHBhdGggZD1cIk0yNy45OTk4IDI0LjAwMTJWMjguMDAxMk0yNy45OTk4IDMyLjAwMTJIMjguMDA5OE0yNi4yODk4IDE4Ljg2MTJMMTcuODE5OCAzMy4wMDEyQzE3LjY0NTEgMzMuMzAzNiAxNy41NTI3IDMzLjY0NjUgMTcuNTUxOCAzMy45OTU3QzE3LjU1MDggMzQuMzQ0OSAxNy42NDEzIDM0LjY4ODMgMTcuODE0MiAzNC45OTE3QzE3Ljk4NzEgMzUuMjk1MSAxOC4yMzY1IDM1LjU0NzkgMTguNTM3NSAzNS43MjVDMTguODM4NSAzNS45MDIxIDE5LjE4MDYgMzUuOTk3MyAxOS41Mjk4IDM2LjAwMTJIMzYuNDY5OEMzNi44MTkgMzUuOTk3MyAzNy4xNjExIDM1LjkwMjEgMzcuNDYyMSAzNS43MjVDMzcuNzYzMSAzNS41NDc5IDM4LjAxMjQgMzUuMjk1MSAzOC4xODU0IDM0Ljk5MTdDMzguMzU4MyAzNC42ODgzIDM4LjQ0ODggMzQuMzQ0OSAzOC40NDc4IDMzLjk5NTdDMzguNDQ2OCAzMy42NDY1IDM4LjM1NDQgMzMuMzAzNiAzOC4xNzk4IDMzLjAwMTJMMjkuNzA5OCAxOC44NjEyQzI5LjUzMTUgMTguNTY3MyAyOS4yODA1IDE4LjMyNDMgMjguOTgxIDE4LjE1NTdDMjguNjgxNCAxNy45ODcgMjguMzQzNSAxNy44OTg0IDI3Ljk5OTggMTcuODk4NEMyNy42NTYgMTcuODk4NCAyNy4zMTgxIDE3Ljk4NyAyNy4wMTg2IDE4LjE1NTdDMjYuNzE5MSAxOC4zMjQzIDI2LjQ2OCAxOC41NjczIDI2LjI4OTggMTguODYxMlpcIiBzdHJva2U9XCIjREM2ODAzXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNGRkZBRUJcIiBzdHJva2Utd2lkdGg9XCI4XCIvPjwvc3ZnPicsXHJcbiAgICAgIHRpdGxlOiBgVW5zYXZlZCBjaGFuZ2VzYCxcclxuICAgICAgY29udGVudDogYERvIHlvdSB3YW50IHRvIHNhdmUgYXMgZHJhZnQ/YCxcclxuICAgICAgYnV0dG9udHlwZTogJ2RyYWZ0J1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihUcmF4cG9wdXBDb21wb25lbnQsIHtcclxuICAgICBjZW50ZXJlZDp0cnVlLHNpemU6J21kJ1xyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZGF0YSA9IHBvcHVwY29udGVudDtcclxuICAgIGRpYWxvZ1JlZi5yZXN1bHQudGhlbigocmVzKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ21vYmlsZXVzYWdlZGV0ZWN0aW9uJyB8fCB0aGlzLnR5cGUgPT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ21vYmlsZXVzYWdlZGV0ZWN0aW9uJykge1xyXG4gICAgICAgICAgLy8gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuZGV0ZWN0aW9uQXJlYSA9IHRoaXMuem9uZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVTdGFydFRpbWUgPSB0aGlzLmNvbmZpZ0RhdGEub3BlblRpbWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZUVuZFRpbWUgPSB0aGlzLmNvbmZpZ0RhdGEuY2xvc2VUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hc3NpZ25lZFVzZXJzID0gdGhpcy5zb3BTdG9yZXM7XHJcbiAgICAgICAgLy8gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYWxlcnQuYWxlcnRzVG8gPSB0aGlzLmVtYWlsTGlzdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFyZXMpIHtcclxuICAgICAgICB0aGlzLnBvcHVwQ291bnQgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXMgPT0gJ2NvbmZpcm0nKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWdEYXRhLmNsaWVudElkID0gdGhpcy5jbGllbnRJZDtcclxuICAgICAgICB0aGlzLlNvcFNlcnZpY2UuY29uZmlnVXBkYXRlKHRoaXMuY29uZmlnRGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdCgnRHJhZnQgaGFzIGJlZW4gc2F2ZWQgc3VjY2Vzc2Z1bGx5LicpO1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlLm5hdmlnYXRlKFsnL21hbmFnZS90cmF4L2NoZWNrbGlzdCddKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIFJldXBsb2FkKCkge1xyXG4gICAgaWYodGhpcy5maWxlSW5wdXQpIHtcclxuICAgICAgdGhpcy5maWxlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5maWxlSW5wdXQxKSB7XHJcbiAgICAgIHRoaXMuZmlsZUlucHV0MS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBvcHVwQ291bnQgPSB0aGlzLnBvcHVwQ291bnQgKyAxO1xyXG4gICAgY29uc3QgcG9wdXBjb250ZW50ID0ge1xyXG4gICAgICBkaXNwbGF5cHJvcDogZmFsc2UsXHJcbiAgICAgIGltYWdlc3JjOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCI+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0ZFRjBDN1wiLz48cGF0aCBkPVwiTTI3Ljk5OTggMjQuMDAxMlYyOC4wMDEyTTI3Ljk5OTggMzIuMDAxMkgyOC4wMDk4TTI2LjI4OTggMTguODYxMkwxNy44MTk4IDMzLjAwMTJDMTcuNjQ1MSAzMy4zMDM2IDE3LjU1MjcgMzMuNjQ2NSAxNy41NTE4IDMzLjk5NTdDMTcuNTUwOCAzNC4zNDQ5IDE3LjY0MTMgMzQuNjg4MyAxNy44MTQyIDM0Ljk5MTdDMTcuOTg3MSAzNS4yOTUxIDE4LjIzNjUgMzUuNTQ3OSAxOC41Mzc1IDM1LjcyNUMxOC44Mzg1IDM1LjkwMjEgMTkuMTgwNiAzNS45OTczIDE5LjUyOTggMzYuMDAxMkgzNi40Njk4QzM2LjgxOSAzNS45OTczIDM3LjE2MTEgMzUuOTAyMSAzNy40NjIxIDM1LjcyNUMzNy43NjMxIDM1LjU0NzkgMzguMDEyNCAzNS4yOTUxIDM4LjE4NTQgMzQuOTkxN0MzOC4zNTgzIDM0LjY4ODMgMzguNDQ4OCAzNC4zNDQ5IDM4LjQ0NzggMzMuOTk1N0MzOC40NDY4IDMzLjY0NjUgMzguMzU0NCAzMy4zMDM2IDM4LjE3OTggMzMuMDAxMkwyOS43MDk4IDE4Ljg2MTJDMjkuNTMxNSAxOC41NjczIDI5LjI4MDUgMTguMzI0MyAyOC45ODEgMTguMTU1N0MyOC42ODE0IDE3Ljk4NyAyOC4zNDM1IDE3Ljg5ODQgMjcuOTk5OCAxNy44OTg0QzI3LjY1NiAxNy44OTg0IDI3LjMxODEgMTcuOTg3IDI3LjAxODYgMTguMTU1N0MyNi43MTkxIDE4LjMyNDMgMjYuNDY4IDE4LjU2NzMgMjYuMjg5OCAxOC44NjEyWlwiIHN0cm9rZT1cIiNEQzY4MDNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0ZGRkFFQlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+PC9zdmc+YCxcclxuICAgICAgdGl0bGU6IGBSZXVwbG9hZCBDU1ZgLFxyXG4gICAgICBjb250ZW50OiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlcGxhY2UgZXhpc3RpbmcgZGF0YSBieSB1cGxvYWRpbmcgbmV3IGZpbGU/IFlvdXIgZXhpc3RpbmcgZGF0YSB3aWxsIGdldCByZXBsYWNlZCB3aXRoIHRoZSBuZXcgb25lLmAsXHJcbiAgICAgIGJ1dHRvbnR5cGU6ICdSZXVwbG9hZCdcclxuICAgIH1cclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVHJheHBvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOnRydWUsc2l6ZTonbWQnLFxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZGF0YSA9IHBvcHVwY29udGVudFxyXG4gICAgZGlhbG9nUmVmLnJlc3VsdC50aGVuKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcyA9PSAnY29uZmlybScpIHtcclxuICAgICAgICB0aGlzLnJldXBsb2FkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNoYW5nZWRldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBsZXQgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2t0X2FjY291bnRfdGVhbV9zaXplX3NlbGVjdF8yJyk7XHJcbiAgICAgICAgZWxlPy5jbGljaygpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcbiAgLy8gaW52aXRlbmV3dXNlcigpIHtcclxuICAvLyAgIHRoaXMucG9wdXBDb3VudCA9IHRoaXMucG9wdXBDb3VudCArIDE7XHJcbiAgLy8gICBjb25zdCBwb3B1cGNvbnRlbnQgPSB7XHJcbiAgLy8gICAgIGRpc3BsYXlwcm9wOiBmYWxzZSxcclxuICAvLyAgICAgaW1hZ2VzcmM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRkVGMEM3XCIvPjxwYXRoIGQ9XCJNMjcuOTk5OCAyNC4wMDEyVjI4LjAwMTJNMjcuOTk5OCAzMi4wMDEySDI4LjAwOThNMjYuMjg5OCAxOC44NjEyTDE3LjgxOTggMzMuMDAxMkMxNy42NDUxIDMzLjMwMzYgMTcuNTUyNyAzMy42NDY1IDE3LjU1MTggMzMuOTk1N0MxNy41NTA4IDM0LjM0NDkgMTcuNjQxMyAzNC42ODgzIDE3LjgxNDIgMzQuOTkxN0MxNy45ODcxIDM1LjI5NTEgMTguMjM2NSAzNS41NDc5IDE4LjUzNzUgMzUuNzI1QzE4LjgzODUgMzUuOTAyMSAxOS4xODA2IDM1Ljk5NzMgMTkuNTI5OCAzNi4wMDEySDM2LjQ2OThDMzYuODE5IDM1Ljk5NzMgMzcuMTYxMSAzNS45MDIxIDM3LjQ2MjEgMzUuNzI1QzM3Ljc2MzEgMzUuNTQ3OSAzOC4wMTI0IDM1LjI5NTEgMzguMTg1NCAzNC45OTE3QzM4LjM1ODMgMzQuNjg4MyAzOC40NDg4IDM0LjM0NDkgMzguNDQ3OCAzMy45OTU3QzM4LjQ0NjggMzMuNjQ2NSAzOC4zNTQ0IDMzLjMwMzYgMzguMTc5OCAzMy4wMDEyTDI5LjcwOTggMTguODYxMkMyOS41MzE1IDE4LjU2NzMgMjkuMjgwNSAxOC4zMjQzIDI4Ljk4MSAxOC4xNTU3QzI4LjY4MTQgMTcuOTg3IDI4LjM0MzUgMTcuODk4NCAyNy45OTk4IDE3Ljg5ODRDMjcuNjU2IDE3Ljg5ODQgMjcuMzE4MSAxNy45ODcgMjcuMDE4NiAxOC4xNTU3QzI2LjcxOTEgMTguMzI0MyAyNi40NjggMTguNTY3MyAyNi4yODk4IDE4Ljg2MTJaXCIgc3Ryb2tlPVwiI0RDNjgwM1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRkZGQUVCXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz5gLFxyXG4gIC8vICAgICB0aXRsZTogYEludml0ZSBuZXcgdXNlcnMgYWRkZWQgaW4gQ1NWYCxcclxuICAvLyAgICAgY29udGVudDogYFRoaXMgQ1NWIGNvbnRhaW5zIG5ldyB1c2Vycy4gSW52aXRlIHVzZXJzIGJ5IHNlbmRpbmcgbWFpbCB0byB0aGVtLiA8YnI+YCxcclxuICAvLyAgICAgYnV0dG9udHlwZTogJ0ludml0ZSdcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVHJheHBvcHVwQ29tcG9uZW50LCB7XHJcbiAgLy8gICAgIGNlbnRlcmVkOnRydWUsc2l6ZTonbWQnXHJcbiAgLy8gICB9KTtcclxuICAvLyAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gcG9wdXBjb250ZW50O1xyXG4gIC8vICAgZGlhbG9nUmVmLnJlc3VsdC50aGVuKChyZXMpID0+IHtcclxuXHJcbiAgLy8gICAgIGlmIChyZXMgPT0gJ2NvbmZpcm0nKSB7XHJcbiAgLy8gICAgICAgLy8gdGhpcy5Tb3BTZXJ2aWNlLmNvbmZpZ1VwZGF0ZSh0aGlzLmNvbmZpZ0RhdGEpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAvLyAgICAgICAvLyAgIC8vIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcblxyXG4gIC8vICAgICAgIC8vICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuY29kZSA9PSAyMDApIHtcclxuICAvLyAgICAgICAvLyAgICAgU3dhbC5maXJlKHtcclxuICAvLyAgICAgICAvLyAgICAgICB0b2FzdDogdHJ1ZSxcclxuICAvLyAgICAgICAvLyAgICAgICBpY29uSHRtbDogJzxpbWcgIHNyYz1cIi4uLy4uLy4uLy4uL2Fzc2V0cy9JY29ucy9jaGVja2xpc3QtdW5wdWJsaXNoZWQtaWNvbi5zdmdcIj4nLFxyXG4gIC8vICAgICAgIC8vICAgICAgIC8vIHRpdGxlVGV4dDogYEVtYWlsIHNlbnQgc3VjY2VzZnVsbHlgLFxyXG4gIC8vICAgICAgIC8vICAgICAgIGh0bWw6IGA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgLy8gICAgICAgLy8gICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC0yXCI+XHJcbiAgLy8gICAgICAgLy8gICAgICAgPGg0PkNTViBoYXMgYmVlbiBSZXVwbG9hZGVkIHN1Y2Nlc3NmdWxseS48L2g0PlxyXG4gIC8vICAgICAgIC8vICAgICAgIDwvZGl2PlxyXG4gIC8vICAgICAgIC8vICAgICAgIDwvZGl2PmAsXHJcbiAgLy8gICAgICAgLy8gICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gIC8vICAgICAgIC8vICAgICAgIHNob3dDb25maXJtQnV0dG9uOiBmYWxzZSxcclxuICAvLyAgICAgICAvLyAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXHJcbiAgLy8gICAgICAgLy8gICAgICAgdGltZXI6IDYwMDAsXHJcbiAgLy8gICAgICAgLy8gICAgICAgdGltZXJQcm9ncmVzc0JhcjogdHJ1ZSxcclxuICAvLyAgICAgICAvLyAgICAgICBkaWRPcGVuOiAodG9hc3QpID0+IHtcclxuICAvLyAgICAgICAvLyAgICAgICAgIHRvYXN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBTd2FsLnN0b3BUaW1lcilcclxuICAvLyAgICAgICAvLyAgICAgICAgIHRvYXN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBTd2FsLnJlc3VtZVRpbWVyKVxyXG4gIC8vICAgICAgIC8vICAgICAgICAgJChcIiNrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiKS52YWwoJycpXHJcbiAgLy8gICAgICAgLy8gICAgICAgICB0aGlzLmNoYW5nZWRldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAvLyAgICAgICAvLyAgICAgICB9XHJcblxyXG4gIC8vICAgICAgIC8vICAgICB9KVxyXG5cclxuICAvLyAgICAgICAvLyAgICAgLy8gdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbJy9zb3AvQ2hlY2tsaXN0cyddKTtcclxuXHJcbiAgLy8gICAgICAgLy8gICB9XHJcbiAgLy8gICAgICAgLy8gfSlcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSlcclxuXHJcbiAgLy8gfVxyXG4gIC8vIEFkZHN0b3JlKCkge1xyXG4gIC8vICAgdGhpcy5wb3B1cENvdW50ID0gdGhpcy5wb3B1cENvdW50ICsgMTtcclxuICAvLyAgIGNvbnN0IHBvcHVwY29udGVudCA9IHtcclxuICAvLyAgICAgZGlzcGxheXByb3A6IGZhbHNlLFxyXG4gIC8vICAgICBpbWFnZXNyYzogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNGRUYwQzdcIi8+PHBhdGggZD1cIk0yNy45OTk4IDI0LjAwMTJWMjguMDAxMk0yNy45OTk4IDMyLjAwMTJIMjguMDA5OE0yNi4yODk4IDE4Ljg2MTJMMTcuODE5OCAzMy4wMDEyQzE3LjY0NTEgMzMuMzAzNiAxNy41NTI3IDMzLjY0NjUgMTcuNTUxOCAzMy45OTU3QzE3LjU1MDggMzQuMzQ0OSAxNy42NDEzIDM0LjY4ODMgMTcuODE0MiAzNC45OTE3QzE3Ljk4NzEgMzUuMjk1MSAxOC4yMzY1IDM1LjU0NzkgMTguNTM3NSAzNS43MjVDMTguODM4NSAzNS45MDIxIDE5LjE4MDYgMzUuOTk3MyAxOS41Mjk4IDM2LjAwMTJIMzYuNDY5OEMzNi44MTkgMzUuOTk3MyAzNy4xNjExIDM1LjkwMjEgMzcuNDYyMSAzNS43MjVDMzcuNzYzMSAzNS41NDc5IDM4LjAxMjQgMzUuMjk1MSAzOC4xODU0IDM0Ljk5MTdDMzguMzU4MyAzNC42ODgzIDM4LjQ0ODggMzQuMzQ0OSAzOC40NDc4IDMzLjk5NTdDMzguNDQ2OCAzMy42NDY1IDM4LjM1NDQgMzMuMzAzNiAzOC4xNzk4IDMzLjAwMTJMMjkuNzA5OCAxOC44NjEyQzI5LjUzMTUgMTguNTY3MyAyOS4yODA1IDE4LjMyNDMgMjguOTgxIDE4LjE1NTdDMjguNjgxNCAxNy45ODcgMjguMzQzNSAxNy44OTg0IDI3Ljk5OTggMTcuODk4NEMyNy42NTYgMTcuODk4NCAyNy4zMTgxIDE3Ljk4NyAyNy4wMTg2IDE4LjE1NTdDMjYuNzE5MSAxOC4zMjQzIDI2LjQ2OCAxOC41NjczIDI2LjI4OTggMTguODYxMlpcIiBzdHJva2U9XCIjREM2ODAzXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNGRkZBRUJcIiBzdHJva2Utd2lkdGg9XCI4XCIvPjwvc3ZnPmAsXHJcbiAgLy8gICAgIHRpdGxlOiBgSW52aXRlIG5ldyB1c2VycyBhZGRlZCBpbiBDU1ZgLFxyXG4gIC8vICAgICBjb250ZW50OiBgVGhpcyBDU1YgY29udGFpbnMgbmV3IHVzZXJzLiBJbnZpdGUgdXNlcnMgYnkgc2VuZGluZyBtYWlsIHRvIHRoZW0uIDxicj5gLFxyXG4gIC8vICAgICBzdWJ0aXRsZTogJ0xLU1QwMDksIFNUMzA0NScsXHJcbiAgLy8gICAgIGJ1dHRvbnR5cGU6ICdBZGRzdG9yZSdcclxuICAvLyAgIH1cclxuICAvLyAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVHJheHBvcHVwQ29tcG9uZW50LCB7XHJcbiAgLy8gICAgIGNlbnRlcmVkOnRydWUsc2l6ZTonbWQnXHJcbiAgLy8gICB9KTtcclxuICAvLyAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gcG9wdXBjb250ZW50O1xyXG4gIC8vICAgZGlhbG9nUmVmLnJlc3VsdC50aGVuKChyZXMpID0+IHtcclxuXHJcbiAgLy8gICAgIGlmIChyZXMgPT0gJ2NvbmZpcm0nKSB7XHJcbiAgLy8gICAgICAgLy8gdGhpcy5Tb3BTZXJ2aWNlLmNvbmZpZ1VwZGF0ZSh0aGlzLmNvbmZpZ0RhdGEpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAvLyAgICAgICAvLyAgIC8vIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcblxyXG4gIC8vICAgICAgIC8vICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuY29kZSA9PSAyMDApIHtcclxuICAvLyAgICAgICAvLyAgICAgU3dhbC5maXJlKHtcclxuICAvLyAgICAgICAvLyAgICAgICB0b2FzdDogdHJ1ZSxcclxuICAvLyAgICAgICAvLyAgICAgICBpY29uSHRtbDogJzxpbWcgIHNyYz1cIi4uLy4uLy4uLy4uL2Fzc2V0cy9JY29ucy9jaGVja2xpc3QtdW5wdWJsaXNoZWQtaWNvbi5zdmdcIj4nLFxyXG4gIC8vICAgICAgIC8vICAgICAgIC8vIHRpdGxlVGV4dDogYEVtYWlsIHNlbnQgc3VjY2VzZnVsbHlgLFxyXG4gIC8vICAgICAgIC8vICAgICAgIGh0bWw6IGA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgLy8gICAgICAgLy8gICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC0yXCI+XHJcbiAgLy8gICAgICAgLy8gICAgICAgPGg0PkNTViBoYXMgYmVlbiBSZXVwbG9hZGVkIHN1Y2Nlc3NmdWxseS48L2g0PlxyXG4gIC8vICAgICAgIC8vICAgICAgIDwvZGl2PlxyXG4gIC8vICAgICAgIC8vICAgICAgIDwvZGl2PmAsXHJcbiAgLy8gICAgICAgLy8gICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gIC8vICAgICAgIC8vICAgICAgIHNob3dDb25maXJtQnV0dG9uOiBmYWxzZSxcclxuICAvLyAgICAgICAvLyAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXHJcbiAgLy8gICAgICAgLy8gICAgICAgdGltZXI6IDYwMDAsXHJcbiAgLy8gICAgICAgLy8gICAgICAgdGltZXJQcm9ncmVzc0JhcjogdHJ1ZSxcclxuICAvLyAgICAgICAvLyAgICAgICBkaWRPcGVuOiAodG9hc3QpID0+IHtcclxuICAvLyAgICAgICAvLyAgICAgICAgIHRvYXN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBTd2FsLnN0b3BUaW1lcilcclxuICAvLyAgICAgICAvLyAgICAgICAgIHRvYXN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBTd2FsLnJlc3VtZVRpbWVyKVxyXG4gIC8vICAgICAgIC8vICAgICAgICAgJChcIiNrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiKS52YWwoJycpXHJcbiAgLy8gICAgICAgLy8gICAgICAgICB0aGlzLmNoYW5nZWRldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAvLyAgICAgICAvLyAgICAgICB9XHJcblxyXG4gIC8vICAgICAgIC8vICAgICB9KVxyXG5cclxuICAvLyAgICAgICAvLyAgICAgLy8gdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbJy9zb3AvQ2hlY2tsaXN0cyddKTtcclxuXHJcbiAgLy8gICAgICAgLy8gICB9XHJcbiAgLy8gICAgICAgLy8gfSlcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSlcclxuXHJcbiAgLy8gfVxyXG4gIC8vIGFkZFVzZXIoKSB7XHJcbiAgLy8gICB0aGlzLmFkZFVzZXJGb3JtID0gIXRoaXMuYWRkVXNlckZvcm07XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgLy8gY3JlYXRldXNlclBvcHVwKHR5cGU6IHN0cmluZywgcmVjb3JkOiBhbnkgPSBudWxsKTogdm9pZCB7XHJcbiAgLy8gICAgIGlmICh0eXBlID09ICd2aWV3Jykge1xyXG4gIC8vICAgICAgIHRoaXMucG9wVXBUaXRsZSA9IFwiVmlldyBVc2VyIERldGFpbHNcIjtcclxuICAvLyAgICAgfSBlbHNlIGlmICh0eXBlID09ICdlZGl0Jykge1xyXG4gIC8vICAgICAgIHRoaXMucG9wVXBUaXRsZSA9IFwiRWRpdCBVc2VyIERldGFpbHNcIjtcclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICB0aGlzLnBvcFVwVGl0bGUgPSBcIkVudGVyIE5ldyBVc2VyIERldGFpbHNcIjtcclxuICAvLyAgICAgICAvLyB0aGlzLnBvcFVwVGl0bGUgPSBcIkVudGVyIE5ldyBVc2VyIERldGFpbHNcIjtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBsZXQgZGF0YSA9IHtcclxuICAvLyAgICAgICByZWNvcmQ6IHJlY29yZCxcclxuICAvLyAgICAgICB0eXBlOiB0eXBlLFxyXG4gIC8vICAgICAgIHRpdGxlOiB0aGlzLnBvcFVwVGl0bGVcclxuICAvLyAgICAgfVxyXG5cclxuICAvLyAgICAgY29uc3QgZGlhbG9nUmVmX2NyZWF0ZVVzZXIgPSB0aGlzLmRpYWxvZy5vcGVuKFVwbG9hZFNpbmdsZVVzZXJDb21wb25lbnQsIHtcclxuICAvLyAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLW1vZGFsYm94JyxcclxuICAvLyAgICAgICBkYXRhOiBkYXRhXHJcbiAgLy8gICAgIH0pO1xyXG5cclxuICAvLyAgICAgZGlhbG9nUmVmX2NyZWF0ZVVzZXIuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgdGhpcy5zaG93SW50cm8gPSBmYWxzZTtcclxuICAvLyAgICAgICBpZiAoIXJlY29yZCAmJiByZXMgJiYgcmVzLmRhdGEuY29kZSA9PSAyMDApIHtcclxuICAvLyAgICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgLy8gICAgICAgICAgIGljb246ICdzdWNjZXNzJyxcclxuICAvLyAgICAgICAgICAgdGV4dDogJ1RoZSB1c2VyIGludml0ZSBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxseSB0byB0aGUgdXNlciBhbmQgYWRkZWQgdG8gdGhlIHBsYXRmb3JtIScsXHJcbiAgLy8gICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnT0snLFxyXG4gIC8vICAgICAgICAgICBhbGxvd091dHNpZGVDbGljazogZmFsc2UsXHJcbiAgLy8gICAgICAgICAgIGhlaWdodEF1dG86IGZhbHNlXHJcbiAgLy8gICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcclxuICAvLyAgICAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuc2VhcmNoVXNlciA9ICcnXHJcbiAgLy8gICAgICAgICAgICAgdGhpcy5hZGRVc2VyRm9ybSA9IGZhbHNlO1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gMTtcclxuICAvLyAgICAgICAgICAgICAvLyB0aGlzLmxvYWRSZWNvcmRzKDAsIHRoaXMuc2l6ZSlcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfSlcclxuICAvLyAgICAgICB9IGVsc2UgaWYgKHJlcyAmJiByZXMuZGF0YS5jb2RlID09IDIwMCkge1xyXG4gIC8vICAgICAgICAgU3dhbC5maXJlKHtcclxuICAvLyAgICAgICAgICAgaWNvbjogJ3N1Y2Nlc3MnLFxyXG4gIC8vICAgICAgICAgICB0ZXh0OiAnVXNlciBVcGRhdGVkIFN1Y2Nlc3NmdWxseSEnLFxyXG4gIC8vICAgICAgICAgICBoZWlnaHRBdXRvOiBmYWxzZVxyXG4gIC8vICAgICAgICAgfSk7XHJcbiAgLy8gICAgICAgICB0aGlzLnNlYXJjaFVzZXIgPSAnJ1xyXG4gIC8vICAgICAgICAgdGhpcy5hZGRVc2VyRm9ybSA9IGZhbHNlO1xyXG4gIC8vICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSAxO1xyXG4gIC8vICAgICAgICAgLy8gdGhpcy5sb2FkUmVjb3JkcygwLCB0aGlzLnNpemUpXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9KVxyXG4gIC8vICAgfSBcclxuXHJcblxyXG4gIC8vIGNyZWF0ZXVzZXJQb3B1cCgpIHtcclxuICAvLyAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVXBsb2FkU2luZ2xlVXNlckNvbXBvbmVudCwge1xyXG4gIC8vICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLW1vZGFsYm94J1xyXG5cclxuICAvLyAgIH0pO1xyXG4gIC8vICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcclxuICAvLyAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuXHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gfVxyXG5cclxuICAvLyB0cmFuc2ZlckZvcm1EYXRhKCkge1xyXG4gIC8vICAgdGhpcy5Tb3BTZXJ2aWNlLnNvcERhdGEuYXNPYnNlcnZhYmxlKClcclxuICAvLyB9XHJcbiAgc2F2ZWFuZHJlZGlyZWN0KGlkOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnR5cGUgPT0gJ21vYmlsZXVzYWdlZGV0ZWN0aW9uJyB8fCB0aGlzLnR5cGUgPT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJykge1xyXG4gICAgICBpZiAodGhpcy50eXBlID09ICdtb2JpbGV1c2FnZWRldGVjdGlvbicpIHtcclxuICAgICAgICAvLyB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5kZXRlY3Rpb25BcmVhID0gdGhpcy56b25lcztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50eXBlID09ICdzdG9yZW9wZW5hbmRjbG9zZScpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVN0YXJ0VGltZSA9IHRoaXMuY29uZmlnRGF0YS5vcGVuVGltZTtcclxuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZUVuZFRpbWUgPSB0aGlzLmNvbmZpZ0RhdGEuY2xvc2VUaW1lO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFsZXJ0LmFsZXJ0c1RvID0gdGhpcy5lbWFpbExpc3Q7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbmZpZ0RhdGEuc3VibWl0VHlwZSA9ICdzYXZlJztcclxuICAgIHRoaXMuY29uZmlnRGF0YS5yZW1vdmVkVXNlcnMgPSB0aGlzLnJlbW92ZVVzZXJzO1xyXG4gICAgXHJcbiAgICBsZXQgc3RhcnREYXRlV2l0aFRpbWUsIGVuZERhdGVXaXRoVGltZTtcclxuICAgIGlmKCF0aGlzLnNob3dSYW5nZVZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ1N0YXJ0RGF0ZSA9Jyc7IFxyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdFbmREYXRlID0nJzsgXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSAhPSAnb25ldGltZScpIHtcclxuICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVEYXRlID0nJzsgXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlID09ICdtb250aGx5JyAmJiB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhTZXR1cCA9PSAnZGF0ZScpIHtcclxuICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoV2VlayA9IHRoaXMubW9udGhEYXRlICsnICcrIHRoaXMubW9udGhEYXk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSA9PSAnbW9udGhseScgJiYgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoU2V0dXAgPT0gJ3NwZWNpZmljJykge1xyXG4gICAgICBpZih0aGlzLnN1Ym1pdHRlZERhdGVzLmxlbmd0aClcclxuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zcGVjaWZpY0RhdGUgPSB0aGlzLnN1Ym1pdHRlZERhdGVzO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUgPT0gJ3JhbmdlJyAmJiB0aGlzLnNlbGVjdGVkRGF0ZUxpc3QubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNwZWNpZmljRGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlTGlzdDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbmZpZ0RhdGEuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkO1xyXG5cclxuICAgIHRoaXMuU29wU2VydmljZS5jb25maWdVcGRhdGUodGhpcy5jb25maWdEYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLnJvdXRlLm5hdmlnYXRlKFtcIi9tYW5hZ2UvdHJheC9jcmVhdGVDaGVja2xpc3RcIl0sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tsaXN0SWQ6IGlkIH0gfSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHZhbGlkYXRlVGltZSgpIHtcclxuICAgIGxldCBzdGFydFRpbWUgPSB0aGlzLmRheWpzKHRoaXMuc3RhcnRUaW1lLCAnSEg6bW0nKVxyXG4gICAgbGV0IGVuZFRpbWUgPSB0aGlzLmRheWpzKHRoaXMuZW5kVGltZSwgJ0hIOm1tJylcclxuICAgIGlmICggdGhpcy5zaG93UmFuZ2VWYWx1ZSkge1xyXG4gICAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnU3RhcnREYXRlICE9ICcnICYmIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdTdGFydERhdGUgIT0gbnVsbCAmJiAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuY29uZmlnRW5kRGF0ZSAhPSAnJyAmJiB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdFbmREYXRlICE9IG51bGwpIHtcclxuICAgICAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnU3RhcnREYXRlID09IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdFbmREYXRlKSB7XHJcbiAgICAgICAgICBpZiAoc3RhcnRUaW1lID4gZW5kVGltZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkVGltZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ludmFsaWQgU2NoZWR1bGUgRW5kIFRpbWUnKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRUaW1lID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuY29uZmlnU3RhcnREYXRlID4gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuY29uZmlnRW5kRGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZFRpbWUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnSW52YWxpZCBTY2hlZHVsZSBFbmQgRGF0ZScpO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRUaW1lID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnZhbGlkVGltZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCBzdGFydFRpbWUgPiBlbmRUaW1lKSB7XHJcbiAgICAgIHRoaXMudmFsaWRUaW1lID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnSW52YWxpZCBTY2hlZHVsZSBFbmQgVGltZScpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy52YWxpZFRpbWUgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgdXBkYXRlVGltZShkYXRhOiBhbnkpIHtcclxuICAgIGlmKHRoaXMudmFsaWRhdGVUaW1lKCkpIHtcclxuICAgICAgaWYgKGRhdGEgPT0gJ3N0YXJ0Jykge1xyXG4gICAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlU3RhcnRUaW1lID0gdGhpcy5kYXlqcyh0aGlzLnN0YXJ0VGltZSwgJ0hIOm1tJykuZm9ybWF0KCdoaDptbSBBJylcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZUVuZFRpbWUgPSB0aGlzLmRheWpzKHRoaXMuZW5kVGltZSwgJ0hIOm1tJykuZm9ybWF0KCdoaDptbSBBJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgXHJcbiAgfVxyXG4gIHVwZGF0ZVNjaGVkdWxlKGV2ZW50OmFueSkge1xyXG4gICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoU2V0dXAgPSAnJztcclxuICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWREYXkgPSAnMDEnO1xyXG4gICAgdGhpcy5zZWxlY3RlZERheXMgPSBbXTtcclxuICAgIHRoaXMuc3VibWl0dGVkRGF0ZXMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZUxpc3QgPSBbXTtcclxuICAgIHRoaXMuc3BlY2lmaWMgPSBmYWxzZTtcclxuICAgIHRoaXMubW9udGhEYXRlID0gJyc7XHJcbiAgICB0aGlzLm1vbnRoRGF5ID0gJyc7XHJcbiAgICB0aGlzLnNob3dEcm9wRG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UmFuZ2VWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZSA9PSAncmFuZ2UnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgaWYoZXZlbnQudGFyZ2V0LnZhbHVlID09ICdyYW5nZScpIHtcclxuICAgICAgLy8gdGhpcy5yZWZyZXNoUGlja2VyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3BlY2lmaWMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGVMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNwZWNpZmljRGF0ZSA9IFtdO1xyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdTdGFydERhdGUgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnU3RhcnREYXRlIHx8IHRoaXMuZGF5anMoKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuY29uZmlnRW5kRGF0ZSA9IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdFbmREYXRlIHx8IHRoaXMuZGF5anMoKS5hZGQoMSwnZGF5JykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbmREYXRlID0ge3N0YXJ0RGF0ZTp0aGlzLmRheWpzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdFbmREYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKSxlbmREYXRlOnRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ0VuZERhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpfTtcclxuICAgICAgdGhpcy5taW5FbmREYXRlID0gdGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZSkuZm9ybWF0KCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdGFydERhdGUgPSB7c3RhcnREYXRlOnRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyksZW5kRGF0ZTp0aGlzLmRheWpzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdTdGFydERhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpfTtcclxuICAgICAgdGhpcy5taW5TdGFydERhdGUgPSB0aGlzLmRheWpzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdTdGFydERhdGUpLmZvcm1hdCgpO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdTdGFydERhdGUgPSAnJztcclxuICAgICAgdGhpcy5zZWxlY3RlZFN0YXJ0RGF0ZSA9ICcnO1xyXG4gICAgICB0aGlzLm1pblN0YXJ0RGF0ZSA9ICcnO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW5kRGF0ZSA9ICcnO1xyXG4gICAgICB0aGlzLm1pbkVuZERhdGUgPSAnJztcclxuICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuY29uZmlnRW5kRGF0ZSA9IHRoaXMuZGF5anMoKS5hZGQoMSwnZGF5JykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgIC8vIHRoaXMucmVmcmVzaFBpY2tlciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYoZXZlbnQudGFyZ2V0LnZhbHVlID09ICd3ZWVrZGF5Jykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF5cyA9IFsnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheSddO1xyXG4gICAgfVxyXG4gICAgaWYoZXZlbnQudGFyZ2V0LnZhbHVlID09ICd3ZWVrbHknKSB7XHJcbiAgICAgIGxldCB0b2RheURhdGUgPSB0aGlzLmRheWpzKCkuZm9ybWF0KCdkZGRkJyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXlzID0gW3RvZGF5RGF0ZV07XHJcbiAgICB9XHJcbiAgICBpZihldmVudC50YXJnZXQudmFsdWUgPT0gJ21vbnRobHknKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFNldHVwID0gJ2RheSc7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFdlZWsgPSB0aGlzLmRheWpzKCkuZm9ybWF0KCdERCcpO1xyXG4gICAgfVxyXG4gICAgaWYoWydkYWlseScsJ29uZXRpbWUnXS5pbmNsdWRlcyhldmVudC50YXJnZXQudmFsdWUpIHx8IChldmVudC50YXJnZXQudmFsdWUgPT0gJ21vbnRobHknICYmIFsnZGF5JywnZGF0ZSddLmluY2x1ZGVzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFNldHVwKSkgKSB7XHJcbiAgICAgIGlmKGV2ZW50LnRhcmdldC52YWx1ZSA9PSAnb25ldGltZScpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUgPyB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUgOiBkYXlqcygpLmZvcm1hdCgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlcyA9IHtzdGFydERhdGU6dGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpLGVuZERhdGU6dGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZURhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpfTtcclxuICAgICAgICB0aGlzLm1pbkRhdGUgPSB0aGlzLmRheWpzKCkuZm9ybWF0KCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYWxsb3dPbmNlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlcGVhdFR5cGUgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGUgPT0gJ2RhaWx5JyA/ICdEYXknIDogWyd3ZWVrbHknLCd3ZWVrZGF5J10uaW5jbHVkZXModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlKSA/ICdXZWVrJyA6IHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZSA9PSAnbW9udGhseScgPyAnTW9udGgnIDogJyc7XHJcbiAgICB0aGlzLmNoYW5nZWRldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMudmFsaWRhdGVUaW1lKCk7XHJcbiAgfVxyXG4gIFxyXG4gIG5hdmlnYXRlVG9Db250cm9sQ2VudGVyKCkge1xyXG4gICAgdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbJy9jb250cm9sY2VudGVyL3RlbXBsYXRldmlldyddLHsgcXVlcnlQYXJhbXM6IHsgc291cmNlOiAnY2MnIH0gfSk7XHJcbiAgfVxyXG5cclxuICBhZGRTdG9yZUNvbXBvbmVudCgpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVHJheFN0b3JlQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOnRydWUsc2l6ZTonbWQnIFxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZGF0YSA9IHtcclxuICAgICAgY2hlY2tsaXN0SWQ6IHRoaXMuY2hlY2tsaXN0SWQsXHJcbiAgICAgIG9iajp0aGlzLm9ialxyXG4gICAgfTtcclxuICAgIGRpYWxvZ1JlZi5yZXN1bHQudGhlbigocmVzKSA9PiB7XHJcbiAgICAgIGlmKHJlcykge1xyXG4gICAgICAgIHRoaXMudXNlckRhdGEgPSByZXM7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVVzZXJEZXRhaWxzKHRydWUpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICB0b2dnbGVEcm9wRG93bigpIHtcclxuICAgIHRoaXMuc2hvd0Ryb3BEb3duID0gIXRoaXMuc2hvd0Ryb3BEb3duO1xyXG4gIH1cclxuICBzZWxlY3REYXRlKGRhdGU6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlLmluY2x1ZGVzKGRhdGUpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdGhpcy5zZWxlY3RlZERhdGUuZmlsdGVyKChkYXk6YW55KSA9PiBkYXkgIT09IGRhdGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYoIXRoaXMuc2VsZWN0ZWREYXRlLmluY2x1ZGVzKGRhdGUpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUucHVzaChkYXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzdWJtaXREYXRlKCkge1xyXG4gICAgdGhpcy5zdWJtaXR0ZWREYXRlcyA9IFsuLi50aGlzLnNlbGVjdGVkRGF0ZV07XHJcbiAgfVxyXG5cclxuICByZW1vdmVCYWRnZShkYXRlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc3VibWl0dGVkRGF0ZXMgPSB0aGlzLnN1Ym1pdHRlZERhdGVzLmZpbHRlcihkID0+IGQgIT09IGRhdGUpO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZS5maWx0ZXIoKGQ6YW55KSA9PiBkICE9PSBkYXRlKTtcclxuICB9XHJcbiAgZ2V0RGF0ZVdpdGhTdWZmaXgoZGF0ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChkYXRlID09IDEgfHwgZGF0ZSA9PSAzMSB8fCBkYXRlID09IDIxKSB7XHJcbiAgICAgIHJldHVybiBkYXRlICsgJ3N0JztcclxuICAgIH0gZWxzZSBpZiAoZGF0ZSA9PSAyIHx8IGRhdGUgPT0gMjIpIHtcclxuICAgICAgcmV0dXJuIGRhdGUgKyAnbmQnO1xyXG4gICAgfSBlbHNlIGlmIChkYXRlID09IDMgfHwgZGF0ZSA9PSAyMykge1xyXG4gICAgICByZXR1cm4gZGF0ZSArICdyZCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZGF0ZSArICd0aCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZURyb3BEb3duKCkge1xyXG4gICAgdGhpcy5zaG93RHJvcERvd24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1vbnRoKHR5cGU6YW55KSB7XHJcbiAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhXZWVrID0gJyc7XHJcbiAgICB0aGlzLnN1Ym1pdHRlZERhdGVzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IFtdO1xyXG4gICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc3BlY2lmaWNEYXRlID0gW107XHJcbiAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhTZXR1cCA9IHR5cGU7XHJcbiAgICB0aGlzLm1vbnRoRGF0ZSA9ICcnXHJcbiAgICB0aGlzLm1vbnRoRGF5ID0gJydcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYWxsb3dPbmNlID0gZmFsc2U7XHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhTZXR1cCA9PSAnZGF0ZScpIHtcclxuICAgICAgbGV0IGRhdGVXZWVrID0gZ2V0V2Vla051bWJlcih0aGlzLmRheWpzKCkpO1xyXG4gICAgICB0aGlzLm1vbnRoRGF0ZSA9IGRhdGVXZWVrLnRvU3RyaW5nKCk7XHJcbiAgICAgIHRoaXMubW9udGhEYXkgPSB0aGlzLmRheWpzKCkuZm9ybWF0KCdkZGRkJyk7ICAgICAgXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhTZXR1cCA9PSAnZGF5Jykge1xyXG4gICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoV2VlayA9IHRoaXMuZGF5anMoKS5mb3JtYXQoJ0REJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSZXBlYXREYXkoKSB7XHJcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkRGF5O1xyXG4gICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZERheSA9IHZhbHVlID09IFwiMDBcIiB8fCB2YWx1ZSA9PSAnJyA/ICcwMScgOiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1vbnRoVmFsdWUoKSB7XHJcbiAgICBsZXQgZGF0ZVZhbHVlID0gJydcclxuICAgIGlmKHRoaXMubW9udGhEYXRlID09ICcxJykge1xyXG4gICAgICBkYXRlVmFsdWUgPSAnRmlyc3QnXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLm1vbnRoRGF0ZSA9PSAnMicpIHtcclxuICAgICAgZGF0ZVZhbHVlID0gJ1NlY29uZCdcclxuICAgIH1cclxuICAgIGlmKHRoaXMubW9udGhEYXRlID09ICczJykge1xyXG4gICAgICBkYXRlVmFsdWUgPSAnVGhpcmQnXHJcbiAgICB9XHJcbiAgICBpZih0aGlzLm1vbnRoRGF0ZSA9PSAnNCcpIHtcclxuICAgICAgZGF0ZVZhbHVlID0gJ0ZvdXJ0aCdcclxuICAgIH1cclxuICAgIGlmKHRoaXMubW9udGhEYXRlID09ICc1Jykge1xyXG4gICAgICBkYXRlVmFsdWUgPSAnTGFzdCdcclxuICAgIH1cclxuICAgIHJldHVybiAoJ29uIHRoZSAnICsgZGF0ZVZhbHVlICsnICcrdGhpcy5tb250aERheSlcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNwZWNpZmljVmFsdWUoKSB7XHJcbiAgICBsZXQgdmFsdWU6YW55ID0gW107XHJcbiAgICB0aGlzLnN1Ym1pdHRlZERhdGVzLmZvckVhY2goKGl0ZW06YW55KSA9PiB7XHJcbiAgICAgIGl0ZW0gPSAoaXRlbSA9PSAxIHx8IGl0ZW0gPT0gMzEgfHwgaXRlbSA9PSAyMSkgPyBpdGVtICsnIHN0JyA6IChpdGVtID09IDIgfHwgaXRlbSA9PSAyMikgPyBpdGVtICsnIG5kJyA6IChpdGVtID09IDMgfHwgaXRlbSA9PSAyMyApPyBpdGVtICsgJ3JkJyA6IGl0ZW0gKycgdGgnO1xyXG4gICAgICB2YWx1ZS5wdXNoKGl0ZW0gKVxyXG4gICAgfSlcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHJlbW92ZURhdGUoZGF0ZTphbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlTGlzdCA9IHRoaXMuc2VsZWN0ZWREYXRlTGlzdC5maWx0ZXIoKGVsZTphbnkpID0+IGVsZSAhPSBkYXRlKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNjZWR1bGVEYXRlKCkge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZScsdGhpcy5jb25maWdEYXRhPy5jaGVja0xpc3REZXRhaWxzPy5jb25maWdFbmREYXRlKVxyXG4gICAgaWYodGhpcy5jb25maWdEYXRhPy5jaGVja0xpc3REZXRhaWxzPy5jb25maWdFbmREYXRlICE9ICcnICYmIHRoaXMuY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZSAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ0VuZERhdGU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGF0ZVZhbHVlKGV2ZW50OmFueSkge1xyXG4gICAgaWYoZXZlbnQudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuY29uZmlnU3RhcnREYXRlID0gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSB8fCB0aGlzLmRheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ0VuZERhdGUgPSAnJztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdTdGFydERhdGUgPSAnJztcclxuICAgICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuY29uZmlnRW5kRGF0ZSA9ICcnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEVuZERhdGUgPSAnJztcclxuICAgIHRoaXMubWluRGF0ZT0nJztcclxuICAgIHRoaXMuc2VsZWN0ZWRTdGFydERhdGUgPSB7c3RhcnREYXRlOnRoaXMuZGF5anModGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyksZW5kRGF0ZTp0aGlzLmRheWpzKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdTdGFydERhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpfTtcclxuICAgIHRoaXMubWluU3RhcnREYXRlID0gdGhpcy5kYXlqcyh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnU3RhcnREYXRlKS5mb3JtYXQoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNwZWNpZmljKGV2ZW50OmFueSkge1xyXG4gICAgaWYoIWV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlTGlzdCA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EYXRlcGlja2VyUmVmcmVzaCgpe1xyXG4gICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuY29uZmlnRW5kRGF0ZSA9ICcnO1xyXG4gICAgdGhpcy5zZWxlY3RlZEVuZERhdGUgPSAnJztcclxuICAgIHRoaXMubWluRW5kRGF0ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0U3BlY2lmaWNEYXRlKGV2ZW50OmFueSkge1xyXG4gICAgdGhpcy5zaG93RHJvcERvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlTGlzdCA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgIEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDpjbGlja1wiLCBbXCIkZXZlbnRcIl0pXHJcbiAgY2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBjbGlja2VkSW5zaWRlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcIi5kcm9wZG93bi1jbG9zZVwiKTtcclxuICAgIGNvbnNvbGUubG9nKGNsaWNrZWRJbnNpZGUpO1xyXG4gICAgXHJcbiAgICBpZiAoIWNsaWNrZWRJbnNpZGUpIHtcclxuICAgICAgdGhpcy5jbG9zZURyb3BEb3duKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDbGllbnRVc2VyKCkge1xyXG4gICAgdGhpcy5Tb3BTZXJ2aWNlLmdldENsaWVudFVzZXIodGhpcy5jbGllbnRJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLmFsZXJ0VXNlcnMgPSByZXMuZGF0YS5tYXAoKGl0ZW06YW55KSA9PiB7cmV0dXJuIHtuYW1lOml0ZW0udXNlck5hbWUsdmFsdWU6aXRlbS5lbWFpbH19KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmFsZXJ0VXNlcnMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRab25lTGlzdCgpIHtcclxuICAgIHRoaXMuU29wU2VydmljZS5nZXRab25lTGlzdCh0aGlzLmNsaWVudElkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuem9uZUxpc3QgPSByZXMuZGF0YS5tYXAoKGl0ZW06YW55KSA9PiB7cmV0dXJuIHtuYW1lOml0ZW0uem9uZSx2YWx1ZTppdGVtLnpvbmV9fSApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuem9uZUxpc3QgPSBbXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBbGVydChldmVudDphbnkpIHtcclxuICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFsZXJ0LmFsZXJ0c1RvID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVab25lKGV2ZW50OmFueSkge1xyXG4gICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuZGV0ZWN0aW9uQXJlYSA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG9vcCgpIHtcclxuICAgIGxldCBsZW4gPSB0aGlzLnRpbWVMb29wLmxlbmd0aDtcclxuICAgIHRoaXMudGltZUxvb3AucHVzaChsZW4pXHJcbiAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5yZW1haW5kZXIucHVzaCh0aGlzLm1pbnV0ZXNbbGVuXS50b1N0cmluZygpKTtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgdXBkYXRlUmVtYWluZGVyKGV2ZW50OmFueSxpbmRleDphbnkpIHtcclxuICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnJlbWFpbmRlcltpbmRleF0gPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RlZCh0aW1lOmFueSxpbmRleDphbnkpIHtcclxuICAgIGlmKHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5yZW1haW5kZXI/Lmxlbmd0aCA+PSAoaW5kZXggKzEpICYmIHRpbWUgPT0gdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMucmVtYWluZGVyW2luZGV4XSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZih0aW1lID09IDMwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUFwcHJvdmVyKGV2ZW50OmFueSkge1xyXG4gICAgdGhpcy5jb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuYXBwcm92ZXIgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUNvbmZpZ1JlbWFpbmRlcihldmVudDphbnkpIHtcclxuICAgIGlmKCFldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5yZW1haW5kZXIgPSBbXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5yZW1haW5kZXIgPSB0aGlzLm1pbnV0ZXNbMF07XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVwZGF0ZUNvbmZpZ0FwcHJvdmVyKGV2ZW50OmFueSkge1xyXG4gICAgaWYoIWV2ZW50LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFwcHJvdmVyID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUaW1lTG9vcChpbmRleDphbnkpIHtcclxuICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5yZW1haW5kZXIpKTtcclxuICAgIGRhdGEuc3BsaWNlKGluZGV4LDEpXHJcbiAgICByZXR1cm4gdGhpcy5taW51dGVzLmZpbHRlcigoaXRlbTphbnkpID0+ICFkYXRhLmluY2x1ZGVzKGl0ZW0udG9TdHJpbmcoKSkpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0V2Vla051bWJlcihkYXRlOiBhbnkpIHtcclxuICBsZXQgZGF5cyA9IFtdO1xyXG4gIGxldCBkYXRlRGF0ID0gZGF5anMoIGRhdGUgKS5zdGFydE9mKCAnbW9udGgnICk7XHJcblxyXG4gIHdoaWxlICggZGF0ZURhdC5tb250aCgpID09PSBkYXRlLm1vbnRoKCkgKSB7XHJcbiAgICBpZiAoIGRhdGVEYXQuZm9ybWF0KCAnZGRkZCcgKSA9PT0gIGRhdGUuZm9ybWF0KCAnZGRkZCcgKSkge1xyXG4gICAgICBkYXlzLnB1c2goIGRhdGVEYXQuZm9ybWF0KCAnWVlZWS1NTS1ERCcgKSApO1xyXG4gICAgfVxyXG4gICAgZGF0ZURhdCA9IGRhdGVEYXQuYWRkKCAxLCAnZGF5JyApO1xyXG4gIH1cclxuXHJcbiAgbGV0IGZpbmRJbmRleCA9IGRheXMuZmluZEluZGV4KChpdGVtOmFueSkgPT4gaXRlbSA9PSBkYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpKVxyXG4gIHJldHVybiAoZmluZEluZGV4ICsgMSk7XHJcblxyXG59IiwiPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cImNhcmQgcm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cIiFsb2FkaW5nXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC0zIHBiLTNcIj5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gdy04MDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0YWJsZWNvbnRlbnQgbWItNCB3LTEwMFwiPjxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiY2hlY2tsaXN0IHBsYWluLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ2hlY2tsaXN0IE5hbWVcIiBbdmFsdWVdPVwiY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uY2hlY2tMaXN0TmFtZVwiIHJlYWRvbmx5PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0YWJsZWNvbnRlbnQgdy0xMDBcIj48aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImNoZWNrbGlzdERlc2NyaXB0aW9uIHBsYWluLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGVja2xpc3REZXNjcmlwdGlvbiBwbGFjZWhvbGRlcj1cIkVudGVyIENoZWNrbGlzdCBEZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uY2hlY2tMaXN0RGVzY3JpcHRpb25cIiByZWFkb25seT48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG14LTIgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHVibGlzaCgpXCI+PHNwYW4gY2xhc3M9XCJtcy0yXCI+UHVibGlzaDwvc3Bhbj4gPC9idXR0b24+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgbXgtMiBidG4tb3V0bGluZSBidG4tb3V0bGluZS1kZWZhdWx0IHJvdW5kZWQtMyB0ZXh0LW5vd3JhcCBib3JkZXItdmFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZWRyYWZ0KClcIj48c3BhbiBjbGFzcz1cIm1zLTJcIj5TYXZlIGFzIERyYWZ0PC9zcGFuPiA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY2hlY2tjb25maWdjb250IG10LTJcIiAqbmdJZj1cImNvbmZpZ0RhdGFcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhsLTMgbGVmdGNhcmRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgcHgtNyBweS03XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1sZWZ0aGVhZGluZzFcIj57e2NvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LmNoZWNrTGlzdE5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9iai5jaGVja0xpc3RJZFwiIGNsYXNzPVwic2VjdGlvbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBzZWN0aW9uczsgbGV0IGk9aW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy00IGZ3LWJvbGQgc2VjdGlvblwiPnt7c2VjdGlvbi5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cIm14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImFjY29yZGlhbihpKVwiIFtuZ0NsYXNzXT1cInsncm90YXRlJyA6IHNob3cgIT09IGl9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIzNVwiIGhlaWdodD1cIjM1XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk01IDcuNUwxMCAxMi41TDE1IDcuNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3c9PT1pXCIgY2xhc3M9XCJxdWVzdGlvbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwic2VjdGlvbi5xdWVzdGlvbnNcIj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zO2xldCBqPWluZGV4O1wiIGNsYXNzPVwibXktMiBxLWJ0blwiIGNka0RyYWc+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRhYmxlY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3txdWVzdGlvbi5xbmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWxhYmVsIHNlY3Rpb24tbGVmdGhlYWRpbmcxIG10LTZcIj5TY2hlZHVsZTwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT09ICdtb2JpbGV1c2FnZWRldGVjdGlvbicgfHwgdHlwZSA9PT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1wiIGNsYXNzPVwibXQtNCBteC0yIHN1YlwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBteC00XCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyIDZWMTJMMTYgMTRNMjIgMTJDMjIgMTcuNTIyOCAxNy41MjI4IDIyIDEyIDIyQzYuNDc3MTUgMjIgMiAxNy41MjI4IDIgMTJDMiA2LjQ3NzE1IDYuNDc3MTUgMiAxMiAyQzE3LjUyMjggMiAyMiA2LjQ3NzE1IDIyIDEyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48c3BhbiBjbGFzcz1cIm10LTJcIj57e2NvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVN0YXJ0VGltZX19IHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZUVuZFRpbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiWydjdXN0b20nXS5pbmNsdWRlcyh0eXBlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBteC0yIHN1YlwiPjxzcGFuPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjNcIiBoZWlnaHQ9XCIyM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjMgMjNcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjQxNDQ4IDQuNTIzMDNDOC42OTUxOCA0LjgwMzcxIDguNjk1MTggNS4yNTg4IDguNDE0NDggNS41Mzk0OEw1LjUzOTQ4IDguNDE0NDhDNS4yNTg4IDguNjk1MTggNC44MDM3MSA4LjY5NTE4IDQuNTIzMDMgOC40MTQ0OEwzLjA4NTUzIDYuOTc2OThDMi44MDQ4MiA2LjY5NjMgMi44MDQ4MiA2LjI0MTIxIDMuMDg1NTMgNS45NjA1M0MzLjM2NjIxIDUuNjc5ODIgMy44MjEzIDUuNjc5ODIgNC4xMDE5OCA1Ljk2MDUzTDUuMDMxMjUgNi44ODk3OEw3LjM5ODAzIDQuNTIzMDNDNy42Nzg3MSA0LjI0MjMyIDguMTMzOCA0LjI0MjMyIDguNDE0NDggNC41MjMwM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM2NjcwODVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjQxNDQ4IDExLjcxMDVDOC42OTUxOCAxMS45OTEyIDguNjk1MTggMTIuNDQ2MyA4LjQxNDQ4IDEyLjcyN0w1LjUzOTQ4IDE1LjYwMkM1LjI1ODggMTUuODgyNiA0LjgwMzcxIDE1Ljg4MjYgNC41MjMwMyAxNS42MDJMMy4wODU1MyAxNC4xNjQ1QzIuODA0ODIgMTMuODgzOCAyLjgwNDgyIDEzLjQyODcgMy4wODU1MyAxMy4xNDc5QzMuMzY2MjEgMTIuODY3MyAzLjgyMTMgMTIuODY3MyA0LjEwMTk4IDEzLjE0NzlMNS4wMzEyNSAxNC4wNzczTDcuMzk4MDMgMTEuNzEwNUM3LjY3ODcxIDExLjQyOTkgOC4xMzM4IDExLjQyOTkgOC40MTQ0OCAxMS43MTA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzY2NzA4NVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjA2MjUgNi40Njg3NUMxMC4wNjI1IDYuMDcxOCAxMC4zODQ0IDUuNzUgMTAuNzgxMiA1Ljc1SDE1LjA5MzhDMTUuNDkwNiA1Ljc1IDE1LjgxMjUgNi4wNzE4IDE1LjgxMjUgNi40Njg3NUMxNS44MTI1IDYuODY1NyAxNS40OTA2IDcuMTg3NSAxNS4wOTM4IDcuMTg3NUgxMC43ODEyQzEwLjM4NDQgNy4xODc1IDEwLjA2MjUgNi44NjU3IDEwLjA2MjUgNi40Njg3NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM2NjcwODVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjU5Mzc1IDBDMS42MDg5OCAwIDAgMS42MDg5OCAwIDMuNTkzNzVWMTYuNTMxMkMwIDE4LjUxNiAxLjYwODk4IDIwLjEyNSAzLjU5Mzc1IDIwLjEyNUg5LjQ4NzA4QzkuMjU0MjkgMTkuNjY5NiA5LjA2NDM2IDE5LjE4ODYgOC45MjI2MSAxOC42ODc1SDMuNTkzNzVDMi40MDI4OCAxOC42ODc1IDEuNDM3NSAxNy43MjIxIDEuNDM3NSAxNi41MzEyVjMuNTkzNzVDMS40Mzc1IDIuNDAyODggMi40MDI4OCAxLjQzNzUgMy41OTM3NSAxLjQzNzVIMTYuNTMxMkMxNy43MjIxIDEuNDM3NSAxOC42ODc1IDIuNDAyODggMTguNjg3NSAzLjU5Mzc1VjguOTIyNjFDMTkuMTg4NiA5LjA2NDM2IDE5LjY2OTYgOS4yNTQyOSAyMC4xMjUgOS40ODcwOFYzLjU5Mzc1QzIwLjEyNSAxLjYwODk4IDE4LjUxNiAwIDE2LjUzMTIgMEgzLjU5Mzc1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzY2NzA4NVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE2LjUzMTMgMjNDMjAuMTAzOSAyMyAyMyAyMC4xMDM5IDIzIDE2LjUzMTNDMjMgMTIuOTU4NiAyMC4xMDM5IDEwLjA2MjUgMTYuNTMxMyAxMC4wNjI1QzEyLjk1ODYgMTAuMDYyNSAxMC4wNjI1IDEyLjk1ODYgMTAuMDYyNSAxNi41MzEzQzEwLjA2MjUgMjAuMTAzOSAxMi45NTg2IDIzIDE2LjUzMTMgMjNaTTE2LjUzMTMgMTIuOTM3NUMxNi45MjgxIDEyLjkzNzUgMTcuMjUgMTMuMjU5NCAxNy4yNSAxMy42NTYzVjE1LjgxMjVIMTkuNDA2M0MxOS44MDMxIDE1LjgxMjUgMjAuMTI1IDE2LjEzNDQgMjAuMTI1IDE2LjUzMTNDMjAuMTI1IDE2LjkyODEgMTkuODAzMSAxNy4yNSAxOS40MDYzIDE3LjI1SDE3LjI1VjE5LjQwNjNDMTcuMjUgMTkuODAzMSAxNi45MjgxIDIwLjEyNSAxNi41MzEzIDIwLjEyNUMxNi4xMzQ0IDIwLjEyNSAxNS44MTI1IDE5LjgwMzEgMTUuODEyNSAxOS40MDYzVjE3LjI1SDEzLjY1NjNDMTMuMjU5NCAxNy4yNSAxMi45Mzc1IDE2LjkyODEgMTIuOTM3NSAxNi41MzEzQzEyLjkzNzUgMTYuMTM0NCAxMy4yNTk0IDE1LjgxMjUgMTMuNjU2MyAxNS44MTI1SDE1LjgxMjVWMTMuNjU2M0MxNS44MTI1IDEzLjI1OTQgMTYuMTM0NCAxMi45Mzc1IDE2LjUzMTMgMTIuOTM3NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM2NjcwODVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjxzcGFuIGNsYXNzPVwibXQtMiBtcy0yXCI+e3tjb25maWdEYXRhPy5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZSA9PT0gJ29uZXRpbWUnID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT25lLXRpbWUnIDogKGNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlIHwgdGl0bGVjYXNlKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgbXgtMiBzdWJcIj48c3Bhbj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIgNlYxMkwxNiAxNE0yMiAxMkMyMiAxNy41MjI4IDE3LjUyMjggMjIgMTIgMjJDNi40NzcxNSAyMiAyIDE3LjUyMjggMiAxMkMyIDYuNDc3MTUgNi40NzcxNSAyIDEyIDJDMTcuNTIyOCAyIDIyIDYuNDc3MTUgMjIgMTJaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PHNwYW4gY2xhc3M9XCJtdC0yIG1zLTJcIj57e2NvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlU3RhcnRUaW1lID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdEYXRhPy5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVN0YXJ0VGltZS5zdWJzdHIoLTgpIDogY29uZmlnRGF0YT8ub3BlblRpbWV9fSB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGVFbmRUaW1lID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdEYXRhPy5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZUVuZFRpbWUuc3Vic3RyKC04KSA6IGNvbmZpZ0RhdGE/LmNsb3NlVGltZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBteC0yIHN1YlwiICpuZ0lmPVwic2hvd1JhbmdlVmFsdWVcIj48c3Bhbj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYgMlY2TTggMlY2TTMgMTBIMjFNNSA0SDE5QzIwLjEwNDYgNCAyMSA0Ljg5NTQzIDIxIDZWMjBDMjEgMjEuMTA0NiAyMC4xMDQ2IDIyIDE5IDIySDVDMy44OTU0MyAyMiAzIDIxLjEwNDYgMyAyMFY2QzMgNC44OTU0MyAzLjg5NTQzIDQgNSA0WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0yIG1zLTJcIj48c3Bhbj57e2NvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZX19PC9zcGFuPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZSAhPT0gJycgJiYgY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZSAhPT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB7e2NvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ0VuZERhdGV9fTwvc3Bhbj48L3NwYW4+PC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMCBlZGl0cXVlc1wiICpuZ0lmPVwiWydjdXN0b20nXS5pbmNsdWRlcyh0eXBlKSAmJiAhZGlzYWJsZWRRdWVzdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInNhdmVhbmRyZWRpcmVjdChvYmouY2hlY2tMaXN0SWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRhc2hlZCBidG4gYnRuLWxpZ2h0IHVwbG9hZFwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjEgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC42NjY2IDIuNTAwOUMxNC44ODU1IDIuMjgyMDMgMTUuMTQ1MyAyLjEwODQyIDE1LjQzMTMgMS45ODk5NkMxNS43MTczIDEuODcxNTEgMTYuMDIzOCAxLjgxMDU1IDE2LjMzMzMgMS44MTA1NUMxNi42NDI4IDEuODEwNTUgMTYuOTQ5MyAxLjg3MTUxIDE3LjIzNTMgMS45ODk5NkMxNy41MjEzIDIuMTA4NDIgMTcuNzgxMSAyLjI4MjAzIDE4IDIuNTAwOUMxOC4yMTg4IDIuNzE5NzcgMTguMzkyNCAyLjk3OTYxIDE4LjUxMDkgMy4yNjU1OEMxOC42Mjk0IDMuNTUxNTQgMTguNjkwMyAzLjg1ODA0IDE4LjY5MDMgNC4xNjc1N0MxOC42OTAzIDQuNDc3MSAxOC42Mjk0IDQuNzgzNiAxOC41MTA5IDUuMDY5NTZDMTguMzkyNCA1LjM1NTUzIDE4LjIxODggNS42MTUzNyAxOCA1LjgzNDI0TDYuNzQ5OTYgMTcuMDg0MkwyLjE2NjYzIDE4LjMzNDJMMy40MTY2MyAxMy43NTA5TDE0LjY2NjYgMi41MDA5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwidXBsb2FkdGV4dFwiPkVkaXQgUXVlc3Rpb25zPC9zcGFuPjwvYT5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiWyd1bmlmb3JtZGV0ZWN0aW9uJywnbW9iaWxldXNhZ2VkZXRlY3Rpb24nXS5pbmNsdWRlcyh0eXBlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWxhYmVsIHNlY3Rpb24tbGVmdGhlYWRpbmcxXCI+QWxlcnRzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTYgbXgtNCBzdWJcIj5FbWFpbDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiWyd1bmlmb3JtZGV0ZWN0aW9uJywnbW9iaWxldXNhZ2VkZXRlY3Rpb24nXS5pbmNsdWRlcyh0eXBlKVwiIGNsYXNzPVwibXgtNCBtdC00IHN1YlwiPmlmIHVzYWdlIGV4Y2VlZHNcclxuICAgICAgICAgICAgICAgICAgICB7e2NvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LmFsZXJ0Py51c2FnZUV4Y2VlZHN9fVxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50c1xyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ3N0b3Jlb3BlbmFuZGNsb3NlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWxhYmVsIHNlY3Rpb24tbGVmdGhlYWRpbmcxXCI+QWxlcnRzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgbXgtNCBzdWJcIj5TZW5kIGVtYWlsIGV2ZXJ5ZGF5IHRvPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cIlsndW5pZm9ybWRldGVjdGlvbicsJ21vYmlsZXVzYWdlZGV0ZWN0aW9uJ10uaW5jbHVkZXModHlwZSlcIiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWwgc2VjdGlvbi1sZWZ0aGVhZGluZzEgbXQtNFwiPkRldGVjdGlvbiBBcmVhczwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgbXgtMiBzdWJcIj48c3BhbiAqbmdGb3I9XCJsZXQgem9uZSBvZiBjb25maWdEYXRhPy5jaGVja0xpc3REZXRhaWxzPy5kZXRlY3Rpb25BcmVhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgbXgtMiBtdC00IGJhZGdlLWxpZ2h0IGNoZWNrbGlzdGxhYmVsIGZzLWJhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwia2ktZHVvdG9uZSBraS1hcnJvdy11cCBjaGVja2xpc3R0ZXh0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t6b25lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9oMz5cclxuICAgIFxyXG4gICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtOVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWZsdXNoIGgteGwtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB4LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2NoZWR1bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInNlY3Rpb24tbGVmdGhlYWRpbmdcIj5TY2hlZHVsZTxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXgtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTg3NF82NjE5NSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMTAuNjY3M1Y4LjAwMDY1TTguMDAwMTYgNS4zMzM5OEg4LjAwNjgzTTE0LjY2NjggOC4wMDA2NUMxNC42NjY4IDExLjY4MjYgMTEuNjgyMSAxNC42NjczIDguMDAwMTYgMTQuNjY3M0M0LjMxODI2IDE0LjY2NzMgMS4zMzM1IDExLjY4MjYgMS4zMzM1IDguMDAwNjVDMS4zMzM1IDQuMzE4NzUgNC4zMTgyNiAxLjMzMzk4IDguMDAwMTYgMS4zMzM5OEMxMS42ODIxIDEuMzMzOTggMTQuNjY2OCA0LjMxODc1IDE0LjY2NjggOC4wMDA2NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xODc0XzY2MTk1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJbJ3VuaWZvcm1kZXRlY3Rpb24nLCdtb2JpbGV1c2FnZWRldGVjdGlvbiddLmluY2x1ZGVzKHR5cGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1YiBtdC0yIG14LTRcIj5Gcm9tPC9zcGFuPiZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNvbGlkIGZsYXRwaWNrci1pbnB1dCB3LTIwMHB4IG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVUaW1lKCdzdGFydCcpXCIgWyhuZ01vZGVsKV09XCJzdGFydFRpbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZXQgc3RvcmUgb3BlbiB0aW1lXCIgbmFtZT1cImR1ZV9kYXRlXCIgdHlwZT1cInRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ViIG10LTMgbXgtNFwiPlRvPC9zcGFuPiZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNvbGlkIGZsYXRwaWNrci1pbnB1dCB3LTIwMHB4IG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVUaW1lKCdlbmQnKVwiIFsobmdNb2RlbCldPVwiZW5kVGltZVwiIHBsYWNlaG9sZGVyPVwiU2V0IHN0b3JlIG9wZW4gdGltZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZHVlX2RhdGVcIiB0eXBlPVwidGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3IgbXQtOFwiPjwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJbJ2N1c3RvbSddLmluY2x1ZGVzKHR5cGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtdC02IG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTYgc3ViXCI+Rm9yPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3QtbGcgc2VsZWN0Mi1oaWRkZW4tYWNjZXNzaWJsZSBuZy1wcmlzdGluZSBuZy12YWxpZCBuZy10b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVNjaGVkdWxlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm9uZXRpbWVcIj5Eb2VzIE5vdCBSZXBlYXQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIndlZWtkYXlcIj4gRXZlcnkgV2Vla2RheSAoTW9uIC0gRnJpKTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZGFpbHlcIj5EYWlseTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwid2Vla2x5XCI+V2Vla2x5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJtb250aGx5XCI+TW9udGhseTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmFuZ2VcIj5DdXN0b20gUmFuZ2U8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ViIG10LTMgbXgtMlwiPkF0PC9zcGFuPiZuYnNwOyZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc29saWQgZmxhdHBpY2tyLWlucHV0IHctMjAwcHggbWFyZ2luXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVUaW1lKCdzdGFydCcpXCIgWyhuZ01vZGVsKV09XCJzdGFydFRpbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNldCBzdG9yZSBvcGVuIHRpbWVcIiBuYW1lPVwiZHVlX2RhdGVcIiB0eXBlPVwidGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWIgbXQtMyBtcy01XCI+RW5kczwvc3Bhbj4mbmJzcDsmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNvbGlkIGZsYXRwaWNrci1pbnB1dCB3LTIwMHB4IG1hcmdpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlVGltZSgnZW5kJylcIiBbKG5nTW9kZWwpXT1cImVuZFRpbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNldCBzdG9yZSBvcGVuIHRpbWVcIiBuYW1lPVwiZHVlX2RhdGVcIiB0eXBlPVwidGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1oZWFkaW5nXCI+Q2hlY2tsaXN0IENvbmZpZ3VyYXRpb248L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSA9PT0gJ29uZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbC1sZy0xMiBkLWZsZXggbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWIgbXQtM1wiPk9uY2UgT248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIHB4LTQgcGUtM1wiIGlkPVwiZGF0ZWNsYXNzXCIgZGF0YS1rdC1kYXRlcmFuZ2VwaWNrZXI9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1rdC1kYXRlcmFuZ2VwaWNrZXItb3BlbnM9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0XCIgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBuZ3hEYXRlcmFuZ2VwaWNrZXJNZCBbc2luZ2xlRGF0ZVBpY2tlcl09XCJ0cnVlXCIgW21pbkRhdGVdPVwibWluRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3BzXT1cIidkb3duJ1wiIFtvcGVuc109XCIncmlnaHQnXCIgW2Fsd2F5c1Nob3dDYWxlbmRhcnNdPVwiZmFsc2VcIiBba2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZV09XCJ0cnVlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDYW5jZWxdPVwidHJ1ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlc1wiIFthdXRvQXBwbHldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwieyBmb3JtYXQ6ICdERC1NTS1ZWVlZJywgZmlyc3REYXk6IDEsIG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZVJhbmdlU3RhcnQoJGV2ZW50KVwiIG5hbWU9XCJkYXRlcmFuZ2VcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlICE9PSAnb25ldGltZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG10LTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJyYW5nZURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbmctdmFsaWQgbmctZGlydHkgbmctdG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2hvd1JhbmdlVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZSA9PT0gJ3JhbmdlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlRGF0ZVZhbHVlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmFuZ2VEYXRlXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGNoZWNrbGlzdHRleHQgbXMtMlwiPlNldCBkZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgcmFuZ2U8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbC1sZy0xMiBkLWZsZXggbXQtNVwiICpuZ0lmPVwic2hvd1JhbmdlVmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ViIG10LTNcIj5TdGFydHMgZnJvbTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIiBbbmdDbGFzc109XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUgPT09ICdyYW5nZScgPyAncHMtMTAnIDogJ3B4LTQgcGUtMydcIiBpZD1cImRhdGVjbGFzc1wiIGRhdGEta3QtZGF0ZXJhbmdlcGlja2VyPVwidHJ1ZVwiIGRhdGEta3QtZGF0ZXJhbmdlcGlja2VyLW9wZW5zPVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMy4zMzMzIDEuNjY2NjNWNC45OTk5Nk02LjY2NjY3IDEuNjY2NjNWNC45OTk5Nk0yLjUgOC4zMzMyOUgxNy41TTQuMTY2NjcgMy4zMzMyOUgxNS44MzMzQzE2Ljc1MzggMy4zMzMyOSAxNy41IDQuMDc5NDggMTcuNSA0Ljk5OTk2VjE2LjY2NjZDMTcuNSAxNy41ODcxIDE2Ljc1MzggMTguMzMzMyAxNS44MzMzIDE4LjMzMzNINC4xNjY2N0MzLjI0NjE5IDE4LjMzMzMgMi41IDE3LjU4NzEgMi41IDE2LjY2NjZWNC45OTk5NkMyLjUgNC4wNzk0OCAzLjI0NjE5IDMuMzMzMjkgNC4xNjY2NyAzLjMzMzI5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmeC1kYXRlLXJhbmdlIGZvcm0tY29udHJvbCBwcy0xNFwiIHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgbmd4RGF0ZXJhbmdlcGlja2VyTWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2luZ2xlRGF0ZVBpY2tlcl09XCJ0cnVlXCIgW21pbkRhdGVdPVwibWluU3RhcnREYXRlXCIgW2Ryb3BzXT1cIidkb3duJ1wiIFtvcGVuc109XCIncmlnaHQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJmYWxzZVwiIFtrZWVwQ2FsZW5kYXJPcGVuaW5nV2l0aFJhbmdlXT1cInRydWVcIiBbc2hvd0NhbmNlbF09XCJ0cnVlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU3RhcnREYXRlXCIgW2F1dG9BcHBseV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVzVXBkYXRlZCk9XCJkYXRlUmFuZ2VTdGFydCgkZXZlbnQpXCIgbmFtZT1cImRhdGVyYW5nZVwiIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbXQtOCBuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlICE9PSAncmFuZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1YlwiPlJlcGVhdHMgZXZlcnk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnYtcm93IG1iLTUgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lciBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiByZXF1aXJlZD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zb2xpZCB3LTEwMHB4IG5nLXByaXN0aW5lIG5nLWludmFsaWQgbmctdG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWREYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIyXCIgbWluPVwiMVwiIChjaGFuZ2UpPVwidXBkYXRlUmVwZWF0RGF5KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnYtcm93IG1iLTUgbXgtMiBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zb2xpZCB3LTEwMHB4IG5nLXByaXN0aW5lIG5nLWludmFsaWQgbmctdG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicmVwZWF0VHlwZVwiIHJlYWRvbmx5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUgPT09ICdtb250aGx5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbmctc3Rhci1pbnNlcnRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTIgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvbnRTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIiB2YWx1ZT1cImRheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlUmVwZWF0ZWRNb250aFNldHVwID09PSAnZGF5J1wiIChjaGFuZ2UpPVwidXBkYXRlTW9udGgoJ2RheScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgZm9yPVwiaW5saW5lUmFkaW8xXCI+T24gRGF5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02IGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmdi1yb3cgbWItNSBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNvbGlkIHctMTAwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkTW9udGhTZXR1cCAhPT0gJ2RheScgPyAnZGlzYWJsZWQnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoV2Vla1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGVSZXBlYXRlZE1vbnRoU2V0dXAgIT09ICdkYXknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heExlbmd0aD1cIjJcIiAoaW5wdXQpPVwidmFsaWRhdGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbmctc3Rhci1pbnNlcnRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTIgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvbnRTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIiB2YWx1ZT1cImRheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlUmVwZWF0ZWRNb250aFNldHVwID09PSAnZGF0ZSdcIiAoY2hhbmdlKT1cInVwZGF0ZU1vbnRoKCdkYXRlJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBmb3I9XCJpbmxpbmVSYWRpbzFcIj5PbiB0aGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ2LXJvdyBtYi01IGZ2LXBsdWdpbnMtaWNvbi1jb250YWluZXIgZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3QtbGcgc2VsZWN0Mi1oaWRkZW4tYWNjZXNzaWJsZSBuZy1wcmlzdGluZSBuZy12YWxpZCBuZy10b3VjaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9udGhEYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlUmVwZWF0ZWRNb250aFNldHVwICE9PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+IEZpcnN0IDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjJcIj4gU2Vjb25kIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjNcIj4gVGhpcmQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI0XCI+IEZvdXJ0aDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjVcIj4gTGFzdDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnYtcm93IG1iLTUgbXgtMiBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LWxnIHNlbGVjdDItaGlkZGVuLWFjY2Vzc2libGUgbmctcHJpc3RpbmUgbmctdmFsaWQgbmctdG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vbnRoRGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlUmVwZWF0ZWRNb250aFNldHVwICE9PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJTdW5kYXlcIj4gU3VuZGF5IDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIk1vbmRheVwiPiBNb25kYXkgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiVHVlc2RheVwiPiBUdWVzZGF5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiV2VkbmVzZGF5XCI+IFdlZG5lc2RheTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlRodXJzZGF5XCI+IFRodXJzZGF5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRnJpZGF5XCI+RnJpZGF5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiU2F0dXJkYXlcIj4gU2F0dXJkYXk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbmctc3Rhci1pbnNlcnRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb250U2l6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgdHlwZT1cInJhZGlvXCIgdmFsdWU9XCJkYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkTW9udGhTZXR1cCA9PT0gJ3NwZWNpZmljJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwZGF0ZU1vbnRoKCdzcGVjaWZpYycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgZm9yPVwiaW5saW5lUmFkaW8xXCI+T24gU3BlY2lmaWMgRGF0ZXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZURyb3BEb3duKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWNsb3NlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGRyb3Bkb3duLWlucHV0IHBzLTE0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEcm9wRG93bigpXCIgcmVhZG9ubHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlUmVwZWF0ZWRNb250aFNldHVwICE9PSAnc3BlY2lmaWMnXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgY3VzdG9tLWRyb3Bkb3duLW1lbnUgdy0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0Ryb3BEb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yIG1iLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRlIG9mIGRhdGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbWUtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF0ZShkYXRlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rIGJ0biB3ZWVrc3R5bGVkYXRlIGQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWNlbnRlciByb3VuZGVkLXBpbGwgbWluLXctMzVweCBweS0yIHB4LTMgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkRGF0ZS5pbmNsdWRlcyhkYXRlKSA/ICdhY3RpdmUgYnRuLWFjdGl2ZS1wcmltYXJ5JyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwaWxsc3R5bGVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIG1zLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXREYXRlKCk7c2hvd0Ryb3BEb3duPSBmYWxzZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jayB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJtaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgcHktMyBiYWRnZS1zcGVjaWZpY2RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTMgZmxleC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBkYXRlIG9mIHN1Ym1pdHRlZERhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1saWdodCBjaGVja2xpc3R0ZXh0IG1lLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERhdGVXaXRoU3VmZml4KGRhdGUpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwicmVtb3ZlQmFkZ2UoZGF0ZSlcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAzTDMgOU0zIDNMOSA5XCIgc3Ryb2tlPVwiIzY2NzA4NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJbJ3dlZWtkYXknLCd3ZWVrbHknXS5pbmNsdWRlcyhjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXBpbGxzIGQtZmxleCBmbGV4LW5vd3JhcCBtYi0zXCIgcm9sZT1cInRhYmxpc3RcIj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbWUtMVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIihjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUgPT09ICd3ZWVrbHknIHx8IChjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUgPT09ICd3ZWVrZGF5JyAmJiAhWydTdW5kYXknLCdTYXR1cmRheSddLmluY2x1ZGVzKGRheSkpKSA/IHNldERheShkYXkpIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmsgYnRuIHdlZWtzdHlsZSBkLWZsZXggZmxleC1jb2x1bW4gZmxleC1jZW50ZXIgcm91bmRlZC1waWxsIG1pbi13LTQ1cHggbWUtMiBweS00IHB4LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUgPT09ICd3ZWVrZGF5JyAmJiBbJ1N1bmRheScsJ1NhdHVyZGF5J10uaW5jbHVkZXMoZGF5KSkgPyAnY3Vyc29yLWRlZmF1bHQnIDogc2VsZWN0ZWREYXlzLmluY2x1ZGVzKGRheSkgPyAnc2VsZWN0RGF5JyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpbGxzdHlsZVwiPnt7IGRheVswXSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlID09PSAncmFuZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02IGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImZsZXhTd2l0Y2hDaGVja0RlZmF1bHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbmctdmFsaWQgbmctZGlydHkgbmctdG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic3BlY2lmaWNcIiAoY2hhbmdlKT1cInVwZGF0ZVNwZWNpZmljKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZmxleFN3aXRjaENoZWNrRGVmYXVsdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBjaGVja2xpc3R0ZXh0IG1zLTJcIj5PbiBTcGVjaWZpY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC00IHBlLTMgcG9zaXRpb24tcmVsYXRpdmVcIiAoY2xpY2tPdXRzaWRlKT1cImNsb3NlRHJvcERvd24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1jbG9zZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIHctMzAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMy4zMzMzIDEuNjY2NjNWNC45OTk5Nk02LjY2NjY3IDEuNjY2NjNWNC45OTk5Nk0yLjUgOC4zMzMyOUgxNy41TTQuMTY2NjcgMy4zMzMyOUgxNS44MzMzQzE2Ljc1MzggMy4zMzMyOSAxNy41IDQuMDc5NDggMTcuNSA0Ljk5OTk2VjE2LjY2NjZDMTcuNSAxNy41ODcxIDE2Ljc1MzggMTguMzMzMyAxNS44MzMzIDE4LjMzMzNINC4xNjY2N0MzLjI0NjE5IDE4LjMzMzMgMi41IDE3LjU4NzEgMi41IDE2LjY2NjZWNC45OTk5NkMyLjUgNC4wNzk0OCAzLjI0NjE5IDMuMzMzMjkgNC4xNjY2NyAzLjMzMzI5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHJvcGRvd24taW5wdXQgcHMtMTRcIiAoY2xpY2spPVwidG9nZ2xlRHJvcERvd24oKVwiIHJlYWRvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzcGVjaWZpY1wiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgY3VzdG9tLWRyb3Bkb3duLW1lbnUgdy0xMDBcIiAqbmdJZj1cInNob3dEcm9wRG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLW11bHRpLWRhdGUtZGF0ZXBpY2tlciAoc2VsZWN0ZWREYXRlcyk9XCJzZWxlY3RTcGVjaWZpY0RhdGUoJGV2ZW50KVwiIFtwcmVkZWZpbmVkRGF0ZXNdPVwic2VsZWN0ZWREYXRlTGlzdFwiIFtzdGFydERhdGVdPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ1N0YXJ0RGF0ZVwiIFtlbmREYXRlXT1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdFbmREYXRlXCI+PC9saWItbXVsdGktZGF0ZS1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBweS0zIGJhZGdlLXNwZWNpZmljZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG10LTMgbXMtNSBmbGV4LXdyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBkYXRlIG9mIHNlbGVjdGVkRGF0ZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtcGlsbCBiYWRnZS1saWdodCBjaGVja2xpc3R0ZXh0IG1lLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInJlbW92ZURhdGUoZGF0ZSlcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAzTDMgOU0zIDNMOSA5XCIgc3Ryb2tlPVwiIzY2NzA4NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG5nLXN0YXItaW5zZXJ0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIhc2hvd1JhbmdlVmFsdWUgfHwgY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlID09PSAnb25ldGltZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiBbbmdDbGFzc109XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUgPT09ICdyYW5nZScgPyAnbXQtNCcgOiAnbXQtMidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJcIj5FbmRzIE9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiIGlkPVwiZGF0ZWNsYXNzXCIgW25nQ2xhc3NdPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlID09PSAncmFuZ2UnID8gJ3BzLTknIDogJ3B4LTQgcGUtMydcIiBkYXRhLWt0LWRhdGVyYW5nZXBpY2tlcj1cInRydWVcIiBkYXRhLWt0LWRhdGVyYW5nZXBpY2tlci1vcGVucz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmeC1kYXRlLXJhbmdlIGZvcm0tY29udHJvbCBwcy0xNFwiIHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgbmd4RGF0ZXJhbmdlcGlja2VyTWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpbmdsZURhdGVQaWNrZXJdPVwidHJ1ZVwiIFttaW5EYXRlXT1cIm1pbkVuZERhdGVcIiBbZHJvcHNdPVwiJ2Rvd24nXCIgW29wZW5zXT1cIidyaWdodCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJmYWxzZVwiIFtrZWVwQ2FsZW5kYXJPcGVuaW5nV2l0aFJhbmdlXT1cInRydWVcIiBbc2hvd0NhbmNlbF09XCJ0cnVlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEVuZERhdGVcIiBbYXV0b0FwcGx5XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZVJhbmdlRW5kKCRldmVudClcIiBuYW1lPVwiZGF0ZXJhbmdlXCIgW3JlYWRvbmx5XT1cInRydWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNSByZW1vdmUgY3Vyc29yLXBvaW50ZXIgbXMtNFwiIChjbGljayk9XCJvbkRhdGVwaWNrZXJSZWZyZXNoKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ0VuZERhdGUgIT09ICcnICYmIGNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdFbmREYXRlICE9PSBudWxsICYmIGNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSAhPT0ncmFuZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgdXNlclwiICpuZ0lmPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZSA9PT0gJ29uZXRpbWUnXCI+T2NjdXJzIG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXkge3tjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlRGF0ZSB8IGRhdGU6J2RkIE1NTSBZWVlZJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTMgdXNlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiWyd3ZWVrZGF5Jywnd2Vla2x5J10uaW5jbHVkZXMoY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZSlcIj5PY2N1cnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlcnkge3soY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkRGF5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkRGF5ICE9PScwMScpID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkRGF5IDogJyd9fSB3ZWVrPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkRGF5ICE9PSAwMVwiPnM8L3NwYW4+IG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VsZWN0ZWREYXlzLnRvU3RyaW5nKCl9fTxzcGFuICpuZ0lmPVwic2hvd1JhbmdlVmFsdWVcIj4gc3RhcnRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdTdGFydERhdGUgfCBkYXRlOidkZCBNTU0gWVlZWSd9fSA8c3BhbiAqbmdJZj1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZVwiPnVudGlsIHt7Y29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdFbmREYXRlIHwgZGF0ZTonZGQgTU1NIFlZWVknfX08L3NwYW4+PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0zIHVzZXJcIiAqbmdJZj1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGUgPT09ICdkYWlseSdcIj5PY2N1cnMgZXZlcnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3soY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkRGF5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkRGF5ICE9PSAnMDEnKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGVSZXBlYXRlZERheSA6ICcnfX0gZGF5PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkRGF5ICE9PSAwMVwiPnM8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1JhbmdlVmFsdWVcIj4gc3RhcnRpbmcge3tjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOidkZCBNTU0gWVlZWSd9fSA8c3BhbiAqbmdJZj1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZSBcIj51bnRpbCB7e2NvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZSB8IGRhdGU6J2RkIE1NTSBZWVlZJ319PC9zcGFuPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyB1c2VyXCIgKm5nSWY9XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlID09PSAnbW9udGhseSdcIj5PY2N1cnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlcnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3soY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkRGF5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkRGF5ICE9PSAnMDEnKSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGVSZXBlYXRlZERheSA6ICcnfX0gbW9udGg8c3BhbiAqbmdJZj1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uc2NoZWR1bGVSZXBlYXRlZERheSAhPT0gMDFcIj5zIDwvc3Bhbj57eyhjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlUmVwZWF0ZWRNb250aFNldHVwID09PSAnZGF5JykgPyAoJ29uIGRheSAnICsgY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlUmVwZWF0ZWRNb250aFdlZWspIDogY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVJlcGVhdGVkTW9udGhTZXR1cCA9PT0gJ2RhdGUnID8gdXBkYXRlTW9udGhWYWx1ZSgpOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTcGVjaWZpY1ZhbHVlKCl9fTxzcGFuICpuZ0lmPVwic2hvd1JhbmdlVmFsdWVcIj4gc3RhcnRpbmcge3tjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSB8IGRhdGU6J2RkIE1NTSBZWVlZJ319IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ0VuZERhdGVcIj51bnRpbCB7e2NvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZSB8IGRhdGU6J2RkIE1NTSBZWVlZJ319PC9zcGFuPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMyB1c2VyXCIgKm5nSWY9XCJjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LnNjaGVkdWxlID09PSAncmFuZ2UnXCI+T2NjdXJzIGV2ZXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5zY2hlZHVsZVdlZWtEYXlzPy50b1N0cmluZygpfX0gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1JhbmdlVmFsdWVcIj4gc3RhcnRpbmcge3tjb25maWdEYXRhLmNoZWNrTGlzdERldGFpbHM/LmNvbmZpZ1N0YXJ0RGF0ZSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOidkZCBNTU0gWVlZWSd9fSA8c3BhbiAqbmdJZj1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscz8uY29uZmlnRW5kRGF0ZVwiPnVudGlsIHt7Y29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzPy5jb25maWdFbmREYXRlIHwgZGF0ZTonZGQgTU1NIFlZWVknfX08L3NwYW4+PC9zcGFuPjwvZGl2PlxyXG4gICAgXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1sZWZ0XCIgKm5nSWY9XCJbJ2N1c3RvbSddLmluY2x1ZGVzKHR5cGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1oZWFkaW5nXCI+UmVzcG9uc2UgQ29uZmlndXJhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwibXgtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNvbmZpZ2FjY29yZGlhbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3JvdGF0ZScgOiBzaG93Y29uZmlnfVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSA3LjVMMTAgMTIuNUwxNSA3LjVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93Y29uZmlnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2RrRHJhZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbJ29uZXRpbWUnLCdkYWlseSddLmluY2x1ZGVzKGNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUpIHx8IChjb25maWdEYXRhPy5jaGVja0xpc3REZXRhaWxzLnNjaGVkdWxlID09PSAnbW9udGhseScgJiYgIGNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGVSZXBlYXRlZE1vbnRoU2V0dXAgIT09J3NwZWNpZmljJykgPyAnYmctY29sb3ItZGlzYWJsZWQnIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ2LXJvdyBjaGVja2xpc3R0dXJub2ZmIG10LTQgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LmFsbG93T25jZSA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hbGxvd09uY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm9uZVRpbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlsnb25ldGltZScsJ2RhaWx5J10uaW5jbHVkZXMoY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZSkgfHwgKGNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHMuc2NoZWR1bGUgPT09ICdtb250aGx5JyAmJiAgY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscy5zY2hlZHVsZVJlcGVhdGVkTW9udGhTZXR1cCAhPT0nc3BlY2lmaWMnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YiBtcy0yXCIgZm9yPVwib25lVGltZVwiPk9ubHkgb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YnRleHQgbXMtMlwiIGZvcj1cIm9uZVRpbWVcIj5CeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxpbmcgdGhpcywgdGhlIHJlc3BvbnNlIGNhbiBiZSBjYXB0dXJlZCBvbmx5IG9uY2UgZm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGNoZWNrbGlzdCA8c3BhbiAqbmdJZj1cInNob3dSYW5nZVZhbHVlXCI+ZnJvbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ1N0YXJ0RGF0ZX19IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmNvbmZpZ0VuZERhdGVcIj50b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5jb25maWdFbmREYXRlfX0uPC9zcGFuPjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnYtcm93IGNoZWNrbGlzdHR1cm5vZmYgbXQtNCBmdi1wbHVnaW5zLWljb24tY29udGFpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCIgY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uYWxsb3dlZE92ZXJUaW1lID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hbGxvd2VkT3ZlclRpbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZmlsbFJlc3BvbnNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YiBtcy0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJmaWxsUmVzcG9uc2VcIj5GaWxsIHJlc3BvbnNlIGFmdGVyIGNvbmZpZ3VyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuPC9sYWJlbD48YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YnRleHQgbXMtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiZmlsbFJlc3BvbnNlXCI+QnkgZW5hYmxpbmcsIHRoZSB1c2VyIGNhbiBmaWxsIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrbGlzdCBldmVuIGFmdGVyIHRoZSBhYm92ZSBjb25maWd1cmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLXRpbWUuPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ2LXJvdyBjaGVja2xpc3R0dXJub2ZmIG10LTQgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHM/LmFsbG93ZWRTdG9yZUxvY2F0aW9uID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFsbG93ZWRTdG9yZUxvY2F0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJnZW9GZW5jaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgc3ViIG1zLTJcIiBmb3I9XCJnZW9GZW5jaW5nXCI+R2VvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZW5jaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YnRleHQgbXMtMlwiIGZvcj1cImdlb0ZlbmNpbmdcIj5CeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxpbmcsIHRoZSBjaGVja2xpc3QgY2FuIGJlIGZpbGxlZCBieSB0aGUgdXNlciBvbmx5IHdoZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgc3RvcmUuPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnYtcm93IGNoZWNrbGlzdHR1cm5vZmYgbXQtNCBmdi1wbHVnaW5zLWljb24tY29udGFpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG10LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uYWxsb3dlZE11bHRpU3VibWl0ID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFsbG93ZWRNdWx0aVN1Ym1pdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWxsb3dlZE11bHRpU3VibWl0U3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgc3ViIG1zLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiYWxsb3dlZE11bHRpU3VibWl0U3dpdGNoXCI+QWxsb3cgbXVsdGlwbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlczwvbGFiZWw+PGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YnRleHQgbXMtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJhbGxvd2VkTXVsdGlTdWJtaXRTd2l0Y2hcIj5CeSBlbmFibGluZywgdGhlIGNoZWNrbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGZpbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiBhIGRheTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yIG10LThcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWxlZnRcIiAqbmdJZj1cIlsnY3VzdG9tJ10uaW5jbHVkZXModHlwZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnLWhlYWRpbmdcIj5BZHZhbmNlIENvbmZpZ3VyYXRpb248L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cIm14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZHZhbmNlYWNjb3JkaWFuKClcIiBbbmdDbGFzc109XCJ7J3JvdGF0ZScgOiBzaG93YWR2YW5jZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjM1XCIgaGVpZ2h0PVwiMzVcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUgNy41TDEwIDEyLjVMMTUgNy41XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd2FkdmFuY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2RrRHJvcExpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjZGtEcmFnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZm9ybS1jaGVjay1sYWJlbCBzdWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFwcHJvdmVyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtdC0zXCIgW2NoZWNrZWRdPVwiY29uZmlnRGF0YT8uY2hlY2tMaXN0RGV0YWlscz8uYXBwcm92ZXI/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZVwiIFsobmdNb2RlbCldPVwiYXBwcm92ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJvbmVUaW1lXCIgKGNoYW5nZSk9XCJ1cGRhdGVDb25maWdBcHByb3ZlcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBzdWJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZW5hYmxpbmcsIHRoZSB1c2VycyB3aWxsIGJlIGFibGUgdG8gYXBwcm92ZSB0aGUgY2hlY2tsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbXQtM1wiICpuZ0lmPVwiYXBwcm92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXktNSB3LTIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViXCI+VG8gYmUgYXBwcm92ZWQgYnkgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTgwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWNoaXAtZHJvcGRvd24gW2RhdGFdPVwiYWxlcnRVc2Vyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkRGF0YV09XCJjb25maWdEYXRhPy5jaGVja0xpc3REZXRhaWxzPy5hcHByb3ZlclwiIChzZWxlY3RlZExpc3QpPVwidXBkYXRlQXBwcm92ZXIoJGV2ZW50KVwiPjwvbGliLWNoaXAtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZm9ybS1jaGVjay1sYWJlbCBzdWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlJlbWFpbmRlcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbXQtM1wiIFsobmdNb2RlbCldPVwicmVtYWluZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBpZD1cIm9uZVRpbWVcIiAoY2hhbmdlKT1cInVwZGF0ZUNvbmZpZ1JlbWFpbmRlcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBzdWJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZW5hYmxpbmcsIHRoZSB1c2VycyB3aWxsIGJlIHJlbWluZGVkIGluIHRoZSBzZWxlY3RlZCBpbnRlcnZhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG10LTNcIiAqbmdJZj1cInJlbWFpbmRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXktNSB3LTIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViXCI+Tm90aWZ5IHVzZXIgYmVmb3JlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTgwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgdy0yMDBweCAsXCIgKm5nRm9yPVwibGV0IGxvb3Agb2YgdGltZUxvb3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdGb3I9XCJsZXQgbG9vcCBvZiB0aW1lTG9vcFwiPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTQ4N180NzYzNilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC4wMDEzIDUuMDAwMzNWMTAuMDAwM0wxMy4zMzQ2IDExLjY2N00xOC4zMzQ2IDEwLjAwMDNDMTguMzM0NiAxNC42MDI3IDE0LjYwMzcgMTguMzMzNyAxMC4wMDEzIDE4LjMzMzdDNS4zOTg5MyAxOC4zMzM3IDEuNjY3OTcgMTQuNjAyNyAxLjY2Nzk3IDEwLjAwMDNDMS42Njc5NyA1LjM5Nzk1IDUuMzk4OTMgMS42NjY5OSAxMC4wMDEzIDEuNjY2OTlDMTQuNjAzNyAxLjY2Njk5IDE4LjMzNDYgNS4zOTc5NSAxOC4zMzQ2IDEwLjAwMDNaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNDg3XzQ3NjM2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBwcy0xNCBtZS01XCIgKGNoYW5nZSk9XCJ1cGRhdGVSZW1haW5kZXIoJGV2ZW50LGxvb3ApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdGltZSBvZiB1cGRhdGVUaW1lTG9vcChsb29wKVwiIGNsYXNzPVwiaC0yMDBweFwiIFtzZWxlY3RlZF09XCJnZXRTZWxlY3RlZCh0aW1lLGxvb3ApXCIgW3ZhbHVlXT1cInRpbWVcIj57e3RpbWV9fSBtaW5zPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aW1lTG9vcC5sZW5ndGggPCAzXCIgY2xhc3M9XCJtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cInVwZGF0ZUxvb3AoKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuMDAxMyA0LjE2Njk5VjE1LjgzMzdNNC4xNjc5NyAxMC4wMDAzSDE1LjgzNDZcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZW1haW5kZXJcIiBjbGFzcz1cIm10LTIgdXNlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsZXJ0cyBhdCBldmVyeSAzMCBNaW5zIGFuZCA2MCBNaW5zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yIG10LThcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiWydzdG9yZW9wZW5hbmRjbG9zZScsJ2V5ZXRlc3QnXS5pbmNsdWRlcyh0eXBlKVwiIGNsYXNzPVwibXQtNiBteC00IHN1YlwiPlN0b3JlIG9wZW5zIGF0IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctNjAwXCI+PHU+e3tjb25maWdEYXRhPy5vcGVuVGltZX19PC91Pjwvc3Bhbj4gYW5kIGNsb3Nlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IDxzcGFuIGNsYXNzPVwiZnctNjAwXCI+PHU+e3tjb25maWdEYXRhPy5jbG9zZVRpbWV9fTwvdT48L3NwYW4+LCBldmVyeWRheS4gPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlcGFyYXRvciBtdC04XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0eXBlID09PSAndW5hdHRlbmRlZCdcIiBjbGFzcz1cIm10LTYgbXgtNCBzdWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lIHRha2VuIHRvIGFzc2lzdCBieSBzdGFmZiAmbHQ7PSAxIG1pbnMgfCBTdGFmZiB0byBjdXN0b21lciB0aW1lIHNwZW50ICZsdDs9MSBtaW5zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdG9yZSBvcGVucyBhdCA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ3LTYwMFwiPjx1Pnt7Y29uZmlnRGF0YT8ub3BlblRpbWV9fTwvdT48L3NwYW4+IGFuZCBjbG9zZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdCA8c3BhbiBjbGFzcz1cImZ3LTYwMFwiPjx1Pnt7Y29uZmlnRGF0YT8uY2xvc2VUaW1lfX08L3U+PC9zcGFuPiwgZXZlcnlkYXkuIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZXBhcmF0b3IgbXQtOFwiPjwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgIT09J2N1c3RvbSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIVsnc3RvcmVvcGVuYW5kY2xvc2UnLCdleWV0ZXN0J10uaW5jbHVkZXModHlwZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi1sZWZ0aGVhZGluZyBtdC04XCI+QWxlcnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTJcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xODc0XzY2MTk1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMTAuNjY3M1Y4LjAwMDY1TTguMDAwMTYgNS4zMzM5OEg4LjAwNjgzTTE0LjY2NjggOC4wMDA2NUMxNC42NjY4IDExLjY4MjYgMTEuNjgyMSAxNC42NjczIDguMDAwMTYgMTQuNjY3M0M0LjMxODI2IDE0LjY2NzMgMS4zMzM1IDExLjY4MjYgMS4zMzM1IDguMDAwNjVDMS4zMzM1IDQuMzE4NzUgNC4zMTgyNiAxLjMzMzk4IDguMDAwMTYgMS4zMzM5OEMxMS42ODIxIDEuMzMzOTggMTQuNjY2OCA0LjMxODc1IDE0LjY2NjggOC4wMDA2NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTg3NF82NjE5NVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiWyd1bmlmb3JtZGV0ZWN0aW9uJywnbW9iaWxldXNhZ2VkZXRlY3Rpb24nXS5pbmNsdWRlcyh0eXBlKVwiIGNsYXNzPVwiY29sLW1kLTEyIG10LThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtdC0yIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTQgc3ViXCI+SWYgdXNhZ2UgZXhjZWVkczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ2LXJvdyBtYi01IGZ2LXBsdWdpbnMtaWNvbi1jb250YWluZXIgZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc29saWQgdy01NXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hbGVydC51c2FnZUV4Y2VlZHNcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiBhdXRvY29tcGxldGU9XCJvZmZcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmxlbmd0aD1cIjJcIiBtYXhsZW5ndGg9XCIzXCIgKGJsdXIpPVwidmFsaWRhdGVMaW1pdCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgdXNhZ2VlcnJvclwiICpuZ0lmPVwiZXJyb3Jtc2dcIj5QbGVhc2UgZW50ZXIgZXZlbnQgY291bnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIDE1IHRvIDk5OTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJbJ3VuaWZvcm1kZXRlY3Rpb24nLCdtb2JpbGV1c2FnZWRldGVjdGlvbicsJ3VuYXR0ZW5kZWQnLCdwYWNrYWdlQ29uZmlndXJhdGlvbiddLmluY2x1ZGVzKHR5cGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IG5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViIG14LTRcIj5TZW5kIEFsZXJ0IHRvIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdi1yb3cgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWNoaXAtZHJvcGRvd24gW2RhdGFdPVwiYWxlcnRVc2Vyc1wiIFtzZWxlY3RlZERhdGFdPVwiY29uZmlnRGF0YS5jaGVja0xpc3REZXRhaWxzLmFsZXJ0LmFsZXJ0c1RvXCIgKHNlbGVjdGVkTGlzdCk9XCJ1cGRhdGVBbGVydCgkZXZlbnQpXCI+PC9saWItY2hpcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3IgbXQtOFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJbJ3VuaWZvcm1kZXRlY3Rpb24nLCdtb2JpbGV1c2FnZWRldGVjdGlvbiddLmluY2x1ZGVzKHR5cGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInNlY3Rpb24tbGVmdGhlYWRpbmcgbXQtOFwiPkRldGVjdGlvbiBBcmVhczxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteC0yXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTg3NF82NjE5NSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDEwLjY2NzNWOC4wMDA2NU04LjAwMDE2IDUuMzMzOThIOC4wMDY4M00xNC42NjY4IDguMDAwNjVDMTQuNjY2OCAxMS42ODI2IDExLjY4MjEgMTQuNjY3MyA4LjAwMDE2IDE0LjY2NzNDNC4zMTgyNiAxNC42NjczIDEuMzMzNSAxMS42ODI2IDEuMzMzNSA4LjAwMDY1QzEuMzMzNSA0LjMxODc1IDQuMzE4MjYgMS4zMzM5OCA4LjAwMDE2IDEuMzMzOThDMTEuNjgyMSAxLjMzMzk4IDE0LjY2NjggNC4zMTg3NSAxNC42NjY4IDguMDAwNjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE4NzRfNjYxOTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48L2gyPlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG15LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViIG14LTRcIj4gRGV0ZWN0IG1vYmlsZSB1c2FnZSBleGNlcHQgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWNoaXAtZHJvcGRvd24gW2RhdGFdPVwiem9uZUxpc3RcIiBbc2VsZWN0ZWREYXRhXT1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5kZXRlY3Rpb25BcmVhXCIgKHNlbGVjdGVkTGlzdCk9XCJ1cGRhdGVab25lKCRldmVudClcIj48L2xpYi1jaGlwLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yIG10LThcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PGgyIGNsYXNzPVwic2VjdGlvbi1sZWZ0aGVhZGluZyBtdC04XCI+e3t0eXBlID09PSAnbW9iaWxldXNhZ2VkZXRlY3Rpb24nID8gJ1RvIGJlIEFja25vd2xlZGdlZCBieScgOiAnQXBwcm92ZXInfX08L2gyPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3BhbiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbXMtMyBtdC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHJvbGU9XCJzd2l0Y2hcIiBpZD1cInN1cHBvcnRcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbXQtMyBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QnkgZW5hYmxpbmcsIHRoZSB1c2VycyB3aWxsIGJlIGFibGUgdG8gYWNrbm93bGVkZ2UgdGhlIGNoZWNrbGlzdDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT09ICdtb2JpbGV1c2FnZWRldGVjdGlvbidcIiBjbGFzcz1cImNvbC1tZC0xMiBtdC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgbXQtMiBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC00IHN1YlwiPklmIHVzYWdlIGV4Y2VlZHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdi1yb3cgbWItNSBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyIGZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc29saWQgdy01NXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmZpZ0RhdGE/LmNoZWNrTGlzdERldGFpbHMuYWxlcnQudXNhZ2VFeGNlZWRzXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbWl0X3NwZWNpYWxfY2hhcigkZXZlbnQpXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcmVxdWlyZWQgbWlubGVuZ3RoPVwiMlwiIG1heGxlbmd0aD1cIjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlTGltaXQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHVzYWdlZXJyb3JcIiAqbmdJZj1cImVycm9ybXNnXCI+UGxlYXNlIGVudGVyIGV2ZW50IGNvdW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiAxNSB0byA5OTk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ViXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG5nLXN0YXItaW5zZXJ0ZWQgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWIgbXgtNFwiPlRvIGJlIGFwcHJvdmVkIGJ5IDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1jaGlwLWRyb3Bkb3duIFtkYXRhXT1cImFsZXJ0VXNlcnNcIiBbc2VsZWN0ZWREYXRhXT1cImNvbmZpZ0RhdGEuY2hlY2tMaXN0RGV0YWlscy5hcHByb3ZlclwiPjwvbGliLWNoaXAtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvciBtdC04XCI+PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXRhYmxlRGF0YS5sZW5ndGggJiYgIXRhYmxlRmlsdGVyLmxlbmd0aCAmJiBzaG93SW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJzZWN0aW9uLWxlZnRoZWFkaW5nIG10LThcIj5Bc3NpZ248c3BhbiBjbGFzcz1cIm14LTJcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xODc0XzY2MTk1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMTAuNjY3M1Y4LjAwMDY1TTguMDAwMTYgNS4zMzM5OEg4LjAwNjgzTTE0LjY2NjggOC4wMDA2NUMxNC42NjY4IDExLjY4MjYgMTEuNjgyMSAxNC42NjczIDguMDAwMTYgMTQuNjY3M0M0LjMxODI2IDE0LjY2NzMgMS4zMzM1IDExLjY4MjYgMS4zMzM1IDguMDAwNjVDMS4zMzM1IDQuMzE4NzUgNC4zMTgyNiAxLjMzMzk4IDguMDAwMTYgMS4zMzM5OEMxMS42ODIxIDEuMzMzOTggMTQuNjY2OCA0LjMxODc1IDE0LjY2NjggOC4wMDA2NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE4NzRfNjYxOTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj48L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJhZGRTdG9yZUNvbXBvbmVudCgpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGNyZWF0ZWJ1dHRvbnMgcHgtNCBuZy1zdGFyLWluc2VydGVkIG10LThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiIHRhYmluZGV4PVwiMFwiPjxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMlwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMDEgNC4xNjYwMlYxNS44MzI3TTQuMTY2NzUgOS45OTkzNUgxNS44MzM0XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjxzcGFuIGNsYXNzPVwiY3JlYXRlXCI+QWRkIFN0b3JlPC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIGFzc2lnbnBhZGRpbmcgbWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZHBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTE0XCI+PHN2ZyBjbGFzcz1cIm14LTIwIG10LTEyXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEMUZBREZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTI1LjA5IDI1QzI1LjMyNTEgMjQuMzMxNyAyNS43ODkyIDIzLjc2ODEgMjYuNCAyMy40MDkxQzI3LjAxMDggMjMuMDUwMiAyNy43Mjg5IDIyLjkxODkgMjguNDI3MiAyMy4wMzg3QzI5LjEyNTUgMjMuMTU4NSAyOS43NTg4IDIzLjUyMTUgMzAuMjE1MSAyNC4wNjM1QzMwLjY3MTMgMjQuNjA1NSAzMC45MjExIDI1LjI5MTUgMzAuOTIgMjZDMzAuOTIgMjggMjcuOTIgMjkgMjcuOTIgMjlNMjggMzNIMjguMDFNMzggMjhDMzggMzMuNTIyOCAzMy41MjI4IDM4IDI4IDM4QzIyLjQ3NzIgMzggMTggMzMuNTIyOCAxOCAyOEMxOCAyMi40NzcyIDIyLjQ3NzIgMTggMjggMThDMzMuNTIyOCAxOCAzOCAyMi40NzcyIDM4IDI4WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAzOTg1NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNFQ0ZERjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwic2VjdGlvbi1sZWZ0aGVhZGluZyBtdC02IG14LTEwXCI+VXBsb2FkIHRvIGFzc2lnbiB1c2VyczwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwic3VidGV4dCBteC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5DbGljayDigJxEb3dubG9hZCBUZW1wbGF0ZeKAnTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4gQWRkIHlvdXIgZGF0YSB0byB0aGUgdGVtcGxhdGUgZmlsZTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4gVXBsb2FkIGl0IGJlbG93IHRvIGFzc2lnbiB1c2VyczwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gI3VwbG9hZCAoY2xpY2spPVwiZmlsZS5jbGljaygpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcmV1cGxvYWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi1wcmltYXJ5IFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJtYi0yIG14LTFcIiB3aWR0aD1cIjIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMTkgMTlcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggMTIuNVYxNS44MzMzQzE4IDE2LjI3NTQgMTcuODI0NCAxNi42OTkzIDE3LjUxMTggMTcuMDExOEMxNy4xOTkzIDE3LjMyNDQgMTYuNzc1NCAxNy41IDE2LjMzMzMgMTcuNUg0LjY2NjY3QzQuMjI0NjQgMTcuNSAzLjgwMDcyIDE3LjMyNDQgMy40ODgxNiAxNy4wMTE4QzMuMTc1NTkgMTYuNjk5MyAzIDE2LjI3NTQgMyAxNS44MzMzVjEyLjVNMTQuNjY2NyA2LjY2NjY3TDEwLjUgMi41TTEwLjUgMi41TDYuMzMzMzMgNi42NjY2N00xMC41IDIuNVYxMi41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmV1cGxvYWR0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcGxvYWQgVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjtcIiB0eXBlPVwiZmlsZVwiICNmaWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwia3RfYWNjb3VudF90ZWFtX3NpemVfc2VsZWN0XzFcIiAoY2hhbmdlKT1cIm9uRmlsZVVwbG9hZCgkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1saWdodC1wcmltYXJ5IGRvd25sb2FkXCIgKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLXByaW1hcnlcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwibWItMVwiIHdpZHRoPVwiMjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTUuODMzMzMgOC4zMzMzM0wxMCAxMi41TTEwIDEyLjVMMTQuMTY2NyA4LjMzMzMzTTEwIDEyLjVWMi41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48c3BhbiBjbGFzcz1cImRvd25sb2FkdGV4dFwiPkRvd25sb2FkIFRlbXBsYXRlPC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICBcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiICpuZ0lmPVwidGFibGVEYXRhLmxlbmd0aCB8fCB0YWJsZUZpbHRlci5sZW5ndGggfHwgIXNob3dJbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTZcIiAqbmdJZj1cIiFzaG93SW1hZ2UgfHwgdGFibGVEYXRhLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIFwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWN0aW9uLWxlZnRoZWFkaW5nXCI+QXNzaWduPHNwYW4gY2xhc3M9XCJteC0yXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTg3NF82NjE5NSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMTAuNjY3M1Y4LjAwMDY1TTguMDAwMTYgNS4zMzM5OEg4LjAwNjgzTTE0LjY2NjggOC4wMDA2NUMxNC42NjY4IDExLjY4MjYgMTEuNjgyMSAxNC42NjczIDguMDAwMTYgMTQuNjY3M0M0LjMxODI2IDE0LjY2NzMgMS4zMzM1IDExLjY4MjYgMS4zMzM1IDguMDAwNjVDMS4zMzM1IDQuMzE4NzUgNC4zMTgyNiAxLjMzMzk4IDguMDAwMTYgMS4zMzM5OEMxMS42ODIxIDEuMzMzOTggMTQuNjY2OCA0LjMxODc1IDE0LjY2NjggOC4wMDA2NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xODc0XzY2MTk1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTEgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4PVwiMVwiIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBkYXRhLWt0LXN1YnNjcmlwdGlvbi10YWJsZS1maWx0ZXI9XCJzZWFyY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VhcmNoVGFibGVEYXRhKClcIiBbKG5nTW9kZWwpXT1cInRhYmxlRmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc29saWQgdy00MDBweCBwcy0xNCBteC0xIG1lLTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IFN0b3JlIG5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiIGRhdGEta3Qtc3Vic2NyaXB0aW9uLXRhYmxlLXRvb2xiYXI9XCJiYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImFkZFN0b3JlQ29tcG9uZW50KClcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgY3JlYXRlYnV0dG9ucyBweC00IG5nLXN0YXItaW5zZXJ0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCIgdGFiaW5kZXg9XCIwXCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC4wMDAxIDQuMTY2MDJWMTUuODMyN000LjE2Njc1IDkuOTk5MzVIMTUuODMzNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PHNwYW4gY2xhc3M9XCJjcmVhdGVcIj5BZGQgU3RvcmU8L3NwYW4+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIiAqbmdJZj1cIiF0YWJsZURhdGEubGVuZ3RoICYmICFzaG93SW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBteS04IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhc3VidGV4dFwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3IgdXNlcnM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keS1zb3AgcHQtMCBteC00XCIgKm5nSWY9XCJ0YWJsZURhdGEubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcFRhYmxlIHRhYmxlLXJlc3BvbnNpdmUgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0YWJsZUxvYWRpbmdcIiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0YWJsZURhdGEubGVuZ3RoICYmICF0YWJsZUxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInctMTAwIHRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtYWxpZ24tbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGgtMTRweCB3LTE0cHhcIiB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZmxhZ1wiIChjaGFuZ2UpPVwiY2hlY2tBbGwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbFwiPiA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbXgtNCBsaW5lLWhlaWdodFwiID5TdG9yZU5hbWU8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1hbGlnbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFzc2lnbmVkIFRvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1hbGlnbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5FbWFpbCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0YWJsZURhdGE7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgaC0xNHB4IHctMTRweCB1c2VyRmxhZ1wiIHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJmbGFnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlRmxhZygkZXZlbnQsaSxkYXRhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb25maWdEYXRhPy5jaGVja0xpc3REZXRhaWxzPy5hc3NpZ25lZFVzZXJzLmluY2x1ZGVzKGRhdGE/LmlkKVwiIC8+PHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG14LTQgbGluZS1oZWlnaHRcIj57e2RhdGEuc3RvcmVOYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tkYXRhLnVzZXJOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2RhdGEudXNlckVtYWlsfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cInNpemVcIiBbY3VycmVudFBhZ2VdPVwiY3VycmVudFZhbHVlXCIgW3RvdGFsSXRlbXNdPVwicmVjb3Jkc1RvdGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplXCIgW3BhZ2VTaXplXT1cInNpemVcIiAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiICpuZ0lmPVwiIXRhYmxlTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtNiBhc3NpZ25wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIlJldXBsb2FkKClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByZXVwbG9hZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcmV1cGxvYWRcIj48c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLXByaW1hcnkgXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwibWItMiBteC0xXCIgd2lkdGg9XCIyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMTkgMTlcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE4IDEyLjVWMTUuODMzM0MxOCAxNi4yNzU0IDE3LjgyNDQgMTYuNjk5MyAxNy41MTE4IDE3LjAxMThDMTcuMTk5MyAxNy4zMjQ0IDE2Ljc3NTQgMTcuNSAxNi4zMzMzIDE3LjVINC42NjY2N0M0LjIyNDY0IDE3LjUgMy44MDA3MiAxNy4zMjQ0IDMuNDg4MTYgMTcuMDExOEMzLjE3NTU5IDE2LjY5OTMgMyAxNi4yNzU0IDMgMTUuODMzM1YxMi41TTE0LjY2NjcgNi42NjY2N0wxMC41IDIuNU0xMC41IDIuNUw2LjMzMzMzIDYuNjY2NjdNMTAuNSAyLjVWMTIuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXVwbG9hZHRleHRcIiAqbmdJZj1cIiFyZXVwbG9hZFwiPlJldXBsb2FkIFRlbXBsYXRlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJmaWxlMS5jbGljaygpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcmV1cGxvYWRcIiAqbmdJZj1cInJldXBsb2FkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJldXBsb2FkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi1wcmltYXJ5IFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTIgbXgtMVwiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMTkgMTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOCAxMi41VjE1LjgzMzNDMTggMTYuMjc1NCAxNy44MjQ0IDE2LjY5OTMgMTcuNTExOCAxNy4wMTE4QzE3LjE5OTMgMTcuMzI0NCAxNi43NzU0IDE3LjUgMTYuMzMzMyAxNy41SDQuNjY2NjdDNC4yMjQ2NCAxNy41IDMuODAwNzIgMTcuMzI0NCAzLjQ4ODE2IDE3LjAxMThDMy4xNzU1OSAxNi42OTkzIDMgMTYuMjc1NCAzIDE1LjgzMzNWMTIuNU0xNC42NjY3IDYuNjY2NjdMMTAuNSAyLjVNMTAuNSAyLjVMNi4zMzMzMyA2LjY2NjY3TTEwLjUgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmV1cGxvYWR0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldXBsb2FkIFRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIgI2ZpbGUxIHR5cGU9XCJmaWxlXCIgaWQ9XCJrdF9hY2NvdW50X3RlYW1fc2l6ZV9zZWxlY3RfMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVVcGxvYWQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tbGlnaHQtcHJpbWFyeSBkb3dubG9hZFwiIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLXByaW1hcnlcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU01LjgzMzMzIDguMzMzMzNMMTAgMTIuNU0xMCAxMi41TDE0LjE2NjcgOC4zMzMzM00xMCAxMi41VjIuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48c3BhbiBjbGFzcz1cImRvd25sb2FkdGV4dFwiPkRvd25sb2FkIFRoaXMgQ1NWPC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInJvdyBmb290ZXIxIG10LTEwIG14LTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZGFya1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhcmsgZm9vdGVydGV4dCBtZS0xXCI+TmVlZCBoZWxwPzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL3RhbmdvZXllLmFpL1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvb3RlcnRleHQgdGV4dC1ob3Zlci1wcmltYXJ5XCI+PHU+V2F0Y2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFZpZGVvIFR1dG9yaWFsPC91PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICBcclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=