@uiowa/uiowa-account
Version:
Angular library to manage MFK and UNI Account output
218 lines • 22 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter, ViewChildren, QueryList } from '@angular/core';
import { Account, ElementInputText, ElementInputHidden } from '../models';
import { InputControlService } from '../input-control.service';
import { DigitOnlyDirective } from '@uiowa/digit-only';
var AccountInputComponent = /** @class */ (function () {
function AccountInputComponent(inputControlService) {
this.inputControlService = inputControlService;
this.options = [];
this.index = 0;
this.accountChange = new EventEmitter();
this.questions = [];
}
/**
* @return {?}
*/
AccountInputComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.account.elements.forEach(function (element, loopIndex) {
if (_this.options.find(function (x) { return x.name === element.webApiProperty; })) {
/** @type {?} */
var hiddenOption = _this.options.find(function (x) { return x.name === element.webApiProperty; });
_this.questions.push(new ElementInputHidden({
value: hiddenOption.defaultValue,
label: element.display,
key: element.webApiProperty + '_' + _this.index,
size: element.size,
display: hiddenOption.display,
id: element.webApiProperty + '_' + _this.index
}));
}
else {
_this.questions.push(new ElementInputText({
value: _this.account.getElementString(loopIndex),
label: element.display,
key: element.webApiProperty + '_' + _this.index,
size: element.size,
name: element.webApiProperty,
id: element.webApiProperty + '_' + _this.index
}));
}
});
this.form = this.inputControlService.toFormGroup(this.questions);
this.accountString = this.parse(this.questions, this.account.delimiter);
};
/**
* @return {?}
*/
AccountInputComponent.prototype.parseAccount = /**
* @return {?}
*/
function () {
return this.parse(this.questions, this.account.delimiter);
};
/**
* @param {?} questions
* @param {?} delimeter
* @return {?}
*/
AccountInputComponent.prototype.parse = /**
* @param {?} questions
* @param {?} delimeter
* @return {?}
*/
function (questions, delimeter) {
var _this = this;
/** @type {?} */
var accountString = '';
questions.forEach(function (x, index) {
accountString += x.value;
if (_this.account.showDelimeter(index, true)) {
accountString += delimeter;
}
});
return accountString;
};
/**
* @param {?} e
* @return {?}
*/
AccountInputComponent.prototype.paste = /**
* @param {?} e
* @return {?}
*/
function (e) {
/** @type {?} */
var pastedInput = e.clipboardData.getData('text/plain').trim();
e.preventDefault();
if (!pastedInput) {
return;
}
this.pasteAccount(pastedInput.split(this.account.delimiter));
this.accountChange.emit(this.parseAccount());
};
/**
* @param {?} input
* @return {?}
*/
AccountInputComponent.prototype.pasteAccount = /**
* @param {?} input
* @return {?}
*/
function (input) {
var _this = this;
input.forEach(function (x, index) {
if (index + 1 <= _this.questions.length &&
!(_this.questions[index].controlType === 'hidden') &&
!isNaN(+x) &&
_this.questions[index].size === x.trim().length) {
_this.form.controls[_this.questions[index].id].patchValue(x);
}
});
};
/**
* @param {?} e
* @return {?}
*/
AccountInputComponent.prototype.onKeyup = /**
* @param {?} e
* @return {?}
*/
function (e) {
this.accountChange.emit(this.parseAccount());
if ((e.keyCode < 48 || e.keyCode > 57) && (e.keyCode < 96 || e.keyCode > 105)) {
return; // only numbers can trigger auto jump feature.
}
/** @type {?} */
var currentInputId = e.target['id'];
if (this.form.controls[currentInputId].value.length === e.target['maxLength']) {
/** @type {?} */
var currentQuestionIndex = this.questions.findIndex(function (x) { return x.key === currentInputId; });
var _loop_1 = function (i) {
if (this_1.questions[i].controlType === 'hidden') {
return "continue";
}
/** @type {?} */
var nextInput = this_1.questions[i];
/** @type {?} */
var nextInputField = this_1.formInputs.find(function (v) { return v.el.nativeElement['id'] === nextInput.key; });
nextInputField.el.nativeElement.focus();
return "break";
};
var this_1 = this;
for (var i = currentQuestionIndex + 1; i < this.questions.length; i++) {
var state_1 = _loop_1(i);
if (state_1 === "break")
break;
}
}
};
/**
* @param {?} e
* @return {?}
*/
AccountInputComponent.prototype.onKeydown = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (e.keyCode !== 9) {
return;
}
if (e.target['readOnly']) {
return;
}
while (this.form.controls[e.target['id']].value.length < e.target['maxLength']) {
this.form.controls[e.target['id']].patchValue(this.form.controls[e.target['id']].value.concat(0));
}
};
AccountInputComponent.decorators = [
{ type: Component, args: [{
selector: 'uiowa-account-input',
template: "<div id=\"account-container\">\n <form (ngSubmit)=\"null\" [formGroup]=\"form\">\n <div *ngFor=\"let question of questions\" class=\"account-field\" [style.width.rem]=\"question.size + 1\">\n <div [formGroup]=\"form\">\n <label [attr.for]=\"question.id\" class=\"account-field-label\">{{question.label}}</label>\n\n <div [ngSwitch]=\"question.controlType\" [ngClass]=\"{hiddenLabel: question.controlType === 'hidden'}\">\n\n <input *ngSwitchCase=\"'textbox'\" [formControlName]=\"question.key\" [id]=\"question.id\" [type]=\"question.controlType\"\n [attr.maxlength]=\"question.size\" [style.width.rem]=\"question.size+1\" [attr.maxlength]=\"question.size\"\n inputmode=\"numeric\" pattern=\"[0-9]*\" digitOnly class=\"form-control\" (keydown)=\"onKeydown($event)\" (keyup)=\"onKeyup($event)\"\n (paste)=\"paste($event)\">\n <input *ngSwitchCase=\"'hidden'\" [formControlName]=\"question.key\" [id]=\"question.id\" [type]=\"question.controlType\"\n [attr.maxlength]=\"question.size\" [style.width.rem]=\"question.size\">\n <span *ngSwitchCase=\"'hidden'\">{{question.display}}</span>\n </div>\n </div>\n </div>\n </form>\n</div>\n",
providers: [InputControlService],
styles: [":host{display:inline-flex}.account-field{display:inline-block;vertical-align:bottom;margin-right:.25rem}.account-field .form-control{padding:.375rem!important;text-align:center;font-size:1rem;font-weight:400;font-style:normal;font-variant:normal}label.account-field-label{display:block;font-size:.625rem;margin-bottom:0;text-align:center;white-space:nowrap}div.hiddenLabel{margin-top:7px;text-align:center;padding-bottom:6px}"]
}] }
];
/** @nocollapse */
AccountInputComponent.ctorParameters = function () { return [
{ type: InputControlService }
]; };
AccountInputComponent.propDecorators = {
account: [{ type: Input }],
options: [{ type: Input }],
index: [{ type: Input }],
accountChange: [{ type: Output }],
formInputs: [{ type: ViewChildren, args: [DigitOnlyDirective,] }]
};
return AccountInputComponent;
}());
export { AccountInputComponent };
if (false) {
/** @type {?} */
AccountInputComponent.prototype.account;
/** @type {?} */
AccountInputComponent.prototype.options;
/** @type {?} */
AccountInputComponent.prototype.index;
/** @type {?} */
AccountInputComponent.prototype.accountChange;
/** @type {?} */
AccountInputComponent.prototype.formInputs;
/** @type {?} */
AccountInputComponent.prototype.questions;
/** @type {?} */
AccountInputComponent.prototype.form;
/** @type {?} */
AccountInputComponent.prototype.accountString;
/** @type {?} */
AccountInputComponent.prototype.inputControlService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWlvd2EvdWlvd2EtYWNjb3VudC8iLCJzb3VyY2VzIjpbImxpYi9hY2NvdW50LWlucHV0L2FjY291bnQtaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFFLE9BQU8sRUFBaUMsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkQ7SUF3QkUsK0JBQW9CLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBZDVELFlBQU8sR0FBbUIsRUFBRSxDQUFDO1FBRTdCLFVBQUssR0FBRyxDQUFDLENBQUM7UUFHVixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFLM0MsY0FBUyxHQUE0QixFQUFFLENBQUM7SUFJdUIsQ0FBQzs7OztJQUVoRSx3Q0FBUTs7O0lBQVI7UUFBQSxpQkE4QkM7UUE3QkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLFNBQVM7WUFDL0MsSUFBSSxLQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLGNBQWMsRUFBakMsQ0FBaUMsQ0FBQyxFQUFFOztvQkFDdkQsWUFBWSxHQUFHLEtBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxD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QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25HO0lBQ0gsQ0FBQzs7Z0JBaElGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixvdUNBQTZDO29CQUU3QyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQzs7aUJBQ2pDOzs7O2dCQVJRLG1CQUFtQjs7OzBCQVV6QixLQUFLOzBCQUVMLEtBQUs7d0JBRUwsS0FBSztnQ0FHTCxNQUFNOzZCQUdOLFlBQVksU0FBQyxrQkFBa0I7O0lBZ0hsQyw0QkFBQztDQUFBLEFBaklELElBaUlDO1NBM0hZLHFCQUFxQjs7O0lBQ2hDLHdDQUNpQjs7SUFDakIsd0NBQzZCOztJQUM3QixzQ0FDVTs7SUFFViw4Q0FDMkM7O0lBRTNDLDJDQUMwQzs7SUFFMUMsMENBQXdDOztJQUN4QyxxQ0FBZ0I7O0lBQ2hCLDhDQUFzQjs7SUFFVixvREFBZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWNjb3VudCwgRmllbGRPcHRpb24sIEVsZW1lbnRJbnB1dEJhc2UsIEVsZW1lbnRJbnB1dFRleHQsIEVsZW1lbnRJbnB1dEhpZGRlbiB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbnB1dENvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vaW5wdXQtY29udHJvbC5zZXJ2aWNlJztcbmltcG9ydCB7IERpZ2l0T25seURpcmVjdGl2ZSB9IGZyb20gJ0B1aW93YS9kaWdpdC1vbmx5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWlvd2EtYWNjb3VudC1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2NvdW50LWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWNjb3VudC1pbnB1dC5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW0lucHV0Q29udHJvbFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEFjY291bnRJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIGFjY291bnQ6IEFjY291bnQ7XG4gIEBJbnB1dCgpXG4gIG9wdGlvbnM/OiBGaWVsZE9wdGlvbltdID0gW107XG4gIEBJbnB1dCgpXG4gIGluZGV4ID0gMDtcblxuICBAT3V0cHV0KClcbiAgYWNjb3VudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBWaWV3Q2hpbGRyZW4oRGlnaXRPbmx5RGlyZWN0aXZlKVxuICBmb3JtSW5wdXRzOiBRdWVyeUxpc3Q8RGlnaXRPbmx5RGlyZWN0aXZlPjtcblxuICBxdWVzdGlvbnM6IEVsZW1lbnRJbnB1dEJhc2U8YW55PltdID0gW107XG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgYWNjb3VudFN0cmluZzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5wdXRDb250cm9sU2VydmljZTogSW5wdXRDb250cm9sU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFjY291bnQuZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgbG9vcEluZGV4KSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZpbmQoeCA9PiB4Lm5hbWUgPT09IGVsZW1lbnQud2ViQXBpUHJvcGVydHkpKSB7XG4gICAgICAgIGNvbnN0IGhpZGRlbk9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKHggPT4geC5uYW1lID09PSBlbGVtZW50LndlYkFwaVByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMucHVzaChcbiAgICAgICAgICBuZXcgRWxlbWVudElucHV0SGlkZGVuKHtcbiAgICAgICAgICAgIHZhbHVlOiBoaWRkZW5PcHRpb24uZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnQuZGlzcGxheSxcbiAgICAgICAgICAgIGtleTogZWxlbWVudC53ZWJBcGlQcm9wZXJ0eSArICdfJyArIHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBzaXplOiBlbGVtZW50LnNpemUsXG4gICAgICAgICAgICBkaXNwbGF5OiBoaWRkZW5PcHRpb24uZGlzcGxheSxcbiAgICAgICAgICAgIGlkOiBlbGVtZW50LndlYkFwaVByb3BlcnR5ICsgJ18nICsgdGhpcy5pbmRleFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9ucy5wdXNoKFxuICAgICAgICAgIG5ldyBFbGVtZW50SW5wdXRUZXh0KHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmFjY291bnQuZ2V0RWxlbWVudFN0cmluZyhsb29wSW5kZXgpLFxuICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnQuZGlzcGxheSxcbiAgICAgICAgICAgIGtleTogZWxlbWVudC53ZWJBcGlQcm9wZXJ0eSArICdfJyArIHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBzaXplOiBlbGVtZW50LnNpemUsXG4gICAgICAgICAgICBuYW1lOiBlbGVtZW50LndlYkFwaVByb3BlcnR5LFxuICAgICAgICAgICAgaWQ6IGVsZW1lbnQud2ViQXBpUHJvcGVydHkgKyAnXycgKyB0aGlzLmluZGV4XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybSA9IHRoaXMuaW5wdXRDb250cm9sU2VydmljZS50b0Zvcm1Hcm91cCh0aGlzLnF1ZXN0aW9ucyk7XG4gICAgdGhpcy5hY2NvdW50U3RyaW5nID0gdGhpcy5wYXJzZSh0aGlzLnF1ZXN0aW9ucywgdGhpcy5hY2NvdW50LmRlbGltaXRlcik7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQWNjb3VudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhcnNlKHRoaXMucXVlc3Rpb25zLCB0aGlzLmFjY291bnQuZGVsaW1pdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2UocXVlc3Rpb25zOiBFbGVtZW50SW5wdXRCYXNlPGFueT5bXSwgZGVsaW1ldGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBhY2NvdW50U3RyaW5nID0gJyc7XG4gICAgcXVlc3Rpb25zLmZvckVhY2goKHgsIGluZGV4KSA9PiB7XG4gICAgICBhY2NvdW50U3RyaW5nICs9IHgudmFsdWU7XG4gICAgICBpZiAodGhpcy5hY2NvdW50LnNob3dEZWxpbWV0ZXIoaW5kZXgsIHRydWUpKSB7XG4gICAgICAgIGFjY291bnRTdHJpbmcgKz0gZGVsaW1ldGVyO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBhY2NvdW50U3RyaW5nO1xuICB9XG5cbiAgcGFzdGUoZTogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBwYXN0ZWRJbnB1dDogc3RyaW5nID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKS50cmltKCk7XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFwYXN0ZWRJbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhc3RlQWNjb3VudChwYXN0ZWRJbnB1dC5zcGxpdCh0aGlzLmFjY291bnQuZGVsaW1pdGVyKSk7XG4gICAgdGhpcy5hY2NvdW50Q2hhbmdlLmVtaXQodGhpcy5wYXJzZUFjY291bnQoKSk7XG4gIH1cblxuICBwcml2YXRlIHBhc3RlQWNjb3VudChpbnB1dDogc3RyaW5nW10pIHtcbiAgICBpbnB1dC5mb3JFYWNoKCh4LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBpbmRleCArIDEgPD0gdGhpcy5xdWVzdGlvbnMubGVuZ3RoICYmXG4gICAgICAgICEodGhpcy5xdWVzdGlvbnNbaW5kZXhdLmNvbnRyb2xUeXBlID09PSAnaGlkZGVuJykgJiZcbiAgICAgICAgIWlzTmFOKCt4KSAmJlxuICAgICAgICB0aGlzLnF1ZXN0aW9uc1tpbmRleF0uc2l6ZSA9PT0geC50cmltKCkubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucXVlc3Rpb25zW2luZGV4XS5pZF0ucGF0Y2hWYWx1ZSh4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uS2V5dXAoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMuYWNjb3VudENoYW5nZS5lbWl0KHRoaXMucGFyc2VBY2NvdW50KCkpO1xuICAgIGlmICgoZS5rZXlDb2RlIDwgNDggfHwgZS5rZXlDb2RlID4gNTcpICYmIChlLmtleUNvZGUgPCA5NiB8fCBlLmtleUNvZGUgPiAxMDUpKSB7XG4gICAgICByZXR1cm47IC8vIG9ubHkgbnVtYmVycyBjYW4gdHJpZ2dlciBhdXRvIGp1bXAgZmVhdHVyZS5cbiAgICB9XG4gICAgY29uc3QgY3VycmVudElucHV0SWQgPSBlLnRhcmdldFsnaWQnXTtcbiAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzW2N1cnJlbnRJbnB1dElkXS52YWx1ZS5sZW5ndGggPT09IGUudGFyZ2V0WydtYXhMZW5ndGgnXSkge1xuICAgICAgY29uc3QgY3VycmVudFF1ZXN0aW9uSW5kZXggPSB0aGlzLnF1ZXN0aW9ucy5maW5kSW5kZXgoeCA9PiB4LmtleSA9PT0gY3VycmVudElucHV0SWQpO1xuICAgICAgZm9yIChsZXQgaSA9IGN1cnJlbnRRdWVzdGlvbkluZGV4ICsgMTsgaSA8IHRoaXMucXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uc1tpXS5jb250cm9sVHlwZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0SW5wdXQgPSB0aGlzLnF1ZXN0aW9uc1tpXTtcbiAgICAgICAgY29uc3QgbmV4dElucHV0RmllbGQgPSB0aGlzLmZvcm1JbnB1dHMuZmluZCh2ID0+IHYuZWwubmF0aXZlRWxlbWVudFsnaWQnXSA9PT0gbmV4dElucHV0LmtleSk7XG4gICAgICAgIG5leHRJbnB1dEZpZWxkLmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25LZXlkb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZS5rZXlDb2RlICE9PSA5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlLnRhcmdldFsncmVhZE9ubHknXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlICh0aGlzLmZvcm0uY29udHJvbHNbZS50YXJnZXRbJ2lkJ11dLnZhbHVlLmxlbmd0aCA8IGUudGFyZ2V0WydtYXhMZW5ndGgnXSkge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2UudGFyZ2V0WydpZCddXS5wYXRjaFZhbHVlKHRoaXMuZm9ybS5jb250cm9sc1tlLnRhcmdldFsnaWQnXV0udmFsdWUuY29uY2F0KDApKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==