ng-virtual-list 14.0.0 → 14.0.2
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/README.md +7 -7
- package/esm2020/lib/components/ng-virtual-list-item.component.mjs +2 -2
- package/esm2020/lib/const/index.mjs +2 -1
- package/esm2020/lib/enums/direction.mjs +1 -1
- package/esm2020/lib/enums/directions.mjs +2 -2
- package/esm2020/lib/models/collection.model.mjs +1 -1
- package/esm2020/lib/models/index.mjs +1 -1
- package/esm2020/lib/models/item.model.mjs +1 -1
- package/esm2020/lib/models/render-collection.model.mjs +1 -1
- package/esm2020/lib/models/render-item-config.model.mjs +1 -1
- package/esm2020/lib/models/render-item.model.mjs +1 -1
- package/esm2020/lib/models/scroll-direction.model.mjs +2 -0
- package/esm2020/lib/models/scroll-event.model.mjs +2 -0
- package/esm2020/lib/models/sticky-map.model.mjs +1 -1
- package/esm2020/lib/ng-virtual-list.component.mjs +43 -46
- package/esm2020/lib/types/id.mjs +1 -1
- package/esm2020/lib/types/rect.mjs +1 -1
- package/esm2020/lib/types/size.mjs +1 -1
- package/esm2020/lib/utils/cacheMap.mjs +43 -2
- package/esm2020/lib/utils/debounce.mjs +2 -2
- package/esm2020/lib/utils/disposableComponent.mjs +2 -2
- package/esm2020/lib/utils/eventEmitter.mjs +2 -2
- package/esm2020/lib/utils/isDirection.mjs +2 -2
- package/esm2020/lib/utils/toggleClassName.mjs +2 -2
- package/esm2020/lib/utils/trackBox.mjs +56 -22
- package/esm2020/lib/utils/tracker.mjs +2 -2
- package/fesm2015/ng-virtual-list.mjs +143 -73
- package/fesm2015/ng-virtual-list.mjs.map +1 -1
- package/fesm2020/ng-virtual-list.mjs +146 -74
- package/fesm2020/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-virtual-list-item.component.d.ts +1 -1
- package/lib/const/index.d.ts +1 -0
- package/lib/enums/direction.d.ts +1 -1
- package/lib/enums/directions.d.ts +1 -1
- package/lib/models/collection.model.d.ts +1 -1
- package/lib/models/index.d.ts +3 -1
- package/lib/models/item.model.d.ts +1 -1
- package/lib/models/render-collection.model.d.ts +1 -1
- package/lib/models/render-item-config.model.d.ts +1 -1
- package/lib/models/render-item.model.d.ts +1 -1
- package/lib/models/scroll-direction.model.d.ts +5 -0
- package/lib/models/scroll-event.model.d.ts +18 -0
- package/lib/models/sticky-map.model.d.ts +1 -1
- package/lib/ng-virtual-list.component.d.ts +7 -9
- package/lib/types/id.d.ts +1 -1
- package/lib/types/rect.d.ts +1 -1
- package/lib/types/size.d.ts +1 -1
- package/lib/utils/cacheMap.d.ts +11 -1
- package/lib/utils/debounce.d.ts +1 -1
- package/lib/utils/disposableComponent.d.ts +1 -1
- package/lib/utils/eventEmitter.d.ts +1 -1
- package/lib/utils/isDirection.d.ts +1 -1
- package/lib/utils/toggleClassName.d.ts +1 -1
- package/lib/utils/trackBox.d.ts +4 -4
- package/lib/utils/tracker.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Simple debounce function.
|
|
3
|
-
* @link https://github.com/DjonnyX/ng-virtual-list/blob/
|
|
3
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/debounce.ts
|
|
4
4
|
* @author Evgenii Grebennikov
|
|
5
5
|
* @email djonnyx@gmail.com
|
|
6
6
|
*/
|
|
@@ -28,4 +28,4 @@ export const debounce = (cb, debounceTime = 0) => {
|
|
|
28
28
|
dispose,
|
|
29
29
|
};
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9kZWJvdW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQWlDLEVBQUUsZUFBdUIsQ0FBQyxFQUFFLEVBQUU7SUFDcEYsSUFBSSxPQUFZLENBQUM7SUFDakIsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUN2QixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDLENBQUE7SUFDRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBZ0IsRUFBRSxFQUFFO1FBQ3BDLE9BQU8sRUFBRSxDQUFDO1FBRVYsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUNGLE9BQU87UUFDSDs7V0FFRztRQUNILE9BQU87UUFDUDs7V0FFRztRQUNILE9BQU87S0FDVixDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFNpbXBsZSBkZWJvdW5jZSBmdW5jdGlvbi5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTQueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9kZWJvdW5jZS50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZGVib3VuY2UgPSAoY2I6ICguLi5hcmdzOiBBcnJheTxhbnk+KSA9PiB2b2lkLCBkZWJvdW5jZVRpbWU6IG51bWJlciA9IDApID0+IHtcclxuICAgIGxldCB0aW1lb3V0OiBhbnk7XHJcbiAgICBjb25zdCBkaXNwb3NlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGV4ZWN1dGUgPSAoLi4uYXJnczogQXJyYXk8YW55PikgPT4ge1xyXG4gICAgICAgIGRpc3Bvc2UoKTtcclxuXHJcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjYiguLi5hcmdzKTtcclxuICAgICAgICB9LCBkZWJvdW5jZVRpbWUpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogIENhbGwgaGFuZGxpbmcgbWV0aG9kXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZXhlY3V0ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNZXRob2Qgb2YgZGVzdHJveWluZyBoYW5kbGVyc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRpc3Bvc2UsXHJcbiAgICB9O1xyXG59O1xyXG4iXX0=
|
|
@@ -3,7 +3,7 @@ import { Subject } from 'rxjs';
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
/**
|
|
5
5
|
* Base disposable component
|
|
6
|
-
* @link https://github.com/DjonnyX/ng-virtual-list/blob/
|
|
6
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/disposableComponent.ts
|
|
7
7
|
* @author Evgenii Grebennikov
|
|
8
8
|
* @email djonnyx@gmail.com
|
|
9
9
|
*/
|
|
@@ -26,4 +26,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
26
26
|
template: ``,
|
|
27
27
|
}]
|
|
28
28
|
}] });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcG9zYWJsZUNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL2Rpc3Bvc2FibGVDb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUUvQjs7Ozs7R0FLRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFIaEM7UUFJYyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7S0FRakQ7SUFORyxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQztJQUNMLENBQUM7O2dIQVJRLG1CQUFtQjtvR0FBbkIsbUJBQW1CLG9EQUZsQixFQUFFOzJGQUVILG1CQUFtQjtrQkFIL0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsRUFBRTtpQkFDZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGRpc3Bvc2FibGUgY29tcG9uZW50XHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE0LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvZGlzcG9zYWJsZUNvbXBvbmVudC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiBgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIERpc3Bvc2FibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgcHJvdGVjdGVkIF8kdW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl8kdW5zdWJzY3JpYmUpIHtcclxuICAgICAgICAgICAgdGhpcy5fJHVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgICAgICAgICAgdGhpcy5fJHVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Simple event emitter
|
|
3
|
-
* @link https://github.com/DjonnyX/ng-virtual-list/blob/
|
|
3
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/eventEmitter.ts
|
|
4
4
|
* @author Evgenii Grebennikov
|
|
5
5
|
* @email djonnyx@gmail.com
|
|
6
6
|
*/
|
|
@@ -103,4 +103,4 @@ export class EventEmitter {
|
|
|
103
103
|
this.removeAllListeners();
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRFbWl0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvZXZlbnRFbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFPckI7UUFOUSxlQUFVLEdBRWQsRUFBRSxDQUFDO1FBRUcsY0FBUyxHQUFZLEtBQUssQ0FBQztJQUVyQixDQUFDO0lBRWpCOztPQUVHO0lBQ0gsUUFBUSxDQUFDLEtBQVEsRUFBRSxHQUFHLElBQWdCO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQztRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ25ELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM5QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksUUFBUSxFQUFFO29CQUNWLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUM3QjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsS0FBUSxFQUFFLEdBQUcsSUFBZ0I7UUFDdkMsY0FBYyxDQUFDLEdBQUcsRUFBRTtZQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lB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
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRFbWl0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvZXZlbnRFbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFPckI7UUFOUSxlQUFVLEdBRWQsRUFBRSxDQUFDO1FBRUcsY0FBUyxHQUFZLEtBQUssQ0FBQztJQUVyQixDQUFDO0lBRWpCOztPQUVHO0lBQ0gsUUFBUSxDQUFDLEtBQVEsRUFBRSxHQUFHLElBQWdCO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQztRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ25ELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM5QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksUUFBUSxFQUFFO29CQUNWLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUM3QjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsS0FBUSxFQUFFLEdBQUcsSUFBZ0I7UUFDdkMsY0FBYyxDQUFDLEdBQUcsRUFBRTtZQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxTQUFZLEVBQUUsT0FBVTtRQUNyQyxNQUFNLEtBQUssR0FBRyxTQUFtQixDQUFDO1FBQ2xDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ3RELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNaLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLFNBQVksRUFBRSxPQUFVO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLFNBQW1CLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBd0IsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQixDQUFDLFNBQVksRUFBRSxPQUFVO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLFNBQW1CLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLE9BQU87U0FDVjtRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDMUYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDWixTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUUzQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakM7U0FDSjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNkLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksS0FBSyxFQUFFO2dCQUNQLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDMUIsT0FBTyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDekIsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNqQyxJQUFJLFFBQVEsRUFBRTs0QkFDVixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBVSxFQUFFLFFBQWEsQ0FBQyxDQUFDO3lCQUN2RDtxQkFDSjtpQkFDSjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgVEV2ZW50SGFuZGxlciA9ICguLi5hcmdzOiBBcnJheTxhbnk+KSA9PiB2b2lkO1xyXG5cclxuLyoqXHJcbiAqIFNpbXBsZSBldmVudCBlbWl0dGVyXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE0LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvZXZlbnRFbWl0dGVyLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBjbGFzcyBFdmVudEVtaXR0ZXI8RSBleHRlbmRzIHN0cmluZyA9IGFueSwgSCBleHRlbmRzIFRFdmVudEhhbmRsZXIgPSBhbnk+IHtcclxuICAgIHByaXZhdGUgX2xpc3RlbmVyczoge1xyXG4gICAgICAgIFtldmVudE5hbWU6IHN0cmluZ106IEFycmF5PFRFdmVudEhhbmRsZXI+LFxyXG4gICAgfSA9IHt9O1xyXG5cclxuICAgIHByb3RlY3RlZCBfZGlzcG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgdGhlIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIGRpc3BhdGNoKGV2ZW50OiBFLCAuLi5hcmdzOiBBcnJheTxhbnk+KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcztcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnQgYXMgc3RyaW5nXTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0ZW5lcnMpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5hcHBseShjdHgsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdHMgdGhlIGV2ZW50IGFzeW5jXHJcbiAgICAgKi9cclxuICAgIGRpc3BhdGNoQXN5bmMoZXZlbnQ6IEUsIC4uLmFyZ3M6IEFycmF5PGFueT4pOiB2b2lkIHtcclxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goZXZlbnQsIC4uLmFyZ3MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCBsaXN0ZW5lciBpcyBhbHJlYWR5IHN1YnNjcmliZWQuXHJcbiAgICAgKi9cclxuICAgIGhhc0V2ZW50TGlzdGVuZXIoZXZlbnROYW1lOiBFLCBoYW5kbGVyOiBIKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgZXZlbnQgPSBldmVudE5hbWUgYXMgc3RyaW5nO1xyXG4gICAgICAgIGlmICh0aGlzLl9saXN0ZW5lcnMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldmVudF07XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdGVuZXJzLmZpbmRJbmRleCh2ID0+IHYgPT09IGhhbmRsZXIpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZXZlbnQgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWU6IEUsIGhhbmRsZXI6IEgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50TmFtZSBhcyBzdHJpbmc7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyc1tldmVudF0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIgYXMgVEV2ZW50SGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWU6IEUsIGhhbmRsZXI6IEgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50TmFtZSBhcyBzdHJpbmc7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW2V2ZW50XSwgaW5kZXggPSBsaXN0ZW5lcnMuZmluZEluZGV4KHYgPT4gdiA9PT0gaGFuZGxlcik7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xpc3RlbmVyc1tldmVudF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYWxsIGxpc3RlbmVyc1xyXG4gICAgICovXHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoKSB7XHJcbiAgICAgICAgY29uc3QgZXZlbnRzID0gT2JqZWN0LmtleXModGhpcy5fbGlzdGVuZXJzKTtcclxuICAgICAgICB3aGlsZSAoZXZlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBldmVudHMucG9wKCk7XHJcbiAgICAgICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW2V2ZW50XTtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3RlbmVycykpIHtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSBsaXN0ZW5lcnMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50IGFzIEUsIGxpc3RlbmVyIGFzIEgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIG9mIGRlc3Ryb3lpbmcgaGFuZGxlcnNcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -2,7 +2,7 @@ import { Directions } from "../enums";
|
|
|
2
2
|
const HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'], VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];
|
|
3
3
|
/**
|
|
4
4
|
* Determines the axis membership of a virtual list
|
|
5
|
-
* @link https://github.com/DjonnyX/ng-virtual-list/blob/
|
|
5
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/isDirection.ts
|
|
6
6
|
* @author Evgenii Grebennikov
|
|
7
7
|
* @email djonnyx@gmail.com
|
|
8
8
|
*/
|
|
@@ -12,4 +12,4 @@ export const isDirection = (src, expected) => {
|
|
|
12
12
|
}
|
|
13
13
|
return VERTICAL_ALIASES.includes(src);
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNEaXJlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9pc0RpcmVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWpELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUM1RCxnQkFBZ0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFekQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFjLEVBQUUsUUFBbUIsRUFBVyxFQUFFO0lBQ3hFLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ3ZDLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzNDO0lBQ0QsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uLCBEaXJlY3Rpb25zIH0gZnJvbSBcIi4uL2VudW1zXCI7XHJcblxyXG5jb25zdCBIT1JJWk9OVEFMX0FMSUFTRVMgPSBbRGlyZWN0aW9ucy5IT1JJWk9OVEFMLCAnaG9yaXpvbnRhbCddLFxyXG4gICAgVkVSVElDQUxfQUxJQVNFUyA9IFtEaXJlY3Rpb25zLlZFUlRJQ0FMLCAndmVydGljYWwnXTtcclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHRoZSBheGlzIG1lbWJlcnNoaXAgb2YgYSB2aXJ0dWFsIGxpc3RcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTQueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9pc0RpcmVjdGlvbi50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNEaXJlY3Rpb24gPSAoc3JjOiBEaXJlY3Rpb24sIGV4cGVjdGVkOiBEaXJlY3Rpb24pOiBib29sZWFuID0+IHtcclxuICAgIGlmIChIT1JJWk9OVEFMX0FMSUFTRVMuaW5jbHVkZXMoZXhwZWN0ZWQpKSB7XHJcbiAgICAgICAgcmV0dXJuIEhPUklaT05UQUxfQUxJQVNFUy5pbmNsdWRlcyhzcmMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFZFUlRJQ0FMX0FMSUFTRVMuaW5jbHVkZXMoc3JjKTtcclxufSJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Switch css classes
|
|
3
|
-
* @link https://github.com/DjonnyX/ng-virtual-list/blob/
|
|
3
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/toggleClassName.ts
|
|
4
4
|
* @author Evgenii Grebennikov
|
|
5
5
|
* @email djonnyx@gmail.com
|
|
6
6
|
*/
|
|
@@ -12,4 +12,4 @@ export const toggleClassName = (el, className, remove = false) => {
|
|
|
12
12
|
el.classList.remove(className);
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlQ2xhc3NOYW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvdG9nZ2xlQ2xhc3NOYW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsRUFBZSxFQUFFLFNBQWlCLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxFQUFFO0lBQ2xGLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNuQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMvQjtTQUFNLElBQUksTUFBTSxFQUFFO1FBQ2YsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDbEM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLyoqXHJcbiAqIFN3aXRjaCBjc3MgY2xhc3Nlc1xyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNC54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL3RvZ2dsZUNsYXNzTmFtZS50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdG9nZ2xlQ2xhc3NOYW1lID0gKGVsOiBIVE1MRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcsIHJlbW92ZSA9IGZhbHNlKSA9PiB7XHJcbiAgICBpZiAoIWVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSB7XHJcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xyXG4gICAgfSBlbHNlIGlmIChyZW1vdmUpIHtcclxuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XHJcbiAgICB9XHJcbn07XHJcbiJdfQ==
|
|
@@ -5,7 +5,7 @@ import { HEIGHT_PROP_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME } from "../
|
|
|
5
5
|
export const TRACK_BOX_CHANGE_EVENT_NAME = 'change';
|
|
6
6
|
/**
|
|
7
7
|
* An object that performs tracking, calculations and caching.
|
|
8
|
-
* @link https://github.com/DjonnyX/ng-virtual-list/blob/
|
|
8
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/trackBox.ts
|
|
9
9
|
* @author Evgenii Grebennikov
|
|
10
10
|
* @email djonnyx@gmail.com
|
|
11
11
|
*/
|
|
@@ -43,12 +43,12 @@ export class TrackBox extends CacheMap {
|
|
|
43
43
|
this._debounceChanges.execute(this._version);
|
|
44
44
|
}
|
|
45
45
|
getItemPosition(id, stickyMap, options) {
|
|
46
|
-
const opt = { fromItemId: id, stickyMap,
|
|
46
|
+
const opt = { fromItemId: id, stickyMap, ...options };
|
|
47
47
|
const { scrollSize } = this.recalculateMetrics(opt);
|
|
48
48
|
return scrollSize;
|
|
49
49
|
}
|
|
50
50
|
updateCollection(items, stickyMap, options) {
|
|
51
|
-
const opt = { stickyMap,
|
|
51
|
+
const opt = { stickyMap, ...options };
|
|
52
52
|
this.cacheElements();
|
|
53
53
|
const metrics = this.recalculateMetrics({
|
|
54
54
|
...opt,
|
|
@@ -57,14 +57,35 @@ export class TrackBox extends CacheMap {
|
|
|
57
57
|
const displayItems = this.generateDisplayCollection(items, stickyMap, metrics);
|
|
58
58
|
return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta };
|
|
59
59
|
}
|
|
60
|
+
getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical) {
|
|
61
|
+
const sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;
|
|
62
|
+
let offset = 0, num = 0;
|
|
63
|
+
for (let j = collection.length - 1; j >= i; j--) {
|
|
64
|
+
const item = collection[j];
|
|
65
|
+
let itemSize = 0;
|
|
66
|
+
if (map.has(item.id)) {
|
|
67
|
+
const bounds = map.get(item.id);
|
|
68
|
+
itemSize = bounds ? bounds[sizeProperty] : typicalItemSize;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
itemSize = typicalItemSize;
|
|
72
|
+
}
|
|
73
|
+
offset += itemSize;
|
|
74
|
+
num++;
|
|
75
|
+
if (offset > size) {
|
|
76
|
+
return { num: 0, offset };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return { num, offset };
|
|
80
|
+
}
|
|
60
81
|
/**
|
|
61
82
|
* Calculates list metrics
|
|
62
83
|
*/
|
|
63
84
|
recalculateMetrics(options) {
|
|
64
|
-
const {
|
|
65
|
-
const { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME, size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize, w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,
|
|
85
|
+
const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, itemsOffset, scrollSize, snap, stickyMap } = options;
|
|
86
|
+
const { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME, size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize, w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height, snippedPos = Math.floor(scrollSize), leftItemsWeights = [], isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)
|
|
66
87
|
|| (typeof fromItemId === 'string' && fromItemId > '-1');
|
|
67
|
-
let itemsFromStartToScrollEnd = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1, leftItemLength = 0, rightItemLength = 0, leftItemsWeight = 0, rightItemsWeight = 0, leftHiddenItemsWeight = 0, totalItemsToDisplayEndWeight = 0, itemById = undefined, itemByIdPos = 0, lastDisplayItemId = undefined, actualScrollSize = itemByIdPos,
|
|
88
|
+
let itemsFromStartToScrollEnd = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1, leftItemLength = 0, rightItemLength = 0, leftItemsWeight = 0, rightItemsWeight = 0, leftHiddenItemsWeight = 0, totalItemsToDisplayEndWeight = 0, itemById = undefined, itemByIdPos = 0, lastDisplayItemId = undefined, actualScrollSize = itemByIdPos, totalSize = 0, startIndex;
|
|
68
89
|
if (dynamicSize) {
|
|
69
90
|
let y = 0, stickyCollectionItem = undefined, stickyComponentSize = 0;
|
|
70
91
|
for (let i = 0, l = collection.length; i < l; i++) {
|
|
@@ -77,21 +98,31 @@ export class TrackBox extends CacheMap {
|
|
|
77
98
|
else {
|
|
78
99
|
componentSize = typicalItemSize;
|
|
79
100
|
}
|
|
101
|
+
totalSize += componentSize;
|
|
80
102
|
if (isFromId) {
|
|
81
103
|
if (itemById === undefined) {
|
|
82
|
-
leftItemsWeights.push(componentSize);
|
|
83
|
-
leftHiddenItemsWeight += componentSize;
|
|
84
|
-
itemsFromStartToScrollEnd = ii;
|
|
85
104
|
if (stickyMap && stickyMap[collectionItem.id] > 0) {
|
|
86
105
|
stickyComponentSize = componentSize;
|
|
87
106
|
stickyCollectionItem = collectionItem;
|
|
88
107
|
}
|
|
89
108
|
if (collectionItem.id === fromItemId) {
|
|
90
|
-
itemById = collectionItem;
|
|
91
|
-
itemByIdPos = y;
|
|
92
109
|
if (stickyCollectionItem && stickyMap && stickyMap[stickyCollectionItem.id] > 0) {
|
|
93
|
-
|
|
110
|
+
const { num } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical);
|
|
111
|
+
if (num > 0) {
|
|
112
|
+
y -= size - componentSize;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
y -= stickyComponentSize;
|
|
116
|
+
leftHiddenItemsWeight -= stickyComponentSize;
|
|
117
|
+
}
|
|
94
118
|
}
|
|
119
|
+
itemById = collectionItem;
|
|
120
|
+
itemByIdPos = y;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
leftItemsWeights.push(componentSize);
|
|
124
|
+
leftHiddenItemsWeight += componentSize;
|
|
125
|
+
itemsFromStartToScrollEnd = ii;
|
|
95
126
|
}
|
|
96
127
|
}
|
|
97
128
|
}
|
|
@@ -119,7 +150,6 @@ export class TrackBox extends CacheMap {
|
|
|
119
150
|
}
|
|
120
151
|
y += componentSize;
|
|
121
152
|
}
|
|
122
|
-
fullHeight = y;
|
|
123
153
|
if (itemsFromStartToScrollEnd === -1) {
|
|
124
154
|
itemsFromStartToScrollEnd = 0;
|
|
125
155
|
}
|
|
@@ -145,12 +175,12 @@ export class TrackBox extends CacheMap {
|
|
|
145
175
|
rightItemsWeight = rightItemLength * typicalItemSize,
|
|
146
176
|
leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize,
|
|
147
177
|
totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;
|
|
148
|
-
actualScrollSize = scrollSize
|
|
149
|
-
|
|
178
|
+
actualScrollSize = scrollSize;
|
|
179
|
+
totalSize = totalLength * typicalItemSize;
|
|
150
180
|
}
|
|
151
181
|
startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);
|
|
152
|
-
const itemsOnDisplay = totalItemsToDisplayEndWeight - leftHiddenItemsWeight, itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd, startPosition = leftHiddenItemsWeight - leftItemsWeight, renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength, delta =
|
|
153
|
-
if (scrollDirection === -1) {
|
|
182
|
+
const itemsOnDisplay = totalItemsToDisplayEndWeight - leftHiddenItemsWeight, itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd, startPosition = leftHiddenItemsWeight - leftItemsWeight, renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength, delta = totalSize - this._previouseFullHeigh;
|
|
183
|
+
if (this.scrollDirection === -1) {
|
|
154
184
|
this._delta += delta;
|
|
155
185
|
}
|
|
156
186
|
const metrics = {
|
|
@@ -183,13 +213,17 @@ export class TrackBox extends CacheMap {
|
|
|
183
213
|
totalSize,
|
|
184
214
|
typicalItemSize,
|
|
185
215
|
};
|
|
186
|
-
|
|
187
|
-
this._previouseFullHeigh = fullHeight;
|
|
188
|
-
}
|
|
216
|
+
this._previouseFullHeigh = totalSize;
|
|
189
217
|
return metrics;
|
|
190
218
|
}
|
|
191
|
-
|
|
219
|
+
clearDeltaDirection() {
|
|
220
|
+
this.clearScrollDirectionCache();
|
|
221
|
+
}
|
|
222
|
+
clearDelta(clearDirectionDetector = false) {
|
|
192
223
|
this._delta = 0;
|
|
224
|
+
if (clearDirectionDetector) {
|
|
225
|
+
this.clearScrollDirectionCache();
|
|
226
|
+
}
|
|
193
227
|
}
|
|
194
228
|
generateDisplayCollection(items, stickyMap, metrics) {
|
|
195
229
|
const {
|
|
@@ -349,4 +383,4 @@ export class TrackBox extends CacheMap {
|
|
|
349
383
|
}
|
|
350
384
|
}
|
|
351
385
|
}
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tCb3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy90cmFja0JveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHdkYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsUUFBUSxDQUFDO0FBc0RwRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFTLFNBQVEsUUFBc0Q7SUF1QmhGLFlBQVksb0JBQTRCO1FBQ3BDLEtBQUssRUFBRSxDQUFDO1FBbUJKLGlCQUFZLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQztRQUVNLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBckJ0RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQXRCRCxJQUFJLEtBQUssQ0FBQyxDQUFrRDtRQUN4RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25CLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFJRCxJQUFJLGlCQUFpQixDQUFDLENBQXFFO1FBQ3ZGLElBQUksSUFBSSxDQUFDLGtCQUFr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VUFBVSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RGLElBQUksSUFBSSxHQUFXLENBQUMsQ0FBQztRQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNsQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7YUFDM0Q7aUJBQU07Z0JBQ0gsSUFBSSxJQUFJLGVBQWUsQ0FBQzthQUMzQjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVRLE9BQU87UUFDWixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFaEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ25DO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tIFwiLi4vbW9kZWxzL2NvbGxlY3Rpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB9IGZyb20gXCIuLi9tb2RlbHMvcmVuZGVyLWNvbGxlY3Rpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB9IGZyb20gXCIuLi9tb2RlbHMvcmVuZGVyLWl0ZW0ubW9kZWxcIjtcclxuaW1wb3J0IHsgSWQgfSBmcm9tIFwiLi4vdHlwZXMvaWRcIjtcclxuaW1wb3J0IHsgSVJlY3QgfSBmcm9tIFwiLi4vdHlwZXMvcmVjdFwiO1xyXG5pbXBvcnQgeyBDYWNoZU1hcCB9IGZyb20gXCIuL2NhY2hlTWFwXCI7XHJcbmltcG9ydCB7IFRyYWNrZXIgfSBmcm9tIFwiLi90cmFja2VyXCI7XHJcbmltcG9ydCB7IElTaXplIH0gZnJvbSBcIi4uL3R5cGVzXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBcIi4vZGVib3VuY2VcIjtcclxuaW1wb3J0IHsgSEVJR0hUX1BST1BfTkFNRSwgV0lEVEhfUFJPUF9OQU1FLCBYX1BST1BfTkFNRSwgWV9QUk9QX05BTUUgfSBmcm9tIFwiLi4vY29uc3RcIjtcclxuaW1wb3J0IHsgSVZpcnR1YWxMaXN0U3RpY2t5TWFwIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSA9ICdjaGFuZ2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTWV0cmljcyB7XHJcbiAgICBkZWx0YTogbnVtYmVyO1xyXG4gICAgbm9ybWFsaXplZEl0ZW1XaWR0aDogbnVtYmVyO1xyXG4gICAgbm9ybWFsaXplZEl0ZW1IZWlnaHQ6IG51bWJlcjtcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxuICAgIGR5bmFtaWNTaXplOiBib29sZWFuO1xyXG4gICAgaXRlbVNpemU6IG51bWJlcjtcclxuICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQ6IG51bWJlcjtcclxuICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kOiBudW1iZXI7XHJcbiAgICBpdGVtc09uRGlzcGxheTogbnVtYmVyO1xyXG4gICAgaXRlbXNPbkRpc3BsYXlMZW5ndGg6IG51bWJlcjtcclxuICAgIGlzVmVydGljYWw6IGJvb2xlYW47XHJcbiAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQ6IG51bWJlcjtcclxuICAgIGxlZnRJdGVtTGVuZ3RoOiBudW1iZXI7XHJcbiAgICBsZWZ0SXRlbXNXZWlnaHQ6IG51bWJlcjtcclxuICAgIHJlbmRlckl0ZW1zOiBudW1iZXI7XHJcbiAgICByaWdodEl0ZW1MZW5ndGg6IG51bWJlcjtcclxuICAgIHJpZ2h0SXRlbXNXZWlnaHQ6IG51bWJlcjtcclxuICAgIHNjcm9sbFNpemU6IG51bWJlcjtcclxuICAgIHNpemVQcm9wZXJ0eTogdHlwZW9mIEhFSUdIVF9QUk9QX05BTUUgfCB0eXBlb2YgV0lEVEhfUFJPUF9OQU1FO1xyXG4gICAgc25hcDogYm9vbGVhbjtcclxuICAgIHNuaXBwZWRQb3M6IG51bWJlcjtcclxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcjtcclxuICAgIHN0YXJ0UG9zaXRpb246IG51bWJlcjtcclxuICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQ6IG51bWJlcjtcclxuICAgIHRvdGFsTGVuZ3RoOiBudW1iZXI7XHJcbiAgICB0b3RhbFNpemU6IG51bWJlcjtcclxuICAgIHR5cGljYWxJdGVtU2l6ZTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAtMSB8IDAgfCAxO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PiB7XHJcbiAgICBib3VuZHM6IElTaXplO1xyXG4gICAgY29sbGVjdGlvbjogQztcclxuICAgIGlzVmVydGljYWw6IGJvb2xlYW47XHJcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgaXRlbXNPZmZzZXQ6IG51bWJlcjtcclxuICAgIGR5bmFtaWNTaXplOiBib29sZWFuO1xyXG4gICAgc2Nyb2xsU2l6ZTogbnVtYmVyO1xyXG4gICAgc25hcDogYm9vbGVhbjtcclxuICAgIGZyb21JdGVtSWQ/OiBJZDtcclxuICAgIHNjcm9sbERpcmVjdGlvbj86IFNjcm9sbERpcmVjdGlvbjtcclxufVxyXG5cclxudHlwZSBDYWNoZU1hcEV2ZW50cyA9IHR5cGVvZiBUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUU7XHJcblxyXG50eXBlIE9uQ2hhbmdlRXZlbnRMaXN0ZW5lciA9ICh2ZXJzaW9uOiBudW1iZXIpID0+IHZvaWQ7XHJcblxyXG50eXBlIENhY2hlTWFwTGlzdGVuZXJzID0gT25DaGFuZ2VFdmVudExpc3RlbmVyO1xyXG5cclxuLyoqXHJcbiAqIEFuIG9iamVjdCB0aGF0IHBlcmZvcm1zIHRyYWNraW5nLCBjYWxjdWxhdGlvbnMgYW5kIGNhY2hpbmcuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iL21haW4vcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvdHJhY2tCb3gudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRyYWNrQm94IGV4dGVuZHMgQ2FjaGVNYXA8SWQsIElSZWN0LCBDYWNoZU1hcEV2ZW50cywgQ2FjaGVNYXBMaXN0ZW5lcnM+IHtcclxuICAgIHByb3RlY3RlZCBfdHJhY2tlciE6IFRyYWNrZXI8SVJlbmRlclZpcnR1YWxMaXN0SXRlbSwgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+O1xyXG5cclxuICAgIHByb3RlY3RlZCBfaXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHNldCBpdGVtcyh2OiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pdGVtcyA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9pdGVtcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9kaXNwbGF5Q29tcG9uZW50czogQXJyYXk8Q29tcG9uZW50UmVmPE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50Pj4gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHNldCBkaXNwbGF5Q29tcG9uZW50cyh2OiBBcnJheTxDb21wb25lbnRSZWY8TmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+PiB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGlzcGxheUNvbXBvbmVudHMgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHRyYWNraW5nUHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgICB0aGlzLl90cmFja2VyID0gbmV3IFRyYWNrZXIodHJhY2tpbmdQcm9wZXJ0eU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG92ZXJyaWRlIHNldChpZDogSWQsIGJvdW5kczogSVJlY3QpOiBNYXA8SWQsIElSZWN0PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21hcC5oYXMoaWQpICYmIEpTT04uc3RyaW5naWZ5KHRoaXMuX21hcC5nZXQoaWQpKSA9PT0gSlNPTi5zdHJpbmdpZnkoYm91bmRzKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdiA9IHRoaXMuX21hcC5zZXQoaWQsIGJvdW5kcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYnVtcFZlcnNpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2ZpcmVDaGFuZ2VzID0gKHZlcnNpb246IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2goVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB2ZXJzaW9uKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBfZGVib3VuY2VDaGFuZ2VzID0gZGVib3VuY2UodGhpcy5fZmlyZUNoYW5nZXMsIDApO1xyXG5cclxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBmaXJlQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuX2RlYm91bmNlQ2hhbmdlcy5leGVjdXRlKHRoaXMuX3ZlcnNpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEl0ZW1Qb3NpdGlvbjxJIGV4dGVuZHMgeyBpZDogSWQgfSwgQyBleHRlbmRzIEFycmF5PEk+PihpZDogSWQsIHN0aWNreU1hcDogSVZpcnR1YWxMaXN0U3RpY2t5TWFwLCBvcHRpb25zOiBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3Qgb3B0ID0geyBmcm9tSXRlbUlkOiBpZCwgc3RpY2t5TWFwLCBzY3JvbGxEaXJlY3Rpb246IHVuZGVmaW5lZCwgLi4ub3B0aW9ucyB9O1xyXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsU2l6ZSB9ID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Mob3B0KTtcclxuICAgICAgICByZXR1cm4gc2Nyb2xsU2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDb2xsZWN0aW9uPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGl0ZW1zOiBDLCBzdGlja3lNYXA6IElWaXJ0dWFsTGlzdFN0aWNreU1hcCxcclxuICAgICAgICBvcHRpb25zOiBPbWl0PElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+LCAnY29sbGVjdGlvbic+KTogeyBkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb247IHRvdGFsU2l6ZTogbnVtYmVyOyBkZWx0YTogbnVtYmVyOyB9IHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IHN0aWNreU1hcCwgc2Nyb2xsRGlyZWN0aW9uOiB1bmRlZmluZWQsIC4uLm9wdGlvbnMgfTtcclxuICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMoKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWV0cmljcyA9IHRoaXMucmVjYWxjdWxhdGVNZXRyaWNzKHtcclxuICAgICAgICAgICAgLi4ub3B0LFxyXG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBpdGVtcyxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlzcGxheUl0ZW1zID0gdGhpcy5nZW5lcmF0ZURpc3BsYXlDb2xsZWN0aW9uKGl0ZW1zLCBzdGlja3lNYXAsIG1ldHJpY3MpO1xyXG4gICAgICAgIHJldHVybiB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplOiBtZXRyaWNzLnRvdGFsU2l6ZSwgZGVsdGE6IG1ldHJpY3MuZGVsdGEgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgbGlzdCBtZXRyaWNzXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCByZWNhbGN1bGF0ZU1ldHJpY3M8SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4ob3B0aW9uczogSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnM8SSwgQz4pOiBJTWV0cmljcyB7XHJcbiAgICAgICAgY29uc3QgeyBzY3JvbGxEaXJlY3Rpb24gPSAwLCBmcm9tSXRlbUlkLCBib3VuZHMsIGNvbGxlY3Rpb24sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgaXRlbXNPZmZzZXQsIHNjcm9sbFNpemUsIHNuYXAsIHN0aWNreU1hcCB9ID0gb3B0aW9ucyBhcyBJUmVjYWxjdWxhdGVNZXRyaWNzT3B0aW9uczxJLCBDPiAmIHtcclxuICAgICAgICAgICAgICAgIHN0aWNreU1hcDogSVZpcnR1YWxMaXN0U3RpY2t5TWFwLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGJvdW5kcywgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUUsIHNpemUgPSBpc1ZlcnRpY2FsID8gaGVpZ2h0IDogd2lkdGgsXHJcbiAgICAgICAgICAgIHRvdGFsTGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGgsIHR5cGljYWxJdGVtU2l6ZSA9IGl0ZW1TaXplLFxyXG4gICAgICAgICAgICB3ID0gaXNWZXJ0aWNhbCA/IHdpZHRoIDogdHlwaWNhbEl0ZW1TaXplLCBoID0gaXNWZXJ0aWNhbCA/IHR5cGljYWxJdGVtU2l6ZSA6IGhlaWdodCxcclxuICAgICAgICAgICAgdG90YWxTaXplID0gZHluYW1pY1NpemUgPyB0aGlzLmdldEJvdW5kc0Zyb21DYWNoZShjb2xsZWN0aW9uLCB0eXBpY2FsSXRlbVNpemUsIGlzVmVydGljYWwpIDogdG90YWxMZW5ndGggKiB0eXBpY2FsSXRlbVNpemUsXHJcbiAgICAgICAgICAgIHNuaXBwZWRQb3MgPSBNYXRoLmZsb29yKHNjcm9sbFNpemUpLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzOiBBcnJheTxudW1iZXI+ID0gW10sXHJcbiAgICAgICAgICAgIGlzRnJvbUlkID0gZnJvbUl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgZnJvbUl0ZW1JZCA9PT0gJ251bWJlcicgJiYgZnJvbUl0ZW1JZCA+IC0xKVxyXG4gICAgICAgICAgICAgICAgfHwgKHR5cGVvZiBmcm9tSXRlbUlkID09PSAnc3RyaW5nJyAmJiBmcm9tSXRlbUlkID4gJy0xJyk7XHJcblxyXG4gICAgICAgIGxldCBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kOiBudW1iZXIgPSAtMSwgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gMCwgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSAtMSxcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSAwLCByaWdodEl0ZW1MZW5ndGggPSAwLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgPSAwLCByaWdodEl0ZW1zV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCA9IDAsXHJcbiAgICAgICAgICAgIGl0ZW1CeUlkOiBJIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBpdGVtQnlJZFBvczogbnVtYmVyID0gMCxcclxuICAgICAgICAgICAgbGFzdERpc3BsYXlJdGVtSWQ6IElkIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gaXRlbUJ5SWRQb3MsXHJcbiAgICAgICAgICAgIGZ1bGxIZWlnaHQgPSAwLFxyXG4gICAgICAgICAgICBzdGFydEluZGV4O1xyXG5cclxuICAgICAgICBpZiAoZHluYW1pY1NpemUpIHtcclxuICAgICAgICAgICAgbGV0IHkgPSAwLCBzdGlja3lDb2xsZWN0aW9uSXRlbTogSSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgc3RpY2t5Q29tcG9uZW50U2l6ZSA9IDA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlpID0gaSArIDEsIGNvbGxlY3Rpb25JdGVtID0gY29sbGVjdGlvbltpXSwgbWFwID0gdGhpcy5fbWFwO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb21wb25lbnRTaXplID0gMDtcclxuICAgICAgICAgICAgICAgIGlmIChtYXAuaGFzKGNvbGxlY3Rpb25JdGVtLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG1hcC5nZXQoY29sbGVjdGlvbkl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFNpemUgPSBib3VuZHMgPyBib3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2l6ZSA9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGcm9tSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbUJ5SWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzLnB1c2goY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID0gaWk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RpY2t5TWFwICYmIHN0aWNreU1hcFtjb2xsZWN0aW9uSXRlbS5pZF0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lDb21wb25lbnRTaXplID0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUNvbGxlY3Rpb25JdGVtID0gY29sbGVjdGlvbkl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uSXRlbS5pZCA9PT0gZnJvbUl0ZW1JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUJ5SWQgPSBjb2xsZWN0aW9uSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1CeUlkUG9zID0geTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3lDb2xsZWN0aW9uSXRlbSAmJiBzdGlja3lNYXAgJiYgc3RpY2t5TWFwW3N0aWNreUNvbGxlY3Rpb25JdGVtLmlkXSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtQnlJZFBvcyA9IGl0ZW1CeUlkUG9zIC0gc3RpY2t5Q29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA8IHNjcm9sbFNpemUgLSBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0cy5wdXNoKGNvbXBvbmVudFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPSBpaTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGcm9tSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3REaXNwbGF5SXRlbUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQnlJZCA9PT0gdW5kZWZpbmVkIHx8IHkgPCBpdGVtQnlJZFBvcyArIHNpemUgKyBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyBpdGVtc09mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA8IHNjcm9sbFNpemUgKyBzaXplICsgY29tcG9uZW50U2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gaWk7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgaXRlbXNPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQpIHtcclxuICAgICAgICAgICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgeSArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bGxIZWlnaHQgPSB5O1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGlzRnJvbUlkID8gaXRlbUJ5SWRQb3MgOiBzY3JvbGxTaXplO1xyXG5cclxuICAgICAgICAgICAgbGVmdEl0ZW1zV2VpZ2h0cy5zcGxpY2UoMCwgbGVmdEl0ZW1zV2VpZ2h0cy5sZW5ndGggLSBpdGVtc09mZnNldCk7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodHMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCArPSB2O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCwgaXRlbXNPZmZzZXQpO1xyXG4gICAgICAgICAgICByaWdodEl0ZW1MZW5ndGggPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIGl0ZW1zT2Zmc2V0ID4gdG90YWxMZW5ndGhcclxuICAgICAgICAgICAgICAgID8gdG90YWxMZW5ndGggLSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA6IGl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPSBNYXRoLmZsb29yKHNjcm9sbFNpemUgLyB0eXBpY2FsSXRlbVNpemUpO1xyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA9IE1hdGguY2VpbCgoc2Nyb2xsU2l6ZSArIHNpemUpIC8gdHlwaWNhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLCBpdGVtc09mZnNldCk7XHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCA9IGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kICsgaXRlbXNPZmZzZXQgPiB0b3RhbExlbmd0aFxyXG4gICAgICAgICAgICAgICAgPyB0b3RhbExlbmd0aCAtIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kIDogaXRlbXNPZmZzZXQ7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCA9IGxlZnRJdGVtTGVuZ3RoICogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICByaWdodEl0ZW1zV2VpZ2h0ID0gcmlnaHRJdGVtTGVuZ3RoICogdHlwaWNhbEl0ZW1TaXplLFxyXG4gICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCAqIHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgIHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgICBmdWxsSGVpZ2h0ID0gdG90YWxMZW5ndGggKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXJ0SW5kZXggPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kIC0gbGVmdEl0ZW1MZW5ndGgsIHRvdGFsTGVuZ3RoID4gMCA/IHRvdGFsTGVuZ3RoIC0gMSA6IDApO1xyXG5cclxuICAgICAgICBjb25zdCBpdGVtc09uRGlzcGxheSA9IHRvdGFsSXRlbXNUb0Rpc3BsYXlFbmRXZWlnaHQgLSBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgLSBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC0gbGVmdEl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtcyA9IGl0ZW1zT25EaXNwbGF5TGVuZ3RoICsgbGVmdEl0ZW1MZW5ndGggKyByaWdodEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIGRlbHRhID0gZnVsbEhlaWdodCAtIHRoaXMuX3ByZXZpb3VzZUZ1bGxIZWlnaDtcclxuXHJcbiAgICAgICAgaWYgKHNjcm9sbERpcmVjdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVsdGEgKz0gZGVsdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtZXRyaWNzOiBJTWV0cmljcyA9IHtcclxuICAgICAgICAgICAgZGVsdGE6IHRoaXMuX2RlbHRhLFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbVdpZHRoOiB3LFxyXG4gICAgICAgICAgICBub3JtYWxpemVkSXRlbUhlaWdodDogaCxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodCxcclxuICAgICAgICAgICAgZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgIGl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kLFxyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXksXHJcbiAgICAgICAgICAgIGl0ZW1zT25EaXNwbGF5TGVuZ3RoLFxyXG4gICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zLFxyXG4gICAgICAgICAgICByaWdodEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIHNpemVQcm9wZXJ0eSxcclxuICAgICAgICAgICAgc25hcCxcclxuICAgICAgICAgICAgc25pcHBlZFBvcyxcclxuICAgICAgICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCxcclxuICAgICAgICAgICAgdG90YWxMZW5ndGgsXHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSxcclxuICAgICAgICAgICAgdHlwaWNhbEl0ZW1TaXplLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChzY3JvbGxEaXJlY3Rpb24gIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNlRnVsbEhlaWdoID0gZnVsbEhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtZXRyaWNzO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyRGVsdGEoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGVsdGEgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZURpc3BsYXlDb2xsZWN0aW9uPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGl0ZW1zOiBDLCBzdGlja3lNYXA6IElWaXJ0dWFsTGlzdFN0aWNreU1hcCxcclxuICAgICAgICBtZXRyaWNzOiBJTWV0cmljcyk6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24ge1xyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgICAgLy8gZGVsdGEsXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRJdGVtV2lkdGgsXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRJdGVtSGVpZ2h0LFxyXG4gICAgICAgICAgICAvLyB3aWR0aCxcclxuICAgICAgICAgICAgLy8gaGVpZ2h0LFxyXG4gICAgICAgICAgICBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgLy8gaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsXHJcbiAgICAgICAgICAgIC8vIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kLFxyXG4gICAgICAgICAgICAvLyBpdGVtc09uRGlzcGxheSxcclxuICAgICAgICAgICAgLy8gaXRlbXNPbkRpc3BsYXlMZW5ndGgsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgIC8vIGxlZnRIaWRkZW5JdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgLy8gbGVmdEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIC8vIGxlZnRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgcmVuZGVySXRlbXM6IHJlbmRlckl0ZW1zTGVuZ3RoLFxyXG4gICAgICAgICAgICAvLyByaWdodEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIC8vIHJpZ2h0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgIHNpemVQcm9wZXJ0eSxcclxuICAgICAgICAgICAgc25hcCxcclxuICAgICAgICAgICAgc25pcHBlZFBvcyxcclxuICAgICAgICAgICAgc3RhcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgLy8gdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCxcclxuICAgICAgICAgICAgdG90YWxMZW5ndGgsXHJcbiAgICAgICAgICAgIC8vIHRvdGFsU2l6ZSxcclxuICAgICAgICAgICAgc3RhcnRJbmRleCxcclxuICAgICAgICAgICAgdHlwaWNhbEl0ZW1TaXplLFxyXG4gICAgICAgIH0gPSBtZXRyaWNzLFxyXG4gICAgICAgICAgICBkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA9IHNuaXBwZWRQb3M7XHJcbiAgICAgICAgICAgIGxldCBwb3MgPSBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMgPSByZW5kZXJJdGVtc0xlbmd0aCxcclxuICAgICAgICAgICAgICAgIHN0aWNreUl0ZW06IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIG5leHRTdGlja3k6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCB1bmRlZmluZWQsIHN0aWNreUl0ZW1JbmRleCA9IC0xLFxyXG4gICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSAwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNuYXApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1pbihpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID4gMCA/IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgOiAwLCB0b3RhbExlbmd0aCAtIDEpOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbXNbaV0uaWQsIHN0aWNreSA9IHN0aWNreU1hcFtpZF0sIHNpemUgPSBkeW5hbWljU2l6ZSA/IHRoaXMuZ2V0KGlkKT8uW3NpemVQcm9wZXJ0eV0gfHwgdHlwaWNhbEl0ZW1TaXplIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW1TaXplID0gc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RpY2t5ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGlzVmVydGljYWwgPyAwIDogYWN0dWFsU25pcHBlZFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaXNWZXJ0aWNhbCA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogbm9ybWFsaXplZEl0ZW1XaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogbm9ybWFsaXplZEl0ZW1IZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWRPdXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZHluYW1pY1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbSA9IHsgaWQsIG1lYXN1cmVzLCBkYXRhOiBpdGVtRGF0YSwgY29uZmlnIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW1JbmRleCA9IGk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMucHVzaChzdGlja3lJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaSA9IHN0YXJ0SW5kZXg7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAocmVuZGVySXRlbXMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+PSB0b3RhbExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbXNbaV0uaWQsIHNpemUgPSBkeW5hbWljU2l6ZSA/IHRoaXMuZ2V0KGlkKT8uW3NpemVQcm9wZXJ0eV0gfHwgdHlwaWNhbEl0ZW1TaXplIDogdHlwaWNhbEl0ZW1TaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpZCAhPT0gc3RpY2t5SXRlbT8uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzbmFwcGVkID0gc25hcCAmJiBzdGlja3lNYXBbaWRdID4gMCAmJiBwb3MgPD0gc2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBpc1ZlcnRpY2FsID8gMCA6IHBvcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IGlzVmVydGljYWwgPyBwb3MgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG5vcm1hbGl6ZWRJdGVtV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG5vcm1hbGl6ZWRJdGVtSGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5OiBzdGlja3lNYXBbaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBwZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZE91dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljOiBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGE6IEkgPSBpdGVtc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSA9IHsgaWQsIG1lYXN1cmVzLCBkYXRhOiBpdGVtRGF0YSwgY29uZmlnIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0U3RpY2t5ICYmIHN0aWNreUl0ZW1JbmRleCA8IGkgJiYgc25hcCAmJiBzdGlja3lNYXBbaWRdID4gMCAmJiBwb3MgPD0gc2Nyb2xsU2l6ZSArIHNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5tZWFzdXJlcy54ID0gaXNWZXJ0aWNhbCA/IDAgOiBzbmFwcGVkID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogcG9zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnkgPSBpc1ZlcnRpY2FsID8gc25hcHBlZCA/IGFjdHVhbFNuaXBwZWRQb3NpdGlvbiA6IHBvcyA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gc25hcHBlZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVySXRlbXMgLT0gMTtcclxuICAgICAgICAgICAgICAgIHBvcyArPSBzaXplO1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBheGlzID0gaXNWZXJ0aWNhbCA/IFlfUFJPUF9OQU1FIDogWF9QUk9QX05BTUU7XHJcblxyXG4gICAgICAgICAgICBpZiAobmV4dFN0aWNreSAmJiBzdGlja3lJdGVtICYmIG5leHRTdGlja3kubWVhc3VyZXNbYXhpc10gPD0gc2Nyb2xsU2l6ZSArIHN0aWNreUl0ZW1TaXplKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSA+IHNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLm1lYXN1cmVzW2F4aXNdID0gbmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSAtIHN0aWNreUl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0uY29uZmlnLnNuYXBwZWQgPSBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc25hcHBlZE91dCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc3RpY2t5ID0gMTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreS5jb25maWcuc25hcHBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRyYWNraW5nIGJ5IHByb3BOYW1lXHJcbiAgICAgKi9cclxuICAgIHRyYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5faXRlbXMgfHwgIXRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIudHJhY2sodGhpcy5faXRlbXMsIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHY6IHsgW2lkOiBudW1iZXJdOiBudW1iZXIgfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIuZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgdW50cmFja0NvbXBvbmVudEJ5SWRQcm9wZXJ0eShjb21wb25lbnQ/OiBOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrZXIudW50cmFja0NvbXBvbmVudEJ5SWRQcm9wZXJ0eShjb21wb25lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjYWNoZUVsZW1lbnRzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHNbaV0sIGl0ZW1JZCA9IGNvbXBvbmVudC5pbnN0YW5jZS5pdGVtSWQ7XHJcbiAgICAgICAgICAgIGlmIChpdGVtSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gY29tcG9uZW50Lmluc3RhbmNlLmdldEJvdW5kcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNldChpdGVtSWQsIGJvdW5kcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBjYWxjdWxhdGVkIGJvdW5kcyBmcm9tIGNhY2hlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0Qm91bmRzRnJvbUNhY2hlKGl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uLCB0eXBpY2FsSXRlbVNpemU6IG51bWJlciwgaXNWZXJ0aWNhbDogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IHNpemVQcm9wZXJ0eSA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FLCBtYXAgPSB0aGlzLl9tYXA7XHJcbiAgICAgICAgbGV0IHNpemU6IG51bWJlciA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBpZiAobWFwLmhhcyhpdGVtLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gbWFwLmdldChpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgIHNpemUgKz0gYm91bmRzID8gYm91bmRzW3NpemVQcm9wZXJ0eV0gOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzaXplICs9IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBkaXNwb3NlKCkge1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYm91bmNlQ2hhbmdlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9kZWJvdW5jZUNoYW5nZXMuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJhY2tlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tCb3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy90cmFja0JveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHdkYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsUUFBUSxDQUFDO0FBbURwRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFTLFNBQVEsUUFBc0Q7SUF1QmhGLFlBQVksb0JBQTRCO1FBQ3BDLEtBQUssRUFBRSxDQUFDO1FBbUJKLGlCQUFZLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQztRQUVNLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBckJ0RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQXRCRCxJQUFJLEtBQUssQ0FBQyxDQUFrRDtRQUN4RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25CLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFJRCxJQUFJLGlCQUFpQixDQUFDLENBQXFFO1FBQ3ZGLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLENBQUMsRUFBRTtZQUMvQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFRUSxHQUFHLENBQUMsRUFBTSxFQUFFLE1BQWE7UUFDOUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDcEI7UUFFRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFRa0IsVUFBVTtRQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZUFBZSxDQUEyQyxFQUFNLEVBQUUsU0FBZ0MsRUFBRSxPQUF5QztRQUN6SSxNQUFNLEdBQUcsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDdEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQTJDLEtBQVEsRUFBRSxTQUFnQyxFQUNqRyxPQUE2RDtRQUM3RCxNQUFNLEdBQUcsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDcEMsR0FBRyxHQUFHO1lBQ04sVUFBVSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFFTyxrQkFBa0IsQ0FBMkMsQ0FBUyxFQUFFLFVBQWEsRUFBRSxHQUFtQixFQUFFLGVBQXVCLEVBQ3ZJLElBQVksRUFBRSxVQUFtQjtRQUNqQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDckUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDakIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDbEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO2FBQzlEO2lCQUFNO2dCQUNILFFBQVEsR0FBRyxlQUFlLENBQUM7YUFDOUI7WUFDRCxNQUFNLElBQUksUUFBUSxDQUFDO1lBQ25CLEdBQUcsRUFBRSxDQUFDO1lBQ04sSUFBSSxNQUFNLEdBQUcsSUFBSSxFQUFFO2dCQUNmLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzdCO1NBQ0o7UUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNPLGtCQUFrQixDQUEyQyxPQUF5QztRQUM1RyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQ3JFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BRTVDLENBQUM7UUFFTixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBRSxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUNoSSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxlQUFlLEdBQUcsUUFBUSxFQUMzRCxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFDbkYsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQ25DLGdCQUFnQixHQUFrQixFQUFFLEVBQ3BDLFFBQVEsR0FBRyxVQUFVLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztlQUNuRixDQUFDLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFakUsSUFBSSx5QkFBeUIsR0FBVyxDQUFDLENBQUMsRUFBRSw4QkFBOEIsR0FBRyxDQUFDLEVBQUUsMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLEVBQzNHLGNBQWMsR0FBRyxDQUFDLEVBQUUsZUFBZSxHQUFHLENBQUMsRUFDdkMsZUFBZSxHQUFHLENBQUMsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDLEVBQ3pDLHFCQUFxQixHQUFHLENBQUMsRUFDekIsNEJBQTRCLEdBQUcsQ0FBQyxFQUNoQyxRQUFRLEdBQWtCLFNBQVMsRUFDbkMsV0FBVyxHQUFXLENBQUMsRUFDdkIsaUJBQWlCLEdBQW1CLFNBQVMsRUFDN0MsZ0JBQWdCLEdBQUcsV0FBVyxFQUM5QixTQUFTLEdBQUcsQ0FBQyxFQUNiLFVBQVUsQ0FBQztRQUVmLElBQUksV0FBVyxFQUFFO1lBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLG9CQUFvQixHQUFrQixTQUFTLEVBQUUsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1lBQ3BGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsY0FBYyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFFbEUsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUM1QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7aUJBQ25FO3FCQUFNO29CQUNILGFBQWEsR0FBRyxlQUFlLENBQUM7aUJBQ25DO2dCQUVELFNBQVMsSUFBSSxhQUFhLENBQUM7Z0JBRTNCLElBQUksUUFBUSxFQUFFO29CQUNWLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTt3QkFDeEIsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQy9DLG1CQUFtQixHQUFHLGFBQWEsQ0FBQzs0QkFDcEMsb0JBQW9CLEdBQUcsY0FBYyxDQUFDO3lCQUN6Qzt3QkFFRCxJQUFJLGNBQWMsQ0FBQyxFQUFFLEtBQUssVUFBVSxFQUFFOzRCQUNsQyxJQUFJLG9CQUFvQixJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dDQUM3RSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0NBQy9GLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtvQ0FDVCxDQUFDLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQztpQ0FDN0I7cUNBQU07b0NBQ0gsQ0FBQyxJQUFJLG1CQUFtQixDQUFDO29DQUN6QixxQkFBcUIsSUFBSSxtQkFBbUIsQ0FBQztpQ0FDaEQ7NkJBQ0o7NEJBQ0QsUUFBUSxHQUFHLGNBQWMsQ0FBQzs0QkFDMUIsV0FBVyxHQUFHLENBQUMsQ0FBQzt5QkFDbkI7NkJBQU07NEJBQ0gsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDOzRCQUNyQyxxQkFBcUIsSUFBSSxhQUFhLENBQUM7NEJBQ3ZDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQzt5QkFDbEM7cUJBQ0o7aUJBQ0o7cUJBQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLGFBQWEsRUFBRTtvQkFDdkMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNyQyxxQkFBcUIsSUFBSSxhQUFhLENBQUM7b0JBQ3ZDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztpQkFDbEM7Z0JBRUQsSUFBSSxRQUFRLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLGlCQUFpQixFQUFFO3dCQUNwQixJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksQ0FBQyxHQUFHLFdBQVcsR0FBRyxJQUFJLEdBQUcsYUFBYSxFQUFFOzRCQUNsRSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7NEJBQ2hDLDRCQUE0QixJQUFJLGFBQWEsQ0FBQzs0QkFDOUMsOEJBQThCLEdBQUcsMEJBQTBCLEdBQUcsV0FBVyxDQUFDO3lCQUM3RTtxQkFDSjtpQkFDSjtxQkFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsSUFBSSxHQUFHLGFBQWEsRUFBRTtvQkFDOUMsMEJBQTBCLEdBQUcsRUFBRSxDQUFDO29CQUNoQyw0QkFBNEIsSUFBSSxhQUFhLENBQUM7b0JBQzlDLDhCQUE4QixHQUFHLDBCQUEwQixHQUFHLFdBQVcsQ0FBQztpQkFDN0U7cUJBQU0sSUFBSSxDQUFDLEdBQUcsOEJBQThCLEVBQUU7b0JBQzNDLGdCQUFnQixJQUFJLGFBQWEsQ0FBQztpQkFDckM7Z0JBRUQsQ0FBQyxJQUFJLGFBQWEsQ0FBQzthQUN0QjtZQUVELElBQUkseUJBQXlCLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xDLHlCQUF5QixHQUFHLENBQUMsQ0FBQzthQUNqQztZQUNELElBQUksMEJBQTBCLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ25DLDBCQUEwQixHQUFHLENBQUMsQ0FBQzthQUNsQztZQUNELGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7WUFFdkQsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN6QixlQUFlLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBRUgsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbEUsZUFBZSxHQUFHLDBCQUEwQixHQUFHLFdBQVcsR0FBRyxXQUFXO2dCQUNwRSxDQUFDLENBQUMsV0FBVyxHQUFHLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDaEU7YUFBTTtZQUNILHlCQUF5QixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1lBQ3JFLDBCQUEwQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7WUFDOUUsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbEUsZUFBZSxHQUFHLDBCQUEwQixHQUFHLFdBQVcsR0FBRyxXQUFXO2dCQUNwRSxDQUFDLENBQUMsV0FBVyxHQUFHLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDN0QsZUFBZSxHQUFHLGNBQWMsR0FBRyxlQUFlLENBQUM7WUFDbkQsZ0JBQWdCLEdBQUcsZUFBZSxHQUFHLGVBQWU7Z0JBQ2hELHFCQUFxQixHQUFHLHlCQUF5QixHQUFHLGVBQWU7Z0JBQ25FLDRCQUE0QixHQUFHLDBCQUEwQixHQUFHLGVBQWUsQ0FBQztZQUNoRixnQkFBZ0IsR0FBRyxVQUFVLENBQUM7WUFDOUIsU0FBUyxHQUFHLFdBQVcsR0FBRyxlQUFlLENBQUM7U0FDN0M7UUFDRCxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxjQUFjLEVBQUUsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekcsTUFBTSxjQUFjLEdBQUcsNEJBQTRCLEdBQUcscUJBQXFCLEVBQ3ZFLG9CQUFvQixHQUFHLDBCQUEwQixHQUFHLHlCQUF5QixFQUM3RSxhQUFhLEdBQUcscUJBQXFCLEdBQUcsZUFBZSxFQUN2RCxXQUFXLEdBQUcsb0JBQW9CLEdBQUcsY0FBYyxHQUFHLGVBQWUsRUFDckUsS0FBSyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFFakQsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO1NBQ3hCO1FBQ0QsTUFBTSxPQUFPLEdBQWE7WUFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ2xCLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsb0JBQW9CLEVBQUUsQ0FBQztZQUN2QixLQUFLO1lBQ0wsTUFBTTtZQUNOLFdBQVc7WUFDWCxRQUFRO1lBQ1IseUJBQXlCO1lBQ3pCLDBCQUEwQjtZQUMxQixjQUFjO1lBQ2Qsb0JBQW9CO1lBQ3BCLFVBQVU7WUFDVixxQkFBcUI7WUFDckIsY0FBYztZQUNkLGVBQWU7WUFDZixXQUFXO1lBQ1gsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixVQUFVLEVBQUUsZ0JBQWdCO1lBQzVCLFlBQVk7WUFDWixJQUFJO1lBQ0osVUFBVTtZQUNWLFVBQVU7WUFDVixhQUFhO1lBQ2IsNEJBQTRCO1lBQzVCLFdBQVc7WUFDWCxTQUFTO1lBQ1QsZUFBZTtTQUNsQixDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUVyQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELFVBQVUsQ0FBQyxzQkFBc0IsR0FBRyxLQUFLO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWhCLElBQUksc0JBQXNCLEVBQUU7WUFDeEIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7U0FDcEM7SUFDTCxDQUFDO0lBRVMseUJBQXlCLENBQTJDLEtBQVEsRUFBRSxTQUFnQyxFQUNwSCxPQUFpQjtRQUNqQixNQUFNO1FBQ0YsU0FBUztRQUNULG1CQUFtQixFQUNuQixvQkFBb0I7UUFDcEIsU0FBUztRQUNULFVBQVU7UUFDVixXQUFXO1FBQ1gsWUFBWTtRQUNaLHlCQUF5QjtRQUN6Qiw4QkFBOEI7UUFDOUIsa0JBQWtCO1FBQ2xCLHdCQUF3QjtRQUN4QixVQUFVO1FBQ1YseUJBQXlCO1FBQ3pCLGtCQUFrQjtRQUNsQixtQkFBbUI7UUFDbkIsV0FBVyxFQUFFLGlCQUFpQjtRQUM5QixtQkFBbUI7UUFDbkIsb0JBQW9CO1FBQ3BCLFVBQVUsRUFDVixZQUFZLEVBQ1osSUFBSSxFQUNKLFVBQVUsRUFDVixhQUFhO1FBQ2IsZ0NBQWdDO1FBQ2hDLFdBQVc7UUFDWCxhQUFhO1FBQ2IsVUFBVSxFQUNWLGVBQWUsR0FDbEIsR0FBRyxPQUFPLEVBQ1AsWUFBWSxHQUFpQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2QsTUFBTSxxQkFBcUIsR0FBRyxVQUFVLENBQUM7WUFDekMsSUFBSSxHQUFHLEdBQUcsYUFBYSxFQUNuQixXQUFXLEdBQUcsaUJBQWlCLEVBQy9CLFVBQThDLEVBQUUsVUFBOEMsRUFBRSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQ3BILGNBQWMsR0FBRyxDQUFDLENBQUM7WUFFdkIsSUFBSSxJQUFJLEVBQUU7Z0JBQ04sS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDaEgsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztvQkFDdkksY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDdEIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUNaLE1BQU0sUUFBUSxHQUFHOzRCQUNiLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCOzRCQUN6QyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDekMsS0FBSyxFQUFFLG1CQUFtQjs0QkFDMUIsTUFBTSxFQUFFLG9CQUFvQjt5QkFDL0IsRUFBRSxNQUFNLEdBQUc7NEJBQ1IsVUFBVTs0QkFDVixNQUFNOzRCQUNOLElBQUk7NEJBQ0osT0FBTyxFQUFFLElBQUk7NEJBQ2IsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLE9BQU8sRUFBRSxXQUFXO3lCQUN2QixDQUFDO3dCQUVGLE1BQU0sUUFBUSxHQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFN0IsVUFBVSxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO3dCQUN0RCxlQUFlLEdBQUcsQ0FBQyxDQUFDO3dCQUVwQixZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUM5QixNQUFNO3FCQUNUO2lCQUNKO2FBQ0o7WUFFRCxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7WUFFbkIsT0FBTyxXQUFXLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQixJQUFJLENBQUMsSUFBSSxXQUFXLEVBQUU7b0JBQ2xCLE1BQU07aUJBQ1Q7Z0JBRUQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7Z0JBRS9HLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRSxFQUFFLEVBQUU7b0JBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQzFELFFBQVEsR0FBRzt3QkFDUCxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7d0JBQ3ZCLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsS0FBSyxFQUFFLG1CQUFtQjt3QkFDMUIsTUFBTSxFQUFFLG9CQUFvQjtxQkFDL0IsRUFBRSxNQUFNLEdBQUc7d0JBQ1IsVUFBVTt3QkFDVixNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDckIsSUFBSTt3QkFDSixPQUFPLEVBQUUsS0FBSzt3QkFDZCxVQUFVLEVBQUUsS0FBSzt3QkFDakIsT0FBTyxFQUFFLFdBQVc7cUJBQ3ZCLENBQUM7b0JBRU4sTUFBTSxRQUFRLEdBQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUU3QixNQUFNLElBQUksR0FBMkIsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7b0JBQzlFLElBQUksQ0FBQyxVQUFVLElBQUksZUFBZSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxHQUFHLElBQUksRUFBRTt3QkFDN0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzt3QkFDekUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDekUsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDbEIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO3FCQUN2QztvQkFDRCxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMzQjtnQkFFRCxXQUFXLElBQUksQ0FBQyxDQUFDO2dCQUNqQixHQUFHLElBQUksSUFBSSxDQUFDO2dCQUNaLENBQUMsRUFBRSxDQUFDO2FBQ1A7WUFFRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBRXBELElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsR0FBRyxjQUFjLEVBQUU7Z0JBQ3RGLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUU7b0JBQ3hDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUM7b0JBQ3ZFLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDOUQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUNwQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQ2hDO3FCQUFNO29CQUNILFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztpQkFDcEM7YUFDSjtTQUNKO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzFDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELDRCQUE0QixDQUFDLENBQTJCO1FBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxTQUFrRDtRQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFUyxhQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUIsT0FBTztTQUNWO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ2pGLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDdEIsU0FBUzthQUNaO1lBQ0QsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLEtBQTZCLEVBQUUsZUFBdUIsRUFBRSxVQUFtQjtRQUNsRyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdEYsSUFBSSxJQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ2xCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQzthQUMzRDtpQkFBTTtnQkFDSCxJQUFJLElBQUksZUFBZSxDQUFDO2FBQzNCO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRVEsT0FBTztRQUNaLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVoQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbkM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9uZy12aXJ0dWFsLWxpc3QtaXRlbS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiB9IGZyb20gXCIuLi9tb2RlbHMvY29sbGVjdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtIH0gZnJvbSBcIi4uL21vZGVscy9yZW5kZXItaXRlbS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBJZCB9IGZyb20gXCIuLi90eXBlcy9pZFwiO1xyXG5pbXBvcnQgeyBJUmVjdCB9IGZyb20gXCIuLi90eXBlcy9yZWN0XCI7XHJcbmltcG9ydCB7IENhY2hlTWFwIH0gZnJvbSBcIi4vY2FjaGVNYXBcIjtcclxuaW1wb3J0IHsgVHJhY2tlciB9IGZyb20gXCIuL3RyYWNrZXJcIjtcclxuaW1wb3J0IHsgSVNpemUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIFwiLi9kZWJvdW5jZVwiO1xyXG5pbXBvcnQgeyBIRUlHSFRfUFJPUF9OQU1FLCBXSURUSF9QUk9QX05BTUUsIFhfUFJPUF9OQU1FLCBZX1BST1BfTkFNRSB9IGZyb20gXCIuLi9jb25zdFwiO1xyXG5pbXBvcnQgeyBJVmlydHVhbExpc3RTdGlja3lNYXAgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XHJcblxyXG5leHBvcnQgY29uc3QgVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FID0gJ2NoYW5nZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNZXRyaWNzIHtcclxuICAgIGRlbHRhOiBudW1iZXI7XHJcbiAgICBub3JtYWxpemVkSXRlbVdpZHRoOiBudW1iZXI7XHJcbiAgICBub3JtYWxpemVkSXRlbUhlaWdodDogbnVtYmVyO1xyXG4gICAgd2lkdGg6IG51bWJlcjtcclxuICAgIGhlaWdodDogbnVtYmVyO1xyXG4gICAgZHluYW1pY1NpemU6IGJvb2xlYW47XHJcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xyXG4gICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZDogbnVtYmVyO1xyXG4gICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQ6IG51bWJlcjtcclxuICAgIGl0ZW1zT25EaXNwbGF5OiBudW1iZXI7XHJcbiAgICBpdGVtc09uRGlzcGxheUxlbmd0aDogbnVtYmVyO1xyXG4gICAgaXNWZXJ0aWNhbDogYm9vbGVhbjtcclxuICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgbGVmdEl0ZW1MZW5ndGg6IG51bWJlcjtcclxuICAgIGxlZnRJdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgcmVuZGVySXRlbXM6IG51bWJlcjtcclxuICAgIHJpZ2h0SXRlbUxlbmd0aDogbnVtYmVyO1xyXG4gICAgcmlnaHRJdGVtc1dlaWdodDogbnVtYmVyO1xyXG4gICAgc2Nyb2xsU2l6ZTogbnVtYmVyO1xyXG4gICAgc2l6ZVByb3BlcnR5OiB0eXBlb2YgSEVJR0hUX1BST1BfTkFNRSB8IHR5cGVvZiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICBzbmFwOiBib29sZWFuO1xyXG4gICAgc25pcHBlZFBvczogbnVtYmVyO1xyXG4gICAgc3RhcnRJbmRleDogbnVtYmVyO1xyXG4gICAgc3RhcnRQb3NpdGlvbjogbnVtYmVyO1xyXG4gICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodDogbnVtYmVyO1xyXG4gICAgdG90YWxMZW5ndGg6IG51bWJlcjtcclxuICAgIHRvdGFsU2l6ZTogbnVtYmVyO1xyXG4gICAgdHlwaWNhbEl0ZW1TaXplOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnM8SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4ge1xyXG4gICAgYm91bmRzOiBJU2l6ZTtcclxuICAgIGNvbGxlY3Rpb246IEM7XHJcbiAgICBpc1ZlcnRpY2FsOiBib29sZWFuO1xyXG4gICAgaXRlbVNpemU6IG51bWJlcjtcclxuICAgIGl0ZW1zT2Zmc2V0OiBudW1iZXI7XHJcbiAgICBkeW5hbWljU2l6ZTogYm9vbGVhbjtcclxuICAgIHNjcm9sbFNpemU6IG51bWJlcjtcclxuICAgIHNuYXA6IGJvb2xlYW47XHJcbiAgICBmcm9tSXRlbUlkPzogSWQ7XHJcbn1cclxuXHJcbnR5cGUgQ2FjaGVNYXBFdmVudHMgPSB0eXBlb2YgVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FO1xyXG5cclxudHlwZSBPbkNoYW5nZUV2ZW50TGlzdGVuZXIgPSAodmVyc2lvbjogbnVtYmVyKSA9PiB2b2lkO1xyXG5cclxudHlwZSBDYWNoZU1hcExpc3RlbmVycyA9IE9uQ2hhbmdlRXZlbnRMaXN0ZW5lcjtcclxuXHJcbi8qKlxyXG4gKiBBbiBvYmplY3QgdGhhdCBwZXJmb3JtcyB0cmFja2luZywgY2FsY3VsYXRpb25zIGFuZCBjYWNoaW5nLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNC54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL3RyYWNrQm94LnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmFja0JveCBleHRlbmRzIENhY2hlTWFwPElkLCBJUmVjdCwgQ2FjaGVNYXBFdmVudHMsIENhY2hlTWFwTGlzdGVuZXJzPiB7XHJcbiAgICBwcm90ZWN0ZWQgX3RyYWNrZXIhOiBUcmFja2VyPElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0sIE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50PjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBzZXQgaXRlbXModjogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5faXRlbXMgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5faXRlbXMgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZGlzcGxheUNvbXBvbmVudHM6IEFycmF5PENvbXBvbmVudFJlZjxOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+IHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBzZXQgZGlzcGxheUNvbXBvbmVudHModjogQXJyYXk8Q29tcG9uZW50UmVmPE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50Pj4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID09PSB2KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tlciA9IG5ldyBUcmFja2VyKHRyYWNraW5nUHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBzZXQoaWQ6IElkLCBib3VuZHM6IElSZWN0KTogTWFwPElkLCBJUmVjdD4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9tYXAuaGFzKGlkKSAmJiBKU09OLnN0cmluZ2lmeSh0aGlzLl9tYXAuZ2V0KGlkKSkgPT09IEpTT04uc3RyaW5naWZ5KGJvdW5kcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLl9tYXAuc2V0KGlkLCBib3VuZHMpO1xyXG5cclxuICAgICAgICB0aGlzLmJ1bXBWZXJzaW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9maXJlQ2hhbmdlcyA9ICh2ZXJzaW9uOiBudW1iZXIpID0+IHtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdmVyc2lvbik7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgX2RlYm91bmNlQ2hhbmdlcyA9IGRlYm91bmNlKHRoaXMuX2ZpcmVDaGFuZ2VzLCAwKTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyZUNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLl9kZWJvdW5jZUNoYW5nZXMuZXhlY3V0ZSh0aGlzLl92ZXJzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtUG9zaXRpb248SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaWQ6IElkLCBzdGlja3lNYXA6IElWaXJ0dWFsTGlzdFN0aWNreU1hcCwgb3B0aW9uczogSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnM8SSwgQz4pOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IG9wdCA9IHsgZnJvbUl0ZW1JZDogaWQsIHN0aWNreU1hcCwgLi4ub3B0aW9ucyB9O1xyXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsU2l6ZSB9ID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Mob3B0KTtcclxuICAgICAgICByZXR1cm4gc2Nyb2xsU2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDb2xsZWN0aW9uPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGl0ZW1zOiBDLCBzdGlja3lNYXA6IElWaXJ0dWFsTGlzdFN0aWNreU1hcCxcclxuICAgICAgICBvcHRpb25zOiBPbWl0PElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+LCAnY29sbGVjdGlvbic+KTogeyBkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb247IHRvdGFsU2l6ZTogbnVtYmVyOyBkZWx0YTogbnVtYmVyOyB9IHtcclxuICAgICAgICBjb25zdCBvcHQgPSB7IHN0aWNreU1hcCwgLi4ub3B0aW9ucyB9O1xyXG4gICAgICAgIHRoaXMuY2FjaGVFbGVtZW50cygpO1xyXG5cclxuICAgICAgICBjb25zdCBtZXRyaWNzID0gdGhpcy5yZWNhbGN1bGF0ZU1ldHJpY3Moe1xyXG4gICAgICAgICAgICAuLi5vcHQsXHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGl0ZW1zLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBkaXNwbGF5SXRlbXMgPSB0aGlzLmdlbmVyYXRlRGlzcGxheUNvbGxlY3Rpb24oaXRlbXMsIHN0aWNreU1hcCwgbWV0cmljcyk7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlzcGxheUl0ZW1zLCB0b3RhbFNpemU6IG1ldHJpY3MudG90YWxTaXplLCBkZWx0YTogbWV0cmljcy5kZWx0YSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RWxlbWVudE51bVRvRW5kPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KGk6IG51bWJlciwgY29sbGVjdGlvbjogQywgbWFwOiBNYXA8SWQsIElSZWN0PiwgdHlwaWNhbEl0ZW1TaXplOiBudW1iZXIsXHJcbiAgICAgICAgc2l6ZTogbnVtYmVyLCBpc1ZlcnRpY2FsOiBib29sZWFuKTogeyBudW06IG51bWJlciwgb2Zmc2V0OiBudW1iZXIgfSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUU7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDAsIG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbGxlY3Rpb24ubGVuZ3RoIC0gMTsgaiA+PSBpOyBqLS0pIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNvbGxlY3Rpb25bal07XHJcbiAgICAgICAgICAgIGxldCBpdGVtU2l6ZSA9IDA7XHJcbiAgICAgICAgICAgIGlmIChtYXAuaGFzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBtYXAuZ2V0KGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNpemUgPSBib3VuZHMgPyBib3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1TaXplID0gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9mZnNldCArPSBpdGVtU2l6ZTtcclxuICAgICAgICAgICAgbnVtKys7XHJcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPiBzaXplKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBudW06IDAsIG9mZnNldCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IG51bSwgb2Zmc2V0IH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGxpc3QgbWV0cmljc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVjYWxjdWxhdGVNZXRyaWNzPEkgZXh0ZW5kcyB7IGlkOiBJZCB9LCBDIGV4dGVuZHMgQXJyYXk8ST4+KG9wdGlvbnM6IElSZWNhbGN1bGF0ZU1ldHJpY3NPcHRpb25zPEksIEM+KTogSU1ldHJpY3Mge1xyXG4gICAgICAgIGNvbnN0IHsgZnJvbUl0ZW1JZCwgYm91bmRzLCBjb2xsZWN0aW9uLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zT2Zmc2V0LCBzY3JvbGxTaXplLCBzbmFwLCBzdGlja3lNYXAgfSA9IG9wdGlvbnMgYXMgSVJlY2FsY3VsYXRlTWV0cmljc09wdGlvbnM8SSwgQz4gJiB7XHJcbiAgICAgICAgICAgICAgICBzdGlja3lNYXA6IElWaXJ0dWFsTGlzdFN0aWNreU1hcCxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMsIHNpemVQcm9wZXJ0eSA9IGlzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FLCBzaXplID0gaXNWZXJ0aWNhbCA/IGhlaWdodCA6IHdpZHRoLFxyXG4gICAgICAgICAgICB0b3RhbExlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLCB0eXBpY2FsSXRlbVNpemUgPSBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgdyA9IGlzVmVydGljYWwgPyB3aWR0aCA6IHR5cGljYWxJdGVtU2l6ZSwgaCA9IGlzVmVydGljYWwgPyB0eXBpY2FsSXRlbVNpemUgOiBoZWlnaHQsXHJcbiAgICAgICAgICAgIHNuaXBwZWRQb3MgPSBNYXRoLmZsb29yKHNjcm9sbFNpemUpLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzOiBBcnJheTxudW1iZXI+ID0gW10sXHJcbiAgICAgICAgICAgIGlzRnJvbUlkID0gZnJvbUl0ZW1JZCAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgZnJvbUl0ZW1JZCA9PT0gJ251bWJlcicgJiYgZnJvbUl0ZW1JZCA+IC0xKVxyXG4gICAgICAgICAgICAgICAgfHwgKHR5cGVvZiBmcm9tSXRlbUlkID09PSAnc3RyaW5nJyAmJiBmcm9tSXRlbUlkID4gJy0xJyk7XHJcblxyXG4gICAgICAgIGxldCBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kOiBudW1iZXIgPSAtMSwgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gMCwgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSAtMSxcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGggPSAwLCByaWdodEl0ZW1MZW5ndGggPSAwLFxyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgPSAwLCByaWdodEl0ZW1zV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ID0gMCxcclxuICAgICAgICAgICAgdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCA9IDAsXHJcbiAgICAgICAgICAgIGl0ZW1CeUlkOiBJIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBpdGVtQnlJZFBvczogbnVtYmVyID0gMCxcclxuICAgICAgICAgICAgbGFzdERpc3BsYXlJdGVtSWQ6IElkIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gaXRlbUJ5SWRQb3MsXHJcbiAgICAgICAgICAgIHRvdGFsU2l6ZSA9IDAsXHJcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg7XHJcblxyXG4gICAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgICAgICBsZXQgeSA9IDAsIHN0aWNreUNvbGxlY3Rpb25JdGVtOiBJIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCBzdGlja3lDb21wb25lbnRTaXplID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaWkgPSBpICsgMSwgY29sbGVjdGlvbkl0ZW0gPSBjb2xsZWN0aW9uW2ldLCBtYXAgPSB0aGlzLl9tYXA7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbXBvbmVudFNpemUgPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hcC5oYXMoY29sbGVjdGlvbkl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gbWFwLmdldChjb2xsZWN0aW9uSXRlbS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2l6ZSA9IGJvdW5kcyA/IGJvdW5kc1tzaXplUHJvcGVydHldIDogdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTaXplID0gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSArPSBjb21wb25lbnRTaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtQnlJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3lNYXAgJiYgc3RpY2t5TWFwW2NvbGxlY3Rpb25JdGVtLmlkXSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreUNvbXBvbmVudFNpemUgPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5Q29sbGVjdGlvbkl0ZW0gPSBjb2xsZWN0aW9uSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25JdGVtLmlkID09PSBmcm9tSXRlbUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RpY2t5Q29sbGVjdGlvbkl0ZW0gJiYgc3RpY2t5TWFwICYmIHN0aWNreU1hcFtzdGlja3lDb2xsZWN0aW9uSXRlbS5pZF0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBudW0gfSA9IHRoaXMuZ2V0RWxlbWVudE51bVRvRW5kKGksIGNvbGxlY3Rpb24sIG1hcCwgdHlwaWNhbEl0ZW1TaXplLCBzaXplLCBpc1ZlcnRpY2FsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5IC09IHNpemUgLSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgLT0gc3RpY2t5Q29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0IC09IHN0aWNreUNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUJ5SWQgPSBjb2xsZWN0aW9uSXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1CeUlkUG9zID0geTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodHMucHVzaChjb21wb25lbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCArPSBjb21wb25lbnRTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5IDwgc2Nyb2xsU2l6ZSAtIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzLnB1c2goY29tcG9uZW50U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IGlpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Zyb21JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbGFzdERpc3BsYXlJdGVtSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1CeUlkID09PSB1bmRlZmluZWQgfHwgeSA8IGl0ZW1CeUlkUG9zICsgc2l6ZSArIGNvbXBvbmVudFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID0gaWk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21EaXNwbGF5RW5kVG9PZmZzZXRFbmQgPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIGl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh5IDwgc2Nyb2xsU2l6ZSArIHNpemUgKyBjb21wb25lbnRTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSBpaTtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNGcm9tRGlzcGxheUVuZFRvT2Zmc2V0RW5kID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyBpdGVtc09mZnNldDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IGl0ZW1zRnJvbURpc3BsYXlFbmRUb09mZnNldEVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0SXRlbXNXZWlnaHQgKz0gY29tcG9uZW50U2l6ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB5ICs9IGNvbXBvbmVudFNpemU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBpc0Zyb21JZCA/IGl0ZW1CeUlkUG9zIDogc2Nyb2xsU2l6ZTtcclxuXHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodHMuc3BsaWNlKDAsIGxlZnRJdGVtc1dlaWdodHMubGVuZ3RoIC0gaXRlbXNPZmZzZXQpO1xyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHRzLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgKz0gdjtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZWZ0SXRlbUxlbmd0aCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsIGl0ZW1zT2Zmc2V0KTtcclxuICAgICAgICAgICAgcmlnaHRJdGVtTGVuZ3RoID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKyBpdGVtc09mZnNldCA+IHRvdGFsTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRvdGFsTGVuZ3RoIC0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgOiBpdGVtc09mZnNldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpdGVtc0Zyb21TdGFydFRvU2Nyb2xsRW5kID0gTWF0aC5mbG9vcihzY3JvbGxTaXplIC8gdHlwaWNhbEl0ZW1TaXplKTtcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgPSBNYXRoLmNlaWwoKHNjcm9sbFNpemUgKyBzaXplKSAvIHR5cGljYWxJdGVtU2l6ZSk7XHJcbiAgICAgICAgICAgIGxlZnRJdGVtTGVuZ3RoID0gTWF0aC5taW4oaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCwgaXRlbXNPZmZzZXQpO1xyXG4gICAgICAgICAgICByaWdodEl0ZW1MZW5ndGggPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCArIGl0ZW1zT2Zmc2V0ID4gdG90YWxMZW5ndGhcclxuICAgICAgICAgICAgICAgID8gdG90YWxMZW5ndGggLSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCA6IGl0ZW1zT2Zmc2V0O1xyXG4gICAgICAgICAgICBsZWZ0SXRlbXNXZWlnaHQgPSBsZWZ0SXRlbUxlbmd0aCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodCA9IHJpZ2h0SXRlbUxlbmd0aCAqIHR5cGljYWxJdGVtU2l6ZSxcclxuICAgICAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCA9IGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgKiB0eXBpY2FsSXRlbVNpemUsXHJcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0ID0gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQgKiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgIGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplO1xyXG4gICAgICAgICAgICB0b3RhbFNpemUgPSB0b3RhbExlbmd0aCAqIHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhcnRJbmRleCA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgLSBsZWZ0SXRlbUxlbmd0aCwgdG90YWxMZW5ndGggPiAwID8gdG90YWxMZW5ndGggLSAxIDogMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW1zT25EaXNwbGF5ID0gdG90YWxJdGVtc1RvRGlzcGxheUVuZFdlaWdodCAtIGxlZnRIaWRkZW5JdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlMZW5ndGggPSBpdGVtc0Zyb21TdGFydFRvRGlzcGxheUVuZCAtIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsZWZ0SGlkZGVuSXRlbXNXZWlnaHQgLSBsZWZ0SXRlbXNXZWlnaHQsXHJcbiAgICAgICAgICAgIHJlbmRlckl0ZW1zID0gaXRlbXNPbkRpc3BsYXlMZW5ndGggKyBsZWZ0SXRlbUxlbmd0aCArIHJpZ2h0SXRlbUxlbmd0aCxcclxuICAgICAgICAgICAgZGVsdGEgPSB0b3RhbFNpemUgLSB0aGlzLl9wcmV2aW91c2VGdWxsSGVpZ2g7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjcm9sbERpcmVjdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGVsdGEgKz0gZGVsdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1ldHJpY3M6IElNZXRyaWNzID0ge1xyXG4gICAgICAgICAgICBkZWx0YTogdGhpcy5fZGVsdGEsXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRJdGVtV2lkdGg6IHcsXHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRJdGVtSGVpZ2h0OiBoLFxyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgICAgICBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQsXHJcbiAgICAgICAgICAgIGl0ZW1zRnJvbVN0YXJ0VG9EaXNwbGF5RW5kLFxyXG4gICAgICAgICAgICBpdGVtc09uRGlzcGxheSxcclxuICAgICAgICAgICAgaXRlbXNPbkRpc3BsYXlMZW5ndGgsXHJcbiAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgIGxlZnRIaWRkZW5JdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgbGVmdEl0ZW1MZW5ndGgsXHJcbiAgICAgICAgICAgIGxlZnRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgcmVuZGVySXRlbXMsXHJcbiAgICAgICAgICAgIHJpZ2h0SXRlbUxlbmd0aCxcclxuICAgICAgICAgICAgcmlnaHRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgc2l6ZVByb3BlcnR5LFxyXG4gICAgICAgICAgICBzbmFwLFxyXG4gICAgICAgICAgICBzbmlwcGVkUG9zLFxyXG4gICAgICAgICAgICBzdGFydEluZGV4LFxyXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0LFxyXG4gICAgICAgICAgICB0b3RhbExlbmd0aCxcclxuICAgICAgICAgICAgdG90YWxTaXplLFxyXG4gICAgICAgICAgICB0eXBpY2FsSXRlbVNpemUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNlRnVsbEhlaWdoID0gdG90YWxTaXplO1xyXG5cclxuICAgICAgICByZXR1cm4gbWV0cmljcztcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRlbHRhRGlyZWN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJTY3JvbGxEaXJlY3Rpb25DYWNoZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyRGVsdGEoY2xlYXJEaXJlY3Rpb25EZXRlY3RvciA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGVsdGEgPSAwO1xyXG5cclxuICAgICAgICBpZiAoY2xlYXJEaXJlY3Rpb25EZXRlY3Rvcikge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2Nyb2xsRGlyZWN0aW9uQ2FjaGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlRGlzcGxheUNvbGxlY3Rpb248SSBleHRlbmRzIHsgaWQ6IElkIH0sIEMgZXh0ZW5kcyBBcnJheTxJPj4oaXRlbXM6IEMsIHN0aWNreU1hcDogSVZpcnR1YWxMaXN0U3RpY2t5TWFwLFxyXG4gICAgICAgIG1ldHJpY3M6IElNZXRyaWNzKTogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB7XHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgICAvLyBkZWx0YSxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1XaWR0aCxcclxuICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1IZWlnaHQsXHJcbiAgICAgICAgICAgIC8vIHdpZHRoLFxyXG4gICAgICAgICAgICAvLyBoZWlnaHQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAvLyBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCxcclxuICAgICAgICAgICAgLy8gaXRlbXNGcm9tU3RhcnRUb0Rpc3BsYXlFbmQsXHJcbiAgICAgICAgICAgIC8vIGl0ZW1zT25EaXNwbGF5LFxyXG4gICAgICAgICAgICAvLyBpdGVtc09uRGlzcGxheUxlbmd0aCxcclxuICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgLy8gbGVmdEhpZGRlbkl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICAvLyBsZWZ0SXRlbUxlbmd0aCxcclxuICAgICAgICAgICAgLy8gbGVmdEl0ZW1zV2VpZ2h0LFxyXG4gICAgICAgICAgICByZW5kZXJJdGVtczogcmVuZGVySXRlbXNMZW5ndGgsXHJcbiAgICAgICAgICAgIC8vIHJpZ2h0SXRlbUxlbmd0aCxcclxuICAgICAgICAgICAgLy8gcmlnaHRJdGVtc1dlaWdodCxcclxuICAgICAgICAgICAgc2Nyb2xsU2l6ZSxcclxuICAgICAgICAgICAgc2l6ZVByb3BlcnR5LFxyXG4gICAgICAgICAgICBzbmFwLFxyXG4gICAgICAgICAgICBzbmlwcGVkUG9zLFxyXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAvLyB0b3RhbEl0ZW1zVG9EaXNwbGF5RW5kV2VpZ2h0LFxyXG4gICAgICAgICAgICB0b3RhbExlbmd0aCxcclxuICAgICAgICAgICAgLy8gdG90YWxTaXplLFxyXG4gICAgICAgICAgICBzdGFydEluZGV4LFxyXG4gICAgICAgICAgICB0eXBpY2FsSXRlbVNpemUsXHJcbiAgICAgICAgfSA9IG1ldHJpY3MsXHJcbiAgICAgICAgICAgIGRpc3BsYXlJdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgYWN0dWFsU25pcHBlZFBvc2l0aW9uID0gc25pcHBlZFBvcztcclxuICAgICAgICAgICAgbGV0IHBvcyA9IHN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtcyA9IHJlbmRlckl0ZW1zTGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgc3RpY2t5SXRlbTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCwgbmV4dFN0aWNreTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IHVuZGVmaW5lZCwgc3RpY2t5SXRlbUluZGV4ID0gLTEsXHJcbiAgICAgICAgICAgICAgICBzdGlja3lJdGVtU2l6ZSA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoc25hcCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWluKGl0ZW1zRnJvbVN0YXJ0VG9TY3JvbGxFbmQgPiAwID8gaXRlbXNGcm9tU3RhcnRUb1Njcm9sbEVuZCA6IDAsIHRvdGFsTGVuZ3RoIC0gMSk7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtc1tpXS5pZCwgc3RpY2t5ID0gc3RpY2t5TWFwW2lkXSwgc2l6ZSA9IGR5bmFtaWNTaXplID8gdGhpcy5nZXQoaWQpPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemUgOiB0eXBpY2FsSXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbVNpemUgPSBzaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGlja3kgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lYXN1cmVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogaXNWZXJ0aWNhbCA/IDAgOiBhY3R1YWxTbmlwcGVkUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpc1ZlcnRpY2FsID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBub3JtYWxpemVkSXRlbVdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBub3JtYWxpemVkSXRlbUhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZE91dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeW5hbWljOiBkeW5hbWljU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1EYXRhOiBJID0gaXRlbXNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtID0geyBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbUluZGV4ID0gaTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJdGVtcy5wdXNoKHN0aWNreUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpID0gc3RhcnRJbmRleDtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChyZW5kZXJJdGVtcyA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpID49IHRvdGFsTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtc1tpXS5pZCwgc2l6ZSA9IGR5bmFtaWNTaXplID8gdGhpcy5nZXQoaWQpPy5bc2l6ZVByb3BlcnR5XSB8fCB0eXBpY2FsSXRlbVNpemUgOiB0eXBpY2FsSXRlbVNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlkICE9PSBzdGlja3lJdGVtPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNuYXBwZWQgPSBzbmFwICYmIHN0aWNreU1hcFtpZF0gPiAwICYmIHBvcyA8PSBzY3JvbGxTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGlzVmVydGljYWwgPyAwIDogcG9zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaXNWZXJ0aWNhbCA/IHBvcyA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogbm9ybWFsaXplZEl0ZW1XaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogbm9ybWFsaXplZEl0ZW1IZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlja3k6IHN0aWNreU1hcFtpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHBlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwcGVkT3V0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGR5bmFtaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YTogSSA9IGl0ZW1zW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtID0geyBpZCwgbWVhc3VyZXMsIGRhdGE6IGl0ZW1EYXRhLCBjb25maWcgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHRTdGlja3kgJiYgc3RpY2t5SXRlbUluZGV4IDwgaSAmJiBzbmFwICYmIHN0aWNreU1hcFtpZF0gPiAwICYmIHBvcyA8PSBzY3JvbGxTaXplICsgc2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVzLnggPSBpc1ZlcnRpY2FsID8gMCA6IHNuYXBwZWQgPyBhY3R1YWxTbmlwcGVkUG9zaXRpb24gOiBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubWVhc3VyZXMueSA9IGlzVmVydGljYWwgPyBzbmFwcGVkID8gYWN0dWFsU25pcHBlZFBvc2l0aW9uIDogcG9zIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0aWNreSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBzbmFwcGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJdGVtcyAtPSAxO1xyXG4gICAgICAgICAgICAgICAgcG9zICs9IHNpemU7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGF4aXMgPSBpc1ZlcnRpY2FsID8gWV9QUk9QX05BTUUgOiBYX1BST1BfTkFNRTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuZXh0U3RpY2t5ICYmIHN0aWNreUl0ZW0gJiYgbmV4dFN0aWNreS5tZWFzdXJlc1theGlzXSA8PSBzY3JvbGxTaXplICsgc3RpY2t5SXRlbVNpemUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdID4gc2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWNreUl0ZW0ubWVhc3VyZXNbYXhpc10gPSBuZXh0U3RpY2t5Lm1lYXN1cmVzW2F4aXNdIC0gc3RpY2t5SXRlbVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpY2t5SXRlbS5jb25maWcuc25hcHBlZCA9IG5leHRTdGlja3kuY29uZmlnLnNuYXBwZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLmNvbmZpZy5zbmFwcGVkT3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBzdGlja3lJdGVtLmNvbmZpZy5zdGlja3kgPSAxO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RpY2t5LmNvbmZpZy5zbmFwcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGlzcGxheUl0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdHJhY2tpbmcgYnkgcHJvcE5hbWVcclxuICAgICAqL1xyXG4gICAgdHJhY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pdGVtcyB8fCAhdGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2tlci50cmFjayh0aGlzLl9pdGVtcywgdGhpcy5fZGlzcGxheUNvbXBvbmVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQodjogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlci5kaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkID0gdjtcclxuICAgIH1cclxuXHJcbiAgICB1bnRyYWNrQ29tcG9uZW50QnlJZFByb3BlcnR5KGNvbXBvbmVudD86IE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tlci51bnRyYWNrQ29tcG9uZW50QnlJZFByb3BlcnR5KGNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNhY2hlRWxlbWVudHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kaXNwbGF5Q29tcG9uZW50cykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50c1tpXSwgaXRlbUlkID0gY29tcG9uZW50Lmluc3RhbmNlLml0ZW1JZDtcclxuICAgICAgICAgICAgaWYgKGl0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSBjb21wb25lbnQuaW5zdGFuY2UuZ2V0Qm91bmRzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0KGl0ZW1JZCwgYm91bmRzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGNhbGN1bGF0ZWQgYm91bmRzIGZyb20gY2FjaGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRCb3VuZHNGcm9tQ2FjaGUoaXRlbXM6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIHR5cGljYWxJdGVtU2l6ZTogbnVtYmVyLCBpc1ZlcnRpY2FsOiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZVByb3BlcnR5ID0gaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUUsIG1hcCA9IHRoaXMuX21hcDtcclxuICAgICAgICBsZXQgc2l6ZTogbnVtYmVyID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgIGlmIChtYXAuaGFzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZHMgPSBtYXAuZ2V0KGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICAgICAgc2l6ZSArPSBib3VuZHMgPyBib3VuZHNbc2l6ZVByb3BlcnR5XSA6IHR5cGljYWxJdGVtU2l6ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNpemUgKz0gdHlwaWNhbEl0ZW1TaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaXplO1xyXG4gICAgfVxyXG5cclxuICAgIG92ZXJyaWRlIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZGVib3VuY2VDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlQ2hhbmdlcy5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fdHJhY2tlcikge1xyXG4gICAgICAgICAgICB0aGlzLl90cmFja2VyLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tracks display items by property
|
|
3
|
-
* @link https://github.com/DjonnyX/ng-virtual-list/blob/
|
|
3
|
+
* @link https://github.com/DjonnyX/ng-virtual-list/blob/14.x/projects/ng-virtual-list/src/lib/utils/tracker.ts
|
|
4
4
|
* @author Evgenii Grebennikov
|
|
5
5
|
* @email djonnyx@gmail.com
|
|
6
6
|
*/
|
|
@@ -105,4 +105,4 @@ export class Tracker {
|
|
|
105
105
|
this._trackMap = null;
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL3RyYWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sT0FBTztJQTZCaEIsWUFBWSxvQkFBNEI7UUE1QnhDOztXQUVHO1FBQ0ssK0JBQTBCLEdBQTZCLEVBQUUsQ0FBQztRQWNsRTs7V0FFRztRQUNLLGNBQVMsR0FBZ0QsRUFBRSxDQUFDO1FBU2hFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztJQUN0RCxDQUFDO0lBekJELElBQUkseUJBQXlCLENBQUMsQ0FBMkI7UUFDckQsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQywwQkFBMEIsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUkseUJBQXlCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDO0lBQzNDLENBQUM7SUFPRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQVFEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQWlCLEVBQUUsVUFBb0MsRUFDekQsbUJBQXFEO1FBQ3JELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsY0FBYyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUVoRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENB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QkFBdUIsQ0FBQyxTQUFhO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDWixPQUFPO1NBQ1Y7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFFbEQsSUFBSTtZQUNDLFNBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdEM7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLE1BQU0sS0FBSyxDQUFDLFlBQVksY0FBYyxrQkFBa0IsQ0FBQyxDQUFDO1NBQzdEO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxudHlwZSBUcmFja2luZ1Byb3BlcnR5SWQgPSBzdHJpbmcgfCBudW1iZXI7XHJcblxyXG4vKipcclxuICogVHJhY2tzIGRpc3BsYXkgaXRlbXMgYnkgcHJvcGVydHlcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvbWFpbi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy90cmFja2VyLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmFja2VyPEkgPSBhbnksIEMgPSB7IFtwcm9wOiBzdHJpbmddOiBhbnk7IH0+IHtcclxuICAgIC8qKlxyXG4gICAgICogZGlzcGxheSBvYmplY3RzIGRpY3Rpb25hcnkgb2YgaW5kZXhlcyBieSBpZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9kaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkOiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0gPSB7fTtcclxuXHJcbiAgICBzZXQgZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh2OiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0pIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9kaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpY3Rpb25hcnkgZGlzcGxheUl0ZW1zIHByb3BlcnR5TmFtZUlkIGJ5IGl0ZW1zIHByb3BlcnR5TmFtZUlkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3RyYWNrTWFwOiB7IFtpZDogVHJhY2tpbmdQcm9wZXJ0eUlkXTogbnVtYmVyIH0gfCBudWxsID0ge307XHJcblxyXG4gICAgZ2V0IHRyYWNrTWFwKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90cmFja01hcDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF90cmFja2luZ1Byb3BlcnR5TmFtZSE6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRyYWNraW5nIGJ5IHByb3BOYW1lXHJcbiAgICAgKi9cclxuICAgIHRyYWNrKGl0ZW1zOiBBcnJheTxhbnk+LCBjb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8YW55Pj4sXHJcbiAgICAgICAgYWZ0ZXJDb21wb25lbnRTZXR1cD86IChjb21wb25lbnQ6IEMsIGl0ZW06IEkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWl0ZW1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlkUHJvcE5hbWUgPSB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSwgdW50cmFja2VkSXRlbXMgPSBbLi4uY29tcG9uZW50c107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaXRlbVRyYWNraW5nUHJvcGVydHkgPSBpdGVtW2lkUHJvcE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaUlkID0gdGhpcy5fdHJhY2tNYXBbaXRlbVRyYWNraW5nUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwLmhhc093blByb3BlcnR5KGl0ZW1UcmFja2luZ1Byb3BlcnR5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuX2Rpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWRbZGlJZF0sIGVsID0gY29tcG9uZW50c1tsYXN0SW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja0NvbXBvbmVudFByb3BlcnR5KGVsPy5pbnN0YW5jZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsSWQgPSBlbD8uaW5zdGFuY2U/LltpdGVtVHJhY2tpbmdQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsICYmIGVsSWQgPT09IGRpSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhCeVVudHJhY2tlZEl0ZW1zID0gdW50cmFja2VkSXRlbXMuZmluZEluZGV4KHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDb21wb25lbnRQcm9wZXJ0eSh2Lmluc3RhbmNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi5pbnN0YW5jZVtpdGVtVHJhY2tpbmdQcm9wZXJ0eV0gPT09IGVsSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhCeVVudHJhY2tlZEl0ZW1zID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLmluc3RhbmNlLml0ZW0gPSBpdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZnRlckNvbXBvbmVudFNldHVwICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckNvbXBvbmVudFNldHVwKGVsLmluc3RhbmNlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRyYWNrZWRJdGVtcy5zcGxpY2UoaW5kZXhCeVVudHJhY2tlZEl0ZW1zLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90cmFja01hcFtpdGVtVHJhY2tpbmdQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1bnRyYWNrZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHVudHJhY2tlZEl0ZW1zLnNoaWZ0KCksIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsLmluc3RhbmNlLml0ZW0gPSBpdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tNYXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDb21wb25lbnRQcm9wZXJ0eShlbC5pbnN0YW5jZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFja01hcFtpdGVtVHJhY2tpbmdQcm9wZXJ0eV0gPSBlbC5pbnN0YW5jZVtpdGVtVHJhY2tpbmdQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0ZXJDb21wb25lbnRTZXR1cCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQ29tcG9uZW50U2V0dXAoZWwuaW5zdGFuY2UsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVudHJhY2tlZEl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVHJhY2tpbmcgYnkgaWQgY2F1c2VkIGFuIGVycm9yLicpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVudHJhY2tDb21wb25lbnRCeUlkUHJvcGVydHkoY29tcG9uZW50PzogQyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByb3BlcnR5SWROYW1lID0gdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2NoZWNrQ29tcG9uZW50UHJvcGVydHkoY29tcG9uZW50KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwICYmIChjb21wb25lbnQgYXMgYW55KVtwcm9wZXJ0eUlkTmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fdHJhY2tNYXBbcHJvcGVydHlJZE5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jaGVja0NvbXBvbmVudFByb3BlcnR5KGNvbXBvbmVudD86IEMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wZXJ0eUlkTmFtZSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAoY29tcG9uZW50IGFzIGFueSlbcHJvcGVydHlJZE5hbWVdO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgUHJvcGVydHkgJHtwcm9wZXJ0eUlkTmFtZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tNYXAgPSBudWxsO1xyXG4gICAgfVxyXG59Il19
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL3RyYWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sT0FBTztJQTZCaEIsWUFBWSxvQkFBNEI7UUE1QnhDOztXQUVHO1FBQ0ssK0JBQTBCLEdBQTZCLEVBQUUsQ0FBQztRQWNsRTs7V0FFRztRQUNLLGNBQVMsR0FBZ0QsRUFBRSxDQUFDO1FBU2hFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztJQUN0RCxDQUFDO0lBekJELElBQUkseUJBQXlCLENBQUMsQ0FBMkI7UUFDckQsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQywwQkFBMEIsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUkseUJBQXlCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDO0lBQzNDLENBQUM7SUFPRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQVFEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQWlCLEVBQUUsVUFBb0MsRUFDekQsbUJBQXFEO1FBQ3JELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsY0FBYyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUVoRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENB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QkFBdUIsQ0FBQyxTQUFhO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDWixPQUFPO1NBQ1Y7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFFbEQsSUFBSTtZQUNDLFNBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdEM7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLE1BQU0sS0FBSyxDQUFDLFlBQVksY0FBYyxrQkFBa0IsQ0FBQyxDQUFDO1NBQzdEO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxudHlwZSBUcmFja2luZ1Byb3BlcnR5SWQgPSBzdHJpbmcgfCBudW1iZXI7XHJcblxyXG4vKipcclxuICogVHJhY2tzIGRpc3BsYXkgaXRlbXMgYnkgcHJvcGVydHlcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTQueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy90cmFja2VyLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmFja2VyPEkgPSBhbnksIEMgPSB7IFtwcm9wOiBzdHJpbmddOiBhbnk7IH0+IHtcclxuICAgIC8qKlxyXG4gICAgICogZGlzcGxheSBvYmplY3RzIGRpY3Rpb25hcnkgb2YgaW5kZXhlcyBieSBpZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9kaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkOiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0gPSB7fTtcclxuXHJcbiAgICBzZXQgZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh2OiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0pIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9kaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpY3Rpb25hcnkgZGlzcGxheUl0ZW1zIHByb3BlcnR5TmFtZUlkIGJ5IGl0ZW1zIHByb3BlcnR5TmFtZUlkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3RyYWNrTWFwOiB7IFtpZDogVHJhY2tpbmdQcm9wZXJ0eUlkXTogbnVtYmVyIH0gfCBudWxsID0ge307XHJcblxyXG4gICAgZ2V0IHRyYWNrTWFwKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90cmFja01hcDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF90cmFja2luZ1Byb3BlcnR5TmFtZSE6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRyYWNraW5nIGJ5IHByb3BOYW1lXHJcbiAgICAgKi9cclxuICAgIHRyYWNrKGl0ZW1zOiBBcnJheTxhbnk+LCBjb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8YW55Pj4sXHJcbiAgICAgICAgYWZ0ZXJDb21wb25lbnRTZXR1cD86IChjb21wb25lbnQ6IEMsIGl0ZW06IEkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWl0ZW1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlkUHJvcE5hbWUgPSB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSwgdW50cmFja2VkSXRlbXMgPSBbLi4uY29tcG9uZW50c107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaXRlbVRyYWNraW5nUHJvcGVydHkgPSBpdGVtW2lkUHJvcE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaUlkID0gdGhpcy5fdHJhY2tNYXBbaXRlbVRyYWNraW5nUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwLmhhc093blByb3BlcnR5KGl0ZW1UcmFja2luZ1Byb3BlcnR5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuX2Rpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWRbZGlJZF0sIGVsID0gY29tcG9uZW50c1tsYXN0SW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja0NvbXBvbmVudFByb3BlcnR5KGVsPy5pbnN0YW5jZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsSWQgPSBlbD8uaW5zdGFuY2U/LltpdGVtVHJhY2tpbmdQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsICYmIGVsSWQgPT09IGRpSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhCeVVudHJhY2tlZEl0ZW1zID0gdW50cmFja2VkSXRlbXMuZmluZEluZGV4KHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDb21wb25lbnRQcm9wZXJ0eSh2Lmluc3RhbmNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi5pbnN0YW5jZVtpdGVtVHJhY2tpbmdQcm9wZXJ0eV0gPT09IGVsSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhCeVVudHJhY2tlZEl0ZW1zID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLmluc3RhbmNlLml0ZW0gPSBpdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZnRlckNvbXBvbmVudFNldHVwICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckNvbXBvbmVudFNldHVwKGVsLmluc3RhbmNlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRyYWNrZWRJdGVtcy5zcGxpY2UoaW5kZXhCeVVudHJhY2tlZEl0ZW1zLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90cmFja01hcFtpdGVtVHJhY2tpbmdQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1bnRyYWNrZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHVudHJhY2tlZEl0ZW1zLnNoaWZ0KCksIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsLmluc3RhbmNlLml0ZW0gPSBpdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tNYXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDb21wb25lbnRQcm9wZXJ0eShlbC5pbnN0YW5jZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFja01hcFtpdGVtVHJhY2tpbmdQcm9wZXJ0eV0gPSBlbC5pbnN0YW5jZVtpdGVtVHJhY2tpbmdQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0ZXJDb21wb25lbnRTZXR1cCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQ29tcG9uZW50U2V0dXAoZWwuaW5zdGFuY2UsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVudHJhY2tlZEl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVHJhY2tpbmcgYnkgaWQgY2F1c2VkIGFuIGVycm9yLicpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVudHJhY2tDb21wb25lbnRCeUlkUHJvcGVydHkoY29tcG9uZW50PzogQyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByb3BlcnR5SWROYW1lID0gdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2NoZWNrQ29tcG9uZW50UHJvcGVydHkoY29tcG9uZW50KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwICYmIChjb21wb25lbnQgYXMgYW55KVtwcm9wZXJ0eUlkTmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fdHJhY2tNYXBbcHJvcGVydHlJZE5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jaGVja0NvbXBvbmVudFByb3BlcnR5KGNvbXBvbmVudD86IEMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wZXJ0eUlkTmFtZSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAoY29tcG9uZW50IGFzIGFueSlbcHJvcGVydHlJZE5hbWVdO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgUHJvcGVydHkgJHtwcm9wZXJ0eUlkTmFtZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tNYXAgPSBudWxsO1xyXG4gICAgfVxyXG59Il19
|