UNPKG

@formio-tmt/angular

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.4.

81 lines 21.4 kB
import { Component } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "../form-manager.service"; import * as i2 from "@angular/router"; import * as i3 from "@formio-tmt/angular"; import * as i4 from "../form-manager.config"; import * as i5 from "ngx-bootstrap/modal"; import * as i6 from "@angular/common"; import * as i7 from "@angular/forms"; class FormManagerFormComponent { service; route; appConfig; options; modalService; choice = 'isUrl'; embedCode; shareUrl; projectId; pathName; goTo = ''; modalRef; constructor(service, route, appConfig, options, modalService) { this.service = service; this.route = route; this.appConfig = appConfig; this.options = options; this.modalService = modalService; } ngOnInit() { this.service.reset(this.route); this.service.loadForm().then(form => { this.service.formSrc = this.appConfig.appUrl + '/' + form.path; this.projectId = form.project; this.pathName = form.path; this.getShareUrl(); }); } getShareUrl() { const src = this.appConfig.appUrl + '/' + this.pathName; this.shareUrl = `${this.options.viewer}/#/?src=${encodeURIComponent(src)}`; return this.shareUrl; } openEmbed(content) { let goto = ''; if (this.goTo) { goto += `if (d && d.formSubmission && d.formSubmission._id) { window.location.href = "${this.goTo}";}`; } let embedCode = '<script type="text/javascript">'; embedCode += '(function a(d, w, u) {'; embedCode += 'var h = d.getElementsByTagName("head")[0];'; embedCode += 'var s = d.createElement("script");'; embedCode += 's.type = "text/javascript";'; embedCode += 's.src = "' + this.options.viewer + '/assets/lib/seamless/seamless.parent.min.js";'; embedCode += 's.onload = function b() {'; embedCode += 'var f = d.getElementById("formio-form-' + this.service.formio.formId + '");'; embedCode += 'if (!f || (typeof w.seamless === u)) {'; embedCode += 'return setTimeout(b, 100);'; embedCode += '}'; embedCode += 'w.seamless(f, {fallback:false}).receive(function(d, e) {' + goto + '});'; embedCode += '};'; embedCode += 'h.appendChild(s);'; embedCode += '})(document, window);'; embedCode += '</script>'; embedCode += '<iframe id="formio-form-' + this.service.formio.formId + '" '; embedCode += 'style="width:100%;border:none;" height="800px" src="' + this.shareUrl + '&iframe=1"></iframe>'; this.embedCode = embedCode; this.modalRef = this.modalService.show(content, { class: 'modal-lg' }); } choices(string) { this.choice = string; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: FormManagerFormComponent, deps: [{ token: i1.FormManagerService }, { token: i2.ActivatedRoute }, { token: i3.FormioAppConfig }, { token: i4.FormManagerConfig }, { token: i5.BsModalService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: FormManagerFormComponent, selector: "ng-component", ngImport: i0, template: "<button *ngIf=\"options.viewer\" class=\"float-end btn btn-outline-primary\" (click)=\"openEmbed(content)\"><em class=\"fa fa-share-alt bi bi-share\"></em> Share</button>\r\n<ul class=\"nav nav-tabs mb-2\">\r\n <li class=\"nav-item\"><a class=\"nav-link\" routerLink=\"../\"><em class=\"fa fa-chevron-left bi bi-chevron-left\"></em></a></li>\r\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"view\" routerLinkActive=\"active\"><em class=\"fa fa-pencil bi bi-pencil\"></em> Enter Data</a></li>\r\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"submission\" routerLinkActive=\"active\"><em class=\"fa fa-list-alt bi bi-table\"></em> View Data</a></li>\r\n <li *ngIf=\"service.actionAllowed('formEdit')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"edit\" routerLinkActive=\"active\"><em class=\"fa fa-edit bi bi-pencil-square\"></em> Edit Form</a></li>\r\n <li *ngIf=\"service.actionAllowed('formDelete')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"delete\" routerLinkActive=\"active\"><span class=\"fa fa-trash bi bi-trash\"></span></a></li>\r\n</ul>\r\n<router-outlet></router-outlet>\r\n<ng-template #content>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Share or Embed this form</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <ul class=\"nav nav-tabs mr-auto mb-2\">\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isUrl'}\" (click)=\"choices('isUrl')\"><em class=\"fa fa-link bi bi-link\"></em> URL</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isEmbed'}\" (click)=\"choices('isEmbed')\"><em class=\"fa fa-code bi bi-code-slash\"></em> Embed</a>\r\n </li>\r\n </ul>\r\n <pre *ngIf=\"choice === 'isEmbed'\"><textarea onclick=\"this.focus();this.select()\" readonly=\"readonly\" style=\"width:100%;\" rows=\"8\" [ngModel]=\"embedCode\"></textarea></pre>\r\n <input *ngIf=\"choice === 'isUrl'\" type=\"text\" onclick=\"this.focus();this.select()\" readonly=\"readonly\" class=\"form-control\" [ngModel]=\"shareUrl\" placeholder=\"https://examples.form.io/example\">\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-light\" (click)=\"modalRef.hide()\">Close</button>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); } export { FormManagerFormComponent }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: FormManagerFormComponent, decorators: [{ type: Component, args: [{ template: "<button *ngIf=\"options.viewer\" class=\"float-end btn btn-outline-primary\" (click)=\"openEmbed(content)\"><em class=\"fa fa-share-alt bi bi-share\"></em> Share</button>\r\n<ul class=\"nav nav-tabs mb-2\">\r\n <li class=\"nav-item\"><a class=\"nav-link\" routerLink=\"../\"><em class=\"fa fa-chevron-left bi bi-chevron-left\"></em></a></li>\r\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"view\" routerLinkActive=\"active\"><em class=\"fa fa-pencil bi bi-pencil\"></em> Enter Data</a></li>\r\n <li class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"submission\" routerLinkActive=\"active\"><em class=\"fa fa-list-alt bi bi-table\"></em> View Data</a></li>\r\n <li *ngIf=\"service.actionAllowed('formEdit')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"edit\" routerLinkActive=\"active\"><em class=\"fa fa-edit bi bi-pencil-square\"></em> Edit Form</a></li>\r\n <li *ngIf=\"service.actionAllowed('formDelete')\" class=\"nav-item\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"delete\" routerLinkActive=\"active\"><span class=\"fa fa-trash bi bi-trash\"></span></a></li>\r\n</ul>\r\n<router-outlet></router-outlet>\r\n<ng-template #content>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Share or Embed this form</h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <ul class=\"nav nav-tabs mr-auto mb-2\">\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isUrl'}\" (click)=\"choices('isUrl')\"><em class=\"fa fa-link bi bi-link\"></em> URL</a>\r\n </li>\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link\" [ngClass]=\"{'active': choice === 'isEmbed'}\" (click)=\"choices('isEmbed')\"><em class=\"fa fa-code bi bi-code-slash\"></em> Embed</a>\r\n </li>\r\n </ul>\r\n <pre *ngIf=\"choice === 'isEmbed'\"><textarea onclick=\"this.focus();this.select()\" readonly=\"readonly\" style=\"width:100%;\" rows=\"8\" [ngModel]=\"embedCode\"></textarea></pre>\r\n <input *ngIf=\"choice === 'isUrl'\" type=\"text\" onclick=\"this.focus();this.select()\" readonly=\"readonly\" class=\"form-control\" [ngModel]=\"shareUrl\" placeholder=\"https://examples.form.io/example\">\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-light\" (click)=\"modalRef.hide()\">Close</button>\r\n </div>\r\n</ng-template>\r\n" }] }], ctorParameters: function () { return [{ type: i1.FormManagerService }, { type: i2.ActivatedRoute }, { type: i3.FormioAppConfig }, { type: i4.FormManagerConfig }, { type: i5.BsModalService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWZvcm1pby9tYW5hZ2VyL3NyYy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1mb3JtaW8vbWFuYWdlci9zcmMvZm9ybS9mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXVCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFPL0QsTUFHYSx3QkFBd0I7SUFTMUI7SUFDQTtJQUNBO0lBQ0E7SUFDQztJQVpWLE1BQU0sR0FBUSxPQUFPLENBQUM7SUFDdEIsU0FBUyxDQUFNO0lBQ2YsUUFBUSxDQUFNO0lBQ2QsU0FBUyxDQUFNO0lBQ2YsUUFBUSxDQUFNO0lBQ2QsSUFBSSxHQUFRLEVBQUUsQ0FBQztJQUNmLFFBQVEsQ0FBYTtJQUNyQixZQUNTLE9BQTJCLEVBQzNCLEtBQXFCLEVBQ3JCLFNBQTBCLEVBQzFCLE9BQTBCLEVBQ3pCLFlBQTRCO1FBSjdCLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQzNCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtJQUNsQyxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3hELElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sV0FBVyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQXlCO1FBQ2pDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLElBQUksSUFBSSxnRkFBZ0YsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO1NBQ3hHO1FBQ0QsSUFBSSxTQUFTLEdBQUcsaUNBQWlDLENBQUM7UUFDbEQsU0FBUyxJQUFJLHdCQUF3QixDQUFDO1FBQ3RDLFNBQVMsSUFBTyw0Q0FBNEMsQ0FBQztRQUM3RCxTQUFTLElBQU8sb0NBQW9DLENBQUM7UUFDckQsU0FBUyxJQUFPLDZCQUE2QixDQUFDO1FBQzlDLFNBQVMsSUFBTyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsK0NBQStDLENBQUM7UUFDcEcsU0FBUyxJQUFPLDJCQUEyQixDQUFDO1FBQzVDLFNBQVMsSUFBVSx3Q0FBd0MsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2pHLFNBQVMsSUFBVSx3Q0FBd0MsQ0FBQztRQUM1RCxTQUFTLElBQWEsNEJBQTRCLENBQUM7UUFDbkQsU0FBUyxJQUFVLEdBQUcsQ0FBQztRQUN2QixTQUFTLElBQVUsMERBQTBELEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUM3RixTQUFTLElBQU8sSUFBSSxDQUFDO1FBQ3JCLFNBQVMsSUFBTyxtQkFBbUIsQ0FBQztRQUNwQyxTQUFTLElBQUksdUJBQXVCLENBQUM7UUFDckMsU0FBUyxJQUFJLFdBQVcsQ0FBQztRQUN6QixTQUFTLElBQUksMEJBQTBCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUM1RSxTQUFTLElBQVEsc0RBQXNELEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQztRQUNqSCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxPQUFPLENBQUMsTUFBTTtRQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7dUdBN0RVLHdCQUF3QjsyRkFBeEIsd0JBQXdCLG9EQ1ZyQyxzbEZBZ0NBOztTRHRCYSx3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFIcEMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9mb3JtLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1NYW5hZ2VyQ29uZmlnIH0gZnJvbSAnLi4vZm9ybS1tYW5hZ2VyLmNvbmZpZyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRm9ybWlvQXBwQ29uZmlnIH0gZnJvbSAnQGZvcm1pby10bXQvYW5ndWxhcic7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlLCBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1NYW5hZ2VyRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgY2hvaWNlOiBhbnkgPSAnaXNVcmwnO1xyXG4gIGVtYmVkQ29kZTogYW55O1xyXG4gIHNoYXJlVXJsOiBhbnk7XHJcbiAgcHJvamVjdElkOiBhbnk7XHJcbiAgcGF0aE5hbWU6IGFueTtcclxuICBnb1RvOiBhbnkgPSAnJztcclxuICBtb2RhbFJlZjogQnNNb2RhbFJlZjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBzZXJ2aWNlOiBGb3JtTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHVibGljIGFwcENvbmZpZzogRm9ybWlvQXBwQ29uZmlnLFxyXG4gICAgcHVibGljIG9wdGlvbnM6IEZvcm1NYW5hZ2VyQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UucmVzZXQodGhpcy5yb3V0ZSk7XHJcbiAgICB0aGlzLnNlcnZpY2UubG9hZEZvcm0oKS50aGVuKGZvcm0gPT4ge1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZm9ybVNyYyA9IHRoaXMuYXBwQ29uZmlnLmFwcFVybCArICcvJyArIGZvcm0ucGF0aDtcclxuICAgICAgdGhpcy5wcm9qZWN0SWQgPSBmb3JtLnByb2plY3Q7XHJcbiAgICAgIHRoaXMucGF0aE5hbWUgPSBmb3JtLnBhdGg7XHJcbiAgICAgIHRoaXMuZ2V0U2hhcmVVcmwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNoYXJlVXJsKCkge1xyXG4gICAgY29uc3Qgc3JjID0gdGhpcy5hcHBDb25maWcuYXBwVXJsICsgJy8nICsgdGhpcy5wYXRoTmFtZTtcclxuICAgIHRoaXMuc2hhcmVVcmwgPSBgJHt0aGlzLm9wdGlvbnMudmlld2VyfS8jLz9zcmM9JHtlbmNvZGVVUklDb21wb25lbnQoc3JjKX1gO1xyXG4gICAgcmV0dXJuIHRoaXMuc2hhcmVVcmw7XHJcbiAgfVxyXG5cclxuICBvcGVuRW1iZWQoY29udGVudDogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgbGV0IGdvdG8gPSAnJztcclxuICAgIGlmICh0aGlzLmdvVG8pIHtcclxuICAgICAgZ290byArPSBgaWYgKGQgJiYgZC5mb3JtU3VibWlzc2lvbiAmJiBkLmZvcm1TdWJtaXNzaW9uLl9pZCkgeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiJHt0aGlzLmdvVG99XCI7fWA7XHJcbiAgICB9XHJcbiAgICBsZXQgZW1iZWRDb2RlID0gJzxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPic7XHJcbiAgICBlbWJlZENvZGUgKz0gJyhmdW5jdGlvbiBhKGQsIHcsIHUpIHsnO1xyXG4gICAgZW1iZWRDb2RlICs9ICAgICd2YXIgaCA9IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdOyc7XHJcbiAgICBlbWJlZENvZGUgKz0gICAgJ3ZhciBzID0gZC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpOyc7XHJcbiAgICBlbWJlZENvZGUgKz0gICAgJ3MudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7JztcclxuICAgIGVtYmVkQ29kZSArPSAgICAncy5zcmMgPSBcIicgKyB0aGlzLm9wdGlvbnMudmlld2VyICsgJy9hc3NldHMvbGliL3NlYW1sZXNzL3NlYW1sZXNzLnBhcmVudC5taW4uanNcIjsnO1xyXG4gICAgZW1iZWRDb2RlICs9ICAgICdzLm9ubG9hZCA9IGZ1bmN0aW9uIGIoKSB7JztcclxuICAgIGVtYmVkQ29kZSArPSAgICAgICAndmFyIGYgPSBkLmdldEVsZW1lbnRCeUlkKFwiZm9ybWlvLWZvcm0tJyArIHRoaXMuc2VydmljZS5mb3JtaW8uZm9ybUlkICsgJ1wiKTsnO1xyXG4gICAgZW1iZWRDb2RlICs9ICAgICAgICdpZiAoIWYgfHwgKHR5cGVvZiB3LnNlYW1sZXNzID09PSB1KSkgeyc7XHJcbiAgICBlbWJlZENvZGUgKz0gICAgICAgICAgJ3JldHVybiBzZXRUaW1lb3V0KGIsIDEwMCk7JztcclxuICAgIGVtYmVkQ29kZSArPSAgICAgICAnfSc7XHJcbiAgICBlbWJlZENvZGUgKz0gICAgICAgJ3cuc2VhbWxlc3MoZiwge2ZhbGxiYWNrOmZhbHNlfSkucmVjZWl2ZShmdW5jdGlvbihkLCBlKSB7JyArIGdvdG8gKyAnfSk7JztcclxuICAgIGVtYmVkQ29kZSArPSAgICAnfTsnO1xyXG4gICAgZW1iZWRDb2RlICs9ICAgICdoLmFwcGVuZENoaWxkKHMpOyc7XHJcbiAgICBlbWJlZENvZGUgKz0gJ30pKGRvY3VtZW50LCB3aW5kb3cpOyc7XHJcbiAgICBlbWJlZENvZGUgKz0gJzwvc2NyaXB0Pic7XHJcbiAgICBlbWJlZENvZGUgKz0gJzxpZnJhbWUgaWQ9XCJmb3JtaW8tZm9ybS0nICsgdGhpcy5zZXJ2aWNlLmZvcm1pby5mb3JtSWQgKyAnXCIgJztcclxuICAgIGVtYmVkQ29kZSArPSAgICAgJ3N0eWxlPVwid2lkdGg6MTAwJTtib3JkZXI6bm9uZTtcIiBoZWlnaHQ9XCI4MDBweFwiIHNyYz1cIicgKyB0aGlzLnNoYXJlVXJsICsgJyZpZnJhbWU9MVwiPjwvaWZyYW1lPic7XHJcbiAgICB0aGlzLmVtYmVkQ29kZSA9IGVtYmVkQ29kZTtcclxuICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KGNvbnRlbnQsIHsgY2xhc3M6ICdtb2RhbC1sZycgfSk7XHJcbiAgfVxyXG5cclxuICBjaG9pY2VzKHN0cmluZykge1xyXG4gICAgdGhpcy5jaG9pY2UgPSBzdHJpbmc7XHJcbiAgfVxyXG59XHJcbiIsIjxidXR0b24gKm5nSWY9XCJvcHRpb25zLnZpZXdlclwiIGNsYXNzPVwiZmxvYXQtZW5kIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgKGNsaWNrKT1cIm9wZW5FbWJlZChjb250ZW50KVwiPjxlbSBjbGFzcz1cImZhIGZhLXNoYXJlLWFsdCBiaSBiaS1zaGFyZVwiPjwvZW0+IFNoYXJlPC9idXR0b24+XHJcbjx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBtYi0yXCI+XHJcbiAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj48YSBjbGFzcz1cIm5hdi1saW5rXCIgcm91dGVyTGluaz1cIi4uL1wiPjxlbSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCBiaSBiaS1jaGV2cm9uLWxlZnRcIj48L2VtPjwvYT48L2xpPlxyXG4gIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwidmlld1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj48ZW0gY2xhc3M9XCJmYSBmYS1wZW5jaWwgYmkgYmktcGVuY2lsXCI+PC9lbT4gRW50ZXIgRGF0YTwvYT48L2xpPlxyXG4gIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwic3VibWlzc2lvblwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj48ZW0gY2xhc3M9XCJmYSBmYS1saXN0LWFsdCBiaSBiaS10YWJsZVwiPjwvZW0+IFZpZXcgRGF0YTwvYT48L2xpPlxyXG4gIDxsaSAqbmdJZj1cInNlcnZpY2UuYWN0aW9uQWxsb3dlZCgnZm9ybUVkaXQnKVwiIGNsYXNzPVwibmF2LWl0ZW1cIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIHJvdXRlckxpbms9XCJlZGl0XCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxlbSBjbGFzcz1cImZhIGZhLWVkaXQgYmkgYmktcGVuY2lsLXNxdWFyZVwiPjwvZW0+IEVkaXQgRm9ybTwvYT48L2xpPlxyXG4gIDxsaSAqbmdJZj1cInNlcnZpY2UuYWN0aW9uQWxsb3dlZCgnZm9ybURlbGV0ZScpXCIgY2xhc3M9XCJuYXYtaXRlbVwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj48YSBjbGFzcz1cIm5hdi1saW5rXCIgcm91dGVyTGluaz1cImRlbGV0ZVwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj48c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoIGJpIGJpLXRyYXNoXCI+PC9zcGFuPjwvYT48L2xpPlxyXG48L3VsPlxyXG48cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XHJcbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlNoYXJlIG9yIEVtYmVkIHRoaXMgZm9ybTwvaDQ+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsUmVmLmhpZGUoKVwiPlxyXG4gICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBtci1hdXRvIG1iLTJcIj5cclxuICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cclxuICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBjaG9pY2UgPT09ICdpc1VybCd9XCIgKGNsaWNrKT1cImNob2ljZXMoJ2lzVXJsJylcIj48ZW0gY2xhc3M9XCJmYSBmYS1saW5rIGJpIGJpLWxpbmtcIj48L2VtPiBVUkw8L2E+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogY2hvaWNlID09PSAnaXNFbWJlZCd9XCIgKGNsaWNrKT1cImNob2ljZXMoJ2lzRW1iZWQnKVwiPjxlbSBjbGFzcz1cImZhIGZhLWNvZGUgYmkgYmktY29kZS1zbGFzaFwiPjwvZW0+IEVtYmVkPC9hPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICAgIDxwcmUgICpuZ0lmPVwiY2hvaWNlID09PSAnaXNFbWJlZCdcIj48dGV4dGFyZWEgb25jbGljaz1cInRoaXMuZm9jdXMoKTt0aGlzLnNlbGVjdCgpXCIgcmVhZG9ubHk9XCJyZWFkb25seVwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIiByb3dzPVwiOFwiIFtuZ01vZGVsXT1cImVtYmVkQ29kZVwiPjwvdGV4dGFyZWE+PC9wcmU+XHJcbiAgICA8aW5wdXQgKm5nSWY9XCJjaG9pY2UgPT09ICdpc1VybCdcIiB0eXBlPVwidGV4dFwiIG9uY2xpY2s9XCJ0aGlzLmZvY3VzKCk7dGhpcy5zZWxlY3QoKVwiIHJlYWRvbmx5PVwicmVhZG9ubHlcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtuZ01vZGVsXT1cInNoYXJlVXJsXCIgcGxhY2Vob2xkZXI9XCJodHRwczovL2V4YW1wbGVzLmZvcm0uaW8vZXhhbXBsZVwiPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIChjbGljayk9XCJtb2RhbFJlZi5oaWRlKClcIj5DbG9zZTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=