tango-app-ui-store-builder 1.0.10 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/fixture-template/fixture-template.component.mjs +9 -23
- package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +47 -84
- package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +1 -1
- package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +5 -4
- package/esm2022/lib/components/manage-store-plano/manage-store-plano-feedback/manage-store-plano-feedback.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +40 -337
- package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +5 -3
- package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +9 -27
- package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +2 -3
- package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +73 -102
- package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +3 -3
- package/esm2022/lib/interfaces/fixture-template.interface.mjs +1 -1
- package/esm2022/lib/services/store-builder.service.mjs +4 -4
- package/esm2022/lib/tango-store-builder.module.mjs +7 -11
- package/fesm2022/tango-app-ui-store-builder.mjs +1139 -2387
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/fixture-template/fixture-template.component.d.ts +0 -1
- package/lib/components/fixture-template/template-basic-details/template-basic-details.component.d.ts +9 -9
- package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +5 -19
- package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +6 -7
- package/lib/components/manage-store-plano/template-vms/template-vms.component.d.ts +9 -9
- package/lib/interfaces/fixture-template.interface.d.ts +2 -2
- package/lib/services/store-builder.service.d.ts +1 -1
- package/lib/tango-store-builder.module.d.ts +33 -35
- package/package.json +1 -1
- package/esm2022/lib/components/manage-store-plano/verification-feedback/action-confirm-popup/action-confirm-popup.component.mjs +0 -80
- package/esm2022/lib/components/manage-store-plano/verification-feedback/fixture/fixture.component.mjs +0 -375
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +0 -420
- package/lib/components/manage-store-plano/verification-feedback/action-confirm-popup/action-confirm-popup.component.d.ts +0 -21
- package/lib/components/manage-store-plano/verification-feedback/fixture/fixture.component.d.ts +0 -48
- package/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.d.ts +0 -74
|
@@ -1,375 +0,0 @@
|
|
|
1
|
-
import { NgFor, NgIf, NgStyle } from "@angular/common";
|
|
2
|
-
import { Component, Input, } from "@angular/core";
|
|
3
|
-
import { SHELF_COLORS } from "../../../../data/fixture-template.data";
|
|
4
|
-
import { lastValueFrom, Subject, takeUntil } from "rxjs";
|
|
5
|
-
import { rgbToHex } from "../../../../functions/plano.function";
|
|
6
|
-
import { NgbTooltip } from "@ng-bootstrap/ng-bootstrap";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "../../../../services/store-builder.service";
|
|
9
|
-
import * as i2 from "tango-app-ui-global";
|
|
10
|
-
export class FixtureComponent {
|
|
11
|
-
apiService;
|
|
12
|
-
gs;
|
|
13
|
-
cd;
|
|
14
|
-
fixture;
|
|
15
|
-
clientId;
|
|
16
|
-
imgCDN;
|
|
17
|
-
shelfColors = SHELF_COLORS;
|
|
18
|
-
sectionByZones = [];
|
|
19
|
-
vmList = [];
|
|
20
|
-
isPageLoading = true;
|
|
21
|
-
isVMInitialized = false;
|
|
22
|
-
isBCInitialized = false;
|
|
23
|
-
destroy$ = new Subject();
|
|
24
|
-
constructor(apiService, gs, cd) {
|
|
25
|
-
this.apiService = apiService;
|
|
26
|
-
this.gs = gs;
|
|
27
|
-
this.cd = cd;
|
|
28
|
-
}
|
|
29
|
-
ngOnInit() {
|
|
30
|
-
this.gs.environment
|
|
31
|
-
.pipe(takeUntil(this.destroy$))
|
|
32
|
-
.subscribe((env) => (this.imgCDN = env.planogramCDN));
|
|
33
|
-
this.isPageLoading = true;
|
|
34
|
-
this.gs.dataRangeValue
|
|
35
|
-
.pipe(takeUntil(this.destroy$))
|
|
36
|
-
.subscribe(async (data) => {
|
|
37
|
-
if (data?.client) {
|
|
38
|
-
this.clientId = data?.client;
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
let headerData = JSON.parse(localStorage.getItem("header-filters"));
|
|
42
|
-
this.clientId = headerData?.client;
|
|
43
|
-
}
|
|
44
|
-
await this.getVmsList();
|
|
45
|
-
this.isPageLoading = false;
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
ngOnChanges(changes) {
|
|
49
|
-
if (changes["fixture"]?.currentValue) {
|
|
50
|
-
setTimeout(() => {
|
|
51
|
-
this.applyShelfColors();
|
|
52
|
-
this.handleVmPositionAndSize();
|
|
53
|
-
}, 300);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
ngAfterViewChecked() {
|
|
57
|
-
if (!this.isBCInitialized) {
|
|
58
|
-
this.isBCInitialized = this.applyShelfColors();
|
|
59
|
-
}
|
|
60
|
-
if (!this.isVMInitialized) {
|
|
61
|
-
this.isVMInitialized = this.handleVmPositionAndSize();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
async getVmsList() {
|
|
65
|
-
let payload = {
|
|
66
|
-
clientId: this.clientId,
|
|
67
|
-
limit: 10000,
|
|
68
|
-
offset: 0,
|
|
69
|
-
sortColumnName: "",
|
|
70
|
-
sortBy: 1,
|
|
71
|
-
searchValue: "",
|
|
72
|
-
filter: {
|
|
73
|
-
type: [],
|
|
74
|
-
status: [],
|
|
75
|
-
size: [],
|
|
76
|
-
},
|
|
77
|
-
export: false,
|
|
78
|
-
emptyDownload: false,
|
|
79
|
-
};
|
|
80
|
-
try {
|
|
81
|
-
const res = await lastValueFrom(this.apiService.getVmLibraryList(payload));
|
|
82
|
-
if (res?.status === "success") {
|
|
83
|
-
this.vmList = res?.data?.data.map((item) => {
|
|
84
|
-
return {
|
|
85
|
-
id: item._id,
|
|
86
|
-
name: item.vmName,
|
|
87
|
-
displayName: item.vmName + (item?.vmType ? ` ( ${item.vmType} ) ` : ""),
|
|
88
|
-
brand: item.vmBrand,
|
|
89
|
-
type: item.vmType,
|
|
90
|
-
width: item.vmWidth.value,
|
|
91
|
-
height: item.vmHeight.value,
|
|
92
|
-
placement: item.isDoubleSided,
|
|
93
|
-
noOfAssigned: item.templateCount,
|
|
94
|
-
status: item.status,
|
|
95
|
-
...(item.vmImageUrl
|
|
96
|
-
? { imgUrl: `${this.imgCDN}${item.vmImageUrl}` }
|
|
97
|
-
: {}),
|
|
98
|
-
};
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
catch (error) {
|
|
103
|
-
console.log("@@ ~ getVmsList [ERR]:", error);
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
this.isPageLoading = false;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
getSelectedVM(vm) {
|
|
110
|
-
return this.vmList.find((v) => v.id === vm?.vmId);
|
|
111
|
-
}
|
|
112
|
-
handleVmPositionAndSize() {
|
|
113
|
-
// if (!this.showVMs) return true;
|
|
114
|
-
const viewPort = document.getElementById("body-block-sum");
|
|
115
|
-
if (!viewPort)
|
|
116
|
-
return false;
|
|
117
|
-
const bodyWidth = viewPort.offsetWidth;
|
|
118
|
-
this.fixture?.vmConfig?.forEach((e, i) => {
|
|
119
|
-
let startShelf = e?.startYPosition ?? 1;
|
|
120
|
-
let endShelf = e?.endYPosition ?? this.fixture?.shelfConfig?.length ?? 1;
|
|
121
|
-
const vm = viewPort.querySelector(`#vm${i}`);
|
|
122
|
-
if (!vm)
|
|
123
|
-
return;
|
|
124
|
-
let x = 0;
|
|
125
|
-
let y = 0;
|
|
126
|
-
let yStart = 0;
|
|
127
|
-
for (let k = 1; k < startShelf; k++) {
|
|
128
|
-
const s = getShelfDiv(k);
|
|
129
|
-
if (!s)
|
|
130
|
-
return;
|
|
131
|
-
yStart += s.offsetHeight;
|
|
132
|
-
}
|
|
133
|
-
let placementHeight = 0;
|
|
134
|
-
let placementWidth = bodyWidth;
|
|
135
|
-
for (let k = startShelf; k <= endShelf; k++) {
|
|
136
|
-
const s = getShelfDiv(k);
|
|
137
|
-
if (!s)
|
|
138
|
-
return;
|
|
139
|
-
placementHeight += s.offsetHeight;
|
|
140
|
-
}
|
|
141
|
-
let defaultW = placementWidth / 3;
|
|
142
|
-
let defaultH = placementHeight / 3;
|
|
143
|
-
let width = defaultW;
|
|
144
|
-
let height = defaultH;
|
|
145
|
-
switch (e?.xZone) {
|
|
146
|
-
case "left":
|
|
147
|
-
x = 0;
|
|
148
|
-
width = defaultW;
|
|
149
|
-
break;
|
|
150
|
-
case "right":
|
|
151
|
-
width = defaultW;
|
|
152
|
-
x = bodyWidth - width;
|
|
153
|
-
break;
|
|
154
|
-
case "middle":
|
|
155
|
-
width = defaultW;
|
|
156
|
-
x = (bodyWidth - width) / 2;
|
|
157
|
-
break;
|
|
158
|
-
case "stretch":
|
|
159
|
-
width = bodyWidth;
|
|
160
|
-
x = 0;
|
|
161
|
-
break;
|
|
162
|
-
}
|
|
163
|
-
switch (e?.yZone) {
|
|
164
|
-
case "top":
|
|
165
|
-
height = placementHeight < defaultH ? placementHeight - 20 : defaultH;
|
|
166
|
-
y = yStart;
|
|
167
|
-
break;
|
|
168
|
-
case "middle":
|
|
169
|
-
height = placementHeight < defaultH ? placementHeight - 20 : defaultH;
|
|
170
|
-
y = (placementHeight - height) / 2 + yStart;
|
|
171
|
-
break;
|
|
172
|
-
case "bottom":
|
|
173
|
-
height = placementHeight < defaultH ? placementHeight - 20 : defaultH;
|
|
174
|
-
y = placementHeight - height + yStart;
|
|
175
|
-
break;
|
|
176
|
-
case "stretch":
|
|
177
|
-
height = placementHeight;
|
|
178
|
-
y = yStart;
|
|
179
|
-
break;
|
|
180
|
-
}
|
|
181
|
-
vm.style.width = `${width}px`;
|
|
182
|
-
vm.style.height = ` ${height}px`;
|
|
183
|
-
vm.style.transform = `translate(${x}px, ${y}px)`;
|
|
184
|
-
function getShelfDiv(k) {
|
|
185
|
-
let div = viewPort.querySelector(`#shelf${k}`);
|
|
186
|
-
if (!div)
|
|
187
|
-
div = viewPort.querySelector(`#tray${k}`);
|
|
188
|
-
return div;
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
return true;
|
|
192
|
-
}
|
|
193
|
-
applyShelfColors() {
|
|
194
|
-
const bodies = document.getElementById("body-block-sum");
|
|
195
|
-
if (!bodies)
|
|
196
|
-
return false;
|
|
197
|
-
const bodyChildren = Array.from(bodies?.children ?? []);
|
|
198
|
-
const shelfDivs = bodyChildren
|
|
199
|
-
.map((div) => div)
|
|
200
|
-
.filter((d) => d?.id.includes("sumShelfContainer"));
|
|
201
|
-
if (!shelfDivs)
|
|
202
|
-
return false;
|
|
203
|
-
const adjust = 0;
|
|
204
|
-
switch (this.fixture?.productResolutionLevel) {
|
|
205
|
-
case "L1": //fixture
|
|
206
|
-
shelfDivs.forEach((d) => {
|
|
207
|
-
if (d)
|
|
208
|
-
d.style.backgroundColor = this.shelfColors[0].bg;
|
|
209
|
-
});
|
|
210
|
-
break;
|
|
211
|
-
case "L3": //section
|
|
212
|
-
{
|
|
213
|
-
const shelves = shelfDivs
|
|
214
|
-
.map((div) => div.lastElementChild?.tagName.toLowerCase() === "div"
|
|
215
|
-
? div.lastElementChild
|
|
216
|
-
: null)
|
|
217
|
-
.filter(Boolean);
|
|
218
|
-
this.constructSequentialSection(shelves);
|
|
219
|
-
const sectionArray = this.groupShelvesByZone(this.fixture?.shelfConfig ?? []);
|
|
220
|
-
const allSectionShelves = [];
|
|
221
|
-
sectionArray.forEach((se, i) => {
|
|
222
|
-
const shelfIds = se.shelves?.map((sh) => sh.replace(/\s/g, "").toLowerCase()) ??
|
|
223
|
-
[];
|
|
224
|
-
allSectionShelves.push(...shelfIds);
|
|
225
|
-
const secDivs = shelves.filter((item) => shelfIds?.includes(item?.id ?? ""));
|
|
226
|
-
secDivs.forEach((d) => {
|
|
227
|
-
if (d)
|
|
228
|
-
d.style.backgroundColor = this.shelfColors[i].bg;
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
const unassignedShelves = shelfDivs.filter((item) => !allSectionShelves.includes(item.id));
|
|
232
|
-
unassignedShelves.forEach((d) => (d.style.backgroundColor = "white"));
|
|
233
|
-
let sectionGroupHeight = 0;
|
|
234
|
-
setTimeout(() => {
|
|
235
|
-
this.sectionByZones.forEach((sz, i) => {
|
|
236
|
-
const currentSectionHeight = sz.section.shelfDivs.reduce((h, d) => h + (d?.offsetHeight ?? 0), 0);
|
|
237
|
-
const currentSectionWidth = sz.section.shelfDivs[0]?.offsetWidth ?? 345;
|
|
238
|
-
const bc = bodies.querySelector(`#brand-category${i}`);
|
|
239
|
-
if (bc) {
|
|
240
|
-
const secBg = rgbToHex(sz.section.shelfDivs[0]?.style.backgroundColor);
|
|
241
|
-
const color = this.shelfColors.find((c) => c.bg === secBg) ??
|
|
242
|
-
this.shelfColors[i];
|
|
243
|
-
bc.style.borderColor = color.border;
|
|
244
|
-
bc.style.backgroundColor = "#fff";
|
|
245
|
-
const bcX = (currentSectionWidth - bc.offsetWidth) / 2;
|
|
246
|
-
const bcY = (currentSectionHeight - bc.offsetHeight) / 2 +
|
|
247
|
-
sectionGroupHeight;
|
|
248
|
-
bc.style.transform = `translate(${bcX + adjust}px, ${bcY}px)`;
|
|
249
|
-
sectionGroupHeight += currentSectionHeight;
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
}, 0);
|
|
253
|
-
}
|
|
254
|
-
break;
|
|
255
|
-
case "L2": //shelf
|
|
256
|
-
{
|
|
257
|
-
shelfDivs.forEach((div, i) => {
|
|
258
|
-
div.style.backgroundColor = this.shelfColors[i].bg;
|
|
259
|
-
div.style.border = `1.4px solid ${this.shelfColors[i].border}`;
|
|
260
|
-
// if (this.showVMs) return false;
|
|
261
|
-
const bc = div.querySelector(`#brand-category${i}`);
|
|
262
|
-
if (!bc)
|
|
263
|
-
return;
|
|
264
|
-
const bcX = (div.offsetWidth - bc.offsetWidth) / 2;
|
|
265
|
-
const bcY = (div.offsetHeight - bc.offsetHeight) / 2;
|
|
266
|
-
bc.style.borderColor = this.shelfColors[i].border;
|
|
267
|
-
bc.style.backgroundColor = this.shelfColors[i].textBg;
|
|
268
|
-
bc.style.transform = `translate(${bcX + adjust}px, ${bcY}px)`;
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
break;
|
|
272
|
-
case "L4": //spot
|
|
273
|
-
{
|
|
274
|
-
shelfDivs.forEach((d) => {
|
|
275
|
-
if (d)
|
|
276
|
-
d.style.backgroundColor = this.shelfColors[0].bg;
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
break;
|
|
280
|
-
default:
|
|
281
|
-
shelfDivs.forEach((d) => {
|
|
282
|
-
if (d)
|
|
283
|
-
d.style.backgroundColor = this.shelfColors[0].bg;
|
|
284
|
-
});
|
|
285
|
-
break;
|
|
286
|
-
}
|
|
287
|
-
return true;
|
|
288
|
-
}
|
|
289
|
-
constructSequentialSection(shelfDivs) {
|
|
290
|
-
const newSectionByZones = [];
|
|
291
|
-
let pZone = null;
|
|
292
|
-
for (const s of this.fixture?.shelfConfig ?? []) {
|
|
293
|
-
const zone = s.zone || "";
|
|
294
|
-
const shelfId = `${s.shelfType}${s.shelfNumber}`;
|
|
295
|
-
const shelfDiv = shelfDivs.find((d) => d?.id === shelfId);
|
|
296
|
-
if (zone === "")
|
|
297
|
-
continue;
|
|
298
|
-
if (zone !== pZone) {
|
|
299
|
-
newSectionByZones.push({
|
|
300
|
-
zone,
|
|
301
|
-
section: {
|
|
302
|
-
brands: s.productBrandName ?? [],
|
|
303
|
-
categories: s.productCategory ?? [],
|
|
304
|
-
shelves: [shelfId],
|
|
305
|
-
shelfDivs: [shelfDiv],
|
|
306
|
-
},
|
|
307
|
-
});
|
|
308
|
-
pZone = zone;
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
newSectionByZones[newSectionByZones.length - 1].section.shelves.push(shelfId);
|
|
312
|
-
newSectionByZones[newSectionByZones.length - 1].section.shelfDivs.push(shelfDiv);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
this.sectionByZones = [...newSectionByZones];
|
|
316
|
-
this.cd.detectChanges();
|
|
317
|
-
}
|
|
318
|
-
groupShelvesByZone(input) {
|
|
319
|
-
const zoneMap = {};
|
|
320
|
-
for (const item of input) {
|
|
321
|
-
const zone = item?.zone ?? "";
|
|
322
|
-
const shelfLabel = `${item.shelfType} ${item.shelfNumber}`;
|
|
323
|
-
if (!zoneMap[zone]) {
|
|
324
|
-
zoneMap[zone] = {
|
|
325
|
-
shelves: [],
|
|
326
|
-
productBrandName: this.fixture?.productResolutionLevel === "L2"
|
|
327
|
-
? item.productBrandName
|
|
328
|
-
: [],
|
|
329
|
-
productCategory: this.fixture?.productResolutionLevel === "L2"
|
|
330
|
-
? item.productCategory
|
|
331
|
-
: [],
|
|
332
|
-
zone: zone,
|
|
333
|
-
};
|
|
334
|
-
}
|
|
335
|
-
zoneMap[zone]?.shelves?.push(shelfLabel);
|
|
336
|
-
}
|
|
337
|
-
return Object.values(zoneMap);
|
|
338
|
-
}
|
|
339
|
-
applySectionConfigToShelves(sections) {
|
|
340
|
-
const sectionMap = new Map();
|
|
341
|
-
for (const section of sections) {
|
|
342
|
-
for (const shelfLabel of section.shelves) {
|
|
343
|
-
sectionMap.set(shelfLabel, {
|
|
344
|
-
zone: section.zone,
|
|
345
|
-
productBrandName: section.productBrandName,
|
|
346
|
-
productCategory: section.productCategory,
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
// Apply overrides to matching shelves
|
|
351
|
-
return (this.fixture?.shelfConfig?.map((s) => {
|
|
352
|
-
const shelfLabel = `${s.shelfType} ${s.shelfNumber}`;
|
|
353
|
-
const override = sectionMap.get(shelfLabel);
|
|
354
|
-
return {
|
|
355
|
-
...s,
|
|
356
|
-
zone: override?.zone || "",
|
|
357
|
-
productBrandName: override?.productBrandName ?? [],
|
|
358
|
-
productCategory: override?.productCategory ?? [],
|
|
359
|
-
};
|
|
360
|
-
}) ?? []);
|
|
361
|
-
}
|
|
362
|
-
ngOnDestroy() {
|
|
363
|
-
this.destroy$.next();
|
|
364
|
-
this.destroy$.complete();
|
|
365
|
-
}
|
|
366
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FixtureComponent, deps: [{ token: i1.StoreBuilderService }, { token: i2.GlobalStateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
367
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FixtureComponent, isStandalone: true, selector: "lib-fixture", inputs: { fixture: "fixture" }, usesOnChanges: true, ngImport: i0, template: "@if(isPageLoading){\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div 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\r\n}@else {\r\n\r\n <section id=\"fixture-view\">\r\n <div id=\"vm-products-sum\" class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\" *ngIf=\"fixture?.header?.isEnabled && fixture?.fixtureType === 'wall'\">\r\n <p>{{ fixture?.header?.label }}</p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <!----------------------------------[VM BLOCK]--------------------------------------->\r\n <div *ngIf=\"fixture?.vmConfig?.length\">\r\n <ng-container *ngFor=\"let vm of fixture?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container *ngIf=\"getSelectedVM(vm) as selectedVM\">\r\n <img *ngIf=\"selectedVM?.imgUrl; else placeholder\" [src]=\"selectedVM?.imgUrl\"\r\n alt=\"Vm Image\" />\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder\">\r\n <h3>{{ selectedVM?.name }}</h3>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!----------------------------------[FIXTURE LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"fixture-level\" *ngIf=\"fixture?.productResolutionLevel === 'L1'\">\r\n <div id=\"brand-category\" class=\"brand-category\" *ngIf=\"fixture?.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of fixture?.productBrandName; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"fixture?.productCategory?.length\">\r\n <ng-container *ngFor=\"let c of fixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of fixture?.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"fixture?.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of fixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <!-----------------------------------[SECTION LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"section-level\" *ngIf=\"fixture?.productResolutionLevel === 'L3'\">\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <div [id]=\"'sumShelfContainer' + i\" *ngFor=\"let item of fixture?.shelfConfig; let i = index\">\r\n <!--------------------------------[SHELF LEVEL - BRAND CATEGORY]---------------------------------------->\r\n <div id=\"shelf-level\" *ngIf=\"fixture?.productResolutionLevel === 'L2'\">\r\n <div [id]=\"'brand-category' + i\" class=\"brand-category\" *ngIf=\"item.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\" *ngIf=\"item.productBrandName?.length\">\r\n <ng-container *ngFor=\"let b of item.productBrandName; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"item.productCategory?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item.productCategory?.length\">\r\n <ng-container *ngFor=\"let b of item.productCategory; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of item.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"item.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of item.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n @if(item.shelfType ==='shelf'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\" *ngIf=\"fixture?.footer?.isEnabled && fixture?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixture?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </section>\r\n}", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox 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}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox 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}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}#fixture-view .wall-viewport{max-width:340px;width:unset}#fixture-view #vm-products-sum{margin:0 auto}#fixture-view #vm-products-sum .body-block{position:relative}#fixture-view #vm-products-sum .body-block .block{border:none}#fixture-view #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#fixture-view #vm-products-sum #fixture-level .brand,#fixture-view #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-view #vm-products-sum #fixture-level .category{margin-top:12px}#fixture-view #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-view #vm-products-sum #section-level .brand,#fixture-view #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum #section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#fixture-view #vm-products-sum #section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#fixture-view #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#fixture-view #vm-products-sum #shelf-level .brand,#fixture-view #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}#fixture-view #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#fixture-view #vm-products-sum .sub-footer{position:relative;width:48%}#fixture-view #vm-products-sum img{width:100%;height:100%;display:block}#fixture-view #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;transition:all .3s ease}#fixture-view #vm-products-sum .vm-block h3{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;margin:0;width:100%;text-overflow:ellipsis;overflow:hidden}#fixture-view #vm-products-sum .vm-placeholder{border:4px solid var(--Black, #101828);background:#f9fafb;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px;white-space:nowrap;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }] });
|
|
368
|
-
}
|
|
369
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FixtureComponent, decorators: [{
|
|
370
|
-
type: Component,
|
|
371
|
-
args: [{ selector: "lib-fixture", standalone: true, imports: [NgIf, NgFor, NgbTooltip, NgStyle], template: "@if(isPageLoading){\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div 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\r\n}@else {\r\n\r\n <section id=\"fixture-view\">\r\n <div id=\"vm-products-sum\" class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\" *ngIf=\"fixture?.header?.isEnabled && fixture?.fixtureType === 'wall'\">\r\n <p>{{ fixture?.header?.label }}</p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div id=\"body-block-sum\" class=\"body-block\">\r\n <!----------------------------------[VM BLOCK]--------------------------------------->\r\n <div *ngIf=\"fixture?.vmConfig?.length\">\r\n <ng-container *ngFor=\"let vm of fixture?.vmConfig; let i = index\">\r\n <div [id]=\"'vm' + i\" class=\"vm-block\">\r\n <ng-container *ngIf=\"getSelectedVM(vm) as selectedVM\">\r\n <img *ngIf=\"selectedVM?.imgUrl; else placeholder\" [src]=\"selectedVM?.imgUrl\"\r\n alt=\"Vm Image\" />\r\n <ng-template #placeholder>\r\n <div class=\"vm-placeholder\">\r\n <h3>{{ selectedVM?.name }}</h3>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!----------------------------------[FIXTURE LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"fixture-level\" *ngIf=\"fixture?.productResolutionLevel === 'L1'\">\r\n <div id=\"brand-category\" class=\"brand-category\" *ngIf=\"fixture?.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\">\r\n <ng-container *ngFor=\"let b of fixture?.productBrandName; let last = last\">\r\n <span class=\"badge draft me-1\">\r\n {{ b }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n <span class=\"category\" *ngIf=\"fixture?.productCategory?.length\">\r\n <ng-container *ngFor=\"let c of fixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of fixture?.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"fixture?.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of fixture?.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <!-----------------------------------[SECTION LEVEL - BRAND CATEGORY]-------------------------------------->\r\n <div id=\"section-level\" *ngIf=\"fixture?.productResolutionLevel === 'L3'\">\r\n <!-- <div id=\"body-loader\">\r\n <div class=\"loader\"></div>\r\n </div> -->\r\n @for (item of sectionByZones; track $index) {\r\n <div [id]=\"'brand-category' + $index\" class=\"brand-category\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"badge draft me-1\">\r\n {{ item.zone }}\r\n </span>\r\n <div class=\"w-100 d-flex justify-content-center\">\r\n <span class=\"brand\" *ngIf=\"item?.section?.brands?.length\">\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n <span *ngIf=\"item?.section?.categories?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item?.section?.categories?.length\">\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n @for (b of item?.section?.brands;track $index; let last = $last) {\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n <p *ngIf=\"item?.section?.categories?.length\">\r\n <b>Categories: </b>\r\n @for (c of item?.section?.categories;track $index; let last = $last) {\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n }\r\n </p>\r\n </div>\r\n </ng-template>\r\n }\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n <div [id]=\"'sumShelfContainer' + i\" *ngFor=\"let item of fixture?.shelfConfig; let i = index\">\r\n <!--------------------------------[SHELF LEVEL - BRAND CATEGORY]---------------------------------------->\r\n <div id=\"shelf-level\" *ngIf=\"fixture?.productResolutionLevel === 'L2'\">\r\n <div [id]=\"'brand-category' + i\" class=\"brand-category\" *ngIf=\"item.productBrandName?.length\"\r\n [ngbTooltip]=\"brandCategoryTooltip\">\r\n <span class=\"brand\" *ngIf=\"item.productBrandName?.length\">\r\n <ng-container *ngFor=\"let b of item.productBrandName; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n <span *ngIf=\"item.productCategory?.length\" class=\"separator\"> - </span>\r\n <span class=\"category\" *ngIf=\"item.productCategory?.length\">\r\n <ng-container *ngFor=\"let b of item.productCategory; let last = last\">\r\n {{ b }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </span>\r\n </div>\r\n <ng-template #brandCategoryTooltip>\r\n <div>\r\n <p>\r\n <b>Brands: </b>\r\n <ng-container *ngFor=\"let c of item.productBrandName; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n <p *ngIf=\"item.productCategory?.length\">\r\n <b>Categories: </b>\r\n <ng-container *ngFor=\"let c of item.productCategory; let last = last\">\r\n {{ c }}\r\n <ng-container *ngIf=\"!last\">, </ng-container>\r\n </ng-container>\r\n </p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n <!------------------------------------------------------------------------->\r\n\r\n @if(item.shelfType ==='shelf'){\r\n <div [id]=\"item.shelfType + (i + 1)\" class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n }@else {\r\n <div [id]=\"item.shelfType! + (i + 1)\" class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.trayRows)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.productPerShelf)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\" *ngIf=\"fixture?.footer?.isEnabled && fixture?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixture?.footer?.label }}</p>\r\n </div>\r\n </div>\r\n </section>\r\n}", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox 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}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox 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}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}#fixture-view .wall-viewport{max-width:340px;width:unset}#fixture-view #vm-products-sum{margin:0 auto}#fixture-view #vm-products-sum .body-block{position:relative}#fixture-view #vm-products-sum .body-block .block{border:none}#fixture-view #vm-products-sum #fixture-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid var(--Primary-200, #99daff);background:var(--White, #fff);top:50%;left:50%;transform:translate(100%,-50%);transition:all .3s ease;cursor:pointer}#fixture-view #vm-products-sum #fixture-level .brand,#fixture-view #vm-products-sum #fixture-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis}#fixture-view #vm-products-sum #fixture-level .category{margin-top:12px}#fixture-view #vm-products-sum #section-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;flex-direction:column;justify-content:center;align-items:center;cursor:pointer}#fixture-view #vm-products-sum #section-level .brand,#fixture-view #vm-products-sum #section-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #section-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #section-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum #section-level #body-loader{height:100%;width:100%;position:absolute;display:flex;justify-content:center;align-items:center;z-index:1;background:#fff3;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(10px)}#fixture-view #vm-products-sum #section-level #body-loader .loader{width:30px;height:30px;border:4px solid #f3f3f3;border-top:4px solid #00a3ff;border-radius:50%;animation:spin 1s linear infinite;margin:auto}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#fixture-view #vm-products-sum #shelf-level .brand-category{position:absolute;width:200px;overflow:hidden;padding:8px 4px;border-radius:2px;border:1.12px solid;transition:all .3s ease;display:flex;justify-content:center;cursor:pointer}#fixture-view #vm-products-sum #shelf-level .brand,#fixture-view #vm-products-sum #shelf-level .category{white-space:nowrap;overflow:hidden;display:block;text-overflow:ellipsis;max-width:fit-content;width:100%}#fixture-view #vm-products-sum #shelf-level .brand{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:400;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .category{color:var(--Gray-800, #1d2939);font-size:12px;font-style:normal;font-weight:600;line-height:18px;margin:0}#fixture-view #vm-products-sum #shelf-level .separator{margin:0 4px;font-weight:600}#fixture-view #vm-products-sum .footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}#fixture-view #vm-products-sum .footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}#fixture-view #vm-products-sum .sub-footer{position:relative;width:48%}#fixture-view #vm-products-sum img{width:100%;height:100%;display:block}#fixture-view #vm-products-sum .vm-block{position:absolute;width:100px;height:100px;transition:all .3s ease}#fixture-view #vm-products-sum .vm-block h3{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;margin:0;width:100%;text-overflow:ellipsis;overflow:hidden}#fixture-view #vm-products-sum .vm-placeholder{border:4px solid var(--Black, #101828);background:#f9fafb;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:8px;white-space:nowrap;overflow:hidden}\n"] }]
|
|
372
|
-
}], ctorParameters: () => [{ type: i1.StoreBuilderService }, { type: i2.GlobalStateService }, { type: i0.ChangeDetectorRef }], propDecorators: { fixture: [{
|
|
373
|
-
type: Input
|
|
374
|
-
}] } });
|
|
375
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vdmVyaWZpY2F0aW9uLWZlZWRiYWNrL2ZpeHR1cmUvZml4dHVyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vdmVyaWZpY2F0aW9uLWZlZWRiYWNrL2ZpeHR1cmUvZml4dHVyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBR0wsU0FBUyxFQUNULEtBQUssR0FLTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTXpELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFTeEQsTUFBTSxPQUFPLGdCQUFnQjtJQTRCakI7SUFDQTtJQUNBO0lBM0JELE9BQU8sQ0FBTTtJQUV0QixRQUFRLENBQVM7SUFFakIsTUFBTSxDQUFTO0lBQ2YsV0FBVyxHQUFHLFlBQVksQ0FBQztJQUUzQixjQUFjLEdBUVIsRUFBRSxDQUFDO0lBRVQsTUFBTSxHQUFvQixFQUFFLENBQUM7SUFDN0IsYUFBYSxHQUFZLElBQUksQ0FBQztJQUV0QixlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDeEIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdkMsWUFDVSxVQUErQixFQUMvQixFQUFzQixFQUN0QixFQUFxQjtRQUZyQixlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtJQUM1QixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVzthQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWM7YUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUN4QixJQUFJLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQzthQUM5QjtpQkFBTTtnQkFDTCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN6QixZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFXLENBQ2pELENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEVBQUUsTUFBTSxDQUFDO2FBQ3BDO1lBRUQsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFlBQVksRUFBRTtZQUNwQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDVDtJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxJQUFJLE9BQU8sR0FBRztZQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxDQUFDO1lBQ1QsY0FBYyxFQUFFLEVBQUU7WUFDbEIsTUFBTSxFQUFFLENBQUM7WUFDVCxXQUFXLEVBQUUsRUFBRTtZQUNmLE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsRUFBRTtnQkFDUixNQUFNLEVBQUUsRUFBRTtnQkFDVixJQUFJLEVBQUUsRUFBRTthQUNUO1lBQ0QsTUFBTSxFQUFFLEtBQUs7WUFDYixhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDO1FBRUYsSUFBSTtZQUNGLE1BQU0sR0FBRyxHQUFRLE1BQU0sYUFBYSxDQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUMxQyxDQUFDO1lBQ0YsSUFBSSxHQUFHLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQkFDOUMsT0FBTzt3QkFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUc7d0JBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNqQixXQUFXLEVBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzVELEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTzt3QkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO3dCQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO3dCQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWE7d0JBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTt3QkFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVU7NEJBQ2pCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFOzRCQUNoRCxDQUFDLENBQUMsRUFBRSxDQUFDO3FCQUNSLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzlDO2dCQUFTO1lBQ1IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQU87UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixrQ0FBa0M7UUFFbEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBZ0IsQ0FBQztRQUMxRSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTVCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7UUFFdkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQVMsRUFBRSxFQUFFO1lBQ3BELElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxjQUFjLElBQUksQ0FBQyxDQUFDO1lBRXhDLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUV6RSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQWdCLENBQUM7WUFDNUQsSUFBSSxDQUFDLEVBQUU7Z0JBQUUsT0FBTztZQUVoQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFVixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxDQUFDO29CQUFFLE9BQU87Z0JBRWYsTUFBTSxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUM7YUFDMUI7WUFFRCxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDO1lBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLENBQUM7b0JBQUUsT0FBTztnQkFDZixlQUFlLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQzthQUNuQztZQUVELElBQUksUUFBUSxHQUFHLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxRQUFRLEdBQUcsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUVuQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUM7WUFDckIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDO1lBRXRCLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRTtnQkFDaEIsS0FBSyxNQUFNO29CQUNULENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ04sS0FBSyxHQUFHLFFBQVEsQ0FBQztvQkFDakIsTUFBTTtnQkFDUixLQUFLLE9BQU87b0JBQ1YsS0FBSyxHQUFHLFFBQVEsQ0FBQztvQkFDakIsQ0FBQyxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLEtBQUssR0FBRyxRQUFRLENBQUM7b0JBQ2pCLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLE1BQU07Z0JBQ1IsS0FBSyxTQUFTO29CQUNaLEtBQUssR0FBRyxTQUFTLENBQUM7b0JBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ04sTUFBTTthQUNUO1lBRUQsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFO2dCQUNoQixLQUFLLEtBQUs7b0JBQ1IsTUFBTSxHQUFHLGVBQWUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQkFDdEUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztvQkFDWCxNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxNQUFNLEdBQUcsZUFBZSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUN0RSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztvQkFDNUMsTUFBTTtnQkFDUixLQUFLLFFBQVE7b0JBQ1gsTUFBTSxHQUFHLGVBQWUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQkFDdEUsQ0FBQyxHQUFHLGVBQWUsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO29CQUN0QyxNQUFNO2dCQUNSLEtBQUssU0FBUztvQkFDWixNQUFNLEdBQUcsZUFBZSxDQUFDO29CQUN6QixDQUFDLEdBQUcsTUFBTSxDQUFDO29CQUNYLE1BQU07YUFDVDtZQUVELEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUM7WUFDOUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLElBQUksQ0FBQztZQUNqQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUVqRCxTQUFTLFdBQVcsQ0FBQyxDQUFTO2dCQUM1QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQWdCLENBQUM7Z0JBQzlELElBQUksQ0FBQyxHQUFHO29CQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQWdCLENBQUM7Z0JBQ25FLE9BQU8sR0FBa0IsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFnQixDQUFDO1FBQ3hFLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFMUIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBa0IsQ0FBQztRQUV6RSxNQUFNLFNBQVMsR0FBRyxZQUFZO2FBRTNCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBa0IsQ0FBQzthQUNoQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTdCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUU7WUFDNUMsS0FBSyxJQUFJLEVBQUUsU0FBUztnQkFDbEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUN0QixJQUFJLENBQUM7d0JBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFFUixLQUFLLElBQUksRUFBRSxTQUFTO2dCQUNsQjtvQkFDRSxNQUFNLE9BQU8sR0FBRyxTQUFTO3lCQUN0QixHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSzt3QkFDbkQsQ0FBQyxDQUFFLEdBQUcsQ0FBQyxnQkFBZ0M7d0JBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQ1Q7eUJBQ0EsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUVuQixJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FDMUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLElBQUksRUFBRSxDQUNoQyxDQUFDO29CQUNGLE1BQU0saUJBQWlCLEdBQWEsRUFBRSxDQUFDO29CQUV2QyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUM3QixNQUFNLFFBQVEsR0FDWixFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7NEJBQzVELEVBQUUsQ0FBQzt3QkFDTCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQzt3QkFDcEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3RDLFFBQVEsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDbkMsQ0FBQzt3QkFFRixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7NEJBQ3BCLElBQUksQ0FBQztnQ0FBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUQsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBRUgsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUN4QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO29CQUNGLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUV0RSxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztvQkFDM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDcEMsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQ3RELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFlBQVksSUFBSSxDQUFDLENBQUMsRUFDcEMsQ0FBQyxDQUNGLENBQUM7NEJBQ0YsTUFBTSxtQkFBbUIsR0FDdkIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxJQUFJLEdBQUcsQ0FBQzs0QkFFOUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FDN0Isa0JBQWtCLENBQUMsRUFBRSxDQUN0QixDQUFDOzRCQUVGLElBQUksRUFBRSxFQUFFO2dDQUNOLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FDcEIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FDL0MsQ0FBQztnQ0FDRixNQUFNLEtBQUssR0FDVCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUM7b0NBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBRXRCLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0NBQ3BDLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztnQ0FFbEMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUN2RCxNQUFNLEdBQUcsR0FDUCxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO29DQUM1QyxrQkFBa0IsQ0FBQztnQ0FDckIsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsYUFBYSxHQUFHLEdBQUcsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDO2dDQUU5RCxrQkFBa0IsSUFBSSxvQkFBb0IsQ0FBQzs2QkFDNUM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNQO2dCQUVELE1BQU07WUFFUixLQUFLLElBQUksRUFBRSxPQUFPO2dCQUNoQjtvQkFDRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUMzQixHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDbkQsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsZUFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUMvRCxrQ0FBa0M7d0JBQ2xDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQWMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ2pFLElBQUksQ0FBQyxFQUFFOzRCQUFFLE9BQU87d0JBRWhCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNuRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFFckQsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7d0JBQ2xELEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO3dCQUN0RCxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsR0FBRyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ2hFLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELE1BQU07WUFDUixLQUFLLElBQUksRUFBRSxNQUFNO2dCQUNmO29CQUNFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDdEIsSUFBSSxDQUFDOzRCQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMxRCxDQUFDLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxNQUFNO1lBQ1I7Z0JBQ0UsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUN0QixJQUFJLENBQUM7d0JBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07U0FDVDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDBCQUEwQixDQUFDLFNBQWlDO1FBQzFELE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBRTdCLElBQUksS0FBSyxHQUFrQixJQUFJLENBQUM7UUFDaEMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsSUFBSSxFQUFFLEVBQUU7WUFDL0MsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBRTFELElBQUksSUFBSSxLQUFLLEVBQUU7Z0JBQUUsU0FBUztZQUMxQixJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7Z0JBQ2xCLGlCQUFpQixDQUFDLElBQUksQ0FBQztvQkFDckIsSUFBSTtvQkFDSixPQUFPLEVBQUU7d0JBQ1AsTUFBTSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFO3dCQUNoQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxFQUFFO3dCQUNuQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7d0JBQ2xCLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztxQkFDdEI7aUJBQ0YsQ0FBQyxDQUFDO2dCQUNILEtBQUssR0FBRyxJQUFJLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2xFLE9BQU8sQ0FDUixDQUFDO2dCQUNGLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDcEUsUUFBUSxDQUNULENBQUM7YUFDSDtTQUNGO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFvQjtRQUNyQyxNQUFNLE9BQU8sR0FBc0MsRUFBRSxDQUFDO1FBRXRELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHO29CQUNkLE9BQU8sRUFBRSxFQUFFO29CQUNYLGdCQUFnQixFQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLEtBQUssSUFBSTt3QkFDM0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7d0JBQ3ZCLENBQUMsQ0FBQyxFQUFFO29CQUNSLGVBQWUsRUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLHNCQUFzQixLQUFLLElBQUk7d0JBQzNDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZTt3QkFDdEIsQ0FBQyxDQUFDLEVBQUU7b0JBQ1IsSUFBSSxFQUFFLElBQUk7aUJBQ1gsQ0FBQzthQUNIO1lBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDMUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELDJCQUEyQixDQUFDLFFBQXlCO1FBQ25ELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUd2QixDQUFDO1FBRUosS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7WUFDOUIsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsT0FBUSxFQUFFO2dCQUN6QyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtvQkFDekIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNsQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO29CQUMxQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7aUJBQ3pDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxzQ0FBc0M7UUFDdEMsT0FBTyxDQUNMLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ3hDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUU1QyxPQUFPO2dCQUNMLEdBQUcsQ0FBQztnQkFDSixJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUMxQixnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLElBQUksRUFBRTtnQkFDbEQsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLElBQUksRUFBRTthQUNqRCxDQUFDO1FBQ0osQ0FBQyxDQUFDLElBQUksRUFBRSxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQWhjVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQiw0SEM5QjdCLGd5WEE0TUMsMDFlRGxMVyxJQUFJLDZGQUFFLEtBQUssbUhBQUUsVUFBVTs7NEZBSXRCLGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDO3lKQU9sQyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiwgTmdTdHlsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNIRUxGX0NPTE9SUyB9IGZyb20gXCIuLi8uLi8uLi8uLi9kYXRhL2ZpeHR1cmUtdGVtcGxhdGUuZGF0YVwiO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQge1xyXG4gIFNlY3Rpb25Db25maWcsXHJcbiAgU2hlbGZDb25maWcsXHJcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2ludGVyZmFjZXMvZml4dHVyZS10ZW1wbGF0ZS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgcmdiVG9IZXggfSBmcm9tIFwiLi4vLi4vLi4vLi4vZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IFZtTGlicmFyeUxpc3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy92bS1saWJyYXJ5LmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBOZ2JUb29sdGlwIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItZml4dHVyZVwiLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW05nSWYsIE5nRm9yLCBOZ2JUb29sdGlwLCBOZ1N0eWxlXSxcclxuICB0ZW1wbGF0ZVVybDogXCIuL2ZpeHR1cmUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL2ZpeHR1cmUuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpeHR1cmVDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3lcclxue1xyXG4gIEBJbnB1dCgpIGZpeHR1cmU6IGFueTtcclxuXHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuXHJcbiAgaW1nQ0ROOiBzdHJpbmc7XHJcbiAgc2hlbGZDb2xvcnMgPSBTSEVMRl9DT0xPUlM7XHJcblxyXG4gIHNlY3Rpb25CeVpvbmVzOiB7XHJcbiAgICB6b25lOiBzdHJpbmc7XHJcbiAgICBzZWN0aW9uOiB7XHJcbiAgICAgIGJyYW5kczogc3RyaW5nW107XHJcbiAgICAgIGNhdGVnb3JpZXM6IHN0cmluZ1tdO1xyXG4gICAgICBzaGVsdmVzOiBzdHJpbmdbXTtcclxuICAgICAgc2hlbGZEaXZzOiAoSFRNTEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkKVtdO1xyXG4gICAgfTtcclxuICB9W10gPSBbXTtcclxuXHJcbiAgdm1MaXN0OiBWbUxpYnJhcnlMaXN0W10gPSBbXTtcclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBpc1ZNSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGlzQkNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlbnYpID0+ICh0aGlzLmltZ0NETiA9IGVudi5wbGFub2dyYW1DRE4pKTtcclxuICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzW1wiZml4dHVyZVwiXT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlTaGVsZkNvbG9ycygpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlVm1Qb3NpdGlvbkFuZFNpemUoKTtcclxuICAgICAgfSwgMzAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc0JDSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5pc0JDSW5pdGlhbGl6ZWQgPSB0aGlzLmFwcGx5U2hlbGZDb2xvcnMoKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5pc1ZNSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5pc1ZNSW5pdGlhbGl6ZWQgPSB0aGlzLmhhbmRsZVZtUG9zaXRpb25BbmRTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRWbXNMaXN0KCkge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBsaW1pdDogMTAwMDAsXHJcbiAgICAgIG9mZnNldDogMCxcclxuICAgICAgc29ydENvbHVtbk5hbWU6IFwiXCIsXHJcbiAgICAgIHNvcnRCeTogMSxcclxuICAgICAgc2VhcmNoVmFsdWU6IFwiXCIsXHJcbiAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgIHR5cGU6IFtdLFxyXG4gICAgICAgIHN0YXR1czogW10sXHJcbiAgICAgICAgc2l6ZTogW10sXHJcbiAgICAgIH0sXHJcbiAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgIGVtcHR5RG93bmxvYWQ6IGZhbHNlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGxhc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFZtTGlicmFyeUxpc3QocGF5bG9hZClcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgIHRoaXMudm1MaXN0ID0gcmVzPy5kYXRhPy5kYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogaXRlbS5faWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udm1OYW1lLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTpcclxuICAgICAgICAgICAgICBpdGVtLnZtTmFtZSArIChpdGVtPy52bVR5cGUgPyBgICggJHtpdGVtLnZtVHlwZX0gKSBgIDogXCJcIiksXHJcbiAgICAgICAgICAgIGJyYW5kOiBpdGVtLnZtQnJhbmQsXHJcbiAgICAgICAgICAgIHR5cGU6IGl0ZW0udm1UeXBlLFxyXG4gICAgICAgICAgICB3aWR0aDogaXRlbS52bVdpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGl0ZW0udm1IZWlnaHQudmFsdWUsXHJcbiAgICAgICAgICAgIHBsYWNlbWVudDogaXRlbS5pc0RvdWJsZVNpZGVkLFxyXG4gICAgICAgICAgICBub09mQXNzaWduZWQ6IGl0ZW0udGVtcGxhdGVDb3VudCxcclxuICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcclxuICAgICAgICAgICAgLi4uKGl0ZW0udm1JbWFnZVVybFxyXG4gICAgICAgICAgICAgID8geyBpbWdVcmw6IGAke3RoaXMuaW1nQ0ROfSR7aXRlbS52bUltYWdlVXJsfWAgfVxyXG4gICAgICAgICAgICAgIDoge30pLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGdldFZtc0xpc3QgW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRWTSh2bTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy52bUxpc3QuZmluZCgodikgPT4gdi5pZCA9PT0gdm0/LnZtSWQpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlVm1Qb3NpdGlvbkFuZFNpemUoKSB7XHJcbiAgICAvLyBpZiAoIXRoaXMuc2hvd1ZNcykgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgY29uc3Qgdmlld1BvcnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJvZHktYmxvY2stc3VtXCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCF2aWV3UG9ydCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGJvZHlXaWR0aCA9IHZpZXdQb3J0Lm9mZnNldFdpZHRoO1xyXG5cclxuICAgIHRoaXMuZml4dHVyZT8udm1Db25maWc/LmZvckVhY2goKGU6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGxldCBzdGFydFNoZWxmID0gZT8uc3RhcnRZUG9zaXRpb24gPz8gMTtcclxuXHJcbiAgICAgIGxldCBlbmRTaGVsZiA9IGU/LmVuZFlQb3NpdGlvbiA/PyB0aGlzLmZpeHR1cmU/LnNoZWxmQ29uZmlnPy5sZW5ndGggPz8gMTtcclxuXHJcbiAgICAgIGNvbnN0IHZtID0gdmlld1BvcnQucXVlcnlTZWxlY3RvcihgI3ZtJHtpfWApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoIXZtKSByZXR1cm47XHJcblxyXG4gICAgICBsZXQgeCA9IDA7XHJcbiAgICAgIGxldCB5ID0gMDtcclxuXHJcbiAgICAgIGxldCB5U3RhcnQgPSAwO1xyXG4gICAgICBmb3IgKGxldCBrID0gMTsgayA8IHN0YXJ0U2hlbGY7IGsrKykge1xyXG4gICAgICAgIGNvbnN0IHMgPSBnZXRTaGVsZkRpdihrKTtcclxuICAgICAgICBpZiAoIXMpIHJldHVybjtcclxuXHJcbiAgICAgICAgeVN0YXJ0ICs9IHMub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgcGxhY2VtZW50SGVpZ2h0ID0gMDtcclxuICAgICAgbGV0IHBsYWNlbWVudFdpZHRoID0gYm9keVdpZHRoO1xyXG5cclxuICAgICAgZm9yIChsZXQgayA9IHN0YXJ0U2hlbGY7IGsgPD0gZW5kU2hlbGY7IGsrKykge1xyXG4gICAgICAgIGNvbnN0IHMgPSBnZXRTaGVsZkRpdihrKTtcclxuICAgICAgICBpZiAoIXMpIHJldHVybjtcclxuICAgICAgICBwbGFjZW1lbnRIZWlnaHQgKz0gcy5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkZWZhdWx0VyA9IHBsYWNlbWVudFdpZHRoIC8gMztcclxuICAgICAgbGV0IGRlZmF1bHRIID0gcGxhY2VtZW50SGVpZ2h0IC8gMztcclxuXHJcbiAgICAgIGxldCB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICBsZXQgaGVpZ2h0ID0gZGVmYXVsdEg7XHJcblxyXG4gICAgICBzd2l0Y2ggKGU/Lnhab25lKSB7XHJcbiAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgIHggPSAwO1xyXG4gICAgICAgICAgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgICAgIHggPSBib2R5V2lkdGggLSB3aWR0aDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgIHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgICAgICB4ID0gKGJvZHlXaWR0aCAtIHdpZHRoKSAvIDI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic3RyZXRjaFwiOlxyXG4gICAgICAgICAgd2lkdGggPSBib2R5V2lkdGg7XHJcbiAgICAgICAgICB4ID0gMDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKGU/Lnlab25lKSB7XHJcbiAgICAgICAgY2FzZSBcInRvcFwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0IDwgZGVmYXVsdEggPyBwbGFjZW1lbnRIZWlnaHQgLSAyMCA6IGRlZmF1bHRIO1xyXG4gICAgICAgICAgeSA9IHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodCA8IGRlZmF1bHRIID8gcGxhY2VtZW50SGVpZ2h0IC0gMjAgOiBkZWZhdWx0SDtcclxuICAgICAgICAgIHkgPSAocGxhY2VtZW50SGVpZ2h0IC0gaGVpZ2h0KSAvIDIgKyB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQgPCBkZWZhdWx0SCA/IHBsYWNlbWVudEhlaWdodCAtIDIwIDogZGVmYXVsdEg7XHJcbiAgICAgICAgICB5ID0gcGxhY2VtZW50SGVpZ2h0IC0gaGVpZ2h0ICsgeVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInN0cmV0Y2hcIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodDtcclxuICAgICAgICAgIHkgPSB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgdm0uc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XHJcbiAgICAgIHZtLnN0eWxlLmhlaWdodCA9IGAgJHtoZWlnaHR9cHhgO1xyXG4gICAgICB2bS5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7eH1weCwgJHt5fXB4KWA7XHJcblxyXG4gICAgICBmdW5jdGlvbiBnZXRTaGVsZkRpdihrOiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgZGl2ID0gdmlld1BvcnQucXVlcnlTZWxlY3RvcihgI3NoZWxmJHtrfWApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmICghZGl2KSBkaXYgPSB2aWV3UG9ydC5xdWVyeVNlbGVjdG9yKGAjdHJheSR7a31gKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICByZXR1cm4gZGl2IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlTaGVsZkNvbG9ycygpIHtcclxuICAgIGNvbnN0IGJvZGllcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYm9keS1ibG9jay1zdW1cIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoIWJvZGllcykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGJvZHlDaGlsZHJlbiA9IEFycmF5LmZyb20oYm9kaWVzPy5jaGlsZHJlbiA/PyBbXSkgYXMgSFRNTEVsZW1lbnRbXTtcclxuXHJcbiAgICBjb25zdCBzaGVsZkRpdnMgPSBib2R5Q2hpbGRyZW5cclxuXHJcbiAgICAgIC5tYXAoKGRpdikgPT4gZGl2IGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAuZmlsdGVyKChkKSA9PiBkPy5pZC5pbmNsdWRlcyhcInN1bVNoZWxmQ29udGFpbmVyXCIpKTtcclxuXHJcbiAgICBpZiAoIXNoZWxmRGl2cykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGFkanVzdCA9IDA7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCkge1xyXG4gICAgICBjYXNlIFwiTDFcIjogLy9maXh0dXJlXHJcbiAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgIGlmIChkKSBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbMF0uYmc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiTDNcIjogLy9zZWN0aW9uXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbHZlcyA9IHNoZWxmRGl2c1xyXG4gICAgICAgICAgICAubWFwKChkaXYpID0+XHJcbiAgICAgICAgICAgICAgZGl2Lmxhc3RFbGVtZW50Q2hpbGQ/LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJkaXZcIlxyXG4gICAgICAgICAgICAgICAgPyAoZGl2Lmxhc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgICAgICAgIHRoaXMuY29uc3RydWN0U2VxdWVudGlhbFNlY3Rpb24oc2hlbHZlcyk7XHJcbiAgICAgICAgICBjb25zdCBzZWN0aW9uQXJyYXkgPSB0aGlzLmdyb3VwU2hlbHZlc0J5Wm9uZShcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlPy5zaGVsZkNvbmZpZyA/PyBbXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGFsbFNlY3Rpb25TaGVsdmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICAgIHNlY3Rpb25BcnJheS5mb3JFYWNoKChzZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzaGVsZklkcyA9XHJcbiAgICAgICAgICAgICAgc2Uuc2hlbHZlcz8ubWFwKChzaCkgPT4gc2gucmVwbGFjZSgvXFxzL2csIFwiXCIpLnRvTG93ZXJDYXNlKCkpID8/XHJcbiAgICAgICAgICAgICAgW107XHJcbiAgICAgICAgICAgIGFsbFNlY3Rpb25TaGVsdmVzLnB1c2goLi4uc2hlbGZJZHMpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNEaXZzID0gc2hlbHZlcy5maWx0ZXIoKGl0ZW0pID0+XHJcbiAgICAgICAgICAgICAgc2hlbGZJZHM/LmluY2x1ZGVzKGl0ZW0/LmlkID8/IFwiXCIpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzZWNEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZCkgZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzW2ldLmJnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHVuYXNzaWduZWRTaGVsdmVzID0gc2hlbGZEaXZzLmZpbHRlcihcclxuICAgICAgICAgICAgKGl0ZW0pID0+ICFhbGxTZWN0aW9uU2hlbHZlcy5pbmNsdWRlcyhpdGVtLmlkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHVuYXNzaWduZWRTaGVsdmVzLmZvckVhY2goKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwid2hpdGVcIikpO1xyXG5cclxuICAgICAgICAgIGxldCBzZWN0aW9uR3JvdXBIZWlnaHQgPSAwO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZm9yRWFjaCgoc3osIGkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbkhlaWdodCA9IHN6LnNlY3Rpb24uc2hlbGZEaXZzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChoLCBkKSA9PiBoICsgKGQ/Lm9mZnNldEhlaWdodCA/PyAwKSxcclxuICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uV2lkdGggPVxyXG4gICAgICAgICAgICAgICAgc3ouc2VjdGlvbi5zaGVsZkRpdnNbMF0/Lm9mZnNldFdpZHRoID8/IDM0NTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgYmMgPSBib2RpZXMucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXHJcbiAgICAgICAgICAgICAgICBgI2JyYW5kLWNhdGVnb3J5JHtpfWBcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoYmMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY0JnID0gcmdiVG9IZXgoXHJcbiAgICAgICAgICAgICAgICAgIHN6LnNlY3Rpb24uc2hlbGZEaXZzWzBdPy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvciA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZDb2xvcnMuZmluZCgoYykgPT4gYy5iZyA9PT0gc2VjQmcpID8/XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZDb2xvcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgYmMuc3R5bGUuYm9yZGVyQ29sb3IgPSBjb2xvci5ib3JkZXI7XHJcbiAgICAgICAgICAgICAgICBiYy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIiNmZmZcIjtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBiY1ggPSAoY3VycmVudFNlY3Rpb25XaWR0aCAtIGJjLm9mZnNldFdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBiY1kgPVxyXG4gICAgICAgICAgICAgICAgICAoY3VycmVudFNlY3Rpb25IZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMiArXHJcbiAgICAgICAgICAgICAgICAgIHNlY3Rpb25Hcm91cEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGJjLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtiY1ggKyBhZGp1c3R9cHgsICR7YmNZfXB4KWA7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VjdGlvbkdyb3VwSGVpZ2h0ICs9IGN1cnJlbnRTZWN0aW9uSGVpZ2h0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBcIkwyXCI6IC8vc2hlbGZcclxuICAgICAgICB7XHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZGl2LCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnNoZWxmQ29sb3JzW2ldLmJnO1xyXG4gICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyID0gYDEuNHB4IHNvbGlkICR7dGhpcy5zaGVsZkNvbG9yc1tpXS5ib3JkZXJ9YDtcclxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hvd1ZNcykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBiYyA9IGRpdi5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgI2JyYW5kLWNhdGVnb3J5JHtpfWApO1xyXG4gICAgICAgICAgICBpZiAoIWJjKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiY1ggPSAoZGl2Lm9mZnNldFdpZHRoIC0gYmMub2Zmc2V0V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgYmNZID0gKGRpdi5vZmZzZXRIZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIGJjLnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1tpXS5ib3JkZXI7XHJcbiAgICAgICAgICAgIGJjLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0udGV4dEJnO1xyXG4gICAgICAgICAgICBiYy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7YmNYICsgYWRqdXN0fXB4LCAke2JjWX1weClgO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiTDRcIjogLy9zcG90XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGQpIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGQpIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFNlcXVlbnRpYWxTZWN0aW9uKHNoZWxmRGl2czogKEhUTUxFbGVtZW50IHwgbnVsbClbXSkge1xyXG4gICAgY29uc3QgbmV3U2VjdGlvbkJ5Wm9uZXMgPSBbXTtcclxuXHJcbiAgICBsZXQgcFpvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgZm9yIChjb25zdCBzIG9mIHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWcgPz8gW10pIHtcclxuICAgICAgY29uc3Qgem9uZSA9IHMuem9uZSB8fCBcIlwiO1xyXG4gICAgICBjb25zdCBzaGVsZklkID0gYCR7cy5zaGVsZlR5cGV9JHtzLnNoZWxmTnVtYmVyfWA7XHJcbiAgICAgIGNvbnN0IHNoZWxmRGl2ID0gc2hlbGZEaXZzLmZpbmQoKGQpID0+IGQ/LmlkID09PSBzaGVsZklkKTtcclxuXHJcbiAgICAgIGlmICh6b25lID09PSBcIlwiKSBjb250aW51ZTtcclxuICAgICAgaWYgKHpvbmUgIT09IHBab25lKSB7XHJcbiAgICAgICAgbmV3U2VjdGlvbkJ5Wm9uZXMucHVzaCh7XHJcbiAgICAgICAgICB6b25lLFxyXG4gICAgICAgICAgc2VjdGlvbjoge1xyXG4gICAgICAgICAgICBicmFuZHM6IHMucHJvZHVjdEJyYW5kTmFtZSA/PyBbXSxcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogcy5wcm9kdWN0Q2F0ZWdvcnkgPz8gW10sXHJcbiAgICAgICAgICAgIHNoZWx2ZXM6IFtzaGVsZklkXSxcclxuICAgICAgICAgICAgc2hlbGZEaXZzOiBbc2hlbGZEaXZdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwWm9uZSA9IHpvbmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3U2VjdGlvbkJ5Wm9uZXNbbmV3U2VjdGlvbkJ5Wm9uZXMubGVuZ3RoIC0gMV0uc2VjdGlvbi5zaGVsdmVzLnB1c2goXHJcbiAgICAgICAgICBzaGVsZklkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBuZXdTZWN0aW9uQnlab25lc1tuZXdTZWN0aW9uQnlab25lcy5sZW5ndGggLSAxXS5zZWN0aW9uLnNoZWxmRGl2cy5wdXNoKFxyXG4gICAgICAgICAgc2hlbGZEaXZcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uQnlab25lcyA9IFsuLi5uZXdTZWN0aW9uQnlab25lc107XHJcblxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBncm91cFNoZWx2ZXNCeVpvbmUoaW5wdXQ6IFNoZWxmQ29uZmlnW10pOiBTZWN0aW9uQ29uZmlnW10ge1xyXG4gICAgY29uc3Qgem9uZU1hcDogeyBbem9uZTogc3RyaW5nXTogU2VjdGlvbkNvbmZpZyB9ID0ge307XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0KSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSBpdGVtPy56b25lID8/IFwiXCI7XHJcbiAgICAgIGNvbnN0IHNoZWxmTGFiZWwgPSBgJHtpdGVtLnNoZWxmVHlwZX0gJHtpdGVtLnNoZWxmTnVtYmVyfWA7XHJcblxyXG4gICAgICBpZiAoIXpvbmVNYXBbem9uZV0pIHtcclxuICAgICAgICB6b25lTWFwW3pvbmVdID0ge1xyXG4gICAgICAgICAgc2hlbHZlczogW10sXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOlxyXG4gICAgICAgICAgICB0aGlzLmZpeHR1cmU/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIlxyXG4gICAgICAgICAgICAgID8gaXRlbS5wcm9kdWN0QnJhbmROYW1lXHJcbiAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTpcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwyXCJcclxuICAgICAgICAgICAgICA/IGl0ZW0ucHJvZHVjdENhdGVnb3J5XHJcbiAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgIHpvbmU6IHpvbmUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgem9uZU1hcFt6b25lXT8uc2hlbHZlcz8ucHVzaChzaGVsZkxhYmVsKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh6b25lTWFwKTtcclxuICB9XHJcblxyXG4gIGFwcGx5U2VjdGlvbkNvbmZpZ1RvU2hlbHZlcyhzZWN0aW9uczogU2VjdGlvbkNvbmZpZ1tdKTogU2hlbGZDb25maWdbXSB7XHJcbiAgICBjb25zdCBzZWN0aW9uTWFwID0gbmV3IE1hcDxcclxuICAgICAgc3RyaW5nLFxyXG4gICAgICBQaWNrPFNlY3Rpb25Db25maWcsIFwiem9uZVwiIHwgXCJwcm9kdWN0QnJhbmROYW1lXCIgfCBcInByb2R1Y3RDYXRlZ29yeVwiPlxyXG4gICAgPigpO1xyXG5cclxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xyXG4gICAgICBmb3IgKGNvbnN0IHNoZWxmTGFiZWwgb2Ygc2VjdGlvbi5zaGVsdmVzISkge1xyXG4gICAgICAgIHNlY3Rpb25NYXAuc2V0KHNoZWxmTGFiZWwsIHtcclxuICAgICAgICAgIHpvbmU6IHNlY3Rpb24uem9uZSxcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IHNlY3Rpb24ucHJvZHVjdEJyYW5kTmFtZSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogc2VjdGlvbi5wcm9kdWN0Q2F0ZWdvcnksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBBcHBseSBvdmVycmlkZXMgdG8gbWF0Y2hpbmcgc2hlbHZlc1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5maXh0dXJlPy5zaGVsZkNvbmZpZz8ubWFwKChzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBzaGVsZkxhYmVsID0gYCR7cy5zaGVsZlR5cGV9ICR7cy5zaGVsZk51bWJlcn1gO1xyXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlID0gc2VjdGlvbk1hcC5nZXQoc2hlbGZMYWJlbCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5zLFxyXG4gICAgICAgICAgem9uZTogb3ZlcnJpZGU/LnpvbmUgfHwgXCJcIixcclxuICAgICAgICAgIHByb2R1Y3RCcmFuZE5hbWU6IG92ZXJyaWRlPy5wcm9kdWN0QnJhbmROYW1lID8/IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdENhdGVnb3J5OiBvdmVycmlkZT8ucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pID8/IFtdXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiQGlmKGlzUGFnZUxvYWRpbmcpe1xyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbn1AZWxzZSB7XHJcblxyXG4gICAgPHNlY3Rpb24gaWQ9XCJmaXh0dXJlLXZpZXdcIj5cclxuICAgICAgICA8ZGl2IGlkPVwidm0tcHJvZHVjdHMtc3VtXCIgY2xhc3M9XCJ3YWxsLXZpZXdwb3J0XCI+XHJcbiAgICAgICAgICAgIDwhLS0gSGVhZGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJsb2NrXCIgKm5nSWY9XCJmaXh0dXJlPy5oZWFkZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgICA8cD57eyBmaXh0dXJlPy5oZWFkZXI/LmxhYmVsIH19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQm9keSBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdiBpZD1cImJvZHktYmxvY2stc3VtXCIgY2xhc3M9XCJib2R5LWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bVk0gQkxPQ0tdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpeHR1cmU/LnZtQ29uZmlnPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2bSBvZiBmaXh0dXJlPy52bUNvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCIndm0nICsgaVwiIGNsYXNzPVwidm0tYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRTZWxlY3RlZFZNKHZtKSBhcyBzZWxlY3RlZFZNXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInNlbGVjdGVkVk0/LmltZ1VybDsgZWxzZSBwbGFjZWhvbGRlclwiIFtzcmNdPVwic2VsZWN0ZWRWTT8uaW1nVXJsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiVm0gSW1hZ2VcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2bS1wbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPnt7IHNlbGVjdGVkVk0/Lm5hbWUgfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW0ZJWFRVUkUgTEVWRUwgLSBCUkFORCBDQVRFR09SWV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJmaXh0dXJlLWxldmVsXCIgKm5nSWY9XCJmaXh0dXJlPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSAnTDEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJyYW5kLWNhdGVnb3J5XCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiICpuZ0lmPVwiZml4dHVyZT8ucHJvZHVjdEJyYW5kTmFtZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmFuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYiBvZiBmaXh0dXJlPy5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGRyYWZ0IG1lLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cImZpeHR1cmU/LnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpeHR1cmU/LnByb2R1Y3RDYXRlZ29yeTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRDYXRlZ29yeVRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5CcmFuZHM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpeHR1cmU/LnByb2R1Y3RCcmFuZE5hbWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImZpeHR1cmU/LnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZml4dHVyZT8ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtTRUNUSU9OIExFVkVMIC0gQlJBTkQgQ0FURUdPUlldLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdGlvbi1sZXZlbFwiICpuZ0lmPVwiZml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gJ0wzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBpZD1cImJvZHktbG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc2VjdGlvbkJ5Wm9uZXM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCInYnJhbmQtY2F0ZWdvcnknICsgJGluZGV4XCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBkcmFmdCBtZS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS56b25lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyYW5kXCIgKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5icmFuZHM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChiIG9mIGl0ZW0/LnNlY3Rpb24/LmJyYW5kczt0cmFjayAkaW5kZXg7IGxldCBsYXN0ID0gJGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzPy5sZW5ndGhcIiBjbGFzcz1cInNlcGFyYXRvclwiPiAtIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5XCIgKm5nSWY9XCJpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRDYXRlZ29yeVRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5CcmFuZHM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYiBvZiBpdGVtPy5zZWN0aW9uPy5icmFuZHM7dHJhY2sgJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaXRlbT8uc2VjdGlvbj8uY2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBpdGVtPy5zZWN0aW9uPy5jYXRlZ29yaWVzO3RyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidzdW1TaGVsZkNvbnRhaW5lcicgKyBpXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZml4dHVyZT8uc2hlbGZDb25maWc7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW1NIRUxGIExFVkVMIC0gQlJBTkQgQ0FURUdPUlldLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2hlbGYtbGV2ZWxcIiAqbmdJZj1cImZpeHR1cmU/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09ICdMMidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ2JyYW5kLWNhdGVnb3J5JyArIGlcIiBjbGFzcz1cImJyYW5kLWNhdGVnb3J5XCIgKm5nSWY9XCJpdGVtLnByb2R1Y3RCcmFuZE5hbWU/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJicmFuZENhdGVnb3J5VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmFuZFwiICpuZ0lmPVwiaXRlbS5wcm9kdWN0QnJhbmROYW1lPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiIG9mIGl0ZW0ucHJvZHVjdEJyYW5kTmFtZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsYXN0XCI+LCA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiIGNsYXNzPVwic2VwYXJhdG9yXCI+IC0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeVwiICpuZ0lmPVwiaXRlbS5wcm9kdWN0Q2F0ZWdvcnk/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGIgb2YgaXRlbS5wcm9kdWN0Q2F0ZWdvcnk7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kQ2F0ZWdvcnlUb29sdGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QnJhbmRzOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgaXRlbS5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cIml0ZW0ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGl0ZW0ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgQGlmKGl0ZW0uc2hlbGZUeXBlID09PSdzaGVsZicpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrIHNoZWxmXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0ucHJvZHVjdFBlclNoZWxmKVwiIGNsYXNzPVwicHJvZHVjdFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSEgKyAoaSArIDEpXCIgY2xhc3M9XCJibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnRyYXlSb3dzKVwiIGNsYXNzPVwidHJheSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEZvb3RlciBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1ibG9ja1wiICpuZ0lmPVwiZml4dHVyZT8uZm9vdGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZT8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgbGVmdC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIHJpZ2h0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHA+e3sgZml4dHVyZT8uZm9vdGVyPy5sYWJlbCB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbn0iXX0=
|