@c8y/ngx-components 1017.0.31 → 1017.0.33

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 (43) 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/esm2020/operations/operations-list/operations-list-item.component.mjs +3 -3
  23. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +61 -12
  24. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  25. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +90 -7
  26. package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  27. package/fesm2015/c8y-ngx-components-ecosystem.mjs +143 -24
  28. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  29. package/fesm2015/c8y-ngx-components-operations-operations-list.mjs +2 -2
  30. package/fesm2015/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  31. package/fesm2015/c8y-ngx-components.mjs +2 -2
  32. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  33. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +61 -12
  34. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  35. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +90 -7
  36. package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  37. package/fesm2020/c8y-ngx-components-ecosystem.mjs +143 -24
  38. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  39. package/fesm2020/c8y-ngx-components-operations-operations-list.mjs +2 -2
  40. package/fesm2020/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  41. package/fesm2020/c8y-ngx-components.mjs +2 -2
  42. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  43. package/package.json +2 -2
@@ -1,11 +1,11 @@
1
1
  import { OnDestroy, OnInit } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
3
  import { ApplicationRemotePlugins, IApplication } from '@c8y/client';
4
- import { ActionControl, AlertService, ApplicationPlugin, BulkActionControl, Column, DataGridComponent, DisplayOptions, HeaderActionControl, ModalService, Pagination, PluginsService } from '@c8y/ngx-components';
4
+ import { ActionControl, AlertService, ApplicationPlugin, BulkActionControl, Column, DataGridComponent, DisplayOptions, GainsightService, HeaderActionControl, ModalService, Pagination, PluginsService } from '@c8y/ngx-components';
5
+ import { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
5
6
  import { TranslateService } from '@ngx-translate/core';
6
7
  import { BsModalService } from 'ngx-bootstrap/modal';
7
8
  import { BehaviorSubject, Observable } from 'rxjs';
8
- import { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
9
9
  import * as i0 from "@angular/core";
10
10
  export declare class ApplicationPluginsComponent implements OnInit, OnDestroy {
11
11
  private activatedRoute;
@@ -15,6 +15,57 @@ export declare class ApplicationPluginsComponent implements OnInit, OnDestroy {
15
15
  private translateService;
16
16
  private pluginsService;
17
17
  private alertService;
18
+ private gainsightService;
19
+ PRODUCT_EXPERIENCE: {
20
+ APPLICATIONS: {
21
+ EVENTS: {
22
+ AVAILABILITY: string;
23
+ APPLICATION_CARD: string;
24
+ APPLICATION_PROPERTIES: string;
25
+ DEPLOY_APPLICATION: string;
26
+ DUPLICATE_APPLICATION: string;
27
+ INSTALLED_PLUGINS: string;
28
+ PACKAGE_PLUGINS: string;
29
+ PACKAGE_VERSIONS: string;
30
+ };
31
+ COMPONENTS: {
32
+ APPLICATION_CARD: string;
33
+ APPLICATION_PLUGINS: string;
34
+ APPLICATION_PROPERTIES: string;
35
+ DEPLOY_APPLICATION: string;
36
+ DUPLICATE_APPLICATION_PROPERTIES: string;
37
+ PLUGIN_LIST: string;
38
+ PACKAGE_VERSIONS: string;
39
+ UPDATE_PLUGIN_OF_APP: string;
40
+ };
41
+ ACTIONS: {
42
+ AVAILABILITY_CHANGE: string;
43
+ CANCEL: string;
44
+ CLONE: string;
45
+ CHANGE_PLUGIN_VERSION: string;
46
+ DELETE: string;
47
+ DOWNLOAD: string;
48
+ DEPLOY_APPLICATION: string;
49
+ EDIT: string;
50
+ INSTALL_PLUGIN: string;
51
+ INSTALL_PLUGINS: string;
52
+ SELECT_VERSION: string;
53
+ SET_AS_LATEST: string;
54
+ UPDATE_AVAILABLE: string;
55
+ UPLOAD: string;
56
+ };
57
+ RESULTS: {
58
+ DEPLOYED: string;
59
+ DUPLICATED: string;
60
+ PLUGIN_INSTALLED: string;
61
+ PLUGIN_REMOVED: string;
62
+ PLUGIN_VERSION_CHANGED: string;
63
+ SERVER_FAILURE: string;
64
+ SUCCESS: string;
65
+ };
66
+ };
67
+ };
68
+ CURRENT_LOCATION: string;
18
69
  appId: string | number;
19
70
  dataGrid: DataGridComponent;
20
71
  exportedPlugins$: BehaviorSubject<ApplicationPlugin[]>;
@@ -34,7 +85,7 @@ export declare class ApplicationPluginsComponent implements OnInit, OnDestroy {
34
85
  displayOptions: DisplayOptions;
35
86
  columns: Column[];
36
87
  private destroy$;
37
- constructor(activatedRoute: ActivatedRoute, ecosystemService: EcosystemService, bsModalService: BsModalService, modal: ModalService, translateService: TranslateService, pluginsService: PluginsService, alertService: AlertService);
88
+ constructor(activatedRoute: ActivatedRoute, ecosystemService: EcosystemService, bsModalService: BsModalService, modal: ModalService, translateService: TranslateService, pluginsService: PluginsService, alertService: AlertService, gainsightService: GainsightService);
38
89
  ngOnInit(): void;
39
90
  loadData(): Promise<void>;
40
91
  installPlugins(): Promise<void>;
@@ -1,10 +1,10 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { ApplicationRemotePlugins, IApplication } from '@c8y/client';
3
- import { AlertService, ApplicationPlugin, PluginsService } from '@c8y/ngx-components';
3
+ import { AlertService, ApplicationPlugin, GainsightService, PluginsService } from '@c8y/ngx-components';
4
+ import { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
4
5
  import { TranslateService } from '@ngx-translate/core';
5
6
  import { BsModalService } from 'ngx-bootstrap/modal';
6
7
  import { BehaviorSubject, Observable } from 'rxjs';
7
- import { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
8
8
  import * as i0 from "@angular/core";
9
9
  export declare class PluginListComponent {
10
10
  private ecosystemService;
@@ -12,6 +12,8 @@ export declare class PluginListComponent {
12
12
  private pluginsService;
13
13
  private alertService;
14
14
  private translateService;
15
+ private gainsightService;
16
+ CURRENT_LOCATION: string;
15
17
  plugins$: Observable<ApplicationPlugin[]>;
16
18
  emptyListText: string;
17
19
  selectable: boolean;
@@ -24,7 +26,7 @@ export declare class PluginListComponent {
24
26
  remotePlugins$: BehaviorSubject<ApplicationRemotePlugins>;
25
27
  selectedPlugins: object;
26
28
  installingPluginId: string;
27
- constructor(ecosystemService: EcosystemService, bsModalService: BsModalService, pluginsService: PluginsService, alertService: AlertService, translateService: TranslateService);
29
+ constructor(ecosystemService: EcosystemService, bsModalService: BsModalService, pluginsService: PluginsService, alertService: AlertService, translateService: TranslateService, gainsightService: GainsightService);
28
30
  updateSelectedItems(value: boolean, pluginId: string): void;
29
31
  installPlugin(plugin: ApplicationPlugin): Promise<void>;
30
32
  private handleRemotesInstallation;
@@ -1,11 +1,13 @@
1
1
  import { IApplication, IApplicationVersion } from '@c8y/client';
2
- import { AlertService, ApplicationPlugin, PluginsService } from '@c8y/ngx-components';
2
+ import { AlertService, ApplicationPlugin, GainsightService, PluginsService } from '@c8y/ngx-components';
3
3
  import { BsModalRef } from 'ngx-bootstrap/modal';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class UpdatePluginOfAppComponent {
6
6
  private bsModalRef;
7
7
  private pluginsService;
8
8
  private alert;
9
+ private gainsightService;
10
+ CURRENT_LOCATION: string;
9
11
  app: IApplication;
10
12
  plugin: ApplicationPlugin;
11
13
  downgrade: boolean;
@@ -14,7 +16,7 @@ export declare class UpdatePluginOfAppComponent {
14
16
  updateAll: boolean;
15
17
  private _install;
16
18
  private _cancel;
17
- constructor(bsModalRef: BsModalRef, pluginsService: PluginsService, alert: AlertService);
19
+ constructor(bsModalRef: BsModalRef, pluginsService: PluginsService, alert: AlertService, gainsightService: GainsightService);
18
20
  update(): Promise<void>;
19
21
  cancel(): void;
20
22
  static ɵfac: i0.ɵɵFactoryDeclaration<UpdatePluginOfAppComponent, never>;
@@ -2,10 +2,10 @@ import { OnInit } from '@angular/core';
2
2
  import { FormBuilder, FormGroup } from '@angular/forms';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
4
  import { ApplicationService, IApplication, IManagedObject, InventoryService } from '@c8y/client';
5
- import { AlertService, ModalService, Permissions, PropertiesListItem } from '@c8y/ngx-components';
5
+ import { AlertService, GainsightService, ModalService, Permissions, PropertiesListItem } from '@c8y/ngx-components';
6
+ import { ApplicationState, EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
6
7
  import { TranslateService } from '@ngx-translate/core';
7
8
  import { BsModalService } from 'ngx-bootstrap/modal';
8
- import { ApplicationState, EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
9
9
  import * as i0 from "@angular/core";
10
10
  export declare class ApplicationPropertiesComponent implements OnInit {
11
11
  private activatedRoute;
@@ -19,6 +19,8 @@ export declare class ApplicationPropertiesComponent implements OnInit {
19
19
  private modalService;
20
20
  private translate;
21
21
  private bsModalService;
22
+ private gainsightService;
23
+ CURRENT_LOCATION: string;
22
24
  formGroup: FormGroup;
23
25
  application: IApplication;
24
26
  binaryMo: IManagedObject;
@@ -54,7 +56,7 @@ export declare class ApplicationPropertiesComponent implements OnInit {
54
56
  isUpdateAvailable: boolean;
55
57
  isUpdateOngoing: boolean;
56
58
  private blueprintApplicationVersion;
57
- constructor(activatedRoute: ActivatedRoute, ecosystemService: EcosystemService, router: Router, formBuilder: FormBuilder, applicationService: ApplicationService, alertService: AlertService, inventoryService: InventoryService, permissions: Permissions, modalService: ModalService, translate: TranslateService, bsModalService: BsModalService);
59
+ constructor(activatedRoute: ActivatedRoute, ecosystemService: EcosystemService, router: Router, formBuilder: FormBuilder, applicationService: ApplicationService, alertService: AlertService, inventoryService: InventoryService, permissions: Permissions, modalService: ModalService, translate: TranslateService, bsModalService: BsModalService, gainsightService: GainsightService);
58
60
  ngOnInit(): Promise<void>;
59
61
  refresh(): Promise<void>;
60
62
  load(): Promise<void>;
@@ -1,9 +1,8 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { ApplicationService, IApplication, IApplicationVersion, InventoryService } from '@c8y/client';
3
- import { WizardComponent } from '@c8y/ngx-components';
3
+ import { GainsightService, WizardComponent } from '@c8y/ngx-components';
4
+ import { ApplicationPropertiesFormComponent, EcosystemService } 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
  export declare class DeployApplicationComponent implements OnInit {
9
8
  private ecosystemService;
@@ -11,6 +10,8 @@ export declare class DeployApplicationComponent implements OnInit {
11
10
  private wizardComponent;
12
11
  private translate;
13
12
  private inventoryService;
13
+ private gainsightService;
14
+ CURRENT_LOCATION: string;
14
15
  inProgress: boolean;
15
16
  package: IApplication;
16
17
  isDeployed: boolean;
@@ -29,7 +30,7 @@ export declare class DeployApplicationComponent implements OnInit {
29
30
  readonly doneLabel: any;
30
31
  readonly cancelLabel: any;
31
32
  headerText: string;
32
- constructor(ecosystemService: EcosystemService, applicationService: ApplicationService, wizardComponent: WizardComponent, translate: TranslateService, inventoryService: InventoryService);
33
+ constructor(ecosystemService: EcosystemService, applicationService: ApplicationService, wizardComponent: WizardComponent, translate: TranslateService, inventoryService: InventoryService, gainsightService: GainsightService);
33
34
  ngOnInit(): Promise<void>;
34
35
  deployApp(): Promise<void>;
35
36
  fallbackToCloneLatest(config: any): Promise<void>;
@@ -1,12 +1,14 @@
1
1
  import { ApplicationAvailability, ApplicationService, IApplication } from '@c8y/client';
2
- import { AlertService, AppStateService, ModalService } from '@c8y/ngx-components';
2
+ import { AlertService, AppStateService, GainsightService, ModalService } from '@c8y/ngx-components';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class PackageAvailabilityService {
5
5
  private appState;
6
6
  private alert;
7
7
  private modal;
8
8
  private application;
9
- constructor(appState: AppStateService, alert: AlertService, modal: ModalService, application: ApplicationService);
9
+ private gainsightService;
10
+ CURRENT_LOCATION: string;
11
+ constructor(appState: AppStateService, alert: AlertService, modal: ModalService, application: ApplicationService, gainsightService: GainsightService);
10
12
  askIfAvailabilityShouldBeSetTo(applicationPackage: IApplication, availability: ApplicationAvailability): Promise<IApplication>;
11
13
  private openAvailabilityModal;
12
14
  private getConfirmationBody;
@@ -1,7 +1,7 @@
1
1
  import { EventEmitter, OnInit } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
3
  import { IApplication, IApplicationVersion } from '@c8y/client';
4
- import { AlertService, ModalService, OptionsService, Permissions, PluginsService } from '@c8y/ngx-components';
4
+ import { AlertService, GainsightService, ModalService, OptionsService, Permissions, PluginsService } from '@c8y/ngx-components';
5
5
  import { EcosystemService } from '@c8y/ngx-components/ecosystem/shared';
6
6
  import { TranslateService } from '@ngx-translate/core';
7
7
  import * as i0 from "@angular/core";
@@ -14,6 +14,8 @@ export declare class PackageVersionsListComponent implements OnInit {
14
14
  private alertService;
15
15
  private optionsService;
16
16
  private permissions;
17
+ private gainsightService;
18
+ CURRENT_LOCATION: string;
17
19
  versionsLimit: number;
18
20
  isLoading: boolean;
19
21
  package: IApplication;
@@ -23,7 +25,7 @@ export declare class PackageVersionsListComponent implements OnInit {
23
25
  hasAdminPermissions: boolean;
24
26
  isPackageOwnedByCurrentTenant: boolean;
25
27
  onVersionSelect: EventEmitter<string>;
26
- constructor(activatedRoute: ActivatedRoute, pluginsService: PluginsService, ecosystemService: EcosystemService, translateService: TranslateService, modal: ModalService, alertService: AlertService, optionsService: OptionsService, permissions: Permissions);
28
+ constructor(activatedRoute: ActivatedRoute, pluginsService: PluginsService, ecosystemService: EcosystemService, translateService: TranslateService, modal: ModalService, alertService: AlertService, optionsService: OptionsService, permissions: Permissions, gainsightService: GainsightService);
27
29
  ngOnInit(): Promise<void>;
28
30
  downloadArchive(appVersion: IApplicationVersion): Promise<void>;
29
31
  packageVersionUploaded(): void;
@@ -1,9 +1,9 @@
1
1
  import { EventEmitter, OnInit } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
3
  import { ApplicationService, IApplication, IApplicationVersion } from '@c8y/client';
4
- import { AlertService, WizardModalService } from '@c8y/ngx-components';
5
- import { EcosystemService } from './ecosystem.service';
4
+ import { AlertService, GainsightService, WizardModalService } from '@c8y/ngx-components';
6
5
  import { ApplicationState } from './ecosystem.model';
6
+ import { EcosystemService } from './ecosystem.service';
7
7
  import * as i0 from "@angular/core";
8
8
  export declare class ApplicationCardComponent implements OnInit {
9
9
  private applicationService;
@@ -12,6 +12,8 @@ export declare class ApplicationCardComponent implements OnInit {
12
12
  private router;
13
13
  private wizardModalService;
14
14
  private alert;
15
+ private gainsightService;
16
+ CURRENT_LOCATION: string;
15
17
  app: IApplication;
16
18
  canEdit: boolean;
17
19
  onAppDeleted: EventEmitter<void>;
@@ -34,7 +36,7 @@ export declare class ApplicationCardComponent implements OnInit {
34
36
  isOwnedByManagementTenant: boolean;
35
37
  get openButtonTitle(): any;
36
38
  readonly CANNOT_DELETE_HINT: any;
37
- constructor(applicationService: ApplicationService, ecosystemService: EcosystemService, alertService: AlertService, router: Router, wizardModalService: WizardModalService, alert: AlertService);
39
+ constructor(applicationService: ApplicationService, ecosystemService: EcosystemService, alertService: AlertService, router: Router, wizardModalService: WizardModalService, alert: AlertService, gainsightService: GainsightService);
38
40
  ngOnInit(): Promise<void>;
39
41
  shouldShowVersion(): boolean;
40
42
  detail(): void;
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { ApplicationService, IApplication } from '@c8y/client';
3
- import { C8yStepper } from '@c8y/ngx-components';
3
+ import { C8yStepper, GainsightService } from '@c8y/ngx-components';
4
4
  import { BsModalRef } from 'ngx-bootstrap/modal';
5
5
  import { BehaviorSubject, Observable } from 'rxjs';
6
6
  import { EcosystemService } from '../../ecosystem.service';
@@ -10,6 +10,8 @@ export declare class DuplicateApplicationPropertiesComponent {
10
10
  private bsModalRef;
11
11
  private ecosystemService;
12
12
  private applicationService;
13
+ private gainsightService;
14
+ CURRENT_LOCATION: string;
13
15
  stepper: C8yStepper;
14
16
  existingApps: IApplication[];
15
17
  selectedApp: BehaviorSubject<IApplication>;
@@ -20,7 +22,7 @@ export declare class DuplicateApplicationPropertiesComponent {
20
22
  disableForm: boolean;
21
23
  isSubscribedApp$: Observable<boolean>;
22
24
  inProgress: boolean;
23
- constructor(bsModalRef: BsModalRef, ecosystemService: EcosystemService, applicationService: ApplicationService);
25
+ constructor(bsModalRef: BsModalRef, ecosystemService: EcosystemService, applicationService: ApplicationService, gainsightService: GainsightService);
24
26
  ngOnInit(): void;
25
27
  duplicateApp(): Promise<void>;
26
28
  cancel(): void;
@@ -16,3 +16,52 @@ export declare enum ERROR_TYPE {
16
16
  INVALID_APPLICATION = "INVALID_APPLICATION",
17
17
  MICROSERVICE_NAME_TOO_LONG = "MICROSERVICE_NAME_TOO_LONG"
18
18
  }
19
+ export declare const PRODUCT_EXPERIENCE: {
20
+ APPLICATIONS: {
21
+ EVENTS: {
22
+ AVAILABILITY: string;
23
+ APPLICATION_CARD: string;
24
+ APPLICATION_PROPERTIES: string;
25
+ DEPLOY_APPLICATION: string;
26
+ DUPLICATE_APPLICATION: string;
27
+ INSTALLED_PLUGINS: string;
28
+ PACKAGE_PLUGINS: string;
29
+ PACKAGE_VERSIONS: string;
30
+ };
31
+ COMPONENTS: {
32
+ APPLICATION_CARD: string;
33
+ APPLICATION_PLUGINS: string;
34
+ APPLICATION_PROPERTIES: string;
35
+ DEPLOY_APPLICATION: string;
36
+ DUPLICATE_APPLICATION_PROPERTIES: string;
37
+ PLUGIN_LIST: string;
38
+ PACKAGE_VERSIONS: string;
39
+ UPDATE_PLUGIN_OF_APP: string;
40
+ };
41
+ ACTIONS: {
42
+ AVAILABILITY_CHANGE: string;
43
+ CANCEL: string;
44
+ CLONE: string;
45
+ CHANGE_PLUGIN_VERSION: string;
46
+ DELETE: string;
47
+ DOWNLOAD: string;
48
+ DEPLOY_APPLICATION: string;
49
+ EDIT: string;
50
+ INSTALL_PLUGIN: string;
51
+ INSTALL_PLUGINS: string;
52
+ SELECT_VERSION: string;
53
+ SET_AS_LATEST: string;
54
+ UPDATE_AVAILABLE: string;
55
+ UPLOAD: string;
56
+ };
57
+ RESULTS: {
58
+ DEPLOYED: string;
59
+ DUPLICATED: string;
60
+ PLUGIN_INSTALLED: string;
61
+ PLUGIN_REMOVED: string;
62
+ PLUGIN_VERSION_CHANGED: string;
63
+ SERVER_FAILURE: string;
64
+ SUCCESS: string;
65
+ };
66
+ };
67
+ };
@@ -203,10 +203,10 @@ export class HelpComponent {
203
203
  }
204
204
  }
205
205
  HelpComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: HelpComponent, deps: [{ token: i1.DocsService }, { token: i2.AppStateService }, { token: i3.HelpService }], target: i0.ɵɵFactoryTarget.Component });
206
- HelpComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: HelpComponent, selector: "c8y-help", inputs: { src: "src", isCollapsed: "isCollapsed", priority: "priority", icon: "icon" }, ngImport: i0, template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n itemClass=\"pull-right m-l-8\"\n [priority]=\"priority\"\n *ngIf=\"!!(helpService.contextHelp | async)\"\n>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'About this page' | translate\"\n [attr.aria-expanded]=\"!isCollapsed\"\n aria-controls=\"collapseHelp\"\n tooltip=\"{{ 'About this page' | translate }}\"\n [delay]=\"750\"\n placement=\"left\"\n container=\"body\"\n (click)=\"toggle()\"\n c8yProductExperience\n [actionName]=\"isCollapsed ? 'helpOpened' : 'helpClosed'\"\n [actionData]=\"{ src: src }\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n</c8y-action-bar-item>\n\n<div\n id=\"collapseHelp\"\n class=\"c8y-help-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n (collapsed)=\"onCollapsed()\"\n>\n <div\n [ngClass]=\"{ 'c8y-help-drawer-block': isInit }\"\n #docOutlet\n >\n <div *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!isLoading\">\n <div class=\"d-flex\">\n <i\n [c8yIcon]=\"!hasError ? icon : 'unlink'\"\n [ngClass]=\"{ 'text-warning': hasError, 'text-muted': !hasError }\"\n class=\"c8y-icon-duocolor icon-48\"\n ></i>\n <div\n class=\"p-l-16 flex-grow\"\n *ngIf=\"!hasError\"\n >\n <div\n class=\"alert alert-info m-b-16\"\n *ngIf=\"\n !helpService.isSupportedLanguage() &&\n !showLangWarning &&\n !helpService.isWarningAlertViewed\n \"\n >\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"\n showLangWarning = !showLangWarning;\n helpService.isWarningAlertViewed = !helpService.isWarningAlertViewed\n \"\n [attr.aria-label]=\"'Close' | translate\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n <span class=\"sr-only\">Close</span>\n </button>\n <p>\n {{ 'Help content is only available in English.' | translate }}\n </p>\n </div>\n <h4 class=\"text-bold text-primary p-t-16 m-b-16\">\n {{ title }}\n </h4>\n <div\n id=\"helpContent\"\n class=\"help-content\"\n [innerHTML]=\"sectionContent\"\n ></div>\n </div>\n\n <div\n class=\"p-l-16 p-t-16 flex-grow\"\n *ngIf=\"hasError\"\n >\n <h4\n class=\"text-bold m-b-16\"\n translate\n >Sorry, that didn't work</h4>\n <div class=\"help-content\">\n <p translate>The content couldn't be loaded.</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"c8y-help-drawer-footer animated fadeIn\"\n style=\"animation-delay: 0.35s\"\n *ngIf=\"!isLoading && !hasError\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"toggle()\"\n [title]=\"'Close help' | translate\"\n type=\"button\"\n [attr.aria-expanded]=\"!isCollapsed\"\n aria-controls=\"collapseHelp\"\n translate\n >\n Close\n </button>\n <a\n href=\"{{ hasError ? getUrl() : getUrl(src) }}\"\n class=\"btn btn-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span\n translate\n *ngIf=\"!hasError\"\n >\n Open the\n <span>User guide`KEEP_ORIGINAL`</span>\n </span>\n <span\n translate\n *ngIf=\"hasError\"\n >\n Check the\n <span>User guide`KEEP_ORIGINAL`</span>\n </span>\n </a>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "c8y-loading" }, { kind: "directive", type: i8.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "directive", type: i9.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i10.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "directive", type: i11.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit"] }, { kind: "pipe", type: i12.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] });
206
+ HelpComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: HelpComponent, selector: "c8y-help", inputs: { src: "src", isCollapsed: "isCollapsed", priority: "priority", icon: "icon" }, ngImport: i0, template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n itemClass=\"pull-right m-l-8\"\n [priority]=\"priority\"\n *ngIf=\"!!(helpService.contextHelp | async)\"\n>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'About this page' | translate\"\n [attr.aria-expanded]=\"!isCollapsed\"\n aria-controls=\"collapseHelp\"\n tooltip=\"{{ 'About this page' | translate }}\"\n [delay]=\"750\"\n placement=\"left\"\n container=\"body\"\n (click)=\"toggle()\"\n c8yProductExperience\n [actionName]=\"isCollapsed ? 'helpOpened' : 'helpClosed'\"\n [actionData]=\"{ src: src }\"\n >\n </button>\n</c8y-action-bar-item>\n\n<div\n id=\"collapseHelp\"\n class=\"c8y-help-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n (collapsed)=\"onCollapsed()\"\n>\n <div\n [ngClass]=\"{ 'c8y-help-drawer-block': isInit }\"\n #docOutlet\n >\n <div *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!isLoading\">\n <div class=\"d-flex\">\n <i\n [c8yIcon]=\"!hasError ? icon : 'unlink'\"\n [ngClass]=\"{ 'text-warning': hasError, 'text-muted': !hasError }\"\n class=\"c8y-icon-duocolor icon-48\"\n ></i>\n <div\n class=\"p-l-16 flex-grow\"\n *ngIf=\"!hasError\"\n >\n <div\n class=\"alert alert-info m-b-16\"\n *ngIf=\"\n !helpService.isSupportedLanguage() &&\n !showLangWarning &&\n !helpService.isWarningAlertViewed\n \"\n >\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"\n showLangWarning = !showLangWarning;\n helpService.isWarningAlertViewed = !helpService.isWarningAlertViewed\n \"\n [attr.aria-label]=\"'Close' | translate\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n <span class=\"sr-only\">Close</span>\n </button>\n <p>\n {{ 'Help content is only available in English.' | translate }}\n </p>\n </div>\n <h4 class=\"text-bold text-primary p-t-16 m-b-16\">\n {{ title }}\n </h4>\n <div\n id=\"helpContent\"\n class=\"help-content\"\n [innerHTML]=\"sectionContent\"\n ></div>\n </div>\n\n <div\n class=\"p-l-16 p-t-16 flex-grow\"\n *ngIf=\"hasError\"\n >\n <h4\n class=\"text-bold m-b-16\"\n translate\n >Sorry, that didn't work</h4>\n <div class=\"help-content\">\n <p translate>The content couldn't be loaded.</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"c8y-help-drawer-footer animated fadeIn\"\n style=\"animation-delay: 0.35s\"\n *ngIf=\"!isLoading && !hasError\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"toggle()\"\n [title]=\"'Close help' | translate\"\n type=\"button\"\n [attr.aria-expanded]=\"!isCollapsed\"\n aria-controls=\"collapseHelp\"\n translate\n >\n Close\n </button>\n <a\n href=\"{{ hasError ? getUrl() : getUrl(src) }}\"\n class=\"btn btn-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span\n translate\n *ngIf=\"!hasError\"\n >\n Open the\n <span>User guide`KEEP_ORIGINAL`</span>\n </span>\n <span\n translate\n *ngIf=\"hasError\"\n >\n Check the\n <span>User guide`KEEP_ORIGINAL`</span>\n </span>\n </a>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "c8y-loading" }, { kind: "directive", type: i8.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "directive", type: i9.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i10.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId"] }, { kind: "directive", type: i11.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit"] }, { kind: "pipe", type: i12.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] });
207
207
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: HelpComponent, decorators: [{
208
208
  type: Component,
209
- args: [{ selector: 'c8y-help', template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n itemClass=\"pull-right m-l-8\"\n [priority]=\"priority\"\n *ngIf=\"!!(helpService.contextHelp | async)\"\n>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'About this page' | translate\"\n [attr.aria-expanded]=\"!isCollapsed\"\n aria-controls=\"collapseHelp\"\n tooltip=\"{{ 'About this page' | translate }}\"\n [delay]=\"750\"\n placement=\"left\"\n container=\"body\"\n (click)=\"toggle()\"\n c8yProductExperience\n [actionName]=\"isCollapsed ? 'helpOpened' : 'helpClosed'\"\n [actionData]=\"{ src: src }\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n</c8y-action-bar-item>\n\n<div\n id=\"collapseHelp\"\n class=\"c8y-help-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n (collapsed)=\"onCollapsed()\"\n>\n <div\n [ngClass]=\"{ 'c8y-help-drawer-block': isInit }\"\n #docOutlet\n >\n <div *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!isLoading\">\n <div class=\"d-flex\">\n <i\n [c8yIcon]=\"!hasError ? icon : 'unlink'\"\n [ngClass]=\"{ 'text-warning': hasError, 'text-muted': !hasError }\"\n class=\"c8y-icon-duocolor icon-48\"\n ></i>\n <div\n class=\"p-l-16 flex-grow\"\n *ngIf=\"!hasError\"\n >\n <div\n class=\"alert alert-info m-b-16\"\n *ngIf=\"\n !helpService.isSupportedLanguage() &&\n !showLangWarning &&\n !helpService.isWarningAlertViewed\n \"\n >\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"\n showLangWarning = !showLangWarning;\n helpService.isWarningAlertViewed = !helpService.isWarningAlertViewed\n \"\n [attr.aria-label]=\"'Close' | translate\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n <span class=\"sr-only\">Close</span>\n </button>\n <p>\n {{ 'Help content is only available in English.' | translate }}\n </p>\n </div>\n <h4 class=\"text-bold text-primary p-t-16 m-b-16\">\n {{ title }}\n </h4>\n <div\n id=\"helpContent\"\n class=\"help-content\"\n [innerHTML]=\"sectionContent\"\n ></div>\n </div>\n\n <div\n class=\"p-l-16 p-t-16 flex-grow\"\n *ngIf=\"hasError\"\n >\n <h4\n class=\"text-bold m-b-16\"\n translate\n >Sorry, that didn't work</h4>\n <div class=\"help-content\">\n <p translate>The content couldn't be loaded.</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"c8y-help-drawer-footer animated fadeIn\"\n style=\"animation-delay: 0.35s\"\n *ngIf=\"!isLoading && !hasError\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"toggle()\"\n [title]=\"'Close help' | translate\"\n type=\"button\"\n [attr.aria-expanded]=\"!isCollapsed\"\n aria-controls=\"collapseHelp\"\n translate\n >\n Close\n </button>\n <a\n href=\"{{ hasError ? getUrl() : getUrl(src) }}\"\n class=\"btn btn-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span\n translate\n *ngIf=\"!hasError\"\n >\n Open the\n <span>User guide`KEEP_ORIGINAL`</span>\n </span>\n <span\n translate\n *ngIf=\"hasError\"\n >\n Check the\n <span>User guide`KEEP_ORIGINAL`</span>\n </span>\n </a>\n </div>\n</div>" }]
209
+ args: [{ selector: 'c8y-help', template: "<c8y-action-bar-item\n [placement]=\"'right'\"\n itemClass=\"pull-right m-l-8\"\n [priority]=\"priority\"\n *ngIf=\"!!(helpService.contextHelp | async)\"\n>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'About this page' | translate\"\n [attr.aria-expanded]=\"!isCollapsed\"\n aria-controls=\"collapseHelp\"\n tooltip=\"{{ 'About this page' | translate }}\"\n [delay]=\"750\"\n placement=\"left\"\n container=\"body\"\n (click)=\"toggle()\"\n c8yProductExperience\n [actionName]=\"isCollapsed ? 'helpOpened' : 'helpClosed'\"\n [actionData]=\"{ src: src }\"\n >\n </button>\n</c8y-action-bar-item>\n\n<div\n id=\"collapseHelp\"\n class=\"c8y-help-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n (collapsed)=\"onCollapsed()\"\n>\n <div\n [ngClass]=\"{ 'c8y-help-drawer-block': isInit }\"\n #docOutlet\n >\n <div *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!isLoading\">\n <div class=\"d-flex\">\n <i\n [c8yIcon]=\"!hasError ? icon : 'unlink'\"\n [ngClass]=\"{ 'text-warning': hasError, 'text-muted': !hasError }\"\n class=\"c8y-icon-duocolor icon-48\"\n ></i>\n <div\n class=\"p-l-16 flex-grow\"\n *ngIf=\"!hasError\"\n >\n <div\n class=\"alert alert-info m-b-16\"\n *ngIf=\"\n !helpService.isSupportedLanguage() &&\n !showLangWarning &&\n !helpService.isWarningAlertViewed\n \"\n >\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"\n showLangWarning = !showLangWarning;\n helpService.isWarningAlertViewed = !helpService.isWarningAlertViewed\n \"\n [attr.aria-label]=\"'Close' | translate\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n <span class=\"sr-only\">Close</span>\n </button>\n <p>\n {{ 'Help content is only available in English.' | translate }}\n </p>\n </div>\n <h4 class=\"text-bold text-primary p-t-16 m-b-16\">\n {{ title }}\n </h4>\n <div\n id=\"helpContent\"\n class=\"help-content\"\n [innerHTML]=\"sectionContent\"\n ></div>\n </div>\n\n <div\n class=\"p-l-16 p-t-16 flex-grow\"\n *ngIf=\"hasError\"\n >\n <h4\n class=\"text-bold m-b-16\"\n translate\n >Sorry, that didn't work</h4>\n <div class=\"help-content\">\n <p translate>The content couldn't be loaded.</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"c8y-help-drawer-footer animated fadeIn\"\n style=\"animation-delay: 0.35s\"\n *ngIf=\"!isLoading && !hasError\"\n >\n <button\n class=\"btn btn-default\"\n (click)=\"toggle()\"\n [title]=\"'Close help' | translate\"\n type=\"button\"\n [attr.aria-expanded]=\"!isCollapsed\"\n aria-controls=\"collapseHelp\"\n translate\n >\n Close\n </button>\n <a\n href=\"{{ hasError ? getUrl() : getUrl(src) }}\"\n class=\"btn btn-primary\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <span\n translate\n *ngIf=\"!hasError\"\n >\n Open the\n <span>User guide`KEEP_ORIGINAL`</span>\n </span>\n <span\n translate\n *ngIf=\"hasError\"\n >\n Check the\n <span>User guide`KEEP_ORIGINAL`</span>\n </span>\n </a>\n </div>\n</div>" }]
210
210
  }], ctorParameters: function () { return [{ type: i1.DocsService }, { type: i2.AppStateService }, { type: i3.HelpService }]; }, propDecorators: { src: [{
211
211
  type: Input
212
212
  }], isCollapsed: [{
@@ -216,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
216
216
  }], icon: [{
217
217
  type: Input
218
218
  }] } });
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2hlbHAvaGVscC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2hlbHAvaGVscC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFDN0M7Ozs7Ozs7O0dBUUc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQW9FeEI7O09BRUc7SUFDSCxZQUNVLFdBQXdCLEVBQ3hCLFFBQXlCLEVBQzFCLFdBQXdCO1FBRnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBekVqQzs7O1dBR0c7UUFFSCxRQUFHLEdBQVcsRUFBRSxDQUFDO1FBRWpCOztXQUVHO1FBRUgsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkI7O1dBRUc7UUFFSCxhQUFRLEdBQUcsUUFBUSxDQUFDO1FBUXBCOzs7O1dBSUc7UUFDSCxZQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJEOztXQUVHO1FBQ0gsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYOztXQUVHO1FBQ0gsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFFcEI7O1dBRUc7UUFDSCxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUVwQjs7V0FFRztRQUNILGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFakI7O1dBRUc7UUFDSCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCOztXQUVHO1FBQ0gsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFakM7O1dBRUc7UUFDSCxXQUFNLEdBQUcsS0FBSyxDQUFDO0lBU1osQ0FBQztJQUVKOzs7O09BSUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSztRQUM1QixJQUFJLE9BQU8sQ0FBQztRQUVaLElBQUk7WUFDRixPQUFPO2dCQUNMLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLFFBQVE7b0JBQ3BELENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7b0JBQzdDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7U0FDOUM7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDMUQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFM0MsTUFBTSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDO1FBRW5DLElBQUksS0FBSyxFQUFFO1lBQ1QsR0FBRyxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUM7U0FDMUI7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDdEQ7UUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUk7UUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDakMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0MsR0FBRyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDMUIsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDYixDQUFDO0lBRU8sS0FBSztRQUNYLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxZQUFZLENBQUMsU0FBbUM7UUFDdEQsTUFBTSxPQUFPLEdBQVcsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFMUYsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDeEIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUU7WUFDbEIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLEdBQUcsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUNyRSxPQUFPLEdBQUcsV0FBVyxJQUFJLFdBQVcsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUk7WUFDRixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUM3RSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FDbEYsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN2RTtRQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxZQUFZLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLEdBQW1CO1FBQ2hDLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNiO1lBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLFdBQVcsRUFBRTtvQkFDZixJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7b0JBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztpQkFDL0M7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUN0QjtTQUNGO0lBQ0gsQ0FBQzs7MEdBbk5VLGFBQWE7OEZBQWIsYUFBYSx3SUNsQjFCLDJ1SEEwSU07MkZEeEhPLGFBQWE7a0JBSnpCLFNBQVM7K0JBQ0UsVUFBVTswSkFTcEIsR0FBRztzQkFERixLQUFLO2dCQU9OLFdBQVc7c0JBRFYsS0FBSztnQkFPTixRQUFRO3NCQURQLEtBQUs7Z0JBT04sSUFBSTtzQkFESCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBEb2NzU2VydmljZSB9IGZyb20gJy4uL2RvY3MvZG9jcy5zZXJ2aWNlJztcbmltcG9ydCB7IEhlbHBTZXJ2aWNlIH0gZnJvbSAnLi9oZWxwLnNlcnZpY2UnO1xuLyoqXG4gKiBBIGNvbXBvbmVudCB3aGljaCBzaG93cyBhIGNvbnRleHQgaGVscCBpblxuICogdGhlIGFjdGlvbiBiYXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxjOHktaGVscCBzcmM9XCIvdXNlcnMtZ3VpZGUvY29ja3BpdC8jZGFzaGJvYXJkc1wiPjwvYzh5LWhlbHA+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWhlbHAnLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVscC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSGVscENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBkb2N1bWVudGF0aW9uLiBVc2VkIHRvIGxpbmsgdG8gdGhlIGRvY3VtZW50YXRpb24gYXMgd2VsbCBhc1xuICAgKiB0byBwYXJzZSB0aGUgc291cmNlIHRvIGRpc3BsYXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBzcmM6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGhlbHAgZGlhbG9nIGlzIGNvbGxhcHNlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGlzQ29sbGFwc2VkID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIHByaW9yaXR5IHdoZXJlIHRoZSBoZWxwIGljb24gc2hvdWxkIGJlIHNob3duIGluIHRoZSBhY3Rpb24gYmFyXG4gICAqL1xuICBASW5wdXQoKVxuICBwcmlvcml0eSA9IEluZmluaXR5O1xuXG4gIC8qKlxuICAgKiBBbiBjdXN0b20gaWNvbi4gSWYgbm90IHNldCwgdGhlIG5hdmlnYXRvciBpY29uIGlzIHJlc29sdmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBpY29uO1xuXG4gIC8qKlxuICAgKiBDdXJycmVudCB2ZXJzaW9uIG9mIHRoZSBVSSB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IGRhdGEgZnJvbVxuICAgKiB0aGUgZG9jcy4gSWYgdGhlIFVJIHZlcnNpb24gaXMgZXF1YWwgdG8gdGhlIGxhdGVzdCBkb2MgdmVyc2lvbiwgdGhlIHZhbHVlXG4gICAqIG11c3QgYmUgJycuXG4gICAqL1xuICB2ZXJzaW9uID0gdGhpcy5wYXJzZVZlcnNpb24odGhpcy5hcHBTdGF0ZS51aVZlcnNpb24pO1xuXG4gIC8qKlxuICAgKiBBbiB0aXRsZS4gU2V0IGluIG9wZW4gYnkgcGFzc2luZyB0aGUgc291cmNlLlxuICAgKi9cbiAgdGl0bGUgPSAnJztcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gaGVhZGluZyBpbiB0aGUgZG9jIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIHNlY3Rpb25IZWFkaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIGNvbnRlbnQgaW4gdGhlIGRvYyB3aGljaCBpcyBnb2luZyB0byBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBzZWN0aW9uQ29udGVudCA9ICcnO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGNvbXBvbmVudCBpcyBsb2FkaW5nLlxuICAgKi9cbiAgaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBjb21wb25lbnQgZmFpbGVkIGxvYWRpbmcgdGhlIHNvdXJjZS5cbiAgICovXG4gIGhhc0Vycm9yID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBhIHdhcm5pbmcgc2hvdWxkIGJlIHNob3duLlxuICAgKi9cbiAgc2hvd0xhbmdXYXJuaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGlzSW5pdCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlIE9ubHkgcHJpdmF0ZSBESVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkb2NzU2VydmljZTogRG9jc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBoZWxwU2VydmljZTogSGVscFNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IGlzIHNob3duIGJ5IGRlZmF1bHQgYW5kIHRoZXJlZm9yZSBicmVha3MgZTJlIHRlc3QuIFRoaXMgaXNcbiAgICogdG8gcHJldmVudCB0aGUgdmlzaWJpbGl0eSBvbiBmaXJzdCBuYXZpZ2F0aW9uLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNvbGxhcHNlZCgpIHtcbiAgICB0aGlzLmlzSW5pdCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBVUkwgYmFzZWQgb24gdGhlIHNyYy4gVGhlIEJhc2UgVVJMIGNhbiBiZSBzZXQgaW4gdGhlIGFwcGxpY2F0aW9uIG9wdGlvbnMgZG9jQmFzZVVybC5cbiAgICogQHBhcmFtIHNyYyBUaGUgc291cmNlIG9mIHRoZSBoZWxwIG9uIHRoZSBndWlkZS5cbiAgICogQHBhcmFtIGluZGV4IFRoaXMgZmxhZyBpcyB1c2VkIHRvIGNhbGwgdGhlIGluZGV4Lmpzb24gY29udGVudCBvZiBhIGd1aWRlLiBGb3IgZXhhbXBsZSwgXCJodHRwczovL3d3dy5jdW11bG9jaXR5LmNvbS9ndWlkZXMvdXNlcnMtZ3VpZGUvY29ja3BpdC9pbmRleC5qc29uXCIuXG4gICAqL1xuICBnZXRVcmwoc3JjID0gJycsIGluZGV4ID0gZmFsc2UpIHtcbiAgICBsZXQgZG9jc1VybDtcblxuICAgIHRyeSB7XG4gICAgICBkb2NzVXJsID1cbiAgICAgICAgdHlwZW9mIHRoaXMuaGVscFNlcnZpY2UuY29udGV4dEhlbHAudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBuZXcgVVJMKHRoaXMuaGVscFNlcnZpY2UuY29udGV4dEhlbHAudmFsdWUpXG4gICAgICAgICAgOiBuZXcgVVJMKHRoaXMuZG9jc1NlcnZpY2UuZ2V0QmFzZVVybCgpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZG9jc1VybCA9IG5ldyBVUkwodGhpcy5kb2NzU2VydmljZS5ERUZBVUxUX0RPQ1NfQkFTRV9VUkwpO1xuICAgICAgY29uc29sZS53YXJuKGVycm9yKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcmNVcmwgPSBuZXcgVVJMKGAke2RvY3NVcmx9JHtzcmN9YCk7XG5cbiAgICBjb25zdCBbdXJsLCBoYXNoRnJhZ21lbnRdID0gc3JjLnNwbGl0KCcjJyk7XG4gICAgdGhpcy5zZWN0aW9uSGVhZGluZyA9IGhhc2hGcmFnbWVudDtcblxuICAgIGlmIChpbmRleCkge1xuICAgICAgc3JjID0gYCR7dXJsfWluZGV4Lmpzb25gO1xuICAgIH1cbiAgICBpZiAodGhpcy52ZXJzaW9uID09PSAnJykge1xuICAgICAgcmV0dXJuIGluZGV4ID8gYCR7ZG9jc1VybC5ocmVmICsgc3JjfWAgOiBzcmNVcmwuaHJlZjtcbiAgICB9XG4gICAgcmV0dXJuIGAke2RvY3NVcmwuaHJlZn0vJHt0aGlzLnZlcnNpb259JHtzcmN9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWxwIGRpYWxvZy5cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNlZCkge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGhlbHAgZGlhbG9nLlxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9IHRydWU7XG4gICAgdGhpcy5jbGVhbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBoZWxwIGRpYWxvZy5cbiAgICovXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlcXVlc3RDb250ZW50KCk7XG4gICAgaWYgKCF0aGlzLmljb24pIHtcbiAgICAgIHRoaXMuaWNvbiA9IHRoaXMucmVzb2x2ZUljb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcXVlc3RDb250ZW50KCkge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB0aGlzLnJlbmRlcihyZXEpO1xuICAgIHJlcS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4gdGhpcy5yZW5kZXIocmVxKSk7XG4gICAgcmVxLm9wZW4oJ0dFVCcsIHRoaXMuZ2V0VXJsKHRoaXMuc3JjLCB0cnVlKSk7XG4gICAgcmVxLnJlc3BvbnNlVHlwZSA9ICdqc29uJztcbiAgICByZXEuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ3RleHQvaHRtbCcpO1xuICAgIHJlcS5zZW5kKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuKCkge1xuICAgIHRoaXMudGl0bGUgPSAnJztcbiAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5zZWN0aW9uQ29udGVudCA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVZlcnNpb24odWlWZXJzaW9uOiBzdHJpbmcgfCB7IG5neDogc3RyaW5nIH0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZlcnNpb246IHN0cmluZyA9IHR5cGVvZiB1aVZlcnNpb24gPT09ICdzdHJpbmcnID8gdWlWZXJzaW9uIDogZ2V0KHVpVmVyc2lvbiwgJ25neCcpO1xuXG4gICAgaWYgKGlzVW5kZWZpbmVkKHZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uID09PSAnJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHZlcnNpb25Ub1BhcnNlID0gdmVyc2lvbi5zcGxpdCgnLicpLnNoaWZ0KCk7XG4gICAgY29uc3QgbWFqb3JOdW1iZXIgPSBNYXRoLmZsb29yKHBhcnNlSW50KHZlcnNpb25Ub1BhcnNlLCAxMCkgLyAxMDApO1xuICAgIGNvbnN0IG1pbm9yTnVtYmVyID0gcGFyc2VJbnQodmVyc2lvblRvUGFyc2UsIDEwKSAtIG1ham9yTnVtYmVyICogMTAwO1xuICAgIHJldHVybiBgJHttYWpvck51bWJlcn0uJHttaW5vck51bWJlcn0uMGA7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVJY29uKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpY29uID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCduYXYgLmFjdGl2ZSBpJykuY2xhc3NMaXN0KS5maW5kKFxuICAgICAgICBjbGFzc2VzID0+IGNsYXNzZXMuc3RhcnRzV2l0aCgnYzh5LWljb24tJykgfHwgY2xhc3Nlcy5zdGFydHNXaXRoKCdkbHQtYzh5LWljb24tJylcbiAgICAgICk7XG4gICAgICByZXR1cm4gaWNvbi5yZXBsYWNlKCdkbHQtYzh5LWljb24tJywgJycpLnJlcGxhY2UoJ2M4eS1pY29uLScsICdjOHktJyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiAnbGlmZS1zYXZlcic7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXIocmVxOiBYTUxIdHRwUmVxdWVzdCkge1xuICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChyZXEuc3RhdHVzID09PSA0MDQgJiYgdGhpcy52ZXJzaW9uICE9PSAnJykge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAnJztcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkRhdGEgPSByZXEucmVzcG9uc2VbdGhpcy5zZWN0aW9uSGVhZGluZ107XG4gICAgICAgIGlmIChzZWN0aW9uRGF0YSkge1xuICAgICAgICAgIHRoaXMudGl0bGUgPSBzZWN0aW9uRGF0YS50aXRsZTtcbiAgICAgICAgICB0aGlzLnNlY3Rpb25Db250ZW50ID0gc2VjdGlvbkRhdGEuaGVscGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgaXRlbUNsYXNzPVwicHVsbC1yaWdodCBtLWwtOFwiXG4gIFtwcmlvcml0eV09XCJwcmlvcml0eVwiXG4gICpuZ0lmPVwiISEoaGVscFNlcnZpY2UuY29udGV4dEhlbHAgfCBhc3luYylcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQWJvdXQgdGhpcyBwYWdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhaXNDb2xsYXBzZWRcIlxuICAgIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUhlbHBcIlxuICAgIHRvb2x0aXA9XCJ7eyAnQWJvdXQgdGhpcyBwYWdlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgW2RlbGF5XT1cIjc1MFwiXG4gICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgIFthY3Rpb25OYW1lXT1cImlzQ29sbGFwc2VkID8gJ2hlbHBPcGVuZWQnIDogJ2hlbHBDbG9zZWQnXCJcbiAgICBbYWN0aW9uRGF0YV09XCJ7IHNyYzogc3JjIH1cIlxuICA+XG4gICAgPGkgW2M4eUljb25dPVwiJ3F1ZXN0aW9uLWNpcmNsZS1vJ1wiPjwvaT5cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxkaXZcbiAgaWQ9XCJjb2xsYXBzZUhlbHBcIlxuICBjbGFzcz1cImM4eS1oZWxwLWRyYXdlclwiXG4gIFtjb2xsYXBzZV09XCJpc0NvbGxhcHNlZFwiXG4gIFtpc0FuaW1hdGVkXT1cInRydWVcIlxuICAoY29sbGFwc2VkKT1cIm9uQ29sbGFwc2VkKClcIlxuPlxuICA8ZGl2XG4gICAgW25nQ2xhc3NdPVwieyAnYzh5LWhlbHAtZHJhd2VyLWJsb2NrJzogaXNJbml0IH1cIlxuICAgICNkb2NPdXRsZXRcbiAgPlxuICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgPGlcbiAgICAgICAgICBbYzh5SWNvbl09XCIhaGFzRXJyb3IgPyBpY29uIDogJ3VubGluaydcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3RleHQtd2FybmluZyc6IGhhc0Vycm9yLCAndGV4dC1tdXRlZCc6ICFoYXNFcnJvciB9XCJcbiAgICAgICAgICBjbGFzcz1cImM4eS1pY29uLWR1b2NvbG9yIGljb24tNDhcIlxuICAgICAgICA+PC9pPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJwLWwtMTYgZmxleC1ncm93XCJcbiAgICAgICAgICAqbmdJZj1cIiFoYXNFcnJvclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gbS1iLTE2XCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICFoZWxwU2VydmljZS5pc1N1cHBvcnRlZExhbmd1YWdlKCkgJiZcbiAgICAgICAgICAgICAgIXNob3dMYW5nV2FybmluZyAmJlxuICAgICAgICAgICAgICAhaGVscFNlcnZpY2UuaXNXYXJuaW5nQWxlcnRWaWV3ZWRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImNsb3NlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBzaG93TGFuZ1dhcm5pbmcgPSAhc2hvd0xhbmdXYXJuaW5nO1xuICAgICAgICAgICAgICAgIGhlbHBTZXJ2aWNlLmlzV2FybmluZ0FsZXJ0Vmlld2VkID0gIWhlbHBTZXJ2aWNlLmlzV2FybmluZ0FsZXJ0Vmlld2VkXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Nsb3NlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPsOXPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIHt7ICdIZWxwIGNvbnRlbnQgaXMgb25seSBhdmFpbGFibGUgaW4gRW5nbGlzaC4nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGg0IGNsYXNzPVwidGV4dC1ib2xkIHRleHQtcHJpbWFyeSBwLXQtMTYgbS1iLTE2XCI+XG4gICAgICAgICAgICB7eyB0aXRsZSB9fVxuICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9XCJoZWxwQ29udGVudFwiXG4gICAgICAgICAgICBjbGFzcz1cImhlbHAtY29udGVudFwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNlY3Rpb25Db250ZW50XCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInAtbC0xNiBwLXQtMTYgZmxleC1ncm93XCJcbiAgICAgICAgICAqbmdJZj1cImhhc0Vycm9yXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxoNFxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJvbGQgbS1iLTE2XCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5Tb3JyeSwgdGhhdCBkaWRuJ3Qgd29yazwvaDQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtY29udGVudFwiPlxuICAgICAgICAgICAgPHAgdHJhbnNsYXRlPlRoZSBjb250ZW50IGNvdWxkbid0IGJlIGxvYWRlZC48L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjOHktaGVscC1kcmF3ZXItZm9vdGVyIGFuaW1hdGVkIGZhZGVJblwiXG4gICAgc3R5bGU9XCJhbmltYXRpb24tZGVsYXk6IDAuMzVzXCJcbiAgICAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgIWhhc0Vycm9yXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgICBbdGl0bGVdPVwiJ0Nsb3NlIGhlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhaXNDb2xsYXBzZWRcIlxuICAgICAgYXJpYS1jb250cm9scz1cImNvbGxhcHNlSGVscFwiXG4gICAgICB0cmFuc2xhdGVcbiAgICA+XG4gICAgICBDbG9zZVxuICAgIDwvYnV0dG9uPlxuICAgIDxhXG4gICAgICBocmVmPVwie3sgaGFzRXJyb3IgPyBnZXRVcmwoKSA6IGdldFVybChzcmMpIH19XCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgKm5nSWY9XCIhaGFzRXJyb3JcIlxuICAgICAgPlxuICAgICAgICBPcGVuIHRoZVxuICAgICAgICA8c3Bhbj5Vc2VyIGd1aWRlYEtFRVBfT1JJR0lOQUxgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICpuZ0lmPVwiaGFzRXJyb3JcIlxuICAgICAgPlxuICAgICAgICBDaGVjayB0aGVcbiAgICAgICAgPHNwYW4+VXNlciBndWlkZWBLRUVQX09SSUdJTkFMYDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2E+XG4gIDwvZGl2PlxuPC9kaXY+Il19
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2hlbHAvaGVscC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2hlbHAvaGVscC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFDN0M7Ozs7Ozs7O0dBUUc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQW9FeEI7O09BRUc7SUFDSCxZQUNVLFdBQXdCLEVBQ3hCLFFBQXlCLEVBQzFCLFdBQXdCO1FBRnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBekVqQzs7O1dBR0c7UUFFSCxRQUFHLEdBQVcsRUFBRSxDQUFDO1FBRWpCOztXQUVHO1FBRUgsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkI7O1dBRUc7UUFFSCxhQUFRLEdBQUcsUUFBUSxDQUFDO1FBUXBCOzs7O1dBSUc7UUFDSCxZQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJEOztXQUVHO1FBQ0gsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVYOztXQUVHO1FBQ0gsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFFcEI7O1dBRUc7UUFDSCxtQkFBYyxHQUFHLEVBQUUsQ0FB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YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUN0QjtTQUNGO0lBQ0gsQ0FBQzs7MEdBbk5VLGFBQWE7OEZBQWIsYUFBYSx3SUNsQjFCLDRySEF5SU07MkZEdkhPLGFBQWE7a0JBSnpCLFNBQVM7K0JBQ0UsVUFBVTswSkFTcEIsR0FBRztzQkFERixLQUFLO2dCQU9OLFdBQVc7c0JBRFYsS0FBSztnQkFPTixRQUFRO3NCQURQLEtBQUs7Z0JBT04sSUFBSTtzQkFESCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0LCBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBEb2NzU2VydmljZSB9IGZyb20gJy4uL2RvY3MvZG9jcy5zZXJ2aWNlJztcbmltcG9ydCB7IEhlbHBTZXJ2aWNlIH0gZnJvbSAnLi9oZWxwLnNlcnZpY2UnO1xuLyoqXG4gKiBBIGNvbXBvbmVudCB3aGljaCBzaG93cyBhIGNvbnRleHQgaGVscCBpblxuICogdGhlIGFjdGlvbiBiYXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxjOHktaGVscCBzcmM9XCIvdXNlcnMtZ3VpZGUvY29ja3BpdC8jZGFzaGJvYXJkc1wiPjwvYzh5LWhlbHA+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWhlbHAnLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVscC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSGVscENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBkb2N1bWVudGF0aW9uLiBVc2VkIHRvIGxpbmsgdG8gdGhlIGRvY3VtZW50YXRpb24gYXMgd2VsbCBhc1xuICAgKiB0byBwYXJzZSB0aGUgc291cmNlIHRvIGRpc3BsYXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBzcmM6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGhlbHAgZGlhbG9nIGlzIGNvbGxhcHNlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGlzQ29sbGFwc2VkID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIHByaW9yaXR5IHdoZXJlIHRoZSBoZWxwIGljb24gc2hvdWxkIGJlIHNob3duIGluIHRoZSBhY3Rpb24gYmFyXG4gICAqL1xuICBASW5wdXQoKVxuICBwcmlvcml0eSA9IEluZmluaXR5O1xuXG4gIC8qKlxuICAgKiBBbiBjdXN0b20gaWNvbi4gSWYgbm90IHNldCwgdGhlIG5hdmlnYXRvciBpY29uIGlzIHJlc29sdmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBpY29uO1xuXG4gIC8qKlxuICAgKiBDdXJycmVudCB2ZXJzaW9uIG9mIHRoZSBVSSB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IGRhdGEgZnJvbVxuICAgKiB0aGUgZG9jcy4gSWYgdGhlIFVJIHZlcnNpb24gaXMgZXF1YWwgdG8gdGhlIGxhdGVzdCBkb2MgdmVyc2lvbiwgdGhlIHZhbHVlXG4gICAqIG11c3QgYmUgJycuXG4gICAqL1xuICB2ZXJzaW9uID0gdGhpcy5wYXJzZVZlcnNpb24odGhpcy5hcHBTdGF0ZS51aVZlcnNpb24pO1xuXG4gIC8qKlxuICAgKiBBbiB0aXRsZS4gU2V0IGluIG9wZW4gYnkgcGFzc2luZyB0aGUgc291cmNlLlxuICAgKi9cbiAgdGl0bGUgPSAnJztcblxuICAvKipcbiAgICogVGhlIHNlY3Rpb24gaGVhZGluZyBpbiB0aGUgZG9jIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGRpc3BsYXllZC5cbiAgICovXG4gIHNlY3Rpb25IZWFkaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIGNvbnRlbnQgaW4gdGhlIGRvYyB3aGljaCBpcyBnb2luZyB0byBiZSBkaXNwbGF5ZWQuXG4gICAqL1xuICBzZWN0aW9uQ29udGVudCA9ICcnO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGNvbXBvbmVudCBpcyBsb2FkaW5nLlxuICAgKi9cbiAgaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBjb21wb25lbnQgZmFpbGVkIGxvYWRpbmcgdGhlIHNvdXJjZS5cbiAgICovXG4gIGhhc0Vycm9yID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBhIHdhcm5pbmcgc2hvdWxkIGJlIHNob3duLlxuICAgKi9cbiAgc2hvd0xhbmdXYXJuaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGlzSW5pdCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlIE9ubHkgcHJpdmF0ZSBESVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkb2NzU2VydmljZTogRG9jc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBoZWxwU2VydmljZTogSGVscFNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IGlzIHNob3duIGJ5IGRlZmF1bHQgYW5kIHRoZXJlZm9yZSBicmVha3MgZTJlIHRlc3QuIFRoaXMgaXNcbiAgICogdG8gcHJldmVudCB0aGUgdmlzaWJpbGl0eSBvbiBmaXJzdCBuYXZpZ2F0aW9uLlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNvbGxhcHNlZCgpIHtcbiAgICB0aGlzLmlzSW5pdCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBVUkwgYmFzZWQgb24gdGhlIHNyYy4gVGhlIEJhc2UgVVJMIGNhbiBiZSBzZXQgaW4gdGhlIGFwcGxpY2F0aW9uIG9wdGlvbnMgZG9jQmFzZVVybC5cbiAgICogQHBhcmFtIHNyYyBUaGUgc291cmNlIG9mIHRoZSBoZWxwIG9uIHRoZSBndWlkZS5cbiAgICogQHBhcmFtIGluZGV4IFRoaXMgZmxhZyBpcyB1c2VkIHRvIGNhbGwgdGhlIGluZGV4Lmpzb24gY29udGVudCBvZiBhIGd1aWRlLiBGb3IgZXhhbXBsZSwgXCJodHRwczovL3d3dy5jdW11bG9jaXR5LmNvbS9ndWlkZXMvdXNlcnMtZ3VpZGUvY29ja3BpdC9pbmRleC5qc29uXCIuXG4gICAqL1xuICBnZXRVcmwoc3JjID0gJycsIGluZGV4ID0gZmFsc2UpIHtcbiAgICBsZXQgZG9jc1VybDtcblxuICAgIHRyeSB7XG4gICAgICBkb2NzVXJsID1cbiAgICAgICAgdHlwZW9mIHRoaXMuaGVscFNlcnZpY2UuY29udGV4dEhlbHAudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBuZXcgVVJMKHRoaXMuaGVscFNlcnZpY2UuY29udGV4dEhlbHAudmFsdWUpXG4gICAgICAgICAgOiBuZXcgVVJMKHRoaXMuZG9jc1NlcnZpY2UuZ2V0QmFzZVVybCgpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZG9jc1VybCA9IG5ldyBVUkwodGhpcy5kb2NzU2VydmljZS5ERUZBVUxUX0RPQ1NfQkFTRV9VUkwpO1xuICAgICAgY29uc29sZS53YXJuKGVycm9yKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcmNVcmwgPSBuZXcgVVJMKGAke2RvY3NVcmx9JHtzcmN9YCk7XG5cbiAgICBjb25zdCBbdXJsLCBoYXNoRnJhZ21lbnRdID0gc3JjLnNwbGl0KCcjJyk7XG4gICAgdGhpcy5zZWN0aW9uSGVhZGluZyA9IGhhc2hGcmFnbWVudDtcblxuICAgIGlmIChpbmRleCkge1xuICAgICAgc3JjID0gYCR7dXJsfWluZGV4Lmpzb25gO1xuICAgIH1cbiAgICBpZiAodGhpcy52ZXJzaW9uID09PSAnJykge1xuICAgICAgcmV0dXJuIGluZGV4ID8gYCR7ZG9jc1VybC5ocmVmICsgc3JjfWAgOiBzcmNVcmwuaHJlZjtcbiAgICB9XG4gICAgcmV0dXJuIGAke2RvY3NVcmwuaHJlZn0vJHt0aGlzLnZlcnNpb259JHtzcmN9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWxwIGRpYWxvZy5cbiAgICovXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNlZCkge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGhlbHAgZGlhbG9nLlxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9IHRydWU7XG4gICAgdGhpcy5jbGVhbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBoZWxwIGRpYWxvZy5cbiAgICovXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlcXVlc3RDb250ZW50KCk7XG4gICAgaWYgKCF0aGlzLmljb24pIHtcbiAgICAgIHRoaXMuaWNvbiA9IHRoaXMucmVzb2x2ZUljb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcXVlc3RDb250ZW50KCkge1xuICAgIGNvbnN0IHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB0aGlzLnJlbmRlcihyZXEpO1xuICAgIHJlcS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4gdGhpcy5yZW5kZXIocmVxKSk7XG4gICAgcmVxLm9wZW4oJ0dFVCcsIHRoaXMuZ2V0VXJsKHRoaXMuc3JjLCB0cnVlKSk7XG4gICAgcmVxLnJlc3BvbnNlVHlwZSA9ICdqc29uJztcbiAgICByZXEuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ3RleHQvaHRtbCcpO1xuICAgIHJlcS5zZW5kKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuKCkge1xuICAgIHRoaXMudGl0bGUgPSAnJztcbiAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5zZWN0aW9uQ29udGVudCA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVZlcnNpb24odWlWZXJzaW9uOiBzdHJpbmcgfCB7IG5neDogc3RyaW5nIH0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZlcnNpb246IHN0cmluZyA9IHR5cGVvZiB1aVZlcnNpb24gPT09ICdzdHJpbmcnID8gdWlWZXJzaW9uIDogZ2V0KHVpVmVyc2lvbiwgJ25neCcpO1xuXG4gICAgaWYgKGlzVW5kZWZpbmVkKHZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uID09PSAnJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHZlcnNpb25Ub1BhcnNlID0gdmVyc2lvbi5zcGxpdCgnLicpLnNoaWZ0KCk7XG4gICAgY29uc3QgbWFqb3JOdW1iZXIgPSBNYXRoLmZsb29yKHBhcnNlSW50KHZlcnNpb25Ub1BhcnNlLCAxMCkgLyAxMDApO1xuICAgIGNvbnN0IG1pbm9yTnVtYmVyID0gcGFyc2VJbnQodmVyc2lvblRvUGFyc2UsIDEwKSAtIG1ham9yTnVtYmVyICogMTAwO1xuICAgIHJldHVybiBgJHttYWpvck51bWJlcn0uJHttaW5vck51bWJlcn0uMGA7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVJY29uKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpY29uID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCduYXYgLmFjdGl2ZSBpJykuY2xhc3NMaXN0KS5maW5kKFxuICAgICAgICBjbGFzc2VzID0+IGNsYXNzZXMuc3RhcnRzV2l0aCgnYzh5LWljb24tJykgfHwgY2xhc3Nlcy5zdGFydHNXaXRoKCdkbHQtYzh5LWljb24tJylcbiAgICAgICk7XG4gICAgICByZXR1cm4gaWNvbi5yZXBsYWNlKCdkbHQtYzh5LWljb24tJywgJycpLnJlcGxhY2UoJ2M4eS1pY29uLScsICdjOHktJyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiAnbGlmZS1zYXZlcic7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXIocmVxOiBYTUxIdHRwUmVxdWVzdCkge1xuICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChyZXEuc3RhdHVzID09PSA0MDQgJiYgdGhpcy52ZXJzaW9uICE9PSAnJykge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAnJztcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbkRhdGEgPSByZXEucmVzcG9uc2VbdGhpcy5zZWN0aW9uSGVhZGluZ107XG4gICAgICAgIGlmIChzZWN0aW9uRGF0YSkge1xuICAgICAgICAgIHRoaXMudGl0bGUgPSBzZWN0aW9uRGF0YS50aXRsZTtcbiAgICAgICAgICB0aGlzLnNlY3Rpb25Db250ZW50ID0gc2VjdGlvbkRhdGEuaGVscGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgaXRlbUNsYXNzPVwicHVsbC1yaWdodCBtLWwtOFwiXG4gIFtwcmlvcml0eV09XCJwcmlvcml0eVwiXG4gICpuZ0lmPVwiISEoaGVscFNlcnZpY2UuY29udGV4dEhlbHAgfCBhc3luYylcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQWJvdXQgdGhpcyBwYWdlJyB8IHRyYW5zbGF0ZVwiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhaXNDb2xsYXBzZWRcIlxuICAgIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUhlbHBcIlxuICAgIHRvb2x0aXA9XCJ7eyAnQWJvdXQgdGhpcyBwYWdlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgW2RlbGF5XT1cIjc1MFwiXG4gICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgIFthY3Rpb25OYW1lXT1cImlzQ29sbGFwc2VkID8gJ2hlbHBPcGVuZWQnIDogJ2hlbHBDbG9zZWQnXCJcbiAgICBbYWN0aW9uRGF0YV09XCJ7IHNyYzogc3JjIH1cIlxuICA+XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48ZGl2XG4gIGlkPVwiY29sbGFwc2VIZWxwXCJcbiAgY2xhc3M9XCJjOHktaGVscC1kcmF3ZXJcIlxuICBbY29sbGFwc2VdPVwiaXNDb2xsYXBzZWRcIlxuICBbaXNBbmltYXRlZF09XCJ0cnVlXCJcbiAgKGNvbGxhcHNlZCk9XCJvbkNvbGxhcHNlZCgpXCJcbj5cbiAgPGRpdlxuICAgIFtuZ0NsYXNzXT1cInsgJ2M4eS1oZWxwLWRyYXdlci1ibG9jayc6IGlzSW5pdCB9XCJcbiAgICAjZG9jT3V0bGV0XG4gID5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgIDxpXG4gICAgICAgICAgW2M4eUljb25dPVwiIWhhc0Vycm9yID8gaWNvbiA6ICd1bmxpbmsnXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICd0ZXh0LXdhcm5pbmcnOiBoYXNFcnJvciwgJ3RleHQtbXV0ZWQnOiAhaGFzRXJyb3IgfVwiXG4gICAgICAgICAgY2xhc3M9XCJjOHktaWNvbi1kdW9jb2xvciBpY29uLTQ4XCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicC1sLTE2IGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgKm5nSWY9XCIhaGFzRXJyb3JcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIG0tYi0xNlwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhaGVscFNlcnZpY2UuaXNTdXBwb3J0ZWRMYW5ndWFnZSgpICYmXG4gICAgICAgICAgICAgICFzaG93TGFuZ1dhcm5pbmcgJiZcbiAgICAgICAgICAgICAgIWhlbHBTZXJ2aWNlLmlzV2FybmluZ0FsZXJ0Vmlld2VkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJjbG9zZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgc2hvd0xhbmdXYXJuaW5nID0gIXNob3dMYW5nV2FybmluZztcbiAgICAgICAgICAgICAgICBoZWxwU2VydmljZS5pc1dhcm5pbmdBbGVydFZpZXdlZCA9ICFoZWxwU2VydmljZS5pc1dhcm5pbmdBbGVydFZpZXdlZFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidDbG9zZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj7Dlzwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICB7eyAnSGVscCBjb250ZW50IGlzIG9ubHkgYXZhaWxhYmxlIGluIEVuZ2xpc2guJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQtYm9sZCB0ZXh0LXByaW1hcnkgcC10LTE2IG0tYi0xNlwiPlxuICAgICAgICAgICAge3sgdGl0bGUgfX1cbiAgICAgICAgICA8L2g0PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPVwiaGVscENvbnRlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJoZWxwLWNvbnRlbnRcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCJzZWN0aW9uQ29udGVudFwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJwLWwtMTYgcC10LTE2IGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgKm5nSWY9XCJoYXNFcnJvclwiXG4gICAgICAgID5cbiAgICAgICAgICA8aDRcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ib2xkIG0tYi0xNlwiXG4gICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICA+U29ycnksIHRoYXQgZGlkbid0IHdvcms8L2g0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5UaGUgY29udGVudCBjb3VsZG4ndCBiZSBsb2FkZWQuPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYzh5LWhlbHAtZHJhd2VyLWZvb3RlciBhbmltYXRlZCBmYWRlSW5cIlxuICAgIHN0eWxlPVwiYW5pbWF0aW9uLWRlbGF5OiAwLjM1c1wiXG4gICAgKm5nSWY9XCIhaXNMb2FkaW5nICYmICFoYXNFcnJvclwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgW3RpdGxlXT1cIidDbG9zZSBoZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIWlzQ29sbGFwc2VkXCJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUhlbHBcIlxuICAgICAgdHJhbnNsYXRlXG4gICAgPlxuICAgICAgQ2xvc2VcbiAgICA8L2J1dHRvbj5cbiAgICA8YVxuICAgICAgaHJlZj1cInt7IGhhc0Vycm9yID8gZ2V0VXJsKCkgOiBnZXRVcmwoc3JjKSB9fVwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICpuZ0lmPVwiIWhhc0Vycm9yXCJcbiAgICAgID5cbiAgICAgICAgT3BlbiB0aGVcbiAgICAgICAgPHNwYW4+VXNlciBndWlkZWBLRUVQX09SSUdJTkFMYDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAqbmdJZj1cImhhc0Vycm9yXCJcbiAgICAgID5cbiAgICAgICAgQ2hlY2sgdGhlXG4gICAgICAgIDxzcGFuPlVzZXIgZ3VpZGVgS0VFUF9PUklHSU5BTGA8L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9hPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==