@scion/workbench 18.0.0-beta.4 → 18.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/layout//311/265workbench-layout.factory.mjs +2 -1
- package/esm2022/lib/layout//311/265workbench-layout.mjs +3 -1
- package/esm2022/lib/microfrontend-platform/workbench-microfrontend-support.mjs +2 -2
- package/esm2022/lib/perspective//311/265workbench-perspective.model.mjs +32 -29
- package/esm2022/lib/routing/public_api.mjs +2 -1
- package/esm2022/lib/routing/workbench-navigational-states.mjs +2 -2
- package/esm2022/lib/routing/workbench-route-guards.mjs +57 -0
- package/esm2022/lib/routing/workbench-url-observer.service.mjs +3 -2
- package/esm2022/lib/routing//311/265workbench-router.service.mjs +13 -11
- package/esm2022/lib/startup/workbench-launcher.service.mjs +7 -10
- package/esm2022/lib/view/public_api.mjs +1 -2
- package/esm2022/lib/workbench.component.mjs +3 -3
- package/esm2022/lib/workbench.service.mjs +1 -1
- package/esm2022/lib//311/265workbench.service.mjs +1 -1
- package/fesm2022/scion-workbench.mjs +77 -63
- package/fesm2022/scion-workbench.mjs.map +1 -1
- package/lib/layout//311/265workbench-layout.d.ts +2 -0
- package/lib/layout//311/265workbench-layout.factory.d.ts +1 -0
- package/lib/perspective/workbench-perspective.service.d.ts +1 -1
- package/lib/perspective//311/265workbench-perspective.model.d.ts +6 -7
- package/lib/routing/public_api.d.ts +1 -0
- package/lib/routing/workbench-navigational-states.d.ts +5 -1
- package/lib/{view/workbench-view-route-guards.d.ts → routing/workbench-route-guards.d.ts} +6 -0
- package/lib/startup/workbench-launcher.service.d.ts +4 -5
- package/lib/view/public_api.d.ts +0 -1
- package/lib/workbench.service.d.ts +2 -2
- package/lib//311/265workbench.service.d.ts +1 -1
- package/package.json +1 -1
- package/esm2022/lib/view/workbench-view-route-guards.mjs +0 -47
|
@@ -38,6 +38,7 @@ export class ɵWorkbenchLayoutFactory {
|
|
|
38
38
|
return runInInjectionContext(options?.injector ?? this._environmentInjector, () => new ɵWorkbenchLayout({
|
|
39
39
|
workbenchGrid: options?.workbenchGrid,
|
|
40
40
|
mainAreaGrid: options?.mainAreaGrid,
|
|
41
|
+
perspectiveId: options?.perspectiveId,
|
|
41
42
|
maximized: options?.maximized,
|
|
42
43
|
viewOutlets: options?.viewOutlets,
|
|
43
44
|
navigationStates: options?.navigationStates,
|
|
@@ -50,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
50
51
|
type: Injectable,
|
|
51
52
|
args: [{ providedIn: 'root' }]
|
|
52
53
|
}], ctorParameters: () => [{ type: i0.EnvironmentInjector }] });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiybV3b3JrYmVuY2gtbGF5b3V0LmZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2lvbi93b3JrYmVuY2gvc3JjL2xpYi9sYXlvdXQvybV3b3JrYmVuY2gtbGF5b3V0LmZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsS0FBSyxFQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFzQixVQUFVLEVBQVkscUJBQXFCLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBSS9GOztHQUVHO0FBRUgsTUFBTSxPQUFPLHVCQUF1QjtJQUVsQyxZQUFvQixvQkFBeUM7UUFBekMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPLENBQUMsRUFBc0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2pCLGFBQWEsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUM7U0FDdEYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsT0FBME87UUFDdFAsT0FBTyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDO1lBQ3RHLGFBQWEsRUFBRSxPQUFPLEVBQUUsYUFBYTtZQUNyQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVk7WUFDbkMsYUFBYSxFQUFFLE9BQU8sRUFBRSxhQUFhO1lBQ3JDLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUztZQUM3QixXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVc7WUFDakMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQjtTQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7OEdBL0JVLHVCQUF1QjtrSEFBdkIsdUJBQXVCLGNBRFgsTUFBTTs7MkZBQ2xCLHVCQUF1QjtrQkFEbkMsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjMgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5cbmltcG9ydCB7ybVXb3JrYmVuY2hMYXlvdXR9IGZyb20gJy4vybV3b3JrYmVuY2gtbGF5b3V0JztcbmltcG9ydCB7TVBhcnQsIE1QYXJ0R3JpZH0gZnJvbSAnLi93b3JrYmVuY2gtbGF5b3V0Lm1vZGVsJztcbmltcG9ydCB7V29ya2JlbmNoTGF5b3V0RmFjdG9yeX0gZnJvbSAnLi93b3JrYmVuY2gtbGF5b3V0LmZhY3RvcnknO1xuaW1wb3J0IHtFbnZpcm9ubWVudEluamVjdG9yLCBJbmplY3RhYmxlLCBJbmplY3RvciwgcnVuSW5JbmplY3Rpb25Db250ZXh0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TUFJTl9BUkVBfSBmcm9tICcuL3dvcmtiZW5jaC1sYXlvdXQnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uU3RhdGVzLCBWaWV3T3V0bGV0c30gZnJvbSAnLi4vcm91dGluZy9yb3V0aW5nLm1vZGVsJztcblxuLyoqXG4gKiBAaW5oZXJpdERvY1xuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyDJtVdvcmtiZW5jaExheW91dEZhY3RvcnkgaW1wbGVtZW50cyBXb3JrYmVuY2hMYXlvdXRGYWN0b3J5IHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbnZpcm9ubWVudEluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yKSB7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBhZGRQYXJ0KGlkOiBzdHJpbmcgfCBNQUlOX0FSRUEpOiDJtVdvcmtiZW5jaExheW91dCB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKHtcbiAgICAgIHdvcmtiZW5jaEdyaWQ6IHtyb290OiBuZXcgTVBhcnQoe2lkLCBzdHJ1Y3R1cmFsOiB0cnVlLCB2aWV3czogW119KSwgYWN0aXZlUGFydElkOiBpZH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHdvcmtiZW5jaCBsYXlvdXQgdGhhdCBjb25zaXN0cyBvZiB0aGUgc3BlY2lmaWVkIGdyaWRzLlxuICAgKlxuICAgKiAtIElmIG5vdCBzcGVjaWZ5aW5nIHRoZSB3b3JrYmVuY2ggZ3JpZCwgY3JlYXRlcyBhIHdvcmtiZW5jaCBncmlkIHdpdGggYSBtYWluIGFyZWEuXG4gICAqIC0gSWYgbm90IHNwZWNpZnlpbmcgdGhlIG1haW4gYXJlYSBncmlkLCBidXQgdGhlIHdvcmtiZW5jaCBncmlkIGhhcyBhIG1haW4gYXJlYSBwYXJ0LCBjcmVhdGVzIGEgbWFpbiBhcmVhIGdyaWQgd2l0aCBhbiBpbml0aWFsIHBhcnQuXG4gICAqICAgVG8gY29udHJvbCB0aGUgaWRlbnRpdHkgb2YgdGhlIGluaXRpYWwgcGFydCwgcGFzcyBhbiBpbmplY3RvciBhbmQgc2V0IHRoZSBESSB0b2tlbiB7QGxpbmsgTUFJTl9BUkVBX0lOSVRJQUxfUEFSVF9JRH0uXG4gICAqIC0gR3JpZHMgYW5kIG91dGxldHMgY2FuIGJlIHBhc3NlZCBpbiBzZXJpYWxpemVkIG9yIGRlc2VyaWFsaXplZCBmb3JtLlxuICAgKi9cbiAgcHVibGljIGNyZWF0ZShvcHRpb25zPzoge3dvcmtiZW5jaEdyaWQ/OiBzdHJpbmcgfCBNUGFydEdyaWQgfCBudWxsOyBtYWluQXJlYUdyaWQ/OiBzdHJpbmcgfCBNUGFydEdyaWQgfCBudWxsOyBwZXJzcGVjdGl2ZUlkPzogc3RyaW5nOyB2aWV3T3V0bGV0cz86IFZpZXdPdXRsZXRzIHwgc3RyaW5nOyBuYXZpZ2F0aW9uU3RhdGVzPzogTmF2aWdhdGlvblN0YXRlczsgaW5qZWN0b3I/OiBJbmplY3RvcjsgbWF4aW1pemVkPzogYm9vbGVhbn0pOiDJtVdvcmtiZW5jaExheW91dCB7XG4gICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChvcHRpb25zPy5pbmplY3RvciA/PyB0aGlzLl9lbnZpcm9ubWVudEluamVjdG9yLCAoKSA9PiBuZXcgybVXb3JrYmVuY2hMYXlvdXQoe1xuICAgICAgd29ya2JlbmNoR3JpZDogb3B0aW9ucz8ud29ya2JlbmNoR3JpZCxcbiAgICAgIG1haW5BcmVhR3JpZDogb3B0aW9ucz8ubWFpbkFyZWFHcmlkLFxuICAgICAgcGVyc3BlY3RpdmVJZDogb3B0aW9ucz8ucGVyc3BlY3RpdmVJZCxcbiAgICAgIG1heGltaXplZDogb3B0aW9ucz8ubWF4aW1pemVkLFxuICAgICAgdmlld091dGxldHM6IG9wdGlvbnM/LnZpZXdPdXRsZXRzLFxuICAgICAgbmF2aWdhdGlvblN0YXRlczogb3B0aW9ucz8ubmF2aWdhdGlvblN0YXRlcyxcbiAgICB9KSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -52,6 +52,7 @@ export class ɵWorkbenchLayout {
|
|
|
52
52
|
this._viewOutlets = new Map(Objects.entries(coerceViewOutlets(config.viewOutlets)));
|
|
53
53
|
this._navigationStates = new Map(Objects.entries(config.navigationStates ?? {}));
|
|
54
54
|
this.parts().forEach(part => assertType(part, { toBeOneOf: [MTreeNode, MPart] }));
|
|
55
|
+
this.perspectiveId = config.perspectiveId;
|
|
55
56
|
}
|
|
56
57
|
/**
|
|
57
58
|
* Reference to the main workbench grid.
|
|
@@ -693,6 +694,7 @@ export class ɵWorkbenchLayout {
|
|
|
693
694
|
return runInInjectionContext(this._injector, () => new ɵWorkbenchLayout({
|
|
694
695
|
workbenchGrid: this._serializer.serializeGrid(this.workbenchGrid),
|
|
695
696
|
mainAreaGrid: this._serializer.serializeGrid(this._grids.mainArea),
|
|
697
|
+
perspectiveId: this.perspectiveId,
|
|
696
698
|
viewOutlets: Object.fromEntries(this._viewOutlets),
|
|
697
699
|
navigationStates: Object.fromEntries(this._navigationStates),
|
|
698
700
|
maximized: this._maximized,
|
|
@@ -859,4 +861,4 @@ function matchViewById(id) {
|
|
|
859
861
|
function stringifyFilter(filter) {
|
|
860
862
|
return Object.entries(filter).map(([key, value]) => `${key}=${value}`).join(', ');
|
|
861
863
|
}
|
|
862
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiybV3b3JrYmVuY2gtbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvbGF5b3V0L8m1d29ya2JlbmNoLWxheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBQyxLQUFLLEVBQWEsU0FBUyxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ3hGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdkMsT0FBTyxFQUFDLFNBQVMsRUFBaUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RSxPQUFPLEVBQXlCLHlCQUF5QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDdkcsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBYSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFJaEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTNDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sWUFBWSxDQUFDOztBQUVsQzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBYTNCLGlCQUFpQjtJQUNqQixZQUFZLE1BQXlNO1FBUnBNLG1DQUE4QixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3ZFLG1DQUE4QixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3ZFLGdCQUFXLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDaEQsY0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQU01QyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osU0FBUyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUMsT0FBTyxFQUFFLDBCQUEwQixFQUFDLENBQUM7U0FDeEYsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUMsT0FBTyxFQUFFLHlCQUF5QixFQUFDLENBQUMsQ0FBQztRQUNwRyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQXVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQTBCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTyxDQUFDLEVBQVUsRUFBRSxPQUE4QjtRQUN2RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsS0FBSyxJQUFJLENBQUM7SUFDL0UsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTyxDQUFDLEVBQVUsRUFBRSxPQUE4QjtRQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxXQUFXLENBQUMsTUFBNkI7UUFDOUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4SCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksZ0JBQWdCLENBQUMsTUFBNkI7UUFDbkQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xJLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxNQUF3QjtRQUM3QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXLENBQUMsTUFBd0I7UUFDekMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZUFBZTtRQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDaEMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLE1BQTZCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBMEIsRUFBb0IsRUFBRSxDQUFDLE9BQU8sWUFBWSxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDakksQ0FBQztJQWVNLElBQUksQ0FBQyxNQUE4RCxFQUFFLE9BQXdCO1FBQ2xHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxDQUFDLGlGQUFpRixDQUFDLENBQUM7UUFDakcsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQTBCLEVBQW9CLEVBQUU7WUFDbEYsSUFBSSxDQUFDLENBQUMsT0FBTyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hFLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdEYsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEIsTUFBTSxLQUFLLENBQUMsNENBQTRDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxPQUFPLENBQUMsRUFBc0IsRUFBRSxVQUE0QixFQUFFLE9BQW9EO1FBQ3ZILE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0MsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVSxDQUFDLEVBQVU7UUFDMUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQU9NLFVBQVUsQ0FBQyxJQUF5QjtRQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLEVBQVU7UUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0IsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQWFNLElBQUksQ0FBQyxNQUF3QixFQUFFLE9BQXdCO1FBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixNQUFNLEtBQUssQ0FBQywwQ0FBMEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLEtBQUssQ0FBQyxNQUFxSixFQUFFLE9BQWdDO1FBQ2xNLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDO2FBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNiLElBQUksTUFBTSxFQUFFLE1BQU0sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzlELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO2FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFLEtBQUssU0FBUyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNoRSxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLE1BQU0sRUFBRSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdEYsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsSUFBSSxNQUFNLEVBQUUsY0FBYyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsY0FBYyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdEcsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsSUFBSSxNQUFNLEVBQUUsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzRyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sS0FBSyxDQUFDLDRDQUE0QyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU8sQ0FBQyxFQUFVLEVBQUUsT0FBeUw7UUFDbE4sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0QsQ0FBQzthQUNJLENBQUM7WUFDSixXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFHLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsRUFBVSxFQUFFLFFBQWtCLEVBQUUsTUFBMEk7UUFDNUwsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3BILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxVQUFVLENBQUMsRUFBVSxFQUFFLE9BQTJCO1FBQ3ZELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxVQUE0RDtRQUNuRyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsRUFBVSxFQUFFLFlBQW9CLEVBQUUsT0FBNEk7UUFDNUwsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3JILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxFQUFVLEVBQUUsT0FBa0M7UUFDaEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDM0csT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxvQkFBb0IsQ0FBQyxFQUFVLEVBQUUsT0FBa0M7UUFDeEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNuSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksVUFBVSxDQUFDLEVBQVUsRUFBRSxTQUFpQjtRQUM3QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsV0FBVyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEUsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxhQUFhLENBQUMsTUFBYyxFQUFFLEtBQWE7UUFDaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxLQUE4QjtRQUM3QyxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUN4SCxPQUFPO1lBQ0wsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO1lBQ3hFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1lBQ2xHLG9CQUFvQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO1lBQ2xHLG1CQUFtQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO1NBQ2pHLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVEOztPQUVHO0lBQ0ssU0FBUyxDQUFDLEVBQVUsRUFBRSxVQUE0QixFQUFFLE9BQW9EO1FBQzlHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDLDBGQUEwRixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hILENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsSUFBSSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFFcEYsMkZBQTJGO1FBQzNGLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFDN0gsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssS0FBSyxNQUFNLElBQUksVUFBVSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUM7UUFDNUUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFFckMsMEJBQTBCO1FBQzFCLE1BQU0sV0FBVyxHQUFjLElBQUksU0FBUyxDQUFDO1lBQzNDLEVBQUUsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQ25CLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1lBQzlDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQzlDLFNBQVMsRUFBRSxVQUFVLENBQUMsS0FBSyxLQUFLLE1BQU0sSUFBSSxVQUFVLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRO1lBQ3pGLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7WUFDcEMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU07U0FDaEMsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsaUJBQWlCO1FBQzlFLENBQUM7YUFDSSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztZQUM3RCxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUMvQyxDQUFDO2FBQ0ksQ0FBQztZQUNKLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1FBQy9DLENBQUM7UUFDRCxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1FBRTdCLHFCQUFxQjtRQUNyQixJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUFDLEVBQVU7UUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFbEYsa0NBQWtDO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFFRCxtQkFBbUI7UUFDbkIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUMvQixDQUFDO2FBQ0ksSUFBSSxJQUFJLENBQUMsTUFBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7UUFDOUMsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsTUFBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDO1FBQzlDLENBQUM7UUFFRCw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0ZBQW9GO1FBQ3BGLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM3QixNQUFNLFVBQVUsR0FBRyxLQUFLO2lCQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztpQkFDOUIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNyQixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xHLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEcsT0FBTyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztZQUN6RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssU0FBUyxDQUFDLElBQVcsRUFBRSxPQUF5TDtRQUN0TixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxLQUFLLENBQUMsMEZBQTBGLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JILENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXJDLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjLENBQUMsSUFBVyxFQUFFLFFBQWtCLEVBQUUsTUFBMEk7UUFDaE0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQzdELE1BQU0sS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksTUFBTSxFQUFFLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQ2hELEVBQUUsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQ25CLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSTtZQUNsQixJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUk7WUFDbEIsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVLENBQUMsSUFBVyxFQUFFLFlBQW9CLEVBQUUsT0FBNEk7UUFDaE0sTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7UUFFckQsaUJBQWlCO1FBQ2pCLElBQUksVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDO2FBQ0ksSUFBSSxPQUFPLEVBQUUsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlELE1BQU0sYUFBYSxHQUFzQixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRCxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEgsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixJQUFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsSUFBVyxFQUFFLE9BQWdGO1FBQ2hILElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFFMUMsZUFBZTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9DLGlCQUFpQjtRQUNqQixJQUFJLE9BQU8sRUFBRSxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxnQkFBZ0I7UUFDaEIsSUFBSSxPQUFPLEVBQUUscUJBQXFCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELHVEQUF1RDtRQUN2RCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUs7aUJBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7aUJBQ3BCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDekIsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pHLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRyxPQUFPLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUM7UUFFRCxrRkFBa0Y7UUFDbEYsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWMsQ0FBQyxJQUFXLEVBQUUsT0FBa0M7UUFDcEUscUJBQXFCO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBRTVCLHFCQUFxQjtRQUNyQixJQUFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssc0JBQXNCLENBQUMsSUFBVyxFQUFFLE9BQWtDO1FBQzVFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsb0RBQW9EO1FBRXRJLHFCQUFxQjtRQUNyQixJQUFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZUFBZSxDQUFDLE1BQWMsRUFBRSxLQUFhO1FBQ25ELElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxLQUFLLENBQUMsdUNBQXVDLE1BQU0sb0RBQW9ELEtBQUssSUFBSSxDQUFDLENBQUM7UUFDMUgsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQVksRUFBQyxFQUFFLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWMsQ0FBQyxFQUFVO1FBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUFDLElBQVcsRUFBRSxTQUFpQjtRQUNqRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLEtBQUssQ0FBQyw2RkFBNkYsU0FBUyxJQUFJLENBQUMsQ0FBQztRQUMxSCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUUxQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFFLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUUsQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssSUFBSSxDQUFDLE1BQW9DO1FBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQy9DLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBMEIsRUFBZ0MsRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZLLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxLQUFLLENBQUMsbURBQW1ELE1BQU0sQ0FBQyxPQUFPLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0ksQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZUFBZSxDQUE4QixNQUFvQjtRQUN2RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUEwQixFQUFnQixFQUFFO1lBQ2pGLE9BQU8sT0FBTyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2xDLENBQUMsRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLEtBQUssQ0FBQyxnREFBZ0QsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLGdCQUFnQixDQUE4QixXQUF5RCxFQUFFLE9BQW1EO1FBQ2xLLElBQUksT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBRXZCLFNBQVMsVUFBVSxDQUFDLElBQXVCO1lBQ3pDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLElBQUksT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO29CQUN2QixPQUFPLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtnQkFDL0MsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLElBQUksWUFBWSxTQUFTLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2xCLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDO2FBQ0ksQ0FBQztZQUNKLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ25DLE1BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVztRQUNqQixPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQztZQUN0RSxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNqRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDbEUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNsRCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUM1RCxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILFNBQVMsMEJBQTBCO0lBQ2pDLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDO1FBQzdELFlBQVksRUFBRSxTQUFTO0tBQ3hCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMseUJBQXlCO0lBQ2hDLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFDdEYsWUFBWSxFQUFFLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztLQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxlQUFlLENBQUMsSUFBMkMsRUFBRSxPQUFtQztJQUN2RyxJQUFJLEtBQUssT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTNCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLHdIQUF3SCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RKLE9BQU8sRUFBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDaEQsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsaUJBQWlCLENBQUMsV0FBb0Q7SUFDN0UsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLG9IQUFvSCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xKLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUM7QUFrQkQ7O0dBRUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxRQUErRSxFQUFFLElBQVc7SUFDbEgsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDYixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLENBQUM7UUFDRCxLQUFLLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BGLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDekIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwRixPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1IsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBYUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksY0FBYyxDQUFTLDJCQUEyQixFQUFFO0lBQy9GLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFO0NBQy9CLENBQUMsQ0FBQztBQUVIOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQU8sNkJBQTZCO0lBRDFDO1FBR1Usa0JBQWEsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztLQVF6RDtJQU5DOztPQUVHO0lBQ0ksb0JBQW9CLENBQUMsTUFBYztRQUN4QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxFQUFFLGlCQUFpQixJQUFJLENBQUMsQ0FBQztJQUNoRixDQUFDOzhHQVRVLDZCQUE2QjtrSEFBN0IsNkJBQTZCLGNBRGpCLE1BQU07OzJGQUNsQiw2QkFBNkI7a0JBRHpDLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOztBQWFoQzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLDZCQUE2QjtJQUQxQztRQUdVLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FRekQ7SUFOQzs7T0FFRztJQUNJLG9CQUFvQixDQUFDLE1BQWM7UUFDeEMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLENBQUM7SUFDaEYsQ0FBQzs4R0FUVSw2QkFBNkI7a0hBQTdCLDZCQUE2QixjQURqQixNQUFNOzsyRkFDbEIsNkJBQTZCO2tCQUR6QyxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7QUFhaEM7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxFQUFVO0lBQy9CLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7U0FDSSxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssRUFBRSxDQUFDO0lBQzNDLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxNQUFxQztJQUM1RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjMgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5pbXBvcnQge01QYXJ0LCBNUGFydEdyaWQsIE1UcmVlTm9kZSwgTVZpZXcsIMm1TVBhcnRHcmlkfSBmcm9tICcuL3dvcmtiZW5jaC1sYXlvdXQubW9kZWwnO1xuaW1wb3J0IHthc3NlcnRUeXBlfSBmcm9tICcuLi9jb21tb24vYXNzZXJ0cy51dGlsJztcbmltcG9ydCB7VUlEfSBmcm9tICcuLi9jb21tb24vdWlkLnV0aWwnO1xuaW1wb3J0IHtNQUlOX0FSRUEsIFJlZmVyZW5jZVBhcnQsIFdvcmtiZW5jaExheW91dH0gZnJvbSAnLi93b3JrYmVuY2gtbGF5b3V0JztcbmltcG9ydCB7R3JpZFNlcmlhbGl6YXRpb25GbGFncywgV29ya2JlbmNoTGF5b3V0U2VyaWFsaXplcn0gZnJvbSAnLi93b3JrZW5jaC1sYXlvdXQtc2VyaWFsaXplci5zZXJ2aWNlJztcbmltcG9ydCB7V09SS0JFTkNIX1ZJRVdfUkVHSVNUUll9IGZyb20gJy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcucmVnaXN0cnknO1xuaW1wb3J0IHtXT1JLQkVOQ0hfUEFSVF9SRUdJU1RSWX0gZnJvbSAnLi4vcGFydC93b3JrYmVuY2gtcGFydC5yZWdpc3RyeSc7XG5pbXBvcnQge2luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBQcmVkaWNhdGUsIHJ1bkluSW5qZWN0aW9uQ29udGV4dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRpbmd9IGZyb20gJy4uL3JvdXRpbmcvcm91dGluZy51dGlsJztcbmltcG9ydCB7Q29tbWFuZHMsIE5hdmlnYXRpb25EYXRhLCBOYXZpZ2F0aW9uU3RhdGUsIE5hdmlnYXRpb25TdGF0ZXMsIFZpZXdPdXRsZXRzfSBmcm9tICcuLi9yb3V0aW5nL3JvdXRpbmcubW9kZWwnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgVXJsU2VnbWVudH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Vmlld0lkfSBmcm9tICcuLi92aWV3L3dvcmtiZW5jaC12aWV3Lm1vZGVsJztcbmltcG9ydCB7QXJyYXlzfSBmcm9tICdAc2Npb24vdG9vbGtpdC91dGlsJztcbmltcG9ydCB7VXJsU2VnbWVudE1hdGNoZXJ9IGZyb20gJy4uL3JvdXRpbmcvdXJsLXNlZ21lbnQtbWF0Y2hlcic7XG5pbXBvcnQge09iamVjdHN9IGZyb20gJy4uL2NvbW1vbi9vYmplY3RzLnV0aWwnO1xuaW1wb3J0IHtXb3JrYmVuY2hMYXlvdXRzfSBmcm9tICcuL3dvcmtiZW5jaC1sYXlvdXRzLnV0aWwnO1xuaW1wb3J0IHtMb2dnZXJ9IGZyb20gJy4uL2xvZ2dpbmcnO1xuXG4vKipcbiAqIEBpbmhlcml0RG9jXG4gKlxuICogVGhlIHdvcmtiZW5jaCBsYXlvdXQgaXMgYSBncmlkIG9mIHBhcnRzLiBJdCBjb250YWlucyBhdCBsZWFzdCBvbmUgcGFydC4gQSBzcGVjaWFsIHBhcnQsIHRoZSBtYWluIGFyZWEgcGFydCwgaXMgbm90IGEgc3RhY2sgb2Ygdmlld3NcbiAqIGJ1dCBlbWJlZHMgYSBzdWItZ3JpZCwgdGhlIG1haW4gYXJlYSBncmlkLiBJdCBkZWZpbmVzIHRoZSBhcnJhbmdlbWVudCBvZiBwYXJ0cyBpbiB0aGUgbWFpbiBhcmVhLiBUaGUgbWFpbiBhcmVhIGlzIG9wdGlvbmFsLlxuICpcbiAqIFRoZSBsYXlvdXQgaXMgc2VyaWFsaXphYmxlIGludG8gYSBVUkwtc2FmZSBiYXNlNjQgc3RyaW5nLlxuICpcbiAqIFRoZSBsYXlvdXQgaXMgYW4gaW1tdXRhYmxlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gbW9kaWZ5IHRoZSBsYXlvdXQuIE1vZGlmaWNhdGlvbnMgaGF2ZSBub1xuICogc2lkZSBlZmZlY3RzLiBFYWNoIG1vZGlmaWNhdGlvbiBjcmVhdGVzIGEgbmV3IGxheW91dCBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMuXG4gKlxuICogSU1QT1JUQU5UOiBNZXRob2RzIHN0YXJ0aW5nIHdpdGggYW4gdW5kZXJzY29yZSBpbmRpY2F0ZSB0aGV5IGFyZSBub3Qgd29ya2luZyBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmeWluZyB0aGUgbGF5b3V0IGluc3RhbmNlLlxuICovXG5leHBvcnQgY2xhc3MgybVXb3JrYmVuY2hMYXlvdXQgaW1wbGVtZW50cyBXb3JrYmVuY2hMYXlvdXQge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2dyaWRzOiBHcmlkcztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld091dGxldHM6IE1hcDxWaWV3SWQsIFVybFNlZ21lbnRbXT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdmlnYXRpb25TdGF0ZXM6IE1hcDxWaWV3SWQsIE5hdmlnYXRpb25TdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2dyaWROYW1lczogQXJyYXk8a2V5b2YgR3JpZHM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJ0QWN0aXZhdGlvbkluc3RhbnRQcm92aWRlciA9IGluamVjdChQYXJ0QWN0aXZhdGlvbkluc3RhbnRQcm92aWRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdBY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyID0gaW5qZWN0KFZpZXdBY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VyaWFsaXplciA9IGluamVjdChXb3JrYmVuY2hMYXlvdXRTZXJpYWxpemVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIHByaXZhdGUgX21heGltaXplZDogYm9vbGVhbjtcblxuICAvKiogQGludGVybmFsICoqL1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IHt3b3JrYmVuY2hHcmlkPzogc3RyaW5nIHwgTVBhcnRHcmlkIHwgbnVsbDsgbWFpbkFyZWFHcmlkPzogc3RyaW5nIHwgTVBhcnRHcmlkIHwgbnVsbDsgdmlld091dGxldHM/OiBzdHJpbmcgfCBWaWV3T3V0bGV0cyB8IG51bGw7IG5hdmlnYXRpb25TdGF0ZXM/OiBOYXZpZ2F0aW9uU3RhdGVzIHwgbnVsbDsgbWF4aW1pemVkPzogYm9vbGVhbn0pIHtcbiAgICB0aGlzLl9ncmlkcyA9IHtcbiAgICAgIHdvcmtiZW5jaDogY29lcmNlTVBhcnRHcmlkKGNvbmZpZy53b3JrYmVuY2hHcmlkLCB7ZGVmYXVsdDogY3JlYXRlRGVmYXVsdFdvcmtiZW5jaEdyaWR9KSxcbiAgICB9O1xuICAgIGlmICh0aGlzLmhhc1BhcnQoTUFJTl9BUkVBLCB7Z3JpZDogJ3dvcmtiZW5jaCd9KSkge1xuICAgICAgdGhpcy5fZ3JpZHMubWFpbkFyZWEgPSBjb2VyY2VNUGFydEdyaWQoY29uZmlnLm1haW5BcmVhR3JpZCwge2RlZmF1bHQ6IGNyZWF0ZUluaXRpYWxNYWluQXJlYUdyaWR9KTtcbiAgICB9XG4gICAgdGhpcy5fZ3JpZE5hbWVzID0gT2JqZWN0cy5rZXlzKHRoaXMuX2dyaWRzKTtcbiAgICB0aGlzLl9tYXhpbWl6ZWQgPSBjb25maWcubWF4aW1pemVkID8/IGZhbHNlO1xuICAgIHRoaXMuX3ZpZXdPdXRsZXRzID0gbmV3IE1hcDxWaWV3SWQsIFVybFNlZ21lbnRbXT4oT2JqZWN0cy5lbnRyaWVzKGNvZXJjZVZpZXdPdXRsZXRzKGNvbmZpZy52aWV3T3V0bGV0cykpKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVzID0gbmV3IE1hcDxWaWV3SWQsIE5hdmlnYXRpb25TdGF0ZT4oT2JqZWN0cy5lbnRyaWVzKGNvbmZpZy5uYXZpZ2F0aW9uU3RhdGVzID8/IHt9KSk7XG4gICAgdGhpcy5wYXJ0cygpLmZvckVhY2gocGFydCA9PiBhc3NlcnRUeXBlKHBhcnQsIHt0b0JlT25lT2Y6IFtNVHJlZU5vZGUsIE1QYXJ0XX0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIG1haW4gd29ya2JlbmNoIGdyaWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdvcmtiZW5jaEdyaWQoKTogUmVhZG9ubHk8ybVNUGFydEdyaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZ3JpZHMud29ya2JlbmNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgbWFpbiBhcmVhIGdyaWQsIGlmIGFueS5cbiAgICpcbiAgICogVGhlIG1haW4gYXJlYSBncmlkIGlzIGEgc3ViLWdyaWQgaW5jbHVkZWQgYnkgdGhlIHtAbGluayBNQUlOX0FSRUF9IHBhcnQuIEl0IGRlZmluZXMgdGhlIGFycmFuZ2VtZW50IG9mIHBhcnRzIGluIHRoZSBtYWluIGFyZWEuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1haW5BcmVhR3JpZCgpOiBSZWFkb25seTzJtU1QYXJ0R3JpZD4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JpZHMubWFpbkFyZWEgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyBpZiBnaXZlbiBwYXJ0IGlzIGNvbnRhaW5lZCBpbiB0aGUgc3BlY2lmaWVkIGdyaWQuXG4gICAqL1xuICBwdWJsaWMgaGFzUGFydChpZDogc3RyaW5nLCBvcHRpb25zPzoge2dyaWQ/OiBrZXlvZiBHcmlkc30pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0KHtwYXJ0SWQ6IGlkLCBncmlkOiBvcHRpb25zPy5ncmlkfSwge29yRWxzZTogbnVsbH0pICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIGdpdmVuIHZpZXcgaXMgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgZ3JpZC5cbiAgICovXG4gIHB1YmxpYyBoYXNWaWV3KGlkOiBzdHJpbmcsIG9wdGlvbnM/OiB7Z3JpZD86IGtleW9mIEdyaWRzfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpZXdzKHtncmlkOiBvcHRpb25zPy5ncmlkLCBpZDogaWR9KS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBVUkwgb2Ygdmlld3MgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBmaW5kQnkgLSBEZWZpbmVzIHRoZSBzZWFyY2ggc2NvcGUuXG4gICAqIEBwYXJhbSBmaW5kQnkuZ3JpZCAtIFNlYXJjaGVzIGZvciB2aWV3cyBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZCBncmlkLlxuICAgKiBAcmV0dXJuIG91dGxldHMgb2Ygdmlld3MgbWF0Y2hpbmcgdGhlIGZpbHRlciBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyB2aWV3T3V0bGV0cyhmaW5kQnk/OiB7Z3JpZD86IGtleW9mIEdyaWRzfSk6IFZpZXdPdXRsZXRzIHtcbiAgICBjb25zdCB2aWV3T3V0bGV0RW50cmllcyA9IHRoaXMudmlld3Moe2dyaWQ6IGZpbmRCeT8uZ3JpZH0pLm1hcCh2aWV3ID0+IFt2aWV3LmlkLCB0aGlzLl92aWV3T3V0bGV0cy5nZXQodmlldy5pZCkgPz8gW11dKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHZpZXdPdXRsZXRFbnRyaWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBuYXZpZ2F0aW9uYWwgc3RhdGUgZm9yIHZpZXdzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZmlsdGVyLlxuICAgKlxuICAgKiBAcGFyYW0gZmluZEJ5IC0gRGVmaW5lcyB0aGUgc2VhcmNoIHNjb3BlLlxuICAgKiBAcGFyYW0gZmluZEJ5LmdyaWQgLSBTZWFyY2hlcyBmb3Igdmlld3MgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgZ3JpZC5cbiAgICogQHJldHVybiBuYXZpZ2F0aW9uIHN0YXRlIG9mIHZpZXdzIG1hdGNoaW5nIHRoZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgbmF2aWdhdGlvblN0YXRlcyhmaW5kQnk/OiB7Z3JpZD86IGtleW9mIEdyaWRzfSk6IE5hdmlnYXRpb25TdGF0ZXMge1xuICAgIGNvbnN0IG5hdmlnYXRpb25TdGF0ZUVudHJpZXMgPSB0aGlzLnZpZXdzKHtncmlkOiBmaW5kQnk/LmdyaWR9KS5tYXAodmlldyA9PiBbdmlldy5pZCwgdGhpcy5fbmF2aWdhdGlvblN0YXRlcy5nZXQodmlldy5pZCkgPz8ge31dKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKG5hdmlnYXRpb25TdGF0ZUVudHJpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBuYXZpZ2F0aW9uYWwgc3RhdGUgb2Ygc3BlY2lmaWVkIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgbmF2aWdhdGlvblN0YXRlKGZpbmRCeToge3ZpZXdJZDogVmlld0lkfSk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TdGF0ZXMuZ2V0KGZpbmRCeS52aWV3SWQpID8/IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBVUkwgb2Ygc3BlY2lmaWVkIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgdXJsU2VnbWVudHMoZmluZEJ5OiB7dmlld0lkOiBWaWV3SWR9KTogVXJsU2VnbWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld091dGxldHMuZ2V0KGZpbmRCeS52aWV3SWQpID8/IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZSwgbWF4aW1pemVzIG9yIG1pbmltaXplcyB0aGUgbWFpbiBhcmVhLlxuICAgKlxuICAgKiBAcmV0dXJuIGEgY29weSBvZiB0aGlzIGxheW91dCB3aXRoIHRoZSBtYXhpbWl6YXRpb24gY2hhbmdlZC5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVNYXhpbWl6ZWQoKTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5Ll9fdG9nZ2xlTWF4aW1pemVkKCk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBtYWluIGFyZWEgaXMgbWF4aW1pemVkLlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhpbWl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltaXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBwYXJ0cyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGZpbHRlci5cbiAgICpcbiAgICogQHBhcmFtIGZpbmRCeSAtIERlZmluZXMgdGhlIHNlYXJjaCBzY29wZS5cbiAgICogQHBhcmFtIGZpbmRCeS5ncmlkIC0gU2VhcmNoZXMgZm9yIHBhcnRzIGNvbnRhaW5lZCBpbiB0aGUgc3BlY2lmaWVkIGdyaWQuXG4gICAqIEByZXR1cm4gcGFydHMgbWF0Y2hpbmcgdGhlIGZpbHRlciBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyBwYXJ0cyhmaW5kQnk/OiB7Z3JpZD86IGtleW9mIEdyaWRzfSk6IHJlYWRvbmx5IE1QYXJ0W10ge1xuICAgIHJldHVybiB0aGlzLmZpbmRUcmVlRWxlbWVudHMoKGVsZW1lbnQ6IE1UcmVlTm9kZSB8IE1QYXJ0KTogZWxlbWVudCBpcyBNUGFydCA9PiBlbGVtZW50IGluc3RhbmNlb2YgTVBhcnQsIHtncmlkOiBmaW5kQnk/LmdyaWR9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhIHBhcnQgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBmaWx0ZXIuIElmIG5vdCBmb3VuZCwgYnkgZGVmYXVsdCwgdGhyb3dzIGFuIGVycm9yIHVubGVzcyBzZXR0aW5nIHRoZSBgb3JFbHNlTnVsbGAgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZmluZEJ5IC0gRGVmaW5lcyB0aGUgc2VhcmNoIHNjb3BlLlxuICAgKiBAcGFyYW0gZmluZEJ5LnBhcnRJZCAtIFNlYXJjaGVzIGZvciBhIHBhcnQgd2l0aCB0aGUgc3BlY2lmaWVkIGlkLlxuICAgKiBAcGFyYW0gZmluZEJ5LnZpZXdJZCAtIFNlYXJjaGVzIGZvciBhIHBhcnQgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHZpZXcuXG4gICAqIEBwYXJhbSBmaW5kQnkuZ3JpZCAtIFNlYXJjaGVzIGZvciBhIHBhcnQgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgZ3JpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb250cm9scyB0aGUgc2VhcmNoLlxuICAgKiBAcGFyYW0gb3B0aW9ucy5vckVsc2UgLSBDb250cm9scyB0byByZXR1cm4gYG51bGxgIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IgaWYgbm8gcGFydCBpcyBmb3VuZC5cbiAgICogQHJldHVybiBwYXJ0IG1hdGNoaW5nIHRoZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgcGFydChmaW5kQnk6IHtwYXJ0SWQ/OiBzdHJpbmc7IHZpZXdJZD86IHN0cmluZzsgZ3JpZD86IGtleW9mIEdyaWRzfSk6IE1QYXJ0O1xuICBwdWJsaWMgcGFydChmaW5kQnk6IHtwYXJ0SWQ/OiBzdHJpbmc7IHZpZXdJZD86IHN0cmluZzsgZ3JpZD86IGtleW9mIEdyaWRzfSwgb3B0aW9uczoge29yRWxzZTogbnVsbH0pOiBNUGFydCB8IG51bGw7XG4gIHB1YmxpYyBwYXJ0KGZpbmRCeToge3BhcnRJZD86IHN0cmluZzsgdmlld0lkPzogc3RyaW5nOyBncmlkPzoga2V5b2YgR3JpZHN9LCBvcHRpb25zPzoge29yRWxzZTogbnVsbH0pOiBNUGFydCB8IG51bGwge1xuICAgIGlmICghZmluZEJ5LnBhcnRJZCAmJiAhZmluZEJ5LnZpZXdJZCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtQYXJ0RmluZEVycm9yXSBNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50LiBTcGVjaWZ5IGVpdGhlciAncGFydElkJyBvciAndmlld0lkJy5gKTtcbiAgICB9XG4gICAgY29uc3QgcGFydCA9IHRoaXMuZmluZFRyZWVFbGVtZW50cygoZWxlbWVudDogTVRyZWVOb2RlIHwgTVBhcnQpOiBlbGVtZW50IGlzIE1QYXJ0ID0+IHtcbiAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBNUGFydCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGZpbmRCeS5wYXJ0SWQgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50LmlkICE9PSBmaW5kQnkucGFydElkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChmaW5kQnkudmlld0lkICE9PSB1bmRlZmluZWQgJiYgIWVsZW1lbnQudmlld3Muc29tZShtYXRjaFZpZXdCeUlkKGZpbmRCeS52aWV3SWQhKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwge2ZpbmRGaXJzdDogdHJ1ZSwgZ3JpZDogZmluZEJ5LmdyaWR9KVswXTtcblxuICAgIGlmICghcGFydCAmJiAhb3B0aW9ucykge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsUGFydEVycm9yXSBObyBtYXRjaGluZyBwYXJ0IGZvdW5kOiBbJHtzdHJpbmdpZnlGaWx0ZXIoZmluZEJ5KX1dYCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0ID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gQGluaGVyaXREb2NcbiAgICogQHBhcmFtIHJlbGF0aXZlVG8gLSBAaW5oZXJpdERvY1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEBpbmhlcml0RG9jXG4gICAqIEBwYXJhbSBvcHRpb25zLmFjdGl2YXRlIC0gQGluaGVyaXREb2NcbiAgICogQHBhcmFtIG9wdGlvbnMuc3RydWN0dXJhbCAtIFNwZWNpZmllcyBpZiB0aGlzIGlzIGEgc3RydWN0dXJhbCBwYXJ0LiBBIHN0cnVjdHVyYWwgcGFydCB3aWxsIG5vdCBiZSByZW1vdmVkIHdoZW4gcmVtb3ZpbmcgaXRzIGxhc3Qgdmlldy4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBwdWJsaWMgYWRkUGFydChpZDogc3RyaW5nIHwgTUFJTl9BUkVBLCByZWxhdGl2ZVRvOiBSZWZlcmVuY2VFbGVtZW50LCBvcHRpb25zPzoge2FjdGl2YXRlPzogYm9vbGVhbjsgc3RydWN0dXJhbD86IGJvb2xlYW59KTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5Ll9fYWRkUGFydChpZCwgcmVsYXRpdmVUbywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUGFydChpZDogc3RyaW5nKTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5Ll9fcmVtb3ZlUGFydChpZCk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFjdGl2ZSBwYXJ0IG9mIHRoZSBzcGVjaWZpZWQgZ3JpZCwgb3IgYG51bGxgIGlmIHNwZWNpZmllZCBncmlkIGlzIG5vdCBwcmVzZW50LlxuICAgKi9cbiAgcHVibGljIGFjdGl2ZVBhcnQoZmluZDoge2dyaWQ6ICd3b3JrYmVuY2gnfSk6IFJlYWRvbmx5PE1QYXJ0PjtcbiAgcHVibGljIGFjdGl2ZVBhcnQoZmluZDoge2dyaWQ6IGtleW9mIEdyaWRzfSk6IFJlYWRvbmx5PE1QYXJ0PiB8IG51bGw7XG4gIHB1YmxpYyBhY3RpdmVQYXJ0KGZpbmQ6IHtncmlkOiBrZXlvZiBHcmlkc30pOiBSZWFkb25seTxNUGFydD4gfCBudWxsIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5fZ3JpZHNbZmluZC5ncmlkXTtcbiAgICBpZiAoIWdyaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJ0KHtwYXJ0SWQ6IGdyaWQuYWN0aXZlUGFydElkLCBncmlkOiBmaW5kLmdyaWR9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGFjdGl2YXRlUGFydChpZDogc3RyaW5nKTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5Ll9fYWN0aXZhdGVQYXJ0KGlkKTtcbiAgICByZXR1cm4gd29ya2luZ0NvcHk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSB2aWV3IGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZmlsdGVyLiBJZiBub3QgZm91bmQsIGJ5IGRlZmF1bHQsIHRocm93cyBhbiBlcnJvciB1bmxlc3Mgc2V0dGluZyB0aGUgYG9yRWxzZU51bGxgIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGZpbmRCeSAtIERlZmluZXMgdGhlIHNlYXJjaCBzY29wZS5cbiAgICogQHBhcmFtIGZpbmRCeS52aWV3SWQgLSBTZWFyY2hlcyBmb3IgYSB2aWV3IHdpdGggdGhlIHNwZWNpZmllZCBpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb250cm9scyB0aGUgc2VhcmNoLlxuICAgKiBAcGFyYW0gb3B0aW9ucy5vckVsc2UgLSBDb250cm9scyB0byByZXR1cm4gYG51bGxgIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IgaWYgbm8gdmlldyBpcyBmb3VuZC5cbiAgICogQHJldHVybiB2aWV3IG1hdGNoaW5nIHRoZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgdmlldyhmaW5kQnk6IHt2aWV3SWQ6IFZpZXdJZH0pOiBNVmlldztcbiAgcHVibGljIHZpZXcoZmluZEJ5OiB7dmlld0lkOiBWaWV3SWR9LCBvcHRpb25zOiB7b3JFbHNlOiBudWxsfSk6IE1WaWV3IHwgbnVsbDtcbiAgcHVibGljIHZpZXcoZmluZEJ5OiB7dmlld0lkOiBWaWV3SWR9LCBvcHRpb25zPzoge29yRWxzZTogbnVsbH0pOiBNVmlldyB8IG51bGwge1xuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdzKHtpZDogZmluZEJ5LnZpZXdJZH0pLmF0KDApO1xuICAgIGlmICghdmlldyAmJiAhb3B0aW9ucykge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsVmlld0Vycm9yXSBObyB2aWV3IGZvdW5kIHdpdGggaWQgJyR7ZmluZEJ5LnZpZXdJZH0nLmApO1xuICAgIH1cbiAgICByZXR1cm4gdmlldyA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHZpZXdzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZmlsdGVyLlxuICAgKlxuICAgKiBAcGFyYW0gZmluZEJ5IC0gRGVmaW5lcyB0aGUgc2VhcmNoIHNjb3BlLlxuICAgKiBAcGFyYW0gZmluZEJ5LmlkIC0gU2VhcmNoZXMgZm9yIHZpZXdzIHdpdGggdGhlIHNwZWNpZmllZCBpZC5cbiAgICogQHBhcmFtIGZpbmRCeS5wYXJ0SWQgLSBTZWFyY2hlcyBmb3Igdmlld3MgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgcGFydC5cbiAgICogQHBhcmFtIGZpbmRCeS5zZWdtZW50cyAtIFNlYXJjaGVzIGZvciB2aWV3cyBuYXZpZ2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBVUkwuXG4gICAqIEBwYXJhbSBmaW5kQnkubmF2aWdhdGlvbkhpbnQgLSBTZWFyY2hlcyBmb3Igdmlld3MgbmF2aWdhdGVkIHdpdGggZ2l2ZW4gaGludC4gUGFzc2luZyBgbnVsbGAgc2VhcmNoZXMgZm9yIHZpZXdzIG5hdmlnYXRlZCB3aXRob3V0IGEgaGludC5cbiAgICogQHBhcmFtIGZpbmRCeS5tYXJrZWRGb3JSZW1vdmFsIC0gU2VhcmNoZXMgZm9yIHZpZXdzIG1hcmtlZCAob3Igbm90IG1hcmtlZCkgZm9yIHJlbW92YWwuXG4gICAqIEBwYXJhbSBmaW5kQnkuZ3JpZCAtIFNlYXJjaGVzIGZvciB2aWV3cyBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZCBncmlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbnRyb2xzIHRoZSBzZWFyY2guXG4gICAqIEBwYXJhbSBvcHRpb25zLm9yRWxzZSAtIENvbnRyb2xzIHRvIGVycm9yIGlmIG5vIHZpZXcgaXMgZm91bmQuXG4gICAqIEByZXR1cm4gdmlld3MgbWF0Y2hpbmcgdGhlIGZpbHRlciBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyB2aWV3cyhmaW5kQnk/OiB7aWQ/OiBzdHJpbmc7IHBhcnRJZD86IHN0cmluZzsgc2VnbWVudHM/OiBVcmxTZWdtZW50TWF0Y2hlcjsgbmF2aWdhdGlvbkhpbnQ/OiBzdHJpbmcgfCBudWxsOyBtYXJrZWRGb3JSZW1vdmFsPzogYm9vbGVhbjsgZ3JpZD86IGtleW9mIEdyaWRzfSwgb3B0aW9ucz86IHtvckVsc2U6ICd0aHJvd0Vycm9yJ30pOiByZWFkb25seSBNVmlld1tdIHtcbiAgICBjb25zdCB2aWV3cyA9IHRoaXMucGFydHMoe2dyaWQ6IGZpbmRCeT8uZ3JpZH0pXG4gICAgICAuZmlsdGVyKHBhcnQgPT4ge1xuICAgICAgICBpZiAoZmluZEJ5Py5wYXJ0SWQgIT09IHVuZGVmaW5lZCAmJiBwYXJ0LmlkICE9PSBmaW5kQnkucGFydElkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSlcbiAgICAgIC5mbGF0TWFwKHBhcnQgPT4gcGFydC52aWV3cylcbiAgICAgIC5maWx0ZXIodmlldyA9PiB7XG4gICAgICAgIGlmIChmaW5kQnk/LmlkICE9PSB1bmRlZmluZWQgJiYgIW1hdGNoVmlld0J5SWQoZmluZEJ5LmlkKSh2aWV3KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmluZEJ5Py5zZWdtZW50cyAmJiAhZmluZEJ5LnNlZ21lbnRzLm1hdGNoZXModGhpcy51cmxTZWdtZW50cyh7dmlld0lkOiB2aWV3LmlkfSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5kQnk/Lm5hdmlnYXRpb25IaW50ICE9PSB1bmRlZmluZWQgJiYgZmluZEJ5Lm5hdmlnYXRpb25IaW50ICE9PSAodmlldy5uYXZpZ2F0aW9uPy5oaW50ID8/IG51bGwpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5kQnk/Lm1hcmtlZEZvclJlbW92YWwgIT09IHVuZGVmaW5lZCAmJiBmaW5kQnkubWFya2VkRm9yUmVtb3ZhbCAhPT0gKHZpZXcubWFya2VkRm9yUmVtb3ZhbCA/PyBmYWxzZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgIGlmIChmaW5kQnkgJiYgIXZpZXdzLmxlbmd0aCAmJiBvcHRpb25zKSB7XG4gICAgICB0aHJvdyBFcnJvcihgW051bGxWaWV3RXJyb3JdIE5vIG1hdGNoaW5nIHZpZXcgZm91bmQ6IFske3N0cmluZ2lmeUZpbHRlcihmaW5kQnkpfV1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgYWRkVmlldyhpZDogc3RyaW5nLCBvcHRpb25zOiB7cGFydElkOiBzdHJpbmc7IHBvc2l0aW9uPzogbnVtYmVyIHwgJ3N0YXJ0JyB8ICdlbmQnIHwgJ2JlZm9yZS1hY3RpdmUtdmlldycgfCAnYWZ0ZXItYWN0aXZlLXZpZXcnOyBhY3RpdmF0ZVZpZXc/OiBib29sZWFuOyBhY3RpdmF0ZVBhcnQ/OiBib29sZWFuOyBjc3NDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdfSk6IMm1V29ya2JlbmNoTGF5b3V0IHtcbiAgICBjb25zdCB3b3JraW5nQ29weSA9IHRoaXMud29ya2luZ0NvcHkoKTtcbiAgICBpZiAoV29ya2JlbmNoTGF5b3V0cy5pc1ZpZXdJZChpZCkpIHtcbiAgICAgIHdvcmtpbmdDb3B5Ll9fYWRkVmlldyh7aWQsIHVpZDogVUlELnJhbmRvbVVJRCgpfSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgd29ya2luZ0NvcHkuX19hZGRWaWV3KHtpZDogdGhpcy5jb21wdXRlTmV4dFZpZXdJZCgpLCBhbHRlcm5hdGl2ZUlkOiBpZCwgdWlkOiBVSUQucmFuZG9tVUlEKCl9LCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmF2aWdhdGVWaWV3KGlkOiBzdHJpbmcsIGNvbW1hbmRzOiBDb21tYW5kcywgZXh0cmFzPzoge2hpbnQ/OiBzdHJpbmc7IHJlbGF0aXZlVG8/OiBBY3RpdmF0ZWRSb3V0ZSB8IG51bGw7IGRhdGE/OiBOYXZpZ2F0aW9uRGF0YTsgc3RhdGU/OiBOYXZpZ2F0aW9uU3RhdGU7IGNzc0NsYXNzPzogc3RyaW5nIHwgc3RyaW5nW119KTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5LnZpZXdzKHtpZH0sIHtvckVsc2U6ICd0aHJvd0Vycm9yJ30pLmZvckVhY2godmlldyA9PiB3b3JraW5nQ29weS5fX25hdmlnYXRlVmlldyh2aWV3LCBjb21tYW5kcywgZXh0cmFzKSk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIEBpbmhlcml0RG9jXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29udHJvbHMgcmVtb3ZhbCBvZiB0aGUgdmlldy5cbiAgICogQHBhcmFtIG9wdGlvbnMuZm9yY2UgLSBTcGVjaWZpZXMgd2hldGhlciB0byBmb3JjZSByZW1vdmUgdGhlIHZpZXcsIGJ5cGFzc2luZyBgQ2FuQ2xvc2VgIGd1YXJkLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZVZpZXcoaWQ6IHN0cmluZywgb3B0aW9ucz86IHtmb3JjZT86IGJvb2xlYW59KTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5LnZpZXdzKHtpZH0sIHtvckVsc2U6ICd0aHJvd0Vycm9yJ30pLmZvckVhY2godmlldyA9PiB3b3JraW5nQ29weS5fX3JlbW92ZVZpZXcodmlldywge2ZvcmNlOiBvcHRpb25zPy5mb3JjZX0pKTtcbiAgICByZXR1cm4gd29ya2luZ0NvcHk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB2aWV3cyBtYXJrZWQgZm9yIHJlbW92YWwsIG9wdGlvbmFsbHkgaW52b2tpbmcgdGhlIHBhc3NlZCBgQ2FuQ2xvc2VgIGZ1bmN0aW9uIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHJlbW92ZSBhIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVtb3ZlVmlld3NNYXJrZWRGb3JSZW1vdmFsKGNhbkNsb3NlRm4/OiAodmlld1VpZDogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbik6IFByb21pc2U8ybVXb3JrYmVuY2hMYXlvdXQ+IHtcbiAgICBjb25zdCB3b3JraW5nQ29weSA9IHRoaXMud29ya2luZ0NvcHkoKTtcbiAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygd29ya2luZ0NvcHkudmlld3Moe21hcmtlZEZvclJlbW92YWw6IHRydWV9KSkge1xuICAgICAgaWYgKCFjYW5DbG9zZUZuIHx8IGF3YWl0IGNhbkNsb3NlRm4odmlldy51aWQpKSB7XG4gICAgICAgIHdvcmtpbmdDb3B5Ll9fcmVtb3ZlVmlldyh2aWV3LCB7Zm9yY2U6IHRydWV9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbW92ZVZpZXcoaWQ6IHN0cmluZywgdGFyZ2V0UGFydElkOiBzdHJpbmcsIG9wdGlvbnM/OiB7cG9zaXRpb24/OiBudW1iZXIgfCAnc3RhcnQnIHwgJ2VuZCcgfCAnYmVmb3JlLWFjdGl2ZS12aWV3JyB8ICdhZnRlci1hY3RpdmUtdmlldyc7IGFjdGl2YXRlVmlldz86IGJvb2xlYW47IGFjdGl2YXRlUGFydD86IGJvb2xlYW59KTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5LnZpZXdzKHtpZH0sIHtvckVsc2U6ICd0aHJvd0Vycm9yJ30pLmZvckVhY2godmlldyA9PiB3b3JraW5nQ29weS5fX21vdmVWaWV3KHZpZXcsIHRhcmdldFBhcnRJZCwgb3B0aW9ucykpO1xuICAgIHJldHVybiB3b3JraW5nQ29weTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGFjdGl2YXRlVmlldyhpZDogc3RyaW5nLCBvcHRpb25zPzoge2FjdGl2YXRlUGFydD86IGJvb2xlYW59KTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5LnZpZXdzKHtpZH0sIHtvckVsc2U6ICd0aHJvd0Vycm9yJ30pLmZvckVhY2godmlldyA9PiB3b3JraW5nQ29weS5fX2FjdGl2YXRlVmlldyh2aWV3LCBvcHRpb25zKSk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGUgcHJlY2VkaW5nIHZpZXcgaWYgaXQgZXhpc3RzLCBvciB0aGUgc3Vic2VxdWVudCB2aWV3IG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSB2aWV3IHRvIGFjdGl2YXRlIGl0cyBhZGphY2VudCB2aWV3LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbnRyb2xzIHZpZXcgYWN0aXZhdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbnMuYWN0aXZhdGVQYXJ0IC0gQ29udHJvbHMgaWYgdG8gYWN0aXZhdGUgdGhlIHBhcnQuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICogQHJldHVybiBhIGNvcHkgb2YgdGhpcyBsYXlvdXQgd2l0aCB0aGUgYWRqYWNlbnQgdmlldyBhY3RpdmF0ZWQuXG4gICAqL1xuICBwdWJsaWMgYWN0aXZhdGVBZGphY2VudFZpZXcoaWQ6IHN0cmluZywgb3B0aW9ucz86IHthY3RpdmF0ZVBhcnQ/OiBib29sZWFufSk6IMm1V29ya2JlbmNoTGF5b3V0IHtcbiAgICBjb25zdCB3b3JraW5nQ29weSA9IHRoaXMud29ya2luZ0NvcHkoKTtcbiAgICB3b3JraW5nQ29weS52aWV3cyh7aWR9LCB7b3JFbHNlOiAndGhyb3dFcnJvcid9KS5mb3JFYWNoKHZpZXcgPT4gd29ya2luZ0NvcHkuX19hY3RpdmF0ZUFkamFjZW50Vmlldyh2aWV3LCBvcHRpb25zKSk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmFtZXMgYSB2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIHZpZXcgd2hpY2ggdG8gcmVuYW1lLlxuICAgKiBAcGFyYW0gbmV3Vmlld0lkIC0gVGhlIG5ldyBpZGVudGl0eSBvZiB0aGUgdmlldy5cbiAgICogQHJldHVybiBhIGNvcHkgb2YgdGhpcyBsYXlvdXQgd2l0aCB0aGUgdmlldyByZW5hbWVkLlxuICAgKi9cbiAgcHVibGljIHJlbmFtZVZpZXcoaWQ6IFZpZXdJZCwgbmV3Vmlld0lkOiBWaWV3SWQpOiDJtVdvcmtiZW5jaExheW91dCB7XG4gICAgY29uc3Qgd29ya2luZ0NvcHkgPSB0aGlzLndvcmtpbmdDb3B5KCk7XG4gICAgd29ya2luZ0NvcHkuX19yZW5hbWVWaWV3KHdvcmtpbmdDb3B5LnZpZXcoe3ZpZXdJZDogaWR9KSwgbmV3Vmlld0lkKTtcbiAgICByZXR1cm4gd29ya2luZ0NvcHk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc3BsaXQgcmF0aW8gZm9yIHRoZSB0d28gY2hpbGRyZW4gb2YgYSB7QGxpbmsgTVRyZWVOb2RlfS5cbiAgICpcbiAgICogQHBhcmFtIG5vZGVJZCAtIFRoZSBpZCBvZiB0aGUgbm9kZSB0byBzZXQgdGhlIHNwbGl0IHJhdGlvIGZvci5cbiAgICogQHBhcmFtIHJhdGlvIC0gVGhlIHByb3BvcnRpb25hbCBzaXplIGJldHdlZW4gdGhlIHR3byBjaGlsZHJlbiwgZXhwcmVzc2VkIGFzIGNsb3NlZCBpbnRlcnZhbCBbMCwxXS5cbiAgICogICAgICAgICAgICAgICAgRXhhbXBsZTogVG8gZ2l2ZSAxLzMgb2YgdGhlIHNwYWNlIHRvIHRoZSBmaXJzdCBjaGlsZCwgc2V0IHRoZSByYXRpbyB0byBgMC4zYC5cbiAgICogQHJldHVybiBhIGNvcHkgb2YgdGhpcyBsYXlvdXQgd2l0aCB0aGUgc3BsaXQgcmF0aW8gc2V0LlxuICAgKi9cbiAgcHVibGljIHNldFNwbGl0UmF0aW8obm9kZUlkOiBzdHJpbmcsIHJhdGlvOiBudW1iZXIpOiDJtVdvcmtiZW5jaExheW91dCB7XG4gICAgY29uc3Qgd29ya2luZ0NvcHkgPSB0aGlzLndvcmtpbmdDb3B5KCk7XG4gICAgd29ya2luZ0NvcHkuX19zZXRTcGxpdFJhdGlvKG5vZGVJZCwgcmF0aW8pO1xuICAgIHJldHVybiB3b3JraW5nQ29weTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIHRoaXMgbGF5b3V0IGludG8gYSBVUkwtc2FmZSBiYXNlNjQgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIHNlcmlhbGl6ZShmbGFncz86IEdyaWRTZXJpYWxpemF0aW9uRmxhZ3MpOiBTZXJpYWxpemVkV29ya2JlbmNoTGF5b3V0IHtcbiAgICBjb25zdCBpc01haW5BcmVhRW1wdHkgPSAodGhpcy5tYWluQXJlYUdyaWQ/LnJvb3QgaW5zdGFuY2VvZiBNUGFydCAmJiB0aGlzLm1haW5BcmVhR3JpZC5yb290LnZpZXdzLmxlbmd0aCA9PT0gMCkgPz8gdHJ1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgd29ya2JlbmNoR3JpZDogdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemVHcmlkKHRoaXMud29ya2JlbmNoR3JpZCwgZmxhZ3MpLFxuICAgICAgbWFpbkFyZWFHcmlkOiBpc01haW5BcmVhRW1wdHkgPyBudWxsIDogdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemVHcmlkKHRoaXMuX2dyaWRzLm1haW5BcmVhLCBmbGFncyksXG4gICAgICB3b3JrYmVuY2hWaWV3T3V0bGV0czogdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemVWaWV3T3V0bGV0cyh0aGlzLnZpZXdPdXRsZXRzKHtncmlkOiAnd29ya2JlbmNoJ30pKSxcbiAgICAgIG1haW5BcmVhVmlld091dGxldHM6IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplVmlld091dGxldHModGhpcy52aWV3T3V0bGV0cyh7Z3JpZDogJ21haW5BcmVhJ30pKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSBuZXh0IGF2YWlsYWJsZSB2aWV3IGlkLlxuICAgKi9cbiAgcHVibGljIGNvbXB1dGVOZXh0Vmlld0lkKCk6IFZpZXdJZCB7XG4gICAgcmV0dXJuIFdvcmtiZW5jaExheW91dHMuY29tcHV0ZU5leHRWaWV3SWQodGhpcy52aWV3cygpLm1hcCh2aWV3ID0+IHZpZXcuaWQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fYWRkUGFydChpZDogc3RyaW5nLCByZWxhdGl2ZVRvOiBSZWZlcmVuY2VFbGVtZW50LCBvcHRpb25zPzoge2FjdGl2YXRlPzogYm9vbGVhbjsgc3RydWN0dXJhbD86IGJvb2xlYW59KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzUGFydChpZCkpIHtcbiAgICAgIHRocm93IEVycm9yKGBbUGFydEFkZEVycm9yXSBQYXJ0IGlkIG11c3QgYmUgdW5pcXVlLiBUaGUgbGF5b3V0IGFscmVhZHkgY29udGFpbnMgYSBwYXJ0IHdpdGggdGhlIGlkICcke2lkfScuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFydCA9IG5ldyBNUGFydCh7aWQsIHN0cnVjdHVyYWw6IG9wdGlvbnM/LnN0cnVjdHVyYWwgPz8gdHJ1ZSwgdmlld3M6IFtdfSk7XG5cbiAgICAvLyBGaW5kIHRoZSByZWZlcmVuY2UgZWxlbWVudCwgaWYgc3BlY2lmaWVkLCBvciB1c2UgdGhlIGxheW91dCByb290IGFzIHJlZmVyZW5jZSBvdGhlcndpc2UuXG4gICAgY29uc3QgcmVmZXJlbmNlRWxlbWVudCA9IHJlbGF0aXZlVG8ucmVsYXRpdmVUbyA/IHRoaXMuZmluZFRyZWVFbGVtZW50KHtpZDogcmVsYXRpdmVUby5yZWxhdGl2ZVRvfSkgOiB0aGlzLndvcmtiZW5jaEdyaWQucm9vdDtcbiAgICBjb25zdCBhZGRCZWZvcmUgPSByZWxhdGl2ZVRvLmFsaWduID09PSAnbGVmdCcgfHwgcmVsYXRpdmVUby5hbGlnbiA9PT0gJ3RvcCc7XG4gICAgY29uc3QgcmF0aW8gPSByZWxhdGl2ZVRvLnJhdGlvID8/IC41O1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHRyZWUgbm9kZS5cbiAgICBjb25zdCBuZXdUcmVlTm9kZTogTVRyZWVOb2RlID0gbmV3IE1UcmVlTm9kZSh7XG4gICAgICBpZDogVUlELnJhbmRvbVVJRCgpLFxuICAgICAgY2hpbGQxOiBhZGRCZWZvcmUgPyBuZXdQYXJ0IDogcmVmZXJlbmNlRWxlbWVudCxcbiAgICAgIGNoaWxkMjogYWRkQmVmb3JlID8gcmVmZXJlbmNlRWxlbWVudCA6IG5ld1BhcnQsXG4gICAgICBkaXJlY3Rpb246IHJlbGF0aXZlVG8uYWxpZ24gPT09ICdsZWZ0JyB8fCByZWxhdGl2ZVRvLmFsaWduID09PSAncmlnaHQnID8gJ3JvdycgOiAnY29sdW1uJyxcbiAgICAgIHJhdGlvOiBhZGRCZWZvcmUgPyByYXRpbyA6IDEgLSByYXRpbyxcbiAgICAgIHBhcmVudDogcmVmZXJlbmNlRWxlbWVudC5wYXJlbnQsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdGhlIHRyZWUgbm9kZSB0byB0aGUgbGF5b3V0LlxuICAgIGlmICghcmVmZXJlbmNlRWxlbWVudC5wYXJlbnQpIHtcbiAgICAgIHRoaXMuZ3JpZCh7ZWxlbWVudDogcmVmZXJlbmNlRWxlbWVudH0pLnJvb3QgPSBuZXdUcmVlTm9kZTsgLy8gdG9wLWxldmVsIG5vZGVcbiAgICB9XG4gICAgZWxzZSBpZiAocmVmZXJlbmNlRWxlbWVudC5wYXJlbnQuY2hpbGQxID09PSByZWZlcmVuY2VFbGVtZW50KSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50LnBhcmVudC5jaGlsZDEgPSBuZXdUcmVlTm9kZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50LnBhcmVudC5jaGlsZDIgPSBuZXdUcmVlTm9kZTtcbiAgICB9XG4gICAgcmVmZXJlbmNlRWxlbWVudC5wYXJlbnQgPSBuZXdUcmVlTm9kZTtcbiAgICBuZXdQYXJ0LnBhcmVudCA9IG5ld1RyZWVOb2RlO1xuXG4gICAgLy8gQWN0aXZhdGUgdGhlIHBhcnQuXG4gICAgaWYgKG9wdGlvbnM/LmFjdGl2YXRlKSB7XG4gICAgICB0aGlzLl9fYWN0aXZhdGVQYXJ0KG5ld1BhcnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fcmVtb3ZlUGFydChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydCh7cGFydElkOiBpZH0pO1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQoe2VsZW1lbnQ6IHBhcnR9KTtcbiAgICBjb25zdCBncmlkTmFtZSA9IHRoaXMuX2dyaWROYW1lcy5maW5kKGdyaWROYW1lID0+IHRoaXMuX2dyaWRzW2dyaWROYW1lXSA9PT0gZ3JpZCk7XG5cbiAgICAvLyBUaGUgbGFzdCBwYXJ0IGlzIG5ldmVyIHJlbW92ZWQuXG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKHtncmlkOiBncmlkTmFtZX0pO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIHBhcnQuXG4gICAgY29uc3Qgc2libGluZ0VsZW1lbnQgPSAocGFydC5wYXJlbnQhLmNoaWxkMSA9PT0gcGFydCA/IHBhcnQucGFyZW50IS5jaGlsZDIgOiBwYXJ0LnBhcmVudCEuY2hpbGQxKTtcbiAgICBpZiAoIXBhcnQucGFyZW50IS5wYXJlbnQpIHtcbiAgICAgIGdyaWQucm9vdCA9IHNpYmxpbmdFbGVtZW50O1xuICAgICAgZ3JpZC5yb290LnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocGFydC5wYXJlbnQhLnBhcmVudC5jaGlsZDEgPT09IHBhcnQucGFyZW50KSB7XG4gICAgICBwYXJ0LnBhcmVudCEucGFyZW50LmNoaWxkMSA9IHNpYmxpbmdFbGVtZW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHBhcnQucGFyZW50IS5wYXJlbnQuY2hpbGQyID0gc2libGluZ0VsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIG91dGxldHMgYW5kIHN0YXRlcyBvZiB2aWV3cyBjb250YWluZWQgaW4gdGhlIHBhcnQuXG4gICAgcGFydC52aWV3cy5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgdGhpcy5fdmlld091dGxldHMuZGVsZXRlKHZpZXcuaWQpO1xuICAgICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlcy5kZWxldGUodmlldy5pZCk7XG4gICAgfSk7XG5cbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCBwYXJ0IHdhcyB0aGUgYWN0aXZlIHBhcnQsIG1ha2UgdGhlIGxhc3QgdXNlZCBwYXJ0IHRoZSBhY3RpdmUgcGFydC5cbiAgICBpZiAoZ3JpZC5hY3RpdmVQYXJ0SWQgPT09IGlkKSB7XG4gICAgICBjb25zdCBhY3RpdmVQYXJ0ID0gcGFydHNcbiAgICAgICAgLmZpbHRlcihwYXJ0ID0+IHBhcnQuaWQgIT09IGlkKVxuICAgICAgICAuc29ydCgocGFydDEsIHBhcnQyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aXZhdGlvbkluc3RhbnRQYXJ0MSA9IHRoaXMuX3BhcnRBY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyLmdldEFjdGl2YXRpb25JbnN0YW50KHBhcnQxLmlkKTtcbiAgICAgICAgICBjb25zdCBhY3RpdmF0aW9uSW5zdGFudFBhcnQyID0gdGhpcy5fcGFydEFjdGl2YXRpb25JbnN0YW50UHJvdmlkZXIuZ2V0QWN0aXZhdGlvbkluc3RhbnQocGFydDIuaWQpO1xuICAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uSW5zdGFudFBhcnQyIC0gYWN0aXZhdGlvbkluc3RhbnRQYXJ0MTtcbiAgICAgICAgfSlbMF07XG4gICAgICBncmlkLmFjdGl2ZVBhcnRJZCA9IGFjdGl2ZVBhcnQhLmlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fYWRkVmlldyh2aWV3OiBNVmlldywgb3B0aW9uczoge3BhcnRJZDogc3RyaW5nOyBwb3NpdGlvbj86IG51bWJlciB8ICdzdGFydCcgfCAnZW5kJyB8ICdiZWZvcmUtYWN0aXZlLXZpZXcnIHwgJ2FmdGVyLWFjdGl2ZS12aWV3JzsgYWN0aXZhdGVWaWV3PzogYm9vbGVhbjsgYWN0aXZhdGVQYXJ0PzogYm9vbGVhbjsgY3NzQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXX0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNWaWV3KHZpZXcuaWQpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgW1ZpZXdBZGRFcnJvcl0gVmlldyBpZCBtdXN0IGJlIHVuaXF1ZS4gVGhlIGxheW91dCBhbHJlYWR5IGNvbnRhaW5zIGEgdmlldyB3aXRoIHRoZSBpZCAnJHt2aWV3LmlkfScuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydCh7cGFydElkOiBvcHRpb25zLnBhcnRJZH0pO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gY29lcmNlUG9zaXRpb24ob3B0aW9ucy5wb3NpdGlvbiA/PyAnZW5kJywgcGFydCk7XG4gICAgcGFydC52aWV3cy5zcGxpY2UocG9zaXRpb24sIDAsIHZpZXcpO1xuXG4gICAgaWYgKG9wdGlvbnMuYWN0aXZhdGVWaWV3KSB7XG4gICAgICB0aGlzLl9fYWN0aXZhdGVWaWV3KHZpZXcpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hY3RpdmF0ZVBhcnQpIHtcbiAgICAgIHRoaXMuX19hY3RpdmF0ZVBhcnQob3B0aW9ucy5wYXJ0SWQpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jc3NDbGFzcykge1xuICAgICAgdmlldy5jc3NDbGFzcyA9IEFycmF5cy5jb2VyY2Uob3B0aW9ucy5jc3NDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIG5hbWUgYmVnaW5zIHdpdGggdW5kZXJzY29yZXMsIGluZGljYXRpbmcgdGhhdCBpdCBkb2VzIG5vdCBvcGVyYXRlIG9uIGEgd29ya2luZyBjb3B5LCBidXQgbW9kaWZpZXMgdGhpcyBsYXlvdXQgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX19uYXZpZ2F0ZVZpZXcodmlldzogTVZpZXcsIGNvbW1hbmRzOiBDb21tYW5kcywgZXh0cmFzPzoge2hpbnQ/OiBzdHJpbmc7IHJlbGF0aXZlVG8/OiBBY3RpdmF0ZWRSb3V0ZSB8IG51bGw7IGRhdGE/OiBOYXZpZ2F0aW9uRGF0YTsgc3RhdGU/OiBOYXZpZ2F0aW9uU3RhdGU7IGNzc0NsYXNzPzogc3RyaW5nIHwgc3RyaW5nW119KTogdm9pZCB7XG4gICAgaWYgKCFjb21tYW5kcy5sZW5ndGggJiYgIWV4dHJhcz8uaGludCAmJiAhZXh0cmFzPy5yZWxhdGl2ZVRvKSB7XG4gICAgICB0aHJvdyBFcnJvcignW05hdmlnYXRlRXJyb3JdIENvbW1hbmRzLCByZWxhdGl2ZVRvIG9yIGhpbnQgbXVzdCBiZSBzZXQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsU2VnbWVudHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5faW5qZWN0b3IsICgpID0+IFJvdXRpbmcuY29tbWFuZHNUb1NlZ21lbnRzKGNvbW1hbmRzLCB7cmVsYXRpdmVUbzogZXh0cmFzPy5yZWxhdGl2ZVRvfSkpO1xuICAgIGlmICh1cmxTZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3ZpZXdPdXRsZXRzLnNldCh2aWV3LmlkLCB1cmxTZWdtZW50cyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fdmlld091dGxldHMuZGVsZXRlKHZpZXcuaWQpO1xuICAgIH1cblxuICAgIGlmIChleHRyYXM/LnN0YXRlICYmIE9iamVjdHMua2V5cyhleHRyYXMuc3RhdGUpLmxlbmd0aCkge1xuICAgICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlcy5zZXQodmlldy5pZCwgZXh0cmFzLnN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVzLmRlbGV0ZSh2aWV3LmlkKTtcbiAgICB9XG5cbiAgICB2aWV3Lm5hdmlnYXRpb24gPSBPYmplY3RzLndpdGhvdXRVbmRlZmluZWRFbnRyaWVzKHtcbiAgICAgIGlkOiBVSUQucmFuZG9tVUlEKCksXG4gICAgICBoaW50OiBleHRyYXM/LmhpbnQsXG4gICAgICBkYXRhOiBleHRyYXM/LmRhdGEsXG4gICAgICBjc3NDbGFzczogZXh0cmFzPy5jc3NDbGFzcyA/IEFycmF5cy5jb2VyY2UoZXh0cmFzLmNzc0NsYXNzKSA6IHVuZGVmaW5lZCxcbiAgICB9IHNhdGlzZmllcyBNVmlld1snbmF2aWdhdGlvbiddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fbW92ZVZpZXcodmlldzogTVZpZXcsIHRhcmdldFBhcnRJZDogc3RyaW5nLCBvcHRpb25zPzoge3Bvc2l0aW9uPzogbnVtYmVyIHwgJ3N0YXJ0JyB8ICdlbmQnIHwgJ2JlZm9yZS1hY3RpdmUtdmlldycgfCAnYWZ0ZXItYWN0aXZlLXZpZXcnOyBhY3RpdmF0ZVZpZXc/OiBib29sZWFuOyBhY3RpdmF0ZVBhcnQ/OiBib29sZWFufSk6IHZvaWQge1xuICAgIGNvbnN0IHNvdXJjZVBhcnQgPSB0aGlzLnBhcnQoe3ZpZXdJZDogdmlldy5pZH0pO1xuICAgIGNvbnN0IHRhcmdldFBhcnQgPSB0aGlzLnBhcnQoe3BhcnRJZDogdGFyZ2V0UGFydElkfSk7XG5cbiAgICAvLyBNb3ZlIHRoZSB2aWV3LlxuICAgIGlmIChzb3VyY2VQYXJ0ICE9PSB0YXJnZXRQYXJ0KSB7XG4gICAgICB0aGlzLl9fcmVtb3ZlVmlldyh2aWV3LCB7cmVtb3ZlT3V0bGV0OiBmYWxzZSwgcmVtb3ZlTmF2aWdhdGlvblN0YXRlOiBmYWxzZSwgZm9yY2U6IHRydWV9KTtcbiAgICAgIHRoaXMuX19hZGRWaWV3KHZpZXcsIHtwYXJ0SWQ6IHRhcmdldFBhcnRJZCwgcG9zaXRpb246IG9wdGlvbnM/LnBvc2l0aW9ufSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnM/LnBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gY29lcmNlUG9zaXRpb24ob3B0aW9ucy5wb3NpdGlvbiwgdGFyZ2V0UGFydCk7XG4gICAgICBjb25zdCByZWZlcmVuY2VWaWV3OiBNVmlldyB8IHVuZGVmaW5lZCA9IHNvdXJjZVBhcnQudmlld3MuYXQocG9zaXRpb24pO1xuICAgICAgc291cmNlUGFydC52aWV3cy5zcGxpY2Uoc291cmNlUGFydC52aWV3cy5pbmRleE9mKHZpZXcpLCAxKTtcbiAgICAgIHNvdXJjZVBhcnQudmlld3Muc3BsaWNlKHJlZmVyZW5jZVZpZXcgPyBzb3VyY2VQYXJ0LnZpZXdzLmluZGV4T2YocmVmZXJlbmNlVmlldykgOiBzb3VyY2VQYXJ0LnZpZXdzLmxlbmd0aCwgMCwgdmlldyk7XG4gICAgfVxuXG4gICAgLy8gQWN0aXZhdGUgdmlldyBhbmQgcGFydC5cbiAgICBpZiAob3B0aW9ucz8uYWN0aXZhdGVQYXJ0KSB7XG4gICAgICB0aGlzLl9fYWN0aXZhdGVQYXJ0KHRhcmdldFBhcnRJZCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5hY3RpdmF0ZVZpZXcpIHtcbiAgICAgIHRoaXMuX19hY3RpdmF0ZVZpZXcodmlldyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIG5hbWUgYmVnaW5zIHdpdGggdW5kZXJzY29yZXMsIGluZGljYXRpbmcgdGhhdCBpdCBkb2VzIG5vdCBvcGVyYXRlIG9uIGEgd29ya2luZyBjb3B5LCBidXQgbW9kaWZpZXMgdGhpcyBsYXlvdXQgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX19yZW1vdmVWaWV3KHZpZXc6IE1WaWV3LCBvcHRpb25zPzoge3JlbW92ZU91dGxldD86IGZhbHNlOyByZW1vdmVOYXZpZ2F0aW9uU3RhdGU/OiBmYWxzZTsgZm9yY2U/OiBib29sZWFufSk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucz8uZm9yY2UpIHtcbiAgICAgIHZpZXcubWFya2VkRm9yUmVtb3ZhbCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydCh7dmlld0lkOiB2aWV3LmlkfSk7XG5cbiAgICAvLyBSZW1vdmUgdmlldy5cbiAgICBwYXJ0LnZpZXdzLnNwbGljZShwYXJ0LnZpZXdzLmluZGV4T2YodmlldyksIDEpO1xuXG4gICAgLy8gUmVtb3ZlIG91dGxldC5cbiAgICBpZiAob3B0aW9ucz8ucmVtb3ZlT3V0bGV0ID8/IHRydWUpIHtcbiAgICAgIHRoaXMuX3ZpZXdPdXRsZXRzLmRlbGV0ZSh2aWV3LmlkKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgc3RhdGUuXG4gICAgaWYgKG9wdGlvbnM/LnJlbW92ZU5hdmlnYXRpb25TdGF0ZSA/PyB0cnVlKSB7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVzLmRlbGV0ZSh2aWV3LmlkKTtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmF0ZSB0aGUgbGFzdCB1c2VkIHZpZXcgaWYgdGhpcyB2aWV3IHdhcyBhY3RpdmUuXG4gICAgaWYgKHBhcnQuYWN0aXZlVmlld0lkID09PSB2aWV3LmlkKSB7XG4gICAgICBwYXJ0LmFjdGl2ZVZpZXdJZCA9IHBhcnQudmlld3NcbiAgICAgICAgLm1hcCh2aWV3ID0+IHZpZXcuaWQpXG4gICAgICAgIC5zb3J0KCh2aWV3SWQxLCB2aWV3SWQyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aXZhdGlvbkluc3RhbnRWaWV3MSA9IHRoaXMuX3ZpZXdBY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyLmdldEFjdGl2YXRpb25JbnN0YW50KHZpZXdJZDEpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2YXRpb25JbnN0YW50VmlldzIgPSB0aGlzLl92aWV3QWN0aXZhdGlvbkluc3RhbnRQcm92aWRlci5nZXRBY3RpdmF0aW9uSW5zdGFudCh2aWV3SWQyKTtcbiAgICAgICAgICByZXR1cm4gYWN0aXZhdGlvbkluc3RhbnRWaWV3MiAtIGFjdGl2YXRpb25JbnN0YW50VmlldzE7XG4gICAgICAgIH0pLmF0KDApO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0aGUgcGFydCBpZiB0aGlzIGlzIHRoZSBsYXN0IHZpZXcgb2YgdGhlIHBhcnQgYW5kIG5vdCBhIHN0cnVjdHVyYWwgcGFydC5cbiAgICBpZiAocGFydC52aWV3cy5sZW5ndGggPT09IDAgJiYgIXBhcnQuc3RydWN0dXJhbCkge1xuICAgICAgdGhpcy5fX3JlbW92ZVBhcnQocGFydC5pZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIG5hbWUgYmVnaW5zIHdpdGggdW5kZXJzY29yZXMsIGluZGljYXRpbmcgdGhhdCBpdCBkb2VzIG5vdCBvcGVyYXRlIG9uIGEgd29ya2luZyBjb3B5LCBidXQgbW9kaWZpZXMgdGhpcyBsYXlvdXQgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX19hY3RpdmF0ZVZpZXcodmlldzogTVZpZXcsIG9wdGlvbnM/OiB7YWN0aXZhdGVQYXJ0PzogYm9vbGVhbn0pOiB2b2lkIHtcbiAgICAvLyBBY3RpdmF0ZSB0aGUgdmlldy5cbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5wYXJ0KHt2aWV3SWQ6IHZpZXcuaWR9KTtcbiAgICBwYXJ0LmFjdGl2ZVZpZXdJZCA9IHZpZXcuaWQ7XG5cbiAgICAvLyBBY3RpdmF0ZSB0aGUgcGFydC5cbiAgICBpZiAob3B0aW9ucz8uYWN0aXZhdGVQYXJ0KSB7XG4gICAgICB0aGlzLl9fYWN0aXZhdGVQYXJ0KHBhcnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fYWN0aXZhdGVBZGphY2VudFZpZXcodmlldzogTVZpZXcsIG9wdGlvbnM/OiB7YWN0aXZhdGVQYXJ0PzogYm9vbGVhbn0pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5wYXJ0KHt2aWV3SWQ6IHZpZXcuaWR9KTtcbiAgICBjb25zdCB2aWV3SW5kZXggPSBwYXJ0LnZpZXdzLmluZGV4T2Yodmlldyk7XG4gICAgcGFydC5hY3RpdmVWaWV3SWQgPSAocGFydC52aWV3c1t2aWV3SW5kZXggLSAxXSB8fCBwYXJ0LnZpZXdzW3ZpZXdJbmRleCArIDFdKT8uaWQ7IC8vIGlzIGB1bmRlZmluZWRgIGlmIGl0IGlzIHRoZSBsYXN0IHZpZXcgb2YgdGhlIHBhcnRcblxuICAgIC8vIEFjdGl2YXRlIHRoZSBwYXJ0LlxuICAgIGlmIChvcHRpb25zPy5hY3RpdmF0ZVBhcnQpIHtcbiAgICAgIHRoaXMuX19hY3RpdmF0ZVBhcnQocGFydC5pZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIG5hbWUgYmVnaW5zIHdpdGggdW5kZXJzY29yZXMsIGluZGljYXRpbmcgdGhhdCBpdCBkb2VzIG5vdCBvcGVyYXRlIG9uIGEgd29ya2luZyBjb3B5LCBidXQgbW9kaWZpZXMgdGhpcyBsYXlvdXQgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX19zZXRTcGxpdFJhdGlvKG5vZGVJZDogc3RyaW5nLCByYXRpbzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHJhdGlvIDwgMCB8fCByYXRpbyA+IDEpIHtcbiAgICAgIHRocm93IEVycm9yKGBbTGF5b3V0TW9kaWZ5RXJyb3JdIFJhdGlvIGZvciBub2RlICcke25vZGVJZH0nIG11c3QgYmUgaW4gdGhlIGNsb3NlZCBpbnRlcnZhbCBbMCwxXSwgYnV0IHdhcyAnJHtyYXRpb30nLmApO1xuICAgIH1cbiAgICB0aGlzLmZpbmRUcmVlRWxlbWVudDxNVHJlZU5vZGU+KHtpZDogbm9kZUlkfSkucmF0aW8gPSByYXRpbztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fYWN0aXZhdGVQYXJ0KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5wYXJ0KHtwYXJ0SWQ6IGlkfSk7XG4gICAgdGhpcy5ncmlkKHtlbGVtZW50OiBwYXJ0fSkuYWN0aXZlUGFydElkID0gaWQ7XG4gIH1cblxuICAvKipcbiAgICogTm90ZTogVGhpcyBtZXRob2QgbmFtZSBiZWdpbnMgd2l0aCB1bmRlcnNjb3JlcywgaW5kaWNhdGluZyB0aGF0IGl0IGRvZXMgbm90IG9wZXJhdGUgb24gYSB3b3JraW5nIGNvcHksIGJ1dCBtb2RpZmllcyB0aGlzIGxheW91dCBpbnN0ZWFkLlxuICAgKi9cbiAgcHJpdmF0ZSBfX3RvZ2dsZU1heGltaXplZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tYXhpbWl6ZWQgPSAhdGhpcy5fbWF4aW1pemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIG5hbWUgYmVnaW5zIHdpdGggdW5kZXJzY29yZXMsIGluZGljYXRpbmcgdGhhdCBpdCBkb2VzIG5vdCBvcGVyYXRlIG9uIGEgd29ya2luZyBjb3B5LCBidXQgbW9kaWZpZXMgdGhpcyBsYXlvdXQgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX19yZW5hbWVWaWV3KHZpZXc6IE1WaWV3LCBuZXdWaWV3SWQ6IFZpZXdJZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1ZpZXcobmV3Vmlld0lkKSkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtWaWV3UmVuYW1lRXJyb3JdIFZpZXcgaWQgbXVzdCBiZSB1bmlxdWUuIFRoZSBsYXlvdXQgYWxyZWFkeSBjb250YWlucyBhIHZpZXcgd2l0aCB0aGUgaWQgJyR7bmV3Vmlld0lkfScuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydCh7dmlld0lkOiB2aWV3LmlkfSk7XG5cbiAgICBpZiAodGhpcy5fdmlld091dGxldHMuaGFzKHZpZXcuaWQpKSB7XG4gICAgICB0aGlzLl92aWV3T3V0bGV0cy5zZXQobmV3Vmlld0lkLCB0aGlzLl92aWV3T3V0bGV0cy5nZXQodmlldy5pZCkhKTtcbiAgICAgIHRoaXMuX3ZpZXdPdXRsZXRzLmRlbGV0ZSh2aWV3LmlkKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX25hdmlnYXRpb25TdGF0ZXMuaGFzKHZpZXcuaWQpKSB7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVzLnNldChuZXdWaWV3SWQsIHRoaXMuX25hdmlnYXRpb25TdGF0ZXMuZ2V0KHZpZXcuaWQpISk7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVzLmRlbGV0ZSh2aWV3LmlkKTtcbiAgICB9XG5cbiAgICBpZiAocGFydC5hY3RpdmVWaWV3SWQgPT09IHZpZXcuaWQpIHtcbiAgICAgIHBhcnQuYWN0aXZlVmlld0lkID0gbmV3Vmlld0lkO1xuICAgIH1cblxuICAgIHZpZXcuaWQgPSBuZXdWaWV3SWQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBncmlkIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZmlsdGVyLiBJZiBub3QgZm91bmQsIHRocm93cyBhbiBlcnJvci5cbiAgICpcbiAgICogQHBhcmFtIGZpbmRCeSAtIERlZmluZXMgdGhlIHNlYXJjaCBzY29wZS5cbiAgICogQHBhcmFtIGZpbmRCeS5lbGVtZW50IC0gU2VhcmNoZXMgZm9yIGEgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgZWxlbWVudC5cbiAgICogQHJldHVybiBHcmlkIG1hdGNoaW5nIHRoZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqL1xuICBwcml2YXRlIGdyaWQoZmluZEJ5OiB7ZWxlbWVudDogTVBhcnQgfCBNVHJlZU5vZGV9KTogTVBhcnRHcmlkIHtcbiAgICBjb25zdCBncmlkTmFtZSA9IHRoaXMuX2dyaWROYW1lcy5maW5kKGdyaWROYW1lID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRUcmVlRWxlbWVudHMoKGVsZW1lbnQ6IE1UcmVlTm9kZSB8IE1QYXJ0KTogZWxlbWVudCBpcyBNUGFydCB8IE1UcmVlTm9kZSA9PiBlbGVtZW50ID09PSBmaW5kQnkuZWxlbWVudCwge2ZpbmRGaXJzdDogdHJ1ZSwgZ3JpZDogZ3JpZE5hbWV9KS5sZW5ndGggPiAwO1xuICAgIH0pO1xuXG4gICAgaWYgKCFncmlkTmFtZSkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsR3JpZEVycm9yXSBObyBncmlkIGZvdW5kIHRoYXQgY29udGFpbnMgdGhlICR7ZmluZEJ5LmVsZW1lbnQgaW5zdGFuY2VvZiBNUGFydCA/ICdwYXJ0JyA6ICdub2RlJ30gJyR7ZmluZEJ5LmVsZW1lbnQuaWR9J1wiLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9ncmlkc1tncmlkTmFtZV0hO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0aGUgdHJlZSB0byBmaW5kIGFuIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBwcmVkaWNhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBmaW5kQnkgLSBEZWZpbmVzIHRoZSBzZWFyY2ggc2NvcGUuXG4gICAqIEBwYXJhbSBmaW5kQnkuaWQgLSBTZWFyY2hlcyBmb3IgYW4gZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgaWQuXG4gICAqIEByZXR1cm4gRWxlbWVudCBtYXRjaGluZyB0aGUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kVHJlZUVsZW1lbnQ8VCBleHRlbmRzIE1UcmVlTm9kZSB8IE1QYXJ0PihmaW5kQnk6IHtpZDogc3RyaW5nfSk6IFQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZpbmRUcmVlRWxlbWVudHMoKGVsZW1lbnQ6IE1UcmVlTm9kZSB8IE1QYXJ0KTogZWxlbWVudCBpcyBUID0+IHtcbiAgICAgIHJldHVybiBlbGVtZW50LmlkID09PSBmaW5kQnkuaWQ7XG4gICAgfSwge2ZpbmRGaXJzdDogdHJ1ZX0pLmF0KDApO1xuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICB0aHJvdyBFcnJvcihgW051bGxFbGVtZW50RXJyb3JdIE5vIGVsZW1lbnQgZm91bmQgd2l0aCBpZCAnJHtmaW5kQnkuaWR9Jy5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2VzIHRoZSB0cmVlIHRvIGZpbmQgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcHJlZGljYXRlLlxuICAgKlxuICAgKiBAcGFyYW0gcHJlZGljYXRlRm4gLSBQcmVkaWNhdGUgZnVuY3Rpb24gdG8gbWF0Y2guXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRGVmaW5lcyBzZWFyY2ggc2NvcGUgYW5kIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBvcHRpb25zLmZpbmRGaXJzdCAtIElmIHNwZWNpZmllZCwgc3RvcHMgdHJhdmVyc2luZyBvbiBmaXJzdCBtYXRjaC4gSWYgbm90IHNldCwgZGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICogQHBhcmFtIG9wdGlvbnMuZ3JpZCAtIFNlYXJjaGVzIGZvciBhbiBlbGVtZW50IGNvbnRhaW5lZCBpbiB0aGUgc3BlY2lmaWVkIGdyaWQuXG4gICAqIEByZXR1cm4gRWxlbWVudHMgbWF0Y2hpbmcgdGhlIGZpbHRlciBjcml0ZXJpYS5cbiAgICovXG4gIHByaXZhdGUgZmluZFRyZWVFbGVtZW50czxUIGV4dGVuZHMgTVRyZWVOb2RlIHwgTVBhcnQ+KHByZWRpY2F0ZUZuOiAoZWxlbWVudDogTVRyZWVOb2RlIHwgTVBhcnQpID0+IGVsZW1lbnQgaXMgVCwgb3B0aW9ucz86IHtmaW5kRmlyc3Q/OiBib29sZWFuOyBncmlkPzoga2V5b2YgR3JpZHN9KTogVFtdIHtcbiAgICBpZiAob3B0aW9ucz8uZ3JpZCAmJiAhdGhpcy5fZ3JpZHNbb3B0aW9ucy5ncmlkXSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG5cbiAgICBmdW5jdGlvbiB2aXNpdFBhcnRzKG5vZGU6IE1UcmVlTm9kZSB8IE1QYXJ0KTogYm9vbGVhbiB7XG4gICAgICBpZiAocHJlZGljYXRlRm4obm9kZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICAgIGlmIChvcHRpb25zPy5maW5kRmlyc3QpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIHN0b3AgdmlzaXRpbmcgb3RoZXIgZWxlbWVudHNcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE1UcmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdmlzaXRQYXJ0cyhub2RlLmNoaWxkMSkgJiYgdmlzaXRQYXJ0cyhub2RlLmNoaWxkMik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uZ3JpZCkge1xuICAgICAgdmlzaXRQYXJ0cyh0aGlzLl9ncmlkc1tvcHRpb25zLmdyaWRdIS5yb290KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGdyaWQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9ncmlkcykpIHtcbiAgICAgICAgaWYgKGdyaWQgJiYgIXZpc2l0UGFydHMoZ3JpZC5yb290KSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGxheW91dC5cbiAgICovXG4gIHByaXZhdGUgd29ya2luZ0NvcHkoKTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5faW5qZWN0b3IsICgpID0+IG5ldyDJtVdvcmtiZW5jaExheW91dCh7XG4gICAgICB3b3JrYmVuY2hHcmlkOiB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZUdyaWQodGhpcy53b3JrYmVuY2hHcmlkKSxcbiAgICAgIG1haW5BcmVhR3JpZDogdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemVHcmlkKHRoaXMuX2dyaWRzLm1haW5BcmVhKSxcbiAgICAgIHZpZXdPdXRsZXRzOiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5fdmlld091dGxldHMpLFxuICAgICAgbmF2aWdhdGlvblN0YXRlczogT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuX25hdmlnYXRpb25TdGF0ZXMpLFxuICAgICAgbWF4aW1pemVkOiB0aGlzLl9tYXhpbWl6ZWQsXG4gICAgfSkpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlZmF1bHQgd29ya2JlbmNoIGdyaWQgd2l0aCBhIG1haW4gYXJlYS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFdvcmtiZW5jaEdyaWQoKTogTVBhcnRHcmlkIHtcbiAgcmV0dXJuIHtcbiAgICByb290OiBuZXcgTVBhcnQoe2lkOiBNQUlOX0FSRUEsIHN0cnVjdHVyYWw6IHRydWUsIHZpZXdzOiBbXX0pLFxuICAgIGFjdGl2ZVBhcnRJZDogTUFJTl9BUkVBLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtYWluIGFyZWEgZ3JpZCB3aXRoIGFuIGluaXRpYWwgcGFydC5cbiAqXG4gKiBUaGUgREkgdG9rZW4ge0BsaW5rIE1BSU5fQVJFQV9JTklUSUFMX1BBUlRfSUR9IGlzIHVzZWQgdG8gYXNzaWduIHRoZSBpbml0aWFsIHBhcnQgaXRzIGlkZW50aXR5LlxuICovXG5mdW5jdGlvbiBjcmVhdGVJbml0aWFsTWFpbkFyZWFHcmlkKCk6IE1QYXJ0R3JpZCB7XG4gIHJldHVybiB7XG4gICAgcm9vdDogbmV3IE1QYXJ0KHtpZDogaW5qZWN0KE1BSU5fQVJFQV9JTklUSUFMX1BBUlRfSUQpLCBzdHJ1Y3R1cmFsOiBmYWxzZSwgdmlld3M6IFtdfSksXG4gICAgYWN0aXZlUGFydElkOiBpbmplY3QoTUFJTl9BUkVBX0lOSVRJQUxfUEFSVF9JRCksXG4gIH07XG59XG5cbi8qKlxuICogQ29lcmNlcyB7QGxpbmsgTVBhcnRHcmlkfSwgYXBwbHlpbmcgbmVjZXNzYXJ5IG1pZ3JhdGlvbnMgaWYgdGhlIHNlcmlhbGl6ZWQgZ3JpZCBpcyBvdXRkYXRlZC5cbiAqL1xuZnVuY3Rpb24gY29lcmNlTVBhcnRHcmlkKGdyaWQ6IHN0cmluZyB8IE1QYXJ0R3JpZCB8IG51bGwgfCB1bmRlZmluZWQsIG9wdGlvbnM6IHtkZWZhdWx0OiAoKSA9PiBNUGFydEdyaWR9KTogybVNUGFydEdyaWQge1xuICBncmlkID8/PSBvcHRpb25zLmRlZmF1bHQoKTtcblxuICBpZiAodHlwZW9mIGdyaWQgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGdyaWQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBpbmplY3QoV29ya2JlbmNoTGF5b3V0U2VyaWFsaXplcikuZGVzZXJpYWxpemVHcmlkKGdyaWQpO1xuICB9XG4gIGNhdGNoIChlcnJvcikge1xuICAgIGluamVjdChMb2dnZXIpLmVycm9yKCdbU2VyaWFsaXplRXJyb3JdIEZhaWxlZCB0byBkZXNlcmlhbGl6ZSB3b3JrYmVuY2ggbGF5b3V0LiBQbGVhc2UgY2xlYXIgeW91ciBicm93c2VyIHN0b3JhZ2UgYW5kIHJlbG9hZCB0aGUgYXBwbGljYXRpb24uJywgZXJyb3IpO1xuICAgIHJldHVybiB7Li4ub3B0aW9ucy5kZWZhdWx0KCksIG1pZ3JhdGVkOiB0cnVlfTtcbiAgfVxufVxuXG4vKipcbiAqIENvZXJjZXMge0BsaW5rIFZpZXdPdXRsZXRzfSwgYXBwbHlpbmcgbmVjZXNzYXJ5IG1pZ3JhdGlvbnMgaWYgdGhlIHNlcmlhbGl6ZWQgb3V0bGV0cyBhcmUgb3V0ZGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNvZXJjZVZpZXdPdXRsZXRzKHZpZXdPdXRsZXRzOiBzdHJpbmcgfCBWaWV3T3V0bGV0cyB8IG51bGwgfCB1bmRlZmluZWQpOiBWaWV3T3V0bGV0cyB7XG4gIGlmICghdmlld091dGxldHMpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBpZiAodHlwZW9mIHZpZXdPdXRsZXRzID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB2aWV3T3V0bGV0cztcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGluamVjdChXb3JrYmVuY2hMYXlvdXRTZXJpYWxpemVyKS5kZXNlcmlhbGl6ZVZpZXdPdXRsZXRzKHZpZXdPdXRsZXRzKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbmplY3QoTG9nZ2VyKS5lcnJvcignW1NlcmlhbGl6ZUVycm9yXSBGYWlsZWQgdG8gZGVzZXJpYWxpemUgdmlldyBvdXRsZXRzLiBQbGVhc2UgY2xlYXIgeW91ciBicm93c2VyIHN0b3JhZ2UgYW5kIHJlbG9hZCB0aGUgYXBwbGljYXRpb24uJywgZXJyb3IpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIEdyaWRzIG9mIHRoZSB3b3JrYmVuY2ggbGF5b3V0LlxuICovXG5pbnRlcmZhY2UgR3JpZHMge1xuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBncmlkIG9mIHRoZSB3b3JrYmVuY2guXG4gICAqL1xuICB3b3JrYmVuY2g6IMm1TVBhcnRHcmlkO1xuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBncmlkIG9mIHRoZSBtYWluIGFyZWEsIGlmIGFueS5cbiAgICpcbiAgICogVGhlIG1haW4gYXJlYSBncmlkIGlzIGEgc3ViLWdyaWQgZW1iZWRkZWQgaW4gdGhlIG1haW4gYXJlYSBwYXJ0LCBpZiBhbnkuIEl0IGRlZmluZXMgdGhlIGFycmFuZ2VtZW50IG9mIHBhcnRzIGluIHRoZSBtYWluIGFyZWEuXG4gICAqL1xuICBtYWluQXJlYT86IMm1TVBhcnRHcmlkO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBvc2l0aW9uIGlmIGEgbnVtYmVyLCBvciBjb21wdXRlcyBpdCBmcm9tIHRoZSBnaXZlbiBsaXRlcmFsIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gY29lcmNlUG9zaXRpb24ocG9zaXRpb246IG51bWJlciB8ICdzdGFydCcgfCAnZW5kJyB8ICdiZWZvcmUtYWN0aXZlLXZpZXcnIHwgJ2FmdGVyLWFjdGl2ZS12aWV3JywgcGFydDogTVBhcnQpOiBudW1iZXIge1xuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnc3RhcnQnOiB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FzZSAnZW5kJzoge1xuICAgICAgcmV0dXJuIHBhcnQudmlld3MubGVuZ3RoO1xuICAgIH1cbiAgICBjYXNlICdiZWZvcmUtYWN0aXZlLXZpZXcnOiB7XG4gICAgICBjb25zdCBhY3RpdmVWaWV3SW5kZXggPSBwYXJ0LnZpZXdzLmZpbmRJbmRleCh2aWV3ID0+IHZpZXcuaWQgPT09IHBhcnQuYWN0aXZlVmlld0lkKTtcbiAgICAgIHJldHVybiAoYWN0aXZlVmlld0luZGV4ID4gLTEgPyBhY3RpdmVWaWV3SW5kZXggOiBwYXJ0LnZpZXdzLmxlbmd0aCk7XG4gICAgfVxuICAgIGNhc2UgJ2FmdGVyLWFjdGl2ZS12aWV3Jzoge1xuICAgICAgY29uc3QgYWN0aXZlVmlld0luZGV4ID0gcGFydC52aWV3cy5maW5kSW5kZXgodmlldyA9PiB2aWV3LmlkID09PSBwYXJ0LmFjdGl2ZVZpZXdJZCk7XG4gICAgICByZXR1cm4gKGFjdGl2ZVZpZXdJbmRleCA+IC0xID8gYWN0aXZlVmlld0luZGV4ICsgMSA6IHBhcnQudmlld3MubGVuZ3RoKTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERlc2NyaWJlcyBob3cgdG8gbGF5IG91dCBhIHBhcnQgcmVsYXRpdmUgdG8gYW5vdGhlciBwYXJ0IG9yIG5vZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmZXJlbmNlRWxlbWVudCBleHRlbmRzIFJlZmVyZW5jZVBhcnQge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBwYXJ0IG9yIG5vZGUgd2hpY2ggdG8gdXNlIGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudCB0byBsYXkgb3V0IHRoZSBwYXJ0LlxuICAgKiBJZiBub3Qgc2V0LCB0aGUgcGFydCB3aWxsIGJlIGFsaWduZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtiZW5jaCBsYXlvdXQuXG4gICAqL1xuICByZWxhdGl2ZVRvPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERJIHRva2VuIHRvIGNvbnRyb2wgdGhlIGlkZW50aXR5IG9mIHRoZSBpbml0aWFsIHBhcnQgaW4gdGhlIG1haW4gYXJlYS5cbiAqXG4gKiBUaGUgaW5pdGlhbCBwYXJ0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSB0aGUgd29ya2JlbmNoIGlmIHRoZSBtYWluIGFyZWEgaGFzIG5vIHBhcnQsIGJ1dCBpdCBoYXMgbm9cbiAqIHNwZWNpYWwgbWVhbmluZyB0byB0aGUgd29ya2JlbmNoIGFuZCBjYW4gYmUgcmVtb3ZlZCBieSB0aGUgdXNlci4gSWYgbm90IHNldCwgYSBVVUlEIGlzIGFzc2lnbmVkLlxuICpcbiAqIE92ZXJ3cml0ZSB0aGlzIERJIHRva2VuIGluIHRlc3RzIHRvIGNvbnRyb2wgdGhlIGlkZW50aXR5IG9mIHRoZSBpbml0aWFsIHBhcnQuXG4gKiBgYGBcbiAqIFRlc3RCZWQub3ZlcnJpZGVQcm92aWRlcihNQUlOX0FSRUFfSU5JVElBTF9QQVJUX0lELCB7dXNlVmFsdWU6ICdtYWluJ30pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IE1BSU5fQVJFQV9JTklUSUFMX1BBUlRfSUQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignTUFJTl9BUkVBX0lOSVRJQUxfUEFSVF9JRCcsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBVSUQucmFuZG9tVUlEKCksXG59KTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgaW5zdGFudCB3aGVuIGEgcGFydCB3YXMgbGFzdCBhY3RpdmF0ZWQuXG4gKlxuICogT3ZlcndyaXRlIERJIHRva2VuIGluIHRlc3RzIHRvIGNvbnRyb2wgcGFydCBhY3RpdmF0aW9uIGluc3RhbnRzLlxuICogYGBgXG4gKiBUZXN0QmVkLm92ZXJyaWRlUHJvdmlkZXIoUGFydEFjdGl2YXRpb25JbnN0YW50UHJvdmlkZXIsIHt1c2VWYWx1ZTogLi4ufSk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgUGFydEFjdGl2YXRpb25JbnN0YW50UHJvdmlkZXIge1xuXG4gIHByaXZhdGUgX3BhcnRSZWdpc3RyeSA9IGluamVjdChXT1JLQkVOQ0hfUEFSVF9SRUdJU1RSWSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGluc3RhbnQgd2hlbiB0aGUgc3BlY2lmaWVkIHBhcnQgd2FzIGxhc3QgYWN0aXZhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldEFjdGl2YXRpb25JbnN0YW50KHBhcnRJZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFydFJlZ2lzdHJ5LmdldChwYXJ0SWQsIHtvckVsc2U6IG51bGx9KT8uYWN0aXZhdGlvbkluc3RhbnQgPz8gMDtcbiAgfVxufVxuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBpbnN0YW50IHdoZW4gYSB2aWV3IHdhcyBsYXN0IGFjdGl2YXRlZC5cbiAqXG4gKiBPdmVyd3JpdGUgREkgdG9rZW4gaW4gdGVzdHMgdG8gY29udHJvbCB2aWV3IGFjdGl2YXRpb24gaW5zdGFudHMuXG4gKiBgYGBcbiAqIFRlc3RCZWQub3ZlcnJpZGVQcm92aWRlcihWaWV3QWN0aXZhdGlvbkluc3RhbnRQcm92aWRlciwge3VzZVZhbHVlOiAuLi59KTtcbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBWaWV3QWN0aXZhdGlvbkluc3RhbnRQcm92aWRlciB7XG5cbiAgcHJpdmF0ZSBfdmlld1JlZ2lzdHJ5ID0gaW5qZWN0KFdPUktCRU5DSF9WSUVXX1JFR0lTVFJZKTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaW5zdGFudCB3aGVuIHRoZSBzcGVjaWZpZWQgdmlldyB3YXMgbGFzdCBhY3RpdmF0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0QWN0aXZhdGlvbkluc3RhbnQodmlld0lkOiBWaWV3SWQpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92aWV3UmVnaXN0cnkuZ2V0KHZpZXdJZCwge29yRWxzZTogbnVsbH0pPy5hY3RpdmF0aW9uSW5zdGFudCA/PyAwO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByZWRpY2F0ZSB0byBtYXRjaCBhIHZpZXcgYnkgaXRzIHByaW1hcnkgb3IgYWx0ZXJuYXRpdmUgaWQsIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0aGUgcGFzc2VkIGlkLlxuICovXG5mdW5jdGlvbiBtYXRjaFZpZXdCeUlkKGlkOiBzdHJpbmcpOiBQcmVkaWNhdGU8TVZpZXc+IHtcbiAgaWYgKFdvcmtiZW5jaExheW91dHMuaXNWaWV3SWQoaWQpKSB7XG4gICAgcmV0dXJuIHZpZXcgPT4gdmlldy5pZCA9PT0gaWQ7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIHZpZXcgPT4gdmlldy5hbHRlcm5hdGl2ZUlkID09PSBpZDtcbiAgfVxufVxuXG4vKipcbiAqIFN0cmluZ2lmaWVzIHRoZSBnaXZlbiBmaWx0ZXIgdG8gYmUgdXNlZCBpbiBlcnJvciBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5RmlsdGVyKGZpbHRlcjoge1twcm9wZXJ0eTogc3RyaW5nXTogdW5rbm93bn0pOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmlsdGVyKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogU2VyaWFsaXplZCBhcnRpZmFjdHMgb2YgdGhlIHdvcmtiZW5jaCBsYXlvdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFdvcmtiZW5jaExheW91dCB7XG4gIHdvcmtiZW5jaEdyaWQ6IHN0cmluZztcbiAgd29ya2JlbmNoVmlld091dGxldHM6IHN0cmluZztcbiAgbWFpbkFyZWFHcmlkOiBzdHJpbmcgfCBudWxsO1xuICBtYWluQXJlYVZpZXdPdXRsZXRzOiBzdHJpbmc7XG59XG4iXX0=
|
|
864
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiybV3b3JrYmVuY2gtbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2Npb24vd29ya2JlbmNoL3NyYy9saWIvbGF5b3V0L8m1d29ya2JlbmNoLWxheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBQyxLQUFLLEVBQWEsU0FBUyxFQUFvQixNQUFNLDBCQUEwQixDQUFDO0FBQ3hGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdkMsT0FBTyxFQUFDLFNBQVMsRUFBaUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RSxPQUFPLEVBQXlCLHlCQUF5QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDdkcsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBYSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFJaEQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTNDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sWUFBWSxDQUFDOztBQUVsQzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBZ0IzQixpQkFBaUI7SUFDakIsWUFBWSxNQUFpTztRQVg1TixtQ0FBOEIsR0FBRyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUN2RSxtQ0FBOEIsR0FBRyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUN2RSxnQkFBVyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFTNUMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLFNBQVMsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFDLE9BQU8sRUFBRSwwQkFBMEIsRUFBQyxDQUFDO1NBQ3hGLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFDLE9BQU8sRUFBRSx5QkFBeUIsRUFBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxDQUF1QixPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUEwQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPLENBQUMsRUFBVSxFQUFFLE9BQThCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztJQUMvRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPLENBQUMsRUFBVSxFQUFFLE9BQThCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFdBQVcsQ0FBQyxNQUE2QjtRQUM5QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hILE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxnQkFBZ0IsQ0FBQyxNQUE2QjtRQUNuRCxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEksT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZSxDQUFDLE1BQXdCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVcsQ0FBQyxNQUF3QjtRQUN6QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlO1FBQ3BCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNoQyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsTUFBNkI7UUFDeEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUEwQixFQUFvQixFQUFFLENBQUMsT0FBTyxZQUFZLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUNqSSxDQUFDO0lBZU0sSUFBSSxDQUFDLE1BQThELEVBQUUsT0FBd0I7UUFDbEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckMsTUFBTSxLQUFLLENBQUMsaUZBQWlGLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBMEIsRUFBb0IsRUFBRTtZQUNsRixJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEUsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0RixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixNQUFNLEtBQUssQ0FBQyw0Q0FBNEMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBQ0QsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLE9BQU8sQ0FBQyxFQUFzQixFQUFFLFVBQTRCLEVBQUUsT0FBb0Q7UUFDdkgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsRUFBVTtRQUMxQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBT00sVUFBVSxDQUFDLElBQXlCO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsRUFBVTtRQUM1QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBYU0sSUFBSSxDQUFDLE1BQXdCLEVBQUUsT0FBd0I7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxDQUFDLDBDQUEwQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0ksS0FBSyxDQUFDLE1BQXFKLEVBQUUsT0FBZ0M7UUFDbE0sTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUM7YUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2IsSUFBSSxNQUFNLEVBQUUsTUFBTSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUQsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7YUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNiLElBQUksTUFBTSxFQUFFLEVBQUUsS0FBSyxTQUFTLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELElBQUksTUFBTSxFQUFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0RixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLE1BQU0sRUFBRSxjQUFjLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN0RyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLE1BQU0sRUFBRSxnQkFBZ0IsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLGdCQUFnQixLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNHLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDdkMsTUFBTSxLQUFLLENBQUMsNENBQTRDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTyxDQUFDLEVBQVUsRUFBRSxPQUF5TDtRQUNsTixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3RCxDQUFDO2FBQ0ksQ0FBQztZQUNKLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUcsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxFQUFVLEVBQUUsUUFBa0IsRUFBRSxNQUEwSTtRQUM1TCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDcEgsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFVBQVUsQ0FBQyxFQUFVLEVBQUUsT0FBMkI7UUFDdkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekgsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLDJCQUEyQixDQUFDLFVBQTREO1FBQ25HLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUNoRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxFQUFVLEVBQUUsWUFBb0IsRUFBRSxPQUE0STtRQUM1TCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDckgsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLEVBQVUsRUFBRSxPQUFrQztRQUNoRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMzRyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLG9CQUFvQixDQUFDLEVBQVUsRUFBRSxPQUFrQztRQUN4RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ25ILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxVQUFVLENBQUMsRUFBVSxFQUFFLFNBQWlCO1FBQzdDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsRUFBRSxFQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNwRSxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLGFBQWEsQ0FBQyxNQUFjLEVBQUUsS0FBYTtRQUNoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLEtBQThCO1FBQzdDLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLFlBQVksS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3hILE9BQU87WUFDTCxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7WUFDeEUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7WUFDbEcsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7WUFDbEcsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7U0FDakcsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQ7O09BRUc7SUFDSyxTQUFTLENBQUMsRUFBVSxFQUFFLFVBQTRCLEVBQUUsT0FBb0Q7UUFDOUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxLQUFLLENBQUMsMEZBQTBGLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEgsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUVwRiwyRkFBMkY7UUFDM0YsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztRQUM3SCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxLQUFLLE1BQU0sSUFBSSxVQUFVLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQztRQUM1RSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUVyQywwQkFBMEI7UUFDMUIsTUFBTSxXQUFXLEdBQWMsSUFBSSxTQUFTLENBQUM7WUFDM0MsRUFBRSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUU7WUFDbkIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7WUFDOUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDOUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEtBQUssTUFBTSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVE7WUFDekYsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUNwQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtTQUNoQyxDQUFDLENBQUM7UUFFSCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxpQkFBaUI7UUFDOUUsQ0FBQzthQUNJLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdELGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1FBQy9DLENBQUM7YUFDSSxDQUFDO1lBQ0osZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7UUFDL0MsQ0FBQztRQUNELGdCQUFnQixDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7UUFDdEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7UUFFN0IscUJBQXFCO1FBQ3JCLElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsRUFBVTtRQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVsRixrQ0FBa0M7UUFDbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixNQUFNLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFPLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQy9CLENBQUM7YUFDSSxJQUFJLElBQUksQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLE1BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQztRQUM5QyxDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7UUFDOUMsQ0FBQztRQUVELDREQUE0RDtRQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvRkFBb0Y7UUFDcEYsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sVUFBVSxHQUFHLEtBQUs7aUJBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO2lCQUM5QixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEcsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRyxPQUFPLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFXLENBQUMsRUFBRSxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxTQUFTLENBQUMsSUFBVyxFQUFFLE9BQXlMO1FBQ3ROLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLEtBQUssQ0FBQywwRkFBMEYsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckgsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFckMsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWMsQ0FBQyxJQUFXLEVBQUUsUUFBa0IsRUFBRSxNQUEwSTtRQUNoTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDN0QsTUFBTSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM5QyxDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxNQUFNLEVBQUUsS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7WUFDaEQsRUFBRSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUU7WUFDbkIsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO1lBQ2xCLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSTtZQUNsQixRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDMUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVUsQ0FBQyxJQUFXLEVBQUUsWUFBb0IsRUFBRSxPQUE0STtRQUNoTSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQztRQUVyRCxpQkFBaUI7UUFDakIsSUFBSSxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUMxRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7YUFDSSxJQUFJLE9BQU8sRUFBRSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekMsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDOUQsTUFBTSxhQUFhLEdBQXNCLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZFLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNELFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0SCxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FBQyxJQUFXLEVBQUUsT0FBZ0Y7UUFDaEgsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUUxQyxlQUFlO1FBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFL0MsaUJBQWlCO1FBQ2pCLElBQUksT0FBTyxFQUFFLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixJQUFJLE9BQU8sRUFBRSxxQkFBcUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsdURBQXVEO1FBQ3ZELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSztpQkFDM0IsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztpQkFDcEIsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO2dCQUN6QixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakcsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pHLE9BQU8sc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7WUFDekQsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQztRQUVELGtGQUFrRjtRQUNsRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLElBQVcsRUFBRSxPQUFrQztRQUNwRSxxQkFBcUI7UUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFNUIscUJBQXFCO1FBQ3JCLElBQUksT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxzQkFBc0IsQ0FBQyxJQUFXLEVBQUUsT0FBa0M7UUFDNUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQztRQUMxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxvREFBb0Q7UUFFdEkscUJBQXFCO1FBQ3JCLElBQUksT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsTUFBYyxFQUFFLEtBQWE7UUFDbkQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLEtBQUssQ0FBQyx1Q0FBdUMsTUFBTSxvREFBb0QsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUMxSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBWSxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLEVBQVU7UUFDL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsSUFBVyxFQUFFLFNBQWlCO1FBQ2pELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sS0FBSyxDQUFDLDZGQUE2RixTQUFTLElBQUksQ0FBQyxDQUFDO1FBQzFILENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUUsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBRSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxJQUFJLENBQUMsTUFBb0M7UUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0MsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUEwQixFQUFnQyxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdkssQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLEtBQUssQ0FBQyxtREFBbUQsTUFBTSxDQUFDLE9BQU8sWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvSSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxlQUFlLENBQThCLE1BQW9CO1FBQ3ZFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQTBCLEVBQWdCLEVBQUU7WUFDakYsT0FBTyxPQUFPLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sS0FBSyxDQUFDLGdEQUFnRCxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3RSxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssZ0JBQWdCLENBQThCLFdBQXlELEVBQUUsT0FBbUQ7UUFDbEssSUFBSSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFFdkIsU0FBUyxVQUFVLENBQUMsSUFBdUI7WUFDekMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7b0JBQ3ZCLE9BQU8sS0FBSyxDQUFDLENBQUMsK0JBQStCO2dCQUMvQyxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksSUFBSSxZQUFZLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDbEIsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7YUFDSSxDQUFDO1lBQ0osS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsTUFBTTtnQkFDUixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxXQUFXO1FBQ2pCLE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDO1lBQ3RFLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ2pFLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNsRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNsRCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUM1RCxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILFNBQVMsMEJBQTBCO0lBQ2pDLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDO1FBQzdELFlBQVksRUFBRSxTQUFTO0tBQ3hCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMseUJBQXlCO0lBQ2hDLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFDdEYsWUFBWSxFQUFFLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztLQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxlQUFlLENBQUMsSUFBMkMsRUFBRSxPQUFtQztJQUN2RyxJQUFJLEtBQUssT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRTNCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLHdIQUF3SCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RKLE9BQU8sRUFBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDaEQsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsaUJBQWlCLENBQUMsV0FBb0Q7SUFDN0UsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLG9IQUFvSCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xKLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUM7QUFrQkQ7O0dBRUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxRQUErRSxFQUFFLElBQVc7SUFDbEgsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDYixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLENBQUM7UUFDRCxLQUFLLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BGLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsS0FBSyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDekIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwRixPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1IsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBYUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksY0FBYyxDQUFTLDJCQUEyQixFQUFFO0lBQy9GLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFO0NBQy9CLENBQUMsQ0FBQztBQUVIOzs7Ozs7O0dBT0c7QUFFSCxNQUFNLE9BQU8sNkJBQTZCO0lBRDFDO1FBR1Usa0JBQWEsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztLQVF6RDtJQU5DOztPQUVHO0lBQ0ksb0JBQW9CLENBQUMsTUFBYztRQUN4QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQyxFQUFFLGlCQUFpQixJQUFJLENBQUMsQ0FBQztJQUNoRixDQUFDOzhHQVRVLDZCQUE2QjtrSEFBN0IsNkJBQTZCLGNBRGpCLE1BQU07OzJGQUNsQiw2QkFBNkI7a0JBRHpDLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOztBQWFoQzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLDZCQUE2QjtJQUQxQztRQUdVLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FRekQ7SUFOQzs7T0FFRztJQUNJLG9CQUFvQixDQUFDLE1BQWM7UUFDeEMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUMsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLENBQUM7SUFDaEYsQ0FBQzs4R0FUVSw2QkFBNkI7a0hBQTdCLDZCQUE2QixjQURqQixNQUFNOzsyRkFDbEIsNkJBQTZCO2tCQUR6QyxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7QUFhaEM7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxFQUFVO0lBQy9CLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7U0FDSSxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssRUFBRSxDQUFDO0lBQzNDLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxNQUFxQztJQUM1RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjMgU3dpc3MgRmVkZXJhbCBSYWlsd2F5c1xuICpcbiAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGVcbiAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wXG4gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC9cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMFxuICovXG5pbXBvcnQge01QYXJ0LCBNUGFydEdyaWQsIE1UcmVlTm9kZSwgTVZpZXcsIMm1TVBhcnRHcmlkfSBmcm9tICcuL3dvcmtiZW5jaC1sYXlvdXQubW9kZWwnO1xuaW1wb3J0IHthc3NlcnRUeXBlfSBmcm9tICcuLi9jb21tb24vYXNzZXJ0cy51dGlsJztcbmltcG9ydCB7VUlEfSBmcm9tICcuLi9jb21tb24vdWlkLnV0aWwnO1xuaW1wb3J0IHtNQUlOX0FSRUEsIFJlZmVyZW5jZVBhcnQsIFdvcmtiZW5jaExheW91dH0gZnJvbSAnLi93b3JrYmVuY2gtbGF5b3V0JztcbmltcG9ydCB7R3JpZFNlcmlhbGl6YXRpb25GbGFncywgV29ya2JlbmNoTGF5b3V0U2VyaWFsaXplcn0gZnJvbSAnLi93b3JrZW5jaC1sYXlvdXQtc2VyaWFsaXplci5zZXJ2aWNlJztcbmltcG9ydCB7V09SS0JFTkNIX1ZJRVdfUkVHSVNUUll9IGZyb20gJy4uL3ZpZXcvd29ya2JlbmNoLXZpZXcucmVnaXN0cnknO1xuaW1wb3J0IHtXT1JLQkVOQ0hfUEFSVF9SRUdJU1RSWX0gZnJvbSAnLi4vcGFydC93b3JrYmVuY2gtcGFydC5yZWdpc3RyeSc7XG5pbXBvcnQge2luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBQcmVkaWNhdGUsIHJ1bkluSW5qZWN0aW9uQ29udGV4dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRpbmd9IGZyb20gJy4uL3JvdXRpbmcvcm91dGluZy51dGlsJztcbmltcG9ydCB7Q29tbWFuZHMsIE5hdmlnYXRpb25EYXRhLCBOYXZpZ2F0aW9uU3RhdGUsIE5hdmlnYXRpb25TdGF0ZXMsIFZpZXdPdXRsZXRzfSBmcm9tICcuLi9yb3V0aW5nL3JvdXRpbmcubW9kZWwnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgVXJsU2VnbWVudH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Vmlld0lkfSBmcm9tICcuLi92aWV3L3dvcmtiZW5jaC12aWV3Lm1vZGVsJztcbmltcG9ydCB7QXJyYXlzfSBmcm9tICdAc2Npb24vdG9vbGtpdC91dGlsJztcbmltcG9ydCB7VXJsU2VnbWVudE1hdGNoZXJ9IGZyb20gJy4uL3JvdXRpbmcvdXJsLXNlZ21lbnQtbWF0Y2hlcic7XG5pbXBvcnQge09iamVjdHN9IGZyb20gJy4uL2NvbW1vbi9vYmplY3RzLnV0aWwnO1xuaW1wb3J0IHtXb3JrYmVuY2hMYXlvdXRzfSBmcm9tICcuL3dvcmtiZW5jaC1sYXlvdXRzLnV0aWwnO1xuaW1wb3J0IHtMb2dnZXJ9IGZyb20gJy4uL2xvZ2dpbmcnO1xuXG4vKipcbiAqIEBpbmhlcml0RG9jXG4gKlxuICogVGhlIHdvcmtiZW5jaCBsYXlvdXQgaXMgYSBncmlkIG9mIHBhcnRzLiBJdCBjb250YWlucyBhdCBsZWFzdCBvbmUgcGFydC4gQSBzcGVjaWFsIHBhcnQsIHRoZSBtYWluIGFyZWEgcGFydCwgaXMgbm90IGEgc3RhY2sgb2Ygdmlld3NcbiAqIGJ1dCBlbWJlZHMgYSBzdWItZ3JpZCwgdGhlIG1haW4gYXJlYSBncmlkLiBJdCBkZWZpbmVzIHRoZSBhcnJhbmdlbWVudCBvZiBwYXJ0cyBpbiB0aGUgbWFpbiBhcmVhLiBUaGUgbWFpbiBhcmVhIGlzIG9wdGlvbmFsLlxuICpcbiAqIFRoZSBsYXlvdXQgaXMgc2VyaWFsaXphYmxlIGludG8gYSBVUkwtc2FmZSBiYXNlNjQgc3RyaW5nLlxuICpcbiAqIFRoZSBsYXlvdXQgaXMgYW4gaW1tdXRhYmxlIG9iamVjdCB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gbW9kaWZ5IHRoZSBsYXlvdXQuIE1vZGlmaWNhdGlvbnMgaGF2ZSBub1xuICogc2lkZSBlZmZlY3RzLiBFYWNoIG1vZGlmaWNhdGlvbiBjcmVhdGVzIGEgbmV3IGxheW91dCBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMuXG4gKlxuICogSU1QT1JUQU5UOiBNZXRob2RzIHN0YXJ0aW5nIHdpdGggYW4gdW5kZXJzY29yZSBpbmRpY2F0ZSB0aGV5IGFyZSBub3Qgd29ya2luZyBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmeWluZyB0aGUgbGF5b3V0IGluc3RhbmNlLlxuICovXG5leHBvcnQgY2xhc3MgybVXb3JrYmVuY2hMYXlvdXQgaW1wbGVtZW50cyBXb3JrYmVuY2hMYXlvdXQge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2dyaWRzOiBHcmlkcztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld091dGxldHM6IE1hcDxWaWV3SWQsIFVybFNlZ21lbnRbXT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdmlnYXRpb25TdGF0ZXM6IE1hcDxWaWV3SWQsIE5hdmlnYXRpb25TdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2dyaWROYW1lczogQXJyYXk8a2V5b2YgR3JpZHM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJ0QWN0aXZhdGlvbkluc3RhbnRQcm92aWRlciA9IGluamVjdChQYXJ0QWN0aXZhdGlvbkluc3RhbnRQcm92aWRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdBY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyID0gaW5qZWN0KFZpZXdBY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VyaWFsaXplciA9IGluamVjdChXb3JrYmVuY2hMYXlvdXRTZXJpYWxpemVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIHByaXZhdGUgX21heGltaXplZDogYm9vbGVhbjtcblxuICAvKiogSWRlbnRpZmllcyB0aGUgcGVyc3BlY3RpdmUgb2YgdGhpcyBsYXlvdXQsIGlmIGFueS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHBlcnNwZWN0aXZlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogQGludGVybmFsICoqL1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IHt3b3JrYmVuY2hHcmlkPzogc3RyaW5nIHwgTVBhcnRHcmlkIHwgbnVsbDsgbWFpbkFyZWFHcmlkPzogc3RyaW5nIHwgTVBhcnRHcmlkIHwgbnVsbDsgcGVyc3BlY3RpdmVJZD86IHN0cmluZzsgdmlld091dGxldHM/OiBzdHJpbmcgfCBWaWV3T3V0bGV0cyB8IG51bGw7IG5hdmlnYXRpb25TdGF0ZXM/OiBOYXZpZ2F0aW9uU3RhdGVzIHwgbnVsbDsgbWF4aW1pemVkPzogYm9vbGVhbn0pIHtcbiAgICB0aGlzLl9ncmlkcyA9IHtcbiAgICAgIHdvcmtiZW5jaDogY29lcmNlTVBhcnRHcmlkKGNvbmZpZy53b3JrYmVuY2hHcmlkLCB7ZGVmYXVsdDogY3JlYXRlRGVmYXVsdFdvcmtiZW5jaEdyaWR9KSxcbiAgICB9O1xuICAgIGlmICh0aGlzLmhhc1BhcnQoTUFJTl9BUkVBLCB7Z3JpZDogJ3dvcmtiZW5jaCd9KSkge1xuICAgICAgdGhpcy5fZ3JpZHMubWFpbkFyZWEgPSBjb2VyY2VNUGFydEdyaWQoY29uZmlnLm1haW5BcmVhR3JpZCwge2RlZmF1bHQ6IGNyZWF0ZUluaXRpYWxNYWluQXJlYUdyaWR9KTtcbiAgICB9XG4gICAgdGhpcy5fZ3JpZE5hbWVzID0gT2JqZWN0cy5rZXlzKHRoaXMuX2dyaWRzKTtcbiAgICB0aGlzLl9tYXhpbWl6ZWQgPSBjb25maWcubWF4aW1pemVkID8/IGZhbHNlO1xuICAgIHRoaXMuX3ZpZXdPdXRsZXRzID0gbmV3IE1hcDxWaWV3SWQsIFVybFNlZ21lbnRbXT4oT2JqZWN0cy5lbnRyaWVzKGNvZXJjZVZpZXdPdXRsZXRzKGNvbmZpZy52aWV3T3V0bGV0cykpKTtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVzID0gbmV3IE1hcDxWaWV3SWQsIE5hdmlnYXRpb25TdGF0ZT4oT2JqZWN0cy5lbnRyaWVzKGNvbmZpZy5uYXZpZ2F0aW9uU3RhdGVzID8/IHt9KSk7XG4gICAgdGhpcy5wYXJ0cygpLmZvckVhY2gocGFydCA9PiBhc3NlcnRUeXBlKHBhcnQsIHt0b0JlT25lT2Y6IFtNVHJlZU5vZGUsIE1QYXJ0XX0pKTtcbiAgICB0aGlzLnBlcnNwZWN0aXZlSWQgPSBjb25maWcucGVyc3BlY3RpdmVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIG1haW4gd29ya2JlbmNoIGdyaWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdvcmtiZW5jaEdyaWQoKTogUmVhZG9ubHk8ybVNUGFydEdyaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZ3JpZHMud29ya2JlbmNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgbWFpbiBhcmVhIGdyaWQsIGlmIGFueS5cbiAgICpcbiAgICogVGhlIG1haW4gYXJlYSBncmlkIGlzIGEgc3ViLWdyaWQgaW5jbHVkZWQgYnkgdGhlIHtAbGluayBNQUlOX0FSRUF9IHBhcnQuIEl0IGRlZmluZXMgdGhlIGFycmFuZ2VtZW50IG9mIHBhcnRzIGluIHRoZSBtYWluIGFyZWEuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1haW5BcmVhR3JpZCgpOiBSZWFkb25seTzJtU1QYXJ0R3JpZD4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JpZHMubWFpbkFyZWEgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0cyBpZiBnaXZlbiBwYXJ0IGlzIGNvbnRhaW5lZCBpbiB0aGUgc3BlY2lmaWVkIGdyaWQuXG4gICAqL1xuICBwdWJsaWMgaGFzUGFydChpZDogc3RyaW5nLCBvcHRpb25zPzoge2dyaWQ/OiBrZXlvZiBHcmlkc30pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0KHtwYXJ0SWQ6IGlkLCBncmlkOiBvcHRpb25zPy5ncmlkfSwge29yRWxzZTogbnVsbH0pICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3RzIGlmIGdpdmVuIHZpZXcgaXMgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgZ3JpZC5cbiAgICovXG4gIHB1YmxpYyBoYXNWaWV3KGlkOiBzdHJpbmcsIG9wdGlvbnM/OiB7Z3JpZD86IGtleW9mIEdyaWRzfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpZXdzKHtncmlkOiBvcHRpb25zPy5ncmlkLCBpZDogaWR9KS5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBVUkwgb2Ygdmlld3MgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBmaW5kQnkgLSBEZWZpbmVzIHRoZSBzZWFyY2ggc2NvcGUuXG4gICAqIEBwYXJhbSBmaW5kQnkuZ3JpZCAtIFNlYXJjaGVzIGZvciB2aWV3cyBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZCBncmlkLlxuICAgKiBAcmV0dXJuIG91dGxldHMgb2Ygdmlld3MgbWF0Y2hpbmcgdGhlIGZpbHRlciBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyB2aWV3T3V0bGV0cyhmaW5kQnk/OiB7Z3JpZD86IGtleW9mIEdyaWRzfSk6IFZpZXdPdXRsZXRzIHtcbiAgICBjb25zdCB2aWV3T3V0bGV0RW50cmllcyA9IHRoaXMudmlld3Moe2dyaWQ6IGZpbmRCeT8uZ3JpZH0pLm1hcCh2aWV3ID0+IFt2aWV3LmlkLCB0aGlzLl92aWV3T3V0bGV0cy5nZXQodmlldy5pZCkgPz8gW11dKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHZpZXdPdXRsZXRFbnRyaWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBuYXZpZ2F0aW9uYWwgc3RhdGUgZm9yIHZpZXdzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZmlsdGVyLlxuICAgKlxuICAgKiBAcGFyYW0gZmluZEJ5IC0gRGVmaW5lcyB0aGUgc2VhcmNoIHNjb3BlLlxuICAgKiBAcGFyYW0gZmluZEJ5LmdyaWQgLSBTZWFyY2hlcyBmb3Igdmlld3MgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgZ3JpZC5cbiAgICogQHJldHVybiBuYXZpZ2F0aW9uIHN0YXRlIG9mIHZpZXdzIG1hdGNoaW5nIHRoZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgbmF2aWdhdGlvblN0YXRlcyhmaW5kQnk/OiB7Z3JpZD86IGtleW9mIEdyaWRzfSk6IE5hdmlnYXRpb25TdGF0ZXMge1xuICAgIGNvbnN0IG5hdmlnYXRpb25TdGF0ZUVudHJpZXMgPSB0aGlzLnZpZXdzKHtncmlkOiBmaW5kQnk/LmdyaWR9KS5tYXAodmlldyA9PiBbdmlldy5pZCwgdGhpcy5fbmF2aWdhdGlvblN0YXRlcy5nZXQodmlldy5pZCkgPz8ge31dKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKG5hdmlnYXRpb25TdGF0ZUVudHJpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBuYXZpZ2F0aW9uYWwgc3RhdGUgb2Ygc3BlY2lmaWVkIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgbmF2aWdhdGlvblN0YXRlKGZpbmRCeToge3ZpZXdJZDogVmlld0lkfSk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TdGF0ZXMuZ2V0KGZpbmRCeS52aWV3SWQpID8/IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBVUkwgb2Ygc3BlY2lmaWVkIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgdXJsU2VnbWVudHMoZmluZEJ5OiB7dmlld0lkOiBWaWV3SWR9KTogVXJsU2VnbWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld091dGxldHMuZ2V0KGZpbmRCeS52aWV3SWQpID8/IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZSwgbWF4aW1pemVzIG9yIG1pbmltaXplcyB0aGUgbWFpbiBhcmVhLlxuICAgKlxuICAgKiBAcmV0dXJuIGEgY29weSBvZiB0aGlzIGxheW91dCB3aXRoIHRoZSBtYXhpbWl6YXRpb24gY2hhbmdlZC5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVNYXhpbWl6ZWQoKTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5Ll9fdG9nZ2xlTWF4aW1pemVkKCk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBtYWluIGFyZWEgaXMgbWF4aW1pemVkLlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhpbWl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltaXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBwYXJ0cyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGZpbHRlci5cbiAgICpcbiAgICogQHBhcmFtIGZpbmRCeSAtIERlZmluZXMgdGhlIHNlYXJjaCBzY29wZS5cbiAgICogQHBhcmFtIGZpbmRCeS5ncmlkIC0gU2VhcmNoZXMgZm9yIHBhcnRzIGNvbnRhaW5lZCBpbiB0aGUgc3BlY2lmaWVkIGdyaWQuXG4gICAqIEByZXR1cm4gcGFydHMgbWF0Y2hpbmcgdGhlIGZpbHRlciBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyBwYXJ0cyhmaW5kQnk/OiB7Z3JpZD86IGtleW9mIEdyaWRzfSk6IHJlYWRvbmx5IE1QYXJ0W10ge1xuICAgIHJldHVybiB0aGlzLmZpbmRUcmVlRWxlbWVudHMoKGVsZW1lbnQ6IE1UcmVlTm9kZSB8IE1QYXJ0KTogZWxlbWVudCBpcyBNUGFydCA9PiBlbGVtZW50IGluc3RhbmNlb2YgTVBhcnQsIHtncmlkOiBmaW5kQnk/LmdyaWR9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhIHBhcnQgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBmaWx0ZXIuIElmIG5vdCBmb3VuZCwgYnkgZGVmYXVsdCwgdGhyb3dzIGFuIGVycm9yIHVubGVzcyBzZXR0aW5nIHRoZSBgb3JFbHNlTnVsbGAgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZmluZEJ5IC0gRGVmaW5lcyB0aGUgc2VhcmNoIHNjb3BlLlxuICAgKiBAcGFyYW0gZmluZEJ5LnBhcnRJZCAtIFNlYXJjaGVzIGZvciBhIHBhcnQgd2l0aCB0aGUgc3BlY2lmaWVkIGlkLlxuICAgKiBAcGFyYW0gZmluZEJ5LnZpZXdJZCAtIFNlYXJjaGVzIGZvciBhIHBhcnQgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHZpZXcuXG4gICAqIEBwYXJhbSBmaW5kQnkuZ3JpZCAtIFNlYXJjaGVzIGZvciBhIHBhcnQgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgZ3JpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb250cm9scyB0aGUgc2VhcmNoLlxuICAgKiBAcGFyYW0gb3B0aW9ucy5vckVsc2UgLSBDb250cm9scyB0byByZXR1cm4gYG51bGxgIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IgaWYgbm8gcGFydCBpcyBmb3VuZC5cbiAgICogQHJldHVybiBwYXJ0IG1hdGNoaW5nIHRoZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgcGFydChmaW5kQnk6IHtwYXJ0SWQ/OiBzdHJpbmc7IHZpZXdJZD86IHN0cmluZzsgZ3JpZD86IGtleW9mIEdyaWRzfSk6IE1QYXJ0O1xuICBwdWJsaWMgcGFydChmaW5kQnk6IHtwYXJ0SWQ/OiBzdHJpbmc7IHZpZXdJZD86IHN0cmluZzsgZ3JpZD86IGtleW9mIEdyaWRzfSwgb3B0aW9uczoge29yRWxzZTogbnVsbH0pOiBNUGFydCB8IG51bGw7XG4gIHB1YmxpYyBwYXJ0KGZpbmRCeToge3BhcnRJZD86IHN0cmluZzsgdmlld0lkPzogc3RyaW5nOyBncmlkPzoga2V5b2YgR3JpZHN9LCBvcHRpb25zPzoge29yRWxzZTogbnVsbH0pOiBNUGFydCB8IG51bGwge1xuICAgIGlmICghZmluZEJ5LnBhcnRJZCAmJiAhZmluZEJ5LnZpZXdJZCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtQYXJ0RmluZEVycm9yXSBNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50LiBTcGVjaWZ5IGVpdGhlciAncGFydElkJyBvciAndmlld0lkJy5gKTtcbiAgICB9XG4gICAgY29uc3QgcGFydCA9IHRoaXMuZmluZFRyZWVFbGVtZW50cygoZWxlbWVudDogTVRyZWVOb2RlIHwgTVBhcnQpOiBlbGVtZW50IGlzIE1QYXJ0ID0+IHtcbiAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBNUGFydCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGZpbmRCeS5wYXJ0SWQgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50LmlkICE9PSBmaW5kQnkucGFydElkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChmaW5kQnkudmlld0lkICE9PSB1bmRlZmluZWQgJiYgIWVsZW1lbnQudmlld3Muc29tZShtYXRjaFZpZXdCeUlkKGZpbmRCeS52aWV3SWQhKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwge2ZpbmRGaXJzdDogdHJ1ZSwgZ3JpZDogZmluZEJ5LmdyaWR9KVswXTtcblxuICAgIGlmICghcGFydCAmJiAhb3B0aW9ucykge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsUGFydEVycm9yXSBObyBtYXRjaGluZyBwYXJ0IGZvdW5kOiBbJHtzdHJpbmdpZnlGaWx0ZXIoZmluZEJ5KX1dYCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0ID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gQGluaGVyaXREb2NcbiAgICogQHBhcmFtIHJlbGF0aXZlVG8gLSBAaW5oZXJpdERvY1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEBpbmhlcml0RG9jXG4gICAqIEBwYXJhbSBvcHRpb25zLmFjdGl2YXRlIC0gQGluaGVyaXREb2NcbiAgICogQHBhcmFtIG9wdGlvbnMuc3RydWN0dXJhbCAtIFNwZWNpZmllcyBpZiB0aGlzIGlzIGEgc3RydWN0dXJhbCBwYXJ0LiBBIHN0cnVjdHVyYWwgcGFydCB3aWxsIG5vdCBiZSByZW1vdmVkIHdoZW4gcmVtb3ZpbmcgaXRzIGxhc3Qgdmlldy4gRGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBwdWJsaWMgYWRkUGFydChpZDogc3RyaW5nIHwgTUFJTl9BUkVBLCByZWxhdGl2ZVRvOiBSZWZlcmVuY2VFbGVtZW50LCBvcHRpb25zPzoge2FjdGl2YXRlPzogYm9vbGVhbjsgc3RydWN0dXJhbD86IGJvb2xlYW59KTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5Ll9fYWRkUGFydChpZCwgcmVsYXRpdmVUbywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUGFydChpZDogc3RyaW5nKTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5Ll9fcmVtb3ZlUGFydChpZCk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFjdGl2ZSBwYXJ0IG9mIHRoZSBzcGVjaWZpZWQgZ3JpZCwgb3IgYG51bGxgIGlmIHNwZWNpZmllZCBncmlkIGlzIG5vdCBwcmVzZW50LlxuICAgKi9cbiAgcHVibGljIGFjdGl2ZVBhcnQoZmluZDoge2dyaWQ6ICd3b3JrYmVuY2gnfSk6IFJlYWRvbmx5PE1QYXJ0PjtcbiAgcHVibGljIGFjdGl2ZVBhcnQoZmluZDoge2dyaWQ6IGtleW9mIEdyaWRzfSk6IFJlYWRvbmx5PE1QYXJ0PiB8IG51bGw7XG4gIHB1YmxpYyBhY3RpdmVQYXJ0KGZpbmQ6IHtncmlkOiBrZXlvZiBHcmlkc30pOiBSZWFkb25seTxNUGFydD4gfCBudWxsIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5fZ3JpZHNbZmluZC5ncmlkXTtcbiAgICBpZiAoIWdyaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJ0KHtwYXJ0SWQ6IGdyaWQuYWN0aXZlUGFydElkLCBncmlkOiBmaW5kLmdyaWR9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGFjdGl2YXRlUGFydChpZDogc3RyaW5nKTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5Ll9fYWN0aXZhdGVQYXJ0KGlkKTtcbiAgICByZXR1cm4gd29ya2luZ0NvcHk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSB2aWV3IGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZmlsdGVyLiBJZiBub3QgZm91bmQsIGJ5IGRlZmF1bHQsIHRocm93cyBhbiBlcnJvciB1bmxlc3Mgc2V0dGluZyB0aGUgYG9yRWxzZU51bGxgIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGZpbmRCeSAtIERlZmluZXMgdGhlIHNlYXJjaCBzY29wZS5cbiAgICogQHBhcmFtIGZpbmRCeS52aWV3SWQgLSBTZWFyY2hlcyBmb3IgYSB2aWV3IHdpdGggdGhlIHNwZWNpZmllZCBpZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb250cm9scyB0aGUgc2VhcmNoLlxuICAgKiBAcGFyYW0gb3B0aW9ucy5vckVsc2UgLSBDb250cm9scyB0byByZXR1cm4gYG51bGxgIGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IgaWYgbm8gdmlldyBpcyBmb3VuZC5cbiAgICogQHJldHVybiB2aWV3IG1hdGNoaW5nIHRoZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgdmlldyhmaW5kQnk6IHt2aWV3SWQ6IFZpZXdJZH0pOiBNVmlldztcbiAgcHVibGljIHZpZXcoZmluZEJ5OiB7dmlld0lkOiBWaWV3SWR9LCBvcHRpb25zOiB7b3JFbHNlOiBudWxsfSk6IE1WaWV3IHwgbnVsbDtcbiAgcHVibGljIHZpZXcoZmluZEJ5OiB7dmlld0lkOiBWaWV3SWR9LCBvcHRpb25zPzoge29yRWxzZTogbnVsbH0pOiBNVmlldyB8IG51bGwge1xuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdzKHtpZDogZmluZEJ5LnZpZXdJZH0pLmF0KDApO1xuICAgIGlmICghdmlldyAmJiAhb3B0aW9ucykge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsVmlld0Vycm9yXSBObyB2aWV3IGZvdW5kIHdpdGggaWQgJyR7ZmluZEJ5LnZpZXdJZH0nLmApO1xuICAgIH1cbiAgICByZXR1cm4gdmlldyA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHZpZXdzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZmlsdGVyLlxuICAgKlxuICAgKiBAcGFyYW0gZmluZEJ5IC0gRGVmaW5lcyB0aGUgc2VhcmNoIHNjb3BlLlxuICAgKiBAcGFyYW0gZmluZEJ5LmlkIC0gU2VhcmNoZXMgZm9yIHZpZXdzIHdpdGggdGhlIHNwZWNpZmllZCBpZC5cbiAgICogQHBhcmFtIGZpbmRCeS5wYXJ0SWQgLSBTZWFyY2hlcyBmb3Igdmlld3MgY29udGFpbmVkIGluIHRoZSBzcGVjaWZpZWQgcGFydC5cbiAgICogQHBhcmFtIGZpbmRCeS5zZWdtZW50cyAtIFNlYXJjaGVzIGZvciB2aWV3cyBuYXZpZ2F0ZWQgdG8gdGhlIHNwZWNpZmllZCBVUkwuXG4gICAqIEBwYXJhbSBmaW5kQnkubmF2aWdhdGlvbkhpbnQgLSBTZWFyY2hlcyBmb3Igdmlld3MgbmF2aWdhdGVkIHdpdGggZ2l2ZW4gaGludC4gUGFzc2luZyBgbnVsbGAgc2VhcmNoZXMgZm9yIHZpZXdzIG5hdmlnYXRlZCB3aXRob3V0IGEgaGludC5cbiAgICogQHBhcmFtIGZpbmRCeS5tYXJrZWRGb3JSZW1vdmFsIC0gU2VhcmNoZXMgZm9yIHZpZXdzIG1hcmtlZCAob3Igbm90IG1hcmtlZCkgZm9yIHJlbW92YWwuXG4gICAqIEBwYXJhbSBmaW5kQnkuZ3JpZCAtIFNlYXJjaGVzIGZvciB2aWV3cyBjb250YWluZWQgaW4gdGhlIHNwZWNpZmllZCBncmlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbnRyb2xzIHRoZSBzZWFyY2guXG4gICAqIEBwYXJhbSBvcHRpb25zLm9yRWxzZSAtIENvbnRyb2xzIHRvIGVycm9yIGlmIG5vIHZpZXcgaXMgZm91bmQuXG4gICAqIEByZXR1cm4gdmlld3MgbWF0Y2hpbmcgdGhlIGZpbHRlciBjcml0ZXJpYS5cbiAgICovXG4gIHB1YmxpYyB2aWV3cyhmaW5kQnk/OiB7aWQ/OiBzdHJpbmc7IHBhcnRJZD86IHN0cmluZzsgc2VnbWVudHM/OiBVcmxTZWdtZW50TWF0Y2hlcjsgbmF2aWdhdGlvbkhpbnQ/OiBzdHJpbmcgfCBudWxsOyBtYXJrZWRGb3JSZW1vdmFsPzogYm9vbGVhbjsgZ3JpZD86IGtleW9mIEdyaWRzfSwgb3B0aW9ucz86IHtvckVsc2U6ICd0aHJvd0Vycm9yJ30pOiByZWFkb25seSBNVmlld1tdIHtcbiAgICBjb25zdCB2aWV3cyA9IHRoaXMucGFydHMoe2dyaWQ6IGZpbmRCeT8uZ3JpZH0pXG4gICAgICAuZmlsdGVyKHBhcnQgPT4ge1xuICAgICAgICBpZiAoZmluZEJ5Py5wYXJ0SWQgIT09IHVuZGVmaW5lZCAmJiBwYXJ0LmlkICE9PSBmaW5kQnkucGFydElkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSlcbiAgICAgIC5mbGF0TWFwKHBhcnQgPT4gcGFydC52aWV3cylcbiAgICAgIC5maWx0ZXIodmlldyA9PiB7XG4gICAgICAgIGlmIChmaW5kQnk/LmlkICE9PSB1bmRlZmluZWQgJiYgIW1hdGNoVmlld0J5SWQoZmluZEJ5LmlkKSh2aWV3KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmluZEJ5Py5zZWdtZW50cyAmJiAhZmluZEJ5LnNlZ21lbnRzLm1hdGNoZXModGhpcy51cmxTZWdtZW50cyh7dmlld0lkOiB2aWV3LmlkfSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5kQnk/Lm5hdmlnYXRpb25IaW50ICE9PSB1bmRlZmluZWQgJiYgZmluZEJ5Lm5hdmlnYXRpb25IaW50ICE9PSAodmlldy5uYXZpZ2F0aW9uPy5oaW50ID8/IG51bGwpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaW5kQnk/Lm1hcmtlZEZvclJlbW92YWwgIT09IHVuZGVmaW5lZCAmJiBmaW5kQnkubWFya2VkRm9yUmVtb3ZhbCAhPT0gKHZpZXcubWFya2VkRm9yUmVtb3ZhbCA/PyBmYWxzZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgIGlmIChmaW5kQnkgJiYgIXZpZXdzLmxlbmd0aCAmJiBvcHRpb25zKSB7XG4gICAgICB0aHJvdyBFcnJvcihgW051bGxWaWV3RXJyb3JdIE5vIG1hdGNoaW5nIHZpZXcgZm91bmQ6IFske3N0cmluZ2lmeUZpbHRlcihmaW5kQnkpfV1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgYWRkVmlldyhpZDogc3RyaW5nLCBvcHRpb25zOiB7cGFydElkOiBzdHJpbmc7IHBvc2l0aW9uPzogbnVtYmVyIHwgJ3N0YXJ0JyB8ICdlbmQnIHwgJ2JlZm9yZS1hY3RpdmUtdmlldycgfCAnYWZ0ZXItYWN0aXZlLXZpZXcnOyBhY3RpdmF0ZVZpZXc/OiBib29sZWFuOyBhY3RpdmF0ZVBhcnQ/OiBib29sZWFuOyBjc3NDbGFzcz86IHN0cmluZyB8IHN0cmluZ1tdfSk6IMm1V29ya2JlbmNoTGF5b3V0IHtcbiAgICBjb25zdCB3b3JraW5nQ29weSA9IHRoaXMud29ya2luZ0NvcHkoKTtcbiAgICBpZiAoV29ya2JlbmNoTGF5b3V0cy5pc1ZpZXdJZChpZCkpIHtcbiAgICAgIHdvcmtpbmdDb3B5Ll9fYWRkVmlldyh7aWQsIHVpZDogVUlELnJhbmRvbVVJRCgpfSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgd29ya2luZ0NvcHkuX19hZGRWaWV3KHtpZDogdGhpcy5jb21wdXRlTmV4dFZpZXdJZCgpLCBhbHRlcm5hdGl2ZUlkOiBpZCwgdWlkOiBVSUQucmFuZG9tVUlEKCl9LCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmF2aWdhdGVWaWV3KGlkOiBzdHJpbmcsIGNvbW1hbmRzOiBDb21tYW5kcywgZXh0cmFzPzoge2hpbnQ/OiBzdHJpbmc7IHJlbGF0aXZlVG8/OiBBY3RpdmF0ZWRSb3V0ZSB8IG51bGw7IGRhdGE/OiBOYXZpZ2F0aW9uRGF0YTsgc3RhdGU/OiBOYXZpZ2F0aW9uU3RhdGU7IGNzc0NsYXNzPzogc3RyaW5nIHwgc3RyaW5nW119KTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5LnZpZXdzKHtpZH0sIHtvckVsc2U6ICd0aHJvd0Vycm9yJ30pLmZvckVhY2godmlldyA9PiB3b3JraW5nQ29weS5fX25hdmlnYXRlVmlldyh2aWV3LCBjb21tYW5kcywgZXh0cmFzKSk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIEBpbmhlcml0RG9jXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29udHJvbHMgcmVtb3ZhbCBvZiB0aGUgdmlldy5cbiAgICogQHBhcmFtIG9wdGlvbnMuZm9yY2UgLSBTcGVjaWZpZXMgd2hldGhlciB0byBmb3JjZSByZW1vdmUgdGhlIHZpZXcsIGJ5cGFzc2luZyBgQ2FuQ2xvc2VgIGd1YXJkLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZVZpZXcoaWQ6IHN0cmluZywgb3B0aW9ucz86IHtmb3JjZT86IGJvb2xlYW59KTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5LnZpZXdzKHtpZH0sIHtvckVsc2U6ICd0aHJvd0Vycm9yJ30pLmZvckVhY2godmlldyA9PiB3b3JraW5nQ29weS5fX3JlbW92ZVZpZXcodmlldywge2ZvcmNlOiBvcHRpb25zPy5mb3JjZX0pKTtcbiAgICByZXR1cm4gd29ya2luZ0NvcHk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB2aWV3cyBtYXJrZWQgZm9yIHJlbW92YWwsIG9wdGlvbmFsbHkgaW52b2tpbmcgdGhlIHBhc3NlZCBgQ2FuQ2xvc2VgIGZ1bmN0aW9uIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHJlbW92ZSBhIHZpZXcuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVtb3ZlVmlld3NNYXJrZWRGb3JSZW1vdmFsKGNhbkNsb3NlRm4/OiAodmlld1VpZDogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+IHwgYm9vbGVhbik6IFByb21pc2U8ybVXb3JrYmVuY2hMYXlvdXQ+IHtcbiAgICBjb25zdCB3b3JraW5nQ29weSA9IHRoaXMud29ya2luZ0NvcHkoKTtcbiAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygd29ya2luZ0NvcHkudmlld3Moe21hcmtlZEZvclJlbW92YWw6IHRydWV9KSkge1xuICAgICAgaWYgKCFjYW5DbG9zZUZuIHx8IGF3YWl0IGNhbkNsb3NlRm4odmlldy51aWQpKSB7XG4gICAgICAgIHdvcmtpbmdDb3B5Ll9fcmVtb3ZlVmlldyh2aWV3LCB7Zm9yY2U6IHRydWV9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbW92ZVZpZXcoaWQ6IHN0cmluZywgdGFyZ2V0UGFydElkOiBzdHJpbmcsIG9wdGlvbnM/OiB7cG9zaXRpb24/OiBudW1iZXIgfCAnc3RhcnQnIHwgJ2VuZCcgfCAnYmVmb3JlLWFjdGl2ZS12aWV3JyB8ICdhZnRlci1hY3RpdmUtdmlldyc7IGFjdGl2YXRlVmlldz86IGJvb2xlYW47IGFjdGl2YXRlUGFydD86IGJvb2xlYW59KTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5LnZpZXdzKHtpZH0sIHtvckVsc2U6ICd0aHJvd0Vycm9yJ30pLmZvckVhY2godmlldyA9PiB3b3JraW5nQ29weS5fX21vdmVWaWV3KHZpZXcsIHRhcmdldFBhcnRJZCwgb3B0aW9ucykpO1xuICAgIHJldHVybiB3b3JraW5nQ29weTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGFjdGl2YXRlVmlldyhpZDogc3RyaW5nLCBvcHRpb25zPzoge2FjdGl2YXRlUGFydD86IGJvb2xlYW59KTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIGNvbnN0IHdvcmtpbmdDb3B5ID0gdGhpcy53b3JraW5nQ29weSgpO1xuICAgIHdvcmtpbmdDb3B5LnZpZXdzKHtpZH0sIHtvckVsc2U6ICd0aHJvd0Vycm9yJ30pLmZvckVhY2godmlldyA9PiB3b3JraW5nQ29weS5fX2FjdGl2YXRlVmlldyh2aWV3LCBvcHRpb25zKSk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlcyB0aGUgcHJlY2VkaW5nIHZpZXcgaWYgaXQgZXhpc3RzLCBvciB0aGUgc3Vic2VxdWVudCB2aWV3IG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkIG9mIHRoZSB2aWV3IHRvIGFjdGl2YXRlIGl0cyBhZGphY2VudCB2aWV3LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbnRyb2xzIHZpZXcgYWN0aXZhdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbnMuYWN0aXZhdGVQYXJ0IC0gQ29udHJvbHMgaWYgdG8gYWN0aXZhdGUgdGhlIHBhcnQuIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICogQHJldHVybiBhIGNvcHkgb2YgdGhpcyBsYXlvdXQgd2l0aCB0aGUgYWRqYWNlbnQgdmlldyBhY3RpdmF0ZWQuXG4gICAqL1xuICBwdWJsaWMgYWN0aXZhdGVBZGphY2VudFZpZXcoaWQ6IHN0cmluZywgb3B0aW9ucz86IHthY3RpdmF0ZVBhcnQ/OiBib29sZWFufSk6IMm1V29ya2JlbmNoTGF5b3V0IHtcbiAgICBjb25zdCB3b3JraW5nQ29weSA9IHRoaXMud29ya2luZ0NvcHkoKTtcbiAgICB3b3JraW5nQ29weS52aWV3cyh7aWR9LCB7b3JFbHNlOiAndGhyb3dFcnJvcid9KS5mb3JFYWNoKHZpZXcgPT4gd29ya2luZ0NvcHkuX19hY3RpdmF0ZUFkamFjZW50Vmlldyh2aWV3LCBvcHRpb25zKSk7XG4gICAgcmV0dXJuIHdvcmtpbmdDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmFtZXMgYSB2aWV3LlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIHZpZXcgd2hpY2ggdG8gcmVuYW1lLlxuICAgKiBAcGFyYW0gbmV3Vmlld0lkIC0gVGhlIG5ldyBpZGVudGl0eSBvZiB0aGUgdmlldy5cbiAgICogQHJldHVybiBhIGNvcHkgb2YgdGhpcyBsYXlvdXQgd2l0aCB0aGUgdmlldyByZW5hbWVkLlxuICAgKi9cbiAgcHVibGljIHJlbmFtZVZpZXcoaWQ6IFZpZXdJZCwgbmV3Vmlld0lkOiBWaWV3SWQpOiDJtVdvcmtiZW5jaExheW91dCB7XG4gICAgY29uc3Qgd29ya2luZ0NvcHkgPSB0aGlzLndvcmtpbmdDb3B5KCk7XG4gICAgd29ya2luZ0NvcHkuX19yZW5hbWVWaWV3KHdvcmtpbmdDb3B5LnZpZXcoe3ZpZXdJZDogaWR9KSwgbmV3Vmlld0lkKTtcbiAgICByZXR1cm4gd29ya2luZ0NvcHk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc3BsaXQgcmF0aW8gZm9yIHRoZSB0d28gY2hpbGRyZW4gb2YgYSB7QGxpbmsgTVRyZWVOb2RlfS5cbiAgICpcbiAgICogQHBhcmFtIG5vZGVJZCAtIFRoZSBpZCBvZiB0aGUgbm9kZSB0byBzZXQgdGhlIHNwbGl0IHJhdGlvIGZvci5cbiAgICogQHBhcmFtIHJhdGlvIC0gVGhlIHByb3BvcnRpb25hbCBzaXplIGJldHdlZW4gdGhlIHR3byBjaGlsZHJlbiwgZXhwcmVzc2VkIGFzIGNsb3NlZCBpbnRlcnZhbCBbMCwxXS5cbiAgICogICAgICAgICAgICAgICAgRXhhbXBsZTogVG8gZ2l2ZSAxLzMgb2YgdGhlIHNwYWNlIHRvIHRoZSBmaXJzdCBjaGlsZCwgc2V0IHRoZSByYXRpbyB0byBgMC4zYC5cbiAgICogQHJldHVybiBhIGNvcHkgb2YgdGhpcyBsYXlvdXQgd2l0aCB0aGUgc3BsaXQgcmF0aW8gc2V0LlxuICAgKi9cbiAgcHVibGljIHNldFNwbGl0UmF0aW8obm9kZUlkOiBzdHJpbmcsIHJhdGlvOiBudW1iZXIpOiDJtVdvcmtiZW5jaExheW91dCB7XG4gICAgY29uc3Qgd29ya2luZ0NvcHkgPSB0aGlzLndvcmtpbmdDb3B5KCk7XG4gICAgd29ya2luZ0NvcHkuX19zZXRTcGxpdFJhdGlvKG5vZGVJZCwgcmF0aW8pO1xuICAgIHJldHVybiB3b3JraW5nQ29weTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIHRoaXMgbGF5b3V0IGludG8gYSBVUkwtc2FmZSBiYXNlNjQgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIHNlcmlhbGl6ZShmbGFncz86IEdyaWRTZXJpYWxpemF0aW9uRmxhZ3MpOiBTZXJpYWxpemVkV29ya2JlbmNoTGF5b3V0IHtcbiAgICBjb25zdCBpc01haW5BcmVhRW1wdHkgPSAodGhpcy5tYWluQXJlYUdyaWQ/LnJvb3QgaW5zdGFuY2VvZiBNUGFydCAmJiB0aGlzLm1haW5BcmVhR3JpZC5yb290LnZpZXdzLmxlbmd0aCA9PT0gMCkgPz8gdHJ1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgd29ya2JlbmNoR3JpZDogdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemVHcmlkKHRoaXMud29ya2JlbmNoR3JpZCwgZmxhZ3MpLFxuICAgICAgbWFpbkFyZWFHcmlkOiBpc01haW5BcmVhRW1wdHkgPyBudWxsIDogdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemVHcmlkKHRoaXMuX2dyaWRzLm1haW5BcmVhLCBmbGFncyksXG4gICAgICB3b3JrYmVuY2hWaWV3T3V0bGV0czogdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemVWaWV3T3V0bGV0cyh0aGlzLnZpZXdPdXRsZXRzKHtncmlkOiAnd29ya2JlbmNoJ30pKSxcbiAgICAgIG1haW5BcmVhVmlld091dGxldHM6IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplVmlld091dGxldHModGhpcy52aWV3T3V0bGV0cyh7Z3JpZDogJ21haW5BcmVhJ30pKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSBuZXh0IGF2YWlsYWJsZSB2aWV3IGlkLlxuICAgKi9cbiAgcHVibGljIGNvbXB1dGVOZXh0Vmlld0lkKCk6IFZpZXdJZCB7XG4gICAgcmV0dXJuIFdvcmtiZW5jaExheW91dHMuY29tcHV0ZU5leHRWaWV3SWQodGhpcy52aWV3cygpLm1hcCh2aWV3ID0+IHZpZXcuaWQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fYWRkUGFydChpZDogc3RyaW5nLCByZWxhdGl2ZVRvOiBSZWZlcmVuY2VFbGVtZW50LCBvcHRpb25zPzoge2FjdGl2YXRlPzogYm9vbGVhbjsgc3RydWN0dXJhbD86IGJvb2xlYW59KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzUGFydChpZCkpIHtcbiAgICAgIHRocm93IEVycm9yKGBbUGFydEFkZEVycm9yXSBQYXJ0IGlkIG11c3QgYmUgdW5pcXVlLiBUaGUgbGF5b3V0IGFscmVhZHkgY29udGFpbnMgYSBwYXJ0IHdpdGggdGhlIGlkICcke2lkfScuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFydCA9IG5ldyBNUGFydCh7aWQsIHN0cnVjdHVyYWw6IG9wdGlvbnM/LnN0cnVjdHVyYWwgPz8gdHJ1ZSwgdmlld3M6IFtdfSk7XG5cbiAgICAvLyBGaW5kIHRoZSByZWZlcmVuY2UgZWxlbWVudCwgaWYgc3BlY2lmaWVkLCBvciB1c2UgdGhlIGxheW91dCByb290IGFzIHJlZmVyZW5jZSBvdGhlcndpc2UuXG4gICAgY29uc3QgcmVmZXJlbmNlRWxlbWVudCA9IHJlbGF0aXZlVG8ucmVsYXRpdmVUbyA/IHRoaXMuZmluZFRyZWVFbGVtZW50KHtpZDogcmVsYXRpdmVUby5yZWxhdGl2ZVRvfSkgOiB0aGlzLndvcmtiZW5jaEdyaWQucm9vdDtcbiAgICBjb25zdCBhZGRCZWZvcmUgPSByZWxhdGl2ZVRvLmFsaWduID09PSAnbGVmdCcgfHwgcmVsYXRpdmVUby5hbGlnbiA9PT0gJ3RvcCc7XG4gICAgY29uc3QgcmF0aW8gPSByZWxhdGl2ZVRvLnJhdGlvID8/IC41O1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHRyZWUgbm9kZS5cbiAgICBjb25zdCBuZXdUcmVlTm9kZTogTVRyZWVOb2RlID0gbmV3IE1UcmVlTm9kZSh7XG4gICAgICBpZDogVUlELnJhbmRvbVVJRCgpLFxuICAgICAgY2hpbGQxOiBhZGRCZWZvcmUgPyBuZXdQYXJ0IDogcmVmZXJlbmNlRWxlbWVudCxcbiAgICAgIGNoaWxkMjogYWRkQmVmb3JlID8gcmVmZXJlbmNlRWxlbWVudCA6IG5ld1BhcnQsXG4gICAgICBkaXJlY3Rpb246IHJlbGF0aXZlVG8uYWxpZ24gPT09ICdsZWZ0JyB8fCByZWxhdGl2ZVRvLmFsaWduID09PSAncmlnaHQnID8gJ3JvdycgOiAnY29sdW1uJyxcbiAgICAgIHJhdGlvOiBhZGRCZWZvcmUgPyByYXRpbyA6IDEgLSByYXRpbyxcbiAgICAgIHBhcmVudDogcmVmZXJlbmNlRWxlbWVudC5wYXJlbnQsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdGhlIHRyZWUgbm9kZSB0byB0aGUgbGF5b3V0LlxuICAgIGlmICghcmVmZXJlbmNlRWxlbWVudC5wYXJlbnQpIHtcbiAgICAgIHRoaXMuZ3JpZCh7ZWxlbWVudDogcmVmZXJlbmNlRWxlbWVudH0pLnJvb3QgPSBuZXdUcmVlTm9kZTsgLy8gdG9wLWxldmVsIG5vZGVcbiAgICB9XG4gICAgZWxzZSBpZiAocmVmZXJlbmNlRWxlbWVudC5wYXJlbnQuY2hpbGQxID09PSByZWZlcmVuY2VFbGVtZW50KSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50LnBhcmVudC5jaGlsZDEgPSBuZXdUcmVlTm9kZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50LnBhcmVudC5jaGlsZDIgPSBuZXdUcmVlTm9kZTtcbiAgICB9XG4gICAgcmVmZXJlbmNlRWxlbWVudC5wYXJlbnQgPSBuZXdUcmVlTm9kZTtcbiAgICBuZXdQYXJ0LnBhcmVudCA9IG5ld1RyZWVOb2RlO1xuXG4gICAgLy8gQWN0aXZhdGUgdGhlIHBhcnQuXG4gICAgaWYgKG9wdGlvbnM/LmFjdGl2YXRlKSB7XG4gICAgICB0aGlzLl9fYWN0aXZhdGVQYXJ0KG5ld1BhcnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fcmVtb3ZlUGFydChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydCh7cGFydElkOiBpZH0pO1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQoe2VsZW1lbnQ6IHBhcnR9KTtcbiAgICBjb25zdCBncmlkTmFtZSA9IHRoaXMuX2dyaWROYW1lcy5maW5kKGdyaWROYW1lID0+IHRoaXMuX2dyaWRzW2dyaWROYW1lXSA9PT0gZ3JpZCk7XG5cbiAgICAvLyBUaGUgbGFzdCBwYXJ0IGlzIG5ldmVyIHJlbW92ZWQuXG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRzKHtncmlkOiBncmlkTmFtZX0pO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIHBhcnQuXG4gICAgY29uc3Qgc2libGluZ0VsZW1lbnQgPSAocGFydC5wYXJlbnQhLmNoaWxkMSA9PT0gcGFydCA/IHBhcnQucGFyZW50IS5jaGlsZDIgOiBwYXJ0LnBhcmVudCEuY2hpbGQxKTtcbiAgICBpZiAoIXBhcnQucGFyZW50IS5wYXJlbnQpIHtcbiAgICAgIGdyaWQucm9vdCA9IHNpYmxpbmdFbGVtZW50O1xuICAgICAgZ3JpZC5yb290LnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocGFydC5wYXJlbnQhLnBhcmVudC5jaGlsZDEgPT09IHBhcnQucGFyZW50KSB7XG4gICAgICBwYXJ0LnBhcmVudCEucGFyZW50LmNoaWxkMSA9IHNpYmxpbmdFbGVtZW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHBhcnQucGFyZW50IS5wYXJlbnQuY2hpbGQyID0gc2libGluZ0VsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIG91dGxldHMgYW5kIHN0YXRlcyBvZiB2aWV3cyBjb250YWluZWQgaW4gdGhlIHBhcnQuXG4gICAgcGFydC52aWV3cy5mb3JFYWNoKHZpZXcgPT4ge1xuICAgICAgdGhpcy5fdmlld091dGxldHMuZGVsZXRlKHZpZXcuaWQpO1xuICAgICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlcy5kZWxldGUodmlldy5pZCk7XG4gICAgfSk7XG5cbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCBwYXJ0IHdhcyB0aGUgYWN0aXZlIHBhcnQsIG1ha2UgdGhlIGxhc3QgdXNlZCBwYXJ0IHRoZSBhY3RpdmUgcGFydC5cbiAgICBpZiAoZ3JpZC5hY3RpdmVQYXJ0SWQgPT09IGlkKSB7XG4gICAgICBjb25zdCBhY3RpdmVQYXJ0ID0gcGFydHNcbiAgICAgICAgLmZpbHRlcihwYXJ0ID0+IHBhcnQuaWQgIT09IGlkKVxuICAgICAgICAuc29ydCgocGFydDEsIHBhcnQyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aXZhdGlvbkluc3RhbnRQYXJ0MSA9IHRoaXMuX3BhcnRBY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyLmdldEFjdGl2YXRpb25JbnN0YW50KHBhcnQxLmlkKTtcbiAgICAgICAgICBjb25zdCBhY3RpdmF0aW9uSW5zdGFudFBhcnQyID0gdGhpcy5fcGFydEFjdGl2YXRpb25JbnN0YW50UHJvdmlkZXIuZ2V0QWN0aXZhdGlvbkluc3RhbnQocGFydDIuaWQpO1xuICAgICAgICAgIHJldHVybiBhY3RpdmF0aW9uSW5zdGFudFBhcnQyIC0gYWN0aXZhdGlvbkluc3RhbnRQYXJ0MTtcbiAgICAgICAgfSlbMF07XG4gICAgICBncmlkLmFjdGl2ZVBhcnRJZCA9IGFjdGl2ZVBhcnQhLmlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fYWRkVmlldyh2aWV3OiBNVmlldywgb3B0aW9uczoge3BhcnRJZDogc3RyaW5nOyBwb3NpdGlvbj86IG51bWJlciB8ICdzdGFydCcgfCAnZW5kJyB8ICdiZWZvcmUtYWN0aXZlLXZpZXcnIHwgJ2FmdGVyLWFjdGl2ZS12aWV3JzsgYWN0aXZhdGVWaWV3PzogYm9vbGVhbjsgYWN0aXZhdGVQYXJ0PzogYm9vbGVhbjsgY3NzQ2xhc3M/OiBzdHJpbmcgfCBzdHJpbmdbXX0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNWaWV3KHZpZXcuaWQpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgW1ZpZXdBZGRFcnJvcl0gVmlldyBpZCBtdXN0IGJlIHVuaXF1ZS4gVGhlIGxheW91dCBhbHJlYWR5IGNvbnRhaW5zIGEgdmlldyB3aXRoIHRoZSBpZCAnJHt2aWV3LmlkfScuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydCh7cGFydElkOiBvcHRpb25zLnBhcnRJZH0pO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gY29lcmNlUG9zaXRpb24ob3B0aW9ucy5wb3NpdGlvbiA/PyAnZW5kJywgcGFydCk7XG4gICAgcGFydC52aWV3cy5zcGxpY2UocG9zaXRpb24sIDAsIHZpZXcpO1xuXG4gICAgaWYgKG9wdGlvbnMuYWN0aXZhdGVWaWV3KSB7XG4gICAgICB0aGlzLl9fYWN0aXZhdGVWaWV3KHZpZXcpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hY3RpdmF0ZVBhcnQpIHtcbiAgICAgIHRoaXMuX19hY3RpdmF0ZVBhcnQob3B0aW9ucy5wYXJ0SWQpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jc3NDbGFzcykge1xuICAgICAgdmlldy5jc3NDbGFzcyA9IEFycmF5cy5jb2VyY2Uob3B0aW9ucy5jc3NDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIG5hbWUgYmVnaW5zIHdpdGggdW5kZXJzY29yZXMsIGluZGljYXRpbmcgdGhhdCBpdCBkb2VzIG5vdCBvcGVyYXRlIG9uIGEgd29ya2luZyBjb3B5LCBidXQgbW9kaWZpZXMgdGhpcyBsYXlvdXQgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX19uYXZpZ2F0ZVZpZXcodmlldzogTVZpZXcsIGNvbW1hbmRzOiBDb21tYW5kcywgZXh0cmFzPzoge2hpbnQ/OiBzdHJpbmc7IHJlbGF0aXZlVG8/OiBBY3RpdmF0ZWRSb3V0ZSB8IG51bGw7IGRhdGE/OiBOYXZpZ2F0aW9uRGF0YTsgc3RhdGU/OiBOYXZpZ2F0aW9uU3RhdGU7IGNzc0NsYXNzPzogc3RyaW5nIHwgc3RyaW5nW119KTogdm9pZCB7XG4gICAgaWYgKCFjb21tYW5kcy5sZW5ndGggJiYgIWV4dHJhcz8uaGludCAmJiAhZXh0cmFzPy5yZWxhdGl2ZVRvKSB7XG4gICAgICB0aHJvdyBFcnJvcignW05hdmlnYXRlRXJyb3JdIENvbW1hbmRzLCByZWxhdGl2ZVRvIG9yIGhpbnQgbXVzdCBiZSBzZXQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsU2VnbWVudHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5faW5qZWN0b3IsICgpID0+IFJvdXRpbmcuY29tbWFuZHNUb1NlZ21lbnRzKGNvbW1hbmRzLCB7cmVsYXRpdmVUbzogZXh0cmFzPy5yZWxhdGl2ZVRvfSkpO1xuICAgIGlmICh1cmxTZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3ZpZXdPdXRsZXRzLnNldCh2aWV3LmlkLCB1cmxTZWdtZW50cyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fdmlld091dGxldHMuZGVsZXRlKHZpZXcuaWQpO1xuICAgIH1cblxuICAgIGlmIChleHRyYXM/LnN0YXRlICYmIE9iamVjdHMua2V5cyhleHRyYXMuc3RhdGUpLmxlbmd0aCkge1xuICAgICAgdGhpcy5fbmF2aWdhdGlvblN0YXRlcy5zZXQodmlldy5pZCwgZXh0cmFzLnN0YXRlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVzLmRlbGV0ZSh2aWV3LmlkKTtcbiAgICB9XG5cbiAgICB2aWV3Lm5hdmlnYXRpb24gPSBPYmplY3RzLndpdGhvdXRVbmRlZmluZWRFbnRyaWVzKHtcbiAgICAgIGlkOiBVSUQucmFuZG9tVUlEKCksXG4gICAgICBoaW50OiBleHRyYXM/LmhpbnQsXG4gICAgICBkYXRhOiBleHRyYXM/LmRhdGEsXG4gICAgICBjc3NDbGFzczogZXh0cmFzPy5jc3NDbGFzcyA/IEFycmF5cy5jb2VyY2UoZXh0cmFzLmNzc0NsYXNzKSA6IHVuZGVmaW5lZCxcbiAgICB9IHNhdGlzZmllcyBNVmlld1snbmF2aWdhdGlvbiddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fbW92ZVZpZXcodmlldzogTVZpZXcsIHRhcmdldFBhcnRJZDogc3RyaW5nLCBvcHRpb25zPzoge3Bvc2l0aW9uPzogbnVtYmVyIHwgJ3N0YXJ0JyB8ICdlbmQnIHwgJ2JlZm9yZS1hY3RpdmUtdmlldycgfCAnYWZ0ZXItYWN0aXZlLXZpZXcnOyBhY3RpdmF0ZVZpZXc/OiBib29sZWFuOyBhY3RpdmF0ZVBhcnQ/OiBib29sZWFufSk6IHZvaWQge1xuICAgIGNvbnN0IHNvdXJjZVBhcnQgPSB0aGlzLnBhcnQoe3ZpZXdJZDogdmlldy5pZH0pO1xuICAgIGNvbnN0IHRhcmdldFBhcnQgPSB0aGlzLnBhcnQoe3BhcnRJZDogdGFyZ2V0UGFydElkfSk7XG5cbiAgICAvLyBNb3ZlIHRoZSB2aWV3LlxuICAgIGlmIChzb3VyY2VQYXJ0ICE9PSB0YXJnZXRQYXJ0KSB7XG4gICAgICB0aGlzLl9fcmVtb3ZlVmlldyh2aWV3LCB7cmVtb3ZlT3V0bGV0OiBmYWxzZSwgcmVtb3ZlTmF2aWdhdGlvblN0YXRlOiBmYWxzZSwgZm9yY2U6IHRydWV9KTtcbiAgICAgIHRoaXMuX19hZGRWaWV3KHZpZXcsIHtwYXJ0SWQ6IHRhcmdldFBhcnRJZCwgcG9zaXRpb246IG9wdGlvbnM/LnBvc2l0aW9ufSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnM/LnBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gY29lcmNlUG9zaXRpb24ob3B0aW9ucy5wb3NpdGlvbiwgdGFyZ2V0UGFydCk7XG4gICAgICBjb25zdCByZWZlcmVuY2VWaWV3OiBNVmlldyB8IHVuZGVmaW5lZCA9IHNvdXJjZVBhcnQudmlld3MuYXQocG9zaXRpb24pO1xuICAgICAgc291cmNlUGFydC52aWV3cy5zcGxpY2Uoc291cmNlUGFydC52aWV3cy5pbmRleE9mKHZpZXcpLCAxKTtcbiAgICAgIHNvdXJjZVBhcnQudmlld3Muc3BsaWNlKHJlZmVyZW5jZVZpZXcgPyBzb3VyY2VQYXJ0LnZpZXdzLmluZGV4T2YocmVmZXJlbmNlVmlldykgOiBzb3VyY2VQYXJ0LnZpZXdzLmxlbmd0aCwgMCwgdmlldyk7XG4gICAgfVxuXG4gICAgLy8gQWN0aXZhdGUgdmlldyBhbmQgcGFydC5cbiAgICBpZiAob3B0aW9ucz8uYWN0aXZhdGVQYXJ0KSB7XG4gICAgICB0aGlzLl9fYWN0aXZhdGVQYXJ0KHRhcmdldFBhcnRJZCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zPy5hY3RpdmF0ZVZpZXcpIHtcbiAgICAgIHRoaXMuX19hY3RpdmF0ZVZpZXcodmlldyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIG5hbWUgYmVnaW5zIHdpdGggdW5kZXJzY29yZXMsIGluZGljYXRpbmcgdGhhdCBpdCBkb2VzIG5vdCBvcGVyYXRlIG9uIGEgd29ya2luZyBjb3B5LCBidXQgbW9kaWZpZXMgdGhpcyBsYXlvdXQgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX19yZW1vdmVWaWV3KHZpZXc6IE1WaWV3LCBvcHRpb25zPzoge3JlbW92ZU91dGxldD86IGZhbHNlOyByZW1vdmVOYXZpZ2F0aW9uU3RhdGU/OiBmYWxzZTsgZm9yY2U/OiBib29sZWFufSk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucz8uZm9yY2UpIHtcbiAgICAgIHZpZXcubWFya2VkRm9yUmVtb3ZhbCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydCh7dmlld0lkOiB2aWV3LmlkfSk7XG5cbiAgICAvLyBSZW1vdmUgdmlldy5cbiAgICBwYXJ0LnZpZXdzLnNwbGljZShwYXJ0LnZpZXdzLmluZGV4T2YodmlldyksIDEpO1xuXG4gICAgLy8gUmVtb3ZlIG91dGxldC5cbiAgICBpZiAob3B0aW9ucz8ucmVtb3ZlT3V0bGV0ID8/IHRydWUpIHtcbiAgICAgIHRoaXMuX3ZpZXdPdXRsZXRzLmRlbGV0ZSh2aWV3LmlkKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgc3RhdGUuXG4gICAgaWYgKG9wdGlvbnM/LnJlbW92ZU5hdmlnYXRpb25TdGF0ZSA/PyB0cnVlKSB7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVzLmRlbGV0ZSh2aWV3LmlkKTtcbiAgICB9XG5cbiAgICAvLyBBY3RpdmF0ZSB0aGUgbGFzdCB1c2VkIHZpZXcgaWYgdGhpcyB2aWV3IHdhcyBhY3RpdmUuXG4gICAgaWYgKHBhcnQuYWN0aXZlVmlld0lkID09PSB2aWV3LmlkKSB7XG4gICAgICBwYXJ0LmFjdGl2ZVZpZXdJZCA9IHBhcnQudmlld3NcbiAgICAgICAgLm1hcCh2aWV3ID0+IHZpZXcuaWQpXG4gICAgICAgIC5zb3J0KCh2aWV3SWQxLCB2aWV3SWQyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aXZhdGlvbkluc3RhbnRWaWV3MSA9IHRoaXMuX3ZpZXdBY3RpdmF0aW9uSW5zdGFudFByb3ZpZGVyLmdldEFjdGl2YXRpb25JbnN0YW50KHZpZXdJZDEpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2YXRpb25JbnN0YW50VmlldzIgPSB0aGlzLl92aWV3QWN0aXZhdGlvbkluc3RhbnRQcm92aWRlci5nZXRBY3RpdmF0aW9uSW5zdGFudCh2aWV3SWQyKTtcbiAgICAgICAgICByZXR1cm4gYWN0aXZhdGlvbkluc3RhbnRWaWV3MiAtIGFjdGl2YXRpb25JbnN0YW50VmlldzE7XG4gICAgICAgIH0pLmF0KDApO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB0aGUgcGFydCBpZiB0aGlzIGlzIHRoZSBsYXN0IHZpZXcgb2YgdGhlIHBhcnQgYW5kIG5vdCBhIHN0cnVjdHVyYWwgcGFydC5cbiAgICBpZiAocGFydC52aWV3cy5sZW5ndGggPT09IDAgJiYgIXBhcnQuc3RydWN0dXJhbCkge1xuICAgICAgdGhpcy5fX3JlbW92ZVBhcnQocGFydC5pZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIG5hbWUgYmVnaW5zIHdpdGggdW5kZXJzY29yZXMsIGluZGljYXRpbmcgdGhhdCBpdCBkb2VzIG5vdCBvcGVyYXRlIG9uIGEgd29ya2luZyBjb3B5LCBidXQgbW9kaWZpZXMgdGhpcyBsYXlvdXQgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX19hY3RpdmF0ZVZpZXcodmlldzogTVZpZXcsIG9wdGlvbnM/OiB7YWN0aXZhdGVQYXJ0PzogYm9vbGVhbn0pOiB2b2lkIHtcbiAgICAvLyBBY3RpdmF0ZSB0aGUgdmlldy5cbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5wYXJ0KHt2aWV3SWQ6IHZpZXcuaWR9KTtcbiAgICBwYXJ0LmFjdGl2ZVZpZXdJZCA9IHZpZXcuaWQ7XG5cbiAgICAvLyBBY3RpdmF0ZSB0aGUgcGFydC5cbiAgICBpZiAob3B0aW9ucz8uYWN0aXZhdGVQYXJ0KSB7XG4gICAgICB0aGlzLl9fYWN0aXZhdGVQYXJ0KHBhcnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fYWN0aXZhdGVBZGphY2VudFZpZXcodmlldzogTVZpZXcsIG9wdGlvbnM/OiB7YWN0aXZhdGVQYXJ0PzogYm9vbGVhbn0pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5wYXJ0KHt2aWV3SWQ6IHZpZXcuaWR9KTtcbiAgICBjb25zdCB2aWV3SW5kZXggPSBwYXJ0LnZpZXdzLmluZGV4T2Yodmlldyk7XG4gICAgcGFydC5hY3RpdmVWaWV3SWQgPSAocGFydC52aWV3c1t2aWV3SW5kZXggLSAxXSB8fCBwYXJ0LnZpZXdzW3ZpZXdJbmRleCArIDFdKT8uaWQ7IC8vIGlzIGB1bmRlZmluZWRgIGlmIGl0IGlzIHRoZSBsYXN0IHZpZXcgb2YgdGhlIHBhcnRcblxuICAgIC8vIEFjdGl2YXRlIHRoZSBwYXJ0LlxuICAgIGlmIChvcHRpb25zPy5hY3RpdmF0ZVBhcnQpIHtcbiAgICAgIHRoaXMuX19hY3RpdmF0ZVBhcnQocGFydC5pZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIG5hbWUgYmVnaW5zIHdpdGggdW5kZXJzY29yZXMsIGluZGljYXRpbmcgdGhhdCBpdCBkb2VzIG5vdCBvcGVyYXRlIG9uIGEgd29ya2luZyBjb3B5LCBidXQgbW9kaWZpZXMgdGhpcyBsYXlvdXQgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX19zZXRTcGxpdFJhdGlvKG5vZGVJZDogc3RyaW5nLCByYXRpbzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHJhdGlvIDwgMCB8fCByYXRpbyA+IDEpIHtcbiAgICAgIHRocm93IEVycm9yKGBbTGF5b3V0TW9kaWZ5RXJyb3JdIFJhdGlvIGZvciBub2RlICcke25vZGVJZH0nIG11c3QgYmUgaW4gdGhlIGNsb3NlZCBpbnRlcnZhbCBbMCwxXSwgYnV0IHdhcyAnJHtyYXRpb30nLmApO1xuICAgIH1cbiAgICB0aGlzLmZpbmRUcmVlRWxlbWVudDxNVHJlZU5vZGU+KHtpZDogbm9kZUlkfSkucmF0aW8gPSByYXRpbztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBuYW1lIGJlZ2lucyB3aXRoIHVuZGVyc2NvcmVzLCBpbmRpY2F0aW5nIHRoYXQgaXQgZG9lcyBub3Qgb3BlcmF0ZSBvbiBhIHdvcmtpbmcgY29weSwgYnV0IG1vZGlmaWVzIHRoaXMgbGF5b3V0IGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIF9fYWN0aXZhdGVQYXJ0KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJ0ID0gdGhpcy5wYXJ0KHtwYXJ0SWQ6IGlkfSk7XG4gICAgdGhpcy5ncmlkKHtlbGVtZW50OiBwYXJ0fSkuYWN0aXZlUGFydElkID0gaWQ7XG4gIH1cblxuICAvKipcbiAgICogTm90ZTogVGhpcyBtZXRob2QgbmFtZSBiZWdpbnMgd2l0aCB1bmRlcnNjb3JlcywgaW5kaWNhdGluZyB0aGF0IGl0IGRvZXMgbm90IG9wZXJhdGUgb24gYSB3b3JraW5nIGNvcHksIGJ1dCBtb2RpZmllcyB0aGlzIGxheW91dCBpbnN0ZWFkLlxuICAgKi9cbiAgcHJpdmF0ZSBfX3RvZ2dsZU1heGltaXplZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tYXhpbWl6ZWQgPSAhdGhpcy5fbWF4aW1pemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIG5hbWUgYmVnaW5zIHdpdGggdW5kZXJzY29yZXMsIGluZGljYXRpbmcgdGhhdCBpdCBkb2VzIG5vdCBvcGVyYXRlIG9uIGEgd29ya2luZyBjb3B5LCBidXQgbW9kaWZpZXMgdGhpcyBsYXlvdXQgaW5zdGVhZC5cbiAgICovXG4gIHByaXZhdGUgX19yZW5hbWVWaWV3KHZpZXc6IE1WaWV3LCBuZXdWaWV3SWQ6IFZpZXdJZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1ZpZXcobmV3Vmlld0lkKSkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtWaWV3UmVuYW1lRXJyb3JdIFZpZXcgaWQgbXVzdCBiZSB1bmlxdWUuIFRoZSBsYXlvdXQgYWxyZWFkeSBjb250YWlucyBhIHZpZXcgd2l0aCB0aGUgaWQgJyR7bmV3Vmlld0lkfScuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydCA9IHRoaXMucGFydCh7dmlld0lkOiB2aWV3LmlkfSk7XG5cbiAgICBpZiAodGhpcy5fdmlld091dGxldHMuaGFzKHZpZXcuaWQpKSB7XG4gICAgICB0aGlzLl92aWV3T3V0bGV0cy5zZXQobmV3Vmlld0lkLCB0aGlzLl92aWV3T3V0bGV0cy5nZXQodmlldy5pZCkhKTtcbiAgICAgIHRoaXMuX3ZpZXdPdXRsZXRzLmRlbGV0ZSh2aWV3LmlkKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX25hdmlnYXRpb25TdGF0ZXMuaGFzKHZpZXcuaWQpKSB7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVzLnNldChuZXdWaWV3SWQsIHRoaXMuX25hdmlnYXRpb25TdGF0ZXMuZ2V0KHZpZXcuaWQpISk7XG4gICAgICB0aGlzLl9uYXZpZ2F0aW9uU3RhdGVzLmRlbGV0ZSh2aWV3LmlkKTtcbiAgICB9XG5cbiAgICBpZiAocGFydC5hY3RpdmVWaWV3SWQgPT09IHZpZXcuaWQpIHtcbiAgICAgIHBhcnQuYWN0aXZlVmlld0lkID0gbmV3Vmlld0lkO1xuICAgIH1cblxuICAgIHZpZXcuaWQgPSBuZXdWaWV3SWQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBncmlkIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZmlsdGVyLiBJZiBub3QgZm91bmQsIHRocm93cyBhbiBlcnJvci5cbiAgICpcbiAgICogQHBhcmFtIGZpbmRCeSAtIERlZmluZXMgdGhlIHNlYXJjaCBzY29wZS5cbiAgICogQHBhcmFtIGZpbmRCeS5lbGVtZW50IC0gU2VhcmNoZXMgZm9yIGEgZ3JpZCB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgZWxlbWVudC5cbiAgICogQHJldHVybiBHcmlkIG1hdGNoaW5nIHRoZSBmaWx0ZXIgY3JpdGVyaWEuXG4gICAqL1xuICBwcml2YXRlIGdyaWQoZmluZEJ5OiB7ZWxlbWVudDogTVBhcnQgfCBNVHJlZU5vZGV9KTogTVBhcnRHcmlkIHtcbiAgICBjb25zdCBncmlkTmFtZSA9IHRoaXMuX2dyaWROYW1lcy5maW5kKGdyaWROYW1lID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRUcmVlRWxlbWVudHMoKGVsZW1lbnQ6IE1UcmVlTm9kZSB8IE1QYXJ0KTogZWxlbWVudCBpcyBNUGFydCB8IE1UcmVlTm9kZSA9PiBlbGVtZW50ID09PSBmaW5kQnkuZWxlbWVudCwge2ZpbmRGaXJzdDogdHJ1ZSwgZ3JpZDogZ3JpZE5hbWV9KS5sZW5ndGggPiAwO1xuICAgIH0pO1xuXG4gICAgaWYgKCFncmlkTmFtZSkge1xuICAgICAgdGhyb3cgRXJyb3IoYFtOdWxsR3JpZEVycm9yXSBObyBncmlkIGZvdW5kIHRoYXQgY29udGFpbnMgdGhlICR7ZmluZEJ5LmVsZW1lbnQgaW5zdGFuY2VvZiBNUGFydCA/ICdwYXJ0JyA6ICdub2RlJ30gJyR7ZmluZEJ5LmVsZW1lbnQuaWR9J1wiLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9ncmlkc1tncmlkTmFtZV0hO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0aGUgdHJlZSB0byBmaW5kIGFuIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBwcmVkaWNhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBmaW5kQnkgLSBEZWZpbmVzIHRoZSBzZWFyY2ggc2NvcGUuXG4gICAqIEBwYXJhbSBmaW5kQnkuaWQgLSBTZWFyY2hlcyBmb3IgYW4gZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgaWQuXG4gICAqIEByZXR1cm4gRWxlbWVudCBtYXRjaGluZyB0aGUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kVHJlZUVsZW1lbnQ8VCBleHRlbmRzIE1UcmVlTm9kZSB8IE1QYXJ0PihmaW5kQnk6IHtpZDogc3RyaW5nfSk6IFQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZpbmRUcmVlRWxlbWVudHMoKGVsZW1lbnQ6IE1UcmVlTm9kZSB8IE1QYXJ0KTogZWxlbWVudCBpcyBUID0+IHtcbiAgICAgIHJldHVybiBlbGVtZW50LmlkID09PSBmaW5kQnkuaWQ7XG4gICAgfSwge2ZpbmRGaXJzdDogdHJ1ZX0pLmF0KDApO1xuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICB0aHJvdyBFcnJvcihgW051bGxFbGVtZW50RXJyb3JdIE5vIGVsZW1lbnQgZm91bmQgd2l0aCBpZCAnJHtmaW5kQnkuaWR9Jy5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2VzIHRoZSB0cmVlIHRvIGZpbmQgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcHJlZGljYXRlLlxuICAgKlxuICAgKiBAcGFyYW0gcHJlZGljYXRlRm4gLSBQcmVkaWNhdGUgZnVuY3Rpb24gdG8gbWF0Y2guXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRGVmaW5lcyBzZWFyY2ggc2NvcGUgYW5kIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBvcHRpb25zLmZpbmRGaXJzdCAtIElmIHNwZWNpZmllZCwgc3RvcHMgdHJhdmVyc2luZyBvbiBmaXJzdCBtYXRjaC4gSWYgbm90IHNldCwgZGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICogQHBhcmFtIG9wdGlvbnMuZ3JpZCAtIFNlYXJjaGVzIGZvciBhbiBlbGVtZW50IGNvbnRhaW5lZCBpbiB0aGUgc3BlY2lmaWVkIGdyaWQuXG4gICAqIEByZXR1cm4gRWxlbWVudHMgbWF0Y2hpbmcgdGhlIGZpbHRlciBjcml0ZXJpYS5cbiAgICovXG4gIHByaXZhdGUgZmluZFRyZWVFbGVtZW50czxUIGV4dGVuZHMgTVRyZWVOb2RlIHwgTVBhcnQ+KHByZWRpY2F0ZUZuOiAoZWxlbWVudDogTVRyZWVOb2RlIHwgTVBhcnQpID0+IGVsZW1lbnQgaXMgVCwgb3B0aW9ucz86IHtmaW5kRmlyc3Q/OiBib29sZWFuOyBncmlkPzoga2V5b2YgR3JpZHN9KTogVFtdIHtcbiAgICBpZiAob3B0aW9ucz8uZ3JpZCAmJiAhdGhpcy5fZ3JpZHNbb3B0aW9ucy5ncmlkXSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG5cbiAgICBmdW5jdGlvbiB2aXNpdFBhcnRzKG5vZGU6IE1UcmVlTm9kZSB8IE1QYXJ0KTogYm9vbGVhbiB7XG4gICAgICBpZiAocHJlZGljYXRlRm4obm9kZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICAgIGlmIChvcHRpb25zPy5maW5kRmlyc3QpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIHN0b3AgdmlzaXRpbmcgb3RoZXIgZWxlbWVudHNcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE1UcmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdmlzaXRQYXJ0cyhub2RlLmNoaWxkMSkgJiYgdmlzaXRQYXJ0cyhub2RlLmNoaWxkMik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uZ3JpZCkge1xuICAgICAgdmlzaXRQYXJ0cyh0aGlzLl9ncmlkc1tvcHRpb25zLmdyaWRdIS5yb290KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGdyaWQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9ncmlkcykpIHtcbiAgICAgICAgaWYgKGdyaWQgJiYgIXZpc2l0UGFydHMoZ3JpZC5yb290KSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIGxheW91dC5cbiAgICovXG4gIHByaXZhdGUgd29ya2luZ0NvcHkoKTogybVXb3JrYmVuY2hMYXlvdXQge1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5faW5qZWN0b3IsICgpID0+IG5ldyDJtVdvcmtiZW5jaExheW91dCh7XG4gICAgICB3b3JrYmVuY2hHcmlkOiB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZUdyaWQodGhpcy53b3JrYmVuY2hHcmlkKSxcbiAgICAgIG1haW5BcmVhR3JpZDogdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemVHcmlkKHRoaXMuX2dyaWRzLm1haW5BcmVhKSxcbiAgICAgIHBlcnNwZWN0aXZlSWQ6IHRoaXMucGVyc3BlY3RpdmVJZCxcbiAgICAgIHZpZXdPdXRsZXRzOiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5fdmlld091dGxldHMpLFxuICAgICAgbmF2aWdhdGlvblN0YXRlczogT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuX25hdmlnYXRpb25TdGF0ZXMpLFxuICAgICAgbWF4aW1pemVkOiB0aGlzLl9tYXhpbWl6ZWQsXG4gICAgfSkpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlZmF1bHQgd29ya2JlbmNoIGdyaWQgd2l0aCBhIG1haW4gYXJlYS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFdvcmtiZW5jaEdyaWQoKTogTVBhcnRHcmlkIHtcbiAgcmV0dXJuIHtcbiAgICByb290OiBuZXcgTVBhcnQoe2lkOiBNQUlOX0FSRUEsIHN0cnVjdHVyYWw6IHRydWUsIHZpZXdzOiBbXX0pLFxuICAgIGFjdGl2ZVBhcnRJZDogTUFJTl9BUkVBLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtYWluIGFyZWEgZ3JpZCB3aXRoIGFuIGluaXRpYWwgcGFydC5cbiAqXG4gKiBUaGUgREkgdG9rZW4ge0BsaW5rIE1BSU5fQVJFQV9JTklUSUFMX1BBUlRfSUR9IGlzIHVzZWQgdG8gYXNzaWduIHRoZSBpbml0aWFsIHBhcnQgaXRzIGlkZW50aXR5LlxuICovXG5mdW5jdGlvbiBjcmVhdGVJbml0aWFsTWFpbkFyZWFHcmlkKCk6IE1QYXJ0R3JpZCB7XG4gIHJldHVybiB7XG4gICAgcm9vdDogbmV3IE1QYXJ0KHtpZDogaW5qZWN0KE1BSU5fQVJFQV9JTklUSUFMX1BBUlRfSUQpLCBzdHJ1Y3R1cmFsOiBmYWxzZSwgdmlld3M6IFtdfSksXG4gICAgYWN0aXZlUGFydElkOiBpbmplY3QoTUFJTl9BUkVBX0lOSVRJQUxfUEFSVF9JRCksXG4gIH07XG59XG5cbi8qKlxuICogQ29lcmNlcyB7QGxpbmsgTVBhcnRHcmlkfSwgYXBwbHlpbmcgbmVjZXNzYXJ5IG1pZ3JhdGlvbnMgaWYgdGhlIHNlcmlhbGl6ZWQgZ3JpZCBpcyBvdXRkYXRlZC5cbiAqL1xuZnVuY3Rpb24gY29lcmNlTVBhcnRHcmlkKGdyaWQ6IHN0cmluZyB8IE1QYXJ0R3JpZCB8IG51bGwgfCB1bmRlZmluZWQsIG9wdGlvbnM6IHtkZWZhdWx0OiAoKSA9PiBNUGFydEdyaWR9KTogybVNUGFydEdyaWQge1xuICBncmlkID8/PSBvcHRpb25zLmRlZmF1bHQoKTtcblxuICBpZiAodHlwZW9mIGdyaWQgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGdyaWQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBpbmplY3QoV29ya2JlbmNoTGF5b3V0U2VyaWFsaXplcikuZGVzZXJpYWxpemVHcmlkKGdyaWQpO1xuICB9XG4gIGNhdGNoIChlcnJvcikge1xuICAgIGluamVjdChMb2dnZXIpLmVycm9yKCdbU2VyaWFsaXplRXJyb3JdIEZhaWxlZCB0byBkZXNlcmlhbGl6ZSB3b3JrYmVuY2ggbGF5b3V0LiBQbGVhc2UgY2xlYXIgeW91ciBicm93c2VyIHN0b3JhZ2UgYW5kIHJlbG9hZCB0aGUgYXBwbGljYXRpb24uJywgZXJyb3IpO1xuICAgIHJldHVybiB7Li4ub3B0aW9ucy5kZWZhdWx0KCksIG1pZ3JhdGVkOiB0cnVlfTtcbiAgfVxufVxuXG4vKipcbiAqIENvZXJjZXMge0BsaW5rIFZpZXdPdXRsZXRzfSwgYXBwbHlpbmcgbmVjZXNzYXJ5IG1pZ3JhdGlvbnMgaWYgdGhlIHNlcmlhbGl6ZWQgb3V0bGV0cyBhcmUgb3V0ZGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNvZXJjZVZpZXdPdXRsZXRzKHZpZXdPdXRsZXRzOiBzdHJpbmcgfCBWaWV3T3V0bGV0cyB8IG51bGwgfCB1bmRlZmluZWQpOiBWaWV3T3V0bGV0cyB7XG4gIGlmICghdmlld091dGxldHMpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBpZiAodHlwZW9mIHZpZXdPdXRsZXRzID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB2aWV3T3V0bGV0cztcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGluamVjdChXb3JrYmVuY2hMYXlvdXRTZXJpYWxpemVyKS5kZXNlcmlhbGl6ZVZpZXdPdXRsZXRzKHZpZXdPdXRsZXRzKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbmplY3QoTG9nZ2VyKS5lcnJvcignW1NlcmlhbGl6ZUVycm9yXSBGYWlsZWQgdG8gZGVzZXJpYWxpemUgdmlldyBvdXRsZXRzLiBQbGVhc2UgY2xlYXIgeW91ciBicm93c2VyIHN0b3JhZ2UgYW5kIHJlbG9hZCB0aGUgYXBwbGljYXRpb24uJywgZXJyb3IpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIEdyaWRzIG9mIHRoZSB3b3JrYmVuY2ggbGF5b3V0LlxuICovXG5pbnRlcmZhY2UgR3JpZHMge1xuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBncmlkIG9mIHRoZSB3b3JrYmVuY2guXG4gICAqL1xuICB3b3JrYmVuY2g6IMm1TVBhcnRHcmlkO1xuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBncmlkIG9mIHRoZSBtYWluIGFyZWEsIGlmIGFueS5cbiAgICpcbiAgICogVGhlIG1haW4gYXJlYSBncmlkIGlzIGEgc3ViLWdyaWQgZW1iZWRkZWQgaW4gdGhlIG1haW4gYXJlYSBwYXJ0LCBpZiBhbnkuIEl0IGRlZmluZXMgdGhlIGFycmFuZ2VtZW50IG9mIHBhcnRzIGluIHRoZSBtYWluIGFyZWEuXG4gICAqL1xuICBtYWluQXJlYT86IMm1TVBhcnRHcmlkO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBvc2l0aW9uIGlmIGEgbnVtYmVyLCBvciBjb21wdXRlcyBpdCBmcm9tIHRoZSBnaXZlbiBsaXRlcmFsIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gY29lcmNlUG9zaXRpb24ocG9zaXRpb246IG51bWJlciB8ICdzdGFydCcgfCAnZW5kJyB8ICdiZWZvcmUtYWN0aXZlLXZpZXcnIHwgJ2FmdGVyLWFjdGl2ZS12aWV3JywgcGFydDogTVBhcnQpOiBudW1iZXIge1xuICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgY2FzZSAnc3RhcnQnOiB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FzZSAnZW5kJzoge1xuICAgICAgcmV0dXJuIHBhcnQudmlld3MubGVuZ3RoO1xuICAgIH1cbiAgICBjYXNlICdiZWZvcmUtYWN0aXZlLXZpZXcnOiB7XG4gICAgICBjb25zdCBhY3RpdmVWaWV3SW5kZXggPSBwYXJ0LnZpZXdzLmZpbmRJbmRleCh2aWV3ID0+IHZpZXcuaWQgPT09IHBhcnQuYWN0aXZlVmlld0lkKTtcbiAgICAgIHJldHVybiAoYWN0aXZlVmlld0luZGV4ID4gLTEgPyBhY3RpdmVWaWV3SW5kZXggOiBwYXJ0LnZpZXdzLmxlbmd0aCk7XG4gICAgfVxuICAgIGNhc2UgJ2FmdGVyLWFjdGl2ZS12aWV3Jzoge1xuICAgICAgY29uc3QgYWN0aXZlVmlld0luZGV4ID0gcGFydC52aWV3cy5maW5kSW5kZXgodmlldyA9PiB2aWV3LmlkID09PSBwYXJ0LmFjdGl2ZVZpZXdJZCk7XG4gICAgICByZXR1cm4gKGFjdGl2ZVZpZXdJbmRleCA+IC0xID8gYWN0aXZlVmlld0luZGV4ICsgMSA6IHBhcnQudmlld3MubGVuZ3RoKTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERlc2NyaWJlcyBob3cgdG8gbGF5IG91dCBhIHBhcnQgcmVsYXRpdmUgdG8gYW5vdGhlciBwYXJ0IG9yIG5vZGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmZXJlbmNlRWxlbWVudCBleHRlbmRzIFJlZmVyZW5jZVBhcnQge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBwYXJ0IG9yIG5vZGUgd2hpY2ggdG8gdXNlIGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudCB0byBsYXkgb3V0IHRoZSBwYXJ0LlxuICAgKiBJZiBub3Qgc2V0LCB0aGUgcGFydCB3aWxsIGJlIGFsaWduZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtiZW5jaCBsYXlvdXQuXG4gICAqL1xuICByZWxhdGl2ZVRvPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERJIHRva2VuIHRvIGNvbnRyb2wgdGhlIGlkZW50aXR5IG9mIHRoZSBpbml0aWFsIHBhcnQgaW4gdGhlIG1haW4gYXJlYS5cbiAqXG4gKiBUaGUgaW5pdGlhbCBwYXJ0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSB0aGUgd29ya2JlbmNoIGlmIHRoZSBtYWluIGFyZWEgaGFzIG5vIHBhcnQsIGJ1dCBpdCBoYXMgbm9cbiAqIHNwZWNpYWwgbWVhbmluZyB0byB0aGUgd29ya2JlbmNoIGFuZCBjYW4gYmUgcmVtb3ZlZCBieSB0aGUgdXNlci4gSWYgbm90IHNldCwgYSBVVUlEIGlzIGFzc2lnbmVkLlxuICpcbiAqIE92ZXJ3cml0ZSB0aGlzIERJIHRva2VuIGluIHRlc3RzIHRvIGNvbnRyb2wgdGhlIGlkZW50aXR5IG9mIHRoZSBpbml0aWFsIHBhcnQuXG4gKiBgYGBcbiAqIFRlc3RCZWQub3ZlcnJpZGVQcm92aWRlcihNQUlOX0FSRUFfSU5JVElBTF9QQVJUX0lELCB7dXNlVmFsdWU6ICdtYWluJ30pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IE1BSU5fQVJFQV9JTklUSUFMX1BBUlRfSUQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignTUFJTl9BUkVBX0lOSVRJQUxfUEFSVF9JRCcsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBVSUQucmFuZG9tVUlEKCksXG59KTtcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgaW5zdGFudCB3aGVuIGEgcGFydCB3YXMgbGFzdCBhY3RpdmF0ZWQuXG4gKlxuICogT3ZlcndyaXRlIERJIHRva2VuIGluIHRlc3RzIHRvIGNvbnRyb2wgcGFydCBhY3RpdmF0aW9uIGluc3RhbnRzLlxuICogYGBgXG4gKiBUZXN0QmVkLm92ZXJyaWRlUHJvdmlkZXIoUGFydEFjdGl2YXRpb25JbnN0YW50UHJvdmlkZXIsIHt1c2VWYWx1ZTogLi4ufSk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgUGFydEFjdGl2YXRpb25JbnN0YW50UHJvdmlkZXIge1xuXG4gIHByaXZhdGUgX3BhcnRSZWdpc3RyeSA9IGluamVjdChXT1JLQkVOQ0hfUEFSVF9SRUdJU1RSWSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGluc3RhbnQgd2hlbiB0aGUgc3BlY2lmaWVkIHBhcnQgd2FzIGxhc3QgYWN0aXZhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldEFjdGl2YXRpb25JbnN0YW50KHBhcnRJZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFydFJlZ2lzdHJ5LmdldChwYXJ0SWQsIHtvckVsc2U6IG51bGx9KT8uYWN0aXZhdGlvbkluc3RhbnQgPz8gMDtcbiAgfVxufVxuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBpbnN0YW50IHdoZW4gYSB2aWV3IHdhcyBsYXN0IGFjdGl2YXRlZC5cbiAqXG4gKiBPdmVyd3JpdGUgREkgdG9rZW4gaW4gdGVzdHMgdG8gY29udHJvbCB2aWV3IGFjdGl2YXRpb24gaW5zdGFudHMuXG4gKiBgYGBcbiAqIFRlc3RCZWQub3ZlcnJpZGVQcm92aWRlcihWaWV3QWN0aXZhdGlvbkluc3RhbnRQcm92aWRlciwge3VzZVZhbHVlOiAuLi59KTtcbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBWaWV3QWN0aXZhdGlvbkluc3RhbnRQcm92aWRlciB7XG5cbiAgcHJpdmF0ZSBfdmlld1JlZ2lzdHJ5ID0gaW5qZWN0KFdPUktCRU5DSF9WSUVXX1JFR0lTVFJZKTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaW5zdGFudCB3aGVuIHRoZSBzcGVjaWZpZWQgdmlldyB3YXMgbGFzdCBhY3RpdmF0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0QWN0aXZhdGlvbkluc3RhbnQodmlld0lkOiBWaWV3SWQpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92aWV3UmVnaXN0cnkuZ2V0KHZpZXdJZCwge29yRWxzZTogbnVsbH0pPy5hY3RpdmF0aW9uSW5zdGFudCA/PyAwO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByZWRpY2F0ZSB0byBtYXRjaCBhIHZpZXcgYnkgaXRzIHByaW1hcnkgb3IgYWx0ZXJuYXRpdmUgaWQsIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0aGUgcGFzc2VkIGlkLlxuICovXG5mdW5jdGlvbiBtYXRjaFZpZXdCeUlkKGlkOiBzdHJpbmcpOiBQcmVkaWNhdGU8TVZpZXc+IHtcbiAgaWYgKFdvcmtiZW5jaExheW91dHMuaXNWaWV3SWQoaWQpKSB7XG4gICAgcmV0dXJuIHZpZXcgPT4gdmlldy5pZCA9PT0gaWQ7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIHZpZXcgPT4gdmlldy5hbHRlcm5hdGl2ZUlkID09PSBpZDtcbiAgfVxufVxuXG4vKipcbiAqIFN0cmluZ2lmaWVzIHRoZSBnaXZlbiBmaWx0ZXIgdG8gYmUgdXNlZCBpbiBlcnJvciBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5RmlsdGVyKGZpbHRlcjoge1twcm9wZXJ0eTogc3RyaW5nXTogdW5rbm93bn0pOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmlsdGVyKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApLmpvaW4oJywgJyk7XG59XG5cbi8qKlxuICogU2VyaWFsaXplZCBhcnRpZmFjdHMgb2YgdGhlIHdvcmtiZW5jaCBsYXlvdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFdvcmtiZW5jaExheW91dCB7XG4gIHdvcmtiZW5jaEdyaWQ6IHN0cmluZztcbiAgd29ya2JlbmNoVmlld091dGxldHM6IHN0cmluZztcbiAgbWFpbkFyZWFHcmlkOiBzdHJpbmcgfCBudWxsO1xuICBtYWluQXJlYVZpZXdPdXRsZXRzOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -32,7 +32,7 @@ import { MicrofrontendDialogCapabilityValidator } from './microfrontend-dialog/m
|
|
|
32
32
|
import { MicrofrontendMessageBoxIntentHandler } from './microfrontend-message-box/microfrontend-message-box-intent-handler.interceptor';
|
|
33
33
|
import { MicrofrontendMessageBoxCapabilityValidator } from './microfrontend-message-box/microfrontend-message-box-capability-validator.interceptor';
|
|
34
34
|
import { Defined } from '@scion/toolkit/util';
|
|
35
|
-
import { canMatchWorkbenchView } from '../
|
|
35
|
+
import { canMatchWorkbenchView } from '../routing/workbench-route-guards';
|
|
36
36
|
import { WORKBENCH_AUXILIARY_ROUTE_OUTLET } from '../routing/workbench-auxiliary-route-installer.service';
|
|
37
37
|
import { Routing } from '../routing/routing.util';
|
|
38
38
|
import { TEXT_MESSAGE_BOX_CAPABILITY_ROUTE } from './microfrontend-host-message-box/text-message/text-message.component';
|
|
@@ -188,4 +188,4 @@ function canMatchWorkbenchMessageBox() {
|
|
|
188
188
|
return Routing.isMessageBoxOutlet(outlet);
|
|
189
189
|
};
|
|
190
190
|
}
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLW1pY3JvZnJvbnRlbmQtc3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vd29ya2JlbmNoLW1pY3JvZnJvbnRlbmQtc3VwcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8saUNBQWlDLENBQUMsQ0FBQyxpRkFBaUY7QUFDM0gsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDekYsT0FBTyxFQUF1QixNQUFNLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBQyxnQ0FBZ0MsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBQzdHLE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDN0ssT0FBTyxFQUFDLG1DQUFtQyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDeEcsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSw0QkFBNEIsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqSyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUV4RixPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUNoSCxPQUFPLEVBQUMsc0NBQXNDLEVBQUMsTUFBTSxnRkFBZ0YsQ0FBQztBQUN0SSxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSx5REFBeUQsQ0FB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LElBQUk7WUFDWCxVQUFVLEVBQUUsR0FBVSxFQUFFLENBQUMsQ0FBQztnQkFDeEIsT0FBTyxFQUFFLHVCQUF1QixDQUFDLGdDQUFnQyxFQUFFO2dCQUNuRSxTQUFTLEVBQUUsMEJBQTBCO2dCQUNyQyxRQUFRLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxzQkFBc0IsQ0FBQzthQUN4RixDQUFDO1NBQ0g7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLDJDQUEyQztJQUNsRCxPQUFPLHdCQUF3QixDQUFDO1FBQzlCO1lBQ0UsT0FBTyxFQUFFLE1BQU07WUFDZixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsaUNBQWlDO2dCQUN2QyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHNFQUFzRSxDQUFDO2dCQUNuRyxRQUFRLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2FBQzFCO1NBQ2xCO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUywyQkFBMkI7SUFDbEMsT0FBTyxHQUFHLEVBQUU7UUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0NBQWdDLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUMxRSxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDI0IFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQgJy4vbWljcm9mcm9udGVuZC1wbGF0Zm9ybS5jb25maWcnOyAvLyBETyBOT1QgUkVNT1ZFIHRvIGF1Z21lbnQgYE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZ2Agd2l0aCBgc3BsYXNoYCBwcm9wZXJ0eS5cbmltcG9ydCB7TWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnTG9hZGVyfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0tY29uZmlnLWxvYWRlcic7XG5pbXBvcnQge0Vudmlyb25tZW50UHJvdmlkZXJzLCBpbmplY3QsIEluamVjdGFibGUsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRQbGF0Zm9ybUluaXRpYWxpemVyfSBmcm9tICcuL2luaXRpYWxpemF0aW9uL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0taW5pdGlhbGl6ZXIuc2VydmljZSc7XG5pbXBvcnQge0FQUF9JREVOVElUWSwgSW50ZW50Q2xpZW50LCBNYW5pZmVzdFNlcnZpY2UsIE1lc3NhZ2VDbGllbnQsIE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZywgT3V0bGV0Um91dGVyLCBQbGF0Zm9ybVByb3BlcnR5U2VydmljZX0gZnJvbSAnQHNjaW9uL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0nO1xuaW1wb3J0IHtNSUNST0ZST05URU5EX1BMQVRGT1JNX1BPU1RfU1RBUlRVUCwgV09SS0JFTkNIX1NUQVJUVVB9IGZyb20gJy4uL3N0YXJ0dXAvd29ya2JlbmNoLWluaXRpYWxpemVyJztcbmltcG9ydCB7QmVhbnN9IGZyb20gJ0BzY2lvbi90b29sa2l0L2JlYW4tbWFuYWdlcic7XG5pbXBvcnQge1dvcmtiZW5jaERpYWxvZ1NlcnZpY2UsIFdvcmtiZW5jaE1lc3NhZ2VCb3hTZXJ2aWNlLCBXb3JrYmVuY2hOb3RpZmljYXRpb25TZXJ2aWNlLCBXb3JrYmVuY2hQb3B1cFNlcnZpY2UsIFdvcmtiZW5jaFJvdXRlcn0gZnJvbSAnQHNjaW9uL3dvcmtiZW5jaC1jbGllbnQnO1xuaW1wb3J0IHtOZ1pvbmVPYnNlcnZhYmxlRGVjb3JhdG9yfSBmcm9tICcuL2luaXRpYWxpemF0aW9uL25nLXpvbmUtb2JzZXJ2YWJsZS1kZWNvcmF0b3InO1xuaW1wb3J0IHtXb3JrYmVuY2hDb25maWd9IGZyb20gJy4uL3dvcmtiZW5jaC1jb25maWcnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kVmlld0NvbW1hbmRIYW5kbGVyfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtdmlldy9taWNyb2Zyb250ZW5kLXZpZXctY29tbWFuZC1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kTm90aWZpY2F0aW9uSW50ZW50SGFuZGxlcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLW5vdGlmaWNhdGlvbi9taWNyb2Zyb250ZW5kLW5vdGlmaWNhdGlvbi1pbnRlbnQtaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFZpZXdJbnRlbnRIYW5kbGVyfSBmcm9tICcuL3JvdXRpbmcvbWljcm9mcm9udGVuZC12aWV3LWludGVudC1oYW5kbGVyLmludGVyY2VwdG9yJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFBvcHVwSW50ZW50SGFuZGxlcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLXBvcHVwL21pY3JvZnJvbnRlbmQtcG9wdXAtaW50ZW50LWhhbmRsZXIuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtXb3JrYmVuY2hIb3N0TWFuaWZlc3RJbnRlcmNlcHRvcn0gZnJvbSAnLi9pbml0aWFsaXphdGlvbi93b3JrYmVuY2gtaG9zdC1tYW5pZmVzdC1pbnRlcmNlcHRvci5zZXJ2aWNlJztcbmltcG9ydCB7Q2FuTWF0Y2hGbiwgUm91dGUsIFJPVVRFU30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFZpZXdDb21wb25lbnR9IGZyb20gJy4vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kVmlld1JvdXRlc30gZnJvbSAnLi9yb3V0aW5nL21pY3JvZnJvbnRlbmQtdmlldy1yb3V0ZXMnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kVmlld0NhcGFiaWxpdHlWYWxpZGF0b3J9IGZyb20gJy4vcm91dGluZy9taWNyb2Zyb250ZW5kLXZpZXctY2FwYWJpbGl0eS12YWxpZGF0b3IuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtTdGFibGVDYXBhYmlsaXR5SWRBc3NpZ25lcn0gZnJvbSAnLi9zdGFibGUtY2FwYWJpbGl0eS1pZC1hc3NpZ25lci5pbnRlcmNlcHRvcic7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRQb3B1cENhcGFiaWxpdHlWYWxpZGF0b3J9IGZyb20gJy4vbWljcm9mcm9udGVuZC1wb3B1cC9taWNyb2Zyb250ZW5kLXBvcHVwLWNhcGFiaWxpdHktdmFsaWRhdG9yLmludGVyY2VwdG9yJztcbmltcG9ydCB7TWljcm9mcm9udGVuZERpYWxvZ0ludGVudEhhbmRsZXJ9IGZyb20gJy4vbWljcm9mcm9udGVuZC1kaWFsb2cvbWljcm9mcm9udGVuZC1kaWFsb2ctaW50ZW50LWhhbmRsZXIuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kRGlhbG9nQ2FwYWJpbGl0eVZhbGlkYXRvcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLWRpYWxvZy9taWNyb2Zyb250ZW5kLWRpYWxvZy1jYXBhYmlsaXR5LXZhbGlkYXRvci5pbnRlcmNlcHRvcic7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRNZXNzYWdlQm94SW50ZW50SGFuZGxlcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLW1lc3NhZ2UtYm94L21pY3JvZnJvbnRlbmQtbWVzc2FnZS1ib3gtaW50ZW50LWhhbmRsZXIuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kTWVzc2FnZUJveENhcGFiaWxpdHlWYWxpZGF0b3J9IGZyb20gJy4vbWljcm9mcm9udGVuZC1tZXNzYWdlLWJveC9taWNyb2Zyb250ZW5kLW1lc3NhZ2UtYm94LWNhcGFiaWxpdHktdmFsaWRhdG9yLmludGVyY2VwdG9yJztcbmltcG9ydCB7RGVmaW5lZH0gZnJvbSAnQHNjaW9uL3Rvb2xraXQvdXRpbCc7XG5pbXBvcnQge2Nhbk1hdGNoV29ya2JlbmNoVmlld30gZnJvbSAnLi4vdmlldy93b3JrYmVuY2gtdmlldy1yb3V0ZS1ndWFyZHMnO1xuaW1wb3J0IHtXT1JLQkVOQ0hfQVVYSUxJQVJZX1JPVVRFX09VVExFVH0gZnJvbSAnLi4vcm91dGluZy93b3JrYmVuY2gtYXV4aWxpYXJ5LXJvdXRlLWluc3RhbGxlci5zZXJ2aWNlJztcbmltcG9ydCB7Um91dGluZ30gZnJvbSAnLi4vcm91dGluZy9yb3V0aW5nLnV0aWwnO1xuaW1wb3J0IHtURVhUX01FU1NBR0VfQk9YX0NBUEFCSUxJVFlfUk9VVEV9IGZyb20gJy4vbWljcm9mcm9udGVuZC1ob3N0LW1lc3NhZ2UtYm94L3RleHQtbWVzc2FnZS90ZXh0LW1lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7TWljcm9mcm9udGVuZE1lc3NhZ2VCb3hMZWdhY3lJbnRlbnRUcmFuc2xhdG9yfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtbWVzc2FnZS1ib3gvbWljcm9mcm9udGVuZC1tZXNzYWdlLWJveC1sZWdhY3ktaW50ZW50LXRyYW5zbGF0b3IuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kUGVyc3BlY3RpdmVDYXBhYmlsaXR5VmFsaWRhdG9yfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtcGVyc3BlY3RpdmUvbWljcm9mcm9udGVuZC1wZXJzcGVjdGl2ZS1jYXBhYmlsaXR5LXZhbGlkYXRvci5pbnRlcmNlcHRvcic7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRQZXJzcGVjdGl2ZUluc3RhbGxlcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLXBlcnNwZWN0aXZlL21pY3JvZnJvbnRlbmQtcGVyc3BlY3RpdmUtaW5zdGFsbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kUGVyc3BlY3RpdmVJbnRlbnRIYW5kbGVyfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtcGVyc3BlY3RpdmUvbWljcm9mcm9udGVuZC1wZXJzcGVjdGl2ZS1pbnRlbnQtaGFuZGxlci5pbnRlcmNlcHRvcic7XG5pbXBvcnQge01hbmlmZXN0T2JqZWN0Q2FjaGV9IGZyb20gJy4vbWFuaWZlc3Qtb2JqZWN0LWNhY2hlLnNlcnZpY2UnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGEgc2V0IG9mIERJIHByb3ZpZGVycyB0byBzZXQgdXAgbWljcm9mcm9udGVuZCBzdXBwb3J0IGluIHRoZSB3b3JrYmVuY2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlV29ya2JlbmNoTWljcm9mcm9udGVuZFN1cHBvcnQod29ya2JlbmNoQ29uZmlnOiBXb3JrYmVuY2hDb25maWcpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB8IFtdIHtcbiAgaWYgKCF3b3JrYmVuY2hDb25maWcubWljcm9mcm9udGVuZFBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAge1xuICAgICAgcHJvdmlkZTogV09SS0JFTkNIX1NUQVJUVVAsXG4gICAgICB1c2VFeGlzdGluZzogTWljcm9mcm9udGVuZFBsYXRmb3JtSW5pdGlhbGl6ZXIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZ0xvYWRlcixcbiAgICAgIHVzZUNsYXNzOiB0eXBlb2Ygd29ya2JlbmNoQ29uZmlnLm1pY3JvZnJvbnRlbmRQbGF0Zm9ybSA9PT0gJ2Z1bmN0aW9uJyA/IHdvcmtiZW5jaENvbmZpZy5taWNyb2Zyb250ZW5kUGxhdGZvcm0gOiBTdGF0aWNNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWdMb2FkZXIsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBNSUNST0ZST05URU5EX1BMQVRGT1JNX1BPU1RfU1RBUlRVUCxcbiAgICAgIHVzZUNsYXNzOiBNaWNyb2Zyb250ZW5kVmlld0NvbW1hbmRIYW5kbGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBNSUNST0ZST05URU5EX1BMQVRGT1JNX1BPU1RfU1RBUlRVUCxcbiAgICAgIHVzZUNsYXNzOiBNaWNyb2Zyb250ZW5kTm90aWZpY2F0aW9uSW50ZW50SGFuZGxlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTUlDUk9GUk9OVEVORF9QTEFURk9STV9QT1NUX1NUQVJUVVAsXG4gICAgICB1c2VDbGFzczogTWljcm9mcm9udGVuZFBlcnNwZWN0aXZlSW5zdGFsbGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBNSUNST0ZST05URU5EX1BMQVRGT1JNX1BPU1RfU1RBUlRVUCxcbiAgICAgIHVzZUV4aXN0aW5nOiBNYW5pZmVzdE9iamVjdENhY2hlLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWcsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiBEZWZpbmVkLm9yRWxzZVRocm93KGluamVjdChNaWNyb2Zyb250ZW5kUGxhdGZvcm1Jbml0aWFsaXplcikuY29uZmlnLCAoKSA9PiBFcnJvcignW01pY3JvZnJvbnRlbmRQbGF0Zm9ybUVycm9yXSBJbGxlZ2FsIHN0YXRlOiBNaWNyb2Zyb250ZW5kIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gbm90IGxvYWRlZC4nKSksXG4gICAgfSxcbiAgICBNaWNyb2Zyb250ZW5kUGxhdGZvcm1Jbml0aWFsaXplcixcbiAgICBNaWNyb2Zyb250ZW5kUGVyc3BlY3RpdmVJbnRlbnRIYW5kbGVyLFxuICAgIE1pY3JvZnJvbnRlbmRWaWV3SW50ZW50SGFuZGxlcixcbiAgICBNaWNyb2Zyb250ZW5kUG9wdXBJbnRlbnRIYW5kbGVyLFxuICAgIE1pY3JvZnJvbnRlbmREaWFsb2dJbnRlbnRIYW5kbGVyLFxuICAgIE1pY3JvZnJvbnRlbmRNZXNzYWdlQm94TGVnYWN5SW50ZW50VHJhbnNsYXRvcixcbiAgICBNaWNyb2Zyb250ZW5kTWVzc2FnZUJveEludGVudEhhbmRsZXIsXG4gICAgTWljcm9mcm9udGVuZFBlcnNwZWN0aXZlQ2FwYWJpbGl0eVZhbGlkYXRvcixcbiAgICBNaWNyb2Zyb250ZW5kVmlld0NhcGFiaWxpdHlWYWxpZGF0b3IsXG4gICAgTWljcm9mcm9udGVuZFBvcHVwQ2FwYWJpbGl0eVZhbGlkYXRvcixcbiAgICBNaWNyb2Zyb250ZW5kRGlhbG9nQ2FwYWJpbGl0eVZhbGlkYXRvcixcbiAgICBNaWNyb2Zyb250ZW5kTWVzc2FnZUJveENhcGFiaWxpdHlWYWxpZGF0b3IsXG4gICAgU3RhYmxlQ2FwYWJpbGl0eUlkQXNzaWduZXIsXG4gICAgTWFuaWZlc3RPYmplY3RDYWNoZSxcbiAgICBOZ1pvbmVPYnNlcnZhYmxlRGVjb3JhdG9yLFxuICAgIFdvcmtiZW5jaEhvc3RNYW5pZmVzdEludGVyY2VwdG9yLFxuICAgIHByb3ZpZGVCdWlsdEluVGV4dE1lc3NhZ2VCb3hDYXBhYmlsaXR5Um91dGUoKSxcbiAgICBwcm92aWRlTWljcm9mcm9udGVuZFZpZXdSb3V0ZSgpLFxuICAgIHByb3ZpZGVNaWNyb2Zyb250ZW5kUGxhdGZvcm1CZWFucygpLFxuICAgIHByb3ZpZGVXb3JrYmVuY2hDbGllbnRCZWFucygpLFxuICBdKTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyB7QGxpbmsgV29ya2JlbmNoQ29uZmlnLm1pY3JvZnJvbnRlbmRQbGF0Zm9ybX0gY29uZmlnIGFzIHBhc3NlZCB0byB7QGxpbmsgcHJvdmlkZVdvcmtiZW5jaH0uXG4gKi9cbkBJbmplY3RhYmxlKC8qIERPIE5PVCBQUk9WSURFIHZpYSAncHJvdmlkZWRJbicgbWV0YWRhdGEgYXMgcmVnaXN0ZXJlZCB1bmRlciBgTWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnTG9hZGVyYCBESSB0b2tlbi4gKi8pXG5jbGFzcyBTdGF0aWNNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWdMb2FkZXIgaW1wbGVtZW50cyBNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWdMb2FkZXIge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3dvcmtiZW5jaENvbmZpZzogV29ya2JlbmNoQ29uZmlnKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZCgpOiBQcm9taXNlPE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZz4ge1xuICAgIHJldHVybiB0aGlzLl93b3JrYmVuY2hDb25maWcubWljcm9mcm9udGVuZFBsYXRmb3JtISBhcyBNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWc7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlcyBiZWFucyBvZiBAc2Npb24vbWljcm9mcm9udGVuZC1wbGF0Zm9ybSBmb3IgREkuXG4gKi9cbmZ1bmN0aW9uIHByb3ZpZGVNaWNyb2Zyb250ZW5kUGxhdGZvcm1CZWFucygpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtwcm92aWRlOiBBUFBfSURFTlRJVFksIHVzZUZhY3Rvcnk6ICgpID0+IEJlYW5zLmdldChBUFBfSURFTlRJVFkpfSxcbiAgICB7cHJvdmlkZTogTWVzc2FnZUNsaWVudCwgdXNlRmFjdG9yeTogKCkgPT4gQmVhbnMuZ2V0KE1lc3NhZ2VDbGllbnQpfSxcbiAgICB7cHJvdmlkZTogSW50ZW50Q2xpZW50LCB1c2VGYWN0b3J5OiAoKSA9PiBCZWFucy5nZXQoSW50ZW50Q2xpZW50KX0sXG4gICAge3Byb3ZpZGU6IE91dGxldFJvdXRlciwgdXNlRmFjdG9yeTogKCkgPT4gQmVhbnMuZ2V0KE91dGxldFJvdXRlcil9LFxuICAgIHtwcm92aWRlOiBNYW5pZmVzdFNlcnZpY2UsIHVzZUZhY3Rvcnk6ICgpID0+IEJlYW5zLmdldChNYW5pZmVzdFNlcnZpY2UpfSxcbiAgICB7cHJvdmlkZTogUGxhdGZvcm1Qcm9wZXJ0eVNlcnZpY2UsIHVzZUZhY3Rvcnk6ICgpID0+IEJlYW5zLmdldChQbGF0Zm9ybVByb3BlcnR5U2VydmljZSl9LFxuICBdKTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBiZWFucyBvZiBAc2Npb24vd29ya2JlbmNoLWNsaWVudCBmb3IgREkuXG4gKi9cbmZ1bmN0aW9uIHByb3ZpZGVXb3JrYmVuY2hDbGllbnRCZWFucygpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtwcm92aWRlOiBXb3JrYmVuY2hSb3V0ZXIsIHVzZUZhY3Rvcnk6ICgpID0+IEJlYW5zLmdldChXb3JrYmVuY2hSb3V0ZXIpfSxcbiAgICB7cHJvdmlkZTogV29ya2JlbmNoUG9wdXBTZXJ2aWNlLCB1c2VGYWN0b3J5OiAoKSA9PiBCZWFucy5nZXQoV29ya2JlbmNoUG9wdXBTZXJ2aWNlKX0sXG4gICAge3Byb3ZpZGU6IFdvcmtiZW5jaERpYWxvZ1NlcnZpY2UsIHVzZUZhY3Rvcnk6ICgpID0+IEJlYW5zLmdldChXb3JrYmVuY2hEaWFsb2dTZXJ2aWNlKX0sXG4gICAge3Byb3ZpZGU6IFdvcmtiZW5jaE1lc3NhZ2VCb3hTZXJ2aWNlLCB1c2VGYWN0b3J5OiAoKSA9PiBCZWFucy5nZXQoV29ya2JlbmNoTWVzc2FnZUJveFNlcnZpY2UpfSxcbiAgICB7cHJvdmlkZTogV29ya2JlbmNoTm90aWZpY2F0aW9uU2VydmljZSwgdXNlRmFjdG9yeTogKCkgPT4gQmVhbnMuZ2V0KFdvcmtiZW5jaE5vdGlmaWNhdGlvblNlcnZpY2UpfSxcbiAgXSk7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIHJvdXRlIGZvciBpbnRlZ3JhdGluZyBtaWNyb2Zyb250ZW5kIHZpZXdzLlxuICovXG5mdW5jdGlvbiBwcm92aWRlTWljcm9mcm9udGVuZFZpZXdSb3V0ZSgpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJPVVRFUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRmFjdG9yeTogKCk6IFJvdXRlID0+ICh7XG4gICAgICAgIG1hdGNoZXI6IE1pY3JvZnJvbnRlbmRWaWV3Um91dGVzLnByb3ZpZGVNaWNyb2Zyb250ZW5kUm91dGVNYXRjaGVyKCksXG4gICAgICAgIGNvbXBvbmVudDogTWljcm9mcm9udGVuZFZpZXdDb21wb25lbnQsXG4gICAgICAgIGNhbk1hdGNoOiBbY2FuTWF0Y2hXb3JrYmVuY2hWaWV3KHRydWUpLCBNaWNyb2Zyb250ZW5kVmlld1JvdXRlcy5jYW5NYXRjaFZpZXdDYXBhYmlsaXR5XSxcbiAgICAgIH0pLFxuICAgIH0sXG4gIF0pO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIHJvdXRlIGZvciBidWlsdC1pbiB7QGxpbmsgV29ya2JlbmNoTWVzc2FnZUJveENhcGFiaWxpdHl9LlxuICovXG5mdW5jdGlvbiBwcm92aWRlQnVpbHRJblRleHRNZXNzYWdlQm94Q2FwYWJpbGl0eVJvdXRlKCk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAge1xuICAgICAgcHJvdmlkZTogUk9VVEVTLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VWYWx1ZToge1xuICAgICAgICBwYXRoOiBURVhUX01FU1NBR0VfQk9YX0NBUEFCSUxJVFlfUk9VVEUsXG4gICAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9taWNyb2Zyb250ZW5kLWhvc3QtbWVzc2FnZS1ib3gvdGV4dC1tZXNzYWdlL3RleHQtbWVzc2FnZS5jb21wb25lbnQnKSxcbiAgICAgICAgY2FuTWF0Y2g6IFtjYW5NYXRjaFdvcmtiZW5jaE1lc3NhZ2VCb3goKV0sXG4gICAgICB9IHNhdGlzZmllcyBSb3V0ZSxcbiAgICB9LFxuICBdKTtcbn1cblxuLyoqXG4gKiBNYXRjaGVzIHRoZSByb3V0ZSBpZiB0YXJnZXQgb2YgYSB3b3JrYmVuY2ggbWVzc2FnZSBib3guXG4gKi9cbmZ1bmN0aW9uIGNhbk1hdGNoV29ya2JlbmNoTWVzc2FnZUJveCgpOiBDYW5NYXRjaEZuIHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjb25zdCBvdXRsZXQgPSBpbmplY3QoV09SS0JFTkNIX0FVWElMSUFSWV9ST1VURV9PVVRMRVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHJldHVybiBSb3V0aW5nLmlzTWVzc2FnZUJveE91dGxldChvdXRsZXQpO1xuICB9O1xufVxuIl19
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2JlbmNoLW1pY3JvZnJvbnRlbmQtc3VwcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NjaW9uL3dvcmtiZW5jaC9zcmMvbGliL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0vd29ya2JlbmNoLW1pY3JvZnJvbnRlbmQtc3VwcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8saUNBQWlDLENBQUMsQ0FBQyxpRkFBaUY7QUFDM0gsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDekYsT0FBTyxFQUF1QixNQUFNLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBQyxnQ0FBZ0MsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBQzdHLE9BQU8sRUFBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsMkJBQTJCLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDN0ssT0FBTyxFQUFDLG1DQUFtQyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDeEcsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSw0QkFBNEIsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqSyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUV4RixPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUNoSCxPQUFPLEVBQUMsc0NBQXNDLEVBQUMsTUFBTSxnRkFBZ0YsQ0FBQztBQUN0SSxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSx5REFBeUQsQ0FB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LElBQUk7WUFDWCxVQUFVLEVBQUUsR0FBVSxFQUFFLENBQUMsQ0FBQztnQkFDeEIsT0FBTyxFQUFFLHVCQUF1QixDQUFDLGdDQUFnQyxFQUFFO2dCQUNuRSxTQUFTLEVBQUUsMEJBQTBCO2dCQUNyQyxRQUFRLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxzQkFBc0IsQ0FBQzthQUN4RixDQUFDO1NBQ0g7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLDJDQUEyQztJQUNsRCxPQUFPLHdCQUF3QixDQUFDO1FBQzlCO1lBQ0UsT0FBTyxFQUFFLE1BQU07WUFDZixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsaUNBQWlDO2dCQUN2QyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHNFQUFzRSxDQUFDO2dCQUNuRyxRQUFRLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2FBQzFCO1NBQ2xCO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUywyQkFBMkI7SUFDbEMsT0FBTyxHQUFHLEVBQUU7UUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0NBQWdDLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUMxRSxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDI0IFN3aXNzIEZlZGVyYWwgUmFpbHdheXNcbiAqXG4gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlXG4gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMFxuICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjBcbiAqL1xuXG5pbXBvcnQgJy4vbWljcm9mcm9udGVuZC1wbGF0Zm9ybS5jb25maWcnOyAvLyBETyBOT1QgUkVNT1ZFIHRvIGF1Z21lbnQgYE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZ2Agd2l0aCBgc3BsYXNoYCBwcm9wZXJ0eS5cbmltcG9ydCB7TWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnTG9hZGVyfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0tY29uZmlnLWxvYWRlcic7XG5pbXBvcnQge0Vudmlyb25tZW50UHJvdmlkZXJzLCBpbmplY3QsIEluamVjdGFibGUsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRQbGF0Zm9ybUluaXRpYWxpemVyfSBmcm9tICcuL2luaXRpYWxpemF0aW9uL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0taW5pdGlhbGl6ZXIuc2VydmljZSc7XG5pbXBvcnQge0FQUF9JREVOVElUWSwgSW50ZW50Q2xpZW50LCBNYW5pZmVzdFNlcnZpY2UsIE1lc3NhZ2VDbGllbnQsIE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZywgT3V0bGV0Um91dGVyLCBQbGF0Zm9ybVByb3BlcnR5U2VydmljZX0gZnJvbSAnQHNjaW9uL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0nO1xuaW1wb3J0IHtNSUNST0ZST05URU5EX1BMQVRGT1JNX1BPU1RfU1RBUlRVUCwgV09SS0JFTkNIX1NUQVJUVVB9IGZyb20gJy4uL3N0YXJ0dXAvd29ya2JlbmNoLWluaXRpYWxpemVyJztcbmltcG9ydCB7QmVhbnN9IGZyb20gJ0BzY2lvbi90b29sa2l0L2JlYW4tbWFuYWdlcic7XG5pbXBvcnQge1dvcmtiZW5jaERpYWxvZ1NlcnZpY2UsIFdvcmtiZW5jaE1lc3NhZ2VCb3hTZXJ2aWNlLCBXb3JrYmVuY2hOb3RpZmljYXRpb25TZXJ2aWNlLCBXb3JrYmVuY2hQb3B1cFNlcnZpY2UsIFdvcmtiZW5jaFJvdXRlcn0gZnJvbSAnQHNjaW9uL3dvcmtiZW5jaC1jbGllbnQnO1xuaW1wb3J0IHtOZ1pvbmVPYnNlcnZhYmxlRGVjb3JhdG9yfSBmcm9tICcuL2luaXRpYWxpemF0aW9uL25nLXpvbmUtb2JzZXJ2YWJsZS1kZWNvcmF0b3InO1xuaW1wb3J0IHtXb3JrYmVuY2hDb25maWd9IGZyb20gJy4uL3dvcmtiZW5jaC1jb25maWcnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kVmlld0NvbW1hbmRIYW5kbGVyfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtdmlldy9taWNyb2Zyb250ZW5kLXZpZXctY29tbWFuZC1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kTm90aWZpY2F0aW9uSW50ZW50SGFuZGxlcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLW5vdGlmaWNhdGlvbi9taWNyb2Zyb250ZW5kLW5vdGlmaWNhdGlvbi1pbnRlbnQtaGFuZGxlci5zZXJ2aWNlJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFZpZXdJbnRlbnRIYW5kbGVyfSBmcm9tICcuL3JvdXRpbmcvbWljcm9mcm9udGVuZC12aWV3LWludGVudC1oYW5kbGVyLmludGVyY2VwdG9yJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFBvcHVwSW50ZW50SGFuZGxlcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLXBvcHVwL21pY3JvZnJvbnRlbmQtcG9wdXAtaW50ZW50LWhhbmRsZXIuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtXb3JrYmVuY2hIb3N0TWFuaWZlc3RJbnRlcmNlcHRvcn0gZnJvbSAnLi9pbml0aWFsaXphdGlvbi93b3JrYmVuY2gtaG9zdC1tYW5pZmVzdC1pbnRlcmNlcHRvci5zZXJ2aWNlJztcbmltcG9ydCB7Q2FuTWF0Y2hGbiwgUm91dGUsIFJPVVRFU30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFZpZXdDb21wb25lbnR9IGZyb20gJy4vbWljcm9mcm9udGVuZC12aWV3L21pY3JvZnJvbnRlbmQtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kVmlld1JvdXRlc30gZnJvbSAnLi9yb3V0aW5nL21pY3JvZnJvbnRlbmQtdmlldy1yb3V0ZXMnO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kVmlld0NhcGFiaWxpdHlWYWxpZGF0b3J9IGZyb20gJy4vcm91dGluZy9taWNyb2Zyb250ZW5kLXZpZXctY2FwYWJpbGl0eS12YWxpZGF0b3IuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtTdGFibGVDYXBhYmlsaXR5SWRBc3NpZ25lcn0gZnJvbSAnLi9zdGFibGUtY2FwYWJpbGl0eS1pZC1hc3NpZ25lci5pbnRlcmNlcHRvcic7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRQb3B1cENhcGFiaWxpdHlWYWxpZGF0b3J9IGZyb20gJy4vbWljcm9mcm9udGVuZC1wb3B1cC9taWNyb2Zyb250ZW5kLXBvcHVwLWNhcGFiaWxpdHktdmFsaWRhdG9yLmludGVyY2VwdG9yJztcbmltcG9ydCB7TWljcm9mcm9udGVuZERpYWxvZ0ludGVudEhhbmRsZXJ9IGZyb20gJy4vbWljcm9mcm9udGVuZC1kaWFsb2cvbWljcm9mcm9udGVuZC1kaWFsb2ctaW50ZW50LWhhbmRsZXIuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kRGlhbG9nQ2FwYWJpbGl0eVZhbGlkYXRvcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLWRpYWxvZy9taWNyb2Zyb250ZW5kLWRpYWxvZy1jYXBhYmlsaXR5LXZhbGlkYXRvci5pbnRlcmNlcHRvcic7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRNZXNzYWdlQm94SW50ZW50SGFuZGxlcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLW1lc3NhZ2UtYm94L21pY3JvZnJvbnRlbmQtbWVzc2FnZS1ib3gtaW50ZW50LWhhbmRsZXIuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kTWVzc2FnZUJveENhcGFiaWxpdHlWYWxpZGF0b3J9IGZyb20gJy4vbWljcm9mcm9udGVuZC1tZXNzYWdlLWJveC9taWNyb2Zyb250ZW5kLW1lc3NhZ2UtYm94LWNhcGFiaWxpdHktdmFsaWRhdG9yLmludGVyY2VwdG9yJztcbmltcG9ydCB7RGVmaW5lZH0gZnJvbSAnQHNjaW9uL3Rvb2xraXQvdXRpbCc7XG5pbXBvcnQge2Nhbk1hdGNoV29ya2JlbmNoVmlld30gZnJvbSAnLi4vcm91dGluZy93b3JrYmVuY2gtcm91dGUtZ3VhcmRzJztcbmltcG9ydCB7V09SS0JFTkNIX0FVWElMSUFSWV9ST1VURV9PVVRMRVR9IGZyb20gJy4uL3JvdXRpbmcvd29ya2JlbmNoLWF1eGlsaWFyeS1yb3V0ZS1pbnN0YWxsZXIuc2VydmljZSc7XG5pbXBvcnQge1JvdXRpbmd9IGZyb20gJy4uL3JvdXRpbmcvcm91dGluZy51dGlsJztcbmltcG9ydCB7VEVYVF9NRVNTQUdFX0JPWF9DQVBBQklMSVRZX1JPVVRFfSBmcm9tICcuL21pY3JvZnJvbnRlbmQtaG9zdC1tZXNzYWdlLWJveC90ZXh0LW1lc3NhZ2UvdGV4dC1tZXNzYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQge01pY3JvZnJvbnRlbmRNZXNzYWdlQm94TGVnYWN5SW50ZW50VHJhbnNsYXRvcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLW1lc3NhZ2UtYm94L21pY3JvZnJvbnRlbmQtbWVzc2FnZS1ib3gtbGVnYWN5LWludGVudC10cmFuc2xhdG9yLmludGVyY2VwdG9yJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFBlcnNwZWN0aXZlQ2FwYWJpbGl0eVZhbGlkYXRvcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLXBlcnNwZWN0aXZlL21pY3JvZnJvbnRlbmQtcGVyc3BlY3RpdmUtY2FwYWJpbGl0eS12YWxpZGF0b3IuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtNaWNyb2Zyb250ZW5kUGVyc3BlY3RpdmVJbnN0YWxsZXJ9IGZyb20gJy4vbWljcm9mcm9udGVuZC1wZXJzcGVjdGl2ZS9taWNyb2Zyb250ZW5kLXBlcnNwZWN0aXZlLWluc3RhbGxlci5zZXJ2aWNlJztcbmltcG9ydCB7TWljcm9mcm9udGVuZFBlcnNwZWN0aXZlSW50ZW50SGFuZGxlcn0gZnJvbSAnLi9taWNyb2Zyb250ZW5kLXBlcnNwZWN0aXZlL21pY3JvZnJvbnRlbmQtcGVyc3BlY3RpdmUtaW50ZW50LWhhbmRsZXIuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtNYW5pZmVzdE9iamVjdENhY2hlfSBmcm9tICcuL21hbmlmZXN0LW9iamVjdC1jYWNoZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBQcm92aWRlcyBhIHNldCBvZiBESSBwcm92aWRlcnMgdG8gc2V0IHVwIG1pY3JvZnJvbnRlbmQgc3VwcG9ydCBpbiB0aGUgd29ya2JlbmNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVdvcmtiZW5jaE1pY3JvZnJvbnRlbmRTdXBwb3J0KHdvcmtiZW5jaENvbmZpZzogV29ya2JlbmNoQ29uZmlnKTogRW52aXJvbm1lbnRQcm92aWRlcnMgfCBbXSB7XG4gIGlmICghd29ya2JlbmNoQ29uZmlnLm1pY3JvZnJvbnRlbmRQbGF0Zm9ybSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFdPUktCRU5DSF9TVEFSVFVQLFxuICAgICAgdXNlRXhpc3Rpbmc6IE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUluaXRpYWxpemVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWdMb2FkZXIsXG4gICAgICB1c2VDbGFzczogdHlwZW9mIHdvcmtiZW5jaENvbmZpZy5taWNyb2Zyb250ZW5kUGxhdGZvcm0gPT09ICdmdW5jdGlvbicgPyB3b3JrYmVuY2hDb25maWcubWljcm9mcm9udGVuZFBsYXRmb3JtIDogU3RhdGljTWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnTG9hZGVyLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTUlDUk9GUk9OVEVORF9QTEFURk9STV9QT1NUX1NUQVJUVVAsXG4gICAgICB1c2VDbGFzczogTWljcm9mcm9udGVuZFZpZXdDb21tYW5kSGFuZGxlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTUlDUk9GUk9OVEVORF9QTEFURk9STV9QT1NUX1NUQVJUVVAsXG4gICAgICB1c2VDbGFzczogTWljcm9mcm9udGVuZE5vdGlmaWNhdGlvbkludGVudEhhbmRsZXIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1JQ1JPRlJPTlRFTkRfUExBVEZPUk1fUE9TVF9TVEFSVFVQLFxuICAgICAgdXNlQ2xhc3M6IE1pY3JvZnJvbnRlbmRQZXJzcGVjdGl2ZUluc3RhbGxlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTUlDUk9GUk9OVEVORF9QTEFURk9STV9QT1NUX1NUQVJUVVAsXG4gICAgICB1c2VFeGlzdGluZzogTWFuaWZlc3RPYmplY3RDYWNoZSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnLFxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4gRGVmaW5lZC5vckVsc2VUaHJvdyhpbmplY3QoTWljcm9mcm9udGVuZFBsYXRmb3JtSW5pdGlhbGl6ZXIpLmNvbmZpZywgKCkgPT4gRXJyb3IoJ1tNaWNyb2Zyb250ZW5kUGxhdGZvcm1FcnJvcl0gSWxsZWdhbCBzdGF0ZTogTWljcm9mcm9udGVuZCBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIG5vdCBsb2FkZWQuJykpLFxuICAgIH0sXG4gICAgTWljcm9mcm9udGVuZFBsYXRmb3JtSW5pdGlhbGl6ZXIsXG4gICAgTWljcm9mcm9udGVuZFBlcnNwZWN0aXZlSW50ZW50SGFuZGxlcixcbiAgICBNaWNyb2Zyb250ZW5kVmlld0ludGVudEhhbmRsZXIsXG4gICAgTWljcm9mcm9udGVuZFBvcHVwSW50ZW50SGFuZGxlcixcbiAgICBNaWNyb2Zyb250ZW5kRGlhbG9nSW50ZW50SGFuZGxlcixcbiAgICBNaWNyb2Zyb250ZW5kTWVzc2FnZUJveExlZ2FjeUludGVudFRyYW5zbGF0b3IsXG4gICAgTWljcm9mcm9udGVuZE1lc3NhZ2VCb3hJbnRlbnRIYW5kbGVyLFxuICAgIE1pY3JvZnJvbnRlbmRQZXJzcGVjdGl2ZUNhcGFiaWxpdHlWYWxpZGF0b3IsXG4gICAgTWljcm9mcm9udGVuZFZpZXdDYXBhYmlsaXR5VmFsaWRhdG9yLFxuICAgIE1pY3JvZnJvbnRlbmRQb3B1cENhcGFiaWxpdHlWYWxpZGF0b3IsXG4gICAgTWljcm9mcm9udGVuZERpYWxvZ0NhcGFiaWxpdHlWYWxpZGF0b3IsXG4gICAgTWljcm9mcm9udGVuZE1lc3NhZ2VCb3hDYXBhYmlsaXR5VmFsaWRhdG9yLFxuICAgIFN0YWJsZUNhcGFiaWxpdHlJZEFzc2lnbmVyLFxuICAgIE1hbmlmZXN0T2JqZWN0Q2FjaGUsXG4gICAgTmdab25lT2JzZXJ2YWJsZURlY29yYXRvcixcbiAgICBXb3JrYmVuY2hIb3N0TWFuaWZlc3RJbnRlcmNlcHRvcixcbiAgICBwcm92aWRlQnVpbHRJblRleHRNZXNzYWdlQm94Q2FwYWJpbGl0eVJvdXRlKCksXG4gICAgcHJvdmlkZU1pY3JvZnJvbnRlbmRWaWV3Um91dGUoKSxcbiAgICBwcm92aWRlTWljcm9mcm9udGVuZFBsYXRmb3JtQmVhbnMoKSxcbiAgICBwcm92aWRlV29ya2JlbmNoQ2xpZW50QmVhbnMoKSxcbiAgXSk7XG59XG5cbi8qKlxuICogUHJvdmlkZXMge0BsaW5rIFdvcmtiZW5jaENvbmZpZy5taWNyb2Zyb250ZW5kUGxhdGZvcm19IGNvbmZpZyBhcyBwYXNzZWQgdG8ge0BsaW5rIHByb3ZpZGVXb3JrYmVuY2h9LlxuICovXG5ASW5qZWN0YWJsZSgvKiBETyBOT1QgUFJPVklERSB2aWEgJ3Byb3ZpZGVkSW4nIG1ldGFkYXRhIGFzIHJlZ2lzdGVyZWQgdW5kZXIgYE1pY3JvZnJvbnRlbmRQbGF0Zm9ybUNvbmZpZ0xvYWRlcmAgREkgdG9rZW4uICovKVxuY2xhc3MgU3RhdGljTWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnTG9hZGVyIGltcGxlbWVudHMgTWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnTG9hZGVyIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF93b3JrYmVuY2hDb25maWc6IFdvcmtiZW5jaENvbmZpZykge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWQoKTogUHJvbWlzZTxNaWNyb2Zyb250ZW5kUGxhdGZvcm1Db25maWc+IHtcbiAgICByZXR1cm4gdGhpcy5fd29ya2JlbmNoQ29uZmlnLm1pY3JvZnJvbnRlbmRQbGF0Zm9ybSEgYXMgTWljcm9mcm9udGVuZFBsYXRmb3JtQ29uZmlnO1xuICB9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYmVhbnMgb2YgQHNjaW9uL21pY3JvZnJvbnRlbmQtcGxhdGZvcm0gZm9yIERJLlxuICovXG5mdW5jdGlvbiBwcm92aWRlTWljcm9mcm9udGVuZFBsYXRmb3JtQmVhbnMoKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7cHJvdmlkZTogQVBQX0lERU5USVRZLCB1c2VGYWN0b3J5OiAoKSA9PiBCZWFucy5nZXQoQVBQX0lERU5USVRZKX0sXG4gICAge3Byb3ZpZGU6IE1lc3NhZ2VDbGllbnQsIHVzZUZhY3Rvcnk6ICgpID0+IEJlYW5zLmdldChNZXNzYWdlQ2xpZW50KX0sXG4gICAge3Byb3ZpZGU6IEludGVudENsaWVudCwgdXNlRmFjdG9yeTogKCkgPT4gQmVhbnMuZ2V0KEludGVudENsaWVudCl9LFxuICAgIHtwcm92aWRlOiBPdXRsZXRSb3V0ZXIsIHVzZUZhY3Rvcnk6ICgpID0+IEJlYW5zLmdldChPdXRsZXRSb3V0ZXIpfSxcbiAgICB7cHJvdmlkZTogTWFuaWZlc3RTZXJ2aWNlLCB1c2VGYWN0b3J5OiAoKSA9PiBCZWFucy5nZXQoTWFuaWZlc3RTZXJ2aWNlKX0sXG4gICAge3Byb3ZpZGU6IFBsYXRmb3JtUHJvcGVydHlTZXJ2aWNlLCB1c2VGYWN0b3J5OiAoKSA9PiBCZWFucy5nZXQoUGxhdGZvcm1Qcm9wZXJ0eVNlcnZpY2UpfSxcbiAgXSk7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYmVhbnMgb2YgQHNjaW9uL3dvcmtiZW5jaC1jbGllbnQgZm9yIERJLlxuICovXG5mdW5jdGlvbiBwcm92aWRlV29ya2JlbmNoQ2xpZW50QmVhbnMoKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7cHJvdmlkZTogV29ya2JlbmNoUm91dGVyLCB1c2VGYWN0b3J5OiAoKSA9PiBCZWFucy5nZXQoV29ya2JlbmNoUm91dGVyKX0sXG4gICAge3Byb3ZpZGU6IFdvcmtiZW5jaFBvcHVwU2VydmljZSwgdXNlRmFjdG9yeTogKCkgPT4gQmVhbnMuZ2V0KFdvcmtiZW5jaFBvcHVwU2VydmljZSl9LFxuICAgIHtwcm92aWRlOiBXb3JrYmVuY2hEaWFsb2dTZXJ2aWNlLCB1c2VGYWN0b3J5OiAoKSA9PiBCZWFucy5nZXQoV29ya2JlbmNoRGlhbG9nU2VydmljZSl9LFxuICAgIHtwcm92aWRlOiBXb3JrYmVuY2hNZXNzYWdlQm94U2VydmljZSwgdXNlRmFjdG9yeTogKCkgPT4gQmVhbnMuZ2V0KFdvcmtiZW5jaE1lc3NhZ2VCb3hTZXJ2aWNlKX0sXG4gICAge3Byb3ZpZGU6IFdvcmtiZW5jaE5vdGlmaWNhdGlvblNlcnZpY2UsIHVzZUZhY3Rvcnk6ICgpID0+IEJlYW5zLmdldChXb3JrYmVuY2hOb3RpZmljYXRpb25TZXJ2aWNlKX0sXG4gIF0pO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSByb3V0ZSBmb3IgaW50ZWdyYXRpbmcgbWljcm9mcm9udGVuZCB2aWV3cy5cbiAqL1xuZnVuY3Rpb24gcHJvdmlkZU1pY3JvZnJvbnRlbmRWaWV3Um91dGUoKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBST1VURVMsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUZhY3Rvcnk6ICgpOiBSb3V0ZSA9PiAoe1xuICAgICAgICBtYXRjaGVyOiBNaWNyb2Zyb250ZW5kVmlld1JvdXRlcy5wcm92aWRlTWljcm9mcm9udGVuZFJvdXRlTWF0Y2hlcigpLFxuICAgICAgICBjb21wb25lbnQ6IE1pY3JvZnJvbnRlbmRWaWV3Q29tcG9uZW50LFxuICAgICAgICBjYW5NYXRjaDogW2Nhbk1hdGNoV29ya2JlbmNoVmlldyh0cnVlKSwgTWljcm9mcm9udGVuZFZpZXdSb3V0ZXMuY2FuTWF0Y2hWaWV3Q2FwYWJpbGl0eV0sXG4gICAgICB9KSxcbiAgICB9LFxuICBdKTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyByb3V0ZSBmb3IgYnVpbHQtaW4ge0BsaW5rIFdvcmtiZW5jaE1lc3NhZ2VCb3hDYXBhYmlsaXR5fS5cbiAqL1xuZnVuY3Rpb24gcHJvdmlkZUJ1aWx0SW5UZXh0TWVzc2FnZUJveENhcGFiaWxpdHlSb3V0ZSgpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJPVVRFUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlVmFsdWU6IHtcbiAgICAgICAgcGF0aDogVEVYVF9NRVNTQUdFX0JPWF9DQVBBQklMSVRZX1JPVVRFLFxuICAgICAgICBsb2FkQ29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vbWljcm9mcm9udGVuZC1ob3N0LW1lc3NhZ2UtYm94L3RleHQtbWVzc2FnZS90ZXh0LW1lc3NhZ2UuY29tcG9uZW50JyksXG4gICAgICAgIGNhbk1hdGNoOiBbY2FuTWF0Y2hXb3JrYmVuY2hNZXNzYWdlQm94KCldLFxuICAgICAgfSBzYXRpc2ZpZXMgUm91dGUsXG4gICAgfSxcbiAgXSk7XG59XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgcm91dGUgaWYgdGFyZ2V0IG9mIGEgd29ya2JlbmNoIG1lc3NhZ2UgYm94LlxuICovXG5mdW5jdGlvbiBjYW5NYXRjaFdvcmtiZW5jaE1lc3NhZ2VCb3goKTogQ2FuTWF0Y2hGbiB7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgY29uc3Qgb3V0bGV0ID0gaW5qZWN0KFdPUktCRU5DSF9BVVhJTElBUllfUk9VVEVfT1VUTEVULCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICByZXR1cm4gUm91dGluZy5pc01lc3NhZ2VCb3hPdXRsZXQob3V0bGV0KTtcbiAgfTtcbn1cbiJdfQ==
|