UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

864 lines 53.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter, ViewChild, HostBinding, Renderer2, ElementRef, forwardRef, TemplateRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { isTemplateRef } from '../core/util/check'; var InputItemComponent = /** @class */ (function () { function InputItemComponent(element, render) { this.element = element; this.render = render; this.prefixCls = 'am-input'; this.setFocus = {}; this.pattern = ''; this.autoFocus = false; this.inputType = 'text'; this.ngTemplate = false; this.isTemplateRef = isTemplateRef; this._type = 'text'; this._defaultValue = ''; this._placeholder = ''; this._editable = true; this._disabled = false; this._clear = false; this._error = false; this._extra = ''; this._labelNumber = 5; this._updatePlaceholder = false; this._prefixListCls = 'am-list'; this._moneyKeyboardAlign = 'right'; this._focus = false; this._isClear = false; this._content = ''; this._inputLock = false; this.onChange = new EventEmitter(); this.onBlur = new EventEmitter(); this.onFocus = new EventEmitter(); this.onErrorClick = new EventEmitter(); this.onExtraClick = new EventEmitter(); this.clsItem = true; this.clsDisabled = this._disabled; this.clsError = this._error; this.clsFocus = this._focus; this.clsAndroid = this._focus; this._onChange = (/** * @param {?} _ * @return {?} */ function (_) { }); this._el = element.nativeElement; } Object.defineProperty(InputItemComponent.prototype, "type", { get: /** * @return {?} */ function () { return this._type; }, set: /** * @param {?} value * @return {?} */ function (value) { if (value && value.length > 0) { this.inputType = value; if (value === 'bankCard' || value === 'phone') { this._type = 'tel'; } else if (value === 'password') { this._type = 'password'; } else if (value === 'digit') { this._type = 'number'; } else if (value !== 'text' && value !== 'number') { this._type = value; } if (value === 'number') { this.pattern = '[0-9]*'; } } }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "value", { get: /** * @return {?} */ function () { return this._value; }, set: /** * @param {?} v * @return {?} */ function (v) { if (typeof v === 'undefined' || v === null) { this._value = ''; } else { this._value = v; } }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "defaultValue", { get: /** * @return {?} */ function () { return this._defaultValue; }, set: /** * @param {?} value * @return {?} */ function (value) { this._defaultValue = value; if (!this._value) { this._value = this._defaultValue; } }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "placeholder", { get: /** * @return {?} */ function () { return this._placeholder; }, set: /** * @param {?} value * @return {?} */ function (value) { this._placeholder = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "editable", { get: /** * @return {?} */ function () { return this._editable; }, set: /** * @param {?} value * @return {?} */ function (value) { this._editable = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "disabled", { get: /** * @return {?} */ function () { return this._disabled; }, set: /** * @param {?} value * @return {?} */ function (value) { this._disabled = value; this.clsDisabled = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "clear", { get: /** * @return {?} */ function () { return this._clear; }, set: /** * @param {?} value * @return {?} */ function (value) { this._clear = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "maxLength", { get: /** * @return {?} */ function () { return this._maxLength; }, set: /** * @param {?} value * @return {?} */ function (value) { this._maxLength = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "error", { get: /** * @return {?} */ function () { return this._error; }, set: /** * @param {?} value * @return {?} */ function (value) { this._error = value; this.clsError = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "extra", { get: /** * @return {?} */ function () { return this._extra; }, set: /** * @param {?} value * @return {?} */ function (value) { if (value instanceof TemplateRef) { this.ngTemplate = true; } else { this.ngTemplate = false; } this._extra = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "labelNumber", { set: /** * @param {?} value * @return {?} */ function (value) { this._labelNumber = value; this.setCls(); }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "updatePlaceholder", { set: /** * @param {?} value * @return {?} */ function (value) { this._updatePlaceholder = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "prefixListCls", { get: /** * @return {?} */ function () { return this._prefixListCls; }, set: /** * @param {?} value * @return {?} */ function (value) { this._prefixListCls = value; this.render.addClass(this._el, value + '-item'); this.render.addClass(this._el, value + '-item-middle'); }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "name", { get: /** * @return {?} */ function () { return this._name; }, set: /** * @param {?} value * @return {?} */ function (value) { this._name = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "moneyKeyboardAlign", { get: /** * @return {?} */ function () { return this._moneyKeyboardAlign; }, set: /** * @param {?} value * @return {?} */ function (value) { this._moneyKeyboardAlign = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "locale", { set: /** * @param {?} value * @return {?} */ function (value) { this._locale = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "fontColor", { get: /** * @return {?} */ function () { return this._fontColor; }, set: /** * @param {?} value * @return {?} */ function (value) { this._fontColor = value; }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "focus", { set: /** * @param {?} value * @return {?} */ function (value) { if (value && value.focus) { this.autoFocus = value.focus; if (this._type === 'money') { this.setFocus = value; } else if (this.inputElementRef) { this._focus = true; this.inputElementRef.nativeElement.focus(); this.inputFocus(''); } } }, enumerable: true, configurable: true }); Object.defineProperty(InputItemComponent.prototype, "content", { get: /** * @return {?} */ function () { return this._content; }, set: /** * @param {?} value * @return {?} */ function (value) { this._content = value; this.setCls(); }, enumerable: true, configurable: true }); /** * @return {?} */ InputItemComponent.prototype.setCls = /** * @return {?} */ function () { var _a, _b; if (this.lableRef.nativeElement.children.length > 0 || (this.lableRef.nativeElement && this.lableRef.nativeElement.innerText !== '') || this._content != undefined) { this.labelCls = (_a = {}, _a[this.prefixCls + "-label"] = true, _a[this.prefixCls + "-label-2"] = this._labelNumber === 2, _a[this.prefixCls + "-label-3"] = this._labelNumber === 3, _a[this.prefixCls + "-label-4"] = this._labelNumber === 4, _a[this.prefixCls + "-label-5"] = this._labelNumber === 5, _a[this.prefixCls + "-label-6"] = this._labelNumber === 6, _a[this.prefixCls + "-label-7"] = this._labelNumber === 7, _a); } this.controlCls = (_b = {}, _b[this.prefixCls + "-control"] = true, _b); }; /** * @param {?} e * @return {?} */ InputItemComponent.prototype.inputChange = /** * @param {?} e * @return {?} */ function (e) { var _this = this; setTimeout((/** * @return {?} */ function () { if (_this._inputLock && _this.inputType === 'text') { return; } /** @type {?} */ var value = e; switch (_this.inputType) { case 'text': break; case 'bankCard': value = value.replace(/\D/g, '').replace(/(....)(?=.)/g, '$1 '); break; case 'phone': value = value.replace(/\D/g, '').substring(0, 11); /** @type {?} */ var valueLen = value.length; if (valueLen > 3 && valueLen < 8) { value = value.substr(0, 3) + " " + value.substr(3); } else if (valueLen >= 8) { value = value.substr(0, 3) + " " + value.substr(3, 4) + " " + value.substr(7); } break; case 'number': value = value.replace(/\D/g, ''); break; case 'password': break; default: _this._value = value; break; } _this._value = value; _this._onChange(_this._value); _this.onChange.emit(_this._value); }), 0); }; /** * @return {?} */ InputItemComponent.prototype.compositionStart = /** * @return {?} */ function () { this._inputLock = true; }; /** * @return {?} */ InputItemComponent.prototype.compositionEnd = /** * @return {?} */ function () { this._inputLock = false; }; /** * @param {?} value * @return {?} */ InputItemComponent.prototype.inputFocus = /** * @param {?} value * @return {?} */ function (value) { var _this = this; if (!this._editable && document.activeElement instanceof HTMLElement) { document.activeElement.blur(); } setTimeout((/** * @return {?} */ function () { _this._focus = true; _this.clsFocus = true; _this.clsAndroid = true; }), 100); this.onFocus.emit(value); }; /** * @param {?} value * @return {?} */ InputItemComponent.prototype.inputBlur = /** * @param {?} value * @return {?} */ function (value) { var _this = this; setTimeout((/** * @return {?} */ function () { if (!_this._isClear) { _this._focus = false; _this.clsFocus = false; _this.clsAndroid = false; _this.onBlur.emit(value); } _this._isClear = false; }), 100); }; /** * @return {?} */ InputItemComponent.prototype.clearInput = /** * @return {?} */ function () { if (this._type !== 'password' && this._updatePlaceholder) { this._placeholder = this._value; } this._value = ''; this.onChange.emit(this._value); this._onChange(this._value); this._isClear = true; this.inputFocus(this._value); }; /** * @param {?} e * @return {?} */ InputItemComponent.prototype.errorClick = /** * @param {?} e * @return {?} */ function (e) { if (this.onErrorClick) { this.onErrorClick.emit(e); } }; /** * @param {?} e * @return {?} */ InputItemComponent.prototype.extraClick = /** * @param {?} e * @return {?} */ function (e) { if (this.onExtraClick) { this.onExtraClick.emit(e); } }; /** * @param {?} value * @return {?} */ InputItemComponent.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { if (typeof value === undefined || value === null) { this._value = ''; } else { this._value = value; } }; /** * @param {?} fn * @return {?} */ InputItemComponent.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this._onChange = fn; }; /** * @param {?} fn * @return {?} */ InputItemComponent.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { }; /** * @return {?} */ InputItemComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.setCls(); this.render.addClass(this._el, this._prefixListCls + '-item'); this.render.addClass(this._el, this._prefixListCls + '-item-middle'); }; /** * @return {?} */ InputItemComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { var _this = this; setTimeout((/** * @return {?} */ function () { _this.setCls(); }), 0); }; InputItemComponent.decorators = [ { type: Component, args: [{ selector: 'InputItem, nzm-input-item', template: "<div class=\"{{ prefixListCls }}-line\">\n <div #lableContent [ngClass]=\"labelCls\">\n <ng-template *ngIf=\"isTemplateRef(content)\" [ngTemplateOutlet]=\"content\"></ng-template>\n <ng-container *ngIf=\"!isTemplateRef(content)\">{{ content }}</ng-container>\n </div>\n <div [ngClass]=\"controlCls\">\n <CustomInput\n *ngIf=\"type === 'money'\"\n [value]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [editable]=\"editable\"\n [fontColor]=\"fontColor\"\n [moneyKeyboardAlign]=\"moneyKeyboardAlign\"\n [setFocus]=\"setFocus\"\n [maxLength]=\"maxLength\"\n (onChange)=\"inputChange($event)\"\n (onBlur)=\"inputBlur(value)\"\n (onFocus)=\"inputFocus(value)\"\n >\n </CustomInput>\n <div *ngIf=\"type !== 'money'\">\n <input\n #inputElement\n [type]=\"type\"\n [name]=\"name\"\n [(ngModel)]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readOnly]=\"!editable\"\n [autofocus]=\"autoFocus\"\n [maxlength]=\"maxLength\"\n [pattern]=\"pattern\"\n [style.color]=\"fontColor\"\n (ngModelChange)=\"inputChange($event)\"\n (compositionstart)=\"compositionStart()\"\n (compositionend)=\"compositionEnd()\"\n (blur)=\"inputBlur(value)\"\n (focus)=\"inputFocus(value)\"\n style=\"outline:none\"\n />\n </div>\n </div>\n <div\n *ngIf=\"clear && editable && !disabled && (value && value.length > 0)\"\n class=\"{{ prefixCls }}-clear\"\n (click)=\"clearInput()\"\n ></div>\n <div *ngIf=\"error\" class=\"{{ prefixCls }}-error-extra\" (click)=\"errorClick($event)\"></div>\n <div *ngIf=\"extra !== ''\" class=\"{{ prefixCls }}-extra\" (click)=\"extraClick($event)\">\n <ng-container *ngIf=\"!ngTemplate\">{{ extra }}</ng-container>\n <ng-template *ngIf=\"ngTemplate\" [ngTemplateOutlet]=\"extra\"></ng-template>\n </div>\n</div>\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return InputItemComponent; })), multi: true } ] }] } ]; /** @nocollapse */ InputItemComponent.ctorParameters = function () { return [ { type: ElementRef }, { type: Renderer2 } ]; }; InputItemComponent.propDecorators = { lableRef: [{ type: ViewChild, args: ['lableContent', { static: true },] }], inputElementRef: [{ type: ViewChild, args: ['inputElement', { static: false },] }], type: [{ type: Input }], value: [{ type: Input }], defaultValue: [{ type: Input }], placeholder: [{ type: Input }], editable: [{ type: Input }], disabled: [{ type: Input }], clear: [{ type: Input }], maxLength: [{ type: Input }], error: [{ type: Input }], extra: [{ type: Input }], labelNumber: [{ type: Input }], updatePlaceholder: [{ type: Input }], prefixListCls: [{ type: Input }], name: [{ type: Input }], moneyKeyboardAlign: [{ type: Input }], locale: [{ type: Input }], fontColor: [{ type: Input }], focus: [{ type: Input }], content: [{ type: Input }], onChange: [{ type: Output }], onBlur: [{ type: Output }], onFocus: [{ type: Output }], onErrorClick: [{ type: Output }], onExtraClick: [{ type: Output }], clsItem: [{ type: HostBinding, args: ['class.am-input-item',] }], clsDisabled: [{ type: HostBinding, args: ['class.am-input-disabled',] }], clsError: [{ type: HostBinding, args: ['class.am-input-error',] }], clsFocus: [{ type: HostBinding, args: ['class.am-input-focus',] }], clsAndroid: [{ type: HostBinding, args: ['class.am-input-android,',] }] }; return InputItemComponent; }()); export { InputItemComponent }; if (false) { /** @type {?} */ InputItemComponent.prototype.prefixCls; /** @type {?} */ InputItemComponent.prototype.wrapCls; /** @type {?} */ InputItemComponent.prototype.labelCls; /** @type {?} */ InputItemComponent.prototype.controlCls; /** @type {?} */ InputItemComponent.prototype.setFocus; /** @type {?} */ InputItemComponent.prototype.pattern; /** @type {?} */ InputItemComponent.prototype.autoFocus; /** @type {?} */ InputItemComponent.prototype.inputType; /** @type {?} */ InputItemComponent.prototype.ngTemplate; /** @type {?} */ InputItemComponent.prototype.isTemplateRef; /** * @type {?} * @private */ InputItemComponent.prototype._el; /** * @type {?} * @private */ InputItemComponent.prototype._type; /** * @type {?} * @private */ InputItemComponent.prototype._value; /** * @type {?} * @private */ InputItemComponent.prototype._defaultValue; /** * @type {?} * @private */ InputItemComponent.prototype._placeholder; /** * @type {?} * @private */ InputItemComponent.prototype._editable; /** * @type {?} * @private */ InputItemComponent.prototype._disabled; /** * @type {?} * @private */ InputItemComponent.prototype._clear; /** * @type {?} * @private */ InputItemComponent.prototype._maxLength; /** * @type {?} * @private */ InputItemComponent.prototype._error; /** * @type {?} * @private */ InputItemComponent.prototype._extra; /** * @type {?} * @private */ InputItemComponent.prototype._labelNumber; /** * @type {?} * @private */ InputItemComponent.prototype._updatePlaceholder; /** * @type {?} * @private */ InputItemComponent.prototype._prefixListCls; /** * @type {?} * @private */ InputItemComponent.prototype._name; /** * @type {?} * @private */ InputItemComponent.prototype._moneyKeyboardAlign; /** * @type {?} * @private */ InputItemComponent.prototype._locale; /** * @type {?} * @private */ InputItemComponent.prototype._focus; /** * @type {?} * @private */ InputItemComponent.prototype._isClear; /** * @type {?} * @private */ InputItemComponent.prototype._fontColor; /** * @type {?} * @private */ InputItemComponent.prototype._content; /** * @type {?} * @private */ InputItemComponent.prototype._inputLock; /** @type {?} */ InputItemComponent.prototype.lableRef; /** @type {?} */ InputItemComponent.prototype.inputElementRef; /** @type {?} */ InputItemComponent.prototype.onChange; /** @type {?} */ InputItemComponent.prototype.onBlur; /** @type {?} */ InputItemComponent.prototype.onFocus; /** @type {?} */ InputItemComponent.prototype.onErrorClick; /** @type {?} */ InputItemComponent.prototype.onExtraClick; /** @type {?} */ InputItemComponent.prototype.clsItem; /** @type {?} */ InputItemComponent.prototype.clsDisabled; /** @type {?} */ InputItemComponent.prototype.clsError; /** @type {?} */ InputItemComponent.prototype.clsFocus; /** @type {?} */ InputItemComponent.prototype.clsAndroid; /** @type {?} */ InputItemComponent.prototype._onChange; /** * @type {?} * @private */ InputItemComponent.prototype.element; /** * @type {?} * @private */ InputItemComponent.prototype.render; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbImlucHV0LWl0ZW0vaW5wdXQtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULFdBQVcsRUFDWCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBRVosTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRDtJQThPRSw0QkFBb0IsT0FBbUIsRUFBVSxNQUFpQjtRQUE5QyxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQWxPbEUsY0FBUyxHQUFXLFVBQVUsQ0FBQztRQUkvQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixjQUFTLEdBQVcsTUFBTSxDQUFDO1FBQzNCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxhQUFhLENBQUM7UUFHdEIsVUFBSyxHQUFXLE1BQU0sQ0FBQztRQUV2QixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMzQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV4QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFdBQU0sR0FBOEIsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLHVC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MkI7O0lBRTNCLHNDQUNTOztJQUNULDZDQUNnQjs7SUF1S2hCLHNDQUNzRDs7SUFDdEQsb0NBQ29EOztJQUNwRCxxQ0FDcUQ7O0lBQ3JELDBDQUMwRDs7SUFDMUQsMENBQzBEOztJQUUxRCxxQ0FDd0I7O0lBQ3hCLHlDQUNzQzs7SUFDdEMsc0NBQ2dDOztJQUNoQyxzQ0FDZ0M7O0lBQ2hDLHdDQUNrQzs7SUFNbEMsdUNBQTJCOzs7OztJQUpmLHFDQUEyQjs7Ozs7SUFBRSxvQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEFmdGVyVmlld0luaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0NoaWxkLFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSG9zdEJpbmRpbmcsXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIEFmdGVyVmlld0NoZWNrZWRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc1RlbXBsYXRlUmVmIH0gZnJvbSAnLi4vY29yZS91dGlsL2NoZWNrJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnSW5wdXRJdGVtLCBuem0taW5wdXQtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dEl0ZW1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgSW5wdXRJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLWlucHV0JztcbiAgd3JhcENsczogb2JqZWN0O1xuICBsYWJlbENsczogb2JqZWN0O1xuICBjb250cm9sQ2xzOiBvYmplY3Q7XG4gIHNldEZvY3VzOiBvYmplY3QgPSB7fTtcbiAgcGF0dGVybjogc3RyaW5nID0gJyc7XG4gIGF1dG9Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnB1dFR5cGU6IHN0cmluZyA9ICd0ZXh0JztcbiAgbmdUZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1RlbXBsYXRlUmVmID0gaXNUZW1wbGF0ZVJlZjtcblxuICBwcml2YXRlIF9lbDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3R5cGU6IHN0cmluZyA9ICd0ZXh0JztcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9lZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2NsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX21heExlbmd0aDogbnVtYmVyO1xuICBwcml2YXRlIF9lcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9leHRyYTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICcnO1xuICBwcml2YXRlIF9sYWJlbE51bWJlcjogbnVtYmVyID0gNTtcbiAgcHJpdmF0ZSBfdXBkYXRlUGxhY2Vob2xkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcHJlZml4TGlzdENsczogc3RyaW5nID0gJ2FtLWxpc3QnO1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX21vbmV5S2V5Ym9hcmRBbGlnbjogc3RyaW5nID0gJ3JpZ2h0JztcbiAgcHJpdmF0ZSBfbG9jYWxlO1xuICBwcml2YXRlIF9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pc0NsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2ZvbnRDb2xvcjogc3RyaW5nO1xuICBwcml2YXRlIF9jb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJyc7XG4gIHByaXZhdGUgX2lucHV0TG9jayA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2xhYmxlQ29udGVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGxhYmxlUmVmO1xuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgaW5wdXRFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cbiAgc2V0IHR5cGUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlucHV0VHlwZSA9IHZhbHVlO1xuICAgICAgaWYgKHZhbHVlID09PSAnYmFua0NhcmQnIHx8IHZhbHVlID09PSAncGhvbmUnKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSAndGVsJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnZGlnaXQnKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSAnbnVtYmVyJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09ICd0ZXh0JyAmJiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLnBhdHRlcm4gPSAnWzAtOV0qJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHYgPT09ICd1bmRlZmluZWQnIHx8IHYgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gIH1cbiAgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgaWYgKCF0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuICBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlO1xuICB9XG4gIHNldCBlZGl0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2VkaXRhYmxlID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5jbHNEaXNhYmxlZCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBjbGVhcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgc2V0IGNsZWFyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2xlYXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heExlbmd0aDtcbiAgfVxuICBzZXQgbWF4TGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhMZW5ndGggPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICB9XG4gIHNldCBlcnJvcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Vycm9yID0gdmFsdWU7XG4gICAgdGhpcy5jbHNFcnJvciA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBleHRyYSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmE7XG4gIH1cbiAgc2V0IGV4dHJhKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMubmdUZW1wbGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmdUZW1wbGF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9leHRyYSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbE51bWJlcih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGFiZWxOdW1iZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB1cGRhdGVQbGFjZWhvbGRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3VwZGF0ZVBsYWNlaG9sZGVyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHByZWZpeExpc3RDbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcHJlZml4TGlzdENscztcbiAgfVxuICBzZXQgcHJlZml4TGlzdENscyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcHJlZml4TGlzdENscyA9IHZhbHVlO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB2YWx1ZSArICctaXRlbScpO1xuICAgIHRoaXMucmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB2YWx1ZSArICctaXRlbS1taWRkbGUnKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1vbmV5S2V5Ym9hcmRBbGlnbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tb25leUtleWJvYXJkQWxpZ247XG4gIH1cbiAgc2V0IG1vbmV5S2V5Ym9hcmRBbGlnbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbW9uZXlLZXlib2FyZEFsaWduID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGxvY2FsZSh2YWx1ZSkge1xuICAgIHRoaXMuX2xvY2FsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBmb250Q29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvbnRDb2xvcjtcbiAgfVxuICBzZXQgZm9udENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9mb250Q29sb3IgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZm9jdXModmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuZm9jdXMpIHtcbiAgICAgIHRoaXMuYXV0b0ZvY3VzID0gdmFsdWUuZm9jdXM7XG4gICAgICBpZiAodGhpcy5fdHlwZSA9PT0gJ21vbmV5Jykge1xuICAgICAgICB0aGlzLnNldEZvY3VzID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLmlucHV0Rm9jdXMoJycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBnZXQgY29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGVudDtcbiAgfVxuICBzZXQgY29udGVudCh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMuX2NvbnRlbnQgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXJyb3JDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uRXh0cmFDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWl0ZW0nKVxuICBjbHNJdGVtOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1kaXNhYmxlZCcpXG4gIGNsc0Rpc2FibGVkOiBib29sZWFuID0gdGhpcy5fZGlzYWJsZWQ7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0taW5wdXQtZXJyb3InKVxuICBjbHNFcnJvcjogYm9vbGVhbiA9IHRoaXMuX2Vycm9yO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWlucHV0LWZvY3VzJylcbiAgY2xzRm9jdXM6IGJvb2xlYW4gPSB0aGlzLl9mb2N1cztcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1pbnB1dC1hbmRyb2lkLCcpXG4gIGNsc0FuZHJvaWQ6IGJvb2xlYW4gPSB0aGlzLl9mb2N1cztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyOiBSZW5kZXJlcjIpIHtcbiAgICB0aGlzLl9lbCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIHNldENscygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCB8fFxuICAgICAgKHRoaXMubGFibGVSZWYubmF0aXZlRWxlbWVudCAmJiB0aGlzLmxhYmxlUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0ICE9PSAnJykgfHxcbiAgICAgIHRoaXMuX2NvbnRlbnQgIT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLmxhYmVsQ2xzID0ge1xuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsYF06IHRydWUsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtMmBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gMixcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC0zYF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSAzLFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTRgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDQsXG4gICAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tbGFiZWwtNWBdOiB0aGlzLl9sYWJlbE51bWJlciA9PT0gNSxcbiAgICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1sYWJlbC02YF06IHRoaXMuX2xhYmVsTnVtYmVyID09PSA2LFxuICAgICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTdgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDdcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuY29udHJvbENscyA9IHsgW2Ake3RoaXMucHJlZml4Q2xzfS1jb250cm9sYF06IHRydWUgfTtcbiAgfVxuXG4gIGlucHV0Q