ng-virtual-list 16.12.8 → 16.12.9
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/ng-scroll-view/const/index.mjs +2 -2
- package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +108 -28
- package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +9 -2
- package/esm2022/lib/ng-virtual-list.component.mjs +2 -2
- package/fesm2022/ng-virtual-list.mjs +116 -29
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-scroll-view/const/index.d.ts +1 -1
- package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +8 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, from, of, Subject, takeUntil, tap } from 'rxjs';
|
|
2
|
+
import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, from, of, Subject, switchMap, take, takeUntil, tap } from 'rxjs';
|
|
3
3
|
import { ScrollBox } from './utils';
|
|
4
4
|
import { NgScrollBarComponent } from "../ng-scroll-bar/ng-scroll-bar.component";
|
|
5
5
|
import { BEHAVIOR_INSTANT, DEFAULT_MAX_MOTION_BLUR, DEFAULT_MOTION_BLUR, DEFAULT_MOTION_BLUR_ENABLED, DEFAULT_OVERLAPPING_SCROLLBAR, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_SCROLLBAR_MIN_SIZE, DEFAULT_SCROLLBAR_THICKNESS, LEFT_PROP_NAME, PX, SCROLLER_SCROLL, TOP_PROP_NAME, } from '../../const';
|
|
@@ -228,6 +228,13 @@ export class NgScrollerComponent extends NgScrollView {
|
|
|
228
228
|
}
|
|
229
229
|
ngAfterViewInit() {
|
|
230
230
|
super.ngAfterViewInit();
|
|
231
|
+
this.$resizeViewport.pipe(takeUntil(this._$unsubscribe), debounceTime(0), tap(() => {
|
|
232
|
+
this.snapIfNeed();
|
|
233
|
+
}), switchMap(() => {
|
|
234
|
+
return this.$scroll.pipe(takeUntil(this._$unsubscribe), take(1), tap(() => {
|
|
235
|
+
this.snapIfNeed();
|
|
236
|
+
}));
|
|
237
|
+
})).subscribe();
|
|
231
238
|
const $filter = of(this.filter), $motionBlur = this.$motionBlur, $maxMotionBlur = this.$maxMotionBlur, $motionBlurEnabled = this.$motionBlurEnabled, $isVertical = this.$isVertical;
|
|
232
239
|
const $scrollbarScroll = this.$scrollbarScroll;
|
|
233
240
|
$scrollbarScroll.pipe(takeUntil(this._$unsubscribe), debounceTime(50), tap(() => {
|
|
@@ -522,4 +529,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
522
529
|
}], motionBlurEnabled: [{
|
|
523
530
|
type: Input
|
|
524
531
|
}] } });
|
|
525
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy1zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNySSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXBDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWhGLE9BQU8sRUFDTCxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSx5QkFBeUIsRUFDckosNkJBQTZCLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsYUFBYSxHQUMzSSxNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQW1CLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXpGLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7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LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb20sIG9mLCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTY3JvbGxCb3ggfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSWQsIFRleHREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XHJcbmltcG9ydCB7IE5nU2Nyb2xsQmFyQ29tcG9uZW50IH0gZnJvbSBcIi4uL25nLXNjcm9sbC1iYXIvbmctc2Nyb2xsLWJhci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgR3JhZGllbnRDb2xvclBvc2l0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL2dyYWRpZW50LWNvbG9yLXBvc2l0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgQkVIQVZJT1JfSU5TVEFOVCwgREVGQVVMVF9NQVhfTU9USU9OX0JMVVIsIERFRkFVTFRfTU9USU9OX0JMVVIsIERFRkFVTFRfTU9USU9OX0JMVVJfRU5BQkxFRCwgREVGQVVMVF9PVkVSTEFQUElOR19TQ1JPTExCQVIsIERFRkFVTFRfU0NST0xMQkFSX0VOQUJMRUQsXHJcbiAgREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkUsIERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFLCBERUZBVUxUX1NDUk9MTEJBUl9USElDS05FU1MsIExFRlRfUFJPUF9OQU1FLCBQWCwgU0NST0xMRVJfU0NST0xMLCBUT1BfUFJPUF9OQU1FLFxyXG59IGZyb20gJy4uLy4uL2NvbnN0JztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElTY3JvbGxUb1BhcmFtcywgTmdTY3JvbGxWaWV3LCBTQ1JPTExfVklFV19JTlZFUlNJT04gfSBmcm9tICcuLi9uZy1zY3JvbGwtdmlldyc7XHJcbmltcG9ydCB7IElTY3JvbGxCYXJEcmFnRXZlbnQgfSBmcm9tICcuLi9uZy1zY3JvbGwtYmFyL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBTQ1JPTExfVklFV19OT1JNQUxJWkVfVkFMVUVfRlJPTV9aRVJPLCBTQ1JPTExfVklFV19PVkVSU0NST0xMX0VOQUJMRUQgfSBmcm9tICcuLi9uZy1zY3JvbGwtdmlldy9jb25zdCc7XHJcbmltcG9ydCB7IElTaXplIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5jb25zdCBUT1AgPSAndG9wJyxcclxuICBMRUZUID0gJ2xlZnQnLFxyXG4gIElOU1RBTlQgPSAnaW5zdGFudCcgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgTU9USU9OX0JMVVIgPSAnbW90aW9uLWJsdXInO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNDUk9MTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9TQ1JPTEwpO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBzY3JvbGxlciBmb3IgdGhlIE5nVmlydHVhbExpc3QgaXRlbSBjb21wb25lbnRcclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctc2Nyb2xsZXInLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgeyBwcm92aWRlOiBTQ1JPTExfVklFV19JTlZFUlNJT04sIHVzZVZhbHVlOiBmYWxzZSB9LFxyXG4gICAgeyBwcm92aWRlOiBTQ1JPTExfVklFV19OT1JNQUxJWkVfVkFMVUVfRlJPTV9aRVJPLCB1c2VWYWx1ZTogdHJ1ZSB9LFxyXG4gICAgeyBwcm92aWRlOiBTQ1JPTExfVklFV19PVkVSU0NST0xMX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctc2Nyb2xsZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXNjcm9sbGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1Njcm9sbGVyQ29tcG9uZW50IGV4dGVuZHMgTmdTY3JvbGxWaWV3IHtcclxuICBAVmlld0NoaWxkKCdzY3JvbGxCYXInLCB7IHJlYWQ6IE5nU2Nyb2xsQmFyQ29tcG9uZW50IH0pXHJcbiAgcmVhZG9ubHkgc2Nyb2xsQmFyOiBOZ1Njcm9sbEJhckNvbXBvbmVudCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVyJylcclxuICByZWFkb25seSBmaWx0ZXI6IEVsZW1lbnRSZWY8U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcmVhZG9ubHkgb25TY3JvbGxiYXJWaXNpYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExCQVJfRU5BQkxFRCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhckVuYWJsZWQgPSB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyRW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhckVuYWJsZWQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2Nyb2xsYmFyRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhckludGVyYWN0aXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NDUk9MTEJBUl9JTlRFUkFDVElWRSk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhckludGVyYWN0aXZlID0gdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJJbnRlcmFjdGl2ZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJJbnRlcmFjdGl2ZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c2VkRWxlbWVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJGZvY3VzZWRFbGVtZW50ID0gdGhpcy5fJGZvY3VzZWRFbGVtZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBmb2N1c2VkRWxlbWVudCh2OiBJZCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuXyRmb2N1c2VkRWxlbWVudC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgZm9jdXNlZEVsZW1lbnQoKSB7IHJldHVybiB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfT1ZFUkxBUFBJTkdfU0NST0xMQkFSKTtcclxuICByZWFkb25seSAkb3ZlcmxhcHBpbmdTY3JvbGxiYXIgPSB0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG92ZXJsYXBwaW5nU2Nyb2xsYmFyKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG92ZXJsYXBwaW5nU2Nyb2xsYmFyKCkgeyByZXR1cm4gdGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbnRlbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRjb250ZW50ID0gdGhpcy5fJGZvY3VzZWRFbGVtZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb250ZW50KHY6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fJGNvbnRlbnQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kY29udGVudC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgY29udGVudCgpIHsgcmV0dXJuIHRoaXMuXyRjb250ZW50LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkbG9hZGluZyA9IHRoaXMuXyRsb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBsb2FkaW5nKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRsb2FkaW5nLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBsb2FkaW5nKCkgeyByZXR1cm4gdGhpcy5fJGxvYWRpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY2xhc3NlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oe30pO1xyXG4gIHJlYWRvbmx5ICRjbGFzc2VzID0gdGhpcy5fJGNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNsYXNzZXModjogeyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfSkge1xyXG4gICAgaWYgKHRoaXMuXyRjbGFzc2VzLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGNsYXNzZXMoKSB7IHJldHVybiB0aGlzLl8kY2xhc3Nlcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJNaW5TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyTWluU2l6ZSA9IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJNaW5TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJHNjcm9sbGJhck1pblNpemUubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhck1pblNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaGlja25lc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TQ1JPTExCQVJfVEhJQ0tORVNTKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyVGhpY2tuZXNzID0gdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyVGhpY2tuZXNzKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJUaGlja25lc3MoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciA9IHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaHVtYlJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2Nyb2xsYmFyVGh1bWJSZW5kZXJlcigpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRodW1iUGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtwcm9wTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyVGh1bWJQYXJhbXMgPSB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRodW1iUGFyYW1zKHY6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhclRodW1iUGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG1vdGlvbkJsdXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8ICdkaXNhYmxlZCc+KERFRkFVTFRfTU9USU9OX0JMVVIpO1xyXG4gIHJlYWRvbmx5ICRtb3Rpb25CbHVyID0gdGhpcy5fJG1vdGlvbkJsdXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1vdGlvbkJsdXIodjogbnVtYmVyIHwgJ2Rpc2FibGVkJykge1xyXG4gICAgaWYgKHRoaXMuXyRtb3Rpb25CbHVyLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJG1vdGlvbkJsdXIubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG1vdGlvbkJsdXIoKSB7IHJldHVybiB0aGlzLl8kbW90aW9uQmx1ci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhNb3Rpb25CbHVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX01PVElPTl9CTFVSKTtcclxuICByZWFkb25seSAkbWF4TW90aW9uQmx1ciA9IHRoaXMuXyRtYXhNb3Rpb25CbHVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBtYXhNb3Rpb25CbHVyKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRtYXhNb3Rpb25CbHVyLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJG1heE1vdGlvbkJsdXIubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG1heE1vdGlvbkJsdXIoKSB7IHJldHVybiB0aGlzLl8kbWF4TW90aW9uQmx1ci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtb3Rpb25CbHVyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9NT1RJT05fQkxVUl9FTkFCTEVEKTtcclxuICByZWFkb25seSAkbW90aW9uQmx1ckVuYWJsZWQgPSB0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1vdGlvbkJsdXJFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG1vdGlvbkJsdXJFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbENsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuICByZWFkb25seSAkYWN0dWFsQ2xhc3NlcyA9IHRoaXMuXyRhY3R1YWxDbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY29udGFpbmVyQ2xhc3NlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oe30pO1xyXG4gIHJlYWRvbmx5ICRjb250YWluZXJDbGFzc2VzID0gdGhpcy5fJGNvbnRhaW5lckNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aHVtYkdyYWRpZW50UG9zaXRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcmFkaWVudENvbG9yUG9zaXRpb25zPihbMCwgMF0pO1xyXG4gIHJlYWRvbmx5ICR0aHVtYkdyYWRpZW50UG9zaXRpb25zID0gdGhpcy5fJHRodW1iR3JhZGllbnRQb3NpdGlvbnMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aHVtYlNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHRodW1iU2l6ZSA9IHRoaXMuXyR0aHVtYlNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aHVtYkNvbG9yUG9zaXRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcmFkaWVudENvbG9yUG9zaXRpb25zPihbMCwgMF0pO1xyXG4gIHJlYWRvbmx5ICR0aHVtYkNvbG9yUG9zaXRpb25zID0gdGhpcy5fJHRodW1iQ29sb3JQb3NpdGlvbnMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxUaHVtYlNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJGFjdHVhbFRodW1iU2l6ZSA9IHRoaXMuXyRhY3R1YWxUaHVtYlNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJTaG93ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclNob3cgPSB0aGlzLl8kc2Nyb2xsYmFyU2hvdy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNob3cgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkc2hvdyA9IHRoaXMuXyRzaG93LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlcGFyZWRTaWduYWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkcHJlcGFyZWRTaWduYWwgPSB0aGlzLl8kcHJlcGFyZWRTaWduYWwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRsaXN0U3R5bGVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IHBlcnNwZWN0aXZlT3JpZ2luOiBzdHJpbmcgfT4oeyBwZXJzcGVjdGl2ZU9yaWdpbjogJ2NlbnRlcicgfSk7XHJcbiAgcmVhZG9ubHkgJGxpc3RTdHlsZXMgPSB0aGlzLl8kbGlzdFN0eWxlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQm94ID0gbmV3IFNjcm9sbEJveCgpO1xyXG5cclxuICBnZXQgaG9zdCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNjcm9sbFZpZXdwb3J0Py5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclNjcm9sbCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclNjcm9sbCA9IHRoaXMuXyRzY3JvbGxiYXJTY3JvbGwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVkID0gZmFsc2U7XHJcbiAgc2V0IHByZXBhcmVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9wcmVwYXJlZCAhPT0gdikge1xyXG4gICAgICB0aGlzLl9wcmVwYXJlZCA9IHY7XHJcbiAgICAgIHRoaXMuXyRwcmVwYXJlZFNpZ25hbC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNldFgoeDogbnVtYmVyLCBzbmFwOiBib29sZWFuID0gdHJ1ZSwgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgaWYgKHggIT09IHVuZGVmaW5lZCAmJiAhTnVtYmVyLmlzTmFOKHgpKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRGlyZWN0aW9uKHgsIHRoaXMuX3gpO1xyXG5cclxuICAgICAgdGhpcy5feCA9IHRoaXMuX2FjdHVhbFggPSB4O1xyXG5cclxuICAgICAgY29uc3Qgb3ZlcnJpZGRlbiA9IG5vcm1hbGl6ZSA/IHRoaXMubm9ybWFsaXplU2Nyb2xsU2l6ZSgpIDogZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLnJlZnJlc2hDb29yZGluYXRlKHRoaXMuX3gsIHRoaXMuX3kpO1xyXG5cclxuICAgICAgaWYgKCFvdmVycmlkZGVuKSB7XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlVmVsb2NpdHkoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuXHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVQZXJzcGVjdGl2ZSgpO1xyXG5cclxuICAgICAgaWYgKHNuYXApIHtcclxuICAgICAgICB0aGlzLmNoZWNrSW50ZXJzZWN0aW9uQ29tcG9uZW50KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBzZXRZKHk6IG51bWJlciwgc25hcDogYm9vbGVhbiA9IHRydWUsIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGlmICh5ICE9PSB1bmRlZmluZWQgJiYgIU51bWJlci5pc05hTih5KSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZURpcmVjdGlvbih5LCB0aGlzLl95KTtcclxuXHJcbiAgICAgIHRoaXMuX3kgPSB0aGlzLl9hY3R1YWxZID0geTtcclxuXHJcbiAgICAgIGNvbnN0IG92ZXJyaWRkZW4gPSBub3JtYWxpemUgPyB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKSA6IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5yZWZyZXNoQ29vcmRpbmF0ZSh0aGlzLl94LCB0aGlzLl95KTtcclxuXHJcbiAgICAgIGlmICghb3ZlcnJpZGRlbikge1xyXG4gICAgICAgIHRoaXMubWVhc3VyZVZlbG9jaXR5KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcblxyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUGVyc3BlY3RpdmUoKTtcclxuXHJcbiAgICAgIGlmIChzbmFwKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0ludGVyc2VjdGlvbkNvbXBvbmVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBzZXQgc3RhcnRMYXlvdXRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgIT09IHYpIHtcclxuICAgICAgdGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgPSB2O1xyXG5cclxuICAgICAgdGhpcy5yZWZyZXNoQ29vcmRpbmF0ZSh0aGlzLl94LCB0aGlzLl95KTtcclxuXHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVQZXJzcGVjdGl2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvdmVycmlkZSBnZXQgc3RhcnRMYXlvdXRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl9zdGFydExheW91dE9mZnNldDsgfVxyXG5cclxuICBwcml2YXRlIF8kdmlld0luaXRpYWxpemVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJHZpZXdJbml0aWFsaXplZCA9IHRoaXMuXyR2aWV3SW5pdGlhbGl6ZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzU2Nyb2xsYmFyVXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBpc1Njcm9sbGJhclVzZXJBY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF8kcmVzaXplVmlld3BvcnQgPSBuZXcgU3ViamVjdDxJU2l6ZT4oKTtcclxuICByZWFkb25seSAkcmVzaXplVmlld3BvcnQgPSB0aGlzLl8kcmVzaXplVmlld3BvcnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByb3RlY3RlZCBfJHJlc2l6ZUNvbnRlbnQgPSBuZXcgU3ViamVjdDxJU2l6ZT4oKTtcclxuICByZWFkb25seSAkcmVzaXplQ29udGVudCA9IHRoaXMuXyRyZXNpemVDb250ZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcm90ZWN0ZWQgX2ZpbHRlcklkOiBzdHJpbmc7XHJcblxyXG4gIHByb3RlY3RlZCBfZmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICB0aGlzLl9maWx0ZXJJZCA9IGAke3RoaXMuX3NlcnZpY2UuaWR9LSR7TU9USU9OX0JMVVJ9YDtcclxuICAgIHRoaXMuX2ZpbHRlciA9IGB1cmwoIyR7dGhpcy5fZmlsdGVySWR9KWA7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuXHJcbiAgICBjb25zdCAkZmlsdGVyID0gb2YodGhpcy5maWx0ZXIpLFxyXG4gICAgICAkbW90aW9uQmx1ciA9IHRoaXMuJG1vdGlvbkJsdXIsXHJcbiAgICAgICRtYXhNb3Rpb25CbHVyID0gdGhpcy4kbWF4TW90aW9uQmx1cixcclxuICAgICAgJG1vdGlvbkJsdXJFbmFibGVkID0gdGhpcy4kbW90aW9uQmx1ckVuYWJsZWQsXHJcbiAgICAgICRpc1ZlcnRpY2FsID0gdGhpcy4kaXNWZXJ0aWNhbDtcclxuXHJcbiAgICBjb25zdCAkc2Nyb2xsYmFyU2Nyb2xsID0gdGhpcy4kc2Nyb2xsYmFyU2Nyb2xsO1xyXG4gICAgJHNjcm9sbGJhclNjcm9sbC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDUwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRyb3BWZWxvY2l0eSgpO1xyXG4gICAgICAgIHRoaXMuZmlyZVNjcm9sbEV2ZW50KGZhbHNlKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRhdmVyYWdlVmVsb2NpdHkgPSB0aGlzLiRhdmVyYWdlVmVsb2NpdHk7XHJcbiAgICBjb21iaW5lTGF0ZXN0KFskaXNWZXJ0aWNhbCwgJGF2ZXJhZ2VWZWxvY2l0eSwgJGZpbHRlciwgJG1vdGlvbkJsdXJFbmFibGVkLCAkbW90aW9uQmx1ciwgJG1heE1vdGlvbkJsdXJdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKChbLCAsIGYsIGUsIG1iXSkgPT4gISFmICYmICghIWUgJiYgbWIgIT09IDApKSxcclxuICAgICAgdGFwKChbaXNWZXJ0aWNhbCwgdiwgZmlsdGVyLCAsIG1iLCBtYk1heF0pID0+IHtcclxuICAgICAgICBjb25zdCBfdiA9IHYgKiAobWIgYXMgbnVtYmVyKSwgdmFsdWUgPSBfdiA+IG1iTWF4ID8gbWJNYXggOiBfdjtcclxuICAgICAgICBmaWx0ZXIhLm5hdGl2ZUVsZW1lbnQuc2V0U3RkRGV2aWF0aW9uKGlzVmVydGljYWwgPyAwIDogdiAqIHZhbHVlLCBpc1ZlcnRpY2FsID8gdiAqIHZhbHVlIDogMCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoNTApLFxyXG4gICAgICB0YXAoKFssICwgZmlsdGVyLCAsXSkgPT4ge1xyXG4gICAgICAgIGZpbHRlciEubmF0aXZlRWxlbWVudC5zZXRTdGREZXZpYXRpb24oMCwgMCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkcHJlcGFyZSA9IHRoaXMuJHByZXBhcmVkU2lnbmFsO1xyXG4gICAgJHByZXBhcmUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXJIYW5kbGVyKHRydWUsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxiYXJFbmFibGVkID0gdGhpcy4kc2Nyb2xsYmFyRW5hYmxlZCxcclxuICAgICAgJHNjcm9sbGJhclNob3cgPSB0aGlzLiRzY3JvbGxiYXJTaG93O1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoWyRzY3JvbGxiYXJFbmFibGVkLCAkc2Nyb2xsYmFyU2hvdywgdGhpcy4kcHJlcGFyZWRTaWduYWxdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKChbc2Nyb2xsYmFyRW5hYmxlZCwgc2Nyb2xsYmFyU2hvdywgcHJlcGFyZWRdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHNob3cubmV4dChzY3JvbGxiYXJFbmFibGVkICYmIHNjcm9sbGJhclNob3cgJiYgcHJlcGFyZWQpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHN0YXJ0T2Zmc2V0ID0gdGhpcy4kc3RhcnRPZmZzZXQsXHJcbiAgICAgICRlbmRPZmZzZXQgPSB0aGlzLiRlbmRPZmZzZXQsXHJcbiAgICAgICRzY3JvbGxiYXJNaW5TaXplID0gdGhpcy4kc2Nyb2xsYmFyTWluU2l6ZSxcclxuICAgICAgJHRodW1iU2l6ZSA9IHRoaXMuJHRodW1iU2l6ZTtcclxuXHJcbiAgICBmcm9tKFskZW5kT2Zmc2V0LCAkc3RhcnRPZmZzZXQsICR0aHVtYlNpemUsICRzY3JvbGxiYXJNaW5TaXplLCAkaXNWZXJ0aWNhbF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICR1cGRhdGVTY3JvbGxCYXIgPSB0aGlzLiR1cGRhdGVTY3JvbGxCYXI7XHJcblxyXG4gICAgJHVwZGF0ZVNjcm9sbEJhci5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFySGFuZGxlcighdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRncmFiYmluZyA9IHRoaXMuJGdyYWJiaW5nO1xyXG4gICAgJGdyYWJiaW5nLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5ncmFiYmluZyA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRjbGFzc2VzLCB0aGlzLiRkaXJlY3Rpb24sIHRoaXMuJGdyYWJiaW5nLCB0aGlzLiRtb3Rpb25CbHVyRW5hYmxlZF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoW2NsYXNzZXMsIGRpcmVjdGlvbiwgZ3JhYmJpbmcsIGZpbHRlcmVkXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxDbGFzc2VzLm5leHQoeyAuLi5jbGFzc2VzLCBbZGlyZWN0aW9uXTogdHJ1ZSwgZ3JhYmJpbmcsIGZpbHRlcmVkIH0pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kY29udGVudEJvdW5kcywgdGhpcy4kdmlld3BvcnRCb3VuZHMsIHRoaXMuJGlzVmVydGljYWwsIHRoaXMuJGRpcmVjdGlvbiwgdGhpcy4kZ3JhYmJpbmcsIHRoaXMuJHNjcm9sbGJhckVuYWJsZWQsIHRoaXMuJG92ZXJsYXBwaW5nU2Nyb2xsYmFyXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKChbY29udGVudEJvdW5kcywgdmlld3BvcnRCb3VuZHMsIGlzVmVydGljYWwsIGRpcmVjdGlvbiwgZ3JhYmJpbmcsIHNjcm9sbGJhckVuYWJsZWQsIG92ZXJsYXBwaW5nU2Nyb2xsYmFyXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IGNvbnRlbnRXaWR0aCwgaGVpZ2h0OiBjb250ZW50SGVpZ2h0IH0gPSBjb250ZW50Qm91bmRzLFxyXG4gICAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSB2aWV3cG9ydEJvdW5kcyxcclxuICAgICAgICAgIHZpZXdwb3J0U2l6ZSA9IGlzVmVydGljYWwgPyBoZWlnaHQgOiB3aWR0aCxcclxuICAgICAgICAgIGNvbnRlbnRTaXplID0gaXNWZXJ0aWNhbCA/IGNvbnRlbnRIZWlnaHQgOiBjb250ZW50V2lkdGg7XHJcbiAgICAgICAgdGhpcy5fJGNvbnRhaW5lckNsYXNzZXMubmV4dCh7IFtkaXJlY3Rpb25dOiB0cnVlLCBncmFiYmluZywgZW5hYmxlZDogc2Nyb2xsYmFyRW5hYmxlZCwgc2Nyb2xsYWJsZTogY29udGVudFNpemUgPiB2aWV3cG9ydFNpemUsIG92ZXJsYXBwaW5nOiBvdmVybGFwcGluZ1Njcm9sbGJhciB9KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJHZpZXdJbml0aWFsaXplZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhckhhbmRsZXIoKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJHRodW1iR3JhZGllbnRQb3NpdGlvbnMucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyR0aHVtYkNvbG9yUG9zaXRpb25zLm5leHQodik7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLiR0aHVtYlNpemUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRhY3R1YWxUaHVtYlNpemUubmV4dCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuXyR2aWV3SW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVQZXJzcGVjdGl2ZSgpIHtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSB0aGlzLl8kaXNWZXJ0aWNhbC5nZXRWYWx1ZSgpLFxyXG4gICAgICBpbnZlcnRlZCA9IHRoaXMuaG9yaXpvbnRhbEF4aXNJbnZlcnRpb24sXHJcbiAgICAgIHNjcm9sbFNpemUgPSAoaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsVG9wIDogdGhpcy5zY3JvbGxMZWZ0KSAtIHRoaXMuX3N0YXJ0TGF5b3V0T2Zmc2V0LFxyXG4gICAgICBtYXhTY3JvbGxTaXplID0gaXNWZXJ0aWNhbCA/IHRoaXMuc2Nyb2xsSGVpZ2h0IDogdGhpcy5zY3JvbGxXaWR0aCxcclxuICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKTtcclxuICAgIHRoaXMuXyRsaXN0U3R5bGVzLm5leHQoe1xyXG4gICAgICBwZXJzcGVjdGl2ZU9yaWdpbjogYCR7aXNWZXJ0aWNhbCA/IHdpZHRoICogLjUgOiAoaW52ZXJ0ZWQgPyAoKG1heFNjcm9sbFNpemUgLSBzY3JvbGxTaXplKSArIHdpZHRoICogLjUgLSB0aGlzLnN0YXJ0T2Zmc2V0KSA6IChzY3JvbGxTaXplICsgd2lkdGggKiAuNSkpfSR7UFh9ICR7aXNWZXJ0aWNhbCA/IChpbnZlcnRlZCA/ICgobWF4U2Nyb2xsU2l6ZSAtIHNjcm9sbFNpemUpICsgaGVpZ2h0ICogLjUpIDogKHNjcm9sbFNpemUgKyBoZWlnaHQgKiAuNSkpIDogaGVpZ2h0ICogLjV9JHtQWH1gXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvblJlc2l6ZVZpZXdwb3J0KCkge1xyXG4gICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLnNjcm9sbFZpZXdwb3J0Py5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKCEhdmlld3BvcnQpIHtcclxuICAgICAgY29uc3QgYm91bmRzOiBJU2l6ZSA9IHsgd2lkdGg6IHZpZXdwb3J0Lm9mZnNldFdpZHRoLCBoZWlnaHQ6IHZpZXdwb3J0Lm9mZnNldEhlaWdodCB9LCBiID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCk7XHJcbiAgICAgIGlmIChib3VuZHMud2lkdGggPT09IGIud2lkdGggJiYgYm91bmRzLmhlaWdodCA9PT0gYi5oZWlnaHQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fJHZpZXdwb3J0Qm91bmRzLm5leHQoYm91bmRzKTtcclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICAgICAgdGhpcy5fJHJlc2l6ZVZpZXdwb3J0Lm5leHQoYm91bmRzKTtcclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVBlcnNwZWN0aXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgb25SZXNpemVDb250ZW50KHZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudD8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICghIWNvbnRlbnQpIHtcclxuICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCksIGJvdW5kczogSVNpemUgPSB7XHJcbiAgICAgICAgd2lkdGg6IGlzVmVydGljYWwgPyBjb250ZW50Lm9mZnNldFdpZHRoIDogKHZhbHVlID8/IGNvbnRlbnQub2Zmc2V0V2lkdGgpLFxyXG4gICAgICAgIGhlaWdodDogaXNWZXJ0aWNhbCA/ICh2YWx1ZSA/PyBjb250ZW50Lm9mZnNldEhlaWdodCkgOiBjb250ZW50Lm9mZnNldEhlaWdodFxyXG4gICAgICB9LCBiID0gdGhpcy5fJGNvbnRlbnRCb3VuZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgaWYgKHZhbHVlID09PSBudWxsICYmIGJvdW5kcy53aWR0aCA9PT0gYi53aWR0aCAmJiBib3VuZHMuaGVpZ2h0ID09PSBiLmhlaWdodCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl8kY29udGVudEJvdW5kcy5uZXh0KGJvdW5kcyk7XHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcbiAgICAgIHRoaXMuXyRyZXNpemVDb250ZW50Lm5leHQoYm91bmRzKTtcclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVBlcnNwZWN0aXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNjcm9sbEJhckhhbmRsZXIodXBkYXRlOiBib29sZWFuID0gZmFsc2UsIGJsZW5kaW5nOiBib29sZWFuID0gdHJ1ZSwgZmlyZVVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbixcclxuICAgICAgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCksXHJcbiAgICAgIHZpZXdwb3J0Qm91bmRzID0gdGhpcy5fJHZpZXdwb3J0Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIGNvbnRlbnRCb3VuZHMgPSB0aGlzLl8kY29udGVudEJvdW5kcy5nZXRWYWx1ZSgpLFxyXG4gICAgICBzdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQsXHJcbiAgICAgIGVuZE9mZnNldCA9IHRoaXMuZW5kT2Zmc2V0LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGh1bWJTaXplLFxyXG4gICAgICAgIHRodW1iUG9zaXRpb24sXHJcbiAgICAgICAgdGh1bWJHcmFkaWVudFBvc2l0aW9ucyxcclxuICAgICAgfSA9IHRoaXMuX3Njcm9sbEJveC5jYWxjdWxhdGVTY3JvbGwoe1xyXG4gICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICB2aWV3cG9ydFdpZHRoOiB2aWV3cG9ydEJvdW5kcy53aWR0aCxcclxuICAgICAgICB2aWV3cG9ydEhlaWdodDogdmlld3BvcnRCb3VuZHMuaGVpZ2h0LFxyXG4gICAgICAgIGNvbnRlbnRXaWR0aDogY29udGVudEJvdW5kcy53aWR0aCxcclxuICAgICAgICBjb250ZW50SGVpZ2h0OiBjb250ZW50Qm91bmRzLmhlaWdodCxcclxuICAgICAgICBzdGFydE9mZnNldCxcclxuICAgICAgICBlbmRPZmZzZXQsXHJcbiAgICAgICAgcG9zaXRpb25YOiB0aGlzLl94LFxyXG4gICAgICAgIHBvc2l0aW9uWTogdGhpcy5feSxcclxuICAgICAgICBtaW5TaXplOiB0aGlzLnNjcm9sbGJhck1pblNpemUsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuXyR0aHVtYkdyYWRpZW50UG9zaXRpb25zLm5leHQodGh1bWJHcmFkaWVudFBvc2l0aW9ucyk7XHJcbiAgICB0aGlzLl8kdGh1bWJTaXplLm5leHQodGh1bWJTaXplKTtcclxuICAgIGNvbnN0IGFjdHVhbFRodW1iUG9zaXRpb24gPSB0aHVtYlBvc2l0aW9uIDwgc3RhcnRPZmZzZXQgPyBzdGFydE9mZnNldCA6IHRodW1iUG9zaXRpb247XHJcbiAgICBpZiAodXBkYXRlKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsQmFyPy5zY3JvbGwoe1xyXG4gICAgICAgIFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogYWN0dWFsVGh1bWJQb3NpdGlvbiwgZmlyZVVwZGF0ZSwgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQsXHJcbiAgICAgICAgdXNlckFjdGlvbjogZmFsc2UsIGJsZW5kaW5nLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuXyRzY3JvbGxiYXJTaG93Lm5leHQodGhpcy5zY3JvbGxhYmxlICYmIHRoaXMuc2Nyb2xsYmFyRW5hYmxlZCk7XHJcbiAgfTtcclxuXHJcbiAgb3ZlcnJpZGUgdGljaygpIHtcclxuICAgIHN1cGVyLnRpY2soKTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbEJhcj8udGljaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxCYXIoKSB7XHJcbiAgICB0aGlzLl8kdXBkYXRlU2Nyb2xsQmFyLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hTY3JvbGxiYXIoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhckhhbmRsZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvbkRyYWdTdGFydCgpIHtcclxuICAgIHN1cGVyLm9uRHJhZ1N0YXJ0KCk7XHJcblxyXG4gICAgdGhpcy5zdG9wU2Nyb2xsYmFyKCk7XHJcblxyXG4gICAgdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHJlc2V0KCkge1xyXG4gICAgc3VwZXIucmVzZXQoKTtcclxuICAgIHRoaXMudG90YWxTaXplID0gMDtcclxuICAgIHRoaXMub25SZXNpemVDb250ZW50KDApO1xyXG4gICAgdGhpcy5zdG9wU2Nyb2xsYmFyKCk7XHJcbiAgICB0aGlzLnJlZnJlc2godHJ1ZSwgdHJ1ZSk7XHJcbiAgICB0aGlzLnByZXBhcmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKGZpcmVVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZSwgdXBkYXRlU2Nyb2xsYmFyOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgaWYgKHVwZGF0ZVNjcm9sbGJhcikge1xyXG4gICAgICB0aGlzLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNjcm9sbExpbWl0cygpO1xyXG5cclxuICAgIHRoaXMucmVmcmVzaENvb3JkaW5hdGUodGhpcy5feCwgdGhpcy5feSk7XHJcblxyXG4gICAgaWYgKHVwZGF0ZVNjcm9sbGJhcikge1xyXG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhckhhbmRsZXIoZmFsc2UpO1xyXG4gICAgICB0aGlzLmVtaXRTY3JvbGxhYmxlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlyZVVwZGF0ZSkge1xyXG4gICAgICB0aGlzLmZpcmVTY3JvbGxFdmVudChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzbmFwSWZOZWVkKGFuaW1hdGVkID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5zbmFwV2l0aEluaXRpYWxGb3JjZUlmTmVjZXNzYXJ5KG51bGwsIGFuaW1hdGVkLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2Nyb2xsVG8oKSB7XHJcbiAgICB0aGlzLnN0b3BTY3JvbGxiYXIoKTtcclxuICAgIHRoaXMuc3RvcFNjcm9sbGluZyh0cnVlKTtcclxuICAgIHRoaXMuX3Njcm9sbERpcmVjdGlvbi5jbGVhcigpO1xyXG4gICAgdGhpcy5kcm9wVmVsb2NpdHkoKTtcclxuICAgIHRoaXMuX2lzU2Nyb2xsc1RvID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGZpbmlzaGVkU2Nyb2xsVG8oKSB7XHJcbiAgICB0aGlzLl9pc1Njcm9sbHNUbyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fc2Nyb2xsRGlyZWN0aW9uLmNsZWFyKCk7XHJcbiAgICB0aGlzLmRyb3BWZWxvY2l0eSgpO1xyXG4gICAgdGhpcy5jaGVja0ludGVyc2VjdGlvbkNvbXBvbmVudCgpO1xyXG4gICAgdGhpcy5maXJlU2Nyb2xsRXZlbnQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxUbyhwYXJhbXM6IElTY3JvbGxUb1BhcmFtcyk6IG51bWJlciB7XHJcbiAgICBjb25zdCB1c2VyQWN0aW9uID0gcGFyYW1zPy51c2VyQWN0aW9uID8/IHRydWU7XHJcbiAgICBpZiAodXNlckFjdGlvbikge1xyXG4gICAgICB0aGlzLl9pc1Njcm9sbGJhclVzZXJBY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5zY3JvbGxCYXI/LnN0b3BTY3JvbGxpbmcoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnNjcm9sbCh7IC4uLnBhcmFtcywgdXNlckFjdGlvbjogdXNlckFjdGlvbiB9KTtcclxuICB9XHJcblxyXG4gIHN0b3BTY3JvbGxiYXIoKSB7XHJcbiAgICBpZiAoISF0aGlzLnNjcm9sbEJhcikge1xyXG4gICAgICB0aGlzLnNjcm9sbEJhci5zdG9wU2Nyb2xsaW5nKCk7XHJcbiAgICAgIHRoaXMuYWxpZ25Qb3NpdGlvbigpO1xyXG4gICAgICB0aGlzLmRyb3BWZWxvY2l0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkcm9wVmVsb2NpdHkoKSB7XHJcbiAgICB0aGlzLl92ZWxvY2l0aWVzID0gWzBdO1xyXG4gICAgdGhpcy5fJHZlbG9jaXR5Lm5leHQoMCk7XHJcbiAgICB0aGlzLl8kYXZlcmFnZVZlbG9jaXR5Lm5leHQoMCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc3RvcE1vdmluZygpIHtcclxuICAgIHN1cGVyLnN0b3BNb3ZpbmcoKTtcclxuICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgb25BbmltYXRpb25Db21wbGV0ZShwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmRyb3BWZWxvY2l0eSgpO1xyXG4gICAgdGhpcy5fJHNjcm9sbEVuZC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsQmFyRHJhZ0hhbmRsZXIoZXZlbnQ6IElTY3JvbGxCYXJEcmFnRXZlbnQpIHtcclxuICAgIGNvbnN0IHsgcG9zaXRpb24sIG1pbiwgbWF4LCB1c2VyQWN0aW9uIH0gPSBldmVudDtcclxuICAgIHRoaXMuX2lzU2Nyb2xsYmFyVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICBpZiAoIXVzZXJBY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclNjcm9sbC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zdG9wU2Nyb2xsaW5nKHRydWUpO1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCksXHJcbiAgICAgIHtcclxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVQb3NpdGlvbixcclxuICAgICAgfSA9IHRoaXMuX3Njcm9sbEJveC5nZXRTY3JvbGxQb3NpdGlvbkJ5U2Nyb2xsQmFyKHtcclxuICAgICAgICBzY3JvbGxTaXplOiBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLFxyXG4gICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbFRvKHtcclxuICAgICAgW2lzVmVydGljYWwgPyBUT1AgOiBMRUZUXTogYWJzb2x1dGVQb3NpdGlvbiwgYmVoYXZpb3I6IElOU1RBTlQsXHJcbiAgICAgIGJsZW5kaW5nOiBmYWxzZSwgdXNlckFjdGlvbjogdHJ1ZSwgZmlyZVVwZGF0ZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5lbWl0U2Nyb2xsYWJsZUV2ZW50KCk7XHJcbiAgICB0aGlzLl9zZXJ2aWNlLnVwZGF0ZShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbEJhckRyYWdFbmRIYW5kbGVyKGV2ZW50OiBJU2Nyb2xsQmFyRHJhZ0V2ZW50KSB7XHJcbiAgICBjb25zdCB7IHBvc2l0aW9uLCBtaW4sIG1heCwgdXNlckFjdGlvbiB9ID0gZXZlbnQ7XHJcbiAgICB0aGlzLl9pc1Njcm9sbGJhclVzZXJBY3Rpb24gPSB1c2VyQWN0aW9uO1xyXG4gICAgaWYgKCF1c2VyQWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2lzU2Nyb2xsYmFyVXNlckFjdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5kcm9wVmVsb2NpdHkoKTtcclxuICAgIHRoaXMuX3NlcnZpY2UudXBkYXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IGlzRWRnZSA9IHRoaXMuZmlyZVVwZGF0ZUlmRWRnZXNEZXRlY3RlZChwb3NpdGlvbiwgbWluLCBtYXgsIHRydWUsIHRydWUpO1xyXG4gICAgaWYgKCFpc0VkZ2UpIHtcclxuICAgICAgdGhpcy5hbGlnblBvc2l0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zY3JvbGxEaXJlY3Rpb24uY2xlYXIoKTtcclxuICAgIHRoaXMuXyRzY3JvbGxiYXJTY3JvbGwubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZmlyZVNjcm9sbEV2ZW50KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaXJlVXBkYXRlSWZFZGdlc0RldGVjdGVkKHBvc2l0aW9uOiBudW1iZXIsIG1pbjogbnVtYmVyID0gMCwgbWF4OiBudW1iZXIgPSAxLCBhbmltYXRpb246IGJvb2xlYW4gPSBmYWxzZSwgdXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodXNlckFjdGlvbiAmJiBhbmltYXRpb24pIHtcclxuICAgICAgaWYgKHBvc2l0aW9uIDw9IG1pbikge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2Nyb2xsVG9TdGFydCgpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID49IG1heCkge1xyXG4gICAgICAgIHRoaXMuX3NlcnZpY2Uuc2Nyb2xsVG9FbmQoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufSIsIjxkaXYgbG9jYWxlU2Vuc2l0aXZlIFtsYW5nVGV4dERpcl09XCIoJGxhbmdUZXh0RGlyIHwgYXN5bmMpIVwiIFtsaXN0RGlyXT1cIigkZGlyZWN0aW9uIHwgYXN5bmMpIVwiIGNsYXNzPVwibmd2bF9fY29udGFpbmVyXCJcclxuICAgIFtuZ0NsYXNzXT1cIigkY29udGFpbmVyQ2xhc3NlcyB8IGFzeW5jKSFcIj5cclxuICAgIDxzdmcgcGFydD1cInZpZXdwb3J0XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPlxyXG4gICAgICAgIDxmaWx0ZXIgW2lkXT1cIl9maWx0ZXJJZFwiPlxyXG4gICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgI2ZpbHRlcj48L2ZlR2F1c3NpYW5CbHVyPlxyXG4gICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgIDxmb3JlaWduT2JqZWN0IHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBjbGFzcz1cIm5ndmxfX3ZpZXdwb3J0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZ3ZsX19zY3JvbGxlci13cmFwcGVyXCIgW2NsYXNzLmZpbHRlcmVkXT1cIigkbW90aW9uQmx1ckVuYWJsZWQgfCBhc3luYykhXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5maWx0ZXJdPVwiKCRtb3Rpb25CbHVyRW5hYmxlZCB8IGFzeW5jKSEgPyBfZmlsdGVyIDogJ3Vuc2V0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjZGtTY3JvbGxhYmxlICNzY3JvbGxWaWV3cG9ydCBwYXJ0PVwic2Nyb2xsZXJcIiBjbGFzcz1cIm5ndmxfX3Njcm9sbGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAjc2Nyb2xsQ29udGVudCBbYXR0ci5hcmlhLW9yaWVudGF0aW9uXT1cIigkZGlyZWN0aW9uIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCIkZm9jdXNlZEVsZW1lbnQgfCBhc3luY1wiIHRhYmluZGV4PVwiMFwiIHBhcnQ9XCJsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuZ3ZsX19saXN0XCIgW25nQ2xhc3NdPVwiKCRhY3R1YWxDbGFzc2VzIHwgYXN5bmMpIVwiIFtuZ1N0eWxlXT1cIigkbGlzdFN0eWxlcyB8IGFzeW5jKSFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9yZWlnbk9iamVjdD5cclxuICAgIDwvc3ZnPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIigkc2Nyb2xsYmFyRW5hYmxlZCB8IGFzeW5jKSFcIj5cclxuICAgICAgICA8bmctc2Nyb2xsLWJhciAjc2Nyb2xsQmFyIFtkaXJlY3Rpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCIgW3NpemVdPVwiKCRhY3R1YWxUaHVtYlNpemUgfCBhc3luYykhXCJcclxuICAgICAgICAgICAgW2xhbmdUZXh0RGlyXT1cIigkbGFuZ1RleHREaXIgfCBhc3luYykhXCIgW3JlbmRlcmVyXT1cIigkc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbdGhpY2tuZXNzXT1cIigkc2Nyb2xsYmFyVGhpY2tuZXNzIHwgYXN5bmMpIVwiIFtwYXJhbXNdPVwiKCRzY3JvbGxiYXJUaHVtYlBhcmFtcyB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbbG9hZGluZ109XCIoJGxvYWRpbmcgfCBhc3luYykhXCIgW292ZXJsYXBwaW5nXT1cIigkb3ZlcmxhcHBpbmdTY3JvbGxiYXIgfCBhc3luYykhXCJcclxuICAgICAgICAgICAgW3RodW1iR3JhZGllbnRQb3NpdGlvbnNdPVwiKCR0aHVtYkNvbG9yUG9zaXRpb25zIHwgYXN5bmMpIVwiIFtwcmVwYXJlZF09XCIoJHByZXBhcmVkU2lnbmFsIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFtpbnRlcmFjdGl2ZV09XCIoJHNjcm9sbGJhckludGVyYWN0aXZlIHwgYXN5bmMpIVwiIFtzaG93XT1cIigkc2hvdyB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbc3RhcnRPZmZzZXRdPVwiKCRzdGFydE9mZnNldCB8IGFzeW5jKSFcIiBbbGFuZ1RleHREaXJdPVwiKCRsYW5nVGV4dERpciB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbZW5kT2Zmc2V0XT1cIigkZW5kT2Zmc2V0IHwgYXN5bmMpIVwiIFtvdmVyc2Nyb2xsRW5hYmxlZF09XCIoJG92ZXJzY3JvbGxFbmFibGVkIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFtzY3JvbGxCZWhhdmlvcl09XCIoJHNjcm9sbEJlaGF2aW9yIHwgYXN5bmMpIVwiIFtzY3JvbGxiYXJNaW5TaXplXT1cIigkc2Nyb2xsYmFyTWluU2l6ZSB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICAob25EcmFnKT1cIm9uU2Nyb2xsQmFyRHJhZ0hhbmRsZXIoJGV2ZW50KVwiIChvbkRyYWdFbmQpPVwib25TY3JvbGxCYXJEcmFnRW5kSGFuZGxlcigkZXZlbnQpXCI+PC9uZy1zY3JvbGwtYmFyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
|
|
532
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2Nyb2xsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvY29tcG9uZW50cy9uZy1zY3JvbGxlci9uZy1zY3JvbGxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFaEYsT0FBTyxFQUNMLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUNySiw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBRSwyQkFBMkIsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxhQUFhLEdBQzNJLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBbUIsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekYsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLDhCQUE4QixFQUFFLE1B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SVYsa0JBQWtCO3NCQUQxQixNQUFNO2dCQU9ILGdCQUFnQjtzQkFEbkIsS0FBSztnQkFZRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBWUYsY0FBYztzQkFEakIsS0FBSztnQkFZRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBWUYsT0FBTztzQkFEVixLQUFLO2dCQVlGLE9BQU87c0JBRFYsS0FBSztnQkFZRixPQUFPO3NCQURWLEtBQUs7Z0JBWUYsZ0JBQWdCO3NCQURuQixLQUFLO2dCQVlGLGtCQUFrQjtzQkFEckIsS0FBSztnQkFZRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBWUYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQVlGLFVBQVU7c0JBRGIsS0FBSztnQkFZRixhQUFhO3NCQURoQixLQUFLO2dCQVlGLGlCQUFpQjtzQkFEcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmcm9tLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTY3JvbGxCb3ggfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSWQsIFRleHREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XHJcbmltcG9ydCB7IE5nU2Nyb2xsQmFyQ29tcG9uZW50IH0gZnJvbSBcIi4uL25nLXNjcm9sbC1iYXIvbmctc2Nyb2xsLWJhci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgR3JhZGllbnRDb2xvclBvc2l0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL2dyYWRpZW50LWNvbG9yLXBvc2l0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgQkVIQVZJT1JfSU5TVEFOVCwgREVGQVVMVF9NQVhfTU9USU9OX0JMVVIsIERFRkFVTFRfTU9USU9OX0JMVVIsIERFRkFVTFRfTU9USU9OX0JMVVJfRU5BQkxFRCwgREVGQVVMVF9PVkVSTEFQUElOR19TQ1JPTExCQVIsIERFRkFVTFRfU0NST0xMQkFSX0VOQUJMRUQsXHJcbiAgREVGQVVMVF9TQ1JPTExCQVJfSU5URVJBQ1RJVkUsIERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFLCBERUZBVUxUX1NDUk9MTEJBUl9USElDS05FU1MsIExFRlRfUFJPUF9OQU1FLCBQWCwgU0NST0xMRVJfU0NST0xMLCBUT1BfUFJPUF9OQU1FLFxyXG59IGZyb20gJy4uLy4uL2NvbnN0JztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElTY3JvbGxUb1BhcmFtcywgTmdTY3JvbGxWaWV3LCBTQ1JPTExfVklFV19JTlZFUlNJT04gfSBmcm9tICcuLi9uZy1zY3JvbGwtdmlldyc7XHJcbmltcG9ydCB7IElTY3JvbGxCYXJEcmFnRXZlbnQgfSBmcm9tICcuLi9uZy1zY3JvbGwtYmFyL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBTQ1JPTExfVklFV19OT1JNQUxJWkVfVkFMVUVfRlJPTV9aRVJPLCBTQ1JPTExfVklFV19PVkVSU0NST0xMX0VOQUJMRUQgfSBmcm9tICcuLi9uZy1zY3JvbGwtdmlldy9jb25zdCc7XHJcbmltcG9ydCB7IElTaXplIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5jb25zdCBUT1AgPSAndG9wJyxcclxuICBMRUZUID0gJ2xlZnQnLFxyXG4gIElOU1RBTlQgPSAnaW5zdGFudCcgYXMgU2Nyb2xsQmVoYXZpb3IsXHJcbiAgTU9USU9OX0JMVVIgPSAnbW90aW9uLWJsdXInO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNDUk9MTF9FVkVOVCA9IG5ldyBFdmVudChTQ1JPTExFUl9TQ1JPTEwpO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBzY3JvbGxlciBmb3IgdGhlIE5nVmlydHVhbExpc3QgaXRlbSBjb21wb25lbnRcclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9jb21wb25lbnRzL25nLXNjcm9sbGVyL25nLXNjcm9sbGVyLmNvbXBvbmVudC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmctc2Nyb2xsZXInLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgeyBwcm92aWRlOiBTQ1JPTExfVklFV19JTlZFUlNJT04sIHVzZVZhbHVlOiBmYWxzZSB9LFxyXG4gICAgeyBwcm92aWRlOiBTQ1JPTExfVklFV19OT1JNQUxJWkVfVkFMVUVfRlJPTV9aRVJPLCB1c2VWYWx1ZTogdHJ1ZSB9LFxyXG4gICAgeyBwcm92aWRlOiBTQ1JPTExfVklFV19PVkVSU0NST0xMX0VOQUJMRUQsIHVzZVZhbHVlOiB0cnVlIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctc2Nyb2xsZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXNjcm9sbGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1Njcm9sbGVyQ29tcG9uZW50IGV4dGVuZHMgTmdTY3JvbGxWaWV3IHtcclxuICBAVmlld0NoaWxkKCdzY3JvbGxCYXInLCB7IHJlYWQ6IE5nU2Nyb2xsQmFyQ29tcG9uZW50IH0pXHJcbiAgcmVhZG9ubHkgc2Nyb2xsQmFyOiBOZ1Njcm9sbEJhckNvbXBvbmVudCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZmlsdGVyJylcclxuICByZWFkb25seSBmaWx0ZXI6IEVsZW1lbnRSZWY8U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcmVhZG9ubHkgb25TY3JvbGxiYXJWaXNpYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsYmFyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TQ1JPTExCQVJfRU5BQkxFRCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhckVuYWJsZWQgPSB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyRW5hYmxlZCh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhckVuYWJsZWQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyRW5hYmxlZC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2Nyb2xsYmFyRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhckludGVyYWN0aXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX1NDUk9MTEJBUl9JTlRFUkFDVElWRSk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhckludGVyYWN0aXZlID0gdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJJbnRlcmFjdGl2ZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJHNjcm9sbGJhckludGVyYWN0aXZlLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJJbnRlcmFjdGl2ZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJJbnRlcmFjdGl2ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c2VkRWxlbWVudCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJGZvY3VzZWRFbGVtZW50ID0gdGhpcy5fJGZvY3VzZWRFbGVtZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBmb2N1c2VkRWxlbWVudCh2OiBJZCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuXyRmb2N1c2VkRWxlbWVudC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRmb2N1c2VkRWxlbWVudC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgZm9jdXNlZEVsZW1lbnQoKSB7IHJldHVybiB0aGlzLl8kZm9jdXNlZEVsZW1lbnQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfT1ZFUkxBUFBJTkdfU0NST0xMQkFSKTtcclxuICByZWFkb25seSAkb3ZlcmxhcHBpbmdTY3JvbGxiYXIgPSB0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG92ZXJsYXBwaW5nU2Nyb2xsYmFyKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kb3ZlcmxhcHBpbmdTY3JvbGxiYXIubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG92ZXJsYXBwaW5nU2Nyb2xsYmFyKCkgeyByZXR1cm4gdGhpcy5fJG92ZXJsYXBwaW5nU2Nyb2xsYmFyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGNvbnRlbnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRjb250ZW50ID0gdGhpcy5fJGZvY3VzZWRFbGVtZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBjb250ZW50KHY6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fJGNvbnRlbnQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kY29udGVudC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgY29udGVudCgpIHsgcmV0dXJuIHRoaXMuXyRjb250ZW50LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxvYWRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkbG9hZGluZyA9IHRoaXMuXyRsb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBsb2FkaW5nKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbG9hZGluZy5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRsb2FkaW5nLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBsb2FkaW5nKCkgeyByZXR1cm4gdGhpcy5fJGxvYWRpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kY2xhc3NlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oe30pO1xyXG4gIHJlYWRvbmx5ICRjbGFzc2VzID0gdGhpcy5fJGNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNsYXNzZXModjogeyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfSkge1xyXG4gICAgaWYgKHRoaXMuXyRjbGFzc2VzLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJGNsYXNzZXMubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGNsYXNzZXMoKSB7IHJldHVybiB0aGlzLl8kY2xhc3Nlcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJNaW5TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfU0NST0xMQkFSX01JTl9TSVpFKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyTWluU2l6ZSA9IHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJNaW5TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJNaW5TaXplLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJHNjcm9sbGJhck1pblNpemUubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhck1pblNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyTWluU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJUaGlja25lc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9TQ1JPTExCQVJfVEhJQ0tORVNTKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyVGhpY2tuZXNzID0gdGhpcy5fJHNjcm9sbGJhclRoaWNrbmVzcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2Nyb2xsYmFyVGhpY2tuZXNzKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRzY3JvbGxiYXJUaGlja25lc3MuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBzY3JvbGxiYXJUaGlja25lc3MoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsYmFyVGhpY2tuZXNzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRodW1iUmVuZGVyZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyVGh1bWJSZW5kZXJlciA9IHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzY3JvbGxiYXJUaHVtYlJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJHNjcm9sbGJhclRodW1iUmVuZGVyZXIuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJSZW5kZXJlci5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc2Nyb2xsYmFyVGh1bWJSZW5kZXJlcigpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclRodW1iUGFyYW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtwcm9wTmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSAkc2Nyb2xsYmFyVGh1bWJQYXJhbXMgPSB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNjcm9sbGJhclRodW1iUGFyYW1zKHY6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kc2Nyb2xsYmFyVGh1bWJQYXJhbXMubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHNjcm9sbGJhclRodW1iUGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbGJhclRodW1iUGFyYW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJG1vdGlvbkJsdXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8ICdkaXNhYmxlZCc+KERFRkFVTFRfTU9USU9OX0JMVVIpO1xyXG4gIHJlYWRvbmx5ICRtb3Rpb25CbHVyID0gdGhpcy5fJG1vdGlvbkJsdXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1vdGlvbkJsdXIodjogbnVtYmVyIHwgJ2Rpc2FibGVkJykge1xyXG4gICAgaWYgKHRoaXMuXyRtb3Rpb25CbHVyLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJG1vdGlvbkJsdXIubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG1vdGlvbkJsdXIoKSB7IHJldHVybiB0aGlzLl8kbW90aW9uQmx1ci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtYXhNb3Rpb25CbHVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfTUFYX01PVElPTl9CTFVSKTtcclxuICByZWFkb25seSAkbWF4TW90aW9uQmx1ciA9IHRoaXMuXyRtYXhNb3Rpb25CbHVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBtYXhNb3Rpb25CbHVyKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRtYXhNb3Rpb25CbHVyLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJG1heE1vdGlvbkJsdXIubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG1heE1vdGlvbkJsdXIoKSB7IHJldHVybiB0aGlzLl8kbWF4TW90aW9uQmx1ci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRtb3Rpb25CbHVyRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9NT1RJT05fQkxVUl9FTkFCTEVEKTtcclxuICByZWFkb25seSAkbW90aW9uQmx1ckVuYWJsZWQgPSB0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1vdGlvbkJsdXJFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kbW90aW9uQmx1ckVuYWJsZWQubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IG1vdGlvbkJsdXJFbmFibGVkKCkgeyByZXR1cm4gdGhpcy5fJG1vdGlvbkJsdXJFbmFibGVkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGFjdHVhbENsYXNzZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcclxuICByZWFkb25seSAkYWN0dWFsQ2xhc3NlcyA9IHRoaXMuXyRhY3R1YWxDbGFzc2VzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY29udGFpbmVyQ2xhc3NlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbY05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oe30pO1xyXG4gIHJlYWRvbmx5ICRjb250YWluZXJDbGFzc2VzID0gdGhpcy5fJGNvbnRhaW5lckNsYXNzZXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aHVtYkdyYWRpZW50UG9zaXRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcmFkaWVudENvbG9yUG9zaXRpb25zPihbMCwgMF0pO1xyXG4gIHJlYWRvbmx5ICR0aHVtYkdyYWRpZW50UG9zaXRpb25zID0gdGhpcy5fJHRodW1iR3JhZGllbnRQb3NpdGlvbnMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aHVtYlNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJHRodW1iU2l6ZSA9IHRoaXMuXyR0aHVtYlNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aHVtYkNvbG9yUG9zaXRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcmFkaWVudENvbG9yUG9zaXRpb25zPihbMCwgMF0pO1xyXG4gIHJlYWRvbmx5ICR0aHVtYkNvbG9yUG9zaXRpb25zID0gdGhpcy5fJHRodW1iQ29sb3JQb3NpdGlvbnMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRhY3R1YWxUaHVtYlNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgJGFjdHVhbFRodW1iU2l6ZSA9IHRoaXMuXyRhY3R1YWxUaHVtYlNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxiYXJTaG93ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclNob3cgPSB0aGlzLl8kc2Nyb2xsYmFyU2hvdy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNob3cgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkc2hvdyA9IHRoaXMuXyRzaG93LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kcHJlcGFyZWRTaWduYWwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkcHJlcGFyZWRTaWduYWwgPSB0aGlzLl8kcHJlcGFyZWRTaWduYWwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRsaXN0U3R5bGVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IHBlcnNwZWN0aXZlT3JpZ2luOiBzdHJpbmcgfT4oeyBwZXJzcGVjdGl2ZU9yaWdpbjogJ2NlbnRlcicgfSk7XHJcbiAgcmVhZG9ubHkgJGxpc3RTdHlsZXMgPSB0aGlzLl8kbGlzdFN0eWxlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQm94ID0gbmV3IFNjcm9sbEJveCgpO1xyXG5cclxuICBnZXQgaG9zdCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNjcm9sbFZpZXdwb3J0Py5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbGJhclNjcm9sbCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbGJhclNjcm9sbCA9IHRoaXMuXyRzY3JvbGxiYXJTY3JvbGwuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVkID0gZmFsc2U7XHJcbiAgc2V0IHByZXBhcmVkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9wcmVwYXJlZCAhPT0gdikge1xyXG4gICAgICB0aGlzLl9wcmVwYXJlZCA9IHY7XHJcbiAgICAgIHRoaXMuXyRwcmVwYXJlZFNpZ25hbC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNldFgoeDogbnVtYmVyLCBzbmFwOiBib29sZWFuID0gdHJ1ZSwgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgaWYgKHggIT09IHVuZGVmaW5lZCAmJiAhTnVtYmVyLmlzTmFOKHgpKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRGlyZWN0aW9uKHgsIHRoaXMuX3gpO1xyXG5cclxuICAgICAgdGhpcy5feCA9IHRoaXMuX2FjdHVhbFggPSB4O1xyXG5cclxuICAgICAgY29uc3Qgb3ZlcnJpZGRlbiA9IG5vcm1hbGl6ZSA/IHRoaXMubm9ybWFsaXplU2Nyb2xsU2l6ZSgpIDogZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLnJlZnJlc2hDb29yZGluYXRlKHRoaXMuX3gsIHRoaXMuX3kpO1xyXG5cclxuICAgICAgaWYgKCFvdmVycmlkZGVuKSB7XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlVmVsb2NpdHkoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuXHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVQZXJzcGVjdGl2ZSgpO1xyXG5cclxuICAgICAgaWYgKHNuYXApIHtcclxuICAgICAgICB0aGlzLmNoZWNrSW50ZXJzZWN0aW9uQ29tcG9uZW50KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBzZXRZKHk6IG51bWJlciwgc25hcDogYm9vbGVhbiA9IHRydWUsIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGlmICh5ICE9PSB1bmRlZmluZWQgJiYgIU51bWJlci5pc05hTih5KSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZURpcmVjdGlvbih5LCB0aGlzLl95KTtcclxuXHJcbiAgICAgIHRoaXMuX3kgPSB0aGlzLl9hY3R1YWxZID0geTtcclxuXHJcbiAgICAgIGNvbnN0IG92ZXJyaWRkZW4gPSBub3JtYWxpemUgPyB0aGlzLm5vcm1hbGl6ZVNjcm9sbFNpemUoKSA6IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5yZWZyZXNoQ29vcmRpbmF0ZSh0aGlzLl94LCB0aGlzLl95KTtcclxuXHJcbiAgICAgIGlmICghb3ZlcnJpZGRlbikge1xyXG4gICAgICAgIHRoaXMubWVhc3VyZVZlbG9jaXR5KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFyKCk7XHJcblxyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUGVyc3BlY3RpdmUoKTtcclxuXHJcbiAgICAgIGlmIChzbmFwKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0ludGVyc2VjdGlvbkNvbXBvbmVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBzZXQgc3RhcnRMYXlvdXRPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgIT09IHYpIHtcclxuICAgICAgdGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQgPSB2O1xyXG5cclxuICAgICAgdGhpcy5yZWZyZXNoQ29vcmRpbmF0ZSh0aGlzLl94LCB0aGlzLl95KTtcclxuXHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVQZXJzcGVjdGl2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvdmVycmlkZSBnZXQgc3RhcnRMYXlvdXRPZmZzZXQoKSB7IHJldHVybiB0aGlzLl9zdGFydExheW91dE9mZnNldDsgfVxyXG5cclxuICBwcml2YXRlIF8kdmlld0luaXRpYWxpemVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJHZpZXdJbml0aWFsaXplZCA9IHRoaXMuXyR2aWV3SW5pdGlhbGl6ZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2lzU2Nyb2xsYmFyVXNlckFjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBpc1Njcm9sbGJhclVzZXJBY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF8kcmVzaXplVmlld3BvcnQgPSBuZXcgU3ViamVjdDxJU2l6ZT4oKTtcclxuICByZWFkb25seSAkcmVzaXplVmlld3BvcnQgPSB0aGlzLl8kcmVzaXplVmlld3BvcnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByb3RlY3RlZCBfJHJlc2l6ZUNvbnRlbnQgPSBuZXcgU3ViamVjdDxJU2l6ZT4oKTtcclxuICByZWFkb25seSAkcmVzaXplQ29udGVudCA9IHRoaXMuXyRyZXNpemVDb250ZW50LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcm90ZWN0ZWQgX2ZpbHRlcklkOiBzdHJpbmc7XHJcblxyXG4gIHByb3RlY3RlZCBfZmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICB0aGlzLl9maWx0ZXJJZCA9IGAke3RoaXMuX3NlcnZpY2UuaWR9LSR7TU9USU9OX0JMVVJ9YDtcclxuICAgIHRoaXMuX2ZpbHRlciA9IGB1cmwoIyR7dGhpcy5fZmlsdGVySWR9KWA7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgIHRoaXMuJHJlc2l6ZVZpZXdwb3J0LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zbmFwSWZOZWVkKCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzY3JvbGwucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcElmTmVlZCgpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRmaWx0ZXIgPSBvZih0aGlzLmZpbHRlciksXHJcbiAgICAgICRtb3Rpb25CbHVyID0gdGhpcy4kbW90aW9uQmx1cixcclxuICAgICAgJG1heE1vdGlvbkJsdXIgPSB0aGlzLiRtYXhNb3Rpb25CbHVyLFxyXG4gICAgICAkbW90aW9uQmx1ckVuYWJsZWQgPSB0aGlzLiRtb3Rpb25CbHVyRW5hYmxlZCxcclxuICAgICAgJGlzVmVydGljYWwgPSB0aGlzLiRpc1ZlcnRpY2FsO1xyXG5cclxuICAgIGNvbnN0ICRzY3JvbGxiYXJTY3JvbGwgPSB0aGlzLiRzY3JvbGxiYXJTY3JvbGw7XHJcbiAgICAkc2Nyb2xsYmFyU2Nyb2xsLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoNTApLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgICAgICAgdGhpcy5maXJlU2Nyb2xsRXZlbnQoZmFsc2UpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGF2ZXJhZ2VWZWxvY2l0eSA9IHRoaXMuJGF2ZXJhZ2VWZWxvY2l0eTtcclxuICAgIGNvbWJpbmVMYXRlc3QoWyRpc1ZlcnRpY2FsLCAkYXZlcmFnZVZlbG9jaXR5LCAkZmlsdGVyLCAkbW90aW9uQmx1ckVuYWJsZWQsICRtb3Rpb25CbHVyLCAkbWF4TW90aW9uQmx1cl0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIoKFssICwgZiwgZSwgbWJdKSA9PiAhIWYgJiYgKCEhZSAmJiBtYiAhPT0gMCkpLFxyXG4gICAgICB0YXAoKFtpc1ZlcnRpY2FsLCB2LCBmaWx0ZXIsICwgbWIsIG1iTWF4XSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IF92ID0gdiAqIChtYiBhcyBudW1iZXIpLCB2YWx1ZSA9IF92ID4gbWJNYXggPyBtYk1heCA6IF92O1xyXG4gICAgICAgIGZpbHRlciEubmF0aXZlRWxlbWVudC5zZXRTdGREZXZpYXRpb24oaXNWZXJ0aWNhbCA/IDAgOiB2ICogdmFsdWUsIGlzVmVydGljYWwgPyB2ICogdmFsdWUgOiAwKTtcclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlVGltZSg1MCksXHJcbiAgICAgIHRhcCgoWywgLCBmaWx0ZXIsICxdKSA9PiB7XHJcbiAgICAgICAgZmlsdGVyIS5uYXRpdmVFbGVtZW50LnNldFN0ZERldmlhdGlvbigwLCAwKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRwcmVwYXJlID0gdGhpcy4kcHJlcGFyZWRTaWduYWw7XHJcbiAgICAkcHJlcGFyZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZmlsdGVyKHYgPT4gISF2KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhckhhbmRsZXIodHJ1ZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHNjcm9sbGJhckVuYWJsZWQgPSB0aGlzLiRzY3JvbGxiYXJFbmFibGVkLFxyXG4gICAgICAkc2Nyb2xsYmFyU2hvdyA9IHRoaXMuJHNjcm9sbGJhclNob3c7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbJHNjcm9sbGJhckVuYWJsZWQsICRzY3JvbGxiYXJTaG93LCB0aGlzLiRwcmVwYXJlZFNpZ25hbF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtzY3JvbGxiYXJFbmFibGVkLCBzY3JvbGxiYXJTaG93LCBwcmVwYXJlZF0pID0+IHtcclxuICAgICAgICB0aGlzLl8kc2hvdy5uZXh0KHNjcm9sbGJhckVuYWJsZWQgJiYgc2Nyb2xsYmFyU2hvdyAmJiBwcmVwYXJlZCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb25zdCAkc3RhcnRPZmZzZXQgPSB0aGlzLiRzdGFydE9mZnNldCxcclxuICAgICAgJGVuZE9mZnNldCA9IHRoaXMuJGVuZE9mZnNldCxcclxuICAgICAgJHNjcm9sbGJhck1pblNpemUgPSB0aGlzLiRzY3JvbGxiYXJNaW5TaXplLFxyXG4gICAgICAkdGh1bWJTaXplID0gdGhpcy4kdGh1bWJTaXplO1xyXG5cclxuICAgIGZyb20oWyRlbmRPZmZzZXQsICRzdGFydE9mZnNldCwgJHRodW1iU2l6ZSwgJHNjcm9sbGJhck1pblNpemUsICRpc1ZlcnRpY2FsXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJHVwZGF0ZVNjcm9sbEJhciA9IHRoaXMuJHVwZGF0ZVNjcm9sbEJhcjtcclxuXHJcbiAgICAkdXBkYXRlU2Nyb2xsQmFyLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMCksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXJIYW5kbGVyKCF0aGlzLl9pc1Njcm9sbGJhclVzZXJBY3Rpb24pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGdyYWJiaW5nID0gdGhpcy4kZ3JhYmJpbmc7XHJcbiAgICAkZ3JhYmJpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlLmdyYWJiaW5nID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuJGNsYXNzZXMsIHRoaXMuJGRpcmVjdGlvbiwgdGhpcy4kZ3JhYmJpbmcsIHRoaXMuJG1vdGlvbkJsdXJFbmFibGVkXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgwKSxcclxuICAgICAgdGFwKChbY2xhc3NlcywgZGlyZWN0aW9uLCBncmFiYmluZywgZmlsdGVyZWRdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbENsYXNzZXMubmV4dCh7IC4uLmNsYXNzZXMsIFtkaXJlY3Rpb25dOiB0cnVlLCBncmFiYmluZywgZmlsdGVyZWQgfSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRjb250ZW50Qm91bmRzLCB0aGlzLiR2aWV3cG9ydEJvdW5kcywgdGhpcy4kaXNWZXJ0aWNhbCwgdGhpcy4kZGlyZWN0aW9uLCB0aGlzLiRncmFiYmluZywgdGhpcy4kc2Nyb2xsYmFyRW5hYmxlZCwgdGhpcy4kb3ZlcmxhcHBpbmdTY3JvbGxiYXJdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAoKFtjb250ZW50Qm91bmRzLCB2aWV3cG9ydEJvdW5kcywgaXNWZXJ0aWNhbCwgZGlyZWN0aW9uLCBncmFiYmluZywgc2Nyb2xsYmFyRW5hYmxlZCwgb3ZlcmxhcHBpbmdTY3JvbGxiYXJdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyB3aWR0aDogY29udGVudFdpZHRoLCBoZWlnaHQ6IGNvbnRlbnRIZWlnaHQgfSA9IGNvbnRlbnRCb3VuZHMsXHJcbiAgICAgICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IHZpZXdwb3J0Qm91bmRzLFxyXG4gICAgICAgICAgdmlld3BvcnRTaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgY29udGVudFNpemUgPSBpc1ZlcnRpY2FsID8gY29udGVudEhlaWdodCA6IGNvbnRlbnRXaWR0aDtcclxuICAgICAgICB0aGlzLl8kY29udGFpbmVyQ2xhc3Nlcy5uZXh0KHsgW2RpcmVjdGlvbl06IHRydWUsIGdyYWJiaW5nLCBlbmFibGVkOiBzY3JvbGxiYXJFbmFibGVkLCBzY3JvbGxhYmxlOiBjb250ZW50U2l6ZSA+IHZpZXdwb3J0U2l6ZSwgb3ZlcmxhcHBpbmc6IG92ZXJsYXBwaW5nU2Nyb2xsYmFyIH0pO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kdmlld0luaXRpYWxpemVkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFySGFuZGxlcigpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy4kdGh1bWJHcmFkaWVudFBvc2l0aW9ucy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJHRodW1iQ29sb3JQb3NpdGlvbnMubmV4dCh2KTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuJHRodW1iU2l6ZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDApLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGFjdHVhbFRodW1iU2l6ZS5uZXh0KHYpO1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5fJHZpZXdJbml0aWFsaXplZC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZVBlcnNwZWN0aXZlKCkge1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuXyRpc1ZlcnRpY2FsLmdldFZhbHVlKCksXHJcbiAgICAgIGludmVydGVkID0gdGhpcy5ob3Jpem9udGFsQXhpc0ludmVydGlvbixcclxuICAgICAgc2Nyb2xsU2l6ZSA9IChpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxUb3AgOiB0aGlzLnNjcm9sbExlZnQpIC0gdGhpcy5fc3RhcnRMYXlvdXRPZmZzZXQsXHJcbiAgICAgIG1heFNjcm9sbFNpemUgPSBpc1ZlcnRpY2FsID8gdGhpcy5zY3JvbGxIZWlnaHQgOiB0aGlzLnNjcm9sbFdpZHRoLFxyXG4gICAgICB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyR2aWV3cG9ydEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgdGhpcy5fJGxpc3RTdHlsZXMubmV4dCh7XHJcbiAgICAgIHBlcnNwZWN0aXZlT3JpZ2luOiBgJHtpc1ZlcnRpY2FsID8gd2lkdGggKiAuNSA6IChpbnZlcnRlZCA/ICgobWF4U2Nyb2xsU2l6ZSAtIHNjcm9sbFNpemUpICsgd2lkdGggKiAuNSAtIHRoaXMuc3RhcnRPZmZzZXQpIDogKHNjcm9sbFNpemUgKyB3aWR0aCAqIC41KSl9JHtQWH0gJHtpc1ZlcnRpY2FsID8gKGludmVydGVkID8gKChtYXhTY3JvbGxTaXplIC0gc2Nyb2xsU2l6ZSkgKyBoZWlnaHQgKiAuNSkgOiAoc2Nyb2xsU2l6ZSArIGhlaWdodCAqIC41KSkgOiBoZWlnaHQgKiAuNX0ke1BYfWBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG9uUmVzaXplVmlld3BvcnQoKSB7XHJcbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuc2Nyb2xsVmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoISF2aWV3cG9ydCkge1xyXG4gICAgICBjb25zdCBib3VuZHM6IElTaXplID0geyB3aWR0aDogdmlld3BvcnQub2Zmc2V0V2lkdGgsIGhlaWdodDogdmlld3BvcnQub2Zmc2V0SGVpZ2h0IH0sIGIgPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgaWYgKGJvdW5kcy53aWR0aCA9PT0gYi53aWR0aCAmJiBib3VuZHMuaGVpZ2h0ID09PSBiLmhlaWdodCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl8kdmlld3BvcnRCb3VuZHMubmV4dChib3VuZHMpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gICAgICB0aGlzLl8kcmVzaXplVmlld3BvcnQubmV4dChib3VuZHMpO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUGVyc3BlY3RpdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvblJlc2l6ZUNvbnRlbnQodmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5zY3JvbGxDb250ZW50Py5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKCEhY29udGVudCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSwgYm91bmRzOiBJU2l6ZSA9IHtcclxuICAgICAgICB3aWR0aDogaXNWZXJ0aWNhbCA/IGNvbnRlbnQub2Zmc2V0V2lkdGggOiAodmFsdWUgPz8gY29udGVudC5vZmZzZXRXaWR0aCksXHJcbiAgICAgICAgaGVpZ2h0OiBpc1ZlcnRpY2FsID8gKHZhbHVlID8/IGNvbnRlbnQub2Zmc2V0SGVpZ2h0KSA6IGNvbnRlbnQub2Zmc2V0SGVpZ2h0XHJcbiAgICAgIH0sIGIgPSB0aGlzLl8kY29udGVudEJvdW5kcy5nZXRWYWx1ZSgpO1xyXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgJiYgYm91bmRzLndpZHRoID09PSBiLndpZHRoICYmIGJvdW5kcy5oZWlnaHQgPT09IGIuaGVpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuXyRjb250ZW50Qm91bmRzLm5leHQoYm91bmRzKTtcclxuICAgICAgdGhpcy51cGRhdGVTY3JvbGxCYXIoKTtcclxuICAgICAgdGhpcy5fJHJlc2l6ZUNvbnRlbnQubmV4dChib3VuZHMpO1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUGVyc3BlY3RpdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2Nyb2xsQmFySGFuZGxlcih1cGRhdGU6IGJvb2xlYW4gPSBmYWxzZSwgYmxlbmRpbmc6IGJvb2xlYW4gPSB0cnVlLCBmaXJlVXBkYXRlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uLFxyXG4gICAgICBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAgdmlld3BvcnRCb3VuZHMgPSB0aGlzLl8kdmlld3BvcnRCb3VuZHMuZ2V0VmFsdWUoKSxcclxuICAgICAgY29udGVudEJvdW5kcyA9IHRoaXMuXyRjb250ZW50Qm91bmRzLmdldFZhbHVlKCksXHJcbiAgICAgIHN0YXJ0T2Zmc2V0ID0gdGhpcy5zdGFydE9mZnNldCxcclxuICAgICAgZW5kT2Zmc2V0ID0gdGhpcy5lbmRPZmZzZXQsXHJcbiAgICAgIHtcclxuICAgICAgICB0aHVtYlNpemUsXHJcbiAgICAgICAgdGh1bWJQb3NpdGlvbixcclxuICAgICAgICB0aHVtYkdyYWRpZW50UG9zaXRpb25zLFxyXG4gICAgICB9ID0gdGhpcy5fc2Nyb2xsQm94LmNhbGN1bGF0ZVNjcm9sbCh7XHJcbiAgICAgICAgZGlyZWN0aW9uLFxyXG4gICAgICAgIHZpZXdwb3J0V2lkdGg6IHZpZXdwb3J0Qm91bmRzLndpZHRoLFxyXG4gICAgICAgIHZpZXdwb3J0SGVpZ2h0OiB2aWV3cG9ydEJvdW5kcy5oZWlnaHQsXHJcbiAgICAgICAgY29udGVudFdpZHRoOiBjb250ZW50Qm91bmRzLndpZHRoLFxyXG4gICAgICAgIGNvbnRlbnRIZWlnaHQ6IGNvbnRlbnRCb3VuZHMuaGVpZ2h0LFxyXG4gICAgICAgIHN0YXJ0T2Zmc2V0LFxyXG4gICAgICAgIGVuZE9mZnNldCxcclxuICAgICAgICBwb3NpdGlvblg6IHRoaXMuX3gsXHJcbiAgICAgICAgcG9zaXRpb25ZOiB0aGlzLl95LFxyXG4gICAgICAgIG1pblNpemU6IHRoaXMuc2Nyb2xsYmFyTWluU2l6ZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5fJHRodW1iR3JhZGllbnRQb3NpdGlvbnMubmV4dCh0aHVtYkdyYWRpZW50UG9zaXRpb25zKTtcclxuICAgIHRoaXMuXyR0aHVtYlNpemUubmV4dCh0aHVtYlNpemUpO1xyXG4gICAgY29uc3QgYWN0dWFsVGh1bWJQb3NpdGlvbiA9IHRodW1iUG9zaXRpb24gPCBzdGFydE9mZnNldCA/IHN0YXJ0T2Zmc2V0IDogdGh1bWJQb3NpdGlvbjtcclxuICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgdGhpcy5zY3JvbGxCYXI/LnNjcm9sbCh7XHJcbiAgICAgICAgW2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBhY3R1YWxUaHVtYlBvc2l0aW9uLCBmaXJlVXBkYXRlLCBiZWhhdmlvcjogQkVIQVZJT1JfSU5TVEFOVCxcclxuICAgICAgICB1c2VyQWN0aW9uOiBmYWxzZSwgYmxlbmRpbmcsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fJHNjcm9sbGJhclNob3cubmV4dCh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy5zY3JvbGxiYXJFbmFibGVkKTtcclxuICB9O1xyXG5cclxuICBvdmVycmlkZSB0aWNrKCkge1xyXG4gICAgc3VwZXIudGljaygpO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsQmFyPy50aWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNjcm9sbEJhcigpIHtcclxuICAgIHRoaXMuXyR1cGRhdGVTY3JvbGxCYXIubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFNjcm9sbGJhcigpIHtcclxuICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFySGFuZGxlcih0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG9uRHJhZ1N0YXJ0KCkge1xyXG4gICAgc3VwZXIub25EcmFnU3RhcnQoKTtcclxuXHJcbiAgICB0aGlzLnN0b3BTY3JvbGxiYXIoKTtcclxuXHJcbiAgICB0aGlzLl9pc1Njcm9sbGJhclVzZXJBY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVNjcm9sbEJhcigpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgcmVzZXQoKSB7XHJcbiAgICBzdXBlci5yZXNldCgpO1xyXG4gICAgdGhpcy50b3RhbFNpemUgPSAwO1xyXG4gICAgdGhpcy5vblJlc2l6ZUNvbnRlbnQoMCk7XHJcbiAgICB0aGlzLnN0b3BTY3JvbGxiYXIoKTtcclxuICAgIHRoaXMucmVmcmVzaCh0cnVlLCB0cnVlKTtcclxuICAgIHRoaXMucHJlcGFyZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goZmlyZVVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlLCB1cGRhdGVTY3JvbGxiYXI6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAodXBkYXRlU2Nyb2xsYmFyKSB7XHJcbiAgICAgIHRoaXMuc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2Nyb2xsTGltaXRzKCk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoQ29vcmRpbmF0ZSh0aGlzLl94LCB0aGlzLl95KTtcclxuXHJcbiAgICBpZiAodXBkYXRlU2Nyb2xsYmFyKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2Nyb2xsQmFySGFuZGxlcihmYWxzZSk7XHJcbiAgICAgIHRoaXMuZW1pdFNjcm9sbGFibGVFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaXJlVXBkYXRlKSB7XHJcbiAgICAgIHRoaXMuZmlyZVNjcm9sbEV2ZW50KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNuYXBJZk5lZWQoYW5pbWF0ZWQgPSB0cnVlKSB7XHJcbiAgICB0aGlzLnNuYXBXaXRoSW5pdGlhbEZvcmNlSWZOZWNlc3NhcnkobnVsbCwgYW5pbWF0ZWQsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTY3JvbGxUbygpIHtcclxuICAgIHRoaXMuc3RvcFNjcm9sbGJhcigpO1xyXG4gICAgdGhpcy5zdG9wU2Nyb2xsaW5nKHRydWUpO1xyXG4gICAgdGhpcy5fc2Nyb2xsRGlyZWN0aW9uLmNsZWFyKCk7XHJcbiAgICB0aGlzLmRyb3BWZWxvY2l0eSgpO1xyXG4gICAgdGhpcy5faXNTY3JvbGxzVG8gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZmluaXNoZWRTY3JvbGxUbygpIHtcclxuICAgIHRoaXMuX2lzU2Nyb2xsc1RvID0gZmFsc2U7XHJcbiAgICB0aGlzLl9zY3JvbGxEaXJlY3Rpb24uY2xlYXIoKTtcclxuICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgICB0aGlzLmNoZWNrSW50ZXJzZWN0aW9uQ29tcG9uZW50KCk7XHJcbiAgICB0aGlzLmZpcmVTY3JvbGxFdmVudCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvKHBhcmFtczogSVNjcm9sbFRvUGFyYW1zKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHVzZXJBY3Rpb24gPSBwYXJhbXM/LnVzZXJBY3Rpb24gPz8gdHJ1ZTtcclxuICAgIGlmICh1c2VyQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuX2lzU2Nyb2xsYmFyVXNlckFjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNjcm9sbEJhcj8uc3RvcFNjcm9sbGluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsKHsgLi4ucGFyYW1zLCB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RvcFNjcm9sbGJhcigpIHtcclxuICAgIGlmICghIXRoaXMuc2Nyb2xsQmFyKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsQmFyLnN0b3BTY3JvbGxpbmcoKTtcclxuICAgICAgdGhpcy5hbGlnblBvc2l0aW9uKCk7XHJcbiAgICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRyb3BWZWxvY2l0eSgpIHtcclxuICAgIHRoaXMuX3ZlbG9jaXRpZXMgPSBbMF07XHJcbiAgICB0aGlzLl8kdmVsb2NpdHkubmV4dCgwKTtcclxuICAgIHRoaXMuXyRhdmVyYWdlVmVsb2NpdHkubmV4dCgwKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBzdG9wTW92aW5nKCkge1xyXG4gICAgc3VwZXIuc3RvcE1vdmluZygpO1xyXG4gICAgdGhpcy5kcm9wVmVsb2NpdHkoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBvbkFuaW1hdGlvbkNvbXBsZXRlKHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZHJvcFZlbG9jaXR5KCk7XHJcbiAgICB0aGlzLl8kc2Nyb2xsRW5kLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgb25TY3JvbGxCYXJEcmFnSGFuZGxlcihldmVudDogSVNjcm9sbEJhckRyYWdFdmVudCkge1xyXG4gICAgY29uc3QgeyBwb3NpdGlvbiwgbWluLCBtYXgsIHVzZXJBY3Rpb24gfSA9IGV2ZW50O1xyXG4gICAgdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uID0gdXNlckFjdGlvbjtcclxuICAgIGlmICghdXNlckFjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl8kc2Nyb2xsYmFyU2Nyb2xsLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLnN0b3BTY3JvbGxpbmcodHJ1ZSk7XHJcbiAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5fJGlzVmVydGljYWwuZ2V0VmFsdWUoKSxcclxuICAgICAge1xyXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVBvc2l0aW9uLFxyXG4gICAgICB9ID0gdGhpcy5fc2Nyb2xsQm94LmdldFNjcm9sbFBvc2l0aW9uQnlTY3JvbGxCYXIoe1xyXG4gICAgICAgIHNjcm9sbFNpemU6IGlzVmVydGljYWwgPyB0aGlzLnNjcm9sbEhlaWdodCA6IHRoaXMuc2Nyb2xsV2lkdGgsXHJcbiAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsVG8oe1xyXG4gICAgICBbaXNWZXJ0aWNhbCA/IFRPUCA6IExFRlRdOiBhYnNvbHV0ZVBvc2l0aW9uLCBiZWhhdmlvcjogSU5TVEFOVCxcclxuICAgICAgYmxlbmRpbmc6IGZhbHNlLCB1c2VyQWN0aW9uOiB0cnVlLCBmaXJlVXBkYXRlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmVtaXRTY3JvbGxhYmxlRXZlbnQoKTtcclxuICAgIHRoaXMuX3NlcnZpY2UudXBkYXRlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsQmFyRHJhZ0VuZEhhbmRsZXIoZXZlbnQ6IElTY3JvbGxCYXJEcmFnRXZlbnQpIHtcclxuICAgIGNvbnN0IHsgcG9zaXRpb24sIG1pbiwgbWF4LCB1c2VyQWN0aW9uIH0gPSBldmVudDtcclxuICAgIHRoaXMuX2lzU2Nyb2xsYmFyVXNlckFjdGlvbiA9IHVzZXJBY3Rpb247XHJcbiAgICBpZiAoIXVzZXJBY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNTY3JvbGxiYXJVc2VyQWN0aW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmRyb3BWZWxvY2l0eSgpO1xyXG4gICAgdGhpcy5fc2VydmljZS51cGRhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgaXNFZGdlID0gdGhpcy5maXJlVXBkYXRlSWZFZGdlc0RldGVjdGVkKHBvc2l0aW9uLCBtaW4sIG1heCwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICBpZiAoIWlzRWRnZSkge1xyXG4gICAgICB0aGlzLmFsaWduUG9zaXRpb24oKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3Njcm9sbERpcmVjdGlvbi5jbGVhcigpO1xyXG4gICAgdGhpcy5fJHNjcm9sbGJhclNjcm9sbC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5maXJlU2Nyb2xsRXZlbnQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpcmVVcGRhdGVJZkVkZ2VzRGV0ZWN0ZWQocG9zaXRpb246IG51bWJlciwgbWluOiBudW1iZXIgPSAwLCBtYXg6IG51bWJlciA9IDEsIGFuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlLCB1c2VyQWN0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICh1c2VyQWN0aW9uICYmIGFuaW1hdGlvbikge1xyXG4gICAgICBpZiAocG9zaXRpb24gPD0gbWluKSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zY3JvbGxUb1N0YXJ0KCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPj0gbWF4KSB7XHJcbiAgICAgICAgdGhpcy5fc2VydmljZS5zY3JvbGxUb0VuZCgpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59IiwiPGRpdiBsb2NhbGVTZW5zaXRpdmUgW2xhbmdUZXh0RGlyXT1cIigkbGFuZ1RleHREaXIgfCBhc3luYykhXCIgW2xpc3REaXJdPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCIgY2xhc3M9XCJuZ3ZsX19jb250YWluZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwiKCRjb250YWluZXJDbGFzc2VzIHwgYXN5bmMpIVwiPlxyXG4gICAgPHN2ZyBwYXJ0PVwidmlld3BvcnRcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XHJcbiAgICAgICAgPGZpbHRlciBbaWRdPVwiX2ZpbHRlcklkXCI+XHJcbiAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciAjZmlsdGVyPjwvZmVHYXVzc2lhbkJsdXI+XHJcbiAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgPGZvcmVpZ25PYmplY3QgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIGNsYXNzPVwibmd2bF9fdmlld3BvcnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ndmxfX3Njcm9sbGVyLXdyYXBwZXJcIiBbY2xhc3MuZmlsdGVyZWRdPVwiKCRtb3Rpb25CbHVyRW5hYmxlZCB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZpbHRlcl09XCIoJG1vdGlvbkJsdXJFbmFibGVkIHwgYXN5bmMpISA/IF9maWx0ZXIgOiAndW5zZXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNka1Njcm9sbGFibGUgI3Njcm9sbFZpZXdwb3J0IHBhcnQ9XCJzY3JvbGxlclwiIGNsYXNzPVwibmd2bF9fc2Nyb2xsZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNzY3JvbGxDb250ZW50IFthdHRyLmFyaWEtb3JpZW50YXRpb25dPVwiKCRkaXJlY3Rpb24gfCBhc3luYykhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIiRmb2N1c2VkRWxlbWVudCB8IGFzeW5jXCIgdGFiaW5kZXg9XCIwXCIgcGFydD1cImxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5ndmxfX2xpc3RcIiBbbmdDbGFzc109XCIoJGFjdHVhbENsYXNzZXMgfCBhc3luYykhXCIgW25nU3R5bGVdPVwiKCRsaXN0U3R5bGVzIHwgYXN5bmMpIVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxyXG4gICAgPC9zdmc+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCRzY3JvbGxiYXJFbmFibGVkIHwgYXN5bmMpIVwiPlxyXG4gICAgICAgIDxuZy1zY3JvbGwtYmFyICNzY3JvbGxCYXIgW2RpcmVjdGlvbl09XCIoJGRpcmVjdGlvbiB8IGFzeW5jKSFcIiBbc2l6ZV09XCIoJGFjdHVhbFRodW1iU2l6ZSB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbbGFuZ1RleHREaXJdPVwiKCRsYW5nVGV4dERpciB8IGFzeW5jKSFcIiBbcmVuZGVyZXJdPVwiKCRzY3JvbGxiYXJUaHVtYlJlbmRlcmVyIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFt0aGlja25lc3NdPVwiKCRzY3JvbGxiYXJUaGlja25lc3MgfCBhc3luYykhXCIgW3BhcmFtc109XCIoJHNjcm9sbGJhclRodW1iUGFyYW1zIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cIigkbG9hZGluZyB8IGFzeW5jKSFcIiBbb3ZlcmxhcHBpbmddPVwiKCRvdmVybGFwcGluZ1Njcm9sbGJhciB8IGFzeW5jKSFcIlxyXG4gICAgICAgICAgICBbdGh1bWJHcmFkaWVudFBvc2l0aW9uc109XCIoJHRodW1iQ29sb3JQb3NpdGlvbnMgfCBhc3luYykhXCIgW3ByZXBhcmVkXT1cIigkcHJlcGFyZWRTaWduYWwgfCBhc3luYykhXCJcclxuICAgICAgICAgICAgW2ludGVyYWN0aXZlXT1cIigkc2Nyb2xsYmFySW50ZXJhY3RpdmUgfCBhc3luYykhXCIgW3Nob3ddPVwiKCRzaG93IHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFtzdGFydE9mZnNldF09XCIoJHN0YXJ0T2Zmc2V0IHwgYXN5bmMpIVwiIFtsYW5nVGV4dERpcl09XCIoJGxhbmdUZXh0RGlyIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIFtlbmRPZmZzZXRdPVwiKCRlbmRPZmZzZXQgfCBhc3luYykhXCIgW292ZXJzY3JvbGxFbmFibGVkXT1cIigkb3ZlcnNjcm9sbEVuYWJsZWQgfCBhc3luYykhXCJcclxuICAgICAgICAgICAgW3Njcm9sbEJlaGF2aW9yXT1cIigkc2Nyb2xsQmVoYXZpb3IgfCBhc3luYykhXCIgW3Njcm9sbGJhck1pblNpemVdPVwiKCRzY3JvbGxiYXJNaW5TaXplIHwgYXN5bmMpIVwiXHJcbiAgICAgICAgICAgIChvbkRyYWcpPVwib25TY3JvbGxCYXJEcmFnSGFuZGxlcigkZXZlbnQpXCIgKG9uRHJhZ0VuZCk9XCJvblNjcm9sbEJhckRyYWdFbmRIYW5kbGVyKCRldmVudClcIj48L25nLXNjcm9sbC1iYXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+Il19
|