@theseam/ui-common 0.2.6 → 0.2.10
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/breadcrumbs/breadcrumb.d.ts +3 -1
- package/breadcrumbs/breadcrumbs/breadcrumbs.component.d.ts +2 -2
- package/breadcrumbs/breadcrumbs-resolver.d.ts +3 -1
- package/breadcrumbs/breadcrumbs.service.d.ts +15 -6
- package/breadcrumbs/theseam-ui-common-breadcrumbs.metadata.json +1 -1
- package/bundles/theseam-ui-common-breadcrumbs.umd.js +487 -16
- package/bundles/theseam-ui-common-breadcrumbs.umd.js.map +1 -1
- package/bundles/theseam-ui-common-data-exporter.umd.js.map +1 -1
- package/bundles/theseam-ui-common-datatable.umd.js +54 -4
- package/bundles/theseam-ui-common-datatable.umd.js.map +1 -1
- package/bundles/theseam-ui-common-framework.umd.js +2 -2
- package/bundles/theseam-ui-common-framework.umd.js.map +1 -1
- package/bundles/theseam-ui-common-shared.umd.js +20 -6
- package/bundles/theseam-ui-common-shared.umd.js.map +1 -1
- package/bundles/theseam-ui-common-unsaved-changes-dialog.umd.js +1 -0
- package/bundles/theseam-ui-common-unsaved-changes-dialog.umd.js.map +1 -1
- package/bundles/theseam-ui-common-utils.umd.js +82 -1
- package/bundles/theseam-ui-common-utils.umd.js.map +1 -1
- package/bundles/theseam-ui-common-validators.umd.js +54 -4
- package/bundles/theseam-ui-common-validators.umd.js.map +1 -1
- package/data-exporter/data-exporter.d.ts +4 -0
- package/data-exporter/theseam-ui-common-data-exporter.metadata.json +1 -1
- package/datatable/datatable/datatable.component.d.ts +2 -0
- package/datatable/datatable-footer/datatable-footer-tpl.directive.d.ts +5 -0
- package/datatable/datatable-footer/datatable-footer.directive.d.ts +6 -0
- package/datatable/public-api.d.ts +2 -0
- package/datatable/theseam-ui-common-datatable.metadata.json +1 -1
- package/esm2015/breadcrumbs/breadcrumb.js +1 -1
- package/esm2015/breadcrumbs/breadcrumbs/breadcrumbs.component.js +1 -1
- package/esm2015/breadcrumbs/breadcrumbs-resolver.js +1 -1
- package/esm2015/breadcrumbs/breadcrumbs.service.js +133 -15
- package/esm2015/data-exporter/data-exporter.js +1 -1
- package/esm2015/datatable/datatable/datatable.component.js +5 -3
- package/esm2015/datatable/datatable-export-button/datatable-export-button.component.js +8 -3
- package/esm2015/datatable/datatable-footer/datatable-footer-tpl.directive.js +15 -0
- package/esm2015/datatable/datatable-footer/datatable-footer.directive.js +18 -0
- package/esm2015/datatable/datatable.module.js +7 -1
- package/esm2015/datatable/public-api.js +3 -1
- package/esm2015/framework/side-nav/side-nav-item/side-nav-item.component.js +3 -3
- package/esm2015/shared/directives/ng-select-extra.directive.js +16 -3
- package/esm2015/shared/pipes/mask-chars.pipe.js +2 -2
- package/esm2015/unsaved-changes-dialog/unsaved-changes-can-deactivate.js +3 -2
- package/esm2015/utils/create-padding.js +17 -0
- package/esm2015/utils/form/is-empty-input-value.js +6 -0
- package/esm2015/utils/fractional-digits-count.js +19 -0
- package/esm2015/utils/is-numeric.js +4 -0
- package/esm2015/utils/pad-end.js +9 -0
- package/esm2015/utils/pad-start.js +9 -0
- package/esm2015/utils/public-api.js +7 -1
- package/esm2015/utils/router/index.js +3 -1
- package/esm2015/utils/router/is-empty-url-route.js +4 -0
- package/esm2015/utils/router/leaf-child-route.js +1 -1
- package/esm2015/utils/router/operators/activated-routes-with-data-property.js +3 -8
- package/esm2015/utils/router/will-have-data-prop.js +10 -0
- package/esm2015/validators/decimal.validator.js +25 -0
- package/esm2015/validators/integer.validator.js +25 -0
- package/esm2015/validators/public-api.js +3 -1
- package/fesm2015/theseam-ui-common-breadcrumbs.js +132 -14
- package/fesm2015/theseam-ui-common-breadcrumbs.js.map +1 -1
- package/fesm2015/theseam-ui-common-data-exporter.js.map +1 -1
- package/fesm2015/theseam-ui-common-datatable.js +45 -5
- package/fesm2015/theseam-ui-common-datatable.js.map +1 -1
- package/fesm2015/theseam-ui-common-framework.js +2 -2
- package/fesm2015/theseam-ui-common-framework.js.map +1 -1
- package/fesm2015/theseam-ui-common-shared.js +15 -2
- package/fesm2015/theseam-ui-common-shared.js.map +1 -1
- package/fesm2015/theseam-ui-common-unsaved-changes-dialog.js +1 -0
- package/fesm2015/theseam-ui-common-unsaved-changes-dialog.js.map +1 -1
- package/fesm2015/theseam-ui-common-utils.js +71 -2
- package/fesm2015/theseam-ui-common-utils.js.map +1 -1
- package/fesm2015/theseam-ui-common-validators.js +49 -1
- package/fesm2015/theseam-ui-common-validators.js.map +1 -1
- package/framework/side-nav/side-nav-item/side-nav-item.component.scss +36 -9
- package/framework/theseam-ui-common-framework.metadata.json +1 -1
- package/package.json +1 -1
- package/shared/directives/ng-select-extra.directive.d.ts +1 -0
- package/shared/theseam-ui-common-shared.metadata.json +1 -1
- package/styles/common/_table.scss +0 -5
- package/styles/vendor/ngx-datatable/_ngx-datatable.scss +475 -87
- package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +173 -0
- package/styles/vendor/ngx-datatable/_themes/dark/_variables.scss +166 -0
- package/styles/vendor/ngx-datatable/_themes/material/_variables.scss +165 -0
- package/styles/vendor/ngx-datatable/_variables.scss +3 -0
- package/unsaved-changes-dialog/theseam-ui-common-unsaved-changes-dialog.metadata.json +1 -1
- package/utils/create-padding.d.ts +1 -0
- package/utils/form/is-empty-input-value.d.ts +1 -0
- package/utils/fractional-digits-count.d.ts +8 -0
- package/utils/is-numeric.d.ts +1 -0
- package/utils/pad-end.d.ts +1 -0
- package/utils/pad-start.d.ts +1 -0
- package/utils/public-api.d.ts +6 -0
- package/utils/router/index.d.ts +2 -0
- package/utils/router/is-empty-url-route.d.ts +2 -0
- package/utils/router/will-have-data-prop.d.ts +2 -0
- package/utils/theseam-ui-common-utils.metadata.json +1 -1
- package/validators/decimal.validator.d.ts +9 -0
- package/validators/integer.validator.d.ts +9 -0
- package/validators/public-api.d.ts +2 -0
- package/validators/theseam-ui-common-validators.metadata.json +1 -1
|
@@ -2,29 +2,147 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
|
3
3
|
import { combineLatest, of } from 'rxjs';
|
|
4
4
|
import { filter, map, startWith, switchMap } from 'rxjs/operators';
|
|
5
|
-
import {
|
|
5
|
+
import { hasProperty, leafChildRoute, notNullOrUndefined, routeSnapshotPathFull, willHaveDataProp } from '@theseam/ui-common/utils';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@angular/router";
|
|
8
8
|
export class TheSeamBreadcrumbsService {
|
|
9
9
|
constructor(_router, _activatedRoute) {
|
|
10
|
+
// this.crumbs$ = this._router.events.pipe(
|
|
11
|
+
// filter(event => event instanceof NavigationEnd),
|
|
12
|
+
// map(_ => this._activatedRoute),
|
|
13
|
+
// startWith(this._activatedRoute),
|
|
14
|
+
// activatedRoutesWithDataProperty(this.breadcrumbDataKey, true),
|
|
15
|
+
// switchMap(rwdArr => combineLatest(rwdArr.map(rwd => this._parseBreadcrumbData(rwd))))
|
|
16
|
+
// )
|
|
10
17
|
this._router = _router;
|
|
11
18
|
this._activatedRoute = _activatedRoute;
|
|
12
|
-
|
|
13
|
-
this.
|
|
19
|
+
// public readonly breadcrumbDataKey = 'breadcrumb'
|
|
20
|
+
this.dataProps = [
|
|
21
|
+
'breadcrumb',
|
|
22
|
+
'breadcrumbExtras',
|
|
23
|
+
];
|
|
24
|
+
this.crumbs$ = this._crumbsFromRoute();
|
|
14
25
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
26
|
+
_crumbsFromRoute() {
|
|
27
|
+
return this._router.events.pipe(filter((event) => event instanceof NavigationEnd), map(() => this._activatedRoute), startWith(this._activatedRoute), switchMap(activatedRoute => this._crumbsFromActivatedRoute(activatedRoute)));
|
|
28
|
+
}
|
|
29
|
+
_crumbsFromActivatedRoute(activatedRoute) {
|
|
30
|
+
return this._breadcrumbDatasFromRoot(activatedRoute).pipe(map(bcDatas => this._breadcrumbsFromData(bcDatas)));
|
|
31
|
+
}
|
|
32
|
+
_breadcrumbDatasFromRoot(activatedRoute) {
|
|
33
|
+
const bcDataObs = leafChildRoute(activatedRoute).pathFromRoot.map(r => this._breadcrumbData(r));
|
|
34
|
+
return combineLatest(bcDataObs).pipe(map(v => v.filter(notNullOrUndefined)), switchMap(v => this._applyBreadcrumbExtras(v)));
|
|
35
|
+
}
|
|
36
|
+
_breadcrumbData(activatedRoute) {
|
|
37
|
+
return activatedRoute.data.pipe(map(data => {
|
|
38
|
+
const bcData = {
|
|
39
|
+
activatedRoute: activatedRoute,
|
|
40
|
+
extrasPropRefs: []
|
|
41
|
+
};
|
|
42
|
+
let found = false;
|
|
43
|
+
for (const prop of this.dataProps) {
|
|
44
|
+
if (prop === 'breadcrumb' && !willHaveDataProp(activatedRoute, prop)) {
|
|
45
|
+
// Need to skip if the 'breadcrumb' data prop is not in the config,
|
|
46
|
+
// because we will get duplicates if the data 'breadcrumb' prop is
|
|
47
|
+
// inheritted from a parent route.
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (hasProperty(data, prop)) {
|
|
51
|
+
bcData[prop] = data[prop];
|
|
52
|
+
found = true;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (!found) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
bcData.extrasPropRefs = this._getBreadcrumbExtrasDataProps(bcData);
|
|
59
|
+
return bcData;
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
_applyBreadcrumbExtras(datas) {
|
|
63
|
+
const newDatas = [];
|
|
64
|
+
let pending = [];
|
|
65
|
+
for (const data of datas) {
|
|
66
|
+
if (!hasProperty(data, 'breadcrumb')) {
|
|
67
|
+
pending.push(data);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
newDatas.push(data);
|
|
71
|
+
pending = [];
|
|
22
72
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
73
|
+
if (newDatas.length === 0) {
|
|
74
|
+
return of([]);
|
|
75
|
+
}
|
|
76
|
+
if (pending.length > 0) {
|
|
77
|
+
// add extras
|
|
78
|
+
newDatas[newDatas.length - 1].extrasPropRefs = this._filterExtrasPropRefs([
|
|
79
|
+
...newDatas[newDatas.length - 1].extrasPropRefs,
|
|
80
|
+
...pending.map(p => p.extrasPropRefs).reduce((prev, curr) => [...prev, ...curr], [])
|
|
81
|
+
]);
|
|
82
|
+
}
|
|
83
|
+
return combineLatest(newDatas.map(data => {
|
|
84
|
+
if (data.extrasPropRefs.length === 0) {
|
|
85
|
+
return of(data);
|
|
86
|
+
}
|
|
87
|
+
return this._observeExtrasPropRefs(data.extrasPropRefs).pipe(map(extrasStr => {
|
|
88
|
+
data.breadcrumb = data.breadcrumb + ' ' + extrasStr;
|
|
89
|
+
return data;
|
|
90
|
+
}));
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
_observeExtrasPropRefs(propRefs) {
|
|
94
|
+
return combineLatest(propRefs.map(pf => pf.value)).pipe(map(values => values.map(v => `(${v})`).join(' ')));
|
|
95
|
+
}
|
|
96
|
+
_getBreadcrumbExtrasDataProps(data) {
|
|
97
|
+
if (!hasProperty(data, 'breadcrumbExtras')) {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
if (!hasProperty(data.breadcrumbExtras, 'dataProps')) {
|
|
101
|
+
return [];
|
|
102
|
+
}
|
|
103
|
+
const propRefs = data.breadcrumbExtras.dataProps.map(prop => {
|
|
104
|
+
return { prop: prop, value: this._getDataProp(data.activatedRoute, prop) };
|
|
105
|
+
});
|
|
106
|
+
return this._filterExtrasPropRefs(propRefs);
|
|
107
|
+
}
|
|
108
|
+
_filterExtrasPropRefs(propRefs) {
|
|
109
|
+
const seen = {};
|
|
110
|
+
return propRefs.filter(propRef => {
|
|
111
|
+
if (seen[propRef.prop]) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
seen[propRef.prop] = true;
|
|
115
|
+
return true;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
_getDataProp(activatedRoute, prop) {
|
|
119
|
+
if (activatedRoute.routeConfig !== null) {
|
|
120
|
+
if (willHaveDataProp(activatedRoute, prop)) {
|
|
121
|
+
return activatedRoute.data.pipe(map(d => d[prop]));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
let r = activatedRoute.parent;
|
|
125
|
+
while (r !== null) {
|
|
126
|
+
if (willHaveDataProp(r, prop)) {
|
|
127
|
+
return r.data.pipe(map(d => d[prop]));
|
|
128
|
+
}
|
|
129
|
+
r = r.parent;
|
|
130
|
+
}
|
|
131
|
+
throw Error(`DataProp '${prop}' not found.`);
|
|
132
|
+
}
|
|
133
|
+
_breadcrumbsFromData(datas) {
|
|
134
|
+
const breadcrumbs = [];
|
|
135
|
+
for (const data of datas) {
|
|
136
|
+
if (hasProperty(data, 'breadcrumb')) {
|
|
137
|
+
const breadcrumb = {
|
|
138
|
+
value: data.breadcrumb,
|
|
139
|
+
path: routeSnapshotPathFull(data.activatedRoute.snapshot),
|
|
140
|
+
route: data.activatedRoute
|
|
141
|
+
};
|
|
142
|
+
breadcrumbs.push(breadcrumb);
|
|
143
|
+
}
|
|
26
144
|
}
|
|
27
|
-
return
|
|
145
|
+
return breadcrumbs;
|
|
28
146
|
}
|
|
29
147
|
}
|
|
30
148
|
TheSeamBreadcrumbsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TheSeamBreadcrumbsService_Factory() { return new TheSeamBreadcrumbsService(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i1.ActivatedRoute)); }, token: TheSeamBreadcrumbsService, providedIn: "root" });
|
|
@@ -37,4 +155,4 @@ TheSeamBreadcrumbsService.ctorParameters = () => [
|
|
|
37
155
|
{ type: Router },
|
|
38
156
|
{ type: ActivatedRoute }
|
|
39
157
|
];
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9icmVhZGNydW1icy9icmVhZGNydW1icy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWxFLE9BQU8sRUFBRSwrQkFBK0IsRUFBMkIscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7O0FBTzFILE1BQU0sT0FBTyx5QkFBeUI7SUFNcEMsWUFDVSxPQUFlLEVBQ2YsZUFBK0I7UUFEL0IsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQU56QixzQkFBaUIsR0FBRyxZQUFZLENBQUE7UUFROUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUM5QixTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUMvQiwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEVBQzdELFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0RixDQUFBO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLGFBQXNDO1FBQ2pFLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDN0QsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQTtRQUNqQyxNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbEQsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFBO1FBRWQsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7WUFDbEMsS0FBSyxHQUFHLFVBQVUsQ0FBQTtTQUNuQjthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FDViwrRUFBK0U7a0JBQzdFLGlFQUFpRSxDQUNwRSxDQUFBO1NBQ0Y7UUFFRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUNuQyxDQUFDOzs7O1lBdENGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBVnVDLE1BQU07WUFBckMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBhY3RpdmF0ZWRSb3V0ZXNXaXRoRGF0YVByb3BlcnR5LCBJQWN0aXZhdGVkUm91dGVXaXRoRGF0YSwgcm91dGVTbmFwc2hvdFBhdGhGdWxsIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuXG5pbXBvcnQgeyBJVGhlU2VhbUJyZWFkY3J1bWIgfSBmcm9tICcuL2JyZWFkY3J1bWInXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRoZVNlYW1CcmVhZGNydW1ic1NlcnZpY2Uge1xuXG4gIHB1YmxpYyByZWFkb25seSBicmVhZGNydW1iRGF0YUtleSA9ICdicmVhZGNydW1iJ1xuXG4gIHB1YmxpYyBjcnVtYnMkOiBPYnNlcnZhYmxlPElUaGVTZWFtQnJlYWRjcnVtYltdPlxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHtcbiAgICB0aGlzLmNydW1icyQgPSB0aGlzLl9yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICAgIG1hcChfID0+IHRoaXMuX2FjdGl2YXRlZFJvdXRlKSxcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLl9hY3RpdmF0ZWRSb3V0ZSksXG4gICAgICBhY3RpdmF0ZWRSb3V0ZXNXaXRoRGF0YVByb3BlcnR5KHRoaXMuYnJlYWRjcnVtYkRhdGFLZXksIHRydWUpLFxuICAgICAgc3dpdGNoTWFwKHJ3ZEFyciA9PiBjb21iaW5lTGF0ZXN0KHJ3ZEFyci5tYXAocndkID0+IHRoaXMuX3BhcnNlQnJlYWRjcnVtYkRhdGEocndkKSkpKVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlQnJlYWRjcnVtYkRhdGEocm91dGVXaXRoRGF0YTogSUFjdGl2YXRlZFJvdXRlV2l0aERhdGEpOiBPYnNlcnZhYmxlPElUaGVTZWFtQnJlYWRjcnVtYj4ge1xuICAgIGNvbnN0IGNydW1iVmFsdWUgPSByb3V0ZVdpdGhEYXRhLmRhdGFbdGhpcy5icmVhZGNydW1iRGF0YUtleV1cbiAgICBjb25zdCByb3V0ZSA9IHJvdXRlV2l0aERhdGEucm91dGVcbiAgICBjb25zdCBwYXRoID0gcm91dGVTbmFwc2hvdFBhdGhGdWxsKHJvdXRlLnNuYXBzaG90KVxuICAgIGxldCB2YWx1ZSA9ICcnXG5cbiAgICBpZiAodHlwZW9mIGNydW1iVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IGNydW1iVmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnW1RoZVNlYW1CcmVhZGNydW1ic1NlcnZpY2VdIE9ubHkgc3RyaW5nIGJyZWFkY3J1bWJzIGFyZSBzdXBwb3J0ZWQgY3VycmVudGx5LiAnXG4gICAgICAgICsgJ1VzZSBhIHJlc29sdmVyIGlmIHRoZSB2YWx1ZSBuZWVkcyB0byBiZSBkeW5hbWljYWxseSBjYWxjdWxhdGVkLidcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gb2YoeyB2YWx1ZSwgcGF0aCwgcm91dGUgfSlcbiAgfVxuXG59XG4iXX0=
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9icmVhZGNydW1icy9icmVhZGNydW1icy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUE7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWxFLE9BQU8sRUFFTCxXQUFXLEVBR1gsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2pCLE1BQU0sMEJBQTBCLENBQUE7OztBQTBCakMsTUFBTSxPQUFPLHlCQUF5QjtJQVdwQyxZQUNtQixPQUFlLEVBQ2YsZUFBK0I7UUFFaEQsMkNBQTJDO1FBQzNDLHFEQUFxRDtRQUNyRCxvQ0FBb0M7UUFDcEMscUNBQXFDO1FBQ3JDLG1FQUFtRTtRQUNuRSwwRkFBMEY7UUFDMUYsSUFBSTtRQVRhLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFYbEQsbURBQW1EO1FBRWxDLGNBQVMsR0FBcUQ7WUFDN0UsWUFBWTtZQUNaLGtCQUFrQjtTQUNuQixDQUFBO1FBZ0JDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7SUFDeEMsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDN0IsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUEwQixFQUFFLENBQUMsS0FBSyxZQUFZLGFBQWEsQ0FBQyxFQUN6RSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUMvQixTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FDNUUsQ0FBQTtJQUNILENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxjQUE4QjtRQUM5RCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQ3ZELEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUNuRCxDQUFBO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUFDLGNBQThCO1FBQzdELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQy9GLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQ3RDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvQyxDQUFBO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxjQUE4QjtRQUNwRCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVCxNQUFNLE1BQU0sR0FBbUI7Z0JBQzdCLGNBQWMsRUFBRSxjQUFjO2dCQUM5QixjQUFjLEVBQUUsRUFBRTthQUNuQixDQUFBO1lBRUQsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFBO1lBQ2pCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDakMsSUFBSSxJQUFJLEtBQUssWUFBWSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNwRSxtRUFBbUU7b0JBQ25FLGtFQUFrRTtvQkFDbEUsa0NBQWtDO29CQUNsQyxTQUFRO2lCQUNUO2dCQUVELElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDekIsS0FBSyxHQUFHLElBQUksQ0FBQTtpQkFDYjthQUNGO1lBRUQsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPLElBQUksQ0FBQTthQUNaO1lBRUQsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUE7WUFFbEUsT0FBTyxNQUFNLENBQUE7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEtBQXVCO1FBQ3BELE1BQU0sUUFBUSxHQUFxQixFQUFFLENBQUE7UUFFckMsSUFBSSxPQUFPLEdBQXFCLEVBQUUsQ0FBQTtRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDbEIsU0FBUTthQUNUO1lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUVuQixPQUFPLEdBQUcsRUFBRSxDQUFBO1NBQ2I7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQ2Q7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLGFBQWE7WUFDYixRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO2dCQUN4RSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWM7Z0JBQy9DLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3ZGLENBQUMsQ0FBQTtTQUNIO1FBRUQsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDaEI7WUFFRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUMxRCxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUE7Z0JBQ25ELE9BQU8sSUFBSSxDQUFBO1lBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsUUFBeUI7UUFDdEQsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbkQsQ0FBQTtJQUNILENBQUM7SUFFTyw2QkFBNkIsQ0FBQyxJQUFvQjtRQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO1lBQzFDLE9BQU8sRUFBRSxDQUFBO1NBQ1Y7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsRUFBRTtZQUNwRCxPQUFPLEVBQUUsQ0FBQTtTQUNWO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUQsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFBO1FBQzVFLENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFFBQXlCO1FBQ3JELE1BQU0sSUFBSSxHQUErQixFQUFHLENBQUE7UUFDNUMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxLQUFLLENBQUE7YUFDYjtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFBO1lBQ3pCLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU8sWUFBWSxDQUFDLGNBQThCLEVBQUUsSUFBWTtRQUMvRCxJQUFJLGNBQWMsQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO1lBQ3ZDLElBQUksZ0JBQWdCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUMxQyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDbkQ7U0FDRjtRQUVELElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUE7UUFDN0IsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2pCLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUM3QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDdEM7WUFFRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtTQUNiO1FBRUQsTUFBTSxLQUFLLENBQUMsYUFBYSxJQUFJLGNBQWMsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxLQUF1QjtRQUNsRCxNQUFNLFdBQVcsR0FBd0IsRUFBRSxDQUFBO1FBRTNDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ3hCLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDbkMsTUFBTSxVQUFVLEdBQXNCO29CQUNwQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQ3RCLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztvQkFDekQsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjO2lCQUMzQixDQUFBO2dCQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7YUFDN0I7U0FDRjtRQUVELE9BQU8sV0FBVyxDQUFBO0lBQ3BCLENBQUM7Ozs7WUFsTUYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUF0Q3VDLE1BQU07WUFBckMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7XG4gIGFjdGl2YXRlZFJvdXRlc1dpdGhEYXRhUHJvcGVydHksXG4gIGhhc1Byb3BlcnR5LFxuICBJQWN0aXZhdGVkUm91dGVXaXRoRGF0YSxcbiAgaXNFbXB0eVVybFJvdXRlLFxuICBsZWFmQ2hpbGRSb3V0ZSxcbiAgbm90TnVsbE9yVW5kZWZpbmVkLFxuICByb3V0ZVNuYXBzaG90UGF0aEZ1bGwsXG4gIHdpbGxIYXZlRGF0YVByb3Bcbn0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuXG5pbXBvcnQgeyBUaGVTZWFtQnJlYWRjcnVtYiB9IGZyb20gJy4vYnJlYWRjcnVtYidcblxuaW50ZXJmYWNlIEJyZWFkY3J1bWJEYXRhRXh0cmFzIHtcbiAgZGF0YVByb3BzPzogc3RyaW5nW11cbn1cblxuaW50ZXJmYWNlIEV4dHJhc1Byb3BSZWYge1xuICBwcm9wOiBzdHJpbmdcbiAgdmFsdWU6IE9ic2VydmFibGU8c3RyaW5nPlxufVxuXG5pbnRlcmZhY2UgQnJlYWRjcnVtYkRhdGEge1xuICBicmVhZGNydW1iPzogc3RyaW5nXG4gIGJyZWFkY3J1bWJFeHRyYXM/OiBCcmVhZGNydW1iRGF0YUV4dHJhc1xuXG4gIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICBleHRyYXNQcm9wUmVmczogRXh0cmFzUHJvcFJlZltdXG59XG5cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUaGVTZWFtQnJlYWRjcnVtYnNTZXJ2aWNlIHtcblxuICAvLyBwdWJsaWMgcmVhZG9ubHkgYnJlYWRjcnVtYkRhdGFLZXkgPSAnYnJlYWRjcnVtYidcblxuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFQcm9wczogKGtleW9mIE9taXQ8QnJlYWRjcnVtYkRhdGEsICdhY3RpdmF0ZWRSb3V0ZSc+KVtdID0gW1xuICAgICdicmVhZGNydW1iJyxcbiAgICAnYnJlYWRjcnVtYkV4dHJhcycsXG4gIF1cblxuICBwdWJsaWMgcmVhZG9ubHkgY3J1bWJzJDogT2JzZXJ2YWJsZTxUaGVTZWFtQnJlYWRjcnVtYltdPlxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHtcbiAgICAvLyB0aGlzLmNydW1icyQgPSB0aGlzLl9yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgLy8gICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICAvLyAgIG1hcChfID0+IHRoaXMuX2FjdGl2YXRlZFJvdXRlKSxcbiAgICAvLyAgIHN0YXJ0V2l0aCh0aGlzLl9hY3RpdmF0ZWRSb3V0ZSksXG4gICAgLy8gICBhY3RpdmF0ZWRSb3V0ZXNXaXRoRGF0YVByb3BlcnR5KHRoaXMuYnJlYWRjcnVtYkRhdGFLZXksIHRydWUpLFxuICAgIC8vICAgc3dpdGNoTWFwKHJ3ZEFyciA9PiBjb21iaW5lTGF0ZXN0KHJ3ZEFyci5tYXAocndkID0+IHRoaXMuX3BhcnNlQnJlYWRjcnVtYkRhdGEocndkKSkpKVxuICAgIC8vIClcblxuICAgIHRoaXMuY3J1bWJzJCA9IHRoaXMuX2NydW1ic0Zyb21Sb3V0ZSgpXG4gIH1cblxuICBwcml2YXRlIF9jcnVtYnNGcm9tUm91dGUoKTogT2JzZXJ2YWJsZTxUaGVTZWFtQnJlYWRjcnVtYltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlci5ldmVudHMucGlwZShcbiAgICAgIGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICBtYXAoKCkgPT4gdGhpcy5fYWN0aXZhdGVkUm91dGUpLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuX2FjdGl2YXRlZFJvdXRlKSxcbiAgICAgIHN3aXRjaE1hcChhY3RpdmF0ZWRSb3V0ZSA9PiB0aGlzLl9jcnVtYnNGcm9tQWN0aXZhdGVkUm91dGUoYWN0aXZhdGVkUm91dGUpKVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgX2NydW1ic0Zyb21BY3RpdmF0ZWRSb3V0ZShhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpOiBPYnNlcnZhYmxlPFRoZVNlYW1CcmVhZGNydW1iW10+IHtcbiAgICByZXR1cm4gdGhpcy5fYnJlYWRjcnVtYkRhdGFzRnJvbVJvb3QoYWN0aXZhdGVkUm91dGUpLnBpcGUoXG4gICAgICBtYXAoYmNEYXRhcyA9PiB0aGlzLl9icmVhZGNydW1ic0Zyb21EYXRhKGJjRGF0YXMpKVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgX2JyZWFkY3J1bWJEYXRhc0Zyb21Sb290KGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IE9ic2VydmFibGU8QnJlYWRjcnVtYkRhdGFbXT4ge1xuICAgIGNvbnN0IGJjRGF0YU9icyA9IGxlYWZDaGlsZFJvdXRlKGFjdGl2YXRlZFJvdXRlKS5wYXRoRnJvbVJvb3QubWFwKHIgPT4gdGhpcy5fYnJlYWRjcnVtYkRhdGEocikpXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoYmNEYXRhT2JzKS5waXBlKFxuICAgICAgbWFwKHYgPT4gdi5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKSksXG4gICAgICBzd2l0Y2hNYXAodiA9PiB0aGlzLl9hcHBseUJyZWFkY3J1bWJFeHRyYXModikpLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgX2JyZWFkY3J1bWJEYXRhKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IE9ic2VydmFibGU8QnJlYWRjcnVtYkRhdGEgfCBudWxsPiB7XG4gICAgcmV0dXJuIGFjdGl2YXRlZFJvdXRlLmRhdGEucGlwZShcbiAgICAgIG1hcChkYXRhID0+IHtcbiAgICAgICAgY29uc3QgYmNEYXRhOiBCcmVhZGNydW1iRGF0YSA9IHtcbiAgICAgICAgICBhY3RpdmF0ZWRSb3V0ZTogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgZXh0cmFzUHJvcFJlZnM6IFtdXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5kYXRhUHJvcHMpIHtcbiAgICAgICAgICBpZiAocHJvcCA9PT0gJ2JyZWFkY3J1bWInICYmICF3aWxsSGF2ZURhdGFQcm9wKGFjdGl2YXRlZFJvdXRlLCBwcm9wKSkge1xuICAgICAgICAgICAgLy8gTmVlZCB0byBza2lwIGlmIHRoZSAnYnJlYWRjcnVtYicgZGF0YSBwcm9wIGlzIG5vdCBpbiB0aGUgY29uZmlnLFxuICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSB3aWxsIGdldCBkdXBsaWNhdGVzIGlmIHRoZSBkYXRhICdicmVhZGNydW1iJyBwcm9wIGlzXG4gICAgICAgICAgICAvLyBpbmhlcml0dGVkIGZyb20gYSBwYXJlbnQgcm91dGUuXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChoYXNQcm9wZXJ0eShkYXRhLCBwcm9wKSkge1xuICAgICAgICAgICAgYmNEYXRhW3Byb3BdID0gZGF0YVtwcm9wXVxuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cblxuICAgICAgICBiY0RhdGEuZXh0cmFzUHJvcFJlZnMgPSB0aGlzLl9nZXRCcmVhZGNydW1iRXh0cmFzRGF0YVByb3BzKGJjRGF0YSlcblxuICAgICAgICByZXR1cm4gYmNEYXRhXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5QnJlYWRjcnVtYkV4dHJhcyhkYXRhczogQnJlYWRjcnVtYkRhdGFbXSk6IE9ic2VydmFibGU8QnJlYWRjcnVtYkRhdGFbXT4ge1xuICAgIGNvbnN0IG5ld0RhdGFzOiBCcmVhZGNydW1iRGF0YVtdID0gW11cblxuICAgIGxldCBwZW5kaW5nOiBCcmVhZGNydW1iRGF0YVtdID0gW11cbiAgICBmb3IgKGNvbnN0IGRhdGEgb2YgZGF0YXMpIHtcbiAgICAgIGlmICghaGFzUHJvcGVydHkoZGF0YSwgJ2JyZWFkY3J1bWInKSkge1xuICAgICAgICBwZW5kaW5nLnB1c2goZGF0YSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgbmV3RGF0YXMucHVzaChkYXRhKVxuXG4gICAgICBwZW5kaW5nID0gW11cbiAgICB9XG5cbiAgICBpZiAobmV3RGF0YXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoW10pXG4gICAgfVxuXG4gICAgaWYgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgLy8gYWRkIGV4dHJhc1xuICAgICAgbmV3RGF0YXNbbmV3RGF0YXMubGVuZ3RoIC0gMV0uZXh0cmFzUHJvcFJlZnMgPSB0aGlzLl9maWx0ZXJFeHRyYXNQcm9wUmVmcyhbXG4gICAgICAgIC4uLm5ld0RhdGFzW25ld0RhdGFzLmxlbmd0aCAtIDFdLmV4dHJhc1Byb3BSZWZzLFxuICAgICAgICAuLi5wZW5kaW5nLm1hcChwID0+IHAuZXh0cmFzUHJvcFJlZnMpLnJlZHVjZSgocHJldiwgY3VycikgPT4gWyAuLi5wcmV2LCAuLi5jdXJyIF0sIFtdKVxuICAgICAgXSlcbiAgICB9XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChuZXdEYXRhcy5tYXAoZGF0YSA9PiB7XG4gICAgICBpZiAoZGF0YS5leHRyYXNQcm9wUmVmcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG9mKGRhdGEpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9vYnNlcnZlRXh0cmFzUHJvcFJlZnMoZGF0YS5leHRyYXNQcm9wUmVmcykucGlwZShcbiAgICAgICAgbWFwKGV4dHJhc1N0ciA9PiB7XG4gICAgICAgICAgZGF0YS5icmVhZGNydW1iID0gZGF0YS5icmVhZGNydW1iICsgJyAnICsgZXh0cmFzU3RyXG4gICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9KSlcbiAgfVxuXG4gIHByaXZhdGUgX29ic2VydmVFeHRyYXNQcm9wUmVmcyhwcm9wUmVmczogRXh0cmFzUHJvcFJlZltdKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChwcm9wUmVmcy5tYXAocGYgPT4gcGYudmFsdWUpKS5waXBlKFxuICAgICAgbWFwKHZhbHVlcyA9PiB2YWx1ZXMubWFwKHYgPT4gYCgke3Z9KWApLmpvaW4oJyAnKSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIF9nZXRCcmVhZGNydW1iRXh0cmFzRGF0YVByb3BzKGRhdGE6IEJyZWFkY3J1bWJEYXRhKTogRXh0cmFzUHJvcFJlZltdIHtcbiAgICBpZiAoIWhhc1Byb3BlcnR5KGRhdGEsICdicmVhZGNydW1iRXh0cmFzJykpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIGlmICghaGFzUHJvcGVydHkoZGF0YS5icmVhZGNydW1iRXh0cmFzLCAnZGF0YVByb3BzJykpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIGNvbnN0IHByb3BSZWZzID0gZGF0YS5icmVhZGNydW1iRXh0cmFzLmRhdGFQcm9wcy5tYXAocHJvcCA9PiB7XG4gICAgICByZXR1cm4geyBwcm9wOiBwcm9wLCB2YWx1ZTogdGhpcy5fZ2V0RGF0YVByb3AoZGF0YS5hY3RpdmF0ZWRSb3V0ZSwgcHJvcCkgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyRXh0cmFzUHJvcFJlZnMocHJvcFJlZnMpXG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJFeHRyYXNQcm9wUmVmcyhwcm9wUmVmczogRXh0cmFzUHJvcFJlZltdKTogRXh0cmFzUHJvcFJlZltdIHtcbiAgICBjb25zdCBzZWVuOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHsgfVxuICAgIHJldHVybiBwcm9wUmVmcy5maWx0ZXIocHJvcFJlZiA9PiB7XG4gICAgICBpZiAoc2Vlbltwcm9wUmVmLnByb3BdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgc2Vlbltwcm9wUmVmLnByb3BdID0gdHJ1ZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RGF0YVByb3AoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcm9wOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmIChhY3RpdmF0ZWRSb3V0ZS5yb3V0ZUNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgaWYgKHdpbGxIYXZlRGF0YVByb3AoYWN0aXZhdGVkUm91dGUsIHByb3ApKSB7XG4gICAgICAgIHJldHVybiBhY3RpdmF0ZWRSb3V0ZS5kYXRhLnBpcGUobWFwKGQgPT4gZFtwcm9wXSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHIgPSBhY3RpdmF0ZWRSb3V0ZS5wYXJlbnRcbiAgICB3aGlsZSAociAhPT0gbnVsbCkge1xuICAgICAgaWYgKHdpbGxIYXZlRGF0YVByb3AociwgcHJvcCkpIHtcbiAgICAgICAgcmV0dXJuIHIuZGF0YS5waXBlKG1hcChkID0+IGRbcHJvcF0pKVxuICAgICAgfVxuXG4gICAgICByID0gci5wYXJlbnRcbiAgICB9XG5cbiAgICB0aHJvdyBFcnJvcihgRGF0YVByb3AgJyR7cHJvcH0nIG5vdCBmb3VuZC5gKVxuICB9XG5cbiAgcHJpdmF0ZSBfYnJlYWRjcnVtYnNGcm9tRGF0YShkYXRhczogQnJlYWRjcnVtYkRhdGFbXSk6IFRoZVNlYW1CcmVhZGNydW1iW10ge1xuICAgIGNvbnN0IGJyZWFkY3J1bWJzOiBUaGVTZWFtQnJlYWRjcnVtYltdID0gW11cblxuICAgIGZvciAoY29uc3QgZGF0YSBvZiBkYXRhcykge1xuICAgICAgaWYgKGhhc1Byb3BlcnR5KGRhdGEsICdicmVhZGNydW1iJykpIHtcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYjogVGhlU2VhbUJyZWFkY3J1bWIgPSB7XG4gICAgICAgICAgdmFsdWU6IGRhdGEuYnJlYWRjcnVtYixcbiAgICAgICAgICBwYXRoOiByb3V0ZVNuYXBzaG90UGF0aEZ1bGwoZGF0YS5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdCksXG4gICAgICAgICAgcm91dGU6IGRhdGEuYWN0aXZhdGVkUm91dGVcbiAgICAgICAgfVxuICAgICAgICBicmVhZGNydW1icy5wdXNoKGJyZWFkY3J1bWIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyZWFkY3J1bWJzXG4gIH1cblxuICAvLyBwcml2YXRlIF9wYXJzZUJyZWFkY3J1bWJEYXRhKHJvdXRlV2l0aERhdGE6IElBY3RpdmF0ZWRSb3V0ZVdpdGhEYXRhKTogT2JzZXJ2YWJsZTxUaGVTZWFtQnJlYWRjcnVtYj4ge1xuICAvLyAgIGNvbnN0IGNydW1iVmFsdWUgPSByb3V0ZVdpdGhEYXRhLmRhdGFbdGhpcy5icmVhZGNydW1iRGF0YUtleV1cbiAgLy8gICBjb25zdCByb3V0ZSA9IHJvdXRlV2l0aERhdGEucm91dGVcbiAgLy8gICBjb25zdCBwYXRoID0gcm91dGVTbmFwc2hvdFBhdGhGdWxsKHJvdXRlLnNuYXBzaG90KVxuICAvLyAgIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gICBpZiAodHlwZW9mIGNydW1iVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gIC8vICAgICB2YWx1ZSA9IGNydW1iVmFsdWVcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gIC8vICAgICAgIGNvbnNvbGUud2FybihcbiAgLy8gICAgICAgICAnW1RoZVNlYW1CcmVhZGNydW1ic1NlcnZpY2VdIE9ubHkgc3RyaW5nIGJyZWFkY3J1bWJzIGFyZSBzdXBwb3J0ZWQgY3VycmVudGx5LiAnXG4gIC8vICAgICAgICAgKyAnVXNlIGEgcmVzb2x2ZXIgaWYgdGhlIHZhbHVlIG5lZWRzIHRvIGJlIGR5bmFtaWNhbGx5IGNhbGN1bGF0ZWQuJ1xuICAvLyAgICAgICApXG4gIC8vICAgICB9XG4gIC8vICAgfVxuXG4gIC8vICAgcmV0dXJuIG9mKHsgdmFsdWUsIHBhdGgsIHJvdXRlIH0pXG4gIC8vIH1cblxufVxuIl19
|
|
@@ -4,4 +4,4 @@ export const THESEAM_DATA_EXPORTER = new InjectionToken('TheSeamDataExporter');
|
|
|
4
4
|
export function exportOperator(exportFn) {
|
|
5
5
|
return (source$) => source$.pipe(switchMap(exportFn));
|
|
6
6
|
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhLWV4cG9ydGVyL2RhdGEtZXhwb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFtQzFDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFnQixxQkFBcUIsQ0FBQyxDQUFBO0FBRTdGLE1BQU0sVUFBVSxjQUFjLENBQUksUUFBK0I7SUFDL0QsT0FBTyxDQUFDLE9BQXdCLEVBQUUsRUFBRSxDQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBJY29uUHJvcCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSdcblxuZXhwb3J0IHR5cGUgSURhdGFFeHBvcnRlckZ1bmN0aW9uID0gPFQ+KGRhdGE6IFRbXSkgPT4gT2JzZXJ2YWJsZTxUW10+XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFFeHBvcnRlciB7XG4gIC8qKlxuICAgKiBOYW1lIHRvIGlkZW50aWZ5IHRoZSBleHBvcnRlci5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBMYWJlbCB0byB1c2UgZm9yIGV4cG9ydGVyIGluIHVzZXIgdmlzaWJsZSB0ZXh0LlxuICAgKlxuICAgKiBkZWZhdWx0OiBgbmFtZWBcbiAgICovXG4gIGxhYmVsPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEljb24gdG8gcmVwcmVzZW50IGV4cG9ydGVyLlxuICAgKi9cbiAgaWNvbj86IHN0cmluZyB8IEljb25Qcm9wXG5cbiAgLyoqXG4gICAqIFBhc3MgdGhlIHJvd3MgZGlyZWN0bHkgdG8gdGhlIGV4cG9ydCBmdW5jdGlvbiB3aXRob3V0IGFueSBtYXBwaW5nLlxuICAgKi9cbiAgc2tpcERhdGFNYXBwaW5nPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdGhlIGRhdGEgYmFzZWQgb24gdGhlIGRhdGEgdG8gc29tZSBmb3JtYXQuXG4gICAqL1xuICBleHBvcnQ8VD4oZGF0YTogVFtdKTogT2JzZXJ2YWJsZTxib29sZWFuPlxufVxuXG5leHBvcnQgY29uc3QgVEhFU0VBTV9EQVRBX0VYUE9SVEVSID0gbmV3IEluamVjdGlvblRva2VuPElEYXRhRXhwb3J0ZXI+KCdUaGVTZWFtRGF0YUV4cG9ydGVyJylcblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydE9wZXJhdG9yPFQ+KGV4cG9ydEZuOiBJRGF0YUV4cG9ydGVyRnVuY3Rpb24pIHtcbiAgcmV0dXJuIChzb3VyY2UkOiBPYnNlcnZhYmxlPFRbXT4pID0+XG4gICAgc291cmNlJC5waXBlKHN3aXRjaE1hcChleHBvcnRGbikpXG59XG4iXX0=
|
|
@@ -14,6 +14,7 @@ import { isDataSource } from '@angular/cdk/collections';
|
|
|
14
14
|
import { isObservable } from 'rxjs';
|
|
15
15
|
import { DatatableActionMenuComponent } from '../datatable-action-menu/datatable-action-menu.component';
|
|
16
16
|
import { DatatableColumnComponent } from '../datatable-column/datatable-column.component';
|
|
17
|
+
import { TheSeamDatatableFooterDirective } from '../datatable-footer/datatable-footer.directive';
|
|
17
18
|
import { DatatableMenuBarComponent } from '../datatable-menu-bar/datatable-menu-bar.component';
|
|
18
19
|
import { TheSeamDatatableRowDetailDirective } from '../datatable-row-detail/datatable-row-detail.directive';
|
|
19
20
|
import { DatatableRowActionItemDirective } from '../directives/datatable-row-action-item.directive';
|
|
@@ -434,7 +435,7 @@ export class DatatableComponent {
|
|
|
434
435
|
DatatableComponent.decorators = [
|
|
435
436
|
{ type: Component, args: [{
|
|
436
437
|
selector: 'seam-datatable',
|
|
437
|
-
template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n
|
|
438
|
+
template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"sort.emit($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"reorder.emit($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template #headerTpl ngx-datatable-header-template\n let-column=\"column\" let-sortFn=\"sortFn\">\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <strong *ngIf=\"column.sortable\" class=\"datatable-sort-target draggable\" (click)=\"sortFn()\">{{column.name}}</strong>\n <div class=\"datatable-column-header-separator\"></div>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n",
|
|
438
439
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
439
440
|
animations: [
|
|
440
441
|
trigger('slideDown', [
|
|
@@ -449,7 +450,7 @@ DatatableComponent.decorators = [
|
|
|
449
450
|
])
|
|
450
451
|
],
|
|
451
452
|
providers: [_THESEAM_DATATABLE, DatatableColumnChangesService, _THESEAM_DATATABLE_ACCESSOR],
|
|
452
|
-
styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute;top:0;left:0;right:0;bottom:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute
|
|
453
|
+
styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute;top:0;left:0;right:0;bottom:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}"]
|
|
453
454
|
},] }
|
|
454
455
|
];
|
|
455
456
|
DatatableComponent.ctorParameters = () => [
|
|
@@ -514,6 +515,7 @@ DatatableComponent.propDecorators = {
|
|
|
514
515
|
actionMenu: [{ type: ContentChild, args: [DatatableActionMenuComponent, { static: true },] }],
|
|
515
516
|
rowActionItem: [{ type: ContentChild, args: [DatatableRowActionItemDirective, { static: true },] }],
|
|
516
517
|
rowDetail: [{ type: ContentChild, args: [TheSeamDatatableRowDetailDirective, { static: true },] }],
|
|
518
|
+
footer: [{ type: ContentChild, args: [TheSeamDatatableFooterDirective, { static: true },] }],
|
|
517
519
|
menuBarComponent: [{ type: ContentChild, args: [DatatableMenuBarComponent,] }],
|
|
518
520
|
ngxDatatable: [{ type: ViewChild, args: [NgxDatatableComponent,] }],
|
|
519
521
|
ngxDatatableElement: [{ type: ViewChild, args: [NgxDatatableComponent, { read: ElementRef },] }],
|
|
@@ -581,4 +583,4 @@ __decorate([
|
|
|
581
583
|
__decorate([
|
|
582
584
|
InputBoolean()
|
|
583
585
|
], DatatableComponent.prototype, "scrollbarH", void 0);
|
|
584
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFDYSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFDbkYsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFDM0QsZUFBZSxFQUFxQixNQUFNLEVBQTBCLFNBQVMsRUFDOUUsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2xHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBRXZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzNDLDJCQUEyQixFQUMzQixpQkFBaUIsRUFDakIsUUFBUSxFQUVSLGtCQUFrQixFQUVuQixNQUFNLHVCQUF1QixDQUFBO0FBRzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFnQyxNQUFNLGlDQUFpQyxDQUFBO0FBRTNILE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUUxRSxPQUFPLEVBQWdDLFlBQVksRUFBYSxNQUFNLDBCQUEwQixDQUFBO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDbkMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMERBQTBELENBQUE7QUFDdkcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUE7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUE7QUFDOUYsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sd0RBQXdELENBQUE7QUFDM0csT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sbURBQW1ELENBQUE7QUFNbkcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOENBQThDLENBQUE7QUFDNUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkNBQTJDLENBQUE7QUFDdkYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFFekUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWlDO0lBQ2xFLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO1NBQ3RCO0tBQ0Y7SUFDRCxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUM1QixDQUFDO0FBNkJEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQWMsY0FBYyxDQUFDLENBQUE7QUFFaEYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQVE7SUFDckMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixpREFBaUQ7SUFDakQsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztDQUNsRCxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQVE7SUFDOUMsT0FBTyxFQUFFLDBCQUEwQjtJQUNuQyxpREFBaUQ7SUFDakQsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztDQUNsRCxDQUFBO0FBRUQsZ0ZBQWdGO0FBQ2hGLGdEQUFnRDtBQW9CaEQsTUFBTSxPQUFPLGtCQUFrQjtJQTZNN0IsWUFDbUIscUJBQW9ELEVBQ3BELFFBQXlCLEVBQ3pCLFlBQXlDO1FBRTFELG1EQUFtRDtRQUNuRCx1SUFBdUk7UUFDdkksSUFBSTtRQU5hLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBK0I7UUFDcEQsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQTZCO1FBekw1RCxrQkFBYSxHQUFHLGFBQWEsQ0FBQTtRQUM3QixtQkFBYyxHQUFHLGNBQWMsQ0FBQTtRQUMvQixjQUFTLEdBQUcsU0FBUyxDQUFBO1FBRUosbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO1FBQzlCLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFBO1FBQ3hELHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUFtRCxTQUFTLENBQUMsQ0FBQTtRQUNyRyx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBc0MsU0FBUyxDQUFDLENBQUE7UUFXakcsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBNEIsU0FBUyxDQUFDLENBQUE7UUFVM0UsYUFBUSxHQUFHLElBQUksZUFBZSxDQUEyQixFQUFFLENBQUMsQ0FBQTtRQUs1RCxVQUFLLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUE7UUFJckMsZUFBVSxHQUFrQyxVQUFVLENBQUMsS0FBSyxDQUFBO1FBSzVELGFBQVEsR0FBNkIsRUFBRSxDQUFBO1FBRXZCLG1CQUFjLEdBQVksS0FBSyxDQUFBO1FBQy9CLG9CQUFlLEdBQVksS0FBSyxDQUFBO1FBQ2hDLHNCQUFpQixHQUFZLEtBQUssQ0FBQTtRQUdsQyxVQUFLLEdBQVcsQ0FBQyxDQUFBO1FBQ2pCLFdBQU0sR0FBVyxDQUFDLENBQUE7UUFFbEIscUJBQWdCLEdBQVksS0FBSyxDQUFBO1FBSWpDLGdCQUFXLEdBQVksSUFBSSxDQUFBO1FBQzNCLGdCQUFXLEdBQVksS0FBSyxDQUFBO1FBRTVDLGFBQVEsR0FBZ0MsUUFBUSxDQUFDLE1BQU0sQ0FBQTtRQU9oRSxXQUFNLEdBQWUsRUFBRSxDQUFBO1FBRWQsZUFBVSxHQUEyQjtZQUM1QyxhQUFhLEVBQUUsbUJBQW1CO1lBQ2xDLGNBQWMsRUFBRSxxQkFBcUI7WUFDckMsY0FBYyxFQUFFLHFCQUFxQjtZQUNyQyxlQUFlLEVBQUUsc0JBQXNCO1lBQ3ZDLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQyxDQUFBO1FBRVEsYUFBUSxHQUEyQjtZQUMxQywwQ0FBMEM7WUFDMUMseUJBQXlCO1lBQ3pCLFlBQVksRUFBRSxrQkFBa0I7WUFFaEMsdUJBQXVCO1lBQ3ZCLFlBQVksRUFBRSxPQUFPO1lBRXJCLDBCQUEwQjtZQUMxQixlQUFlLEVBQUUsVUFBVTtTQUM1QixDQUFBO1FBRVEsZ0JBQVcsR0FBeUMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFPbkQsMEJBQXFCLEdBQVksS0FBSyxDQUFBO1FBSXRDLHdCQUFtQixHQUFZLEtBQUssQ0FBQTtRQUlwQyxlQUFVLEdBQVksS0FBSyxDQUFBO1FBQzVCLGtCQUFhLEdBQVcsRUFBRSxDQUFBO1FBQ3pDLG9CQUFlLEdBQThCLEtBQUssQ0FBQTtRQUVsQyxtQkFBYyxHQUFZLElBQUksQ0FBQTtRQUUvQixpQkFBWSxHQUFXLEVBQUUsQ0FBQTtRQUN6QixjQUFTLEdBQVcsRUFBRSxDQUFBO1FBQ3RCLGlCQUFZLEdBQVcsRUFBRSxDQUFBO1FBRXhCLGVBQVUsR0FBWSxJQUFJLENBQUE7UUFDMUIsZUFBVSxHQUFZLElBQUksQ0FBQTtRQVVoQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUNoQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUNsQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUNoQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQTtRQUNwQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUE7UUFDMUMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUE7UUFDakMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUE7UUFDaEMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLENBQTZELEtBQUssQ0FBQyxDQUFBO1FBQ3RHLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFBO1FBRXBDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUE7UUFDL0Msd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQTtRQW9DN0QsbUJBQWMsR0FBcUQsRUFBRSxDQUFBO1FBQ3JFLG1CQUFjLEdBQXFELEVBQUUsQ0FBQTtRQU9yRSxpQ0FBNEIsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFBO1FBV3ZELE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBOEIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQzlFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3RCLHdFQUF3RTtZQUN4RSxpRUFBaUU7WUFDakUsVUFBVTtZQUNWLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTztnQkFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztnQkFDckQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDWixDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUNYLENBQ0YsQ0FBQTtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXJGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3ZDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDcEMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3BDLENBQUE7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDMUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDdkQsQ0FBQTtRQUVELG1EQUFtRDtRQUNuRCxXQUFXO1FBQ1gsNkJBQTZCO1FBQzdCLHNDQUFzQztRQUN0QywyQ0FBMkM7UUFDM0MsVUFBVTtRQUNWLDJFQUEyRTtRQUMzRSxTQUFTO1FBQ1QsTUFBTTtRQUVOLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDdkMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3JCLHdDQUF3QztZQUN4QyxJQUFJLFVBQTZCLENBQUE7WUFFakMsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzVCLDZCQUE2QjtnQkFDN0IsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFRLENBQUE7YUFDN0M7aUJBQU0sSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ25DLDZCQUE2QjtnQkFDN0IsVUFBVSxHQUFHLFVBQWlCLENBQUE7YUFDL0I7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNwQyx3QkFBd0I7Z0JBQ3hCLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUE7YUFDNUI7aUJBQU07Z0JBQ0wsZ0NBQWdDO2dCQUNoQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQTtnQkFDcEMsMkNBQTJDO2FBQzlDO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDM0IsNkNBQTZDO2dCQUM3QyxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJO2dCQUN6Qyx1Q0FBdUM7Z0JBQ3ZDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUVqRSxDQUFDLENBQ0gsQ0FBQTtnQkFFRCwwQ0FBMEM7Z0JBQzFDLHlDQUF5QztnQkFDekMsd0VBQXdFO2dCQUN4RSxrREFBa0Q7Z0JBQ2xELElBQUk7YUFDTDtZQUVELE9BQU8sVUFBVSxDQUFDLElBQUk7WUFDcEIsc0NBQXNDO1lBQ3RDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQy9CLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO1FBRUQsMkRBQTJEO1FBRTNELDRCQUE0QjtRQUM1QixhQUFhO1FBQ2IscUNBQXFDO1FBQ3JDLDJDQUEyQztRQUMzQywyQ0FBMkM7UUFDM0Msb0RBQW9EO1FBQ3BELDRCQUE0QjtRQUM1Qiw0QkFBNEI7UUFDNUIsdUZBQXVGO1FBQ3ZGLFFBQVE7UUFDUixnREFBZ0Q7UUFDaEQseUJBQXlCO1FBQ3pCLDBEQUEwRDtRQUUxRCxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUF0UkQsSUFBSSxPQUFPLEtBQW9CLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBSWxFLElBQ0ksY0FBYyxLQUFnQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUNyRixJQUFJLGNBQWMsQ0FBQyxLQUFnQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFLdEcsSUFDSSxPQUFPLEtBQStCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBQ3RFLElBQUksT0FBTyxDQUFDLEtBQStCO1FBQ3pDLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFHRCxJQUNJLElBQUksS0FBWSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUM3QyxJQUFJLElBQUksQ0FBQyxLQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQTZCdkQsSUFDSSxLQUFLLEtBQWlCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFDO0lBQzVGLElBQUksS0FBSyxDQUFDLEtBQWlCO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ25FLENBQUM7SUFvREQsSUFDSSxVQUFVLENBQUMsS0FBaUQ7UUFDOUQsSUFBSSxLQUFLLFlBQVksbUJBQW1CLEVBQUU7WUFDeEMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ2pDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQXFCRCxJQUNJLGdCQUFnQixLQUE0QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQSxDQUFDLENBQUM7SUFDL0YsSUFBSSxnQkFBZ0IsQ0FBQyxLQUE0Qzs7UUFDL0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQTtRQUU5QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQUU7UUFFeEQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFFeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsY0FBYyxDQUN0RCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUNoRTtJQUNILENBQUM7SUFzSUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMzRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDckM7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsNEJBQTRCLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDakQsQ0FBQztJQUVELGtCQUFrQjs7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQzFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZUFBQyxPQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLE9BQU8sRUFBRSxtQ0FBSSxFQUFFLENBQUEsRUFBQSxDQUFDLEVBQ2pELFNBQVMsQ0FBQyxNQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxPQUFPLEVBQUUsbUNBQUksRUFBRSxDQUFDLEVBQ2pELFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQy9DLENBQUE7UUFFRCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUM7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQjtZQUN0QixJQUFJLENBQUMsUUFBUTtTQUNkLENBQUMsQ0FBQyxJQUFJLENBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQUMsT0FBQSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQ0FBSSxFQUFFLENBQUMsQ0FBQSxFQUFBLENBQUM7UUFDM0Qsb0NBQW9DO1FBQ3BDLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQy9DLENBQUE7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFFTywwQkFBMEIsQ0FDaEMsT0FBbUMsRUFDbkMsT0FBaUM7UUFFakMsTUFBTSxJQUFJLEdBQTZCLEVBQUUsQ0FBQTtRQUV6QyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFO1lBQ3JDLE1BQU0sV0FBVyxHQUEyQjtnQkFDMUMsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixVQUFVLEVBQUUsS0FBSztnQkFDakIsa0JBQWtCLEVBQUUsSUFBSTtnQkFDeEIsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQTtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7U0FDdkI7UUFFRCxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3pELEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0RCwwRUFBMEU7WUFFMUUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDakYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRXJELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDeEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1lBQ3RFLElBQUksVUFBVSxFQUFFO2dCQUNkLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDaEMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUF3QixDQUFBO3dCQUNwQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtxQkFDZjtnQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFDRixVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxPQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtnQkFDMUUsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUUsT0FBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDN0U7WUFFRCxJQUFJLE9BQU8sR0FBMkIsRUFBRSxDQUFBO1lBQ3hDLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtnQkFDdEUsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7Z0JBQ3pFLElBQUksVUFBVSxFQUFFO29CQUNkLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDaEMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUF3QixDQUFBOzRCQUNwQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTt5QkFDZjtvQkFDSCxDQUFDLENBQUMsQ0FBQTtvQkFDRixVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxPQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtvQkFDMUUsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUUsT0FBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7aUJBQzdFO2FBQ0Y7WUFFRCxNQUFNLElBQUksaURBQ0wsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQ1osT0FBTyxHQUNQLE9BQU8sQ0FDWCxDQUFBO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUNoQjtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixNQUFNLGdCQUFnQixHQUEyQjtnQkFDL0MsSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osUUFBUSxFQUFFLEVBQUU7Z0JBQ1osVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixtRkFBbUY7Z0JBQ25GLHFCQUFxQjtnQkFDckIsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7Z0JBQ3BDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYzthQUNwQyxDQUFBO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1NBQzVCO1FBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDdEIsSUFBSSxHQUFHLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsRUFBRTtnQkFDOUQsR0FBRyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUE7YUFDNUM7WUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUN2QyxHQUFHLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUE7YUFDcEM7WUFFRCxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQ2hDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFBO2FBQzVDO1NBQ0Y7UUFFRCwwQkFBMEI7UUFDMUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFHeEIsaUZBQWlGO1FBRWpGLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVPLGVBQWUsQ0FBQyxHQUEyQixFQUFFLFFBQWlCLEtBQUs7UUFDekUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUE7U0FDYjtRQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQTtRQUVwRSxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUE7SUFDckIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUEyQixFQUFFLFFBQWlCLEtBQUs7UUFDckUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDckIsT0FBTTtTQUNQO1FBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFBO1FBRXBFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7U0FDdkQ7UUFFRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRW5DLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDN0IsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBOEI7UUFDdkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDaEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzFELE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRWxELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ2hELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUMxRCxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsT0FBc0I7UUFDL0MsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBRU0sa0JBQWtCLENBQUMsUUFBZ0I7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNoRSxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUE7UUFDaEUsSUFBSSxHQUFHLEVBQUU7WUFDUCxPQUFPLEdBQUcsQ0FBQTtTQUNYO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVE7UUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3RCLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBUTtRQUN0QixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7WUFDeEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDM0Q7UUFDRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBYSxFQUFFLElBQVM7UUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0lBQ2xCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxLQUEyQjtRQUNsRCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUU7WUFDM0YsMEVBQTBFO1lBQzFFLHVEQUF1RDtZQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV2QixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFBO1lBQzVCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDM0QsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsR0FBRyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUE7YUFDMUI7WUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUE7Z0JBQ3pGLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQTthQUNqRTtZQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQTtTQUNuQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUN0QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFBO1FBQzVCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUE7UUFDckIsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUNsQyxHQUFHLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtTQUM1QjthQUFNO1lBQ0wsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUE7U0FDN0I7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFFLENBQUE7SUFDOUIsQ0FBQztJQUVNLDJCQUEyQjtRQUNoQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzNDLENBQUM7SUFFRCxJQUFXLFFBQVE7O1FBQ2pCLE9BQU87WUFDTCxNQUFNLEVBQUUsTUFBQSxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLE1BQU0sbUNBQUksQ0FBQztZQUN0QyxRQUFRLEVBQUUsTUFBQSxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLFFBQVEsbUNBQUksQ0FBQztZQUMxQyxLQUFLLEVBQUUsTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRSxLQUFLO1lBQy9CLEtBQUssRUFBRSxNQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsS0FBSyxtQ0FBSSxDQUFDO1NBQ3JDLENBQUE7SUFDSCxDQUFDOzs7WUFubEJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQiwwd0tBQXlDO2dCQUV6QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsVUFBVSxFQUFFO29CQUNWLE9BQU8sQ0FBQyxXQUFXLEVBQUU7d0JBQ25CLFVBQVUsQ0FBQyxRQUFRLEVBQUU7NEJBQ25CLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7NEJBQ3RELE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzt5QkFDdEUsQ0FBQzt3QkFDRixVQUFVLENBQUMsUUFBUSxFQUFFOzRCQUNuQixLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQzs0QkFDbkQsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7eUJBQ3pFLENBQUM7cUJBQ0gsQ0FBQztpQkFDSDtnQkFDRCxTQUFTLEVBQUUsQ0FBRSxrQkFBa0IsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsQ0FBRTs7YUFDOUY7OztZQTdFUSw2QkFBNkI7WUF4Q3BDLGVBQWU7WUF5Q1IsMkJBQTJCOzs7NkJBbUhqQyxLQUFLO21DQUtMLEtBQUs7c0JBRUwsS0FBSzttQkFRTCxLQUFLO3lCQU9MLEtBQUs7MEJBRUwsS0FBSzswQkFDTCxLQUFLO3VCQUVMLEtBQUs7NkJBRUwsS0FBSzs4QkFDTCxLQUFLO2dDQUNMLEtBQUs7b0JBRUwsS0FBSztvQkFDTCxLQUFLO3FCQUNMLEtBQUs7K0JBRUwsS0FBSzs0QkFFTCxLQUFLOzBCQUVMLEtBQUs7MEJBQ0wsS0FBSzt1QkFFTCxLQUFLO29CQUVMLEtBQUs7eUJBT0wsS0FBSzt1QkFTTCxLQUFLOzBCQVlMLEtBQUs7dUJBRUwsS0FBSzswQkFFTCxLQUFLOzJCQUNMLEtBQUs7b0NBRUwsS0FBSzswQkFFTCxLQUFLO2tDQUVMLEtBQUs7K0JBRUwsS0FBSzs2QkFDTCxLQUFLO3lCQUNMLEtBQUs7NEJBQ0wsS0FBSzs4QkFDTCxLQUFLOzZCQUVMLEtBQUs7MkJBRUwsS0FBSzt3QkFDTCxLQUFLOzJCQUNMLEtBQUs7eUJBRUwsS0FBSzt5QkFDTCxLQUFLO3lCQUVMLEtBQUs7cUJBUUwsTUFBTTt1QkFDTixNQUFNO3FCQUNOLE1BQU07bUJBQ04sTUFBTTttQkFDTixNQUFNO3NCQUNOLE1BQU07cUJBQ04sTUFBTTsrQkFDTixNQUFNO3lCQUNOLE1BQU07bUNBRU4sTUFBTTtrQ0FDTixNQUFNOytCQUVOLGVBQWUsU0FBQyx3QkFBd0I7eUJBRXhDLFlBQVksU0FBQyw0QkFBNEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7NEJBQzNELFlBQVksU0FBQywrQkFBK0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7d0JBQzlELFlBQVksU0FBQyxrQ0FBa0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7K0JBRWpFLFlBQVksU0FBQyx5QkFBeUI7MkJBaUJ0QyxTQUFTLFNBQUMscUJBQXFCO2tDQUMvQixTQUFTLFNBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOzJCQUNyRCxTQUFTLFNBQUMsMkJBQTJCO2dDQUVyQyxTQUFTLFNBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzRCQUMvQyxTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt3QkFDM0MsU0FBUyxTQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7NkJBQ3ZDLFNBQVMsU0FBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7a0NBQzVDLFNBQVMsU0FBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O0FBN0h6QjtJQUFmLFlBQVksRUFBRTswREFBZ0M7QUFDL0I7SUFBZixZQUFZLEVBQUU7MkRBQWlDO0FBQ2hDO0lBQWYsWUFBWSxFQUFFOzZEQUFtQztBQUVuQztJQUFkLFdBQVcsRUFBRTtpREFBMEI7QUFDeEI7SUFBZixXQUFXLENBQUMsQ0FBQyxDQUFDO2lEQUFrQjtBQUNqQjtJQUFmLFdBQVcsQ0FBQyxDQUFDLENBQUM7a0RBQW1CO0FBRWxCO0lBQWYsWUFBWSxFQUFFOzREQUFrQztBQUlqQztJQUFmLFlBQVksRUFBRTt1REFBNEI7QUFDM0I7SUFBZixZQUFZLEVBQUU7dURBQTZCO0FBdUM1QjtJQUFmLFlBQVksRUFBRTtpRUFBdUM7QUFJdEM7SUFBZixZQUFZLEVBQUU7K0RBQXFDO0FBSXBDO0lBQWYsWUFBWSxFQUFFO3NEQUE0QjtBQUM1QjtJQUFkLFdBQVcsRUFBRTt5REFBMkI7QUFHekI7SUFBZixZQUFZLEVBQUU7MERBQStCO0FBRS9CO0lBQWQsV0FBVyxFQUFFO3dEQUEwQjtBQUN6QjtJQUFkLFdBQVcsRUFBRTtxREFBdUI7QUFDdEI7SUFBZCxXQUFXLEVBQUU7d0RBQTBCO0FBRXhCO0lBQWYsWUFBWSxFQUFFO3NEQUEyQjtBQUMxQjtJQUFmLFlBQVksRUFBRTtzREFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUFycmF5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdGlvblRva2VuLCBJbnB1dCwgS2V5VmFsdWVEaWZmZXIsXG4gIEtleVZhbHVlRGlmZmVycywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY29uY2F0TWFwLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IERhdGF0YWJsZURhdGFTb3VyY2UgfSBmcm9tICcuLy4uL21vZGVscy9kYXRhdGFibGUtZGF0YS1zb3VyY2UnXG5cbmltcG9ydCB7IGZhQ2hldnJvbkRvd24sIGZhQ2hldnJvblJpZ2h0LCBmYVNwaW5uZXIgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQge1xuICBDb2x1bW5Nb2RlLFxuICBDb250ZXh0bWVudVR5cGUsXG4gIERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlLFxuICBEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmUsXG4gIERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZSxcbiAgRGF0YXRhYmxlQ29tcG9uZW50IGFzIE5neERhdGF0YWJsZUNvbXBvbmVudCxcbiAgRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlLFxuICBzZXRDb2x1bW5EZWZhdWx0cyxcbiAgU29ydFR5cGUsXG4gIFRhYmxlQ29sdW1uLFxuICB0cmFuc2xhdGVUZW1wbGF0ZXMsXG4gIFRyZWVTdGF0dXNcbn0gZnJvbSAnQG1hcmtsYi9uZ3gtZGF0YXRhYmxlJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnQG1hcmtsYi9uZ3gtZGF0YXRhYmxlJ1xuXG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2NvcmUnXG5pbXBvcnQgeyBjb21wb3NlRGF0YUZpbHRlcnMsIGNvbXBvc2VEYXRhRmlsdGVyU3RhdGVzLCBEYXRhRmlsdGVyU3RhdGUsIElEYXRhRmlsdGVyIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2RhdGEtZmlsdGVycydcbmltcG9ydCB7IElFbGVtZW50UmVzaXplZEV2ZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3NoYXJlZCdcbmltcG9ydCB7IGhhc1Byb3BlcnR5LCBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3ZXIsIERhdGFTb3VyY2UsIGlzRGF0YVNvdXJjZSwgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJ1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtYWN0aW9uLW1lbnUvZGF0YXRhYmxlLWFjdGlvbi1tZW51LmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1jb2x1bW4vZGF0YXRhYmxlLWNvbHVtbi5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLW1lbnUtYmFyL2RhdGF0YWJsZS1tZW51LWJhci5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YXRhYmxlLXJvdy1kZXRhaWwvZGF0YXRhYmxlLXJvdy1kZXRhaWwuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0YXRhYmxlLXJvdy1hY3Rpb24taXRlbS5kaXJlY3RpdmUnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQWNjZXNzb3IgfSBmcm9tICcuLi9tb2RlbHMvZGF0YXRhYmxlLWFjY2Vzc29yJ1xuaW1wb3J0IHsgVGhlU2VhbVBhZ2VJbmZvIH0gZnJvbSAnLi4vbW9kZWxzL3BhZ2UtaW5mbydcbmltcG9ydCB7IFNvcnRFdmVudCB9IGZyb20gJy4uL21vZGVscy9zb3J0LWV2ZW50J1xuaW1wb3J0IHsgU29ydEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvc29ydC1pdGVtJ1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUNvbHVtbiB9IGZyb20gJy4uL21vZGVscy90YWJsZS1jb2x1bW4nXG5pbXBvcnQgeyBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RhdGF0YWJsZS1jb2x1bW4tY2hhbmdlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGF0YXRhYmxlLXByZWZlcmVuY2VzLnNlcnZpY2UnXG5pbXBvcnQgeyBUSEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUiB9IGZyb20gJy4uL3Rva2Vucy9kYXRhdGFibGUtYWNjZXNzb3InXG5cbmV4cG9ydCBmdW5jdGlvbiBfc2V0Q29sdW1uRGVmYXVsdHMoY29sdW1uczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdKTogdm9pZCB7XG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICBpZiAoIWNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnaGlkZGVuJykpIHtcbiAgICAgIGNvbHVtbi5oaWRkZW4gPSBmYWxzZVxuICAgIH1cbiAgfVxuICBzZXRDb2x1bW5EZWZhdWx0cyhjb2x1bW5zKVxufVxuXG4vKipcbiAqIE5PVEU6IFRoaXMgaXMgc3RpbGwgYmVpbmcgd29ya2VkIG9uLiBJIGFtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoaXMgbW9kZWxcbiAqIGJlY2F1c2UgYG5neC1kYXRhdGFibGVgIGp1c3QgdXNlcyBhbiB1bnR5cGVkIG9iamVjdCBhbmQgc2V0cyBwcm9wZXJ0aWVzIGluXG4gKiBtdWx0aXBsZSBwbGFjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNlbGxDb250ZXh0IHtcbiAgYWxsUm93c1NlbGVjdGVkOiBmYWxzZVxuXG4gIHNlbGVjdEZuOiAoKSA9PiBhbnlcbiAgc29ydERpcj86ICdhc2MnIHwgJ2Rlc2MnXG4gIHNvcnRGbjogKCkgPT4gYW55XG5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG5cbiAgb25DaGVja2JveENoYW5nZUZuPzogYW55XG4gIGFjdGl2YXRlRm4/OiBhbnlcbiAgcm93PzogYW55XG4gIGdyb3VwPzogYW55XG4gIHZhbHVlPzogYW55XG4gIGNvbHVtbj86IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5cbiAgcm93SGVpZ2h0PzogbnVtYmVyXG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuXG4gIHJvd0luZGV4PzogbnVtYmVyXG4gIHRyZWVTdGF0dXM/OiBUcmVlU3RhdHVzXG4gIG9uVHJlZUFjdGlvbj86IGFueVxufVxuXG4vKipcbiAqIEludGVuZGVkIGZvciBpbnRlcm5hbCBjbGFzc2VzIGRlY2xhcmVkIGJ5IHRoZSBgVGhlU2VhbURhdGF0YWJsZU1vZHVsZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBUSEVTRUFNX0RBVEFUQUJMRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxJRGF0YUZpbHRlcj4oJ0xpYkRhdGF0YWJsZScpXG5cbmV4cG9ydCBjb25zdCBfVEhFU0VBTV9EQVRBVEFCTEU6IGFueSA9IHtcbiAgcHJvdmlkZTogVEhFU0VBTV9EQVRBVEFCTEUsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YXRhYmxlQ29tcG9uZW50KVxufVxuXG5leHBvcnQgY29uc3QgX1RIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6IFRIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGF0YWJsZUNvbXBvbmVudClcbn1cblxuLy8gVE9ETzogUmVkdWNlIHJlbGlhbmNlIG9uIEJlaGF2aW9yU3ViamVjdCBiYXNlZCBvYnNlcnZhYmxlcywgYmVjYXVzZSBpdCBzaG91bGRcbi8vIGJlIGVhc2llciB0byBhdm9pdCBvdmVyIGVtaXR0aW5nIG9ic2VydmFibGVzLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS1kYXRhdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignc2xpZGVEb3duJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwJSknLCBvcGFjaXR5OiAnMCcgfSksXG4gICAgICAgIGFuaW1hdGUoJzI1MG1zJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogJzEnIH0pKSxcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAnMScgfSksXG4gICAgICAgIGFuaW1hdGUoJzI1MG1zJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMCUpJywgb3BhY2l0eTogJzAnIH0pKSxcbiAgICAgIF0pXG4gICAgXSlcbiAgXSxcbiAgcHJvdmlkZXJzOiBbIF9USEVTRUFNX0RBVEFUQUJMRSwgRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UsIF9USEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUiBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGF0YWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0LCBUaGVTZWFtRGF0YXRhYmxlQWNjZXNzb3IsIENvbGxlY3Rpb25WaWV3ZXIge1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxQYWdpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxTb3J0aW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsRmlsdGVyaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2xvYWRpbmdJbmRpY2F0b3I6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcmVvcmRlcmFibGU6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3dhcENvbHVtbnM6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZ3JvdXBFeHBhbnNpb25EZWZhdWx0OiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NlbGVjdEFsbFJvd3NPblBhZ2U6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3VtbWFyeVJvdzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV92aXJ0dWFsaXphdGlvbjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zY3JvbGxiYXJWOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Njcm9sbGJhckg6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGltaXQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb3VudDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29mZnNldDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hlYWRlckhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jvd0hlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Zvb3RlckhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N1bW1hcnlIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb2x1bW5zOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10gfCB1bmRlZmluZWQgfCBudWxsXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zb3J0czogU29ydEl0ZW1bXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBmYUNoZXZyb25Eb3duID0gZmFDaGV2cm9uRG93blxuICBmYUNoZXZyb25SaWdodCA9IGZhQ2hldnJvblJpZ2h0XG4gIGZhU3Bpbm5lciA9IGZhU3Bpbm5lclxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlcnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRGF0YUZpbHRlcltdPihbXSlcbiAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uc09ic2VydmFibGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9ic2VydmFibGU8VGhlU2VhbURhdGF0YWJsZUNvbHVtbltdPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyU3RhdGVzOiBPYnNlcnZhYmxlPERhdGFGaWx0ZXJTdGF0ZVtdPlxuXG4gIGdldCBmaWx0ZXJzKCk6IElEYXRhRmlsdGVyW10geyByZXR1cm4gdGhpcy5fZmlsdGVyc1N1YmplY3QudmFsdWUgfVxuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJzJDogT2JzZXJ2YWJsZTxJRGF0YUZpbHRlcltdPlxuXG4gIEBJbnB1dCgpXG4gIGdldCBwcmVmZXJlbmNlc0tleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHsgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnZhbHVlIH1cbiAgc2V0IHByZWZlcmVuY2VzS2V5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKSB7IHRoaXMuX3ByZWZlcmVuY2VzS2V5Lm5leHQodmFsdWUgfHwgdW5kZWZpbmVkKSB9XG4gIHByaXZhdGUgX3ByZWZlcmVuY2VzS2V5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsPih1bmRlZmluZWQpXG5cbiAgQElucHV0KCkgdGFyZ2V0TWFya2VyVGVtcGxhdGU6IGFueVxuXG4gIEBJbnB1dCgpXG4gIGdldCBjb2x1bW5zKCk6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSB7IHJldHVybiB0aGlzLl9jb2x1bW5zLnZhbHVlIH1cbiAgc2V0IGNvbHVtbnModmFsdWU6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdjb2x1bW5zIGlucHV0JywgdmFsdWUpXG4gICAgdGhpcy5fY29sdW1ucy5uZXh0KEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSlcbiAgfVxuICBwcml2YXRlIF9jb2x1bW5zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+KFtdKVxuXG4gIEBJbnB1dCgpXG4gIGdldCByb3dzKCk6IGFueVtdIHsgcmV0dXJuIHRoaXMuX3Jvd3MudmFsdWUgfVxuICBzZXQgcm93cyh2YWx1ZTogYW55W10pIHsgdGhpcy5fcm93cy5uZXh0KHZhbHVlIHx8IFtdKSB9XG4gIHByaXZhdGUgX3Jvd3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSlcblxuICBwdWJsaWMgcm93cyQ6IE9ic2VydmFibGU8YW55W10+XG5cbiAgQElucHV0KCkgY29sdW1uTW9kZTogQ29sdW1uTW9kZSB8IHVuZGVmaW5lZCB8IG51bGwgPSBDb2x1bW5Nb2RlLmZvcmNlXG5cbiAgQElucHV0KCkgZ3JvdXBSb3dzQnk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgZ3JvdXBlZFJvd3M6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBbXVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbFBhZ2luZzogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbFNvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXh0ZXJuYWxGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKDApIGNvdW50OiBudW1iZXIgPSAwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigwKSBvZmZzZXQ6IG51bWJlciA9IDBcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbG9hZGluZ0luZGljYXRvcjogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZTogU2VsZWN0aW9uVHlwZSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgcmVvcmRlcmFibGU6IGJvb2xlYW4gPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzd2FwQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KCkgc29ydFR5cGU6IFNvcnRUeXBlIHwgdW5kZWZpbmVkIHwgbnVsbCA9IFNvcnRUeXBlLnNpbmdsZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0cygpOiBTb3J0SXRlbVtdIHsgcmV0dXJuIHRoaXMubmd4RGF0YXRhYmxlID8gdGhpcy5uZ3hEYXRhdGFibGUuc29ydHMgOiB0aGlzLl9zb3J0cyB9XG4gIHNldCBzb3J0cyh2YWx1ZTogU29ydEl0ZW1bXSkge1xuICAgIHRoaXMuX3NvcnRzID0gbm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IGNvZXJjZUFycmF5KHZhbHVlKSA6IFtdXG4gIH1cbiAgX3NvcnRzOiBTb3J0SXRlbVtdID0gW11cblxuICBASW5wdXQoKSBjc3NDbGFzc2VzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsID0ge1xuICAgIHNvcnRBc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi11cCcsXG4gICAgc29ydERlc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi1kb3duJyxcbiAgICBwYWdlckxlZnRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLWxlZnQnLFxuICAgIHBhZ2VyUmlnaHRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLXJpZ2h0JyxcbiAgICBwYWdlclByZXZpb3VzOiAnZGF0YXRhYmxlLWljb24tcHJldicsXG4gICAgcGFnZXJOZXh0OiAnZGF0YXRhYmxlLWljb24tc2tpcCdcbiAgfVxuXG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsID0ge1xuICAgIC8vIE1lc3NhZ2UgdG8gc2hvdyB3aGVuIGFycmF5IGlzIHByZXNlbnRlZFxuICAgIC8vIGJ1dCBjb250YWlucyBubyB2YWx1ZXNcbiAgICBlbXB0eU1lc3NhZ2U6ICdObyByZWNvcmRzIGZvdW5kJyxcblxuICAgIC8vIEZvb3RlciB0b3RhbCBtZXNzYWdlXG4gICAgdG90YWxNZXNzYWdlOiAndG90YWwnLFxuXG4gICAgLy8gRm9vdGVyIHNlbGVjdGVkIG1lc3NhZ2VcbiAgICBzZWxlY3RlZE1lc3NhZ2U6ICdzZWxlY3RlZCdcbiAgfVxuXG4gIEBJbnB1dCgpIHJvd0lkZW50aXR5OiAoKHg6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCB8IG51bGwgPSAoKHg6IGFueSkgPT4geClcblxuICBASW5wdXQoKSByb3dDbGFzczogYW55IHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHNlbGVjdENoZWNrOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIGRpc3BsYXlDaGVjazogKChyb3c6IGFueSwgY29sdW1uPzogYW55LCB2YWx1ZT86IGFueSkgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGdyb3VwRXhwYW5zaW9uRGVmYXVsdDogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KCkgdHJhY2tCeVByb3A6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2VsZWN0QWxsUm93c09uUGFnZTogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KCkgdHJlZUZyb21SZWxhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSB0cmVlVG9SZWxhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc3VtbWFyeVJvdzogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHN1bW1hcnlIZWlnaHQ6IG51bWJlciA9IDMwXG4gIEBJbnB1dCgpIHN1bW1hcnlQb3NpdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCA9ICd0b3AnXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHZpcnR1YWxpemF0aW9uOiBib29sZWFuID0gdHJ1ZVxuXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGhlYWRlckhlaWdodDogbnVtYmVyID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgcm93SGVpZ2h0OiBudW1iZXIgPSA1MFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBmb290ZXJIZWlnaHQ6IG51bWJlciA9IDQwXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNjcm9sbGJhclY6IGJvb2xlYW4gPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzY3JvbGxiYXJIOiBib29sZWFuID0gdHJ1ZVxuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhU291cmNlKHZhbHVlOiBEYXRhU291cmNlPGFueT4gfCBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhdGFibGVEYXRhU291cmNlKSB7XG4gICAgICB2YWx1ZS5zZXREYXRhdGFibGVBY2Nlc3Nvcih0aGlzKVxuICAgIH1cbiAgICB0aGlzLl9kYXRhU291cmNlU3ViamVjdC5uZXh0KHZhbHVlIHx8IHVuZGVmaW5lZClcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnRFdmVudD4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFnZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGhlU2VhbVBhZ2VJbmZvPigpXG4gIEBPdXRwdXQoKSByZWFkb25seSByZW9yZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlc2l6ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSB0YWJsZUNvbnRleHRtZW51ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBNb3VzZUV2ZW50LCB0eXBlOiBDb250ZXh0bWVudVR5cGUsIGNvbnRlbnQ6IGFueSB9PihmYWxzZSlcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHRyZWVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBhY3Rpb25SZWZyZXNoUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgaGlkZGVuQ29sdW1uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KClcblxuICBAQ29udGVudENoaWxkcmVuKERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCkgY29sdW1uQ29tcG9uZW50cz86IFF1ZXJ5TGlzdDxEYXRhdGFibGVDb2x1bW5Db21wb25lbnQ+XG5cbiAgQENvbnRlbnRDaGlsZChEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBhY3Rpb25NZW51PzogRGF0YXRhYmxlQWN0aW9uTWVudUNvbXBvbmVudFxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0FjdGlvbkl0ZW0/OiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlXG4gIEBDb250ZW50Q2hpbGQoVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcm93RGV0YWlsPzogVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudClcbiAgZ2V0IG1lbnVCYXJDb21wb25lbnQoKTogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9tZW51QmFyQ29tcG9uZW50IH1cbiAgc2V0IG1lbnVCYXJDb21wb25lbnQodmFsdWU6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tZW51QmFyQ29tcG9uZW50ID0gdmFsdWVcblxuICAgIGlmICh0aGlzLl9tZW51QmFyU3ViKSB7IHRoaXMuX21lbnVCYXJTdWIudW5zdWJzY3JpYmUoKSB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSlcblxuICAgICAgdGhpcy5fbWVudUJhclN1YiA9IHRoaXMuX21lbnVCYXJDb21wb25lbnQ/LmZpbHRlcnNDaGFuZ2VkXG4gICAgICAgIC5zdWJzY3JpYmUodiA9PiB7IHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSkgfSlcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWVudUJhckNvbXBvbmVudDogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9tZW51QmFyU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKE5neERhdGF0YWJsZUNvbXBvbmVudCkgbmd4RGF0YXRhYmxlPzogTmd4RGF0YXRhYmxlQ29tcG9uZW50XG4gIEBWaWV3Q2hpbGQoTmd4RGF0YXRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmd4RGF0YXRhYmxlRWxlbWVudD86IEVsZW1lbnRSZWZcbiAgQFZpZXdDaGlsZChEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUpIG5neFJvd0RldGFpbD86IERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuXG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbk1lbnVDZWxsVHBsJywgeyBzdGF0aWM6IHRydWUgfSkgYWN0aW9uTWVudUNlbGxUcGw/OiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+XG4gIEBWaWV3Q2hpbGQoJ3RyZWVUb2dnbGVUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0cmVlVG9nZ2xlVHBsPzogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+XG4gIEBWaWV3Q2hpbGQoJ2hlYWRlclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pIGhlYWRlclRwbD86IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT5cbiAgQFZpZXdDaGlsZCgnYmxhbmtIZWFkZXJUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBibGFua0hlYWRlclRwbD86IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT5cbiAgQFZpZXdDaGlsZCgnY2VsbFR5cGVTZWxlY3RvclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pIGNlbGxUeXBlU2VsZWN0b3JUcGw/OiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+XG5cbiAgcHVibGljIGNvbHVtbkNvbXBvbmVudHMkPzogT2JzZXJ2YWJsZTxEYXRhdGFibGVDb2x1bW5Db21wb25lbnRbXT5cbiAgcHJpdmF0ZSBfY29sRGlmZmVyc0lucDogeyBbcHJvcE5hbWU6IHN0cmluZ106IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB9ID0ge31cbiAgcHJpdmF0ZSBfY29sRGlmZmVyc1RwbDogeyBbcHJvcE5hbWU6IHN0cmluZ106IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB9ID0ge31cblxuICBwdWJsaWMgcmVhZG9ubHkgY29sdW1ucyQ6IE9ic2VydmFibGU8VGhlU2VhbURhdGF0YWJsZUNvbHVtbltdPlxuICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheUNvbHVtbnMkOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT5cblxuICB2aWV3Q2hhbmdlOiBPYnNlcnZhYmxlPExpc3RSYW5nZT5cblxuICBwcml2YXRlIF9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFlcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5DaGFuZ2VzU2VydmljZTogRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGlmZmVyczogS2V5VmFsdWVEaWZmZXJzLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ByZWZlcmVuY2VzOiBEYXRhdGFibGVQcmVmZXJlbmNlc1NlcnZpY2VcbiAgKSB7XG4gICAgLy8gdGhpcy5kaXNwbGF5Q29sdW1ucyQgPSB0aGlzLmhpZGRlbkNvbHVtbnMkLnBpcGUoXG4gICAgLy8gICBzd2l0Y2hNYXAoaGlkZGVuQ29sdW1ucyA9PiB0aGlzLmNvbHVtbnMkLnBpcGUobWFwKGNvbHMgPT4gY29scy5maWx0ZXIoYyA9PiBoaWRkZW5Db2x1bW5zLmZpbmRJbmRleChoYyA9PiBoYyA9PT0gYy5wcm9wKSA9PT0gLTEpKSkpXG4gICAgLy8gKVxuXG4gICAgY29uc3QgYXBwbHlQcmVmcyA9IChjb2xzOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pID0+IHRoaXMuX3ByZWZlcmVuY2VzS2V5LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAobmFtZSA9PiAhIW5hbWVcbiAgICAgICAgLy8gTk9URTogVGhpcyBwZW5kaW5nIGNoZWNrIGlzIHRlbXBvcmFyeSB0byBhdm9pZCB0YWJsZSB1c2luZyBwcmV2aW91c2x5XG4gICAgICAgIC8vIHJldHJpZXZlZCBwcmVmZXJlbmNlIHdoaWxlIHRoZSBuZXcgb25lIGlzIGJlaW5nIHVwZGF0ZWQgb24gdGhlXG4gICAgICAgIC8vIHNlcnZlci5cbiAgICAgICAgPyAhdGhpcy5fcHJlZmVyZW5jZXMucGVuZGluZ1xuICAgICAgICAgID8gdGhpcy5fcHJlZmVyZW5jZXMud2l0aENvbHVtblByZWZlcmVuY2VzKG5hbWUsIGNvbHMpXG4gICAgICAgICAgOiBvZihjb2xzKVxuICAgICAgICA6IG9mKGNvbHMpXG4gICAgICApXG4gICAgKVxuXG4gICAgdGhpcy5jb2x1bW5zJCA9IHRoaXMuX2NvbHVtbnNPYnNlcnZhYmxlLnBpcGUoc3dpdGNoTWFwKGNvbHNPYnMgPT4gY29sc09icyA/PyBvZihbXSkpKVxuXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyQgPSB0aGlzLmNvbHVtbnMkLnBpcGUoXG4gICAgICBtYXAoY29scyA9PiBjb2xzLmZpbHRlcihjID0+ICFjLmhpZGRlbikpLFxuICAgICAgdGFwKHYgPT4gdGhpcy5fcmVtb3ZlVW51c2VkRGlmZnModikpLFxuICAgICAgc3dpdGNoTWFwKGNvbHMgPT4gYXBwbHlQcmVmcyhjb2xzKSksXG4gICAgKVxuXG4gICAgdGhpcy5maWx0ZXJzJCA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG5cbiAgICB0aGlzLmZpbHRlclN0YXRlcyA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZmlsdGVycyA9PiBjb21wb3NlRGF0YUZpbHRlclN0YXRlcyhmaWx0ZXJzKSlcbiAgICApXG5cbiAgICAvLyB0aGlzLnJvd3MkID0gdGhpcy5fZmlsdGVyc1N1YmplY3QuYXNPYnNlcnZhYmxlKClcbiAgICAvLyAgIC5waXBlKFxuICAgIC8vICAgICBzd2l0Y2hNYXAoZmlsdGVycyA9PiB7XG4gICAgLy8gICAgICAgaWYgKHRoaXMuZXh0ZXJuYWxGaWx0ZXJpbmcpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzLl9yb3dzLmFzT2JzZXJ2YWJsZSgpXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgIHJldHVybiB0aGlzLl9yb3dzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoY29tcG9zZURhdGFGaWx0ZXJzKGZpbHRlcnMpKVxuICAgIC8vICAgICB9KVxuICAgIC8vICAgKVxuXG4gICAgdGhpcy5yb3dzJCA9IHRoaXMuX2RhdGFTb3VyY2VTdWJqZWN0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZGF0YVNvdXJjZSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhU291cmNlJywgZGF0YVNvdXJjZSlcbiAgICAgICAgbGV0IGRhdGFTdHJlYW06IE9ic2VydmFibGU8YW55W10+XG5cbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+ZGF0YXNvdXJjZScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTb3VyY2UuY29ubmVjdCh0aGlzKSBhcyBhbnlcbiAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfm9ic2VydmFibGUnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU291cmNlIGFzIGFueVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfmFycmF5JylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gb2YoZGF0YVNvdXJjZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfnJvd3MgZmFsbGJhY2snKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSB0aGlzLl9yb3dzLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAvLyAucGlwZSh0YXAodiA9PiBjb25zb2xlLmxvZygncm93c34nLCB2KSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZXh0ZXJuYWxGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbm90IHVzaW5nIGV4dGVybmFsRmlsdGVyaW5nJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVN0cmVhbS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHJvd3MgPT4gdGhpcy5fZmlsdGVyc1N1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ2ZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgICAgIGNvbmNhdE1hcChmaWx0ZXJzID0+IG9mKHJvd3MpLnBpcGUoY29tcG9zZURhdGFGaWx0ZXJzKGZpbHRlcnMpKSksXG4gICAgICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdjb21wb3NlZCBmaWx0ZXJzJywgdikpLFxuICAgICAgICAgICAgKSlcbiAgICAgICAgICApXG5cbiAgICAgICAgICAvLyBkYXRhU3RyZWFtID0gdGhpcy5fZmlsdGVyc1N1YmplY3QucGlwZShcbiAgICAgICAgICAvLyAgIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdmaWx0ZXJzJywgdikpLFxuICAgICAgICAgIC8vICAgY29uY2F0TWFwKGZpbHRlcnMgPT4gZGF0YVN0cmVhbS5waXBlKGNvbXBvc2VEYXRhRmlsdGVycyhmaWx0ZXJzKSkpLFxuICAgICAgICAgIC8vICAgdGFwKHYgPT4gY29uc29sZS5sb2coJ2NvbXBvc2VkIGZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgLy8gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGFTdHJlYW0ucGlwZShcbiAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnc3RyZWFtJywgdikpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIClcblxuICAgIC8vIHRoaXMuaGlkZGVuQ29sdW1ucyQgPSB0aGlzLl9oaWRkZW5Db2x1bW5zLmFzT2JzZXJ2YWJsZSgpXG5cbiAgICAvLyB0aGlzLl9oaWRkZW5Db2x1bW5zLnBpcGUoXG4gICAgLy8gICBza2lwKDEpLFxuICAgIC8vICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IHtcbiAgICAvLyAgICAgY29uc3QgX2EgPSBBcnJheS5pc0FycmF5KGEpID8gYSA6IFtdXG4gICAgLy8gICAgIGNvbnN0IF9iID0gQXJyYXkuaXNBcnJheShiKSA/IGIgOiBbXVxuICAgIC8vICAgICBpZiAoX2EubGVuZ3RoICE9PSBfYi5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAvLyAgICAgY29uc3QgX2FzID0gX2Euc29ydCgpXG4gICAgLy8gICAgIGNvbnN0IF9icyA9IF9iLnNvcnQoKVxuICAgIC8vICAgICByZXR1cm4gIV9hcy5zb3J0KCkuZXZlcnkoKHZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IF9ic1tpbmRleF0gPT09IHZhbHVlKVxuICAgIC8vICAgfSksXG4gICAgLy8gICB0YXAodiA9PiB0aGlzLmhpZGRlbkNvbHVtbnNDaGFuZ2UuZW1pdCh2KSksXG4gICAgLy8gICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgIC8vICkuc3Vic2NyaWJlKHYgPT4gY29uc29sZS5sb2coJ2hpZGRlbkNvbHVtbnNDaGFuZ2UnLCB2KSlcblxuICAgIC8vIFRPRE86IEltcGxlbWVudCB2aWV3Q2hhbmdlIGZvciBDb2xsZWN0aW9uVmlld2VyLlxuICAgIHRoaXMudmlld0NoYW5nZSA9IHRoaXMucGFnZS5waXBlKG1hcChwID0+ICh7IHN0YXJ0OiAwLCBlbmQ6IHAuY291bnQgfSkpKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucm93RGV0YWlsKSB7XG4gICAgICB0aGlzLl9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24gPSB0aGlzLnJvd0RldGFpbC5fdG9nZ2xlLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmICh0aGlzLm5neFJvd0RldGFpbCkge1xuICAgICAgICAgIHRoaXMubmd4Um93RGV0YWlsLnRvZ2dsZS5lbWl0KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5jb2x1bW5Db21wb25lbnRzJCA9IHRoaXMuX2NvbHVtbkNoYW5nZXNTZXJ2aWNlLmNvbHVtbklucHV0Q2hhbmdlcyQucGlwZShcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbHVtbkNvbXBvbmVudHM/LnRvQXJyYXkoKSA/PyBbXSksXG4gICAgICBzdGFydFdpdGgodGhpcy5jb2x1bW5Db21wb25lbnRzPy50b0FycmF5KCkgPz8gW10pLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgIClcblxuICAgIGNvbnN0IF9jb2x1bW5zID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNvbHVtbkNvbXBvbmVudHMkLFxuICAgICAgdGhpcy5fY29sdW1uc1xuICAgIF0pLnBpcGUoXG4gICAgICBtYXAodiA9PiB0aGlzLl9nZXRNZXJnZWRUcGxBbmRJbnBDb2x1bW5zKHZbMF0sIHZbMV0gPz8gW10pKSxcbiAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdjb2xzJywgdikpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApXG4gICAgdGhpcy5fY29sdW1uc09ic2VydmFibGUubmV4dChfY29sdW1ucylcbiAgfVxuXG4gIHByaXZhdGUgX2dldE1lcmdlZFRwbEFuZElucENvbHVtbnMoXG4gICAgdHBsQ29sczogRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50W10sXG4gICAgaW5wQ29sczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdXG4gICk6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSB7XG4gICAgY29uc3QgY29sczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdID0gW11cblxuICAgIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgIGNvbnN0IGNoZWNrQm94Q29sOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uID0ge1xuICAgICAgICBwcm9wOiAnJCRfX2NoZWNrYm94X18nLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgd2lkdGg6IDQwLFxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgIGNhbkF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICBkcmFnZ2FibGU6IGZhbHNlLFxuICAgICAgICByZXNpemVhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGVyQ2hlY2tib3hhYmxlOiB0cnVlLFxuICAgICAgICBjaGVja2JveGFibGU6IHRydWVcbiAgICAgIH1cblxuICAgICAgY29scy5wdXNoKGNoZWNrQm94Q29sKVxuICAgIH1cblxuICAgIGNvbnN0IF90cGxDb2xzID0gdHJhbnNsYXRlVGVtcGxhdGVzKDxhbnk+KHRwbENvbHMgfHwgW10pKVxuICAgIGZvciAoY29uc3QgY29sIG9mIGlucENvbHMpIHtcbiAgICAgIGNvbnN0IHRwbENvbCA9IF90cGxDb2xzLmZpbmQodCA9PiB0LnByb3AgPT09IGNvbC5wcm9wKVxuICAgICAgLy8gY29uc29sZS5sb2coeyBjb2w6IHsgLi4uKGNvbCB8fCB7fSkgfSwgdHBsQ29sOiB7IC4uLih0cGxDb2wgfHwge30pIH0gfSlcblxuICAgICAgY29uc3QgZHRDb2x1bW5zID0gKHRoaXMubmd4RGF0YXRhYmxlICYmIHRoaXMubmd4RGF0YXRhYmxlLl9pbnRlcm5hbENvbHVtbnMpIHx8IFtdXG4gICAgICBjb25zdCBwcmV2ID0gZHRDb2x1bW5zLmZpbmQoYyA9PiBjLnByb3AgPT09IGNvbC5wcm9wKVxuXG4gICAgICBjb25zdCBpbnBDb2xEaWZmID0gdGhpcy5fZ2V0Q29sRGlmZihjb2wpXG4gICAgICBjb25zdCBfaW5wQ29sID0gaW5wQ29sRGlmZiA/IHt9IDogdGhpcy5faGFzUHJldkNvbERpZmYoY29sKSA/IHt9IDogY29sXG4gICAgICBpZiAoaW5wQ29sRGlmZikge1xuICAgICAgICBpbnBDb2xEaWZmLmZvckVhY2hSZW1vdmVkSXRlbShyID0+IHtcbiAgICAgICAgICBpZiAocHJldiAmJiBwcmV2Lmhhc093blByb3BlcnR5KHIua2V5KSkge1xuICAgICAgICAgICAgY29uc3QgayA9IHIua2V5IGFzIGtleW9mIFRhYmxlQ29sdW1uXG4gICAgICAgICAgICBkZWxldGUgcHJldltrXVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgaW5wQ29sRGlmZi5mb3JFYWNoQWRkZWRJdGVtKHIgPT4gKF9pbnBDb2wgYXMgYW55KVtyLmtleV0gPSByLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgaW5wQ29sRGlmZi5mb3JFYWNoQ2hhbmdlZEl0ZW0ociA9PiAoX2lucENvbCBhcyBhbnkpW3Iua2V5XSA9IHIuY3VycmVudFZhbHVlKVxuICAgICAgfVxuXG4gICAgICBsZXQgX3RwbENvbDogVGhlU2VhbURhdGF0YWJsZUNvbHVtbiA9IHt9XG4gICAgICBpZiAodHBsQ29sKSB7XG4gICAgICAgIGNvbnN0IHRwbENvbERpZmYgPSB0cGxDb2wgPyB0aGlzLl9nZXRDb2xEaWZmKHRwbENvbCwgdHJ1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgX3RwbENvbCA9IHRwbENvbERpZmYgPyB7fSA6IHRoaXMuX2hhc1ByZXZDb2xEaWZmKGNvbCwgdHJ1ZSkgPyB7fSA6IHRwbENvbFxuICAgICAgICBpZiAodHBsQ29sRGlmZikge1xuICAgICAgICAgIHRwbENvbERpZmYuZm9yRWFjaFJlbW92ZWRJdGVtKHIgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXYgJiYgcHJldi5oYXNPd25Qcm9wZXJ0eShyLmtleSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgayA9IHIua2V5IGFzIGtleW9mIFRhYmxlQ29sdW1uXG4gICAgICAgICAgICAgIGRlbGV0ZSBwcmV2W2tdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0cGxDb2xEaWZmLmZvckVhY2hBZGRlZEl0ZW0ociA9PiAoX3RwbENvbCBhcyBhbnkpW3Iua2V5XSA9IHIuY3VycmVudFZhbHVlKVxuICAgICAgICAgIHRwbENvbERpZmYuZm9yRWFjaENoYW5nZWRJdGVtKHIgPT4gKF90cGxDb2wgYXMgYW55KVtyLmtleV0gPSByLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBfY29sOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uID0ge1xuICAgICAgICAuLi4ocHJldiB8fCB7fSksXG4gICAgICAgIC4uLl9pbnBDb2wsXG4gICAgICAgIC4uLl90cGxDb2xcbiAgICAgIH1cblxuICAgICAgY29scy5wdXNoKF9jb2wpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucm93QWN0aW9uSXRlbSkge1xuICAgICAgY29uc3QgYWN0aW9uTWVudUNvbHVtbjogVGhlU2VhbURhdGF0YWJsZUNvbHVtbiA9IHtcbiAgICAgICAgcHJvcDogJyQkX19hY3Rpb25NZW51X18nLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgd2lkdGg6IDUwLFxuICAgICAgICBtaW5XaWR0aDogNTAsXG4gICAgICAgIG1heFdpZHRoOiA1MCxcbiAgICAgICAgcmVzaXplYWJsZTogZmFsc2UsXG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gVE9ETzogRml4IGNvbHVtbiBhdXRvIHNpemluZyB3aXRoIGZpeGVkIGNvbHVtbiBhbmQgY2VsbCBvdmVybGF5IGJlZm9yZSBlbmFibGluZy5cbiAgICAgICAgLy8gZnJvemVuUmlnaHQ6IHRydWUsXG4gICAgICAgIGNlbGxUZW1wbGF0ZTogdGhpcy5hY3Rpb25NZW51Q2VsbFRwbCxcbiAgICAgICAgaGVhZGVyVGVtcGxhdGU6IHRoaXMuYmxhbmtIZWFkZXJUcGxcbiAgICAgIH1cbiAgICAgIGNvbHMucHVzaChhY3Rpb25NZW51Q29sdW1uKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmIChjb2wuaXNUcmVlQ29sdW1uICYmIGhhc1Byb3BlcnR5KGNvbCwgJ3RyZWVUb2dnbGVUZW1wbGF0ZScpKSB7XG4gICAgICAgIGNvbC50cmVlVG9nZ2xlVGVtcGxhdGUgPSB0aGlzLnRyZWVUb2dnbGVUcGxcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNQcm9wZXJ0eShjb2wsICdoZWFkZXJUZW1wbGF0ZScpKSB7XG4gICAgICAgIGNvbC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVHBsXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNQcm9wZXJ0eShjb2wsICdjZWxsVHlwZScpKSB7XG4gICAgICAgIGNvbC5jZWxsVGVtcGxhdGUgPSB0aGlzLmNlbGxUeXBlU2VsZWN0b3JUcGxcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXRDb2x1bW5EZWZhdWx0cyhjb2xzKVxuICAgIF9zZXRDb2x1bW5EZWZhdWx0cyhjb2xzKVxuXG5cbiAgICAvLyBjb25zb2xlLmxvZyhjb2xzLm1hcChjID0+ICh7IHByb3A6IGMucHJvcCwgY2FuQXV0b1Jlc2l6ZTogYy5jYW5BdXRvUmVzaXplIH0pKSlcblxuICAgIHJldHVybiBjb2xzXG4gIH1cblxuICBwcml2YXRlIF9oYXNQcmV2Q29sRGlmZihjb2w6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4sIGlzVHBsOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLnByb3ApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGRpZmZlcnNNYXAgPSBpc1RwbCA/IHRoaXMuX2NvbERpZmZlcnNUcGwgOiB0aGlzLl9jb2xEaWZmZXJzSW5wXG5cbiAgICByZXR1cm4gISFkaWZmZXJzTWFwXG4gIH1cblxuICBwcml2YXRlIF9nZXRDb2xEaWZmKGNvbDogVGhlU2VhbURhdGF0YWJsZUNvbHVtbiwgaXNUcGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICghY29sIHx8ICFjb2wucHJvcCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlmZmVyc01hcCA9IGlzVHBsID8gdGhpcy5fY29sRGlmZmVyc1RwbCA6IHRoaXMuX2NvbERpZmZlcnNJbnBcblxuICAgIGlmICghZGlmZmVyc01hcFtjb2wucHJvcF0pIHtcbiAgICAgIGRpZmZlcnNNYXBbY29sLnByb3BdID0gdGhpcy5fZGlmZmVycy5maW5kKHt9KS5jcmVhdGUoKVxuICAgIH1cblxuICAgIGNvbnN0IGRpZmZlciA9IGRpZmZlcnNNYXBbY29sLnByb3BdXG5cbiAgICBjb25zdCBkaWZmID0gZGlmZmVyLmRpZmYoY29sKVxuICAgIHJldHVybiBkaWZmXG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVVbnVzZWREaWZmcyhjb2xzOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pIHtcbiAgICBjb25zdCBpbnBLZXlzID0gT2JqZWN0LmtleXModGhpcy5fY29sRGlmZmVyc0lucClcbiAgICBpbnBLZXlzLmZpbHRlcihrID0+IGNvbHMuZmluZEluZGV4KGMgPT4gYy5wcm9wID09PSBrKSA9PT0gLTEpXG4gICAgICAuZm9yRWFjaChrID0+IHsgZGVsZXRlIHRoaXMuX2NvbERpZmZlcnNJbnBba10gfSlcblxuICAgIGNvbnN0IHRwbEtleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jb2xEaWZmZXJzVHBsKVxuICAgIHRwbEtleXMuZmlsdGVyKGsgPT4gY29scy5maW5kSW5kZXgoYyA9PiBjLnByb3AgPT09IGspID09PSAtMSlcbiAgICAgIC5mb3JFYWNoKGsgPT4geyBkZWxldGUgdGhpcy5fY29sRGlmZmVyc1RwbFtrXSB9KVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TWVudUJhckZpbHRlcnMoZmlsdGVyczogSURhdGFGaWx0ZXJbXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdfc2V0TWVudUJhckZpbHRlcnMnLCBmaWx0ZXJzKVxuICAgIHRoaXMuX2ZpbHRlcnNTdWJqZWN0Lm5leHQoZmlsdGVycyB8fCBbXSlcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5Db21wb25lbnQocHJvcE5hbWU6IHN0cmluZyk6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5jb2x1bW5Db21wb25lbnRzIHx8IHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgdHBsID0gdGhpcy5jb2x1bW5Db21wb25lbnRzLmZpbmQodCA9PiB0LnByb3AgPT09IHByb3BOYW1lKVxuICAgIGlmICh0cGwpIHtcbiAgICAgIHJldHVybiB0cGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgX2NvbHVtbkRhdGEoY29sOiBhbnkpOiB7IGNvbDogYW55LCBjb21wOiBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfCBudWxsIH0ge1xuICAgIGNvbnN0IGNvbXAgPSB0aGlzLmdldENvbHVtbkNvbXBvbmVudChjb2wucHJvcClcbiAgICByZXR1cm4geyBjb2wsIGNvbXAgfVxuICB9XG5cbiAgX2dldFJvd0V4cGFuZGVkKHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMubmd4RGF0YXRhYmxlICYmIHRoaXMubmd4RGF0YXRhYmxlLmJvZHlDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5neERhdGF0YWJsZS5ib2R5Q29tcG9uZW50LmdldFJvd0V4cGFuZGVkKHJvdylcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUZuQ29sdW1uKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtLnByb3BcbiAgfVxuXG4gIHB1YmxpYyBvbkRhdGF0YWJsZVJlc2l6ZShldmVudDogSUVsZW1lbnRSZXNpemVkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5uZ3hEYXRhdGFibGUgJiYgdGhpcy5uZ3hEYXRhdGFibGVFbGVtZW50ICYmIHRoaXMubmd4RGF0YXRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBpbnRlZ3JhdGluZyB0aGlzIGludG8gdGhlIG5neC1kYXRhdGFibGUgbGlicmFyeSB0byBhdm9pZFxuICAgICAgLy8gbXVsdGlwbGUgcmVzaXplIGNhbGxzIHdoZW4gdGhlIHRhYmxlIHJlc2l6ZXMgaXRzZWxmLlxuICAgICAgdGhpcy5uZ3hEYXRhdGFibGUucmVjYWxjdWxhdGUoKVxuICAgIH1cbiAgfVxuXG4gIF9vblJlc2l6ZShldmVudDogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3Jlc2l6ZScsIGV2ZW50LCBldmVudC5jb2x1bW4ucHJvcClcbiAgICB0aGlzLnJlc2l6ZS5lbWl0KGV2ZW50KVxuXG4gICAgaWYgKGV2ZW50LmlzRG9uZSAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnNcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnMuZmluZChjID0+IGMucHJvcCA9PT0gZXZlbnQuY29sdW1uLnByb3ApXG4gICAgICBpZiAoY29sKSB7XG4gICAgICAgIGNvbC5jYW5BdXRvUmVzaXplID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJlZmVyZW5jZXNLZXkpIHtcbiAgICAgICAgY29uc3QgcHJlZiA9IHsgcHJvcDogZXZlbnQuY29sdW1uLnByb3AsIHdpZHRoOiBldmVudC5jb2x1bW4ud2lkdGgsIGNhbkF1dG9SZXNpemU6IGZhbHNlIH1cbiAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMuc2V0Q29sdW1uUHJlZmVyZW5jZSh0aGlzLnByZWZlcmVuY2VzS2V5LCBwcmVmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbIC4uLnRoaXMuY29sdW1ucyBdXG4gICAgfVxuICB9XG5cbiAgX29uVHJlZUFjdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5kZXggPSBldmVudC5yb3dJbmRleFxuICAgIGNvbnN0IHJvdyA9IGV2ZW50LnJvd1xuICAgIGlmIChyb3cudHJlZVN0YXR1cyA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgIHJvdy50cmVlU3RhdHVzID0gJ2V4cGFuZGVkJ1xuICAgIH0gZWxzZSB7XG4gICAgICByb3cudHJlZVN0YXR1cyA9ICdjb2xsYXBzZWQnXG4gICAgfVxuICAgIHRoaXMucm93cyA9IFsgLi4udGhpcy5yb3dzIF1cbiAgfVxuXG4gIHB1YmxpYyB0cmlnZ2VyQWN0aW9uUmVmcmVzaFJlcXVlc3QoKSB7XG4gICAgdGhpcy5hY3Rpb25SZWZyZXNoUmVxdWVzdC5lbWl0KHVuZGVmaW5lZClcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnZUluZm8oKTogVGhlU2VhbVBhZ2VJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiB0aGlzLm5neERhdGF0YWJsZT8ub2Zmc2V0ID8/IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5uZ3hEYXRhdGFibGU/LnBhZ2VTaXplID8/IDAsXG4gICAgICBsaW1pdDogdGhpcy5uZ3hEYXRhdGFibGU/LmxpbWl0LFxuICAgICAgY291bnQ6IHRoaXMubmd4RGF0YXRhYmxlPy5jb3VudCA/PyAwXG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|
|
586
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFDYSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFDbkYsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFDM0QsZUFBZSxFQUFxQixNQUFNLEVBQTBCLFNBQVMsRUFDOUUsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2xHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBRXZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzNDLDJCQUEyQixFQUMzQixpQkFBaUIsRUFDakIsUUFBUSxFQUVSLGtCQUFrQixFQUVuQixNQUFNLHVCQUF1QixDQUFBO0FBRzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0s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LE1BQU0sRUFBRSxJQUFJLEVBQUU7O0FBOUh6QjtJQUFmLFlBQVksRUFBRTswREFBZ0M7QUFDL0I7SUFBZixZQUFZLEVBQUU7MkRBQWlDO0FBQ2hDO0lBQWYsWUFBWSxFQUFFOzZEQUFtQztBQUVuQztJQUFkLFdBQVcsRUFBRTtpREFBMEI7QUFDeEI7SUFBZixXQUFXLENBQUMsQ0FBQyxDQUFDO2lEQUFrQjtBQUNqQjtJQUFmLFdBQVcsQ0FBQyxDQUFDLENBQUM7a0RBQW1CO0FBRWxCO0lBQWYsWUFBWSxFQUFFOzREQUFrQztBQUlqQztJQUFmLFlBQVksRUFBRTt1REFBNEI7QUFDM0I7SUFBZixZQUFZLEVBQUU7dURBQTZCO0FBdUM1QjtJQUFmLFlBQVksRUFBRTtpRUFBdUM7QUFJdEM7SUFBZixZQUFZLEVBQUU7K0RBQXFDO0FBSXBDO0lBQWYsWUFBWSxFQUFFO3NEQUE0QjtBQUM1QjtJQUFkLFdBQVcsRUFBRTt5REFBMkI7QUFHekI7SUFBZixZQUFZLEVBQUU7MERBQStCO0FBRS9CO0lBQWQsV0FBVyxFQUFFO3dEQUEwQjtBQUN6QjtJQUFkLFdBQVcsRUFBRTtxREFBdUI7QUFDdEI7SUFBZCxXQUFXLEVBQUU7d0RBQTBCO0FBRXhCO0lBQWYsWUFBWSxFQUFFO3NEQUEyQjtBQUMxQjtJQUFmLFlBQVksRUFBRTtzREFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUFycmF5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdGlvblRva2VuLCBJbnB1dCwgS2V5VmFsdWVEaWZmZXIsXG4gIEtleVZhbHVlRGlmZmVycywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY29uY2F0TWFwLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IERhdGF0YWJsZURhdGFTb3VyY2UgfSBmcm9tICcuLy4uL21vZGVscy9kYXRhdGFibGUtZGF0YS1zb3VyY2UnXG5cbmltcG9ydCB7IGZhQ2hldnJvbkRvd24sIGZhQ2hldnJvblJpZ2h0LCBmYVNwaW5uZXIgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQge1xuICBDb2x1bW5Nb2RlLFxuICBDb250ZXh0bWVudVR5cGUsXG4gIERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlLFxuICBEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmUsXG4gIERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZSxcbiAgRGF0YXRhYmxlQ29tcG9uZW50IGFzIE5neERhdGF0YWJsZUNvbXBvbmVudCxcbiAgRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlLFxuICBzZXRDb2x1bW5EZWZhdWx0cyxcbiAgU29ydFR5cGUsXG4gIFRhYmxlQ29sdW1uLFxuICB0cmFuc2xhdGVUZW1wbGF0ZXMsXG4gIFRyZWVTdGF0dXNcbn0gZnJvbSAnQG1hcmtsYi9uZ3gtZGF0YXRhYmxlJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnQG1hcmtsYi9uZ3gtZGF0YXRhYmxlJ1xuXG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2NvcmUnXG5pbXBvcnQgeyBjb21wb3NlRGF0YUZpbHRlcnMsIGNvbXBvc2VEYXRhRmlsdGVyU3RhdGVzLCBEYXRhRmlsdGVyU3RhdGUsIElEYXRhRmlsdGVyIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2RhdGEtZmlsdGVycydcbmltcG9ydCB7IElFbGVtZW50UmVzaXplZEV2ZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3NoYXJlZCdcbmltcG9ydCB7IGhhc1Byb3BlcnR5LCBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3ZXIsIERhdGFTb3VyY2UsIGlzRGF0YVNvdXJjZSwgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJ1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtYWN0aW9uLW1lbnUvZGF0YXRhYmxlLWFjdGlvbi1tZW51LmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1jb2x1bW4vZGF0YXRhYmxlLWNvbHVtbi5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YXRhYmxlLWZvb3Rlci9kYXRhdGFibGUtZm9vdGVyLmRpcmVjdGl2ZSdcbmltcG9ydCB7IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtbWVudS1iYXIvZGF0YXRhYmxlLW1lbnUtYmFyLmNvbXBvbmVudCdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRhdGFibGUtcm93LWRldGFpbC9kYXRhdGFibGUtcm93LWRldGFpbC5kaXJlY3RpdmUnXG5pbXBvcnQgeyBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRhdGFibGUtcm93LWFjdGlvbi1pdGVtLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVBY2Nlc3NvciB9IGZyb20gJy4uL21vZGVscy9kYXRhdGFibGUtYWNjZXNzb3InXG5pbXBvcnQgeyBUaGVTZWFtUGFnZUluZm8gfSBmcm9tICcuLi9tb2RlbHMvcGFnZS1pbmZvJ1xuaW1wb3J0IHsgU29ydEV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL3NvcnQtZXZlbnQnXG5pbXBvcnQgeyBTb3J0SXRlbSB9IGZyb20gJy4uL21vZGVscy9zb3J0LWl0ZW0nXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbidcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGF0YXRhYmxlLWNvbHVtbi1jaGFuZ2VzLnNlcnZpY2UnXG5pbXBvcnQgeyBEYXRhdGFibGVQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhdGFibGUtcHJlZmVyZW5jZXMuc2VydmljZSdcbmltcG9ydCB7IFRIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SIH0gZnJvbSAnLi4vdG9rZW5zL2RhdGF0YWJsZS1hY2Nlc3NvcidcblxuZXhwb3J0IGZ1bmN0aW9uIF9zZXRDb2x1bW5EZWZhdWx0cyhjb2x1bW5zOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgIGlmICghY29sdW1uLmhhc093blByb3BlcnR5KCdoaWRkZW4nKSkge1xuICAgICAgY29sdW1uLmhpZGRlbiA9IGZhbHNlXG4gICAgfVxuICB9XG4gIHNldENvbHVtbkRlZmF1bHRzKGNvbHVtbnMpXG59XG5cbi8qKlxuICogTk9URTogVGhpcyBpcyBzdGlsbCBiZWluZyB3b3JrZWQgb24uIEkgYW0gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhpcyBtb2RlbFxuICogYmVjYXVzZSBgbmd4LWRhdGF0YWJsZWAganVzdCB1c2VzIGFuIHVudHlwZWQgb2JqZWN0IGFuZCBzZXRzIHByb3BlcnRpZXMgaW5cbiAqIG11bHRpcGxlIHBsYWNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2VsbENvbnRleHQge1xuICBhbGxSb3dzU2VsZWN0ZWQ6IGZhbHNlXG5cbiAgc2VsZWN0Rm46ICgpID0+IGFueVxuICBzb3J0RGlyPzogJ2FzYycgfCAnZGVzYydcbiAgc29ydEZuOiAoKSA9PiBhbnlcblxuICBleHBhbmRlZD86IGJvb2xlYW5cblxuICBvbkNoZWNrYm94Q2hhbmdlRm4/OiBhbnlcbiAgYWN0aXZhdGVGbj86IGFueVxuICByb3c/OiBhbnlcbiAgZ3JvdXA/OiBhbnlcbiAgdmFsdWU/OiBhbnlcbiAgY29sdW1uPzogVGhlU2VhbURhdGF0YWJsZUNvbHVtblxuICByb3dIZWlnaHQ/OiBudW1iZXJcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW5cbiAgcm93SW5kZXg/OiBudW1iZXJcbiAgdHJlZVN0YXR1cz86IFRyZWVTdGF0dXNcbiAgb25UcmVlQWN0aW9uPzogYW55XG59XG5cbi8qKlxuICogSW50ZW5kZWQgZm9yIGludGVybmFsIGNsYXNzZXMgZGVjbGFyZWQgYnkgdGhlIGBUaGVTZWFtRGF0YXRhYmxlTW9kdWxlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRIRVNFQU1fREFUQVRBQkxFID0gbmV3IEluamVjdGlvblRva2VuPElEYXRhRmlsdGVyPignTGliRGF0YXRhYmxlJylcblxuZXhwb3J0IGNvbnN0IF9USEVTRUFNX0RBVEFUQUJMRTogYW55ID0ge1xuICBwcm92aWRlOiBUSEVTRUFNX0RBVEFUQUJMRSxcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhdGFibGVDb21wb25lbnQpXG59XG5cbmV4cG9ydCBjb25zdCBfVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YXRhYmxlQ29tcG9uZW50KVxufVxuXG4vLyBUT0RPOiBSZWR1Y2UgcmVsaWFuY2Ugb24gQmVoYXZpb3JTdWJqZWN0IGJhc2VkIG9ic2VydmFibGVzLCBiZWNhdXNlIGl0IHNob3VsZFxuLy8gYmUgZWFzaWVyIHRvIGF2b2l0IG92ZXIgZW1pdHRpbmcgb2JzZXJ2YWJsZXMuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWRhdGF0YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZURvd24nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjAlKScsIG9wYWNpdHk6ICcwJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAnMScgfSkpLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwJSknLCBvcGFjaXR5OiAnMCcgfSkpLFxuICAgICAgXSlcbiAgICBdKVxuICBdLFxuICBwcm92aWRlcnM6IFsgX1RIRVNFQU1fREFUQVRBQkxFLCBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSwgX1RIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQsIFRoZVNlYW1EYXRhdGFibGVBY2Nlc3NvciwgQ29sbGVjdGlvblZpZXdlciB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHRlcm5hbFBhZ2luZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHRlcm5hbFNvcnRpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxGaWx0ZXJpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbG9hZGluZ0luZGljYXRvcjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZW9yZGVyYWJsZTogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zd2FwQ29sdW1uczogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9ncm91cEV4cGFuc2lvbkRlZmF1bHQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2VsZWN0QWxsUm93c09uUGFnZTogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdW1tYXJ5Um93OiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3ZpcnR1YWxpemF0aW9uOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Njcm9sbGJhclY6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2Nyb2xsYmFySDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9saW1pdDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NvdW50OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb2Zmc2V0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGVhZGVySGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcm93SGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZm9vdGVySGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3VtbWFyeUhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NvbHVtbnM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSB8IHVuZGVmaW5lZCB8IG51bGxcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NvcnRzOiBTb3J0SXRlbVtdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIGZhQ2hldnJvbkRvd24gPSBmYUNoZXZyb25Eb3duXG4gIGZhQ2hldnJvblJpZ2h0ID0gZmFDaGV2cm9uUmlnaHRcbiAgZmFTcGlubmVyID0gZmFTcGlubmVyXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KClcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElEYXRhRmlsdGVyW10+KFtdKVxuICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5zT2JzZXJ2YWJsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGFTb3VyY2VTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhU291cmNlPGFueT4gfCBhbnlbXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJTdGF0ZXM6IE9ic2VydmFibGU8RGF0YUZpbHRlclN0YXRlW10+XG5cbiAgZ2V0IGZpbHRlcnMoKTogSURhdGFGaWx0ZXJbXSB7IHJldHVybiB0aGlzLl9maWx0ZXJzU3ViamVjdC52YWx1ZSB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlcnMkOiBPYnNlcnZhYmxlPElEYXRhRmlsdGVyW10+XG5cbiAgQElucHV0KClcbiAgZ2V0IHByZWZlcmVuY2VzS2V5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgeyByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXNLZXkudmFsdWUgfVxuICBzZXQgcHJlZmVyZW5jZXNLZXkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpIHsgdGhpcy5fcHJlZmVyZW5jZXNLZXkubmV4dCh2YWx1ZSB8fCB1bmRlZmluZWQpIH1cbiAgcHJpdmF0ZSBfcHJlZmVyZW5jZXNLZXkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw+KHVuZGVmaW5lZClcblxuICBASW5wdXQoKSB0YXJnZXRNYXJrZXJUZW1wbGF0ZTogYW55XG5cbiAgQElucHV0KClcbiAgZ2V0IGNvbHVtbnMoKTogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdIHsgcmV0dXJuIHRoaXMuX2NvbHVtbnMudmFsdWUgfVxuICBzZXQgY29sdW1ucyh2YWx1ZTogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2NvbHVtbnMgaW5wdXQnLCB2YWx1ZSlcbiAgICB0aGlzLl9jb2x1bW5zLm5leHQoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdKVxuICB9XG4gIHByaXZhdGUgX2NvbHVtbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT4oW10pXG5cbiAgQElucHV0KClcbiAgZ2V0IHJvd3MoKTogYW55W10geyByZXR1cm4gdGhpcy5fcm93cy52YWx1ZSB9XG4gIHNldCByb3dzKHZhbHVlOiBhbnlbXSkgeyB0aGlzLl9yb3dzLm5leHQodmFsdWUgfHwgW10pIH1cbiAgcHJpdmF0ZSBfcm93cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxuXG4gIHB1YmxpYyByb3dzJDogT2JzZXJ2YWJsZTxhbnlbXT5cblxuICBASW5wdXQoKSBjb2x1bW5Nb2RlOiBDb2x1bW5Nb2RlIHwgdW5kZWZpbmVkIHwgbnVsbCA9IENvbHVtbk1vZGUuZm9yY2VcblxuICBASW5wdXQoKSBncm91cFJvd3NCeTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBncm91cGVkUm93czogYW55W10gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCA9IFtdXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsUGFnaW5nOiBib29sZWFuID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsU29ydGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbEZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgbGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoMCkgY291bnQ6IG51bWJlciA9IDBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKDApIG9mZnNldDogbnVtYmVyID0gMFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBsb2FkaW5nSW5kaWNhdG9yOiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiBTZWxlY3Rpb25UeXBlIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSByZW9yZGVyYWJsZTogYm9vbGVhbiA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHN3YXBDb2x1bW5zOiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKSBzb3J0VHlwZTogU29ydFR5cGUgfCB1bmRlZmluZWQgfCBudWxsID0gU29ydFR5cGUuc2luZ2xlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNvcnRzKCk6IFNvcnRJdGVtW10geyByZXR1cm4gdGhpcy5uZ3hEYXRhdGFibGUgPyB0aGlzLm5neERhdGF0YWJsZS5zb3J0cyA6IHRoaXMuX3NvcnRzIH1cbiAgc2V0IHNvcnRzKHZhbHVlOiBTb3J0SXRlbVtdKSB7XG4gICAgdGhpcy5fc29ydHMgPSBub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gY29lcmNlQXJyYXkodmFsdWUpIDogW11cbiAgfVxuICBfc29ydHM6IFNvcnRJdGVtW10gPSBbXVxuXG4gIEBJbnB1dCgpIGNzc0NsYXNzZXM6IGFueSB8IHVuZGVmaW5lZCB8IG51bGwgPSB7XG4gICAgc29ydEFzY2VuZGluZzogJ2RhdGF0YWJsZS1pY29uLXVwJyxcbiAgICBzb3J0RGVzY2VuZGluZzogJ2RhdGF0YWJsZS1pY29uLWRvd24nLFxuICAgIHBhZ2VyTGVmdEFycm93OiAnZGF0YXRhYmxlLWljb24tbGVmdCcsXG4gICAgcGFnZXJSaWdodEFycm93OiAnZGF0YXRhYmxlLWljb24tcmlnaHQnLFxuICAgIHBhZ2VyUHJldmlvdXM6ICdkYXRhdGFibGUtaWNvbi1wcmV2JyxcbiAgICBwYWdlck5leHQ6ICdkYXRhdGFibGUtaWNvbi1za2lwJ1xuICB9XG5cbiAgQElucHV0KCkgbWVzc2FnZXM6IGFueSB8IHVuZGVmaW5lZCB8IG51bGwgPSB7XG4gICAgLy8gTWVzc2FnZSB0byBzaG93IHdoZW4gYXJyYXkgaXMgcHJlc2VudGVkXG4gICAgLy8gYnV0IGNvbnRhaW5zIG5vIHZhbHVlc1xuICAgIGVtcHR5TWVzc2FnZTogJ05vIHJlY29yZHMgZm91bmQnLFxuXG4gICAgLy8gRm9vdGVyIHRvdGFsIG1lc3NhZ2VcbiAgICB0b3RhbE1lc3NhZ2U6ICd0b3RhbCcsXG5cbiAgICAvLyBGb290ZXIgc2VsZWN0ZWQgbWVzc2FnZVxuICAgIHNlbGVjdGVkTWVzc2FnZTogJ3NlbGVjdGVkJ1xuICB9XG5cbiAgQElucHV0KCkgcm93SWRlbnRpdHk6ICgoeDogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkIHwgbnVsbCA9ICgoeDogYW55KSA9PiB4KVxuXG4gIEBJbnB1dCgpIHJvd0NsYXNzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgc2VsZWN0Q2hlY2s6IGFueSB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgZGlzcGxheUNoZWNrOiAoKHJvdzogYW55LCBjb2x1bW4/OiBhbnksIHZhbHVlPzogYW55KSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZ3JvdXBFeHBhbnNpb25EZWZhdWx0OiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKSB0cmFja0J5UHJvcDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzZWxlY3RBbGxSb3dzT25QYWdlOiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKSB0cmVlRnJvbVJlbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIHRyZWVUb1JlbGF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzdW1tYXJ5Um93OiBib29sZWFuID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgc3VtbWFyeUhlaWdodDogbnVtYmVyID0gMzBcbiAgQElucHV0KCkgc3VtbWFyeVBvc2l0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsID0gJ3RvcCdcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdmlydHVhbGl6YXRpb246IGJvb2xlYW4gPSB0cnVlXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgaGVhZGVySGVpZ2h0OiBudW1iZXIgPSA1MFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSByb3dIZWlnaHQ6IG51bWJlciA9IDUwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGZvb3RlckhlaWdodDogbnVtYmVyID0gNDBcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2Nyb2xsYmFyVjogYm9vbGVhbiA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNjcm9sbGJhckg6IGJvb2xlYW4gPSB0cnVlXG5cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IERhdGFTb3VyY2U8YW55PiB8IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGF0YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHZhbHVlLnNldERhdGF0YWJsZUFjY2Vzc29yKHRoaXMpXG4gICAgfVxuICAgIHRoaXMuX2RhdGFTb3VyY2VTdWJqZWN0Lm5leHQodmFsdWUgfHwgdW5kZWZpbmVkKVxuICB9XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBhY3RpdmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydEV2ZW50PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBwYWdlID0gbmV3IEV2ZW50RW1pdHRlcjxUaGVTZWFtUGFnZUluZm8+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlb3JkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVzaXplID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHRhYmxlQ29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQsIHR5cGU6IENvbnRleHRtZW51VHlwZSwgY29udGVudDogYW55IH0+KGZhbHNlKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGlvblJlZnJlc2hSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBoaWRkZW5Db2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50KSBjb2x1bW5Db21wb25lbnRzPzogUXVlcnlMaXN0PERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudD5cblxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGFjdGlvbk1lbnU/OiBEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50XG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcm93QWN0aW9uSXRlbT86IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmVcbiAgQENvbnRlbnRDaGlsZChUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSByb3dEZXRhaWw/OiBUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlXG4gIEBDb250ZW50Q2hpbGQoVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZm9vdGVyPzogVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudClcbiAgZ2V0IG1lbnVCYXJDb21wb25lbnQoKTogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9tZW51QmFyQ29tcG9uZW50IH1cbiAgc2V0IG1lbnVCYXJDb21wb25lbnQodmFsdWU6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tZW51QmFyQ29tcG9uZW50ID0gdmFsdWVcblxuICAgIGlmICh0aGlzLl9tZW51QmFyU3ViKSB7IHRoaXMuX21lbnVCYXJTdWIudW5zdWJzY3JpYmUoKSB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSlcblxuICAgICAgdGhpcy5fbWVudUJhclN1YiA9IHRoaXMuX21lbnVCYXJDb21wb25lbnQ/LmZpbHRlcnNDaGFuZ2VkXG4gICAgICAgIC5zdWJzY3JpYmUodiA9PiB7IHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSkgfSlcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWVudUJhckNvbXBvbmVudDogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9tZW51QmFyU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKE5neERhdGF0YWJsZUNvbXBvbmVudCkgbmd4RGF0YXRhYmxlPzogTmd4RGF0YXRhYmxlQ29tcG9uZW50XG4gIEBWaWV3Q2hpbGQoTmd4RGF0YXRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmd4RGF0YXRhYmxlRWxlbWVudD86IEVsZW1lbnRSZWZcbiAgQFZpZXdDaGlsZChEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUpIG5neFJvd0RldGFpbD86IERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuXG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbk1lbnVDZWxsVHBsJywgeyBzdGF0aWM6IHRydWUgfSkgYWN0aW9uTWVudUNlbGxUcGw/OiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+XG4gIEBWaWV3Q2hpbGQoJ3RyZWVUb2dnbGVUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0cmVlVG9nZ2xlVHBsPzogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+XG4gIEBWaWV3Q2hpbGQoJ2hlYWRlclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pIGhlYWRlclRwbD86IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT5cbiAgQFZpZXdDaGlsZCgnYmxhbmtIZWFkZXJUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBibGFua0hlYWRlclRwbD86IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT5cbiAgQFZpZXdDaGlsZCgnY2VsbFR5cGVTZWxlY3RvclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pIGNlbGxUeXBlU2VsZWN0b3JUcGw/OiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+XG5cbiAgcHVibGljIGNvbHVtbkNvbXBvbmVudHMkPzogT2JzZXJ2YWJsZTxEYXRhdGFibGVDb2x1bW5Db21wb25lbnRbXT5cbiAgcHJpdmF0ZSBfY29sRGlmZmVyc0lucDogeyBbcHJvcE5hbWU6IHN0cmluZ106IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB9ID0ge31cbiAgcHJpdmF0ZSBfY29sRGlmZmVyc1RwbDogeyBbcHJvcE5hbWU6IHN0cmluZ106IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB9ID0ge31cblxuICBwdWJsaWMgcmVhZG9ubHkgY29sdW1ucyQ6IE9ic2VydmFibGU8VGhlU2VhbURhdGF0YWJsZUNvbHVtbltdPlxuICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheUNvbHVtbnMkOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT5cblxuICB2aWV3Q2hhbmdlOiBPYnNlcnZhYmxlPExpc3RSYW5nZT5cblxuICBwcml2YXRlIF9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFlcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5DaGFuZ2VzU2VydmljZTogRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGlmZmVyczogS2V5VmFsdWVEaWZmZXJzLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ByZWZlcmVuY2VzOiBEYXRhdGFibGVQcmVmZXJlbmNlc1NlcnZpY2VcbiAgKSB7XG4gICAgLy8gdGhpcy5kaXNwbGF5Q29sdW1ucyQgPSB0aGlzLmhpZGRlbkNvbHVtbnMkLnBpcGUoXG4gICAgLy8gICBzd2l0Y2hNYXAoaGlkZGVuQ29sdW1ucyA9PiB0aGlzLmNvbHVtbnMkLnBpcGUobWFwKGNvbHMgPT4gY29scy5maWx0ZXIoYyA9PiBoaWRkZW5Db2x1bW5zLmZpbmRJbmRleChoYyA9PiBoYyA9PT0gYy5wcm9wKSA9PT0gLTEpKSkpXG4gICAgLy8gKVxuXG4gICAgY29uc3QgYXBwbHlQcmVmcyA9IChjb2xzOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pID0+IHRoaXMuX3ByZWZlcmVuY2VzS2V5LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAobmFtZSA9PiAhIW5hbWVcbiAgICAgICAgLy8gTk9URTogVGhpcyBwZW5kaW5nIGNoZWNrIGlzIHRlbXBvcmFyeSB0byBhdm9pZCB0YWJsZSB1c2luZyBwcmV2aW91c2x5XG4gICAgICAgIC8vIHJldHJpZXZlZCBwcmVmZXJlbmNlIHdoaWxlIHRoZSBuZXcgb25lIGlzIGJlaW5nIHVwZGF0ZWQgb24gdGhlXG4gICAgICAgIC8vIHNlcnZlci5cbiAgICAgICAgPyAhdGhpcy5fcHJlZmVyZW5jZXMucGVuZGluZ1xuICAgICAgICAgID8gdGhpcy5fcHJlZmVyZW5jZXMud2l0aENvbHVtblByZWZlcmVuY2VzKG5hbWUsIGNvbHMpXG4gICAgICAgICAgOiBvZihjb2xzKVxuICAgICAgICA6IG9mKGNvbHMpXG4gICAgICApXG4gICAgKVxuXG4gICAgdGhpcy5jb2x1bW5zJCA9IHRoaXMuX2NvbHVtbnNPYnNlcnZhYmxlLnBpcGUoc3dpdGNoTWFwKGNvbHNPYnMgPT4gY29sc09icyA/PyBvZihbXSkpKVxuXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyQgPSB0aGlzLmNvbHVtbnMkLnBpcGUoXG4gICAgICBtYXAoY29scyA9PiBjb2xzLmZpbHRlcihjID0+ICFjLmhpZGRlbikpLFxuICAgICAgdGFwKHYgPT4gdGhpcy5fcmVtb3ZlVW51c2VkRGlmZnModikpLFxuICAgICAgc3dpdGNoTWFwKGNvbHMgPT4gYXBwbHlQcmVmcyhjb2xzKSksXG4gICAgKVxuXG4gICAgdGhpcy5maWx0ZXJzJCA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG5cbiAgICB0aGlzLmZpbHRlclN0YXRlcyA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZmlsdGVycyA9PiBjb21wb3NlRGF0YUZpbHRlclN0YXRlcyhmaWx0ZXJzKSlcbiAgICApXG5cbiAgICAvLyB0aGlzLnJvd3MkID0gdGhpcy5fZmlsdGVyc1N1YmplY3QuYXNPYnNlcnZhYmxlKClcbiAgICAvLyAgIC5waXBlKFxuICAgIC8vICAgICBzd2l0Y2hNYXAoZmlsdGVycyA9PiB7XG4gICAgLy8gICAgICAgaWYgKHRoaXMuZXh0ZXJuYWxGaWx0ZXJpbmcpIHtcbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzLl9yb3dzLmFzT2JzZXJ2YWJsZSgpXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgIHJldHVybiB0aGlzLl9yb3dzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoY29tcG9zZURhdGFGaWx0ZXJzKGZpbHRlcnMpKVxuICAgIC8vICAgICB9KVxuICAgIC8vICAgKVxuXG4gICAgdGhpcy5yb3dzJCA9IHRoaXMuX2RhdGFTb3VyY2VTdWJqZWN0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZGF0YVNvdXJjZSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhU291cmNlJywgZGF0YVNvdXJjZSlcbiAgICAgICAgbGV0IGRhdGFTdHJlYW06IE9ic2VydmFibGU8YW55W10+XG5cbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+ZGF0YXNvdXJjZScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTb3VyY2UuY29ubmVjdCh0aGlzKSBhcyBhbnlcbiAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfm9ic2VydmFibGUnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU291cmNlIGFzIGFueVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfmFycmF5JylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gb2YoZGF0YVNvdXJjZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfnJvd3MgZmFsbGJhY2snKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSB0aGlzLl9yb3dzLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAvLyAucGlwZSh0YXAodiA9PiBjb25zb2xlLmxvZygncm93c34nLCB2KSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZXh0ZXJuYWxGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbm90IHVzaW5nIGV4dGVybmFsRmlsdGVyaW5nJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVN0cmVhbS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHJvd3MgPT4gdGhpcy5fZmlsdGVyc1N1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ2ZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgICAgIGNvbmNhdE1hcChmaWx0ZXJzID0+IG9mKHJvd3MpLnBpcGUoY29tcG9zZURhdGFGaWx0ZXJzKGZpbHRlcnMpKSksXG4gICAgICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdjb21wb3NlZCBmaWx0ZXJzJywgdikpLFxuICAgICAgICAgICAgKSlcbiAgICAgICAgICApXG5cbiAgICAgICAgICAvLyBkYXRhU3RyZWFtID0gdGhpcy5fZmlsdGVyc1N1YmplY3QucGlwZShcbiAgICAgICAgICAvLyAgIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdmaWx0ZXJzJywgdikpLFxuICAgICAgICAgIC8vICAgY29uY2F0TWFwKGZpbHRlcnMgPT4gZGF0YVN0cmVhbS5waXBlKGNvbXBvc2VEYXRhRmlsdGVycyhmaWx0ZXJzKSkpLFxuICAgICAgICAgIC8vICAgdGFwKHYgPT4gY29uc29sZS5sb2coJ2NvbXBvc2VkIGZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgLy8gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGFTdHJlYW0ucGlwZShcbiAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnc3RyZWFtJywgdikpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIClcblxuICAgIC8vIHRoaXMuaGlkZGVuQ29sdW1ucyQgPSB0aGlzLl9oaWRkZW5Db2x1bW5zLmFzT2JzZXJ2YWJsZSgpXG5cbiAgICAvLyB0aGlzLl9oaWRkZW5Db2x1bW5zLnBpcGUoXG4gICAgLy8gICBza2lwKDEpLFxuICAgIC8vICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IHtcbiAgICAvLyAgICAgY29uc3QgX2EgPSBBcnJheS5pc0FycmF5KGEpID8gYSA6IFtdXG4gICAgLy8gICAgIGNvbnN0IF9iID0gQXJyYXkuaXNBcnJheShiKSA/IGIgOiBbXVxuICAgIC8vICAgICBpZiAoX2EubGVuZ3RoICE9PSBfYi5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAvLyAgICAgY29uc3QgX2FzID0gX2Euc29ydCgpXG4gICAgLy8gICAgIGNvbnN0IF9icyA9IF9iLnNvcnQoKVxuICAgIC8vICAgICByZXR1cm4gIV9hcy5zb3J0KCkuZXZlcnkoKHZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IF9ic1tpbmRleF0gPT09IHZhbHVlKVxuICAgIC8vICAgfSksXG4gICAgLy8gICB0YXAodiA9PiB0aGlzLmhpZGRlbkNvbHVtbnNDaGFuZ2UuZW1pdCh2KSksXG4gICAgLy8gICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgIC8vICkuc3Vic2NyaWJlKHYgPT4gY29uc29sZS5sb2coJ2hpZGRlbkNvbHVtbnNDaGFuZ2UnLCB2KSlcblxuICAgIC8vIFRPRE86IEltcGxlbWVudCB2aWV3Q2hhbmdlIGZvciBDb2xsZWN0aW9uVmlld2VyLlxuICAgIHRoaXMudmlld0NoYW5nZSA9IHRoaXMucGFnZS5waXBlKG1hcChwID0+ICh7IHN0YXJ0OiAwLCBlbmQ6IHAuY291bnQgfSkpKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucm93RGV0YWlsKSB7XG4gICAgICB0aGlzLl9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24gPSB0aGlzLnJvd0RldGFpbC5fdG9nZ2xlLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmICh0aGlzLm5neFJvd0RldGFpbCkge1xuICAgICAgICAgIHRoaXMubmd4Um93RGV0YWlsLnRvZ2dsZS5lbWl0KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5jb2x1bW5Db21wb25lbnRzJCA9IHRoaXMuX2NvbHVtbkNoYW5nZXNTZXJ2aWNlLmNvbHVtbklucHV0Q2hhbmdlcyQucGlwZShcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbHVtbkNvbXBvbmVudHM/LnRvQXJyYXkoKSA/PyBbXSksXG4gICAgICBzdGFydFdpdGgodGhpcy5jb2x1bW5Db21wb25lbnRzPy50b0FycmF5KCkgPz8gW10pLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgIClcblxuICAgIGNvbnN0IF9jb2x1bW5zID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmNvbHVtbkNvbXBvbmVudHMkLFxuICAgICAgdGhpcy5fY29sdW1uc1xuICAgIF0pLnBpcGUoXG4gICAgICBtYXAodiA9PiB0aGlzLl9nZXRNZXJnZWRUcGxBbmRJbnBDb2x1bW5zKHZbMF0sIHZbMV0gPz8gW10pKSxcbiAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdjb2xzJywgdikpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApXG4gICAgdGhpcy5fY29sdW1uc09ic2VydmFibGUubmV4dChfY29sdW1ucylcbiAgfVxuXG4gIHByaXZhdGUgX2dldE1lcmdlZFRwbEFuZElucENvbHVtbnMoXG4gICAgdHBsQ29sczogRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50W10sXG4gICAgaW5wQ29sczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdXG4gICk6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSB7XG4gICAgY29uc3QgY29sczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdID0gW11cblxuICAgIGlmICh0aGlzLnNlbGVjdGlvblR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgIGNvbnN0IGNoZWNrQm94Q29sOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uID0ge1xuICAgICAgICBwcm9wOiAnJCRfX2NoZWNrYm94X18nLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgd2lkdGg6IDQwLFxuICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgIGNhbkF1dG9SZXNpemU6IGZhbHNlLFxuICAgICAgICBkcmFnZ2FibGU6IGZhbHNlLFxuICAgICAgICByZXNpemVhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGVyQ2hlY2tib3hhYmxlOiB0cnVlLFxuICAgICAgICBjaGVja2JveGFibGU6IHRydWVcbiAgICAgIH1cblxuICAgICAgY29scy5wdXNoKGNoZWNrQm94Q29sKVxuICAgIH1cblxuICAgIGNvbnN0IF90cGxDb2xzID0gdHJhbnNsYXRlVGVtcGxhdGVzKDxhbnk+KHRwbENvbHMgfHwgW10pKVxuICAgIGZvciAoY29uc3QgY29sIG9mIGlucENvbHMpIHtcbiAgICAgIGNvbnN0IHRwbENvbCA9IF90cGxDb2xzLmZpbmQodCA9PiB0LnByb3AgPT09IGNvbC5wcm9wKVxuICAgICAgLy8gY29uc29sZS5sb2coeyBjb2w6IHsgLi4uKGNvbCB8fCB7fSkgfSwgdHBsQ29sOiB7IC4uLih0cGxDb2wgfHwge30pIH0gfSlcblxuICAgICAgY29uc3QgZHRDb2x1bW5zID0gKHRoaXMubmd4RGF0YXRhYmxlICYmIHRoaXMubmd4RGF0YXRhYmxlLl9pbnRlcm5hbENvbHVtbnMpIHx8IFtdXG4gICAgICBjb25zdCBwcmV2ID0gZHRDb2x1bW5zLmZpbmQoYyA9PiBjLnByb3AgPT09IGNvbC5wcm9wKVxuXG4gICAgICBjb25zdCBpbnBDb2xEaWZmID0gdGhpcy5fZ2V0Q29sRGlmZihjb2wpXG4gICAgICBjb25zdCBfaW5wQ29sID0gaW5wQ29sRGlmZiA/IHt9IDogdGhpcy5faGFzUHJldkNvbERpZmYoY29sKSA/IHt9IDogY29sXG4gICAgICBpZiAoaW5wQ29sRGlmZikge1xuICAgICAgICBpbnBDb2xEaWZmLmZvckVhY2hSZW1vdmVkSXRlbShyID0+IHtcbiAgICAgICAgICBpZiAocHJldiAmJiBwcmV2Lmhhc093blByb3BlcnR5KHIua2V5KSkge1xuICAgICAgICAgICAgY29uc3QgayA9IHIua2V5IGFzIGtleW9mIFRhYmxlQ29sdW1uXG4gICAgICAgICAgICBkZWxldGUgcHJldltrXVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgaW5wQ29sRGlmZi5mb3JFYWNoQWRkZWRJdGVtKHIgPT4gKF9pbnBDb2wgYXMgYW55KVtyLmtleV0gPSByLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgaW5wQ29sRGlmZi5mb3JFYWNoQ2hhbmdlZEl0ZW0ociA9PiAoX2lucENvbCBhcyBhbnkpW3Iua2V5XSA9IHIuY3VycmVudFZhbHVlKVxuICAgICAgfVxuXG4gICAgICBsZXQgX3RwbENvbDogVGhlU2VhbURhdGF0YWJsZUNvbHVtbiA9IHt9XG4gICAgICBpZiAodHBsQ29sKSB7XG4gICAgICAgIGNvbnN0IHRwbENvbERpZmYgPSB0cGxDb2wgPyB0aGlzLl9nZXRDb2xEaWZmKHRwbENvbCwgdHJ1ZSkgOiB1bmRlZmluZWRcbiAgICAgICAgX3RwbENvbCA9IHRwbENvbERpZmYgPyB7fSA6IHRoaXMuX2hhc1ByZXZDb2xEaWZmKGNvbCwgdHJ1ZSkgPyB7fSA6IHRwbENvbFxuICAgICAgICBpZiAodHBsQ29sRGlmZikge1xuICAgICAgICAgIHRwbENvbERpZmYuZm9yRWFjaFJlbW92ZWRJdGVtKHIgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXYgJiYgcHJldi5oYXNPd25Qcm9wZXJ0eShyLmtleSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgayA9IHIua2V5IGFzIGtleW9mIFRhYmxlQ29sdW1uXG4gICAgICAgICAgICAgIGRlbGV0ZSBwcmV2W2tdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0cGxDb2xEaWZmLmZvckVhY2hBZGRlZEl0ZW0ociA9PiAoX3RwbENvbCBhcyBhbnkpW3Iua2V5XSA9IHIuY3VycmVudFZhbHVlKVxuICAgICAgICAgIHRwbENvbERpZmYuZm9yRWFjaENoYW5nZWRJdGVtKHIgPT4gKF90cGxDb2wgYXMgYW55KVtyLmtleV0gPSByLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBfY29sOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uID0ge1xuICAgICAgICAuLi4ocHJldiB8fCB7fSksXG4gICAgICAgIC4uLl9pbnBDb2wsXG4gICAgICAgIC4uLl90cGxDb2xcbiAgICAgIH1cblxuICAgICAgY29scy5wdXNoKF9jb2wpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucm93QWN0aW9uSXRlbSkge1xuICAgICAgY29uc3QgYWN0aW9uTWVudUNvbHVtbjogVGhlU2VhbURhdGF0YWJsZUNvbHVtbiA9IHtcbiAgICAgICAgcHJvcDogJyQkX19hY3Rpb25NZW51X18nLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgd2lkdGg6IDUwLFxuICAgICAgICBtaW5XaWR0aDogNTAsXG4gICAgICAgIG1heFdpZHRoOiA1MCxcbiAgICAgICAgcmVzaXplYWJsZTogZmFsc2UsXG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gVE9ETzogRml4IGNvbHVtbiBhdXRvIHNpemluZyB3aXRoIGZpeGVkIGNvbHVtbiBhbmQgY2VsbCBvdmVybGF5IGJlZm9yZSBlbmFibGluZy5cbiAgICAgICAgLy8gZnJvemVuUmlnaHQ6IHRydWUsXG4gICAgICAgIGNlbGxUZW1wbGF0ZTogdGhpcy5hY3Rpb25NZW51Q2VsbFRwbCxcbiAgICAgICAgaGVhZGVyVGVtcGxhdGU6IHRoaXMuYmxhbmtIZWFkZXJUcGxcbiAgICAgIH1cbiAgICAgIGNvbHMucHVzaChhY3Rpb25NZW51Q29sdW1uKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmIChjb2wuaXNUcmVlQ29sdW1uICYmIGhhc1Byb3BlcnR5KGNvbCwgJ3RyZWVUb2dnbGVUZW1wbGF0ZScpKSB7XG4gICAgICAgIGNvbC50cmVlVG9nZ2xlVGVtcGxhdGUgPSB0aGlzLnRyZWVUb2dnbGVUcGxcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNQcm9wZXJ0eShjb2wsICdoZWFkZXJUZW1wbGF0ZScpKSB7XG4gICAgICAgIGNvbC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVHBsXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNQcm9wZXJ0eShjb2wsICdjZWxsVHlwZScpKSB7XG4gICAgICAgIGNvbC5jZWxsVGVtcGxhdGUgPSB0aGlzLmNlbGxUeXBlU2VsZWN0b3JUcGxcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXRDb2x1bW5EZWZhdWx0cyhjb2xzKVxuICAgIF9zZXRDb2x1bW5EZWZhdWx0cyhjb2xzKVxuXG5cbiAgICAvLyBjb25zb2xlLmxvZyhjb2xzLm1hcChjID0+ICh7IHByb3A6IGMucHJvcCwgY2FuQXV0b1Jlc2l6ZTogYy5jYW5BdXRvUmVzaXplIH0pKSlcblxuICAgIHJldHVybiBjb2xzXG4gIH1cblxuICBwcml2YXRlIF9oYXNQcmV2Q29sRGlmZihjb2w6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4sIGlzVHBsOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbCB8fCAhY29sLnByb3ApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGRpZmZlcnNNYXAgPSBpc1RwbCA/IHRoaXMuX2NvbERpZmZlcnNUcGwgOiB0aGlzLl9jb2xEaWZmZXJzSW5wXG5cbiAgICByZXR1cm4gISFkaWZmZXJzTWFwXG4gIH1cblxuICBwcml2YXRlIF9nZXRDb2xEaWZmKGNvbDogVGhlU2VhbURhdGF0YWJsZUNvbHVtbiwgaXNUcGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICghY29sIHx8ICFjb2wucHJvcCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlmZmVyc01hcCA9IGlzVHBsID8gdGhpcy5fY29sRGlmZmVyc1RwbCA6IHRoaXMuX2NvbERpZmZlcnNJbnBcblxuICAgIGlmICghZGlmZmVyc01hcFtjb2wucHJvcF0pIHtcbiAgICAgIGRpZmZlcnNNYXBbY29sLnByb3BdID0gdGhpcy5fZGlmZmVycy5maW5kKHt9KS5jcmVhdGUoKVxuICAgIH1cblxuICAgIGNvbnN0IGRpZmZlciA9IGRpZmZlcnNNYXBbY29sLnByb3BdXG5cbiAgICBjb25zdCBkaWZmID0gZGlmZmVyLmRpZmYoY29sKVxuICAgIHJldHVybiBkaWZmXG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVVbnVzZWREaWZmcyhjb2xzOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pIHtcbiAgICBjb25zdCBpbnBLZXlzID0gT2JqZWN0LmtleXModGhpcy5fY29sRGlmZmVyc0lucClcbiAgICBpbnBLZXlzLmZpbHRlcihrID0+IGNvbHMuZmluZEluZGV4KGMgPT4gYy5wcm9wID09PSBrKSA9PT0gLTEpXG4gICAgICAuZm9yRWFjaChrID0+IHsgZGVsZXRlIHRoaXMuX2NvbERpZmZlcnNJbnBba10gfSlcblxuICAgIGNvbnN0IHRwbEtleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jb2xEaWZmZXJzVHBsKVxuICAgIHRwbEtleXMuZmlsdGVyKGsgPT4gY29scy5maW5kSW5kZXgoYyA9PiBjLnByb3AgPT09IGspID09PSAtMSlcbiAgICAgIC5mb3JFYWNoKGsgPT4geyBkZWxldGUgdGhpcy5fY29sRGlmZmVyc1RwbFtrXSB9KVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TWVudUJhckZpbHRlcnMoZmlsdGVyczogSURhdGFGaWx0ZXJbXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdfc2V0TWVudUJhckZpbHRlcnMnLCBmaWx0ZXJzKVxuICAgIHRoaXMuX2ZpbHRlcnNTdWJqZWN0Lm5leHQoZmlsdGVycyB8fCBbXSlcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5Db21wb25lbnQocHJvcE5hbWU6IHN0cmluZyk6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5jb2x1bW5Db21wb25lbnRzIHx8IHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgdHBsID0gdGhpcy5jb2x1bW5Db21wb25lbnRzLmZpbmQodCA9PiB0LnByb3AgPT09IHByb3BOYW1lKVxuICAgIGlmICh0cGwpIHtcbiAgICAgIHJldHVybiB0cGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgX2NvbHVtbkRhdGEoY29sOiBhbnkpOiB7IGNvbDogYW55LCBjb21wOiBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfCBudWxsIH0ge1xuICAgIGNvbnN0IGNvbXAgPSB0aGlzLmdldENvbHVtbkNvbXBvbmVudChjb2wucHJvcClcbiAgICByZXR1cm4geyBjb2wsIGNvbXAgfVxuICB9XG5cbiAgX2dldFJvd0V4cGFuZGVkKHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMubmd4RGF0YXRhYmxlICYmIHRoaXMubmd4RGF0YXRhYmxlLmJvZHlDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5neERhdGF0YWJsZS5ib2R5Q29tcG9uZW50LmdldFJvd0V4cGFuZGVkKHJvdylcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUZuQ29sdW1uKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtLnByb3BcbiAgfVxuXG4gIHB1YmxpYyBvbkRhdGF0YWJsZVJlc2l6ZShldmVudDogSUVsZW1lbnRSZXNpemVkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5uZ3hEYXRhdGFibGUgJiYgdGhpcy5uZ3hEYXRhdGFibGVFbGVtZW50ICYmIHRoaXMubmd4RGF0YXRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBpbnRlZ3JhdGluZyB0aGlzIGludG8gdGhlIG5neC1kYXRhdGFibGUgbGlicmFyeSB0byBhdm9pZFxuICAgICAgLy8gbXVsdGlwbGUgcmVzaXplIGNhbGxzIHdoZW4gdGhlIHRhYmxlIHJlc2l6ZXMgaXRzZWxmLlxuICAgICAgdGhpcy5uZ3hEYXRhdGFibGUucmVjYWxjdWxhdGUoKVxuICAgIH1cbiAgfVxuXG4gIF9vblJlc2l6ZShldmVudDogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3Jlc2l6ZScsIGV2ZW50LCBldmVudC5jb2x1bW4ucHJvcClcbiAgICB0aGlzLnJlc2l6ZS5lbWl0KGV2ZW50KVxuXG4gICAgaWYgKGV2ZW50LmlzRG9uZSAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnNcbiAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnMuZmluZChjID0+IGMucHJvcCA9PT0gZXZlbnQuY29sdW1uLnByb3ApXG4gICAgICBpZiAoY29sKSB7XG4gICAgICAgIGNvbC5jYW5BdXRvUmVzaXplID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJlZmVyZW5jZXNLZXkpIHtcbiAgICAgICAgY29uc3QgcHJlZiA9IHsgcHJvcDogZXZlbnQuY29sdW1uLnByb3AsIHdpZHRoOiBldmVudC5jb2x1bW4ud2lkdGgsIGNhbkF1dG9SZXNpemU6IGZhbHNlIH1cbiAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMuc2V0Q29sdW1uUHJlZmVyZW5jZSh0aGlzLnByZWZlcmVuY2VzS2V5LCBwcmVmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbIC4uLnRoaXMuY29sdW1ucyBdXG4gICAgfVxuICB9XG5cbiAgX29uVHJlZUFjdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5kZXggPSBldmVudC5yb3dJbmRleFxuICAgIGNvbnN0IHJvdyA9IGV2ZW50LnJvd1xuICAgIGlmIChyb3cudHJlZVN0YXR1cyA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgIHJvdy50cmVlU3RhdHVzID0gJ2V4cGFuZGVkJ1xuICAgIH0gZWxzZSB7XG4gICAgICByb3cudHJlZVN0YXR1cyA9ICdjb2xsYXBzZWQnXG4gICAgfVxuICAgIHRoaXMucm93cyA9IFsgLi4udGhpcy5yb3dzIF1cbiAgfVxuXG4gIHB1YmxpYyB0cmlnZ2VyQWN0aW9uUmVmcmVzaFJlcXVlc3QoKSB7XG4gICAgdGhpcy5hY3Rpb25SZWZyZXNoUmVxdWVzdC5lbWl0KHVuZGVmaW5lZClcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGFnZUluZm8oKTogVGhlU2VhbVBhZ2VJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiB0aGlzLm5neERhdGF0YWJsZT8ub2Zmc2V0ID8/IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5uZ3hEYXRhdGFibGU/LnBhZ2VTaXplID8/IDAsXG4gICAgICBsaW1pdDogdGhpcy5uZ3hEYXRhdGFibGU/LmxpbWl0LFxuICAgICAgY291bnQ6IHRoaXMubmd4RGF0YXRhYmxlPy5jb3VudCA/PyAwXG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|