UNPKG

survey-creator-angular

Version:

A white-label drag-and-drop form builder for Angular that lets you design complex, interactive forms and surveys without writing code. It generates JSON schemas used by the SurveyJS Form Library to render dynamic forms in your Angular app.

65 lines 14.7 kB
import { Component, ElementRef, Input, ViewChild } from "@angular/core"; import { AngularComponentFactory, BaseAngular, SurveyContentComponent } from "survey-angular-ui"; import { cssVariablesToString } from "survey-creator-core"; import * as i0 from "@angular/core"; import * as i1 from "survey-angular-ui"; import * as i2 from "./tabbed-menu/tabbed-menu/tabbed-menu.component"; import * as i3 from "./side-bar/side-bar.component"; import * as i4 from "@angular/common"; export class CreatorComponent extends BaseAngular { constructor(changeDetectorRef) { super(changeDetectorRef); changeDetectorRef.detach(); } getModel() { return this.model; } get creator() { return this.model; } getShouldReattachChangeDetector() { return false; } onModelChanged() { this.changeDetectorRef.detectChanges(); if (this.previousModel) { this.previousModel.unsubscribeRootElement(); } if (this.creator && this.container.nativeElement) { this.creator.setRootElement(this.container.nativeElement); } } ngAfterViewInit() { this.creator.setRootElement(this.container.nativeElement); super.ngOnInit(); } ngOnDestroy() { this.creator.unsubscribeRootElement(); super.ngOnDestroy(); } get activeTab() { return this.creator.activeTabMenuItem; } trackTabBy(_, tab) { return tab.id; } get themeVariablesString() { return cssVariablesToString(this.creator.themeVariables); } } CreatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CreatorComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); CreatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CreatorComponent, selector: "survey-creator", inputs: { model: "model" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!creator.isCreatorDisposed\">\n <sv-ng-modal-container></sv-ng-modal-container>\n <div [class]=\"creator.getRootCss()\" [attr.style]=\"themeVariablesString\" #container>\n <div>\n <sv-svg-bundle></sv-svg-bundle>\n </div>\n <div class=\"svc-full-container svc-creator__area svc-flex-column\"\n [class.svc-creator__area--with-banner]=\"!creator.haveCommercialLicense\">\n <div class=\"svc-flex-row svc-full-container\"\n [class.svc-creator__side-bar--left]=\"creator.sidebarLocation == 'left'\">\n <div class=\"svc-flex-column svc-flex-row__element svc-flex-row__element--growing\">\n <div class=\"svc-top-bar\">\n <div class=\"svc-tabbed-menu-wrapper\" [visible]=\"creator.showTabs\">\n <svc-tabbed-menu [model]=\"creator.tabbedMenu\"></svc-tabbed-menu>\n </div>\n <div *ngIf=\"creator.showToolbar\" class=\"svc-toolbar-wrapper\" [visible]=\"creator.showToolbar\">\n <sv-action-bar [model]=\"creator.toolbar\"></sv-action-bar>\n </div>\n </div>\n <div class=\"svc-creator__content-wrapper svc-flex-row\"\n [class.svc-creator__content-wrapper--footer-toolbar]=\"creator.isMobileView\">\n <div class=\"svc-creator__content-holder svc-flex-column\">\n <ng-container *ngIf=\"!!activeTab\">\n <div role=\"tabpanel\" class=\"svc-creator-tab\" [attr.id]=\"'scrollableDiv-' + activeTab.id\"\n [attr.aria-labelledby]=\"'tab-' + activeTab.id\"\n [class.svc-creator__toolbox--right]=\"creator.toolboxLocation == 'right'\">\n <ng-template\n [component]=\"{ name: activeTab.componentContent, data: { data: creator, model: activeTab.data.model } }\"></ng-template>\n </div>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"creator.isMobileView\" class=\"svc-footer-bar\">\n <div class=\"svc-toolbar-wrapper\" [visible]=\"creator.isMobileView\">\n <sv-action-bar [model]=\"creator.footerToolbar\"></sv-action-bar>\n </div>\n </div>\n </div>\n <svc-side-bar [model]=\"creator.sidebar\" *ngIf=\"creator.isSidebarVisible\"></svc-side-bar>\n </div>\n <div class=\"svc-creator__banner\" *ngIf=\"!creator.haveCommercialLicense\">\n <span class=\"svc-creator__non-commercial-text\" [innerHTML]=\"creator.licenseText | safeHtml\"></span>\n </div>\n <sv-notifier [notifier]=\"creator.notifier\"></sv-notifier>\n </div>\n </div>\n</ng-container>", components: [{ type: i1.ModalComponent, selector: "sv-ng-modal-container" }, { type: i1.SvgBundleComponent, selector: "sv-svg-bundle" }, { type: i2.TabbledMenuComponent, selector: "svc-tabbed-menu", inputs: ["model"] }, { type: i1.ActionBarComponent, selector: "sv-action-bar, sv-ng-action-bar", inputs: ["model", "handleClick"] }, { type: i3.SidebarComponent, selector: "svc-side-bar", inputs: ["model"] }, { type: i1.NotifierComponent, selector: "sv-notifier", inputs: ["notifier"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.VisibleDirective, selector: "[visible]", inputs: ["visible"] }, { type: i1.DynamicComponentDirective, selector: "[component]", inputs: ["component"] }], pipes: { "safeHtml": i1.SafeHtmlPipe } }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CreatorComponent, decorators: [{ type: Component, args: [{ selector: "survey-creator", templateUrl: "./creator.component.html" }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{ type: Input }], container: [{ type: ViewChild, args: ["container", { read: ElementRef }] }] } }); AngularComponentFactory.Instance.registerComponent("survey-widget", SurveyContentComponent); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3JlYXRvci5jb21wb25lbnQudHMiLCIuLi8uLi9zcmMvY3JlYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakcsT0FBTyxFQUFzQyxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUFNL0YsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFdBQStCO0lBSW5FLFlBQVksaUJBQW9DO1FBQzlDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pCLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFDUyxRQUFRO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ2tCLCtCQUErQjtRQUNoRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDa0IsY0FBYztRQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUM3QztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTtZQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQztJQUNNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNlLFdBQVc7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsVUFBVSxDQUFDLENBQVMsRUFBRSxHQUFtQjtRQUN2QyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUNELElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMzRCxDQUFDOzs4R0ExQ1UsZ0JBQWdCO2tHQUFoQixnQkFBZ0IscUtBRUssVUFBVSxvRENWNUMsd2xGQThDZTs0RkR0Q0YsZ0JBQWdCO2tCQUo1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFdBQVcsRUFBRSwwQkFBMEI7aUJBQ3hDO3dHQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDd0MsU0FBUztzQkFBdEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOztBQTJDOUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcG9uZW50RmFjdG9yeSwgQmFzZUFuZ3VsYXIsIFN1cnZleUNvbnRlbnRDb21wb25lbnQgfSBmcm9tIFwic3VydmV5LWFuZ3VsYXItdWlcIjtcbmltcG9ydCB7IFN1cnZleUNyZWF0b3JNb2RlbCwgVGFiYmVkTWVudUl0ZW0sIGNzc1ZhcmlhYmxlc1RvU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jcmVhdG9yLWNvcmVcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInN1cnZleS1jcmVhdG9yXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vY3JlYXRvci5jb21wb25lbnQuaHRtbFwiXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0b3JDb21wb25lbnQgZXh0ZW5kcyBCYXNlQW5ndWxhcjxTdXJ2ZXlDcmVhdG9yTW9kZWw+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIG1vZGVsITogU3VydmV5Q3JlYXRvck1vZGVsO1xuICBAVmlld0NoaWxkKFwiY29udGFpbmVyXCIsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBjb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3RvcihjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcihjaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IFN1cnZleUNyZWF0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHVibGljIGdldCBjcmVhdG9yKCk6IFN1cnZleUNyZWF0b3JNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gIH1cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldFNob3VsZFJlYXR0YWNoQ2hhbmdlRGV0ZWN0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBvdmVycmlkZSBvbk1vZGVsQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBpZiAodGhpcy5wcmV2aW91c01vZGVsKSB7XG4gICAgICB0aGlzLnByZXZpb3VzTW9kZWwudW5zdWJzY3JpYmVSb290RWxlbWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jcmVhdG9yICYmIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuY3JlYXRvci5zZXRSb290RWxlbWVudCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0b3Iuc2V0Um9vdEVsZW1lbnQodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCk7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxuICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdG9yLnVuc3Vic2NyaWJlUm9vdEVsZW1lbnQoKTtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgYWN0aXZlVGFiKCk6IFRhYmJlZE1lbnVJdGVtIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdG9yLmFjdGl2ZVRhYk1lbnVJdGVtO1xuICB9XG4gIHRyYWNrVGFiQnkoXzogbnVtYmVyLCB0YWI6IFRhYmJlZE1lbnVJdGVtKSB7XG4gICAgcmV0dXJuIHRhYi5pZDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRoZW1lVmFyaWFibGVzU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNzc1ZhcmlhYmxlc1RvU3RyaW5nKHRoaXMuY3JlYXRvci50aGVtZVZhcmlhYmxlcyk7XG4gIH1cbn1cblxuQW5ndWxhckNvbXBvbmVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJDb21wb25lbnQoXCJzdXJ2ZXktd2lkZ2V0XCIsIFN1cnZleUNvbnRlbnRDb21wb25lbnQpO1xuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjcmVhdG9yLmlzQ3JlYXRvckRpc3Bvc2VkXCI+XG4gIDxzdi1uZy1tb2RhbC1jb250YWluZXI+PC9zdi1uZy1tb2RhbC1jb250YWluZXI+XG4gIDxkaXYgW2NsYXNzXT1cImNyZWF0b3IuZ2V0Um9vdENzcygpXCIgW2F0dHIuc3R5bGVdPVwidGhlbWVWYXJpYWJsZXNTdHJpbmdcIiAjY29udGFpbmVyPlxuICAgIDxkaXY+XG4gICAgICA8c3Ytc3ZnLWJ1bmRsZT48L3N2LXN2Zy1idW5kbGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN2Yy1mdWxsLWNvbnRhaW5lciBzdmMtY3JlYXRvcl9fYXJlYSBzdmMtZmxleC1jb2x1bW5cIlxuICAgICAgW2NsYXNzLnN2Yy1jcmVhdG9yX19hcmVhLS13aXRoLWJhbm5lcl09XCIhY3JlYXRvci5oYXZlQ29tbWVyY2lhbExpY2Vuc2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdmMtZmxleC1yb3cgc3ZjLWZ1bGwtY29udGFpbmVyXCJcbiAgICAgICAgW2NsYXNzLnN2Yy1jcmVhdG9yX19zaWRlLWJhci0tbGVmdF09XCJjcmVhdG9yLnNpZGViYXJMb2NhdGlvbiA9PSAnbGVmdCdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN2Yy1mbGV4LWNvbHVtbiBzdmMtZmxleC1yb3dfX2VsZW1lbnQgc3ZjLWZsZXgtcm93X19lbGVtZW50LS1ncm93aW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN2Yy10b3AtYmFyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ZjLXRhYmJlZC1tZW51LXdyYXBwZXJcIiBbdmlzaWJsZV09XCJjcmVhdG9yLnNob3dUYWJzXCI+XG4gICAgICAgICAgICAgIDxzdmMtdGFiYmVkLW1lbnUgW21vZGVsXT1cImNyZWF0b3IudGFiYmVkTWVudVwiPjwvc3ZjLXRhYmJlZC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3JlYXRvci5zaG93VG9vbGJhclwiIGNsYXNzPVwic3ZjLXRvb2xiYXItd3JhcHBlclwiIFt2aXNpYmxlXT1cImNyZWF0b3Iuc2hvd1Rvb2xiYXJcIj5cbiAgICAgICAgICAgICAgPHN2LWFjdGlvbi1iYXIgW21vZGVsXT1cImNyZWF0b3IudG9vbGJhclwiPjwvc3YtYWN0aW9uLWJhcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdmMtY3JlYXRvcl9fY29udGVudC13cmFwcGVyIHN2Yy1mbGV4LXJvd1wiXG4gICAgICAgICAgICBbY2xhc3Muc3ZjLWNyZWF0b3JfX2NvbnRlbnQtd3JhcHBlci0tZm9vdGVyLXRvb2xiYXJdPVwiY3JlYXRvci5pc01vYmlsZVZpZXdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdmMtY3JlYXRvcl9fY29udGVudC1ob2xkZXIgc3ZjLWZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWFjdGl2ZVRhYlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJzdmMtY3JlYXRvci10YWJcIiBbYXR0ci5pZF09XCInc2Nyb2xsYWJsZURpdi0nICsgYWN0aXZlVGFiLmlkXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCIndGFiLScgKyBhY3RpdmVUYWIuaWRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnN2Yy1jcmVhdG9yX190b29sYm94LS1yaWdodF09XCJjcmVhdG9yLnRvb2xib3hMb2NhdGlvbiA9PSAncmlnaHQnXCI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudF09XCJ7IG5hbWU6IGFjdGl2ZVRhYi5jb21wb25lbnRDb250ZW50LCBkYXRhOiB7IGRhdGE6IGNyZWF0b3IsIG1vZGVsOiBhY3RpdmVUYWIuZGF0YS5tb2RlbCB9IH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjcmVhdG9yLmlzTW9iaWxlVmlld1wiIGNsYXNzPVwic3ZjLWZvb3Rlci1iYXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdmMtdG9vbGJhci13cmFwcGVyXCIgW3Zpc2libGVdPVwiY3JlYXRvci5pc01vYmlsZVZpZXdcIj5cbiAgICAgICAgICAgICAgPHN2LWFjdGlvbi1iYXIgW21vZGVsXT1cImNyZWF0b3IuZm9vdGVyVG9vbGJhclwiPjwvc3YtYWN0aW9uLWJhcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHN2Yy1zaWRlLWJhciBbbW9kZWxdPVwiY3JlYXRvci5zaWRlYmFyXCIgKm5nSWY9XCJjcmVhdG9yLmlzU2lkZWJhclZpc2libGVcIj48L3N2Yy1zaWRlLWJhcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN2Yy1jcmVhdG9yX19iYW5uZXJcIiAqbmdJZj1cIiFjcmVhdG9yLmhhdmVDb21tZXJjaWFsTGljZW5zZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Yy1jcmVhdG9yX19ub24tY29tbWVyY2lhbC10ZXh0XCIgW2lubmVySFRNTF09XCJjcmVhdG9yLmxpY2Vuc2VUZXh0IHwgc2FmZUh0bWxcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzdi1ub3RpZmllciBbbm90aWZpZXJdPVwiY3JlYXRvci5ub3RpZmllclwiPjwvc3Ytbm90aWZpZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+Il19