truly-ui
Version:
Web Components for Desktop Applications.
157 lines • 25.1 kB
JavaScript
import { CurrencyManager } from './currency.manager';
export class CurrencyService {
initialize() {
this.PER_AR_NUMBER.set('\u06F0', '0');
this.PER_AR_NUMBER.set('\u06F1', '1');
this.PER_AR_NUMBER.set('\u06F2', '2');
this.PER_AR_NUMBER.set('\u06F3', '3');
this.PER_AR_NUMBER.set('\u06F4', '4');
this.PER_AR_NUMBER.set('\u06F5', '5');
this.PER_AR_NUMBER.set('\u06F6', '6');
this.PER_AR_NUMBER.set('\u06F7', '7');
this.PER_AR_NUMBER.set('\u06F8', '8');
this.PER_AR_NUMBER.set('\u06F9', '9');
this.PER_AR_NUMBER.set('\u0660', '0');
this.PER_AR_NUMBER.set('\u0661', '1');
this.PER_AR_NUMBER.set('\u0662', '2');
this.PER_AR_NUMBER.set('\u0663', '3');
this.PER_AR_NUMBER.set('\u0664', '4');
this.PER_AR_NUMBER.set('\u0665', '5');
this.PER_AR_NUMBER.set('\u0666', '6');
this.PER_AR_NUMBER.set('\u0667', '7');
this.PER_AR_NUMBER.set('\u0668', '8');
this.PER_AR_NUMBER.set('\u0669', '9');
}
constructor(htmlInputElement, options) {
this.htmlInputElement = htmlInputElement;
this.options = options;
this.PER_AR_NUMBER = new Map();
this.inputManager = new CurrencyManager(htmlInputElement);
this.initialize();
}
addNumber(keyCode) {
if (!this.rawValue) {
this.rawValue = this.applyMask(false, '0');
}
const keyChar = String.fromCharCode(keyCode);
const selectionStart = this.inputSelection.selectionStart;
const selectionEnd = this.inputSelection.selectionEnd;
this.rawValue = this.rawValue.substring(0, selectionStart) + keyChar + this.rawValue.substring(selectionEnd, this.rawValue.length);
this.updateFieldValue(selectionStart + 1);
}
applyMask(isNumber, rawValue) {
const { allowNegative, decimal, precision, prefix, suffix, thousands, nullable } = this.options;
rawValue = isNumber ? Number(rawValue).toFixed(precision) : rawValue;
const onlyNumbers = rawValue.replace(/[^0-9\u0660-\u0669\u06F0-\u06F9]/g, '');
if (!onlyNumbers) {
return '';
}
let integerPart = onlyNumbers.slice(0, onlyNumbers.length - precision)
.replace(/^\u0660*/g, '')
.replace(/^\u06F0*/g, '')
.replace(/^0*/g, '')
.replace(/\B(?=([0-9\u0660-\u0669\u06F0-\u06F9]{3})+(?![0-9\u0660-\u0669\u06F0-\u06F9]))/g, thousands);
if (integerPart.startsWith(thousands)) {
integerPart = integerPart.substring(1);
}
if (integerPart === '') {
integerPart = '0';
}
let newRawValue = integerPart;
const decimalPart = onlyNumbers.slice(onlyNumbers.length - precision);
if (precision > 0) {
newRawValue += decimal + decimalPart;
}
const isZero = parseInt(integerPart, 10) === 0 && (parseInt(decimalPart, 10) === 0 || decimalPart === '');
const operator = (rawValue.indexOf('-') > -1 && allowNegative && !isZero) ? '-' : '';
return operator + prefix + newRawValue + suffix;
}
clearMask(rawValue) {
if (this.isNullable() && rawValue === '') {
return null;
}
let value = (rawValue || '0').replace(this.options.prefix, '').replace(this.options.suffix, '');
if (this.options.thousands) {
value = value.replace(new RegExp('\\' + this.options.thousands, 'g'), '');
}
if (this.options.decimal) {
value = value.replace(this.options.decimal, '.');
}
this.PER_AR_NUMBER.forEach((val, key) => {
const re = new RegExp(key, 'g');
value = value.replace(re, val);
});
return parseFloat(value);
}
changeToNegative() {
if (this.options.allowNegative && this.rawValue !== '' && this.rawValue.charAt(0) !== '-' && this.value !== 0) {
this.rawValue = '-' + this.rawValue;
}
}
changeToPositive() {
this.rawValue = this.rawValue.replace('-', '');
}
removeNumber(keyCode) {
if (this.isNullable() && this.value === 0) {
this.rawValue = null;
return;
}
let selectionEnd = this.inputSelection.selectionEnd;
let selectionStart = this.inputSelection.selectionStart;
if (selectionStart > this.rawValue.length - this.options.suffix.length) {
selectionEnd = this.rawValue.length - this.options.suffix.length;
selectionStart = this.rawValue.length - this.options.suffix.length;
}
let move = this.rawValue.substr(selectionStart - 1, 1).match(/\d/) ? 0 : -1;
if ((keyCode === 8 &&
selectionStart - 1 === 0 &&
!(this.rawValue.substr(selectionStart, 1).match(/\d/))) ||
((keyCode === 46 || keyCode === 63272) &&
selectionStart === 0 &&
!(this.rawValue.substr(selectionStart + 1, 1).match(/\d/)))) {
move = 1;
}
selectionEnd = keyCode === 46 || keyCode === 63272 ? selectionEnd + 1 : selectionEnd;
selectionStart = keyCode === 8 ? selectionStart - 1 : selectionStart;
this.rawValue = this.rawValue.substring(0, selectionStart) + this.rawValue.substring(selectionEnd, this.rawValue.length);
this.updateFieldValue(selectionStart + move);
}
updateFieldValue(selectionStart) {
const newRawValue = this.applyMask(false, this.rawValue || '');
selectionStart = selectionStart === undefined ? this.rawValue.length : selectionStart;
this.inputManager.updateValueAndCursor(newRawValue, this.rawValue.length, selectionStart);
}
updateOptions(options) {
const value = this.value;
this.options = options;
this.value = value;
}
prefixLength() {
return this.options.prefix.length;
}
isNullable() {
return this.options.nullable;
}
get canInputMoreNumbers() {
return this.inputManager.canInputMoreNumbers;
}
get inputSelection() {
return this.inputManager.inputSelection;
}
get rawValue() {
return this.inputManager.rawValue;
}
set rawValue(value) {
this.inputManager.rawValue = value;
}
get storedRawValue() {
return this.inputManager.storedRawValue;
}
get value() {
return this.clearMask(this.rawValue);
}
set value(value) {
this.rawValue = this.applyMask(true, '' + value);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2lucHV0L2RpcmVjdGl2ZXMvY3VycmVuY3kvY3VycmVuY3kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFJbkQsTUFBTSxPQUFPLGVBQWU7SUFLMUIsVUFBVTtRQUNSLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsYUFBYSxDQUFD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LElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q3VycmVuY3lNYW5hZ2VyfSBmcm9tICcuL2N1cnJlbmN5Lm1hbmFnZXInO1xuaW1wb3J0IHtDdXJyZW5jeUNvbmZpZ30gZnJvbSAnLi9jdXJyZW5jeS1tYXNrLmNvbmZpZyc7XG5cblxuZXhwb3J0IGNsYXNzIEN1cnJlbmN5U2VydmljZSB7XG4gIFBFUl9BUl9OVU1CRVI6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIHB1YmxpYyBpbnB1dE1hbmFnZXI6IEN1cnJlbmN5TWFuYWdlcjtcblxuICBpbml0aWFsaXplKCkge1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjAnLCAnMCcpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjEnLCAnMScpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjInLCAnMicpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjMnLCAnMycpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjQnLCAnNCcpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjUnLCAnNScpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjYnLCAnNicpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjcnLCAnNycpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjgnLCAnOCcpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjknLCAnOScpO1xuXG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2MCcsICcwJyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2MScsICcxJyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2MicsICcyJyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2MycsICczJyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2NCcsICc0Jyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2NScsICc1Jyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2NicsICc2Jyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2NycsICc3Jyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2OCcsICc4Jyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2OScsICc5Jyk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0bWxJbnB1dEVsZW1lbnQ6IGFueSwgcHJpdmF0ZSBvcHRpb25zOiBDdXJyZW5jeUNvbmZpZykge1xuICAgIHRoaXMuaW5wdXRNYW5hZ2VyID0gbmV3IEN1cnJlbmN5TWFuYWdlcihodG1sSW5wdXRFbGVtZW50KTtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGFkZE51bWJlcihrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmF3VmFsdWUpIHtcbiAgICAgIHRoaXMucmF3VmFsdWUgPSB0aGlzLmFwcGx5TWFzayhmYWxzZSwgJzAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXlDb2RlKTtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IHRoaXMuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhcnQ7XG4gICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gdGhpcy5pbnB1dFNlbGVjdGlvbi5zZWxlY3Rpb25FbmQ7XG4gICAgdGhpcy5yYXdWYWx1ZSA9IHRoaXMucmF3VmFsdWUuc3Vic3RyaW5nKDAsIHNlbGVjdGlvblN0YXJ0KSArIGtleUNoYXIgKyB0aGlzLnJhd1ZhbHVlLnN1YnN0cmluZyhzZWxlY3Rpb25FbmQsIHRoaXMucmF3VmFsdWUubGVuZ3RoKTtcbiAgICB0aGlzLnVwZGF0ZUZpZWxkVmFsdWUoc2VsZWN0aW9uU3RhcnQgKyAxKTtcbiAgfVxuXG4gIGFwcGx5TWFzayhpc051bWJlcjogYm9vbGVhbiwgcmF3VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qge2FsbG93TmVnYXRpdmUsIGRlY2ltYWwsIHByZWNpc2lvbiwgcHJlZml4LCBzdWZmaXgsIHRob3VzYW5kcywgbnVsbGFibGV9ID0gdGhpcy5vcHRpb25zO1xuICAgIHJhd1ZhbHVlID0gaXNOdW1iZXIgPyBOdW1iZXIocmF3VmFsdWUpLnRvRml4ZWQocHJlY2lzaW9uKSA6IHJhd1ZhbHVlO1xuICAgIGNvbnN0IG9ubHlOdW1iZXJzID0gcmF3VmFsdWUucmVwbGFjZSgvW14wLTlcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjldL2csICcnKTtcblxuICAgIGlmICghb25seU51bWJlcnMpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBsZXQgaW50ZWdlclBhcnQgPSBvbmx5TnVtYmVycy5zbGljZSgwLCBvbmx5TnVtYmVycy5sZW5ndGggLSBwcmVjaXNpb24pXG4gICAgICAucmVwbGFjZSgvXlxcdTA2NjAqL2csICcnKVxuICAgICAgLnJlcGxhY2UoL15cXHUwNkYwKi9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC9eMCovZywgJycpXG4gICAgICAucmVwbGFjZSgvXFxCKD89KFswLTlcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjldezN9KSsoPyFbMC05XFx1MDY2MC1cXHUwNjY5XFx1MDZGMC1cXHUwNkY5XSkpL2csIHRob3VzYW5kcyk7XG5cbiAgICBpZiAoaW50ZWdlclBhcnQuc3RhcnRzV2l0aCh0aG91c2FuZHMpKSB7XG4gICAgICBpbnRlZ2VyUGFydCA9IGludGVnZXJQYXJ0LnN1YnN0cmluZygxKTtcbiAgICB9XG5cblxuICAgIGlmIChpbnRlZ2VyUGFydCA9PT0gJycpIHtcbiAgICAgIGludGVnZXJQYXJ0ID0gJzAnO1xuICAgIH1cblxuICAgIGxldCBuZXdSYXdWYWx1ZSA9IGludGVnZXJQYXJ0O1xuICAgIGNvbnN0IGRlY2ltYWxQYXJ0ID0gb25seU51bWJlcnMuc2xpY2Uob25seU51bWJlcnMubGVuZ3RoIC0gcHJlY2lzaW9uKTtcblxuICAgIGlmIChwcmVjaXNpb24gPiAwKSB7XG4gICAgICBuZXdSYXdWYWx1ZSArPSBkZWNpbWFsICsgZGVjaW1hbFBhcnQ7XG4gICAgfVxuXG4gICAgY29uc3QgaXNaZXJvID0gcGFyc2VJbnQoaW50ZWdlclBhcnQsIDEwKSA9PT0gMCAmJiAocGFyc2VJbnQoZGVjaW1hbFBhcnQsIDEwKSA9PT0gMCB8fCBkZWNpbWFsUGFydCA9PT0gJycpO1xuICAgIGNvbnN0IG9wZXJhdG9yID0gKHJhd1ZhbHVlLmluZGV4T2YoJy0nKSA+IC0xICYmIGFsbG93TmVnYXRpdmUgJiYgIWlzWmVybykgPyAnLScgOiAnJztcbiAgICByZXR1cm4gb3BlcmF0b3IgKyBwcmVmaXggKyBuZXdSYXdWYWx1ZSArIHN1ZmZpeDtcbiAgfVxuXG4gIGNsZWFyTWFzayhyYXdWYWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pc051bGxhYmxlKCkgJiYgcmF3VmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgdmFsdWUgPSAocmF3VmFsdWUgfHwgJzAnKS5yZXBsYWNlKHRoaXMub3B0aW9ucy5wcmVmaXgsICcnKS5yZXBsYWNlKHRoaXMub3B0aW9ucy5zdWZmaXgsICcnKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudGhvdXNhbmRzKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXCcgKyB0aGlzLm9wdGlvbnMudGhvdXNhbmRzLCAnZycpLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWNpbWFsKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UodGhpcy5vcHRpb25zLmRlY2ltYWwsICcuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLmZvckVhY2goKHZhbDogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGtleSwgJ2cnKTtcbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShyZSwgdmFsKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gIH1cblxuICBjaGFuZ2VUb05lZ2F0aXZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dOZWdhdGl2ZSAmJiB0aGlzLnJhd1ZhbHVlICE9PSAnJyAmJiB0aGlzLnJhd1ZhbHVlLmNoYXJBdCgwKSAhPT0gJy0nICYmIHRoaXMudmFsdWUgIT09IDApIHtcbiAgICAgIHRoaXMucmF3VmFsdWUgPSAnLScgKyB0aGlzLnJhd1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRvUG9zaXRpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5yYXdWYWx1ZSA9IHRoaXMucmF3VmFsdWUucmVwbGFjZSgnLScsICcnKTtcbiAgfVxuXG4gIHJlbW92ZU51bWJlcihrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc051bGxhYmxlKCkgJiYgdGhpcy52YWx1ZSA9PT0gMCkge1xuICAgICAgdGhpcy5yYXdWYWx1ZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHNlbGVjdGlvbkVuZCA9IHRoaXMuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uRW5kO1xuICAgIGxldCBzZWxlY3Rpb25TdGFydCA9IHRoaXMuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPiB0aGlzLnJhd1ZhbHVlLmxlbmd0aCAtIHRoaXMub3B0aW9ucy5zdWZmaXgubGVuZ3RoKSB7XG4gICAgICBzZWxlY3Rpb25FbmQgPSB0aGlzLnJhd1ZhbHVlLmxlbmd0aCAtIHRoaXMub3B0aW9ucy5zdWZmaXgubGVuZ3RoO1xuICAgICAgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLnJhd1ZhbHVlLmxlbmd0aCAtIHRoaXMub3B0aW9ucy5zdWZmaXgubGVuZ3RoO1xuICAgIH1cblxuICAgIGxldCBtb3ZlID0gdGhpcy5yYXdWYWx1ZS5zdWJzdHIoc2VsZWN0aW9uU3RhcnQgLSAxLCAxKS5tYXRjaCgvXFxkLykgPyAwIDogLTE7XG4gICAgaWYgKChcbiAgICAgICAga2V5Q29kZSA9PT0gOCAmJlxuICAgICAgICBzZWxlY3Rpb25TdGFydCAtIDEgPT09IDAgJiZcbiAgICAgICAgISh0aGlzLnJhd1ZhbHVlLnN1YnN0cihzZWxlY3Rpb25TdGFydCwgMSkubWF0Y2goL1xcZC8pKVxuICAgICAgKSB8fFxuICAgICAgKFxuICAgICAgICAoa2V5Q29kZSA9PT0gNDYgfHwga2V5Q29kZSA9PT0gNjMyNzIpICYmXG4gICAgICAgIHNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICEodGhpcy5yYXdWYWx1ZS5zdWJzdHIoc2VsZWN0aW9uU3RhcnQgKyAxLCAxKS5tYXRjaCgvXFxkLykpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBtb3ZlID0gMTtcbiAgICB9XG4gICAgc2VsZWN0aW9uRW5kID0ga2V5Q29kZSA9PT0gNDYgfHwga2V5Q29kZSA9PT0gNjMyNzIgPyBzZWxlY3Rpb25FbmQgKyAxIDogc2VsZWN0aW9uRW5kO1xuICAgIHNlbGVjdGlvblN0YXJ0ID0ga2V5Q29kZSA9PT0gOCA/IHNlbGVjdGlvblN0YXJ0IC0gMSA6IHNlbGVjdGlvblN0YXJ0O1xuICAgIHRoaXMucmF3VmFsdWUgPSB0aGlzLnJhd1ZhbHVlLnN1YnN0cmluZygwLCBzZWxlY3Rpb25TdGFydCkgKyB0aGlzLnJhd1ZhbHVlLnN1YnN0cmluZyhzZWxlY3Rpb25FbmQsIHRoaXMucmF3VmFsdWUubGVuZ3RoKTtcbiAgICB0aGlzLnVwZGF0ZUZpZWxkVmFsdWUoc2VsZWN0aW9uU3RhcnQgKyBtb3ZlKTtcbiAgfVxuXG4gIHVwZGF0ZUZpZWxkVmFsdWUoc2VsZWN0aW9uU3RhcnQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdSYXdWYWx1ZSA9IHRoaXMuYXBwbHlNYXNrKGZhbHNlLCB0aGlzLnJhd1ZhbHVlIHx8ICcnKTtcbiAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0ID09PSB1bmRlZmluZWQgPyB0aGlzLnJhd1ZhbHVlLmxlbmd0aCA6IHNlbGVjdGlvblN0YXJ0O1xuICAgIHRoaXMuaW5wdXRNYW5hZ2VyLnVwZGF0ZVZhbHVlQW5kQ3Vyc29yKG5ld1Jhd1ZhbHVlLCB0aGlzLnJhd1ZhbHVlLmxlbmd0aCwgc2VsZWN0aW9uU3RhcnQpO1xuICB9XG5cbiAgdXBkYXRlT3B0aW9ucyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZTogbnVtYmVyID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByZWZpeExlbmd0aCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucHJlZml4Lmxlbmd0aDtcbiAgfVxuXG4gIGlzTnVsbGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5udWxsYWJsZTtcbiAgfVxuXG4gIGdldCBjYW5JbnB1dE1vcmVOdW1iZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlucHV0TWFuYWdlci5jYW5JbnB1dE1vcmVOdW1iZXJzO1xuICB9XG5cbiAgZ2V0IGlucHV0U2VsZWN0aW9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRNYW5hZ2VyLmlucHV0U2VsZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHJhd1ZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRNYW5hZ2VyLnJhd1ZhbHVlO1xuICB9XG5cbiAgc2V0IHJhd1ZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlucHV0TWFuYWdlci5yYXdWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHN0b3JlZFJhd1ZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRNYW5hZ2VyLnN0b3JlZFJhd1ZhbHVlO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuY2xlYXJNYXNrKHRoaXMucmF3VmFsdWUpO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnJhd1ZhbHVlID0gdGhpcy5hcHBseU1hc2sodHJ1ZSwgJycgKyB2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==