224 lines
30 KiB
JavaScript
224 lines
30 KiB
JavaScript
import _classCallCheck from "@babel/runtime-corejs3/helpers/classCallCheck";
|
|
import _createClass from "@babel/runtime-corejs3/helpers/createClass";
|
|
import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
|
|
var _SfDate;
|
|
import "core-js/modules/es.error.cause.js";
|
|
import "core-js/modules/es.array.join.js";
|
|
import "core-js/modules/es.regexp.exec.js";
|
|
import "core-js/modules/es.string.match.js";
|
|
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
|
import _parseInt from "@babel/runtime-corejs3/core-js-stable/parse-int";
|
|
/**
|
|
*
|
|
*/
|
|
import { zeroPad } from './util/formatter';
|
|
|
|
/** @private **/
|
|
function createLiteralBuilder(literal) {
|
|
return function (num) {
|
|
var _context;
|
|
return new SfDate(_concatInstanceProperty(_context = "".concat(literal, ":")).call(_context, String(num)));
|
|
}; // eslint-disable-line no-use-before-define
|
|
}
|
|
|
|
/**
|
|
* A date object to keep Salesforce date literal
|
|
*
|
|
* @class
|
|
* @constructor
|
|
* @see http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_select_dateformats.htm
|
|
*/
|
|
export var SfDate = /*#__PURE__*/function () {
|
|
/**
|
|
*
|
|
*/
|
|
function SfDate(literal) {
|
|
_classCallCheck(this, SfDate);
|
|
_defineProperty(this, "toString", this.toJSON);
|
|
this._literal = literal;
|
|
}
|
|
|
|
/**
|
|
* Returns literal when converted to string
|
|
*/
|
|
return _createClass(SfDate, [{
|
|
key: "toJSON",
|
|
value: function toJSON() {
|
|
return this._literal;
|
|
}
|
|
}], [{
|
|
key: "toDateLiteral",
|
|
value:
|
|
/**
|
|
* Convert JavaScript date object to ISO8601 Date format (e.g. 2012-10-31)
|
|
*
|
|
* @param {String|Number|Date} date - Input date
|
|
* @returns {SfDate} - Salesforce date literal with ISO8601 date format
|
|
*/
|
|
function toDateLiteral(date) {
|
|
var _date;
|
|
if (typeof date === 'number') {
|
|
_date = new Date(date);
|
|
} else if (typeof date === 'string') {
|
|
_date = SfDate.parseDate(date);
|
|
} else {
|
|
_date = date;
|
|
}
|
|
var yy = _date.getFullYear();
|
|
var mm = _date.getMonth() + 1;
|
|
var dd = _date.getDate();
|
|
var dstr = [yy, zeroPad(mm), zeroPad(dd)].join('-');
|
|
return new SfDate(dstr);
|
|
}
|
|
|
|
/**
|
|
* Convert JavaScript date object to ISO8601 DateTime format
|
|
* (e.g. 2012-10-31T12:34:56Z)
|
|
*/
|
|
}, {
|
|
key: "toDateTimeLiteral",
|
|
value: function toDateTimeLiteral(date) {
|
|
var _context2;
|
|
var _date;
|
|
if (typeof date === 'number') {
|
|
_date = new Date(date);
|
|
} else if (typeof date === 'string') {
|
|
_date = SfDate.parseDate(date);
|
|
} else {
|
|
_date = date;
|
|
}
|
|
var yy = _date.getUTCFullYear();
|
|
var mm = _date.getUTCMonth() + 1;
|
|
var dd = _date.getUTCDate();
|
|
var hh = _date.getUTCHours();
|
|
var mi = _date.getUTCMinutes();
|
|
var ss = _date.getUTCSeconds();
|
|
var dtstr = _concatInstanceProperty(_context2 = "".concat([yy, zeroPad(mm), zeroPad(dd)].join('-'), "T")).call(_context2, [zeroPad(hh), zeroPad(mi), zeroPad(ss)].join(':'), "Z");
|
|
return new SfDate(dtstr);
|
|
}
|
|
|
|
/**
|
|
* Convert JavaScript date object to ISO8601 time format
|
|
* (e.g. 12:34:56.789Z)
|
|
*/
|
|
}, {
|
|
key: "toTimeLiteral",
|
|
value: function toTimeLiteral(time) {
|
|
var _context3, _context4, _context5;
|
|
var _date = new Date(0);
|
|
if (typeof time === 'string') {
|
|
_date = SfDate.parseTime(time);
|
|
} else if (typeof time === 'number') {
|
|
_date = new Date(time);
|
|
} else {
|
|
_date = time;
|
|
}
|
|
var hh = _date.getUTCHours();
|
|
var mi = _date.getUTCMinutes();
|
|
var ss = _date.getUTCSeconds();
|
|
var sss = _date.getUTCMilliseconds();
|
|
var tstr = _concatInstanceProperty(_context3 = _concatInstanceProperty(_context4 = _concatInstanceProperty(_context5 = "".concat(zeroPad(hh), ":")).call(_context5, zeroPad(mi), ":")).call(_context4, zeroPad(ss), ".")).call(_context3, zeroPad(sss, 3), "Z");
|
|
return new SfDate(tstr);
|
|
}
|
|
|
|
/**
|
|
* Parse IS08601 date(time) formatted string and return date instance
|
|
*/
|
|
}, {
|
|
key: "parseDate",
|
|
value: function parseDate(str) {
|
|
var d = new Date();
|
|
var regexp = /^([\d]{4})-?([\d]{2})-?([\d]{2})(T([\d]{2}):?([\d]{2}):?([\d]{2})(.([\d]{3}))?(Z|([+-])([\d]{2}):?([\d]{2})))?$/;
|
|
var m = str.match(regexp);
|
|
if (m) {
|
|
d = new Date(0);
|
|
if (!m[4]) {
|
|
d.setFullYear(_parseInt(m[1], 10));
|
|
d.setDate(_parseInt(m[3], 10));
|
|
d.setMonth(_parseInt(m[2], 10) - 1);
|
|
d.setHours(0);
|
|
d.setMinutes(0);
|
|
d.setSeconds(0);
|
|
d.setMilliseconds(0);
|
|
} else {
|
|
d.setUTCFullYear(_parseInt(m[1], 10));
|
|
d.setUTCDate(_parseInt(m[3], 10));
|
|
d.setUTCMonth(_parseInt(m[2], 10) - 1);
|
|
d.setUTCHours(_parseInt(m[5], 10));
|
|
d.setUTCMinutes(_parseInt(m[6], 10));
|
|
d.setUTCSeconds(_parseInt(m[7], 10));
|
|
d.setUTCMilliseconds(_parseInt(m[9] || '0', 10));
|
|
if (m[10] && m[10] !== 'Z') {
|
|
var offset = _parseInt(m[12], 10) * 60 + _parseInt(m[13], 10);
|
|
d.setTime((m[11] === '+' ? -1 : 1) * offset * 60 * 1000 + d.getTime());
|
|
}
|
|
}
|
|
return d;
|
|
}
|
|
throw new Error("Invalid date format is specified : ".concat(str));
|
|
}
|
|
|
|
/**
|
|
* Parse IS08601 time formatted string and convert to parse string
|
|
*/
|
|
}, {
|
|
key: "parseTime",
|
|
value: function parseTime(str) {
|
|
var regexp = /^([\d]{2}):?([\d]{2}):?([\d]{2})(.([\d]{3}))?Z?$/;
|
|
var m = str.match(regexp);
|
|
if (m) {
|
|
var d = new Date(0);
|
|
var hh = _parseInt(m[1], 10);
|
|
var mi = _parseInt(m[2], 10);
|
|
var ss = _parseInt(m[3], 10);
|
|
var sss = _parseInt(m[5] || '0', 10);
|
|
d.setUTCHours(hh);
|
|
d.setUTCMinutes(mi);
|
|
d.setUTCSeconds(ss);
|
|
d.setUTCMilliseconds(sss);
|
|
return d;
|
|
}
|
|
throw new Error("Invalid time format is specified : ".concat(str));
|
|
}
|
|
}]);
|
|
}();
|
|
_SfDate = SfDate;
|
|
_defineProperty(SfDate, "YESTERDAY", new _SfDate('YESTERDAY'));
|
|
_defineProperty(SfDate, "TODAY", new _SfDate('TODAY'));
|
|
_defineProperty(SfDate, "TOMORROW", new _SfDate('TOMORROW'));
|
|
_defineProperty(SfDate, "LAST_WEEK", new _SfDate('LAST_WEEK'));
|
|
_defineProperty(SfDate, "THIS_WEEK", new _SfDate('THIS_WEEK'));
|
|
_defineProperty(SfDate, "NEXT_WEEK", new _SfDate('NEXT_WEEK'));
|
|
_defineProperty(SfDate, "LAST_MONTH", new _SfDate('LAST_MONTH'));
|
|
_defineProperty(SfDate, "THIS_MONTH", new _SfDate('THIS_MONTH'));
|
|
_defineProperty(SfDate, "NEXT_MONTH", new _SfDate('NEXT_MONTH'));
|
|
_defineProperty(SfDate, "LAST_90_DAYS", new _SfDate('LAST_90_DAYS'));
|
|
_defineProperty(SfDate, "NEXT_90_DAYS", new _SfDate('NEXT_90_DAYS'));
|
|
_defineProperty(SfDate, "LAST_N_DAYS", createLiteralBuilder('LAST_N_DAYS'));
|
|
_defineProperty(SfDate, "NEXT_N_DAYS", createLiteralBuilder('NEXT_N_DAYS'));
|
|
_defineProperty(SfDate, "NEXT_N_WEEKS", createLiteralBuilder('NEXT_N_WEEKS'));
|
|
_defineProperty(SfDate, "LAST_N_WEEKS", createLiteralBuilder('LAST_N_WEEKS'));
|
|
_defineProperty(SfDate, "NEXT_N_MONTHS", createLiteralBuilder('NEXT_N_MONTHS'));
|
|
_defineProperty(SfDate, "LAST_N_MONTHS", createLiteralBuilder('LAST_N_MONTHS'));
|
|
_defineProperty(SfDate, "THIS_QUARTER", new _SfDate('THIS_QUARTER'));
|
|
_defineProperty(SfDate, "LAST_QUARTER", new _SfDate('LAST_QUARTER'));
|
|
_defineProperty(SfDate, "NEXT_QUARTER", new _SfDate('NEXT_QUARTER'));
|
|
_defineProperty(SfDate, "NEXT_N_QUARTERS", createLiteralBuilder('NEXT_N_QUARTERS'));
|
|
_defineProperty(SfDate, "LAST_N_QUARTERS", createLiteralBuilder('LAST_N_QUARTERS'));
|
|
_defineProperty(SfDate, "THIS_YEAR", new _SfDate('THIS_YEAR'));
|
|
_defineProperty(SfDate, "LAST_YEAR", new _SfDate('LAST_YEAR'));
|
|
_defineProperty(SfDate, "NEXT_YEAR", new _SfDate('NEXT_YEAR'));
|
|
_defineProperty(SfDate, "NEXT_N_YEARS", createLiteralBuilder('NEXT_N_YEARS'));
|
|
_defineProperty(SfDate, "LAST_N_YEARS", createLiteralBuilder('LAST_N_YEARS'));
|
|
_defineProperty(SfDate, "THIS_FISCAL_QUARTER", new _SfDate('THIS_FISCAL_QUARTER'));
|
|
_defineProperty(SfDate, "LAST_FISCAL_QUARTER", new _SfDate('LAST_FISCAL_QUARTER'));
|
|
_defineProperty(SfDate, "NEXT_FISCAL_QUARTER", new _SfDate('NEXT_FISCAL_QUARTER'));
|
|
_defineProperty(SfDate, "THIS_FISCAL_YEAR", new _SfDate('THIS_FISCAL_YEAR'));
|
|
_defineProperty(SfDate, "NEXT_N_FISCAL_QUARTERS", createLiteralBuilder('NEXT_N_FISCAL_QUARTERS'));
|
|
_defineProperty(SfDate, "LAST_N_FISCAL_QUARTERS", createLiteralBuilder('LAST_N_FISCAL_QUARTERS'));
|
|
_defineProperty(SfDate, "LAST_FISCAL_YEAR", new _SfDate('LAST_FISCAL_YEAR'));
|
|
_defineProperty(SfDate, "NEXT_FISCAL_YEAR", new _SfDate('NEXT_FISCAL_YEAR'));
|
|
_defineProperty(SfDate, "NEXT_N_FISCAL_YEARS", createLiteralBuilder('NEXT_N_FISCAL_YEARS'));
|
|
_defineProperty(SfDate, "LAST_N_FISCAL_YEARS", createLiteralBuilder('LAST_N_FISCAL_YEARS'));
|
|
export default SfDate;
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ6ZXJvUGFkIiwiY3JlYXRlTGl0ZXJhbEJ1aWxkZXIiLCJsaXRlcmFsIiwibnVtIiwiX2NvbnRleHQiLCJTZkRhdGUiLCJfY29uY2F0SW5zdGFuY2VQcm9wZXJ0eSIsImNvbmNhdCIsImNhbGwiLCJTdHJpbmciLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJ0b0pTT04iLCJfbGl0ZXJhbCIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwidG9EYXRlTGl0ZXJhbCIsImRhdGUiLCJfZGF0ZSIsIkRhdGUiLCJwYXJzZURhdGUiLCJ5eSIsImdldEZ1bGxZZWFyIiwibW0iLCJnZXRNb250aCIsImRkIiwiZ2V0RGF0ZSIsImRzdHIiLCJqb2luIiwidG9EYXRlVGltZUxpdGVyYWwiLCJfY29udGV4dDIiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImhoIiwiZ2V0VVRDSG91cnMiLCJtaSIsImdldFVUQ01pbnV0ZXMiLCJzcyIsImdldFVUQ1NlY29uZHMiLCJkdHN0ciIsInRvVGltZUxpdGVyYWwiLCJ0aW1lIiwiX2NvbnRleHQzIiwiX2NvbnRleHQ0IiwiX2NvbnRleHQ1IiwicGFyc2VUaW1lIiwic3NzIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwidHN0ciIsInN0ciIsImQiLCJyZWdleHAiLCJtIiwibWF0Y2giLCJzZXRGdWxsWWVhciIsIl9wYXJzZUludCIsInNldERhdGUiLCJzZXRNb250aCIsInNldEhvdXJzIiwic2V0TWludXRlcyIsInNldFNlY29uZHMiLCJzZXRNaWxsaXNlY29uZHMiLCJzZXRVVENGdWxsWWVhciIsInNldFVUQ0RhdGUiLCJzZXRVVENNb250aCIsInNldFVUQ0hvdXJzIiwic2V0VVRDTWludXRlcyIsInNldFVUQ1NlY29uZHMiLCJzZXRVVENNaWxsaXNlY29uZHMiLCJvZmZzZXQiLCJzZXRUaW1lIiwiZ2V0VGltZSIsIkVycm9yIiwiX1NmRGF0ZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqL1xuaW1wb3J0IHsgemVyb1BhZCB9IGZyb20gJy4vdXRpbC9mb3JtYXR0ZXInO1xuXG4vKiogQHByaXZhdGUgKiovXG5mdW5jdGlvbiBjcmVhdGVMaXRlcmFsQnVpbGRlcihsaXRlcmFsOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChudW06IG51bWJlcikgPT4gbmV3IFNmRGF0ZShgJHtsaXRlcmFsfToke1N0cmluZyhudW0pfWApOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG59XG5cbi8qKlxuICogQSBkYXRlIG9iamVjdCB0byBrZWVwIFNhbGVzZm9yY2UgZGF0ZSBsaXRlcmFsXG4gKlxuICogQGNsYXNzXG4gKiBAY29uc3RydWN0b3JcbiAqIEBzZWUgaHR0cDovL3d3dy5zYWxlc2ZvcmNlLmNvbS91cy9kZXZlbG9wZXIvZG9jcy9zb3FsX3Nvc2wvQ29udGVudC9zZm9yY2VfYXBpX2NhbGxzX3NvcWxfc2VsZWN0X2RhdGVmb3JtYXRzLmh0bVxuICovXG5leHBvcnQgY2xhc3MgU2ZEYXRlIHtcbiAgcHJpdmF0ZSBfbGl0ZXJhbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IobGl0ZXJhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbGl0ZXJhbCA9IGxpdGVyYWw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBsaXRlcmFsIHdoZW4gY29udmVydGVkIHRvIHN0cmluZ1xuICAgKi9cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFsO1xuICB9XG5cbiAgdG9TdHJpbmcgPSB0aGlzLnRvSlNPTjtcblxuICAvKipcbiAgICogQ29udmVydCBKYXZhU2NyaXB0IGRhdGUgb2JqZWN0IHRvIElTTzg2MDEgRGF0ZSBmb3JtYXQgKGUuZy4gMjAxMi0xMC0zMSlcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfERhdGV9IGRhdGUgLSBJbnB1dCBkYXRlXG4gICAqIEByZXR1cm5zIHtTZkRhdGV9IC0gU2FsZXNmb3JjZSBkYXRlIGxpdGVyYWwgd2l0aCBJU084NjAxIGRhdGUgZm9ybWF0XG4gICAqL1xuICBzdGF0aWMgdG9EYXRlTGl0ZXJhbChkYXRlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlKSB7XG4gICAgbGV0IF9kYXRlOiBEYXRlO1xuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIF9kYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIF9kYXRlID0gU2ZEYXRlLnBhcnNlRGF0ZShkYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2RhdGUgPSBkYXRlO1xuICAgIH1cbiAgICBjb25zdCB5eSA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbW0gPSBfZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICBjb25zdCBkZCA9IF9kYXRlLmdldERhdGUoKTtcbiAgICBjb25zdCBkc3RyID0gW3l5LCB6ZXJvUGFkKG1tKSwgemVyb1BhZChkZCldLmpvaW4oJy0nKTtcbiAgICByZXR1cm4gbmV3IFNmRGF0ZShkc3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IEphdmFTY3JpcHQgZGF0ZSBvYmplY3QgdG8gSVNPODYwMSBEYXRlVGltZSBmb3JtYXRcbiAgICogKGUuZy4gMjAxMi0xMC0zMVQxMjozNDo1NlopXG4gICAqL1xuICBzdGF0aWMgdG9EYXRlVGltZUxpdGVyYWwoZGF0ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSkge1xuICAgIGxldCBfZGF0ZTogRGF0ZTtcbiAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgICBfZGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBfZGF0ZSA9IFNmRGF0ZS5wYXJzZURhdGUoZGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9kYXRlID0gZGF0ZTtcbiAgICB9XG4gICAgY29uc3QgeXkgPSBfZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIGNvbnN0IG1tID0gX2RhdGUuZ2V0VVRDTW9udGgoKSArIDE7XG4gICAgY29uc3QgZGQgPSBfZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgY29uc3QgaGggPSBfZGF0ZS5nZXRVVENIb3VycygpO1xuICAgIGNvbnN0IG1pID0gX2RhdGUuZ2V0VVRDTWludXRlcygpO1xuICAgIGNvbnN0IHNzID0gX2RhdGUuZ2V0VVRDU2Vjb25kcygpO1xuICAgIGNvbnN0IGR0c3RyID0gYCR7W3l5LCB6ZXJvUGFkKG1tKSwgemVyb1BhZChkZCldLmpvaW4oJy0nKX1UJHtbXG4gICAgICB6ZXJvUGFkKGhoKSxcbiAgICAgIHplcm9QYWQobWkpLFxuICAgICAgemVyb1BhZChzcyksXG4gICAgXS5qb2luKCc6Jyl9WmA7XG4gICAgcmV0dXJuIG5ldyBTZkRhdGUoZHRzdHIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgSmF2YVNjcmlwdCBkYXRlIG9iamVjdCB0byBJU084NjAxIHRpbWUgZm9ybWF0XG4gICAqIChlLmcuIDEyOjM0OjU2Ljc4OVopXG4gICAqL1xuICBzdGF0aWMgdG9UaW1lTGl0ZXJhbCh0aW1lOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlKSB7XG4gICAgbGV0IF9kYXRlID0gbmV3IERhdGUoMCk7XG4gICAgaWYgKHR5cGVvZiB0aW1lID09PSAnc3RyaW5nJykge1xuICAgICAgX2RhdGUgPSBTZkRhdGUucGFyc2VUaW1lKHRpbWUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRpbWUgPT09ICdudW1iZXInKSB7XG4gICAgICBfZGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfZGF0ZSA9IHRpbWU7XG4gICAgfVxuICAgIGNvbnN0IGhoID0gX2RhdGUuZ2V0VVRDSG91cnMoKTtcbiAgICBjb25zdCBtaSA9IF9kYXRlLmdldFVUQ01pbnV0ZXMoKTtcbiAgICBjb25zdCBzcyA9IF9kYXRlLmdldFVUQ1NlY29uZHMoKTtcbiAgICBjb25zdCBzc3MgPSBfZGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICBjb25zdCB0c3RyID0gYCR7emVyb1BhZChoaCl9OiR7emVyb1BhZChtaSl9OiR7emVyb1BhZChzcyl9LiR7emVyb1BhZChcbiAgICAgIHNzcyxcbiAgICAgIDMsXG4gICAgKX1aYDtcbiAgICByZXR1cm4gbmV3IFNmRGF0ZSh0c3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBJUzA4NjAxIGRhdGUodGltZSkgZm9ybWF0dGVkIHN0cmluZyBhbmQgcmV0dXJuIGRhdGUgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBwYXJzZURhdGUoc3RyOiBzdHJpbmcpOiBEYXRlIHtcbiAgICBsZXQgZCA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgcmVnZXhwID0gL14oW1xcZF17NH0pLT8oW1xcZF17Mn0pLT8oW1xcZF17Mn0pKFQoW1xcZF17Mn0pOj8oW1xcZF17Mn0pOj8oW1xcZF17Mn0pKC4oW1xcZF17M30pKT8oWnwoWystXSkoW1xcZF17Mn0pOj8oW1xcZF17Mn0pKSk/JC87XG4gICAgY29uc3QgbSA9IHN0ci5tYXRjaChyZWdleHApO1xuICAgIGlmIChtKSB7XG4gICAgICBkID0gbmV3IERhdGUoMCk7XG4gICAgICBpZiAoIW1bNF0pIHtcbiAgICAgICAgZC5zZXRGdWxsWWVhcihwYXJzZUludChtWzFdLCAxMCkpO1xuICAgICAgICBkLnNldERhdGUocGFyc2VJbnQobVszXSwgMTApKTtcbiAgICAgICAgZC5zZXRNb250aChwYXJzZUludChtWzJdLCAxMCkgLSAxKTtcbiAgICAgICAgZC5zZXRIb3VycygwKTtcbiAgICAgICAgZC5zZXRNaW51dGVzKDApO1xuICAgICAgICBkLnNldFNlY29uZHMoMCk7XG4gICAgICAgIGQuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZC5zZXRVVENGdWxsWWVhcihwYXJzZUludChtWzFdLCAxMCkpO1xuICAgICAgICBkLnNldFVUQ0RhdGUocGFyc2VJbnQobVszXSwgMTApKTtcbiAgICAgICAgZC5zZXRVVENNb250aChwYXJzZUludChtWzJdLCAxMCkgLSAxKTtcbiAgICAgICAgZC5zZXRVVENIb3VycyhwYXJzZUludChtWzVdLCAxMCkpO1xuICAgICAgICBkLnNldFVUQ01pbnV0ZXMocGFyc2VJbnQobVs2XSwgMTApKTtcbiAgICAgICAgZC5zZXRVVENTZWNvbmRzKHBhcnNlSW50KG1bN10sIDEwKSk7XG4gICAgICAgIGQuc2V0VVRDTWlsbGlzZWNvbmRzKHBhcnNlSW50KG1bOV0gfHwgJzAnLCAxMCkpO1xuICAgICAgICBpZiAobVsxMF0gJiYgbVsxMF0gIT09ICdaJykge1xuICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHBhcnNlSW50KG1bMTJdLCAxMCkgKiA2MCArIHBhcnNlSW50KG1bMTNdLCAxMCk7XG4gICAgICAgICAgZC5zZXRUaW1lKFxuICAgICAgICAgICAgKG1bMTFdID09PSAnKycgPyAtMSA6IDEpICogb2Zmc2V0ICogNjAgKiAxMDAwICsgZC5nZXRUaW1lKCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkYXRlIGZvcm1hdCBpcyBzcGVjaWZpZWQgOiAke3N0cn1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBJUzA4NjAxIHRpbWUgZm9ybWF0dGVkIHN0cmluZyBhbmQgY29udmVydCB0byBwYXJzZSBzdHJpbmdcbiAgICovXG4gIHN0YXRpYyBwYXJzZVRpbWUoc3RyOiBzdHJpbmcpOiBEYXRlIHtcbiAgICBjb25zdCByZWdleHAgPSAvXihbXFxkXXsyfSk6PyhbXFxkXXsyfSk6PyhbXFxkXXsyfSkoLihbXFxkXXszfSkpP1o/JC87XG4gICAgY29uc3QgbSA9IHN0ci5tYXRjaChyZWdleHApO1xuICAgIGlmIChtKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUoMCk7XG4gICAgICBjb25zdCBoaCA9IHBhcnNlSW50KG1bMV0sIDEwKTtcbiAgICAgIGNvbnN0IG1pID0gcGFyc2VJbnQobVsyXSwgMTApO1xuICAgICAgY29uc3Qgc3MgPSBwYXJzZUludChtWzNdLCAxMCk7XG4gICAgICBjb25zdCBzc3MgPSBwYXJzZUludChtWzVdIHx8ICcwJywgMTApO1xuICAgICAgZC5zZXRVVENIb3VycyhoaCk7XG4gICAgICBkLnNldFVUQ01pbnV0ZXMobWkpO1xuICAgICAgZC5zZXRVVENTZWNvbmRzKHNzKTtcbiAgICAgIGQuc2V0VVRDTWlsbGlzZWNvbmRzKHNzcyk7XG4gICAgICByZXR1cm4gZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRpbWUgZm9ybWF0IGlzIHNwZWNpZmllZCA6ICR7c3RyfWApO1xuICB9XG5cbiAgc3RhdGljIFlFU1RFUkRBWSA9IG5ldyBTZkRhdGUoJ1lFU1RFUkRBWScpO1xuICBzdGF0aWMgVE9EQVkgPSBuZXcgU2ZEYXRlKCdUT0RBWScpO1xuICBzdGF0aWMgVE9NT1JST1cgPSBuZXcgU2ZEYXRlKCdUT01PUlJPVycpO1xuICBzdGF0aWMgTEFTVF9XRUVLID0gbmV3IFNmRGF0ZSgnTEFTVF9XRUVLJyk7XG4gIHN0YXRpYyBUSElTX1dFRUsgPSBuZXcgU2ZEYXRlKCdUSElTX1dFRUsnKTtcbiAgc3RhdGljIE5FWFRfV0VFSyA9IG5ldyBTZkRhdGUoJ05FWFRfV0VFSycpO1xuICBzdGF0aWMgTEFTVF9NT05USCA9IG5ldyBTZkRhdGUoJ0xBU1RfTU9OVEgnKTtcbiAgc3RhdGljIFRISVNfTU9OVEggPSBuZXcgU2ZEYXRlKCdUSElTX01PTlRIJyk7XG4gIHN0YXRpYyBORVhUX01PTlRIID0gbmV3IFNmRGF0ZSgnTkVYVF9NT05USCcpO1xuICBzdGF0aWMgTEFTVF85MF9EQVlTID0gbmV3IFNmRGF0ZSgnTEFTVF85MF9EQVlTJyk7XG4gIHN0YXRpYyBORVhUXzkwX0RBWVMgPSBuZXcgU2ZEYXRlKCdORVhUXzkwX0RBWVMnKTtcbiAgc3RhdGljIExBU1RfTl9EQVlTID0gY3JlYXRlTGl0ZXJhbEJ1aWxkZXIoJ0xBU1RfTl9EQVlTJyk7XG4gIHN0YXRpYyBORVhUX05fREFZUyA9IGNyZWF0ZUxpdGVyYWxCdWlsZGVyKCdORVhUX05fREFZUycpO1xuICBzdGF0aWMgTkVYVF9OX1dFRUtTID0gY3JlYXRlTGl0ZXJhbEJ1aWxkZXIoJ05FWFRfTl9XRUVLUycpO1xuICBzdGF0aWMgTEFTVF9OX1dFRUtTID0gY3JlYXRlTGl0ZXJhbEJ1aWxkZXIoJ0xBU1RfTl9XRUVLUycpO1xuICBzdGF0aWMgTkVYVF9OX01PTlRIUyA9IGNyZWF0ZUxpdGVyYWxCdWlsZGVyKCdORVhUX05fTU9OVEhTJyk7XG4gIHN0YXRpYyBMQVNUX05fTU9OVEhTID0gY3JlYXRlTGl0ZXJhbEJ1aWxkZXIoJ0xBU1RfTl9NT05USFMnKTtcbiAgc3RhdGljIFRISVNfUVVBUlRFUiA9IG5ldyBTZkRhdGUoJ1RISVNfUVVBUlRFUicpO1xuICBzdGF0aWMgTEFTVF9RVUFSVEVSID0gbmV3IFNmRGF0ZSgnTEFTVF9RVUFSVEVSJyk7XG4gIHN0YXRpYyBORVhUX1FVQVJURVIgPSBuZXcgU2ZEYXRlKCdORVhUX1FVQVJURVInKTtcbiAgc3RhdGljIE5FWFRfTl9RVUFSVEVSUyA9IGNyZWF0ZUxpdGVyYWxCdWlsZGVyKCdORVhUX05fUVVBUlRFUlMnKTtcbiAgc3RhdGljIExBU1RfTl9RVUFSVEVSUyA9IGNyZWF0ZUxpdGVyYWxCdWlsZGVyKCdMQVNUX05fUVVBUlRFUlMnKTtcbiAgc3RhdGljIFRISVNfWUVBUiA9IG5ldyBTZkRhdGUoJ1RISVNfWUVBUicpO1xuICBzdGF0aWMgTEFTVF9ZRUFSID0gbmV3IFNmRGF0ZSgnTEFTVF9ZRUFSJyk7XG4gIHN0YXRpYyBORVhUX1lFQVIgPSBuZXcgU2ZEYXRlKCdORVhUX1lFQVInKTtcbiAgc3RhdGljIE5FWFRfTl9ZRUFSUyA9IGNyZWF0ZUxpdGVyYWxCdWlsZGVyKCdORVhUX05fWUVBUlMnKTtcbiAgc3RhdGljIExBU1RfTl9ZRUFSUyA9IGNyZWF0ZUxpdGVyYWxCdWlsZGVyKCdMQVNUX05fWUVBUlMnKTtcbiAgc3RhdGljIFRISVNfRklTQ0FMX1FVQVJURVIgPSBuZXcgU2ZEYXRlKCdUSElTX0ZJU0NBTF9RVUFSVEVSJyk7XG4gIHN0YXRpYyBMQVNUX0ZJU0NBTF9RVUFSVEVSID0gbmV3IFNmRGF0ZSgnTEFTVF9GSVNDQUxfUVVBUlRFUicpO1xuICBzdGF0aWMgTkVYVF9GSVNDQUxfUVVBUlRFUiA9IG5ldyBTZkRhdGUoJ05FWFRfRklTQ0FMX1FVQVJURVInKTtcbiAgc3RhdGljIFRISVNfRklTQ0FMX1lFQVIgPSBuZXcgU2ZEYXRlKCdUSElTX0ZJU0NBTF9ZRUFSJyk7XG4gIHN0YXRpYyBORVhUX05fRklTQ0FMX1FVQVJURVJTID0gY3JlYXRlTGl0ZXJhbEJ1aWxkZXIoXG4gICAgJ05FWFRfTl9GSVNDQUxfUVVBUlRFUlMnLFxuICApO1xuICBzdGF0aWMgTEFTVF9OX0ZJU0NBTF9RVUFSVEVSUyA9IGNyZWF0ZUxpdGVyYWxCdWlsZGVyKFxuICAgICdMQVNUX05fRklTQ0FMX1FVQVJURVJTJyxcbiAgKTtcbiAgc3RhdGljIExBU1RfRklTQ0FMX1lFQVIgPSBuZXcgU2ZEYXRlKCdMQVNUX0ZJU0NBTF9ZRUFSJyk7XG4gIHN0YXRpYyBORVhUX0ZJU0NBTF9ZRUFSID0gbmV3IFNmRGF0ZSgnTkVYVF9GSVNDQUxfWUVBUicpO1xuICBzdGF0aWMgTkVYVF9OX0ZJU0NBTF9ZRUFSUyA9IGNyZWF0ZUxpdGVyYWxCdWlsZGVyKCdORVhUX05fRklTQ0FMX1lFQVJTJyk7XG4gIHN0YXRpYyBMQVNUX05fRklTQ0FMX1lFQVJTID0gY3JlYXRlTGl0ZXJhbEJ1aWxkZXIoJ0xBU1RfTl9GSVNDQUxfWUVBUlMnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2ZEYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsT0FBTyxRQUFRLGtCQUFrQjs7QUFFMUM7QUFDQSxTQUFTQyxvQkFBb0JBLENBQUNDLE9BQWUsRUFBRTtFQUM3QyxPQUFPLFVBQUNDLEdBQVc7SUFBQSxJQUFBQyxRQUFBO0lBQUEsT0FBSyxJQUFJQyxNQUFNLENBQUFDLHVCQUFBLENBQUFGLFFBQUEsTUFBQUcsTUFBQSxDQUFJTCxPQUFPLFFBQUFNLElBQUEsQ0FBQUosUUFBQSxFQUFJSyxNQUFNLENBQUNOLEdBQUcsQ0FBQyxDQUFFLENBQUM7RUFBQSxFQUFDLENBQUM7QUFDbkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFhRSxNQUFNO0VBR2pCO0FBQ0Y7QUFDQTtFQUNFLFNBQUFBLE9BQVlILE9BQWUsRUFBRTtJQUFBUSxlQUFBLE9BQUFMLE1BQUE7SUFBQU0sZUFBQSxtQkFXbEIsSUFBSSxDQUFDQyxNQUFNO0lBVnBCLElBQUksQ0FBQ0MsUUFBUSxHQUFHWCxPQUFPO0VBQ3pCOztFQUVBO0FBQ0Y7QUFDQTtFQUZFLE9BQUFZLFlBQUEsQ0FBQVQsTUFBQTtJQUFBVSxHQUFBO0lBQUFDLEtBQUEsRUFHQSxTQUFBSixNQUFNQSxDQUFBLEVBQUc7TUFDUCxPQUFPLElBQUksQ0FBQ0MsUUFBUTtJQUN0QjtFQUFDO0lBQUFFLEdBQUE7SUFBQUMsS0FBQTtJQUlEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNFLFNBQU9DLGFBQWFBLENBQUNDLElBQTRCLEVBQUU7TUFDakQsSUFBSUMsS0FBVztNQUNmLElBQUksT0FBT0QsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QkMsS0FBSyxHQUFHLElBQUlDLElBQUksQ0FBQ0YsSUFBSSxDQUFDO01BQ3hCLENBQUMsTUFBTSxJQUFJLE9BQU9BLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDbkNDLEtBQUssR0FBR2QsTUFBTSxDQUFDZ0IsU0FBUyxDQUFDSCxJQUFJLENBQUM7TUFDaEMsQ0FBQyxNQUFNO1FBQ0xDLEtBQUssR0FBR0QsSUFBSTtNQUNkO01BQ0EsSUFBTUksRUFBRSxHQUFHSCxLQUFLLENBQUNJLFdBQVcsQ0FBQyxDQUFDO01BQzlCLElBQU1DLEVBQUUsR0FBR0wsS0FBSyxDQUFDTSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUM7TUFDL0IsSUFBTUMsRUFBRSxHQUFHUCxLQUFLLENBQUNRLE9BQU8sQ0FBQyxDQUFDO01BQzFCLElBQU1DLElBQUksR0FBRyxDQUFDTixFQUFFLEVBQUV0QixPQUFPLENBQUN3QixFQUFFLENBQUMsRUFBRXhCLE9BQU8sQ0FBQzBCLEVBQUUsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBQyxHQUFHLENBQUM7TUFDckQsT0FBTyxJQUFJeEIsTUFBTSxDQUFDdUIsSUFBSSxDQUFDO0lBQ3pCOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0VBSEU7SUFBQWIsR0FBQTtJQUFBQyxLQUFBLEVBSUEsU0FBT2MsaUJBQWlCQSxDQUFDWixJQUE0QixFQUFFO01BQUEsSUFBQWEsU0FBQTtNQUNyRCxJQUFJWixLQUFXO01BQ2YsSUFBSSxPQUFPRCxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzVCQyxLQUFLLEdBQUcsSUFBSUMsSUFBSSxDQUFDRixJQUFJLENBQUM7TUFDeEIsQ0FBQyxNQUFNLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNuQ0MsS0FBSyxHQUFHZCxNQUFNLENBQUNnQixTQUFTLENBQUNILElBQUksQ0FBQztNQUNoQyxDQUFDLE1BQU07UUFDTEMsS0FBSyxHQUFHRCxJQUFJO01BQ2Q7TUFDQSxJQUFNSSxFQUFFLEdBQUdILEtBQUssQ0FBQ2EsY0FBYyxDQUFDLENBQUM7TUFDakMsSUFBTVIsRUFBRSxHQUFHTCxLQUFLLENBQUNjLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztNQUNsQyxJQUFNUCxFQUFFLEdBQUdQLEtBQUssQ0FBQ2UsVUFBVSxDQUFDLENBQUM7TUFDN0IsSUFBTUMsRUFBRSxHQUFHaEIsS0FBSyxDQUFDaUIsV0FBVyxDQUFDLENBQUM7TUFDOUIsSUFBTUMsRUFBRSxHQUFHbEIsS0FBSyxDQUFDbUIsYUFBYSxDQUFDLENBQUM7TUFDaEMsSUFBTUMsRUFBRSxHQUFHcEIsS0FBSyxDQUFDcUIsYUFBYSxDQUFDLENBQUM7TUFDaEMsSUFBTUMsS0FBSyxHQUFBbkMsdUJBQUEsQ0FBQXlCLFNBQUEsTUFBQXhCLE1BQUEsQ0FBTSxDQUFDZSxFQUFFLEVBQUV0QixPQUFPLENBQUN3QixFQUFFLENBQUMsRUFBRXhCLE9BQU8sQ0FBQzBCLEVBQUUsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBQXJCLElBQUEsQ0FBQXVCLFNBQUEsRUFBSSxDQUMzRC9CLE9BQU8sQ0FBQ21DLEVBQUUsQ0FBQyxFQUNYbkMsT0FBTyxDQUFDcUMsRUFBRSxDQUFDLEVBQ1hyQyxPQUFPLENBQUN1QyxFQUFFLENBQUMsQ0FDWixDQUFDVixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQUc7TUFDZCxPQUFPLElBQUl4QixNQUFNLENBQUNvQyxLQUFLLENBQUM7SUFDMUI7O0lBRUE7QUFDRjtBQUNBO0FBQ0E7RUFIRTtJQUFBMUIsR0FBQTtJQUFBQyxLQUFBLEVBSUEsU0FBTzBCLGFBQWFBLENBQUNDLElBQTRCLEVBQUU7TUFBQSxJQUFBQyxTQUFBLEVBQUFDLFNBQUEsRUFBQUMsU0FBQTtNQUNqRCxJQUFJM0IsS0FBSyxHQUFHLElBQUlDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDdkIsSUFBSSxPQUFPdUIsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QnhCLEtBQUssR0FBR2QsTUFBTSxDQUFDMEMsU0FBUyxDQUFDSixJQUFJLENBQUM7TUFDaEMsQ0FBQyxNQUFNLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNuQ3hCLEtBQUssR0FBRyxJQUFJQyxJQUFJLENBQUN1QixJQUFJLENBQUM7TUFDeEIsQ0FBQyxNQUFNO1FBQ0x4QixLQUFLLEdBQUd3QixJQUFJO01BQ2Q7TUFDQSxJQUFNUixFQUFFLEdBQUdoQixLQUFLLENBQUNpQixXQUFXLENBQUMsQ0FBQztNQUM5QixJQUFNQyxFQUFFLEdBQUdsQixLQUFLLENBQUNtQixhQUFhLENBQUMsQ0FBQztNQUNoQyxJQUFNQyxFQUFFLEdBQUdwQixLQUFLLENBQUNxQixhQUFhLENBQUMsQ0FBQztNQUNoQyxJQUFNUSxHQUFHLEdBQUc3QixLQUFLLENBQUM4QixrQkFBa0IsQ0FBQyxDQUFDO01BQ3RDLElBQU1DLElBQUksR0FBQTVDLHVCQUFBLENBQUFzQyxTQUFBLEdBQUF0Qyx1QkFBQSxDQUFBdUMsU0FBQSxHQUFBdkMsdUJBQUEsQ0FBQXdDLFNBQUEsTUFBQXZDLE1BQUEsQ0FBTVAsT0FBTyxDQUFDbUMsRUFBRSxDQUFDLFFBQUEzQixJQUFBLENBQUFzQyxTQUFBLEVBQUk5QyxPQUFPLENBQUNxQyxFQUFFLENBQUMsUUFBQTdCLElBQUEsQ0FBQXFDLFNBQUEsRUFBSTdDLE9BQU8sQ0FBQ3VDLEVBQUUsQ0FBQyxRQUFBL0IsSUFBQSxDQUFBb0MsU0FBQSxFQUFJNUMsT0FBTyxDQUNsRWdELEdBQUcsRUFDSCxDQUNGLENBQUMsTUFBRztNQUNKLE9BQU8sSUFBSTNDLE1BQU0sQ0FBQzZDLElBQUksQ0FBQztJQUN6Qjs7SUFFQTtBQUNGO0FBQ0E7RUFGRTtJQUFBbkMsR0FBQTtJQUFBQyxLQUFBLEVBR0EsU0FBT0ssU0FBU0EsQ0FBQzhCLEdBQVcsRUFBUTtNQUNsQyxJQUFJQyxDQUFDLEdBQUcsSUFBSWhDLElBQUksQ0FBQyxDQUFDO01BQ2xCLElBQU1pQyxNQUFNLEdBQUcsaUhBQWlIO01BQ2hJLElBQU1DLENBQUMsR0FBR0gsR0FBRyxDQUFDSSxLQUFLLENBQUNGLE1BQU0sQ0FBQztNQUMzQixJQUFJQyxDQUFDLEVBQUU7UUFDTEYsQ0FBQyxHQUFHLElBQUloQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDa0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ1RGLENBQUMsQ0FBQ0ksV0FBVyxDQUFDQyxTQUFBLENBQVNILENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztVQUNqQ0YsQ0FBQyxDQUFDTSxPQUFPLENBQUNELFNBQUEsQ0FBU0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1VBQzdCRixDQUFDLENBQUNPLFFBQVEsQ0FBQ0YsU0FBQSxDQUFTSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ2xDRixDQUFDLENBQUNRLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDYlIsQ0FBQyxDQUFDUyxVQUFVLENBQUMsQ0FBQyxDQUFDO1VBQ2ZULENBQUMsQ0FBQ1UsVUFBVSxDQUFDLENBQUMsQ0FBQztVQUNmVixDQUFDLENBQUNXLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxNQUFNO1VBQ0xYLENBQUMsQ0FBQ1ksY0FBYyxDQUFDUCxTQUFBLENBQVNILENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztVQUNwQ0YsQ0FBQyxDQUFDYSxVQUFVLENBQUNSLFNBQUEsQ0FBU0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1VBQ2hDRixDQUFDLENBQUNjLFdBQVcsQ0FBQ1QsU0FBQSxDQUFTSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1VBQ3JDRixDQUFDLENBQUNlLFdBQVcsQ0FBQ1YsU0FBQSxDQUFTSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDakNGLENBQUMsQ0FBQ2dCLGFBQWEsQ0FBQ1gsU0FBQSxDQUFTSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDbkNGLENBQUMsQ0FBQ2lCLGFBQWEsQ0FBQ1osU0FBQSxDQUFTSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDbkNGLENBQUMsQ0FBQ2tCLGtCQUFrQixDQUFDYixTQUFBLENBQVNILENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDL0MsSUFBSUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJQSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFO1lBQzFCLElBQU1pQixNQUFNLEdBQUdkLFNBQUEsQ0FBU0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBR0csU0FBQSxDQUFTSCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdERixDQUFDLENBQUNvQixPQUFPLENBQ1AsQ0FBQ2xCLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJaUIsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUduQixDQUFDLENBQUNxQixPQUFPLENBQUMsQ0FDNUQsQ0FBQztVQUNIO1FBQ0Y7UUFDQSxPQUFPckIsQ0FBQztNQUNWO01BQ0EsTUFBTSxJQUFJc0IsS0FBSyx1Q0FBQW5FLE1BQUEsQ0FBdUM0QyxHQUFHLENBQUUsQ0FBQztJQUM5RDs7SUFFQTtBQUNGO0FBQ0E7RUFGRTtJQUFBcEMsR0FBQTtJQUFBQyxLQUFBLEVBR0EsU0FBTytCLFNBQVNBLENBQUNJLEdBQVcsRUFBUTtNQUNsQyxJQUFNRSxNQUFNLEdBQUcsa0RBQWtEO01BQ2pFLElBQU1DLENBQUMsR0FBR0gsR0FBRyxDQUFDSSxLQUFLLENBQUNGLE1BQU0sQ0FBQztNQUMzQixJQUFJQyxDQUFDLEVBQUU7UUFDTCxJQUFNRixDQUFDLEdBQUcsSUFBSWhDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckIsSUFBTWUsRUFBRSxHQUFHc0IsU0FBQSxDQUFTSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdCLElBQU1qQixFQUFFLEdBQUdvQixTQUFBLENBQVNILENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0IsSUFBTWYsRUFBRSxHQUFHa0IsU0FBQSxDQUFTSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdCLElBQU1OLEdBQUcsR0FBR1MsU0FBQSxDQUFTSCxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNyQ0YsQ0FBQyxDQUFDZSxXQUFXLENBQUNoQyxFQUFFLENBQUM7UUFDakJpQixDQUFDLENBQUNnQixhQUFhLENBQUMvQixFQUFFLENBQUM7UUFDbkJlLENBQUMsQ0FBQ2lCLGFBQWEsQ0FBQzlCLEVBQUUsQ0FBQztRQUNuQmEsQ0FBQyxDQUFDa0Isa0JBQWtCLENBQUN0QixHQUFHLENBQUM7UUFDekIsT0FBT0ksQ0FBQztNQUNWO01BQ0EsTUFBTSxJQUFJc0IsS0FBSyx1Q0FBQW5FLE1BQUEsQ0FBdUM0QyxHQUFHLENBQUUsQ0FBQztJQUM5RDtFQUFDO0FBQUE7QUEyQ0Z3QixPQUFBLEdBL0xZdEUsTUFBTTtBQUFBTSxlQUFBLENBQU5OLE1BQU0sZUFzSkUsSUFBSUEsT0FBTSxDQUFDLFdBQVcsQ0FBQztBQUFBTSxlQUFBLENBdEovQk4sTUFBTSxXQXVKRixJQUFJQSxPQUFNLENBQUMsT0FBTyxDQUFDO0FBQUFNLGVBQUEsQ0F2SnZCTixNQUFNLGNBd0pDLElBQUlBLE9BQU0sQ0FBQyxVQUFVLENBQUM7QUFBQU0sZUFBQSxDQXhKN0JOLE1BQU0sZUF5SkUsSUFBSUEsT0FBTSxDQUFDLFdBQVcsQ0FBQztBQUFBTSxlQUFBLENBekovQk4sTUFBTSxlQTBKRSxJQUFJQSxPQUFNLENBQUMsV0FBVyxDQUFDO0FBQUFNLGVBQUEsQ0ExSi9CTixNQUFNLGVBMkpFLElBQUlBLE9BQU0sQ0FBQyxXQUFXLENBQUM7QUFBQU0sZUFBQSxDQTNKL0JOLE1BQU0sZ0JBNEpHLElBQUlBLE9BQU0sQ0FBQyxZQUFZLENBQUM7QUFBQU0sZUFBQSxDQTVKakNOLE1BQU0sZ0JBNkpHLElBQUlBLE9BQU0sQ0FBQyxZQUFZLENBQUM7QUFBQU0sZUFBQSxDQTdKakNOLE1BQU0sZ0JBOEpHLElBQUlBLE9BQU0sQ0FBQyxZQUFZLENBQUM7QUFBQU0sZUFBQSxDQTlKakNOLE1BQU0sa0JBK0pLLElBQUlBLE9BQU0sQ0FBQyxjQUFjLENBQUM7QUFBQU0sZUFBQSxDQS9KckNOLE1BQU0sa0JBZ0tLLElBQUlBLE9BQU0sQ0FBQyxjQUFjLENBQUM7QUFBQU0sZUFBQSxDQWhLckNOLE1BQU0saUJBaUtJSixvQkFBb0IsQ0FBQyxhQUFhLENBQUM7QUFBQVUsZUFBQSxDQWpLN0NOLE1BQU0saUJBa0tJSixvQkFBb0IsQ0FBQyxhQUFhLENBQUM7QUFBQVUsZUFBQSxDQWxLN0NOLE1BQU0sa0JBbUtLSixvQkFBb0IsQ0FBQyxjQUFjLENBQUM7QUFBQVUsZUFBQSxDQW5LL0NOLE1BQU0sa0JBb0tLSixvQkFBb0IsQ0FBQyxjQUFjLENBQUM7QUFBQVUsZUFBQSxDQXBLL0NOLE1BQU0sbUJBcUtNSixvQkFBb0IsQ0FBQyxlQUFlLENBQUM7QUFBQVUsZUFBQSxDQXJLakROLE1BQU0sbUJBc0tNSixvQkFBb0IsQ0FBQyxlQUFlLENBQUM7QUFBQVUsZUFBQSxDQXRLakROLE1BQU0sa0JBdUtLLElBQUlBLE9BQU0sQ0FBQyxjQUFjLENBQUM7QUFBQU0sZUFBQSxDQXZLckNOLE1BQU0sa0JBd0tLLElBQUlBLE9BQU0sQ0FBQyxjQUFjLENBQUM7QUFBQU0sZUFBQSxDQXhLckNOLE1BQU0sa0JBeUtLLElBQUlBLE9BQU0sQ0FBQyxjQUFjLENBQUM7QUFBQU0sZUFBQSxDQXpLckNOLE1BQU0scUJBMEtRSixvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQztBQUFBVSxlQUFBLENBMUtyRE4sTUFBTSxxQkEyS1FKLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDO0FBQUFVLGVBQUEsQ0EzS3JETixNQUFNLGVBNEtFLElBQUlBLE9BQU0sQ0FBQyxXQUFXLENBQUM7QUFBQU0sZUFBQSxDQTVLL0JOLE1BQU0sZUE2S0UsSUFBSUEsT0FBTSxDQUFDLFdBQVcsQ0FBQztBQUFBTSxlQUFBLENBN0svQk4sTUFBTSxlQThLRSxJQUFJQSxPQUFNLENBQUMsV0FBVyxDQUFDO0FBQUFNLGVBQUEsQ0E5Sy9CTixNQUFNLGtCQStLS0osb0JBQW9CLENBQUMsY0FBYyxDQUFDO0FBQUFVLGVBQUEsQ0EvSy9DTixNQUFNLGtCQWdMS0osb0JBQW9CLENBQUMsY0FBYyxDQUFDO0FBQUFVLGVBQUEsQ0FoTC9DTixNQUFNLHlCQWlMWSxJQUFJQSxPQUFNLENBQUMscUJBQXFCLENBQUM7QUFBQU0sZUFBQSxDQWpMbkROLE1BQU0seUJBa0xZLElBQUlBLE9BQU0sQ0FBQyxxQkFBcUIsQ0FBQztBQUFBTSxlQUFBLENBbExuRE4sTUFBTSx5QkFtTFksSUFBSUEsT0FBTSxDQUFDLHFCQUFxQixDQUFDO0FBQUFNLGVBQUEsQ0FuTG5ETixNQUFNLHNCQW9MUyxJQUFJQSxPQUFNLENBQUMsa0JBQWtCLENBQUM7QUFBQU0sZUFBQSxDQXBMN0NOLE1BQU0sNEJBcUxlSixvQkFBb0IsQ0FDbEQsd0JBQ0YsQ0FBQztBQUFBVSxlQUFBLENBdkxVTixNQUFNLDRCQXdMZUosb0JBQW9CLENBQ2xELHdCQUNGLENBQUM7QUFBQVUsZUFBQSxDQTFMVU4sTUFBTSxzQkEyTFMsSUFBSUEsT0FBTSxDQUFDLGtCQUFrQixDQUFDO0FBQUFNLGVBQUEsQ0EzTDdDTixNQUFNLHNCQTRMUyxJQUFJQSxPQUFNLENBQUMsa0JBQWtCLENBQUM7QUFBQU0sZUFBQSxDQTVMN0NOLE1BQU0seUJBNkxZSixvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQztBQUFBVSxlQUFBLENBN0w3RE4sTUFBTSx5QkE4TFlKLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDO0FBRzFFLGVBQWVJLE1BQU0iLCJpZ25vcmVMaXN0IjpbXX0=
|