UNPKG

@tai-kun/surrealdb

Version:

The SurrealDB SDK for JavaScript

330 lines (328 loc) 30.9 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/data-types/standard/duration.ts var duration_exports = {}; __export(duration_exports, { default: () => Duration }); module.exports = __toCommonJS(duration_exports); var import_encodable_datatypes = require("../encodable/index.cjs"); var import_errors = require("../../errors/index.cjs"); var import_utils = require("../../utils/index.cjs"); var DURATION_PART_REGEX = /^(\d+)((?:m|u|µ|μ|n)?s|m|h|d|w|y)/; var SECONDS_PER_MINUTE = 60n; var SECONDS_PER_HOUR = 60n * SECONDS_PER_MINUTE; var SECONDS_PER_DAY = 24n * SECONDS_PER_HOUR; var SECONDS_PER_WEEK = 7n * SECONDS_PER_DAY; var SECONDS_PER_YEAR = 365n * SECONDS_PER_DAY; var NANOSECONDS_PER_MICROSECOND = 1000n; var NANOSECONDS_PER_MILLISECOND = 1000000n; var NANOSECONDS_PER_SECOND = 1000000000n; var MAX_UINT_64 = 18446744073709551615n; var _Duration = class _Duration extends import_encodable_datatypes.Duration { static get MAX() { return new this([MAX_UINT_64, 1e9 - 1]); } static get ZERO() { return new this(0); } static years(years) { return new this(years + "y"); } static weeks(weeks) { return new this(weeks + "w"); } static days(days) { return new this(days + "d"); } static hours(hours) { return new this(hours + "h"); } static minutes(minutes) { return new this(minutes + "m"); } static seconds(seconds) { return new this(seconds + "s"); } static milliseconds(milliseconds) { return new this(milliseconds + "ms"); } static microseconds(microseconds) { return new this(microseconds + "us"); } static nanoseconds(nanoseconds) { return new this(nanoseconds + "ns"); } constructor(value) { let source; if (Array.isArray(value)) { source = value; } else { switch (typeof value) { case "number": if ((0, import_utils.isSafeNumber)(value) && value >= 0) { source = [ BigInt(Math.floor(value / 1e3)), Math.floor(value % 1e3 * 1e6) % 1e9 ]; } break; case "bigint": source = [ value / NANOSECONDS_PER_SECOND, Number(value % NANOSECONDS_PER_SECOND) ]; break; case "string": { if (value === "" || value === "0" || value === "0ns") { source = []; break; } let match, rest = value, secs = 0n, nano = 0n, i; while (rest) { if (!(match = rest.match(DURATION_PART_REGEX))) { throw new import_errors.SurrealValueError( `matches ${/^([0-9]+(ms|us|µs|μs|nss|m|h|d|w|y))+$/.source}`, value ); } i = BigInt(match[1]); switch (match[2]) { case "y": secs += i * SECONDS_PER_YEAR; break; case "w": secs += i * SECONDS_PER_WEEK; break; case "d": secs += i * SECONDS_PER_DAY; break; case "h": secs += i * SECONDS_PER_HOUR; break; case "m": secs += i * SECONDS_PER_MINUTE; break; case "s": secs += i; break; case "ms": nano += i * NANOSECONDS_PER_MILLISECOND; break; case "us": case "\xB5s": case "\u03BCs": nano += i * NANOSECONDS_PER_MICROSECOND; break; case "ns": nano += i; break; default: (0, import_errors.unreachable)(); } rest = rest.substring(match[0].length); } source = [ secs + nano / NANOSECONDS_PER_SECOND, Number(nano % NANOSECONDS_PER_SECOND) ]; break; } case "object": if (typeof value.seconds === "bigint") { source = [value.seconds, value.nanoseconds]; } } } if (source === void 0) { throw new import_errors.SurrealTypeError( ["Number", "BigInt", "String", "Array", "Object"], source ); } super(source); } get seconds() { return this._seconds; } set seconds(s) { if (typeof s === "bigint" && s >= 0n && s <= MAX_UINT_64) { this._seconds = s; } else { throw new import_errors.NumberRangeError([0n, MAX_UINT_64], s, { integer: true }); } } get nanoseconds() { return this._nanoseconds; } set nanoseconds(ns) { if (Number.isSafeInteger(ns) && ns >= 0) { this._nanoseconds = ns === 0 ? 0 : ns % 1e9; if (ns >= 1e9) { this.seconds += BigInt(Math.floor(ns / 1e9)); } } else { throw new import_errors.NumberRangeError([0, Number.MAX_SAFE_INTEGER], ns, { integer: true }); } } getCompact() { return [this.seconds, this.nanoseconds]; } setCompact(compact) { this.seconds = compact[0]; this.nanoseconds = compact[1]; } getYears() { return this.parse()["years"] || 0; } addYears(years) { this.seconds += BigInt(years) * SECONDS_PER_YEAR; } subYears(years) { this.seconds -= BigInt(years) * SECONDS_PER_YEAR; } getWeeks() { return this.parse()["weeks"] || 0; } addWeeks(weeks) { this.seconds += BigInt(weeks) * SECONDS_PER_WEEK; } subWeeks(weeks) { this.seconds -= BigInt(weeks) * SECONDS_PER_WEEK; } getDays() { return this.parse()["days"] || 0; } addDays(days) { this.seconds += BigInt(days) * SECONDS_PER_DAY; } subDays(days) { this.seconds -= BigInt(days) * SECONDS_PER_DAY; } getHours() { return this.parse()["hours"] || 0; } addHours(hours) { this.seconds += BigInt(hours) * SECONDS_PER_HOUR; } subHours(hours) { this.seconds -= BigInt(hours) * SECONDS_PER_HOUR; } getMinutes() { return this.parse()["minutes"] || 0; } addMinutes(minutes) { this.seconds += BigInt(minutes) * SECONDS_PER_MINUTE; } subMinutes(minutes) { this.seconds -= BigInt(minutes) * SECONDS_PER_MINUTE; } getSeconds() { return this.parse()["seconds"] || 0; } addSeconds(seconds) { this.seconds += BigInt(seconds); } subSeconds(seconds) { this.seconds -= BigInt(seconds); } getMilliseconds() { return this.parse()["milliseconds"] || 0; } addMilliseconds(milliseconds) { this.nanoseconds += milliseconds * 1e6; } subMilliseconds(milliseconds) { this.nanoseconds -= milliseconds * 1e6; } getMicroseconds() { return this.parse()["microseconds"] || 0; } addMicroseconds(microseconds) { this.nanoseconds += microseconds * 1e3; } subMicroseconds(microseconds) { this.nanoseconds -= microseconds * 1e3; } getNanoseconds() { return this.parse()["nanoseconds"] || 0; } addNanoseconds(nanoseconds) { this.nanoseconds += nanoseconds; } subNanoseconds(nanoseconds) { this.nanoseconds -= nanoseconds; } asYears() { return this.asDays() / 365; } asWeeks() { return this.asDays() / 7; } asDays() { return this.asHours() / 24; } asHours() { return this.asMinutes() / 60; } asMinutes() { return this.asSeconds() / 60; } asSeconds() { return this.asMilliseconds() / 1e3; } asMilliseconds() { const ms = this.seconds * 1000n + BigInt(this.nanoseconds) / 1000000n; const us = this.nanoseconds % 1e6 / 1e6; return Number(ms) + us; } asMicroseconds() { const us = this.seconds * 1000000n + BigInt(this.nanoseconds) / 1000n; const ns = this.nanoseconds % 1e3 / 1e3; return Number(us) + ns; } asNanoseconds() { const ns = this.seconds * 1000000000n + BigInt(this.nanoseconds); return Number(ns); } // ISO 8601 duration format // dprint-ignore toISOString() { const o = this.parse(); let s = "P"; if ("years" in o) s += o.years + "Y"; if ("weeks" in o) s += o.weeks + "W"; if ("days" in o) s += o.days + "D"; if ("hours" in o) s += o.hours + "H"; if ("minutes" in o) s += o.minutes + "M"; if ("seconds" in o) s += o.seconds + "S"; if (s === "P") s += "0S"; return s; } clone() { const This = this.constructor; return new This(this); } }; __name(_Duration, "Duration"); var Duration = _Duration; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RhdGEtdHlwZXMvc3RhbmRhcmQvZHVyYXRpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7XG4gIER1cmF0aW9uIGFzIEJhc2UsXG4gIHR5cGUgRHVyYXRpb25Tb3VyY2UsXG59IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZW5jb2RhYmxlLWRhdGF0eXBlc1wiO1xuaW1wb3J0IHtcbiAgTnVtYmVyUmFuZ2VFcnJvcixcbiAgU3VycmVhbFR5cGVFcnJvcixcbiAgU3VycmVhbFZhbHVlRXJyb3IsXG4gIHVucmVhY2hhYmxlLFxufSBmcm9tIFwiQHRhaS1rdW4vc3VycmVhbGRiL2Vycm9yc1wiO1xuaW1wb3J0IHsgaXNTYWZlTnVtYmVyIH0gZnJvbSBcIkB0YWkta3VuL3N1cnJlYWxkYi91dGlsc1wiO1xuXG5leHBvcnQgdHlwZSAqIGZyb20gXCIuLi9lbmNvZGFibGUvZHVyYXRpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBEdXJhdGlvbkxpa2Uge1xuICBzZWNvbmRzOiBiaWdpbnQ7XG4gIG5hbm9zZWNvbmRzOiBudW1iZXI7XG59XG5cbi8vIG0gXHUzMDZFXHU1MjREXHUzMDZCIG1zIFx1MzA0Q1x1MzBERVx1MzBDM1x1MzBDMVx1MzA1OVx1MzA4Qlx1MzA4OFx1MzA0Nlx1MzA2Qlx1MzA1OVx1MzA4Qlx1MzAwMlxuY29uc3QgRFVSQVRJT05fUEFSVF9SRUdFWCA9IC9eKFxcZCspKCg/Om18dXxcdTAwQjV8XHUwM0JDfG4pP3N8bXxofGR8d3x5KS87XG5cbmNvbnN0IFNFQ09ORFNfUEVSX01JTlVURSA9IDYwbjtcbmNvbnN0IFNFQ09ORFNfUEVSX0hPVVIgPSA2MG4gKiBTRUNPTkRTX1BFUl9NSU5VVEU7XG5jb25zdCBTRUNPTkRTX1BFUl9EQVkgPSAyNG4gKiBTRUNPTkRTX1BFUl9IT1VSO1xuY29uc3QgU0VDT05EU19QRVJfV0VFSyA9IDduICogU0VDT05EU19QRVJfREFZO1xuY29uc3QgU0VDT05EU19QRVJfWUVBUiA9IDM2NW4gKiBTRUNPTkRTX1BFUl9EQVk7XG5jb25zdCBOQU5PU0VDT05EU19QRVJfTUlDUk9TRUNPTkQgPSAxXzAwMG47XG5jb25zdCBOQU5PU0VDT05EU19QRVJfTUlMTElTRUNPTkQgPSAxXzAwMF8wMDBuO1xuY29uc3QgTkFOT1NFQ09ORFNfUEVSX1NFQ09ORCA9IDFfMDAwXzAwMF8wMDBuO1xuXG5jb25zdCBNQVhfVUlOVF82NCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1bjtcblxuLyoqXG4gKiBbQVBJIFJlZmVyZW5jZV0oaHR0cHM6Ly90YWkta3VuLmdpdGh1Yi5pby9zdXJyZWFsZGIuanMvdjIvYXBpL2RhdGEvZHVyYXRpb24pXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9uIGV4dGVuZHMgQmFzZSB7XG4gIHN0YXRpYyBnZXQgTUFYKCkge1xuICAgIHJldHVybiBuZXcgdGhpcyhbTUFYX1VJTlRfNjQsIDFlOSAtIDFdKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgWkVSTygpIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoMCk7XG4gIH1cblxuICBzdGF0aWMgeWVhcnMoeWVhcnM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgdGhpcyh5ZWFycyArIFwieVwiKTtcbiAgfVxuXG4gIHN0YXRpYyB3ZWVrcyh3ZWVrczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHdlZWtzICsgXCJ3XCIpO1xuICB9XG5cbiAgc3RhdGljIGRheXMoZGF5czogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKGRheXMgKyBcImRcIik7XG4gIH1cblxuICBzdGF0aWMgaG91cnMoaG91cnM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgdGhpcyhob3VycyArIFwiaFwiKTtcbiAgfVxuXG4gIHN0YXRpYyBtaW51dGVzKG1pbnV0ZXM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgdGhpcyhtaW51dGVzICsgXCJtXCIpO1xuICB9XG5cbiAgc3RhdGljIHNlY29uZHMoc2Vjb25kczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHNlY29uZHMgKyBcInNcIik7XG4gIH1cblxuICBzdGF0aWMgbWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKG1pbGxpc2Vjb25kcyArIFwibXNcIik7XG4gIH1cblxuICBzdGF0aWMgbWljcm9zZWNvbmRzKG1pY3Jvc2Vjb25kczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKG1pY3Jvc2Vjb25kcyArIFwidXNcIik7XG4gIH1cblxuICBzdGF0aWMgbmFub3NlY29uZHMobmFub3NlY29uZHM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgdGhpcyhuYW5vc2Vjb25kcyArIFwibnNcIik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICB2YWx1ZTpcbiAgICAgIHwgRHVyYXRpb25Tb3VyY2VcbiAgICAgIHwgbnVtYmVyXG4gICAgICB8IGJpZ2ludFxuICAgICAgfCBzdHJpbmdcbiAgICAgIHwgRHVyYXRpb25MaWtlLFxuICApIHtcbiAgICBsZXQgc291cmNlOiBEdXJhdGlvblNvdXJjZSB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgc291cmNlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICBpZiAoaXNTYWZlTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSA+PSAwKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSBbXG4gICAgICAgICAgICAgIEJpZ0ludChNYXRoLmZsb29yKHZhbHVlIC8gMWUzKSksXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoKHZhbHVlICUgMWUzKSAqIDFlNikgJSAxZTksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICBzb3VyY2UgPSBbXG4gICAgICAgICAgICB2YWx1ZSAvIE5BTk9TRUNPTkRTX1BFUl9TRUNPTkQsXG4gICAgICAgICAgICBOdW1iZXIodmFsdWUgJSBOQU5PU0VDT05EU19QRVJfU0VDT05EKSxcbiAgICAgICAgICBdO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjoge1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIiB8fCB2YWx1ZSA9PT0gXCIwXCIgfHwgdmFsdWUgPT09IFwiMG5zXCIpIHtcbiAgICAgICAgICAgIHNvdXJjZSA9IFtdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IG1hdGNoOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCxcbiAgICAgICAgICAgIHJlc3QgPSB2YWx1ZSxcbiAgICAgICAgICAgIHNlY3MgPSAwbixcbiAgICAgICAgICAgIG5hbm8gPSAwbixcbiAgICAgICAgICAgIGk6IGJpZ2ludDtcblxuICAgICAgICAgIHdoaWxlIChyZXN0KSB7XG4gICAgICAgICAgICBpZiAoIShtYXRjaCA9IHJlc3QubWF0Y2goRFVSQVRJT05fUEFSVF9SRUdFWCkpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBTdXJyZWFsVmFsdWVFcnJvcihcbiAgICAgICAgICAgICAgICBgbWF0Y2hlcyAkey9eKFswLTldKyhtc3x1c3xcdTAwQjVzfFx1MDNCQ3N8bnNzfG18aHxkfHd8eSkpKyQvLnNvdXJjZX1gLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpID0gQmlnSW50KG1hdGNoWzFdISk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAgICAgICBzZWNzICs9IGkgKiBTRUNPTkRTX1BFUl9ZRUFSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJ3XCI6XG4gICAgICAgICAgICAgICAgc2VjcyArPSBpICogU0VDT05EU19QRVJfV0VFSztcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgIHNlY3MgKz0gaSAqIFNFQ09ORFNfUEVSX0RBWTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgICAgICAgIHNlY3MgKz0gaSAqIFNFQ09ORFNfUEVSX0hPVVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgICAgICBzZWNzICs9IGkgKiBTRUNPTkRTX1BFUl9NSU5VVEU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgICAgICBzZWNzICs9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBcIm1zXCI6XG4gICAgICAgICAgICAgICAgbmFubyArPSBpICogTkFOT1NFQ09ORFNfUEVSX01JTExJU0VDT05EO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJ1c1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiXHUwMEI1c1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiXHUwM0JDc1wiOlxuICAgICAgICAgICAgICAgIG5hbm8gKz0gaSAqIE5BTk9TRUNPTkRTX1BFUl9NSUNST1NFQ09ORDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIFwibnNcIjpcbiAgICAgICAgICAgICAgICBuYW5vICs9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB1bnJlYWNoYWJsZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN0ID0gcmVzdC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzb3VyY2UgPSBbXG4gICAgICAgICAgICBzZWNzICsgbmFubyAvIE5BTk9TRUNPTkRTX1BFUl9TRUNPTkQsXG4gICAgICAgICAgICBOdW1iZXIobmFubyAlIE5BTk9TRUNPTkRTX1BFUl9TRUNPTkQpLFxuICAgICAgICAgIF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zZWNvbmRzID09PSBcImJpZ2ludFwiKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSBbdmFsdWUuc2Vjb25kcywgdmFsdWUubmFub3NlY29uZHNdO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBTdXJyZWFsVHlwZUVycm9yKFxuICAgICAgICBbXCJOdW1iZXJcIiwgXCJCaWdJbnRcIiwgXCJTdHJpbmdcIiwgXCJBcnJheVwiLCBcIk9iamVjdFwiXSxcbiAgICAgICAgc291cmNlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzdXBlcihzb3VyY2UpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IHNlY29uZHMoKTogYmlnaW50IHtcbiAgICByZXR1cm4gdGhpcy5fc2Vjb25kcztcbiAgfVxuXG4gIG92ZXJyaWRlIHNldCBzZWNvbmRzKHM6IGJpZ2ludCkge1xuICAgIGlmICh0eXBlb2YgcyA9PT0gXCJiaWdpbnRcIiAmJiBzID49IDBuICYmIHMgPD0gTUFYX1VJTlRfNjQpIHtcbiAgICAgIHRoaXMuX3NlY29uZHMgPSBzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgTnVtYmVyUmFuZ2VFcnJvcihbMG4sIE1BWF9VSU5UXzY0XSwgcywgeyBpbnRlZ2VyOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGdldCBuYW5vc2Vjb25kcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9uYW5vc2Vjb25kcztcbiAgfVxuXG4gIG92ZXJyaWRlIHNldCBuYW5vc2Vjb25kcyhuczogbnVtYmVyKSB7XG4gICAgaWYgKE51bWJlci5pc1NhZmVJbnRlZ2VyKG5zKSAmJiBucyA+PSAwKSB7XG4gICAgICB0aGlzLl9uYW5vc2Vjb25kcyA9IG5zID09PSAwID8gMCA6IG5zICUgMWU5O1xuXG4gICAgICBpZiAobnMgPj0gMWU5KSB7XG4gICAgICAgIHRoaXMuc2Vjb25kcyArPSBCaWdJbnQoTWF0aC5mbG9vcihucyAvIDFlOSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgTnVtYmVyUmFuZ2VFcnJvcihbMCwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJdLCBucywge1xuICAgICAgICBpbnRlZ2VyOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29tcGFjdCgpOiBbc2Vjb25kczogYmlnaW50LCBuYW5vc2Vjb25kczogbnVtYmVyXSB7XG4gICAgcmV0dXJuIFt0aGlzLnNlY29uZHMsIHRoaXMubmFub3NlY29uZHNdO1xuICB9XG5cbiAgc2V0Q29tcGFjdChjb21wYWN0OiByZWFkb25seSBbc2Vjb25kczogYmlnaW50LCBuYW5vc2Vjb25kczogbnVtYmVyXSk6IHZvaWQge1xuICAgIHRoaXMuc2Vjb25kcyA9IGNvbXBhY3RbMF07XG4gICAgdGhpcy5uYW5vc2Vjb25kcyA9IGNvbXBhY3RbMV07XG4gIH1cblxuICBnZXRZZWFycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcnNlKClbXCJ5ZWFyc1wiXSB8fCAwO1xuICB9XG5cbiAgYWRkWWVhcnMoeWVhcnM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2Vjb25kcyArPSBCaWdJbnQoeWVhcnMpICogU0VDT05EU19QRVJfWUVBUjtcbiAgfVxuXG4gIHN1YlllYXJzKHllYXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlY29uZHMgLT0gQmlnSW50KHllYXJzKSAqIFNFQ09ORFNfUEVSX1lFQVI7XG4gIH1cblxuICBnZXRXZWVrcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcnNlKClbXCJ3ZWVrc1wiXSB8fCAwO1xuICB9XG5cbiAgYWRkV2Vla3Mod2Vla3M6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2Vjb25kcyArPSBCaWdJbnQod2Vla3MpICogU0VDT05EU19QRVJfV0VFSztcbiAgfVxuXG4gIHN1YldlZWtzKHdlZWtzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlY29uZHMgLT0gQmlnSW50KHdlZWtzKSAqIFNFQ09ORFNfUEVSX1dFRUs7XG4gIH1cblxuICBnZXREYXlzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2UoKVtcImRheXNcIl0gfHwgMDtcbiAgfVxuXG4gIGFkZERheXMoZGF5czogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZWNvbmRzICs9IEJpZ0ludChkYXlzKSAqIFNFQ09ORFNfUEVSX0RBWTtcbiAgfVxuXG4gIHN1YkRheXMoZGF5czogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZWNvbmRzIC09IEJpZ0ludChkYXlzKSAqIFNFQ09ORFNfUEVSX0RBWTtcbiAgfVxuXG4gIGdldEhvdXJzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2UoKVtcImhvdXJzXCJdIHx8IDA7XG4gIH1cblxuICBhZGRIb3Vycyhob3VyczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZWNvbmRzICs9IEJpZ0ludChob3VycykgKiBTRUNPTkRTX1BFUl9IT1VSO1xuICB9XG5cbiAgc3ViSG91cnMoaG91cnM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2Vjb25kcyAtPSBCaWdJbnQoaG91cnMpICogU0VDT05EU19QRVJfSE9VUjtcbiAgfVxuXG4gIGdldE1pbnV0ZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZSgpW1wibWludXRlc1wiXSB8fCAwO1xuICB9XG5cbiAgYWRkTWludXRlcyhtaW51dGVzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlY29uZHMgKz0gQmlnSW50KG1pbnV0ZXMpICogU0VDT05EU19QRVJfTUlOVVRFO1xuICB9XG5cbiAgc3ViTWludXRlcyhtaW51dGVzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNlY29uZHMgLT0gQmlnSW50KG1pbnV0ZXMpICogU0VDT05EU19QRVJfTUlOVVRFO1xuICB9XG5cbiAgZ2V0U2Vjb25kcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcnNlKClbXCJzZWNvbmRzXCJdIHx8IDA7XG4gIH1cblxuICBhZGRTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2Vjb25kcyArPSBCaWdJbnQoc2Vjb25kcyk7XG4gIH1cblxuICBzdWJTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2Vjb25kcyAtPSBCaWdJbnQoc2Vjb25kcyk7XG4gIH1cblxuICBnZXRNaWxsaXNlY29uZHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZSgpW1wibWlsbGlzZWNvbmRzXCJdIHx8IDA7XG4gIH1cblxuICBhZGRNaWxsaXNlY29uZHMobWlsbGlzZWNvbmRzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm5hbm9zZWNvbmRzICs9IG1pbGxpc2Vjb25kcyAqIDFlNjtcbiAgfVxuXG4gIHN1Yk1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubmFub3NlY29uZHMgLT0gbWlsbGlzZWNvbmRzICogMWU2O1xuICB9XG5cbiAgZ2V0TWljcm9zZWNvbmRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2UoKVtcIm1pY3Jvc2Vjb25kc1wiXSB8fCAwO1xuICB9XG5cbiAgYWRkTWljcm9zZWNvbmRzKG1pY3Jvc2Vjb25kczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5uYW5vc2Vjb25kcyArPSBtaWNyb3NlY29uZHMgKiAxZTM7XG4gIH1cblxuICBzdWJNaWNyb3NlY29uZHMobWljcm9zZWNvbmRzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm5hbm9zZWNvbmRzIC09IG1pY3Jvc2Vjb25kcyAqIDFlMztcbiAgfVxuXG4gIGdldE5hbm9zZWNvbmRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2UoKVtcIm5hbm9zZWNvbmRzXCJdIHx8IDA7XG4gIH1cblxuICBhZGROYW5vc2Vjb25kcyhuYW5vc2Vjb25kczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5uYW5vc2Vjb25kcyArPSBuYW5vc2Vjb25kcztcbiAgfVxuXG4gIHN1Yk5hbm9zZWNvbmRzKG5hbm9zZWNvbmRzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm5hbm9zZWNvbmRzIC09IG5hbm9zZWNvbmRzO1xuICB9XG5cbiAgYXNZZWFycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFzRGF5cygpIC8gMzY1O1xuICB9XG5cbiAgYXNXZWVrcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFzRGF5cygpIC8gNztcbiAgfVxuXG4gIGFzRGF5cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFzSG91cnMoKSAvIDI0O1xuICB9XG5cbiAgYXNIb3VycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFzTWludXRlcygpIC8gNjA7XG4gIH1cblxuICBhc01pbnV0ZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hc1NlY29uZHMoKSAvIDYwO1xuICB9XG5cbiAgYXNTZWNvbmRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYXNNaWxsaXNlY29uZHMoKSAvIDFlMztcbiAgfVxuXG4gIGFzTWlsbGlzZWNvbmRzKCk6IG51bWJlciB7XG4gICAgY29uc3QgbXMgPSB0aGlzLnNlY29uZHMgKiAxXzAwMG4gKyBCaWdJbnQodGhpcy5uYW5vc2Vjb25kcykgLyAxXzAwMF8wMDBuO1xuICAgIGNvbnN0IHVzID0gKHRoaXMubmFub3NlY29uZHMgJSAxZTYpIC8gMWU2O1xuXG4gICAgcmV0dXJuIE51bWJlcihtcykgKyB1cztcbiAgfVxuXG4gIGFzTWljcm9zZWNvbmRzKCk6IG51bWJlciB7XG4gICAgY29uc3QgdXMgPSB0aGlzLnNlY29uZHMgKiAxXzAwMF8wMDBuICsgQmlnSW50KHRoaXMubmFub3NlY29uZHMpIC8gMV8wMDBuO1xuICAgIGNvbnN0IG5zID0gKHRoaXMubmFub3NlY29uZHMgJSAxZTMpIC8gMWUzO1xuXG4gICAgcmV0dXJuIE51bWJlcih1cykgKyBucztcbiAgfVxuXG4gIGFzTmFub3NlY29uZHMoKTogbnVtYmVyIHtcbiAgICBjb25zdCBucyA9IHRoaXMuc2Vjb25kcyAqIDFfMDAwXzAwMF8wMDBuICsgQmlnSW50KHRoaXMubmFub3NlY29uZHMpO1xuXG4gICAgcmV0dXJuIE51bWJlcihucyk7XG4gIH1cblxuICAvLyBJU08gODYwMSBkdXJhdGlvbiBmb3JtYXRcbiAgLy8gZHByaW50LWlnbm9yZVxuICB0b0lTT1N0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IG8gPSB0aGlzLnBhcnNlKCk7XG4gICAgbGV0IHMgPSBcIlBcIjtcblxuICAgIGlmIChcInllYXJzXCIgICBpbiBvKSBzICs9IG8ueWVhcnMgICArIFwiWVwiO1xuICAgIGlmIChcIndlZWtzXCIgICBpbiBvKSBzICs9IG8ud2Vla3MgICArIFwiV1wiO1xuICAgIGlmIChcImRheXNcIiAgICBpbiBvKSBzICs9IG8uZGF5cyAgICArIFwiRFwiO1xuICAgIGlmIChcImhvdXJzXCIgICBpbiBvKSBzICs9IG8uaG91cnMgICArIFwiSFwiO1xuICAgIGlmIChcIm1pbnV0ZXNcIiBpbiBvKSBzICs9IG8ubWludXRlcyArIFwiTVwiO1xuICAgIGlmIChcInNlY29uZHNcIiBpbiBvKSBzICs9IG8uc2Vjb25kcyArIFwiU1wiO1xuICAgIGlmIChzID09PSBcIlBcIikgcyArPSBcIjBTXCI7XG5cbiAgICByZXR1cm4gc1xuICB9XG5cbiAgY2xvbmUoKTogdGhpcyB7XG4gICAgY29uc3QgVGhpcyA9IHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIER1cmF0aW9uO1xuXG4gICAgcmV0dXJuIG5ldyBUaGlzKHRoaXMpIGFzIHRoaXM7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxpQ0FHTztBQUNQLG9CQUtPO0FBQ1AsbUJBQTZCO0FBVTdCLElBQU0sc0JBQXNCO0FBRTVCLElBQU0scUJBQXFCO0FBQzNCLElBQU0sbUJBQW1CLE1BQU07QUFDL0IsSUFBTSxrQkFBa0IsTUFBTTtBQUM5QixJQUFNLG1CQUFtQixLQUFLO0FBQzlCLElBQU0sbUJBQW1CLE9BQU87QUFDaEMsSUFBTSw4QkFBOEI7QUFDcEMsSUFBTSw4QkFBOEI7QUFDcEMsSUFBTSx5QkFBeUI7QUFFL0IsSUFBTSxjQUFjO0FBS3BCLElBQXFCLFlBQXJCLE1BQXFCLGtCQUFpQiwyQkFBQUEsU0FBSztBQUFBLEVBQ3pDLFdBQVcsTUFBTTtBQUNmLFdBQU8sSUFBSSxLQUFLLENBQUMsYUFBYSxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQ3hDO0FBQUEsRUFFQSxXQUFXLE9BQU87QUFDaEIsV0FBTyxJQUFJLEtBQUssQ0FBQztBQUFBLEVBQ25CO0FBQUEsRUFFQSxPQUFPLE1BQU0sT0FBZTtBQUMxQixXQUFPLElBQUksS0FBSyxRQUFRLEdBQUc7QUFBQSxFQUM3QjtBQUFBLEVBRUEsT0FBTyxNQUFNLE9BQWU7QUFDMUIsV0FBTyxJQUFJLEtBQUssUUFBUSxHQUFHO0FBQUEsRUFDN0I7QUFBQSxFQUVBLE9BQU8sS0FBSyxNQUFjO0FBQ3hCLFdBQU8s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QXFCO0FBQzVCLFNBQUssV0FBVyxPQUFPLEtBQUssSUFBSTtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxTQUFTLE9BQXFCO0FBQzVCLFNBQUssV0FBVyxPQUFPLEtBQUssSUFBSTtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxXQUFtQjtBQUNqQixXQUFPLEtBQUssTUFBTSxFQUFFLE9BQU8sS0FBSztBQUFBLEVBQ2xDO0FBQUEsRUFFQSxTQUFTLE9BQXFCO0FBQzVCLFNBQUssV0FBVyxPQUFPLEtBQUssSUFBSTtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxTQUFTLE9BQXFCO0FBQzVCLFNBQUssV0FBVyxPQUFPLEtBQUssSUFBSTtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxVQUFrQjtBQUNoQixXQUFPLEtBQUssTUFBTSxFQUFFLE1BQU0sS0FBSztBQUFBLEVBQ2pDO0FBQUEsRUFFQSxRQUFRLE1BQW9CO0FBQzFCLFNBQUssV0FBVyxPQUFPLElBQUksSUFBSTtBQUFBLEVBQ2pDO0FBQUEsRUFFQSxRQUFRLE1BQW9CO0FBQzFCLFNBQUssV0FBVyxPQUFPLElBQUksSUFBSTtBQUFBLEVBQ2pDO0FBQUEsRUFFQSxXQUFtQjtBQUNqQixXQUFPLEtBQUssTUFBTSxFQUFFLE9BQU8sS0FBSztBQUFBLEVBQ2xDO0FBQUEsRUFFQSxTQUFTLE9BQXFCO0FBQzVCLFNBQUssV0FBVyxPQUFPLEtBQUssSUFBSTtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxTQUFTLE9BQXFCO0FBQzVCLFNBQUssV0FBVyxPQUFPLEtBQUssSUFBSTtBQUFBLEVBQ2xDO0FBQUEsRUFFQSxhQUFxQjtBQUNuQixXQUFPLEtBQUssTUFBTSxFQUFFLFNBQVMsS0FBSztBQUFBLEVBQ3BDO0FBQUEsRUFFQSxXQUFXLFNBQXVCO0FBQ2hDLFNBQUssV0FBVyxPQUFPLE9BQU8sSUFBSTtBQUFBLEVBQ3BDO0FBQUEsRUFFQSxXQUFXLFNBQXVCO0FBQ2hDLFNBQUssV0FBVyxPQUFPLE9BQU8sSUFBSTtBQUFBLEVBQ3BDO0FBQUEsRUFFQSxhQUFxQjtBQUNuQixXQUFPLEtBQUssTUFBTSxFQUFFLFNBQVMsS0FBSztBQUFBLEVBQ3BDO0FBQUEsRUFFQSxXQUFXLFNBQXVCO0FBQ2hDLFNBQUssV0FBVyxPQUFPLE9BQU87QUFBQSxFQUNoQztBQUFBLEVBRUEsV0FBVyxTQUF1QjtBQUNoQyxTQUFLLFdBQVcsT0FBTyxPQUFPO0FBQUEsRUFDaEM7QUFBQSxFQUVBLGtCQUEwQjtBQUN4QixXQUFPLEtBQUssTUFBTSxFQUFFLGNBQWMsS0FBSztBQUFBLEVBQ3pDO0FBQUEsRUFFQSxnQkFBZ0IsY0FBNEI7QUFDMUMsU0FBSyxlQUFlLGVBQWU7QUFBQSxFQUNyQztBQUFBLEVBRUEsZ0JBQWdCLGNBQTRCO0FBQzFDLFNBQUssZUFBZSxlQUFlO0FBQUEsRUFDckM7QUFBQSxFQUVBLGtCQUEwQjtBQUN4QixXQUFPLEtBQUssTUFBTSxFQUFFLGNBQWMsS0FBSztBQUFBLEVBQ3pDO0FBQUEsRUFFQSxnQkFBZ0IsY0FBNEI7QUFDMUMsU0FBSyxlQUFlLGVBQWU7QUFBQSxFQUNyQztBQUFBLEVBRUEsZ0JBQWdCLGNBQTRCO0FBQzFDLFNBQUssZUFBZSxlQUFlO0FBQUEsRUFDckM7QUFBQSxFQUVBLGlCQUF5QjtBQUN2QixXQUFPLEtBQUssTUFBTSxFQUFFLGFBQWEsS0FBSztBQUFBLEVBQ3hDO0FBQUEsRUFFQSxlQUFlLGFBQTJCO0FBQ3hDLFNBQUssZUFBZTtBQUFBLEVBQ3RCO0FBQUEsRUFFQSxlQUFlLGFBQTJCO0FBQ3hDLFNBQUssZUFBZTtBQUFBLEVBQ3RCO0FBQUEsRUFFQSxVQUFrQjtBQUNoQixXQUFPLEtBQUssT0FBTyxJQUFJO0FBQUEsRUFDekI7QUFBQSxFQUVBLFVBQWtCO0FBQ2hCLFdBQU8sS0FBSyxPQUFPLElBQUk7QUFBQSxFQUN6QjtBQUFBLEVBRUEsU0FBaUI7QUFDZixXQUFPLEtBQUssUUFBUSxJQUFJO0FBQUEsRUFDMUI7QUFBQSxFQUVBLFVBQWtCO0FBQ2hCLFdBQU8sS0FBSyxVQUFVLElBQUk7QUFBQSxFQUM1QjtBQUFBLEVBRUEsWUFBb0I7QUFDbEIsV0FBTyxLQUFLLFVBQVUsSUFBSTtBQUFBLEVBQzVCO0FBQUEsRUFFQSxZQUFvQjtBQUNsQixXQUFPLEtBQUssZUFBZSxJQUFJO0FBQUEsRUFDakM7QUFBQSxFQUVBLGlCQUF5QjtBQUN2QixVQUFNLEtBQUssS0FBSyxVQUFVLFFBQVMsT0FBTyxLQUFLLFdBQVcsSUFBSTtBQUM5RCxVQUFNLEtBQU0sS0FBSyxjQUFjLE1BQU87QUFFdEMsV0FBTyxPQUFPLEVBQUUsSUFBSTtBQUFBLEVBQ3RCO0FBQUEsRUFFQSxpQkFBeUI7QUFDdkIsVUFBTSxLQUFLLEtBQUssVUFBVSxXQUFhLE9BQU8sS0FBSyxXQUFXLElBQUk7QUFDbEUsVUFBTSxLQUFNLEtBQUssY0FBYyxNQUFPO0FBRXRDLFdBQU8sT0FBTyxFQUFFLElBQUk7QUFBQSxFQUN0QjtBQUFBLEVBRUEsZ0JBQXdCO0FBQ3RCLFVBQU0sS0FBSyxLQUFLLFVBQVUsY0FBaUIsT0FBTyxLQUFLLFdBQVc7QUFFbEUsV0FBTyxPQUFPLEVBQUU7QUFBQSxFQUNsQjtBQUFBO0FBQUE7QUFBQSxFQUlBLGNBQXNCO0FBQ3BCLFVBQU0sSUFBSSxLQUFLLE1BQU07QUFDckIsUUFBSSxJQUFJO0FBRVIsUUFBSSxXQUFhLEVBQUcsTUFBSyxFQUFFLFFBQVU7QUFDckMsUUFBSSxXQUFhLEVBQUcsTUFBSyxFQUFFLFFBQVU7QUFDckMsUUFBSSxVQUFhLEVBQUcsTUFBSyxFQUFFLE9BQVU7QUFDckMsUUFBSSxXQUFhLEVBQUcsTUFBSyxFQUFFLFFBQVU7QUFDckMsUUFBSSxhQUFhLEVBQUcsTUFBSyxFQUFFLFVBQVU7QUFDckMsUUFBSSxhQUFhLEVBQUcsTUFBSyxFQUFFLFVBQVU7QUFDckMsUUFBSSxNQUFNLElBQUssTUFBSztBQUVwQixXQUFPO0FBQUEsRUFDVDtBQUFBLEVBRUEsUUFBYztBQUNaLFVBQU0sT0FBTyxLQUFLO0FBRWxCLFdBQU8sSUFBSSxLQUFLLElBQUk7QUFBQSxFQUN0QjtBQUNGO0FBN1gyQztBQUEzQyxJQUFxQixXQUFyQjsiLAogICJuYW1lcyI6IFsiQmFzZSJdCn0K