UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

70 lines 18.5 kB
import { Component, ViewContainerRef, ViewChild, Inject, forwardRef } from '@angular/core'; import { GainsightService } from '@c8y/ngx-components'; import { BsModalRef } from 'ngx-bootstrap/modal'; import { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service'; import { ACTIONS_OPERATIONS_BULK, BULK_OPERATION_DIALOG_STEPS, BULK_OPERATION_EVENT } from '@c8y/ngx-components/operations/product-experience'; import { BulkOperationModalsService } from '..'; import { Router } from '@angular/router'; import * as i0 from "@angular/core"; import * as i1 from "ngx-bootstrap/modal"; import * as i2 from "@angular/router"; import * as i3 from "@c8y/ngx-components"; import * as i4 from "@c8y/ngx-components/operations/bulk-operations-service"; import * as i5 from "@angular/common"; import * as i6 from ".."; export class BulkOperationsModalComponent { constructor(bsModalRef, router, gainsightService, bulkOperationsService, bulkOperationModalsService) { this.bsModalRef = bsModalRef; this.router = router; this.gainsightService = gainsightService; this.bulkOperationsService = bulkOperationsService; this.bulkOperationModalsService = bulkOperationModalsService; this.BULK_OPERATION_EVENT = BULK_OPERATION_EVENT; this.bulkActions = ACTIONS_OPERATIONS_BULK; this.pxSteps = BULK_OPERATION_DIALOG_STEPS; this.showComponent = false; this.bulkList = []; } ngOnInit() { this.bulkList = this.bulkOperationsService.getBulkTypes(); } cancel() { this.bsModalRef.hide(); } createComponent(item) { if (item && item.component) { this.showComponent = true; this.container.createComponent(item.component); this.gainsightService.triggerEvent(this.BULK_OPERATION_EVENT, { action: this.bulkActions.SELECT_BULK_OPERTION_TYPE, bulkOperationType: item.type }); } } handleClick(item) { if (item.path) { this.bulkOperationModalsService.hideNewBulkOperationModal(); this.router.navigateByUrl(item.path); this.gainsightService.triggerEvent(this.BULK_OPERATION_EVENT, { action: this.bulkActions.SELECT_BULK_OPERTION_TYPE, bulkOperationType: item.type }); } else if (item.component) { this.createComponent(item); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BulkOperationsModalComponent, deps: [{ token: i1.BsModalRef }, { token: i2.Router }, { token: i3.GainsightService }, { token: i4.BulkOperationsService }, { token: forwardRef(() => BulkOperationModalsService) }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BulkOperationsModalComponent, selector: "c8y-bulk-operations-modal", viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-energy\"></i>\n <h4\n id=\"modal-title\"\n translate\n >\n Add bulk operation\n </h4>\n </div>\n <div\n class=\"modal-inner-scroll\"\n id=\"modal-body\"\n >\n <div\n class=\"modal-body p-t-8 p-b-8 sticky-top separator-bottom text-center\"\n [hidden]=\"showComponent\"\n >\n <p\n class=\"text-medium\"\n translate\n >\n Select one of the available options\n </p>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Check the\n <a\n c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-add-a-bulk-operation-using-the-wizard\"\n >\n user documentation\n </a>\n for more details.\n </small>\n </p>\n </div>\n\n <div class=\"list-group list-group-links\">\n <button\n class=\"list-group-item flex-row\"\n type=\"button\"\n *ngFor=\"let item of bulkList\"\n (click)=\"handleClick(item)\"\n >\n <div\n class=\"list-item-icon\"\n *ngIf=\"item.c8yIcon; else icon\"\n >\n <i [c8yIcon]=\"item.c8yIcon\"></i>\n </div>\n <ng-template #icon>\n <div class=\"list-item-icon\">\n <i c8yIcon=\"cogs\"></i>\n </div>\n </ng-template>\n <div\n class=\"list-item-body text-truncate\"\n title=\"{{ item.name | translate }}\"\n >\n {{ item.name | translate }}\n </div>\n </button>\n </div>\n <template #container></template>\n </div>\n <div\n class=\"modal-footer\"\n [hidden]=\"showComponent\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{\n action: bulkActions.CANCEL_ADD_BULK_OPERATION_DIALOG,\n step: pxSteps.SELECT_OPERATION_TYPE\n }\"\n >\n <span translate>Cancel</span>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i3.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BulkOperationsModalComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-bulk-operations-modal', template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-energy\"></i>\n <h4\n id=\"modal-title\"\n translate\n >\n Add bulk operation\n </h4>\n </div>\n <div\n class=\"modal-inner-scroll\"\n id=\"modal-body\"\n >\n <div\n class=\"modal-body p-t-8 p-b-8 sticky-top separator-bottom text-center\"\n [hidden]=\"showComponent\"\n >\n <p\n class=\"text-medium\"\n translate\n >\n Select one of the available options\n </p>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Check the\n <a\n c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-add-a-bulk-operation-using-the-wizard\"\n >\n user documentation\n </a>\n for more details.\n </small>\n </p>\n </div>\n\n <div class=\"list-group list-group-links\">\n <button\n class=\"list-group-item flex-row\"\n type=\"button\"\n *ngFor=\"let item of bulkList\"\n (click)=\"handleClick(item)\"\n >\n <div\n class=\"list-item-icon\"\n *ngIf=\"item.c8yIcon; else icon\"\n >\n <i [c8yIcon]=\"item.c8yIcon\"></i>\n </div>\n <ng-template #icon>\n <div class=\"list-item-icon\">\n <i c8yIcon=\"cogs\"></i>\n </div>\n </ng-template>\n <div\n class=\"list-item-body text-truncate\"\n title=\"{{ item.name | translate }}\"\n >\n {{ item.name | translate }}\n </div>\n </button>\n </div>\n <template #container></template>\n </div>\n <div\n class=\"modal-footer\"\n [hidden]=\"showComponent\"\n >\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n c8yProductExperience\n [actionName]=\"BULK_OPERATION_EVENT\"\n [actionData]=\"{\n action: bulkActions.CANCEL_ADD_BULK_OPERATION_DIALOG,\n step: pxSteps.SELECT_OPERATION_TYPE\n }\"\n >\n <span translate>Cancel</span>\n </button>\n </div>\n</div>\n" }] }], ctorParameters: () => [{ type: i1.BsModalRef }, { type: i2.Router }, { type: i3.GainsightService }, { type: i4.BulkOperationsService }, { type: i6.BulkOperationModalsService, decorators: [{ type: Inject, args: [forwardRef(() => BulkOperationModalsService)] }] }], propDecorators: { container: [{ type: ViewChild, args: ['container', { static: false, read: ViewContainerRef }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsay1vcGVyYXRpb25zLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL29wZXJhdGlvbnMvYnVsay1vcGVyYXRpb25zLWxpc3QvbW9kYWxzL2J1bGstb3BlcmF0aW9ucy1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9vcGVyYXRpb25zL2J1bGstb3BlcmF0aW9ucy1saXN0L21vZGFscy9idWxrLW9wZXJhdGlvbnMtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUNMLHFCQUFxQixFQUV0QixNQUFNLHdEQUF3RCxDQUFDO0FBQ2hFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsMkJBQTJCLEVBQzNCLG9CQUFvQixFQUNyQixNQUFNLG1EQUFtRCxDQUFDO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7O0FBTXpDLE1BQU0sT0FBTyw0QkFBNEI7SUFTdkMsWUFDVSxVQUFzQixFQUN0QixNQUFjLEVBQ2QsZ0JBQWtDLEVBQ2xDLHFCQUE0QyxFQUU1QywwQkFBc0Q7UUFMdEQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBRTVDLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFkaEUseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDNUMsZ0JBQVcsR0FBRyx1QkFBdUIsQ0FBQztRQUN0QyxZQUFPLEdBQUcsMkJBQTJCLENBQUM7UUFHdEMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsYUFBUSxHQUFvQixFQUFFLENBQUM7SUFTNUIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFtQjtRQUNqQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM1RCxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUI7Z0JBQ2xELGlCQUFpQixFQUFFLElBQUksQ0FBQyxJQUFJO2FBQzdCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQW1CO1FBQzdCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM1RCxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUI7Z0JBQ2xELGlCQUFpQixFQUFFLElBQUksQ0FBQyxJQUFJO2FBQzdCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDOytHQWhEVSw0QkFBNEIsdUlBYzdCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQzttR0FkM0MsNEJBQTRCLG9KQUtRLGdCQUFnQiw2QkN4QmpFLDB0RUF3RkE7OzRGRHJFYSw0QkFBNEI7a0JBSnhDLFNBQVM7K0JBQ0UsMkJBQTJCOzswQkFpQmxDLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO3lDQVRhLFNBQVM7c0JBQTNFLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdDaGlsZCwgT25Jbml0LCBJbmplY3QsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdhaW5zaWdodFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7XG4gIEJ1bGtPcGVyYXRpb25zU2VydmljZSxcbiAgT3BlcmF0aW9uVHlwZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL29wZXJhdGlvbnMvYnVsay1vcGVyYXRpb25zLXNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQUNUSU9OU19PUEVSQVRJT05TX0JVTEssXG4gIEJVTEtfT1BFUkFUSU9OX0RJQUxPR19TVEVQUyxcbiAgQlVMS19PUEVSQVRJT05fRVZFTlRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL3Byb2R1Y3QtZXhwZXJpZW5jZSc7XG5pbXBvcnQgeyBCdWxrT3BlcmF0aW9uTW9kYWxzU2VydmljZSB9IGZyb20gJy4uJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1idWxrLW9wZXJhdGlvbnMtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJ2J1bGstb3BlcmF0aW9ucy1tb2RhbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQnVsa09wZXJhdGlvbnNNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEJVTEtfT1BFUkFUSU9OX0VWRU5UID0gQlVMS19PUEVSQVRJT05fRVZFTlQ7XG4gIGJ1bGtBY3Rpb25zID0gQUNUSU9OU19PUEVSQVRJT05TX0JVTEs7XG4gIHB4U3RlcHMgPSBCVUxLX09QRVJBVElPTl9ESUFMT0dfU1RFUFM7XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGNvbnRhaW5lcjtcbiAgc2hvd0NvbXBvbmVudCA9IGZhbHNlO1xuICBidWxrTGlzdDogT3BlcmF0aW9uVHlwZVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBic01vZGFsUmVmOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnVsa09wZXJhdGlvbnNTZXJ2aWNlOiBCdWxrT3BlcmF0aW9uc1NlcnZpY2UsXG4gICAgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IEJ1bGtPcGVyYXRpb25Nb2RhbHNTZXJ2aWNlKSlcbiAgICBwcml2YXRlIGJ1bGtPcGVyYXRpb25Nb2RhbHNTZXJ2aWNlOiBCdWxrT3BlcmF0aW9uTW9kYWxzU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5idWxrTGlzdCA9IHRoaXMuYnVsa09wZXJhdGlvbnNTZXJ2aWNlLmdldEJ1bGtUeXBlcygpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxuICBjcmVhdGVDb21wb25lbnQoaXRlbTogT3BlcmF0aW9uVHlwZSkge1xuICAgIGlmIChpdGVtICYmIGl0ZW0uY29tcG9uZW50KSB7XG4gICAgICB0aGlzLnNob3dDb21wb25lbnQgPSB0cnVlO1xuICAgICAgdGhpcy5jb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGl0ZW0uY29tcG9uZW50KTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQodGhpcy5CVUxLX09QRVJBVElPTl9FVkVOVCwge1xuICAgICAgICBhY3Rpb246IHRoaXMuYnVsa0FjdGlvbnMuU0VMRUNUX0JVTEtfT1BFUlRJT05fVFlQRSxcbiAgICAgICAgYnVsa09wZXJhdGlvblR5cGU6IGl0ZW0udHlwZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2xpY2soaXRlbTogT3BlcmF0aW9uVHlwZSkge1xuICAgIGlmIChpdGVtLnBhdGgpIHtcbiAgICAgIHRoaXMuYnVsa09wZXJhdGlvbk1vZGFsc1NlcnZpY2UuaGlkZU5ld0J1bGtPcGVyYXRpb25Nb2RhbCgpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChpdGVtLnBhdGgpO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudCh0aGlzLkJVTEtfT1BFUkFUSU9OX0VWRU5ULCB7XG4gICAgICAgIGFjdGlvbjogdGhpcy5idWxrQWN0aW9ucy5TRUxFQ1RfQlVMS19PUEVSVElPTl9UWVBFLFxuICAgICAgICBidWxrT3BlcmF0aW9uVHlwZTogaXRlbS50eXBlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0uY29tcG9uZW50KSB7XG4gICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudChpdGVtKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ2aWV3cG9ydC1tb2RhbFwiPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGRpYWxvZy1oZWFkZXJcIj5cbiAgICA8aSBjOHlJY29uPVwiYzh5LWVuZXJneVwiPjwvaT5cbiAgICA8aDRcbiAgICAgIGlkPVwibW9kYWwtdGl0bGVcIlxuICAgICAgdHJhbnNsYXRlXG4gICAgPlxuICAgICAgQWRkIGJ1bGsgb3BlcmF0aW9uXG4gICAgPC9oND5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1vZGFsLWlubmVyLXNjcm9sbFwiXG4gICAgaWQ9XCJtb2RhbC1ib2R5XCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtYm9keSBwLXQtOCBwLWItOCBzdGlja3ktdG9wIHNlcGFyYXRvci1ib3R0b20gdGV4dC1jZW50ZXJcIlxuICAgICAgW2hpZGRlbl09XCJzaG93Q29tcG9uZW50XCJcbiAgICA+XG4gICAgICA8cFxuICAgICAgICBjbGFzcz1cInRleHQtbWVkaXVtXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIFNlbGVjdCBvbmUgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zXG4gICAgICA8L3A+XG4gICAgICA8cCBjOHktZ3VpZGUtZG9jcz5cbiAgICAgICAgPHNtYWxsXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICA+XG4gICAgICAgICAgQ2hlY2sgdGhlXG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGM4eS1ndWlkZS1ocmVmPVwiL2RvY3MvZGV2aWNlLW1hbmFnZW1lbnQtYXBwbGljYXRpb24vbW9uaXRvcmluZy1hbmQtY29udHJvbGxpbmctZGV2aWNlcy8jdG8tYWRkLWEtYnVsay1vcGVyYXRpb24tdXNpbmctdGhlLXdpemFyZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgdXNlciBkb2N1bWVudGF0aW9uXG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgIDwvc21hbGw+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWxpbmtzXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGZsZXgtcm93XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJ1bGtMaXN0XCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKGl0ZW0pXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1pdGVtLWljb25cIlxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5jOHlJY29uOyBlbHNlIGljb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgW2M4eUljb25dPVwiaXRlbS5jOHlJY29uXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNpY29uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW0taWNvblwiPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cImNvZ3NcIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImxpc3QtaXRlbS1ib2R5IHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgaXRlbS5uYW1lIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0ZW0ubmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDx0ZW1wbGF0ZSAjY29udGFpbmVyPjwvdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJtb2RhbC1mb290ZXJcIlxuICAgIFtoaWRkZW5dPVwic2hvd0NvbXBvbmVudFwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImNhbmNlbCgpXCJcbiAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICBbYWN0aW9uTmFtZV09XCJCVUxLX09QRVJBVElPTl9FVkVOVFwiXG4gICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgIGFjdGlvbjogYnVsa0FjdGlvbnMuQ0FOQ0VMX0FERF9CVUxLX09QRVJBVElPTl9ESUFMT0csXG4gICAgICAgIHN0ZXA6IHB4U3RlcHMuU0VMRUNUX09QRVJBVElPTl9UWVBFXG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+Q2FuY2VsPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19