@elxjs/ui 0.0.180 → 0.0.181
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/carousel/carousel.component.mjs +72 -21
- package/esm2022/lib/components/carousel-fixed/carousel-fixed.component.mjs +75 -24
- package/fesm2022/elxjs-ui.mjs +145 -43
- package/fesm2022/elxjs-ui.mjs.map +1 -1
- package/lib/components/carousel/carousel.component.d.ts +5 -0
- package/lib/components/carousel-fixed/carousel-fixed.component.d.ts +5 -0
- package/package.json +1 -1
|
@@ -31,6 +31,10 @@ export class EluxCarouselComponent {
|
|
|
31
31
|
this.lastMoveTime = 0;
|
|
32
32
|
this.lastMoveX = 0;
|
|
33
33
|
this.wasDragging = false;
|
|
34
|
+
this.touchStartTime = 0;
|
|
35
|
+
this.touchStartX = 0;
|
|
36
|
+
this.touchStartY = 0;
|
|
37
|
+
this.isVerticalScroll = false;
|
|
34
38
|
}
|
|
35
39
|
ngAfterContentInit() {
|
|
36
40
|
this.calculateDimensions();
|
|
@@ -115,40 +119,87 @@ export class EluxCarouselComponent {
|
|
|
115
119
|
}
|
|
116
120
|
// Touch events
|
|
117
121
|
onTouchStart(event) {
|
|
118
|
-
|
|
122
|
+
this.touchStartTime = Date.now();
|
|
123
|
+
this.touchStartX = event.touches[0].clientX;
|
|
124
|
+
this.touchStartY = event.touches[0].clientY;
|
|
125
|
+
this.isVerticalScroll = false;
|
|
119
126
|
this.startDrag(event.touches[0].clientX);
|
|
120
127
|
}
|
|
121
128
|
onTouchMove(event) {
|
|
122
|
-
if (this.isDragging)
|
|
129
|
+
if (!this.isDragging)
|
|
130
|
+
return;
|
|
131
|
+
const currentX = event.touches[0].clientX;
|
|
132
|
+
const currentY = event.touches[0].clientY;
|
|
133
|
+
const deltaX = Math.abs(currentX - this.touchStartX);
|
|
134
|
+
const deltaY = Math.abs(currentY - this.touchStartY);
|
|
135
|
+
// Check if this is a vertical scroll
|
|
136
|
+
if (deltaY > deltaX && deltaY > 10) {
|
|
137
|
+
this.isVerticalScroll = true;
|
|
138
|
+
this.isDragging = false;
|
|
139
|
+
this.wasDragging = false;
|
|
140
|
+
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'transform 0.4s ease-out');
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Only prevent default if it's a horizontal drag
|
|
144
|
+
if (deltaX > 10) {
|
|
123
145
|
event.preventDefault();
|
|
124
146
|
this.updateDrag(event.touches[0].clientX);
|
|
125
147
|
}
|
|
126
148
|
}
|
|
127
149
|
onTouchEnd(event) {
|
|
150
|
+
if (this.isVerticalScroll) {
|
|
151
|
+
this.isVerticalScroll = false;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const touchDuration = Date.now() - this.touchStartTime;
|
|
155
|
+
const touchDistance = Math.abs(this.currentX - this.startX);
|
|
156
|
+
// Consider it a tap if duration < 300ms and distance < 10px
|
|
157
|
+
if (touchDuration < 300 && touchDistance < 10) {
|
|
158
|
+
this.wasDragging = false;
|
|
159
|
+
this.isDragging = false;
|
|
160
|
+
}
|
|
128
161
|
if (this.isDragging) {
|
|
129
162
|
this.endDrag();
|
|
130
163
|
}
|
|
131
164
|
}
|
|
132
165
|
setupItemClickListeners() {
|
|
133
166
|
this.items.forEach((item, index) => {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
167
|
+
// Remove any existing listeners
|
|
168
|
+
const newItem = item.nativeElement.cloneNode(true);
|
|
169
|
+
item.nativeElement.parentNode?.replaceChild(newItem, item.nativeElement);
|
|
170
|
+
// Add both click and touchend listeners for better mobile support
|
|
171
|
+
this.renderer.listen(newItem, 'click', (event) => {
|
|
172
|
+
this.handleItemClick(event, index, newItem);
|
|
173
|
+
});
|
|
174
|
+
this.renderer.listen(newItem, 'touchend', (event) => {
|
|
175
|
+
// Only handle touchend if it wasn't a drag
|
|
176
|
+
if (!this.wasDragging && !this.isVerticalScroll) {
|
|
177
|
+
const touchDuration = Date.now() - this.touchStartTime;
|
|
178
|
+
const touchDistance = Math.abs(event.changedTouches[0].clientX - this.touchStartX);
|
|
179
|
+
if (touchDuration < 300 && touchDistance < 10) {
|
|
180
|
+
event.preventDefault();
|
|
181
|
+
this.handleItemClick(event, index, newItem);
|
|
182
|
+
}
|
|
140
183
|
}
|
|
141
|
-
this.itemClickEventEmitter.emit({
|
|
142
|
-
event,
|
|
143
|
-
index,
|
|
144
|
-
element: item.nativeElement
|
|
145
|
-
});
|
|
146
184
|
});
|
|
147
185
|
});
|
|
148
186
|
}
|
|
187
|
+
handleItemClick(event, index, element) {
|
|
188
|
+
// Prevent click if it was preceded by a drag
|
|
189
|
+
if (this.wasDragging) {
|
|
190
|
+
event.preventDefault();
|
|
191
|
+
event.stopPropagation();
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
this.itemClickEventEmitter.emit({
|
|
195
|
+
event,
|
|
196
|
+
index,
|
|
197
|
+
element
|
|
198
|
+
});
|
|
199
|
+
}
|
|
149
200
|
startDrag(clientX) {
|
|
150
201
|
this.isDragging = true;
|
|
151
|
-
this.wasDragging = false;
|
|
202
|
+
this.wasDragging = false;
|
|
152
203
|
this.startX = clientX;
|
|
153
204
|
this.currentX = clientX;
|
|
154
205
|
this.initialOffset = this.offset;
|
|
@@ -164,9 +215,9 @@ export class EluxCarouselComponent {
|
|
|
164
215
|
updateDrag(clientX) {
|
|
165
216
|
if (!this.isDragging)
|
|
166
217
|
return;
|
|
167
|
-
//
|
|
218
|
+
// More lenient threshold for mobile - mark as dragging only for significant movement
|
|
168
219
|
const deltaX = Math.abs(this.currentX - this.startX);
|
|
169
|
-
if (deltaX >
|
|
220
|
+
if (deltaX > 15) { // Increased from 5px to 15px for mobile
|
|
170
221
|
this.wasDragging = true;
|
|
171
222
|
}
|
|
172
223
|
this.currentX = clientX;
|
|
@@ -203,17 +254,17 @@ export class EluxCarouselComponent {
|
|
|
203
254
|
if (!this.isDragging)
|
|
204
255
|
return;
|
|
205
256
|
this.isDragging = false;
|
|
206
|
-
// Clear the wasDragging flag after a
|
|
257
|
+
// Clear the wasDragging flag after a shorter delay for mobile
|
|
207
258
|
setTimeout(() => {
|
|
208
259
|
this.wasDragging = false;
|
|
209
|
-
},
|
|
260
|
+
}, 50); // Reduced from 100ms to 50ms
|
|
210
261
|
// Re-enable CSS transitions
|
|
211
262
|
this.renderer.setStyle(this.slidesContainer.nativeElement, 'transition', 'transform 0.4s ease-out');
|
|
212
263
|
const finalOffset = this.initialOffset + this.dragOffset;
|
|
213
|
-
const threshold =
|
|
264
|
+
const threshold = 40; // Reduced from 50px to 40px for mobile
|
|
214
265
|
const dragDistance = Math.abs(this.currentX - this.startX);
|
|
215
266
|
// Check for momentum (velocity-based slide change)
|
|
216
|
-
const momentumThreshold = 0.5
|
|
267
|
+
const momentumThreshold = 0.3; // Reduced from 0.5 to 0.3
|
|
217
268
|
const hasSignificantVelocity = Math.abs(this.velocity) > momentumThreshold;
|
|
218
269
|
if (dragDistance > threshold || hasSignificantVelocity) {
|
|
219
270
|
if (this.dragOffset > 0 || (hasSignificantVelocity && this.velocity > 0)) {
|
|
@@ -345,4 +396,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
345
396
|
}], itemClickEventEmitter: [{
|
|
346
397
|
type: Output
|
|
347
398
|
}] } });
|
|
348
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBb0IsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFjbkMsTUFBTSxPQUFPLHFCQUFxQjtJQW1DaEMsWUFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQTlCOUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBRXRDLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDdEQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUNsRCx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ2pELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUF1RCxDQUFDO1FBRTFHLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRUgsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixXQUFN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O21HQUFyQixxQkFBcUIsd2RBQ1MsVUFBVSxrUENqQnJELCtqREF1Q0Esdy9GRHpCWSxZQUFZLDRKQUFFLFFBQVE7OzRGQUVyQixxQkFBcUI7a0JBUGpDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLG1CQUFtQixXQUdwQixDQUFDLFlBQVksRUFBRSxRQUFRLENBQUM7OEVBR3NCLEtBQUs7c0JBQTNELGVBQWU7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDekIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNJLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUVuQixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUkseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRWx1eEljb24gfSBmcm9tICcuLi9pY29uJztcblxuZXhwb3J0IHR5cGUgUHJvZHVjdEl0ZW0gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaW1hZ2U6IHN0cmluZztcbn07XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2xpYi1lbHV4LWNhcm91c2VsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2Fyb3VzZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRWx1eEljb25dLFxufSlcbmV4cG9ydCBjbGFzcyBFbHV4Q2Fyb3VzZWxDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICBAQ29udGVudENoaWxkcmVuKCdjYXJvdXNlbEl0ZW0nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgaXRlbXMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGQoJ2RvdHNDb250YWluZXInKSBkb3RzQ29udGFpbmVyITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2xpZGVzQ29udGFpbmVyJykgc2xpZGVzQ29udGFpbmVyITogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBpdGVtc1BlclNsaWRlOiBudW1iZXIgPSA0O1xuICBASW5wdXQoKSByZW1vdmVBcnJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcmVtb3ZlRG90czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhdXRvUGxheUludGVydmFsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBAT3V0cHV0KCkgcHJldmlvdXNDbGlja0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBuZXh0Q2xpY2tFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgZG90Q2xpY2tFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgaXRlbUNsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7ZXZlbnQ6IEV2ZW50LCBpbmRleDogbnVtYmVyLCBlbGVtZW50OiBIVE1MRWxlbWVudH0+KCk7XG5cbiAgY3VycmVudEluZGV4ID0gMDtcbiAgY3VycmVudFN0ZXBJbmRleCA9IDA7XG4gIG9mZnNldCA9IDA7XG5cbiAgcHJpdmF0ZSBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhcnRYID0gMDtcbiAgcHJpdmF0ZSBjdXJyZW50WCA9IDA7XG4gIHByaXZhdGUgaW5pdGlhbE9mZnNldCA9IDA7XG4gIHByaXZhdGUgZHJhZ09mZnNldCA9IDA7XG4gIHByaXZhdGUgY29udGFpbmVyV2lkdGggPSAwO1xuICBwcml2YXRlIGl0ZW1XaWR0aCA9IDA7XG4gIHByaXZhdGUgbWF4T2Zmc2V0ID0gMDtcbiAgcHJpdmF0ZSBtaW5PZmZzZXQgPSAwO1xuICBwcml2YXRlIGF1dG9QbGF5VGltZXI6IGFueTtcbiAgcHJpdmF0ZSBhbmltYXRpb25JZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdmVsb2NpdHkgPSAwO1xuICBwcml2YXRlIGxhc3RNb3ZlVGltZSA9IDA7XG4gIHByaXZhdGUgbGFzdE1vdmVYID0gMDtcbiAgcHJpdmF0ZSB3YXNEcmFnZ2luZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgdGhpcy5zZXRJdGVtV2lkdGhzKCk7XG4gICAgdGhpcy51cGRhdGVMaW1pdHMoKTtcbiAgICB0aGlzLnNldHVwSXRlbUNsaWNrTGlzdGVuZXJzKCk7XG5cbiAgICBpZiAodGhpcy5hdXRvUGxheUludGVydmFsKSB7XG4gICAgICB0aGlzLnN0YXJ0QXV0b1BsYXkoKTtcbiAgICB9XG5cbiAgICB0aGlzLml0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlRGltZW5zaW9ucygpO1xuICAgICAgdGhpcy5zZXRJdGVtV2lkdGhzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUxpbWl0cygpO1xuICAgICAgdGhpcy5nb1RvRmlyc3RTbGlkZSgpO1xuICAgICAgdGhpcy5zZXR1cEl0ZW1DbGlja0xpc3RlbmVycygpO1xuICAgIH0pO1xuXG4gICAgLy8gTGlzdGVuIGZvciB3aW5kb3cgcmVzaXplIHRvIHJlY2FsY3VsYXRlIGRpbWVuc2lvbnNcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5vblJlc2l6ZSgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3RvcEF1dG9QbGF5KCk7XG4gICAgaWYgKHRoaXMuYW5pbWF0aW9uSWQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuYW5pbWF0aW9uSWQpO1xuICAgIH1cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5vblJlc2l6ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlRGltZW5zaW9ucygpIHtcbiAgICBpZiAodGhpcy5zbGlkZXNDb250YWluZXIpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSB0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5pdGVtV2lkdGggPSB0aGlzLmNvbnRhaW5lcldpZHRoIC8gdGhpcy5pdGVtc1BlclNsaWRlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGltaXRzKCkge1xuICAgIGNvbnN0IHRvdGFsU3RlcHMgPSBNYXRoLmNlaWwodGhpcy5pdGVtcy5sZW5ndGggLyB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIHRoaXMubWF4T2Zmc2V0ID0gMDtcbiAgICB0aGlzLm1pbk9mZnNldCA9IC0oKHRvdGFsU3RlcHMgLSAxKSAqIDEwMCk7XG4gIH1cblxuICBwcml2YXRlIG9uUmVzaXplKCkge1xuICAgIHRoaXMuY2FsY3VsYXRlRGltZW5zaW9ucygpO1xuICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldEl0ZW1XaWR0aHMoKSB7XG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBtaW5XaWR0aCA9IGBjYWxjKDEwMCUgLyAke3RoaXMuaXRlbXNQZXJTbGlkZX0pYDtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaXRlbS5uYXRpdmVFbGVtZW50LCAnbWluV2lkdGgnLCBtaW5XaWR0aCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGFydEF1dG9QbGF5KCkge1xuICAgIHRoaXMuc3RvcEF1dG9QbGF5KCk7XG4gICAgdGhpcy5hdXRvUGxheVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgICAgdGhpcy5uZXh0U2xpZGUoKTtcbiAgICAgIH1cbiAgICB9LCAodGhpcy5hdXRvUGxheUludGVydmFsIHx8IDApICogMTAwMCk7XG4gIH1cblxuICBzdG9wQXV0b1BsYXkoKSB7XG4gICAgaWYgKHRoaXMuYXV0b1BsYXlUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9QbGF5VGltZXIpO1xuICAgICAgdGhpcy5hdXRvUGxheVRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBNb3VzZSBldmVudHNcbiAgb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc3RhcnREcmFnKGV2ZW50LmNsaWVudFgpO1xuICB9XG5cbiAgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy51cGRhdGVEcmFnKGV2ZW50LmNsaWVudFgpO1xuICAgIH1cbiAgfVxuXG4gIG9uTW91c2VVcChldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgIHRoaXMuZW5kRHJhZygpO1xuICAgIH1cbiAgfVxuXG4gIG9uTW91c2VMZWF2ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgIHRoaXMuZW5kRHJhZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRvdWNoIGV2ZW50c1xuICBvblRvdWNoU3RhcnQoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc3RhcnREcmFnKGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCk7XG4gIH1cblxuICBvblRvdWNoTW92ZShldmVudDogVG91Y2hFdmVudCkge1xuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnVwZGF0ZURyYWcoZXZlbnQudG91Y2hlc1swXS5jbGllbnRYKTtcbiAgICB9XG4gIH1cblxuICBvblRvdWNoRW5kKGV2ZW50OiBUb3VjaEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5lbmREcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEl0ZW1DbGlja0xpc3RlbmVycygpIHtcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihpdGVtLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgLy8gUHJldmVudCBjbGljayBpZiBpdCB3YXMgcHJlY2VkZWQgYnkgYSBkcmFnXG4gICAgICAgIGlmICh0aGlzLndhc0RyYWdnaW5nKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrRXZlbnRFbWl0dGVyLmVtaXQoe1xuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGVsZW1lbnQ6IGl0ZW0ubmF0aXZlRWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydERyYWcoY2xpZW50WDogbnVtYmVyKSB7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICB0aGlzLndhc0RyYWdnaW5nID0gZmFsc2U7IC8vIFJlc2V0IGF0IHN0YXJ0IG9mIHBvdGVudGlhbCBkcmFnXG4gICAgdGhpcy5zdGFydFggPSBjbGllbnRYO1xuICAgIHRoaXMuY3VycmVudFggPSBjbGllbnRYO1xuICAgIHRoaXMuaW5pdGlhbE9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIHRoaXMuZHJhZ09mZnNldCA9IDA7XG4gICAgdGhpcy52ZWxvY2l0eSA9IDA7XG4gICAgdGhpcy5sYXN0TW92ZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMubGFzdE1vdmVYID0gY2xpZW50WDtcbiAgICBcbiAgICB0aGlzLmNhbGN1bGF0ZURpbWVuc2lvbnMoKTtcbiAgICB0aGlzLnN0b3BBdXRvUGxheSgpO1xuICAgIFxuICAgIC8vIERpc2FibGUgQ1NTIHRyYW5zaXRpb25zIGR1cmluZyBkcmFnXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbicsICdub25lJyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURyYWcoY2xpZW50WDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcpIHJldHVybjtcblxuICAgIC8vIE1hcmsgYXMgZHJhZ2dpbmcgaWYgbW92ZW1lbnQgaXMgc2lnbmlmaWNhbnRcbiAgICBjb25zdCBkZWx0YVggPSBNYXRoLmFicyh0aGlzLmN1cnJlbnRYIC0gdGhpcy5zdGFydFgpO1xuICAgIGlmIChkZWx0YVggPiA1KSB7IC8vIDVweCB0aHJlc2hvbGQgdG8gZGlzdGluZ3Vpc2ggZnJvbSBhY2NpZGVudGFsIG1vdmVtZW50XG4gICAgICB0aGlzLndhc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRYID0gY2xpZW50WDtcbiAgICBjb25zdCB0b3RhbERlbHRhWCA9IHRoaXMuY3VycmVudFggLSB0aGlzLnN0YXJ0WDtcbiAgICBcbiAgICAvLyBDYWxjdWxhdGUgdmVsb2NpdHkgZm9yIG1vbWVudHVtXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lRGVsdGEgPSBub3cgLSB0aGlzLmxhc3RNb3ZlVGltZTtcbiAgICBpZiAodGltZURlbHRhID4gMCkge1xuICAgICAgdGhpcy52ZWxvY2l0eSA9IChjbGllbnRYIC0gdGhpcy5sYXN0TW92ZVgpIC8gdGltZURlbHRhO1xuICAgIH1cbiAgICB0aGlzLmxhc3RNb3ZlVGltZSA9IG5vdztcbiAgICB0aGlzLmxhc3RNb3ZlWCA9IGNsaWVudFg7XG5cbiAgICAvLyBDb252ZXJ0IHBpeGVsIG1vdmVtZW50IHRvIHBlcmNlbnRhZ2VcbiAgICBjb25zdCBkcmFnUGVyY2VudGFnZSA9ICh0b3RhbERlbHRhWCAvIHRoaXMuY29udGFpbmVyV2lkdGgpICogMTAwO1xuICAgIFxuICAgIC8vIEFwcGx5IHJlc2lzdGFuY2UgYXQgYm91bmRhcmllc1xuICAgIGxldCByZXNpc3RlZERyYWdQZXJjZW50YWdlID0gZHJhZ1BlcmNlbnRhZ2U7XG4gICAgY29uc3QgcG90ZW50aWFsT2Zmc2V0ID0gdGhpcy5pbml0aWFsT2Zmc2V0ICsgZHJhZ1BlcmNlbnRhZ2U7XG4gICAgXG4gICAgaWYgKHBvdGVudGlhbE9mZnNldCA+IHRoaXMubWF4T2Zmc2V0KSB7XG4gICAgICBjb25zdCBvdmVyRHJhZyA9IHBvdGVudGlhbE9mZnNldCAtIHRoaXMubWF4T2Zmc2V0O1xuICAgICAgcmVzaXN0ZWREcmFnUGVyY2VudGFnZSA9IGRyYWdQZXJjZW50YWdlIC0gKG92ZXJEcmFnICogMC4zKTtcbiAgICB9IGVsc2UgaWYgKHBvdGVudGlhbE9mZnNldCA8IHRoaXMubWluT2Zmc2V0KSB7XG4gICAgICBjb25zdCBvdmVyRHJhZyA9IHRoaXMubWluT2Zmc2V0IC0gcG90ZW50aWFsT2Zmc2V0O1xuICAgICAgcmVzaXN0ZWREcmFnUGVyY2VudGFnZSA9IGRyYWdQZXJjZW50YWdlICsgKG92ZXJEcmFnICogMC4zKTtcbiAgICB9XG5cbiAgICB0aGlzLmRyYWdPZmZzZXQgPSByZXNpc3RlZERyYWdQZXJjZW50YWdlO1xuICAgIHRoaXMudXBkYXRlRHJhZ1Bvc2l0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURyYWdQb3NpdGlvbigpIHtcbiAgICBjb25zdCBuZXdPZmZzZXQgPSB0aGlzLmluaXRpYWxPZmZzZXQgKyB0aGlzLmRyYWdPZmZzZXQ7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgIHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIFxuICAgICAgJ3RyYW5zZm9ybScsIFxuICAgICAgYHRyYW5zbGF0ZVgoJHtuZXdPZmZzZXR9JSlgXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5kRHJhZygpIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykgcmV0dXJuO1xuXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgXG4gICAgLy8gQ2xlYXIgdGhlIHdhc0RyYWdnaW5nIGZsYWcgYWZ0ZXIgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBjbGljayBldmVudCB0byBiZSBwcm9jZXNzZWRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMud2FzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9LCAxMDApO1xuICAgIFxuICAgIC8vIFJlLWVuYWJsZSBDU1MgdHJhbnNpdGlvbnNcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uJywgJ3RyYW5zZm9ybSAwLjRzIGVhc2Utb3V0Jyk7XG5cbiAgICBjb25zdCBmaW5hbE9mZnNldCA9IHRoaXMuaW5pdGlhbE9mZnNldCArIHRoaXMuZHJhZ09mZnNldDtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSA1MDsgLy8gTWluaW11bSBkcmFnIGRpc3RhbmNlIGluIHBpeGVscyB0byB0cmlnZ2VyIHNsaWRlIGNoYW5nZVxuICAgIGNvbnN0IGRyYWdEaXN0YW5jZSA9IE1hdGguYWJzKHRoaXMuY3VycmVudFggLSB0aGlzLnN0YXJ0WCk7XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIG1vbWVudHVtICh2ZWxvY2l0eS1iYXNlZCBzbGlkZSBjaGFuZ2UpXG4gICAgY29uc3QgbW9tZW50dW1UaHJlc2hvbGQgPSAwLjU7XG4gICAgY29uc3QgaGFzU2lnbmlmaWNhbnRWZWxvY2l0eSA9IE1hdGguYWJzKHRoaXMudmVsb2NpdHkpID4gbW9tZW50dW1UaHJlc2hvbGQ7XG4gICAgXG4gICAgaWYgKGRyYWdEaXN0YW5jZSA+IHRocmVzaG9sZCB8fCBoYXNTaWduaWZpY2FudFZlbG9jaXR5KSB7XG4gICAgICBpZiAodGhpcy5kcmFnT2Zmc2V0ID4gMCB8fCAoaGFzU2lnbmlmaWNhbnRWZWxvY2l0eSAmJiB0aGlzLnZlbG9jaXR5ID4gMCkpIHtcbiAgICAgICAgLy8gRHJhZ2dlZCByaWdodCBvciBoYXMgcG9zaXRpdmUgdmVsb2NpdHkgLSBnbyB0byBwcmV2aW91cyBzbGlkZVxuICAgICAgICB0aGlzLnByZXZTbGlkZSgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRyYWdPZmZzZXQgPCAwIHx8IChoYXNTaWduaWZpY2FudFZlbG9jaXR5ICYmIHRoaXMudmVsb2NpdHkgPCAwKSkge1xuICAgICAgICAvLyBEcmFnZ2VkIGxlZnQgb3IgaGFzIG5lZ2F0aXZlIHZlbG9jaXR5IC0gZ28gdG8gbmV4dCBzbGlkZVxuICAgICAgICB0aGlzLm5leHRTbGlkZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU21hbGwgZHJhZywgc25hcCBiYWNrIHRvIGN1cnJlbnQgcG9zaXRpb25cbiAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU21hbGwgZHJhZywgc25hcCBiYWNrIHRvIGN1cnJlbnQgcG9zaXRpb25cbiAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgZHJhZyBzdGF0ZVxuICAgIHRoaXMuZHJhZ09mZnNldCA9IDA7XG4gICAgdGhpcy52ZWxvY2l0eSA9IDA7XG4gICAgXG4gICAgLy8gUmVzdGFydCBhdXRvcGxheSBpZiBpdCB3YXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmF1dG9QbGF5SW50ZXJ2YWwpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdGFydEF1dG9QbGF5KCksIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0ZXBJbmRleENvdW50KCk6IG51bWJlcltdIHtcbiAgICBjb25zdCB0b3RhbFN0ZXBzID0gTWF0aC5jZWlsKHRoaXMuaXRlbXMubGVuZ3RoIC8gdGhpcy5pdGVtc1BlclNsaWRlKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogdG90YWxTdGVwcyB9LCAoXywgaSkgPT4gaSk7XG4gIH1cblxuICBnZXRDdXJyZW50U3RlcEluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFN0ZXBJbmRleDsgXG4gIH1cblxuICBnb1RvRmlyc3RTbGlkZSgpIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy5jdXJyZW50U3RlcEluZGV4ID0gMDtcbiAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgIHRoaXMuc2Nyb2xsQWN0aXZlRG90SW50b1ZpZXcoMCk7XG4gIH1cblxuICBnb1RvU2xpZGUoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9IGluZGV4O1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gTWF0aC5taW4oaW5kZXggKiB0aGlzLml0ZW1zUGVyU2xpZGUsIHRoaXMuaXRlbXMubGVuZ3RoIC0gdGhpcy5pdGVtc1BlclNsaWRlKTtcbiAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgIHRoaXMuc2Nyb2xsQWN0aXZlRG90SW50b1ZpZXcoaW5kZXgpO1xuICAgIHRoaXMuZG90Q2xpY2tFdmVudEVtaXR0ZXIuZW1pdCgpO1xuICB9XG5cbiAgcHJldlNsaWRlKCkge1xuICAgIGNvbnN0IHRvdGFsU3RlcHMgPSBNYXRoLmNlaWwodGhpcy5pdGVtcy5sZW5ndGggLyB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIFxuICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwSW5kZXggPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXgtLTtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gdGhpcy5jdXJyZW50U3RlcEluZGV4ICogdGhpcy5pdGVtc1BlclNsaWRlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPSB0b3RhbFN0ZXBzIC0gMTtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gTWF0aC5taW4odGhpcy5jdXJyZW50U3RlcEluZGV4ICogdGhpcy5pdGVtc1BlclNsaWRlLCB0aGlzLml0ZW1zLmxlbmd0aCAtIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVEb3RJbnRvVmlldyh0aGlzLmN1cnJlbnRTdGVwSW5kZXgpO1xuICAgIHRoaXMucHJldmlvdXNDbGlja0V2ZW50RW1pdHRlci5lbWl0KCk7XG4gIH1cblxuICBuZXh0U2xpZGUoKSB7XG4gICAgY29uc3QgdG90YWxTdGVwcyA9IE1hdGguY2VpbCh0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgaWYgKHRoaXMuY3VycmVudFN0ZXBJbmRleCA+PSB0b3RhbFN0ZXBzIC0gMSkge1xuICAgICAgdGhpcy5jdXJyZW50U3RlcEluZGV4ID0gMDtcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50U3RlcEluZGV4Kys7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IE1hdGgubWluKHRoaXMuY3VycmVudFN0ZXBJbmRleCAqIHRoaXMuaXRlbXNQZXJTbGlkZSwgdGhpcy5pdGVtcy5sZW5ndGggLSB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgIHRoaXMuc2Nyb2xsQWN0aXZlRG90SW50b1ZpZXcodGhpcy5jdXJyZW50U3RlcEluZGV4KTtcbiAgICB0aGlzLm5leHRDbGlja0V2ZW50RW1pdHRlci5lbWl0KCk7XG4gIH1cblxuICB1cGRhdGVPZmZzZXQoKSB7XG4gICAgdGhpcy5vZmZzZXQgPSAtMTAwICogKHRoaXMuY3VycmVudEluZGV4IC8gdGhpcy5pdGVtc1BlclNsaWRlKTtcbiAgICBcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZyAmJiB0aGlzLnNsaWRlc0NvbnRhaW5lcikge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5zbGlkZXNDb250YWluZXIubmF0aXZlRWxlbWVudCwgXG4gICAgICAgICd0cmFuc2Zvcm0nLCBcbiAgICAgICAgYHRyYW5zbGF0ZVgoJHt0aGlzLm9mZnNldH0lKWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxBY3RpdmVEb3RJbnRvVmlldyhpbmRleDogbnVtYmVyKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBkb3RzQ29udGFpbmVyID0gdGhpcy5kb3RzQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKCFkb3RzQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGRvdHMgPSBkb3RzQ29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2RvdCcpO1xuICAgICAgaWYgKCFkb3RzIHx8ICFkb3RzW2luZGV4XSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBhY3RpdmVEb3QgPSBkb3RzW2luZGV4XTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gZG90c0NvbnRhaW5lci5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGRvdFdpZHRoID0gYWN0aXZlRG90Lm9mZnNldFdpZHRoICsgMTA7XG4gICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IGRvdFdpZHRoICogaW5kZXggLSBjb250YWluZXJXaWR0aCAvIDIgKyBkb3RXaWR0aCAvIDI7XG5cbiAgICAgIGRvdHNDb250YWluZXIuc2Nyb2xsVG8oe1xuICAgICAgICBsZWZ0OiBNYXRoLm1heCgwLCBzY3JvbGxQb3NpdGlvbiksXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYy1jYXJvdXNlbC1jb250YWluZXJcIj5cbiAgPGRpdiBcbiAgICBjbGFzcz1cImMtY2Fyb3VzZWwtc2xpZGVzXCIgXG4gICAgI3NsaWRlc0NvbnRhaW5lclxuICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICclKSdcIiBcbiAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudClcIlxuICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiXG4gICAgKG1vdXNldXApPVwib25Nb3VzZVVwKCRldmVudClcIlxuICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgkZXZlbnQpXCJcbiAgICAodG91Y2hzdGFydCk9XCJvblRvdWNoU3RhcnQoJGV2ZW50KVwiIFxuICAgICh0b3VjaG1vdmUpPVwib25Ub3VjaE1vdmUoJGV2ZW50KVwiIFxuICAgICh0b3VjaGVuZCk9XCJvblRvdWNoRW5kKCRldmVudClcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjLWNhcm91c2VsLWZvb3RlclwiPlxuICAgIDxidXR0b24gW2hpZGRlbl09XCJyZW1vdmVBcnJvd3NcIiBjbGFzcz1cImMtY2Fyb3VzZWwtbmF2IHByZXZcIiB0aXRsZT1cIlNsaWRlIGFudGVyaW9yXCIgYXJpYS1sYWJlbD1cIlNsaWRlIGFudGVyaW9yXCIgKGNsaWNrKT1cInByZXZTbGlkZSgpXCI+XG4gICAgICA8bGliLWVsdXgtaWNvbiBbaWNvbl09XCInQ2hldnJvbl9MZWZ0LnN2ZydcIiBbc2l6ZV09XCInMTYnXCIgW3NpemVUeXBlXT1cIidweCdcIiBbY29sb3JdPVwiJyMwMjBGMkUnXCI+PC9saWItZWx1eC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpdiBbaGlkZGVuXT1cInJlbW92ZURvdHNcIiBjbGFzcz1cImMtY2Fyb3VzZWwtZG90c1wiICNkb3RzQ29udGFpbmVyPlxuICAgICAgPHNwYW5cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiZG90XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGluZGV4IG9mIGdldFN0ZXBJbmRleENvdW50KClcIlxuICAgICAgICAoY2xpY2spPVwiZ29Ub1NsaWRlKGluZGV4KVwiXG4gICAgICAgIChrZXl1cCk9XCJnb1RvU2xpZGUoaW5kZXgpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpbmRleCA9PT0gZ2V0Q3VycmVudFN0ZXBJbmRleCgpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGFnaW5hJyArIChpbmRleCArIDEpXCJcbiAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gW2hpZGRlbl09XCJyZW1vdmVBcnJvd3NcIiBjbGFzcz1cImMtY2Fyb3VzZWwtbmF2IG5leHRcIiB0aXRsZT1cIlByw7N4aW1vIHNsaWRlXCIgYXJpYS1sYWJlbD1cIlByw7N4aW1vIHNsaWRlXCIgKGNsaWNrKT1cIm5leHRTbGlkZSgpXCI+XG4gICAgICA8bGliLWVsdXgtaWNvbiBbaWNvbl09XCInQ2hldnJvbl9SaWdodC5zdmcnXCIgW3NpemVdPVwiJzE2J1wiIFtzaXplVHlwZV09XCIncHgnXCIgW2NvbG9yXT1cIicjMDIwRjJFJ1wiPjwvbGliLWVsdXgtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
399
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdWkvbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBb0IsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFjbkMsTUFBTSxPQUFPLHFCQUFxQjtJQXVDaEMsWUFBb0IsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWxDOUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBRXRDLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDdEQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUNsRCx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ2pELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUF1RCxDQUFDO1FBRTFHLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRUgsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixXQUFN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TSxjQUFjLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQztZQUNqRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUM1QyxNQUFNLGNBQWMsR0FBRyxRQUFRLEdBQUcsS0FBSyxHQUFHLGNBQWMsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUU1RSxhQUFhLENBQUMsUUFBUSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDO2dCQUNqQyxRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBN2FVLHFCQUFxQjttR0FBckIscUJBQXFCLHdkQUNTLFVBQVUsa1BDakJyRCwrakRBdUNBLHcvRkR6QlksWUFBWSw0SkFBRSxRQUFROzs0RkFFckIscUJBQXFCO2tCQVBqQyxTQUFTO2lDQUNJLElBQUksWUFDTixtQkFBbUIsV0FHcEIsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDOzhFQUdzQixLQUFLO3NCQUEzRCxlQUFlO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ3pCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFDSSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFFbkIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVJLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVsdXhJY29uIH0gZnJvbSAnLi4vaWNvbic7XG5cbmV4cG9ydCB0eXBlIFByb2R1Y3RJdGVtID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGltYWdlOiBzdHJpbmc7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdsaWItZWx1eC1jYXJvdXNlbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhcm91c2VsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEVsdXhJY29uXSxcbn0pXG5leHBvcnQgY2xhc3MgRWx1eENhcm91c2VsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgQENvbnRlbnRDaGlsZHJlbignY2Fyb3VzZWxJdGVtJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGl0ZW1zITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkKCdkb3RzQ29udGFpbmVyJykgZG90c0NvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NsaWRlc0NvbnRhaW5lcicpIHNsaWRlc0NvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCkgaXRlbXNQZXJTbGlkZTogbnVtYmVyID0gNDtcbiAgQElucHV0KCkgcmVtb3ZlQXJyb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlbW92ZURvdHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b1BsYXlJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgQE91dHB1dCgpIHByZXZpb3VzQ2xpY2tFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgbmV4dENsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGRvdENsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1DbGlja0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e2V2ZW50OiBFdmVudCwgaW5kZXg6IG51bWJlciwgZWxlbWVudDogSFRNTEVsZW1lbnR9PigpO1xuXG4gIGN1cnJlbnRJbmRleCA9IDA7XG4gIGN1cnJlbnRTdGVwSW5kZXggPSAwO1xuICBvZmZzZXQgPSAwO1xuXG4gIHByaXZhdGUgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXJ0WCA9IDA7XG4gIHByaXZhdGUgY3VycmVudFggPSAwO1xuICBwcml2YXRlIGluaXRpYWxPZmZzZXQgPSAwO1xuICBwcml2YXRlIGRyYWdPZmZzZXQgPSAwO1xuICBwcml2YXRlIGNvbnRhaW5lcldpZHRoID0gMDtcbiAgcHJpdmF0ZSBpdGVtV2lkdGggPSAwO1xuICBwcml2YXRlIG1heE9mZnNldCA9IDA7XG4gIHByaXZhdGUgbWluT2Zmc2V0ID0gMDtcbiAgcHJpdmF0ZSBhdXRvUGxheVRpbWVyOiBhbnk7XG4gIHByaXZhdGUgYW5pbWF0aW9uSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHZlbG9jaXR5ID0gMDtcbiAgcHJpdmF0ZSBsYXN0TW92ZVRpbWUgPSAwO1xuICBwcml2YXRlIGxhc3RNb3ZlWCA9IDA7XG4gIHByaXZhdGUgd2FzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSB0b3VjaFN0YXJ0VGltZSA9IDA7XG4gIHByaXZhdGUgdG91Y2hTdGFydFggPSAwO1xuICBwcml2YXRlIHRvdWNoU3RhcnRZID0gMDtcbiAgcHJpdmF0ZSBpc1ZlcnRpY2FsU2Nyb2xsID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmNhbGN1bGF0ZURpbWVuc2lvbnMoKTtcbiAgICB0aGlzLnNldEl0ZW1XaWR0aHMoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbWl0cygpO1xuICAgIHRoaXMuc2V0dXBJdGVtQ2xpY2tMaXN0ZW5lcnMoKTtcblxuICAgIGlmICh0aGlzLmF1dG9QbGF5SW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMuc3RhcnRBdXRvUGxheSgpO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgICB0aGlzLnNldEl0ZW1XaWR0aHMoKTtcbiAgICAgIHRoaXMudXBkYXRlTGltaXRzKCk7XG4gICAgICB0aGlzLmdvVG9GaXJzdFNsaWRlKCk7XG4gICAgICB0aGlzLnNldHVwSXRlbUNsaWNrTGlzdGVuZXJzKCk7XG4gICAgfSk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHdpbmRvdyByZXNpemUgdG8gcmVjYWxjdWxhdGUgZGltZW5zaW9uc1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLm9uUmVzaXplKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdG9wQXV0b1BsYXkoKTtcbiAgICBpZiAodGhpcy5hbmltYXRpb25JZCkge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hbmltYXRpb25JZCk7XG4gICAgfVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB0aGlzLm9uUmVzaXplKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVEaW1lbnNpb25zKCkge1xuICAgIGlmICh0aGlzLnNsaWRlc0NvbnRhaW5lcikge1xuICAgICAgdGhpcy5jb250YWluZXJXaWR0aCA9IHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLml0ZW1XaWR0aCA9IHRoaXMuY29udGFpbmVyV2lkdGggLyB0aGlzLml0ZW1zUGVyU2xpZGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW1pdHMoKSB7XG4gICAgY29uc3QgdG90YWxTdGVwcyA9IE1hdGguY2VpbCh0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgdGhpcy5tYXhPZmZzZXQgPSAwO1xuICAgIHRoaXMubWluT2Zmc2V0ID0gLSgodG90YWxTdGVwcyAtIDEpICogMTAwKTtcbiAgfVxuXG4gIHByaXZhdGUgb25SZXNpemUoKSB7XG4gICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbVdpZHRocygpIHtcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IG1pbldpZHRoID0gYGNhbGMoMTAwJSAvICR7dGhpcy5pdGVtc1BlclNsaWRlfSlgO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpdGVtLm5hdGl2ZUVsZW1lbnQsICdtaW5XaWR0aCcsIG1pbldpZHRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0QXV0b1BsYXkoKSB7XG4gICAgdGhpcy5zdG9wQXV0b1BsYXkoKTtcbiAgICB0aGlzLmF1dG9QbGF5VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgICB0aGlzLm5leHRTbGlkZSgpO1xuICAgICAgfVxuICAgIH0sICh0aGlzLmF1dG9QbGF5SW50ZXJ2YWwgfHwgMCkgKiAxMDAwKTtcbiAgfVxuXG4gIHN0b3BBdXRvUGxheSgpIHtcbiAgICBpZiAodGhpcy5hdXRvUGxheVRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuYXV0b1BsYXlUaW1lcik7XG4gICAgICB0aGlzLmF1dG9QbGF5VGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1vdXNlIGV2ZW50c1xuICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zdGFydERyYWcoZXZlbnQuY2xpZW50WCk7XG4gIH1cblxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnVwZGF0ZURyYWcoZXZlbnQuY2xpZW50WCk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZVVwKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5lbmREcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5lbmREcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVG91Y2ggZXZlbnRzXG4gIG9uVG91Y2hTdGFydChldmVudDogVG91Y2hFdmVudCkge1xuICAgIHRoaXMudG91Y2hTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMudG91Y2hTdGFydFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgdGhpcy50b3VjaFN0YXJ0WSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICB0aGlzLmlzVmVydGljYWxTY3JvbGwgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXJ0RHJhZyhldmVudC50b3VjaGVzWzBdLmNsaWVudFgpO1xuICB9XG5cbiAgb25Ub3VjaE1vdmUoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGN1cnJlbnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuICAgIGNvbnN0IGN1cnJlbnRZID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRZO1xuICAgIGNvbnN0IGRlbHRhWCA9IE1hdGguYWJzKGN1cnJlbnRYIC0gdGhpcy50b3VjaFN0YXJ0WCk7XG4gICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnMoY3VycmVudFkgLSB0aGlzLnRvdWNoU3RhcnRZKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgdmVydGljYWwgc2Nyb2xsXG4gICAgaWYgKGRlbHRhWSA+IGRlbHRhWCAmJiBkZWx0YVkgPiAxMCkge1xuICAgICAgdGhpcy5pc1ZlcnRpY2FsU2Nyb2xsID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy53YXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAndHJhbnNpdGlvbicsICd0cmFuc2Zvcm0gMC40cyBlYXNlLW91dCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBPbmx5IHByZXZlbnQgZGVmYXVsdCBpZiBpdCdzIGEgaG9yaXpvbnRhbCBkcmFnXG4gICAgaWYgKGRlbHRhWCA+IDEwKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy51cGRhdGVEcmFnKGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCk7XG4gICAgfVxuICB9XG5cbiAgb25Ub3VjaEVuZChldmVudDogVG91Y2hFdmVudCkge1xuICAgIGlmICh0aGlzLmlzVmVydGljYWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuaXNWZXJ0aWNhbFNjcm9sbCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB0b3VjaER1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHRoaXMudG91Y2hTdGFydFRpbWU7XG4gICAgY29uc3QgdG91Y2hEaXN0YW5jZSA9IE1hdGguYWJzKHRoaXMuY3VycmVudFggLSB0aGlzLnN0YXJ0WCk7XG4gICAgXG4gICAgLy8gQ29uc2lkZXIgaXQgYSB0YXAgaWYgZHVyYXRpb24gPCAzMDBtcyBhbmQgZGlzdGFuY2UgPCAxMHB4XG4gICAgaWYgKHRvdWNoRHVyYXRpb24gPCAzMDAgJiYgdG91Y2hEaXN0YW5jZSA8IDEwKSB7XG4gICAgICB0aGlzLndhc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xuICAgICAgdGhpcy5lbmREcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEl0ZW1DbGlja0xpc3RlbmVycygpIHtcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGxpc3RlbmVyc1xuICAgICAgY29uc3QgbmV3SXRlbSA9IGl0ZW0ubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBpdGVtLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZT8ucmVwbGFjZUNoaWxkKG5ld0l0ZW0sIGl0ZW0ubmF0aXZlRWxlbWVudCk7XG4gICAgICBcbiAgICAgIC8vIEFkZCBib3RoIGNsaWNrIGFuZCB0b3VjaGVuZCBsaXN0ZW5lcnMgZm9yIGJldHRlciBtb2JpbGUgc3VwcG9ydFxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4obmV3SXRlbSwgJ2NsaWNrJywgKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUl0ZW1DbGljayhldmVudCwgaW5kZXgsIG5ld0l0ZW0pO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKG5ld0l0ZW0sICd0b3VjaGVuZCcsIChldmVudDogVG91Y2hFdmVudCkgPT4ge1xuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0b3VjaGVuZCBpZiBpdCB3YXNuJ3QgYSBkcmFnXG4gICAgICAgIGlmICghdGhpcy53YXNEcmFnZ2luZyAmJiAhdGhpcy5pc1ZlcnRpY2FsU2Nyb2xsKSB7XG4gICAgICAgICAgY29uc3QgdG91Y2hEdXJhdGlvbiA9IERhdGUubm93KCkgLSB0aGlzLnRvdWNoU3RhcnRUaW1lO1xuICAgICAgICAgIGNvbnN0IHRvdWNoRGlzdGFuY2UgPSBNYXRoLmFicyhldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy50b3VjaFN0YXJ0WCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHRvdWNoRHVyYXRpb24gPCAzMDAgJiYgdG91Y2hEaXN0YW5jZSA8IDEwKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVJdGVtQ2xpY2soZXZlbnQsIGluZGV4LCBuZXdJdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJdGVtQ2xpY2soZXZlbnQ6IEV2ZW50LCBpbmRleDogbnVtYmVyLCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIC8vIFByZXZlbnQgY2xpY2sgaWYgaXQgd2FzIHByZWNlZGVkIGJ5IGEgZHJhZ1xuICAgIGlmICh0aGlzLndhc0RyYWdnaW5nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMuaXRlbUNsaWNrRXZlbnRFbWl0dGVyLmVtaXQoe1xuICAgICAgZXZlbnQsXG4gICAgICBpbmRleCxcbiAgICAgIGVsZW1lbnRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnREcmFnKGNsaWVudFg6IG51bWJlcikge1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgdGhpcy53YXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRYID0gY2xpZW50WDtcbiAgICB0aGlzLmN1cnJlbnRYID0gY2xpZW50WDtcbiAgICB0aGlzLmluaXRpYWxPZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICB0aGlzLmRyYWdPZmZzZXQgPSAwO1xuICAgIHRoaXMudmVsb2NpdHkgPSAwO1xuICAgIHRoaXMubGFzdE1vdmVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmxhc3RNb3ZlWCA9IGNsaWVudFg7XG4gICAgXG4gICAgdGhpcy5jYWxjdWxhdGVEaW1lbnNpb25zKCk7XG4gICAgdGhpcy5zdG9wQXV0b1BsYXkoKTtcbiAgICBcbiAgICAvLyBEaXNhYmxlIENTUyB0cmFuc2l0aW9ucyBkdXJpbmcgZHJhZ1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zbGlkZXNDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3RyYW5zaXRpb24nLCAnbm9uZScpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEcmFnKGNsaWVudFg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSByZXR1cm47XG5cbiAgICAvLyBNb3JlIGxlbmllbnQgdGhyZXNob2xkIGZvciBtb2JpbGUgLSBtYXJrIGFzIGRyYWdnaW5nIG9ubHkgZm9yIHNpZ25pZmljYW50IG1vdmVtZW50XG4gICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnModGhpcy5jdXJyZW50WCAtIHRoaXMuc3RhcnRYKTtcbiAgICBpZiAoZGVsdGFYID4gMTUpIHsgLy8gSW5jcmVhc2VkIGZyb20gNXB4IHRvIDE1cHggZm9yIG1vYmlsZVxuICAgICAgdGhpcy53YXNEcmFnZ2luZyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50WCA9IGNsaWVudFg7XG4gICAgY29uc3QgdG90YWxEZWx0YVggPSB0aGlzLmN1cnJlbnRYIC0gdGhpcy5zdGFydFg7XG4gICAgXG4gICAgLy8gQ2FsY3VsYXRlIHZlbG9jaXR5IGZvciBtb21lbnR1bVxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZURlbHRhID0gbm93IC0gdGhpcy5sYXN0TW92ZVRpbWU7XG4gICAgaWYgKHRpbWVEZWx0YSA+IDApIHtcbiAgICAgIHRoaXMudmVsb2NpdHkgPSAoY2xpZW50WCAtIHRoaXMubGFzdE1vdmVYKSAvIHRpbWVEZWx0YTtcbiAgICB9XG4gICAgdGhpcy5sYXN0TW92ZVRpbWUgPSBub3c7XG4gICAgdGhpcy5sYXN0TW92ZVggPSBjbGllbnRYO1xuXG4gICAgLy8gQ29udmVydCBwaXhlbCBtb3ZlbWVudCB0byBwZXJjZW50YWdlXG4gICAgY29uc3QgZHJhZ1BlcmNlbnRhZ2UgPSAodG90YWxEZWx0YVggLyB0aGlzLmNvbnRhaW5lcldpZHRoKSAqIDEwMDtcbiAgICBcbiAgICAvLyBBcHBseSByZXNpc3RhbmNlIGF0IGJvdW5kYXJpZXNcbiAgICBsZXQgcmVzaXN0ZWREcmFnUGVyY2VudGFnZSA9IGRyYWdQZXJjZW50YWdlO1xuICAgIGNvbnN0IHBvdGVudGlhbE9mZnNldCA9IHRoaXMuaW5pdGlhbE9mZnNldCArIGRyYWdQZXJjZW50YWdlO1xuICAgIFxuICAgIGlmIChwb3RlbnRpYWxPZmZzZXQgPiB0aGlzLm1heE9mZnNldCkge1xuICAgICAgY29uc3Qgb3ZlckRyYWcgPSBwb3RlbnRpYWxPZmZzZXQgLSB0aGlzLm1heE9mZnNldDtcbiAgICAgIHJlc2lzdGVkRHJhZ1BlcmNlbnRhZ2UgPSBkcmFnUGVyY2VudGFnZSAtIChvdmVyRHJhZyAqIDAuMyk7XG4gICAgfSBlbHNlIGlmIChwb3RlbnRpYWxPZmZzZXQgPCB0aGlzLm1pbk9mZnNldCkge1xuICAgICAgY29uc3Qgb3ZlckRyYWcgPSB0aGlzLm1pbk9mZnNldCAtIHBvdGVudGlhbE9mZnNldDtcbiAgICAgIHJlc2lzdGVkRHJhZ1BlcmNlbnRhZ2UgPSBkcmFnUGVyY2VudGFnZSArIChvdmVyRHJhZyAqIDAuMyk7XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnT2Zmc2V0ID0gcmVzaXN0ZWREcmFnUGVyY2VudGFnZTtcbiAgICB0aGlzLnVwZGF0ZURyYWdQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEcmFnUG9zaXRpb24oKSB7XG4gICAgY29uc3QgbmV3T2Zmc2V0ID0gdGhpcy5pbml0aWFsT2Zmc2V0ICsgdGhpcy5kcmFnT2Zmc2V0O1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBcbiAgICAgICd0cmFuc2Zvcm0nLCBcbiAgICAgIGB0cmFuc2xhdGVYKCR7bmV3T2Zmc2V0fSUpYFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGVuZERyYWcoKSB7XG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcpIHJldHVybjtcblxuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIFxuICAgIC8vIENsZWFyIHRoZSB3YXNEcmFnZ2luZyBmbGFnIGFmdGVyIGEgc2hvcnRlciBkZWxheSBmb3IgbW9iaWxlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLndhc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgfSwgNTApOyAvLyBSZWR1Y2VkIGZyb20gMTAwbXMgdG8gNTBtc1xuICAgIFxuICAgIC8vIFJlLWVuYWJsZSBDU1MgdHJhbnNpdGlvbnNcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2l0aW9uJywgJ3RyYW5zZm9ybSAwLjRzIGVhc2Utb3V0Jyk7XG5cbiAgICBjb25zdCBmaW5hbE9mZnNldCA9IHRoaXMuaW5pdGlhbE9mZnNldCArIHRoaXMuZHJhZ09mZnNldDtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSA0MDsgLy8gUmVkdWNlZCBmcm9tIDUwcHggdG8gNDBweCBmb3IgbW9iaWxlXG4gICAgY29uc3QgZHJhZ0Rpc3RhbmNlID0gTWF0aC5hYnModGhpcy5jdXJyZW50WCAtIHRoaXMuc3RhcnRYKTtcbiAgICBcbiAgICAvLyBDaGVjayBmb3IgbW9tZW50dW0gKHZlbG9jaXR5LWJhc2VkIHNsaWRlIGNoYW5nZSlcbiAgICBjb25zdCBtb21lbnR1bVRocmVzaG9sZCA9IDAuMzsgLy8gUmVkdWNlZCBmcm9tIDAuNSB0byAwLjNcbiAgICBjb25zdCBoYXNTaWduaWZpY2FudFZlbG9jaXR5ID0gTWF0aC5hYnModGhpcy52ZWxvY2l0eSkgPiBtb21lbnR1bVRocmVzaG9sZDtcbiAgICBcbiAgICBpZiAoZHJhZ0Rpc3RhbmNlID4gdGhyZXNob2xkIHx8IGhhc1NpZ25pZmljYW50VmVsb2NpdHkpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdPZmZzZXQgPiAwIHx8IChoYXNTaWduaWZpY2FudFZlbG9jaXR5ICYmIHRoaXMudmVsb2NpdHkgPiAwKSkge1xuICAgICAgICAvLyBEcmFnZ2VkIHJpZ2h0IG9yIGhhcyBwb3NpdGl2ZSB2ZWxvY2l0eSAtIGdvIHRvIHByZXZpb3VzIHNsaWRlXG4gICAgICAgIHRoaXMucHJldlNsaWRlKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZHJhZ09mZnNldCA8IDAgfHwgKGhhc1NpZ25pZmljYW50VmVsb2NpdHkgJiYgdGhpcy52ZWxvY2l0eSA8IDApKSB7XG4gICAgICAgIC8vIERyYWdnZWQgbGVmdCBvciBoYXMgbmVnYXRpdmUgdmVsb2NpdHkgLSBnbyB0byBuZXh0IHNsaWRlXG4gICAgICAgIHRoaXMubmV4dFNsaWRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTbWFsbCBkcmFnLCBzbmFwIGJhY2sgdG8gY3VycmVudCBwb3NpdGlvblxuICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTbWFsbCBkcmFnLCBzbmFwIGJhY2sgdG8gY3VycmVudCBwb3NpdGlvblxuICAgICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBkcmFnIHN0YXRlXG4gICAgdGhpcy5kcmFnT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnZlbG9jaXR5ID0gMDtcbiAgICBcbiAgICAvLyBSZXN0YXJ0IGF1dG9wbGF5IGlmIGl0IHdhcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuYXV0b1BsYXlJbnRlcnZhbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0YXJ0QXV0b1BsYXkoKSwgMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RlcEluZGV4Q291bnQoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHRvdGFsU3RlcHMgPSBNYXRoLmNlaWwodGhpcy5pdGVtcy5sZW5ndGggLyB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0b3RhbFN0ZXBzIH0sIChfLCBpKSA9PiBpKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRTdGVwSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RlcEluZGV4OyBcbiAgfVxuXG4gIGdvVG9GaXJzdFNsaWRlKCkge1xuICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPSAwO1xuICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVEb3RJbnRvVmlldygwKTtcbiAgfVxuXG4gIGdvVG9TbGlkZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50U3RlcEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5jdXJyZW50SW5kZXggPSBNYXRoLm1pbihpbmRleCAqIHRoaXMuaXRlbXNQZXJTbGlkZSwgdGhpcy5pdGVtcy5sZW5ndGggLSB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVEb3RJbnRvVmlldyhpbmRleCk7XG4gICAgdGhpcy5kb3RDbGlja0V2ZW50RW1pdHRlci5lbWl0KCk7XG4gIH1cblxuICBwcmV2U2xpZGUoKSB7XG4gICAgY29uc3QgdG90YWxTdGVwcyA9IE1hdGguY2VpbCh0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgXG4gICAgaWYgKHRoaXMuY3VycmVudFN0ZXBJbmRleCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleC0tO1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSB0aGlzLmN1cnJlbnRTdGVwSW5kZXggKiB0aGlzLml0ZW1zUGVyU2xpZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFN0ZXBJbmRleCA9IHRvdGFsU3RlcHMgLSAxO1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBNYXRoLm1pbih0aGlzLmN1cnJlbnRTdGVwSW5kZXggKiB0aGlzLml0ZW1zUGVyU2xpZGUsIHRoaXMuaXRlbXMubGVuZ3RoIC0gdGhpcy5pdGVtc1BlclNsaWRlKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy51cGRhdGVPZmZzZXQoKTtcbiAgICB0aGlzLnNjcm9sbEFjdGl2ZURvdEludG9WaWV3KHRoaXMuY3VycmVudFN0ZXBJbmRleCk7XG4gICAgdGhpcy5wcmV2aW91c0NsaWNrRXZlbnRFbWl0dGVyLmVtaXQoKTtcbiAgfVxuXG4gIG5leHRTbGlkZSgpIHtcbiAgICBjb25zdCB0b3RhbFN0ZXBzID0gTWF0aC5jZWlsKHRoaXMuaXRlbXMubGVuZ3RoIC8gdGhpcy5pdGVtc1BlclNsaWRlKTtcbiAgICBpZiAodGhpcy5jdXJyZW50U3RlcEluZGV4ID49IHRvdGFsU3RlcHMgLSAxKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXggPSAwO1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRTdGVwSW5kZXgrKztcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gTWF0aC5taW4odGhpcy5jdXJyZW50U3RlcEluZGV4ICogdGhpcy5pdGVtc1BlclNsaWRlLCB0aGlzLml0ZW1zLmxlbmd0aCAtIHRoaXMuaXRlbXNQZXJTbGlkZSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlT2Zmc2V0KCk7XG4gICAgdGhpcy5zY3JvbGxBY3RpdmVEb3RJbnRvVmlldyh0aGlzLmN1cnJlbnRTdGVwSW5kZXgpO1xuICAgIHRoaXMubmV4dENsaWNrRXZlbnRFbWl0dGVyLmVtaXQoKTtcbiAgfVxuXG4gIHVwZGF0ZU9mZnNldCgpIHtcbiAgICB0aGlzLm9mZnNldCA9IC0xMDAgKiAodGhpcy5jdXJyZW50SW5kZXggLyB0aGlzLml0ZW1zUGVyU2xpZGUpO1xuICAgIFxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nICYmIHRoaXMuc2xpZGVzQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnNsaWRlc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBcbiAgICAgICAgJ3RyYW5zZm9ybScsIFxuICAgICAgICBgdHJhbnNsYXRlWCgke3RoaXMub2Zmc2V0fSUpYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbEFjdGl2ZURvdEludG9WaWV3KGluZGV4OiBudW1iZXIpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRvdHNDb250YWluZXIgPSB0aGlzLmRvdHNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIWRvdHNDb250YWluZXIpIHJldHVybjtcblxuICAgICAgY29uc3QgZG90cyA9IGRvdHNDb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZG90Jyk7XG4gICAgICBpZiAoIWRvdHMgfHwgIWRvdHNbaW5kZXhdKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGFjdGl2ZURvdCA9IGRvdHNbaW5kZXhdO1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBkb3RzQ29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgZG90V2lkdGggPSBhY3RpdmVEb3Qub2Zmc2V0V2lkdGggKyAxMDtcbiAgICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gZG90V2lkdGggKiBpbmRleCAtIGNvbnRhaW5lcldpZHRoIC8gMiArIGRvdFdpZHRoIC8gMjtcblxuICAgICAgZG90c0NvbnRhaW5lci5zY3JvbGxUbyh7XG4gICAgICAgIGxlZnQ6IE1hdGgubWF4KDAsIHNjcm9sbFBvc2l0aW9uKSxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjLWNhcm91c2VsLWNvbnRhaW5lclwiPlxuICA8ZGl2IFxuICAgIGNsYXNzPVwiYy1jYXJvdXNlbC1zbGlkZXNcIiBcbiAgICAjc2xpZGVzQ29udGFpbmVyXG4gICAgW3N0eWxlLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlWCgnICsgb2Zmc2V0ICsgJyUpJ1wiIFxuICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiXG4gICAgKG1vdXNlbW92ZSk9XCJvbk1vdXNlTW92ZSgkZXZlbnQpXCJcbiAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoJGV2ZW50KVwiXG4gICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKCRldmVudClcIlxuICAgICh0b3VjaHN0YXJ0KT1cIm9uVG91Y2hTdGFydCgkZXZlbnQpXCIgXG4gICAgKHRvdWNobW92ZSk9XCJvblRvdWNoTW92ZSgkZXZlbnQpXCIgXG4gICAgKHRvdWNoZW5kKT1cIm9uVG91Y2hFbmQoJGV2ZW50KVwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImMtY2Fyb3VzZWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBbaGlkZGVuXT1cInJlbW92ZUFycm93c1wiIGNsYXNzPVwiYy1jYXJvdXNlbC1uYXYgcHJldlwiIHRpdGxlPVwiU2xpZGUgYW50ZXJpb3JcIiBhcmlhLWxhYmVsPVwiU2xpZGUgYW50ZXJpb3JcIiAoY2xpY2spPVwicHJldlNsaWRlKClcIj5cbiAgICAgIDxsaWItZWx1eC1pY29uIFtpY29uXT1cIidDaGV2cm9uX0xlZnQuc3ZnJ1wiIFtzaXplXT1cIicxNidcIiBbc2l6ZVR5cGVdPVwiJ3B4J1wiIFtjb2xvcl09XCInIzAyMEYyRSdcIj48L2xpYi1lbHV4LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IFtoaWRkZW5dPVwicmVtb3ZlRG90c1wiIGNsYXNzPVwiYy1jYXJvdXNlbC1kb3RzXCIgI2RvdHNDb250YWluZXI+XG4gICAgICA8c3BhblxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJkb3RcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgaW5kZXggb2YgZ2V0U3RlcEluZGV4Q291bnQoKVwiXG4gICAgICAgIChjbGljayk9XCJnb1RvU2xpZGUoaW5kZXgpXCJcbiAgICAgICAgKGtleXVwKT1cImdvVG9TbGlkZShpbmRleClcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImluZGV4ID09PSBnZXRDdXJyZW50U3RlcEluZGV4KClcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInRydWVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwYWdpbmEnICsgKGluZGV4ICsgMSlcIlxuICAgICAgPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvbiBbaGlkZGVuXT1cInJlbW92ZUFycm93c1wiIGNsYXNzPVwiYy1jYXJvdXNlbC1uYXYgbmV4dFwiIHRpdGxlPVwiUHLDs3hpbW8gc2xpZGVcIiBhcmlhLWxhYmVsPVwiUHLDs3hpbW8gc2xpZGVcIiAoY2xpY2spPVwibmV4dFNsaWRlKClcIj5cbiAgICAgIDxsaWItZWx1eC1pY29uIFtpY29uXT1cIidDaGV2cm9uX1JpZ2h0LnN2ZydcIiBbc2l6ZV09XCInMTYnXCIgW3NpemVUeXBlXT1cIidweCdcIiBbY29sb3JdPVwiJyMwMjBGMkUnXCI+PC9saWItZWx1eC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|