@c8y/ngx-components 1017.0.30 → 1017.0.32

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.
Files changed (38) hide show
  1. package/ecosystem/application-plugins/application-plugins.component.d.ts +54 -3
  2. package/ecosystem/application-plugins/plugin-list.component.d.ts +5 -3
  3. package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts +4 -2
  4. package/ecosystem/application-properties/application-properties.component.d.ts +5 -3
  5. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts +5 -4
  6. package/ecosystem/packages/package-availability.service.d.ts +4 -2
  7. package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts +4 -2
  8. package/ecosystem/shared/application-card.component.d.ts +5 -3
  9. package/ecosystem/shared/duplicate-application/duplicate-application-properties/duplicate-application-properties.component.d.ts +4 -2
  10. package/ecosystem/shared/ecosystem.model.d.ts +49 -0
  11. package/esm2020/core/help/help.component.mjs +3 -3
  12. package/esm2020/ecosystem/application-plugins/application-plugins.component.mjs +32 -9
  13. package/esm2020/ecosystem/application-plugins/plugin-list.component.mjs +18 -6
  14. package/esm2020/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +20 -5
  15. package/esm2020/ecosystem/application-properties/application-properties.component.mjs +13 -6
  16. package/esm2020/ecosystem/packages/deploy-application/deploy-application.component.mjs +20 -7
  17. package/esm2020/ecosystem/packages/package-availability.service.mjs +18 -5
  18. package/esm2020/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.mjs +43 -6
  19. package/esm2020/ecosystem/shared/application-card.component.mjs +28 -5
  20. package/esm2020/ecosystem/shared/duplicate-application/duplicate-application-properties/duplicate-application-properties.component.mjs +21 -8
  21. package/esm2020/ecosystem/shared/ecosystem.model.mjs +50 -1
  22. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +61 -12
  23. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  24. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +90 -7
  25. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  26. package/fesm2015/c8y-ngx-components-ecosystem.mjs +143 -24
  27. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  28. package/fesm2015/c8y-ngx-components.mjs +2 -2
  29. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  30. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +61 -12
  31. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  32. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +90 -7
  33. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  34. package/fesm2020/c8y-ngx-components-ecosystem.mjs +143 -24
  35. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  36. package/fesm2020/c8y-ngx-components.mjs +2 -2
  37. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  38. package/package.json +2 -2
@@ -1,9 +1,8 @@
1
1
  import { Component, ViewChild } from '@angular/core';
2
2
  import { ApplicationService, InventoryService } from '@c8y/client';
3
- import { gettext, WizardComponent } from '@c8y/ngx-components';
3
+ import { GainsightService, WizardComponent, gettext } from '@c8y/ngx-components';
4
+ import { ApplicationPropertiesFormComponent, EcosystemService, PRODUCT_EXPERIENCE } from '@c8y/ngx-components/ecosystem/shared';
4
5
  import { TranslateService } from '@ngx-translate/core';
5
- import { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
6
- import { ApplicationPropertiesFormComponent } from '@c8y/ngx-components/ecosystem/shared';
7
6
  import * as i0 from "@angular/core";
8
7
  import * as i1 from "@c8y/ngx-components/ecosystem/shared";
9
8
  import * as i2 from "@c8y/client";
@@ -12,12 +11,14 @@ import * as i4 from "@ngx-translate/core";
12
11
  import * as i5 from "@angular/common";
13
12
  import * as i6 from "@angular/forms";
14
13
  export class DeployApplicationComponent {
15
- constructor(ecosystemService, applicationService, wizardComponent, translate, inventoryService) {
14
+ constructor(ecosystemService, applicationService, wizardComponent, translate, inventoryService, gainsightService) {
16
15
  this.ecosystemService = ecosystemService;
17
16
  this.applicationService = applicationService;
18
17
  this.wizardComponent = wizardComponent;
19
18
  this.translate = translate;
20
19
  this.inventoryService = inventoryService;
20
+ this.gainsightService = gainsightService;
21
+ this.CURRENT_LOCATION = location.href;
21
22
  this.inProgress = true;
22
23
  this.isDeployed = false;
23
24
  this.deployedWithSuccess = false;
@@ -74,11 +75,23 @@ export class DeployApplicationComponent {
74
75
  // Update manifest
75
76
  await this.ecosystemService.updateAppManifest(newApp, this.package);
76
77
  this.deployedWithSuccess = true;
78
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.DEPLOY_APPLICATION, {
79
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.DEPLOY_APPLICATION,
80
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.DEPLOY_APPLICATION,
81
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.DEPLOYED,
82
+ url: this.CURRENT_LOCATION
83
+ });
77
84
  }
78
85
  catch (error) {
79
86
  if (error?.res?.status === 404) {
80
87
  await this.applicationService.delete(newApp.id);
81
88
  await this.fallbackToCloneLatest(config);
89
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.DEPLOY_APPLICATION, {
90
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.DEPLOY_APPLICATION,
91
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.DEPLOY_APPLICATION,
92
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SERVER_FAILURE,
93
+ url: this.CURRENT_LOCATION
94
+ });
82
95
  }
83
96
  }
84
97
  finally {
@@ -132,13 +145,13 @@ export class DeployApplicationComponent {
132
145
  });
133
146
  }
134
147
  }
135
- DeployApplicationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeployApplicationComponent, deps: [{ token: i1.EcosystemService }, { token: i2.ApplicationService }, { token: i3.WizardComponent }, { token: i4.TranslateService }, { token: i2.InventoryService }], target: i0.ɵɵFactoryTarget.Component });
148
+ DeployApplicationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeployApplicationComponent, deps: [{ token: i1.EcosystemService }, { token: i2.ApplicationService }, { token: i3.WizardComponent }, { token: i4.TranslateService }, { token: i2.InventoryService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
136
149
  DeployApplicationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DeployApplicationComponent, selector: "c8y-deploy-application", viewQueries: [{ propertyName: "applicationPropertiesForm", first: true, predicate: ApplicationPropertiesFormComponent, descendants: true }], ngImport: i0, template: "<c8y-wizard-header>\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"output\"></i>\n <h4 id=\"modal-title\">{{ 'Deploy application' | translate }}</h4>\n </div>\n</c8y-wizard-header>\n\n<c8y-wizard-body id=\"modal-body\">\n <ng-container *ngIf=\"!isDeployed\">\n <div class=\"fadeIn animated d-flex a-i-center j-c-center d-col\" style=\"min-height: 309px\">\n <p\n class=\"bg-level-0 fit-w p-16 text-center text-medium sticky-top bg-level-0 separator-bottom\"\n *ngIf=\"!inProgress\"\n >\n {{ headerText | translate }}\n </p>\n <c8y-application-properties-form\n *ngIf=\"!inProgress\"\n [application]=\"newAppConfig\"\n class=\"d-block fit-w bg-level-1\"\n ></c8y-application-properties-form>\n\n <ng-container *ngIf=\"!inProgress\">\n <div [ngStyle]=\"{ padding: '0 16px' }\" class=\"d-block fit-w bg-gray-white\">\n <c8y-package-version-select [ngModel]=\"model.selected\" (ngModelChange)=\"onAppVersionSelect($event)\" [packageId]=\"package?.id\" [label]=\"'Use package version' | translate\"></c8y-package-version-select>\n </div>\n </ng-container>\n\n <c8y-progress-bar\n *ngIf=\"inProgress\"\n [message]=\"'Deploying\u2026' | translate\"\n class=\"text-center\"\n ></c8y-progress-bar>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isDeployed\">\n <div\n *ngIf=\"deployedWithSuccess; else failedDeploy\"\n class=\"modal-body fadeIn animated\"\n style=\"min-height: 309px\"\n >\n <div class=\"d-flex a-i-center j-c-center d-col\">\n <c8y-operation-result\n type=\"success\"\n [size]=\"84\"\n [vertical]=\"true\"\n [text]=\"successMessageTemplate | translate: { packageName: package.name }\"\n class=\"lead d-block m-b-16\"\n ></c8y-operation-result>\n </div>\n </div>\n <ng-template #failedDeploy>\n <div class=\"modal-body fadeIn animated text-center\" style=\"min-height: 257px\">\n <c8y-operation-result\n type=\"error\"\n [size]=\"84\"\n [vertical]=\"true\"\n text=\"{{ 'Application creation failed' | translate }}\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n </ng-container>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\"\n >\n {{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\n </button>\n\n <button\n (click)=\"deployApp()\"\n *ngIf=\"!isDeployed\"\n [disabled]=\"inProgress || !canDeploy\"\n [ngClass]=\"{ 'btn-pending': inProgress }\"\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Deploy' | translate }}\"\n >\n {{ 'Deploy' | translate }}\n </button>\n</c8y-wizard-footer>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.ProgressBarComponent, selector: "c8y-progress-bar", inputs: ["message", "progress"] }, { kind: "component", type: i3.OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.WizardHeaderComponent, selector: "c8y-wizard-header" }, { kind: "component", type: i3.WizardBodyComponent, selector: "c8y-wizard-body" }, { kind: "component", type: i3.WizardFooterComponent, selector: "c8y-wizard-footer" }, { kind: "component", type: i1.ApplicationPropertiesFormComponent, selector: "c8y-application-properties-form", inputs: ["application", "disabled"] }, { kind: "component", type: i1.PackageVersionSelectComponent, selector: "c8y-package-version-select", inputs: ["label", "packageContextPath", "packageId"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
137
150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DeployApplicationComponent, decorators: [{
138
151
  type: Component,
139
152
  args: [{ selector: 'c8y-deploy-application', template: "<c8y-wizard-header>\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"output\"></i>\n <h4 id=\"modal-title\">{{ 'Deploy application' | translate }}</h4>\n </div>\n</c8y-wizard-header>\n\n<c8y-wizard-body id=\"modal-body\">\n <ng-container *ngIf=\"!isDeployed\">\n <div class=\"fadeIn animated d-flex a-i-center j-c-center d-col\" style=\"min-height: 309px\">\n <p\n class=\"bg-level-0 fit-w p-16 text-center text-medium sticky-top bg-level-0 separator-bottom\"\n *ngIf=\"!inProgress\"\n >\n {{ headerText | translate }}\n </p>\n <c8y-application-properties-form\n *ngIf=\"!inProgress\"\n [application]=\"newAppConfig\"\n class=\"d-block fit-w bg-level-1\"\n ></c8y-application-properties-form>\n\n <ng-container *ngIf=\"!inProgress\">\n <div [ngStyle]=\"{ padding: '0 16px' }\" class=\"d-block fit-w bg-gray-white\">\n <c8y-package-version-select [ngModel]=\"model.selected\" (ngModelChange)=\"onAppVersionSelect($event)\" [packageId]=\"package?.id\" [label]=\"'Use package version' | translate\"></c8y-package-version-select>\n </div>\n </ng-container>\n\n <c8y-progress-bar\n *ngIf=\"inProgress\"\n [message]=\"'Deploying\u2026' | translate\"\n class=\"text-center\"\n ></c8y-progress-bar>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"isDeployed\">\n <div\n *ngIf=\"deployedWithSuccess; else failedDeploy\"\n class=\"modal-body fadeIn animated\"\n style=\"min-height: 309px\"\n >\n <div class=\"d-flex a-i-center j-c-center d-col\">\n <c8y-operation-result\n type=\"success\"\n [size]=\"84\"\n [vertical]=\"true\"\n [text]=\"successMessageTemplate | translate: { packageName: package.name }\"\n class=\"lead d-block m-b-16\"\n ></c8y-operation-result>\n </div>\n </div>\n <ng-template #failedDeploy>\n <div class=\"modal-body fadeIn animated text-center\" style=\"min-height: 257px\">\n <c8y-operation-result\n type=\"error\"\n [size]=\"84\"\n [vertical]=\"true\"\n text=\"{{ 'Application creation failed' | translate }}\"\n class=\"lead\"\n ></c8y-operation-result>\n </div>\n </ng-template>\n </ng-container>\n</c8y-wizard-body>\n\n<c8y-wizard-footer>\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\"\n >\n {{ (isDeployed && deployedWithSuccess ? doneLabel : cancelLabel) | translate }}\n </button>\n\n <button\n (click)=\"deployApp()\"\n *ngIf=\"!isDeployed\"\n [disabled]=\"inProgress || !canDeploy\"\n [ngClass]=\"{ 'btn-pending': inProgress }\"\n class=\"btn btn-primary\"\n type=\"button\"\n title=\"{{ 'Deploy' | translate }}\"\n >\n {{ 'Deploy' | translate }}\n </button>\n</c8y-wizard-footer>\n" }]
140
- }], ctorParameters: function () { return [{ type: i1.EcosystemService }, { type: i2.ApplicationService }, { type: i3.WizardComponent }, { type: i4.TranslateService }, { type: i2.InventoryService }]; }, propDecorators: { applicationPropertiesForm: [{
153
+ }], ctorParameters: function () { return [{ type: i1.EcosystemService }, { type: i2.ApplicationService }, { type: i3.WizardComponent }, { type: i4.TranslateService }, { type: i2.InventoryService }, { type: i3.GainsightService }]; }, propDecorators: { applicationPropertiesForm: [{
141
154
  type: ViewChild,
142
155
  args: [ApplicationPropertiesFormComponent]
143
156
  }] } });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9kZXBsb3ktYXBwbGljYXRpb24vZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9kZXBsb3ktYXBwbGljYXRpb24vZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsZ0JBQWdCLEVBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBTTFGLE1BQU0sT0FBTywwQkFBMEI7SUEwQnJDLFlBQ1UsZ0JBQWtDLEVBQ2xDLGtCQUFzQyxFQUN0QyxlQUFnQyxFQUNoQyxTQUEyQixFQUMzQixnQkFBa0M7UUFKbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBOUI1QyxlQUFVLEdBQVksSUFBSSxDQUFDO1FBRTNCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsd0JBQW1CLEdBQVksS0FB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SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFTyxhQUFhO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ3RELFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7dUhBbEpVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLHlIQWUxQixrQ0FBa0MsZ0RDL0IvQyxrOEZBd0ZBOzJGRHhFYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0Usd0JBQXdCO29PQW1CbEMseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJbnZlbnRvcnlTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGdldHRleHQsIFdpemFyZENvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRWNvc3lzdGVtU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblByb3BlcnRpZXNGb3JtQ29tcG9uZW50IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRlcGxveS1hcHBsaWNhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXBsb3ktYXBwbGljYXRpb24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERlcGxveUFwcGxpY2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgaW5Qcm9ncmVzczogYm9vbGVhbiA9IHRydWU7XG4gIHBhY2thZ2U6IElBcHBsaWNhdGlvbjtcbiAgaXNEZXBsb3llZDogYm9vbGVhbiA9IGZhbHNlO1xuICBkZXBsb3llZFdpdGhTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIG5ld0FwcENvbmZpZzogSUFwcGxpY2F0aW9uO1xuXG4gIG1vZGVsID0ge1xuICAgIHNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgYmluYXJ5OiB7XG4gICAgICBpZDogdW5kZWZpbmVkXG4gICAgfVxuICB9O1xuICBjYW5EZXBsb3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKEFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm1Db21wb25lbnQpXG4gIGFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm06IEFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm1Db21wb25lbnQ7XG5cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb25UZW1wbGF0ZTogc3RyaW5nID0gZ2V0dGV4dChcbiAgICAnRGVwbG95IGFwcGxpY2F0aW9uIHVzaW5nIFwie3sgcGFja2FnZU5hbWUgfX1cIiBwYWNrYWdlJ1xuICApO1xuICByZWFkb25seSBzdWNjZXNzTWVzc2FnZVRlbXBsYXRlID0gZ2V0dGV4dCgnQXBwbGljYXRpb24gXCJ7eyBwYWNrYWdlTmFtZSB9fVwiIGNyZWF0ZWQnKTtcbiAgcmVhZG9ubHkgZG9uZUxhYmVsID0gZ2V0dGV4dCgnRG9uZScpO1xuICByZWFkb25seSBjYW5jZWxMYWJlbCA9IGdldHRleHQoJ0NhbmNlbCcpO1xuICBoZWFkZXJUZXh0OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aXphcmRDb21wb25lbnQ6IFdpemFyZENvbXBvbmVudCxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5wYWNrYWdlID0gKHRoaXMud2l6YXJkQ29tcG9uZW50IGFzIGFueSkucGFja2FnZTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcGxpY2F0aW9ucygpKS5kYXRhO1xuICAgIHRoaXMubmV3QXBwQ29uZmlnID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldFVuaXF1ZUFwcENvbmZpZyh0aGlzLnBhY2thZ2UsIGFwcHMpO1xuICAgIHRoaXMuaGVhZGVyVGV4dCA9IHRoaXMuZ2V0SGVhZGVyVGV4dCgpO1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZGVwbG95QXBwKCkge1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgY29uc3QgZm9ybUdyb3VwVmFsdWUgPSB0aGlzLmFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm0uZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICAvLyBDcmVhdGUgbmV3IGFwcCBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuY3JlYXRlQ29uZmlnKHRoaXMucGFja2FnZSwgZm9ybUdyb3VwVmFsdWUpO1xuICAgIGNvbmZpZy52ZXJzaW9uID0gdGhpcy5tb2RlbC5zZWxlY3RlZC52ZXJzaW9uO1xuICAgIGNvbmZpZy5pc1NldHVwID0gdHJ1ZTtcbiAgICBpZiAoIWNvbmZpZy5tYW5pZmVzdCkge1xuICAgICAgY29uZmlnLm1hbmlmZXN0ID0ge307XG4gICAgfVxuICAgIGNvbmZpZy5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjb25maWcubWFuaWZlc3Quc291cmNlID0gdGhpcy5wYWNrYWdlLmlkO1xuICAgIGNvbmZpZy5tYW5pZmVzdC5wYWNrYWdlID0gJ2JsdWVwcmludCc7XG4gICAgY29uZmlnLnJlc291cmNlc1VybCA9ICcvJztcblxuICAgIC8vIENyZWF0ZSBuZXcgYXBwXG4gICAgY29uc3QgbmV3QXBwID0gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNyZWF0ZShjb25maWcpKS5kYXRhO1xuICAgIC8vIEJpbmFyeVxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgYmluYXJ5IGRldGFpbHNcbiAgICAgIGNvbnN0IHsgZGF0YTogYmluYXJ5RGV0YWlscyB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRldGFpbChcbiAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZC5iaW5hcnlJZFxuICAgICAgKTtcblxuICAgICAgLy8gR2V0IGJpbmFyeSBmcm9tIHNwZWNpZmljIHBhY2thZ2UgdmVyc2lvblxuICAgICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEJpbmFyeSh0aGlzLnBhY2thZ2UsIHtcbiAgICAgICAgaWQ6IHRoaXMubW9kZWwuc2VsZWN0ZWQuYmluYXJ5SWRcbiAgICAgIH0pO1xuICAgICAgLy8gQ3JlYXRlIHppcFxuICAgICAgY29uc3QgZmlsZUJpbmFyeSA9IG5ldyBCbG9iKFtiaW5hcnldLCB7IHR5cGU6IGJpbmFyeURldGFpbHMuY29udGVudFR5cGUgfSk7XG4gICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2ZpbGVCaW5hcnldLCBiaW5hcnlEZXRhaWxzLm5hbWUsIHtcbiAgICAgICAgdHlwZTogYmluYXJ5RGV0YWlscy5jb250ZW50VHlwZVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVwbG9hZCBiaW5hcnkgdG8gbmV3IGFwcFxuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwbG9hZEFyY2hpdmVUb0FwcChmaWxlLCBuZXdBcHApO1xuICAgICAgLy8gVXBkYXRlIG1hbmlmZXN0XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBkYXRlQXBwTWFuaWZlc3QobmV3QXBwLCB0aGlzLnBhY2thZ2UpO1xuXG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3I/LnJlcz8uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKG5ld0FwcC5pZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZmFsbGJhY2tUb0Nsb25lTGF0ZXN0KGNvbmZpZyk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzRGVwbG95ZWQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmYWxsYmFja1RvQ2xvbmVMYXRlc3QoY29uZmlnKSB7XG4gICAgbGV0IGNsb25lZFBrZztcbiAgICB0cnkge1xuICAgICAgY2xvbmVkUGtnID0gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNsb25lKHRoaXMucGFja2FnZSkpLmRhdGE7XG5cbiAgICAgIC8vIGNsZWFuIG91dCBhbGwgZmFsc2VseSBjbG9uZWQgYXBwbGljYXRpb25WZXJzaW9ucywgd2UgZG9uJ3QgbmVlZCB0aGVtXG4gICAgICBmb3IgKGNvbnN0IGFwcFZlcnNpb24gb2YgY2xvbmVkUGtnLmFwcGxpY2F0aW9uVmVyc2lvbnMgYXMgSUFwcGxpY2F0aW9uVmVyc2lvbltdKSB7XG4gICAgICAgIGlmIChhcHBWZXJzaW9uLnRhZ3MuaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKGNsb25lZFBrZywgYXBwVmVyc2lvbi52ZXJzaW9uLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmRlbGV0ZVBhY2thZ2VWZXJzaW9uKGNsb25lZFBrZywge1xuICAgICAgICAgIHZlcnNpb246IGFwcFZlcnNpb24udmVyc2lvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjb25maWcudHlwZTtcbiAgICAgIGNvbmZpZy5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHsgZGF0YTogbmV3QXBwIH0gPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBkYXRlQXBwKFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IGNsb25lZFBrZy5pZCxcbiAgICAgICAgICBhY3RpdmVWZXJzaW9uSWQ6IGNsb25lZFBrZy5hY3RpdmVWZXJzaW9uSWQsXG4gICAgICAgICAgLi4uY29uZmlnXG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcE1hbmlmZXN0KG5ld0FwcCwgdGhpcy5wYWNrYWdlKTtcbiAgICAgIHRoaXMuZGVwbG95ZWRXaXRoU3VjY2VzcyA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5kZWxldGVBcHAoY2xvbmVkUGtnLmlkLCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5tYXJrQXNEZXBsb3llZCgpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMud2l6YXJkQ29tcG9uZW50LmNsb3NlKCk7XG4gIH1cblxuICBvbkFwcFZlcnNpb25TZWxlY3QoYXBwVmVyc2lvbjogSUFwcGxpY2F0aW9uVmVyc2lvbikge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwge1xuICAgICAgc2VsZWN0ZWQ6IGFwcFZlcnNpb25cbiAgICB9KTtcbiAgICB0aGlzLmNhbkRlcGxveSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIG1hcmtBc0RlcGxveWVkKCkge1xuICAgIHRoaXMuaXNEZXBsb3llZCA9IHRydWU7XG4gICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldEhlYWRlclRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5kZXNjcmlwdGlvblRlbXBsYXRlLCB7XG4gICAgICBwYWNrYWdlTmFtZTogdGhpcy5wYWNrYWdlLm5hbWVcbiAgICB9KTtcbiAgfVxufVxuIiwiPGM4eS13aXphcmQtaGVhZGVyPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGRpYWxvZy1oZWFkZXJcIj5cbiAgICA8aSBjOHlJY29uPVwib3V0cHV0XCI+PC9pPlxuICAgIDxoNCBpZD1cIm1vZGFsLXRpdGxlXCI+e3sgJ0RlcGxveSBhcHBsaWNhdGlvbicgfCB0cmFuc2xhdGUgfX08L2g0PlxuICA8L2Rpdj5cbjwvYzh5LXdpemFyZC1oZWFkZXI+XG5cbjxjOHktd2l6YXJkLWJvZHkgaWQ9XCJtb2RhbC1ib2R5XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNEZXBsb3llZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmYWRlSW4gYW5pbWF0ZWQgZC1mbGV4IGEtaS1jZW50ZXIgai1jLWNlbnRlciBkLWNvbFwiIHN0eWxlPVwibWluLWhlaWdodDogMzA5cHhcIj5cbiAgICAgIDxwXG4gICAgICAgIGNsYXNzPVwiYmctbGV2ZWwtMCBmaXQtdyBwLTE2IHRleHQtY2VudGVyIHRleHQtbWVkaXVtIHN0aWNreS10b3AgYmctbGV2ZWwtMCBzZXBhcmF0b3ItYm90dG9tXCJcbiAgICAgICAgKm5nSWY9XCIhaW5Qcm9ncmVzc1wiXG4gICAgICA+XG4gICAgICAgIHt7IGhlYWRlclRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxjOHktYXBwbGljYXRpb24tcHJvcGVydGllcy1mb3JtXG4gICAgICAgICpuZ0lmPVwiIWluUHJvZ3Jlc3NcIlxuICAgICAgICBbYXBwbGljYXRpb25dPVwibmV3QXBwQ29uZmlnXCJcbiAgICAgICAgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWxldmVsLTFcIlxuICAgICAgPjwvYzh5LWFwcGxpY2F0aW9uLXByb3BlcnRpZXMtZm9ybT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpblByb2dyZXNzXCI+XG4gICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBwYWRkaW5nOiAnMCAxNnB4JyB9XCIgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWdyYXktd2hpdGVcIj5cbiAgICAgICAgICA8Yzh5LXBhY2thZ2UtdmVyc2lvbi1zZWxlY3QgW25nTW9kZWxdPVwibW9kZWwuc2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJvbkFwcFZlcnNpb25TZWxlY3QoJGV2ZW50KVwiIFtwYWNrYWdlSWRdPVwicGFja2FnZT8uaWRcIiBbbGFiZWxdPVwiJ1VzZSBwYWNrYWdlIHZlcnNpb24nIHwgdHJhbnNsYXRlXCI+PC9jOHktcGFja2FnZS12ZXJzaW9uLXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGM4eS1wcm9ncmVzcy1iYXJcbiAgICAgICAgKm5nSWY9XCJpblByb2dyZXNzXCJcbiAgICAgICAgW21lc3NhZ2VdPVwiJ0RlcGxveWluZ+KApicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyXCJcbiAgICAgID48L2M4eS1wcm9ncmVzcy1iYXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlcGxveWVkXCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJkZXBsb3llZFdpdGhTdWNjZXNzOyBlbHNlIGZhaWxlZERlcGxveVwiXG4gICAgICBjbGFzcz1cIm1vZGFsLWJvZHkgZmFkZUluIGFuaW1hdGVkXCJcbiAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMzA5cHhcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBqLWMtY2VudGVyIGQtY29sXCI+XG4gICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgIFt0ZXh0XT1cInN1Y2Nlc3NNZXNzYWdlVGVtcGxhdGUgfCB0cmFuc2xhdGU6IHsgcGFja2FnZU5hbWU6IHBhY2thZ2UubmFtZSB9XCJcbiAgICAgICAgICBjbGFzcz1cImxlYWQgZC1ibG9jayBtLWItMTZcIlxuICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjZmFpbGVkRGVwbG95PlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgZmFkZUluIGFuaW1hdGVkIHRleHQtY2VudGVyXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAyNTdweFwiPlxuICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgdGV4dD1cInt7ICdBcHBsaWNhdGlvbiBjcmVhdGlvbiBmYWlsZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBjbGFzcz1cImxlYWRcIlxuICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9jOHktd2l6YXJkLWJvZHk+XG5cbjxjOHktd2l6YXJkLWZvb3Rlcj5cbiAgPGJ1dHRvblxuICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgIHRpdGxlPVwie3sgKGlzRGVwbG95ZWQgJiYgZGVwbG95ZWRXaXRoU3VjY2VzcyA/IGRvbmVMYWJlbCA6IGNhbmNlbExhYmVsKSB8IHRyYW5zbGF0ZSB9fVwiXG4gID5cbiAgICB7eyAoaXNEZXBsb3llZCAmJiBkZXBsb3llZFdpdGhTdWNjZXNzID8gZG9uZUxhYmVsIDogY2FuY2VsTGFiZWwpIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICAoY2xpY2spPVwiZGVwbG95QXBwKClcIlxuICAgICpuZ0lmPVwiIWlzRGVwbG95ZWRcIlxuICAgIFtkaXNhYmxlZF09XCJpblByb2dyZXNzIHx8ICFjYW5EZXBsb3lcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogaW5Qcm9ncmVzcyB9XCJcbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJ7eyAnRGVwbG95JyB8IHRyYW5zbGF0ZSB9fVwiXG4gID5cbiAgICB7eyAnRGVwbG95JyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LXdpemFyZC1mb290ZXI+XG4iXX0=
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9kZXBsb3ktYXBwbGljYXRpb24vZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9kZXBsb3ktYXBwbGljYXRpb24vZGVwbG95LWFwcGxpY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsZ0JBQWdCLEVBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQyxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ25CLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBTXZELE1BQU0sT0FBTywwQkFBMEI7SUE0QnJDLFlBQ1UsZ0JBQWtDLEVBQ2xDLGtCQUFzQyxFQUN0QyxlQUFnQyxFQUNoQyxTQUEyQixFQUMzQixnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBTGxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBakM1QyxxQkFBZ0IsR0FBRyxRQUFRLENBQUMsSUFBSSxD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Q0wsQ0FBQzs7dUhBdktVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLHlIQWlCMUIsa0NBQWtDLGdEQ3BDL0MsazhGQXdGQTsyRkRyRWEsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLHdCQUF3QjttUUFxQmxDLHlCQUF5QjtzQkFEeEIsU0FBUzt1QkFBQyxrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblNlcnZpY2UsXG4gIElBcHBsaWNhdGlvbixcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbixcbiAgSW52ZW50b3J5U2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBHYWluc2lnaHRTZXJ2aWNlLCBXaXphcmRDb21wb25lbnQsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm1Db21wb25lbnQsXG4gIEVjb3N5c3RlbVNlcnZpY2UsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGVwbG95LWFwcGxpY2F0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RlcGxveS1hcHBsaWNhdGlvbi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGVwbG95QXBwbGljYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcblxuICBpblByb2dyZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgcGFja2FnZTogSUFwcGxpY2F0aW9uO1xuICBpc0RlcGxveWVkOiBib29sZWFuID0gZmFsc2U7XG4gIGRlcGxveWVkV2l0aFN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbmV3QXBwQ29uZmlnOiBJQXBwbGljYXRpb247XG5cbiAgbW9kZWwgPSB7XG4gICAgc2VsZWN0ZWQ6IHVuZGVmaW5lZCxcbiAgICBiaW5hcnk6IHtcbiAgICAgIGlkOiB1bmRlZmluZWRcbiAgICB9XG4gIH07XG4gIGNhbkRlcGxveTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoQXBwbGljYXRpb25Qcm9wZXJ0aWVzRm9ybUNvbXBvbmVudClcbiAgYXBwbGljYXRpb25Qcm9wZXJ0aWVzRm9ybTogQXBwbGljYXRpb25Qcm9wZXJ0aWVzRm9ybUNvbXBvbmVudDtcblxuICByZWFkb25seSBkZXNjcmlwdGlvblRlbXBsYXRlOiBzdHJpbmcgPSBnZXR0ZXh0KFxuICAgICdEZXBsb3kgYXBwbGljYXRpb24gdXNpbmcgXCJ7eyBwYWNrYWdlTmFtZSB9fVwiIHBhY2thZ2UnXG4gICk7XG4gIHJlYWRvbmx5IHN1Y2Nlc3NNZXNzYWdlVGVtcGxhdGUgPSBnZXR0ZXh0KCdBcHBsaWNhdGlvbiBcInt7IHBhY2thZ2VOYW1lIH19XCIgY3JlYXRlZCcpO1xuICByZWFkb25seSBkb25lTGFiZWwgPSBnZXR0ZXh0KCdEb25lJyk7XG4gIHJlYWRvbmx5IGNhbmNlbExhYmVsID0gZ2V0dGV4dCgnQ2FuY2VsJyk7XG4gIGhlYWRlclRleHQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHdpemFyZENvbXBvbmVudDogV2l6YXJkQ29tcG9uZW50LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5wYWNrYWdlID0gKHRoaXMud2l6YXJkQ29tcG9uZW50IGFzIGFueSkucGFja2FnZTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcGxpY2F0aW9ucygpKS5kYXRhO1xuICAgIHRoaXMubmV3QXBwQ29uZmlnID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldFVuaXF1ZUFwcENvbmZpZyh0aGlzLnBhY2thZ2UsIGFwcHMpO1xuICAgIHRoaXMuaGVhZGVyVGV4dCA9IHRoaXMuZ2V0SGVhZGVyVGV4dCgpO1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZGVwbG95QXBwKCkge1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgY29uc3QgZm9ybUdyb3VwVmFsdWUgPSB0aGlzLmFwcGxpY2F0aW9uUHJvcGVydGllc0Zvcm0uZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICAvLyBDcmVhdGUgbmV3IGFwcCBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuY3JlYXRlQ29uZmlnKHRoaXMucGFja2FnZSwgZm9ybUdyb3VwVmFsdWUpO1xuICAgIGNvbmZpZy52ZXJzaW9uID0gdGhpcy5tb2RlbC5zZWxlY3RlZC52ZXJzaW9uO1xuICAgIGNvbmZpZy5pc1NldHVwID0gdHJ1ZTtcbiAgICBpZiAoIWNvbmZpZy5tYW5pZmVzdCkge1xuICAgICAgY29uZmlnLm1hbmlmZXN0ID0ge307XG4gICAgfVxuICAgIGNvbmZpZy5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjb25maWcubWFuaWZlc3Quc291cmNlID0gdGhpcy5wYWNrYWdlLmlkO1xuICAgIGNvbmZpZy5tYW5pZmVzdC5wYWNrYWdlID0gJ2JsdWVwcmludCc7XG4gICAgY29uZmlnLnJlc291cmNlc1VybCA9ICcvJztcblxuICAgIC8vIENyZWF0ZSBuZXcgYXBwXG4gICAgY29uc3QgbmV3QXBwID0gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNyZWF0ZShjb25maWcpKS5kYXRhO1xuICAgIC8vIEJpbmFyeVxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgYmluYXJ5IGRldGFpbHNcbiAgICAgIGNvbnN0IHsgZGF0YTogYmluYXJ5RGV0YWlscyB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRldGFpbChcbiAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZC5iaW5hcnlJZFxuICAgICAgKTtcblxuICAgICAgLy8gR2V0IGJpbmFyeSBmcm9tIHNwZWNpZmljIHBhY2thZ2UgdmVyc2lvblxuICAgICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEJpbmFyeSh0aGlzLnBhY2thZ2UsIHtcbiAgICAgICAgaWQ6IHRoaXMubW9kZWwuc2VsZWN0ZWQuYmluYXJ5SWRcbiAgICAgIH0pO1xuICAgICAgLy8gQ3JlYXRlIHppcFxuICAgICAgY29uc3QgZmlsZUJpbmFyeSA9IG5ldyBCbG9iKFtiaW5hcnldLCB7IHR5cGU6IGJpbmFyeURldGFpbHMuY29udGVudFR5cGUgfSk7XG4gICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2ZpbGVCaW5hcnldLCBiaW5hcnlEZXRhaWxzLm5hbWUsIHtcbiAgICAgICAgdHlwZTogYmluYXJ5RGV0YWlscy5jb250ZW50VHlwZVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVwbG9hZCBiaW5hcnkgdG8gbmV3IGFwcFxuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwbG9hZEFyY2hpdmVUb0FwcChmaWxlLCBuZXdBcHApO1xuICAgICAgLy8gVXBkYXRlIG1hbmlmZXN0XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBkYXRlQXBwTWFuaWZlc3QobmV3QXBwLCB0aGlzLnBhY2thZ2UpO1xuXG4gICAgICB0aGlzLmRlcGxveWVkV2l0aFN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuREVQTE9ZX0FQUExJQ0FUSU9OLFxuICAgICAgICB7XG4gICAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuREVQTE9ZX0FQUExJQ0FUSU9OLFxuICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkRFUExPWV9BUFBMSUNBVElPTixcbiAgICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5ERVBMT1lFRCxcbiAgICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3I/LnJlcz8uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKG5ld0FwcC5pZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZmFsbGJhY2tUb0Nsb25lTGF0ZXN0KGNvbmZpZyk7XG4gICAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoXG4gICAgICAgICAgUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuREVQTE9ZX0FQUExJQ0FUSU9OLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLkRFUExPWV9BUFBMSUNBVElPTixcbiAgICAgICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkRFUExPWV9BUFBMSUNBVElPTixcbiAgICAgICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlNFUlZFUl9GQUlMVVJFLFxuICAgICAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzRGVwbG95ZWQoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmYWxsYmFja1RvQ2xvbmVMYXRlc3QoY29uZmlnKSB7XG4gICAgbGV0IGNsb25lZFBrZztcbiAgICB0cnkge1xuICAgICAgY2xvbmVkUGtnID0gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNsb25lKHRoaXMucGFja2FnZSkpLmRhdGE7XG5cbiAgICAgIC8vIGNsZWFuIG91dCBhbGwgZmFsc2VseSBjbG9uZWQgYXBwbGljYXRpb25WZXJzaW9ucywgd2UgZG9uJ3QgbmVlZCB0aGVtXG4gICAgICBmb3IgKGNvbnN0IGFwcFZlcnNpb24gb2YgY2xvbmVkUGtnLmFwcGxpY2F0aW9uVmVyc2lvbnMgYXMgSUFwcGxpY2F0aW9uVmVyc2lvbltdKSB7XG4gICAgICAgIGlmIChhcHBWZXJzaW9uLnRhZ3MuaW5jbHVkZXMoJ2xhdGVzdCcpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKGNsb25lZFBrZywgYXBwVmVyc2lvbi52ZXJzaW9uLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmRlbGV0ZVBhY2thZ2VWZXJzaW9uKGNsb25lZFBrZywge1xuICAgICAgICAgIHZlcnNpb246IGFwcFZlcnNpb24udmVyc2lvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjb25maWcudHlwZTtcbiAgICAgIGNvbmZpZy5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHsgZGF0YTogbmV3QXBwIH0gPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudXBkYXRlQXBwKFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6IGNsb25lZFBrZy5pZCxcbiAgICAgICAgICBhY3RpdmVWZXJzaW9uSWQ6IGNsb25lZFBrZy5hY3RpdmVWZXJzaW9uSWQsXG4gICAgICAgICAgLi4uY29uZmlnXG4gICAgICAgIH0sXG4gICAgICAgIGZhbHNlXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwZGF0ZUFwcE1hbmlmZXN0KG5ld0FwcCwgdGhpcy5wYWNrYWdlKTtcbiAgICAgIHRoaXMuZGVwbG95ZWRXaXRoU3VjY2VzcyA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5kZWxldGVBcHAoY2xvbmVkUGtnLmlkLCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5tYXJrQXNEZXBsb3llZCgpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMud2l6YXJkQ29tcG9uZW50LmNsb3NlKCk7XG4gIH1cblxuICBvbkFwcFZlcnNpb25TZWxlY3QoYXBwVmVyc2lvbjogSUFwcGxpY2F0aW9uVmVyc2lvbikge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwge1xuICAgICAgc2VsZWN0ZWQ6IGFwcFZlcnNpb25cbiAgICB9KTtcbiAgICB0aGlzLmNhbkRlcGxveSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIG1hcmtBc0RlcGxveWVkKCkge1xuICAgIHRoaXMuaXNEZXBsb3llZCA9IHRydWU7XG4gICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldEhlYWRlclRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5kZXNjcmlwdGlvblRlbXBsYXRlLCB7XG4gICAgICBwYWNrYWdlTmFtZTogdGhpcy5wYWNrYWdlLm5hbWVcbiAgICB9KTtcbiAgfVxufVxuIiwiPGM4eS13aXphcmQtaGVhZGVyPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGRpYWxvZy1oZWFkZXJcIj5cbiAgICA8aSBjOHlJY29uPVwib3V0cHV0XCI+PC9pPlxuICAgIDxoNCBpZD1cIm1vZGFsLXRpdGxlXCI+e3sgJ0RlcGxveSBhcHBsaWNhdGlvbicgfCB0cmFuc2xhdGUgfX08L2g0PlxuICA8L2Rpdj5cbjwvYzh5LXdpemFyZC1oZWFkZXI+XG5cbjxjOHktd2l6YXJkLWJvZHkgaWQ9XCJtb2RhbC1ib2R5XCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNEZXBsb3llZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmYWRlSW4gYW5pbWF0ZWQgZC1mbGV4IGEtaS1jZW50ZXIgai1jLWNlbnRlciBkLWNvbFwiIHN0eWxlPVwibWluLWhlaWdodDogMzA5cHhcIj5cbiAgICAgIDxwXG4gICAgICAgIGNsYXNzPVwiYmctbGV2ZWwtMCBmaXQtdyBwLTE2IHRleHQtY2VudGVyIHRleHQtbWVkaXVtIHN0aWNreS10b3AgYmctbGV2ZWwtMCBzZXBhcmF0b3ItYm90dG9tXCJcbiAgICAgICAgKm5nSWY9XCIhaW5Qcm9ncmVzc1wiXG4gICAgICA+XG4gICAgICAgIHt7IGhlYWRlclRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxjOHktYXBwbGljYXRpb24tcHJvcGVydGllcy1mb3JtXG4gICAgICAgICpuZ0lmPVwiIWluUHJvZ3Jlc3NcIlxuICAgICAgICBbYXBwbGljYXRpb25dPVwibmV3QXBwQ29uZmlnXCJcbiAgICAgICAgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWxldmVsLTFcIlxuICAgICAgPjwvYzh5LWFwcGxpY2F0aW9uLXByb3BlcnRpZXMtZm9ybT5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpblByb2dyZXNzXCI+XG4gICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBwYWRkaW5nOiAnMCAxNnB4JyB9XCIgY2xhc3M9XCJkLWJsb2NrIGZpdC13IGJnLWdyYXktd2hpdGVcIj5cbiAgICAgICAgICA8Yzh5LXBhY2thZ2UtdmVyc2lvbi1zZWxlY3QgW25nTW9kZWxdPVwibW9kZWwuc2VsZWN0ZWRcIiAobmdNb2RlbENoYW5nZSk9XCJvbkFwcFZlcnNpb25TZWxlY3QoJGV2ZW50KVwiIFtwYWNrYWdlSWRdPVwicGFja2FnZT8uaWRcIiBbbGFiZWxdPVwiJ1VzZSBwYWNrYWdlIHZlcnNpb24nIHwgdHJhbnNsYXRlXCI+PC9jOHktcGFja2FnZS12ZXJzaW9uLXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGM4eS1wcm9ncmVzcy1iYXJcbiAgICAgICAgKm5nSWY9XCJpblByb2dyZXNzXCJcbiAgICAgICAgW21lc3NhZ2VdPVwiJ0RlcGxveWluZ+KApicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyXCJcbiAgICAgID48L2M4eS1wcm9ncmVzcy1iYXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlcGxveWVkXCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJkZXBsb3llZFdpdGhTdWNjZXNzOyBlbHNlIGZhaWxlZERlcGxveVwiXG4gICAgICBjbGFzcz1cIm1vZGFsLWJvZHkgZmFkZUluIGFuaW1hdGVkXCJcbiAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMzA5cHhcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBqLWMtY2VudGVyIGQtY29sXCI+XG4gICAgICAgIDxjOHktb3BlcmF0aW9uLXJlc3VsdFxuICAgICAgICAgIHR5cGU9XCJzdWNjZXNzXCJcbiAgICAgICAgICBbc2l6ZV09XCI4NFwiXG4gICAgICAgICAgW3ZlcnRpY2FsXT1cInRydWVcIlxuICAgICAgICAgIFt0ZXh0XT1cInN1Y2Nlc3NNZXNzYWdlVGVtcGxhdGUgfCB0cmFuc2xhdGU6IHsgcGFja2FnZU5hbWU6IHBhY2thZ2UubmFtZSB9XCJcbiAgICAgICAgICBjbGFzcz1cImxlYWQgZC1ibG9jayBtLWItMTZcIlxuICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjZmFpbGVkRGVwbG95PlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgZmFkZUluIGFuaW1hdGVkIHRleHQtY2VudGVyXCIgc3R5bGU9XCJtaW4taGVpZ2h0OiAyNTdweFwiPlxuICAgICAgICA8Yzh5LW9wZXJhdGlvbi1yZXN1bHRcbiAgICAgICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgICAgIFtzaXplXT1cIjg0XCJcbiAgICAgICAgICBbdmVydGljYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgdGV4dD1cInt7ICdBcHBsaWNhdGlvbiBjcmVhdGlvbiBmYWlsZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBjbGFzcz1cImxlYWRcIlxuICAgICAgICA+PC9jOHktb3BlcmF0aW9uLXJlc3VsdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9jOHktd2l6YXJkLWJvZHk+XG5cbjxjOHktd2l6YXJkLWZvb3Rlcj5cbiAgPGJ1dHRvblxuICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgIHRpdGxlPVwie3sgKGlzRGVwbG95ZWQgJiYgZGVwbG95ZWRXaXRoU3VjY2VzcyA/IGRvbmVMYWJlbCA6IGNhbmNlbExhYmVsKSB8IHRyYW5zbGF0ZSB9fVwiXG4gID5cbiAgICB7eyAoaXNEZXBsb3llZCAmJiBkZXBsb3llZFdpdGhTdWNjZXNzID8gZG9uZUxhYmVsIDogY2FuY2VsTGFiZWwpIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICAoY2xpY2spPVwiZGVwbG95QXBwKClcIlxuICAgICpuZ0lmPVwiIWlzRGVwbG95ZWRcIlxuICAgIFtkaXNhYmxlZF09XCJpblByb2dyZXNzIHx8ICFjYW5EZXBsb3lcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogaW5Qcm9ncmVzcyB9XCJcbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJ7eyAnRGVwbG95JyB8IHRyYW5zbGF0ZSB9fVwiXG4gID5cbiAgICB7eyAnRGVwbG95JyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LXdpemFyZC1mb290ZXI+XG4iXX0=
@@ -1,15 +1,18 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { ApplicationAvailability, ApplicationService } from '@c8y/client';
3
- import { AlertService, AppStateService, gettext, ModalService } from '@c8y/ngx-components';
3
+ import { AlertService, AppStateService, GainsightService, ModalService, gettext } from '@c8y/ngx-components';
4
+ import { PRODUCT_EXPERIENCE } from '@c8y/ngx-components/ecosystem/shared';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@c8y/ngx-components";
6
7
  import * as i2 from "@c8y/client";
7
8
  export class PackageAvailabilityService {
8
- constructor(appState, alert, modal, application) {
9
+ constructor(appState, alert, modal, application, gainsightService) {
9
10
  this.appState = appState;
10
11
  this.alert = alert;
11
12
  this.modal = modal;
12
13
  this.application = application;
14
+ this.gainsightService = gainsightService;
15
+ this.CURRENT_LOCATION = location.href;
13
16
  }
14
17
  async askIfAvailabilityShouldBeSetTo(applicationPackage, availability) {
15
18
  // availability does not matter for tenant that do not have or can create subtenants
@@ -26,11 +29,21 @@ export class PackageAvailabilityService {
26
29
  try {
27
30
  const { data: app } = await this.application.updateApplicationAvailability(applicationPackage, availability);
28
31
  this.alert.success(gettext('Updated package availability.'));
32
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.AVAILABILITY, {
33
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.AVAILABILITY_CHANGE,
34
+ result: availability.toString().toLocaleLowerCase(),
35
+ url: this.CURRENT_LOCATION
36
+ });
29
37
  return app;
30
38
  }
31
39
  catch (e) {
32
40
  this.alert.warning(gettext('Failed to set package availability.'));
33
41
  this.alert.addServerFailure(e);
42
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.AVAILABILITY, {
43
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.AVAILABILITY_CHANGE,
44
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SERVER_FAILURE,
45
+ url: this.CURRENT_LOCATION
46
+ });
34
47
  return applicationPackage;
35
48
  }
36
49
  }
@@ -54,10 +67,10 @@ export class PackageAvailabilityService {
54
67
  }
55
68
  }
56
69
  }
57
- PackageAvailabilityService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PackageAvailabilityService, deps: [{ token: i1.AppStateService }, { token: i1.AlertService }, { token: i1.ModalService }, { token: i2.ApplicationService }], target: i0.ɵɵFactoryTarget.Injectable });
70
+ PackageAvailabilityService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PackageAvailabilityService, deps: [{ token: i1.AppStateService }, { token: i1.AlertService }, { token: i1.ModalService }, { token: i2.ApplicationService }, { token: i1.GainsightService }], target: i0.ɵɵFactoryTarget.Injectable });
58
71
  PackageAvailabilityService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PackageAvailabilityService, providedIn: 'root' });
59
72
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PackageAvailabilityService, decorators: [{
60
73
  type: Injectable,
61
74
  args: [{ providedIn: 'root' }]
62
- }], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i1.AlertService }, { type: i1.ModalService }, { type: i2.ApplicationService }]; } });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1hdmFpbGFiaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9wYWNrYWdlLWF2YWlsYWJpbGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFnQixNQUFNLGFBQWEsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFHM0YsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUNVLFFBQXlCLEVBQ3pCLEtBQW1CLEVBQ25CLEtBQW1CLEVBQ25CLFdBQStCO1FBSC9CLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7SUFDdEMsQ0FBQztJQUVKLEtBQUssQ0FBQyw4QkFBOEIsQ0FDbEMsa0JBQWdDLEVBQ2hDLFlBQXFDO1FBRXJDLG9GQUFvRjtRQUNwRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1lBQzFELE9BQU8sa0JBQWtCLENBQUM7U0FDM0I7UUFDRCxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDaEQ7UUFBQyxNQUFNO1lBQ04sZUFBZTtZQUNmLE9BQU8sa0JBQWtCLENBQUM7U0FDM0I7UUFFRCxJQUFJO1lBQ0YsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsNkJBQTZCLENBQ3hFLGtCQUFrQixFQUNsQixZQUFZLENBQ2IsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUM7WUFDN0QsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sa0JBQWtCLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLHFCQUFxQixDQUFDLFlBQXFDO1FBQ3ZFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVwRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDdEUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDbEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFlBQXFDO1FBQy9ELFFBQVEsWUFBWSxFQUFFO1lBQ3BCLEtBQUssdUJBQXVCLENBQUMsTUFBTTtnQkFDakMsT0FBTyxPQUFPLENBQ1osNkpBQTZKLENBQzlKLENBQUM7WUFDSixLQUFLLHVCQUF1QixDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sT0FBTyxDQUNaLHlLQUF5SyxDQUMxSyxDQUFDO1lBQ0osS0FBSyx1QkFBdUIsQ0FBQyxPQUFPO2dCQUNsQyxPQUFPLE9BQU8sQ0FDWix5SEFBeUgsQ0FDMUgsQ0FBQztZQUNKO2dCQUNFLE9BQU8sRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDOzt1SEEvRFUsMEJBQTBCOzJIQUExQiwwQkFBMEIsY0FEYixNQUFNOzJGQUNuQiwwQkFBMEI7a0JBRHRDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksIEFwcGxpY2F0aW9uU2VydmljZSwgSUFwcGxpY2F0aW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBBcHBTdGF0ZVNlcnZpY2UsIGdldHRleHQsIE1vZGFsU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFBhY2thZ2VBdmFpbGFiaWxpdHlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvbjogQXBwbGljYXRpb25TZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBhc2tJZkF2YWlsYWJpbGl0eVNob3VsZEJlU2V0VG8oXG4gICAgYXBwbGljYXRpb25QYWNrYWdlOiBJQXBwbGljYXRpb24sXG4gICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eVxuICApIHtcbiAgICAvLyBhdmFpbGFiaWxpdHkgZG9lcyBub3QgbWF0dGVyIGZvciB0ZW5hbnQgdGhhdCBkbyBub3QgaGF2ZSBvciBjYW4gY3JlYXRlIHN1YnRlbmFudHNcbiAgICBpZiAoIXRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZT8uYWxsb3dDcmVhdGVUZW5hbnRzKSB7XG4gICAgICByZXR1cm4gYXBwbGljYXRpb25QYWNrYWdlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vcGVuQXZhaWxhYmlsaXR5TW9kYWwoYXZhaWxhYmlsaXR5KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG1vZGFsIGNsb3NlZFxuICAgICAgcmV0dXJuIGFwcGxpY2F0aW9uUGFja2FnZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhOiBhcHAgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb24udXBkYXRlQXBwbGljYXRpb25BdmFpbGFiaWxpdHkoXG4gICAgICAgIGFwcGxpY2F0aW9uUGFja2FnZSxcbiAgICAgICAgYXZhaWxhYmlsaXR5XG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKGdldHRleHQoJ1VwZGF0ZWQgcGFja2FnZSBhdmFpbGFiaWxpdHkuJykpO1xuICAgICAgcmV0dXJuIGFwcDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcoZ2V0dGV4dCgnRmFpbGVkIHRvIHNldCBwYWNrYWdlIGF2YWlsYWJpbGl0eS4nKSk7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICByZXR1cm4gYXBwbGljYXRpb25QYWNrYWdlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb3BlbkF2YWlsYWJpbGl0eU1vZGFsKGF2YWlsYWJpbGl0eTogQXBwbGljYXRpb25BdmFpbGFiaWxpdHkpIHtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5nZXRDb25maXJtYXRpb25Cb2R5KGF2YWlsYWJpbGl0eSk7XG5cbiAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oZ2V0dGV4dCgnUGFja2FnZSBhdmFpbGFiaWxpdHknKSwgYm9keSwgJ2luZm8nLCB7XG4gICAgICBvazogZ2V0dGV4dCgnWWVzJyksXG4gICAgICBjYW5jZWw6IGdldHRleHQoJ05vJylcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29uZmlybWF0aW9uQm9keShhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5KTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGF2YWlsYWJpbGl0eSkge1xuICAgICAgY2FzZSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQ6XG4gICAgICAgIHJldHVybiBnZXR0ZXh0KFxuICAgICAgICAgICdEbyB5b3Ugd2FudCB0byBzZXQgdGhlIHBhY2thZ2UgYXZhaWxhYmlsaXR5IHRvIFwiU2hhcmVkXCI/IFRoaXMgd2lsbCBtYWtlIHRoZSBwYWNrYWdlIGF2YWlsYWJsZSB0byBhbGwgc3VidGVuYW50cyB3aXRob3V0IGV4cGxpY2l0bHkgc3Vic2NyaWJpbmcgdGhlIHBhY2thZ2UuJ1xuICAgICAgICApO1xuICAgICAgY2FzZSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5NQVJLRVQ6XG4gICAgICAgIHJldHVybiBnZXR0ZXh0KFxuICAgICAgICAgICdEbyB5b3Ugd2FudCB0byBzZXQgdGhlIHBhY2thZ2UgYXZhaWxhYmlsaXR5IHRvIFwiTWFya2V0XCI/IFRoaXMgd2lsbCBtYWtlIHRoZSBwYWNrYWdlIGF2YWlsYWJsZSB0byB5b3VyIG93biB0ZW5hbnQgYW5kIG5lZWRzIHRvIGJlIHN1YnNjcmliZWQgdG8gc3VidGVuYW50cyBpbmRpdmlkdWFsbHkuJ1xuICAgICAgICApO1xuICAgICAgY2FzZSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5QUklWQVRFOlxuICAgICAgICByZXR1cm4gZ2V0dGV4dChcbiAgICAgICAgICAnRG8geW91IHdhbnQgdG8gc2V0IHRoZSBwYWNrYWdlIGF2YWlsYWJpbGl0eSB0byBcIlByaXZhdGVcIj8gVGhpcyB3aWxsIG1ha2UgdGhlIHBhY2thZ2Ugb25seSBhdmFpbGFibGUgdG8geW91ciBvd24gdGVuYW50LidcbiAgICAgICAgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
75
+ }], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i1.AlertService }, { type: i1.ModalService }, { type: i2.ApplicationService }, { type: i1.GainsightService }]; } });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1hdmFpbGFiaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9wYWNrYWdlLWF2YWlsYWJpbGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFnQixNQUFNLGFBQWEsQ0FBQztBQUN4RixPQUFPLEVBQ0wsWUFBWSxFQUNaLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7O0FBRzFFLE1BQU0sT0FBTywwQkFBMEI7SUFHckMsWUFDVSxRQUF5QixFQUN6QixLQUFtQixFQUNuQixLQUFtQixFQUNuQixXQUErQixFQUMvQixnQkFBa0M7UUFKbEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBUDVDLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFROUIsQ0FBQztJQUVKLEtBQUssQ0FBQyw4QkFBOEIsQ0FDbEMsa0JBQWdDLEVBQ2hDLFlBQXFDO1FBRXJDLG9GQUFvRjtRQUNwRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1lBQzFELE9BQU8sa0JBQWtCLENBQUM7U0FDM0I7UUFDRCxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDaEQ7UUFBQyxNQUFNO1lBQ04sZUFBZTtZQUNmLE9BQU8sa0JBQWtCLENBQUM7U0FDM0I7UUFFRCxJQUFJO1lBQ0YsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsNkJBQTZCLENBQ3hFLGtCQUFrQixFQUNsQixZQUFZLENBQ2IsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtnQkFDdEYsTUFBTSxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsbUJBQW1CO2dCQUNuRSxNQUFNLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLGlCQUFpQixFQUFFO2dCQUNuRCxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjthQUMzQixDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQztTQUNaO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMscUNBQXFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtnQkFDdEYsTUFBTSxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsbUJBQW1CO2dCQUNuRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjO2dCQUM5RCxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjthQUMzQixDQUFDLENBQUM7WUFDSCxPQUFPLGtCQUFrQixDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxZQUFxQztRQUN2RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFcEQsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3RFLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUFxQztRQUMvRCxRQUFRLFlBQVksRUFBRTtZQUNwQixLQUFLLHVCQUF1QixDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sT0FBTyxDQUNaLDZKQUE2SixDQUM5SixDQUFDO1lBQ0osS0FBSyx1QkFBdUIsQ0FBQyxNQUFNO2dCQUNqQyxPQUFPLE9BQU8sQ0FDWix5S0FBeUssQ0FDMUssQ0FBQztZQUNKLEtBQUssdUJBQXVCLENBQUMsT0FBTztnQkFDbEMsT0FBTyxPQUFPLENBQ1oseUhBQXlILENBQzFILENBQUM7WUFDSjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQzs7dUhBNUVVLDBCQUEwQjsySEFBMUIsMEJBQTBCLGNBRGIsTUFBTTsyRkFDbkIsMEJBQTBCO2tCQUR0QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LCBBcHBsaWNhdGlvblNlcnZpY2UsIElBcHBsaWNhdGlvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBNb2RhbFNlcnZpY2UsXG4gIGdldHRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBQUk9EVUNUX0VYUEVSSUVOQ0UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFBhY2thZ2VBdmFpbGFiaWxpdHlTZXJ2aWNlIHtcbiAgQ1VSUkVOVF9MT0NBVElPTiA9IGxvY2F0aW9uLmhyZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvbjogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgYXNrSWZBdmFpbGFiaWxpdHlTaG91bGRCZVNldFRvKFxuICAgIGFwcGxpY2F0aW9uUGFja2FnZTogSUFwcGxpY2F0aW9uLFxuICAgIGF2YWlsYWJpbGl0eTogQXBwbGljYXRpb25BdmFpbGFiaWxpdHlcbiAgKSB7XG4gICAgLy8gYXZhaWxhYmlsaXR5IGRvZXMgbm90IG1hdHRlciBmb3IgdGVuYW50IHRoYXQgZG8gbm90IGhhdmUgb3IgY2FuIGNyZWF0ZSBzdWJ0ZW5hbnRzXG4gICAgaWYgKCF0aGlzLmFwcFN0YXRlLmN1cnJlbnRUZW5hbnQudmFsdWU/LmFsbG93Q3JlYXRlVGVuYW50cykge1xuICAgICAgcmV0dXJuIGFwcGxpY2F0aW9uUGFja2FnZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMub3BlbkF2YWlsYWJpbGl0eU1vZGFsKGF2YWlsYWJpbGl0eSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBtb2RhbCBjbG9zZWRcbiAgICAgIHJldHVybiBhcHBsaWNhdGlvblBhY2thZ2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YTogYXBwIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uLnVwZGF0ZUFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5KFxuICAgICAgICBhcHBsaWNhdGlvblBhY2thZ2UsXG4gICAgICAgIGF2YWlsYWJpbGl0eVxuICAgICAgKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdVcGRhdGVkIHBhY2thZ2UgYXZhaWxhYmlsaXR5LicpKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuQVZBSUxBQklMSVRZLCB7XG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkFWQUlMQUJJTElUWV9DSEFOR0UsXG4gICAgICAgIHJlc3VsdDogYXZhaWxhYmlsaXR5LnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoKSxcbiAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFwcDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcoZ2V0dGV4dCgnRmFpbGVkIHRvIHNldCBwYWNrYWdlIGF2YWlsYWJpbGl0eS4nKSk7XG4gICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLkFWQUlMQUJJTElUWSwge1xuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5BVkFJTEFCSUxJVFlfQ0hBTkdFLFxuICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRSxcbiAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFwcGxpY2F0aW9uUGFja2FnZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9wZW5BdmFpbGFiaWxpdHlNb2RhbChhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5KSB7XG4gICAgY29uc3QgYm9keSA9IHRoaXMuZ2V0Q29uZmlybWF0aW9uQm9keShhdmFpbGFiaWxpdHkpO1xuXG4gICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKGdldHRleHQoJ1BhY2thZ2UgYXZhaWxhYmlsaXR5JyksIGJvZHksICdpbmZvJywge1xuICAgICAgb2s6IGdldHRleHQoJ1llcycpLFxuICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdObycpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbmZpcm1hdGlvbkJvZHkoYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChhdmFpbGFiaWxpdHkpIHtcbiAgICAgIGNhc2UgQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuU0hBUkVEOlxuICAgICAgICByZXR1cm4gZ2V0dGV4dChcbiAgICAgICAgICAnRG8geW91IHdhbnQgdG8gc2V0IHRoZSBwYWNrYWdlIGF2YWlsYWJpbGl0eSB0byBcIlNoYXJlZFwiPyBUaGlzIHdpbGwgbWFrZSB0aGUgcGFja2FnZSBhdmFpbGFibGUgdG8gYWxsIHN1YnRlbmFudHMgd2l0aG91dCBleHBsaWNpdGx5IHN1YnNjcmliaW5nIHRoZSBwYWNrYWdlLidcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuTUFSS0VUOlxuICAgICAgICByZXR1cm4gZ2V0dGV4dChcbiAgICAgICAgICAnRG8geW91IHdhbnQgdG8gc2V0IHRoZSBwYWNrYWdlIGF2YWlsYWJpbGl0eSB0byBcIk1hcmtldFwiPyBUaGlzIHdpbGwgbWFrZSB0aGUgcGFja2FnZSBhdmFpbGFibGUgdG8geW91ciBvd24gdGVuYW50IGFuZCBuZWVkcyB0byBiZSBzdWJzY3JpYmVkIHRvIHN1YnRlbmFudHMgaW5kaXZpZHVhbGx5LidcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuUFJJVkFURTpcbiAgICAgICAgcmV0dXJuIGdldHRleHQoXG4gICAgICAgICAgJ0RvIHlvdSB3YW50IHRvIHNldCB0aGUgcGFja2FnZSBhdmFpbGFiaWxpdHkgdG8gXCJQcml2YXRlXCI/IFRoaXMgd2lsbCBtYWtlIHRoZSBwYWNrYWdlIG9ubHkgYXZhaWxhYmxlIHRvIHlvdXIgb3duIHRlbmFudC4nXG4gICAgICAgICk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { Component, EventEmitter, Output } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
- import { AlertService, gettext, ModalService, OptionsService, Permissions, PluginsService, Status } from '@c8y/ngx-components';
4
- import { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
3
+ import { AlertService, GainsightService, ModalService, OptionsService, Permissions, PluginsService, Status, gettext } from '@c8y/ngx-components';
4
+ import { EcosystemService, PRODUCT_EXPERIENCE } from '@c8y/ngx-components/ecosystem/shared';
5
5
  import { TranslateService } from '@ngx-translate/core';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/router";
@@ -12,7 +12,7 @@ import * as i5 from "@angular/common";
12
12
  import * as i6 from "ngx-bootstrap/dropdown";
13
13
  const DEFAULT_VERSIONS_LIMIT = 20;
14
14
  export class PackageVersionsListComponent {
15
- constructor(activatedRoute, pluginsService, ecosystemService, translateService, modal, alertService, optionsService, permissions) {
15
+ constructor(activatedRoute, pluginsService, ecosystemService, translateService, modal, alertService, optionsService, permissions, gainsightService) {
16
16
  this.activatedRoute = activatedRoute;
17
17
  this.pluginsService = pluginsService;
18
18
  this.ecosystemService = ecosystemService;
@@ -21,6 +21,8 @@ export class PackageVersionsListComponent {
21
21
  this.alertService = alertService;
22
22
  this.optionsService = optionsService;
23
23
  this.permissions = permissions;
24
+ this.gainsightService = gainsightService;
25
+ this.CURRENT_LOCATION = location.href;
24
26
  this.isLoading = false;
25
27
  this.hasAdminPermissions = false;
26
28
  this.isPackageOwnedByCurrentTenant = false;
@@ -36,6 +38,11 @@ export class PackageVersionsListComponent {
36
38
  this.isLoading = false;
37
39
  }
38
40
  async downloadArchive(appVersion) {
41
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.PACKAGE_VERSIONS, {
42
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.PACKAGE_VERSIONS,
43
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.DOWNLOAD,
44
+ url: this.CURRENT_LOCATION
45
+ });
39
46
  const archiveMO = await this.ecosystemService.getArchiveManagedObject(appVersion.binaryId);
40
47
  await this.ecosystemService.downloadArchive(this.package, {
41
48
  id: appVersion.binaryId,
@@ -57,9 +64,21 @@ export class PackageVersionsListComponent {
57
64
  this.alertService.success(this.translateService.instant(gettext('Package version {{version}} has been removed'), {
58
65
  version
59
66
  }));
67
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.PACKAGE_VERSIONS, {
68
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.PACKAGE_VERSIONS,
69
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.DELETE,
70
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SUCCESS,
71
+ url: this.CURRENT_LOCATION
72
+ });
60
73
  }
61
74
  catch (e) {
62
75
  this.alertService.addServerFailure(e);
76
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.PACKAGE_VERSIONS, {
77
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.PACKAGE_VERSIONS,
78
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.DELETE,
79
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SERVER_FAILURE,
80
+ url: this.CURRENT_LOCATION
81
+ });
63
82
  }
64
83
  if (version === this.selectedVersion) {
65
84
  this.selectVersion(null);
@@ -76,9 +95,21 @@ export class PackageVersionsListComponent {
76
95
  // Remove it when BE fixes issues with activeVersion.
77
96
  await this.ecosystemService.setAppActiveVersion(this.package, appVersion.binaryId);
78
97
  this.alertService.success(gettext('Tag has been set.'));
98
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.PACKAGE_VERSIONS, {
99
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.PACKAGE_VERSIONS,
100
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.SET_AS_LATEST,
101
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SUCCESS,
102
+ url: this.CURRENT_LOCATION
103
+ });
79
104
  }
80
105
  catch (e) {
81
106
  this.alertService.addServerFailure(e);
107
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.PACKAGE_VERSIONS, {
108
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.PACKAGE_VERSIONS,
109
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.SET_AS_LATEST,
110
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SERVER_FAILURE,
111
+ url: this.CURRENT_LOCATION
112
+ });
82
113
  return;
83
114
  }
84
115
  await this.refreshPackage();
@@ -104,6 +135,12 @@ export class PackageVersionsListComponent {
104
135
  async setUploadedVersionAsLatest() {
105
136
  const uploadedVersion = this.package.applicationVersions[this.package.applicationVersions.length - 1];
106
137
  try {
138
+ this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.APPLICATIONS.EVENTS.PACKAGE_VERSIONS, {
139
+ component: PRODUCT_EXPERIENCE.APPLICATIONS.COMPONENTS.PACKAGE_VERSIONS,
140
+ action: PRODUCT_EXPERIENCE.APPLICATIONS.ACTIONS.UPLOAD,
141
+ result: PRODUCT_EXPERIENCE.APPLICATIONS.RESULTS.SUCCESS,
142
+ url: this.CURRENT_LOCATION
143
+ });
107
144
  await this.modal.confirm(gettext('Upload successful'), this.translateService.instant(gettext('Do you want to set version {{version}} as the latest? Deploying a new app will always use this version.'), { version: uploadedVersion.version }), Status.SUCCESS, {
108
145
  ok: gettext('Set as latest`version`'),
109
146
  cancel: gettext('Keep unchanged`version`')
@@ -122,12 +159,12 @@ export class PackageVersionsListComponent {
122
159
  : this.acknowledgeLimitReached.bind(this);
123
160
  }
124
161
  }
125
- PackageVersionsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PackageVersionsListComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.PluginsService }, { token: i3.EcosystemService }, { token: i4.TranslateService }, { token: i2.ModalService }, { token: i2.AlertService }, { token: i2.OptionsService }, { token: i2.Permissions }], target: i0.ɵɵFactoryTarget.Component });
162
+ PackageVersionsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PackageVersionsListComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.PluginsService }, { token: i3.EcosystemService }, { token: i4.TranslateService }, { token: i2.ModalService }, { token: i2.AlertService }, { token: i2.OptionsService }, { token: i2.Permissions }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
126
163
  PackageVersionsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: PackageVersionsListComponent, selector: "c8y-package-versions-list", outputs: { onVersionSelect: "onVersionSelect" }, ngImport: i0, template: "<div class=\"inner-scroll split-view__list\">\n <div class=\"card-header separator sticky-top bg-component\">\n <div class=\"card-title\" translate>Versions</div>\n </div>\n\n <div class=\"bg-level-1 flex-grow\">\n <div class=\"p-16\" *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n <ul class=\"nav c8y-nav-stacked\" *ngIf=\"!isLoading\">\n <li\n class=\"c8y-stacked-item p-t-0 p-b-0 p-r-4\"\n [ngClass]=\"{ active: selectedVersion === applicationVersion.version }\"\n *ngFor=\"let applicationVersion of sortedVersions\"\n >\n <div\n class=\"flex-grow d-flex a-i-center gap-4 p-t-8 p-b-8\"\n (click)=\"selectVersion(applicationVersion.version)\"\n >\n <i c8yIcon=\"big-parcel\" class=\"icon-20\"></i>\n <span class=\"text-label-small\">\n {{ 'Version' | translate }}\n </span>\n <span class=\"text-medium\">{{ applicationVersion.version }}</span>\n <div class=\"text-truncate d-flex j-c-end flex-grow gap-4 flex-wrap m-l-auto\">\n <span *ngFor=\"let tag of applicationVersion.tags\" class=\"label label-info\">\n {{ tag }}\n </span>\n </div>\n </div>\n <div class=\"dropdown\" dropdown *ngIf=\"hasAdminPermissions && isPackageOwnedByCurrentTenant\">\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n dropdownToggle\n title=\"{{ 'Settings' | translate }}\"\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right\">\n <li>\n <button\n (click)=\"setVersionAsLatest(applicationVersion)\"\n [disabled]=\"applicationVersion.tags?.includes('latest')\"\n title=\"{{ 'Set as latest`version`' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"collect\" class=\"m-r-4\"></i>\n {{ 'Set as latest`version`' | translate }}\n </button>\n </li>\n <li>\n <button\n (click)=\"downloadArchive(applicationVersion)\"\n title=\"{{ 'Download' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"download\" class=\"m-r-4\"></i>\n {{ 'Download' | translate }}\n </button>\n </li>\n <li>\n <button\n (click)=\"removeVersionPackage(applicationVersion.version)\"\n [disabled]=\"applicationVersion.tags?.includes('latest')\"\n title=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"trash\" class=\"m-r-4\"></i>\n {{ 'Delete' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </li>\n </ul>\n </div>\n\n <div\n class=\"card-footer separator sticky-bottom\"\n *ngIf=\"!isLoading && isPackageOwnedByCurrentTenant\"\n >\n <div class=\"form-group m-b-0\">\n <label translate>Upload a new version</label>\n <c8y-upload-archive\n [(application)]=\"package\"\n [uploadNewVersion]=\"true\"\n (refresh)=\"packageVersionUploaded()\"\n [preUploadCallback]=\"preUploadCallback\"\n ></c8y-upload-archive>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading" }, { kind: "directive", type: i6.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i6.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i6.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i3.UploadArchiveComponent, selector: "c8y-upload-archive", inputs: ["application", "uploadNewVersion", "preUploadCallback"], outputs: ["applicationChange", "refresh"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
127
164
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PackageVersionsListComponent, decorators: [{
128
165
  type: Component,
129
166
  args: [{ selector: 'c8y-package-versions-list', template: "<div class=\"inner-scroll split-view__list\">\n <div class=\"card-header separator sticky-top bg-component\">\n <div class=\"card-title\" translate>Versions</div>\n </div>\n\n <div class=\"bg-level-1 flex-grow\">\n <div class=\"p-16\" *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n <ul class=\"nav c8y-nav-stacked\" *ngIf=\"!isLoading\">\n <li\n class=\"c8y-stacked-item p-t-0 p-b-0 p-r-4\"\n [ngClass]=\"{ active: selectedVersion === applicationVersion.version }\"\n *ngFor=\"let applicationVersion of sortedVersions\"\n >\n <div\n class=\"flex-grow d-flex a-i-center gap-4 p-t-8 p-b-8\"\n (click)=\"selectVersion(applicationVersion.version)\"\n >\n <i c8yIcon=\"big-parcel\" class=\"icon-20\"></i>\n <span class=\"text-label-small\">\n {{ 'Version' | translate }}\n </span>\n <span class=\"text-medium\">{{ applicationVersion.version }}</span>\n <div class=\"text-truncate d-flex j-c-end flex-grow gap-4 flex-wrap m-l-auto\">\n <span *ngFor=\"let tag of applicationVersion.tags\" class=\"label label-info\">\n {{ tag }}\n </span>\n </div>\n </div>\n <div class=\"dropdown\" dropdown *ngIf=\"hasAdminPermissions && isPackageOwnedByCurrentTenant\">\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n dropdownToggle\n title=\"{{ 'Settings' | translate }}\"\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right\">\n <li>\n <button\n (click)=\"setVersionAsLatest(applicationVersion)\"\n [disabled]=\"applicationVersion.tags?.includes('latest')\"\n title=\"{{ 'Set as latest`version`' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"collect\" class=\"m-r-4\"></i>\n {{ 'Set as latest`version`' | translate }}\n </button>\n </li>\n <li>\n <button\n (click)=\"downloadArchive(applicationVersion)\"\n title=\"{{ 'Download' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"download\" class=\"m-r-4\"></i>\n {{ 'Download' | translate }}\n </button>\n </li>\n <li>\n <button\n (click)=\"removeVersionPackage(applicationVersion.version)\"\n [disabled]=\"applicationVersion.tags?.includes('latest')\"\n title=\"{{ 'Delete' | translate }}\"\n type=\"button\"\n >\n <i c8yIcon=\"trash\" class=\"m-r-4\"></i>\n {{ 'Delete' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </li>\n </ul>\n </div>\n\n <div\n class=\"card-footer separator sticky-bottom\"\n *ngIf=\"!isLoading && isPackageOwnedByCurrentTenant\"\n >\n <div class=\"form-group m-b-0\">\n <label translate>Upload a new version</label>\n <c8y-upload-archive\n [(application)]=\"package\"\n [uploadNewVersion]=\"true\"\n (refresh)=\"packageVersionUploaded()\"\n [preUploadCallback]=\"preUploadCallback\"\n ></c8y-upload-archive>\n </div>\n </div>\n</div>\n" }]
130
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.PluginsService }, { type: i3.EcosystemService }, { type: i4.TranslateService }, { type: i2.ModalService }, { type: i2.AlertService }, { type: i2.OptionsService }, { type: i2.Permissions }]; }, propDecorators: { onVersionSelect: [{
167
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.PluginsService }, { type: i3.EcosystemService }, { type: i4.TranslateService }, { type: i2.ModalService }, { type: i2.AlertService }, { type: i2.OptionsService }, { type: i2.Permissions }, { type: i2.GainsightService }]; }, propDecorators: { onVersionSelect: [{
131
168
  type: Output
132
169
  }] } });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS12ZXJzaW9ucy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9wYWNrYWdlLXZlcnNpb25zL3BhY2thZ2UtdmVyc2lvbnMtbGlzdC9wYWNrYWdlLXZlcnNpb25zLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3BhY2thZ2VzL3BhY2thZ2UtdmVyc2lvbnMvcGFja2FnZS12ZXJzaW9ucy1saXN0L3BhY2thZ2UtdmVyc2lvbnMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFDTCxZQUFZLEVBQ1osT0FBTyxFQUNQLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxFQUNYLGNBQWMsRUFDZCxNQUFNLEVBQ1AsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7QUFFdkQsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFNbEMsTUFBTSxPQUFPLDRCQUE0QjtJQVl2QyxZQUNVLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFDbEMsS0FBbUIsRUFDbkIsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsV0FBd0I7UUFQeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixH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QUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsaUJBQWlCO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhO2dCQUM3QyxDQUFDLENBQUMsSUFBSTtnQkFDTixDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDOzt5SEEzSlUsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsa0hDckJ6QyxrNkdBNEZBOzJGRHZFYSw0QkFBNEI7a0JBSnhDLFNBQVM7K0JBQ0UsMkJBQTJCOzZTQWEzQixlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24sIElBcHBsaWNhdGlvblZlcnNpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIGdldHRleHQsXG4gIE1vZGFsU2VydmljZSxcbiAgT3B0aW9uc1NlcnZpY2UsXG4gIFBlcm1pc3Npb25zLFxuICBQbHVnaW5zU2VydmljZSxcbiAgU3RhdHVzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRWNvc3lzdGVtU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmNvbnN0IERFRkFVTFRfVkVSU0lPTlNfTElNSVQgPSAyMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXBhY2thZ2UtdmVyc2lvbnMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWNrYWdlLXZlcnNpb25zLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBhY2thZ2VWZXJzaW9uc0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB2ZXJzaW9uc0xpbWl0OiBudW1iZXI7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBwYWNrYWdlOiBJQXBwbGljYXRpb247XG4gIHNvcnRlZFZlcnNpb25zOiBJQXBwbGljYXRpb25WZXJzaW9uW107XG4gIHNlbGVjdGVkVmVyc2lvbjogc3RyaW5nO1xuICBwcmVVcGxvYWRDYWxsYmFjazogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICBoYXNBZG1pblBlcm1pc3Npb25zID0gZmFsc2U7XG4gIGlzUGFja2FnZU93bmVkQnlDdXJyZW50VGVuYW50ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIG9uVmVyc2lvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHBsdWdpbnNTZXJ2aWNlOiBQbHVnaW5zU2VydmljZSxcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5oYXNBZG1pblBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5oYXNSb2xlKCdST0xFX0FQUExJQ0FUSU9OX01BTkFHRU1FTlRfQURNSU4nKTtcbiAgICB0aGlzLnBhY2thZ2UgPSB0aGlzLmFjdGl2YXRlZFJvdXRlPy5zbmFwc2hvdD8ucGFyZW50Py5kYXRhPy5jb250ZXh0RGF0YTtcbiAgICB0aGlzLmlzUGFja2FnZU93bmVkQnlDdXJyZW50VGVuYW50ID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzT3duZXIodGhpcy5wYWNrYWdlKTtcbiAgICB0aGlzLnZlcnNpb25zTGltaXQgPSAoYXdhaXQgdGhpcy5vcHRpb25zU2VydmljZS5nZXRTeXN0ZW1PcHRpb24oXG4gICAgICAnYXBwbGljYXRpb24nLFxuICAgICAgJ3ZlcnNpb25zLmxpbWl0JyxcbiAgICAgIERFRkFVTFRfVkVSU0lPTlNfTElNSVRcbiAgICApKSBhcyBudW1iZXI7XG4gICAgdGhpcy5zb3J0VmVyc2lvbnMoKTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRBcmNoaXZlKGFwcFZlcnNpb246IElBcHBsaWNhdGlvblZlcnNpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhcmNoaXZlTU8gPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QXJjaGl2ZU1hbmFnZWRPYmplY3QoYXBwVmVyc2lvbi5iaW5hcnlJZCk7XG4gICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmRvd25sb2FkQXJjaGl2ZSh0aGlzLnBhY2thZ2UsIHtcbiAgICAgIGlkOiBhcHBWZXJzaW9uLmJpbmFyeUlkLFxuICAgICAgbmFtZTogYXJjaGl2ZU1PLm5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIHBhY2thZ2VWZXJzaW9uVXBsb2FkZWQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YSA9IHRoaXMucGFja2FnZTtcbiAgICB0aGlzLnNvcnRWZXJzaW9ucygpO1xuICAgIHRoaXMuc2V0VXBsb2FkZWRWZXJzaW9uQXNMYXRlc3QoKTtcbiAgfVxuXG4gIHNlbGVjdFZlcnNpb24odmVyc2lvbjogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uID0gdmVyc2lvbjtcbiAgICB0aGlzLm9uVmVyc2lvblNlbGVjdC5lbWl0KHZlcnNpb24pO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlVmVyc2lvblBhY2thZ2UodmVyc2lvbjogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5kZWxldGVQYWNrYWdlVmVyc2lvbih0aGlzLnBhY2thZ2UsIHsgdmVyc2lvbiB9KTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ1BhY2thZ2UgdmVyc2lvbiB7e3ZlcnNpb259fSBoYXMgYmVlbiByZW1vdmVkJyksIHtcbiAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uID09PSB0aGlzLnNlbGVjdGVkVmVyc2lvbikge1xuICAgICAgdGhpcy5zZWxlY3RWZXJzaW9uKG51bGwpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlZnJlc2hQYWNrYWdlKCk7XG4gIH1cblxuICBhc3luYyBzZXRWZXJzaW9uQXNMYXRlc3QoYXBwVmVyc2lvbjogSUFwcGxpY2F0aW9uVmVyc2lvbikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcodGhpcy5wYWNrYWdlLCBhcHBWZXJzaW9uLnZlcnNpb24sIFtcbiAgICAgICAgLi4uYXBwVmVyc2lvbi50YWdzLFxuICAgICAgICAnbGF0ZXN0J1xuICAgICAgXSk7XG5cbiAgICAgIC8vIFRPRE8gYWRkZWQgaXQgZHVlIHRvOiBodHRwczovL2N1bXVsb2NpdHkuYXRsYXNzaWFuLm5ldC9icm93c2UvTVRNLTQ4NTUzXG4gICAgICAvLyBSZW1vdmUgaXQgd2hlbiBCRSBmaXhlcyBpc3N1ZXMgd2l0aCBhY3RpdmVWZXJzaW9uLlxuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnNldEFwcEFjdGl2ZVZlcnNpb24odGhpcy5wYWNrYWdlLCBhcHBWZXJzaW9uLmJpbmFyeUlkKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnVGFnIGhhcyBiZWVuIHNldC4nKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoUGFja2FnZSgpO1xuICB9XG5cbiAgYXN5bmMgYWNrbm93bGVkZ2VMaW1pdFJlYWNoZWQoKSB7XG4gICAgYXdhaXQgdGhpcy5tb2RhbC5hY2tub3dsZWRnZShcbiAgICAgIGdldHRleHQoJ1BhY2thZ2UgbGltaXQgZXhjZWVkZWQnKSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICdZb3UgaGF2ZSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiB7eyB2ZXJzaW9uc0xpbWl0IH19IHBhY2thZ2UgdmVyc2lvbnMuIFRvIGFkZCBhbm90aGVyIHZlcnNpb24sIGZpcnN0IGRlbGV0ZSBvbmUgZnJvbSB0aGUgbGlzdC4nXG4gICAgICAgICksXG4gICAgICAgIHsgdmVyc2lvbnNMaW1pdDogdGhpcy52ZXJzaW9uc0xpbWl0IH1cbiAgICAgICksXG4gICAgICBTdGF0dXMuSU5GTyxcbiAgICAgIGdldHRleHQoJ0Nsb3NlJylcbiAgICApO1xuICAgIHRocm93IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaFBhY2thZ2UoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucGFja2FnZSA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRBcHBsaWNhdGlvbih0aGlzLnBhY2thZ2UuaWQpO1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGFyZW50LmRhdGEuY29udGV4dERhdGEgPSB0aGlzLnBhY2thZ2U7XG4gICAgdGhpcy5zb3J0VmVyc2lvbnMoKTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0VmVyc2lvbnMoKSB7XG4gICAgdGhpcy5zb3J0ZWRWZXJzaW9ucyA9IHRoaXMucGx1Z2luc1NlcnZpY2Uuc29ydFZlcnNpb25zKFxuICAgICAge1xuICAgICAgICBsaXN0OiB0aGlzLnBhY2thZ2UuYXBwbGljYXRpb25WZXJzaW9ucyxcbiAgICAgICAgcGF0aDogWyd2ZXJzaW9uJ11cbiAgICAgIH0sXG4gICAgICAnZGVzYydcbiAgICApO1xuICAgIHRoaXMudG9nZ2xlVXBsb2FkUG9zc2liaWxpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0VXBsb2FkZWRWZXJzaW9uQXNMYXRlc3QoKSB7XG4gICAgY29uc3QgdXBsb2FkZWRWZXJzaW9uID1cbiAgICAgIHRoaXMucGFja2FnZS5hcHBsaWNhdGlvblZlcnNpb25zW3RoaXMucGFja2FnZS5hcHBsaWNhdGlvblZlcnNpb25zLmxlbmd0aCAtIDFdO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ1VwbG9hZCBzdWNjZXNzZnVsJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAnRG8geW91IHdhbnQgdG8gc2V0IHZlcnNpb24ge3t2ZXJzaW9ufX0gYXMgdGhlIGxhdGVzdD8gRGVwbG95aW5nIGEgbmV3IGFwcCB3aWxsIGFsd2F5cyB1c2UgdGhpcyB2ZXJzaW9uLidcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgdmVyc2lvbjogdXBsb2FkZWRWZXJzaW9uLnZlcnNpb24gfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuU1VDQ0VTUyxcbiAgICAgICAge1xuICAgICAgICAgIG9rOiBnZXR0ZXh0KCdTZXQgYXMgbGF0ZXN0YHZlcnNpb25gJyksXG4gICAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdLZWVwIHVuY2hhbmdlZGB2ZXJzaW9uYCcpXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gb24gY2FuY2VsOiBkbyBub3RoaW5nXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuc2V0VmVyc2lvbkFzTGF0ZXN0KHVwbG9hZGVkVmVyc2lvbik7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZVVwbG9hZFBvc3NpYmlsaXR5KCkge1xuICAgIHRoaXMucHJlVXBsb2FkQ2FsbGJhY2sgPVxuICAgICAgdGhpcy5zb3J0ZWRWZXJzaW9ucy5sZW5ndGggPCB0aGlzLnZlcnNpb25zTGltaXRcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5hY2tub3dsZWRnZUxpbWl0UmVhY2hlZC5iaW5kKHRoaXMpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsIHNwbGl0LXZpZXdfX2xpc3RcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvciBzdGlja3ktdG9wIGJnLWNvbXBvbmVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCIgdHJhbnNsYXRlPlZlcnNpb25zPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJiZy1sZXZlbC0xIGZsZXgtZ3Jvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTE2XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgIDwvZGl2PlxuICAgIDx1bCBjbGFzcz1cIm5hdiBjOHktbmF2LXN0YWNrZWRcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICAgIDxsaVxuICAgICAgICBjbGFzcz1cImM4eS1zdGFja2VkLWl0ZW0gcC10LTAgcC1iLTAgcC1yLTRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogc2VsZWN0ZWRWZXJzaW9uID09PSBhcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbiB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGFwcGxpY2F0aW9uVmVyc2lvbiBvZiBzb3J0ZWRWZXJzaW9uc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZsZXgtZ3JvdyBkLWZsZXggYS1pLWNlbnRlciBnYXAtNCBwLXQtOCBwLWItOFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFZlcnNpb24oYXBwbGljYXRpb25WZXJzaW9uLnZlcnNpb24pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJiaWctcGFyY2VsXCIgY2xhc3M9XCJpY29uLTIwXCI+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiPlxuICAgICAgICAgICAge3sgJ1ZlcnNpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tZWRpdW1cIj57eyBhcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbiB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC10cnVuY2F0ZSBkLWZsZXggai1jLWVuZCBmbGV4LWdyb3cgZ2FwLTQgZmxleC13cmFwIG0tbC1hdXRvXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdGFnIG9mIGFwcGxpY2F0aW9uVmVyc2lvbi50YWdzXCIgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XG4gICAgICAgICAgICAgIHt7IHRhZyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgZHJvcGRvd24gKm5nSWY9XCJoYXNBZG1pblBlcm1pc3Npb25zICYmIGlzUGFja2FnZU93bmVkQnlDdXJyZW50VGVuYW50XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUgYzh5LWRyb3Bkb3duXCJcbiAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdTZXR0aW5ncycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJlbGxpcHNpcy12XCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDx1bCAqZHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LXJpZ2h0XCI+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VmVyc2lvbkFzTGF0ZXN0KGFwcGxpY2F0aW9uVmVyc2lvbilcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhcHBsaWNhdGlvblZlcnNpb24udGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdTZXQgYXMgbGF0ZXN0YHZlcnNpb25gJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwiY29sbGVjdFwiIGNsYXNzPVwibS1yLTRcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ1NldCBhcyBsYXRlc3RgdmVyc2lvbmAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEFyY2hpdmUoYXBwbGljYXRpb25WZXJzaW9uKVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRG93bmxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJkb3dubG9hZFwiIGNsYXNzPVwibS1yLTRcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ0Rvd25sb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlVmVyc2lvblBhY2thZ2UoYXBwbGljYXRpb25WZXJzaW9uLnZlcnNpb24pXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYXBwbGljYXRpb25WZXJzaW9uLnRhZ3M/LmluY2x1ZGVzKCdsYXRlc3QnKVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRGVsZXRlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwidHJhc2hcIiBjbGFzcz1cIm0tci00XCI+PC9pPlxuICAgICAgICAgICAgICAgIHt7ICdEZWxldGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2FyZC1mb290ZXIgc2VwYXJhdG9yIHN0aWNreS1ib3R0b21cIlxuICAgICpuZ0lmPVwiIWlzTG9hZGluZyAmJiBpc1BhY2thZ2VPd25lZEJ5Q3VycmVudFRlbmFudFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtLWItMFwiPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5VcGxvYWQgYSBuZXcgdmVyc2lvbjwvbGFiZWw+XG4gICAgICA8Yzh5LXVwbG9hZC1hcmNoaXZlXG4gICAgICAgIFsoYXBwbGljYXRpb24pXT1cInBhY2thZ2VcIlxuICAgICAgICBbdXBsb2FkTmV3VmVyc2lvbl09XCJ0cnVlXCJcbiAgICAgICAgKHJlZnJlc2gpPVwicGFja2FnZVZlcnNpb25VcGxvYWRlZCgpXCJcbiAgICAgICAgW3ByZVVwbG9hZENhbGxiYWNrXT1cInByZVVwbG9hZENhbGxiYWNrXCJcbiAgICAgID48L2M4eS11cGxvYWQtYXJjaGl2ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS12ZXJzaW9ucy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9wYWNrYWdlLXZlcnNpb25zL3BhY2thZ2UtdmVyc2lvbnMtbGlzdC9wYWNrYWdlLXZlcnNpb25zLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3BhY2thZ2VzL3BhY2thZ2UtdmVyc2lvbnMvcGFja2FnZS12ZXJzaW9ucy1saXN0L3BhY2thZ2UtdmVyc2lvbnMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFDTCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxFQUNYLGNBQWMsRUFDZCxNQUFNLEVBQ04sT0FBTyxFQUNSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBRXZELE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBTWxDLE1BQU0sT0FBTyw0QkFBNEI7SUFjdkMsWUFDVSxjQUE4QixFQUM5QixjQUE4QixFQUM5QixnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLEtBQW1CLEVBQ25CLFlBQTBCLEVBQzFCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLGdCQUFrQztRQVJsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFC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QUNSO1FBQ0QsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsaUJBQWlCO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhO2dCQUM3QyxDQUFDLENBQUMsSUFBSTtnQkFDTixDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDOzt5SEFqTVUsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsa0hDdEJ6QyxrNkdBNEZBOzJGRHRFYSw0QkFBNEI7a0JBSnhDLFNBQVM7K0JBQ0UsMkJBQTJCOzRVQWUzQixlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24sIElBcHBsaWNhdGlvblZlcnNpb24gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIE1vZGFsU2VydmljZSxcbiAgT3B0aW9uc1NlcnZpY2UsXG4gIFBlcm1pc3Npb25zLFxuICBQbHVnaW5zU2VydmljZSxcbiAgU3RhdHVzLFxuICBnZXR0ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRWNvc3lzdGVtU2VydmljZSwgUFJPRFVDVF9FWFBFUklFTkNFIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY29zeXN0ZW0vc2hhcmVkJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuY29uc3QgREVGQVVMVF9WRVJTSU9OU19MSU1JVCA9IDIwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcGFja2FnZS12ZXJzaW9ucy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhY2thZ2UtdmVyc2lvbnMtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUGFja2FnZVZlcnNpb25zTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIENVUlJFTlRfTE9DQVRJT04gPSBsb2NhdGlvbi5ocmVmO1xuXG4gIHZlcnNpb25zTGltaXQ6IG51bWJlcjtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG4gIHBhY2thZ2U6IElBcHBsaWNhdGlvbjtcbiAgc29ydGVkVmVyc2lvbnM6IElBcHBsaWNhdGlvblZlcnNpb25bXTtcbiAgc2VsZWN0ZWRWZXJzaW9uOiBzdHJpbmc7XG4gIHByZVVwbG9hZENhbGxiYWNrOiAoKSA9PiBQcm9taXNlPGFueT47XG4gIGhhc0FkbWluUGVybWlzc2lvbnMgPSBmYWxzZTtcbiAgaXNQYWNrYWdlT3duZWRCeUN1cnJlbnRUZW5hbnQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgb25WZXJzaW9uU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBudWxsPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcGx1Z2luc1NlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5oYXNBZG1pblBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucy5oYXNSb2xlKCdST0xFX0FQUExJQ0FUSU9OX01BTkFHRU1FTlRfQURNSU4nKTtcbiAgICB0aGlzLnBhY2thZ2UgPSB0aGlzLmFjdGl2YXRlZFJvdXRlPy5zbmFwc2hvdD8ucGFyZW50Py5kYXRhPy5jb250ZXh0RGF0YTtcbiAgICB0aGlzLmlzUGFja2FnZU93bmVkQnlDdXJyZW50VGVuYW50ID0gdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmlzT3duZXIodGhpcy5wYWNrYWdlKTtcbiAgICB0aGlzLnZlcnNpb25zTGltaXQgPSAoYXdhaXQgdGhpcy5vcHRpb25zU2VydmljZS5nZXRTeXN0ZW1PcHRpb24oXG4gICAgICAnYXBwbGljYXRpb24nLFxuICAgICAgJ3ZlcnNpb25zLmxpbWl0JyxcbiAgICAgIERFRkFVTFRfVkVSU0lPTlNfTElNSVRcbiAgICApKSBhcyBudW1iZXI7XG4gICAgdGhpcy5zb3J0VmVyc2lvbnMoKTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRBcmNoaXZlKGFwcFZlcnNpb246IElBcHBsaWNhdGlvblZlcnNpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfVkVSU0lPTlMsIHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBBQ0tBR0VfVkVSU0lPTlMsXG4gICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5ET1dOTE9BRCxcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgfSk7XG4gICAgY29uc3QgYXJjaGl2ZU1PID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFyY2hpdmVNYW5hZ2VkT2JqZWN0KGFwcFZlcnNpb24uYmluYXJ5SWQpO1xuICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5kb3dubG9hZEFyY2hpdmUodGhpcy5wYWNrYWdlLCB7XG4gICAgICBpZDogYXBwVmVyc2lvbi5iaW5hcnlJZCxcbiAgICAgIG5hbWU6IGFyY2hpdmVNTy5uYW1lXG4gICAgfSk7XG4gIH1cblxuICBwYWNrYWdlVmVyc2lvblVwbG9hZGVkKCkge1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGFyZW50LmRhdGEuY29udGV4dERhdGEgPSB0aGlzLnBhY2thZ2U7XG4gICAgdGhpcy5zb3J0VmVyc2lvbnMoKTtcbiAgICB0aGlzLnNldFVwbG9hZGVkVmVyc2lvbkFzTGF0ZXN0KCk7XG4gIH1cblxuICBzZWxlY3RWZXJzaW9uKHZlcnNpb246IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVmVyc2lvbiA9IHZlcnNpb247XG4gICAgdGhpcy5vblZlcnNpb25TZWxlY3QuZW1pdCh2ZXJzaW9uKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVZlcnNpb25QYWNrYWdlKHZlcnNpb246IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZGVsZXRlUGFja2FnZVZlcnNpb24odGhpcy5wYWNrYWdlLCB7IHZlcnNpb24gfSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdQYWNrYWdlIHZlcnNpb24ge3t2ZXJzaW9ufX0gaGFzIGJlZW4gcmVtb3ZlZCcpLCB7XG4gICAgICAgICAgdmVyc2lvblxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuUEFDS0FHRV9WRVJTSU9OUywge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5QQUNLQUdFX1ZFUlNJT05TLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlNVQ0NFU1MsXG4gICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5QQUNLQUdFX1ZFUlNJT05TLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBBQ0tBR0VfVkVSU0lPTlMsXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkRFTEVURSxcbiAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuU0VSVkVSX0ZBSUxVUkUsXG4gICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHZlcnNpb24gPT09IHRoaXMuc2VsZWN0ZWRWZXJzaW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdFZlcnNpb24obnVsbCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVmcmVzaFBhY2thZ2UoKTtcbiAgfVxuXG4gIGFzeW5jIHNldFZlcnNpb25Bc0xhdGVzdChhcHBWZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5zZXRQYWNrYWdlVmVyc2lvblRhZyh0aGlzLnBhY2thZ2UsIGFwcFZlcnNpb24udmVyc2lvbiwgW1xuICAgICAgICAuLi5hcHBWZXJzaW9uLnRhZ3MsXG4gICAgICAgICdsYXRlc3QnXG4gICAgICBdKTtcblxuICAgICAgLy8gVE9ETyBhZGRlZCBpdCBkdWUgdG86IGh0dHBzOi8vY3VtdWxvY2l0eS5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9NVE0tNDg1NTNcbiAgICAgIC8vIFJlbW92ZSBpdCB3aGVuIEJFIGZpeGVzIGlzc3VlcyB3aXRoIGFjdGl2ZVZlcnNpb24uXG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2Uuc2V0QXBwQWN0aXZlVmVyc2lvbih0aGlzLnBhY2thZ2UsIGFwcFZlcnNpb24uYmluYXJ5SWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdUYWcgaGFzIGJlZW4gc2V0LicpKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuUEFDS0FHRV9WRVJTSU9OUywge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5QQUNLQUdFX1ZFUlNJT05TLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5TRVRfQVNfTEFURVNULFxuICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TVUNDRVNTLFxuICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuUEFDS0FHRV9WRVJTSU9OUywge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5QQUNLQUdFX1ZFUlNJT05TLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5TRVRfQVNfTEFURVNULFxuICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRSxcbiAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlZnJlc2hQYWNrYWdlKCk7XG4gIH1cblxuICBhc3luYyBhY2tub3dsZWRnZUxpbWl0UmVhY2hlZCgpIHtcbiAgICBhd2FpdCB0aGlzLm1vZGFsLmFja25vd2xlZGdlKFxuICAgICAgZ2V0dGV4dCgnUGFja2FnZSBsaW1pdCBleGNlZWRlZCcpLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1lvdSBoYXZlIHJlYWNoZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHt7IHZlcnNpb25zTGltaXQgfX0gcGFja2FnZSB2ZXJzaW9ucy4gVG8gYWRkIGFub3RoZXIgdmVyc2lvbiwgZmlyc3QgZGVsZXRlIG9uZSBmcm9tIHRoZSBsaXN0LidcbiAgICAgICAgKSxcbiAgICAgICAgeyB2ZXJzaW9uc0xpbWl0OiB0aGlzLnZlcnNpb25zTGltaXQgfVxuICAgICAgKSxcbiAgICAgIFN0YXR1cy5JTkZPLFxuICAgICAgZ2V0dGV4dCgnQ2xvc2UnKVxuICAgICk7XG4gICAgdGhyb3cgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoUGFja2FnZSgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5wYWNrYWdlID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmdldEFwcGxpY2F0aW9uKHRoaXMucGFja2FnZS5pZCk7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YSA9IHRoaXMucGFja2FnZTtcbiAgICB0aGlzLnNvcnRWZXJzaW9ucygpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNvcnRWZXJzaW9ucygpIHtcbiAgICB0aGlzLnNvcnRlZFZlcnNpb25zID0gdGhpcy5wbHVnaW5zU2VydmljZS5zb3J0VmVyc2lvbnMoXG4gICAgICB7XG4gICAgICAgIGxpc3Q6IHRoaXMucGFja2FnZS5hcHBsaWNhdGlvblZlcnNpb25zLFxuICAgICAgICBwYXRoOiBbJ3ZlcnNpb24nXVxuICAgICAgfSxcbiAgICAgICdkZXNjJ1xuICAgICk7XG4gICAgdGhpcy50b2dnbGVVcGxvYWRQb3NzaWJpbGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRVcGxvYWRlZFZlcnNpb25Bc0xhdGVzdCgpIHtcbiAgICBjb25zdCB1cGxvYWRlZFZlcnNpb24gPVxuICAgICAgdGhpcy5wYWNrYWdlLmFwcGxpY2F0aW9uVmVyc2lvbnNbdGhpcy5wYWNrYWdlLmFwcGxpY2F0aW9uVmVyc2lvbnMubGVuZ3RoIC0gMV07XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuUEFDS0FHRV9WRVJTSU9OUywge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5QQUNLQUdFX1ZFUlNJT05TLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5VUExPQUQsXG4gICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlNVQ0NFU1MsXG4gICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnVXBsb2FkIHN1Y2Nlc3NmdWwnKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgICdEbyB5b3Ugd2FudCB0byBzZXQgdmVyc2lvbiB7e3ZlcnNpb259fSBhcyB0aGUgbGF0ZXN0PyBEZXBsb3lpbmcgYSBuZXcgYXBwIHdpbGwgYWx3YXlzIHVzZSB0aGlzIHZlcnNpb24uJ1xuICAgICAgICAgICksXG4gICAgICAgICAgeyB2ZXJzaW9uOiB1cGxvYWRlZFZlcnNpb24udmVyc2lvbiB9XG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5TVUNDRVNTLFxuICAgICAgICB7XG4gICAgICAgICAgb2s6IGdldHRleHQoJ1NldCBhcyBsYXRlc3RgdmVyc2lvbmAnKSxcbiAgICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0tlZXAgdW5jaGFuZ2VkYHZlcnNpb25gJylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBvbiBjYW5jZWw6IGRvIG5vdGhpbmdcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5zZXRWZXJzaW9uQXNMYXRlc3QodXBsb2FkZWRWZXJzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlVXBsb2FkUG9zc2liaWxpdHkoKSB7XG4gICAgdGhpcy5wcmVVcGxvYWRDYWxsYmFjayA9XG4gICAgICB0aGlzLnNvcnRlZFZlcnNpb25zLmxlbmd0aCA8IHRoaXMudmVyc2lvbnNMaW1pdFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLmFja25vd2xlZGdlTGltaXRSZWFjaGVkLmJpbmQodGhpcyk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgc3BsaXQtdmlld19fbGlzdFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgc2VwYXJhdG9yIHN0aWNreS10b3AgYmctY29tcG9uZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIiB0cmFuc2xhdGU+VmVyc2lvbnM8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImJnLWxldmVsLTEgZmxleC1ncm93XCI+XG4gICAgPGRpdiBjbGFzcz1cInAtMTZcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgICAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG4gICAgPC9kaXY+XG4gICAgPHVsIGNsYXNzPVwibmF2IGM4eS1uYXYtc3RhY2tlZFwiICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgICAgPGxpXG4gICAgICAgIGNsYXNzPVwiYzh5LXN0YWNrZWQtaXRlbSBwLXQtMCBwLWItMCBwLXItNFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBzZWxlY3RlZFZlcnNpb24gPT09IGFwcGxpY2F0aW9uVmVyc2lvbi52ZXJzaW9uIH1cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgYXBwbGljYXRpb25WZXJzaW9uIG9mIHNvcnRlZFZlcnNpb25zXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleC1ncm93IGQtZmxleCBhLWktY2VudGVyIGdhcC00IHAtdC04IHAtYi04XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VmVyc2lvbihhcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbilcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgYzh5SWNvbj1cImJpZy1wYXJjZWxcIiBjbGFzcz1cImljb24tMjBcIj48L2k+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsXCI+XG4gICAgICAgICAgICB7eyAnVmVyc2lvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW1lZGl1bVwiPnt7IGFwcGxpY2F0aW9uVmVyc2lvbi52ZXJzaW9uIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlIGQtZmxleCBqLWMtZW5kIGZsZXgtZ3JvdyBnYXAtNCBmbGV4LXdyYXAgbS1sLWF1dG9cIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCB0YWcgb2YgYXBwbGljYXRpb25WZXJzaW9uLnRhZ3NcIiBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj5cbiAgICAgICAgICAgICAge3sgdGFnIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiBkcm9wZG93biAqbmdJZj1cImhhc0FkbWluUGVybWlzc2lvbnMgJiYgaXNQYWNrYWdlT3duZWRCeUN1cnJlbnRUZW5hbnRcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZSBjOHktZHJvcGRvd25cIlxuICAgICAgICAgICAgZHJvcGRvd25Ub2dnbGVcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cImVsbGlwc2lzLXZcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHVsICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIj5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRWZXJzaW9uQXNMYXRlc3QoYXBwbGljYXRpb25WZXJzaW9uKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFwcGxpY2F0aW9uVmVyc2lvbi50YWdzPy5pbmNsdWRlcygnbGF0ZXN0JylcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NldCBhcyBsYXRlc3RgdmVyc2lvbmAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJjb2xsZWN0XCIgY2xhc3M9XCJtLXItNFwiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyAnU2V0IGFzIGxhdGVzdGB2ZXJzaW9uYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQXJjaGl2ZShhcHBsaWNhdGlvblZlcnNpb24pXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdEb3dubG9hZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImRvd25sb2FkXCIgY2xhc3M9XCJtLXItNFwiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyAnRG93bmxvYWQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVWZXJzaW9uUGFja2FnZShhcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbilcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhcHBsaWNhdGlvblZlcnNpb24udGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdEZWxldGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJ0cmFzaFwiIGNsYXNzPVwibS1yLTRcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ0RlbGV0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3Igc3RpY2t5LWJvdHRvbVwiXG4gICAgKm5nSWY9XCIhaXNMb2FkaW5nICYmIGlzUGFja2FnZU93bmVkQnlDdXJyZW50VGVuYW50XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG0tYi0wXCI+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlPlVwbG9hZCBhIG5ldyB2ZXJzaW9uPC9sYWJlbD5cbiAgICAgIDxjOHktdXBsb2FkLWFyY2hpdmVcbiAgICAgICAgWyhhcHBsaWNhdGlvbildPVwicGFja2FnZVwiXG4gICAgICAgIFt1cGxvYWROZXdWZXJzaW9uXT1cInRydWVcIlxuICAgICAgICAocmVmcmVzaCk9XCJwYWNrYWdlVmVyc2lvblVwbG9hZGVkKClcIlxuICAgICAgICBbcHJlVXBsb2FkQ2FsbGJhY2tdPVwicHJlVXBsb2FkQ2FsbGJhY2tcIlxuICAgICAgPjwvYzh5LXVwbG9hZC1hcmNoaXZlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19