UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

683 lines (682 loc) 51.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { TextBox } from '../../../../../component/dataview/input/TextBox.component'; import { I18N } from '../../../../../decorator/I18N.decorator'; import { Option } from '../../../../../decorator/Option.decorator'; import { NeedFocusService } from '../../../../../service/NeedFocusService.service'; import { FormatterFactory } from '../../../../../service/FormatterFactory.service'; var /** @type {?} */ TYPE_NAME = "material-text-box"; var /** @type {?} */ NORMAL = 'normal'; var /** @type {?} */ SUCCESS = 'success'; var /** @type {?} */ WARNING = 'warning'; var /** @type {?} */ ERROR = 'error'; var /** @type {?} */ DEFAULT_BUTTON_ICON = 'close'; var /** @type {?} */ DEFAULT_BUTTON_POSITION = 'suffix'; var MaterialTextBox = /** @class */ (function (_super) { tslib_1.__extends(MaterialTextBox, _super); function MaterialTextBox(elementRef, formatterFactory, needFocusService) { var _this = _super.call(this, elementRef, formatterFactory, needFocusService) || this; _this.active = false; _this.clearFunc = function () { _this.formattedData = ''; }; return _this; } /** * @return {?} */ MaterialTextBox.prototype.ngOnInit = /** * @return {?} */ function () { _super.prototype.ngOnInit.call(this); this.refreshActiveTextBox(); }; /** * @return {?} */ MaterialTextBox.prototype._displayHelp = /** * @return {?} */ function () { var /** @type {?} */ hasHelp = this.hasHelp(); return hasHelp && this.isShowHelp(); }; /** * @return {?} */ MaterialTextBox.prototype.refreshActiveTextBox = /** * @return {?} */ function () { var /** @type {?} */ val = this.getFormattedData(); if (val !== null && typeof val !== 'undefined') { if (typeof val === 'string' && val === '') { this.active = false; } else { this.active = true; } } else { this.active = false; } }; /** * @param {?} inputValue * @param {?} results * @return {?} */ MaterialTextBox.prototype.onValidationEnd = /** * @param {?} inputValue * @param {?} results * @return {?} */ function (inputValue, results) { }; /** * @param {?} data * @param {?} inputVal * @return {?} */ MaterialTextBox.prototype.onDataChange = /** * @param {?} data * @param {?} inputVal * @return {?} */ function (data, inputVal) { _super.prototype.onDataChange.call(this, data, inputVal); this.refreshActiveTextBox(); }; /** * @param {?} $event * @return {?} */ MaterialTextBox.prototype.doFocus = /** * @param {?} $event * @return {?} */ function ($event) { _super.prototype.doFocus.call(this, $event); this.active = true; this.classFocused = true; }; /** * @param {?} $event * @return {?} */ MaterialTextBox.prototype.doLostFocus = /** * @param {?} $event * @return {?} */ function ($event) { _super.prototype.doLostFocus.call(this, $event); this.refreshActiveTextBox(); this.classFocused = false; }; /** * @return {?} */ MaterialTextBox.prototype.getClassMatFocused = /** * @return {?} */ function () { return this.isReadOnly() ? { 'mat-focused': this._isClassFocused() } : {}; }; /** * @return {?} */ MaterialTextBox.prototype._isActive = /** * @return {?} */ function () { return this.active; }; /** * @return {?} */ MaterialTextBox.prototype._isClassFocused = /** * @return {?} */ function () { return this.classFocused; }; /** * @param {?} $event * @return {?} */ MaterialTextBox.prototype.onValueChanged = /** * @param {?} $event * @return {?} */ function ($event) { _super.prototype.onValueChanged.call(this, $event); this.refreshActiveTextBox(); }; /** * @param {?} data * @return {?} */ MaterialTextBox.prototype.selfSaveData = /** * @param {?} data * @return {?} */ function (data) { _super.prototype.selfSaveData.call(this, data); this.refreshActiveTextBox(); }; /** * @return {?} */ MaterialTextBox.prototype.getDescription = /** * @return {?} */ function () { return this.description; }; /** * @param {?} description * @return {?} */ MaterialTextBox.prototype.setDescription = /** * @param {?} description * @return {?} */ function (description) { this.description = description; }; /** * @return {?} */ MaterialTextBox.prototype.getLabel = /** * @return {?} */ function () { return this.label; }; /** * @param {?} label * @return {?} */ MaterialTextBox.prototype.setLabel = /** * @param {?} label * @return {?} */ function (label) { this.label = label; }; /** * @return {?} */ MaterialTextBox.prototype.resetValidationResult = /** * @return {?} */ function () { _super.prototype.resetValidationResult.call(this); this.active = false; }; /** * @param {?} $event * @return {?} */ MaterialTextBox.prototype.onBtnClick = /** * @param {?} $event * @return {?} */ function ($event) { if (!this.isReadOnly() && !this.isDisabled()) { this.setButtonHandler(this.showClearButton ? this.clearFunc : this.buttonHandler); if (this.buttonHandler !== null && this.buttonHandler !== undefined) { this.buttonHandler(this, $event); } } }; /** * @return {?} */ MaterialTextBox.prototype.isShowClearButton = /** * @return {?} */ function () { return this.showClearButton; }; /** * @param {?} showClearButton * @return {?} */ MaterialTextBox.prototype.setShowClearButton = /** * @param {?} showClearButton * @return {?} */ function (showClearButton) { this.showClearButton = showClearButton; }; /** * @return {?} */ MaterialTextBox.prototype.getButtonIcon = /** * @return {?} */ function () { return this.showClearButton ? DEFAULT_BUTTON_ICON : this.buttonIcon; }; /** * @param {?} buttonIcon * @return {?} */ MaterialTextBox.prototype.setButtonIcon = /** * @param {?} buttonIcon * @return {?} */ function (buttonIcon) { this.buttonIcon = buttonIcon; }; /** * @return {?} */ MaterialTextBox.prototype.getButtonPosition = /** * @return {?} */ function () { return this.showClearButton ? DEFAULT_BUTTON_POSITION : (!this.buttonPosition ? DEFAULT_BUTTON_POSITION : this.buttonPosition); }; /** * @param {?} buttonPosition * @return {?} */ MaterialTextBox.prototype.setButtonPosition = /** * @param {?} buttonPosition * @return {?} */ function (buttonPosition) { this.buttonPosition = buttonPosition; }; /** * @return {?} */ MaterialTextBox.prototype.getButtonHandler = /** * @return {?} */ function () { return this.showClearButton ? this.clearFunc : (!this.buttonHandler ? this.clearFunc : this.buttonHandler); }; /** * @param {?} buttonHandler * @return {?} */ MaterialTextBox.prototype.setButtonHandler = /** * @param {?} buttonHandler * @return {?} */ function (buttonHandler) { this.buttonHandler = buttonHandler; }; /** * @param {?} $event * @return {?} */ MaterialTextBox.prototype.onKeyUp = /** * @param {?} $event * @return {?} */ function ($event) { if (this.isReadOnly() || this.isDisabled()) { return; } _super.prototype.onKeyUp.call(this, $event); }; /** * @param {?} $event * @return {?} */ MaterialTextBox.prototype.onKeyDown = /** * @param {?} $event * @return {?} */ function ($event) { if (this.isReadOnly() || this.isDisabled()) { return; } _super.prototype.onKeyDown.call(this, $event); }; MaterialTextBox.TYPE_NAME = TYPE_NAME; MaterialTextBox.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: "<div class=\"material-input material-text-box\" [style.width]=\"getWidth()\">\n\t<div class=\"textbox-wrapper\" [class.active]=\"_isActive()\">\n\t\t<mat-form-field [ngClass]=\"getClassMatFocused()\">\n\t\t\t<input matInput placeholder=\"{{getLabel() | phx_text}}\" [attr.maxlength]=\"getMaxLength()\" type=\"{{getType()}}\" class=\"form-control\" [disabled]=\"isDisabled()\" [readonly]=\"isReadOnly()\" [class.dirty]=\"isDataDirty()\" (change)=\"onValueChanged($event)\" (focusin)=\"onFocusing($event)\" (blur)=\"onLostFocusing($event)\" (keyup)=\"onKeyUp($event)\"\n\t\t\t (keydown)=\"onKeyDown($event)\" [value]=\"formattedData | phx_text\" [class.normal]=\"isNormal() && !isDisabled()\" [class.success]=\"isSuccess() && !isDisabled()\" [class.warning]=\"isWarning() && !isDisabled()\" [class.error]=\"isError() && !isDisabled()\">\n\t\t\t\t<button mat-button *ngIf=\"(getButtonIcon() || isShowClearButton()) && (formattedData && getButtonPosition() === 'suffix' && !(isDisabled() || isReadOnly()))\" matSuffix mat-icon-button (click)=\"onBtnClick($event)\">\n \t\t\t<mat-icon>{{getButtonIcon()}}</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<button mat-button *ngIf=\"(getButtonIcon() || isShowClearButton()) && (formattedData && getButtonPosition() === 'prefix' && !(isDisabled() || isReadOnly()))\" matPrefix mat-icon-button (click)=\"onBtnClick($event)\">\n \t\t\t<mat-icon>{{getButtonIcon()}}</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<button mat-button *ngIf=\"(getButtonIcon() || isShowClearButton()) && (formattedData && getButtonPosition() === 'suffix' && (isDisabled() || isReadOnly()))\" disabled matSuffix mat-icon-button (click)=\"onBtnClick($event)\">\n \t\t\t<mat-icon>{{getButtonIcon()}}</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<button mat-button *ngIf=\"(getButtonIcon() || isShowClearButton()) && (formattedData && getButtonPosition() === 'prefix' && (isDisabled() || isReadOnly()))\" disabled matPrefix mat-icon-button (click)=\"onBtnClick($event)\">\n \t\t\t<mat-icon>{{getButtonIcon()}}</mat-icon>\n\t\t\t\t</button>\n\t\t</mat-form-field>\n\t</div>\n\t<div class=\"validation\" [style.display]=\"getValidationResultMessage() ? undefined : 'none'\" [class.normal]=\"isNormal() && !isDisabled()\" [class.success]=\"isSuccess() && !isDisabled()\" [class.warning]=\"isWarning() && !isDisabled()\" [class.error]=\"isError() && !isDisabled()\">\n\t\t<ng-template [ngIf]=\"getValidationResultMessage()\" [ngIfElse]=\"validation_else\">\n\t\t\t{{getValidationResultMessage() | phx_text}}\n\t\t</ng-template>\n\t\t<ng-template #validation_else>\n\t\t\t<!-- We've to put whitespace if there is no validation msg to prevent empty dom -->\n\t\t\t<!-- since if validate msg's <div> dom is empty, the component positioning -->\n\t\t\t<!-- will be misplaced. -->\n\t\t\t{{ '&nbsp;' }}\n\t\t</ng-template>\n\t</div>\n\t<div class=\"description\" [style.display]=\"getValidationResultMessage() ? 'none' : undefined\" [class.normal]=\"isNormal() && !isDisabled()\" [class.success]=\"isSuccess() && !isDisabled()\" [class.warning]=\"isWarning() && !isDisabled()\" [class.error]=\"isError() && !isDisabled()\">\n\t\t<ng-template [ngIf]=\"getDescription()\" [ngIfElse]=\"description_else\">\n\t\t\t{{ getDescription() | phx_text }}\n\t\t</ng-template>\n\t\t<ng-template #description_else>\n\t\t\t<!-- We've to put whitespace if there is no description to prevent empty dom -->\n\t\t\t<!-- since if description's <div> dom is empty, the component positioning -->\n\t\t\t<!-- will be misplaced. -->\n\t\t\t{{ '&nbsp;' }}\n\t\t</ng-template>\n\t</div>\n\t<div class=\"help\">\n\t\t{{getHelp() | phx_text}}\n\t</div>\n</div>\n" },] }, ]; /** @nocollapse */ MaterialTextBox.ctorParameters = function () { return [ { type: ElementRef, }, { type: FormatterFactory, }, { type: NeedFocusService, }, ]; }; MaterialTextBox.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "field": [{ type: Input },], "name": [{ type: Input },], "typeOfData": [{ type: Input },], "readOnly": [{ type: Input },], "help": [{ type: Input },], "formatter": [{ type: Input, args: ['formatter',] },], "formatterName": [{ type: Input, args: ['formatterName',] },], "formatterOptions": [{ type: Input, args: ['formatterOptions',] },], "formatterUsePropertyValue": [{ type: Input, args: ['formatterUsePropertyValue',] },], "type": [{ type: Input },], "width": [{ type: Input },], "label": [{ type: Input },], "description": [{ type: Input },], "maxLength": [{ type: Input, args: ['phxMaxLength',] },], "buttonIcon": [{ type: Input },], "buttonPosition": [{ type: Input },], "buttonHandler": [{ type: Input },], "showClearButton": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },], "endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeKeyUpEvent": [{ type: Output, args: ['phxBeforeKeyUp',] },], "keyUpEvent": [{ type: Output, args: ['phxKeyUp',] },], "beforeKeyDownEvent": [{ type: Output, args: ['phxBeforeKeyDown',] },], "keyDownEvent": [{ type: Output, args: ['phxKeyDown',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialTextBox.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialTextBox.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialTextBox.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialTextBox.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialTextBox.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialTextBox.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialTextBox.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialTextBox.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], MaterialTextBox.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialTextBox.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "field", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "name", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "typeOfData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialTextBox.prototype, "readOnly", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], MaterialTextBox.prototype, "help", void 0); tslib_1.__decorate([ Option('formatter.instance'), tslib_1.__metadata("design:type", Object) ], MaterialTextBox.prototype, "formatter", void 0); tslib_1.__decorate([ Option('formatter.name'), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "formatterName", void 0); tslib_1.__decorate([ Option('formatter.options'), tslib_1.__metadata("design:type", Object) ], MaterialTextBox.prototype, "formatterOptions", void 0); tslib_1.__decorate([ Option('formatter.usePropertyValue'), tslib_1.__metadata("design:type", Boolean) ], MaterialTextBox.prototype, "formatterUsePropertyValue", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "type", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "width", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "label", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "description", void 0); tslib_1.__decorate([ Option('maxLength'), tslib_1.__metadata("design:type", Number) ], MaterialTextBox.prototype, "maxLength", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "buttonIcon", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialTextBox.prototype, "buttonPosition", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialTextBox.prototype, "buttonHandler", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialTextBox.prototype, "showClearButton", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "endValidateEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option('beforeKeyUp'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "beforeKeyUpEvent", void 0); tslib_1.__decorate([ Option('keyUp'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "keyUpEvent", void 0); tslib_1.__decorate([ Option('beforeKeyDown'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "beforeKeyDownEvent", void 0); tslib_1.__decorate([ Option('keyDown'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialTextBox.prototype, "keyDownEvent", void 0); return MaterialTextBox; }(TextBox)); export { MaterialTextBox }; function MaterialTextBox_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ MaterialTextBox.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ MaterialTextBox.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ MaterialTextBox.propDecorators; /** @type {?} */ MaterialTextBox.TYPE_NAME; /** @type {?} */ MaterialTextBox.prototype.dataParent; /** @type {?} */ MaterialTextBox.prototype.ignoreParentData; /** @type {?} */ MaterialTextBox.prototype.data; /** @type {?} */ MaterialTextBox.prototype.ignoreParentDisabled; /** @type {?} */ MaterialTextBox.prototype.delegateHistory; /** @type {?} */ MaterialTextBox.prototype.onDisabled; /** @type {?} */ MaterialTextBox.prototype.onEnabled; /** @type {?} */ MaterialTextBox.prototype.loadingEnabled; /** @type {?} */ MaterialTextBox.prototype.i18nKey; /** @type {?} */ MaterialTextBox.prototype.bypass; /** @type {?} */ MaterialTextBox.prototype.options; /** @type {?} */ MaterialTextBox.prototype.disabled; /** @type {?} */ MaterialTextBox.prototype.field; /** @type {?} */ MaterialTextBox.prototype.name; /** @type {?} */ MaterialTextBox.prototype.typeOfData; /** @type {?} */ MaterialTextBox.prototype.readOnly; /** @type {?} */ MaterialTextBox.prototype.help; /** @type {?} */ MaterialTextBox.prototype.formatter; /** @type {?} */ MaterialTextBox.prototype.formatterName; /** @type {?} */ MaterialTextBox.prototype.formatterOptions; /** @type {?} */ MaterialTextBox.prototype.formatterUsePropertyValue; /** @type {?} */ MaterialTextBox.prototype.type; /** @type {?} */ MaterialTextBox.prototype.width; /** @type {?} */ MaterialTextBox.prototype.label; /** @type {?} */ MaterialTextBox.prototype.description; /** @type {?} */ MaterialTextBox.prototype.maxLength; /** @type {?} */ MaterialTextBox.prototype.buttonIcon; /** @type {?} */ MaterialTextBox.prototype.buttonPosition; /** @type {?} */ MaterialTextBox.prototype.buttonHandler; /** @type {?} */ MaterialTextBox.prototype.showClearButton; /** @type {?} */ MaterialTextBox.prototype.loadEvent; /** @type {?} */ MaterialTextBox.prototype.startValidateEvent; /** @type {?} */ MaterialTextBox.prototype.endValidateEvent; /** @type {?} */ MaterialTextBox.prototype.beforeFocusEvent; /** @type {?} */ MaterialTextBox.prototype.focusEvent; /** @type {?} */ MaterialTextBox.prototype.beforeLostFocusEvent; /** @type {?} */ MaterialTextBox.prototype.lostFocusEvent; /** @type {?} */ MaterialTextBox.prototype.beforeChangeEvent; /** @type {?} */ MaterialTextBox.prototype.changeEvent; /** @type {?} */ MaterialTextBox.prototype.beforeKeyUpEvent; /** @type {?} */ MaterialTextBox.prototype.keyUpEvent; /** @type {?} */ MaterialTextBox.prototype.beforeKeyDownEvent; /** @type {?} */ MaterialTextBox.prototype.keyDownEvent; /** @type {?} */ MaterialTextBox.prototype.active; /** @type {?} */ MaterialTextBox.prototype.classFocused; /** @type {?} */ MaterialTextBox.prototype.clearFunc; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0ZXJpYWxUZXh0Qm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL3RoZW1lL21hdGVyaWFsL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9NYXRlcmlhbFRleHRCb3guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBR3BGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFLbkYscUJBQU0sU0FBUyxHQUFXLG1CQUFtQixDQUFDO0FBRTlDLHFCQUFNLE1BQU0sR0FBVyxRQUFRLENBQUM7QUFDaEMscUJBQU0sT0FBTyxHQUFXLFNBQVMsQ0FBQztBQUNsQyxxQkFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBQ2xDLHFCQUFNLEtBQUssR0FBVyxPQUFPLENBQUM7QUFFOUIscUJBQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDO0FBQ3BDLHFCQUFNLHVCQUF1QixHQUFHLFFBQVEsQ0FBQzs7SUFvREosMkNBQU87SUEwSjFDLHlCQUFZLFVBQXNCLEVBQUUsZ0JBQWtDLEVBQUUsZ0JBQWtDO1FBQTFHLFlBQ0Usa0JBQU0sVUFBVSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLFNBS3REO1FBSEMsS0FBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsS0FBSSxDQUFDLFNBQVMsR0FBRyxjQUFRLEtBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7S0FFckQ7Ozs7SUFFTSxrQ0FBUTs7OztRQUNiLGlCQUFNLFFBQVEsV0FBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDOzs7OztJQUd2QixzQ0FBWTs7OztRQUNqQixxQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTdCLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDOzs7OztJQUc5Qiw4Q0FBb0I7Ozs7UUFDMUIscUJBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRWxDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMvQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7YUFDcEI7U0FDRjtRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDckI7Ozs7Ozs7SUFHTyx5Q0FBZTs7Ozs7SUFBekIsVUFBMEIsVUFBZSxFQUFFLE9BQTJCO0tBQ3JFOzs7Ozs7SUFFUyxzQ0FBWTs7Ozs7SUFBdEIsVUFBdUIsSUFBUyxFQUFFLFFBQWE7UUFDN0MsaUJBQU0sWUFBWSxZQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztLQUM3Qjs7Ozs7SUFFUyxpQ0FBTzs7OztJQUFqQixVQUFrQixNQUFhO1FBQzdCLGlCQUFNLE9BQU8sWUFBQyxNQUFNLENBQUMsQ0FBQztRQUV0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztLQUMxQjs7Ozs7SUFFUyxxQ0FBVzs7OztJQUFyQixVQUFzQixNQUFhO1FBQ2pDLGlCQUFNLFdBQVcsWUFBQyxNQUFNLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztLQUMzQjs7OztJQUVNLDRDQUFrQjs7OztRQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOzs7OztJQUdyRSxtQ0FBUzs7OztRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7OztJQUdkLHlDQUFlOzs7O1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDOzs7Ozs7SUFHcEIsd0NBQWM7Ozs7Y0FBQyxNQUFhO1FBQ2pDLGlCQUFNLGNBQWMsWUFBQyxNQUFNLENBQUMsQ0FBQztRQUU3QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzs7Ozs7O0lBR3ZCLHNDQUFZOzs7O2NBQUMsSUFBUztRQUMzQixpQkFBTSxZQUFZLFlBQUMsSUFBSSxDQUFDLENBQUM7UUFFekIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Ozs7O0lBR3ZCLHdDQUFjOzs7O1FBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDOzs7Ozs7SUFHbkIsd0NBQWM7Ozs7Y0FBQyxXQUFtQjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQzs7Ozs7SUFHMUIsa0NBQVE7Ozs7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzs7Ozs7O0lBR2Isa0NBQVE7Ozs7Y0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDOzs7OztJQUdkLCtDQUFxQjs7OztRQUMxQixpQkFBTSxxQkFBcUIsV0FBRSxDQUFDO1FBRTlCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDOzs7Ozs7SUFHZixvQ0FBVTs7OztjQUFDLE1BQWE7UUFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRTdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFbEYsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNsQztTQUNGOzs7OztJQUdJLDJDQUFpQjs7OztRQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQzs7Ozs7O0lBR3ZCLDRDQUFrQjs7OztjQUFDLGVBQXdCO1FBQ2hELElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDOzs7OztJQUdsQyx1Q0FBYTs7OztRQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Ozs7OztJQUcvRCx1Q0FBYTs7OztjQUFDLFVBQWtCO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDOzs7OztJQUd4QiwyQ0FBaUI7Ozs7UUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzs7Ozs7O0lBRzFILDJDQUFpQjs7OztjQUFDLGNBQXNCO1FBQzdDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDOzs7OztJQUdoQywwQ0FBZ0I7Ozs7UUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Ozs7OztJQUd0RywwQ0FBZ0I7Ozs7Y0FBQyxhQUF1QjtRQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQzs7Ozs7O0lBRzlCLGlDQUFPOzs7O2NBQUMsTUFBVztRQUN4QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUM7U0FDUjtRQUVELGlCQUFNLE9BQU8sWUFBQyxNQUFNLENBQUMsQ0FBQzs7Ozs7O0lBR2pCLG1DQUFTOzs7O2NBQUMsTUFBVztRQUMxQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUM7U0FDUjtRQUVELGlCQUFNLFNBQVMsWUFBQyxNQUFNLENBQUMsQ0FBQzs7Z0NBdFRpQixTQUFTOztnQkFwRHJELFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ25CLFFBQVEsRUFBRSxTQUFTO29CQUNuQixRQUFRLEVBQUUsK2lIQTZDWDtpQkFDQTs7OztnQkF6RTJCLFVBQVU7Z0JBUzdCLGdCQUFnQjtnQkFGaEIsZ0JBQWdCOzs7K0JBeUV0QixLQUFLO3FDQUdMLEtBQUs7eUJBR0wsS0FBSzt5Q0FHTCxLQUFLO29DQUdMLEtBQUs7K0JBR0wsS0FBSzs4QkFHTCxLQUFLO21DQUdMLEtBQUs7NEJBR0wsS0FBSzsyQkFHTCxLQUFLLFNBQUMsWUFBWTs0QkFHbEIsS0FBSzs2QkFFTCxLQUFLOzBCQUlMLEtBQUs7eUJBSUwsS0FBSzsrQkFHTCxLQUFLOzZCQUdMLEtBQUs7eUJBR0wsS0FBSzs4QkFLTCxLQUFLLFNBQUMsV0FBVztrQ0FHakIsS0FBSyxTQUFDLGVBQWU7cUNBR3JCLEtBQUssU0FBQyxrQkFBa0I7OENBR3hCLEtBQUssU0FBQywyQkFBMkI7eUJBSWpDLEtBQUs7MEJBR0wsS0FBSzswQkFNTCxLQUFLO2dDQUlMLEtBQUs7OEJBR0wsS0FBSyxTQUFDLGNBQWM7K0JBRXBCLEtBQUs7bUNBR0wsS0FBSztrQ0FHTCxLQUFLO29DQUdMLEtBQUs7OEJBTUwsTUFBTSxTQUFDLFNBQVM7dUNBS2hCLE1BQU0sU0FBQyxrQkFBa0I7cUNBR3pCLE1BQU0sU0FBQyxnQkFBZ0I7cUNBR3ZCLE1BQU0sU0FBQyxnQkFBZ0I7K0JBR3ZCLE1BQU0sU0FBQyxVQUFVO3lDQUdqQixNQUFNLFNBQUMsb0JBQW9CO21DQUczQixNQUFNLFNBQUMsY0FBYztzQ0FHckIsTUFBTSxTQUFDLGlCQUFpQjtnQ0FHeEIsTUFBTSxTQUFDLFdBQVc7cUNBTWxCLE1BQU0sU0FBQyxnQkFBZ0I7K0JBR3ZCLE1BQU0sU0FBQyxVQUFVO3VDQUdqQixNQUFNLFNBQUMsa0JBQWtCO2lDQUd6QixNQUFNLFNBQUMsWUFBWTs7O1FBNUluQixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7MENBQ2EsUUFBUTs7O1FBRTdCLE1BQU0sRUFBRTswQ0FDWSxRQUFROzs7UUFFNUIsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxDQUFDLFlBQVksQ0FBQzs7OztRQUtwQixNQUFNLEVBQUU7Ozs7UUFJUixNQUFNLEVBQUU7Ozs7UUFJUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixJQUFJLEVBQUU7UUFDTixNQUFNLEVBQUU7Ozs7UUFJUixNQUFNLENBQUMsb0JBQW9CLENBQUM7Ozs7UUFHNUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDOzs7O1FBR3hCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQzs7OztRQUczQixNQUFNLENBQUMsNEJBQTRCLENBQUM7Ozs7UUFJcEMsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzs7O1FBR1IsSUFBSSxFQUFFO1FBQ04sTUFBTSxFQUFFOzs7O1FBR1IsSUFBSSxFQUFFO1FBQ04sTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxDQUFDLFdBQVcsQ0FBQzs7OztRQUluQixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7MENBQ2dCLFFBQVE7OztRQUVoQyxNQUFNLEVBQUU7Ozs7UUFNUixNQUFNLENBQUMsTUFBTSxDQUFDOzBDQUNNLFlBQVk7OztRQUloQyxNQUFNLENBQUMsZUFBZSxDQUFDOzBDQUNNLFlBQVk7OztRQUV6QyxNQUFNLENBQUMsYUFBYSxDQUFDOzBDQUNNLFlBQVk7OztRQUV2QyxNQUFNLENBQUMsYUFBYSxDQUFDOzBDQUNNLFlBQVk7OztRQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDOzBDQUNNLFlBQVk7OztRQUVqQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7MENBQ00sWUFBWTs7O1FBRTNDLE1BQU0sQ0FBQyxXQUFXLENBQUM7MENBQ00sWUFBWTs7O1FBRXJDLE1BQU0sQ0FBQyxjQUFjLENBQUM7MENBQ00sWUFBWTs7O1FBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUM7MENBQ00sWUFBWTs7O1FBR2xDLE1BQU0sQ0FBQyxhQUFhLENBQUM7MENBRU0sWUFBWTs7O1FBQ3ZDLE1BQU0sQ0FBQyxPQUFPLENBQUM7MENBRU0sWUFBWTs7O1FBQ2pDLE1BQU0sQ0FBQyxlQUFlLENBQUM7MENBRU0sWUFBWTs7O1FBQ3pDLE1BQU0sQ0FBQyxTQUFTLENBQUM7MENBRU0sWUFBWTs7MEJBOU50QztFQTBFcUMsT0FBTztTQUEvQixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvSUhhc0RhdGEnO1xuaW1wb3J0IHsgVGV4dEJveCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9UZXh0Qm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L21vZGVsL1ZhbGlkYXRpb25SZXN1bHQnO1xuaW1wb3J0IHsgSUhhc0hlbHAgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvSUhhc0hlbHAnO1xuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZvcm1hdHRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlL2Zvcm1hdHRlci9JRm9ybWF0dGVyJztcbmltcG9ydCB7IEZvcm1hdHRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlL0Zvcm1hdHRlckZhY3Rvcnkuc2VydmljZSc7XG5cblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwibWF0ZXJpYWwtdGV4dC1ib3hcIjtcblxuY29uc3QgTk9STUFMOiBzdHJpbmcgPSAnbm9ybWFsJztcbmNvbnN0IFNVQ0NFU1M6IHN0cmluZyA9ICdzdWNjZXNzJztcbmNvbnN0IFdBUk5JTkc6IHN0cmluZyA9ICd3YXJuaW5nJztcbmNvbnN0IEVSUk9SOiBzdHJpbmcgPSAnZXJyb3InO1xuXG5jb25zdCBERUZBVUxUX0JVVFRPTl9JQ09OID0gJ2Nsb3NlJztcbmNvbnN0IERFRkFVTFRfQlVUVE9OX1BPU0lUSU9OID0gJ3N1ZmZpeCc7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJtYXRlcmlhbC1pbnB1dCBtYXRlcmlhbC10ZXh0LWJveFwiIFtzdHlsZS53aWR0aF09XCJnZXRXaWR0aCgpXCI+XG5cdDxkaXYgY2xhc3M9XCJ0ZXh0Ym94LXdyYXBwZXJcIiBbY2xhc3MuYWN0aXZlXT1cIl9pc0FjdGl2ZSgpXCI+XG5cdFx0PG1hdC1mb3JtLWZpZWxkIFtuZ0NsYXNzXT1cImdldENsYXNzTWF0Rm9jdXNlZCgpXCI+XG5cdFx0XHQ8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJ7e2dldExhYmVsKCkgfCBwaHhfdGV4dH19XCIgW2F0dHIubWF4bGVuZ3RoXT1cImdldE1heExlbmd0aCgpXCIgdHlwZT1cInt7Z2V0VHlwZSgpfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIiBbcmVhZG9ubHldPVwiaXNSZWFkT25seSgpXCIgW2NsYXNzLmRpcnR5XT1cImlzRGF0YURpcnR5KClcIiAoY2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2VkKCRldmVudClcIiAoZm9jdXNpbik9XCJvbkZvY3VzaW5nKCRldmVudClcIiAoYmx1cik9XCJvbkxvc3RGb2N1c2luZygkZXZlbnQpXCIgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiXG5cdFx0XHQgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCIgW3ZhbHVlXT1cImZvcm1hdHRlZERhdGEgfCBwaHhfdGV4dFwiIFtjbGFzcy5ub3JtYWxdPVwiaXNOb3JtYWwoKSAmJiAhaXNEaXNhYmxlZCgpXCIgW2NsYXNzLnN1Y2Nlc3NdPVwiaXNTdWNjZXNzKCkgJiYgIWlzRGlzYWJsZWQoKVwiIFtjbGFzcy53YXJuaW5nXT1cImlzV2FybmluZygpICYmICFpc0Rpc2FibGVkKClcIiBbY2xhc3MuZXJyb3JdPVwiaXNFcnJvcigpICYmICFpc0Rpc2FibGVkKClcIj5cblx0XHRcdFx0PGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiKGdldEJ1dHRvbkljb24oKSB8fCBpc1Nob3dDbGVhckJ1dHRvbigpKSAmJiAoZm9ybWF0dGVkRGF0YSAmJiBnZXRCdXR0b25Qb3NpdGlvbigpID09PSAnc3VmZml4JyAmJiAhKGlzRGlzYWJsZWQoKSB8fCBpc1JlYWRPbmx5KCkpKVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIm9uQnRuQ2xpY2soJGV2ZW50KVwiPlxuICAgIFx0XHRcdDxtYXQtaWNvbj57e2dldEJ1dHRvbkljb24oKX19PC9tYXQtaWNvbj5cblx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cIihnZXRCdXR0b25JY29uKCkgfHwgaXNTaG93Q2xlYXJCdXR0b24oKSkgJiYgKGZvcm1hdHRlZERhdGEgJiYgZ2V0QnV0dG9uUG9zaXRpb24oKSA9PT0gJ3ByZWZpeCcgJiYgIShpc0Rpc2FibGVkKCkgfHwgaXNSZWFkT25seSgpKSlcIiBtYXRQcmVmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudClcIj5cbiAgICBcdFx0XHQ8bWF0LWljb24+e3tnZXRCdXR0b25JY29uKCl9fTwvbWF0LWljb24+XG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHQ8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCIoZ2V0QnV0dG9uSWNvbigpIHx8IGlzU2hvd0NsZWFyQnV0dG9uKCkpICYmIChmb3JtYXR0ZWREYXRhICYmIGdldEJ1dHRvblBvc2l0aW9uKCkgPT09ICdzdWZmaXgnICYmIChpc0Rpc2FibGVkKCkgfHwgaXNSZWFkT25seSgpKSlcIiBkaXNhYmxlZCBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudClcIj5cbiAgICBcdFx0XHQ8bWF0LWljb24+e3tnZXRCdXR0b25JY29uKCl9fTwvbWF0LWljb24+XG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHQ8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCIoZ2V0QnV0dG9uSWNvbigpIHx8IGlzU2hvd0NsZWFyQnV0dG9uKCkpICYmIChmb3JtYXR0ZWREYXRhICYmIGdldEJ1dHRvblBvc2l0aW9uKCkgPT09ICdwcmVmaXgnICYmIChpc0Rpc2FibGVkKCkgfHwgaXNSZWFkT25seSgpKSlcIiBkaXNhYmxlZCBtYXRQcmVmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudClcIj5cbiAgICBcdFx0XHQ8bWF0LWljb24+e3tnZXRCdXR0b25JY29uKCl9fTwvbWF0LWljb24+XG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvbWF0LWZvcm0tZmllbGQ+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwidmFsaWRhdGlvblwiIFtzdHlsZS5kaXNwbGF5XT1cImdldFZhbGlkYXRpb25SZXN1bHRNZXNzYWdlKCkgPyB1bmRlZmluZWQgOiAnbm9uZSdcIiBbY2xhc3Mubm9ybWFsXT1cImlzTm9ybWFsKCkgJiYgIWlzRGlzYWJsZWQoKVwiIFtjbGFzcy5zdWNjZXNzXT1cImlzU3VjY2VzcygpICYmICFpc0Rpc2FibGVkKClcIiBbY2xhc3Mud2FybmluZ109XCJpc1dhcm5pbmcoKSAmJiAhaXNEaXNhYmxlZCgpXCIgW2NsYXNzLmVycm9yXT1cImlzRXJyb3IoKSAmJiAhaXNEaXNhYmxlZCgpXCI+XG5cdFx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdldFZhbGlkYXRpb25SZXN1bHRNZXNzYWdlKClcIiBbbmdJZkVsc2VdPVwidmFsaWRhdGlvbl9lbHNlXCI+XG5cdFx0XHR7e2dldFZhbGlkYXRpb25SZXN1bHRNZXNzYWdlKCkgfCBwaHhfdGV4dH19XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8bmctdGVtcGxhdGUgI3ZhbGlkYXRpb25fZWxzZT5cblx0XHRcdDwhLS0gV2UndmUgdG8gcHV0IHdoaXRlc3BhY2UgaWYgdGhlcmUgaXMgbm8gdmFsaWRhdGlvbiBtc2cgdG8gcHJldmVudCBlbXB0eSBkb20gLS0+XG5cdFx0XHQ8IS0tIHNpbmNlIGlmIHZhbGlkYXRlIG1zZydzIDxkaXY+IGRvbSBpcyBlbXB0eSwgdGhlIGNvbXBvbmVudCBwb3NpdGlvbmluZyAtLT5cblx0XHRcdDwhLS0gd2lsbCBiZSBtaXNwbGFjZWQuIC0tPlxuXHRcdFx0e3sgJyZuYnNwOycgfX1cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW3N0eWxlLmRpc3BsYXldPVwiZ2V0VmFsaWRhdGlvblJlc3VsdE1lc3NhZ2UoKSA/ICdub25lJyA6IHVuZGVmaW5lZFwiIFtjbGFzcy5ub3JtYWxdPVwiaXNOb3JtYWwoKSAmJiAhaXNEaXNhYmxlZCgpXCIgW2NsYXNzLnN1Y2Nlc3NdPVwiaXNTdWNjZXNzKCkgJiYgIWlzRGlzYWJsZWQoKVwiIFtjbGFzcy53YXJuaW5nXT1cImlzV2FybmluZygpICYmICFpc0Rpc2FibGVkKClcIiBbY2xhc3MuZXJyb3JdPVwiaXNFcnJvcigpICYmICFpc0Rpc2FibGVkKClcIj5cblx0XHQ8bmctdGVtcGxhdGUgW25nSWZdPVwiZ2V0RGVzY3JpcHRpb24oKVwiIFtuZ0lmRWxzZV09XCJkZXNjcmlwdGlvbl9lbHNlXCI+XG5cdFx0XHR7eyBnZXREZXNjcmlwdGlvbigpIHwgcGh4X3RleHQgfX1cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDxuZy10ZW1wbGF0ZSAjZGVzY3JpcHRpb25fZWxzZT5cblx0XHRcdDwhLS0gV2UndmUgdG8gcHV0IHdoaXRlc3BhY2UgaWYgdGhlcmUgaXMgbm8gZGVzY3JpcHRpb24gdG8gcHJldmVudCBlbXB0eSBkb20gLS0+XG5cdFx0XHQ8IS0tIHNpbmNlIGlmIGRlc2NyaXB0aW9uJ3MgPGRpdj4gZG9tIGlzIGVtcHR5LCB0aGUgY29tcG9uZW50IHBvc2l0aW9uaW5nIC0tPlxuXHRcdFx0PCEtLSB3aWxsIGJlIG1pc3BsYWNlZC4gLS0+XG5cdFx0XHR7eyAnJm5ic3A7JyB9fVxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiaGVscFwiPlxuXHRcdHt7Z2V0SGVscCgpIHwgcGh4X3RleHR9fVxuXHQ8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRleHRCb3ggZXh0ZW5kcyBUZXh0Qm94IGltcGxlbWVudHMgT25Jbml0LCBJSGFzSGVscCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQElucHV0LlxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBsb2FkaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgnaTE4bkJ5cGFzcycpXG4gIEBPcHRpb24oJ2kxOG5CeXBhc3MnKVxuICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgb3B0aW9uczogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRpc2FibGVkOiBib29sZWFuO1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZmllbGQ6IHN0cmluZztcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHR5cGVPZkRhdGE6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQEkxOE4oKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGhlbHA6IGFueTtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNGb3JtYXR0ZXJJbnB1dERhdGFWaWV3XG4gIEBJbnB1dCgnZm9ybWF0dGVyJylcbiAgQE9wdGlvbignZm9ybWF0dGVyLmluc3RhbmNlJylcbiAgcHJvdGVjdGVkIGZvcm1hdHRlcjogSUZvcm1hdHRlcjtcbiAgQElucHV0KCdmb3JtYXR0ZXJOYW1lJylcbiAgQE9wdGlvbignZm9ybWF0dGVyLm5hbWUnKVxuICBwcm90ZWN0ZWQgZm9ybWF0dGVyTmFtZTogc3RyaW5nO1xuICBASW5wdXQoJ2Zvcm1hdHRlck9wdGlvbnMnKVxuICBAT3B0aW9uKCdmb3JtYXR0ZXIub3B0aW9ucycpXG4gIHByb3RlY3RlZCBmb3JtYXR0ZXJPcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgnZm9ybWF0dGVyVXNlUHJvcGVydHlWYWx1ZScpXG4gIEBPcHRpb24oJ2Zvcm1hdHRlci51c2VQcm9wZXJ0eVZhbHVlJylcbiAgcHJvdGVjdGVkIGZvcm1hdHRlclVzZVByb3BlcnR5VmFsdWU6IGJvb2xlYW47XG4gIC8vIC0tLSBmcm9tIFRleHRCb3hcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCB0eXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgd2lkdGg6IHN0cmluZztcbiAgLy8gLS0tIHNlbGZcbiAgQEkxOE4oKVxuICBAT3B0aW9uKClcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGxhYmVsOiBzdHJpbmc7XG4gIEBJMThOKClcbiAgQE9wdGlvbigpXG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBAT3B0aW9uKCdtYXhMZW5ndGgnKVxuICBASW5wdXQoJ3BoeE1heExlbmd0aCcpXG4gIHByb3RlY3RlZCBtYXhMZW5ndGg6IG51bWJlcjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBidXR0b25JY29uOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgYnV0dG9uUG9zaXRpb246IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBidXR0b25IYW5kbGVyOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBzaG93Q2xlYXJCdXR0b246IGJvb2xlYW47XG5cbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBPdXRwdXQuXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBAT3V0cHV0KCdwaHhMb2FkJylcbiAgQE9wdGlvbignbG9hZCcpXG4gIHByb3RlY3RlZCBsb2FkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SW5wdXREYXRhVmlld1xuICBAT3V0cHV0KCdwaHhTdGFydFZhbGlkYXRlJylcbiAgQE9wdGlvbignc3RhcnRWYWxpZGF0ZScpXG4gIHByb3RlY3RlZCBzdGFydFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhFbmRWYWxpZGF0ZScpXG4gIEBPcHRpb24oJ2VuZFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIGVuZFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVGb2N1cycpXG4gIEBPcHRpb24oJ2JlZm9yZUZvY3VzJylcbiAgcHJvdGVjdGVkIGJlZm9yZUZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhGb2N1cycpXG4gIEBPcHRpb24oJ2ZvY3VzJylcbiAgcHJvdGVjdGVkIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVMb3N0Rm9jdXMnKVxuICBAT3B0aW9uKCdiZWZvcmVMb3N0Rm9jdXMnKVxuICBwcm90ZWN0ZWQgYmVmb3JlTG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhMb3N0Rm9jdXMnKVxuICBAT3B0aW9uKCdsb3N0Rm9jdXMnKVxuICBwcm90ZWN0ZWQgbG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVDaGFuZ2UnKVxuICBAT3B0aW9uKCdiZWZvcmVDaGFuZ2UnKVxuICBwcm90ZWN0ZWQgYmVmb3JlQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhDaGFuZ2UnKVxuICBAT3B0aW9uKCdjaGFuZ2UnKVxuICBwcm90ZWN0ZWQgY2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0Zvcm1hdHRlcklucHV0RGF0YVZpZXdcbiAgLy8gLS0tIGZyb20gVGV4dEJveFxuICBAT3B0aW9uKCdiZWZvcmVLZXlVcCcpXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUtleVVwJylcbiAgcHJvdGVjdGVkIGJlZm9yZUtleVVwRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdrZXlVcCcpXG4gIEBPdXRwdXQoJ3BoeEtleVVwJylcbiAgcHJvdGVjdGVkIGtleVVwRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdiZWZvcmVLZXlEb3duJylcbiAgQE91dHB1dCgncGh4QmVmb3JlS2V5RG93bicpXG4gIHByb3RlY3RlZCBiZWZvcmVLZXlEb3duRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdrZXlEb3duJylcbiAgQE91dHB1dCgncGh4S2V5RG93bicpXG4gIHByb3RlY3RlZCBrZXlEb3duRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIHByaXZhdGUgYWN0aXZlOiBib29sZWFuO1xuICBwcml2YXRlIGNsYXNzRm9jdXNlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjbGVhckZ1bmM6IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGZvcm1hdHRlckZhY3Rvcnk6IEZvcm1hdHRlckZhY3RvcnksIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UpIHtcbiAgICBzdXBlcihlbGVtZW50UmVmLCBmb3JtYXR0ZXJGYWN0b3J5LCBuZWVkRm9jdXNTZXJ2aWNlKTtcblxuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhckZ1bmMgPSAoKSA9PiB7IHRoaXMuZm9ybWF0dGVkRGF0YSA9ICcnOyB9O1xuXG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLnJlZnJlc2hBY3RpdmVUZXh0Qm94KCk7XG4gIH1cblxuICBwdWJsaWMgX2Rpc3BsYXlIZWxwKCk6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNIZWxwID0gdGhpcy5oYXNIZWxwKCk7XG5cbiAgICByZXR1cm4gaGFzSGVscCAmJiB0aGlzLmlzU2hvd0hlbHAoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaEFjdGl2ZVRleHRCb3goKTogdm9pZCB7XG4gICAgbGV0IHZhbCA9IHRoaXMuZ2V0Rm9ybWF0dGVkRGF0YSgpO1xuXG4gICAgaWYgKHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCA9PT0gJycpIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG4gIH0gXG5cbiAgcHJvdGVjdGVkIG9uVmFsaWRhdGlvbkVuZChpbnB1dFZhbHVlOiBhbnksIHJlc3VsdHM6IFZhbGlkYXRpb25SZXN1bHRbXSk6IHZvaWQge1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRGF0YUNoYW5nZShkYXRhOiBhbnksIGlucHV0VmFsOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5vbkRhdGFDaGFuZ2UoZGF0YSwgaW5wdXRWYWwpO1xuXG4gICAgdGhpcy5yZWZyZXNoQWN0aXZlVGV4dEJveCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRvRm9jdXMoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHN1cGVyLmRvRm9jdXMoJGV2ZW50KTtcblxuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLmNsYXNzRm9jdXNlZCA9IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZG9Mb3N0Rm9jdXMoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHN1cGVyLmRvTG9zdEZvY3VzKCRldmVudCk7XG5cbiAgICB0aGlzLnJlZnJlc2hBY3RpdmVUZXh0Qm94KCk7XG4gICAgdGhpcy5jbGFzc0ZvY3VzZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDbGFzc01hdEZvY3VzZWQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWRPbmx5KCkgPyB7ICdtYXQtZm9jdXNlZCc6IHRoaXMuX2lzQ2xhc3NGb2N1c2VkKCkgfSA6IHt9O1xuICB9XG5cbiAgcHVibGljIF9pc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmU7XG4gIH1cblxuICBwdWJsaWMgX2lzQ2xhc3NGb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsYXNzRm9jdXNlZDtcbiAgfVxuXG4gIHB1YmxpYyBvblZhbHVlQ2hhbmdlZCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoJGV2ZW50KTtcblxuICAgIHRoaXMucmVmcmVzaEFjdGl2ZVRleHRCb3goKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxmU2F2ZURhdGEoZGF0YTogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuc2VsZlNhdmVEYXRhKGRhdGEpO1xuXG4gICAgdGhpcy5yZWZyZXNoQWN0aXZlVGV4dEJveCgpO1xuICB9XG5cbiAgcHVibGljIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxhYmVsO1xuICB9XG5cbiAgcHVibGljIHNldExhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxhYmVsID0gbGFiZWw7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRWYWxpZGF0aW9uUmVzdWx0KCk6IHZvaWQge1xuICAgIHN1cGVyLnJlc2V0VmFsaWRhdGlvblJlc3VsdCgpO1xuXG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBvbkJ0bkNsaWNrKCRldmVudDogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNSZWFkT25seSgpICYmICF0aGlzLmlzRGlzYWJsZWQoKSkge1xuXG4gICAgICB0aGlzLnNldEJ1dHRvbkhhbmRsZXIodGhpcy5zaG93Q2xlYXJCdXR0b24gPyB0aGlzLmNsZWFyRnVuYyA6IHRoaXMuYnV0dG9uSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLmJ1dHRvbkhhbmRsZXIgIT09IG51bGwgJiYgdGhpcy5idXR0b25IYW5kbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5idXR0b25IYW5kbGVyKHRoaXMsICRldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzU2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dDbGVhckJ1dHRvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTaG93Q2xlYXJCdXR0b24oc2hvd0NsZWFyQnV0dG9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93Q2xlYXJCdXR0b24gPSBzaG93Q2xlYXJCdXR0b247XG4gIH1cblxuICBwdWJsaWMgZ2V0QnV0dG9uSWNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNob3dDbGVhckJ1dHRvbiA/IERFRkFVTFRfQlVUVE9OX0lDT04gOiB0aGlzLmJ1dHRvbkljb247XG4gIH1cblxuICBwdWJsaWMgc2V0QnV0dG9uSWNvbihidXR0b25JY29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmJ1dHRvbkljb24gPSBidXR0b25JY29uO1xuICB9XG5cbiAgcHVibGljIGdldEJ1dHRvblBvc2l0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0NsZWFyQnV0dG9uID8g