com.phloxui
Version:
PhloxUI Ng2+ Framework
308 lines (307 loc) • 24.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { AbstractPipeFormatter } from './AbstractPipeFormatter';
import { Option } from '../../decorator/Option.decorator';
var /** @type {?} */ NAME = 'number';
var /** @type {?} */ CEIL = 'ceil';
var /** @type {?} */ ROUND = 'round';
var /** @type {?} */ FLOOR = 'floor';
var NumberFormatter = /** @class */ (function (_super) {
tslib_1.__extends(NumberFormatter, _super);
function NumberFormatter() {
var _this = _super.call(this, NAME) || this;
_this.setDefaultValues();
return _this;
}
/**
* @return {?}
*/
NumberFormatter.prototype.setDefaultValues = /**
* @return {?}
*/
function () {
if (this.roundingMode === null || typeof this.roundingMode === 'undefined') {
this.roundingMode = ROUND;
}
if (this.useSeparator === null || typeof this.useSeparator === 'undefined') {
this.useSeparator = true;
}
};
/**
* @param {?} num
* @return {?}
*/
NumberFormatter.prototype.decimalCount = /**
* @param {?} num
* @return {?}
*/
function (num) {
var /** @type {?} */ match = ('' + num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
if (!match) {
return 0;
}
return Math.max(0,
// Number of digits right of decimal point.
(match[1] ? match[1].length : 0)
// Adjust for scientific notation.
- (match[2] ? +match[2] : 0));
};
/**
* @param {?} options
* @return {?}
*/
NumberFormatter.prototype.setOptions = /**
* @param {?} options
* @return {?}
*/
function (options) {
_super.prototype.setOptions.call(this, options);
// Set default values of setting options
this.setDefaultValues();
};
/**
* @param {?} data
* @return {?}
*/
NumberFormatter.prototype.format = /**
* @param {?} data
* @return {?}
*/
function (data) {
if (data === null || typeof data !== 'number') {
return "";
}
var /** @type {?} */ formattedData = data.toString();
var /** @type {?} */ factor = null;
if (this.maxFraction !== null && this.maxFraction !== undefined) {
factor = Math.pow(10, this.maxFraction);
}
else if (this.minFraction !== null && this.minFraction !== undefined) {
factor = Math.pow(10, this.minFraction);
}
if (factor !== null) {
if (this.roundingMode === CEIL) {
formattedData = (Math.ceil(data * factor) / factor).toString();
}
else if (this.roundingMode === FLOOR) {
formattedData = (Math.floor(data * factor) / factor).toString();
}
else {
// default as round
formattedData = (Math.round(data * factor) / factor).toString();
}
}
if (this.minFraction !== null && this.minFraction !== undefined) {
var /** @type {?} */ idx = formattedData.indexOf(".");
if (idx > -1) {
var /** @type {?} */ decimal = formattedData.slice(idx + 1, formattedData.length);
if (decimal.length < this.minFraction) {
for (var /** @type {?} */ i = decimal.length; i < this.minFraction; i++) {
decimal += "0";
}
}
// add new fraction
formattedData = formattedData.slice(0, idx) + "." + decimal;
}
else {
var /** @type {?} */ decimal = "";
for (var /** @type {?} */ i = 0; i < this.minFraction; i++) {
decimal += "0";
}
formattedData = formattedData + "." + decimal;
}
}
if (this.useSeparator) {
var /** @type {?} */ idx = formattedData.indexOf(".");
var /** @type {?} */ integer = "";
var /** @type {?} */ fraction = "";
if (idx > -1) {
integer = formattedData.substring(0, idx);
fraction = formattedData.substring(idx);
}
else {
integer = formattedData;
}
var /** @type {?} */ separated = "";
for (var /** @type {?} */ i = integer.length - 1; i >= 0; i--) {
var /** @type {?} */ j = integer.length - 1 - i;
separated = (i > 0 && j % 3 === 2 ? "," : "") + integer[i] + separated;
}
formattedData = separated + fraction;
}
return formattedData;
};
/**
* @param {?} data
* @return {?}
*/
NumberFormatter.prototype.parse = /**
* @param {?} data
* @return {?}
*/
function (data) {
if (data === null || typeof data === 'undefined') {
return null;
}
data = data.replace(/\,/g, "");
return parseFloat(data);
};
/**
* @param {?} args
* @return {?}
*/
NumberFormatter.prototype.parseToOptions = /**
* @param {?} args
* @return {?}
*/
function (args) {
var /** @type {?} */ minFraction = undefined;
var /** @type {?} */ maxFraction = undefined;
var /** @type {?} */ useSeparator = undefined;
var /** @type {?} */ roundingMode = undefined;
if (args !== null && typeof args !== 'undefined') {
if (args.length > 0) {
minFraction = args[0];
}
if (args.length > 1) {
maxFraction = args[1];
}
if (args.length > 2) {
useSeparator = args[2];
}
if (args.length > 3) {
roundingMode = args[3];
}
}
return {
minFraction: minFraction,
maxFraction: maxFraction,
mode: roundingMode,
separator: useSeparator
};
};
/**
* @return {?}
*/
NumberFormatter.prototype.getMinFraction = /**
* @return {?}
*/
function () {
return this.minFraction;
};
/**
* @param {?} minFraction
* @return {?}
*/
NumberFormatter.prototype.setMinFraction = /**
* @param {?} minFraction
* @return {?}
*/
function (minFraction) {
this.minFraction = minFraction;
};
/**
* @return {?}
*/
NumberFormatter.prototype.getMaxFraction = /**
* @return {?}
*/
function () {
return this.maxFraction;
};
/**
* @param {?} maxFraction
* @return {?}
*/
NumberFormatter.prototype.setMaxFraction = /**
* @param {?} maxFraction
* @return {?}
*/
function (maxFraction) {
this.maxFraction = maxFraction;
};
/**
* @return {?}
*/
NumberFormatter.prototype.isUseSeparator = /**
* @return {?}
*/
function () {
return this.useSeparator;
};
/**
* @param {?} useSeparator
* @return {?}
*/
NumberFormatter.prototype.setUseSeparator = /**
* @param {?} useSeparator
* @return {?}
*/
function (useSeparator) {
this.useSeparator = useSeparator;
};
/**
* @return {?}
*/
NumberFormatter.prototype.getRoundingMode = /**
* @return {?}
*/
function () {
return this.roundingMode;
};
/**
* @param {?} roundingMode
* @return {?}
*/
NumberFormatter.prototype.setRoundingMode = /**
* @param {?} roundingMode
* @return {?}
*/
function (roundingMode) {
this.roundingMode = roundingMode;
};
NumberFormatter.NAME = NAME;
NumberFormatter.CEIL = CEIL;
NumberFormatter.ROUND = ROUND;
NumberFormatter.FLOOR = FLOOR;
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], NumberFormatter.prototype, "minFraction", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], NumberFormatter.prototype, "maxFraction", void 0);
tslib_1.__decorate([
Option('separator'),
tslib_1.__metadata("design:type", Boolean)
], NumberFormatter.prototype, "useSeparator", void 0);
tslib_1.__decorate([
Option('mode'),
tslib_1.__metadata("design:type", String)
], NumberFormatter.prototype, "roundingMode", void 0);
return NumberFormatter;
}(AbstractPipeFormatter));
export { NumberFormatter };
function NumberFormatter_tsickle_Closure_declarations() {
/** @type {?} */
NumberFormatter.NAME;
/** @type {?} */
NumberFormatter.CEIL;
/** @type {?} */
NumberFormatter.ROUND;
/** @type {?} */
NumberFormatter.FLOOR;
/** @type {?} */
NumberFormatter.prototype.minFraction;
/** @type {?} */
NumberFormatter.prototype.maxFraction;
/** @type {?} */
NumberFormatter.prototype.useSeparator;
/** @type {?} */
NumberFormatter.prototype.roundingMode;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVtYmVyRm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvc2hhcmUvZm9ybWF0dGVyL051bWJlckZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUsxRCxxQkFBTSxJQUFJLEdBQVcsUUFBUSxDQUFDO0FBRTlCLHFCQUFNLElBQUksR0FBVyxNQUFNLENBQUM7QUFDNUIscUJBQU0sS0FBSyxHQUFXLE9BQU8sQ0FBQztBQUM5QixxQkFBTSxLQUFLLEdBQVcsT0FBTyxDQUFDOztJQUVPLDJDQUFxQjtJQWdCeEQ7UUFBQSxZQUNFLGtCQUFNLElBQUksQ0FBQyxTQUdaO1FBREMsS0FBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7O0tBQ3pCOzs7O0lBRU8sMENBQWdCOzs7O1FBQ3RCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNCO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDMUI7Ozs7OztJQUdLLHNDQUFZOzs7O2NBQUMsR0FBVztRQUM5QixxQkFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDakUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FB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QUFZLEdBQUcsWUFBWSxDQUFDOzs7OztJQUc1Qix5Q0FBZTs7OztRQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzs7Ozs7O0lBR3BCLHlDQUFlOzs7O2NBQUMsWUFBb0I7UUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7OzJCQS9MRyxJQUFJOzJCQUNKLElBQUk7NEJBQ0gsS0FBSzs0QkFDTCxLQUFLOztRQUUzQyxNQUFNLEVBQUU7Ozs7UUFFUixNQUFNLEVBQUU7Ozs7UUFFUixNQUFNLENBQUMsV0FBVyxDQUFDOzs7O1FBRW5CLE1BQU0sQ0FBQyxNQUFNLENBQUM7OzswQkF6QmpCO0VBWXFDLHFCQUFxQjtTQUE3QyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RQaXBlRm9ybWF0dGVyIH0gZnJvbSAnLi9BYnN0cmFjdFBpcGVGb3JtYXR0ZXInO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRGF0ZVRpbWVVdGlscyB9IGZyb20gJy4uL3V0aWxzL0RhdGVUaW1lVXRpbHMnO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2Uvc2VydmljZXMnO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L21vZGVsL1BobG94QXBwSW5mbyc7XG5cbmNvbnN0IE5BTUU6IHN0cmluZyA9ICdudW1iZXInO1xuXG5jb25zdCBDRUlMOiBzdHJpbmcgPSAnY2VpbCc7XG5jb25zdCBST1VORDogc3RyaW5nID0gJ3JvdW5kJztcbmNvbnN0IEZMT09SOiBzdHJpbmcgPSAnZmxvb3InO1xuXG5leHBvcnQgY2xhc3MgTnVtYmVyRm9ybWF0dGVyIGV4dGVuZHMgQWJzdHJhY3RQaXBlRm9ybWF0dGVyIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5BTUU6IHN0cmluZyA9IE5BTUU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0VJTDogc3RyaW5nID0gQ0VJTDtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBST1VORDogc3RyaW5nID0gUk9VTkQ7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRkxPT1I6IHN0cmluZyA9IEZMT09SO1xuXG4gIEBPcHRpb24oKVxuICBwcml2YXRlIG1pbkZyYWN0aW9uOiBudW1iZXI7XG4gIEBPcHRpb24oKVxuICBwcml2YXRlIG1heEZyYWN0aW9uOiBudW1iZXI7XG4gIEBPcHRpb24oJ3NlcGFyYXRvcicpXG4gIHByaXZhdGUgdXNlU2VwYXJhdG9yOiBib29sZWFuO1xuICBAT3B0aW9uKCdtb2RlJylcbiAgcHJpdmF0ZSByb3VuZGluZ01vZGU6IHN0cmluZzsgLy8gcm91bmQgZmxvb3IgY2VpbGluZyBkZWZhdWx0IGFzIGEgY2VpbGluZ1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKE5BTUUpO1xuXG4gICAgdGhpcy5zZXREZWZhdWx0VmFsdWVzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMucm91bmRpbmdNb2RlID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLnJvdW5kaW5nTW9kZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMucm91bmRpbmdNb2RlID0gUk9VTkQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZVNlcGFyYXRvciA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy51c2VTZXBhcmF0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnVzZVNlcGFyYXRvciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWNpbWFsQ291bnQobnVtOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBtYXRjaCA9ICgnJyArIG51bSkubWF0Y2goLyg/OlxcLihcXGQrKSk/KD86W2VFXShbKy1dP1xcZCspKT8kLyk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIC8vIE51bWJlciBvZiBkaWdpdHMgcmlnaHQgb2YgZGVjaW1hbCBwb2ludC5cbiAgICAgIChtYXRjaFsxXSA/IG1hdGNoWzFdLmxlbmd0aCA6IDApXG4gICAgICAvLyBBZGp1c3QgZm9yIHNjaWVudGlmaWMgbm90YXRpb24uXG4gICAgICAtIChtYXRjaFsyXSA/ICttYXRjaFsyXSA6IDApKTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlXG4gIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgb2Ygc2V0dGluZyBvcHRpb25zXG4gICAgdGhpcy5zZXREZWZhdWx0VmFsdWVzKCk7XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0KGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBsZXQgZm9ybWF0dGVkRGF0YSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICBsZXQgZmFjdG9yID0gbnVsbDtcbiAgICBpZiAodGhpcy5tYXhGcmFjdGlvbiAhPT0gbnVsbCAmJiB0aGlzLm1heEZyYWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZhY3RvciA9IE1hdGgucG93KDEwLCB0aGlzLm1heEZyYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluRnJhY3Rpb24gIT09IG51bGwgJiYgdGhpcy5taW5GcmFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmYWN0b3IgPSBNYXRoLnBvdygxMCwgdGhpcy5taW5GcmFjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKGZhY3RvciAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMucm91bmRpbmdNb2RlID09PSBDRUlMKSB7XG4gICAgICAgIGZvcm1hdHRlZERhdGEgPSAoTWF0aC5jZWlsKGRhdGEgKiBmYWN0b3IpIC8gZmFjdG9yKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnJvdW5kaW5nTW9kZSA9PT0gRkxPT1IpIHtcbiAgICAgICAgZm9ybWF0dGVkRGF0YSA9IChNYXRoLmZsb29yKGRhdGEgKiBmYWN0b3IpIC8gZmFjdG9yKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVmYXVsdCBhcyByb3VuZFxuICAgICAgICBmb3JtYXR0ZWREYXRhID0gKE1hdGgucm91bmQoZGF0YSAqIGZhY3RvcikgLyBmYWN0b3IpLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWluRnJhY3Rpb24gIT09IG51bGwgJiYgdGhpcy5taW5GcmFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgaWR4ID0gZm9ybWF0dGVkRGF0YS5pbmRleE9mKFwiLlwiKTtcbiAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICBsZXQgZGVjaW1hbCA9IGZvcm1hdHRlZERhdGEuc2xpY2UoaWR4ICsgMSwgZm9ybWF0dGVkRGF0YS5sZW5ndGgpO1xuXG4gICAgICAgIGlmIChkZWNpbWFsLmxlbmd0aCA8IHRoaXMubWluRnJhY3Rpb24pIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gZGVjaW1hbC5sZW5ndGg7IGkgPCB0aGlzLm1pbkZyYWN0aW9uOyBpKyspIHtcbiAgICAgICAgICAgIGRlY2ltYWwgKz0gXCIwXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIG5ldyBmcmFjdGlvblxuICAgICAgICBmb3JtYXR0ZWREYXRhID0gZm9ybWF0dGVkRGF0YS5zbGljZSgwLCBpZHgpICsgXCIuXCIgKyBkZWNpbWFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGRlY2ltYWwgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWluRnJhY3Rpb247IGkrKykge1xuICAgICAgICAgIGRlY2ltYWwgKz0gXCIwXCI7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXR0ZWREYXRhID0gZm9ybWF0dGVkRGF0YSArIFwiLlwiICsgZGVjaW1hbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy51c2VTZXBhcmF0b3IpIHtcbiAgICAgIGxldCBpZHggPSBmb3JtYXR0ZWREYXRhLmluZGV4T2YoXCIuXCIpO1xuICAgICAgbGV0IGludGVnZXIgPSBcIlwiO1xuICAgICAgbGV0IGZyYWN0aW9uID0gXCJcIjtcblxuICAgICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICAgIGludGVnZXIgPSBmb3JtYXR0ZWREYXRhLnN1YnN0cmluZygwLCBpZHgpO1xuICAgICAgICBmcmFjdGlvbiA9IGZvcm1hdHRlZERhdGEuc3Vic3RyaW5nKGlkeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlZ2VyID0gZm9ybWF0dGVkRGF0YTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNlcGFyYXRlZDogc3RyaW5nID0gXCJcIjtcbiAgICAgIGZvciAobGV0IGkgPSBpbnRlZ2VyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGxldCBqID0gaW50ZWdlci5sZW5ndGggLSAxIC0gaTtcbiAgICAgICAgXG4gICAgICAgIHNlcGFyYXRlZCA9IChpID4gMCAmJiBqICUgMyA9PT0gMiA/IFwiLFwiIDogXCJcIikgKyBpbnRlZ2VyW2ldICsgc2VwYXJhdGVkO1xuICAgICAgfVxuXG4gICAgICBmb3JtYXR0ZWREYXRhID0gc2VwYXJhdGVkICsgZnJhY3Rpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdHRlZERhdGE7XG4gIH1cblxuICBwdWJsaWMgcGFyc2UoZGF0YTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1xcLC9nLCBcIlwiKTtcblxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRhdGEpO1xuICB9XG5cbiAgcHVibGljIHBhcnNlVG9PcHRpb25zKGFyZ3M6IGFueVtdKTogYW55IHtcbiAgICBsZXQgbWluRnJhY3Rpb246IG51bWJlciA9IHVuZGVmaW5lZDtcbiAgICBsZXQgbWF4RnJhY3Rpb246IG51bWJlciA9IHVuZGVmaW5lZDtcbiAgICBsZXQgdXNlU2VwYXJhdG9yOiBib29sZWFuID0gdW5kZWZpbmVkO1xuICAgIGxldCByb3VuZGluZ01vZGU6IHN0cmluZyA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChhcmdzICE9PSBudWxsICYmIHR5cGVvZiBhcmdzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBtaW5GcmFjdGlvbiA9IGFyZ3NbMF07XG4gICAgICB9XG4gICAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICAgIG1heEZyYWN0aW9uID0gYXJnc1sxXTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdXNlU2VwYXJhdG9yID0gYXJnc1syXTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgcm91bmRpbmdNb2RlID0gYXJnc1szXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWluRnJhY3Rpb246IG1pbkZyYWN0aW9uLFxuICAgICAgbWF4RnJhY3Rpb246IG1heEZyYWN0aW9uLFxuICAgICAgbW9kZTogcm91bmRpbmdNb2RlLFxuICAgICAgc2VwYXJhdG9yOiB1c2VTZXBhcmF0b3JcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldE1pbkZyYWN0aW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWluRnJhY3Rpb247XG4gIH1cblxuICBwdWJsaWMgc2V0TWluRnJhY3Rpb24obWluRnJhY3Rpb246IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubWluRnJhY3Rpb24gPSBtaW5GcmFjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXhGcmFjdGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1heEZyYWN0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldE1heEZyYWN0aW9uKG1heEZyYWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1heEZyYWN0aW9uID0gbWF4RnJhY3Rpb247XG4gIH1cblxuICBwdWJsaWMgaXNVc2VTZXBhcmF0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNlU2VwYXJhdG9yO1xuICB9XG5cbiAgcHVibGljIHNldFVzZVNlcGFyYXRvcih1c2VTZXBhcmF0b3I6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnVzZVNlcGFyYXRvciA9IHVzZVNlcGFyYXRvcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3VuZGluZ01vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3VuZGluZ01vZGU7XG4gIH1cblxuICBwdWJsaWMgc2V0Um91bmRpbmdNb2RlKHJvdW5kaW5nTW9kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb3VuZGluZ01vZGUgPSByb3VuZGluZ01vZGU7XG4gIH1cbn1cbiJdfQ==