@eo-sdk/client 11.14.7 → 11.15.0-rc.1
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/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
- package/app/eo-client/dashboard/widgets/search-widget/search-widget.component.d.ts.map +1 -1
- package/app/eo-client/object-state/object-state/object-state.component.d.ts +35 -4
- package/app/eo-client/object-state/object-state/object-state.component.d.ts.map +1 -1
- package/app/eo-client/stored-queries-state/stored-queries-state.component.d.ts +1 -0
- package/app/eo-client/stored-queries-state/stored-queries-state.component.d.ts.map +1 -1
- package/app/eo-framework/form-elements/id-reference/id-reference.component.d.ts +3 -2
- package/app/eo-framework/form-elements/id-reference/id-reference.component.d.ts.map +1 -1
- package/app/eo-framework/grid/grid.component.d.ts +5 -4
- package/app/eo-framework/grid/grid.component.d.ts.map +1 -1
- package/app/eo-framework/object-details/object-details.component.d.ts +3 -1
- package/app/eo-framework/object-details/object-details.component.d.ts.map +1 -1
- package/app/eo-framework/object-details/object-links/object-links.component.d.ts +3 -2
- package/app/eo-framework/object-details/object-links/object-links.component.d.ts.map +1 -1
- package/app/eo-framework/result-list/result-list.component.d.ts +7 -0
- package/app/eo-framework/result-list/result-list.component.d.ts.map +1 -1
- package/app/eo-framework/stored-query/stored-query-type-filter.enum.d.ts +2 -1
- package/app/eo-framework/stored-query/stored-query-type-filter.enum.d.ts.map +1 -1
- package/app/eo-framework/tree/tree.component.interface.d.ts +1 -0
- package/app/eo-framework/tree/tree.component.interface.d.ts.map +1 -1
- package/assets/_default/i18n/de.json +4 -0
- package/assets/_default/i18n/en.json +4 -0
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-client/dashboard/widgets/search-widget/search-widget.component.mjs +3 -2
- package/esm2022/app/eo-client/favorite-state/favorite-state.component.mjs +1 -1
- package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +1 -1
- package/esm2022/app/eo-client/notifications-state/notifications-state.component.mjs +1 -1
- package/esm2022/app/eo-client/object-state/object-state/object-state.component.mjs +123 -26
- package/esm2022/app/eo-client/prepare-state/prepare-state/prepare-state.component.mjs +1 -1
- package/esm2022/app/eo-client/process-state/process-state.component.mjs +1 -1
- package/esm2022/app/eo-client/recyclebin-state/recyclebin-state.component.mjs +1 -1
- package/esm2022/app/eo-client/stored-queries-state/stored-queries-state.component.mjs +6 -3
- package/esm2022/app/eo-client/version-state/version-state.component.mjs +1 -1
- package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +4 -4
- package/esm2022/app/eo-framework/form-elements/id-reference/id-reference.component.mjs +11 -5
- package/esm2022/app/eo-framework/grid/grid.component.mjs +20 -9
- package/esm2022/app/eo-framework/object-details/object-details.component.mjs +28 -25
- package/esm2022/app/eo-framework/object-details/object-links/object-links.component.mjs +15 -4
- package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +2 -2
- package/esm2022/app/eo-framework/prepare-details/prepare-details.component.mjs +3 -3
- package/esm2022/app/eo-framework/result-list/result-list.component.mjs +18 -4
- package/esm2022/app/eo-framework/stored-query/stored-query-type-filter.enum.mjs +2 -1
- package/esm2022/app/eo-framework/tree/tree-node/tree-node.component.mjs +4 -3
- package/esm2022/app/eo-framework/tree/tree.component.interface.mjs +1 -1
- package/fesm2022/eo-sdk-client.mjs +201 -54
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -16,24 +16,24 @@ import * as i6 from "../../../eo-framework/actions/action-service/action.service
|
|
|
16
16
|
import * as i7 from "../../../eo-framework-core/location/location.service";
|
|
17
17
|
import * as i8 from "../../../eo-framework-core/pending-changes/pending-changes.service";
|
|
18
18
|
import * as i9 from "../../../eo-framework-core/api/grid.service";
|
|
19
|
-
import * as i10 from "
|
|
20
|
-
import * as i11 from "@angular/
|
|
21
|
-
import * as i12 from "@
|
|
22
|
-
import * as i13 from "
|
|
23
|
-
import * as i14 from "../../../eo-framework/
|
|
24
|
-
import * as i15 from "../../../eo-framework/
|
|
25
|
-
import * as i16 from "../../../eo-framework/
|
|
26
|
-
import * as i17 from "../../../eo-framework/
|
|
27
|
-
import * as i18 from "../../../eo-framework/
|
|
28
|
-
import * as i19 from "../../../eo-framework/
|
|
29
|
-
import * as i20 from "../../../eo-framework/
|
|
30
|
-
import * as i21 from "
|
|
31
|
-
import * as i22 from "
|
|
32
|
-
import * as i23 from "../../../eo-framework
|
|
33
|
-
import * as i24 from "../../../eo-framework/plugins/plugin.component";
|
|
19
|
+
import * as i10 from "@angular/common";
|
|
20
|
+
import * as i11 from "@angular/forms";
|
|
21
|
+
import * as i12 from "@ngx-translate/core";
|
|
22
|
+
import * as i13 from "../../../eo-framework/ui/eo-icon/eo-icon.component";
|
|
23
|
+
import * as i14 from "../../../eo-framework/result-list/result-list.component";
|
|
24
|
+
import * as i15 from "../../../eo-framework/object-details/object-details.component";
|
|
25
|
+
import * as i16 from "../../../eo-framework/tree/tree.component";
|
|
26
|
+
import * as i17 from "../../../eo-framework/form-elements/form-input/form-input.component";
|
|
27
|
+
import * as i18 from "../../../eo-framework/list-container/list-container.component";
|
|
28
|
+
import * as i19 from "../../../eo-framework/error/error404/error404.component";
|
|
29
|
+
import * as i20 from "../../../eo-framework/object-state-details/object-state-details.component";
|
|
30
|
+
import * as i21 from "@yuuvis/components/split-view";
|
|
31
|
+
import * as i22 from "../../../eo-framework-core/pipes/locale-date.pipe";
|
|
32
|
+
import * as i23 from "../../../eo-framework/plugins/plugin.component";
|
|
34
33
|
let ObjectStateComponent = class ObjectStateComponent {
|
|
35
|
-
constructor(route, titleService, systemService, dmsService, selection, translate, objectState, actionService, location, pendingChanges, eventService, gridService
|
|
34
|
+
constructor(route, router, titleService, systemService, dmsService, selection, translate, objectState, actionService, location, pendingChanges, eventService, gridService) {
|
|
36
35
|
this.route = route;
|
|
36
|
+
this.router = router;
|
|
37
37
|
this.titleService = titleService;
|
|
38
38
|
this.systemService = systemService;
|
|
39
39
|
this.dmsService = dmsService;
|
|
@@ -45,7 +45,6 @@ let ObjectStateComponent = class ObjectStateComponent {
|
|
|
45
45
|
this.pendingChanges = pendingChanges;
|
|
46
46
|
this.eventService = eventService;
|
|
47
47
|
this.gridService = gridService;
|
|
48
|
-
this.layoutService = layoutService;
|
|
49
48
|
this.error = false;
|
|
50
49
|
this.isReferenceActive = false;
|
|
51
50
|
this.expandedNodeIds = [];
|
|
@@ -60,6 +59,8 @@ let ObjectStateComponent = class ObjectStateComponent {
|
|
|
60
59
|
list: new PanelLoading(),
|
|
61
60
|
details: new PanelLoading(),
|
|
62
61
|
};
|
|
62
|
+
this.selectedFolderKey = '';
|
|
63
|
+
this.selectedFolderName = '';
|
|
63
64
|
this.titleService.setBaseTitle(null);
|
|
64
65
|
this.gridOptions = {};
|
|
65
66
|
this.onTermFilterChange
|
|
@@ -82,11 +83,15 @@ let ObjectStateComponent = class ObjectStateComponent {
|
|
|
82
83
|
// this.loadingState.list.ready();
|
|
83
84
|
});
|
|
84
85
|
this.objectState.tree$
|
|
85
|
-
.pipe(untilDestroyed(this))
|
|
86
|
-
.subscribe(res =>
|
|
86
|
+
.pipe(untilDestroyed(this), debounceTime(200))
|
|
87
|
+
.subscribe(res => {
|
|
88
|
+
this.buildContextTree(res.folder);
|
|
89
|
+
});
|
|
87
90
|
this.objectState.treeRef$
|
|
88
|
-
.pipe(untilDestroyed(this))
|
|
89
|
-
.subscribe(res =>
|
|
91
|
+
.pipe(untilDestroyed(this), debounceTime(200))
|
|
92
|
+
.subscribe(res => {
|
|
93
|
+
this.buildContextTreeRef(res.folder);
|
|
94
|
+
});
|
|
90
95
|
this.selection.focus$
|
|
91
96
|
.pipe(untilDestroyed(this))
|
|
92
97
|
.subscribe((item) => {
|
|
@@ -144,6 +149,10 @@ let ObjectStateComponent = class ObjectStateComponent {
|
|
|
144
149
|
onTreeSelectionChanged(node) {
|
|
145
150
|
this.location.leave();
|
|
146
151
|
this.selectedNode = node;
|
|
152
|
+
this.titleService.setBaseTitle(node?.name);
|
|
153
|
+
if (this.selectedFolderKey !== node?.data?.key) {
|
|
154
|
+
this.handleNodeSelection(node);
|
|
155
|
+
}
|
|
147
156
|
if (node.data.type) {
|
|
148
157
|
this.location.enter(this.context, this.selectedNode);
|
|
149
158
|
}
|
|
@@ -265,10 +274,12 @@ let ObjectStateComponent = class ObjectStateComponent {
|
|
|
265
274
|
buildContextTree(folder = []) {
|
|
266
275
|
this.contextTreeUpdate = null;
|
|
267
276
|
this.contextTree = folder.map(f => this.addTreeNode(f, []));
|
|
277
|
+
this.contextTree = this.selectMatchingChildNode(this.selectedFolderKey, this.contextTree);
|
|
268
278
|
}
|
|
269
279
|
buildContextTreeRef(folder = []) {
|
|
270
280
|
this.contextTreeRefUpdate = null;
|
|
271
281
|
this.contextTreeRef = folder.map(f => this.addTreeNode(f, [], true));
|
|
282
|
+
this.contextTreeRef = this.selectMatchingChildNode(this.selectedFolderKey, this.contextTreeRef);
|
|
272
283
|
}
|
|
273
284
|
addTreeNode(nodeData, path, isReference = false) {
|
|
274
285
|
const { key, title, folder, expanded, count, stats } = nodeData;
|
|
@@ -294,6 +305,89 @@ let ObjectStateComponent = class ObjectStateComponent {
|
|
|
294
305
|
}
|
|
295
306
|
return node;
|
|
296
307
|
}
|
|
308
|
+
/**
|
|
309
|
+
* Handles the selection of a node in the tree.
|
|
310
|
+
* Updates the context tree with the selected node and navigates to update the query parameters.
|
|
311
|
+
*
|
|
312
|
+
* @param {TreeNode} node - The selected tree node.
|
|
313
|
+
*/
|
|
314
|
+
handleNodeSelection(node) {
|
|
315
|
+
this.contextTree = this.selectMatchingChildNode(node.data.key, this.contextTree);
|
|
316
|
+
this.router.navigate([], { queryParams: { folderKey: node.data.key, objectId: null }, queryParamsHandling: 'merge' });
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Selects the matching child node based on the selectedFolderKey.
|
|
320
|
+
*
|
|
321
|
+
* @param {string} selectedFolderKey - The key of the selected folder.
|
|
322
|
+
* @param {TreeNode[]} tree - The tree structure to search through.
|
|
323
|
+
* @returns {TreeNode[]} - The updated tree structure.
|
|
324
|
+
* @private
|
|
325
|
+
*/
|
|
326
|
+
selectMatchingChildNode(selectedFolderKey, tree) {
|
|
327
|
+
this.selectedFolderKey = selectedFolderKey;
|
|
328
|
+
const { filter: queryTermFilter } = this.route.snapshot.queryParams;
|
|
329
|
+
if (this.termFilter || queryTermFilter) {
|
|
330
|
+
this.router.navigate([], { queryParams: { filter: this.termFilter || null }, queryParamsHandling: 'merge' });
|
|
331
|
+
}
|
|
332
|
+
// Handle the special case from prepare state when drag and drop data
|
|
333
|
+
if (this.selectedFolderName && !this.selectedFolderKey) {
|
|
334
|
+
this.updateSelectedFolderKeyFromFolderName(tree);
|
|
335
|
+
}
|
|
336
|
+
for (const treeNode of tree) {
|
|
337
|
+
if (treeNode.id === this.selectedFolderKey) {
|
|
338
|
+
this.selectNode(treeNode);
|
|
339
|
+
return tree;
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
for (const child of treeNode.children) {
|
|
343
|
+
if (child.data.key === this.selectedFolderKey) {
|
|
344
|
+
this.selectNode(child);
|
|
345
|
+
return tree;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return tree;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Helper function to update selectedFolderKey using selectedFolderName.
|
|
354
|
+
*
|
|
355
|
+
* @param {TreeNode[]} tree - The tree structure to search through.
|
|
356
|
+
* @private
|
|
357
|
+
*/
|
|
358
|
+
updateSelectedFolderKeyFromFolderName(tree) {
|
|
359
|
+
for (const treeNode of tree) {
|
|
360
|
+
if (treeNode.id === this.selectedFolderName) {
|
|
361
|
+
this.selectedFolderKey = treeNode.id;
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
for (const child of treeNode.children) {
|
|
366
|
+
if (child.data.type === this.selectedFolderName) {
|
|
367
|
+
this.selectedFolderKey = child.data.key;
|
|
368
|
+
this.router.navigate([], {
|
|
369
|
+
queryParams: { folderName: null, folderKey: this.selectedFolderKey },
|
|
370
|
+
queryParamsHandling: 'merge',
|
|
371
|
+
});
|
|
372
|
+
this.selectedFolderName = null;
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Helper function to handle node selection logic.
|
|
381
|
+
*
|
|
382
|
+
* @param {TreeNode} node - The tree node to be selected.
|
|
383
|
+
* @private
|
|
384
|
+
*/
|
|
385
|
+
selectNode(node) {
|
|
386
|
+
node.selected = true;
|
|
387
|
+
node.expanded = true;
|
|
388
|
+
this.onTreeSelectionChanged(node);
|
|
389
|
+
this.selectedNodes = [node];
|
|
390
|
+
}
|
|
297
391
|
ngOnInit() {
|
|
298
392
|
this.route.url
|
|
299
393
|
.pipe(untilDestroyed(this))
|
|
@@ -301,6 +395,9 @@ let ObjectStateComponent = class ObjectStateComponent {
|
|
|
301
395
|
this.cacheLayout = '';
|
|
302
396
|
// this.layoutService.hideAreas(() => false);
|
|
303
397
|
const { params, queryParams } = this.route.snapshot;
|
|
398
|
+
this.selectedFolderKey = queryParams['folderKey'] || this.selectedFolderKey;
|
|
399
|
+
this.selectedFolderName = queryParams['folderName'] || this.selectedFolderName;
|
|
400
|
+
this.termFilter = queryParams['filter'] || '';
|
|
304
401
|
if (params.id) {
|
|
305
402
|
this.typeName = queryParams['type'] || '';
|
|
306
403
|
this.selection.focus({ id: params.id, typeName: this.typeName });
|
|
@@ -324,8 +421,8 @@ let ObjectStateComponent = class ObjectStateComponent {
|
|
|
324
421
|
this.location.leave();
|
|
325
422
|
this.selection.clear();
|
|
326
423
|
}
|
|
327
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ObjectStateComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.PageTitleService }, { token: i3.SystemService }, { token: i3.DmsService }, { token: i4.SelectionService }, { token: i3.TranslateService }, { token: i5.ObjectStateService }, { token: i6.ActionService }, { token: i7.LocationService }, { token: i8.PendingChangesService }, { token: i3.EventService }, { token: i9.GridService }
|
|
328
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ObjectStateComponent, selector: "eo-object-state", outputs: { onTermFilterChange: "onTermFilterChange" }, providers: [ObjectStateService], viewQueries: [{ propertyName: "eoGrid", first: true, predicate: ["eoGrid"], descendants: true }], ngImport: i0, template: "<div class=\"file\" [ngClass]=\"{ready: context || context === null}\" *ngIf=\"!error; else errorTmpl\">\n\n <div class=\"file-head\" *ngIf=\"context && context.isContextFolder\">\n <div class=\"left\">\n <eo-icon class=\"type-icon\" [objectType]=\"context.type\" [iconTitle]=\"context.type.label\"></eo-icon>\n <div class=\"title\" (click)=\"setupFrontPage()\" (contextmenu)=\"onContextMenuClicked($event)\">\n <div class=\"label\">{{context.title || ' '}}</div>\n <div class=\"description\">{{context.description || ' '}}</div>\n </div>\n </div>\n <div class=\"right\">\n <div class=\"fold\">\n <span class=\"created-date\">{{context.created.on | localeDate}}</span>\n <span class=\"created-title\">{{context.created.by.title}}</span>\n </div>\n <div class=\"actions\">\n </div>\n </div>\n </div>\n\n <div class=\"file-body\">\n <div class=\"file-body-wrap\">\n\n <ng-container *ngIf=\"context !== null; else tplDetailsOnly\">\n\n <yvc-split-view *ngIf=\"cacheLayout\" [layoutSettingsID]=\"cacheLayout\">\n <ng-template yvcSplitArea [panelClass]=\"'tree'\" [size]=\"20\" [visible]=\"true\">\n <div class=\"tree-panel-error\" *ngIf=\"loadingState.tree.isError(); else tplTree\" translate>\n eo.state.object.tree.error</div>\n\n <ng-template #tplTree>\n\n <eo-list-container #eoList [loading]=\"!contextTree\" [tabs]=\"false\">\n <div class=\"eo-header dark\">\n <div class=\"eo-header-info\">\n <h2 class=\"eo-header-title\" translate>eo.state.object.tree.title</h2>\n <form name=\"structureForm\" class=\"tree-filter-form\" [ngClass]=\"{active: !!termFilter}\">\n <eo-form-input [skipToggle]=\"true\" [label]=\" 'eo.state.object.tree.filter.label' | translate\">\n <input [(ngModel)]=\"termFilter\" maxlength=\"250\" [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"onTermFilterChange.emit($event)\" />\n </eo-form-input>\n </form>\n </div>\n </div>\n <div class=\"eo-body tree\">\n <eo-tree [tree]=\"contextTree\" [options]=\"{multiselect: false, disableDeselection: true}\"\n [@panelLoading]=\"loadingState.tree.state\" *ngIf=\"contextTree && (contextTree.length > 1 || (contextTree.length === 1 && contextTree[0].children.length && contextTree[0].name))\" [highlightedNodes]=\"highlightedNodes\"\n [treeUpdate]=\"contextTreeUpdate\" [(ngModel)]=\"selectedNodes\"\n (ngModelChange)=\"onTreeSelectionChanged($event)\"></eo-tree>\n <h3 *ngIf=\"contextTreeRef?.length\" title=\"{{'eo.state.object.tree.references.tooltip'|translate}}\"\n translate>eo.state.object.tree.references</h3>\n <eo-tree [tree]=\"contextTreeRef\" [options]=\"{multiselect: false, disableDeselection: true}\"\n [@panelLoading]=\"loadingState.treeRef.state\" *ngIf=\"contextTreeRef?.length\"\n [highlightedNodes]=\"highlightedNodes\" [treeUpdate]=\"contextTreeRefUpdate\"\n [(ngModel)]=\"selectedNodes\" (ngModelChange)=\"onTreeSelectionChanged($event)\"\n class=\"reference\"></eo-tree>\n </div>\n </eo-list-container>\n\n </ng-template>\n </ng-template>\n\n <ng-template yvcSplitArea [panelClass]=\"'tree'\" [size]=\"35\" [visible]=\"true\">\n <eo-object-state-details *ngIf=\"context\" [context]=\"context\" [frontPageData]=\"frontPageData\"\n [visible]=\"frontPage\" (onTabChange)=\"setupFrontPage(true)\" [plugins]=\"'object-state-details-tab.object' | plugins\">\n </eo-object-state-details>\n\n <eo-result-list *ngIf=\"!frontPage && searchResult\" [selectFirst]=\"false\" [title]=\"gridTitle\"\n [reference]=\"selectedNode?.isReference\" [searchResult]=\"searchResult\" [configType]=\"configType\"\n [configContext]=\"\" [emptyMessage]=\"'eo.state.object.list.error'\" (onRefresh)=\"refreshList()\">\n </eo-result-list>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"45\" [visible]=\"true\">\n <ng-container *ngTemplateOutlet=\"tplObjectDetails\"></ng-container>\n </ng-template>\n </yvc-split-view>\n\n </ng-container>\n\n <ng-template #tplDetailsOnly><ng-container *ngTemplateOutlet=\"tplObjectDetails\"></ng-container></ng-template>\n\n <ng-template #tplObjectDetails>\n <eo-object-details [applySelection]=\"{}\" [reference]=\"isReferenceActive\"\n [cacheLayout]=\"'object.state'\" [plugins]=\"'object-details-tab.object' | plugins\">\n </eo-object-details>\n </ng-template>\n </div>\n </div>\n</div>\n\n<ng-template #errorTmpl>\n <eo-error404></eo-error404>\n</ng-template>\n", styles: [":host{position:absolute;left:var(--app-pane-padding);right:var(--app-pane-padding);top:var(--app-pane-padding);bottom:var(--app-pane-padding)}:host .eo-body.tree h3{margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding) 0 var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption);border-top:1px solid var(--list-item-border-color)}:host .file{height:100%;display:flex;flex-flow:column}:host .file .file-head,:host .file .file-body{opacity:0;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .file.ready .file-head,:host .file.ready .file-body{opacity:1}:host .file .empty-state{background:rgba(var(--color-white-rgb),.3);height:100%;display:flex;flex-flow:column;align-items:center;justify-content:center}:host .file.undocked .empty-state{background:var(--main-background)}:host .file-head{color:var(--text-color-caption);margin-bottom:calc(var(--app-pane-padding) / 4);display:flex;flex-flow:row nowrap;width:100%}:host .file-head eo-icon{padding:var(--app-pane-padding);box-sizing:content-box;flex:none}:host .file-head .left,:host .file-head .right{border-bottom:4px solid var(--color-primary-3);box-sizing:border-box}:host .file-head .left{flex:0 0 auto;display:flex;flex-flow:row nowrap;background:var(--color-white);max-width:calc(100% - 350px)}:host .file-head .left div.title{flex:1;padding:var(--app-pane-padding) 0;display:inline-grid;min-height:0;min-width:0;cursor:pointer}[dir=ltr] :host .file-head .left div.title{padding-right:calc(var(--app-pane-padding) * 2);padding-left:0}[dir=rtl] :host .file-head .left div.title{padding-left:calc(var(--app-pane-padding) * 2);padding-right:0}:host .file-head .left div.title .label,:host .file-head .left div.title .description{display:inline-block;max-width:none;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .file-head .left div.title .label{font-size:var(--font-title)}:host .file-head .right{flex:1 1 auto;display:flex;flex-flow:column;min-width:350px}:host .file-head .right .fold{flex:0 0 auto;background:var(--main-background);color:var(--text-color-caption);text-align:right;padding-bottom:calc(var(--app-pane-padding) / 2);display:flex;justify-content:flex-end}[dir=rtl] :host .file-head .right .fold{text-align:right;text-align:left}:host .file-head .right .fold .created-date{padding-right:5px}:host .file-head .right .actions{background:var(--color-white);flex:1 1 auto;display:flex;align-items:center;padding:0 var(--app-pane-padding);justify-content:flex-end;min-height:50px}:host .file-body{flex:1 1 auto;position:relative}:host .file-body .file-body-wrap{position:absolute;inset:0;overflow:hidden}:host .file-body .file-body-wrap .frontPage{position:absolute;inset:0;overflow:hidden}:host ::ng-deep .tree .tree-panel-error{display:flex;height:100%;flex-flow:column;justify-content:center;align-items:center;color:var(--text-color-caption)}:host ::ng-deep .tree .eo-head{background-color:var(--color-primary-3)}:host ::ng-deep .tree .eo-head .eo-header-info{padding:0}:host ::ng-deep .tree .eo-head .eo-header-info h2{flex:1 1 auto;color:var(--color-white)}:host ::ng-deep .tree .eo-head .eo-header-info form.tree-filter-form{width:61%;flex:0 0 auto;margin-bottom:var(--app-pane-padding);min-width:200px;align-self:flex-end}:host ::ng-deep .tree .eo-head .eo-header-info form.tree-filter-form input{background-color:transparent;border:0;outline:0}:host ::ng-deep .tree eo-result-list .eo-head{background-color:var(--panel-background)}:host ::ng-deep yvc-split-view{height:100%}:host ::ng-deep eo-tree{padding:var(--app-pane-padding)}:host ::ng-deep eo-object-details{background:var(--panel-background-grey)}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i12.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i12.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i12.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i12.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i13.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i14.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i15.ResultListComponent, selector: "eo-result-list", inputs: ["title", "configType", "configContext", "clearAfterExecute", "emptyMessage", "selectFirst", "gridOptions", "hasIcon", "reference", "query", "searchResult"], outputs: ["onSelectionChanged", "onFocusChanged", "onDoubleClick", "onContextMenu", "onCountChanged", "onRefresh", "onResult", "onQueryInvalid"] }, { kind: "component", type: i16.ObjectDetailsComponent, selector: "eo-object-details", inputs: ["plugins", "searchTerm", "enableCompare", "recyclebinTabs", "versionComponentTabs", "enableDiff", "enableSync", "cacheLayout", "applySelection", "parseDmsParams", "reference", "emptyState", "params", "params2", "item", "item2"], outputs: ["hasContent"] }, { kind: "component", type: i17.TreeComponent, selector: "eo-tree", inputs: ["options", "isDisplayed", "readonly", "emptyMessage", "selectionKey", "highlightedNodes", "tree", "treeUpdate"], outputs: ["expandedNodesChanged", "onSelected"] }, { kind: "component", type: i18.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i19.ListContainerComponent, selector: "eo-list-container", inputs: ["applySelection", "applyVersion", "loading", "tabs", "parseDmsParams"] }, { kind: "component", type: i20.Error404Component, selector: "eo-error404" }, { kind: "component", type: i21.ObjectStateDetailsComponent, selector: "eo-object-state-details", inputs: ["plugins", "context", "selectedItem", "seenItems", "frontPageData", "visible"], outputs: ["onTabChange"] }, { kind: "component", type: i22.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i22.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "pipe", type: i13.TranslatePipe, name: "translate" }, { kind: "pipe", type: i23.LocaleDatePipe, name: "localeDate" }, { kind: "pipe", type: i24.PluginPipe, name: "plugins" }], animations: [panelLoadingAnimations] }); }
|
|
424
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ObjectStateComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.PageTitleService }, { token: i3.SystemService }, { token: i3.DmsService }, { token: i4.SelectionService }, { token: i3.TranslateService }, { token: i5.ObjectStateService }, { token: i6.ActionService }, { token: i7.LocationService }, { token: i8.PendingChangesService }, { token: i3.EventService }, { token: i9.GridService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
425
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: ObjectStateComponent, selector: "eo-object-state", outputs: { onTermFilterChange: "onTermFilterChange" }, providers: [ObjectStateService], viewQueries: [{ propertyName: "eoGrid", first: true, predicate: ["eoGrid"], descendants: true }], ngImport: i0, template: "<div class=\"file\" [ngClass]=\"{ready: context || context === null}\" *ngIf=\"!error; else errorTmpl\">\n\n <div class=\"file-head\" *ngIf=\"context && context.isContextFolder\">\n <div class=\"left\">\n <eo-icon class=\"type-icon\" [objectType]=\"context.type\" [iconTitle]=\"context.type.label\"></eo-icon>\n <div class=\"title\" (click)=\"setupFrontPage(false, true)\" (contextmenu)=\"onContextMenuClicked($event)\">\n <div class=\"label\">{{context.title || ' '}}</div>\n <div class=\"description\">{{context.description || ' '}}</div>\n </div>\n </div>\n <div class=\"right\">\n <div class=\"fold\">\n <span class=\"created-date\">{{context.created.on | localeDate}}</span>\n <span class=\"created-title\">{{context.created.by.title}}</span>\n </div>\n <div class=\"actions\">\n </div>\n </div>\n </div>\n\n <div class=\"file-body\">\n <div class=\"file-body-wrap\">\n\n <ng-container *ngIf=\"context !== null; else tplDetailsOnly\">\n\n <yvc-split-view *ngIf=\"cacheLayout\" [layoutSettingsID]=\"cacheLayout\">\n <ng-template yvcSplitArea [panelClass]=\"'tree'\" [size]=\"20\" [visible]=\"true\">\n <div class=\"tree-panel-error\" *ngIf=\"loadingState.tree.isError(); else tplTree\" translate>\n eo.state.object.tree.error</div>\n\n <ng-template #tplTree>\n\n <eo-list-container #eoList [loading]=\"!contextTree\" [tabs]=\"false\">\n <div class=\"eo-header dark\">\n <div class=\"eo-header-info\">\n <h2 class=\"eo-header-title\" translate>eo.state.object.tree.title</h2>\n <form name=\"structureForm\" class=\"tree-filter-form\" [ngClass]=\"{active: !!termFilter}\">\n <eo-form-input [skipToggle]=\"true\" [label]=\" 'eo.state.object.tree.filter.label' | translate\">\n <input [(ngModel)]=\"termFilter\" maxlength=\"250\" [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"onTermFilterChange.emit($event)\" />\n </eo-form-input>\n </form>\n </div>\n </div>\n <div class=\"eo-body tree\">\n <eo-tree [tree]=\"contextTree\" [options]=\"{multiselect: false, disableDeselection: true}\"\n [@panelLoading]=\"loadingState.tree.state\" *ngIf=\"contextTree && (contextTree.length > 1 || (contextTree.length === 1 && contextTree[0].children.length && contextTree[0].name))\" [highlightedNodes]=\"highlightedNodes\"\n [treeUpdate]=\"contextTreeUpdate\" [(ngModel)]=\"selectedNodes\"\n (ngModelChange)=\"onTreeSelectionChanged($event)\"></eo-tree>\n <h3 *ngIf=\"contextTreeRef?.length\" title=\"{{'eo.state.object.tree.references.tooltip'|translate}}\"\n translate>eo.state.object.tree.references</h3>\n <eo-tree [tree]=\"contextTreeRef\" [options]=\"{multiselect: false, disableDeselection: true}\"\n [@panelLoading]=\"loadingState.treeRef.state\" *ngIf=\"contextTreeRef?.length\"\n [highlightedNodes]=\"highlightedNodes\" [treeUpdate]=\"contextTreeRefUpdate\"\n [(ngModel)]=\"selectedNodes\" (ngModelChange)=\"onTreeSelectionChanged($event)\"\n class=\"reference\"></eo-tree>\n </div>\n </eo-list-container>\n\n </ng-template>\n </ng-template>\n\n <ng-template yvcSplitArea [panelClass]=\"'tree'\" [size]=\"35\" [visible]=\"true\">\n <eo-object-state-details *ngIf=\"context\" [context]=\"context\" [frontPageData]=\"frontPageData\"\n [visible]=\"frontPage\" (onTabChange)=\"setupFrontPage(true, true)\" [plugins]=\"'object-state-details-tab.object' | plugins\">\n </eo-object-state-details>\n\n <eo-result-list *ngIf=\"!frontPage && searchResult\" [selectFirst]=\"false\" [title]=\"gridTitle\"\n [reference]=\"selectedNode?.isReference\" [searchResult]=\"searchResult\" [configType]=\"configType\"\n [configContext]=\"\" [emptyMessage]=\"'eo.state.object.list.error'\" (onRefresh)=\"refreshList()\">\n </eo-result-list>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"45\" [visible]=\"true\">\n <ng-container *ngTemplateOutlet=\"tplObjectDetails\"></ng-container>\n </ng-template>\n </yvc-split-view>\n\n </ng-container>\n\n <ng-template #tplDetailsOnly><ng-container *ngTemplateOutlet=\"tplObjectDetails\"></ng-container></ng-template>\n\n <ng-template #tplObjectDetails>\n <eo-object-details [applySelection]=\"{}\" [reference]=\"isReferenceActive\"\n [cacheLayout]=\"'object.state'\" [plugins]=\"'object-details-tab.object' | plugins\">\n </eo-object-details>\n </ng-template>\n </div>\n </div>\n</div>\n\n<ng-template #errorTmpl>\n <eo-error404></eo-error404>\n</ng-template>\n", styles: [":host{position:absolute;left:var(--app-pane-padding);right:var(--app-pane-padding);top:var(--app-pane-padding);bottom:var(--app-pane-padding)}:host .eo-body.tree h3{margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding) 0 var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption);border-top:1px solid var(--list-item-border-color)}:host .file{height:100%;display:flex;flex-flow:column}:host .file .file-head,:host .file .file-body{opacity:0;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .file.ready .file-head,:host .file.ready .file-body{opacity:1}:host .file .empty-state{background:rgba(var(--color-white-rgb),.3);height:100%;display:flex;flex-flow:column;align-items:center;justify-content:center}:host .file.undocked .empty-state{background:var(--main-background)}:host .file-head{color:var(--text-color-caption);margin-bottom:calc(var(--app-pane-padding) / 4);display:flex;flex-flow:row nowrap;width:100%}:host .file-head eo-icon{padding:var(--app-pane-padding);box-sizing:content-box;flex:none}:host .file-head .left,:host .file-head .right{border-bottom:4px solid var(--color-primary-3);box-sizing:border-box}:host .file-head .left{flex:0 0 auto;display:flex;flex-flow:row nowrap;background:var(--color-white);max-width:calc(100% - 350px)}:host .file-head .left div.title{flex:1;padding:var(--app-pane-padding) 0;display:inline-grid;min-height:0;min-width:0;cursor:pointer}[dir=ltr] :host .file-head .left div.title{padding-right:calc(var(--app-pane-padding) * 2);padding-left:0}[dir=rtl] :host .file-head .left div.title{padding-left:calc(var(--app-pane-padding) * 2);padding-right:0}:host .file-head .left div.title .label,:host .file-head .left div.title .description{display:inline-block;max-width:none;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .file-head .left div.title .label{font-size:var(--font-title)}:host .file-head .right{flex:1 1 auto;display:flex;flex-flow:column;min-width:350px}:host .file-head .right .fold{flex:0 0 auto;background:var(--main-background);color:var(--text-color-caption);text-align:right;padding-bottom:calc(var(--app-pane-padding) / 2);display:flex;justify-content:flex-end}[dir=rtl] :host .file-head .right .fold{text-align:right;text-align:left}:host .file-head .right .fold .created-date{padding-right:5px}:host .file-head .right .actions{background:var(--color-white);flex:1 1 auto;display:flex;align-items:center;padding:0 var(--app-pane-padding);justify-content:flex-end;min-height:50px}:host .file-body{flex:1 1 auto;position:relative}:host .file-body .file-body-wrap{position:absolute;inset:0;overflow:hidden}:host .file-body .file-body-wrap .frontPage{position:absolute;inset:0;overflow:hidden}:host ::ng-deep .tree .tree-panel-error{display:flex;height:100%;flex-flow:column;justify-content:center;align-items:center;color:var(--text-color-caption)}:host ::ng-deep .tree .eo-head{background-color:var(--color-primary-3)}:host ::ng-deep .tree .eo-head .eo-header-info{padding:0}:host ::ng-deep .tree .eo-head .eo-header-info h2{flex:1 1 auto;color:var(--color-white)}:host ::ng-deep .tree .eo-head .eo-header-info form.tree-filter-form{width:61%;flex:0 0 auto;margin-bottom:var(--app-pane-padding);min-width:200px;align-self:flex-end}:host ::ng-deep .tree .eo-head .eo-header-info form.tree-filter-form input{background-color:transparent;border:0;outline:0}:host ::ng-deep .tree eo-result-list .eo-head{background-color:var(--panel-background)}:host ::ng-deep yvc-split-view{height:100%}:host ::ng-deep eo-tree{padding:var(--app-pane-padding)}:host ::ng-deep eo-object-details{background:var(--panel-background-grey)}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i11.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i11.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i12.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i13.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "component", type: i14.ResultListComponent, selector: "eo-result-list", inputs: ["title", "configType", "configContext", "clearAfterExecute", "emptyMessage", "selectFirst", "gridOptions", "hasIcon", "reference", "query", "searchResult"], outputs: ["onSelectionChanged", "onFocusChanged", "onDoubleClick", "onContextMenu", "onCountChanged", "onRefresh", "onResult", "onQueryInvalid"] }, { kind: "component", type: i15.ObjectDetailsComponent, selector: "eo-object-details", inputs: ["plugins", "searchTerm", "enableCompare", "recyclebinTabs", "versionComponentTabs", "enableDiff", "enableSync", "cacheLayout", "applySelection", "parseDmsParams", "reference", "emptyState", "params", "params2", "item", "item2"], outputs: ["hasContent"] }, { kind: "component", type: i16.TreeComponent, selector: "eo-tree", inputs: ["options", "isDisplayed", "readonly", "emptyMessage", "selectionKey", "highlightedNodes", "tree", "treeUpdate"], outputs: ["expandedNodesChanged", "onSelected"] }, { kind: "component", type: i17.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i18.ListContainerComponent, selector: "eo-list-container", inputs: ["applySelection", "applyVersion", "loading", "tabs", "parseDmsParams"] }, { kind: "component", type: i19.Error404Component, selector: "eo-error404" }, { kind: "component", type: i20.ObjectStateDetailsComponent, selector: "eo-object-state-details", inputs: ["plugins", "context", "selectedItem", "seenItems", "frontPageData", "visible"], outputs: ["onTabChange"] }, { kind: "component", type: i21.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i21.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }, { kind: "pipe", type: i22.LocaleDatePipe, name: "localeDate" }, { kind: "pipe", type: i23.PluginPipe, name: "plugins" }], animations: [panelLoadingAnimations] }); }
|
|
329
426
|
};
|
|
330
427
|
ObjectStateComponent = __decorate([
|
|
331
428
|
UntilDestroy()
|
|
@@ -333,11 +430,11 @@ ObjectStateComponent = __decorate([
|
|
|
333
430
|
export { ObjectStateComponent };
|
|
334
431
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ObjectStateComponent, decorators: [{
|
|
335
432
|
type: Component,
|
|
336
|
-
args: [{ selector: 'eo-object-state', providers: [ObjectStateService], animations: [panelLoadingAnimations], template: "<div class=\"file\" [ngClass]=\"{ready: context || context === null}\" *ngIf=\"!error; else errorTmpl\">\n\n <div class=\"file-head\" *ngIf=\"context && context.isContextFolder\">\n <div class=\"left\">\n <eo-icon class=\"type-icon\" [objectType]=\"context.type\" [iconTitle]=\"context.type.label\"></eo-icon>\n <div class=\"title\" (click)=\"setupFrontPage()\" (contextmenu)=\"onContextMenuClicked($event)\">\n <div class=\"label\">{{context.title || ' '}}</div>\n <div class=\"description\">{{context.description || ' '}}</div>\n </div>\n </div>\n <div class=\"right\">\n <div class=\"fold\">\n <span class=\"created-date\">{{context.created.on | localeDate}}</span>\n <span class=\"created-title\">{{context.created.by.title}}</span>\n </div>\n <div class=\"actions\">\n </div>\n </div>\n </div>\n\n <div class=\"file-body\">\n <div class=\"file-body-wrap\">\n\n <ng-container *ngIf=\"context !== null; else tplDetailsOnly\">\n\n <yvc-split-view *ngIf=\"cacheLayout\" [layoutSettingsID]=\"cacheLayout\">\n <ng-template yvcSplitArea [panelClass]=\"'tree'\" [size]=\"20\" [visible]=\"true\">\n <div class=\"tree-panel-error\" *ngIf=\"loadingState.tree.isError(); else tplTree\" translate>\n eo.state.object.tree.error</div>\n\n <ng-template #tplTree>\n\n <eo-list-container #eoList [loading]=\"!contextTree\" [tabs]=\"false\">\n <div class=\"eo-header dark\">\n <div class=\"eo-header-info\">\n <h2 class=\"eo-header-title\" translate>eo.state.object.tree.title</h2>\n <form name=\"structureForm\" class=\"tree-filter-form\" [ngClass]=\"{active: !!termFilter}\">\n <eo-form-input [skipToggle]=\"true\" [label]=\" 'eo.state.object.tree.filter.label' | translate\">\n <input [(ngModel)]=\"termFilter\" maxlength=\"250\" [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"onTermFilterChange.emit($event)\" />\n </eo-form-input>\n </form>\n </div>\n </div>\n <div class=\"eo-body tree\">\n <eo-tree [tree]=\"contextTree\" [options]=\"{multiselect: false, disableDeselection: true}\"\n [@panelLoading]=\"loadingState.tree.state\" *ngIf=\"contextTree && (contextTree.length > 1 || (contextTree.length === 1 && contextTree[0].children.length && contextTree[0].name))\" [highlightedNodes]=\"highlightedNodes\"\n [treeUpdate]=\"contextTreeUpdate\" [(ngModel)]=\"selectedNodes\"\n (ngModelChange)=\"onTreeSelectionChanged($event)\"></eo-tree>\n <h3 *ngIf=\"contextTreeRef?.length\" title=\"{{'eo.state.object.tree.references.tooltip'|translate}}\"\n translate>eo.state.object.tree.references</h3>\n <eo-tree [tree]=\"contextTreeRef\" [options]=\"{multiselect: false, disableDeselection: true}\"\n [@panelLoading]=\"loadingState.treeRef.state\" *ngIf=\"contextTreeRef?.length\"\n [highlightedNodes]=\"highlightedNodes\" [treeUpdate]=\"contextTreeRefUpdate\"\n [(ngModel)]=\"selectedNodes\" (ngModelChange)=\"onTreeSelectionChanged($event)\"\n class=\"reference\"></eo-tree>\n </div>\n </eo-list-container>\n\n </ng-template>\n </ng-template>\n\n <ng-template yvcSplitArea [panelClass]=\"'tree'\" [size]=\"35\" [visible]=\"true\">\n <eo-object-state-details *ngIf=\"context\" [context]=\"context\" [frontPageData]=\"frontPageData\"\n [visible]=\"frontPage\" (onTabChange)=\"setupFrontPage(true)\" [plugins]=\"'object-state-details-tab.object' | plugins\">\n </eo-object-state-details>\n\n <eo-result-list *ngIf=\"!frontPage && searchResult\" [selectFirst]=\"false\" [title]=\"gridTitle\"\n [reference]=\"selectedNode?.isReference\" [searchResult]=\"searchResult\" [configType]=\"configType\"\n [configContext]=\"\" [emptyMessage]=\"'eo.state.object.list.error'\" (onRefresh)=\"refreshList()\">\n </eo-result-list>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"45\" [visible]=\"true\">\n <ng-container *ngTemplateOutlet=\"tplObjectDetails\"></ng-container>\n </ng-template>\n </yvc-split-view>\n\n </ng-container>\n\n <ng-template #tplDetailsOnly><ng-container *ngTemplateOutlet=\"tplObjectDetails\"></ng-container></ng-template>\n\n <ng-template #tplObjectDetails>\n <eo-object-details [applySelection]=\"{}\" [reference]=\"isReferenceActive\"\n [cacheLayout]=\"'object.state'\" [plugins]=\"'object-details-tab.object' | plugins\">\n </eo-object-details>\n </ng-template>\n </div>\n </div>\n</div>\n\n<ng-template #errorTmpl>\n <eo-error404></eo-error404>\n</ng-template>\n", styles: [":host{position:absolute;left:var(--app-pane-padding);right:var(--app-pane-padding);top:var(--app-pane-padding);bottom:var(--app-pane-padding)}:host .eo-body.tree h3{margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding) 0 var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption);border-top:1px solid var(--list-item-border-color)}:host .file{height:100%;display:flex;flex-flow:column}:host .file .file-head,:host .file .file-body{opacity:0;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .file.ready .file-head,:host .file.ready .file-body{opacity:1}:host .file .empty-state{background:rgba(var(--color-white-rgb),.3);height:100%;display:flex;flex-flow:column;align-items:center;justify-content:center}:host .file.undocked .empty-state{background:var(--main-background)}:host .file-head{color:var(--text-color-caption);margin-bottom:calc(var(--app-pane-padding) / 4);display:flex;flex-flow:row nowrap;width:100%}:host .file-head eo-icon{padding:var(--app-pane-padding);box-sizing:content-box;flex:none}:host .file-head .left,:host .file-head .right{border-bottom:4px solid var(--color-primary-3);box-sizing:border-box}:host .file-head .left{flex:0 0 auto;display:flex;flex-flow:row nowrap;background:var(--color-white);max-width:calc(100% - 350px)}:host .file-head .left div.title{flex:1;padding:var(--app-pane-padding) 0;display:inline-grid;min-height:0;min-width:0;cursor:pointer}[dir=ltr] :host .file-head .left div.title{padding-right:calc(var(--app-pane-padding) * 2);padding-left:0}[dir=rtl] :host .file-head .left div.title{padding-left:calc(var(--app-pane-padding) * 2);padding-right:0}:host .file-head .left div.title .label,:host .file-head .left div.title .description{display:inline-block;max-width:none;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .file-head .left div.title .label{font-size:var(--font-title)}:host .file-head .right{flex:1 1 auto;display:flex;flex-flow:column;min-width:350px}:host .file-head .right .fold{flex:0 0 auto;background:var(--main-background);color:var(--text-color-caption);text-align:right;padding-bottom:calc(var(--app-pane-padding) / 2);display:flex;justify-content:flex-end}[dir=rtl] :host .file-head .right .fold{text-align:right;text-align:left}:host .file-head .right .fold .created-date{padding-right:5px}:host .file-head .right .actions{background:var(--color-white);flex:1 1 auto;display:flex;align-items:center;padding:0 var(--app-pane-padding);justify-content:flex-end;min-height:50px}:host .file-body{flex:1 1 auto;position:relative}:host .file-body .file-body-wrap{position:absolute;inset:0;overflow:hidden}:host .file-body .file-body-wrap .frontPage{position:absolute;inset:0;overflow:hidden}:host ::ng-deep .tree .tree-panel-error{display:flex;height:100%;flex-flow:column;justify-content:center;align-items:center;color:var(--text-color-caption)}:host ::ng-deep .tree .eo-head{background-color:var(--color-primary-3)}:host ::ng-deep .tree .eo-head .eo-header-info{padding:0}:host ::ng-deep .tree .eo-head .eo-header-info h2{flex:1 1 auto;color:var(--color-white)}:host ::ng-deep .tree .eo-head .eo-header-info form.tree-filter-form{width:61%;flex:0 0 auto;margin-bottom:var(--app-pane-padding);min-width:200px;align-self:flex-end}:host ::ng-deep .tree .eo-head .eo-header-info form.tree-filter-form input{background-color:transparent;border:0;outline:0}:host ::ng-deep .tree eo-result-list .eo-head{background-color:var(--panel-background)}:host ::ng-deep yvc-split-view{height:100%}:host ::ng-deep eo-tree{padding:var(--app-pane-padding)}:host ::ng-deep eo-object-details{background:var(--panel-background-grey)}\n"] }]
|
|
337
|
-
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.PageTitleService }, { type: i3.SystemService }, { type: i3.DmsService }, { type: i4.SelectionService }, { type: i3.TranslateService }, { type: i5.ObjectStateService }, { type: i6.ActionService }, { type: i7.LocationService }, { type: i8.PendingChangesService }, { type: i3.EventService }, { type: i9.GridService }
|
|
433
|
+
args: [{ selector: 'eo-object-state', providers: [ObjectStateService], animations: [panelLoadingAnimations], template: "<div class=\"file\" [ngClass]=\"{ready: context || context === null}\" *ngIf=\"!error; else errorTmpl\">\n\n <div class=\"file-head\" *ngIf=\"context && context.isContextFolder\">\n <div class=\"left\">\n <eo-icon class=\"type-icon\" [objectType]=\"context.type\" [iconTitle]=\"context.type.label\"></eo-icon>\n <div class=\"title\" (click)=\"setupFrontPage(false, true)\" (contextmenu)=\"onContextMenuClicked($event)\">\n <div class=\"label\">{{context.title || ' '}}</div>\n <div class=\"description\">{{context.description || ' '}}</div>\n </div>\n </div>\n <div class=\"right\">\n <div class=\"fold\">\n <span class=\"created-date\">{{context.created.on | localeDate}}</span>\n <span class=\"created-title\">{{context.created.by.title}}</span>\n </div>\n <div class=\"actions\">\n </div>\n </div>\n </div>\n\n <div class=\"file-body\">\n <div class=\"file-body-wrap\">\n\n <ng-container *ngIf=\"context !== null; else tplDetailsOnly\">\n\n <yvc-split-view *ngIf=\"cacheLayout\" [layoutSettingsID]=\"cacheLayout\">\n <ng-template yvcSplitArea [panelClass]=\"'tree'\" [size]=\"20\" [visible]=\"true\">\n <div class=\"tree-panel-error\" *ngIf=\"loadingState.tree.isError(); else tplTree\" translate>\n eo.state.object.tree.error</div>\n\n <ng-template #tplTree>\n\n <eo-list-container #eoList [loading]=\"!contextTree\" [tabs]=\"false\">\n <div class=\"eo-header dark\">\n <div class=\"eo-header-info\">\n <h2 class=\"eo-header-title\" translate>eo.state.object.tree.title</h2>\n <form name=\"structureForm\" class=\"tree-filter-form\" [ngClass]=\"{active: !!termFilter}\">\n <eo-form-input [skipToggle]=\"true\" [label]=\" 'eo.state.object.tree.filter.label' | translate\">\n <input [(ngModel)]=\"termFilter\" maxlength=\"250\" [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"onTermFilterChange.emit($event)\" />\n </eo-form-input>\n </form>\n </div>\n </div>\n <div class=\"eo-body tree\">\n <eo-tree [tree]=\"contextTree\" [options]=\"{multiselect: false, disableDeselection: true}\"\n [@panelLoading]=\"loadingState.tree.state\" *ngIf=\"contextTree && (contextTree.length > 1 || (contextTree.length === 1 && contextTree[0].children.length && contextTree[0].name))\" [highlightedNodes]=\"highlightedNodes\"\n [treeUpdate]=\"contextTreeUpdate\" [(ngModel)]=\"selectedNodes\"\n (ngModelChange)=\"onTreeSelectionChanged($event)\"></eo-tree>\n <h3 *ngIf=\"contextTreeRef?.length\" title=\"{{'eo.state.object.tree.references.tooltip'|translate}}\"\n translate>eo.state.object.tree.references</h3>\n <eo-tree [tree]=\"contextTreeRef\" [options]=\"{multiselect: false, disableDeselection: true}\"\n [@panelLoading]=\"loadingState.treeRef.state\" *ngIf=\"contextTreeRef?.length\"\n [highlightedNodes]=\"highlightedNodes\" [treeUpdate]=\"contextTreeRefUpdate\"\n [(ngModel)]=\"selectedNodes\" (ngModelChange)=\"onTreeSelectionChanged($event)\"\n class=\"reference\"></eo-tree>\n </div>\n </eo-list-container>\n\n </ng-template>\n </ng-template>\n\n <ng-template yvcSplitArea [panelClass]=\"'tree'\" [size]=\"35\" [visible]=\"true\">\n <eo-object-state-details *ngIf=\"context\" [context]=\"context\" [frontPageData]=\"frontPageData\"\n [visible]=\"frontPage\" (onTabChange)=\"setupFrontPage(true, true)\" [plugins]=\"'object-state-details-tab.object' | plugins\">\n </eo-object-state-details>\n\n <eo-result-list *ngIf=\"!frontPage && searchResult\" [selectFirst]=\"false\" [title]=\"gridTitle\"\n [reference]=\"selectedNode?.isReference\" [searchResult]=\"searchResult\" [configType]=\"configType\"\n [configContext]=\"\" [emptyMessage]=\"'eo.state.object.list.error'\" (onRefresh)=\"refreshList()\">\n </eo-result-list>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"45\" [visible]=\"true\">\n <ng-container *ngTemplateOutlet=\"tplObjectDetails\"></ng-container>\n </ng-template>\n </yvc-split-view>\n\n </ng-container>\n\n <ng-template #tplDetailsOnly><ng-container *ngTemplateOutlet=\"tplObjectDetails\"></ng-container></ng-template>\n\n <ng-template #tplObjectDetails>\n <eo-object-details [applySelection]=\"{}\" [reference]=\"isReferenceActive\"\n [cacheLayout]=\"'object.state'\" [plugins]=\"'object-details-tab.object' | plugins\">\n </eo-object-details>\n </ng-template>\n </div>\n </div>\n</div>\n\n<ng-template #errorTmpl>\n <eo-error404></eo-error404>\n</ng-template>\n", styles: [":host{position:absolute;left:var(--app-pane-padding);right:var(--app-pane-padding);top:var(--app-pane-padding);bottom:var(--app-pane-padding)}:host .eo-body.tree h3{margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding) 0 var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption);border-top:1px solid var(--list-item-border-color)}:host .file{height:100%;display:flex;flex-flow:column}:host .file .file-head,:host .file .file-body{opacity:0;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .file.ready .file-head,:host .file.ready .file-body{opacity:1}:host .file .empty-state{background:rgba(var(--color-white-rgb),.3);height:100%;display:flex;flex-flow:column;align-items:center;justify-content:center}:host .file.undocked .empty-state{background:var(--main-background)}:host .file-head{color:var(--text-color-caption);margin-bottom:calc(var(--app-pane-padding) / 4);display:flex;flex-flow:row nowrap;width:100%}:host .file-head eo-icon{padding:var(--app-pane-padding);box-sizing:content-box;flex:none}:host .file-head .left,:host .file-head .right{border-bottom:4px solid var(--color-primary-3);box-sizing:border-box}:host .file-head .left{flex:0 0 auto;display:flex;flex-flow:row nowrap;background:var(--color-white);max-width:calc(100% - 350px)}:host .file-head .left div.title{flex:1;padding:var(--app-pane-padding) 0;display:inline-grid;min-height:0;min-width:0;cursor:pointer}[dir=ltr] :host .file-head .left div.title{padding-right:calc(var(--app-pane-padding) * 2);padding-left:0}[dir=rtl] :host .file-head .left div.title{padding-left:calc(var(--app-pane-padding) * 2);padding-right:0}:host .file-head .left div.title .label,:host .file-head .left div.title .description{display:inline-block;max-width:none;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host .file-head .left div.title .label{font-size:var(--font-title)}:host .file-head .right{flex:1 1 auto;display:flex;flex-flow:column;min-width:350px}:host .file-head .right .fold{flex:0 0 auto;background:var(--main-background);color:var(--text-color-caption);text-align:right;padding-bottom:calc(var(--app-pane-padding) / 2);display:flex;justify-content:flex-end}[dir=rtl] :host .file-head .right .fold{text-align:right;text-align:left}:host .file-head .right .fold .created-date{padding-right:5px}:host .file-head .right .actions{background:var(--color-white);flex:1 1 auto;display:flex;align-items:center;padding:0 var(--app-pane-padding);justify-content:flex-end;min-height:50px}:host .file-body{flex:1 1 auto;position:relative}:host .file-body .file-body-wrap{position:absolute;inset:0;overflow:hidden}:host .file-body .file-body-wrap .frontPage{position:absolute;inset:0;overflow:hidden}:host ::ng-deep .tree .tree-panel-error{display:flex;height:100%;flex-flow:column;justify-content:center;align-items:center;color:var(--text-color-caption)}:host ::ng-deep .tree .eo-head{background-color:var(--color-primary-3)}:host ::ng-deep .tree .eo-head .eo-header-info{padding:0}:host ::ng-deep .tree .eo-head .eo-header-info h2{flex:1 1 auto;color:var(--color-white)}:host ::ng-deep .tree .eo-head .eo-header-info form.tree-filter-form{width:61%;flex:0 0 auto;margin-bottom:var(--app-pane-padding);min-width:200px;align-self:flex-end}:host ::ng-deep .tree .eo-head .eo-header-info form.tree-filter-form input{background-color:transparent;border:0;outline:0}:host ::ng-deep .tree eo-result-list .eo-head{background-color:var(--panel-background)}:host ::ng-deep yvc-split-view{height:100%}:host ::ng-deep eo-tree{padding:var(--app-pane-padding)}:host ::ng-deep eo-object-details{background:var(--panel-background-grey)}\n"] }]
|
|
434
|
+
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.PageTitleService }, { type: i3.SystemService }, { type: i3.DmsService }, { type: i4.SelectionService }, { type: i3.TranslateService }, { type: i5.ObjectStateService }, { type: i6.ActionService }, { type: i7.LocationService }, { type: i8.PendingChangesService }, { type: i3.EventService }, { type: i9.GridService }], propDecorators: { eoGrid: [{
|
|
338
435
|
type: ViewChild,
|
|
339
436
|
args: ['eoGrid']
|
|
340
437
|
}], onTermFilterChange: [{
|
|
341
438
|
type: Output
|
|
342
439
|
}] } });
|
|
343
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXN0YXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tY2xpZW50L29iamVjdC1zdGF0ZS9vYmplY3Qtc3RhdGUvb2JqZWN0LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tY2xpZW50L29iamVjdC1zdGF0ZS9vYmplY3Qtc3RhdGUvb2JqZWN0LXN0YXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU1RixPQUFPLEVBQXdCLFVBQVUsRUFBMkUsS0FBSyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQy9JLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTVDLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFXbkUsT0FBTyxFQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBRWpILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVV6RSxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFvQjtJQXNDL0IsWUFBb0IsS0FBcUIsRUFDL0IsWUFBOEIsRUFDOUIsYUFBNEIsRUFDNUIsVUFBc0IsRUFDdEIsU0FBMkIsRUFDNUIsU0FBMkIsRUFDM0IsV0FBK0IsRUFDOUIsYUFBNEIsRUFDNUIsUUFBeUIsRUFDekIsY0FBcUMsRUFDckMsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsYUFBNEI7UUFabEIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQTlDdEMsVUFBSyxHQUFHLEtBQUssQ0FBQztRQVlkLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUNsQixvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUV2QyxhQUFRLEdBQWEsRUFBRSxDQUFDO1FBRWQsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUlsRCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR2pCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQixpQkFBWSxHQUFHO1lBQ2IsSUFBSSxFQUFFLElBQUksWUFBWSxFQUFFO1lBQ3hCLE9BQU8sRUFBRSxJQUFJLFlBQVksRUFBRTtZQUMzQixJQUFJLEVBQUUsSUFBSSxZQUFZLEVBQUU7WUFDeEIsT0FBTyxFQUFFLElBQUksWUFBWSxFQUFFO1NBQzVCLENBQUM7UUFnQkEsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBZ0IsRUFBRSxDQUFDO1FBRW5DLElBQUksQ0FBQyxrQkFBa0I7YUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFN0MsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxXQUFXO2FBQ2IsS0FBSzthQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUIsU0FBUyxDQUFDLENBQUMsR0FBdUIsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDdEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixtQ0FBbUM7Z0JBQ25DLElBQUksRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQWUsQ0FBQztnQkFDOUcsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDN0IsQ0FBQztZQUVELGtDQUFrQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSzthQUNuQixJQUFJLENBQ0gsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUNyQjthQUNBLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7YUFDdEIsSUFBSSxDQUNILGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FDckI7YUFDQSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO2FBQ2xCLElBQUksQ0FDSCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQ3JCO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBZSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIscUNBQXFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFlBQVk7YUFDZCxFQUFFLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDO2FBQ2pDLElBQUksQ0FDSCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQ3JCO2FBQ0EsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUNsQixPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxZQUFZO2FBQ2QsRUFBRSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQzthQUNqQyxJQUFJLENBQ0gsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUNyQjthQUNBLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDNUIsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxZQUFZO2FBQ2QsRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQzthQUNoQyxJQUFJLENBQ0gsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUNyQjthQUNBLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLFdBQVc7aUJBQ2IsY0FBYyxDQUFNLEVBQUUsRUFBTyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELHNCQUFzQixDQUFDLGFBQXVCO1FBQzVDLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsc0JBQXNCLENBQUMsSUFBYztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJO2lCQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDL0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQUcsRUFBRSxHQUFJO1FBQzVCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyQixHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sT0FBTyxDQUFDLElBQWUsRUFBRSxVQUFXO1FBQzFDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLHlGQUF5RjtZQUN6Riw2REFBNkQ7WUFDN0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEIsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNwRCwrRUFBK0U7WUFDL0UsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRXJELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUMsVUFBVSxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLEVBQUMsQ0FBQztpQkFDaEksU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV6RixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVCLENBQUM7YUFBTSxDQUFDO1lBQ04sMkJBQTJCO1lBQzNCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO2dCQUNsRSxJQUFJLENBQUMsVUFBVTtxQkFDWixZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQztxQkFDakYsU0FBUyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sNEJBQTRCO2dCQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLHlCQUF5QjtnQkFDekIsaURBQWlEO1lBQ25ELENBQUM7UUFDSCxDQUFDO1FBQ0QseUNBQXlDO0lBQzNDLENBQUM7SUFFRCxjQUFjLENBQUMsZUFBZSxHQUFHLEtBQUssRUFBRSxVQUFVLEdBQUcsS0FBSztRQUN4RCxJQUFJLENBQUMsV0FBVzthQUNiLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzdCLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYSxDQUFDLFVBQW1CLEVBQUUsVUFBZ0I7UUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDN0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxVQUFVO1FBQzFCLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvQixRQUFRLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBQyxFQUFFLEVBQUUsVUFBVSxFQUFDLENBQUM7Z0JBQzFGLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUMsRUFBRSxFQUFFLFVBQVUsRUFBQyxFQUFFLGVBQWUsQ0FBQzthQUM1RyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFdBQVc7aUJBQ2IsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQztpQkFDaEYsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxXQUFXO2lCQUNiLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFDLEVBQUUsZUFBZSxDQUFDO2lCQUNqRyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUU7UUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxFQUFFO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsTUFBTSxHQUFHLEVBQUU7UUFDckMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUV2RSxDQUFDO0lBRU8sV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFjLEVBQUUsV0FBVyxHQUFHLEtBQUs7UUFDL0QsTUFBTSxFQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzlELDJFQUEyRTtRQUMzRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLElBQUksR0FBYTtZQUNuQixFQUFFLEVBQUUsR0FBRztZQUNQLElBQUksRUFBRSxLQUFLO1lBQ1gsSUFBSSxFQUFFLENBQUM7WUFDUCxRQUFRLEVBQUUsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3RFLFFBQVEsRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzFELFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFDaEIsV0FBVztZQUNYLE1BQU0sRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUM5QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ3BDLFFBQVEsRUFBRSxPQUFPO2FBQ2xCLENBQUMsQ0FBQztZQUNILElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQztRQUVGLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO2FBQ1gsSUFBSSxDQUNILGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsNkNBQTZDO1lBQzdDLE1BQU0sRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDbEQsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLFVBQVU7cUJBQ1osWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDO3FCQUN2RCxTQUFTLENBQUMsQ0FBQyxHQUFjLEVBQUUsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2dCQUNqQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ2xCLG1DQUFtQztvQkFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDUixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNULHdFQUF3RTtRQUN4RSxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBcFdVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLGlHQUhwQixDQUFDLGtCQUFrQixDQUFDLDRIQzNCakMsaS9KQThGQSwrNFBEbEVjLENBQUMsc0JBQXNCLENBQUM7O0FBRXpCLG9CQUFvQjtJQVJoQyxZQUFZLEVBQUU7R0FRRixvQkFBb0IsQ0FzV2hDOzsyRkF0V1ksb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLGlCQUFpQixhQUdoQixDQUFDLGtCQUFrQixDQUFDLGNBQ25CLENBQUMsc0JBQXNCLENBQUM7c2JBSWYsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQW1CVCxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0dyaWRPcHRpb25zfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvY29yZSc7XG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RG1zT2JqZWN0LCBEbXNTZXJ2aWNlLCBFbmFpb0V2ZW50LCBFdmVudFNlcnZpY2UsIE9iamVjdFR5cGUsIFNlYXJjaFJlc3VsdCwgU3lzdGVtU2VydmljZSwgVHJhbnNsYXRlU2VydmljZSwgVXRpbHN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge2ZvcmtKb2lufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7R3JpZFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2FwaS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHtMYXlvdXRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9sYXlvdXQvbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHtMb2NhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2xvY2F0aW9uL2xvY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtQZW5kaW5nQ2hhbmdlc0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcGVuZGluZy1jaGFuZ2VzL3BlbmRpbmctY2hhbmdlcy1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7UGVuZGluZ0NoYW5nZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9wZW5kaW5nLWNoYW5nZXMvcGVuZGluZy1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHtTZWxlY3Rpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtQYWdlVGl0bGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS90aXRsZS9wYWdlLXRpdGxlLnNlcnZpY2UnO1xuaW1wb3J0IHtBY3Rpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmsvYWN0aW9ucy9hY3Rpb24tc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQge0dyaWRDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7VHJlZU5vZGV9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay90cmVlL3RyZWUuY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQge1BhbmVsTG9hZGluZywgcGFuZWxMb2FkaW5nQW5pbWF0aW9uc30gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrL3VpL2FuaW1hdGlvbnMvcGFuZWwtbG9hZGluZy5hbmltYXRpb24nO1xuaW1wb3J0IHtGcm9udFBhZ2VEYXRhLCBPYmplY3RTZWFyY2hSZXN1bHR9IGZyb20gJy4uL29iamVjdC1zdGF0ZS1zZXJ2aWNlL29iamVjdC1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtPYmplY3RTdGF0ZVNlcnZpY2V9IGZyb20gJy4uL29iamVjdC1zdGF0ZS1zZXJ2aWNlL29iamVjdC1zdGF0ZS5zZXJ2aWNlJztcblxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1vYmplY3Qtc3RhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vb2JqZWN0LXN0YXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb2JqZWN0LXN0YXRlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW09iamVjdFN0YXRlU2VydmljZV0sXG4gIGFuaW1hdGlvbnM6IFtwYW5lbExvYWRpbmdBbmltYXRpb25zXVxufSlcbmV4cG9ydCBjbGFzcyBPYmplY3RTdGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBQZW5kaW5nQ2hhbmdlc0NvbXBvbmVudCB7XG5cbiAgQFZpZXdDaGlsZCgnZW9HcmlkJykgZW9HcmlkOiBHcmlkQ29tcG9uZW50O1xuXG4gIGVycm9yID0gZmFsc2U7XG4gIGNvbnRleHQ6IERtc09iamVjdDtcbiAgc2VsZWN0ZWRJdGVtOiBEbXNPYmplY3Q7XG4gIGZyb250UGFnZTogYm9vbGVhbjtcbiAgZnJvbnRQYWdlRGF0YTogRnJvbnRQYWdlRGF0YTtcbiAgY29udGV4dFRyZWU6IFRyZWVOb2RlW107XG4gIGNvbnRleHRUcmVlVXBkYXRlOiBUcmVlTm9kZVtdO1xuICBjb250ZXh0VHJlZVJlZjogVHJlZU5vZGVbXTtcbiAgY29udGV4dFRyZWVSZWZVcGRhdGU6IFRyZWVOb2RlW107XG4gIHNlbGVjdGVkTm9kZXM6IFRyZWVOb2RlW107XG4gIHNlbGVjdGVkTm9kZTogVHJlZU5vZGU7XG4gIGhpZ2hsaWdodGVkTm9kZXM6IHN0cmluZ1tdO1xuICBpc1JlZmVyZW5jZUFjdGl2ZSA9IGZhbHNlO1xuICBwcml2YXRlIGV4cGFuZGVkTm9kZUlkczogc3RyaW5nW10gPSBbXTtcbiAgdGVybUZpbHRlcjogc3RyaW5nO1xuICBhbGxUeXBlczogc3RyaW5nW10gPSBbXTtcbiAgY29uZmlnVHlwZTogT2JqZWN0VHlwZTtcbiAgQE91dHB1dCgpIG9uVGVybUZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBncmlkT3B0aW9uczogR3JpZE9wdGlvbnM7XG4gIGdyaWRUaXRsZTogc3RyaW5nO1xuICBlbXB0eUdyaWQgPSB0cnVlO1xuXG4gIHNlYXJjaFJlc3VsdDogU2VhcmNoUmVzdWx0O1xuICB0eXBlTmFtZSA9ICcnO1xuICBjYWNoZUxheW91dCA9ICcnO1xuXG4gIGxvYWRpbmdTdGF0ZSA9IHtcbiAgICB0cmVlOiBuZXcgUGFuZWxMb2FkaW5nKCksXG4gICAgdHJlZVJlZjogbmV3IFBhbmVsTG9hZGluZygpLFxuICAgIGxpc3Q6IG5ldyBQYW5lbExvYWRpbmcoKSxcbiAgICBkZXRhaWxzOiBuZXcgUGFuZWxMb2FkaW5nKCksXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFBhZ2VUaXRsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgZG1zU2VydmljZTogRG1zU2VydmljZSxcbiAgICBwcml2YXRlIHNlbGVjdGlvbjogU2VsZWN0aW9uU2VydmljZSxcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBvYmplY3RTdGF0ZTogT2JqZWN0U3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2hhbmdlczogUGVuZGluZ0NoYW5nZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlKSB7XG5cbiAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRCYXNlVGl0bGUobnVsbCk7XG4gICAgdGhpcy5ncmlkT3B0aW9ucyA9IDxHcmlkT3B0aW9ucz57fTtcblxuICAgIHRoaXMub25UZXJtRmlsdGVyQ2hhbmdlXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwMCkpXG4gICAgICAuc3Vic2NyaWJlKHYgPT4gdGhpcy5zZXR1cEZyb250UGFnZSh0cnVlKSk7XG5cbiAgICAvLyBzdWJzY3JpYmUgZm9yIGRhdGEgZnJvbSB0aGUgY29ubmVjdGVkIHNlcnZpY2VcbiAgICB0aGlzLm9iamVjdFN0YXRlXG4gICAgICAubGlzdCRcbiAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBPYmplY3RTZWFyY2hSZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5mcm9udFBhZ2UgPSAhcmVzO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgLy8gc2V0dXAgdGhlIGdyaWQgd2l0aCB0aGUgbmV3IGRhdGFcbiAgICAgICAgICBsZXQge25hbWUsIHJlc3VsdH0gPSByZXM7XG4gICAgICAgICAgdGhpcy5lbXB0eUdyaWQgPSByZXN1bHQuY291bnQudmFsdWUgPT09IDA7XG4gICAgICAgICAgdGhpcy5ncmlkVGl0bGUgPSBuYW1lO1xuICAgICAgICAgIHRoaXMuY29uZmlnVHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHJlc3VsdC50eXBlTmFtZSkgfHwge3FuYW1lOiByZXN1bHQudHlwZU5hbWV9IGFzIE9iamVjdFR5cGU7XG4gICAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLmxvYWRpbmdTdGF0ZS5saXN0LnJlYWR5KCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMub2JqZWN0U3RhdGUudHJlZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4gdGhpcy5idWlsZENvbnRleHRUcmVlKHJlcy5mb2xkZXIpKTtcblxuICAgIHRoaXMub2JqZWN0U3RhdGUudHJlZVJlZiRcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4gdGhpcy5idWlsZENvbnRleHRUcmVlUmVmKHJlcy5mb2xkZXIpKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uLmZvY3VzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChpdGVtOiBEbXNPYmplY3QpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICB0aGlzLmhpZ2hsaWdodChpdGVtLmlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XG4gICAgICAgIC8vIHRoaXMubG9hZGluZ1N0YXRlLmRldGFpbHMucmVhZHkoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFNlcnZpY2VcbiAgICAgIC5vbihFbmFpb0V2ZW50LkRNU19PQkpFQ1RfREVMRVRFRClcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQgJiYgdGhpcy5jb250ZXh0LmlkID09PSBldnQuZGF0YS5pZCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5mcm9udFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBGcm9udFBhZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVDb250ZXh0VHJlZSgpO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFNlcnZpY2VcbiAgICAgIC5vbihFbmFpb0V2ZW50LkRNU19PQkpFQ1RfVVBEQVRFRClcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQgJiYgZXZlbnQuZGF0YSAmJiB0aGlzLmNvbnRleHQuaWQgPT09IGV2ZW50LmRhdGEuaWQpIHtcbiAgICAgICAgICB0aGlzLmNvbnRleHQgPSBldmVudC5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZyb250UGFnZSkge1xuICAgICAgICAgIHRoaXMuc2V0dXBGcm9udFBhZ2UodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVDb250ZXh0VHJlZSgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50U2VydmljZVxuICAgICAgLm9uKEVuYWlvRXZlbnQuRE1TX09CSkVDVF9QQVNURUQpXG4gICAgICAucGlwZShcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uY2xpcGJvYXJkLnBhc3RlLnJlc3VsdGxpc3QuaGVhZGxpbmUnKTtcbiAgICAgICAgdGhpcy5vYmplY3RTdGF0ZVxuICAgICAgICAgIC5zZWxlY3RUcmVlTm9kZSg8YW55Pnt9LCA8YW55PntuYW1lfSwge2lkOiBldnQuZGF0YS5tYXAoZCA9PiBkLmlkKX0pLnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRleHRUcmVlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGhhc1BlbmRpbmdDaGFuZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLnBlbmRpbmdDaGFuZ2VzLmhhc1BlbmRpbmdUYXNrKCk7XG4gIH1cblxuICBvbkV4cGFuZGVkTm9kZXNDaGFuZ2VkKGV4cGFuZGVkTm9kZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5leHBhbmRlZE5vZGVJZHMgPSBleHBhbmRlZE5vZGVzO1xuICB9XG5cbiAgLy8gc2VsZWN0IGFuIGVudHJ5IGZyb20gdGhlIHRyZWVcbiAgb25UcmVlU2VsZWN0aW9uQ2hhbmdlZChub2RlOiBUcmVlTm9kZSkge1xuICAgIHRoaXMubG9jYXRpb24ubGVhdmUoKTtcbiAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGU7XG4gICAgaWYgKG5vZGUuZGF0YS50eXBlKSB7XG4gICAgICB0aGlzLmxvY2F0aW9uLmVudGVyKHRoaXMuY29udGV4dCwgdGhpcy5zZWxlY3RlZE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvY2F0aW9uLmVudGVyKHRoaXMuY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChub2RlKSB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnVwZGF0ZUNvbnRleHQobm9kZS5pc1JlZmVyZW5jZSB8fCB0aGlzLmFsbFR5cGVzLmluY2x1ZGVzKG5vZGUuZGF0YS50eXBlKSA/IFtub2RlLmRhdGEudHlwZV0gOiB0aGlzLmFsbFR5cGVzKTtcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlLmxpc3RcbiAgICAgICAgLnN1YnNjcmliZShub2RlLmlzUmVmZXJlbmNlID9cbiAgICAgICAgICB0aGlzLm9iamVjdFN0YXRlLnNlbGVjdFRyZWVOb2RlKHRoaXMuY29udGV4dCwgbm9kZSwge3Rlcm06IHRoaXMudGVybUZpbHRlcn0sICdyZWZlcmVuY2V2aWV3JykgOlxuICAgICAgICAgIHRoaXMub2JqZWN0U3RhdGUuc2VsZWN0VHJlZU5vZGUodGhpcy5jb250ZXh0LCBub2RlLCB7dGVybTogdGhpcy50ZXJtRmlsdGVyfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldHVwRnJvbnRQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgb25Db250ZXh0TWVudUNsaWNrZWQoZXZ0LCBkb2M/KSB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuYWN0aW9uU2VydmljZS5zaG93QWN0aW9ucyhbZG9jIHx8IHRoaXMuY29udGV4dF0sICdETVNfT0JKRUNUJyk7XG4gIH1cblxuICByZWZyZXNoTGlzdCgpIHtcbiAgICB0aGlzLm9uVHJlZVNlbGVjdGlvbkNoYW5nZWQodGhpcy5zZWxlY3RlZE5vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzKGl0ZW06IERtc09iamVjdCwgc2VsZWN0ZWRJZD8pIHtcbiAgICBpZiAoaXRlbS5pc0NvbnRleHRGb2xkZXIpIHtcbiAgICAgIC8vIGlmIHRoZXJlIGFscmVhZHkgaXMgYSBjb250ZXh0IHNldCwgd2UgbmVlZCB0byBsZWF2ZSBsb2NhdGlvbiBmb3IgdGhlIG9sZCBjb250ZXh0IGZpcnN0XG4gICAgICAvLyBvdGhlcndpc2UgVXBsb2FkVGFyZ2V0cyB3aWxsIG5vdCBiZSB1bnJlZ2lzdGVyZWQgY29ycmVjdGx5XG4gICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgIHRoaXMubG9jYXRpb24ubGVhdmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGV4dCA9IGl0ZW07XG4gICAgICB0aGlzLmNhY2hlTGF5b3V0ID0gJ29iamVjdC5zdGF0ZS0tJyArIGl0ZW0udHlwZU5hbWU7XG4gICAgICAvLyBhZGQgdGhpcyBsb2NhdGlvbiB0byB0aGUgbG9jYXRpb24gc2VydmljZSwgd2hpY2ggd2lsbCB0cmFjayBhY3RpdmUgbG9jYXRpb25zXG4gICAgICAvLyBhbmQgaGFuZGxlIGEgaGlzdG9yeSBvZiB2aXNpdGVkIGxvY2F0aW9ucy5cbiAgICAgIHRoaXMubG9jYXRpb24uZW50ZXIodGhpcy5jb250ZXh0LCB0aGlzLnNlbGVjdGVkTm9kZSk7XG5cbiAgICAgIHRoaXMub2JqZWN0U3RhdGUubG9hZFRyZWVCeVF1ZXJ5KHRoaXMuY29udGV4dC5pZCwgdGhpcy5jb250ZXh0LnR5cGVOYW1lLCB7ZGVmaW5pdGlvbjogW3tmaWVsZDogJ3R5cGUnLCBrZXk6ICdUeXBlcycsIHNpemU6IDEwMDB9XX0pXG4gICAgICAgIC5zdWJzY3JpYmUodHlwZXMgPT4gKHRoaXMuYWxsVHlwZXMgPSAodHlwZXMuZm9sZGVyWzBdLmZvbGRlciB8fCBbXSkubWFwKHQgPT4gdC50eXBlKSkpO1xuXG4gICAgICB0aGlzLmZldGNoVHJlZURhdGEoJycsIHNlbGVjdGVkSWQpO1xuICAgICAgdGhpcy5zZXR1cEZyb250UGFnZSh0cnVlKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmZXRjaCB0aGUgY29udGV4dCBmb2xkZXJcbiAgICAgIGlmIChpdGVtLmNvbnRleHRGb2xkZXIpIHtcbiAgICAgICAgdGhpcy5jYWNoZUxheW91dCA9ICdvYmplY3Quc3RhdGUtLScgKyBpdGVtLmNvbnRleHRGb2xkZXIudHlwZU5hbWU7XG4gICAgICAgIHRoaXMuZG1zU2VydmljZVxuICAgICAgICAgIC5nZXREbXNPYmplY3QoaXRlbS5jb250ZXh0Rm9sZGVyLmlkLCBpdGVtLmNvbnRleHRGb2xkZXIudHlwZU5hbWUsIG51bGwsICdERVRBSUxTJylcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXM6IERtc09iamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzKHJlcywgaXRlbS5pZCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqdXN0IHRoZSBkb2N1bWVudCBpbiByb290XG4gICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgICAgIHRoaXMuY2FjaGVMYXlvdXQgPSAnJztcbiAgICAgICAgLy8gaGlkZSBlbXB0eSB0cmVlICYgbGlzdFxuICAgICAgICAvLyB0aGlzLmxheW91dFNlcnZpY2UuaGlkZUFyZWFzKChhLCBpKSA9PiBpIDwgMik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHRoaXMubGF5b3V0U2VydmljZS52aXNpYmlsaXR5VXBkYXRlKCk7XG4gIH1cblxuICBzZXR1cEZyb250UGFnZSh1cGRhdGVTZWxlY3Rpb24gPSBmYWxzZSwgdXBkYXRlVHJlZSA9IGZhbHNlKSB7XG4gICAgdGhpcy5vYmplY3RTdGF0ZVxuICAgICAgLnNlbGVjdEZyb250UGFnZSh0aGlzLmNvbnRleHQpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuZnJvbnRQYWdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mcm9udFBhZ2VEYXRhID0gZGF0YTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubG9jYXRpb24ubGVhdmUoKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmZvY3VzKHRoaXMuY29udGV4dCk7XG4gICAgICB0aGlzLmxvY2F0aW9uLmVudGVyKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVUcmVlKSB7XG4gICAgICB0aGlzLmZldGNoVHJlZURhdGEodGhpcy50ZXJtRmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoVHJlZURhdGEodGVybUZpbHRlcj86IHN0cmluZywgc2VsZWN0ZWRJZD86IGFueSkge1xuICAgIHRoaXMuaGlnaGxpZ2h0KHNlbGVjdGVkSWQpO1xuICAgIHRoaXMubG9hZGluZ1N0YXRlLnRyZWUuc3Vic2NyaWJlKHRoaXMub2JqZWN0U3RhdGUudXBkYXRlVHJlZUJ5UXVlcnkodGhpcy5jb250ZXh0LCB7dGVybTogdGVybUZpbHRlcn0pKTtcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZS50cmVlUmVmLnN1YnNjcmliZSh0aGlzLm9iamVjdFN0YXRlLnVwZGF0ZVRyZWVCeVF1ZXJ5KHRoaXMuY29udGV4dCwge3Rlcm06IHRlcm1GaWx0ZXJ9LCAncmVmZXJlbmNldmlldycpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlnaGxpZ2h0KHNlbGVjdGVkSWQpIHtcbiAgICBpZiAoc2VsZWN0ZWRJZCAmJiB0aGlzLmNvbnRleHQpIHtcbiAgICAgIGZvcmtKb2luKFtcbiAgICAgICAgdGhpcy5vYmplY3RTdGF0ZS5sb2FkVHJlZUJ5UXVlcnkodGhpcy5jb250ZXh0LmlkLCB0aGlzLmNvbnRleHQudHlwZU5hbWUsIHtpZDogc2VsZWN0ZWRJZH0pLFxuICAgICAgICB0aGlzLm9iamVjdFN0YXRlLmxvYWRUcmVlQnlRdWVyeSh0aGlzLmNvbnRleHQuaWQsIHRoaXMuY29udGV4dC50eXBlTmFtZSwge2lkOiBzZWxlY3RlZElkfSwgJ3JlZmVyZW5jZXZpZXcnKVxuICAgICAgXSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZE5vZGVzID0gdGhpcy5oaWdobGlnaHROb2RlcyhbLi4ucmVzWzBdLmZvbGRlciwgLi4ucmVzWzFdLmZvbGRlcl0pO1xuICAgICAgICB0aGlzLmlzUmVmZXJlbmNlQWN0aXZlID0gISEocmVzWzFdLnRvdGFsLnZhbHVlICYmICFyZXNbMF0udG90YWwudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWROb2RlcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29udGV4dFRyZWUoKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgdGhpcy5vYmplY3RTdGF0ZVxuICAgICAgICAubG9hZFRyZWVCeVF1ZXJ5KHRoaXMuY29udGV4dC5pZCwgdGhpcy5jb250ZXh0LnR5cGVOYW1lLCB7dGVybTogdGhpcy50ZXJtRmlsdGVyfSlcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4gdGhpcy5jb250ZXh0VHJlZVVwZGF0ZSA9IHJlcy5mb2xkZXIubWFwKGYgPT4gdGhpcy5hZGRUcmVlTm9kZShmLCBbXSkpKTtcbiAgICAgIHRoaXMub2JqZWN0U3RhdGVcbiAgICAgICAgLmxvYWRUcmVlQnlRdWVyeSh0aGlzLmNvbnRleHQuaWQsIHRoaXMuY29udGV4dC50eXBlTmFtZSwge3Rlcm06IHRoaXMudGVybUZpbHRlcn0sICdyZWZlcmVuY2V2aWV3JylcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4gdGhpcy5jb250ZXh0VHJlZVJlZlVwZGF0ZSA9IHJlcy5mb2xkZXIubWFwKGYgPT4gdGhpcy5hZGRUcmVlTm9kZShmLCBbXSwgdHJ1ZSkpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhpZ2hsaWdodE5vZGVzKGZvbGRlciA9IFtdLCBub2RlcyA9IFtdKSB7XG4gICAgZm9sZGVyLmZvckVhY2goZiA9PiB7XG4gICAgICBpZiAoZi5jb3VudCkge1xuICAgICAgICBub2Rlcy5wdXNoKGYua2V5KTtcbiAgICAgIH1cbiAgICAgIGlmIChmLmZvbGRlcikge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodE5vZGVzKGYuZm9sZGVyLCBub2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbnRleHRUcmVlKGZvbGRlciA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0VHJlZVVwZGF0ZSA9IG51bGw7XG4gICAgdGhpcy5jb250ZXh0VHJlZSA9IGZvbGRlci5tYXAoZiA9PiB0aGlzLmFkZFRyZWVOb2RlKGYsIFtdKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29udGV4dFRyZWVSZWYoZm9sZGVyID0gW10pIHtcbiAgICB0aGlzLmNvbnRleHRUcmVlUmVmVXBkYXRlID0gbnVsbDtcbiAgICB0aGlzLmNvbnRleHRUcmVlUmVmID0gZm9sZGVyLm1hcChmID0+IHRoaXMuYWRkVHJlZU5vZGUoZiwgW10sIHRydWUpKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBhZGRUcmVlTm9kZShub2RlRGF0YSwgcGF0aDogc3RyaW5nW10sIGlzUmVmZXJlbmNlID0gZmFsc2UpIHtcbiAgICBjb25zdCB7a2V5LCB0aXRsZSwgZm9sZGVyLCBleHBhbmRlZCwgY291bnQsIHN0YXRzfSA9IG5vZGVEYXRhO1xuICAgIC8vIGltcG9ydGFudCB0byBjcmVhdGUgY2xvbmUgaGVyZSwgYmVjYXVzZSBvdGhlcndpc2UgcGF0aCB3aWxsIGJlIG1lc3NlZCB1cFxuICAgIGNvbnN0IHAgPSBwYXRoLmNvbmNhdChbdGl0bGVdKTtcbiAgICBsZXQgbm9kZTogVHJlZU5vZGUgPSB7XG4gICAgICBpZDoga2V5LFxuICAgICAgbmFtZTogdGl0bGUsXG4gICAgICBwYXRoOiBwLFxuICAgICAgY2hpbGRyZW46IChmb2xkZXIgfHwgW10pLm1hcChmID0+IHRoaXMuYWRkVHJlZU5vZGUoZiwgcCwgaXNSZWZlcmVuY2UpKSxcbiAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCB8fCAhIX50aGlzLmV4cGFuZGVkTm9kZUlkcy5pbmRleE9mKGtleSksXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgaXNSZWZlcmVuY2UsXG4gICAgICBiYWRnZXM6IChzdGF0cyB8fCBbXSkubWFwKHN0YXQgPT4gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHZhbHVlOiBzdGF0LnZhbHVlICsgJyAnICsgc3RhdC50aXRsZSxcbiAgICAgICAgY3NzQ2xhc3M6ICdzdGF0cydcbiAgICAgIH0pKSxcbiAgICAgIGRhdGE6IG5vZGVEYXRhXG4gICAgfTtcblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbm9kZS5iYWRnZXMucHVzaCh7dmFsdWU6IGNvdW50fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJvdXRlLnVybFxuICAgICAgLnBpcGUoXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FjaGVMYXlvdXQgPSAnJztcbiAgICAgICAgLy8gdGhpcy5sYXlvdXRTZXJ2aWNlLmhpZGVBcmVhcygoKSA9PiBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHtwYXJhbXMsIHF1ZXJ5UGFyYW1zfSA9IHRoaXMucm91dGUuc25hcHNob3Q7XG4gICAgICAgIGlmIChwYXJhbXMuaWQpIHtcbiAgICAgICAgICB0aGlzLnR5cGVOYW1lID0gcXVlcnlQYXJhbXNbJ3R5cGUnXSB8fCAnJztcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5mb2N1cyh7aWQ6IHBhcmFtcy5pZCwgdHlwZU5hbWU6IHRoaXMudHlwZU5hbWV9KTtcbiAgICAgICAgICB0aGlzLmRtc1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXREbXNPYmplY3QocGFyYW1zLmlkLCB0aGlzLnR5cGVOYW1lLCBudWxsLCAnREVUQUlMUycpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXM6IERtc09iamVjdCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2VzcyhyZXMpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5mb2N1cyhyZXMpO1xuICAgICAgICAgICAgICB0aGlzLmlzUmVmZXJlbmNlQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9LCBVdGlscy50aHJvdygoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIHRoaXMubGF5b3V0U2VydmljZS5zZXRBcmVhcyhbXSk7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQsIHdlIHRlbGwgdGhlIGxvY2F0aW9uIHNlcnZpY2UgdGhhdCB3ZVxuICAgIC8vIGxlZnQgdGhlIGxvY2F0aW9uXG4gICAgdGhpcy5sb2NhdGlvbi5sZWF2ZSgpO1xuICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImZpbGVcIiBbbmdDbGFzc109XCJ7cmVhZHk6IGNvbnRleHQgfHwgY29udGV4dCA9PT0gbnVsbH1cIiAqbmdJZj1cIiFlcnJvcjsgZWxzZSBlcnJvclRtcGxcIj5cblxuICA8ZGl2IGNsYXNzPVwiZmlsZS1oZWFkXCIgKm5nSWY9XCJjb250ZXh0ICYmIGNvbnRleHQuaXNDb250ZXh0Rm9sZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cbiAgICAgIDxlby1pY29uIGNsYXNzPVwidHlwZS1pY29uXCIgW29iamVjdFR5cGVdPVwiY29udGV4dC50eXBlXCIgW2ljb25UaXRsZV09XCJjb250ZXh0LnR5cGUubGFiZWxcIj48L2VvLWljb24+XG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiAoY2xpY2spPVwic2V0dXBGcm9udFBhZ2UoKVwiIChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRNZW51Q2xpY2tlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7Y29udGV4dC50aXRsZSB8fCAnJm5ic3A7J319PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7Y29udGV4dC5kZXNjcmlwdGlvbiB8fCAnJm5ic3A7J319PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb2xkXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3JlYXRlZC1kYXRlXCI+e3tjb250ZXh0LmNyZWF0ZWQub24gfCBsb2NhbGVEYXRlfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3JlYXRlZC10aXRsZVwiPnt7Y29udGV4dC5jcmVhdGVkLmJ5LnRpdGxlfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZpbGUtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWxlLWJvZHktd3JhcFwiPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGV4dCAhPT0gbnVsbDsgZWxzZSB0cGxEZXRhaWxzT25seVwiPlxuXG4gICAgICAgIDx5dmMtc3BsaXQtdmlldyAqbmdJZj1cImNhY2hlTGF5b3V0XCIgW2xheW91dFNldHRpbmdzSURdPVwiY2FjaGVMYXlvdXRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgeXZjU3BsaXRBcmVhIFtwYW5lbENsYXNzXT1cIid0cmVlJ1wiIFtzaXplXT1cIjIwXCIgW3Zpc2libGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtcGFuZWwtZXJyb3JcIiAqbmdJZj1cImxvYWRpbmdTdGF0ZS50cmVlLmlzRXJyb3IoKTsgZWxzZSB0cGxUcmVlXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBlby5zdGF0ZS5vYmplY3QudHJlZS5lcnJvcjwvZGl2PlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RwbFRyZWU+XG5cbiAgICAgICAgICAgICAgPGVvLWxpc3QtY29udGFpbmVyICNlb0xpc3QgW2xvYWRpbmddPVwiIWNvbnRleHRUcmVlXCIgW3RhYnNdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyIGRhcmtcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJlby1oZWFkZXItdGl0bGVcIiB0cmFuc2xhdGU+ZW8uc3RhdGUub2JqZWN0LnRyZWUudGl0bGU8L2gyPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBuYW1lPVwic3RydWN0dXJlRm9ybVwiIGNsYXNzPVwidHJlZS1maWx0ZXItZm9ybVwiIFtuZ0NsYXNzXT1cInthY3RpdmU6ICEhdGVybUZpbHRlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgW2xhYmVsXT1cIiAnZW8uc3RhdGUub2JqZWN0LnRyZWUuZmlsdGVyLmxhYmVsJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwidGVybUZpbHRlclwiIG1heGxlbmd0aD1cIjI1MFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblRlcm1GaWx0ZXJDaGFuZ2UuZW1pdCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1ib2R5IHRyZWVcIj5cbiAgICAgICAgICAgICAgICAgIDxlby10cmVlIFt0cmVlXT1cImNvbnRleHRUcmVlXCIgW29wdGlvbnNdPVwie211bHRpc2VsZWN0OiBmYWxzZSwgZGlzYWJsZURlc2VsZWN0aW9uOiB0cnVlfVwiXG4gICAgICAgICAgICAgICAgICAgIFtAcGFuZWxMb2FkaW5nXT1cImxvYWRpbmdTdGF0ZS50cmVlLnN0YXRlXCIgKm5nSWY9XCJjb250ZXh0VHJlZSAmJiAoY29udGV4dFRyZWUubGVuZ3RoID4gMSB8fCAoY29udGV4dFRyZWUubGVuZ3RoID09PSAxICYmIGNvbnRleHRUcmVlWzBdLmNoaWxkcmVuLmxlbmd0aCAmJiBjb250ZXh0VHJlZVswXS5uYW1lKSlcIiBbaGlnaGxpZ2h0ZWROb2Rlc109XCJoaWdobGlnaHRlZE5vZGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW3RyZWVVcGRhdGVdPVwiY29udGV4dFRyZWVVcGRhdGVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblRyZWVTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIj48L2VvLXRyZWU+XG4gICAgICAgICAgICAgICAgICA8aDMgKm5nSWY9XCJjb250ZXh0VHJlZVJlZj8ubGVuZ3RoXCIgdGl0bGU9XCJ7eydlby5zdGF0ZS5vYmplY3QudHJlZS5yZWZlcmVuY2VzLnRvb2x0aXAnfHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnN0YXRlLm9iamVjdC50cmVlLnJlZmVyZW5jZXM8L2gzPlxuICAgICAgICAgICAgICAgICAgPGVvLXRyZWUgW3RyZWVdPVwiY29udGV4dFRyZWVSZWZcIiBbb3B0aW9uc109XCJ7bXVsdGlzZWxlY3Q6IGZhbHNlLCBkaXNhYmxlRGVzZWxlY3Rpb246IHRydWV9XCJcbiAgICAgICAgICAgICAgICAgICAgW0BwYW5lbExvYWRpbmddPVwibG9hZGluZ1N0YXRlLnRyZWVSZWYuc3RhdGVcIiAqbmdJZj1cImNvbnRleHRUcmVlUmVmPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0ZWROb2Rlc109XCJoaWdobGlnaHRlZE5vZGVzXCIgW3RyZWVVcGRhdGVdPVwiY29udGV4dFRyZWVSZWZVcGRhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTm9kZXNcIiAobmdNb2RlbENoYW5nZSk9XCJvblRyZWVTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlZmVyZW5jZVwiPjwvZW8tdHJlZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9lby1saXN0LWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbcGFuZWxDbGFzc109XCIndHJlZSdcIiBbc2l6ZV09XCIzNVwiIFt2aXNpYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxlby1vYmplY3Qtc3RhdGUtZGV0YWlscyAqbmdJZj1cImNvbnRleHRcIiBbY29udGV4dF09XCJjb250ZXh0XCIgW2Zyb250UGFnZURhdGFdPVwiZnJvbnRQYWdlRGF0YVwiXG4gICAgICAgICAgICAgIFt2aXNpYmxlXT1cImZyb250UGFnZVwiIChvblRhYkNoYW5nZSk9XCJzZXR1cEZyb250UGFnZSh0cnVlKVwiIFtwbHVnaW5zXT1cIidvYmplY3Qtc3RhdGUtZGV0YWlscy10YWIub2JqZWN0JyB8IHBsdWdpbnNcIj5cbiAgICAgICAgICAgIDwvZW8tb2JqZWN0LXN0YXRlLWRldGFpbHM+XG5cbiAgICAgICAgICAgIDxlby1yZXN1bHQtbGlzdCAqbmdJZj1cIiFmcm9udFBhZ2UgJiYgc2VhcmNoUmVzdWx0XCIgW3NlbGVjdEZpcnN0XT1cImZhbHNlXCIgW3RpdGxlXT1cImdyaWRUaXRsZVwiXG4gICAgICAgICAgICAgIFtyZWZlcmVuY2VdPVwic2VsZWN0ZWROb2RlPy5pc1JlZmVyZW5jZVwiIFtzZWFyY2hSZXN1bHRdPVwic2VhcmNoUmVzdWx0XCIgW2NvbmZpZ1R5cGVdPVwiY29uZmlnVHlwZVwiXG4gICAgICAgICAgICAgIFtjb25maWdDb250ZXh0XT1cIlwiIFtlbXB0eU1lc3NhZ2VdPVwiJ2VvLnN0YXRlLm9iamVjdC5saXN0LmVycm9yJ1wiIChvblJlZnJlc2gpPVwicmVmcmVzaExpc3QoKVwiPlxuICAgICAgICAgICAgPC9lby1yZXN1bHQtbGlzdD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI0NVwiIFt2aXNpYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxPYmplY3REZXRhaWxzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC95dmMtc3BsaXQtdmlldz5cblxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdHBsRGV0YWlsc09ubHk+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbE9iamVjdERldGFpbHNcIj48L25nLWNvbnRhaW5lcj48L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3RwbE9iamVjdERldGFpbHM+XG4gICAgICAgIDxlby1vYmplY3QtZGV0YWlscyBbYXBwbHlTZWxlY3Rpb25dPVwie31cIiBbcmVmZXJlbmNlXT1cImlzUmVmZXJlbmNlQWN0aXZlXCJcbiAgICAgICAgICBbY2FjaGVMYXlvdXRdPVwiJ29iamVjdC5zdGF0ZSdcIiBbcGx1Z2luc109XCInb2JqZWN0LWRldGFpbHMtdGFiLm9iamVjdCcgfCBwbHVnaW5zXCI+XG4gICAgICAgIDwvZW8tb2JqZWN0LWRldGFpbHM+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Vycm9yVG1wbD5cbiAgPGVvLWVycm9yNDA0PjwvZW8tZXJyb3I0MDQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
440
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXN0YXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tY2xpZW50L29iamVjdC1zdGF0ZS9vYmplY3Qtc3RhdGUvb2JqZWN0LXN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tY2xpZW50L29iamVjdC1zdGF0ZS9vYmplY3Qtc3RhdGUvb2JqZWN0LXN0YXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU1RixPQUFPLEVBQXdCLFVBQVUsRUFBMkUsS0FBSyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQy9JLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTVDLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFVbkUsT0FBTyxFQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBRWpILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3pFLElBQU0sb0JBQW9CLEdBQTFCLE1BQU0sb0JBQW9CO0lBeUMvQixZQUFvQixLQUFxQixFQUFVLE1BQWMsRUFDdkQsWUFBOEIsRUFDOUIsYUFBNEIsRUFDNUIsVUFBc0IsRUFDdEIsU0FBMkIsRUFDNUIsU0FBMkIsRUFDM0IsV0FBK0IsRUFDOUIsYUFBNEIsRUFDNUIsUUFBeUIsRUFDekIsY0FBcUMsRUFDckMsWUFBMEIsRUFDMUIsV0FBd0I7UUFYZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDdkQsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWhEbEMsVUFBSyxHQUFHLEtBQUssQ0FBQztRQVlkLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUNsQixvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUV2QyxhQUFRLEdBQWEsRUFBRSxDQUFDO1FBRWQsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUlsRCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR2pCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQixpQkFBWSxHQUFHO1lBQ2IsSUFBSSxFQUFFLElBQUksWUFBWSxFQUFFO1lBQ3hCLE9BQU8sRUFBRSxJQUFJLFlBQVksRUFBRTtZQUMzQixJQUFJLEVBQUUsSUFBSSxZQUFZLEVBQUU7WUFDeEIsT0FBTyxFQUFFLElBQUksWUFBWSxFQUFFO1NBQzVCLENBQUM7UUFFRixzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0IsdUJBQWtCLEdBQVcsRUFBRSxDQUFDO1FBZTlCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQWdCLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsa0JBQWtCO2FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTdDLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsV0FBVzthQUNiLEtBQUs7YUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzFCLFNBQVMsQ0FBQyxDQUFDLEdBQXVCLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQ3RCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsbUNBQW1DO2dCQUNuQyxJQUFJLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBQyxHQUFHLEdBQUcsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFlLENBQUM7Z0JBQzlHLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1lBQzdCLENBQUM7WUFFRCxrQ0FBa0M7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7YUFDbkIsSUFBSSxDQUNILGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDcEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUNsQjthQUNBLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7YUFDdEIsSUFBSSxDQUNILGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDcEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUNsQjthQUNBLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07YUFDbEIsSUFBSSxDQUNILGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FDckI7YUFDQSxTQUFTLENBQUMsQ0FBQyxJQUFlLEVBQUUsRUFBRTtZQUM3QixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixxQ0FBcUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsWUFBWTthQUNkLEVBQUUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7YUFDakMsSUFBSSxDQUNILGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FDckI7YUFDQSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBQ2xCLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4QixDQUFDO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFlBQVk7YUFDZCxFQUFFLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDO2FBQ2pDLElBQUksQ0FDSCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQ3JCO2FBQ0EsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFlBQVk7YUFDZCxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDO2FBQ2hDLElBQUksQ0FDSCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQ3JCO2FBQ0EsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsV0FBVztpQkFDYixjQUFjLENBQU0sRUFBRSxFQUFPLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25GLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsYUFBdUI7UUFDNUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUM7SUFDdkMsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxzQkFBc0IsQ0FBQyxJQUFjO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSTtpQkFDbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9GLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsR0FBSTtRQUM1QixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLE9BQU8sQ0FBQyxJQUFlLEVBQUUsVUFBVztRQUMxQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6Qix5RkFBeUY7WUFDekYsNkRBQTZEO1lBQzdELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hCLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDcEQsK0VBQStFO1lBQy9FLDZDQUE2QztZQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVyRCxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxFQUFDLENBQUM7aUJBQ2hJLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QixDQUFDO2FBQU0sQ0FBQztZQUNOLDJCQUEyQjtZQUMzQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFVBQVU7cUJBQ1osWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUM7cUJBQ2pGLFNBQVMsQ0FBQyxDQUFDLEdBQWMsRUFBRSxFQUFFO29CQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDRCQUE0QjtnQkFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN0Qix5QkFBeUI7Z0JBQ3pCLGlEQUFpRDtZQUNuRCxDQUFDO1FBQ0gsQ0FBQztRQUNELHlDQUF5QztJQUMzQyxDQUFDO0lBRUQsY0FBYyxDQUFDLGVBQWUsR0FBRyxLQUFLLEVBQUUsVUFBVSxHQUFHLEtBQUs7UUFDeEQsSUFBSSxDQUFDLFdBQVc7YUFDYixlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUM3QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxVQUFtQixFQUFFLFVBQWdCO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQzdILENBQUM7SUFFTyxTQUFTLENBQUMsVUFBVTtRQUMxQixJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsUUFBUSxDQUFDO2dCQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUMsRUFBRSxFQUFFLFVBQVUsRUFBQyxDQUFDO2dCQUMxRixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUMsRUFBRSxlQUFlLENBQUM7YUFDNUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxXQUFXO2lCQUNiLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFDLENBQUM7aUJBQ2hGLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRixJQUFJLENBQUMsV0FBVztpQkFDYixlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBQyxFQUFFLGVBQWUsQ0FBQztpQkFDakcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFO1FBQzVDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1osS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsRUFBRTtRQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRU8sbUJBQW1CLENBQUMsTUFBTSxHQUFHLEVBQUU7UUFDckMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQWMsRUFBRSxXQUFXLEdBQUcsS0FBSztRQUMvRCxNQUFNLEVBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsR0FBRyxRQUFRLENBQUM7UUFDOUQsMkVBQTJFO1FBQzNFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksSUFBSSxHQUFhO1lBQ25CLEVBQUUsRUFBRSxHQUFHO1lBQ1AsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJLEVBQUUsQ0FBQztZQUNQLFFBQVEsRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDdEUsUUFBUSxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDMUQsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXO1lBQ1gsTUFBTSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQzlDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSztnQkFDcEMsUUFBUSxFQUFFLE9BQU87YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDO1FBRUYsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssbUJBQW1CLENBQUMsSUFBYztRQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUMsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssdUJBQXVCLENBQUMsaUJBQXlCLEVBQUUsSUFBZ0I7UUFDekUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBRTNDLE1BQU0sRUFBQyxNQUFNLEVBQUUsZUFBZSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ2xFLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBQyxXQUFXLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUMsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQzNHLENBQUM7UUFFRCxxRUFBcUU7UUFDckUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMscUNBQXFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDdkIsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHFDQUFxQyxDQUFDLElBQWdCO1FBQzVELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsT0FBTztZQUNULENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzt3QkFDaEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO3dCQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7NEJBQ3ZCLFdBQVcsRUFBRSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBQzs0QkFDbEUsbUJBQW1CLEVBQUUsT0FBTzt5QkFDN0IsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7d0JBQy9CLE9BQU87b0JBQ1QsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxVQUFVLENBQUMsSUFBYztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRO1FBRU4sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO2FBQ1gsSUFBSSxDQUNILGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsNkNBQTZDO1lBQzdDLE1BQU0sRUFBQyxNQUFNLEVBQUUsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDbEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDNUUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDL0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxVQUFVO3FCQUNaLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQztxQkFDdkQsU0FBUyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO29CQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztnQkFDakMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNsQixtQ0FBbUM7b0JBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCx3RUFBd0U7UUFDeEUsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDOzhHQTdjVSxvQkFBb0I7a0dBQXBCLG9CQUFvQixpR0FIcEIsQ0FBQyxrQkFBa0IsQ0FBQyw0SEN6QmpDLGtnS0E4RkEsKzRQRHBFYyxDQUFDLHNCQUFzQixDQUFDOztBQUV6QixvQkFBb0I7SUFSaEMsWUFBWSxFQUFFO0dBUUYsb0JBQW9CLENBK2NoQzs7MkZBL2NZLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxpQkFBaUIsYUFHaEIsQ0FBQyxrQkFBa0IsQ0FBQyxjQUNuQixDQUFDLHNCQUFzQixDQUFDOzhhQUlmLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFtQlQsa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtHcmlkT3B0aW9uc30gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RG1zT2JqZWN0LCBEbXNTZXJ2aWNlLCBFbmFpb0V2ZW50LCBFdmVudFNlcnZpY2UsIE9iamVjdFR5cGUsIFNlYXJjaFJlc3VsdCwgU3lzdGVtU2VydmljZSwgVHJhbnNsYXRlU2VydmljZSwgVXRpbHN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge2ZvcmtKb2lufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7VW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7R3JpZFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2FwaS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2NhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2xvY2F0aW9uL2xvY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtQZW5kaW5nQ2hhbmdlc0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcGVuZGluZy1jaGFuZ2VzL3BlbmRpbmctY2hhbmdlcy1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7UGVuZGluZ0NoYW5nZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9wZW5kaW5nLWNoYW5nZXMvcGVuZGluZy1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHtTZWxlY3Rpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtQYWdlVGl0bGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS90aXRsZS9wYWdlLXRpdGxlLnNlcnZpY2UnO1xuaW1wb3J0IHtBY3Rpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9lby1mcmFtZXdvcmsvYWN0aW9ucy9hY3Rpb24tc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQge0dyaWRDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7VHJlZU5vZGV9IGZyb20gJy4uLy4uLy4uL2VvLWZyYW1ld29yay90cmVlL3RyZWUuY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQge1BhbmVsTG9hZGluZywgcGFuZWxMb2FkaW5nQW5pbWF0aW9uc30gZnJvbSAnLi4vLi4vLi4vZW8tZnJhbWV3b3JrL3VpL2FuaW1hdGlvbnMvcGFuZWwtbG9hZGluZy5hbmltYXRpb24nO1xuaW1wb3J0IHtGcm9udFBhZ2VEYXRhLCBPYmplY3RTZWFyY2hSZXN1bHR9IGZyb20gJy4uL29iamVjdC1zdGF0ZS1zZXJ2aWNlL29iamVjdC1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtPYmplY3RTdGF0ZVNlcnZpY2V9IGZyb20gJy4uL29iamVjdC1zdGF0ZS1zZXJ2aWNlL29iamVjdC1zdGF0ZS5zZXJ2aWNlJztcbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tb2JqZWN0LXN0YXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29iamVjdC1zdGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29iamVjdC1zdGF0ZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtPYmplY3RTdGF0ZVNlcnZpY2VdLFxuICBhbmltYXRpb25zOiBbcGFuZWxMb2FkaW5nQW5pbWF0aW9uc11cbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0U3RhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgUGVuZGluZ0NoYW5nZXNDb21wb25lbnQge1xuXG4gIEBWaWV3Q2hpbGQoJ2VvR3JpZCcpIGVvR3JpZDogR3JpZENvbXBvbmVudDtcblxuICBlcnJvciA9IGZhbHNlO1xuICBjb250ZXh0OiBEbXNPYmplY3Q7XG4gIHNlbGVjdGVkSXRlbTogRG1zT2JqZWN0O1xuICBmcm9udFBhZ2U6IGJvb2xlYW47XG4gIGZyb250UGFnZURhdGE6IEZyb250UGFnZURhdGE7XG4gIGNvbnRleHRUcmVlOiBUcmVlTm9kZVtdO1xuICBjb250ZXh0VHJlZVVwZGF0ZTogVHJlZU5vZGVbXTtcbiAgY29udGV4dFRyZWVSZWY6IFRyZWVOb2RlW107XG4gIGNvbnRleHRUcmVlUmVmVXBkYXRlOiBUcmVlTm9kZVtdO1xuICBzZWxlY3RlZE5vZGVzOiBUcmVlTm9kZVtdO1xuICBzZWxlY3RlZE5vZGU6IFRyZWVOb2RlO1xuICBoaWdobGlnaHRlZE5vZGVzOiBzdHJpbmdbXTtcbiAgaXNSZWZlcmVuY2VBY3RpdmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBleHBhbmRlZE5vZGVJZHM6IHN0cmluZ1tdID0gW107XG4gIHRlcm1GaWx0ZXI6IHN0cmluZztcbiAgYWxsVHlwZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbmZpZ1R5cGU6IE9iamVjdFR5cGU7XG4gIEBPdXRwdXQoKSBvblRlcm1GaWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zO1xuICBncmlkVGl0bGU6IHN0cmluZztcbiAgZW1wdHlHcmlkID0gdHJ1ZTtcblxuICBzZWFyY2hSZXN1bHQ6IFNlYXJjaFJlc3VsdDtcbiAgdHlwZU5hbWUgPSAnJztcbiAgY2FjaGVMYXlvdXQgPSAnJztcblxuICBsb2FkaW5nU3RhdGUgPSB7XG4gICAgdHJlZTogbmV3IFBhbmVsTG9hZGluZygpLFxuICAgIHRyZWVSZWY6IG5ldyBQYW5lbExvYWRpbmcoKSxcbiAgICBsaXN0OiBuZXcgUGFuZWxMb2FkaW5nKCksXG4gICAgZGV0YWlsczogbmV3IFBhbmVsTG9hZGluZygpLFxuICB9O1xuXG4gIHNlbGVjdGVkRm9sZGVyS2V5OiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRGb2xkZXJOYW1lOiBzdHJpbmcgPSAnJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHRpdGxlU2VydmljZTogUGFnZVRpdGxlU2VydmljZSxcbiAgICBwcml2YXRlIHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkbXNTZXJ2aWNlOiBEbXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VsZWN0aW9uOiBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIG9iamVjdFN0YXRlOiBPYmplY3RTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25TZXJ2aWNlOiBBY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBlbmRpbmdDaGFuZ2VzOiBQZW5kaW5nQ2hhbmdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZSkge1xuXG4gICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0QmFzZVRpdGxlKG51bGwpO1xuICAgIHRoaXMuZ3JpZE9wdGlvbnMgPSA8R3JpZE9wdGlvbnM+e307XG5cbiAgICB0aGlzLm9uVGVybUZpbHRlckNoYW5nZVxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMDApKVxuICAgICAgLnN1YnNjcmliZSh2ID0+IHRoaXMuc2V0dXBGcm9udFBhZ2UodHJ1ZSkpO1xuXG4gICAgLy8gc3Vic2NyaWJlIGZvciBkYXRhIGZyb20gdGhlIGNvbm5lY3RlZCBzZXJ2aWNlXG4gICAgdGhpcy5vYmplY3RTdGF0ZVxuICAgICAgLmxpc3QkXG4gICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogT2JqZWN0U2VhcmNoUmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuZnJvbnRQYWdlID0gIXJlcztcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIC8vIHNldHVwIHRoZSBncmlkIHdpdGggdGhlIG5ldyBkYXRhXG4gICAgICAgICAgbGV0IHtuYW1lLCByZXN1bHR9ID0gcmVzO1xuICAgICAgICAgIHRoaXMuZW1wdHlHcmlkID0gcmVzdWx0LmNvdW50LnZhbHVlID09PSAwO1xuICAgICAgICAgIHRoaXMuZ3JpZFRpdGxlID0gbmFtZTtcbiAgICAgICAgICB0aGlzLmNvbmZpZ1R5cGUgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T2JqZWN0VHlwZShyZXN1bHQudHlwZU5hbWUpIHx8IHtxbmFtZTogcmVzdWx0LnR5cGVOYW1lfSBhcyBPYmplY3RUeXBlO1xuICAgICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5sb2FkaW5nU3RhdGUubGlzdC5yZWFkeSgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLm9iamVjdFN0YXRlLnRyZWUkXG4gICAgICAucGlwZShcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcyksXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuYnVpbGRDb250ZXh0VHJlZShyZXMuZm9sZGVyKTtcbiAgICAgIH0pO1xuICAgIHRoaXMub2JqZWN0U3RhdGUudHJlZVJlZiRcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy5idWlsZENvbnRleHRUcmVlUmVmKHJlcy5mb2xkZXIpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5mb2N1cyRcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbTogRG1zT2JqZWN0KSA9PiB7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgdGhpcy5oaWdobGlnaHQoaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xuICAgICAgICAvLyB0aGlzLmxvYWRpbmdTdGF0ZS5kZXRhaWxzLnJlYWR5KCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlXG4gICAgICAub24oRW5haW9FdmVudC5ETVNfT0JKRUNUX0RFTEVURUQpXG4gICAgICAucGlwZShcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuY29udGV4dC5pZCA9PT0gZXZ0LmRhdGEuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuZnJvbnRQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwRnJvbnRQYWdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlQ29udGV4dFRyZWUoKTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlXG4gICAgICAub24oRW5haW9FdmVudC5ETVNfT0JKRUNUX1VQREFURUQpXG4gICAgICAucGlwZShcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0ICYmIGV2ZW50LmRhdGEgJiYgdGhpcy5jb250ZXh0LmlkID09PSBldmVudC5kYXRhLmlkKSB7XG4gICAgICAgICAgdGhpcy5jb250ZXh0ID0gZXZlbnQuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mcm9udFBhZ2UpIHtcbiAgICAgICAgICB0aGlzLnNldHVwRnJvbnRQYWdlKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlQ29udGV4dFRyZWUoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFNlcnZpY2VcbiAgICAgIC5vbihFbmFpb0V2ZW50LkRNU19PQkpFQ1RfUEFTVEVEKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmNsaXBib2FyZC5wYXN0ZS5yZXN1bHRsaXN0LmhlYWRsaW5lJyk7XG4gICAgICAgIHRoaXMub2JqZWN0U3RhdGVcbiAgICAgICAgICAuc2VsZWN0VHJlZU5vZGUoPGFueT57fSwgPGFueT57bmFtZX0sIHtpZDogZXZ0LmRhdGEubWFwKGQgPT4gZC5pZCl9KS5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDb250ZXh0VHJlZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBoYXNQZW5kaW5nQ2hhbmdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wZW5kaW5nQ2hhbmdlcy5oYXNQZW5kaW5nVGFzaygpO1xuICB9XG5cbiAgb25FeHBhbmRlZE5vZGVzQ2hhbmdlZChleHBhbmRlZE5vZGVzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZXhwYW5kZWROb2RlSWRzID0gZXhwYW5kZWROb2RlcztcbiAgfVxuXG4gIC8vIHNlbGVjdCBhbiBlbnRyeSBmcm9tIHRoZSB0cmVlXG4gIG9uVHJlZVNlbGVjdGlvbkNoYW5nZWQobm9kZTogVHJlZU5vZGUpIHtcbiAgICB0aGlzLmxvY2F0aW9uLmxlYXZlKCk7XG4gICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xuICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldEJhc2VUaXRsZShub2RlPy5uYW1lKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZvbGRlcktleSAhPT0gbm9kZT8uZGF0YT8ua2V5KSB7XG4gICAgICB0aGlzLmhhbmRsZU5vZGVTZWxlY3Rpb24obm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuZGF0YS50eXBlKSB7XG4gICAgICB0aGlzLmxvY2F0aW9uLmVudGVyKHRoaXMuY29udGV4dCwgdGhpcy5zZWxlY3RlZE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvY2F0aW9uLmVudGVyKHRoaXMuY29udGV4dCk7XG4gICAgfVxuICAgIGlmIChub2RlKSB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnVwZGF0ZUNvbnRleHQobm9kZS5pc1JlZmVyZW5jZSB8fCB0aGlzLmFsbFR5cGVzLmluY2x1ZGVzKG5vZGUuZGF0YS50eXBlKSA/IFtub2RlLmRhdGEudHlwZV0gOiB0aGlzLmFsbFR5cGVzKTtcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlLmxpc3RcbiAgICAgICAgLnN1YnNjcmliZShub2RlLmlzUmVmZXJlbmNlID9cbiAgICAgICAgICB0aGlzLm9iamVjdFN0YXRlLnNlbGVjdFRyZWVOb2RlKHRoaXMuY29udGV4dCwgbm9kZSwge3Rlcm06IHRoaXMudGVybUZpbHRlcn0sICdyZWZlcmVuY2V2aWV3JykgOlxuICAgICAgICAgIHRoaXMub2JqZWN0U3RhdGUuc2VsZWN0VHJlZU5vZGUodGhpcy5jb250ZXh0LCBub2RlLCB7dGVybTogdGhpcy50ZXJtRmlsdGVyfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldHVwRnJvbnRQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgb25Db250ZXh0TWVudUNsaWNrZWQoZXZ0LCBkb2M/KSB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuYWN0aW9uU2VydmljZS5zaG93QWN0aW9ucyhbZG9jIHx8IHRoaXMuY29udGV4dF0sICdETVNfT0JKRUNUJyk7XG4gIH1cblxuICByZWZyZXNoTGlzdCgpIHtcbiAgICB0aGlzLm9uVHJlZVNlbGVjdGlvbkNoYW5nZWQodGhpcy5zZWxlY3RlZE5vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzKGl0ZW06IERtc09iamVjdCwgc2VsZWN0ZWRJZD8pIHtcbiAgICBpZiAoaXRlbS5pc0NvbnRleHRGb2xkZXIpIHtcbiAgICAgIC8vIGlmIHRoZXJlIGFscmVhZHkgaXMgYSBjb250ZXh0IHNldCwgd2UgbmVlZCB0byBsZWF2ZSBsb2NhdGlvbiBmb3IgdGhlIG9sZCBjb250ZXh0IGZpcnN0XG4gICAgICAvLyBvdGhlcndpc2UgVXBsb2FkVGFyZ2V0cyB3aWxsIG5vdCBiZSB1bnJlZ2lzdGVyZWQgY29ycmVjdGx5XG4gICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgIHRoaXMubG9jYXRpb24ubGVhdmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGV4dCA9IGl0ZW07XG4gICAgICB0aGlzLmNhY2hlTGF5b3V0ID0gJ29iamVjdC5zdGF0ZS0tJyArIGl0ZW0udHlwZU5hbWU7XG4gICAgICAvLyBhZGQgdGhpcyBsb2NhdGlvbiB0byB0aGUgbG9jYXRpb24gc2VydmljZSwgd2hpY2ggd2lsbCB0cmFjayBhY3RpdmUgbG9jYXRpb25zXG4gICAgICAvLyBhbmQgaGFuZGxlIGEgaGlzdG9yeSBvZiB2aXNpdGVkIGxvY2F0aW9ucy5cbiAgICAgIHRoaXMubG9jYXRpb24uZW50ZXIodGhpcy5jb250ZXh0LCB0aGlzLnNlbGVjdGVkTm9kZSk7XG5cbiAgICAgIHRoaXMub2JqZWN0U3RhdGUubG9hZFRyZWVCeVF1ZXJ5KHRoaXMuY29udGV4dC5pZCwgdGhpcy5jb250ZXh0LnR5cGVOYW1lLCB7ZGVmaW5pdGlvbjogW3tmaWVsZDogJ3R5cGUnLCBrZXk6ICdUeXBlcycsIHNpemU6IDEwMDB9XX0pXG4gICAgICAgIC5zdWJzY3JpYmUodHlwZXMgPT4gKHRoaXMuYWxsVHlwZXMgPSAodHlwZXMuZm9sZGVyWzBdLmZvbGRlciB8fCBbXSkubWFwKHQgPT4gdC50eXBlKSkpO1xuXG4gICAgICB0aGlzLmZldGNoVHJlZURhdGEoJycsIHNlbGVjdGVkSWQpO1xuICAgICAgdGhpcy5zZXR1cEZyb250UGFnZSh0cnVlKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmZXRjaCB0aGUgY29udGV4dCBmb2xkZXJcbiAgICAgIGlmIChpdGVtLmNvbnRleHRGb2xkZXIpIHtcbiAgICAgICAgdGhpcy5jYWNoZUxheW91dCA9ICdvYmplY3Quc3RhdGUtLScgKyBpdGVtLmNvbnRleHRGb2xkZXIudHlwZU5hbWU7XG4gICAgICAgIHRoaXMuZG1zU2VydmljZVxuICAgICAgICAgIC5nZXREbXNPYmplY3QoaXRlbS5jb250ZXh0Rm9sZGVyLmlkLCBpdGVtLmNvbnRleHRGb2xkZXIudHlwZU5hbWUsIG51bGwsICdERVRBSUxTJylcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXM6IERtc09iamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzKHJlcywgaXRlbS5pZCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqdXN0IHRoZSBkb2N1bWVudCBpbiByb290XG4gICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7XG4gICAgICAgIHRoaXMuY2FjaGVMYXlvdXQgPSAnJztcbiAgICAgICAgLy8gaGlkZSBlbXB0eSB0cmVlICYgbGlzdFxuICAgICAgICAvLyB0aGlzLmxheW91dFNlcnZpY2UuaGlkZUFyZWFzKChhLCBpKSA9PiBpIDwgMik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHRoaXMubGF5b3V0U2VydmljZS52aXNpYmlsaXR5VXBkYXRlKCk7XG4gIH1cblxuICBzZXR1cEZyb250UGFnZSh1cGRhdGVTZWxlY3Rpb24gPSBmYWxzZSwgdXBkYXRlVHJlZSA9IGZhbHNlKSB7XG4gICAgdGhpcy5vYmplY3RTdGF0ZVxuICAgICAgLnNlbGVjdEZyb250UGFnZSh0aGlzLmNvbnRleHQpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuZnJvbnRQYWdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mcm9udFBhZ2VEYXRhID0gZGF0YTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubG9jYXRpb24ubGVhdmUoKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmZvY3VzKHRoaXMuY29udGV4dCk7XG4gICAgICB0aGlzLmxvY2F0aW9uLmVudGVyKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVUcmVlKSB7XG4gICAgICB0aGlzLmZldGNoVHJlZURhdGEodGhpcy50ZXJtRmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZldGNoVHJlZURhdGEodGVybUZpbHRlcj86IHN0cmluZywgc2VsZWN0ZWRJZD86IGFueSkge1xuICAgIHRoaXMuaGlnaGxpZ2h0KHNlbGVjdGVkSWQpO1xuICAgIHRoaXMubG9hZGluZ1N0YXRlLnRyZWUuc3Vic2NyaWJlKHRoaXMub2JqZWN0U3RhdGUudXBkYXRlVHJlZUJ5UXVlcnkodGhpcy5jb250ZXh0LCB7dGVybTogdGVybUZpbHRlcn0pKTtcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZS50cmVlUmVmLnN1YnNjcmliZSh0aGlzLm9iamVjdFN0YXRlLnVwZGF0ZVRyZWVCeVF1ZXJ5KHRoaXMuY29udGV4dCwge3Rlcm06IHRlcm1GaWx0ZXJ9LCAncmVmZXJlbmNldmlldycpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlnaGxpZ2h0KHNlbGVjdGVkSWQpIHtcbiAgICBpZiAoc2VsZWN0ZWRJZCAmJiB0aGlzLmNvbnRleHQpIHtcbiAgICAgIGZvcmtKb2luKFtcbiAgICAgICAgdGhpcy5vYmplY3RTdGF0ZS5sb2FkVHJlZUJ5UXVlcnkodGhpcy5jb250ZXh0LmlkLCB0aGlzLmNvbnRleHQudHlwZU5hbWUsIHtpZDogc2VsZWN0ZWRJZH0pLFxuICAgICAgICB0aGlzLm9iamVjdFN0YXRlLmxvYWRUcmVlQnlRdWVyeSh0aGlzLmNvbnRleHQuaWQsIHRoaXMuY29udGV4dC50eXBlTmFtZSwge2lkOiBzZWxlY3RlZElkfSwgJ3JlZmVyZW5jZXZpZXcnKVxuICAgICAgXSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZE5vZGVzID0gdGhpcy5oaWdobGlnaHROb2RlcyhbLi4ucmVzWzBdLmZvbGRlciwgLi4ucmVzWzFdLmZvbGRlcl0pO1xuICAgICAgICB0aGlzLmlzUmVmZXJlbmNlQWN0aXZlID0gISEocmVzWzFdLnRvdGFsLnZhbHVlICYmICFyZXNbMF0udG90YWwudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWROb2RlcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29udGV4dFRyZWUoKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgdGhpcy5vYmplY3RTdGF0ZVxuICAgICAgICAubG9hZFRyZWVCeVF1ZXJ5KHRoaXMuY29udGV4dC5pZCwgdGhpcy5jb250ZXh0LnR5cGVOYW1lLCB7dGVybTogdGhpcy50ZXJtRmlsdGVyfSlcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4gdGhpcy5jb250ZXh0VHJlZVVwZGF0ZSA9IHJlcy5mb2xkZXIubWFwKGYgPT4gdGhpcy5hZGRUcmVlTm9kZShmLCBbXSkpKTtcbiAgICAgIHRoaXMub2JqZWN0U3RhdGVcbiAgICAgICAgLmxvYWRUcmVlQnlRdWVyeSh0aGlzLmNvbnRleHQuaWQsIHRoaXMuY29udGV4dC50eXBlTmFtZSwge3Rlcm06IHRoaXMudGVybUZpbHRlcn0sICdyZWZlcmVuY2V2aWV3JylcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4gdGhpcy5jb250ZXh0VHJlZVJlZlVwZGF0ZSA9IHJlcy5mb2xkZXIubWFwKGYgPT4gdGhpcy5hZGRUcmVlTm9kZShmLCBbXSwgdHJ1ZSkpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhpZ2hsaWdodE5vZGVzKGZvbGRlciA9IFtdLCBub2RlcyA9IFtdKSB7XG4gICAgZm9sZGVyLmZvckVhY2goZiA9PiB7XG4gICAgICBpZiAoZi5jb3VudCkge1xuICAgICAgICBub2Rlcy5wdXNoKGYua2V5KTtcbiAgICAgIH1cbiAgICAgIGlmIChmLmZvbGRlcikge1xuICAgICAgICB0aGlzLmhpZ2hsaWdodE5vZGVzKGYuZm9sZGVyLCBub2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbnRleHRUcmVlKGZvbGRlciA9IFtdKSB7XG4gICAgdGhpcy5jb250ZXh0VHJlZVVwZGF0ZSA9IG51bGw7XG4gICAgdGhpcy5jb250ZXh0VHJlZSA9IGZvbGRlci5tYXAoZiA9PiB0aGlzLmFkZFRyZWVOb2RlKGYsIFtdKSk7XG4gICAgdGhpcy5jb250ZXh0VHJlZSA9IHRoaXMuc2VsZWN0TWF0Y2hpbmdDaGlsZE5vZGUodGhpcy5zZWxlY3RlZEZvbGRlcktleSwgdGhpcy5jb250ZXh0VHJlZSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29udGV4dFRyZWVSZWYoZm9sZGVyID0gW10pIHtcbiAgICB0aGlzLmNvbnRleHRUcmVlUmVmVXBkYXRlID0gbnVsbDtcbiAgICB0aGlzLmNvbnRleHRUcmVlUmVmID0gZm9sZGVyLm1hcChmID0+IHRoaXMuYWRkVHJlZU5vZGUoZiwgW10sIHRydWUpKTtcbiAgICB0aGlzLmNvbnRleHRUcmVlUmVmID0gdGhpcy5zZWxlY3RNYXRjaGluZ0NoaWxkTm9kZSh0aGlzLnNlbGVjdGVkRm9sZGVyS2V5LCB0aGlzLmNvbnRleHRUcmVlUmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVHJlZU5vZGUobm9kZURhdGEsIHBhdGg6IHN0cmluZ1tdLCBpc1JlZmVyZW5jZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qge2tleSwgdGl0bGUsIGZvbGRlciwgZXhwYW5kZWQsIGNvdW50LCBzdGF0c30gPSBub2RlRGF0YTtcbiAgICAvLyBpbXBvcnRhbnQgdG8gY3JlYXRlIGNsb25lIGhlcmUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHBhdGggd2lsbCBiZSBtZXNzZWQgdXBcbiAgICBjb25zdCBwID0gcGF0aC5jb25jYXQoW3RpdGxlXSk7XG4gICAgbGV0IG5vZGU6IFRyZWVOb2RlID0ge1xuICAgICAgaWQ6IGtleSxcbiAgICAgIG5hbWU6IHRpdGxlLFxuICAgICAgcGF0aDogcCxcbiAgICAgIGNoaWxkcmVuOiAoZm9sZGVyIHx8IFtdKS5tYXAoZiA9PiB0aGlzLmFkZFRyZWVOb2RlKGYsIHAsIGlzUmVmZXJlbmNlKSksXG4gICAgICBleHBhbmRlZDogZXhwYW5kZWQgfHwgISF+dGhpcy5leHBhbmRlZE5vZGVJZHMuaW5kZXhPZihrZXkpLFxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgIGlzUmVmZXJlbmNlLFxuICAgICAgYmFkZ2VzOiAoc3RhdHMgfHwgW10pLm1hcChzdGF0ID0+IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB2YWx1ZTogc3RhdC52YWx1ZSArICcgJyArIHN0YXQudGl0bGUsXG4gICAgICAgIGNzc0NsYXNzOiAnc3RhdHMnXG4gICAgICB9KSksXG4gICAgICBkYXRhOiBub2RlRGF0YVxuICAgIH07XG5cbiAgICBpZiAoY291bnQpIHtcbiAgICAgIG5vZGUuYmFkZ2VzLnB1c2goe3ZhbHVlOiBjb3VudH0pO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHNlbGVjdGlvbiBvZiBhIG5vZGUgaW4gdGhlIHRyZWUuXG4gICAqIFVwZGF0ZXMgdGhlIGNvbnRleHQgdHJlZSB3aXRoIHRoZSBzZWxlY3RlZCBub2RlIGFuZCBuYXZpZ2F0ZXMgdG8gdXBkYXRlIHRoZSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyZWVOb2RlfSBub2RlIC0gVGhlIHNlbGVjdGVkIHRyZWUgbm9kZS5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlTm9kZVNlbGVjdGlvbihub2RlOiBUcmVlTm9kZSkge1xuICAgIHRoaXMuY29udGV4dFRyZWUgPSB0aGlzLnNlbGVjdE1hdGNoaW5nQ2hpbGROb2RlKG5vZGUuZGF0YS5rZXksIHRoaXMuY29udGV4dFRyZWUpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7cXVlcnlQYXJhbXM6IHtmb2xkZXJLZXk6IG5vZGUuZGF0YS5rZXksIG9iamVjdElkOiBudWxsfSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIG1hdGNoaW5nIGNoaWxkIG5vZGUgYmFzZWQgb24gdGhlIHNlbGVjdGVkRm9sZGVyS2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0ZWRGb2xkZXJLZXkgLSBUaGUga2V5IG9mIHRoZSBzZWxlY3RlZCBmb2xkZXIuXG4gICAqIEBwYXJhbSB7VHJlZU5vZGVbXX0gdHJlZSAtIFRoZSB0cmVlIHN0cnVjdHVyZSB0byBzZWFyY2ggdGhyb3VnaC5cbiAgICogQHJldHVybnMge1RyZWVOb2RlW119IC0gVGhlIHVwZGF0ZWQgdHJlZSBzdHJ1Y3R1cmUuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNlbGVjdE1hdGNoaW5nQ2hpbGROb2RlKHNlbGVjdGVkRm9sZGVyS2V5OiBzdHJpbmcsIHRyZWU6IFRyZWVOb2RlW10pOiBUcmVlTm9kZVtdIHtcbiAgICB0aGlzLnNlbGVjdGVkRm9sZGVyS2V5ID0gc2VsZWN0ZWRGb2xkZXJLZXk7XG5cbiAgICBjb25zdCB7ZmlsdGVyOiBxdWVyeVRlcm1GaWx0ZXJ9ID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICBpZiAodGhpcy50ZXJtRmlsdGVyIHx8IHF1ZXJ5VGVybUZpbHRlcikge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtxdWVyeVBhcmFtczoge2ZpbHRlcjogdGhpcy50ZXJtRmlsdGVyIHx8IG51bGx9LCBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnfSk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSBzcGVjaWFsIGNhc2UgZnJvbSBwcmVwYXJlIHN0YXRlIHdoZW4gZHJhZyBhbmQgZHJvcCBkYXRhXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb2xkZXJOYW1lICYmICF0aGlzLnNlbGVjdGVkRm9sZGVyS2V5KSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRm9sZGVyS2V5RnJvbUZvbGRlck5hbWUodHJlZSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0cmVlTm9kZSBvZiB0cmVlKSB7XG4gICAgICBpZiAodHJlZU5vZGUuaWQgPT09IHRoaXMuc2VsZWN0ZWRGb2xkZXJLZXkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3ROb2RlKHRyZWVOb2RlKTtcbiAgICAgICAgcmV0dXJuIHRyZWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRyZWVOb2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGNoaWxkLmRhdGEua2V5ID09PSB0aGlzLnNlbGVjdGVkRm9sZGVyS2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGUoY2hpbGQpO1xuICAgICAgICAgICAgcmV0dXJuIHRyZWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cmVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgc2VsZWN0ZWRGb2xkZXJLZXkgdXNpbmcgc2VsZWN0ZWRGb2xkZXJOYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyZWVOb2RlW119IHRyZWUgLSBUaGUgdHJlZSBzdHJ1Y3R1cmUgdG8gc2VhcmNoIHRocm91Z2guXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkRm9sZGVyS2V5RnJvbUZvbGRlck5hbWUodHJlZTogVHJlZU5vZGVbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdHJlZU5vZGUgb2YgdHJlZSkge1xuICAgICAgaWYgKHRyZWVOb2RlLmlkID09PSB0aGlzLnNlbGVjdGVkRm9sZGVyTmFtZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyS2V5ID0gdHJlZU5vZGUuaWQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdHJlZU5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoY2hpbGQuZGF0YS50eXBlID09PSB0aGlzLnNlbGVjdGVkRm9sZGVyTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlcktleSA9IGNoaWxkLmRhdGEua2V5O1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtmb2xkZXJOYW1lOiBudWxsLCBmb2xkZXJLZXk6IHRoaXMuc2VsZWN0ZWRGb2xkZXJLZXl9LFxuICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyTmFtZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBoYW5kbGUgbm9kZSBzZWxlY3Rpb24gbG9naWMuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJlZU5vZGV9IG5vZGUgLSBUaGUgdHJlZSBub2RlIHRvIGJlIHNlbGVjdGVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZWxlY3ROb2RlKG5vZGU6IFRyZWVOb2RlKTogdm9pZCB7XG4gICAgbm9kZS5zZWxlY3RlZCA9IHRydWU7XG4gICAgbm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgdGhpcy5vblRyZWVTZWxlY3Rpb25DaGFuZ2VkKG5vZGUpO1xuICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtub2RlXTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5yb3V0ZS51cmxcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhY2hlTGF5b3V0ID0gJyc7XG4gICAgICAgIC8vIHRoaXMubGF5b3V0U2VydmljZS5oaWRlQXJlYXMoKCkgPT4gZmFsc2UpO1xuICAgICAgICBjb25zdCB7cGFyYW1zLCBxdWVyeVBhcmFtc30gPSB0aGlzLnJvdXRlLnNuYXBzaG90O1xuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyS2V5ID0gcXVlcnlQYXJhbXNbJ2ZvbGRlcktleSddIHx8IHRoaXMuc2VsZWN0ZWRGb2xkZXJLZXk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXJOYW1lID0gcXVlcnlQYXJhbXNbJ2ZvbGRlck5hbWUnXSB8fCB0aGlzLnNlbGVjdGVkRm9sZGVyTmFtZTtcbiAgICAgICAgdGhpcy50ZXJtRmlsdGVyID0gcXVlcnlQYXJhbXNbJ2ZpbHRlciddIHx8ICcnO1xuICAgICAgICBpZiAocGFyYW1zLmlkKSB7XG4gICAgICAgICAgdGhpcy50eXBlTmFtZSA9IHF1ZXJ5UGFyYW1zWyd0eXBlJ10gfHwgJyc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZm9jdXMoe2lkOiBwYXJhbXMuaWQsIHR5cGVOYW1lOiB0aGlzLnR5cGVOYW1lfSk7XG4gICAgICAgICAgdGhpcy5kbXNTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0RG1zT2JqZWN0KHBhcmFtcy5pZCwgdGhpcy50eXBlTmFtZSwgbnVsbCwgJ0RFVEFJTFMnKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzOiBEbXNPYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MocmVzKTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZm9jdXMocmVzKTtcbiAgICAgICAgICAgICAgdGhpcy5pc1JlZmVyZW5jZUFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgVXRpbHMudGhyb3coKCkgPT4ge1xuICAgICAgICAgICAgICAvLyB0aGlzLmxheW91dFNlcnZpY2Uuc2V0QXJlYXMoW10pO1xuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLCB3ZSB0ZWxsIHRoZSBsb2NhdGlvbiBzZXJ2aWNlIHRoYXQgd2VcbiAgICAvLyBsZWZ0IHRoZSBsb2NhdGlvblxuICAgIHRoaXMubG9jYXRpb24ubGVhdmUoKTtcbiAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJmaWxlXCIgW25nQ2xhc3NdPVwie3JlYWR5OiBjb250ZXh0IHx8IGNvbnRleHQgPT09IG51bGx9XCIgKm5nSWY9XCIhZXJyb3I7IGVsc2UgZXJyb3JUbXBsXCI+XG5cbiAgPGRpdiBjbGFzcz1cImZpbGUtaGVhZFwiICpuZ0lmPVwiY29udGV4dCAmJiBjb250ZXh0LmlzQ29udGV4dEZvbGRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XG4gICAgICA8ZW8taWNvbiBjbGFzcz1cInR5cGUtaWNvblwiIFtvYmplY3RUeXBlXT1cImNvbnRleHQudHlwZVwiIFtpY29uVGl0bGVdPVwiY29udGV4dC50eXBlLmxhYmVsXCI+PC9lby1pY29uPlxuICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgKGNsaWNrKT1cInNldHVwRnJvbnRQYWdlKGZhbHNlLCB0cnVlKVwiIChjb250ZXh0bWVudSk9XCJvbkNvbnRleHRNZW51Q2xpY2tlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7Y29udGV4dC50aXRsZSB8fCAnJm5ic3A7J319PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7Y29udGV4dC5kZXNjcmlwdGlvbiB8fCAnJm5ic3A7J319PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb2xkXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3JlYXRlZC1kYXRlXCI+e3tjb250ZXh0LmNyZWF0ZWQub24gfCBsb2NhbGVEYXRlfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3JlYXRlZC10aXRsZVwiPnt7Y29udGV4dC5jcmVhdGVkLmJ5LnRpdGxlfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZpbGUtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWxlLWJvZHktd3JhcFwiPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGV4dCAhPT0gbnVsbDsgZWxzZSB0cGxEZXRhaWxzT25seVwiPlxuXG4gICAgICAgIDx5dmMtc3BsaXQtdmlldyAqbmdJZj1cImNhY2hlTGF5b3V0XCIgW2xheW91dFNldHRpbmdzSURdPVwiY2FjaGVMYXlvdXRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgeXZjU3BsaXRBcmVhIFtwYW5lbENsYXNzXT1cIid0cmVlJ1wiIFtzaXplXT1cIjIwXCIgW3Zpc2libGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtcGFuZWwtZXJyb3JcIiAqbmdJZj1cImxvYWRpbmdTdGF0ZS50cmVlLmlzRXJyb3IoKTsgZWxzZSB0cGxUcmVlXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBlby5zdGF0ZS5vYmplY3QudHJlZS5lcnJvcjwvZGl2PlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RwbFRyZWU+XG5cbiAgICAgICAgICAgICAgPGVvLWxpc3QtY29udGFpbmVyICNlb0xpc3QgW2xvYWRpbmddPVwiIWNvbnRleHRUcmVlXCIgW3RhYnNdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyIGRhcmtcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXItaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJlby1oZWFkZXItdGl0bGVcIiB0cmFuc2xhdGU+ZW8uc3RhdGUub2JqZWN0LnRyZWUudGl0bGU8L2gyPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBuYW1lPVwic3RydWN0dXJlRm9ybVwiIGNsYXNzPVwidHJlZS1maWx0ZXItZm9ybVwiIFtuZ0NsYXNzXT1cInthY3RpdmU6ICEhdGVybUZpbHRlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgW2xhYmVsXT1cIiAnZW8uc3RhdGUub2JqZWN0LnRyZWUuZmlsdGVyLmxhYmVsJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwidGVybUZpbHRlclwiIG1heGxlbmd0aD1cIjI1MFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblRlcm1GaWx0ZXJDaGFuZ2UuZW1pdCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1ib2R5IHRyZWVcIj5cbiAgICAgICAgICAgICAgICAgIDxlby10cmVlIFt0cmVlXT1cImNvbnRleHRUcmVlXCIgW29wdGlvbnNdPVwie211bHRpc2VsZWN0OiBmYWxzZSwgZGlzYWJsZURlc2VsZWN0aW9uOiB0cnVlfVwiXG4gICAgICAgICAgICAgICAgICAgIFtAcGFuZWxMb2FkaW5nXT1cImxvYWRpbmdTdGF0ZS50cmVlLnN0YXRlXCIgKm5nSWY9XCJjb250ZXh0VHJlZSAmJiAoY29udGV4dFRyZWUubGVuZ3RoID4gMSB8fCAoY29udGV4dFRyZWUubGVuZ3RoID09PSAxICYmIGNvbnRleHRUcmVlWzBdLmNoaWxkcmVuLmxlbmd0aCAmJiBjb250ZXh0VHJlZVswXS5uYW1lKSlcIiBbaGlnaGxpZ2h0ZWROb2Rlc109XCJoaWdobGlnaHRlZE5vZGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW3RyZWVVcGRhdGVdPVwiY29udGV4dFRyZWVVcGRhdGVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblRyZWVTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIj48L2VvLXRyZWU+XG4gICAgICAgICAgICAgICAgICA8aDMgKm5nSWY9XCJjb250ZXh0VHJlZVJlZj8ubGVuZ3RoXCIgdGl0bGU9XCJ7eydlby5zdGF0ZS5vYmplY3QudHJlZS5yZWZlcmVuY2VzLnRvb2x0aXAnfHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnN0YXRlLm9iamVjdC50cmVlLnJlZmVyZW5jZXM8L2gzPlxuICAgICAgICAgICAgICAgICAgPGVvLXRyZWUgW3RyZWVdPVwiY29udGV4dFRyZWVSZWZcIiBbb3B0aW9uc109XCJ7bXVsdGlzZWxlY3Q6IGZhbHNlLCBkaXNhYmxlRGVzZWxlY3Rpb246IHRydWV9XCJcbiAgICAgICAgICAgICAgICAgICAgW0BwYW5lbExvYWRpbmddPVwibG9hZGluZ1N0YXRlLnRyZWVSZWYuc3RhdGVcIiAqbmdJZj1cImNvbnRleHRUcmVlUmVmPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0ZWROb2Rlc109XCJoaWdobGlnaHRlZE5vZGVzXCIgW3RyZWVVcGRhdGVdPVwiY29udGV4dFRyZWVSZWZVcGRhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTm9kZXNcIiAobmdNb2RlbENoYW5nZSk9XCJvblRyZWVTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlZmVyZW5jZVwiPjwvZW8tdHJlZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9lby1saXN0LWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbcGFuZWxDbGFzc109XCIndHJlZSdcIiBbc2l6ZV09XCIzNVwiIFt2aXNpYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxlby1vYmplY3Qtc3RhdGUtZGV0YWlscyAqbmdJZj1cImNvbnRleHRcIiBbY29udGV4dF09XCJjb250ZXh0XCIgW2Zyb250UGFnZURhdGFdPVwiZnJvbnRQYWdlRGF0YVwiXG4gICAgICAgICAgICAgIFt2aXNpYmxlXT1cImZyb250UGFnZVwiIChvblRhYkNoYW5nZSk9XCJzZXR1cEZyb250UGFnZSh0cnVlLCB0cnVlKVwiIFtwbHVnaW5zXT1cIidvYmplY3Qtc3RhdGUtZGV0YWlscy10YWIub2JqZWN0JyB8IHBsdWdpbnNcIj5cbiAgICAgICAgICAgIDwvZW8tb2JqZWN0LXN0YXRlLWRldGFpbHM+XG5cbiAgICAgICAgICAgIDxlby1yZXN1bHQtbGlzdCAqbmdJZj1cIiFmcm9udFBhZ2UgJiYgc2VhcmNoUmVzdWx0XCIgW3NlbGVjdEZpcnN0XT1cImZhbHNlXCIgW3RpdGxlXT1cImdyaWRUaXRsZVwiXG4gICAgICAgICAgICAgIFtyZWZlcmVuY2VdPVwic2VsZWN0ZWROb2RlPy5pc1JlZmVyZW5jZVwiIFtzZWFyY2hSZXN1bHRdPVwic2VhcmNoUmVzdWx0XCIgW2NvbmZpZ1R5cGVdPVwiY29uZmlnVHlwZVwiXG4gICAgICAgICAgICAgIFtjb25maWdDb250ZXh0XT1cIlwiIFtlbXB0eU1lc3NhZ2VdPVwiJ2VvLnN0YXRlLm9iamVjdC5saXN0LmVycm9yJ1wiIChvblJlZnJlc2gpPVwicmVmcmVzaExpc3QoKVwiPlxuICAgICAgICAgICAgPC9lby1yZXN1bHQtbGlzdD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI0NVwiIFt2aXNpYmxlXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cGxPYmplY3REZXRhaWxzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC95dmMtc3BsaXQtdmlldz5cblxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdHBsRGV0YWlsc09ubHk+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRwbE9iamVjdERldGFpbHNcIj48L25nLWNvbnRhaW5lcj48L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3RwbE9iamVjdERldGFpbHM+XG4gICAgICAgIDxlby1vYmplY3QtZGV0YWlscyBbYXBwbHlTZWxlY3Rpb25dPVwie31cIiBbcmVmZXJlbmNlXT1cImlzUmVmZXJlbmNlQWN0aXZlXCJcbiAgICAgICAgICBbY2FjaGVMYXlvdXRdPVwiJ29iamVjdC5zdGF0ZSdcIiBbcGx1Z2luc109XCInb2JqZWN0LWRldGFpbHMtdGFiLm9iamVjdCcgfCBwbHVnaW5zXCI+XG4gICAgICAgIDwvZW8tb2JqZWN0LWRldGFpbHM+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Vycm9yVG1wbD5cbiAgPGVvLWVycm9yNDA0PjwvZW8tZXJyb3I0MDQ+XG48L25nLXRlbXBsYXRlPlxuIl19
|