UNPKG

stimulsoft-forms

Version:
218 lines 27.2 kB
import { Injectable } from "@angular/core"; import { Subject } from "rxjs"; import { StiSignatureElement } from "../elements/StiSignatureElement"; import { StiTextItem } from "../elements/text/StiTextItem"; import StiJson from "../system/StiJson"; import { StiImageEditorResult } from "../elements/signature/StiImageEditorResult"; import { StiHorizontalAlignment, StiVerticalAlignment } from "../system/enums"; import * as i0 from "@angular/core"; import * as i1 from "./model.service"; export class SignatureService { checkLoading() { if (this.completedLoadingImages === this.currentActiveLoadingImages) { this.completedLoading.next(true); this.completedLoadingImages = 0; this.currentActiveLoadingImages = 0; } else { setTimeout(() => { this.checkLoading(); }); } } getVerticalPosition(verticalAlignment) { switch (verticalAlignment) { case StiVerticalAlignment.Top: return "top"; case StiVerticalAlignment.Bottom: return "bottom"; case StiVerticalAlignment.Center: return "center"; } } getHorizontalPosition(horizontalAlignment) { switch (horizontalAlignment) { case StiHorizontalAlignment.Left: return "left"; case StiHorizontalAlignment.Right: return "right"; case StiHorizontalAlignment.Center: return "center"; } } getClass(item) { if (item == "Text") { return StiTextItem; } else if (item == "Image") { return StiImageEditorResult; } } setTemplate(template) { if (template.type == "Image") { this.currentEditableImage = template.image; this.currentEditableText = template.text; this.currentCanvasContent = template.drawedImage; this.selectedMode = "Draw"; } else { this.currentPreviewFont = template.specialFont; this.currentEditableFullName = template.fullName; this.currentEditableInitials = template.initials; this.selectedMode = "Type"; } this.showSavedTemplates = false; } getTemplateImage(template) { return "url(" + template?.image?.loadedImage + ")"; } getTemplateDrawedImage(template) { return "url(" + template?.image?.drawedImage + ")"; } deleteTemplate(index) { this.savedTemplates.splice(index, 1); } getTemplateHorizontalAlignment(template) { if (template.image.horizontalAlignment == StiHorizontalAlignment.Center) { return "center"; } else if (template.image.horizontalAlignment == StiHorizontalAlignment.Left) { return "start"; } else { return "end"; } } getTemplateBackgroundSize(template, container) { if (!template?.image?.loadedImage) { return; } if (template?.image?.aspectRatio) { return "contain"; } if (template?.image?.stretch) { return `${container.offsetWidth}px ${container.offsetHeight}px`; } else { return `${template?.image?.naturalWidth}px ${template?.image?.naturalHeight}px`; } } getTemplateBackgroundPosition(template) { if (!template?.image?.aspectRatio && !template?.image?.stretch) { if (template?.image?.verticalAlignment == StiVerticalAlignment.Center) { return "center center"; } else if (template?.image?.verticalAlignment == StiVerticalAlignment.Top) { return "top center"; } else { return "bottom center"; } } else { return "center"; } } cloneProperty(property, propertyClass) { let result = new propertyClass(); let jObject = new StiJson(); jObject.deserialize(property.saveToJsonObject({}).serialize()); result.loadFromJsonObject(jObject); return result; } get editorComponentX() { return this._editorComponentX; } set editorComponentX(value) { value <= 0 ? (this._editorComponentX = 0) : (this._editorComponentX = value); } get editorComponentY() { return this._editorComponentY; } set editorComponentY(value) { value <= 0 ? (this._editorComponentY = 0) : (this._editorComponentY = value); } get y() { if (this.isSignature) { let container = document.getElementById(this.model.selectedComponent?.element.guid); let geom = this.model.getPositionRelativeToForm(container); return geom.y; } else { return 0; } } get x() { if (this.isSignature) { let container = document.getElementById(this.model.selectedComponent?.element.guid); let geom = this.model.getPositionRelativeToForm(container); return geom.x + geom.width + 5; } else { return 0; } } changeDrawingMode() { this.textMode = false; this.drawingMode = !this.drawingMode; } changeTextMode() { this.drawingMode = false; this.textMode = !this.textMode; } clear() { this.clearButtonClick.next(true); } onFileSelected() { let input = document.createElement("input"); input.type = "file"; input.accept = ".png, .jpg, .jpeg"; let this_ = this; input.onchange = (_) => { this_.clear(); let file = Array.from(input.files)[0]; var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (e) { this_.loadedImage.next(e.target.result); }; }; input.click(); } get isSignature() { return this.model.selectedComponent?.element instanceof StiSignatureElement ? true : false; } constructor(model) { this.model = model; this._editorComponentX = 0; this._editorComponentY = 0; this.textMode = false; this.selectedMode = "Draw"; this.previewFonts = ["Teddy Bear", "MADE Likes Script", "Denistina"]; this.currentPreviewFont = "Teddy Bear"; this.drawingMode = false; this.showFontsPreview = false; this.loadedImage = new Subject(); this.clearButtonClick = new Subject(); this.updateSignature = new Subject(); this.getInsertedInformation = new Subject(); this.currentEditableText = new StiTextItem(); this.editorComponentHeight = 350; this.editorComponentWidth = 365; this.fontsPreviewX = 0; this.fontsPreviewY = 0; this.templatesPreviewX = 0; this.templatesPreviewY = 0; this.showSavedTemplates = false; this.savedTemplates = []; this.currentActiveLoadingImages = 0; this.completedLoadingImages = 0; this.completedLoading = new Subject(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignatureService, deps: [{ token: i1.StiModelService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignatureService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignatureService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.StiModelService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpLXNpZ25hdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RpbXVsc29mdC1mb3Jtcy9zcmMvbGliL3NlcnZpY2VzL3N0aS1zaWduYXR1cmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTNELE9BQU8sT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFHL0UsTUFBTSxPQUFPLGdCQUFnQjtJQWlDcEIsWUFBWTtRQUNqQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxpQkFBdUM7UUFDekQsUUFBUSxpQkFBaUIsRUFBRSxDQUFDO1lBQzFCLEtBQUssb0JBQW9CLENBQUMsR0FBRztnQkFDM0IsT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLG9CQUFvQixDQUFDLE1BQU07Z0JBQzlCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLEtBQUssb0JBQW9CLENBQUMsTUFBTTtnQkFDOUIsT0FBTyxRQUFRLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxtQkFBMkM7UUFDL0QsUUFBUSxtQkFBbUIsRUFBRSxDQUFDO1lBQzVCLEtBQUssc0JBQXNCLENBQUMsSUFBSTtnQkFDOUIsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxzQkFBc0IsQ0FBQyxLQUFLO2dCQUMvQixPQUFPLE9BQU8sQ0FBQztZQUNqQixLQUFLLHNCQUFzQixDQUFDLE1BQU07Z0JBQ2hDLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQUk7UUFDWCxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNuQixPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7WUFDM0IsT0FBTyxvQkFBb0IsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUNELFdBQVcsQ0FBQyxRQUFRO1FBQ2xCLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUMzQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUN6QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztRQUM3QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQy9DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ2pELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxRQUFRO1FBQ3ZCLE9BQU8sTUFBTSxHQUFHLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxHQUFHLEdBQUcsQ0FBQztJQUNyRCxDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsUUFBUTtRQUM3QixPQUFPLE1BQU0sR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsR0FBRyxHQUFHLENBQUM7SUFDckQsQ0FBQztJQUNELGNBQWMsQ0FBQyxLQUFLO1FBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsOEJBQThCLENBQUMsUUFBUTtRQUNyQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLElBQUksc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEUsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQzthQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3RSxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFDRCx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsU0FBUztRQUMzQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNsQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNqQyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsSUFBSSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE9BQU8sR0FBRyxTQUFTLENBQUMsV0FBVyxNQUFNLFNBQVMsQ0FBQyxZQUFZLElBQUksQ0FBQztRQUNsRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksTUFBTSxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsSUFBSSxDQUFDO1FBQ2xGLENBQUM7SUFDSCxDQUFDO0lBQ0QsNkJBQTZCLENBQUMsUUFBUTtRQUNwQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQy9ELElBQUksUUFBUSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdEUsT0FBTyxlQUFlLENBQUM7WUFDekIsQ0FBQztpQkFBTSxJQUFJLFFBQVEsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLElBQUksb0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzFFLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLGVBQWUsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUNELGFBQWEsQ0FBQyxRQUE0QyxFQUFFLGFBQWE7UUFDdkUsSUFBSSxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNqQyxJQUFJLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0QsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBVyxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ3ZDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQVcsZ0JBQWdCLENBQUMsS0FBYTtRQUN2QyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELElBQVcsQ0FBQztRQUNWLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEYsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBVyxDQUFDO1FBQ1YsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNELE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFDRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ2pDLENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDcEIsS0FBSyxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQztRQUNuQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3JCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztnQkFDekIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7UUFDRixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUNELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxZQUFZLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RixDQUFDO0lBQ0QsWUFBbUIsS0FBc0I7UUFBdEIsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFuTWpDLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQUM5QixzQkFBaUIsR0FBVyxDQUFDLENBQUM7UUFFL0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixpQkFBWSxHQUFXLE1BQU0sQ0FBQztRQUM5QixpQkFBWSxHQUFHLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2hFLHVCQUFrQixHQUFHLFlBQVksQ0FBQztRQUNsQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ3JDLDJCQUFzQixHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDNUMsd0JBQW1CLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFLckQsMEJBQXFCLEdBQUcsR0FBRyxDQUFDO1FBQzVCLHlCQUFvQixHQUFHLEdBQUcsQ0FBQztRQUMzQixrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUMxQixrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUMxQixzQkFBaUIsR0FBVyxDQUFDLENBQUM7UUFDOUIsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyxtQkFBYyxHQUFVLEVBQUUsQ0FBQztRQUMzQiwrQkFBMEIsR0FBVyxDQUFDLENBQUM7UUFDdkMsMkJBQXNCLEdBQVcsQ0FBQyxDQUFDO1FBQ25DLHFCQUFnQixHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7SUF1S0QsQ0FBQzsrR0FwTWxDLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBTdGlTaWduYXR1cmVFbGVtZW50IH0gZnJvbSBcIi4uL2VsZW1lbnRzL1N0aVNpZ25hdHVyZUVsZW1lbnRcIjtcclxuaW1wb3J0IHsgU3RpTW9kZWxTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdGlUZXh0SXRlbSB9IGZyb20gXCIuLi9lbGVtZW50cy90ZXh0L1N0aVRleHRJdGVtXCI7XHJcbmltcG9ydCB7IFN0aUltYWdlRWRpdG9yUmVzdWx0T2JqZWN0LCBTdGlTaWduYXR1cmVEcmF3VGVtcGxhdGUsIFN0aVNpZ25hdHVyZVR5cGVUZW1wbGF0ZSB9IGZyb20gXCIuLi9zeXN0ZW0vaW50ZXJmYWNlc1wiO1xyXG5pbXBvcnQgU3RpSnNvbiBmcm9tIFwiLi4vc3lzdGVtL1N0aUpzb25cIjtcclxuaW1wb3J0IHsgU3RpSW1hZ2VFZGl0b3JSZXN1bHQgfSBmcm9tIFwiLi4vZWxlbWVudHMvc2lnbmF0dXJlL1N0aUltYWdlRWRpdG9yUmVzdWx0XCI7XHJcbmltcG9ydCB7IFN0aUhvcml6b250YWxBbGlnbm1lbnQsIFN0aVZlcnRpY2FsQWxpZ25tZW50IH0gZnJvbSBcIi4uL3N5c3RlbS9lbnVtc1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2lnbmF0dXJlU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBfZWRpdG9yQ29tcG9uZW50WDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9lZGl0b3JDb21wb25lbnRZOiBudW1iZXIgPSAwO1xyXG5cclxuICBwdWJsaWMgdGV4dE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2VsZWN0ZWRNb2RlOiBzdHJpbmcgPSBcIkRyYXdcIjtcclxuICBwdWJsaWMgcHJldmlld0ZvbnRzID0gW1wiVGVkZHkgQmVhclwiLCBcIk1BREUgTGlrZXMgU2NyaXB0XCIsIFwiRGVuaXN0aW5hXCJdO1xyXG4gIHB1YmxpYyBjdXJyZW50UHJldmlld0ZvbnQgPSBcIlRlZGR5IEJlYXJcIjtcclxuICBwdWJsaWMgZHJhd2luZ01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0ZvbnRzUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsb2FkZWRJbWFnZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBwdWJsaWMgY2xlYXJCdXR0b25DbGljayA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHVibGljIHVwZGF0ZVNpZ25hdHVyZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBwdWJsaWMgZ2V0SW5zZXJ0ZWRJbmZvcm1hdGlvbiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBwdWJsaWMgY3VycmVudEVkaXRhYmxlVGV4dDogU3RpVGV4dEl0ZW0gPSBuZXcgU3RpVGV4dEl0ZW0oKTtcclxuICBwdWJsaWMgY3VycmVudEVkaXRhYmxlSW1hZ2U6IGFueSB8IFN0aUltYWdlRWRpdG9yUmVzdWx0O1xyXG4gIHB1YmxpYyBjdXJyZW50RWRpdGFibGVGdWxsTmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBjdXJyZW50RWRpdGFibGVJbml0aWFsczogc3RyaW5nO1xyXG4gIHB1YmxpYyBjdXJyZW50Q2FudmFzQ29udGVudDogYW55O1xyXG4gIHB1YmxpYyBlZGl0b3JDb21wb25lbnRIZWlnaHQgPSAzNTA7XHJcbiAgcHVibGljIGVkaXRvckNvbXBvbmVudFdpZHRoID0gMzY1O1xyXG4gIHB1YmxpYyBmb250c1ByZXZpZXdYOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBmb250c1ByZXZpZXdZOiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyB0ZW1wbGF0ZXNQcmV2aWV3WDogbnVtYmVyID0gMDtcclxuICBwdWJsaWMgdGVtcGxhdGVzUHJldmlld1k6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIHNob3dTYXZlZFRlbXBsYXRlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzYXZlZFRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgY3VycmVudEFjdGl2ZUxvYWRpbmdJbWFnZXM6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGNvbXBsZXRlZExvYWRpbmdJbWFnZXM6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGNvbXBsZXRlZExvYWRpbmcgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgcHVibGljIGN1cnJlbnRTaWduYXR1cmVFbGVtZW50OiBTdGlTaWduYXR1cmVFbGVtZW50IHwgbnVsbDtcclxuICBwdWJsaWMgY3VycmVudEVkaXRhYmxlU2lnbmF0dXJlRWxlbWVudDogU3RpU2lnbmF0dXJlRWxlbWVudCB8IG51bGw7XHJcblxyXG4gIHB1YmxpYyBjaGVja0xvYWRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5jb21wbGV0ZWRMb2FkaW5nSW1hZ2VzID09PSB0aGlzLmN1cnJlbnRBY3RpdmVMb2FkaW5nSW1hZ2VzKSB7XHJcbiAgICAgIHRoaXMuY29tcGxldGVkTG9hZGluZy5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmNvbXBsZXRlZExvYWRpbmdJbWFnZXMgPSAwO1xyXG4gICAgICB0aGlzLmN1cnJlbnRBY3RpdmVMb2FkaW5nSW1hZ2VzID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tMb2FkaW5nKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRWZXJ0aWNhbFBvc2l0aW9uKHZlcnRpY2FsQWxpZ25tZW50OiBTdGlWZXJ0aWNhbEFsaWdubWVudCkge1xyXG4gICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWdubWVudCkge1xyXG4gICAgICBjYXNlIFN0aVZlcnRpY2FsQWxpZ25tZW50LlRvcDpcclxuICAgICAgICByZXR1cm4gXCJ0b3BcIjtcclxuICAgICAgY2FzZSBTdGlWZXJ0aWNhbEFsaWdubWVudC5Cb3R0b206XHJcbiAgICAgICAgcmV0dXJuIFwiYm90dG9tXCI7XHJcbiAgICAgIGNhc2UgU3RpVmVydGljYWxBbGlnbm1lbnQuQ2VudGVyOlxyXG4gICAgICAgIHJldHVybiBcImNlbnRlclwiO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRIb3Jpem9udGFsUG9zaXRpb24oaG9yaXpvbnRhbEFsaWdubWVudDogU3RpSG9yaXpvbnRhbEFsaWdubWVudCkge1xyXG4gICAgc3dpdGNoIChob3Jpem9udGFsQWxpZ25tZW50KSB7XHJcbiAgICAgIGNhc2UgU3RpSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0OlxyXG4gICAgICAgIHJldHVybiBcImxlZnRcIjtcclxuICAgICAgY2FzZSBTdGlIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0OlxyXG4gICAgICAgIHJldHVybiBcInJpZ2h0XCI7XHJcbiAgICAgIGNhc2UgU3RpSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXI6XHJcbiAgICAgICAgcmV0dXJuIFwiY2VudGVyXCI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldENsYXNzKGl0ZW0pIHtcclxuICAgIGlmIChpdGVtID09IFwiVGV4dFwiKSB7XHJcbiAgICAgIHJldHVybiBTdGlUZXh0SXRlbTtcclxuICAgIH0gZWxzZSBpZiAoaXRlbSA9PSBcIkltYWdlXCIpIHtcclxuICAgICAgcmV0dXJuIFN0aUltYWdlRWRpdG9yUmVzdWx0O1xyXG4gICAgfVxyXG4gIH1cclxuICBzZXRUZW1wbGF0ZSh0ZW1wbGF0ZSkge1xyXG4gICAgaWYgKHRlbXBsYXRlLnR5cGUgPT0gXCJJbWFnZVwiKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudEVkaXRhYmxlSW1hZ2UgPSB0ZW1wbGF0ZS5pbWFnZTtcclxuICAgICAgdGhpcy5jdXJyZW50RWRpdGFibGVUZXh0ID0gdGVtcGxhdGUudGV4dDtcclxuICAgICAgdGhpcy5jdXJyZW50Q2FudmFzQ29udGVudCA9IHRlbXBsYXRlLmRyYXdlZEltYWdlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IFwiRHJhd1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50UHJldmlld0ZvbnQgPSB0ZW1wbGF0ZS5zcGVjaWFsRm9udDtcclxuICAgICAgdGhpcy5jdXJyZW50RWRpdGFibGVGdWxsTmFtZSA9IHRlbXBsYXRlLmZ1bGxOYW1lO1xyXG4gICAgICB0aGlzLmN1cnJlbnRFZGl0YWJsZUluaXRpYWxzID0gdGVtcGxhdGUuaW5pdGlhbHM7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlID0gXCJUeXBlXCI7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dTYXZlZFRlbXBsYXRlcyA9IGZhbHNlO1xyXG4gIH1cclxuICBnZXRUZW1wbGF0ZUltYWdlKHRlbXBsYXRlKSB7XHJcbiAgICByZXR1cm4gXCJ1cmwoXCIgKyB0ZW1wbGF0ZT8uaW1hZ2U/LmxvYWRlZEltYWdlICsgXCIpXCI7XHJcbiAgfVxyXG4gIGdldFRlbXBsYXRlRHJhd2VkSW1hZ2UodGVtcGxhdGUpIHtcclxuICAgIHJldHVybiBcInVybChcIiArIHRlbXBsYXRlPy5pbWFnZT8uZHJhd2VkSW1hZ2UgKyBcIilcIjtcclxuICB9XHJcbiAgZGVsZXRlVGVtcGxhdGUoaW5kZXgpIHtcclxuICAgIHRoaXMuc2F2ZWRUZW1wbGF0ZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcbiAgZ2V0VGVtcGxhdGVIb3Jpem9udGFsQWxpZ25tZW50KHRlbXBsYXRlKSB7XHJcbiAgICBpZiAodGVtcGxhdGUuaW1hZ2UuaG9yaXpvbnRhbEFsaWdubWVudCA9PSBTdGlIb3Jpem9udGFsQWxpZ25tZW50LkNlbnRlcikge1xyXG4gICAgICByZXR1cm4gXCJjZW50ZXJcIjtcclxuICAgIH0gZWxzZSBpZiAodGVtcGxhdGUuaW1hZ2UuaG9yaXpvbnRhbEFsaWdubWVudCA9PSBTdGlIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQpIHtcclxuICAgICAgcmV0dXJuIFwic3RhcnRcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcImVuZFwiO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRUZW1wbGF0ZUJhY2tncm91bmRTaXplKHRlbXBsYXRlLCBjb250YWluZXIpIHtcclxuICAgIGlmICghdGVtcGxhdGU/LmltYWdlPy5sb2FkZWRJbWFnZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGVtcGxhdGU/LmltYWdlPy5hc3BlY3RSYXRpbykge1xyXG4gICAgICByZXR1cm4gXCJjb250YWluXCI7XHJcbiAgICB9XHJcbiAgICBpZiAodGVtcGxhdGU/LmltYWdlPy5zdHJldGNoKSB7XHJcbiAgICAgIHJldHVybiBgJHtjb250YWluZXIub2Zmc2V0V2lkdGh9cHggJHtjb250YWluZXIub2Zmc2V0SGVpZ2h0fXB4YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgJHt0ZW1wbGF0ZT8uaW1hZ2U/Lm5hdHVyYWxXaWR0aH1weCAke3RlbXBsYXRlPy5pbWFnZT8ubmF0dXJhbEhlaWdodH1weGA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFRlbXBsYXRlQmFja2dyb3VuZFBvc2l0aW9uKHRlbXBsYXRlKSB7XHJcbiAgICBpZiAoIXRlbXBsYXRlPy5pbWFnZT8uYXNwZWN0UmF0aW8gJiYgIXRlbXBsYXRlPy5pbWFnZT8uc3RyZXRjaCkge1xyXG4gICAgICBpZiAodGVtcGxhdGU/LmltYWdlPy52ZXJ0aWNhbEFsaWdubWVudCA9PSBTdGlWZXJ0aWNhbEFsaWdubWVudC5DZW50ZXIpIHtcclxuICAgICAgICByZXR1cm4gXCJjZW50ZXIgY2VudGVyXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAodGVtcGxhdGU/LmltYWdlPy52ZXJ0aWNhbEFsaWdubWVudCA9PSBTdGlWZXJ0aWNhbEFsaWdubWVudC5Ub3ApIHtcclxuICAgICAgICByZXR1cm4gXCJ0b3AgY2VudGVyXCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIFwiYm90dG9tIGNlbnRlclwiO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJjZW50ZXJcIjtcclxuICAgIH1cclxuICB9XHJcbiAgY2xvbmVQcm9wZXJ0eShwcm9wZXJ0eTogU3RpVGV4dEl0ZW0gfCBTdGlJbWFnZUVkaXRvclJlc3VsdCwgcHJvcGVydHlDbGFzcyk6IGFueSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gbmV3IHByb3BlcnR5Q2xhc3MoKTtcclxuICAgIGxldCBqT2JqZWN0ID0gbmV3IFN0aUpzb24oKTtcclxuICAgIGpPYmplY3QuZGVzZXJpYWxpemUocHJvcGVydHkuc2F2ZVRvSnNvbk9iamVjdCh7fSkuc2VyaWFsaXplKCkpO1xyXG4gICAgcmVzdWx0LmxvYWRGcm9tSnNvbk9iamVjdChqT2JqZWN0KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgZWRpdG9yQ29tcG9uZW50WCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VkaXRvckNvbXBvbmVudFg7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZWRpdG9yQ29tcG9uZW50WCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB2YWx1ZSA8PSAwID8gKHRoaXMuX2VkaXRvckNvbXBvbmVudFggPSAwKSA6ICh0aGlzLl9lZGl0b3JDb21wb25lbnRYID0gdmFsdWUpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGVkaXRvckNvbXBvbmVudFkoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9lZGl0b3JDb21wb25lbnRZO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGVkaXRvckNvbXBvbmVudFkodmFsdWU6IG51bWJlcikge1xyXG4gICAgdmFsdWUgPD0gMCA/ICh0aGlzLl9lZGl0b3JDb21wb25lbnRZID0gMCkgOiAodGhpcy5fZWRpdG9yQ29tcG9uZW50WSA9IHZhbHVlKTtcclxuICB9XHJcbiAgcHVibGljIGdldCB5KCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5pc1NpZ25hdHVyZSkge1xyXG4gICAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5tb2RlbC5zZWxlY3RlZENvbXBvbmVudD8uZWxlbWVudC5ndWlkKTtcclxuICAgICAgbGV0IGdlb20gPSB0aGlzLm1vZGVsLmdldFBvc2l0aW9uUmVsYXRpdmVUb0Zvcm0oY29udGFpbmVyKTtcclxuICAgICAgcmV0dXJuIGdlb20ueTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHgoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLmlzU2lnbmF0dXJlKSB7XHJcbiAgICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm1vZGVsLnNlbGVjdGVkQ29tcG9uZW50Py5lbGVtZW50Lmd1aWQpO1xyXG4gICAgICBsZXQgZ2VvbSA9IHRoaXMubW9kZWwuZ2V0UG9zaXRpb25SZWxhdGl2ZVRvRm9ybShjb250YWluZXIpO1xyXG4gICAgICByZXR1cm4gZ2VvbS54ICsgZ2VvbS53aWR0aCArIDU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcbiAgY2hhbmdlRHJhd2luZ01vZGUoKSB7XHJcbiAgICB0aGlzLnRleHRNb2RlID0gZmFsc2U7XHJcbiAgICB0aGlzLmRyYXdpbmdNb2RlID0gIXRoaXMuZHJhd2luZ01vZGU7XHJcbiAgfVxyXG4gIGNoYW5nZVRleHRNb2RlKCkge1xyXG4gICAgdGhpcy5kcmF3aW5nTW9kZSA9IGZhbHNlO1xyXG4gICAgdGhpcy50ZXh0TW9kZSA9ICF0aGlzLnRleHRNb2RlO1xyXG4gIH1cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuY2xlYXJCdXR0b25DbGljay5uZXh0KHRydWUpO1xyXG4gIH1cclxuICBvbkZpbGVTZWxlY3RlZCgpIHtcclxuICAgIGxldCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcclxuICAgIGlucHV0LmFjY2VwdCA9IFwiLnBuZywgLmpwZywgLmpwZWdcIjtcclxuICAgIGxldCB0aGlzXyA9IHRoaXM7XHJcbiAgICBpbnB1dC5vbmNoYW5nZSA9IChfKSA9PiB7XHJcbiAgICAgIHRoaXNfLmNsZWFyKCk7XHJcbiAgICAgIGxldCBmaWxlID0gQXJyYXkuZnJvbShpbnB1dC5maWxlcylbMF07XHJcbiAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdGhpc18ubG9hZGVkSW1hZ2UubmV4dChlLnRhcmdldC5yZXN1bHQpO1xyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICAgIGlucHV0LmNsaWNrKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNTaWduYXR1cmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbC5zZWxlY3RlZENvbXBvbmVudD8uZWxlbWVudCBpbnN0YW5jZW9mIFN0aVNpZ25hdHVyZUVsZW1lbnQgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtb2RlbDogU3RpTW9kZWxTZXJ2aWNlKSB7fVxyXG59XHJcbiJdfQ==