@elxjs/ui 0.0.201 → 0.0.203
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/button/button.component.mjs +3 -3
- package/esm2022/lib/components/card-article/card-article.component.mjs +3 -3
- package/esm2022/lib/components/card-benefit/card-benefit.component.mjs +60 -0
- package/esm2022/lib/components/carousel/carousel.component.mjs +30 -54
- package/esm2022/lib/components/carousel-bleed/carousel-bleed.component.mjs +536 -0
- package/esm2022/lib/components/carousel-fixed-deprecated/carousel-fixed.component.mjs +472 -0
- package/esm2022/lib/components/index.mjs +4 -2
- package/fesm2022/elxjs-ui.mjs +649 -91
- package/fesm2022/elxjs-ui.mjs.map +1 -1
- package/lib/components/card-benefit/card-benefit.component.d.ts +21 -0
- package/lib/components/carousel/carousel.component.d.ts +4 -7
- package/lib/components/carousel-bleed/carousel-bleed.component.d.ts +80 -0
- package/lib/components/index.d.ts +3 -1
- package/package.json +1 -1
- package/esm2022/lib/components/carousel-fixed/carousel-fixed.component.mjs +0 -472
- /package/lib/components/{carousel-fixed → carousel-fixed-deprecated}/carousel-fixed.component.d.ts +0 -0
|
@@ -1,472 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, ContentChildren, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
-
import { EluxIcon } from '../icon';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
export class EluxCarouselFixedComponent {
|
|
7
|
-
constructor(renderer) {
|
|
8
|
-
this.renderer = renderer;
|
|
9
|
-
this.itemWidth = 200;
|
|
10
|
-
this.gap = 16;
|
|
11
|
-
this.showArrows = true;
|
|
12
|
-
this.showDots = true;
|
|
13
|
-
this.previousClickEventEmitter = new EventEmitter();
|
|
14
|
-
this.nextClickEventEmitter = new EventEmitter();
|
|
15
|
-
this.dotClickEventEmitter = new EventEmitter();
|
|
16
|
-
this.currentIndex = 0;
|
|
17
|
-
this.translateX = 0;
|
|
18
|
-
this.isDragging = false;
|
|
19
|
-
this.isMouseDown = false;
|
|
20
|
-
this.startX = 0;
|
|
21
|
-
this.currentX = 0;
|
|
22
|
-
this.initialTranslateX = 0;
|
|
23
|
-
this.dragOffset = 0;
|
|
24
|
-
this.containerWidth = 0;
|
|
25
|
-
this.maxTranslateX = 0;
|
|
26
|
-
this.minTranslateX = 0;
|
|
27
|
-
this.velocity = 0;
|
|
28
|
-
this.lastMoveTime = 0;
|
|
29
|
-
this.lastMoveX = 0;
|
|
30
|
-
this.touchStartTime = 0;
|
|
31
|
-
this.touchStartX = 0;
|
|
32
|
-
this.touchStartY = 0;
|
|
33
|
-
this.isVerticalScroll = false;
|
|
34
|
-
this.wasDragging = false;
|
|
35
|
-
this.clicksDisabled = false;
|
|
36
|
-
this.clickListeners = [];
|
|
37
|
-
this.dragStarted = false;
|
|
38
|
-
this.mouseDownTime = 0;
|
|
39
|
-
this.calculateRightBleedContainer = () => {
|
|
40
|
-
if (this.rightBleedContainer) {
|
|
41
|
-
const el = this.rightBleedContainer.nativeElement;
|
|
42
|
-
const left = el.getBoundingClientRect().left;
|
|
43
|
-
let scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
|
|
44
|
-
scrollbarWidth = scrollbarWidth == 0 || scrollbarWidth > 30 ? 0 : scrollbarWidth;
|
|
45
|
-
el.style.setProperty('--scrollbar-width', `${scrollbarWidth}px`);
|
|
46
|
-
el.style.setProperty('--left-offset', `${left}px`);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
ngAfterContentInit() {
|
|
51
|
-
setTimeout(() => {
|
|
52
|
-
this.calculateDimensions();
|
|
53
|
-
this.setItemWidths();
|
|
54
|
-
this.updateLimits();
|
|
55
|
-
this.setupClickPrevention();
|
|
56
|
-
this.items.changes.subscribe(() => {
|
|
57
|
-
this.calculateDimensions();
|
|
58
|
-
this.setItemWidths();
|
|
59
|
-
this.updateLimits();
|
|
60
|
-
this.goToFirstItem();
|
|
61
|
-
this.setupClickPrevention();
|
|
62
|
-
// Força atualização visual dos dots
|
|
63
|
-
if (this.cd && typeof this.cd.detectChanges === 'function') {
|
|
64
|
-
this.cd.detectChanges();
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}, 10);
|
|
68
|
-
window.addEventListener('resize', () => this.onResize());
|
|
69
|
-
}
|
|
70
|
-
ngOnDestroy() {
|
|
71
|
-
// Clean up click listeners
|
|
72
|
-
this.clickListeners.forEach(unlisten => unlisten());
|
|
73
|
-
this.clickListeners = [];
|
|
74
|
-
window.removeEventListener('resize', () => this.onResize());
|
|
75
|
-
}
|
|
76
|
-
calculateDimensions() {
|
|
77
|
-
if (this.slidesContainer) {
|
|
78
|
-
this.containerWidth = this.slidesContainer.nativeElement.offsetWidth;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
updateLimits() {
|
|
82
|
-
const totalWidth = this.items.length * (this.itemWidth + this.gap);
|
|
83
|
-
this.maxTranslateX = 0;
|
|
84
|
-
if (totalWidth > this.containerWidth) {
|
|
85
|
-
this.minTranslateX = this.containerWidth - totalWidth;
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
this.minTranslateX = 0;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
onResize() {
|
|
92
|
-
this.calculateRightBleedContainer();
|
|
93
|
-
this.calculateDimensions();
|
|
94
|
-
this.updateLimits();
|
|
95
|
-
// Garante que o currentIndex não ultrapasse o novo máximo
|
|
96
|
-
const maxIndex = this.getMaxIndex();
|
|
97
|
-
if (this.currentIndex > maxIndex) {
|
|
98
|
-
this.currentIndex = maxIndex;
|
|
99
|
-
}
|
|
100
|
-
this.updateTransform();
|
|
101
|
-
// Força detecção de mudanças para atualizar dots
|
|
102
|
-
if (window.ng && window.ng.getInjector) {
|
|
103
|
-
// Angular DevTools presente, não faz nada
|
|
104
|
-
}
|
|
105
|
-
else if (this.cd && typeof this.cd.detectChanges === 'function') {
|
|
106
|
-
this.cd.detectChanges();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
ngAfterViewInit() {
|
|
110
|
-
// Garante cálculo correto após view carregada
|
|
111
|
-
setTimeout(() => {
|
|
112
|
-
this.calculateRightBleedContainer();
|
|
113
|
-
this.calculateDimensions();
|
|
114
|
-
this.updateLimits();
|
|
115
|
-
this.updateTransform();
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
setItemWidths() {
|
|
119
|
-
this.items.forEach((item) => {
|
|
120
|
-
this.renderer.setStyle(item.nativeElement, 'width', `${this.itemWidth}px`);
|
|
121
|
-
this.renderer.setStyle(item.nativeElement, 'flex-shrink', '0');
|
|
122
|
-
this.renderer.setStyle(item.nativeElement, 'margin-right', `${this.gap}px`);
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
// Mouse events
|
|
126
|
-
onMouseDown(event) {
|
|
127
|
-
event.preventDefault();
|
|
128
|
-
this.mouseDownTime = Date.now();
|
|
129
|
-
this.dragStarted = false;
|
|
130
|
-
this.isMouseDown = true;
|
|
131
|
-
this.wasDragging = false;
|
|
132
|
-
this.clicksDisabled = false;
|
|
133
|
-
this.startX = event.clientX;
|
|
134
|
-
this.currentX = event.clientX;
|
|
135
|
-
this.initialTranslateX = this.translateX;
|
|
136
|
-
this.dragOffset = 0;
|
|
137
|
-
this.velocity = 0;
|
|
138
|
-
this.lastMoveTime = Date.now();
|
|
139
|
-
this.lastMoveX = event.clientX;
|
|
140
|
-
this.calculateDimensions();
|
|
141
|
-
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'none');
|
|
142
|
-
}
|
|
143
|
-
onMouseMove(event) {
|
|
144
|
-
if (!this.isMouseDown)
|
|
145
|
-
return;
|
|
146
|
-
event.preventDefault();
|
|
147
|
-
const dragDistance = Math.abs(event.clientX - this.startX);
|
|
148
|
-
// Only start dragging if moved more than 5px
|
|
149
|
-
if (dragDistance > 5 && !this.isDragging) {
|
|
150
|
-
this.isDragging = true;
|
|
151
|
-
this.dragStarted = true;
|
|
152
|
-
this.wasDragging = true;
|
|
153
|
-
}
|
|
154
|
-
if (this.isDragging) {
|
|
155
|
-
this.updateDrag(event.clientX);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
onMouseUp(event) {
|
|
159
|
-
if (!this.isMouseDown)
|
|
160
|
-
return;
|
|
161
|
-
this.isMouseDown = false;
|
|
162
|
-
if (this.isDragging) {
|
|
163
|
-
const mouseUpTime = Date.now();
|
|
164
|
-
const holdDuration = mouseUpTime - this.mouseDownTime;
|
|
165
|
-
const mouseDistance = Math.abs(this.currentX - this.startX);
|
|
166
|
-
if (mouseDistance > 5 || (holdDuration > 200 && mouseDistance > 0)) {
|
|
167
|
-
this.wasDragging = true;
|
|
168
|
-
}
|
|
169
|
-
this.endDrag();
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
// Reset transition if it was just a click
|
|
173
|
-
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'transform 0.3s ease-out');
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
onMouseLeave(event) {
|
|
177
|
-
if (this.isDragging) {
|
|
178
|
-
this.wasDragging = true;
|
|
179
|
-
this.endDrag();
|
|
180
|
-
}
|
|
181
|
-
this.isMouseDown = false;
|
|
182
|
-
}
|
|
183
|
-
// Touch events
|
|
184
|
-
onTouchStart(event) {
|
|
185
|
-
this.touchStartTime = Date.now();
|
|
186
|
-
this.touchStartX = event.touches[0].clientX;
|
|
187
|
-
this.touchStartY = event.touches[0].clientY;
|
|
188
|
-
this.isVerticalScroll = false;
|
|
189
|
-
this.isMouseDown = true;
|
|
190
|
-
this.wasDragging = false;
|
|
191
|
-
this.dragStarted = false;
|
|
192
|
-
this.clicksDisabled = false;
|
|
193
|
-
this.startX = event.touches[0].clientX;
|
|
194
|
-
this.currentX = event.touches[0].clientX;
|
|
195
|
-
this.initialTranslateX = this.translateX;
|
|
196
|
-
this.dragOffset = 0;
|
|
197
|
-
this.velocity = 0;
|
|
198
|
-
this.lastMoveTime = Date.now();
|
|
199
|
-
this.lastMoveX = event.touches[0].clientX;
|
|
200
|
-
this.calculateDimensions();
|
|
201
|
-
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'none');
|
|
202
|
-
}
|
|
203
|
-
onTouchMove(event) {
|
|
204
|
-
if (!this.isMouseDown)
|
|
205
|
-
return;
|
|
206
|
-
const currentX = event.touches[0].clientX;
|
|
207
|
-
const currentY = event.touches[0].clientY;
|
|
208
|
-
const deltaX = Math.abs(currentX - this.touchStartX);
|
|
209
|
-
const deltaY = Math.abs(currentY - this.touchStartY);
|
|
210
|
-
// Check if this is a vertical scroll
|
|
211
|
-
if (deltaY > deltaX && deltaY > 10) {
|
|
212
|
-
this.isVerticalScroll = true;
|
|
213
|
-
this.isDragging = false;
|
|
214
|
-
this.isMouseDown = false;
|
|
215
|
-
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'transform 0.3s ease-out');
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
// Start dragging if horizontal movement > 10px
|
|
219
|
-
if (deltaX > 10 && !this.isDragging) {
|
|
220
|
-
this.isDragging = true;
|
|
221
|
-
this.dragStarted = true;
|
|
222
|
-
this.wasDragging = true;
|
|
223
|
-
}
|
|
224
|
-
if (this.isDragging && deltaX > 10) {
|
|
225
|
-
event.preventDefault();
|
|
226
|
-
this.updateDrag(currentX);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
onTouchEnd(event) {
|
|
230
|
-
if (this.isVerticalScroll) {
|
|
231
|
-
this.isVerticalScroll = false;
|
|
232
|
-
this.isMouseDown = false;
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
this.isMouseDown = false;
|
|
236
|
-
const touchDuration = Date.now() - this.touchStartTime;
|
|
237
|
-
const touchDistance = Math.abs(this.currentX - this.startX);
|
|
238
|
-
// Mark as dragging if significant movement occurred
|
|
239
|
-
if (touchDistance > 10 || touchDuration > 300) {
|
|
240
|
-
this.wasDragging = true;
|
|
241
|
-
}
|
|
242
|
-
if (this.isDragging) {
|
|
243
|
-
this.endDrag();
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
// Reset transition if it was just a tap
|
|
247
|
-
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'transform 0.3s ease-out');
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
setupClickPrevention() {
|
|
251
|
-
// Clean up existing listeners
|
|
252
|
-
this.clickListeners.forEach(unlisten => unlisten());
|
|
253
|
-
this.clickListeners = [];
|
|
254
|
-
this.items.forEach((item) => {
|
|
255
|
-
// Only prevent click events, not mouseup which is needed for drag functionality
|
|
256
|
-
const eventHandler = (event) => {
|
|
257
|
-
if (event.type === 'click' && (this.wasDragging || this.clicksDisabled || this.dragStarted)) {
|
|
258
|
-
event.preventDefault();
|
|
259
|
-
event.stopPropagation();
|
|
260
|
-
event.stopImmediatePropagation();
|
|
261
|
-
return false;
|
|
262
|
-
}
|
|
263
|
-
return true;
|
|
264
|
-
};
|
|
265
|
-
// Only listen to click events to avoid interfering with drag functionality
|
|
266
|
-
item.nativeElement.addEventListener('click', eventHandler, true);
|
|
267
|
-
this.clickListeners.push(() => {
|
|
268
|
-
item.nativeElement.removeEventListener('click', eventHandler, true);
|
|
269
|
-
});
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
updateDrag(clientX) {
|
|
273
|
-
if (!this.isDragging)
|
|
274
|
-
return;
|
|
275
|
-
this.currentX = clientX;
|
|
276
|
-
const totalDeltaX = this.currentX - this.startX;
|
|
277
|
-
// Mark as dragging if movement is significant
|
|
278
|
-
if (Math.abs(totalDeltaX) > 5) {
|
|
279
|
-
this.wasDragging = true;
|
|
280
|
-
this.dragStarted = true;
|
|
281
|
-
}
|
|
282
|
-
const now = Date.now();
|
|
283
|
-
const timeDelta = now - this.lastMoveTime;
|
|
284
|
-
if (timeDelta > 0) {
|
|
285
|
-
this.velocity = (clientX - this.lastMoveX) / timeDelta;
|
|
286
|
-
}
|
|
287
|
-
this.lastMoveTime = now;
|
|
288
|
-
this.lastMoveX = clientX;
|
|
289
|
-
let resistedDeltaX = totalDeltaX;
|
|
290
|
-
const potentialTranslateX = this.initialTranslateX + totalDeltaX;
|
|
291
|
-
// Apply softer resistance at boundaries
|
|
292
|
-
if (potentialTranslateX > this.maxTranslateX) {
|
|
293
|
-
const overDrag = potentialTranslateX - this.maxTranslateX;
|
|
294
|
-
resistedDeltaX = totalDeltaX - (overDrag * 0.5);
|
|
295
|
-
}
|
|
296
|
-
else if (potentialTranslateX < this.minTranslateX) {
|
|
297
|
-
const overDrag = this.minTranslateX - potentialTranslateX;
|
|
298
|
-
resistedDeltaX = totalDeltaX + (overDrag * 0.5);
|
|
299
|
-
}
|
|
300
|
-
this.dragOffset = resistedDeltaX;
|
|
301
|
-
this.updateDragPosition();
|
|
302
|
-
}
|
|
303
|
-
updateDragPosition() {
|
|
304
|
-
const newTranslateX = this.initialTranslateX + this.dragOffset;
|
|
305
|
-
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transform', `translateX(${newTranslateX}px)`);
|
|
306
|
-
}
|
|
307
|
-
endDrag() {
|
|
308
|
-
if (!this.isDragging)
|
|
309
|
-
return;
|
|
310
|
-
this.isDragging = false;
|
|
311
|
-
// Disable clicks temporarily after any drag
|
|
312
|
-
if (this.wasDragging || this.dragStarted) {
|
|
313
|
-
this.clicksDisabled = true;
|
|
314
|
-
setTimeout(() => {
|
|
315
|
-
this.clicksDisabled = false;
|
|
316
|
-
}, 200);
|
|
317
|
-
}
|
|
318
|
-
// Clear the wasDragging and dragStarted flags after a shorter delay
|
|
319
|
-
setTimeout(() => {
|
|
320
|
-
this.wasDragging = false;
|
|
321
|
-
this.dragStarted = false;
|
|
322
|
-
}, 250);
|
|
323
|
-
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'transform 0.3s ease-out');
|
|
324
|
-
// Snap sempre para o início da página mais próxima
|
|
325
|
-
this.snapToNearestItem();
|
|
326
|
-
this.dragOffset = 0;
|
|
327
|
-
this.velocity = 0;
|
|
328
|
-
}
|
|
329
|
-
getMaxIndex() {
|
|
330
|
-
// Permite avançar até que o último item esteja visível (não necessariamente alinhado à esquerda)
|
|
331
|
-
if (!this.items || this.items.length === 0)
|
|
332
|
-
return 0;
|
|
333
|
-
const visibleCount = Math.max(1, Math.floor(this.containerWidth / (this.itemWidth + this.gap)));
|
|
334
|
-
if (this.items.length <= visibleCount)
|
|
335
|
-
return 0;
|
|
336
|
-
// Última posição onde o último item aparece visível
|
|
337
|
-
return this.items.length - visibleCount;
|
|
338
|
-
}
|
|
339
|
-
canGoNext() {
|
|
340
|
-
return this.currentIndex < this.getMaxIndex();
|
|
341
|
-
}
|
|
342
|
-
nextItem() {
|
|
343
|
-
const maxIndex = this.getMaxIndex();
|
|
344
|
-
if (this.canGoNext()) {
|
|
345
|
-
let newIndex = this.currentIndex + 1;
|
|
346
|
-
if (newIndex > maxIndex)
|
|
347
|
-
newIndex = maxIndex;
|
|
348
|
-
this.currentIndex = newIndex;
|
|
349
|
-
this.updateTransform();
|
|
350
|
-
this.nextClickEventEmitter.emit();
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
canGoPrevious() {
|
|
354
|
-
return this.currentIndex > 0;
|
|
355
|
-
}
|
|
356
|
-
prevItem() {
|
|
357
|
-
if (this.canGoPrevious()) {
|
|
358
|
-
let newIndex = this.currentIndex - 1;
|
|
359
|
-
if (newIndex < 0)
|
|
360
|
-
newIndex = 0;
|
|
361
|
-
this.currentIndex = newIndex;
|
|
362
|
-
this.updateTransform();
|
|
363
|
-
this.previousClickEventEmitter.emit();
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
goToDot(dotIndex) {
|
|
367
|
-
const maxIndex = this.getMaxIndex();
|
|
368
|
-
let newIndex = dotIndex;
|
|
369
|
-
if (newIndex > maxIndex)
|
|
370
|
-
newIndex = maxIndex;
|
|
371
|
-
this.currentIndex = newIndex;
|
|
372
|
-
this.updateTransform();
|
|
373
|
-
this.dotClickEventEmitter.emit();
|
|
374
|
-
}
|
|
375
|
-
snapToNearestItem() {
|
|
376
|
-
const itemStep = this.itemWidth + this.gap;
|
|
377
|
-
const position = -(this.initialTranslateX + this.dragOffset) / itemStep;
|
|
378
|
-
// Threshold: 0.3 = 30%, 0.5 = 50% (padrão)
|
|
379
|
-
const threshold = 0.3;
|
|
380
|
-
let targetIndex;
|
|
381
|
-
// Calcula quantos itens completos foram arrastados
|
|
382
|
-
const itemsMoved = Math.floor(Math.abs(position - this.currentIndex));
|
|
383
|
-
const decimal = Math.abs(position - this.currentIndex) - itemsMoved;
|
|
384
|
-
if (position > this.currentIndex) {
|
|
385
|
-
// Arrastando para frente
|
|
386
|
-
if (decimal >= threshold) {
|
|
387
|
-
targetIndex = this.currentIndex + itemsMoved + 1;
|
|
388
|
-
}
|
|
389
|
-
else {
|
|
390
|
-
targetIndex = this.currentIndex + itemsMoved;
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
else if (position < this.currentIndex) {
|
|
394
|
-
// Arrastando para trás
|
|
395
|
-
if (decimal >= threshold) {
|
|
396
|
-
targetIndex = this.currentIndex - itemsMoved - 1;
|
|
397
|
-
}
|
|
398
|
-
else {
|
|
399
|
-
targetIndex = this.currentIndex - itemsMoved;
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
else {
|
|
403
|
-
// Não se moveu
|
|
404
|
-
targetIndex = this.currentIndex;
|
|
405
|
-
}
|
|
406
|
-
const maxIndex = this.getMaxIndex();
|
|
407
|
-
targetIndex = Math.max(0, Math.min(targetIndex, maxIndex));
|
|
408
|
-
this.currentIndex = targetIndex;
|
|
409
|
-
this.updateTransform();
|
|
410
|
-
}
|
|
411
|
-
getDotsArray() {
|
|
412
|
-
// Só mostra dots para cada posição possível (cada "página" possível)
|
|
413
|
-
const maxIndex = this.getMaxIndex();
|
|
414
|
-
return Array(maxIndex + 1);
|
|
415
|
-
}
|
|
416
|
-
getCurrentDotIndex() {
|
|
417
|
-
return this.currentIndex;
|
|
418
|
-
}
|
|
419
|
-
updateTransform() {
|
|
420
|
-
const itemStep = this.itemWidth + this.gap;
|
|
421
|
-
this.translateX = -this.currentIndex * itemStep;
|
|
422
|
-
// Clamp para não mostrar espaço vazio à direita
|
|
423
|
-
const visibleCount = Math.max(1, Math.floor(this.containerWidth / itemStep));
|
|
424
|
-
// Inclui o gap após o último item
|
|
425
|
-
const totalWidth = this.items.length * itemStep;
|
|
426
|
-
if (this.items.length > visibleCount) {
|
|
427
|
-
const minTranslateX = this.containerWidth - totalWidth;
|
|
428
|
-
this.translateX = Math.max(this.translateX, minTranslateX);
|
|
429
|
-
}
|
|
430
|
-
else {
|
|
431
|
-
this.translateX = 0;
|
|
432
|
-
}
|
|
433
|
-
if (!this.isDragging && this.slidesContainer) {
|
|
434
|
-
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transform', `translateX(${this.translateX}px)`);
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
// Adicione este método para evitar erro de propriedade ausente
|
|
438
|
-
goToFirstItem() {
|
|
439
|
-
this.currentIndex = 0;
|
|
440
|
-
this.updateTransform();
|
|
441
|
-
}
|
|
442
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EluxCarouselFixedComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
443
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EluxCarouselFixedComponent, isStandalone: true, selector: "lib-elux-carousel-fixed", inputs: { itemWidth: "itemWidth", gap: "gap", showArrows: "showArrows", showDots: "showDots" }, outputs: { previousClickEventEmitter: "previousClickEventEmitter", nextClickEventEmitter: "nextClickEventEmitter", dotClickEventEmitter: "dotClickEventEmitter" }, queries: [{ propertyName: "items", predicate: ["carouselItem"], read: ElementRef }], viewQueries: [{ propertyName: "slidesContainer", first: true, predicate: ["slidesContainer"], descendants: true }, { propertyName: "rightBleedContainer", first: true, predicate: ["rightBleedContainer"], descendants: true }], ngImport: i0, template: "<div class=\"c-carousel-fixed-container\" #rightBleedContainer>\n <div \n class=\"c-carousel-fixed-slides\" \n #slidesContainer\n [style.transform]=\"'translateX(' + translateX + 'px)'\" \n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseLeave($event)\"\n (touchstart)=\"onTouchStart($event)\" \n (touchmove)=\"onTouchMove($event)\" \n (touchend)=\"onTouchEnd($event)\">\n <ng-content></ng-content>\n </div>\n</div>\n<div class=\"c-carousel-fixed-footer\" *ngIf=\"showArrows || showDots\">\n <button *ngIf=\"showArrows && getDotsArray().length > 1\"\n class=\"c-carousel-fixed-nav prev\" \n [disabled]=\"!canGoPrevious()\"\n title=\"Item anterior\" \n aria-label=\"Item anterior\" \n (click)=\"prevItem()\">\n <lib-elux-icon [icon]=\"'Chevron_Left.svg'\" [size]=\"'16'\" [sizeType]=\"'px'\" [color]=\"'#020F2E'\"></lib-elux-icon>\n </button>\n\n <div class=\"c-carousel-fixed-dots\" *ngIf=\"showDots && getDotsArray().length > 1\">\n <ng-container *ngFor=\"let dot of getDotsArray(); let idx = index\">\n <span \n class=\"c-carousel-fixed-dot\" \n [class.active]=\"idx === getCurrentDotIndex()\" \n (click)=\"goToDot(idx)\">\n </span>\n </ng-container>\n </div>\n\n <button *ngIf=\"showArrows && getDotsArray().length > 1\"\n class=\"c-carousel-fixed-nav next\" \n [disabled]=\"!canGoNext()\"\n title=\"Pr\u00F3ximo item\" \n aria-label=\"Pr\u00F3ximo item\" \n (click)=\"nextItem()\">\n <lib-elux-icon [icon]=\"'Chevron_Right.svg'\" [size]=\"'16'\" [sizeType]=\"'px'\" [color]=\"'#020F2E'\"></lib-elux-icon>\n </button>\n</div>\n", styles: [".c-carousel-fixed-container{overflow-x:hidden;width:calc(100vw - var(--left-offset, 0px) - var(--scrollbar-width, 0px))}.c-carousel-fixed-slides{display:flex;transition:transform .5s ease-out;touch-action:pan-y;cursor:grab;will-change:transform}.c-carousel-fixed-slides:active{cursor:grabbing}.c-carousel-fixed-footer{display:flex;justify-content:space-between;padding:16px}.c-carousel-fixed-footer .c-carousel-fixed-nav{background:none;border:none;cursor:pointer;padding:8px;border-radius:50px;background-color:#dfe7ea;transition:all ease-in-out .2s;z-index:2}.c-carousel-fixed-footer .c-carousel-fixed-nav:hover:not(:disabled){transform:scale(1.2)}.c-carousel-fixed-footer .c-carousel-fixed-nav:disabled{opacity:.3;cursor:not-allowed}.c-carousel-fixed-footer .c-carousel-fixed-nav:disabled:hover{transform:none}.c-carousel-fixed-footer .c-carousel-fixed-nav ::ng-deep span{display:block}.c-carousel-fixed-footer .c-carousel-fixed-dots{display:flex;align-items:center;gap:8px;margin:0 16px}.c-carousel-fixed-footer .c-carousel-fixed-dots .c-carousel-fixed-dot{width:10px;height:10px;border-radius:50%;background:#dfe7ea;transition:background .3s;cursor:pointer;display:inline-block}.c-carousel-fixed-footer .c-carousel-fixed-dots .c-carousel-fixed-dot.active{background:#011e41}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EluxIcon, selector: "lib-elux-icon", inputs: ["color", "useSubscription", "icon", "description", "size", "height", "width", "sizeType"] }] }); }
|
|
444
|
-
}
|
|
445
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EluxCarouselFixedComponent, decorators: [{
|
|
446
|
-
type: Component,
|
|
447
|
-
args: [{ standalone: true, selector: 'lib-elux-carousel-fixed', imports: [CommonModule, EluxIcon], template: "<div class=\"c-carousel-fixed-container\" #rightBleedContainer>\n <div \n class=\"c-carousel-fixed-slides\" \n #slidesContainer\n [style.transform]=\"'translateX(' + translateX + 'px)'\" \n (mousedown)=\"onMouseDown($event)\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseLeave($event)\"\n (touchstart)=\"onTouchStart($event)\" \n (touchmove)=\"onTouchMove($event)\" \n (touchend)=\"onTouchEnd($event)\">\n <ng-content></ng-content>\n </div>\n</div>\n<div class=\"c-carousel-fixed-footer\" *ngIf=\"showArrows || showDots\">\n <button *ngIf=\"showArrows && getDotsArray().length > 1\"\n class=\"c-carousel-fixed-nav prev\" \n [disabled]=\"!canGoPrevious()\"\n title=\"Item anterior\" \n aria-label=\"Item anterior\" \n (click)=\"prevItem()\">\n <lib-elux-icon [icon]=\"'Chevron_Left.svg'\" [size]=\"'16'\" [sizeType]=\"'px'\" [color]=\"'#020F2E'\"></lib-elux-icon>\n </button>\n\n <div class=\"c-carousel-fixed-dots\" *ngIf=\"showDots && getDotsArray().length > 1\">\n <ng-container *ngFor=\"let dot of getDotsArray(); let idx = index\">\n <span \n class=\"c-carousel-fixed-dot\" \n [class.active]=\"idx === getCurrentDotIndex()\" \n (click)=\"goToDot(idx)\">\n </span>\n </ng-container>\n </div>\n\n <button *ngIf=\"showArrows && getDotsArray().length > 1\"\n class=\"c-carousel-fixed-nav next\" \n [disabled]=\"!canGoNext()\"\n title=\"Pr\u00F3ximo item\" \n aria-label=\"Pr\u00F3ximo item\" \n (click)=\"nextItem()\">\n <lib-elux-icon [icon]=\"'Chevron_Right.svg'\" [size]=\"'16'\" [sizeType]=\"'px'\" [color]=\"'#020F2E'\"></lib-elux-icon>\n </button>\n</div>\n", styles: [".c-carousel-fixed-container{overflow-x:hidden;width:calc(100vw - var(--left-offset, 0px) - var(--scrollbar-width, 0px))}.c-carousel-fixed-slides{display:flex;transition:transform .5s ease-out;touch-action:pan-y;cursor:grab;will-change:transform}.c-carousel-fixed-slides:active{cursor:grabbing}.c-carousel-fixed-footer{display:flex;justify-content:space-between;padding:16px}.c-carousel-fixed-footer .c-carousel-fixed-nav{background:none;border:none;cursor:pointer;padding:8px;border-radius:50px;background-color:#dfe7ea;transition:all ease-in-out .2s;z-index:2}.c-carousel-fixed-footer .c-carousel-fixed-nav:hover:not(:disabled){transform:scale(1.2)}.c-carousel-fixed-footer .c-carousel-fixed-nav:disabled{opacity:.3;cursor:not-allowed}.c-carousel-fixed-footer .c-carousel-fixed-nav:disabled:hover{transform:none}.c-carousel-fixed-footer .c-carousel-fixed-nav ::ng-deep span{display:block}.c-carousel-fixed-footer .c-carousel-fixed-dots{display:flex;align-items:center;gap:8px;margin:0 16px}.c-carousel-fixed-footer .c-carousel-fixed-dots .c-carousel-fixed-dot{width:10px;height:10px;border-radius:50%;background:#dfe7ea;transition:background .3s;cursor:pointer;display:inline-block}.c-carousel-fixed-footer .c-carousel-fixed-dots .c-carousel-fixed-dot.active{background:#011e41}\n"] }]
|
|
448
|
-
}], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { items: [{
|
|
449
|
-
type: ContentChildren,
|
|
450
|
-
args: ['carouselItem', { read: ElementRef }]
|
|
451
|
-
}], slidesContainer: [{
|
|
452
|
-
type: ViewChild,
|
|
453
|
-
args: ['slidesContainer']
|
|
454
|
-
}], rightBleedContainer: [{
|
|
455
|
-
type: ViewChild,
|
|
456
|
-
args: ['rightBleedContainer', { static: false }]
|
|
457
|
-
}], itemWidth: [{
|
|
458
|
-
type: Input
|
|
459
|
-
}], gap: [{
|
|
460
|
-
type: Input
|
|
461
|
-
}], showArrows: [{
|
|
462
|
-
type: Input
|
|
463
|
-
}], showDots: [{
|
|
464
|
-
type: Input
|
|
465
|
-
}], previousClickEventEmitter: [{
|
|
466
|
-
type: Output
|
|
467
|
-
}], nextClickEventEmitter: [{
|
|
468
|
-
type: Output
|
|
469
|
-
}], dotClickEventEmitter: [{
|
|
470
|
-
type: Output
|
|
471
|
-
}] } });
|
|
472
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtZml4ZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwtZml4ZWQvY2Fyb3VzZWwtZml4ZWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwtZml4ZWQvY2Fyb3VzZWwtZml4ZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBb0IsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFTbkMsTUFBTSxPQUFPLDBCQUEwQjtJQXdDckMsWUFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWxDOUIsY0FBUyxHQUFXLEdBQUcsQ0FBQztRQUN4QixRQUFHLEdBQVcsRUFBRSxDQUFDO1FBQ2pCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0IsYUFBUSxHQUFZLElBQUksQ0FBQztRQUV4Qiw4QkFBeUIsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ3RELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDbEQseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUUzRCxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRVAsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUN0QixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNoQixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNoQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsbUJBQWMsR0FBbUIsRUFBRSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBSWxCLGlDQUE0QixHQUFHLEdBQUcsRUFBRTtZQUMxQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUM3QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDO2dCQUNsRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBRTdDLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7Z0JBQzlFLGNBQWMsR0FBRyxjQUFjLElBQUksQ0FBQyxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2dCQUVqRixFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLGNBQWMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUMsQ0FBQztJQWJ3QyxDQUFDO0lBZTNDLGtCQUFrQjtRQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUU1QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLG9DQUFvQztnQkFDcEMsSUFBSyxJQUFZLENBQUMsRUFBRSxJQUFJLE9BQVEsSUFBWSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQzVFLElBQVksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFdBQVc7UUFDVCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUN2RSxDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUV2QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQztRQUN4RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQiwwREFBMEQ7UUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUMvQixDQUFDO1FBRUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLGlEQUFpRDtRQUNqRCxJQUFLLE1BQWMsQ0FBQyxFQUFFLElBQUssTUFBYyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6RCwwQ0FBMEM7UUFDNUMsQ0FBQzthQUFNLElBQUssSUFBWSxDQUFDLEVBQUUsSUFBSSxPQUFRLElBQVksQ0FBQyxFQUFFLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ25GLElBQVksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsOENBQThDO1FBQzlDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtJQUNmLFdBQVcsQ0FBQyxLQUFpQjtRQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFL0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBaUI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUU5QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUzRCw2Q0FBNkM7UUFDN0MsSUFBSSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFpQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBRTlCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXpCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvQixNQUFNLFlBQVksR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTVELElBQUksYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQzFCLENBQUM7WUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDTiwwQ0FBMEM7WUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDdEcsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBaUI7UUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsZUFBZTtJQUNmLFlBQVksQ0FBQyxLQUFpQjtRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUUxQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBRTlCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFckQscUNBQXFDO1FBQ3JDLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQztZQUNwRyxPQUFPO1FBQ1QsQ0FBQztRQUVELCtDQUErQztRQUMvQyxJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBaUI7UUFDMUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDdkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU1RCxvREFBb0Q7UUFDcEQsSUFBSSxhQUFhLEdBQUcsRUFBRSxJQUFJLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sd0NBQXdDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7SUFDSCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMxQixnRkFBZ0Y7WUFDaEYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDNUYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3hCLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO29CQUNqQyxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDO1lBRUYsMkVBQTJFO1lBQzNFLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVqRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0RSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFVBQVUsQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRWhELDhDQUE4QztRQUM5QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMxQyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBRXpCLElBQUksY0FBYyxHQUFHLFdBQVcsQ0FBQztRQUNqQyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxXQUFXLENBQUM7UUFFakUsd0NBQXdDO1FBQ3hDLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDMUQsY0FBYyxHQUFHLFdBQVcsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsRCxDQUFDO2FBQU0sSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQztZQUMxRCxjQUFjLEdBQUcsV0FBVyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQy9ELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFDbEMsV0FBVyxFQUNYLGNBQWMsYUFBYSxLQUFLLENBQ2pDLENBQUM7SUFDSixDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFeEIsNENBQTRDO1FBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDVixDQUFDO1FBRUQsb0VBQW9FO1FBQ3BFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFUixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUVwRyxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVPLFdBQVc7UUFDakIsaUdBQWlHO1FBQ2pHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxZQUFZO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEQsb0RBQW9EO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO0lBQzFDLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksUUFBUSxHQUFHLFFBQVE7Z0JBQUUsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUM3QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksUUFBUSxHQUFHLENBQUM7Z0JBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUM3QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWdCO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDeEIsSUFBSSxRQUFRLEdBQUcsUUFBUTtZQUFFLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFeEUsMkNBQTJDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUV0QixJQUFJLFdBQW1CLENBQUM7UUFFeEIsbURBQW1EO1FBQ25ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUVwRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDakMseUJBQXlCO1lBQ3pCLElBQUksT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELENBQUM7aUJBQU0sQ0FBQztnQkFDTixXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEMsdUJBQXVCO1lBQ3ZCLElBQUksT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUN6QixXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELENBQUM7aUJBQU0sQ0FBQztnQkFDTixXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sZUFBZTtZQUNmLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2xDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxZQUFZO1FBQ1YscUVBQXFFO1FBQ3JFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxPQUFPLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUVoRCxnREFBZ0Q7UUFDaEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDN0Usa0NBQWtDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFlBQVksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzdELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQ2xDLFdBQVcsRUFDWCxjQUFjLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FDbkMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsK0RBQStEO0lBQy9ELGFBQWE7UUFDWCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQzsrR0E5ZlUsMEJBQTBCO21HQUExQiwwQkFBMEIsb1lBQ0ksVUFBVSw4UENackQsOHREQTRDQSwwekNEbkNZLFlBQVksZ1FBQUUsUUFBUTs7NEZBRXJCLDBCQUEwQjtrQkFQdEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04seUJBQXlCLFdBRzFCLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQzs4RUFHc0IsS0FBSztzQkFBM0QsZUFBZTt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUN2QixlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDeUIsbUJBQW1CO3NCQUF2RSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHMUMsU0FBUztzQkFBakIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRWx1eEljb24gfSBmcm9tICcuLi9pY29uJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnbGliLWVsdXgtY2Fyb3VzZWwtZml4ZWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2Fyb3VzZWwtZml4ZWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJvdXNlbC1maXhlZC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBFbHV4SWNvbl0sXG59KVxuZXhwb3J0IGNsYXNzIEVsdXhDYXJvdXNlbEZpeGVkQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgQENvbnRlbnRDaGlsZHJlbignY2Fyb3VzZWxJdGVtJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGl0ZW1zITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkKCdzbGlkZXNDb250YWluZXInKSBzbGlkZXNDb250YWluZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyaWdodEJsZWVkQ29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHJpZ2h0QmxlZWRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuXG4gIEBJbnB1dCgpIGl0ZW1XaWR0aDogbnVtYmVyID0gMjAwO1xuICBASW5wdXQoKSBnYXA6IG51bWJlciA9IDE2O1xuICBASW5wdXQoKSBzaG93QXJyb3dzOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0RvdHM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBwcmV2aW91c0NsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG5leHRDbGlja0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBkb3RDbGlja0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgY3VycmVudEluZGV4ID0gMDtcbiAgdHJhbnNsYXRlWCA9IDA7XG5cbiAgcHJpdmF0ZSBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgaXNNb3VzZURvd24gPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGFydFggPSAwO1xuICBwcml2YXRlIGN1cnJlbnRYID0gMDtcbiAgcHJpdmF0ZSBpbml0aWFsVHJhbnNsYXRlWCA9IDA7XG4gIHByaXZhdGUgZHJhZ09mZnNldCA9IDA7XG4gIHByaXZhdGUgY29udGFpbmVyV2lkdGggPSAwO1xuICBwcml2YXRlIG1heFRyYW5zbGF0ZVggPSAwO1xuICBwcml2YXRlIG1pblRyYW5zbGF0ZVggPSAwO1xuICBwcml2YXRlIHZlbG9jaXR5ID0gMDtcbiAgcHJpdmF0ZSBsYXN0TW92ZVRpbWUgPSAwO1xuICBwcml2YXRlIGxhc3RNb3ZlWCA9IDA7XG4gIHByaXZhdGUgdG91Y2hTdGFydFRpbWUgPSAwO1xuICBwcml2YXRlIHRvdWNoU3RhcnRYID0gMDtcbiAgcHJpdmF0ZSB0b3VjaFN0YXJ0WSA9IDA7XG4gIHByaXZhdGUgaXNWZXJ0aWNhbFNjcm9sbCA9IGZhbHNlO1xuICBwcml2YXRlIHdhc0RyYWdnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgY2xpY2tzRGlzYWJsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbGlja0xpc3RlbmVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcbiAgcHJpdmF0ZSBkcmFnU3RhcnRlZCA9IGZhbHNlO1xuICBwcml2YXRlIG1vdXNlRG93blRpbWUgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBwcml2YXRlIGNhbGN1bGF0ZVJpZ2h0QmxlZWRDb250YWluZXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucmlnaHRCbGVlZENvbnRhaW5lcikge1xuICAgICAgY29uc3QgZWwgPSB0aGlzLnJpZ2h0QmxlZWRDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IGxlZnQgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXG4gICAgICBsZXQgc2Nyb2xsYmFyV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIHNjcm9sbGJhcldpZHRoID0gc2Nyb2xsYmFyV2lkdGggPT0gMCB8fCBzY3JvbGxiYXJXaWR0aCA+IDMwID8gMCA6IHNjcm9sbGJhcldpZHRoOyAgICAgXG4gICAgICBcbiAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCctLXNjcm9sbGJhci13aWR0aCcsIGAke3Njcm9sbGJhcldpZHRofXB4YCk7XG4gICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1sZWZ0LW9mZnNldCcsIGAke2xlZnR9cHhgKTtcbiAgICB9XG4gIH07XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgICB0aGlzLnNldEl0ZW1XaWR0aHMoKTtcbiAgICAgIHRoaXMudXBkYXRlTGltaXRzKCk7XG4gICAgICB0aGlzLnNldHVwQ2xpY2tQcmV2ZW50aW9uKCk7XG5cbiAgICAgIHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZURpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5zZXRJdGVtV2lkdGhzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlTGltaXRzKCk7XG4gICAgICAgIHRoaXMuZ29Ub0ZpcnN0SXRlbSgpO1xuICAgICAgICB0aGlzLnNldHVwQ2xpY2tQcmV2ZW50aW9uKCk7XG4gICAgICAgIC8vIEZvcsOnYSBhdHVhbGl6YcOnw6NvIHZpc3VhbCBkb3MgZG90c1xuICAgICAgICBpZiAoKHRoaXMgYXMgYW55KS5jZCAmJiB0eXBlb2YgKHRoaXMgYXMgYW55KS5jZC5kZXRlY3RDaGFuZ2VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgKHRoaXMgYXMgYW55KS5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDEwKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLm9uUmVzaXplKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gQ2xlYW4gdXAgY2xpY2sgbGlzdGVuZXJzXG4gICAgdGhpcy5jbGlja0xpc3RlbmVycy5mb3JFYWNoKHVubGlzdGVuID0+IHVubGlzdGVuKCkpO1xuICAgIHRoaXMuY2xpY2tMaXN0ZW5lcnMgPSBbXTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5vblJlc2l6ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlRGltZW5zaW9ucygpIHtcbiAgICBpZiAodGhpcy5zbGlkZXNDb250YWluZXIpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSB0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGltaXRzKCkge1xuICAgIGNvbnN0IHRvdGFsV2lkdGggPSB0aGlzLml0ZW1zLmxlbmd0aCAqICh0aGlzLml0ZW1XaWR0aCArIHRoaXMuZ2FwKTtcbiAgICB0aGlzLm1heFRyYW5zbGF0ZVggPSAwO1xuICAgIFxuICAgIGlmICh0b3RhbFdpZHRoID4gdGhpcy5jb250YWluZXJXaWR0aCkge1xuICAgICAgdGhpcy5taW5UcmFuc2xhdGVYID0gdGhpcy5jb250YWluZXJXaWR0aCAtIHRvdGFsV2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWluVHJhbnNsYXRlWCA9IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvblJlc2l6ZSgpIHtcbiAgICB0aGlzLmNhbGN1bGF0ZVJpZ2h0QmxlZWRDb250YWluZXIoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZURpbWVuc2lvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbWl0cygpO1xuXG4gICAgLy8gR2FyYW50ZSBxdWUgbyBjdXJyZW50SW5kZXggbsOjbyB1bHRyYXBhc3NlIG8gbm92byBtw6F4aW1vXG4gICAgY29uc3QgbWF4SW5kZXggPSB0aGlzLmdldE1heEluZGV4KCk7XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID4gbWF4SW5kZXgpIHtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gbWF4SW5kZXg7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICBcbiAgICAvLyBGb3LDp2EgZGV0ZWPDp8OjbyBkZSBtdWRhbsOnYXMgcGFyYSBhdHVhbGl6YXIgZG90c1xuICAgIGlmICgod2luZG93IGFzIGFueSkubmcgJiYgKHdpbmRvdyBhcyBhbnkpLm5nLmdldEluamVjdG9yKSB7XG4gICAgICAvLyBBbmd1bGFyIERldlRvb2xzIHByZXNlbnRlLCBuw6NvIGZheiBuYWRhXG4gICAgfSBlbHNlIGlmICgodGhpcyBhcyBhbnkpLmNkICYmIHR5cGVvZiAodGhpcyBhcyBhbnkpLmNkLmRldGVjdENoYW5nZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICh0aGlzIGFzIGFueSkuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBHYXJhbnRlIGPDoWxjdWxvIGNvcnJldG8gYXDDs3MgdmlldyBjYXJyZWdhZGFcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlUmlnaHRCbGVlZENvbnRhaW5lcigpO1xuICAgICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgICB0aGlzLnVwZGF0ZUxpbWl0cygpO1xuICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbVdpZHRocygpIHtcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaXRlbS5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCBgJHt0aGlzLml0ZW1XaWR0aH1weGApO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpdGVtLm5hdGl2ZUVsZW1lbnQsICdmbGV4LXNocmluaycsICcwJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGl0ZW0ubmF0aXZlRWxlbWVudCwgJ21hcmdpbi1yaWdodCcsIGAke3RoaXMuZ2FwfXB4YCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBNb3VzZSBldmVudHNcbiAgb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMubW91c2VEb3duVGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5kcmFnU3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNNb3VzZURvd24gPSB0cnVlO1xuICAgIHRoaXMud2FzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNsaWNrc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYO1xuICAgIHRoaXMuY3VycmVudFggPSBldmVudC5jbGllbnRYO1xuICAgIHRoaXMuaW5pdGlhbFRyYW5zbGF0ZVggPSB0aGlzLnRyYW5zbGF0ZVg7XG4gICAgdGhpcy5kcmFnT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnZlbG9jaXR5ID0gMDtcbiAgICB0aGlzLmxhc3RNb3ZlVGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5sYXN0TW92ZVggPSBldmVudC5jbGllbnRYO1xuICAgIFxuICAgIHRoaXMuY2FsY3VsYXRlRGltZW5zaW9ucygpO1xuICAgIFxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zbGlkZXNDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuICB9XG5cbiAgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNNb3VzZURvd24pIHJldHVybjtcbiAgICBcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIGNvbnN0IGRyYWdEaXN0YW5jZSA9IE1hdGguYWJzKGV2ZW50LmNsaWVudFggLSB0aGlzLnN0YXJ0WCk7XG4gICAgXG4gICAgLy8gT25seSBzdGFydCBkcmFnZ2luZyBpZiBtb3ZlZCBtb3JlIHRoYW4gNXB4XG4gICAgaWYgKGRyYWdEaXN0YW5jZSA+IDUgJiYgIXRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy53YXNEcmFnZ2luZyA9IHRydWU7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgIHRoaXMudXBkYXRlRHJhZyhldmVudC5jbGllbnRYKTtcbiAgICB9XG4gIH1cblxuICBvbk1vdXNlVXAoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNNb3VzZURvd24pIHJldHVybjtcbiAgICBcbiAgICB0aGlzLmlzTW91c2VEb3duID0gZmFsc2U7XG4gICAgXG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgY29uc3QgbW91c2VVcFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgaG9sZER1cmF0aW9uID0gbW91c2VVcFRpbWUgLSB0aGlzLm1vdXNlRG93blRpbWU7XG4gICAgICBjb25zdCBtb3VzZURpc3RhbmNlID0gTWF0aC5hYnModGhpcy5jdXJyZW50WCAtIHRoaXMuc3RhcnRYKTtcbiAgICAgIFxuICAgICAgaWYgKG1vdXNlRGlzdGFuY2UgPiA1IHx8IChob2xkRHVyYXRpb24gPiAyMDAgJiYgbW91c2VEaXN0YW5jZSA+IDApKSB7XG4gICAgICAgIHRoaXMud2FzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmVuZERyYWcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVzZXQgdHJhbnNpdGlvbiBpZiBpdCB3YXMganVzdCBhIGNsaWNrXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uJywgJ3RyYW5zZm9ybSAwLjNzIGVhc2Utb3V0Jyk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy53YXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICB0aGlzLmVuZERyYWcoKTtcbiAgICB9XG4gICAgdGhpcy5pc01vdXNlRG93biA9IGZhbHNlO1xuICB9XG5cbiAgLy8gVG91Y2ggZXZlbnRzXG4gIG9uVG91Y2hTdGFydChldmVudDogVG91Y2hFdmVudCkge1xuICAgIHRoaXMudG91Y2hTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMudG91Y2hTdGFydFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgdGhpcy50b3VjaFN0YXJ0WSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICB0aGlzLmlzVmVydGljYWxTY3JvbGwgPSBmYWxzZTtcbiAgICB0aGlzLmlzTW91c2VEb3duID0gdHJ1ZTtcbiAgICB0aGlzLndhc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy5kcmFnU3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2xpY2tzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICB0aGlzLmN1cnJlbnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuICAgIHRoaXMuaW5pdGlhbFRyYW5zbGF0ZVggPSB0aGlzLnRyYW5zbGF0ZVg7XG4gICAgdGhpcy5kcmFnT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnZlbG9jaXR5ID0gMDtcbiAgICB0aGlzLmxhc3RNb3ZlVGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5sYXN0TW92ZVggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgXG4gICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbicsICdub25lJyk7XG4gIH1cblxuICBvblRvdWNoTW92ZShldmVudDogVG91Y2hFdmVudCkge1xuICAgIGlmICghdGhpcy5pc01vdXNlRG93bikgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGN1cnJlbnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuICAgIGNvbnN0IGN1cnJlbnRZID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRZO1xuICAgIGNvbnN0IGRlbHRhWCA9IE1hdGguYWJzKGN1cnJlbnRYIC0gdGhpcy50b3VjaFN0YXJ0WCk7XG4gICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnMoY3VycmVudFkgLSB0aGlzLnRvdWNoU3RhcnRZKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgdmVydGljYWwgc2Nyb2xsXG4gICAgaWYgKGRlbHRhWSA+IGRlbHRhWCAmJiBkZWx0YVkgPiAxMCkge1xuICAgICAgdGhpcy5pc1ZlcnRpY2FsU2Nyb2xsID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5pc01vdXNlRG93biA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbicsICd0cmFuc2Zvcm0gMC4zcyBlYXNlLW91dCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBTdGFydCBkcmFnZ2luZyBpZiBob3Jpem9udGFsIG1vdmVtZW50ID4gMTBweFxuICAgIGlmIChkZWx0YVggPiAxMCAmJiAhdGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5kcmFnU3RhcnRlZCA9IHRydWU7XG4gICAgICB0aGlzLndhc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZyAmJiBkZWx0YVggPiAxMCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudXBkYXRlRHJhZyhjdXJyZW50WCk7XG4gICAgfVxuICB9XG5cbiAgb25Ub3VjaEVuZChldmVudDogVG91Y2hFdmVudCkge1xuICAgIGlmICh0aGlzLmlzVmVydGljYWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuaXNWZXJ0aWNhbFNjcm9sbCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc01vdXNlRG93biA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmlzTW91c2VEb3duID0gZmFsc2U7XG4gICAgXG4gICAgY29uc3QgdG91Y2hEdXJhdGlvbiA9IERhdGUubm93KCkgLSB0aGlzLnRvdWNoU3RhcnRUaW1lO1xuICAgIGNvbnN0IHRvdWNoRGlzdGFuY2UgPSBNYXRoLmFicyh0aGlzLmN1cnJlbnRYIC0gdGhpcy5zdGFydFgpO1xuICAgIFxuICAgIC8vIE1hcmsgYXMgZHJhZ2dpbmcgaWYgc2lnbmlmaWNhbnQgbW92ZW1lbnQgb2NjdXJyZWRcbiAgICBpZiAodG91Y2hEaXN0YW5jZSA+IDEwIHx8IHRvdWNoRHVyYXRpb24gPiAzMDApIHtcbiAgICAgIHRoaXMud2FzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICB0aGlzLmVuZERyYWcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVzZXQgdHJhbnNpdGlvbiBpZiBpdCB3YXMganVzdCBhIHRhcFxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbicsICd0cmFuc2Zvcm0gMC4zcyBlYXNlLW91dCcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBDbGlja1ByZXZlbnRpb24oKSB7XG4gICAgLy8gQ2xlYW4gdXAgZXhpc3RpbmcgbGlzdGVuZXJzXG4gICAgdGhpcy5jbGlja0xpc3RlbmVycy5mb3JFYWNoKHVubGlzdGVuID0+IHVubGlzdGVuKCkpO1xuICAgIHRoaXMuY2xpY2tMaXN0ZW5lcnMgPSBbXTtcblxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgLy8gT25seSBwcmV2ZW50IGNsaWNrIGV2ZW50cywgbm90IG1vdXNldXAgd2hpY2ggaXMgbmVlZGVkIGZvciBkcmFnIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjbGljaycgJiYgKHRoaXMud2FzRHJhZ2dpbmcgfHwgdGhpcy5jbGlja3NEaXNhYmxlZCB8fCB0aGlzLmRyYWdTdGFydGVkKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcblxuICAgICAgLy8gT25seSBsaXN0ZW4gdG8gY2xpY2sgZXZlbnRzIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggZHJhZyBmdW5jdGlvbmFsaXR5XG4gICAgICBpdGVtLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudEhhbmRsZXIsIHRydWUpO1xuICAgICAgXG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXJzLnB1c2goKCkgPT4ge1xuICAgICAgICBpdGVtLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudEhhbmRsZXIsIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURyYWcoY2xpZW50WDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcpIHJldHVybjtcblxuICAgIHRoaXMuY3VycmVudFggPSBjbGllbnRYO1xuICAgIGNvbnN0IHRvdGFsRGVsdGFYID0gdGhpcy5jdXJyZW50WCAtIHRoaXMuc3RhcnRYO1xuICAgIFxuICAgIC8vIE1hcmsgYXMgZHJhZ2dpbmcgaWYgbW92ZW1lbnQgaXMgc2lnbmlmaWNhbnRcbiAgICBpZiAoTWF0aC5hYnModG90YWxEZWx0YVgpID4gNSkge1xuICAgICAgdGhpcy53YXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICB0aGlzLmRyYWdTdGFydGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lRGVsdGEgPSBub3cgLSB0aGlzLmxhc3RNb3ZlVGltZTtcbiAgICBpZiAodGltZURlbHRhID4gMCkge1xuICAgICAgdGhpcy52ZWxvY2l0eSA9IChjbGllbnRYIC0gdGhpcy5sYXN0TW92ZVgpIC8gdGltZURlbHRhO1xuICAgIH1cbiAgICB0aGlzLmxhc3RNb3ZlVGltZSA9IG5vdztcbiAgICB0aGlzLmxhc3RNb3ZlWCA9IGNsaWVudFg7XG5cbiAgICBsZXQgcmVzaXN0ZWREZWx0YVggPSB0b3RhbERlbHRhWDtcbiAgICBjb25zdCBwb3RlbnRpYWxUcmFuc2xhdGVYID0gdGhpcy5pbml0aWFsVHJhbnNsYXRlWCArIHRvdGFsRGVsdGFYO1xuICAgIFxuICAgIC8vIEFwcGx5IHNvZnRlciByZXNpc3RhbmNlIGF0IGJvdW5kYXJpZXNcbiAgICBpZiAocG90ZW50aWFsVHJhbnNsYXRlWCA+IHRoaXMubWF4VHJhbnNsYXRlWCkge1xuICAgICAgY29uc3Qgb3ZlckRyYWcgPSBwb3RlbnRpYWxUcmFuc2xhdGVYIC0gdGhpcy5tYXhUcmFuc2xhdGVYO1xuICAgICAgcmVzaXN0ZWREZWx0YVggPSB0b3RhbERlbHRhWCAtIChvdmVyRHJhZyAqIDAuNSk7XG4gICAgfSBlbHNlIGlmIChwb3RlbnRpYWxUcmFuc2xhdGVYIDwgdGhpcy5taW5UcmFuc2xhdGVYKSB7XG4gICAgICBjb25zdCBvdmVyRHJhZyA9IHRoaXMubWluVHJhbnNsYXRlWCAtIHBvdGVudGlhbFRyYW5zbGF0ZVg7XG4gICAgICByZXNpc3RlZERlbHRhWCA9IHRvdGFsRGVsdGFYICsgKG92ZXJEcmFnICogMC41KTtcbiAgICB9XG5cbiAgICB0aGlzLmRyYWdPZmZzZXQgPSByZXNpc3RlZERlbHRhWDtcbiAgICB0aGlzLnVwZGF0ZURyYWdQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEcmFnUG9zaXRpb24oKSB7XG4gICAgY29uc3QgbmV3VHJhbnNsYXRlWCA9IHRoaXMuaW5pdGlhbFRyYW5zbGF0ZVggKyB0aGlzLmRyYWdPZmZzZXQ7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgIHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIFxuICAgICAgJ3RyYW5zZm9ybScsIFxuICAgICAgYHRyYW5zbGF0ZVgoJHtuZXdUcmFuc2xhdGVYfXB4KWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmREcmFnKCkge1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSByZXR1cm47XG5cbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBcbiAgICAvLyBEaXNhYmxlIGNsaWNrcyB0ZW1wb3JhcmlseSBhZnRlciBhbnkgZHJhZ1xuICAgIGlmICh0aGlzLndhc0RyYWdnaW5nIHx8IHRoaXMuZHJhZ1N0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuY2xpY2tzRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xpY2tzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICAgIFxuICAgIC8vIENsZWFyIHRoZSB3YXNEcmFnZ2luZyBhbmQgZHJhZ1N0YXJ0ZWQgZmxhZ3MgYWZ0ZXIgYSBzaG9ydGVyIGRlbGF5XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLndhc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmRyYWdTdGFydGVkID0gZmFsc2U7XG4gICAgfSwgMjUwKTtcbiAgICBcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uJywgJ3RyYW5zZm9ybSAwLjNzIGVhc2Utb3V0Jyk7XG5cbiAgICAvLyBTbmFwIHNlbXByZSBwYXJhIG8gaW7DrWNpbyBkYSBww6FnaW5hIG1haXMgcHLDs3hpbWFcbiAgICB0aGlzLnNuYXBUb05lYXJlc3RJdGVtKCk7XG5cbiAgICB0aGlzLmRyYWdPZmZzZXQgPSAwO1xuICAgIHRoaXMudmVsb2NpdHkgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXhJbmRleCgpOiBudW1iZXIge1xuICAgIC8vIFBlcm1pdGUgYXZhbsOnYXIgYXTDqSBxdWUgbyDDumx0aW1vIGl0ZW0gZXN0ZWphIHZpc8OtdmVsIChuw6NvIG5lY2Vzc2FyaWFtZW50ZSBhbGluaGFkbyDDoCBlc3F1ZXJkYSlcbiAgICBpZiAoIXRoaXMuaXRlbXMgfHwgdGhpcy5pdGVtcy5sZW5ndGggPT09IDApIHJldHVybiAwO1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IodGhpcy5jb250YWluZXJXaWR0aCAvICh0aGlzLml0ZW1XaWR0aCArIHRoaXMuZ2FwKSkpO1xuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA8PSB2aXNpYmxlQ291bnQpIHJldHVybiAwO1xuICAgIC8vIMOabHRpbWEgcG9zacOnw6NvIG9uZGUgbyDDumx0aW1vIGl0ZW0gYXBhcmVjZSB2aXPDrXZlbFxuICAgIHJldHVybiB0aGlzLml0ZW1zLmxlbmd0aCAtIHZpc2libGVDb3VudDtcbiAgfVxuXG4gIGNhbkdvTmV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLmdldE1heEluZGV4KCk7XG4gIH1cblxuICBuZXh0SXRlbSgpIHtcbiAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMuZ2V0TWF4SW5kZXgoKTtcbiAgICBpZiAodGhpcy5jYW5Hb05leHQoKSkge1xuICAgICAgbGV0IG5ld0luZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKyAxO1xuICAgICAgaWYgKG5ld0luZGV4ID4gbWF4SW5kZXgpIG5ld0luZGV4ID0gbWF4SW5kZXg7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IG5ld0luZGV4O1xuICAgICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgICAgIHRoaXMubmV4dENsaWNrRXZlbnRFbWl0dGVyLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBjYW5Hb1ByZXZpb3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRleCA+IDA7XG4gIH1cblxuICBwcmV2SXRlbSgpIHtcbiAgICBpZiAodGhpcy5jYW5Hb1ByZXZpb3VzKCkpIHtcbiAgICAgIGxldCBuZXdJbmRleCA9IHRoaXMuY3VycmVudEluZGV4IC0gMTtcbiAgICAgIGlmIChuZXdJbmRleCA8IDApIG5ld0luZGV4ID0gMDtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gbmV3SW5kZXg7XG4gICAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICAgICAgdGhpcy5wcmV2aW91c0NsaWNrRXZlbnRFbWl0dGVyLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBnb1RvRG90KGRvdEluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMuZ2V0TWF4SW5kZXgoKTtcbiAgICBsZXQgbmV3SW5kZXggPSBkb3RJbmRleDtcbiAgICBpZiAobmV3SW5kZXggPiBtYXhJbmRleCkgbmV3SW5kZXggPSBtYXhJbmRleDtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IG5ld0luZGV4O1xuICAgIHRoaXMudXBkYXRlVHJhbnNmb3JtKCk7XG4gICAgdGhpcy5kb3RDbGlja0V2ZW50RW1pdHRlci5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIHNuYXBUb05lYXJlc3RJdGVtKCkge1xuICAgIGNvbnN0IGl0ZW1TdGVwID0gdGhpcy5pdGVtV2lkdGggKyB0aGlzLmdhcDtcbiAgICBjb25zdCBwb3NpdGlvbiA9IC0odGhpcy5pbml0aWFsVHJhbnNsYXRlWCArIHRoaXMuZHJhZ09mZnNldCkgLyBpdGVtU3RlcDtcbiAgICBcbiAgICAvLyBUaHJlc2hvbGQ6IDAuMyA9IDMwJSwgMC41ID0gNTAlIChwYWRyw6NvKVxuICAgIGNvbnN0IHRocmVzaG9sZCA9IDAuMztcbiAgICBcbiAgICBsZXQgdGFyZ2V0SW5kZXg6IG51bWJlcjtcbiAgICBcbiAgICAvLyBDYWxjdWxhIHF1YW50b3MgaXRlbnMgY29tcGxldG9zIGZvcmFtIGFycmFzdGFkb3NcbiAgICBjb25zdCBpdGVtc01vdmVkID0gTWF0aC5mbG9vcihNYXRoLmFicyhwb3NpdGlvbiAtIHRoaXMuY3VycmVudEluZGV4KSk7XG4gICAgY29uc3QgZGVjaW1hbCA9IE1hdGguYWJzKHBvc2l0aW9uIC0gdGhpcy5jdXJyZW50SW5kZXgpIC0gaXRlbXNNb3ZlZDtcbiAgICBcbiAgICBpZiAocG9zaXRpb24gPiB0aGlzLmN1cnJlbnRJbmRleCkge1xuICAgICAgLy8gQXJyYXN0YW5kbyBwYXJhIGZyZW50ZVxuICAgICAgaWYgKGRlY2ltYWwgPj0gdGhyZXNob2xkKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKyBpdGVtc01vdmVkICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXggKyBpdGVtc01vdmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPCB0aGlzLmN1cnJlbnRJbmRleCkge1xuICAgICAgLy8gQXJyYXN0YW5kbyBwYXJhIHRyw6FzXG4gICAgICBpZiAoZGVjaW1hbCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgdGFyZ2V0SW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAtIGl0ZW1zTW92ZWQgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0SW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleCAtIGl0ZW1zTW92ZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE7Do28gc2UgbW92ZXVcbiAgICAgIHRhcmdldEluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXg7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5nZXRNYXhJbmRleCgpO1xuICAgIHRhcmdldEluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGFyZ2V0SW5kZXgsIG1heEluZGV4KSk7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSB0YXJnZXRJbmRleDtcbiAgICB0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpO1xuICB9XG5cbiAgZ2V0RG90c0FycmF5KCk6IGFueVtdIHtcbiAgICAvLyBTw7MgbW9zdHJhIGRvdHMgcGFyYSBjYWRhIHBvc2nDp8OjbyBwb3Nzw612ZWwgKGNhZGEgXCJww6FnaW5hXCIgcG9zc8OtdmVsKVxuICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5nZXRNYXhJbmRleCgpO1xuICAgIHJldHVybiBBcnJheShtYXhJbmRleCArIDEpO1xuICB9XG5cbiAgZ2V0Q3VycmVudERvdEluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUcmFuc2Zvcm0oKSB7XG4gICAgY29uc3QgaXRlbVN0ZXAgPSB0aGlzLml0ZW1XaWR0aCArIHRoaXMuZ2FwO1xuICAgIHRoaXMudHJhbnNsYXRlWCA9IC10aGlzLmN1cnJlbnRJbmRleCAqIGl0ZW1TdGVwO1xuXG4gICAgLy8gQ2xhbXAgcGFyYSBuw6NvIG1vc3RyYXIgZXNwYcOnbyB2YXppbyDDoCBkaXJlaXRhXG4gICAgY29uc3QgdmlzaWJsZUNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih0aGlzLmNvbnRhaW5lcldpZHRoIC8gaXRlbVN0ZXApKTtcbiAgICAvLyBJbmNsdWkgbyBnYXAgYXDDs3MgbyDDumx0aW1vIGl0ZW1cbiAgICBjb25zdCB0b3RhbFdpZHRoID0gdGhpcy5pdGVtcy5sZW5ndGggKiBpdGVtU3RlcDtcbiAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPiB2aXNpYmxlQ291bnQpIHtcbiAgICAgIGNvbnN0IG1pblRyYW5zbGF0ZVggPSB0aGlzLmNvbnRhaW5lcldpZHRoIC0gdG90YWxXaWR0aDtcbiAgICAgIHRoaXMudHJhbnNsYXRlWCA9IE1hdGgubWF4KHRoaXMudHJhbnNsYXRlWCwgbWluVHJhbnNsYXRlWCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNsYXRlWCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcgJiYgdGhpcy5zbGlkZXNDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgICBgdHJhbnNsYXRlWCgke3RoaXMudHJhbnNsYXRlWH1weClgXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkaWNpb25lIGVzdGUgbcOpdG9kbyBwYXJhIGV2aXRhciBlcnJvIGRlIHByb3ByaWVkYWRlIGF1c2VudGVcbiAgZ29Ub0ZpcnN0SXRlbSgpIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy51cGRhdGVUcmFuc2Zvcm0oKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImMtY2Fyb3VzZWwtZml4ZWQtY29udGFpbmVyXCIgI3JpZ2h0QmxlZWRDb250YWluZXI+XG4gIDxkaXYgXG4gIGNsYXNzPVwiYy1jYXJvdXNlbC1maXhlZC1zbGlkZXNcIiBcbiAgI3NsaWRlc0NvbnRhaW5lclxuICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVYKCcgKyB0cmFuc2xhdGVYICsgJ3B4KSdcIiBcbiAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcbiAgKG1vdXNlbW92ZSk9XCJvbk1vdXNlTW92ZSgkZXZlbnQpXCJcbiAgKG1vdXNldXApPVwib25Nb3VzZVVwKCRldmVudClcIlxuICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoJGV2ZW50KVwiXG4gICh0b3VjaHN0YXJ0KT1cIm9uVG91Y2hTdGFydCgkZXZlbnQpXCIgXG4gICh0b3VjaG1vdmUpPVwib25Ub3VjaE1vdmUoJGV2ZW50KVwiIFxuICAodG91Y2hlbmQpPVwib25Ub3VjaEVuZCgkZXZlbnQpXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJjLWNhcm91c2VsLWZpeGVkLWZvb3RlclwiICpuZ0lmPVwic2hvd0Fycm93cyB8fCBzaG93RG90c1wiPlxuICAgIDxidXR0b24gKm5nSWY9XCJzaG93QXJyb3dzICYmIGdldERvdHNBcnJheSgpLmxlbmd0aCA+IDFcIlxuICAgICAgY2xhc3M9XCJjLWNhcm91c2VsLWZpeGVkLW5hdiBwcmV2XCIgXG4gICAgICBbZGlzYWJsZWRdPVwiIWNhbkdvUHJldmlvdXMoKVwiXG4gICAgICB0aXRsZT1cIkl0ZW0gYW50ZXJpb3JcIiBcbiAgICAgIGFyaWEtbGFiZWw9XCJJdGVtIGFudGVyaW9yXCIgXG4gICAgICAoY2xpY2spPVwicHJldkl0ZW0oKVwiPlxuICAgICAgPGxpYi1lbHV4LWljb24gW2ljb25dPVwiJ0NoZXZyb25fTGVmdC5zdmcnXCIgW3NpemVdPVwiJzE2J1wiIFtzaXplVHlwZV09XCIncHgnXCIgW2NvbG9yXT1cIicjMDIwRjJFJ1wiPjwvbGliLWVsdXgtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJjLWNhcm91c2VsLWZpeGVkLWRvdHNcIiAqbmdJZj1cInNob3dEb3RzICYmIGdldERvdHNBcnJheSgpLmxlbmd0aCA+IDFcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRvdCBvZiBnZXREb3RzQXJyYXkoKTsgbGV0IGlkeCA9IGluZGV4XCI+XG4gICAgICAgIDxzcGFuIFxuICAgICAgICAgIGNsYXNzPVwiYy1jYXJvdXNlbC1maXhlZC1kb3RcIiBcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlkeCA9PT0gZ2V0Q3VycmVudERvdEluZGV4KClcIiBcbiAgICAgICAgICAoY2xpY2spPVwiZ29Ub0RvdChpZHgpXCI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvbiAqbmdJZj1cInNob3dBcnJvd3MgJiYgZ2V0RG90c0FycmF5KCkubGVuZ3RoID4gMVwiXG4gICAgICBjbGFzcz1cImMtY2Fyb3VzZWwtZml4ZWQtbmF2IG5leHRcIiBcbiAgICAgIFtkaXNhYmxlZF09XCIhY2FuR29OZXh0KClcIlxuICAgICAgdGl0bGU9XCJQcsOzeGltbyBpdGVtXCIgXG4gICAgICBhcmlhLWxhYmVsPVwiUHLDs3hpbW8gaXRlbVwiIFxuICAgICAgKGNsaWNrKT1cIm5leHRJdGVtKClcIj5cbiAgICAgIDxsaWItZWx1eC1pY29uIFtpY29uXT1cIidDaGV2cm9uX1JpZ2h0LnN2ZydcIiBbc2l6ZV09XCInMTYnXCIgW3NpemVUeXBlXT1cIidweCdcIiBbY29sb3JdPVwiJyMwMjBGMkUnXCI+PC9saWItZWx1eC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
/package/lib/components/{carousel-fixed → carousel-fixed-deprecated}/carousel-fixed.component.d.ts
RENAMED
|
File without changes
|