@c8y/ngx-components 1018.0.219 → 1018.0.224
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/assets-navigator/asset-node.service.d.ts +5 -2
- package/esm2020/assets-navigator/asset-node.mjs +7 -2
- package/esm2020/assets-navigator/asset-node.service.mjs +14 -5
- package/esm2020/device-grid/columns/registration-date.device-grid-column.mjs +4 -10
- package/esm2020/ecosystem/application-plugins/application-plugins.component.mjs +34 -13
- package/esm2020/repository/shared/repository.service.mjs +4 -4
- package/esm2020/services/services-device-tab/columns/last-updated-date.device-grid-column.mjs +4 -10
- package/fesm2015/c8y-ngx-components-assets-navigator.mjs +24 -12
- package/fesm2015/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-device-grid.mjs +3 -9
- package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +25 -12
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem.mjs +25 -12
- package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-repository-shared.mjs +3 -3
- package/fesm2015/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-services.mjs +3 -9
- package/fesm2015/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-assets-navigator.mjs +24 -12
- package/fesm2020/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-grid.mjs +3 -9
- package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +32 -12
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem.mjs +32 -12
- package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-repository-shared.mjs +3 -3
- package/fesm2020/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-services.mjs +3 -9
- package/fesm2020/c8y-ngx-components-services.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -10,6 +10,7 @@ import { InstallPluginComponent } from './install-plugin.component';
|
|
|
10
10
|
import { LabelCellRendererComponent } from './label-cell-renderer.component';
|
|
11
11
|
import { OrphanedStatusCellRendererComponent } from './orphaned-status-cell-renderer.component';
|
|
12
12
|
import { UpdatePluginOfAppComponent } from './update-plugin-of-app/update-plugin-of-app.component';
|
|
13
|
+
import { pick } from 'lodash-es';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
15
|
import * as i1 from "@angular/router";
|
|
15
16
|
import * as i2 from "@c8y/ngx-components/ecosystem/shared";
|
|
@@ -118,10 +119,23 @@ export class ApplicationPluginsComponent {
|
|
|
118
119
|
this.isLoading = true;
|
|
119
120
|
await this.handleRemotesInstallation(pluginsToAdd);
|
|
120
121
|
this.alertService.success(gettext('Plugins installed.'));
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
122
|
+
pluginsToAdd.forEach(plugin => {
|
|
123
|
+
const pluginCustomEventInfo = pick(plugin, [
|
|
124
|
+
'name',
|
|
125
|
+
'contextPath',
|
|
126
|
+
'module',
|
|
127
|
+
'version',
|
|
128
|
+
'type',
|
|
129
|
+
'id'
|
|
130
|
+
]);
|
|
131
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.INSTALLED_PLUGINS, {
|
|
132
|
+
component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.APPLICATION_PLUGINS,
|
|
133
|
+
result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.PLUGIN_INSTALLED,
|
|
134
|
+
url: this.CURRENT_LOCATION,
|
|
135
|
+
...pluginCustomEventInfo,
|
|
136
|
+
targetApplicationName: this.app.name,
|
|
137
|
+
targetApplicationContextPath: this.app.contextPath
|
|
138
|
+
});
|
|
125
139
|
});
|
|
126
140
|
}
|
|
127
141
|
catch (ex) {
|
|
@@ -130,7 +144,8 @@ export class ApplicationPluginsComponent {
|
|
|
130
144
|
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.INSTALLED_PLUGINS, {
|
|
131
145
|
component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.APPLICATION_PLUGINS,
|
|
132
146
|
result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SERVER_FAILURE,
|
|
133
|
-
url: this.CURRENT_LOCATION
|
|
147
|
+
url: this.CURRENT_LOCATION,
|
|
148
|
+
error: ex
|
|
134
149
|
});
|
|
135
150
|
}
|
|
136
151
|
}
|
|
@@ -146,10 +161,15 @@ export class ApplicationPluginsComponent {
|
|
|
146
161
|
this.isLoading = false;
|
|
147
162
|
this.dataGrid.cancel();
|
|
148
163
|
this.alertService.success(gettext('Plugins removed.'));
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
164
|
+
plugins.forEach(plugin => {
|
|
165
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.INSTALLED_PLUGINS, {
|
|
166
|
+
component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.APPLICATION_PLUGINS,
|
|
167
|
+
result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.PLUGIN_REMOVED,
|
|
168
|
+
url: this.CURRENT_LOCATION,
|
|
169
|
+
id: plugin,
|
|
170
|
+
targetApplicationName: this.app.name,
|
|
171
|
+
targetApplicationContextPath: this.app.contextPath
|
|
172
|
+
});
|
|
153
173
|
});
|
|
154
174
|
}
|
|
155
175
|
catch (ex) {
|
|
@@ -158,7 +178,8 @@ export class ApplicationPluginsComponent {
|
|
|
158
178
|
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.INSTALLED_PLUGINS, {
|
|
159
179
|
component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.APPLICATION_PLUGINS,
|
|
160
180
|
result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SERVER_FAILURE,
|
|
161
|
-
url: this.CURRENT_LOCATION
|
|
181
|
+
url: this.CURRENT_LOCATION,
|
|
182
|
+
error: ex
|
|
162
183
|
});
|
|
163
184
|
}
|
|
164
185
|
}
|
|
@@ -392,14 +413,14 @@ export class ApplicationPluginsComponent {
|
|
|
392
413
|
}
|
|
393
414
|
}
|
|
394
415
|
ApplicationPluginsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ApplicationPluginsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.EcosystemService }, { token: i3.BsModalService }, { token: i4.ModalService }, { token: i5.TranslateService }, { token: i4.PluginsService }, { token: i4.AlertService }, { token: i4.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
395
|
-
ApplicationPluginsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ApplicationPluginsComponent, selector: "c8y-app-plugins", inputs: { appId: "appId" }, viewQueries: [{ propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true }], ngImport: i0, template: "<c8y-title>{{ app | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/applications/application'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"app | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Plugins' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n class=\"btn btn-link\"\n title=\"{{ 'Install plugins' | translate }}\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Install plugins' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<ng-container *ngIf=\"orphanedPlugins$ | async as orphanedPlugins\">\n <c8y-action-bar-item *ngIf=\"orphanedPlugins?.length\" [placement]=\"'right'\">\n <button\n (click)=\"cleanupOrphanedPlugins(orphanedPlugins)\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n class=\"btn btn-link\"\n title=\"{{ 'Clean up orphaned plugins' | translate }}\"\n >\n <i c8yIcon=\"erase\"></i>\n {{ 'Clean up orphaned plugins' | translate }}\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"installedPlugins$ | async\"\n [pagination]=\"pagination\"\n [selectable]=\"true\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n [headerActionControls]=\"headerActionControls\"\n (onReload)=\"refresh()\"\n class=\"d-contents\"\n >\n <!-- No search/filtered results empty state -->\n <c8y-ui-empty-state\n *ngIf=\"(installedPlugins$ | async)?.length\"\n [icon]=\"'search'\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n [horizontal]=\"true\"\n >\n </c8y-ui-empty-state>\n <!-- No installed plugins empty state -->\n <c8y-ui-empty-state\n *ngIf=\"!(installedPlugins$ | async)?.length && !isLoading\"\n [icon]=\"'plugin'\"\n [title]=\"'No plugins installed.' | translate\"\n [subtitle]=\"'This application doesn\\'t have any plugin. Click below to install.' | translate\"\n [horizontal]=\"true\"\n >\n <div class=\"fit-w p-t-16\">\n <button\n
|
|
416
|
+
ApplicationPluginsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: ApplicationPluginsComponent, selector: "c8y-app-plugins", inputs: { appId: "appId" }, viewQueries: [{ propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true }], ngImport: i0, template: "<c8y-title>{{ app | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/applications/application'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"app | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Plugins' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n class=\"btn btn-link\"\n title=\"{{ 'Install plugins' | translate }}\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Install plugins' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<ng-container *ngIf=\"orphanedPlugins$ | async as orphanedPlugins\">\n <c8y-action-bar-item *ngIf=\"orphanedPlugins?.length\" [placement]=\"'right'\">\n <button\n (click)=\"cleanupOrphanedPlugins(orphanedPlugins)\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n class=\"btn btn-link\"\n title=\"{{ 'Clean up orphaned plugins' | translate }}\"\n >\n <i c8yIcon=\"erase\"></i>\n {{ 'Clean up orphaned plugins' | translate }}\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"installedPlugins$ | async\"\n [pagination]=\"pagination\"\n [selectable]=\"true\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n [headerActionControls]=\"headerActionControls\"\n (onReload)=\"refresh()\"\n class=\"d-contents\"\n >\n <!-- No search/filtered results empty state -->\n <c8y-ui-empty-state\n *ngIf=\"(installedPlugins$ | async)?.length\"\n [icon]=\"'search'\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n [horizontal]=\"true\"\n >\n </c8y-ui-empty-state>\n <!-- No installed plugins empty state -->\n <c8y-ui-empty-state\n *ngIf=\"!(installedPlugins$ | async)?.length && !isLoading\"\n [icon]=\"'plugin'\"\n [title]=\"'No plugins installed.' | translate\"\n [subtitle]=\"'This application doesn\\'t have any plugin. Click below to install.' | translate\"\n [horizontal]=\"true\"\n >\n <div class=\"fit-w p-t-16\">\n <button\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Install plugins' | translate }}\"\n translate\n >\n Install plugins\n </button>\n </div>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "component", type: i4.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "component", type: i4.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i4.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i4.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i4.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.HumanizeAppNamePipe, name: "humanizeAppName" }] });
|
|
396
417
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ApplicationPluginsComponent, decorators: [{
|
|
397
418
|
type: Component,
|
|
398
|
-
args: [{ selector: 'c8y-app-plugins', template: "<c8y-title>{{ app | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/applications/application'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"app | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Plugins' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n class=\"btn btn-link\"\n title=\"{{ 'Install plugins' | translate }}\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Install plugins' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<ng-container *ngIf=\"orphanedPlugins$ | async as orphanedPlugins\">\n <c8y-action-bar-item *ngIf=\"orphanedPlugins?.length\" [placement]=\"'right'\">\n <button\n (click)=\"cleanupOrphanedPlugins(orphanedPlugins)\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n class=\"btn btn-link\"\n title=\"{{ 'Clean up orphaned plugins' | translate }}\"\n >\n <i c8yIcon=\"erase\"></i>\n {{ 'Clean up orphaned plugins' | translate }}\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"installedPlugins$ | async\"\n [pagination]=\"pagination\"\n [selectable]=\"true\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n [headerActionControls]=\"headerActionControls\"\n (onReload)=\"refresh()\"\n class=\"d-contents\"\n >\n <!-- No search/filtered results empty state -->\n <c8y-ui-empty-state\n *ngIf=\"(installedPlugins$ | async)?.length\"\n [icon]=\"'search'\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n [horizontal]=\"true\"\n >\n </c8y-ui-empty-state>\n <!-- No installed plugins empty state -->\n <c8y-ui-empty-state\n *ngIf=\"!(installedPlugins$ | async)?.length && !isLoading\"\n [icon]=\"'plugin'\"\n [title]=\"'No plugins installed.' | translate\"\n [subtitle]=\"'This application doesn\\'t have any plugin. Click below to install.' | translate\"\n [horizontal]=\"true\"\n >\n <div class=\"fit-w p-t-16\">\n <button\n
|
|
419
|
+
args: [{ selector: 'c8y-app-plugins', template: "<c8y-title>{{ app | humanizeAppName | async }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [icon]=\"'c8y-atom'\" [label]=\"'Ecosystem' | translate\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-modules'\"\n [label]=\"'Applications' | translate\"\n [path]=\"'ecosystem/applications/application'\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"app | humanizeAppName | async\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item [label]=\"'Plugins' | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n class=\"btn btn-link\"\n title=\"{{ 'Install plugins' | translate }}\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Install plugins' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<ng-container *ngIf=\"orphanedPlugins$ | async as orphanedPlugins\">\n <c8y-action-bar-item *ngIf=\"orphanedPlugins?.length\" [placement]=\"'right'\">\n <button\n (click)=\"cleanupOrphanedPlugins(orphanedPlugins)\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n class=\"btn btn-link\"\n title=\"{{ 'Clean up orphaned plugins' | translate }}\"\n >\n <i c8yIcon=\"erase\"></i>\n {{ 'Clean up orphaned plugins' | translate }}\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<div class=\"content-fullpage d-flex d-col border-top\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [displayOptions]=\"displayOptions\"\n [columns]=\"columns\"\n [rows]=\"installedPlugins$ | async\"\n [pagination]=\"pagination\"\n [selectable]=\"true\"\n [actionControls]=\"actionControls\"\n [bulkActionControls]=\"bulkActionControls\"\n [headerActionControls]=\"headerActionControls\"\n (onReload)=\"refresh()\"\n class=\"d-contents\"\n >\n <!-- No search/filtered results empty state -->\n <c8y-ui-empty-state\n *ngIf=\"(installedPlugins$ | async)?.length\"\n [icon]=\"'search'\"\n [title]=\"'No plugins to display.' | translate\"\n [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n [horizontal]=\"true\"\n >\n </c8y-ui-empty-state>\n <!-- No installed plugins empty state -->\n <c8y-ui-empty-state\n *ngIf=\"!(installedPlugins$ | async)?.length && !isLoading\"\n [icon]=\"'plugin'\"\n [title]=\"'No plugins installed.' | translate\"\n [subtitle]=\"'This application doesn\\'t have any plugin. Click below to install.' | translate\"\n [horizontal]=\"true\"\n >\n <div class=\"fit-w p-t-16\">\n <button\n (click)=\"installPlugins()\"\n [ngClass]=\"{ 'btn-pending': isLoading }\"\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Install plugins' | translate }}\"\n translate\n >\n Install plugins\n </button>\n </div>\n </c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n" }]
|
|
399
420
|
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.EcosystemService }, { type: i3.BsModalService }, { type: i4.ModalService }, { type: i5.TranslateService }, { type: i4.PluginsService }, { type: i4.AlertService }, { type: i4.GainsightService }]; }, propDecorators: { appId: [{
|
|
400
421
|
type: Input
|
|
401
422
|
}], dataGrid: [{
|
|
402
423
|
type: ViewChild,
|
|
403
424
|
args: [DataGridComponent, { static: false }]
|
|
404
425
|
}] } });
|
|
405
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcGx1Z2lucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb24tcGx1Z2lucy9hcHBsaWNhdGlvbi1wbHVnaW5zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wbHVnaW5zL2FwcGxpY2F0aW9uLXBsdWdpbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUVMLFlBQVksRUFFWix1QkFBdUIsRUFHdkIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUVoQixZQUFZLEVBRVosY0FBYyxFQUNkLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUs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OUIsMjRHQTZGQTsyRkQ1RGEsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNFLGlCQUFpQjtrVEFPbEIsS0FBSztzQkFBYixLQUFLO2dCQUVOLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsIElBcHBsaWNhdGlvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwbGljYXRpb25QbHVnaW4sXG4gIEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLFxuICBCdWxrQWN0aW9uQ29udHJvbCxcbiAgQ29sdW1uLFxuICBEYXRhR3JpZENvbXBvbmVudCxcbiAgRGlzcGxheU9wdGlvbnMsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIEhlYWRlckFjdGlvbkNvbnRyb2wsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFnaW5hdGlvbixcbiAgUGx1Z2luc1NlcnZpY2UsXG4gIGdldHRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlLCBQUk9EVUNUX0VYUEVSSUVOQ0UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEluc3RhbGxQbHVnaW5Db21wb25lbnQgfSBmcm9tICcuL2luc3RhbGwtcGx1Z2luLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMYWJlbENlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vbGFiZWwtY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3JwaGFuZWRTdGF0dXNDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuL29ycGhhbmVkLXN0YXR1cy1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVcGRhdGVQbHVnaW5PZkFwcENvbXBvbmVudCB9IGZyb20gJy4vdXBkYXRlLXBsdWdpbi1vZi1hcHAvdXBkYXRlLXBsdWdpbi1vZi1hcHAuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFwcC1wbHVnaW5zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcGxpY2F0aW9uLXBsdWdpbnMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uUGx1Z2luc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgUFJPRFVDVF9FWFBFUklFTkNFID0gUFJPRFVDVF9FWFBFUklFTkNFO1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcblxuICBASW5wdXQoKSBhcHBJZDogc3RyaW5nIHwgbnVtYmVyO1xuICBAVmlld0NoaWxkKERhdGFHcmlkQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZGF0YUdyaWQ6IERhdGFHcmlkQ29tcG9uZW50O1xuXG4gIGV4cG9ydGVkUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICByZW1vdGVQbHVnaW5zJDogQmVoYXZpb3JTdWJqZWN0PEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgYWxsQXZhaWxhYmxlUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG4gIGluc3RhbGxlZFBsdWdpbnMkOiBPYnNlcnZhYmxlPEFwcGxpY2F0aW9uUGx1Z2luW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5yZW1vdGVQbHVnaW5zJC5waXBlKG1hcChyZW1vdGVzID0+IHRoaXMuY29udmVydEluc3RhbGxlZFJlbW90ZXNUb0lkcyhyZW1vdGVzKSkpLFxuICAgIHRoaXMuYWxsQXZhaWxhYmxlUGx1Z2lucyRcbiAgXSkucGlwZShcbiAgICBtYXAoKFtyZW1vdGVQbHVnaW5zLCBhbGxQbHVnaW5zXSkgPT4gdGhpcy5nZXRJbnN0YWxsZWRQbHVnaW5zKGFsbFBsdWdpbnMsIHJlbW90ZVBsdWdpbnMpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICBvcnBoYW5lZFBsdWdpbnMkID0gdGhpcy5pbnN0YWxsZWRQbHVnaW5zJC5waXBlKFxuICAgIG1hcChwbHVnaW5zID0+IHBsdWdpbnMuZmlsdGVyKHAgPT4gcC5zdGF0dXMgPT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLk9SUEhBTkVEKSlcbiAgKTtcbiAgYXBwOiBJQXBwbGljYXRpb247XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgdGl0bGU6IHN0cmluZyA9IGdldHRleHQoJ0luc3RhbGxlZCBwbHVnaW5zJyk7XG4gIGxvYWRNb3JlSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZCBtb3JlIHBhY2thZ2VzJyk7XG4gIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIHBhY2thZ2Vz4oCmJyk7XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSB0aGlzLmdldEFjdGlvbkNvbnRyb2xzKCk7XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXSA9IHRoaXMuZ2V0QnVsa0FjdGlvbkNvbnRyb2xzKCk7XG4gIGhlYWRlckFjdGlvbkNvbnRyb2xzOiBIZWFkZXJBY3Rpb25Db250cm9sW10gPSBbXTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlXG4gIH07XG4gIGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnUGx1Z2luIG5hbWUnKSxcbiAgICAgIHBhdGg6ICduYW1lJyxcbiAgICAgIGZpbHRlcmFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdWZXJzaW9uJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnVmVyc2lvbicpLFxuICAgICAgcGF0aDogJ3ZlcnNpb24nLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkZXNjcmlwdGlvbicsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBwYXRoOiAnZGVzY3JpcHRpb24nLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsQ1NTQ2xhc3NOYW1lOiAnc21hbGwnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY29udGV4dFBhdGgnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdTb3VyY2UnKSxcbiAgICAgIHBhdGg6ICdjb250ZXh0UGF0aCcsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogTGFiZWxDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzdGF0dXMnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdTdGF0dXMnKSxcbiAgICAgIHBhdGg6ICdzdGF0dXMnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IE9ycGhhbmVkU3RhdHVzQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfVxuICBdO1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1NlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFkZEluc3RhbGxCdXR0b25Ub0hlYWRlckFjdGlvbkNvbnRyb2xzKCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgYXN5bmMgbG9hZERhdGEoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NTygpO1xuICAgIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NRkV4cG9ydHModGhpcy5hcHApO1xuICAgIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NRlJlbW90ZXModGhpcy5hcHApO1xuICAgIGF3YWl0IHRoaXMuZ2V0QWxsQXBwbGljYXRpb25zTUZFeHBvcnRzKCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxQbHVnaW5zKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwbHVnaW5zVG9BZGQ6IEFwcGxpY2F0aW9uUGx1Z2luW10gPVxuICAgICAgICBhd2FpdCB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3c8SW5zdGFsbFBsdWdpbkNvbXBvbmVudD4oSW5zdGFsbFBsdWdpbkNvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtc20nLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZTogdGhpcy5nZXRJbnN0YWxsTW9kYWxJbml0U3RhdGUoKSxcbiAgICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgICAgIH0pLmNvbnRlbnQucmVzdWx0O1xuXG4gICAgICBjb25zdCBsaWNlbnNlc1ZlcmlmaWVkQnlVc2VyID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnZlcmlmeUxpY2Vuc2VzKHBsdWdpbnNUb0FkZCk7XG4gICAgICBpZiAoIWxpY2Vuc2VzVmVyaWZpZWRCeVVzZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVJlbW90ZXNJbnN0YWxsYXRpb24ocGx1Z2luc1RvQWRkKTtcblxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdQbHVnaW5zIGluc3RhbGxlZC4nKSk7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLklOU1RBTExFRF9QTFVHSU5TLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkFQUExJQ0FUSU9OX1BMVUdJTlMsXG4gICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9JTlNUQUxMRUQsXG4gICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFxuICAgICAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLklOU1RBTExFRF9QTFVHSU5TLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkFQUExJQ0FUSU9OX1BMVUdJTlMsXG4gICAgICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRSxcbiAgICAgICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBsdWdpbnMocGx1Z2luczogc3RyaW5nW10pIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgdXBkYXRlZFJlbW90ZXMgPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLnJlbW92ZVJlbW90ZXMoXG4gICAgICAgIHRoaXMuYXBwLFxuICAgICAgICBwbHVnaW5zLm1hcChpZCA9PiAoeyBpZCB9IGFzIEFwcGxpY2F0aW9uUGx1Z2luKSlcbiAgICAgICk7XG4gICAgICB0aGlzLmVtaXRSZW1vdGVzKHVwZGF0ZWRSZW1vdGVzKTtcblxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0YUdyaWQuY2FuY2VsKCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1BsdWdpbnMgcmVtb3ZlZC4nKSk7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLklOU1RBTExFRF9QTFVHSU5TLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkFQUExJQ0FUSU9OX1BMVUdJTlMsXG4gICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9SRU1PVkVELFxuICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5JTlNUQUxMRURfUExVR0lOUyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5BUFBMSUNBVElPTl9QTFVHSU5TLFxuICAgICAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuU0VSVkVSX0ZBSUxVUkUsXG4gICAgICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjbGVhbnVwT3JwaGFuZWRQbHVnaW5zKHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10pIHtcbiAgICBjb25zdCBwbHVnaW5JZHMgPSBwbHVnaW5zLm1hcChwID0+IHAuaWQpO1xuICAgIGF3YWl0IHRoaXMucmVtb3ZlUGx1Z2lucyhwbHVnaW5JZHMpO1xuICB9XG5cbiAgZ2V0QWN0aW9uQ29udHJvbHMoKTogQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnY3VzdG9tVXBkYXRlJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnVXBkYXRlJyksXG4gICAgICAgIGljb246ICdjYXJldC1zcXVhcmUtby11cCcsXG4gICAgICAgIHNob3dJZjogcGx1Z2luID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcGx1Z2luLnN0YXR1cyA9PT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1VUREFURUQgfHxcbiAgICAgICAgICAgIHBsdWdpbi5zdGF0dXMgPT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLlJFVk9LRURcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsYmFjazogcGx1Z2luID0+IHRoaXMudXBkYXRlUGx1Z2luKHRoaXMuYXBwLCBwbHVnaW4gYXMgQXBwbGljYXRpb25QbHVnaW4pXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnY3VzdG9tRG93bmdyYWRlJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnRG93bmdyYWRlJyksXG4gICAgICAgIGljb246ICdjYXJldC1zcXVhcmUtby1kb3duJyxcbiAgICAgICAgc2hvd0lmOiBwbHVnaW4gPT4ge1xuICAgICAgICAgIHJldHVybiBwbHVnaW4uc3RhdHVzID09PSBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5MQVRFU1Q7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrOiBwbHVnaW4gPT4gdGhpcy51cGRhdGVQbHVnaW4odGhpcy5hcHAsIHBsdWdpbiBhcyBBcHBsaWNhdGlvblBsdWdpbiwgdHJ1ZSlcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgZ2V0QnVsa0FjdGlvbkNvbnRyb2xzKCk6IEJ1bGtBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjdXN0b21EZWxldGUnLFxuICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdSZW1vdmUnKSxcbiAgICAgICAgaWNvbjogJ3RyYXNoJyxcbiAgICAgICAgY2FsbGJhY2s6IHBsdWdpbnMgPT4gdGhpcy5yZW1vdmVQbHVnaW5zKHBsdWdpbnMpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVBsdWdpbihhcHA6IElBcHBsaWNhdGlvbiwgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiwgZG93bmdyYWRlID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgKFxuICAgICAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coVXBkYXRlUGx1Z2luT2ZBcHBDb21wb25lbnQsIHtcbiAgICAgICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRCeTogJ21vZGFsLXRpdGxlJyxcbiAgICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgIHBsdWdpbixcbiAgICAgICAgICAgIGRvd25ncmFkZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZVxuICAgICAgICB9KS5jb250ZW50IGFzIFVwZGF0ZVBsdWdpbk9mQXBwQ29tcG9uZW50XG4gICAgICApLnJlc3VsdDtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFkZEluc3RhbGxCdXR0b25Ub0hlYWRlckFjdGlvbkNvbnRyb2xzKCkge1xuICAgIGlmICh0aGlzLmFwcElkKSB7XG4gICAgICB0aGlzLmhlYWRlckFjdGlvbkNvbnRyb2xzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogZ2V0dGV4dCgnSW5zdGFsbCBwbHVnaW5zJyksXG4gICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFsbFBsdWdpbnMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGljb246ICdwbHVzLWNpcmNsZScsXG4gICAgICAgICAgdHlwZTogJ2N1c3RvbSdcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVJlbW90ZXNJbnN0YWxsYXRpb24ocGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSkge1xuICAgIC8vIFdoZW4gcmVtb3RlcyBvYmplY3QgaXMgbm90IHNldCBpbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3Qgb2YgYW4gYXBwbGljYXRpb24uXG4gICAgLy8gRmFsbGJhY2sgdG8gc2V0SW5pdGlhbFJlbW90ZXMgaXMgdHJpZ2dlcmVkLlxuICAgIGxldCB1cGRhdGVkUmVtb3RlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UuYWRkUmVtb3Rlcyh0aGlzLmFwcCwgcGx1Z2lucyk7XG5cbiAgICBpZiAoIXVwZGF0ZWRSZW1vdGVzKSB7XG4gICAgICAvLyBUT0RPIGRpc2N1c3MgaWYgd2UgbmVlZCB0byBoYW5kbGUgaXQgbGlrZSB0aGF0LlxuICAgICAgLy8gUmlnaHQgbm93IHJlbW90ZXMgZnJvbSB0aGUgY3VtdWxvY2l0eS5qc29uIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiByZW1vdGVzIG9iamVjdCBpcyBtaXNzaW5nIGluIHRoZSBjb25maWd1cmF0aW9uLlxuICAgICAgdXBkYXRlZFJlbW90ZXMgPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLnNldEluaXRpYWxSZW1vdGVzKHRoaXMuYXBwKTtcbiAgICAgIC8vIEZyZXNoIGFwcGxpY2F0aW9uIE1PIGlzIG5lZWRlZCwgYWZ0ZXIgaW5pdGlhbCBzdGF0ZSB3YXMgc2V0LlxuICAgICAgYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbk1PKCk7XG4gICAgICB1cGRhdGVkUmVtb3RlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UuYWRkUmVtb3Rlcyh0aGlzLmFwcCwgcGx1Z2lucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVtaXRSZW1vdGVzKHVwZGF0ZWRSZW1vdGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJlbW90ZXModXBkYXRlZFJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucykge1xuICAgIHRoaXMucmVtb3RlUGx1Z2lucyQubmV4dCh1cGRhdGVkUmVtb3Rlcyk7XG4gICAgdGhpcy5hcHAuY29uZmlnLnJlbW90ZXMgPSB1cGRhdGVkUmVtb3RlcztcbiAgICByZXR1cm4geyAuLi50aGlzLnJlbW90ZVBsdWdpbnMkLnZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFwcGxpY2F0aW9uTU8oKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICBsZXQgaWQgPSB0aGlzLmFwcElkO1xuICAgIGlmICghaWQpIHtcbiAgICAgIGNvbnN0IHsgaWQ6IHJvdXRlSWQgfSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGFyZW50LmRhdGEuY29udGV4dERhdGE7XG4gICAgICBpZCA9IHJvdXRlSWQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYXBwID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcGxpY2F0aW9uKGlkKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFwcGxpY2F0aW9uTUZFeHBvcnRzKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgZXhwb3J0cyA9IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0TUZFeHBvcnRzKGFwcCk7XG4gICAgdGhpcy5leHBvcnRlZFBsdWdpbnMkLm5leHQoZXhwb3J0cyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFwcGxpY2F0aW9uTUZSZW1vdGVzKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgbGV0IGFwcENvbmZpZ1JlbW90ZXMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GUmVtb3RlcyhhcHApO1xuXG4gICAgaWYgKCFhcHBDb25maWdSZW1vdGVzKSB7XG4gICAgICBhcHBDb25maWdSZW1vdGVzID0gYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5zZXRJbml0aWFsUmVtb3RlcyhhcHApO1xuICAgICAgdGhpcy5hcHAgPSBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uTU8oKTtcbiAgICB9XG4gICAgdGhpcy5yZW1vdGVQbHVnaW5zJC5uZXh0KGFwcENvbmZpZ1JlbW90ZXMgfHwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGxBcHBsaWNhdGlvbnNNRkV4cG9ydHMoKSB7XG4gICAgY29uc3QgYWxsQXBwc01GRXhwb3J0cyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0QWxsTUZFeHBvcnRzKHRydWUpO1xuICAgIHRoaXMuYWxsQXZhaWxhYmxlUGx1Z2lucyQubmV4dChhbGxBcHBzTUZFeHBvcnRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5zdGFsbE1vZGFsSW5pdFN0YXRlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsdWdpbnMkOiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5hbGxBdmFpbGFibGVQbHVnaW5zJCxcbiAgICAgICAgdGhpcy5pbnN0YWxsZWRQbHVnaW5zJC5waXBlKG1hcChwbHVnaW5zID0+IHBsdWdpbnMubWFwKHAgPT4gcC5pZCkpKSxcbiAgICAgICAgdGhpcy5leHBvcnRlZFBsdWdpbnMkLnBpcGUobWFwKHBsdWdpbnMgPT4gcGx1Z2lucy5tYXAocCA9PiBwLmlkKSkpXG4gICAgICBdKS5waXBlKFxuICAgICAgICBtYXAoKFthbGxQbHVnaW5zLCBpbnN0YWxsZWRQbHVnaW5zLCBleHBvcnRlZFBsdWdpbk5hbWVzXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBsdWdpbnMgPSBbXTtcbiAgICAgICAgICBhbGxQbHVnaW5zXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gIWV4cG9ydGVkUGx1Z2luTmFtZXMuaW5jbHVkZXMocC5pZCkpXG4gICAgICAgICAgICAubWFwKHAgPT4gcGx1Z2lucy5wdXNoKHsgLi4ucCwgaW5zdGFsbGVkOiAhIWluc3RhbGxlZFBsdWdpbnMuaW5jbHVkZXMocC5pZCkgfSkpO1xuICAgICAgICAgIHJldHVybiBwbHVnaW5zO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SW5zdGFsbGVkUmVtb3Rlc1RvSWRzKHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXJlbW90ZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW1wb3J0Q29udGV4dFBhdGhzID0gT2JqZWN0LmtleXMocmVtb3Rlcyk7XG4gICAgY29uc3QgcGx1Z2lucyA9IFtdO1xuICAgIGltcG9ydENvbnRleHRQYXRocy5mb3JFYWNoKGNvbnRleHRQYXRoID0+IHtcbiAgICAgIGNvbnN0IG1vZHVsZU5hbWVzID0gcmVtb3Rlc1tjb250ZXh0UGF0aF07XG4gICAgICBwbHVnaW5zLnB1c2goLi4ubW9kdWxlTmFtZXMubWFwKG1vZHVsZSA9PiB0aGlzLmNyZWF0ZUlkKGNvbnRleHRQYXRoLCBtb2R1bGUpKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBsdWdpbnM7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUlkKGNvbnRleHRQYXRoOiBzdHJpbmcsIHBsdWdpbk1vZHVsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2NvbnRleHRQYXRofS8ke3BsdWdpbk1vZHVsZU5hbWV9YDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JwaGFuZWRQbHVnaW5zKFxuICAgIG9ycGhhbmVkUGx1Z2luSWRzOiBzdHJpbmdbXSxcbiAgICBhbGxQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIGNvbnN0IG9ycGhhbmVkUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSA9IG9ycGhhbmVkUGx1Z2luSWRzLm1hcChwID0+IHRoaXMuZXh0cmFjdERldGFpbHMocCkpO1xuICAgIGNvbnN0IG9ycGhhbmVkUGx1Z2luc1VwZGF0ZWQgPSBvcnBoYW5lZFBsdWdpbnMubWFwKHAgPT4ge1xuICAgICAgY29uc3QgcGx1Z2luSW5EaWZmZXJlbnRWZXJzaW9uID0gYWxsUGx1Z2lucy5maW5kKFxuICAgICAgICB0bXAgPT4gdG1wLmNvbnRleHRQYXRoID09PSBwLmNvbnRleHRQYXRoICYmIHRtcC5tb2R1bGUgPT09IHAubW9kdWxlXG4gICAgICApO1xuICAgICAgaWYgKHBsdWdpbkluRGlmZmVyZW50VmVyc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnBsdWdpbkluRGlmZmVyZW50VmVyc2lvbixcbiAgICAgICAgICB2ZXJzaW9uOiBwLnZlcnNpb24gfHwgcGx1Z2luSW5EaWZmZXJlbnRWZXJzaW9uLnZlcnNpb24sXG4gICAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgICAgc3RhdHVzOiBwLnZlcnNpb24gPyBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5PVVREQVRFRCA6IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLkxBVEVTVFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3JwaGFuZWRQbHVnaW5zVXBkYXRlZDtcbiAgfVxuXG4gIHByaXZhdGUgc3BsaXRPcnBoYW5lZFBsdWdpbnNJbnRvT3JwaGFuZWRBbmRSZXZva2VkUGx1Z2lucyhcbiAgICBhbGxQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdLFxuICAgIG9ycGhhbmVkUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXVxuICApIHtcbiAgICBjb25zdCByZXZva2VkUGx1Z2lucyA9IG5ldyBBcnJheTxBcHBsaWNhdGlvblBsdWdpbj4oKTtcbiAgICBjb25zdCBhY3R1YWxseU9ycGhhbmVkUGx1Z2lucyA9IG5ldyBBcnJheTxBcHBsaWNhdGlvblBsdWdpbj4oKTtcblxuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIG9ycGhhbmVkUGx1Z2lucykge1xuICAgICAgY29uc3QgZm91bmRGYW1pbGlhclBsdWdpbiA9IGFsbFBsdWdpbnMuZmluZChcbiAgICAgICAgcGx1Z2luMSA9PiBwbHVnaW4uY29udGV4dFBhdGggPT09IHBsdWdpbjEuY29udGV4dFBhdGggJiYgcGx1Z2luLm1vZHVsZSA9PT0gcGx1Z2luMS5tb2R1bGVcbiAgICAgICk7XG4gICAgICBpZiAoZm91bmRGYW1pbGlhclBsdWdpbikge1xuICAgICAgICByZXZva2VkUGx1Z2lucy5wdXNoKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIGZvdW5kRmFtaWxpYXJQbHVnaW4sIHBsdWdpbiwge1xuICAgICAgICAgICAgc3RhdHVzOiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5SRVZPS0VEXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyByZXZva2VkUGx1Z2lucywgYWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5zdGFsbGVkUGx1Z2lucyhcbiAgICBhbGxQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdLFxuICAgIHJlbW90ZVBsdWdpbnM6IHN0cmluZ1tdXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIGNvbnN0IGF2YWlsYWJsZVBsdWdpbnMgPSBhbGxQbHVnaW5zXG4gICAgICAuZmlsdGVyKHBsdWdpbiA9PiByZW1vdGVQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbi5pZCkpXG4gICAgICAubWFwKHBsdWdpbiA9PlxuICAgICAgICBPYmplY3QuYXNzaWduKHBsdWdpbiwge1xuICAgICAgICAgIHN0YXR1czogcGx1Z2luLnRhZ3M/LmluY2x1ZGVzKCdsYXRlc3QnKVxuICAgICAgICAgICAgPyBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5MQVRFU1RcbiAgICAgICAgICAgIDogQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1VUREFURURcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgY29uc3Qgb3JwaGFuZWRQbHVnaW5JZHMgPSByZW1vdGVQbHVnaW5zLmZpbHRlcihcbiAgICAgIHIgPT4gIWF2YWlsYWJsZVBsdWdpbnMuZmluZChwbHVnaW4gPT4gcGx1Z2luLmlkID09PSByKVxuICAgICk7XG4gICAgY29uc3Qgb3JwaGFuZWRQbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdID0gdGhpcy5nZXRPcnBoYW5lZFBsdWdpbnMoXG4gICAgICBvcnBoYW5lZFBsdWdpbklkcyxcbiAgICAgIGFsbFBsdWdpbnNcbiAgICApO1xuXG4gICAgY29uc3QgeyBhY3R1YWxseU9ycGhhbmVkUGx1Z2lucywgcmV2b2tlZFBsdWdpbnMgfSA9XG4gICAgICB0aGlzLnNwbGl0T3JwaGFuZWRQbHVnaW5zSW50b09ycGhhbmVkQW5kUmV2b2tlZFBsdWdpbnMoYWxsUGx1Z2lucywgb3JwaGFuZWRQbHVnaW5zKTtcblxuICAgIHJldHVybiBbLi4uYXZhaWxhYmxlUGx1Z2lucywgLi4ucmV2b2tlZFBsdWdpbnMsIC4uLmFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zXTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdERldGFpbHMocGx1Z2luSWQ6IHN0cmluZyk6IEFwcGxpY2F0aW9uUGx1Z2luIHtcbiAgICBjb25zdCBjb250ZXh0UGF0aCA9IHRoaXMuZ2V0U3RyaW5nTWF0Y2hpbmdSZWdleChwbHVnaW5JZCwgL15bXkBdKihAfFxcLykvKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRTdHJpbmdNYXRjaGluZ1JlZ2V4KHBsdWdpbklkLCAvQC4qXFwvLyk7XG4gICAgY29uc3QgbW9kdWxlID0gdGhpcy5nZXRTdHJpbmdNYXRjaGluZ1JlZ2V4KHBsdWdpbklkLCAvXFwvLiokLyk7XG4gICAgY29uc3QgdW5hdmFpbGFibGUgPSBnZXR0ZXh0KCd1bmF2YWlsYWJsZWBwbHVnaW5gJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBwbHVnaW5JZCxcbiAgICAgIHBhdGg6ICcnLFxuICAgICAgbW9kdWxlLFxuICAgICAgbmFtZTogbW9kdWxlLFxuICAgICAgc3RhdHVzOiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5PUlBIQU5FRCxcbiAgICAgIGNvbnRleHRQYXRoOiBjb250ZXh0UGF0aCxcbiAgICAgIGRlc2NyaXB0aW9uOiB1bmF2YWlsYWJsZSxcbiAgICAgIHZlcnNpb246IHZlcnNpb25cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdHJpbmdNYXRjaGluZ1JlZ2V4KFxuICAgIHN0cjogc3RyaW5nLFxuICAgIHJlZ2V4OiB7IFtTeW1ib2wubWF0Y2hdKHN0cmluZzogc3RyaW5nKTogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgfVxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBzdHIubWF0Y2gocmVnZXgpO1xuICAgIGNvbnN0IHZhbHVlID0gbWF0Y2hlcyA/IG1hdGNoZXNbMF0gOiAnJztcblxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oQHxcXC8pL2csICcnKTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyBhcHAgfCBodW1hbml6ZUFwcE5hbWUgfCBhc3luYyB9fTwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtpY29uXT1cIidjOHktYXRvbSdcIiBbbGFiZWxdPVwiJ0Vjb3N5c3RlbScgfCB0cmFuc2xhdGVcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgW2ljb25dPVwiJ2M4eS1tb2R1bGVzJ1wiXG4gICAgW2xhYmVsXT1cIidBcHBsaWNhdGlvbnMnIHwgdHJhbnNsYXRlXCJcbiAgICBbcGF0aF09XCInZWNvc3lzdGVtL2FwcGxpY2F0aW9ucy9hcHBsaWNhdGlvbidcIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbbGFiZWxdPVwiYXBwIHwgaHVtYW5pemVBcHBOYW1lIHwgYXN5bmNcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtIFtsYWJlbF09XCInUGx1Z2lucycgfCB0cmFuc2xhdGVcIj48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSBbcGxhY2VtZW50XT1cIidyaWdodCdcIj5cbiAgPGJ1dHRvblxuICAgIChjbGljayk9XCJpbnN0YWxsUGx1Z2lucygpXCJcbiAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnSW5zdGFsbCBwbHVnaW5zJyB8IHRyYW5zbGF0ZSB9fVwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0luc3RhbGwgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJvcnBoYW5lZFBsdWdpbnMkIHwgYXN5bmMgYXMgb3JwaGFuZWRQbHVnaW5zXCI+XG4gIDxjOHktYWN0aW9uLWJhci1pdGVtICpuZ0lmPVwib3JwaGFuZWRQbHVnaW5zPy5sZW5ndGhcIiBbcGxhY2VtZW50XT1cIidyaWdodCdcIj5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwiY2xlYW51cE9ycGhhbmVkUGx1Z2lucyhvcnBoYW5lZFBsdWdpbnMpXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogaXNMb2FkaW5nIH1cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgICAgdGl0bGU9XCJ7eyAnQ2xlYW4gdXAgb3JwaGFuZWQgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJlcmFzZVwiPjwvaT5cbiAgICAgIHt7ICdDbGVhbiB1cCBvcnBoYW5lZCBwbHVnaW5zJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG48L25nLWNvbnRhaW5lcj5cblxuPGRpdiBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sIGJvcmRlci10b3BcIj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFtsb2FkTW9yZUl0ZW1zTGFiZWxdPVwibG9hZE1vcmVJdGVtc0xhYmVsXCJcbiAgICBbbG9hZGluZ0l0ZW1zTGFiZWxdPVwibG9hZGluZ0l0ZW1zTGFiZWxcIlxuICAgIFtkaXNwbGF5T3B0aW9uc109XCJkaXNwbGF5T3B0aW9uc1wiXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW3Jvd3NdPVwiaW5zdGFsbGVkUGx1Z2lucyQgfCBhc3luY1wiXG4gICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgW2FjdGlvbkNvbnRyb2xzXT1cImFjdGlvbkNvbnRyb2xzXCJcbiAgICBbYnVsa0FjdGlvbkNvbnRyb2xzXT1cImJ1bGtBY3Rpb25Db250cm9sc1wiXG4gICAgW2hlYWRlckFjdGlvbkNvbnRyb2xzXT1cImhlYWRlckFjdGlvbkNvbnRyb2xzXCJcbiAgICAob25SZWxvYWQpPVwicmVmcmVzaCgpXCJcbiAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICA+XG4gICAgPCEtLSBObyBzZWFyY2gvZmlsdGVyZWQgcmVzdWx0cyBlbXB0eSBzdGF0ZSAtLT5cbiAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAqbmdJZj1cIihpbnN0YWxsZWRQbHVnaW5zJCB8IGFzeW5jKT8ubGVuZ3RoXCJcbiAgICAgIFtpY29uXT1cIidzZWFyY2gnXCJcbiAgICAgIFt0aXRsZV09XCInTm8gcGx1Z2lucyB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGVcIlxuICAgICAgW3N1YnRpdGxlXT1cIidSZWZpbmUgeW91ciBzZWFyY2ggdGVybXMgb3IgY2hlY2sgeW91ciBzcGVsbGluZy4nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgID5cbiAgICA8L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8IS0tIE5vIGluc3RhbGxlZCBwbHVnaW5zIGVtcHR5IHN0YXRlIC0tPlxuICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICpuZ0lmPVwiIShpbnN0YWxsZWRQbHVnaW5zJCB8IGFzeW5jKT8ubGVuZ3RoICYmICFpc0xvYWRpbmdcIlxuICAgICAgW2ljb25dPVwiJ3BsdWdpbidcIlxuICAgICAgW3RpdGxlXT1cIidObyBwbHVnaW5zIGluc3RhbGxlZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtzdWJ0aXRsZV09XCInVGhpcyBhcHBsaWNhdGlvbiBkb2VzblxcJ3QgaGF2ZSBhbnkgcGx1Z2luLiBDbGljayBiZWxvdyB0byBpbnN0YWxsLicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImZpdC13IHAtdC0xNlwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICBbYWN0aW9uTmFtZV09XCJQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5JTlNUQUxMRURfUExVR0lOU1wiXG4gICAgICAgICAgW2FjdGlvbkRhdGFdPVwie1xuICAgICAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuQVBQTElDQVRJT05fUExVR0lOUyxcbiAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLklOU1RBTExfUExVR0lOUyxcbiAgICAgICAgICAgIHVybDogQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJpbnN0YWxsUGx1Z2lucygpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0luc3RhbGwgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgSW5zdGFsbCBwbHVnaW5zXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gIDwvYzh5LWRhdGEtZ3JpZD5cbjwvZGl2PlxuIl19
|
|
426
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tcGx1Z2lucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb24tcGx1Z2lucy9hcHBsaWNhdGlvbi1wbHVnaW5zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wbHVnaW5zL2FwcGxpY2F0aW9uLXBsdWdpbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFakQsT0FBTyxFQUVMLFlBQVksRUFFWix1QkFBdUIsRUFHdkIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUVoQixZQUFZLEVBRVosY0FBYyxFQUNkLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7OztBQU1qQyxNQUFNLE9BQU8sMkJBQTJCO0lBNkV0QyxZQUNVLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxjQUE4QixFQUM5QixLQUFtQixFQUNuQixnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsZ0JBQWtDO1FBUGxDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFwRjVDLHVCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQ3hDLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFNakMscUJBQWdCLEdBQXlDLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLG1CQUFjLEdBQThDLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLHlCQUFvQixHQUF5QyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVyRixzQkFBaUIsR0FBb0MsYUFBYSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxvQkFBb0I7U0FDMUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUN6RixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUNGLHFCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQzVDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ25GLENBQUM7UUFHRixVQUFLLEdBQVcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDN0MsdUJBQWtCLEdBQVcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDM0Qsc0JBQWlCLEdBQVcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsbUJBQWMsR0FBb0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0QsdUJBQWtCLEdBQXdCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZFLHlCQUFvQixHQUEwQixFQUFFLENBQUM7UUFDakQsZUFBVSxHQUFlO1lBQ3ZCLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLENBQUM7U0FDZixDQUFDO1FBQ0YsbUJBQWMsR0FBbUI7WUFDL0IsUUFBUSxFQUFFLEtBQUs7WUFDZixPQUFPLEVBQUUsSUFBSTtZQUNiLE1BQU0sRUFBRSxJQUFJO1lBQ1osVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztRQUNGLFlBQU8sR0FBYTtZQUNsQjtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQztnQkFDOUIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osVUFBVSxFQUFFLElBQUk7YUFDakI7WUFDRDtnQkFDRSxJQUFJLEVBQUUsU0FBUztnQkFDZixNQUFNLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDMUIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsVUFBVSxFQUFFLEtBQUs7YUFDbEI7WUFDRDtnQkFDRSxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUM7Z0JBQzlCLElBQUksRUFBRSxhQUFhO2dCQUNuQixVQUFVLEVBQUUsS0FBSztnQkFDakIsZ0JBQWdCLEVBQUUsT0FBTzthQUMxQjtZQUNEO2dCQUNFLElBQUksRUFBRSxhQUFhO2dCQUNuQixNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDekIsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixxQkFBcUIsRUFBRSwwQkFBMEI7YUFDbEQ7WUFDRDtnQkFDRSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDekIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLHFCQUFxQixFQUFFLG1DQUFtQzthQUMzRDtTQUNGLENBQUM7UUFDTSxhQUFRLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7SUFXNUMsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsc0NBQXNDLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUk7WUFDRixNQUFNLFlBQVksR0FDaEIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBeUIsc0JBQXNCLEVBQUU7Z0JBQzdFLEtBQUssRUFBRSxVQUFVO2dCQUNqQixlQUFlLEVBQUUsWUFBWTtnQkFDN0IsY0FBYyxFQUFFLGFBQWE7Z0JBQzdCLFlBQVksRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7Z0JBQzdDLG1CQUFtQixFQUFFLElBQUk7YUFDMUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFFcEIsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUMzQixPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVuRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1lBRXpELFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzVCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDekMsTUFBTTtvQkFDTixhQUFhO29CQUNiLFFBQVE7b0JBQ1IsU0FBUztvQkFDVCxNQUFNO29CQUNOLElBQUk7aUJBQ0wsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQ2hDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQ3hEO29CQUNFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLG1CQUFtQjtvQkFDekUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO29CQUNoRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtvQkFDMUIsR0FBRyxxQkFBcUI7b0JBQ3hCLHFCQUFxQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtvQkFDcEMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXO2lCQUNuRCxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLEVBQUUsRUFBRTtnQkFDTixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUNoQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUN4RDtvQkFDRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUI7b0JBQ3pFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWM7b0JBQzlELEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO29CQUMxQixLQUFLLEVBQUUsRUFBRTtpQkFDVixDQUNGLENBQUM7YUFDSDtTQUNGO2dCQUFTO1lBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFpQjtRQUNuQyxJQUFJO1lBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FDNUQsSUFBSSxDQUFDLEdBQUcsRUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBd0IsQ0FBQSxDQUFDLENBQ2pELENBQUM7WUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRWpDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUV2RCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUNoQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUN4RDtvQkFDRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUI7b0JBQ3pFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWM7b0JBQzlELEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO29CQUMxQixFQUFFLEVBQUUsTUFBTTtvQkFDVixxQkFBcUIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUk7b0JBQ3BDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVztpQkFDbkQsQ0FDRixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FDaEMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFDeEQ7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsbUJBQW1CO29CQUN6RSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjO29CQUM5RCxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtvQkFDMUIsS0FBSyxFQUFFLEVBQUU7aUJBQ1YsQ0FDRixDQUFDO2FBQ0g7U0FDRjtnQkFBUztZQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxPQUE0QjtRQUN2RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTztZQUNMO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDdkIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO29CQUNmLE9BQU8sQ0FDTCxNQUFNLENBQUMsTUFBTSxLQUFLLHVCQUF1QixDQUFDLFFBQVE7d0JBQ2xELE1BQU0sQ0FBQyxNQUFNLEtBQUssdUJBQXVCLENBQUMsT0FBTyxDQUNsRCxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQTJCLENBQUM7YUFDN0U7WUFDRDtnQkFDRSxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixJQUFJLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDMUIsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFO29CQUNmLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyx1QkFBdUIsQ0FBQyxNQUFNLENBQUM7Z0JBQzFELENBQUM7Z0JBQ0QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQTJCLEVBQUUsSUFBSSxDQUFDO2FBQ25GO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTztZQUNMO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDdkIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7YUFDakQ7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBaUIsRUFBRSxNQUF5QixFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQ2hGLElBQUk7WUFDRixNQUNFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO2dCQUNuRCxLQUFLLEVBQUUsVUFBVTtnQkFDakIsZUFBZSxFQUFFLFlBQVk7Z0JBQzdCLGNBQWMsRUFBRSxhQUFhO2dCQUM3QixZQUFZLEVBQUU7b0JBQ1osR0FBRztvQkFDSCxNQUFNO29CQUNOLFNBQVM7aUJBQ1Y7Z0JBQ0QsbUJBQW1CLEVBQUUsSUFBSTthQUMxQixDQUFDLENBQUMsT0FDSixDQUFDLE1BQU0sQ0FBQztZQUNULElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtRQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLHNDQUFzQztRQUM1QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsb0JBQW9CLEdBQUc7Z0JBQzFCO29CQUNFLElBQUksRUFBRSxPQUFPLENBQUMsaUJBQWlCLENBQUM7b0JBQ2hDLFFBQVEsRUFBRSxHQUFHLEVBQUU7d0JBQ2IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN4QixDQUFDO29CQUNELElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUUsUUFBUTtpQkFDZjthQUNGLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMseUJBQXlCLENBQUMsT0FBNEI7UUFDbEUsZ0ZBQWdGO1FBQ2hGLDhDQUE4QztRQUM5QyxJQUFJLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFN0UsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixrREFBa0Q7WUFDbEQseUhBQXlIO1lBQ3pILGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZFLCtEQUErRDtZQUMvRCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlCLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDMUU7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLFdBQVcsQ0FBQyxjQUF3QztRQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDO1FBQ3pDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0I7UUFDNUIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1AsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUM3RSxFQUFFLEdBQUcsT0FBTyxDQUFDO1NBQ2Q7UUFFRCxJQUFJO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0Q7UUFBQyxPQUFPLEVBQUUsRUFBRTtZQUNYLElBQUksRUFBRSxFQUFFO2dCQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDeEM7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLEdBQWlCO1FBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxHQUFpQjtRQUNyRCxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQixnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLEtBQUssQ0FBQywyQkFBMkI7UUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLE9BQU87WUFDTCxRQUFRLEVBQUUsYUFBYSxDQUFDO2dCQUN0QixJQUFJLENBQUMsb0JBQW9CO2dCQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbkUsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsVUFBVTtxQkFDUCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ2hELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sNEJBQTRCLENBQUMsT0FBaUM7UUFDcEUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU87U0FDUjtRQUNELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxRQUFRLENBQUMsV0FBbUIsRUFBRSxnQkFBd0I7UUFDNUQsT0FBTyxHQUFHLFdBQVcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFTyxrQkFBa0IsQ0FDeEIsaUJBQTJCLEVBQzNCLFVBQStCO1FBRS9CLE1BQU0sZUFBZSxHQUF3QixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEcsTUFBTSxzQkFBc0IsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3JELE1BQU0sd0JBQXdCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUNwRSxDQUFDO1lBQ0YsSUFBSSx3QkFBd0IsRUFBRTtnQkFDNUIsT0FBTztvQkFDTCxHQUFHLHdCQUF3QjtvQkFDM0IsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksd0JBQXdCLENBQUMsT0FBTztvQkFDdEQsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO29CQUNSLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLE1BQU07aUJBQ3RGLENBQUM7YUFDSDtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFTyxpREFBaUQsQ0FDdkQsVUFBK0IsRUFDL0IsZUFBb0M7UUFFcEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxLQUFLLEVBQXFCLENBQUM7UUFDdEQsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEtBQUssRUFBcUIsQ0FBQztRQUUvRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGVBQWUsRUFBRTtZQUNwQyxNQUFNLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQ3pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FDMUYsQ0FBQztZQUNGLElBQUksbUJBQW1CLEVBQUU7Z0JBQ3ZCLGNBQWMsQ0FBQyxJQUFJLENBQ2pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRTtvQkFDN0MsTUFBTSxFQUFFLHVCQUF1QixDQUFDLE9BQU87aUJBQ3hDLENBQUMsQ0FDSCxDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7UUFFRCxPQUFPLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVPLG1CQUFtQixDQUN6QixVQUErQixFQUMvQixhQUF1QjtRQUV2QixNQUFNLGdCQUFnQixHQUFHLFVBQVU7YUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbkQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDcEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDckMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLE1BQU07Z0JBQ2hDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRO1NBQ3JDLENBQUMsQ0FDSCxDQUFDO1FBQ0osTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUM1QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDdkQsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUF3QixJQUFJLENBQUMsa0JBQWtCLENBQ2xFLGlCQUFpQixFQUNqQixVQUFVLENBQ1gsQ0FBQztRQUVGLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsR0FDL0MsSUFBSSxDQUFDLGlEQUFpRCxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUV0RixPQUFPLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLHVCQUF1QixDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVPLGNBQWMsQ0FBQyxRQUFnQjtRQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRCxPQUFPO1lBQ0wsRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUsRUFBRTtZQUNSLE1BQU07WUFDTixJQUFJLEVBQUUsTUFBTTtZQUNaLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxRQUFRO1lBQ3hDLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBRU8sc0JBQXNCLENBQzVCLEdBQVcsRUFDWCxLQUFrRTtRQUVsRSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFeEMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDOzt3SEF6ZVUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsNkhBSzNCLGlCQUFpQixnREN2QzlCLGtpR0FzRkE7MkZEcERhLDJCQUEyQjtrQkFKdkMsU0FBUzsrQkFDRSxpQkFBaUI7a1RBT2xCLEtBQUs7c0JBQWIsS0FBSztnQkFFTixRQUFRO3NCQURQLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLCBJQXBwbGljYXRpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBBbGVydFNlcnZpY2UsXG4gIEFwcGxpY2F0aW9uUGx1Z2luLFxuICBBcHBsaWNhdGlvblBsdWdpblN0YXR1cyxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIENvbHVtbixcbiAgRGF0YUdyaWRDb21wb25lbnQsXG4gIERpc3BsYXlPcHRpb25zLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBIZWFkZXJBY3Rpb25Db250cm9sLFxuICBNb2RhbFNlcnZpY2UsXG4gIFBhZ2luYXRpb24sXG4gIFBsdWdpbnNTZXJ2aWNlLFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRWNvc3lzdGVtU2VydmljZSwgUFJPRFVDVF9FWFBFUklFTkNFIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJbnN0YWxsUGx1Z2luQ29tcG9uZW50IH0gZnJvbSAnLi9pbnN0YWxsLXBsdWdpbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGFiZWxDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuL2xhYmVsLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9ycGhhbmVkU3RhdHVzQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9vcnBoYW5lZC1zdGF0dXMtY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBkYXRlUGx1Z2luT2ZBcHBDb21wb25lbnQgfSBmcm9tICcuL3VwZGF0ZS1wbHVnaW4tb2YtYXBwL3VwZGF0ZS1wbHVnaW4tb2YtYXBwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFwcC1wbHVnaW5zJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcGxpY2F0aW9uLXBsdWdpbnMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uUGx1Z2luc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgUFJPRFVDVF9FWFBFUklFTkNFID0gUFJPRFVDVF9FWFBFUklFTkNFO1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcblxuICBASW5wdXQoKSBhcHBJZDogc3RyaW5nIHwgbnVtYmVyO1xuICBAVmlld0NoaWxkKERhdGFHcmlkQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZGF0YUdyaWQ6IERhdGFHcmlkQ29tcG9uZW50O1xuXG4gIGV4cG9ydGVkUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICByZW1vdGVQbHVnaW5zJDogQmVoYXZpb3JTdWJqZWN0PEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgYWxsQXZhaWxhYmxlUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG4gIGluc3RhbGxlZFBsdWdpbnMkOiBPYnNlcnZhYmxlPEFwcGxpY2F0aW9uUGx1Z2luW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5yZW1vdGVQbHVnaW5zJC5waXBlKG1hcChyZW1vdGVzID0+IHRoaXMuY29udmVydEluc3RhbGxlZFJlbW90ZXNUb0lkcyhyZW1vdGVzKSkpLFxuICAgIHRoaXMuYWxsQXZhaWxhYmxlUGx1Z2lucyRcbiAgXSkucGlwZShcbiAgICBtYXAoKFtyZW1vdGVQbHVnaW5zLCBhbGxQbHVnaW5zXSkgPT4gdGhpcy5nZXRJbnN0YWxsZWRQbHVnaW5zKGFsbFBsdWdpbnMsIHJlbW90ZVBsdWdpbnMpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICBvcnBoYW5lZFBsdWdpbnMkID0gdGhpcy5pbnN0YWxsZWRQbHVnaW5zJC5waXBlKFxuICAgIG1hcChwbHVnaW5zID0+IHBsdWdpbnMuZmlsdGVyKHAgPT4gcC5zdGF0dXMgPT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLk9SUEhBTkVEKSlcbiAgKTtcbiAgYXBwOiBJQXBwbGljYXRpb247XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgdGl0bGU6IHN0cmluZyA9IGdldHRleHQoJ0luc3RhbGxlZCBwbHVnaW5zJyk7XG4gIGxvYWRNb3JlSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZCBtb3JlIHBhY2thZ2VzJyk7XG4gIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIHBhY2thZ2Vz4oCmJyk7XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW10gPSB0aGlzLmdldEFjdGlvbkNvbnRyb2xzKCk7XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXSA9IHRoaXMuZ2V0QnVsa0FjdGlvbkNvbnRyb2xzKCk7XG4gIGhlYWRlckFjdGlvbkNvbnRyb2xzOiBIZWFkZXJBY3Rpb25Db250cm9sW10gPSBbXTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHtcbiAgICBwYWdlU2l6ZTogMTAsXG4gICAgY3VycmVudFBhZ2U6IDFcbiAgfTtcbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlXG4gIH07XG4gIGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnUGx1Z2luIG5hbWUnKSxcbiAgICAgIHBhdGg6ICduYW1lJyxcbiAgICAgIGZpbHRlcmFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdWZXJzaW9uJyxcbiAgICAgIGhlYWRlcjogZ2V0dGV4dCgnVmVyc2lvbicpLFxuICAgICAgcGF0aDogJ3ZlcnNpb24nLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkZXNjcmlwdGlvbicsXG4gICAgICBoZWFkZXI6IGdldHRleHQoJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBwYXRoOiAnZGVzY3JpcHRpb24nLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsQ1NTQ2xhc3NOYW1lOiAnc21hbGwnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY29udGV4dFBhdGgnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdTb3VyY2UnKSxcbiAgICAgIHBhdGg6ICdjb250ZXh0UGF0aCcsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNlbGxSZW5kZXJlckNvbXBvbmVudDogTGFiZWxDZWxsUmVuZGVyZXJDb21wb25lbnRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzdGF0dXMnLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdTdGF0dXMnKSxcbiAgICAgIHBhdGg6ICdzdGF0dXMnLFxuICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICBjZWxsUmVuZGVyZXJDb21wb25lbnQ6IE9ycGhhbmVkU3RhdHVzQ2VsbFJlbmRlcmVyQ29tcG9uZW50XG4gICAgfVxuICBdO1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1NlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFkZEluc3RhbGxCdXR0b25Ub0hlYWRlckFjdGlvbkNvbnRyb2xzKCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgYXN5bmMgbG9hZERhdGEoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NTygpO1xuICAgIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NRkV4cG9ydHModGhpcy5hcHApO1xuICAgIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NRlJlbW90ZXModGhpcy5hcHApO1xuICAgIGF3YWl0IHRoaXMuZ2V0QWxsQXBwbGljYXRpb25zTUZFeHBvcnRzKCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxQbHVnaW5zKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwbHVnaW5zVG9BZGQ6IEFwcGxpY2F0aW9uUGx1Z2luW10gPVxuICAgICAgICBhd2FpdCB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3c8SW5zdGFsbFBsdWdpbkNvbXBvbmVudD4oSW5zdGFsbFBsdWdpbkNvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtc20nLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieTogJ21vZGFsLWJvZHknLFxuICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnLFxuICAgICAgICAgIGluaXRpYWxTdGF0ZTogdGhpcy5nZXRJbnN0YWxsTW9kYWxJbml0U3RhdGUoKSxcbiAgICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlXG4gICAgICAgIH0pLmNvbnRlbnQucmVzdWx0O1xuXG4gICAgICBjb25zdCBsaWNlbnNlc1ZlcmlmaWVkQnlVc2VyID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnZlcmlmeUxpY2Vuc2VzKHBsdWdpbnNUb0FkZCk7XG4gICAgICBpZiAoIWxpY2Vuc2VzVmVyaWZpZWRCeVVzZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVJlbW90ZXNJbnN0YWxsYXRpb24ocGx1Z2luc1RvQWRkKTtcblxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdQbHVnaW5zIGluc3RhbGxlZC4nKSk7XG5cbiAgICAgIHBsdWdpbnNUb0FkZC5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICAgIGNvbnN0IHBsdWdpbkN1c3RvbUV2ZW50SW5mbyA9IHBpY2socGx1Z2luLCBbXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgICdjb250ZXh0UGF0aCcsXG4gICAgICAgICAgJ21vZHVsZScsXG4gICAgICAgICAgJ3ZlcnNpb24nLFxuICAgICAgICAgICd0eXBlJyxcbiAgICAgICAgICAnaWQnXG4gICAgICAgIF0pO1xuXG4gICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuSU5TVEFMTEVEX1BMVUdJTlMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuQVBQTElDQVRJT05fUExVR0lOUyxcbiAgICAgICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9JTlNUQUxMRUQsXG4gICAgICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTixcbiAgICAgICAgICAgIC4uLnBsdWdpbkN1c3RvbUV2ZW50SW5mbyxcbiAgICAgICAgICAgIHRhcmdldEFwcGxpY2F0aW9uTmFtZTogdGhpcy5hcHAubmFtZSxcbiAgICAgICAgICAgIHRhcmdldEFwcGxpY2F0aW9uQ29udGV4dFBhdGg6IHRoaXMuYXBwLmNvbnRleHRQYXRoXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5JTlNUQUxMRURfUExVR0lOUyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5BUFBMSUNBVElPTl9QTFVHSU5TLFxuICAgICAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuU0VSVkVSX0ZBSUxVUkUsXG4gICAgICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTixcbiAgICAgICAgICAgIGVycm9yOiBleFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVQbHVnaW5zKHBsdWdpbnM6IHN0cmluZ1tdKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRSZW1vdGVzID0gYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5yZW1vdmVSZW1vdGVzKFxuICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgcGx1Z2lucy5tYXAoaWQgPT4gKHsgaWQgfSBhcyBBcHBsaWNhdGlvblBsdWdpbikpXG4gICAgICApO1xuICAgICAgdGhpcy5lbWl0UmVtb3Rlcyh1cGRhdGVkUmVtb3Rlcyk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFHcmlkLmNhbmNlbCgpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdQbHVnaW5zIHJlbW92ZWQuJykpO1xuXG4gICAgICBwbHVnaW5zLmZvckVhY2gocGx1Z2luID0+IHtcbiAgICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgICBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5JTlNUQUxMRURfUExVR0lOUyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5BUFBMSUNBVElPTl9QTFVHSU5TLFxuICAgICAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuUExVR0lOX1JFTU9WRUQsXG4gICAgICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTixcbiAgICAgICAgICAgIGlkOiBwbHVnaW4sXG4gICAgICAgICAgICB0YXJnZXRBcHBsaWNhdGlvbk5hbWU6IHRoaXMuYXBwLm5hbWUsXG4gICAgICAgICAgICB0YXJnZXRBcHBsaWNhdGlvbkNvbnRleHRQYXRoOiB0aGlzLmFwcC5jb250ZXh0UGF0aFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShleCk7XG4gICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuSU5TVEFMTEVEX1BMVUdJTlMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuQVBQTElDQVRJT05fUExVR0lOUyxcbiAgICAgICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlNFUlZFUl9GQUlMVVJFLFxuICAgICAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT04sXG4gICAgICAgICAgICBlcnJvcjogZXhcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xlYW51cE9ycGhhbmVkUGx1Z2lucyhwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdKSB7XG4gICAgY29uc3QgcGx1Z2luSWRzID0gcGx1Z2lucy5tYXAocCA9PiBwLmlkKTtcbiAgICBhd2FpdCB0aGlzLnJlbW92ZVBsdWdpbnMocGx1Z2luSWRzKTtcbiAgfVxuXG4gIGdldEFjdGlvbkNvbnRyb2xzKCk6IEFjdGlvbkNvbnRyb2xbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2N1c3RvbVVwZGF0ZScsXG4gICAgICAgIHRleHQ6IGdldHRleHQoJ1VwZGF0ZScpLFxuICAgICAgICBpY29uOiAnY2FyZXQtc3F1YXJlLW8tdXAnLFxuICAgICAgICBzaG93SWY6IHBsdWdpbiA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBsdWdpbi5zdGF0dXMgPT09IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLk9VVERBVEVEIHx8XG4gICAgICAgICAgICBwbHVnaW4uc3RhdHVzID09PSBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5SRVZPS0VEXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2s6IHBsdWdpbiA9PiB0aGlzLnVwZGF0ZVBsdWdpbih0aGlzLmFwcCwgcGx1Z2luIGFzIEFwcGxpY2F0aW9uUGx1Z2luKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2N1c3RvbURvd25ncmFkZScsXG4gICAgICAgIHRleHQ6IGdldHRleHQoJ0Rvd25ncmFkZScpLFxuICAgICAgICBpY29uOiAnY2FyZXQtc3F1YXJlLW8tZG93bicsXG4gICAgICAgIHNob3dJZjogcGx1Z2luID0+IHtcbiAgICAgICAgICByZXR1cm4gcGx1Z2luLnN0YXR1cyA9PT0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuTEFURVNUO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsYmFjazogcGx1Z2luID0+IHRoaXMudXBkYXRlUGx1Z2luKHRoaXMuYXBwLCBwbHVnaW4gYXMgQXBwbGljYXRpb25QbHVnaW4sIHRydWUpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGdldEJ1bGtBY3Rpb25Db250cm9scygpOiBCdWxrQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnY3VzdG9tRGVsZXRlJyxcbiAgICAgICAgdGV4dDogZ2V0dGV4dCgnUmVtb3ZlJyksXG4gICAgICAgIGljb246ICd0cmFzaCcsXG4gICAgICAgIGNhbGxiYWNrOiBwbHVnaW5zID0+IHRoaXMucmVtb3ZlUGx1Z2lucyhwbHVnaW5zKVxuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBhc3luYyB1cGRhdGVQbHVnaW4oYXBwOiBJQXBwbGljYXRpb24sIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIGRvd25ncmFkZSA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChcbiAgICAgICAgdGhpcy5ic01vZGFsU2VydmljZS5zaG93KFVwZGF0ZVBsdWdpbk9mQXBwQ29tcG9uZW50LCB7XG4gICAgICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBwbHVnaW4sXG4gICAgICAgICAgICBkb3duZ3JhZGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICAgICAgfSkuY29udGVudCBhcyBVcGRhdGVQbHVnaW5PZkFwcENvbXBvbmVudFxuICAgICAgKS5yZXN1bHQ7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRJbnN0YWxsQnV0dG9uVG9IZWFkZXJBY3Rpb25Db250cm9scygpIHtcbiAgICBpZiAodGhpcy5hcHBJZCkge1xuICAgICAgdGhpcy5oZWFkZXJBY3Rpb25Db250cm9scyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0luc3RhbGwgcGx1Z2lucycpLFxuICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbGxQbHVnaW5zKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpY29uOiAncGx1cy1jaXJjbGUnLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b20nXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVSZW1vdGVzSW5zdGFsbGF0aW9uKHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10pIHtcbiAgICAvLyBXaGVuIHJlbW90ZXMgb2JqZWN0IGlzIG5vdCBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IG9mIGFuIGFwcGxpY2F0aW9uLlxuICAgIC8vIEZhbGxiYWNrIHRvIHNldEluaXRpYWxSZW1vdGVzIGlzIHRyaWdnZXJlZC5cbiAgICBsZXQgdXBkYXRlZFJlbW90ZXMgPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLmFkZFJlbW90ZXModGhpcy5hcHAsIHBsdWdpbnMpO1xuXG4gICAgaWYgKCF1cGRhdGVkUmVtb3Rlcykge1xuICAgICAgLy8gVE9ETyBkaXNjdXNzIGlmIHdlIG5lZWQgdG8gaGFuZGxlIGl0IGxpa2UgdGhhdC5cbiAgICAgIC8vIFJpZ2h0IG5vdyByZW1vdGVzIGZyb20gdGhlIGN1bXVsb2NpdHkuanNvbiBhcmUgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gcmVtb3RlcyBvYmplY3QgaXMgbWlzc2luZyBpbiB0aGUgY29uZmlndXJhdGlvbi5cbiAgICAgIHVwZGF0ZWRSZW1vdGVzID0gYXdhaXQgdGhpcy5wbHVnaW5zU2VydmljZS5zZXRJbml0aWFsUmVtb3Rlcyh0aGlzLmFwcCk7XG4gICAgICAvLyBGcmVzaCBhcHBsaWNhdGlvbiBNTyBpcyBuZWVkZWQsIGFmdGVyIGluaXRpYWwgc3RhdGUgd2FzIHNldC5cbiAgICAgIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25NTygpO1xuICAgICAgdXBkYXRlZFJlbW90ZXMgPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLmFkZFJlbW90ZXModGhpcy5hcHAsIHBsdWdpbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbWl0UmVtb3Rlcyh1cGRhdGVkUmVtb3Rlcyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSZW1vdGVzKHVwZGF0ZWRSZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpIHtcbiAgICB0aGlzLnJlbW90ZVBsdWdpbnMkLm5leHQodXBkYXRlZFJlbW90ZXMpO1xuICAgIHRoaXMuYXBwLmNvbmZpZy5yZW1vdGVzID0gdXBkYXRlZFJlbW90ZXM7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5yZW1vdGVQbHVnaW5zJC52YWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBcHBsaWNhdGlvbk1PKCk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IGlkID0gdGhpcy5hcHBJZDtcbiAgICBpZiAoIWlkKSB7XG4gICAgICBjb25zdCB7IGlkOiByb3V0ZUlkIH0gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhO1xuICAgICAgaWQgPSByb3V0ZUlkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmFwcCA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRBcHBsaWNhdGlvbihpZCk7XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIGlmIChlcikge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBcHBsaWNhdGlvbk1GRXhwb3J0cyhhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GRXhwb3J0cyhhcHApO1xuICAgIHRoaXMuZXhwb3J0ZWRQbHVnaW5zJC5uZXh0KGV4cG9ydHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBcHBsaWNhdGlvbk1GUmVtb3RlcyhhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGxldCBhcHBDb25maWdSZW1vdGVzID0gdGhpcy5wbHVnaW5zU2VydmljZS5nZXRNRlJlbW90ZXMoYXBwKTtcblxuICAgIGlmICghYXBwQ29uZmlnUmVtb3Rlcykge1xuICAgICAgYXBwQ29uZmlnUmVtb3RlcyA9IGF3YWl0IHRoaXMucGx1Z2luc1NlcnZpY2Uuc2V0SW5pdGlhbFJlbW90ZXMoYXBwKTtcbiAgICAgIHRoaXMuYXBwID0gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbk1PKCk7XG4gICAgfVxuICAgIHRoaXMucmVtb3RlUGx1Z2lucyQubmV4dChhcHBDb25maWdSZW1vdGVzIHx8IHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QWxsQXBwbGljYXRpb25zTUZFeHBvcnRzKCkge1xuICAgIGNvbnN0IGFsbEFwcHNNRkV4cG9ydHMgPSBhd2FpdCB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldEFsbE1GRXhwb3J0cyh0cnVlKTtcbiAgICB0aGlzLmFsbEF2YWlsYWJsZVBsdWdpbnMkLm5leHQoYWxsQXBwc01GRXhwb3J0cyk7XG4gIH1cblxuICBwcml2YXRlIGdldEluc3RhbGxNb2RhbEluaXRTdGF0ZSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBwbHVnaW5zJDogY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuYWxsQXZhaWxhYmxlUGx1Z2lucyQsXG4gICAgICAgIHRoaXMuaW5zdGFsbGVkUGx1Z2lucyQucGlwZShtYXAocGx1Z2lucyA9PiBwbHVnaW5zLm1hcChwID0+IHAuaWQpKSksXG4gICAgICAgIHRoaXMuZXhwb3J0ZWRQbHVnaW5zJC5waXBlKG1hcChwbHVnaW5zID0+IHBsdWdpbnMubWFwKHAgPT4gcC5pZCkpKVxuICAgICAgXSkucGlwZShcbiAgICAgICAgbWFwKChbYWxsUGx1Z2lucywgaW5zdGFsbGVkUGx1Z2lucywgZXhwb3J0ZWRQbHVnaW5OYW1lc10pID0+IHtcbiAgICAgICAgICBjb25zdCBwbHVnaW5zID0gW107XG4gICAgICAgICAgYWxsUGx1Z2luc1xuICAgICAgICAgICAgLmZpbHRlcihwID0+ICFleHBvcnRlZFBsdWdpbk5hbWVzLmluY2x1ZGVzKHAuaWQpKVxuICAgICAgICAgICAgLm1hcChwID0+IHBsdWdpbnMucHVzaCh7IC4uLnAsIGluc3RhbGxlZDogISFpbnN0YWxsZWRQbHVnaW5zLmluY2x1ZGVzKHAuaWQpIH0pKTtcbiAgICAgICAgICByZXR1cm4gcGx1Z2lucztcbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydEluc3RhbGxlZFJlbW90ZXNUb0lkcyhyZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFyZW1vdGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGltcG9ydENvbnRleHRQYXRocyA9IE9iamVjdC5rZXlzKHJlbW90ZXMpO1xuICAgIGNvbnN0IHBsdWdpbnMgPSBbXTtcbiAgICBpbXBvcnRDb250ZXh0UGF0aHMuZm9yRWFjaChjb250ZXh0UGF0aCA9PiB7XG4gICAgICBjb25zdCBtb2R1bGVOYW1lcyA9IHJlbW90ZXNbY29udGV4dFBhdGhdO1xuICAgICAgcGx1Z2lucy5wdXNoKC4uLm1vZHVsZU5hbWVzLm1hcChtb2R1bGUgPT4gdGhpcy5jcmVhdGVJZChjb250ZXh0UGF0aCwgbW9kdWxlKSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBwbHVnaW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJZChjb250ZXh0UGF0aDogc3RyaW5nLCBwbHVnaW5Nb2R1bGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjb250ZXh0UGF0aH0vJHtwbHVnaW5Nb2R1bGVOYW1lfWA7XG4gIH1cblxuICBwcml2YXRlIGdldE9ycGhhbmVkUGx1Z2lucyhcbiAgICBvcnBoYW5lZFBsdWdpbklkczogc3RyaW5nW10sXG4gICAgYWxsUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXVxuICApOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBjb25zdCBvcnBoYW5lZFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW10gPSBvcnBoYW5lZFBsdWdpbklkcy5tYXAocCA9PiB0aGlzLmV4dHJhY3REZXRhaWxzKHApKTtcbiAgICBjb25zdCBvcnBoYW5lZFBsdWdpbnNVcGRhdGVkID0gb3JwaGFuZWRQbHVnaW5zLm1hcChwID0+IHtcbiAgICAgIGNvbnN0IHBsdWdpbkluRGlmZmVyZW50VmVyc2lvbiA9IGFsbFBsdWdpbnMuZmluZChcbiAgICAgICAgdG1wID0+IHRtcC5jb250ZXh0UGF0aCA9PT0gcC5jb250ZXh0UGF0aCAmJiB0bXAubW9kdWxlID09PSBwLm1vZHVsZVxuICAgICAgKTtcbiAgICAgIGlmIChwbHVnaW5JbkRpZmZlcmVudFZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wbHVnaW5JbkRpZmZlcmVudFZlcnNpb24sXG4gICAgICAgICAgdmVyc2lvbjogcC52ZXJzaW9uIHx8IHBsdWdpbkluRGlmZmVyZW50VmVyc2lvbi52ZXJzaW9uLFxuICAgICAgICAgIGlkOiBwLmlkLFxuICAgICAgICAgIHN0YXR1czogcC52ZXJzaW9uID8gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1VUREFURUQgOiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cy5MQVRFU1RcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9ycGhhbmVkUGx1Z2luc1VwZGF0ZWQ7XG4gIH1cblxuICBwcml2YXRlIHNwbGl0T3JwaGFuZWRQbHVnaW5zSW50b09ycGhhbmVkQW5kUmV2b2tlZFBsdWdpbnMoXG4gICAgYWxsUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSxcbiAgICBvcnBoYW5lZFBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKSB7XG4gICAgY29uc3QgcmV2b2tlZFBsdWdpbnMgPSBuZXcgQXJyYXk8QXBwbGljYXRpb25QbHVnaW4+KCk7XG4gICAgY29uc3QgYWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMgPSBuZXcgQXJyYXk8QXBwbGljYXRpb25QbHVnaW4+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBvcnBoYW5lZFBsdWdpbnMpIHtcbiAgICAgIGNvbnN0IGZvdW5kRmFtaWxpYXJQbHVnaW4gPSBhbGxQbHVnaW5zLmZpbmQoXG4gICAgICAgIHBsdWdpbjEgPT4gcGx1Z2luLmNvbnRleHRQYXRoID09PSBwbHVnaW4xLmNvbnRleHRQYXRoICYmIHBsdWdpbi5tb2R1bGUgPT09IHBsdWdpbjEubW9kdWxlXG4gICAgICApO1xuICAgICAgaWYgKGZvdW5kRmFtaWxpYXJQbHVnaW4pIHtcbiAgICAgICAgcmV2b2tlZFBsdWdpbnMucHVzaChcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBmb3VuZEZhbWlsaWFyUGx1Z2luLCBwbHVnaW4sIHtcbiAgICAgICAgICAgIHN0YXR1czogQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuUkVWT0tFRFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3R1YWxseU9ycGhhbmVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmV2b2tlZFBsdWdpbnMsIGFjdHVhbGx5T3JwaGFuZWRQbHVnaW5zIH07XG4gIH1cblxuICBwcml2YXRlIGdldEluc3RhbGxlZFBsdWdpbnMoXG4gICAgYWxsUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSxcbiAgICByZW1vdGVQbHVnaW5zOiBzdHJpbmdbXVxuICApOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBjb25zdCBhdmFpbGFibGVQbHVnaW5zID0gYWxsUGx1Z2luc1xuICAgICAgLmZpbHRlcihwbHVnaW4gPT4gcmVtb3RlUGx1Z2lucy5pbmNsdWRlcyhwbHVnaW4uaWQpKVxuICAgICAgLm1hcChwbHVnaW4gPT5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihwbHVnaW4sIHtcbiAgICAgICAgICBzdGF0dXM6IHBsdWdpbi50YWdzPy5pbmNsdWRlcygnbGF0ZXN0JylcbiAgICAgICAgICAgID8gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuTEFURVNUXG4gICAgICAgICAgICA6IEFwcGxpY2F0aW9uUGx1Z2luU3RhdHVzLk9VVERBVEVEXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIGNvbnN0IG9ycGhhbmVkUGx1Z2luSWRzID0gcmVtb3RlUGx1Z2lucy5maWx0ZXIoXG4gICAgICByID0+ICFhdmFpbGFibGVQbHVnaW5zLmZpbmQocGx1Z2luID0+IHBsdWdpbi5pZCA9PT0gcilcbiAgICApO1xuICAgIGNvbnN0IG9ycGhhbmVkUGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSA9IHRoaXMuZ2V0T3JwaGFuZWRQbHVnaW5zKFxuICAgICAgb3JwaGFuZWRQbHVnaW5JZHMsXG4gICAgICBhbGxQbHVnaW5zXG4gICAgKTtcblxuICAgIGNvbnN0IHsgYWN0dWFsbHlPcnBoYW5lZFBsdWdpbnMsIHJldm9rZWRQbHVnaW5zIH0gPVxuICAgICAgdGhpcy5zcGxpdE9ycGhhbmVkUGx1Z2luc0ludG9PcnBoYW5lZEFuZFJldm9rZWRQbHVnaW5zKGFsbFBsdWdpbnMsIG9ycGhhbmVkUGx1Z2lucyk7XG5cbiAgICByZXR1cm4gWy4uLmF2YWlsYWJsZVBsdWdpbnMsIC4uLnJldm9rZWRQbHVnaW5zLCAuLi5hY3R1YWxseU9ycGhhbmVkUGx1Z2luc107XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3REZXRhaWxzKHBsdWdpbklkOiBzdHJpbmcpOiBBcHBsaWNhdGlvblBsdWdpbiB7XG4gICAgY29uc3QgY29udGV4dFBhdGggPSB0aGlzLmdldFN0cmluZ01hdGNoaW5nUmVnZXgocGx1Z2luSWQsIC9eW15AXSooQHxcXC8pLyk7XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZ2V0U3RyaW5nTWF0Y2hpbmdSZWdleChwbHVnaW5JZCwgL0AuKlxcLy8pO1xuICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMuZ2V0U3RyaW5nTWF0Y2hpbmdSZWdleChwbHVnaW5JZCwgL1xcLy4qJC8pO1xuICAgIGNvbnN0IHVuYXZhaWxhYmxlID0gZ2V0dGV4dCgndW5hdmFpbGFibGVgcGx1Z2luYCcpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcGx1Z2luSWQsXG4gICAgICBwYXRoOiAnJyxcbiAgICAgIG1vZHVsZSxcbiAgICAgIG5hbWU6IG1vZHVsZSxcbiAgICAgIHN0YXR1czogQXBwbGljYXRpb25QbHVnaW5TdGF0dXMuT1JQSEFORUQsXG4gICAgICBjb250ZXh0UGF0aDogY29udGV4dFBhdGgsXG4gICAgICBkZXNjcmlwdGlvbjogdW5hdmFpbGFibGUsXG4gICAgICB2ZXJzaW9uOiB2ZXJzaW9uXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RyaW5nTWF0Y2hpbmdSZWdleChcbiAgICBzdHI6IHN0cmluZyxcbiAgICByZWdleDogeyBbU3ltYm9sLm1hdGNoXShzdHJpbmc6IHN0cmluZyk6IFJlZ0V4cE1hdGNoQXJyYXkgfCBudWxsIH1cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXRjaGVzID0gc3RyLm1hdGNoKHJlZ2V4KTtcbiAgICBjb25zdCB2YWx1ZSA9IG1hdGNoZXMgPyBtYXRjaGVzWzBdIDogJyc7XG5cbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKEB8XFwvKS9nLCAnJyk7XG4gIH1cbn1cbiIsIjxjOHktdGl0bGU+e3sgYXBwIHwgaHVtYW5pemVBcHBOYW1lIHwgYXN5bmMgfX08L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbaWNvbl09XCInYzh5LWF0b20nXCIgW2xhYmVsXT1cIidFY29zeXN0ZW0nIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktbW9kdWxlcydcIlxuICAgIFtsYWJlbF09XCInQXBwbGljYXRpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3BhdGhdPVwiJ2Vjb3N5c3RlbS9hcHBsaWNhdGlvbnMvYXBwbGljYXRpb24nXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW0gW2xhYmVsXT1cImFwcCB8IGh1bWFuaXplQXBwTmFtZSB8IGFzeW5jXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbSBbbGFiZWxdPVwiJ1BsdWdpbnMnIHwgdHJhbnNsYXRlXCI+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICAoY2xpY2spPVwiaW5zdGFsbFBsdWdpbnMoKVwiXG4gICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBpc0xvYWRpbmcgfVwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ0luc3RhbGwgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgIHt7ICdJbnN0YWxsIHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwib3JwaGFuZWRQbHVnaW5zJCB8IGFzeW5jIGFzIG9ycGhhbmVkUGx1Z2luc1wiPlxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbSAqbmdJZj1cIm9ycGhhbmVkUGx1Z2lucz8ubGVuZ3RoXCIgW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gICAgPGJ1dHRvblxuICAgICAgKGNsaWNrKT1cImNsZWFudXBPcnBoYW5lZFBsdWdpbnMob3JwaGFuZWRQbHVnaW5zKVwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIHRpdGxlPVwie3sgJ0NsZWFuIHVwIG9ycGhhbmVkIHBsdWdpbnMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwiZXJhc2VcIj48L2k+XG4gICAgICB7eyAnQ2xlYW4gdXAgb3JwaGFuZWQgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXYgY2xhc3M9XCJjb250ZW50LWZ1bGxwYWdlIGQtZmxleCBkLWNvbCBib3JkZXItdG9wXCI+XG4gIDxjOHktZGF0YS1ncmlkXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbbG9hZE1vcmVJdGVtc0xhYmVsXT1cImxvYWRNb3JlSXRlbXNMYWJlbFwiXG4gICAgW2xvYWRpbmdJdGVtc0xhYmVsXT1cImxvYWRpbmdJdGVtc0xhYmVsXCJcbiAgICBbZGlzcGxheU9wdGlvbnNdPVwiZGlzcGxheU9wdGlvbnNcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFtyb3dzXT1cImluc3RhbGxlZFBsdWdpbnMkIHwgYXN5bmNcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW2J1bGtBY3Rpb25Db250cm9sc109XCJidWxrQWN0aW9uQ29udHJvbHNcIlxuICAgIFtoZWFkZXJBY3Rpb25Db250cm9sc109XCJoZWFkZXJBY3Rpb25Db250cm9sc1wiXG4gICAgKG9uUmVsb2FkKT1cInJlZnJlc2goKVwiXG4gICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgPlxuICAgIDwhLS0gTm8gc2VhcmNoL2ZpbHRlcmVkIHJlc3VsdHMgZW1wdHkgc3RhdGUgLS0+XG4gICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgKm5nSWY9XCIoaW5zdGFsbGVkUGx1Z2lucyQgfCBhc3luYyk/Lmxlbmd0aFwiXG4gICAgICBbaWNvbl09XCInc2VhcmNoJ1wiXG4gICAgICBbdGl0bGVdPVwiJ05vIHBsdWdpbnMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtzdWJ0aXRsZV09XCInUmVmaW5lIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNoZWNrIHlvdXIgc3BlbGxpbmcuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICA+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPCEtLSBObyBpbnN0YWxsZWQgcGx1Z2lucyBlbXB0eSBzdGF0ZSAtLT5cbiAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAqbmdJZj1cIiEoaW5zdGFsbGVkUGx1Z2lucyQgfCBhc3luYyk/Lmxlbmd0aCAmJiAhaXNMb2FkaW5nXCJcbiAgICAgIFtpY29uXT1cIidwbHVnaW4nXCJcbiAgICAgIFt0aXRsZV09XCInTm8gcGx1Z2lucyBpbnN0YWxsZWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbc3VidGl0bGVdPVwiJ1RoaXMgYXBwbGljYXRpb24gZG9lc25cXCd0IGhhdmUgYW55IHBsdWdpbi4gQ2xpY2sgYmVsb3cgdG8gaW5zdGFsbC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaXQtdyBwLXQtMTZcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJpbnN0YWxsUGx1Z2lucygpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdidG4tcGVuZGluZyc6IGlzTG9hZGluZyB9XCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0luc3RhbGwgcGx1Z2lucycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICA+XG4gICAgICAgICAgSW5zdGFsbCBwbHVnaW5zXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gIDwvYzh5LWRhdGEtZ3JpZD5cbjwvZGl2PlxuIl19
|