formioangular-colfuturo
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.
134 lines • 21.1 kB
JavaScript
import { Component, ViewChild, } from "@angular/core";
import { FormBuilderComponent } from "formioangular-colfuturo";
import _ from "lodash";
import * as i0 from "@angular/core";
import * as i1 from "../form-manager.service";
import * as i2 from "@angular/router";
import * as i3 from "../form-manager.config";
import * as i4 from "formioangular-colfuturo";
import * as i5 from "@angular/common";
import * as i6 from "@angular/forms";
export class FormManagerEditComponent {
service;
router;
route;
config;
ref;
alerts;
builder;
formTitle;
formType;
form;
loading;
formReady;
editMode;
constructor(service, router, route, config, ref, alerts) {
this.service = service;
this.router = router;
this.route = route;
this.config = config;
this.ref = ref;
this.alerts = alerts;
this.form = { components: [] };
this.formReady = false;
this.loading = false;
this.editMode = false;
}
initBuilder(editing) {
if (editing) {
this.loading = true;
this.editMode = true;
return this.service.formReady
.then(() => {
this.form = this.service.form;
this.formTitle.nativeElement.value = this.service.form.title;
this.formType.nativeElement.value =
this.service.form.display || "form";
this.formReady = true;
this.loading = false;
this.ref.detectChanges();
return true;
})
.catch((err) => {
this.alerts.setAlert({ type: "danger", message: err.message || err });
this.loading = false;
this.ref.detectChanges();
this.formReady = true;
});
}
else {
this.formReady = true;
return Promise.resolve(true);
}
}
ngAfterViewInit() {
this.route.url.subscribe((url) => {
setTimeout(() => this.initBuilder(url[0].path === "edit"), 0);
});
}
onDisplaySelect(event) {
this.builder.setDisplay(event.target.value);
}
saveForm() {
this.loading = true;
this.form = _.cloneDeep(this.builder.formio.schema);
this.form.title = this.formTitle.nativeElement.value.trim();
this.form.display = this.formType.nativeElement.value;
this.form.components = _.cloneDeep(this.builder.form.components);
if (this.config.tag) {
this.form.tags = this.form.tags || [];
this.form.tags.push(this.config.tag);
this.form.tags = _.uniq(this.form.tags);
}
if (this.config.type) {
this.form.type = this.config.type;
}
if (!this.form._id) {
this.form.name = _.camelCase(this.form.title).toLowerCase();
this.form.path = this.form.name;
}
return this.service.formio
.saveForm(this.form)
.then((form) => {
this.form = this.service.setForm(form);
this.loading = false;
return this.form;
})
.catch((err) => {
this.loading = false;
// Catch if a form is returned as an error. This is a conflict.
if (err._id && err.type) {
throw err;
}
this.alerts.setAlert({ type: "danger", message: err.message || err });
});
}
onSave() {
return this.saveForm().then((form) => {
if (this.editMode) {
this.router.navigate(["../", "view"], { relativeTo: this.route });
}
else {
this.router.navigate(["../", form._id, "view"], {
relativeTo: this.route,
});
}
});
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerEditComponent, deps: [{ token: i1.FormManagerService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.FormManagerConfig }, { token: i0.ChangeDetectorRef }, { token: i4.FormioAlerts }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FormManagerEditComponent, selector: "ng-component", viewQueries: [{ propertyName: "builder", first: true, predicate: FormBuilderComponent, descendants: true }, { propertyName: "formTitle", first: true, predicate: ["title"], descendants: true }, { propertyName: "formType", first: true, predicate: ["type"], descendants: true }], ngImport: i0, template: "<div class=\"loader\" *ngIf=\"loading\"></div>\r\n<div class=\"form-group row mb-2\">\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" id=\"formTitle\" placeholder=\"Enter a Title\" #title>\r\n </div>\r\n <div class=\"col-sm-2\">\r\n <select class=\"form-control\" id=\"formSelect\" (change)=\"onDisplaySelect($event)\" #type>\r\n <option value=\"form\">Form</option>\r\n <option value=\"wizard\">Wizard</option>\r\n <option value=\"pdf\">PDF</option>\r\n </select>\r\n </div>\r\n <div class=\"col-sm-2\">\r\n <button class=\"btn btn-primary btn-block\" (click)=\"onSave()\"><i class=\"bi bi-save me-2\"></i>Save Form</button>\r\n </div>\r\n</div>\r\n<formio-alerts [alerts]=\"alerts\"></formio-alerts>\r\n<form-builder *ngIf=\"formReady\" [formbuilder]=\"config.builder\" [form]=\"form\" #builder></form-builder>\r\n<button class=\"btn btn-primary\" style=\"margin-top: 10px;\" (click)=\"onSave()\">Save Form</button>\r\n", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.FormBuilderComponent, selector: "form-builder", inputs: ["form", "options", "formbuilder", "noeval", "refresh", "rebuild"], outputs: ["change"] }, { kind: "component", type: i4.FormioAlertsComponent, selector: "formio-alerts", inputs: ["alerts"], outputs: ["focusComponent"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormManagerEditComponent, decorators: [{
type: Component,
args: [{ template: "<div class=\"loader\" *ngIf=\"loading\"></div>\r\n<div class=\"form-group row mb-2\">\r\n <div class=\"col-sm-8\">\r\n <input type=\"text\" class=\"form-control\" id=\"formTitle\" placeholder=\"Enter a Title\" #title>\r\n </div>\r\n <div class=\"col-sm-2\">\r\n <select class=\"form-control\" id=\"formSelect\" (change)=\"onDisplaySelect($event)\" #type>\r\n <option value=\"form\">Form</option>\r\n <option value=\"wizard\">Wizard</option>\r\n <option value=\"pdf\">PDF</option>\r\n </select>\r\n </div>\r\n <div class=\"col-sm-2\">\r\n <button class=\"btn btn-primary btn-block\" (click)=\"onSave()\"><i class=\"bi bi-save me-2\"></i>Save Form</button>\r\n </div>\r\n</div>\r\n<formio-alerts [alerts]=\"alerts\"></formio-alerts>\r\n<form-builder *ngIf=\"formReady\" [formbuilder]=\"config.builder\" [form]=\"form\" #builder></form-builder>\r\n<button class=\"btn btn-primary\" style=\"margin-top: 10px;\" (click)=\"onSave()\">Save Form</button>\r\n" }]
}], ctorParameters: () => [{ type: i1.FormManagerService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.FormManagerConfig }, { type: i0.ChangeDetectorRef }, { type: i4.FormioAlerts }], propDecorators: { builder: [{
type: ViewChild,
args: [FormBuilderComponent, { static: false }]
}], formTitle: [{
type: ViewChild,
args: ["title", { static: false }]
}], formType: [{
type: ViewChild,
args: ["type", { static: false }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWZvcm1pby9tYW5hZ2VyL3NyYy9lZGl0L2VkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvZWRpdC9lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7QUFLdkIsTUFBTSxPQUFPLHdCQUF3QjtJQVcxQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFkVCxPQUFPLENBQXVCO0lBQ1MsU0FBUyxDQUFhO0lBQ3ZCLFFBQVEsQ0FBYTtJQUNwRCxJQUFJLENBQU07SUFDVixPQUFPLENBQVU7SUFDakIsU0FBUyxDQUFVO0lBQ25CLFFBQVEsQ0FBVTtJQUV6QixZQUNTLE9BQTJCLEVBQzNCLE1BQWMsRUFDZCxLQUFxQixFQUNyQixNQUF5QixFQUN6QixHQUFzQixFQUN0QixNQUFvQjtRQUxwQixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUUzQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxD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LEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDQyxRQUFRO3NCQUE3QyxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1NYW5hZ2VyU2VydmljZSB9IGZyb20gXCIuLi9mb3JtLW1hbmFnZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBGb3JtTWFuYWdlckNvbmZpZyB9IGZyb20gXCIuLi9mb3JtLW1hbmFnZXIuY29uZmlnXCI7XHJcbmltcG9ydCB7IEZvcm1pb0FsZXJ0cyB9IGZyb20gXCJmb3JtaW9hbmd1bGFyLWNvbGZ1dHVyb1wiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlckNvbXBvbmVudCB9IGZyb20gXCJmb3JtaW9hbmd1bGFyLWNvbGZ1dHVyb1wiO1xyXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogXCIuL2VkaXQuY29tcG9uZW50Lmh0bWxcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1NYW5hZ2VyRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoRm9ybUJ1aWxkZXJDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGJ1aWxkZXI6IEZvcm1CdWlsZGVyQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJ0aXRsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSkgZm9ybVRpdGxlOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoXCJ0eXBlXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBmb3JtVHlwZTogRWxlbWVudFJlZjtcclxuICBwdWJsaWMgZm9ybTogYW55O1xyXG4gIHB1YmxpYyBsb2FkaW5nOiBCb29sZWFuO1xyXG4gIHB1YmxpYyBmb3JtUmVhZHk6IEJvb2xlYW47XHJcbiAgcHVibGljIGVkaXRNb2RlOiBCb29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBzZXJ2aWNlOiBGb3JtTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHVibGljIGNvbmZpZzogRm9ybU1hbmFnZXJDb25maWcsXHJcbiAgICBwdWJsaWMgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBhbGVydHM6IEZvcm1pb0FsZXJ0c1xyXG4gICkge1xyXG4gICAgdGhpcy5mb3JtID0geyBjb21wb25lbnRzOiBbXSB9O1xyXG4gICAgdGhpcy5mb3JtUmVhZHkgPSBmYWxzZTtcclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5lZGl0TW9kZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaW5pdEJ1aWxkZXIoZWRpdGluZykge1xyXG4gICAgaWYgKGVkaXRpbmcpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5lZGl0TW9kZSA9IHRydWU7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZm9ybVJlYWR5XHJcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5zZXJ2aWNlLmZvcm07XHJcbiAgICAgICAgICB0aGlzLmZvcm1UaXRsZS5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5zZXJ2aWNlLmZvcm0udGl0bGU7XHJcbiAgICAgICAgICB0aGlzLmZvcm1UeXBlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPVxyXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UuZm9ybS5kaXNwbGF5IHx8IFwiZm9ybVwiO1xyXG4gICAgICAgICAgdGhpcy5mb3JtUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0cy5zZXRBbGVydCh7IHR5cGU6IFwiZGFuZ2VyXCIsIG1lc3NhZ2U6IGVyci5tZXNzYWdlIHx8IGVyciB9KTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtUmVhZHkgPSB0cnVlO1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5yb3V0ZS51cmwuc3Vic2NyaWJlKCh1cmwpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRCdWlsZGVyKHVybFswXS5wYXRoID09PSBcImVkaXRcIiksIDApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRpc3BsYXlTZWxlY3QoZXZlbnQpIHtcclxuICAgIHRoaXMuYnVpbGRlci5zZXREaXNwbGF5KGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzYXZlRm9ybSgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmZvcm0gPSBfLmNsb25lRGVlcCh0aGlzLmJ1aWxkZXIuZm9ybWlvLnNjaGVtYSk7XHJcbiAgICB0aGlzLmZvcm0udGl0bGUgPSB0aGlzLmZvcm1UaXRsZS5uYXRpdmVFbGVtZW50LnZhbHVlLnRyaW0oKTtcclxuICAgIHRoaXMuZm9ybS5kaXNwbGF5ID0gdGhpcy5mb3JtVHlwZS5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG4gICAgdGhpcy5mb3JtLmNvbXBvbmVudHMgPSBfLmNsb25lRGVlcCh0aGlzLmJ1aWxkZXIuZm9ybS5jb21wb25lbnRzKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcudGFnKSB7XHJcbiAgICAgIHRoaXMuZm9ybS50YWdzID0gdGhpcy5mb3JtLnRhZ3MgfHwgW107XHJcbiAgICAgIHRoaXMuZm9ybS50YWdzLnB1c2godGhpcy5jb25maWcudGFnKTtcclxuICAgICAgdGhpcy5mb3JtLnRhZ3MgPSBfLnVuaXEodGhpcy5mb3JtLnRhZ3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlnLnR5cGUpIHtcclxuICAgICAgdGhpcy5mb3JtLnR5cGUgPSB0aGlzLmNvbmZpZy50eXBlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZvcm0uX2lkKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5uYW1lID0gXy5jYW1lbENhc2UodGhpcy5mb3JtLnRpdGxlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB0aGlzLmZvcm0ucGF0aCA9IHRoaXMuZm9ybS5uYW1lO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5mb3JtaW9cclxuICAgICAgLnNhdmVGb3JtKHRoaXMuZm9ybSlcclxuICAgICAgLnRoZW4oKGZvcm0pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLnNlcnZpY2Uuc2V0Rm9ybShmb3JtKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIC8vIENhdGNoIGlmIGEgZm9ybSBpcyByZXR1cm5lZCBhcyBhbiBlcnJvci4gVGhpcyBpcyBhIGNvbmZsaWN0LlxyXG4gICAgICAgIGlmIChlcnIuX2lkICYmIGVyci50eXBlKSB7XHJcbiAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWxlcnRzLnNldEFsZXJ0KHsgdHlwZTogXCJkYW5nZXJcIiwgbWVzc2FnZTogZXJyLm1lc3NhZ2UgfHwgZXJyIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU2F2ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNhdmVGb3JtKCkudGhlbigoZm9ybSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi4uL1wiLCBcInZpZXdcIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIuLi9cIiwgZm9ybS5faWQsIFwidmlld1wiXSwge1xyXG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJsb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93IG1iLTJcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cclxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJmb3JtVGl0bGVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGEgVGl0bGVcIiAjdGl0bGU+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XHJcbiAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJmb3JtU2VsZWN0XCIgKGNoYW5nZSk9XCJvbkRpc3BsYXlTZWxlY3QoJGV2ZW50KVwiICN0eXBlPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwiZm9ybVwiPkZvcm08L29wdGlvbj5cclxuICAgICAgPG9wdGlvbiB2YWx1ZT1cIndpemFyZFwiPldpemFyZDwvb3B0aW9uPlxyXG4gICAgICA8b3B0aW9uIHZhbHVlPVwicGRmXCI+UERGPC9vcHRpb24+XHJcbiAgICA8L3NlbGVjdD5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrXCIgKGNsaWNrKT1cIm9uU2F2ZSgpXCI+PGkgY2xhc3M9XCJiaSBiaS1zYXZlIG1lLTJcIj48L2k+U2F2ZSBGb3JtPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48Zm9ybWlvLWFsZXJ0cyBbYWxlcnRzXT1cImFsZXJ0c1wiPjwvZm9ybWlvLWFsZXJ0cz5cclxuPGZvcm0tYnVpbGRlciAqbmdJZj1cImZvcm1SZWFkeVwiIFtmb3JtYnVpbGRlcl09XCJjb25maWcuYnVpbGRlclwiIFtmb3JtXT1cImZvcm1cIiAjYnVpbGRlcj48L2Zvcm0tYnVpbGRlcj5cclxuPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIHN0eWxlPVwibWFyZ2luLXRvcDogMTBweDtcIiAoY2xpY2spPVwib25TYXZlKClcIj5TYXZlIEZvcm08L2J1dHRvbj5cclxuIl19